From afbd9e6d34300cf352e4d7eb122e7a224bcced2c Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 26 Sep 2023 09:22:17 +0200 Subject: [PATCH] feat: Use CAPI for provisioning clusters (#424) * Bump cluster-api-migration * bump migrator * Bump cluster-api-migration * bump migrator * bump migrator * bump migrator * Update GCP migration config * optimize imports * Remove --cluster-api flag * update google bootstrap flags * Fix deploy logic * bump migrator * update destroy bootstrap flags for google provider * Check if cluster exists * update destroy steps * Fix deploy * Add logging * Add missing new line * Fix log types * Add client ID and secret to init survey * remove cluster resources during destroy * Fix wait command * Remove plural clusters watch command * Run go mod tidy * Fix unit tests * Print step numbers for bootstrap and migration * Remove plural cluster watch command and some unused code * Remove build step and update descriptions for CAPI deploy * Refactor deploy and migration steps * Refactor destroy steps * Add destroy logs * Refactor * Move CAPI related logic from cmd to pkg * Extract common code * Move checks * Fix minor import issue * Cleanup * Remove unused flag Remove duplicated command * Minor improvements * Add TODO * add post install step * Update cluster readiness check * Fix merge conflicts * Update migration configuration for gcp * Export execute steps function * Refactor * Refactor migration * Add tests for common functions * Improve GCP preflight checks * Add tests for migration functions * Update messaging * add kind provider * Raise destroy timeout * Refactor cilium.go * Fix resource group and storage account name validation * Add command to check if chart is installed * save kubeconfig * add kind configuration * fix kind configuration * fix docker destroy * normilize kind * update e2e test * update github action * bump kind action * create bootstrap namespace * create bootstrap namespace * add extra debug * do not run migrate when cluster already migrated * read sa email from credentials file * add vendor dir to gitignore * fix import cycle * add PLURAL_DISABLE_MP_TABLE_VIEW env for machine pools view * remove bootstrap operator dependencies * cilium update * refactor * split e2e tests * change name * Refactor e2e workflows * distinguish between regular and cluster api * distinguish between regular and cluster api - fix * distinguish between regular and cluster api - improvement * distinguish between regular and cluster api - improvement * distinguish between regular and cluster api - improvement * add e2e test for cluster api * enable list view for destroy * add e2e test to check installed packages * fix linter * Update github.com/gin-gonic/gin to avoid CVE * Bump dependencies * Read Go version from go.mod in CI * Bump dependencies * improve error handling for deoploy/destroy cluster * e2e update machine pool * Refactor storage account code * Fixes * Fix unit tests * Fix kind delete * remove role permissions check for gcp SA and use local CLI ADC for migration and bootstraping * fetch AvailabilityZones * fix unit test * Use Microsoft Graph SDK to create service principal and get client ID and secret * set bootstrapMode flag for gcp during the bootstrap phase * fix fetching zones * Add proper role assignment to Azure service principal * fix execute not showing error and add workaround for tf value templating issue * Minor improvements * read gcp credentials from adc file * Fix client ID * change migrate to run deploy at the end and run gcp in bootstrapMode during migrate * update gcp permissions check * set azure bootstrap mode flag Signed-off-by: David van der Spek * Add commit flag at the end of running migrate (#436) It's very likely a large number of users will forget to manage their git, we should just remove that possibility w/ this. * do not use bootstrap mode for the gcp migration * improve gcp permissions check messaging * Fix typo * Enable OIDC issuer for Azure clusters * add some todo comments Signed-off-by: David van der Spek * Create temporary service principal with password during deploy and destroy * Refactor * e2e update machine pool version * Fix destroy * update bootstrap step building logic * add plural build-values REPO * init bubbletea tui * revert bootstrap step changes * Resolve Helm issue * Extract methods from bootstrap steps * Fix destroy * Modify aws auth configmap manually to solve migration chicken-egg (#437) * Modify aws auth configmap manually to solve migration chicken-egg This allows us to reusably modify the aws-auth configmap for eks from the client which should help resolve some migrration-time issues * add to migrate steps * Add secret list and create funcs * Add kube initializer with context * add feature flag for CAPI stuff * fix build * Add kube initializer with context * set aws credentials * cleanup build values command * use dynamic credentials for GCP without storing them on the repo * lint fix * Refactor * Rename file * allow overriding enable field of helm modules * Fix var name * Simplify migration * Restore uninstall azure-identity package step * update gcp permissions check name * fix nil pointer error when listing uninstalled package * improve fetching AZs * bump migrator version (#440) Signed-off-by: David van der Spek * fix gcp provider name * remove credentials * Properly normalize Google -> GCP provider name and add migration step to update google provider name to gcp * update go.sum * make genmock * Fix executor println (#443) This was always saying "actionName " instead of the passed action name. * bump migrator * small refactor * Bump migrator version * fix null replacment * Deprecate values.yaml migration * bump migrator * Fix Azure destroy after migration * Refactor step filtering * Fix Azure identity bug * add posthog feature call timeout and fix caching * cleanup some steps * Switch google to gcp during init * Update messaging for GCP * bump migrator * update go.sum * fix linters * ci: ensure docker buildx removes the running nodes (#448) Signed-off-by: David van der Spek * Add semver validation for required bootstrap tf/helm modules on migration (#445) There are now some requirements for performing a migration tied to our helm/tf. This will at least guarantee they're installed at migrate time. * remove default values from migration values.yaml * go mod tidy * update AZs during migration * disable external-dns and plural-certmanager-webhook * Do not delete bootstrap cluster on failed deploy * fix disabling plural-certmanager-webhook Signed-off-by: David van der Spek * also disable external dns on gcp and azure Signed-off-by: David van der Spek * Update step handling * Add retry mechanism * Fix step numbering * Fix unit tests * Further improvements * Use map to store provider tags * add move state backup and restore to capi deploy * Further improvements * Fix OIDC issuer step * Fix typo * add initial step confirm support * move capi backup to .plural dir and add multi-cluster backup support * Remove tui package * add conditional recovery steps when cluster issues are detected --------- Signed-off-by: David van der Spek Co-authored-by: Lukasz Zajaczkowski Co-authored-by: Sebastian Florek Co-authored-by: David van der Spek Co-authored-by: michaeljguarino Co-authored-by: David van der Spek <28541758+DavidSpek@users.noreply.github.com> --- .github/workflows/codeql.yml | 2 +- .github/workflows/e2e.yaml | 48 +- .gitignore | 26 +- Makefile | 4 +- cmd/plural/api.go | 7 +- cmd/plural/bootstrap.go | 370 +++++++ cmd/plural/bundle.go | 12 +- cmd/plural/clusters.go | 126 ++- cmd/plural/deploy.go | 52 +- cmd/plural/packages.go | 8 +- cmd/plural/plural.go | 18 + cmd/plural/validation.go | 13 +- cmd/plural/workspace.go | 28 +- go.mod | 404 ++++--- go.sum | 1366 +++++++++++++++++++----- hack/e2e/kind-install-for-capd.sh | 116 ++ hack/e2e/setup-plural.sh | 12 +- pkg/api/charts.go | 4 + pkg/api/client.go | 7 +- pkg/api/cluster.go | 2 +- pkg/api/constants.go | 11 + pkg/api/recipes.go | 4 +- pkg/api/terraform.go | 5 +- pkg/api/users.go | 4 +- pkg/api/utils.go | 14 +- pkg/api/utils_test.go | 24 +- pkg/application/clientset.go | 4 +- pkg/application/printer.go | 1 - pkg/bootstrap/aws/auth.go | 137 +++ pkg/bootstrap/azure/auth.go | 112 ++ pkg/bootstrap/bootstrap.go | 240 +++++ pkg/bootstrap/check.go | 92 ++ pkg/bootstrap/cilium.go | 140 +++ pkg/bootstrap/common.go | 325 ++++++ pkg/bootstrap/common_test.go | 119 +++ pkg/bootstrap/destroy.go | 117 ++ pkg/bootstrap/manifests.go | 132 +++ pkg/bootstrap/migrate.go | 412 +++++++ pkg/bootstrap/types.go | 32 + pkg/bootstrap/validation/migration.go | 69 ++ pkg/bundle/configuration_test.go | 2 +- pkg/cluster/clientset.go | 41 + pkg/cluster/cluster.go | 83 ++ pkg/cluster/printer.go | 84 ++ pkg/cluster/register.go | 38 + pkg/cluster/waiter.go | 75 ++ pkg/executor/default.go | 8 + pkg/executor/execution.go | 4 +- pkg/executor/step.go | 2 +- pkg/exp/env.go | 15 + pkg/exp/features.go | 22 + pkg/exp/posthog.go | 50 + pkg/exp/posthog/client.go | 79 ++ pkg/exp/posthog/types.go | 15 + pkg/exp/types.go | 7 + pkg/kubernetes/kube.go | 62 ++ pkg/machinepool/clientset.go | 41 + pkg/machinepool/machinepool.go | 98 ++ pkg/machinepool/printer.go | 115 ++ pkg/machinepool/register.go | 38 + pkg/machinepool/waiter.go | 294 +++++ pkg/manifest/manifest.go | 16 +- pkg/manifest/types.go | 58 +- pkg/provider/aws.go | 115 +- pkg/provider/azure.go | 226 ++-- pkg/provider/azure_test.go | 8 +- pkg/provider/azure_utils_test.go | 127 +-- pkg/provider/constants.go | 10 - pkg/provider/equinix.go | 26 +- pkg/provider/gcp.go | 46 +- pkg/provider/kind.go | 14 +- pkg/provider/permissions/gcp.go | 52 +- pkg/provider/provider.go | 37 +- pkg/provider/test.go | 10 +- pkg/scaffold/helm.go | 40 +- pkg/scaffold/template/gotpl.go | 7 +- pkg/scaffold/template/lua.go | 8 +- pkg/scaffold/terraform.go | 5 + pkg/server/setup.go | 5 +- pkg/template/funcs.go | 3 +- pkg/test/e2eclusterapi/e2e_api_test.go | 193 ++++ pkg/test/mocks/Client.go | 54 +- pkg/test/mocks/Kube.go | 84 +- pkg/ui/client.go | 2 +- pkg/utils/backup/capi.go | 81 ++ pkg/utils/backup/types.go | 14 + pkg/utils/cmd.go | 2 +- pkg/utils/map.go | 52 + pkg/utils/print.go | 4 +- pkg/utils/time.go | 28 + pkg/utils/validation.go | 34 +- pkg/wkspace/actions.go | 13 +- pkg/wkspace/minimal.go | 41 +- pkg/wkspace/validator.go | 8 +- plural_bootstrap_procedure.drawio | 221 ++++ plural_bootstrap_procedure.drawio.png | Bin 0 -> 835023 bytes 96 files changed, 6564 insertions(+), 872 deletions(-) create mode 100644 cmd/plural/bootstrap.go create mode 100755 hack/e2e/kind-install-for-capd.sh create mode 100644 pkg/api/constants.go create mode 100644 pkg/bootstrap/aws/auth.go create mode 100644 pkg/bootstrap/azure/auth.go create mode 100644 pkg/bootstrap/bootstrap.go create mode 100644 pkg/bootstrap/check.go create mode 100644 pkg/bootstrap/cilium.go create mode 100644 pkg/bootstrap/common.go create mode 100644 pkg/bootstrap/common_test.go create mode 100644 pkg/bootstrap/destroy.go create mode 100644 pkg/bootstrap/manifests.go create mode 100644 pkg/bootstrap/migrate.go create mode 100644 pkg/bootstrap/types.go create mode 100644 pkg/bootstrap/validation/migration.go create mode 100644 pkg/cluster/clientset.go create mode 100644 pkg/cluster/cluster.go create mode 100644 pkg/cluster/printer.go create mode 100644 pkg/cluster/register.go create mode 100644 pkg/cluster/waiter.go create mode 100644 pkg/exp/env.go create mode 100644 pkg/exp/features.go create mode 100644 pkg/exp/posthog.go create mode 100644 pkg/exp/posthog/client.go create mode 100644 pkg/exp/posthog/types.go create mode 100644 pkg/exp/types.go create mode 100644 pkg/machinepool/clientset.go create mode 100644 pkg/machinepool/machinepool.go create mode 100644 pkg/machinepool/printer.go create mode 100644 pkg/machinepool/register.go create mode 100644 pkg/machinepool/waiter.go delete mode 100644 pkg/provider/constants.go create mode 100644 pkg/test/e2eclusterapi/e2e_api_test.go create mode 100644 pkg/utils/backup/capi.go create mode 100644 pkg/utils/backup/types.go create mode 100644 pkg/utils/time.go create mode 100644 plural_bootstrap_procedure.drawio create mode 100644 plural_bootstrap_procedure.drawio.png diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 2c3d0686d..05db253bc 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -28,7 +28,7 @@ jobs: fetch-depth: 0 - uses: actions/setup-go@v3 with: - go-version: 1.18 + go-version-file: go.mod - uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index e27fa8784..5dc6d450b 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -4,13 +4,53 @@ on: branches: - main jobs: + create-cluster-capi: + name: Create cluster with Cluster API + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Create kind cluster + uses: helm/kind-action@v1.8.0 + with: + install_only: true + - run: | + wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg + echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list + sudo apt-get update + sudo apt-get install -y terraform + - run: | + GOBIN="$HOME"/bin make build-cli + chmod 755 plural.o + mv plural.o /usr/local/bin/plural + - run: hack/e2e/kind-install-for-capd.sh + - run: hack/e2e/setup-plural.sh + env: + CLI_E2E_CONF: ${{ secrets.CLI_E2E_CONF }} + CLI_E2E_IDENTITY_FILE: ${{ secrets.CLI_E2E_IDENTITY_FILE }} + CLI_E2E_KEY_FILE: ${{ secrets.CLI_E2E_KEY_FILE }} + CLI_E2E_PUBLIC_KEY: ${{ secrets.CLI_E2E_PUBLIC_KEY }} + CLI_E2E_PRIVATE_KEY: ${{ secrets.CLI_E2E_PRIVATE_KEY }} + CLI_E2E_SHARING_PRIVATE_KEY: ${{ secrets.CLI_E2E_SHARING_PRIVATE_KEY }} + CLI_E2E_SHARING_PUBLIC_KEY: ${{ secrets.CLI_E2E_SHARING_PUBLIC_KEY }} + USE_CLUSTER_API: true + - run: go test -v -race ./pkg/test/e2eclusterapi/... -tags="e2e" + - run: | + cd $HOME/test + plural destroy --force --all --commit="" + env: + PLURAL_DESTROY_CONFIRM: true + PLURAL_DESTROY_AFFIRM_UNINSTALL_APPS: true + PLURAL_DISABLE_MP_TABLE_VIEW: true create-cluster: + if: false + name: Create cluster runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - - name: Create k8s Kind Cluster - uses: helm/kind-action@v1.5.0 + - name: Create kind cluster + uses: helm/kind-action@v1.8.0 with: install_only: true - run: | @@ -31,10 +71,12 @@ jobs: CLI_E2E_PRIVATE_KEY: ${{ secrets.CLI_E2E_PRIVATE_KEY }} CLI_E2E_SHARING_PRIVATE_KEY: ${{ secrets.CLI_E2E_SHARING_PRIVATE_KEY }} CLI_E2E_SHARING_PUBLIC_KEY: ${{ secrets.CLI_E2E_SHARING_PUBLIC_KEY }} + INSTALL_APP: console + INSTALL_RECIPE: console-kind - run: go test -v -race ./pkg/test/e2e/... -tags="e2e" - run: | cd $HOME/test plural destroy --force --all --commit="" env: PLURAL_DESTROY_CONFIRM: true - PLURAL_DESTROY_AFFIRM_UNINSTALL_APPS: true + PLURAL_DESTROY_AFFIRM_UNINSTALL_APPS: true \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5140c33f5..b284f7980 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,21 @@ -# Binaries for programs and plugins +# IDE files +.idea/ +.vscode/ + +# Testing files +context.yaml +workspace.yaml + +# Build files and binaries +dist/ +build/ *.exe *.exe~ *.dll *.so *.o *.dylib +__debug_bin # Test binary, built with `go test -c` *.test @@ -13,15 +24,6 @@ *.out forge*.o plural*.o -# Dependency directories (remove the comment below to include it) -# vendor/ -# IDE dirs -.idea/ - -dist/ -build/ - -# Testing files -context.yaml -workspace.yaml \ No newline at end of file +# Vendored dependencies +vendor/ diff --git a/Makefile b/Makefile index c7ef387c4..3d17679e8 100644 --- a/Makefile +++ b/Makefile @@ -37,8 +37,8 @@ git-push: git push .PHONY: install -install: build-cli-ui - mv $(OUTFILE) ~/bin/plural +install: + go install -ldflags '$(LDFLAGS)' . .PHONY: build-cli build-cli: ## Build a CLI binary for the host architecture without embedded UI diff --git a/cmd/plural/api.go b/cmd/plural/api.go index 65a952c53..698d8ea24 100644 --- a/cmd/plural/api.go +++ b/cmd/plural/api.go @@ -1,10 +1,11 @@ package plural import ( - "github.com/pluralsh/plural/pkg/api" - "github.com/pluralsh/plural/pkg/utils" "github.com/pluralsh/polly/algorithms" "github.com/urfave/cli" + + "github.com/pluralsh/plural/pkg/api" + "github.com/pluralsh/plural/pkg/utils" ) func (p *Plural) apiCommands() []cli.Command { @@ -111,7 +112,7 @@ func (p *Plural) handleCharts(c *cli.Context) error { func (p *Plural) handleTerraforma(c *cli.Context) error { p.InitPluralClient() - tfs, err := p.GetTerraforma(c.Args().First()) + tfs, err := p.GetTerraform(c.Args().First()) if err != nil { return api.GetErrorResponse(err, "GetTerraforma") } diff --git a/cmd/plural/bootstrap.go b/cmd/plural/bootstrap.go new file mode 100644 index 000000000..3feacdb51 --- /dev/null +++ b/cmd/plural/bootstrap.go @@ -0,0 +1,370 @@ +package plural + +import ( + "context" + "fmt" + "strings" + "time" + + "github.com/pkg/errors" + "github.com/urfave/cli" + corev1 "k8s.io/api/core/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" + clientcmdapi "k8s.io/client-go/tools/clientcmd/api" + clusterapioperator "sigs.k8s.io/cluster-api-operator/api/v1alpha1" + clusterapi "sigs.k8s.io/cluster-api/api/v1beta1" + apiclient "sigs.k8s.io/cluster-api/cmd/clusterctl/client" + ctrlruntimeclient "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/kind/pkg/cluster" + + "github.com/pluralsh/plural/pkg/manifest" + + "github.com/pluralsh/plural/pkg/kubernetes" + "github.com/pluralsh/plural/pkg/provider" + "github.com/pluralsh/plural/pkg/utils" +) + +var runtimescheme = runtime.NewScheme() + +func init() { + utilruntime.Must(corev1.AddToScheme(runtimescheme)) + utilruntime.Must(apiextensionsv1.AddToScheme(runtimescheme)) + utilruntime.Must(clusterapi.AddToScheme(runtimescheme)) + utilruntime.Must(clusterapioperator.AddToScheme(runtimescheme)) +} + +func (p *Plural) bootstrapCommands() []cli.Command { + return []cli.Command{ + { + Name: "cluster", + Subcommands: p.bootstrapClusterCommands(), + Usage: "Manage bootstrap cluster", + }, + { + Name: "namespace", + Subcommands: p.namespaceCommands(), + Usage: "Manage bootstrap cluster", + }, + } +} + +func (p *Plural) namespaceCommands() []cli.Command { + return []cli.Command{ + { + Name: "create", + ArgsUsage: "NAME", + Usage: "Creates bootstrap namespace", + Flags: []cli.Flag{ + cli.BoolFlag{ + Name: "skip-if-exists", + Usage: "skip creating when namespace exists", + }, + }, + Action: latestVersion(initKubeconfig(requireArgs(p.handleCreateNamespace, []string{"NAME"}))), + }, + } +} + +func (p *Plural) bootstrapClusterCommands() []cli.Command { + return []cli.Command{ + { + Name: "create", + ArgsUsage: "NAME", + Usage: "Creates bootstrap cluster", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "image", + Usage: "kind image to use", + }, + cli.BoolFlag{ + Name: "skip-if-exists", + Usage: "skip creating when cluster exists", + }, + }, + Action: latestVersion(requireArgs(handleCreateCluster, []string{"NAME"})), + }, + { + Name: "delete", + ArgsUsage: "NAME", + Usage: "Deletes bootstrap cluster", + Action: latestVersion(requireArgs(handleDeleteCluster, []string{"NAME"})), + }, + { + Name: "move", + Usage: "Move cluster API objects", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "kubeconfig", + Usage: "path to the kubeconfig file for the source management cluster. If unspecified, default discovery rules apply.", + }, + cli.StringFlag{ + Name: "kubeconfig-context", + Usage: "context to be used within the kubeconfig file for the source management cluster. If empty, current context will be used.", + }, + cli.StringFlag{ + Name: "to-kubeconfig", + Usage: "path to the kubeconfig file to use for the destination management cluster.", + }, + cli.StringFlag{ + Name: "to-kubeconfig-context", + Usage: "Context to be used within the kubeconfig file for the destination management cluster. If empty, current context will be used.", + }, + }, + Action: latestVersion(p.handleMoveCluster), + }, + { + Name: "destroy-cluster-api", + ArgsUsage: "NAME", + Usage: "Destroy cluster API", + Action: latestVersion(requireArgs(p.handleDestroyClusterAPI, []string{"NAME"})), + }, + } +} + +func (p *Plural) handleDestroyClusterAPI(c *cli.Context) error { + name := c.Args().Get(0) + _, found := utils.ProjectRoot() + if !found { + return fmt.Errorf("You're not within an installation repo") + } + pm, err := manifest.FetchProject() + if err != nil { + return err + } + prov := &provider.KINDProvider{Clust: "bootstrap"} + if err := prov.KubeConfig(); err != nil { + return err + } + config, err := kubernetes.KubeConfig() + if err != nil { + return err + } + client, err := genClientFromConfig(config) + if err != nil { + return err + } + utils.Warn("Waiting for the operator ") + if err := utils.WaitFor(20*time.Minute, 10*time.Second, func() (bool, error) { + pods := &corev1.PodList{} + providerName := pm.Provider + if providerName == "kind" { + providerName = "docker" + } + selector := fmt.Sprintf("infrastructure-%s", strings.ToLower(providerName)) + if err := client.List(context.Background(), pods, ctrlruntimeclient.MatchingLabels{"cluster.x-k8s.io/provider": selector}); err != nil { + if !apierrors.IsNotFound(err) { + return false, fmt.Errorf("failed to get pods: %w", err) + } + return false, nil + } + if len(pods.Items) > 0 { + if isReady(pods.Items[0].Status.Conditions) { + return true, nil + } + } + utils.Warn(".") + return false, nil + }); err != nil { + return err + } + if err := client.Delete(context.Background(), &clusterapi.Cluster{ + ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: "bootstrap"}, + }); err != nil { + return err + } + utils.Warn("\nDeleting cluster") + return utils.WaitFor(40*time.Minute, 10*time.Second, func() (bool, error) { + if err := client.Get(context.Background(), ctrlruntimeclient.ObjectKey{Name: name, Namespace: "bootstrap"}, &clusterapi.Cluster{}); err != nil { + if !apierrors.IsNotFound(err) { + return false, fmt.Errorf("failed to get Cluster: %w", err) + } + return true, nil + } + utils.Warn(".") + return false, nil + }) +} + +func isReady(conditions []corev1.PodCondition) bool { + for _, cond := range conditions { + if cond.Type == corev1.PodReady && cond.Status == corev1.ConditionTrue { + return true + } + } + return false +} + +func (p *Plural) handleMoveCluster(c *cli.Context) error { + _, found := utils.ProjectRoot() + if !found { + return fmt.Errorf("You're not within an installation repo") + } + + client, err := apiclient.New("") + if err != nil { + return err + } + + kubeconfig := c.String("kubeconfig") + kubeconfigContext := c.String("kubeconfig-context") + toKubeconfig := c.String("to-kubeconfig") + toKubeconfigContext := c.String("to-kubeconfig-context") + + options := apiclient.MoveOptions{ + FromKubeconfig: apiclient.Kubeconfig{ + Path: kubeconfig, + Context: kubeconfigContext, + }, + ToKubeconfig: apiclient.Kubeconfig{ + Path: toKubeconfig, + Context: toKubeconfigContext, + }, + Namespace: "bootstrap", + DryRun: false, + } + if err := client.Move(options); err != nil { + return err + } + + return nil +} + +func (p *Plural) handleCreateNamespace(c *cli.Context) error { + name := c.Args().Get(0) + fmt.Printf("Creating namespace %s ...\n", name) + err := p.InitKube() + if err != nil { + return err + } + if err := p.CreateNamespace(name); err != nil { + if apierrors.IsAlreadyExists(err) { + return nil + } + return err + } + + return nil +} + +func handleDeleteCluster(c *cli.Context) error { + name := c.Args().Get(0) + provider := cluster.NewProvider() + utils.Highlight("Deleting cluster %s ...\n", name) + return provider.Delete(name, "") +} + +func handleCreateCluster(c *cli.Context) error { + name := c.Args().Get(0) + imageFlag := c.String("image") + skipCreation := c.Bool("skip-if-exists") + provider := cluster.NewProvider() + utils.Highlight("Creating cluster %s ...\n", name) + n, err := provider.ListNodes(name) + if err != nil { + return err + } + if len(n) != 0 && skipCreation { + utils.Highlight("Cluster %s already exists \n", name) + return nil + } + if err := provider.Create( + name, + cluster.CreateWithNodeImage(imageFlag), + cluster.CreateWithRetain(false), + cluster.CreateWithDisplayUsage(true), + cluster.CreateWithDisplaySalutation(true), + cluster.CreateWithRawConfig([]byte(`kind: Cluster +apiVersion: kind.x-k8s.io/v1alpha4 +networking: + ipFamily: dual +nodes: +- role: control-plane + extraMounts: + - hostPath: /var/run/docker.sock + containerPath: /var/run/docker.sock +`)), + ); err != nil { + return errors.Wrap(err, "failed to create cluster") + } + kubeconfig, err := provider.KubeConfig(name, false) + if err != nil { + return err + } + client, err := getClient(kubeconfig) + if err != nil { + return err + } + + if err := client.Create(context.Background(), &corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bootstrap", + }, + }); err != nil { + return err + } + + internalKubeconfig, err := provider.KubeConfig(name, true) + if err != nil { + return err + } + kubeconfigSecret := &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "kubeconfig", + Namespace: "bootstrap", + }, + Data: map[string][]byte{ + "value": []byte(internalKubeconfig), + }, + } + if err := client.Create(context.Background(), kubeconfigSecret); err != nil { + return err + } + + return nil +} + +func getClient(rawKubeconfig string) (ctrlruntimeclient.Client, error) { + + cfg, err := clientcmd.Load([]byte(rawKubeconfig)) + if err != nil { + return nil, err + } + clientConfig, err := getRestConfig(cfg) + if err != nil { + return nil, err + } + + return genClientFromConfig(clientConfig) +} + +func genClientFromConfig(cfg *rest.Config) (ctrlruntimeclient.Client, error) { + return ctrlruntimeclient.New(cfg, ctrlruntimeclient.Options{ + Scheme: runtimescheme, + }) +} + +func getRestConfig(cfg *clientcmdapi.Config) (*rest.Config, error) { + iconfig := clientcmd.NewNonInteractiveClientConfig( + *cfg, + "", + &clientcmd.ConfigOverrides{}, + nil, + ) + + clientConfig, err := iconfig.ClientConfig() + if err != nil { + return nil, err + } + + // Avoid blocking of the controller by increasing the QPS for user cluster interaction + clientConfig.QPS = 20 + clientConfig.Burst = 50 + + return clientConfig, nil +} diff --git a/cmd/plural/bundle.go b/cmd/plural/bundle.go index 36f42cdf6..2aea5c7a2 100644 --- a/cmd/plural/bundle.go +++ b/cmd/plural/bundle.go @@ -2,13 +2,13 @@ package plural import ( "fmt" - "strings" + + "github.com/urfave/cli" "github.com/pluralsh/plural/pkg/api" "github.com/pluralsh/plural/pkg/bundle" "github.com/pluralsh/plural/pkg/manifest" "github.com/pluralsh/plural/pkg/utils" - "github.com/urfave/cli" ) func (p *Plural) bundleCommands() []cli.Command { @@ -135,11 +135,9 @@ func (p *Plural) stackList(c *cli.Context) (err error) { func (p *Plural) listRecipes(repo string) (res []*api.Recipe, err error) { man, err := manifest.FetchProject() - prov := "" - if err == nil { - prov = strings.ToUpper(man.Provider) + if err != nil { + return } - - res, err = p.ListRecipes(repo, prov) + res, err = p.ListRecipes(repo, man.Provider) return } diff --git a/cmd/plural/clusters.go b/cmd/plural/clusters.go index 5804a4c72..91fa2624d 100644 --- a/cmd/plural/clusters.go +++ b/cmd/plural/clusters.go @@ -3,11 +3,20 @@ package plural import ( "fmt" + "github.com/urfave/cli" + "sigs.k8s.io/yaml" + "github.com/pluralsh/plural/pkg/api" + "github.com/pluralsh/plural/pkg/bootstrap" + "github.com/pluralsh/plural/pkg/bootstrap/aws" + "github.com/pluralsh/plural/pkg/bootstrap/validation" + "github.com/pluralsh/plural/pkg/cluster" "github.com/pluralsh/plural/pkg/config" + "github.com/pluralsh/plural/pkg/exp" + "github.com/pluralsh/plural/pkg/kubernetes" + "github.com/pluralsh/plural/pkg/machinepool" "github.com/pluralsh/plural/pkg/manifest" "github.com/pluralsh/plural/pkg/utils" - "github.com/urfave/cli" ) func (p *Plural) clusterCommands() []cli.Command { @@ -59,7 +68,122 @@ func (p *Plural) clusterCommands() []cli.Command { Usage: "promote pending upgrades to your cluster", Action: latestVersion(p.promoteCluster), }, + { + Name: "wait", + Usage: "waits on a cluster until it becomes ready", + ArgsUsage: "NAMESPACE NAME", + Action: latestVersion(initKubeconfig(requireArgs(handleClusterWait, []string{"NAMESPACE", "NAME"}))), + Category: "Debugging", + }, + { + Name: "mpwait", + Usage: "waits on a machine pool until it becomes ready", + ArgsUsage: "NAMESPACE NAME", + Action: latestVersion(initKubeconfig(requireArgs(handleMPWait, []string{"NAMESPACE", "NAME"}))), + Category: "Debugging", + }, + { + Name: "migrate", + Usage: "migrate to Cluster API", + Action: latestVersion(rooted(initKubeconfig(p.handleMigration))), + Category: "Publishing", + Hidden: !exp.IsFeatureEnabled(exp.EXP_PLURAL_CAPI), + }, + { + Name: "aws-auth", + Usage: "fetches the current state of your aws auth config map", + Subcommands: awsAuthCommands(), + }, + } +} + +func (p *Plural) handleMigration(_ *cli.Context) error { + p.InitPluralClient() + if err := validation.ValidateMigration(p); err != nil { + return err } + + project, err := manifest.FetchProject() + if err != nil { + return err + } + + if project.ClusterAPI { + utils.Success("Cluster already migrated.\n") + return nil + } + + return bootstrap.MigrateCluster(RunPlural) +} + +func awsAuthCommands() []cli.Command { + return []cli.Command{ + { + Name: "fetch", + Usage: "gets the current state of your aws auth configmap", + Action: handleAwsAuth, + }, + { + Name: "update", + Usage: "adds a user or role to the aws auth configmap", + Flags: []cli.Flag{ + cli.StringFlag{Name: "role-arn"}, + cli.StringFlag{Name: "user-arn"}, + }, + Action: handleModifyAwsAuth, + }, + } +} + +func handleAwsAuth(c *cli.Context) error { + auth, err := aws.FetchAuth() + if err != nil { + return err + } + + res, err := yaml.Marshal(auth) + if err != nil { + return err + } + + fmt.Println(string(res)) + return nil +} + +func handleModifyAwsAuth(c *cli.Context) error { + role, user := c.String("role-arn"), c.String("user-arn") + + if role != "" { + return aws.AddRole(role) + } + + if user != "" { + return aws.AddUser(user) + } + + return fmt.Errorf("you must specify at least one of role-arn or user-arn") +} + +func handleClusterWait(c *cli.Context) error { + namespace := c.Args().Get(0) + name := c.Args().Get(1) + kubeConf, err := kubernetes.KubeConfig() + if err != nil { + return err + } + + return cluster.Wait(kubeConf, namespace, name) +} + +func handleMPWait(c *cli.Context) error { + namespace := c.Args().Get(0) + name := c.Args().Get(1) + kubeConf, err := kubernetes.KubeConfig() + if err != nil { + return err + } + + return machinepool.WaitAll(kubeConf, namespace, name) } func (p *Plural) listClusters(c *cli.Context) error { diff --git a/cmd/plural/deploy.go b/cmd/plural/deploy.go index 98ca9a3f9..c1ab537cb 100644 --- a/cmd/plural/deploy.go +++ b/cmd/plural/deploy.go @@ -9,6 +9,7 @@ import ( "github.com/AlecAivazis/survey/v2" "github.com/pluralsh/plural/pkg/api" "github.com/pluralsh/plural/pkg/application" + "github.com/pluralsh/plural/pkg/bootstrap" "github.com/pluralsh/plural/pkg/diff" "github.com/pluralsh/plural/pkg/executor" "github.com/pluralsh/plural/pkg/kubernetes" @@ -24,6 +25,8 @@ import ( "github.com/urfave/cli" ) +const Bootstrap = "bootstrap" + func (p *Plural) getSortedInstallations(repo string) ([]*api.Installation, error) { p.InitPluralClient() installations, err := p.GetInstallations() @@ -174,7 +177,11 @@ func (p *Plural) deploy(c *cli.Context) error { p.InitPluralClient() verbose := c.Bool("verbose") repoRoot, err := git.Root() + if err != nil { + return err + } + project, err := manifest.FetchProject() if err != nil { return err } @@ -188,7 +195,6 @@ func (p *Plural) deploy(c *cli.Context) error { default: sorted, err = getSortedNames(true) } - if err != nil { return err } @@ -197,19 +203,37 @@ func (p *Plural) deploy(c *cli.Context) error { ignoreConsole := c.Bool("ignore-console") for _, repo := range sorted { - if ignoreConsole && (repo == "console" || repo == "bootstrap") { + if ignoreConsole && (repo == "console" || repo == Bootstrap) { continue } + if repo == Bootstrap && project.ClusterAPI { + ready, err := bootstrap.CheckClusterReadiness(project.Cluster, Bootstrap) + + // Stop if cluster exists, but it is not ready yet. + if err != nil && err.Error() == bootstrap.ClusterNotReadyError { + return err + } + + // If cluster does not exist bootstrap needs to be done first. + if !ready { + err := bootstrap.BootstrapCluster(RunPlural) + if err != nil { + return err + } + } + } + execution, err := executor.GetExecution(pathing.SanitizeFilepath(filepath.Join(repoRoot, repo)), "deploy") if err != nil { return err } - if err := execution.Execute(verbose); err != nil { + if err := execution.Execute("deploying", verbose); err != nil { utils.Note("It looks like your deployment failed. This may be a transient issue and rerunning the `plural deploy` command may resolve it. Or, feel free to reach out to us on discord (https://discord.gg/bEBAMXV64s) or Intercom and we should be able to help you out\n") return err } + fmt.Printf("\n") installation, err := p.GetInstallation(repo) @@ -345,8 +369,13 @@ func (p *Plural) destroy(c *cli.Context) error { p.InitPluralClient() repoName := c.Args().Get(0) repoRoot, err := git.Root() + if err != nil { + return err + } force := c.Bool("force") all := c.Bool("all") + + project, err := manifest.FetchProject() if err != nil { return err } @@ -374,7 +403,7 @@ func (p *Plural) destroy(c *cli.Context) error { return fmt.Errorf("No installation for app %s to destroy, if the app is still in your repo, you can always run cd %s/terraform && terraform destroy", repoName, repoName) } - return p.doDestroy(repoRoot, installation, delete) + return p.doDestroy(repoRoot, installation, delete, project.ClusterAPI) } installations, err := p.getSortedInstallations(repoName) @@ -394,7 +423,7 @@ func (p *Plural) destroy(c *cli.Context) error { continue } - if err := p.doDestroy(repoRoot, installation, delete); err != nil { + if err := p.doDestroy(repoRoot, installation, delete, project.ClusterAPI); err != nil { return err } } @@ -426,7 +455,7 @@ func (p *Plural) destroy(c *cli.Context) error { return nil } -func (p *Plural) doDestroy(repoRoot string, installation *api.Installation, delete bool) error { +func (p *Plural) doDestroy(repoRoot string, installation *api.Installation, delete, clusterAPI bool) error { p.InitPluralClient() if err := os.Chdir(repoRoot); err != nil { return err @@ -442,8 +471,15 @@ func (p *Plural) doDestroy(repoRoot string, installation *api.Installation, dele return err } - if err := workspace.Destroy(); err != nil { - return err + if repo == Bootstrap && clusterAPI { + if err = bootstrap.DestroyCluster(workspace.Destroy, RunPlural); err != nil { + return err + } + + } else { + if err := workspace.Destroy(); err != nil { + return err + } } if delete { diff --git a/cmd/plural/packages.go b/cmd/plural/packages.go index 3817ba227..8e07c6213 100644 --- a/cmd/plural/packages.go +++ b/cmd/plural/packages.go @@ -1,14 +1,16 @@ package plural import ( + "fmt" "os" "github.com/pluralsh/plural/pkg/api" "github.com/olekukonko/tablewriter" + "github.com/urfave/cli" + "github.com/pluralsh/plural/pkg/utils" "github.com/pluralsh/plural/pkg/wkspace" - "github.com/urfave/cli" ) func (p *Plural) packagesCommands() []cli.Command { @@ -171,5 +173,9 @@ func (p *Plural) getWorkspace(repo string) (*wkspace.Workspace, error) { return nil, api.GetErrorResponse(err, "GetInstallation") } + if inst == nil { + return nil, fmt.Errorf("no installation found for package: %s", repo) + } + return wkspace.New(p.Client, inst) } diff --git a/cmd/plural/plural.go b/cmd/plural/plural.go index 5535dc9e7..305d85552 100644 --- a/cmd/plural/plural.go +++ b/cmd/plural/plural.go @@ -9,6 +9,7 @@ import ( "github.com/pluralsh/plural/pkg/api" "github.com/pluralsh/plural/pkg/config" "github.com/pluralsh/plural/pkg/crypto" + "github.com/pluralsh/plural/pkg/exp" "github.com/pluralsh/plural/pkg/kubernetes" "github.com/pluralsh/plural/pkg/manifest" "github.com/pluralsh/plural/pkg/utils" @@ -463,6 +464,13 @@ func (p *Plural) getCommands() []cli.Command { Action: latestVersion(formatDashboard), Category: "Publishing", }, + { + Name: "bootstrap", + Usage: "Commands for bootstrapping cluster", + Subcommands: p.bootstrapCommands(), + Category: "Bootstrap", + Hidden: !exp.IsFeatureEnabled(exp.EXP_PLURAL_CAPI), + }, p.uiCommands(), } } @@ -487,6 +495,12 @@ func globalFlags() []cli.Flag { EnvVar: "PLURAL_DEBUG_ENABLE", Destination: &utils.EnableDebug, }, + cli.BoolFlag{ + Name: "bootstrap", + Usage: "enable bootstrap mode", + Destination: &bootstrapMode, + Hidden: !exp.IsFeatureEnabled(exp.EXP_PLURAL_CAPI), + }, } } @@ -502,3 +516,7 @@ func CreateNewApp(plural *Plural) *cli.App { return app } + +func RunPlural(arguments []string) error { + return CreateNewApp(&Plural{}).Run(arguments) +} diff --git a/cmd/plural/validation.go b/cmd/plural/validation.go index 30c14220e..43c704d7f 100644 --- a/cmd/plural/validation.go +++ b/cmd/plural/validation.go @@ -19,6 +19,12 @@ import ( "github.com/pluralsh/plural/pkg/utils/pathing" ) +func init() { + bootstrapMode = false +} + +var bootstrapMode bool + func requireArgs(fn func(*cli.Context) error, args []string) func(*cli.Context) error { return func(c *cli.Context) error { nargs := c.NArg() @@ -102,10 +108,15 @@ func initKubeconfig(fn func(*cli.Context) error) func(*cli.Context) error { if err != nil { return err } - + if bootstrapMode { + prov = &provider.KINDProvider{Clust: "bootstrap"} + } if err := prov.KubeConfig(); err != nil { return err } + utils.LogInfo().Println("init", prov.Name(), "provider") + } else { + utils.LogInfo().Println("not found provider") } return fn(c) diff --git a/cmd/plural/workspace.go b/cmd/plural/workspace.go index ae3e674c8..4afda5253 100644 --- a/cmd/plural/workspace.go +++ b/cmd/plural/workspace.go @@ -6,13 +6,14 @@ import ( "path/filepath" "strings" + "github.com/urfave/cli" + "github.com/pluralsh/plural/pkg/helm" "github.com/pluralsh/plural/pkg/provider" "github.com/pluralsh/plural/pkg/scaffold" "github.com/pluralsh/plural/pkg/utils" "github.com/pluralsh/plural/pkg/utils/git" "github.com/pluralsh/plural/pkg/wkspace" - "github.com/urfave/cli" ) func (p *Plural) workspaceCommands() []cli.Command { @@ -43,6 +44,14 @@ func (p *Plural) workspaceCommands() []cli.Command { Name: "skip", Usage: "helm sub-chart to skip. can be passed multiple times", }, + cli.StringSliceFlag{ + Name: "set", + Usage: "helm value to set. can be passed multiple times", + }, + cli.StringSliceFlag{ + Name: "setJSON", + Usage: "JSON helm value to set. can be passed multiple times", + }, cli.BoolFlag{ Name: "wait", Usage: "have helm wait until all pods are in ready state", @@ -89,7 +98,7 @@ func (p *Plural) workspaceCommands() []cli.Command { } } -func kubeInit(c *cli.Context) error { +func kubeInit(_ *cli.Context) error { _, found := utils.ProjectRoot() if !found { return fmt.Errorf("Project not initialized, run `plural init` to set up a workspace") @@ -110,15 +119,24 @@ func (p *Plural) bounceHelm(c *cli.Context) error { return err } - skipArgs := []string{} + var skipArgs []string if c.IsSet("skip") { for _, skipChart := range c.StringSlice("skip") { skipString := fmt.Sprintf("%s.enabled=false", skipChart) skipArgs = append(skipArgs, skipString) } } + var setArgs []string + if c.IsSet("set") { + setArgs = append(setArgs, c.StringSlice("set")...) + } + + var setJSONArgs []string + if c.IsSet("setJSON") { + setJSONArgs = append(setJSONArgs, c.StringSlice("setJSON")...) + } - return minimal.BounceHelm(c.IsSet("wait"), skipArgs...) + return minimal.BounceHelm(c.IsSet("wait"), skipArgs, setArgs, setJSONArgs) } func (p *Plural) diffHelm(c *cli.Context) error { @@ -141,7 +159,7 @@ func (p *Plural) diffTerraform(c *cli.Context) error { return minimal.DiffTerraform() } -func (p *Plural) createCrds(c *cli.Context) error { +func (p *Plural) createCrds(_ *cli.Context) error { err := p.InitKube() if err != nil { return err diff --git a/go.mod b/go.mod index 6aa657a3e..8cde289d0 100644 --- a/go.mod +++ b/go.mod @@ -1,45 +1,50 @@ module github.com/pluralsh/plural -go 1.18 +go 1.19 require ( - cloud.google.com/go/compute v1.18.0 - cloud.google.com/go/resourcemanager v1.4.0 - cloud.google.com/go/serviceusage v1.4.0 - cloud.google.com/go/storage v1.27.0 - filippo.io/age v1.0.0 + cloud.google.com/go/compute v1.19.2 + cloud.google.com/go/resourcemanager v1.7.0 + cloud.google.com/go/serviceusage v1.6.0 + cloud.google.com/go/storage v1.28.1 + filippo.io/age v1.1.1 github.com/AlecAivazis/survey/v2 v2.3.5 - github.com/Azure/azure-sdk-for-go v56.3.0+incompatible - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.1 + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute v1.0.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.0.0 - github.com/Azure/azure-storage-blob-go v0.13.0 - github.com/Azure/go-autorest/autorest v0.11.28 - github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 - github.com/Azure/go-autorest/autorest/to v0.4.0 + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.3.0 + github.com/Azure/azure-storage-blob-go v0.15.0 + github.com/Azure/azure-workload-identity v1.1.0 + github.com/Azure/go-autorest/autorest v0.11.29 + github.com/Masterminds/semver v1.5.0 github.com/Masterminds/sprig/v3 v3.2.3 github.com/Yamashou/gqlgenc v0.14.0 - github.com/aws/aws-sdk-go-v2 v1.17.4 - github.com/aws/aws-sdk-go-v2/service/iam v1.19.2 - github.com/aws/aws-sdk-go-v2/service/sts v1.16.17 + github.com/aws/aws-sdk-go-v2 v1.18.0 + github.com/aws/aws-sdk-go-v2/service/iam v1.19.12 + github.com/aws/aws-sdk-go-v2/service/sts v1.19.0 github.com/briandowns/spinner v1.23.0 github.com/buger/goterm v1.0.4 + github.com/cert-manager/cert-manager v1.10.0 github.com/chartmuseum/helm-push v0.10.3 github.com/coreos/go-semver v0.3.0 github.com/databus23/helm-diff/v3 v3.6.0 - github.com/fatih/color v1.13.0 - github.com/gin-gonic/gin v1.8.1 + github.com/fatih/color v1.15.0 + github.com/gdamore/tcell/v2 v2.6.0 + github.com/gin-gonic/gin v1.9.1 github.com/go-git/go-git/v5 v5.4.2 + github.com/gofrs/flock v0.8.1 github.com/google/go-github/v45 v45.2.0 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 - github.com/hashicorp/go-retryablehttp v0.7.1 + github.com/hashicorp/go-retryablehttp v0.7.2 github.com/hashicorp/hcl v1.0.0 - github.com/hashicorp/terraform-plugin-sdk/v2 v2.20.0 + github.com/hashicorp/terraform-json v0.17.1 + github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.1 github.com/helm/helm-mapkubeapis v0.4.1 github.com/imdario/mergo v0.3.13 github.com/inancgumus/screen v0.0.0-20190314163918-06e984b86ed3 github.com/ktrysmt/go-bitbucket v0.9.55 + github.com/microsoftgraph/msgraph-sdk-go v0.61.0 github.com/mikesmitty/edkey v0.0.0-20170222072505-3356ea4e686a github.com/mitchellh/go-homedir v1.1.0 github.com/mitchellh/mapstructure v1.5.0 @@ -47,117 +52,265 @@ require ( github.com/olekukonko/tablewriter v0.0.5 github.com/packethost/packngo v0.29.0 github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 + github.com/pluralsh/cluster-api-migration v0.2.15 github.com/pluralsh/gqlclient v1.10.0 - github.com/pluralsh/plural-operator v0.5.3 + github.com/pluralsh/plural-operator v0.5.5 github.com/pluralsh/polly v0.1.1 + github.com/pluralsh/terraform-delinker v0.0.1 + github.com/posthog/posthog-go v0.0.0-20230801140217-d607812dee69 + github.com/rivo/tview v0.0.0-20230615085408-bb9595ee0f4d github.com/rodaine/hclencoder v0.0.1 - github.com/samber/lo v1.33.0 - github.com/spf13/viper v1.8.1 + github.com/samber/lo v1.38.1 + github.com/spf13/viper v1.15.0 github.com/thoas/go-funk v0.9.2 - github.com/urfave/cli v1.22.10 + github.com/urfave/cli v1.22.14 github.com/wailsapp/wails/v2 v2.4.1 github.com/xanzy/go-gitlab v0.70.0 github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64 go.mercari.io/hcledit v0.0.8 - golang.org/x/crypto v0.5.0 - golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 - golang.org/x/mod v0.9.0 - golang.org/x/oauth2 v0.5.0 + golang.org/x/crypto v0.12.0 + golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e + golang.org/x/mod v0.10.0 + golang.org/x/oauth2 v0.8.0 gopkg.in/yaml.v2 v2.4.0 - helm.sh/helm/v3 v3.11.1 - k8s.io/api v0.26.1 - k8s.io/apimachinery v0.26.1 - k8s.io/client-go v0.26.1 + helm.sh/helm/v3 v3.11.2 + k8s.io/api v0.26.4 + k8s.io/apimachinery v0.26.4 + k8s.io/client-go v0.26.4 layeh.com/gopher-luar v1.0.10 sigs.k8s.io/application v0.8.3 + sigs.k8s.io/cluster-api v1.4.3 + sigs.k8s.io/cluster-api-operator v0.2.0 + sigs.k8s.io/cluster-api-provider-aws/v2 v2.1.4 + sigs.k8s.io/kind v0.18.0 sigs.k8s.io/yaml v1.3.0 ) require ( cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/longrunning v0.3.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1 // indirect + cloud.google.com/go/container v1.18.1 // indirect + cloud.google.com/go/longrunning v0.4.1 // indirect + github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization v1.0.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.1.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions v1.1.1 // indirect + github.com/Azure/go-autorest/autorest/azure/auth v0.5.12 // indirect + github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 // indirect github.com/agext/levenshtein v1.2.2 // indirect + github.com/alessio/shellescape v1.4.1 // indirect + github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 // indirect + github.com/apparentlymart/go-cidr v1.1.0 // indirect github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a // indirect + github.com/atotto/clipboard v0.1.4 // indirect + github.com/aws/amazon-ec2-instance-selector/v2 v2.4.1 // indirect + github.com/aws/aws-sdk-go v1.44.268 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.3 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.12.18 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.15 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.28 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.22 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.22 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.13.24 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.3 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.33 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.27 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34 // indirect github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.6 // indirect + github.com/aws/aws-sdk-go-v2/service/autoscaling v1.28.7 // indirect + github.com/aws/aws-sdk-go-v2/service/cloudformation v1.27.4 // indirect + github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.25.0 // indirect + github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.20.11 // indirect + github.com/aws/aws-sdk-go-v2/service/eks v1.27.12 // indirect + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.15.10 // indirect + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.19.11 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.3 // indirect github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.10 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.15 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.27 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.9 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.11.21 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.3 // indirect + github.com/aws/aws-sdk-go-v2/service/outposts v1.27.10 // indirect + github.com/aws/aws-sdk-go-v2/service/ssm v1.36.4 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.12.10 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.10 // indirect github.com/aws/smithy-go v1.13.5 // indirect + github.com/awslabs/goformation/v4 v4.19.5 // indirect + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/bep/debounce v1.2.1 // indirect + github.com/bgentry/speakeasy v0.1.0 // indirect + github.com/blang/semver v3.5.1+incompatible // indirect + github.com/blang/semver/v4 v4.0.0 // indirect + github.com/bxcodec/faker v2.0.1+incompatible // indirect + github.com/bytedance/sonic v1.9.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect + github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect + github.com/charmbracelet/bubbles v0.13.0 // indirect + github.com/charmbracelet/bubbletea v0.21.0 // indirect + github.com/charmbracelet/lipgloss v0.5.0 // indirect + github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/cjlapao/common-go v0.0.39 // indirect + github.com/cloudflare/cfssl v1.6.3 // indirect + github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe // indirect + github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195 // indirect + github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect + github.com/coredns/caddy v1.1.1 // indirect + github.com/coredns/corefile-migration v1.0.20 // indirect + github.com/coreos/go-systemd/v22 v22.3.2 // indirect + github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect github.com/emicklei/go-restful/v3 v3.9.0 // indirect + github.com/envoyproxy/go-control-plane v0.11.0 // indirect + github.com/envoyproxy/protoc-gen-validate v0.10.0 // indirect + github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/evertras/bubble-table v0.14.4 // indirect github.com/fatih/camelcase v1.0.0 // indirect + github.com/form3tech-oss/jwt-go v3.2.3+incompatible // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/fullstorydev/grpcurl v1.8.1 // indirect + github.com/gabriel-vasile/mimetype v1.4.2 // indirect + github.com/gdamore/encoding v1.0.0 // indirect github.com/go-gorp/gorp/v3 v3.1.0 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-logr/zapr v1.2.3 // indirect github.com/go-ole/go-ole v1.2.6 // indirect - github.com/goccy/go-json v0.9.7 // indirect - github.com/golang-jwt/jwt v3.2.2+incompatible // indirect - github.com/google/gnostic v0.5.7-v3refs // indirect + github.com/gobuffalo/flect v1.0.2 // indirect + github.com/goccy/go-json v0.10.2 // indirect + github.com/golang-jwt/jwt/v5 v5.0.0 // indirect + github.com/golang/mock v1.6.0 // indirect + github.com/google/cel-go v0.12.6 // indirect + github.com/google/certificate-transparency-go v1.1.2-0.20210511102531-373a877eec92 // indirect + github.com/google/gnostic v0.6.9 // indirect + github.com/google/go-github/v48 v48.2.0 // indirect + github.com/google/s2a-go v0.1.3 // indirect + github.com/google/safetext v0.0.0-20220905092116-b49f7bc46da2 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect + github.com/gorilla/websocket v1.4.2 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect + github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect + github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect - github.com/hashicorp/hcl/v2 v2.13.0 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect + github.com/hashicorp/hcl/v2 v2.15.0 // indirect github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e // indirect + github.com/jhump/protoreflect v1.8.2 // indirect + github.com/jonboulle/clockwork v0.2.2 // indirect + github.com/klauspost/cpuid/v2 v2.2.4 // indirect + github.com/kris-nova/logger v0.2.1 // indirect + github.com/kubicorn/kubicorn v0.0.0-20180829191017-06f6bce92acc // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/labstack/echo/v4 v4.9.0 // indirect github.com/labstack/gommon v0.3.1 // indirect github.com/leaanthony/go-ansi-parser v1.0.1 // indirect github.com/leaanthony/gosod v1.0.3 // indirect github.com/leaanthony/slicer v1.5.0 // indirect - github.com/magiconair/properties v1.8.5 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/microsoft/kiota-abstractions-go v1.2.0 // indirect + github.com/microsoft/kiota-authentication-azure-go v1.0.0 // indirect + github.com/microsoft/kiota-http-go v1.1.0 // indirect + github.com/microsoft/kiota-serialization-form-go v1.0.0 // indirect + github.com/microsoft/kiota-serialization-json-go v1.0.4 // indirect + github.com/microsoft/kiota-serialization-text-go v1.0.0 // indirect + github.com/microsoftgraph/msgraph-sdk-go-core v1.0.0 // indirect + github.com/miekg/dns v1.1.50 // indirect + github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b // indirect + github.com/muesli/cancelreader v0.2.2 // indirect + github.com/muesli/reflow v0.3.0 // indirect + github.com/muesli/termenv v0.15.1 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 // indirect + github.com/onsi/gomega v1.27.6 // indirect + github.com/orcaman/concurrent-map v1.0.0 // indirect + github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.0.1 // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect github.com/pluralsh/controller-reconcile-helper v0.0.4 // indirect - github.com/spf13/afero v1.8.0 // indirect + github.com/sahilm/fuzzy v0.1.0 // indirect + github.com/sanathkr/go-yaml v0.0.0-20170819195128-ed9d249f429b // indirect + github.com/sanathkr/yaml v0.0.0-20170819201035-0056894fa522 // indirect + github.com/soheilhy/cmux v0.1.5 // indirect + github.com/spf13/afero v1.9.5 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/stoewer/go-strcase v1.2.0 // indirect github.com/stretchr/objx v0.5.0 // indirect - github.com/subosito/gotenv v1.2.0 // indirect + github.com/subosito/gotenv v1.4.2 // indirect + github.com/tidwall/gjson v1.14.4 // indirect + github.com/tidwall/match v1.1.1 // indirect + github.com/tidwall/pretty v1.2.1 // indirect + github.com/tidwall/sjson v1.2.5 // indirect github.com/tkrajina/go-reflector v0.5.5 // indirect + github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fastjson v1.6.4 // indirect github.com/valyala/fasttemplate v1.2.1 // indirect github.com/vektah/gqlparser/v2 v2.5.1 // indirect github.com/wailsapp/mimetype v1.4.1 // indirect - github.com/zclconf/go-cty v1.10.0 // indirect - google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 // indirect - gopkg.in/ini.v1 v1.62.0 // indirect + github.com/weaveworks/eksctl v0.143.0 // indirect + github.com/weaveworks/goformation/v4 v4.10.2-0.20221208090411-a71cb48c37d5 // indirect + github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // indirect + github.com/yosida95/uritemplate/v3 v3.0.2 // indirect + github.com/zclconf/go-cty v1.13.2 // indirect + go.etcd.io/bbolt v1.3.6 // indirect + go.etcd.io/etcd/api/v3 v3.5.6 // indirect + go.etcd.io/etcd/client/pkg/v3 v3.5.6 // indirect + go.etcd.io/etcd/client/v2 v2.305.6 // indirect + go.etcd.io/etcd/client/v3 v3.5.6 // indirect + go.etcd.io/etcd/etcdctl/v3 v3.5.0-alpha.0 // indirect + go.etcd.io/etcd/pkg/v3 v3.5.5 // indirect + go.etcd.io/etcd/raft/v3 v3.5.5 // indirect + go.etcd.io/etcd/server/v3 v3.5.5 // indirect + go.etcd.io/etcd/tests/v3 v3.5.0-alpha.0 // indirect + go.etcd.io/etcd/v3 v3.5.0-alpha.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.35.0 // indirect + go.opentelemetry.io/otel v1.16.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.14.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.14.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.14.0 // indirect + go.opentelemetry.io/otel/metric v1.16.0 // indirect + go.opentelemetry.io/otel/sdk v1.14.0 // indirect + go.opentelemetry.io/otel/trace v1.16.0 // indirect + go.opentelemetry.io/proto/otlp v0.19.0 // indirect + go.uber.org/atomic v1.10.0 // indirect + go.uber.org/multierr v1.8.0 // indirect + go.uber.org/zap v1.24.0 // indirect + golang.org/x/arch v0.3.0 // indirect + golang.org/x/tools v0.9.1 // indirect + gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect + google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect + gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/cluster-bootstrap v0.25.3 // indirect + k8s.io/kops v1.25.2 // indirect + k8s.io/kube-aggregator v0.25.2 // indirect + k8s.io/kubelet v0.25.2 // indirect + monis.app/mlog v0.0.4 // indirect + sigs.k8s.io/gateway-api v0.5.0 // indirect ) require ( - cloud.google.com/go v0.107.0 // indirect - cloud.google.com/go/iam v0.12.0 + cloud.google.com/go v0.110.0 // indirect + cloud.google.com/go/iam v0.13.0 github.com/Azure/azure-pipeline-go v0.2.3 // indirect github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect - github.com/Azure/go-autorest/autorest/adal v0.9.18 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect github.com/Azure/go-autorest/autorest/azure/cli v0.4.5 // indirect github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/BurntSushi/toml v1.2.1 // indirect + github.com/BurntSushi/toml v1.3.2 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.2.0 github.com/Masterminds/squirrel v1.5.3 // indirect - github.com/Microsoft/go-winio v0.5.2 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20211112122917-428f8eabeeb3 // indirect github.com/acomagu/bufpipe v1.0.3 // indirect - github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 // indirect - github.com/aws/aws-sdk-go-v2/config v1.17.5 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.51.1 + github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect + github.com/aws/aws-sdk-go-v2/config v1.18.25 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.98.0 github.com/aws/aws-sdk-go-v2/service/s3 v1.27.2 github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect @@ -170,8 +323,8 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect github.com/docker/cli v20.10.21+incompatible // indirect - github.com/docker/distribution v2.8.1+incompatible // indirect - github.com/docker/docker v20.10.21+incompatible // indirect + github.com/docker/distribution v2.8.2+incompatible // indirect + github.com/docker/docker v20.10.24+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-metrics v0.0.1 // indirect @@ -181,54 +334,54 @@ require ( github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/ghodss/yaml v1.0.0 // indirect github.com/gin-contrib/sse v0.1.0 // indirect - github.com/go-errors/errors v1.0.1 // indirect + github.com/go-errors/errors v1.4.2 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.3.1 // indirect - github.com/go-logr/logr v1.2.3 // indirect - github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.20.0 // indirect - github.com/go-openapi/swag v0.19.14 // indirect - github.com/go-playground/locales v0.14.0 // indirect - github.com/go-playground/universal-translator v0.18.0 // indirect - github.com/go-playground/validator/v10 v10.10.0 // indirect + github.com/go-logr/logr v1.2.4 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.14.0 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.2.0 // indirect + github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/google/btree v1.0.1 // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-cmp v0.5.9 github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/uuid v1.3.0 // indirect - github.com/googleapis/gax-go/v2 v2.7.0 // indirect + github.com/google/uuid v1.3.1 // indirect + github.com/googleapis/gax-go/v2 v2.8.0 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/gosuri/uitable v0.0.4 // indirect - github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect + github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-hclog v1.2.1 // indirect github.com/hashicorp/logutils v1.0.0 // indirect github.com/hashicorp/terraform-plugin-log v0.7.0 // indirect - github.com/huandu/xstrings v1.3.3 // indirect - github.com/inconshreveable/mousetrap v1.0.1 // indirect + github.com/huandu/xstrings v1.4.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmoiron/sqlx v1.3.5 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect - github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect - github.com/klauspost/compress v1.13.6 // indirect + github.com/kevinburke/ssh_config v1.1.0 // indirect + github.com/klauspost/compress v1.15.14 // indirect github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect - github.com/leodido/go-urn v1.2.1 // indirect + github.com/leodido/go-urn v1.2.4 // indirect github.com/lib/pq v1.10.7 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect - github.com/mailru/easyjson v0.7.6 // indirect + github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-ieproxy v0.0.1 // indirect - github.com/mattn/go-isatty v0.0.16 // indirect - github.com/mattn/go-runewidth v0.0.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mattn/go-runewidth v0.0.14 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect @@ -245,62 +398,69 @@ require ( github.com/morikuni/aec v1.0.0 // indirect github.com/oleiade/reflections v1.0.1 github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0-rc2 // indirect + github.com/opencontainers/image-spec v1.1.0-rc3 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pkg/errors v0.9.1 github.com/pluralsh/oauth v0.9.2 github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.14.0 // indirect + github.com/prometheus/client_golang v1.15.1 // indirect github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/procfs v0.8.0 // indirect - github.com/rivo/uniseg v0.2.0 // indirect - github.com/rubenv/sql-migrate v1.2.0 // indirect + github.com/prometheus/common v0.42.0 // indirect + github.com/prometheus/procfs v0.9.0 // indirect + github.com/rivo/uniseg v0.4.3 // indirect + github.com/rubenv/sql-migrate v1.3.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/schollz/progressbar/v3 v3.8.6 // indirect - github.com/sergi/go-diff v1.2.0 // indirect - github.com/shopspring/decimal v1.2.0 // indirect - github.com/sirupsen/logrus v1.9.0 - github.com/spf13/cast v1.4.1 // indirect - github.com/spf13/cobra v1.6.1 // indirect + github.com/sergi/go-diff v1.3.1 // indirect + github.com/shopspring/decimal v1.3.1 // indirect + github.com/sirupsen/logrus v1.9.3 + github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/cobra v1.7.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/stretchr/testify v1.8.1 - github.com/ugorji/go/codec v1.2.7 // indirect - github.com/xanzy/ssh-agent v0.3.0 // indirect - github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect + github.com/stretchr/testify v1.8.4 + github.com/ugorji/go/codec v1.2.11 // indirect + github.com/xanzy/ssh-agent v0.3.1 // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect - github.com/xlab/treeprint v1.1.0 // indirect + github.com/xlab/treeprint v1.2.0 // indirect go.opencensus.io v0.24.0 // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect - golang.org/x/net v0.8.0 // indirect - golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.6.0 // indirect - golang.org/x/term v0.6.0 - golang.org/x/text v0.8.0 - golang.org/x/time v0.0.0-20220411224347-583f2d630306 // indirect + golang.org/x/net v0.14.0 // indirect + golang.org/x/sync v0.2.0 // indirect + golang.org/x/sys v0.11.0 // indirect + golang.org/x/term v0.11.0 + golang.org/x/text v0.12.0 + golang.org/x/time v0.3.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.110.0 + google.golang.org/api v0.122.0 google.golang.org/appengine v1.6.7 // indirect - google.golang.org/grpc v1.53.0 // indirect - google.golang.org/protobuf v1.28.1 // indirect + google.golang.org/grpc v1.55.0 // indirect + google.golang.org/protobuf v1.30.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect - k8s.io/apiextensions-apiserver v0.26.0 // indirect - k8s.io/apiserver v0.26.0 // indirect + k8s.io/apiextensions-apiserver v0.26.1 + k8s.io/apiserver v0.26.1 // indirect k8s.io/cli-runtime v0.26.1 k8s.io/component-base v0.26.1 // indirect k8s.io/helm v2.17.0+incompatible // indirect - k8s.io/klog/v2 v2.80.1 // indirect - k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect + k8s.io/klog/v2 v2.100.1 // indirect + k8s.io/kube-openapi v0.0.0-20230601164746-7562a1006961 // indirect k8s.io/kubectl v0.26.1 - k8s.io/utils v0.0.0-20221107191617-1a15be271d1d // indirect + k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect oras.land/oras-go v1.2.2 // indirect - sigs.k8s.io/controller-runtime v0.12.1 // indirect - sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect - sigs.k8s.io/kustomize/api v0.12.1 // indirect - sigs.k8s.io/kustomize/kyaml v0.13.9 // indirect + sigs.k8s.io/controller-runtime v0.14.6 + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/kustomize/api v0.13.2 // indirect + sigs.k8s.io/kustomize/kyaml v0.14.3 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect ) -replace github.com/norwoodj/helm-docs v1.11.2 => github.com/pluralsh/helm-docs v1.11.3-0.20230914190909-3fe18acd95d7 +replace ( + github.com/norwoodj/helm-docs v1.11.2 => github.com/pluralsh/helm-docs v1.11.3-0.20230914190909-3fe18acd95d7 + go.etcd.io/etcd/pkg/v3 => go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0 + k8s.io/cli-runtime => k8s.io/cli-runtime v0.26.3 + k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 + sigs.k8s.io/kustomize/api => sigs.k8s.io/kustomize/api v0.12.1 + sigs.k8s.io/kustomize/kyaml => sigs.k8s.io/kustomize/kyaml v0.13.9 +) diff --git a/go.sum b/go.sum index 8d372dc41..672fe2f31 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,10 @@ +bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= +bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= +bitbucket.org/liamstask/goose v0.0.0-20150115234039-8488cc47d90c/go.mod h1:hSVuE3qU7grINVSwrmzHfpg9k87ALBk+XaualNyUzI4= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= @@ -20,79 +24,107 @@ cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPT cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.107.0 h1:qkj22L7bgkl6vIeZDlOY2po43Mx/TIa2Wsa7VR+PEww= -cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= -cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute v1.19.2 h1:GbJtPo8OKVHbVep8jvM57KidbYHxeE68LOVqouNLrDY= +cloud.google.com/go/compute v1.19.2/go.mod h1:5f5a+iC1IriXYauaQ0EyQmEAEq9CGRnV5xJSQSlTV08= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/container v1.18.1 h1:kiWpJohdRQ38NpjNgdgBUCCQQZURXSJ8qcrLfMEw6C8= +cloud.google.com/go/container v1.18.1/go.mod h1:SquvRVfP3NA5yd8hiKe8SSB5mXXIx3uX4QAXu3oFn4A= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= -cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= -cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= -cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= +cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/resourcemanager v1.4.0 h1:NDao6CHMwEZIaNsdWy+tuvHaavNeGP06o1tgrR0kLvU= -cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= -cloud.google.com/go/serviceusage v1.4.0 h1:b0EwJxPJLpavSljMQh0RcdHsUrr5DQ+Nelt/3BAs5ro= -cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/resourcemanager v1.7.0 h1:NRM0p+RJkaQF9Ee9JMnUV9BQ2QBIOq/v8M+Pbv/wmCs= +cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= +cloud.google.com/go/serviceusage v1.6.0 h1:rXyq+0+RSIm3HFypctp7WoXxIA563rn206CfMWdqXX4= +cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= +cloud.google.com/go/spanner v1.17.0/go.mod h1:+17t2ixFwRG4lWRwE+5kipDR9Ef07Jkmc8z0IbMDKUs= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storage v1.27.0 h1:YOO045NZI9RKfCj1c5A/ZtuuENUc8OAW+gHdGnDgyMQ= -cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.28.1 h1:F5QDG5ChchaAVQhINh24U99OWHURqrW8OmQcGKXcbgI= +cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +code.gitea.io/sdk/gitea v0.11.3/go.mod h1:z3uwDV/b9Ls47NGukYM9XhnHtqPh/J+t40lsUrR6JDY= +contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= +contrib.go.opencensus.io/exporter/ocagent v0.5.0/go.mod h1:ImxhfLRpxoYiSq891pBrLVhN+qmP8BTVvdH2YLs7Gl0= +contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= +contrib.go.opencensus.io/exporter/stackdriver v0.13.5/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= +contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= +contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/age v1.0.0 h1:V6q14n0mqYU3qKFkZ6oOaF9oXneOviS3ubXsSVBRSzc= -filippo.io/age v1.0.0/go.mod h1:PaX+Si/Sd5G8LgfCwldsSba3H1DDQZhIhFGkhbHaBq8= +filippo.io/age v1.1.1 h1:pIpO7l151hCnQ4BdyBujnGP2YlUo0uj6sAVNHGBvXHg= +filippo.io/age v1.1.1/go.mod h1:l03SrzDUrBkdBx8+IILdnn2KZysqQdbEBUQ4p3sqEQE= github.com/AlecAivazis/survey/v2 v2.3.5 h1:A8cYupsAZkjaUmhtTYv3sSqc7LO5mp1XDfqe5E/9wRQ= github.com/AlecAivazis/survey/v2 v2.3.5/go.mod h1:4AuI9b7RjAR+G7v9+C4YSlX/YL3K3cWNXgWXOhllqvI= +github.com/Azure/azure-amqp-common-go/v2 v2.1.0/go.mod h1:R8rea+gJRuJR6QxTir/XuEd+YuKoUiazDC/N96FiDEU= +github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U= github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k= -github.com/Azure/azure-sdk-for-go v56.3.0+incompatible h1:DmhwMrUIvpeoTDiWRDtNHqelNUd3Og8JCkrLHQK795c= -github.com/Azure/azure-sdk-for-go v56.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4 h1:pqrAR74b6EoR4kcxF7L7Wg2B8Jgil9UUZtMvxhEFqWo= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.4/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go v29.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v30.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU= +github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.1 h1:/iHxaJhsFr0+xVFfbMr5vxz848jyiWuIEDhYq3y5odY= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.1/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1 h1:LNHhpdK7hzUcx/k1LIcuh5k7k1LGIWLQfCjaneSj7Fc= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1/go.mod h1:uE9zaUfEQT/nbQjVi2IblCG9iaLtZsuYZ8ne+PuQ02M= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization v1.0.0 h1:qtRcg5Y7jNJ4jEzPq4GpWLfTspHdNe2ZK6LjwGcjgmU= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization v1.0.0/go.mod h1:lPneRe3TwsoDRKY4O6YDLXHhEWrD+TIRa8XrV/3/fqw= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute v1.0.0 h1:/Di3vB4sNeQ+7A8efjUVENvyB945Wruvstucqp7ZArg= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute v1.0.0/go.mod h1:gM3K25LQlsET3QR+4V74zxCsFAy0r6xMNN9n80SZn+4= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal v1.0.0 h1:lMW1lD/17LUA5z1XTURo7LcVG2ICBPlyMHjIUrcFZNQ= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.0.0 h1:nBy98uKOIfun5z6wx6jwWLrULcM0+cjBalBFZlEZ7CA= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal v1.1.2 h1:mLY+pNLjCUeKhgnAJWAKhEUQM+RJQo2H1fuGSw1Ky1E= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.1.0 h1:QM6sE5k2ZT/vI5BEe0r7mqjsUSnhVBFbOsVkEuaEfiA= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.1.0/go.mod h1:243D9iHbcQXoFUtgHJwL7gl2zx1aDuDMjvBZVGr2uW0= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.0.0 h1:ECsQtyERDVz3NP3kvDOTLvbQhqWp/x9EsGKtb4ogUr8= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.0.0/go.mod h1:s1tW/At+xHqjNFvWU4G0c0Qv33KOhvbGNj0RCTQDV8s= -github.com/Azure/azure-storage-blob-go v0.13.0 h1:lgWHvFh+UYBNVQLFHXkvul2f6yOPA9PIH82RTG2cSwc= -github.com/Azure/azure-storage-blob-go v0.13.0/go.mod h1:pA9kNqtjUeQF2zOSu4s//nUdBD+e64lEuc4sVnuOfNs= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions v1.1.1 h1:A+a54F7ygu4ANdV9hYsLMfiHFgjuwIUCG+6opLAvxJE= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions v1.1.1/go.mod h1:ThfyMjs6auYrWPnYJjI3H4H++oVPrz01pizpu8lfl3A= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.3.0 h1:LcJtQjCXJUm1s7JpUHZvu+bpgURhCatxVNbGADXniX0= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.3.0/go.mod h1:+OgGVo0Httq7N5oayfvaLQ/Jq+2gJdqfp++Hyyl7Tws= +github.com/Azure/azure-service-bus-go v0.9.1/go.mod h1:yzBx6/BUGfjfeqbRZny9AQIbIe3AcV9WZbAdpkoXOa0= +github.com/Azure/azure-storage-blob-go v0.8.0/go.mod h1:lPI3aLPpuLTeUwh1sViKXFxwl2B6teiRqI0deQUvsw0= +github.com/Azure/azure-storage-blob-go v0.15.0 h1:rXtgp8tN1p29GvpGgfJetavIG0V7OgcSXPpwp3tx6qk= +github.com/Azure/azure-storage-blob-go v0.15.0/go.mod h1:vbjsVbX0dlxnRc4FFMPsS9BsJWPcne7GB7onqlPvz58= +github.com/Azure/azure-workload-identity v1.1.0 h1:s3G9++A8ugvQjWcgA6xF8IA99MBkzMSdqJbIZ6qoF2s= +github.com/Azure/azure-workload-identity v1.1.0/go.mod h1:+kq8chW1Is1jsvmV9zXSmWsEJodPFxDlsdWcHMzdQ4c= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-autorest v12.0.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.11.24/go.mod h1:G6kyRlFnTuSbEYkQGawPfsCswgme4iYf6rfSKUDzbCc= -github.com/Azure/go-autorest/autorest v0.11.28 h1:ndAExarwr5Y+GaHE6VCaY1kyS/HwwGGyuimVhWsHOEM= -github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA= +github.com/Azure/go-autorest/autorest v0.11.29 h1:I4+HL/JDvErx2LjyzaVxllw2lRDB5/BT2Bm4g20iqYw= +github.com/Azure/go-autorest/autorest v0.11.29/go.mod h1:ZtEzC4Jy2JDrZLxvWs8LrBWEBycl1hbT1eknI8MtfAs= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/adal v0.9.2/go.mod h1:/3SMAM86bP6wC9Ev35peQDUeqFZBMH07vvUOmg4z/fE= -github.com/Azure/go-autorest/autorest/adal v0.9.18 h1:kLnPsRjzZZUF3K5REu/Kc+qMQrvuza2bwSnNdhmzLfQ= +github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= -github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 h1:P6bYXFoao05z5uhOQzbC3Qd8JqF3jUoocoTeIxkp2cA= -github.com/Azure/go-autorest/autorest/azure/auth v0.5.11/go.mod h1:84w/uV8E37feW2NCJ08uT9VBfjfUHpgLVnG2InYD6cg= +github.com/Azure/go-autorest/autorest/adal v0.9.22/go.mod h1:XuAbAEUv2Tta//+voMI038TrJBqjKam0me7qR+L8Cmk= +github.com/Azure/go-autorest/autorest/adal v0.9.23 h1:Yepx8CvFxwNKpH6ja7RZ+sKX+DWYNldbLiALMC3BTz8= +github.com/Azure/go-autorest/autorest/adal v0.9.23/go.mod h1:5pcMqFkdPhviJdlEy3kC/v1ZLnQl0MH6XA5YCcMhy4c= +github.com/Azure/go-autorest/autorest/azure/auth v0.5.12 h1:wkAZRgT/pn8HhFyzfe9UnqOjJYqlembgCTi72Bm/xKk= +github.com/Azure/go-autorest/autorest/azure/auth v0.5.12/go.mod h1:84w/uV8E37feW2NCJ08uT9VBfjfUHpgLVnG2InYD6cg= github.com/Azure/go-autorest/autorest/azure/cli v0.4.5 h1:0W/yGmFdTIT77fvdlGZ0LMISoLHFJ7Tx4U0yeB+uFs4= github.com/Azure/go-autorest/autorest/azure/cli v0.4.5/go.mod h1:ADQAXrkgm7acgWVUNamOgh8YNrv4p27l3Wc55oVfpzg= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= @@ -113,23 +145,32 @@ github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZ github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= -github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1 h1:BWe8a+f/t+7KY7zH2mqygeUD0t8hNFXe08p1Pb3/jKE= -github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1/go.mod h1:Vt9sXTKwMyGcOxSmLDMnGPgqsUg7m8pe215qMLrDXw4= +github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 h1:WpB/QDNLpMw72xHJc34BNNykqSOeEJDAWkhf0u12/Jk= +github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= +github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver/v3 v3.0.3/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/semver/v3 v3.1.0/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/Masterminds/sprig/v3 v3.2.0/go.mod h1:tWhwTbUTndesPNeF0C900vKoq283u6zp4APT9vaF3SI= +github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig/v3 v3.2.1/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= github.com/Masterminds/sprig/v3 v3.2.2/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA= github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM= @@ -137,39 +178,60 @@ github.com/Masterminds/squirrel v1.5.3 h1:YPpoceAcxuzIljlr5iWpNKaql7hLeG1KLSrhvd github.com/Masterminds/squirrel v1.5.3/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Microsoft/hcsshim v0.9.6 h1:VwnDOgLeoi2du6dAznfmspNqTiwczvjv4K7NxuY9jsY= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 h1:YoJbenK9C67SkzkDfmQuVln04ygHj3vjZfd9FL+GmQQ= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/ProtonMail/go-crypto v0.0.0-20211112122917-428f8eabeeb3 h1:XcF0cTDJeiuZ5NU8w7WUDge0HRwwNRmxj/GGk6KSA6g= +github.com/ProtonMail/go-crypto v0.0.0-20211112122917-428f8eabeeb3/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/Yamashou/gqlgenc v0.14.0 h1:KVzUuVQKfl4Phm5Cw4yeFThDAxZoIBR9XLoK/4O1O6U= github.com/Yamashou/gqlgenc v0.14.0/go.mod h1:+z+FRCtGrNmgTxweAUiCodOmQJLTCNtnRNAqhewf1Q8= +github.com/a8m/expect v1.0.0/go.mod h1:4IwSCMumY49ScypDnjNbYEjgVeqy1/U2cEs3Lat96eA= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/agext/levenshtein v1.2.2 h1:0S/Yg6LYmFJ5stwQeRp6EeOcCbj7xiqQSdNelsXvaqE= github.com/agext/levenshtein v1.2.2/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVKJUX0= +github.com/alessio/shellescape v1.4.1/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 h1:yL7+Jz0jTC6yykIK/Wh74gnTJnrGr5AyrNMXuA0gves= +github.com/antlr/antlr4/runtime/Go/antlr v1.4.10/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= +github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= +github.com/apache/beam v2.28.0+incompatible/go.mod h1:/8NX3Qi8vGstDLLaeaU7+lzVEu/ACaQhYjeefzQ0y1o= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apex/log v1.1.4/go.mod h1:AlpoD9aScyQfJDVHmLMEcx4oU6LqzkWp4Mg9GdAcEvQ= +github.com/apex/logs v0.0.4/go.mod h1:XzxuLZ5myVHDy9SAmYpamKKRNApGj54PfYLcFrXqDwo= +github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy8kCu4PNA+aP7WUV72eXWJeP9/r3/K9aLE= +github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3stzu0Xys= +github.com/apparentlymart/go-cidr v1.1.0 h1:2mAhrMoF+nhXqxTzSZMUzDHkLjmIHC+Zzn4tdgBZjnU= +github.com/apparentlymart/go-cidr v1.1.0/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc= github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec= @@ -179,108 +241,217 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a h1:pv34s756C4pEXnjgPfGYgdhg/ZdajGhyOvzx8k+23nw= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 h1:4daAzAu0S6Vi7/lbWECcX0j45yZReDZ56BQsrVBOEEY= -github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= +github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= +github.com/aws/amazon-ec2-instance-selector/v2 v2.4.1 h1:DmxtwV+pkakkVRhxKcAgnLbxCxvT7k8DBG271dfKPZ8= +github.com/aws/amazon-ec2-instance-selector/v2 v2.4.1/go.mod h1:AEJrtkLkCkfIBIazidrVrgZqaXl+9dxI/wRgjdw+7G0= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= +github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.19.45/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.11/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.44.268 h1:WoK20tlAvsvQzTcE6TajoprbXmTbcud6MjhErL4P/38= +github.com/aws/aws-sdk-go v1.44.268/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aws/aws-sdk-go-v2 v1.16.8/go.mod h1:6CpKuLXg2w7If3ABZCl/qZ6rEgwtjZTn4eAf4RcEyuw= -github.com/aws/aws-sdk-go-v2 v1.16.14/go.mod h1:s/G+UV29dECbF5rf+RNj1xhlmvoNurGSr+McVSRj59w= -github.com/aws/aws-sdk-go-v2 v1.17.4 h1:wyC6p9Yfq6V2y98wfDsj6OnNQa4w2BLGCLIxzNhwOGY= -github.com/aws/aws-sdk-go-v2 v1.17.4/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2 v1.18.0 h1:882kkTpSFhdgYRKVZ/VCgf7sd0ru57p2JCxz4/oN5RY= +github.com/aws/aws-sdk-go-v2 v1.18.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.3 h1:S/ZBwevQkr7gv5YxONYpGQxlMFFYSRfz3RMcjsC9Qhk= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.3/go.mod h1:gNsR5CaXKmQSSzrmGxmwmct/r+ZBfbxorAuXYsj/M5Y= -github.com/aws/aws-sdk-go-v2/config v1.17.5 h1:+NS1BWvprx7nHcIk5o32LrZgifs/7Pm1V2nWjQgZ2H0= -github.com/aws/aws-sdk-go-v2/config v1.17.5/go.mod h1:H0cvPNDO3uExWts/9PDhD/0ne2esu1uaIulwn1vkwxM= -github.com/aws/aws-sdk-go-v2/credentials v1.12.18 h1:HF62tbhARhgLfvmfwUbL9qZ+dkbZYzbFdxBb3l5gr7Q= -github.com/aws/aws-sdk-go-v2/credentials v1.12.18/go.mod h1:O7n/CPagQ33rfG6h7vR/W02ammuc5CrsSM22cNZp9so= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.15 h1:nkQ+aI0OCeYfzrBipL6ja/6VEbUnHQoZHBHtoK+Nzxw= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.15/go.mod h1:Oz2/qWINxIgSmoZT9adpxJy2UhpcOAI3TIyWgYMVSz0= +github.com/aws/aws-sdk-go-v2/config v1.18.25 h1:JuYyZcnMPBiFqn87L2cRppo+rNwgah6YwD3VuyvaW6Q= +github.com/aws/aws-sdk-go-v2/config v1.18.25/go.mod h1:dZnYpD5wTW/dQF0rRNLVypB396zWCcPiBIvdvSWHEg4= +github.com/aws/aws-sdk-go-v2/credentials v1.13.24 h1:PjiYyls3QdCrzqUN35jMWtUK1vqVZ+zLfdOa/UPFDp0= +github.com/aws/aws-sdk-go-v2/credentials v1.13.24/go.mod h1:jYPYi99wUOPIFi0rhiOvXeSEReVOzBqFNOX5bXYoG2o= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.3 h1:jJPgroehGvjrde3XufFIJUZVK5A2L9a3KwSFgKy9n8w= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.3/go.mod h1:4Q0UFP0YJf0NrsEuEYHpM9fTSEVnD16Z3uyEF7J9JGM= github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.15/go.mod h1:pWrr2OoHlT7M/Pd2y4HV3gJyPb3qj5qMmnPkKSNPYK4= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.21/go.mod h1:XsmHMV9c512xgsW01q7H0ut+UQQQpWX8QsFbdLHDwaU= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.28 h1:r+XwaCLpIvCKjBIYy/HVZujQS9tsz5ohHG3ZIe0wKoE= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.28/go.mod h1:3lwChorpIM/BhImY/hy+Z6jekmN92cXGPI1QJasVPYY= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.33 h1:kG5eQilShqmJbv11XL1VpyDbaEJzWxd4zRiCG30GSn4= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.33/go.mod h1:7i0PF1ME/2eUPFcjkVIwq+DOygHEoK92t5cDqNgYbIw= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.9/go.mod h1:08tUpeSGN33QKSO7fwxXczNfiwCpbj+GxK6XKwqWVv0= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.15/go.mod h1:kjJ4CyD9M3Wq88GYg3IPfj67Rs0Uvz8aXK7MJ8BvE4I= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.22 h1:7AwGYXDdqRQYsluvKFmWoqpcOQJ4bH634SkYf3FNj/A= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.22/go.mod h1:EqK7gVrIGAHyZItrD1D8B0ilgwMD1GiWAmbU4u/JHNk= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.22 h1:nF+E8HfYpOMw6M5oA9efB602VC00IHNQnB5CmFvZPvA= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.22/go.mod h1:tltHVGy977LrSOgRR5aV9+miyno/Gul/uJNPKS7FzP4= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.27 h1:vFQlirhuM8lLlpI7imKOMsjdQLuN9CPi+k44F/OFVsk= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.27/go.mod h1:UrHnn3QV/d0pBZ6QBAEQcqFLf8FAzLmoUfPVIueOvoM= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34 h1:gGLG7yKaXG02/jBlg210R7VgQIotiQntNhsCFejawx8= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34/go.mod h1:Etz2dj6UHYuw+Xw830KfzCfWGMzqvUTCjUj5b76GVDc= github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.6 h1:3L8pcjvgaSOs0zzZcMKzxDSkYKEpwJ2dNVDdxm68jAY= github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.6/go.mod h1:O7Oc4peGZDEKlddivslfYFvAbgzvl/GH3J8j3JIGBXc= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.51.1 h1:y88XFO3AJWDVJ3HjcYc+Oo38fB948armdg6ulfphkUM= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.51.1/go.mod h1:bKs78Qpk4syfUFXKhA0hIqT3X0sxmvIAPlEHV4qVbP0= -github.com/aws/aws-sdk-go-v2/service/iam v1.19.2 h1:3VWoyWLF29SjuazBalLhYM5dtk6zUpvgK/TKvaVBnjg= -github.com/aws/aws-sdk-go-v2/service/iam v1.19.2/go.mod h1:t/9Drvr/LQZAQGq83FqtuzqP66LpFo+UaMNlAOeixoc= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.28.7 h1:49QAdDvSCBfk20XamXFIXfKBMRC81DpV7q/kvJozlro= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.28.7/go.mod h1:cQ05ETcKMluA1/g1/jMQTD/qv9E1WeYCyHmqErEoHBk= +github.com/aws/aws-sdk-go-v2/service/cloudformation v1.27.4 h1:9PqL9c4TgmUJDnSXOHxtPczF/5tc5IlH1tIvEQYcpNQ= +github.com/aws/aws-sdk-go-v2/service/cloudformation v1.27.4/go.mod h1:YtA9SsNBWnaDpSECATt8ghAOUMcGeHcnY2kTENLNmO8= +github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.25.0 h1:jy73pYpZyoQ97HFtCwlHyHP43Fu34KRDZoDFiKoegS0= +github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.25.0/go.mod h1:JJDbUhySZXBEEMEMtiNubwi7ooh7OXI8mb/ItEAShjs= +github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.20.11 h1:v50ZdTUw4Ak1Y58bnUt5Dw1k38bdU0ixZ8QGpRq3Shg= +github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.20.11/go.mod h1:5k59EsYR4orIPOQrGAKtQjIsM4Yw9qfxMeSs6+/UVN0= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.98.0 h1:WblDV33AG9dhv0zFEPEmGtD5UECSNpKMxtdENULfR8M= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.98.0/go.mod h1:L3ZT0N/vBsw77mOAawXmRnREpEjcHd2v5Hzf7AkIH8M= +github.com/aws/aws-sdk-go-v2/service/eks v1.27.12 h1:eKidf2ebtleLtH67x02syhO9t3FItv9a7/ep9KC3TAM= +github.com/aws/aws-sdk-go-v2/service/eks v1.27.12/go.mod h1:ZoyBDE311XYRiJpofw4jorVH2u+UhFpzfkrxF3aWu0U= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.15.10 h1:gGqHXu9rt/F+xGidPfFKVZUYEDZ3zKMMAOx1yVUr//U= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.15.10/go.mod h1:pidEyxe4u/vkB8wvbKRZ/r6IUJcyhQoTbSLA2HWR6cY= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.19.11 h1:IN2XMTLmhIEL5e3o+tY9JsLFSAxmjgM8gI7W2+CPrpw= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.19.11/go.mod h1:oPHYtcocUcfHOE7qygtvyZMw82nedCKZSop/R9jxlAM= +github.com/aws/aws-sdk-go-v2/service/iam v1.19.12 h1:JH1H7POlsZt41X9JYIBLZoXW0Qv+WOuC48xsafsls2Q= +github.com/aws/aws-sdk-go-v2/service/iam v1.19.12/go.mod h1:kAnokExGCYs7zfvZEZdFHvQ/x4ZKIci0Raps6mZI1Ag= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.3 h1:4n4KCtv5SUoT5Er5XV41huuzrCqepxlW3SDI9qHQebc= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.3/go.mod h1:gkb2qADY+OHaGLKNTYxMaQNacfeyQpZ4csDTQMeFmcw= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.10 h1:7LJcuRalaLw+GYQTMGmVUl4opg2HrDZkvn/L3KvIQfw= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.10/go.mod h1:Qks+dxK3O+Z2deAhNo6cJ8ls1bam3tUGUAcgxQP1c70= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.9/go.mod h1:yQowTpvdZkFVuHrLBXmczat4W+WJKg/PafBZnGBLga0= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.15 h1:xlf0J6DUgAj/ocvKQxCmad8Bu1lJuRbt5Wu+4G1xw1g= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.15/go.mod h1:ZVJ7ejRl4+tkWMuCwjXoy0jd8fF5u3RCyWjSVjUIvQE= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.27 h1:0iKliEXAcCa2qVtRs7Ot5hItA2MsufrphbRFlz1Owxo= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.27/go.mod h1:EOwBD4J4S5qYszS5/3DpkejfuK+Z5/1uzICfPaZLtqw= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.9 h1:sJdKvydGYDML9LTFcp6qq6Z5fIjN0Rdq2Gvw1hUg8tc= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.9/go.mod h1:Rc5+wn2k8gFSi3V1Ch4mhxOzjMh+bYSXVFfVaqowQOY= +github.com/aws/aws-sdk-go-v2/service/outposts v1.27.10 h1:dYviIm+qsyVZwKHh7fKK1XYHHZc9SXdI7jYOWAVUXj8= +github.com/aws/aws-sdk-go-v2/service/outposts v1.27.10/go.mod h1:672oFsPewdh6XOTh/qE3BPhO1UwdAVLLMIOkHNYbGDw= github.com/aws/aws-sdk-go-v2/service/s3 v1.27.2 h1:NvzGue25jKnuAsh6yQ+TZ4ResMcnp49AWgWGm2L4b5o= github.com/aws/aws-sdk-go-v2/service/s3 v1.27.2/go.mod h1:u+566cosFI+d+motIz3USXEh6sN8Nq4GrNXSg2RXVMo= -github.com/aws/aws-sdk-go-v2/service/sso v1.11.21 h1:7jUFr+7F4MzIjCZzy7ygRtXFQcQ0kAbT0gUvtUeAdyU= -github.com/aws/aws-sdk-go-v2/service/sso v1.11.21/go.mod h1:q8nYq51W3gpZempYsAD83fPRlrOTMCwN+Ahg4BKFTXQ= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.3 h1:UTTPNP3/WzZa7hoHP3Szb/Yl0bM3NoBrf5ABy1OArUM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.3/go.mod h1:+IF75RMJh0+zqTGXGshyEGRsU2ImqWv6UuHGkHl6kEo= -github.com/aws/aws-sdk-go-v2/service/sts v1.16.17 h1:LVM2jzEQ8mhb2dhrFl4PJ3sa5+KcKT01dsMk2Ma9/FU= -github.com/aws/aws-sdk-go-v2/service/sts v1.16.17/go.mod h1:bQujK1n0V1D1Gz5uII1jaB1WDvhj4/T3tElsJnVXCR0= +github.com/aws/aws-sdk-go-v2/service/ssm v1.36.4 h1:3AjvCuRS8OnNVRC/UBagp1Jo2feR94+VAIKO4lz8gOQ= +github.com/aws/aws-sdk-go-v2/service/ssm v1.36.4/go.mod h1:p6MaesK9061w6NTiFmZpUzEkKUY5blKlwD2zYyErxKA= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.10 h1:UBQjaMTCKwyUYwiVnUt6toEJwGXsLBI6al083tpjJzY= +github.com/aws/aws-sdk-go-v2/service/sso v1.12.10/go.mod h1:ouy2P4z6sJN70fR3ka3wD3Ro3KezSxU6eKGQI2+2fjI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.10 h1:PkHIIJs8qvq0e5QybnZoG1K/9QTrLr9OsqCIo59jOBA= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.10/go.mod h1:AFvkxc8xfBe8XA+5St5XIHHrQQtkxqrRincx4hmMHOk= +github.com/aws/aws-sdk-go-v2/service/sts v1.19.0 h1:2DQLAKDteoEDI8zpCzqBMaZlJuoE9iTYD0gFmXVax9E= +github.com/aws/aws-sdk-go-v2/service/sts v1.19.0/go.mod h1:BgQOMsg8av8jset59jelyPW7NoZcZXLVpDsXunGDrk8= github.com/aws/smithy-go v1.12.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= -github.com/aws/smithy-go v1.13.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/awslabs/goformation/v4 v4.15.5/go.mod h1:wB5lKZf1J0MYH1Lt4B9w3opqz0uIjP7MMCAcib3QkwA= +github.com/awslabs/goformation/v4 v4.19.5 h1:Y+Tzh01tWg8gf//AgGKUamaja7Wx9NPiJf1FpZu4/iU= +github.com/awslabs/goformation/v4 v4.19.5/go.mod h1:JoNpnVCBOUtEz9bFxc9sjy8uBUCLF5c4D1L7RhRTVM8= +github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benjamintf1/unmarshalledmatchers v1.0.0 h1:JUhctHQVNarMXg5x3m0Tkp7WnDLzNVxeWc1qbKQPylI= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY= github.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= +github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= +github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/briandowns/spinner v1.23.0 h1:alDF2guRWqa/FOZZYWjlMIx2L6H0wyewPxo/CH4Pt2A= github.com/briandowns/spinner v1.23.0/go.mod h1:rPG4gmXeN3wQV/TsAY4w8lPdIM6RX3yqeBQJSrbXjuE= github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= github.com/buger/goterm v1.0.4 h1:Z9YvGmOih81P0FbVtEYTFF6YsSgxSUKEhf/f9bTMXbY= github.com/buger/goterm v1.0.4/go.mod h1:HiFWV3xnkolgrBV3mY8m0X0Pumt4zg4QhbdOzQtB8tE= +github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng= github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembjv71DPz3uX/V/6MMlSyD9JBQ6kQ= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o= +github.com/bxcodec/faker v2.0.1+incompatible h1:P0KUpUw5w6WJXwrPfv35oc91i4d8nf40Nwln+M/+faA= +github.com/bxcodec/faker v2.0.1+incompatible/go.mod h1:BNzfpVdTwnFJ6GtfYTcQu6l6rHShT+veBxNCnjCx5XM= +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= +github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/caarlos0/ctrlc v1.0.0/go.mod h1:CdXpj4rmq0q/1Eb44M9zi2nKB0QraNKuRGYGrrHhcQw= +github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e/go.mod h1:9IOqJGCPMSc6E5ydlp5NIonxObaeu/Iub/X03EKPVYo= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/cavaliercoder/go-cpio v0.0.0-20180626203310-925f9528c45e/go.mod h1:oDpT4efm8tSYHXV5tHSdRvBet/b/QzxZ+XyyPehvm3A= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/cert-manager/cert-manager v1.10.0 h1:qWMM2nqt3pyCVKTWoS645PORJpK5XvtE0iImk9qTPsc= +github.com/cert-manager/cert-manager v1.10.0/go.mod h1:xKakpUDYRHgUry/DkvcCCgQDRSwVSeSXTlw7slT+AYo= +github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= +github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= +github.com/certifi/gocertifi v0.0.0-20210507211836-431795d63e8d h1:S2NE3iHSwP0XV47EEXL8mWmRdEfGscSJ+7EgePNgt0s= +github.com/certifi/gocertifi v0.0.0-20210507211836-431795d63e8d/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= +github.com/charmbracelet/bubbles v0.13.0 h1:zP/ROH3wJEBqZWKIsD50ZKKlx3ydLInq3LdD/Nrlb8w= +github.com/charmbracelet/bubbles v0.13.0/go.mod h1:bbeTiXwPww4M031aGi8UK2HT9RDWoiNibae+1yCMtcc= +github.com/charmbracelet/bubbletea v0.21.0 h1:f3y+kanzgev5PA916qxmDybSHU3N804uOnKnhRPXTcI= +github.com/charmbracelet/bubbletea v0.21.0/go.mod h1:GgmJMec61d08zXsOhqRC/AiOx4K4pmz+VIcRIm1FKr4= +github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao= +github.com/charmbracelet/lipgloss v0.5.0 h1:lulQHuVeodSgDez+3rGiuxlPVXSnhth442DATR2/8t8= +github.com/charmbracelet/lipgloss v0.5.0/go.mod h1:EZLha/HbzEt7cYqdFPovlqy5FZPj0xFhg5SaqxScmgs= github.com/chartmuseum/helm-push v0.10.3 h1:0NQq4FJvy7gXm7nlUg2aucv7LTI5wszyI71oYm1zkzk= github.com/chartmuseum/helm-push v0.10.3/go.mod h1:zVskBtjr1r6F3yx6TGrNeqvs2lWcvKeJqUcDMEzle6k= +github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cjlapao/common-go v0.0.39 h1:bAAUrj2B9v0kMzbAOhzjSmiyDy+rd56r2sy7oEiQLlA= +github.com/cjlapao/common-go v0.0.39/go.mod h1:M3dzazLjTjEtZJbbxoA5ZDiGCiHmpwqW9l4UWaddwOA= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/cli/browser v1.0.0 h1:RIleZgXrhdiCVgFBSjtWwkLPUCWyhhhN5k5HGSBt1js= github.com/cli/browser v1.0.0/go.mod h1:IEWkHYbLjkhtjwwWlwTHW2lGxeS5gezEQBMLTwDHf5Q= github.com/cli/safeexec v1.0.0 h1:0VngyaIyqACHdcMNWfo6+KdUYnqEr2Sg+bSP1pdF+dI= github.com/cli/safeexec v1.0.0/go.mod h1:Z/D4tTN8Vs5gXYHDCbaM1S/anmEDnJb1iW0+EJ5zx3Q= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/backoff v0.0.0-20161212185259-647f3cdfc87a/go.mod h1:rzgs2ZOiguV6/NpiDgADjRLPNyZlApIWxKpkT+X8SdY= +github.com/cloudflare/cfssl v1.6.3 h1:hDhRaGQN55nh0510/7A5QBN3xLoDz/M7nQX80icXvzs= +github.com/cloudflare/cfssl v1.6.3/go.mod h1:Kq0iHKY8sm2klDeQ2Ci/FI+6QdBGuyPWodgTJFLrXIw= +github.com/cloudflare/redoctober v0.0.0-20201013214028-99c99a8e7544/go.mod h1:6Se34jNoqrd8bTxrmJB2Bg2aoZ2CdSXonils9NsiNgo= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210322005330-6414d713912e/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe h1:QQ3GSy+MqSHxm/d8nCtnAiZdYFd45cYZPs8vOOIYKfk= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195 h1:58f1tJ1ra+zFINPlwLWvQsR9CzAKt2e+EWV2yX9oXQ4= +github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5 h1:xD/lrqdvwsc+O2bjSSi3YqY73Ke3LAiSCx49aCesA0E= +github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= +github.com/cockroachdb/errors v1.2.4 h1:Lap807SXTH5tri2TivECb/4abUkMZC9zRoLarvcKDqs= +github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY= +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= +github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= +github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 h1:q2hJAaP1k2wIvVRd/hEHD7lacgqrCPS+k8g1MndzfWY= +github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= github.com/containerd/containerd v1.6.18 h1:qZbsLvmyu+Vlty0/Ex5xc0z2YtKpIsb5n45mAMI+2Ns= github.com/containerd/containerd v1.6.18/go.mod h1:1RdCUu95+gc2v9t3IL+zIlpClSmew7/0YS8O5eQZrOw= +github.com/coredns/caddy v1.1.0/go.mod h1:A6ntJQlAWuQfFlsd9hvigKbo2WS0VUs2l1e2F+BawD4= +github.com/coredns/caddy v1.1.1 h1:2eYKZT7i6yxIfGP3qLJoJ7HAsDJqYB+X68g4NYjSrE0= +github.com/coredns/caddy v1.1.1/go.mod h1:A6ntJQlAWuQfFlsd9hvigKbo2WS0VUs2l1e2F+BawD4= +github.com/coredns/corefile-migration v1.0.20 h1:MdOkT6F3ehju/n9tgxlGct8XAajOX2vN+wG7To4BWSI= +github.com/coredns/corefile-migration v1.0.20/go.mod h1:XnhgULOEouimnzgn0t4WPuFDN2/PJQcTxdWKC5eXNGE= github.com/coreos/bbolt v1.3.1-coreos.6/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -293,6 +464,8 @@ github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmf github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= @@ -300,35 +473,39 @@ github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfc github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/databus23/helm-diff/v3 v3.6.0 h1:ivkIa5ciGaEXzz/JvQVN+CwZjZn4Kvbw7xb1CE5KmrM= github.com/databus23/helm-diff/v3 v3.6.0/go.mod h1:4uMSSmex9P76xAOzVuQeNs7ZRfJBDe97oFE5iTzWkFk= -github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/denisenkom/go-mssqldb v0.9.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= +github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2 h1:aBfCb7iqHmDEIp6fBvC/hQUddQfg+3qdYjwzaiP9Hnc= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= -github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= +github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/docker/cli v20.10.21+incompatible h1:qVkgyYUnOLQ98LtXBrwd/duVqPT2X4SHndOuGsfwyhU= github.com/docker/cli v20.10.21+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.21+incompatible h1:UTLdBmHk3bEY+w8qeO5KttOhy6OmXWsl/FEet9Uswog= -github.com/docker/docker v20.10.21+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.24+incompatible h1:Ugvxm7a8+Gz6vqQYQQ2W7GYq5EUPaAiuPgIfVyI3dYE= +github.com/docker/docker v20.10.24+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= @@ -342,53 +519,98 @@ github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 h1:7QPwrLT79GlD5sizHf27aoY2RTvw62mO6x7mxkScNk0= +github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46/go.mod h1:esf2rsHFNlZlxsqsZDojNBcnNs5REqIvRrWRHqX0vEU= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= -github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/elazarl/goproxy v0.0.0-20190421051319-9d40249d3c2f h1:8GDPb0tCY8LQ+OJ3dbHb5sA6YZWXFORQYZx5sdsTlMs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE= github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.11.0 h1:jtLewhRR2vMRNnq2ZZUoCjUlgut+Y0+sDDWPOfwOi1o= +github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.3.0-java/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.1/go.mod h1:txg5va2Qkip90uYoSKH+nkAAmXrb2j3iq4FLwdrCbXQ= +github.com/envoyproxy/protoc-gen-validate v0.10.0 h1:oIfnZFdC0YhpNNEX+SuIqko4cqqVZeN9IGTrhZje83Y= +github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/etcd-io/gofail v0.0.0-20190801230047-ad7f989257ca/go.mod h1:49H/RkXP8pKaZy4h0d+NW16rSLhyVBt4o6VLJbmOqDE= +github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= +github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/evertras/bubble-table v0.14.4 h1:UHUiPfsJ+lqbPSHIM1n7O8Ie2tbK0r9ReicXFnLg44I= +github.com/evertras/bubble-table v0.14.4/go.mod h1:SPOZKbIpyYWPHBNki3fyNpiPBQkvkULAtOT7NTD5fKY= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8= github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= +github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= +github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/fortytw2/leaktest v1.2.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/fullstorydev/grpcurl v1.8.0/go.mod h1:Mn2jWbdMrQGJQ8UD62uNyMumT2acsZUCkZIqFxsQf1o= +github.com/fullstorydev/grpcurl v1.8.1 h1:Pp648wlTTg3OKySeqxM5pzh8XF6vLqrm8wRq66+5Xo0= +github.com/fullstorydev/grpcurl v1.8.1/go.mod h1:3BWhvHZwNO7iLXaQlojdg5NA6SxUDePli4ecpK1N7gw= +github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= +github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= +github.com/gdamore/tcell/v2 v2.6.0 h1:OKbluoP9VYmJwZwq/iLb4BxwKcwGthaa1YNBJIyCySg= +github.com/gdamore/tcell/v2 v2.6.0/go.mod h1:be9omFATkdr0D9qewWW3d+MEvl5dha+Etb5y65J2H8Y= +github.com/getsentry/raven-go v0.2.0 h1:no+xWJRb5ZI7eE8TWgIq1jLulQiIoLG0IfYxv5JYMGs= +github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= -github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= +github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= @@ -401,22 +623,28 @@ github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gorp/gorp/v3 v3.0.2/go.mod h1:BJ3q1ejpV8cVALtcXvXaXyTOlMmJhWDxTmncaR6rwBY= +github.com/go-gorp/gorp/v3 v3.0.5/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw= github.com/go-gorp/gorp/v3 v3.1.0 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs= github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw= +github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= +github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= +github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= @@ -427,20 +655,19 @@ github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2 github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= -github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= +github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= @@ -449,7 +676,6 @@ github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCs github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= -github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= @@ -458,31 +684,35 @@ github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pL github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= -github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0= -github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= +github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68= github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/gobuffalo/flect v1.0.2 h1:eqjPGSo2WmjgY2XlpGwo2NXgL3RucAKo4k4qQMNA5sA= +github.com/gobuffalo/flect v1.0.2/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs= github.com/gobuffalo/logger v1.0.6 h1:nnZNpxYo0zx+Aj9RfMPBm+x9zAU2OayFh/xrAWi34HU= github.com/gobuffalo/logger v1.0.6/go.mod h1:J31TBEHR1QLV2683OXTAItYIg8pv2JMHnF/quuAbMjs= github.com/gobuffalo/packd v1.0.1 h1:U2wXfRr4E9DH8IdsDLlRFwTZTK7hLfq9qT/QHXGVe/0= @@ -491,23 +721,33 @@ github.com/gobuffalo/packr/v2 v2.8.3 h1:xE1yzvnO56cUC0sTpKR3DIbxZgB54AftTFMhB2XE github.com/gobuffalo/packr/v2 v2.8.3/go.mod h1:0SahksCVcx4IMnigTjiFuyldmTrdTctXsOdiU5KwbKc= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM= -github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godror/godror v0.24.2/go.mod h1:wZv/9vPiUib6tkoDl+AZ/QLf5YZgMravZ7jxH2eQWAE= +github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= -github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= +github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v0.0.0-20210429001901-424d2337a529/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20180513044358-24b0969c4cb7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -524,7 +764,8 @@ github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -543,15 +784,24 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= +github.com/google/cel-go v0.12.6 h1:kjeKudqV0OygrAqA9fX6J55S8gj+Jre2tckIm5RoG4M= +github.com/google/cel-go v0.12.6/go.mod h1:Jk7ljRzLBhkmiAwBoUxB1sZSCVBAzkqPF25olK/iRDw= +github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= +github.com/google/certificate-transparency-go v1.1.2-0.20210422104406-9f33727a7a18/go.mod h1:6CKh9dscIRoqc2kC6YUFICHZMT9NrClyPrRVFrdw1QQ= +github.com/google/certificate-transparency-go v1.1.2-0.20210511102531-373a877eec92 h1:806qveZBQtRNHroYHyg6yrsjqBJh9kIB4nfmB8uJnak= +github.com/google/certificate-transparency-go v1.1.2-0.20210511102531-373a877eec92/go.mod h1:kXWPsHVPSKVuxPPG69BRtumCbAW537FydV/GH89oBhM= github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= +github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= +github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -564,22 +814,32 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-github/v28 v28.1.1/go.mod h1:bsqJWQX05omyWVmc00nEUql9mhQyv38lDZ8kPZcQVoM= github.com/google/go-github/v45 v45.2.0 h1:5oRLszbrkvxDDqBCNj2hjDZMKmvexaZ1xw/FCD+K3FI= github.com/google/go-github/v45 v45.2.0/go.mod h1:FObaZJEDSTa/WGCzZ2Z3eoCDXWJKMenWWTrd8jrta28= +github.com/google/go-github/v48 v48.2.0 h1:68puzySE6WqUY9KWmpOsDEQfDZsso98rT6pZcz9HqcE= +github.com/google/go-github/v48 v48.2.0/go.mod h1:dDlehKBDo850ZPvCTK0sEqTCVWcrGl2LcDiajkYi89Y= +github.com/google/go-licenses v0.0.0-20210329231322-ce1d9163b77d/go.mod h1:+TYOmkVoJOpwnS0wfdsJCV9CoD5nJYsHoFk/0CrTK4M= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= -github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= +github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= +github.com/google/licenseclassifier v0.0.0-20210325184830-bb04aff29e72/go.mod h1:qsqn2hxC+vURpyBRygGUuinTO42MFRLcsmQ/P8v94+M= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= +github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= +github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -592,48 +852,84 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20230508170847-c6d6667b8fd4 h1:lDSjtNcB7iSo7VVZpLrYJ0ejDahUiLoAINoArL5W+r0= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/rpmpack v0.0.0-20191226140753-aa36bfddb3a0/go.mod h1:RaTPr0KUf2K7fnZYLNDrr8rxAamWs3iNywJLtQ2AzBg= +github.com/google/s2a-go v0.1.3 h1:FAgZmpLl/SXurPEZyCMPBIiiYeTbqfjlbdnCNTAkbGE= +github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/safetext v0.0.0-20220905092116-b49f7bc46da2 h1:SJ+NtwL6QaZ21U+IrK7d0gGgpjGGvd2kz+FzTHVzdqI= +github.com/google/safetext v0.0.0-20220905092116-b49f7bc46da2/go.mod h1:Tv1PlzqC9t8wNnpPdctvtSUOPUUg4SHeE6vR1Ir2hmg= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/trillian v1.3.14-0.20210409160123-c5ea3abd4a41/go.mod h1:1dPv0CUjNQVFEDuAUFhZql16pw/VlPgaX8qj+g5pVzQ= +github.com/google/trillian v1.3.14-0.20210428093031-b4ddea2e86b1/go.mod h1:FdIJX+NoDk/dIN2ZxTyz5nAJWgf+NSSSriPAMThChTY= +github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/wire v0.3.0/go.mod h1:i1DMg/Lu8Sz5yYl25iOdmc5CT5qusaa+zmRWs16741s= github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.8.0 h1:UBtEZqx1bjXtOQ5BVTkuYghXrr3N4V123VKJK67vJZc= +github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= +github.com/goreleaser/goreleaser v0.134.0/go.mod h1:ZT6Y2rSYa6NxQzIsdfWWNWAlYGXGbreo66NmE+3X3WQ= +github.com/goreleaser/nfpm v1.2.1/go.mod h1:TtWrABZozuLOttX2uDlYyECfQX7x5XYkVxhjYcR6G9w= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gosuri/uitable v0.0.4 h1:IG2xLKRvErL3uhY6e1BylFzG+aJiwQviDDTfOKeKTpY= github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo= github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v0.0.0-20190222133341-cfaf5686ec79/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.3.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.2/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= @@ -643,8 +939,10 @@ github.com/hashicorp/go-hclog v1.2.1/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVH github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ= -github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.6.4/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.7.2 h1:AcYqCvkpalPnPF2pn0KamgwamS42TqUDDYFRKq/RAd0= +github.com/hashicorp/go-retryablehttp v0.7.2/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= @@ -652,6 +950,9 @@ github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -659,30 +960,40 @@ github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+l github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl/v2 v2.8.2/go.mod h1:bQTN5mpo+jewjJgh8jr0JUguIi7qPHUF6yIfAEN3jqY= -github.com/hashicorp/hcl/v2 v2.13.0 h1:0Apadu1w6M11dyGFxWnmhhcMjkbAiKCv7G1r/2QgCNc= -github.com/hashicorp/hcl/v2 v2.13.0/go.mod h1:e4z5nxYlWNPdDSNYX+ph14EvWYMFm3eP0zIUqPc2jr0= +github.com/hashicorp/hcl/v2 v2.15.0 h1:CPDXO6+uORPjKflkWCCwoWc9uRp+zSIPcCQ+BrxV7m8= +github.com/hashicorp/hcl/v2 v2.15.0/go.mod h1:JRmR89jycNkrrqnMmvPDMd56n1rQJ2Q6KocSLCMCXng= github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/terraform-json v0.17.1 h1:eMfvh/uWggKmY7Pmb3T85u86E2EQg6EQHgyRwf3RkyA= +github.com/hashicorp/terraform-json v0.17.1/go.mod h1:Huy6zt6euxaY9knPAFKjUITn8QxUFIe9VuSzb4zn/0o= github.com/hashicorp/terraform-plugin-log v0.7.0 h1:SDxJUyT8TwN4l5b5/VkiTIaQgY6R+Y2BQ0sRZftGKQs= github.com/hashicorp/terraform-plugin-log v0.7.0/go.mod h1:p4R1jWBXRTvL4odmEkFfDdhUjHf9zcs/BCoNHAc7IK4= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.20.0 h1:+KxZULPsbjpAVoP0WNj/8aVW6EqpcX5JcUcQ5wl7Da4= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.20.0/go.mod h1:DwGJG3KNxIPluVk6hexvDfYR/MS/eKGpiztJoT3Bbbw= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.1 h1:zHcMbxY0+rFO9gY99elV/XC/UnQVg7FhRCbj1i5b7vM= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.1/go.mod h1:+tNlb0wkfdsDJ7JEiERLz4HzM19HyiuIoGzTsM7rPpw= github.com/helm/helm-mapkubeapis v0.4.1 h1:Xu03dMzVv/zqp+Vw1+2ZHufnDQRqoGa8Ml4N/GBgqME= github.com/helm/helm-mapkubeapis v0.4.1/go.mod h1:o2qnBCfz2cbUod9QlbPjjXtsQI/X7QQjwU/rk7m1T2M= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= +github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/huandu/xstrings v1.3.3 h1:/Gcsuc1x8JVbJ9/rlye4xZnVAbEkGauT8lbebqcQws4= github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU= +github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/iancoleman/strcase v0.0.0-20180726023541-3605ed457bf7/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= @@ -690,35 +1001,49 @@ github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK github.com/inancgumus/screen v0.0.0-20190314163918-06e984b86ed3 h1:fO9A67/izFYFYky7l1pDP5Dr0BTCRkaQJUG6Jm5ehsk= github.com/inancgumus/screen v0.0.0-20190314163918-06e984b86ed3/go.mod h1:Ey4uAp+LvIl+s5jRbOHLcZpUDnkjLBROl15fZLwPlTM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= -github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/jarcoal/httpmock v1.0.5/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck= github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= +github.com/jhump/protoreflect v1.8.2 h1:k2xE7wcUomeqwY0LDCYA16y4WWfyTcMx5mKhk0d4ua0= +github.com/jhump/protoreflect v1.8.2/go.mod h1:7GcYQDdMU/O/BBrl/cX6PNHpXh6cenjd8pneu5yW7Tg= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmhodges/clock v0.0.0-20160418191101-880ee4c33548/go.mod h1:hGT6jSUVzF6no3QaDSMLGLEHtHSBSefs+MgcDWnmhmo= +github.com/jmoiron/sqlx v1.3.3/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ= github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ= +github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= @@ -728,14 +1053,21 @@ github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= -github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kevinburke/ssh_config v1.1.0 h1:pH/t1WS9NzT8go394IqZeJTMHVm6Cr6ZJ6AQ+mdNo/o= +github.com/kevinburke/ssh_config v1.1.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/kisielk/sqlstruct v0.0.0-20201105191214-5f3e10d3ab46/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE= +github.com/kisom/goutils v1.4.3/go.mod h1:Lp5qrquG7yhYnWzZCI/68Pa/GpFynw//od6EkGnWpac= +github.com/klauspost/compress v1.15.14 h1:i7WCKDToww0wA+9qrUZ1xOjp218vfFo3nTU6UHp+gOc= +github.com/klauspost/compress v1.15.14/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kortschak/utter v1.0.1/go.mod h1:vSmSjbyrlKjjsL71193LmzBOKgwePk9DH6uFaWHIInc= @@ -746,13 +1078,21 @@ github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kris-nova/logger v0.2.1 h1:hbZusgXXXTSd0rNAMBBe/8lhjxXkqWs0+nzjwewCI+E= +github.com/kris-nova/logger v0.2.1/go.mod h1:++9BgZujZd4v0ZTZCb5iPsaomXdZWyxotIAh1IiDm44= +github.com/kris-nova/novaarchive v0.0.0-20210219195539-c7c1cabb2577 h1:wDLPO65M4W4VRDq9kyPAqbg+10OAq6hUfnv6ORhBYOc= github.com/ktrysmt/go-bitbucket v0.9.55 h1:eOrF7wWmG4wz5iPr7ymgyWLoti2OfmrhU2tmT6yhAu8= github.com/ktrysmt/go-bitbucket v0.9.55/go.mod h1:y5wrrDHCGUFAtuC43GyLBeFigq7rwrh4HqeDOOyZT+A= +github.com/kubicorn/kubicorn v0.0.0-20180829191017-06f6bce92acc h1:7jGjX/rZDjpMwz0kojvzWvRpOvUiR7L8e22QEr7RYes= +github.com/kubicorn/kubicorn v0.0.0-20180829191017-06f6bce92acc/go.mod h1:Z/PU7XQicaZV6QFTAvm8EaWyfNbAb4a76kmR4Am4KA8= +github.com/kylelemons/go-gypsy v1.0.0/go.mod h1:chkXM0zjdpXOiqkCW1XcCHDfjfk14PH2KKkQWxfJUcU= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= @@ -772,26 +1112,35 @@ github.com/leaanthony/gosod v1.0.3 h1:Fnt+/B6NjQOVuCWOKYRREZnjGyvg+mEhd1nkkA04aT github.com/leaanthony/gosod v1.0.3/go.mod h1:BJ2J+oHsQIyIQpnLPjnqFGTMnOZXDbvWtRCSG7jGxs4= github.com/leaanthony/slicer v1.5.0 h1:aHYTN8xbCCLxJmkNKiLB6tgcMARl4eWmH9/F+S/0HtY= github.com/leaanthony/slicer v1.5.0/go.mod h1:FwrApmf8gOrpzEWM2J/9Lh79tyq8KTX5AzRtwV7m4AY= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= +github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= +github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.1/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lyft/protoc-gen-star v0.5.1/go.mod h1:9toiA3cC7z5uVbODF7kEQ91Xn7XNFkVUl+SrEe+ZORU= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/markbates/errx v1.1.0 h1:QDFeR+UP95dO12JgW+tgi2UVfo0V8YBHiUIOaeBPiEI= github.com/markbates/errx v1.1.0/go.mod h1:PLa46Oex9KNbVDZhKel8v1OT7hD5JZ2eI7AHhA0wswc= github.com/markbates/oncer v1.0.0 h1:E83IaVAHygyndzPimgUYJjbshhDTALZyXxvk9FOlQRY= @@ -802,41 +1151,74 @@ github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlW github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-oci8 v0.1.1/go.mod h1:wjDx6Xm9q7dFtHJvIlrI99JytznLw5wQ4R+9mNXJwGI= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= +github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= +github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-shellwords v1.0.10/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.7/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI= +github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mattn/go-zglob v0.0.1/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/microsoft/kiota-abstractions-go v1.2.0 h1:lUriJgqdCY/QajwWQOgTCQE9Atywfe2NHhgoTCSXTRE= +github.com/microsoft/kiota-abstractions-go v1.2.0/go.mod h1:RkxyZ5x87Njik7iVeQY9M2wtrrL1MJZcXiI/BxD/82g= +github.com/microsoft/kiota-authentication-azure-go v1.0.0 h1:29FNZZ/4nnCOwFcGWlB/sxPvWz487HA2bXH8jR5k2Rk= +github.com/microsoft/kiota-authentication-azure-go v1.0.0/go.mod h1:rnx3PRlkGdXDcA/0lZQTbBwyYGmc+3POt7HpE/e4jGw= +github.com/microsoft/kiota-http-go v1.1.0 h1:L5I93EiNtlP/X6YzeTlhjWt7Q1DxzC9CmWSVtX3b0tE= +github.com/microsoft/kiota-http-go v1.1.0/go.mod h1:zESUM6ovki9LEupqziCbxJ+FAYoF0dFDYZVpOkAfSLc= +github.com/microsoft/kiota-serialization-form-go v1.0.0 h1:UNdrkMnLFqUCccQZerKjblsyVgifS11b3WCx+eFEsAI= +github.com/microsoft/kiota-serialization-form-go v1.0.0/go.mod h1:h4mQOO6KVTNciMF6azi1J9QB19ujSw3ULKcSNyXXOMA= +github.com/microsoft/kiota-serialization-json-go v1.0.4 h1:5TaISWwd2Me8clrK7SqNATo0tv9seOq59y4I5953egQ= +github.com/microsoft/kiota-serialization-json-go v1.0.4/go.mod h1:rM4+FsAY+9AEpBsBzkFFis+b/LZLlNKKewuLwK9Q6Mg= +github.com/microsoft/kiota-serialization-text-go v1.0.0 h1:XOaRhAXy+g8ZVpcq7x7a0jlETWnWrEum0RhmbYrTFnA= +github.com/microsoft/kiota-serialization-text-go v1.0.0/go.mod h1:sM1/C6ecnQ7IquQOGUrUldaO5wj+9+v7G2W3sQ3fy6M= +github.com/microsoftgraph/msgraph-sdk-go v0.61.0 h1:Xa8KoQ6CS04CnUxAVectu185VLlLzAWxH0C3UxMWp1E= +github.com/microsoftgraph/msgraph-sdk-go v0.61.0/go.mod h1:vPylvYw8unnEZWmfCBeiwMoLvEeHW2FcWD0LjUnuiC4= +github.com/microsoftgraph/msgraph-sdk-go-core v1.0.0 h1:7NWTfyXvOjoizW7PmxNp3+8wCKPgpODs/D1cUZ3fkAY= +github.com/microsoftgraph/msgraph-sdk-go-core v1.0.0/go.mod h1:tQb4q3YMIj2dWhhXhQSJ4ELpol931ANKzHSYK5kX1qE= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= +github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/mikesmitty/edkey v0.0.0-20170222072505-3356ea4e686a h1:eU8j/ClY2Ty3qdHnn0TyW3ivFoPC/0F1gQZz8yTxbbE= github.com/mikesmitty/edkey v0.0.0-20170222072505-3356ea4e686a/go.mod h1:v8eSC2SMp9/7FTKUncp7fH9IwPfw+ysMObcEz5FWheQ= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/cli v1.1.4/go.mod h1:vTLESy5mRhKOs9KDp0/RATawxP1UqBmdrpVRMnpcvKQ= +github.com/mitchellh/cli v1.1.5/go.mod h1:v8+iFts2sPIKUV1ltktPXMCC8fumSKFItNcD2cLtRR4= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= @@ -860,72 +1242,141 @@ github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/sys/mountinfo v0.5.0 h1:2Ks8/r6lopsxWi9m58nlwjaeSzUX9iiL1vj5qB/9ObI= +github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78= github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= -github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474/go.mod h1:OQA4XLvDbMgS8P0CevmM4m9Q3Jq4phKUzcocxuGJ5m8= +github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b h1:1XF24mVaiu7u+CFywTdcDo2ie1pzzhwjt6RHqzpMU34= +github.com/muesli/ansi v0.0.0-20211018074035-2e021307bc4b/go.mod h1:fQuZ0gauxyBcmsdE3ZT4NasjaRdxmbCS0jRHsrWu3Ho= +github.com/muesli/cancelreader v0.2.0/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= +github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= +github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= +github.com/muesli/reflow v0.2.1-0.20210115123740-9e1d0d53df68/go.mod h1:Xk+z4oIWdQqJzsxyjgl3P22oYZnHdZ8FFTHAQQt5BMQ= +github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= +github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= +github.com/muesli/termenv v0.11.1-0.20220204035834-5ac8409525e0/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs= +github.com/muesli/termenv v0.11.1-0.20220212125758-44cd13922739/go.mod h1:Bd5NYQ7pd+SrtBSrSNoBBmXlcY8+Xj4BMJgh8qcZrvs= +github.com/muesli/termenv v0.15.1 h1:UzuTb/+hhlBugQz28rpzey4ZuKcZ03MeKsoG7IJZIxs= +github.com/muesli/termenv v0.15.1/go.mod h1:HeAQPTzpfs016yGtA4g00CsdYnVLJvxsS4ANqrZs2sQ= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= +github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nelsam/hel/v2 v2.3.2/go.mod h1:1ZTGfU2PFTOd5mx22i5O0Lc2GY933lQ2wb/ggy+rL3w= +github.com/nelsam/hel/v2 v2.3.3/go.mod h1:1ZTGfU2PFTOd5mx22i5O0Lc2GY933lQ2wb/ggy+rL3w= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nishanths/predeclared v0.0.0-20200524104333-86fad755b4d3/go.mod h1:nt3d53pc1VYcphSCIaYAJtnPYnr3Zyn8fMq2wvPGPso= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/oleiade/reflections v1.0.1 h1:D1XO3LVEYroYskEsoSiGItp9RUxG6jWnCVvrqH0HHQM= github.com/oleiade/reflections v1.0.1/go.mod h1:rdFxbxq4QXVZWj0F+e9jqjDkc7dbp97vkRixKo2JR60= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 h1:Yl0tPBa8QPjGmesFh1D0rDy+q1Twx6FyU7VWHi8wZbI= +github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852/go.mod h1:eqOVx5Vwu4gd2mmMZvVZsgIqNSaW3xxRThUJ0k/TPk4= github.com/onsi/ginkgo v1.4.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.6.1 h1:1xQPCjcqYw/J5LchOcp4/2q/jzJFjiAOc25chhnDw+Q= -github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= +github.com/onsi/ginkgo/v2 v2.9.4 h1:xR7vG4IXt5RWx6FfIjyAtsoMAtnc3C/rFXBBd2AjZwE= github.com/onsi/gomega v1.3.0/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.24.2 h1:J/tulyYK6JwBldPViHJReihxxZ+22FHs0piGjQAvoUE= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= +github.com/onsi/gomega v1.12.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= +github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= -github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= +github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8= +github.com/opencontainers/image-spec v1.1.0-rc3/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/orcaman/concurrent-map v1.0.0 h1:I/2A2XPCb4IuQWcQhBhSwGfiuybl/J0ev9HDbW65HOY= +github.com/orcaman/concurrent-map v1.0.0/go.mod h1:Lu3tH6HLW3feq74c2GC+jIMS/K2CFcDWnWD9XkenwhI= +github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= +github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= +github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= +github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/packethost/packngo v0.29.0 h1:gRIhciVZQ/zLNrIdIdbOUyB/Tw5IgoaXyhP4bvE+D2s= github.com/packethost/packngo v0.29.0/go.mod h1:/UHguFdPs6Lf6FOkkSEPnRY5tgS0fsVM+Zv/bvBrmt0= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU= -github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= -github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -933,8 +1384,11 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pluralsh/cluster-api-migration v0.2.15 h1:TIfusD+wnhZTGmwNfIlKlKJOT2dE3rUaZawDJw98GjY= +github.com/pluralsh/cluster-api-migration v0.2.15/go.mod h1:J6lEvC/70KouikX16mE331cxc3y3sBwtmfHGwZqu06w= github.com/pluralsh/controller-reconcile-helper v0.0.4 h1:1o+7qYSyoeqKFjx+WgQTxDz4Q2VMpzprJIIKShxqG0E= github.com/pluralsh/controller-reconcile-helper v0.0.4/go.mod h1:AfY0gtteD6veBjmB6jiRx/aR4yevEf6K0M13/pGan/s= github.com/pluralsh/gqlclient v1.10.0 h1:ccYB+A0JbPYkEeVzdfajd29l65N6x/buSKPMMxM8OIA= @@ -943,118 +1397,166 @@ github.com/pluralsh/helm-docs v1.11.3-0.20230914190909-3fe18acd95d7 h1:tfxqRM5zN github.com/pluralsh/helm-docs v1.11.3-0.20230914190909-3fe18acd95d7/go.mod h1:rLqec59NO7YF57Rq9VlubQHMp7wcRTJhzpkcgs4lOG4= github.com/pluralsh/oauth v0.9.2 h1:tM9hBK4tCnJUeCOgX0ctxBBCS3hiCDPoxkJLODtedmQ= github.com/pluralsh/oauth v0.9.2/go.mod h1:aTUw/75rzcsbvW+/TLvWtHVDXFIdtFrDtUncOq9vHyM= -github.com/pluralsh/plural-operator v0.5.3 h1:GaPL3LgimfzKZNHt7zXzqYZpb0hgyW9noHYnkA+rqNs= -github.com/pluralsh/plural-operator v0.5.3/go.mod h1:WIXiz26/WDcUn0FA7Q1jPxmfsm98U1/JL8YpIdKVLX0= +github.com/pluralsh/plural-operator v0.5.5 h1:57GxniNjUa3hpHgvFr9oDonFgvDUC8XDD5B0e7Xduzk= +github.com/pluralsh/plural-operator v0.5.5/go.mod h1:WIXiz26/WDcUn0FA7Q1jPxmfsm98U1/JL8YpIdKVLX0= github.com/pluralsh/polly v0.1.1 h1:VtbS83re2YuDgscvaFgfzEDZs9uXRV84fCdvKCgIRE4= github.com/pluralsh/polly v0.1.1/go.mod h1:Yo1/jcW+4xwhWG+ZJikZy4J4HJkMNPZ7sq5auL2c/tY= +github.com/pluralsh/terraform-delinker v0.0.1 h1:I0cnf5IqY94qJWzFwPaRsrFp0s3gR+YnYKodYfUSMvA= +github.com/pluralsh/terraform-delinker v0.0.1/go.mod h1:mU4F5OtfAIG5Xobbk+3uiU++AWKyfZPyyMmVZd23bV4= github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/poy/onpar v0.0.0-20190519213022-ee068f8ea4d1/go.mod h1:nSbFQvMj97ZyhFRSJYtut+msi4sOY6zJDGCdSc+/rZU= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/posthog/posthog-go v0.0.0-20230801140217-d607812dee69 h1:01dHVodha5BzrMtVmcpPeA4VYbZEsTXQ6m4123zQXJk= +github.com/posthog/posthog-go v0.0.0-20230801140217-d607812dee69/go.mod h1:migYMxlAqcnQy+3eN8mcL0b2tpKy6R+8Zc0lxwk4dKM= +github.com/poy/onpar v0.0.0-20200406201722-06f95a1c68e8/go.mod h1:nSbFQvMj97ZyhFRSJYtut+msi4sOY6zJDGCdSc+/rZU= github.com/poy/onpar v1.1.2 h1:QaNrNiZx0+Nar5dLgTVp5mXkyoVFIbepjyEoGSnhbAY= +github.com/poy/onpar v1.1.2/go.mod h1:6X8FLNoxyr9kkmnlqpK6LSoiOtrO6MICtWwEuWkLjzg= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= +github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.15.1 h1:8tXpTmJbyH5lydzFPoxSIJ0J46jdh3tylbvM1xCv0LI= +github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/common v0.24.0/go.mod h1:H6QK/N6XVT42whUeIdI3dp36w49c+/iMDk7UAI2qm7Q= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= +github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/pseudomuto/protoc-gen-doc v1.4.1/go.mod h1:exDTOVwqpp30eV/EDPFLZy3Pwr2sn6hBC1WIYH/UbIg= +github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= -github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/tview v0.0.0-20230615085408-bb9595ee0f4d h1:meetFLuP+bgn5G55WXzxLp2UnNeUJ0hM3guL+0dX8EI= +github.com/rivo/tview v0.0.0-20230615085408-bb9595ee0f4d/go.mod h1:nVwGv4MP47T0jvlk7KuTTjjuSmrGO4JF0iaiNt4bufE= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= +github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rodaine/hclencoder v0.0.1 h1:1jK2rGFxSDT1eU9oVjK4ewrIhMWTcc0yCfZMiN6xRJM= github.com/rodaine/hclencoder v0.0.1/go.mod h1:XKt85p0Ifyt0pr1KVeB3eL+dUFAKa+IA637lLahBcOQ= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= -github.com/rubenv/sql-migrate v1.2.0 h1:fOXMPLMd41sK7Tg75SXDec15k3zg5WNV6SjuDRiNfcU= -github.com/rubenv/sql-migrate v1.2.0/go.mod h1:Z5uVnq7vrIrPmHbVFfR4YLHRZquxeHpckCnRq0P/K9Y= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rubenv/sql-migrate v1.3.1 h1:Vx+n4Du8X8VTYuXbhNxdEUoh6wiJERA0GlWocR5FrbA= +github.com/rubenv/sql-migrate v1.3.1/go.mod h1:YzG/Vh82CwyhTFXy+Mf5ahAiiEOpAlHurg+23VEzcsk= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/samber/lo v1.33.0 h1:2aKucr+rQV6gHpY3bpeZu69uYoQOzVhGT3J22Op6Cjk= -github.com/samber/lo v1.33.0/go.mod h1:HLeWcJRRyLKp3+/XBJvOrerCQn9mhdKMHyd7IRlgeQ8= +github.com/sahilm/fuzzy v0.1.0 h1:FzWGaw2Opqyu+794ZQ9SYifWv2EIXpwP4q8dY1kDAwI= +github.com/sahilm/fuzzy v0.1.0/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y= +github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM= +github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sanathkr/go-yaml v0.0.0-20170819195128-ed9d249f429b h1:jUK33OXuZP/l6babJtnLo1qsGvq6G9so9KMflGAm4YA= +github.com/sanathkr/go-yaml v0.0.0-20170819195128-ed9d249f429b/go.mod h1:8458kAagoME2+LN5//WxE71ysZ3B7r22fdgb7qVmXSY= +github.com/sanathkr/yaml v0.0.0-20170819201035-0056894fa522 h1:fOCp11H0yuyAt2wqlbJtbyPzSgaxHTv8uN1pMpkG1t8= +github.com/sanathkr/yaml v0.0.0-20170819201035-0056894fa522/go.mod h1:tQTYKOQgxoH3v6dEmdHiz4JG+nbxWwM5fgPQUpSZqVQ= +github.com/sassoftware/go-rpmutils v0.0.0-20190420191620-a8f1baeba37b/go.mod h1:am+Fp8Bt506lA3Rk3QCmSqmYmLMnPDhdDUcosQCAx+I= github.com/schollz/progressbar/v3 v3.8.6 h1:QruMUdzZ1TbEP++S1m73OqRJk20ON11m6Wqv4EoGg8c= github.com/schollz/progressbar/v3 v3.8.6/go.mod h1:W5IEwbJecncFGBvuEh4A7HT1nZZ6WNIL2i3qbnI0WKY= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= +github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= +github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= +github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/gunit v1.0.0/go.mod h1:qwPWnhz6pn0NnRBP++URONOVyNkPyr4SauJk4cUOwJs= github.com/soheilhy/cmux v0.1.3/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/soheilhy/cmux v0.1.5-0.20210205191134-5ec6847320e5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= +github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= +github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.3.4/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.8.0 h1:5MmtuhAgYeU6qpa7w7bP0dv6MBYuup0vekhSpSkoq60= -github.com/spf13/afero v1.8.0/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= +github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= +github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= -github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= -github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= -github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -1063,16 +1565,22 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= +github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= +github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= +github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -1082,32 +1590,64 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= +github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/thoas/go-funk v0.9.2 h1:oKlNYv0AY5nyf9g+/GhMgS/UO2ces0QRdPKwkhY3VCk= github.com/thoas/go-funk v0.9.2/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q= +github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM= +github.com/tidwall/gjson v1.14.4/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= +github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= +github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= +github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= +github.com/tj/assert v0.0.3 h1:Df/BlaZ20mq6kuai7f5z2TvPFiwC3xaWJSDQNiIS3Rk= +github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= +github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= +github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= github.com/tkrajina/go-reflector v0.5.5 h1:gwoQFNye30Kk7NrExj8zm3zFtrGPqOkzFMLuQZg1DtQ= github.com/tkrajina/go-reflector v0.5.5/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 h1:uruHq4dN7GR16kFc5fp3d1RIYzJW5onx8Ybykw2YQFA= +github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= -github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.10 h1:p8Fspmz3iTctJstry1PYS3HVdllxnEzTEsgIgtxTrCk= -github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.14 h1:ebbhrRiGK2i4naQJr+1Xj92HXZCrK7MsyTS/ob3HnAk= +github.com/urfave/cli v1.22.14/go.mod h1:X0eDS6pD6Exaclxm99NJ3FiCDRED7vIHpx2mDOHLvkA= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ= +github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY= github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= github.com/vektah/gqlparser/v2 v2.5.1 h1:ZGu+bquAY23jsxDRcYpWjttRZrUz07LbiY77gUOHcr4= github.com/vektah/gqlparser/v2 v2.5.1/go.mod h1:mPgqFBu/woKTVYWyNk8cO3kh4S/f4aRFZrvOnp3hmCs= +github.com/vektra/mockery v1.1.2 h1:uc0Yn67rJpjt8U/mAZimdCKn9AeA97BOkjpmtBSlfP4= github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= @@ -1115,27 +1655,43 @@ github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhw github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= github.com/wailsapp/wails/v2 v2.4.1 h1:Ns7MOKWQM6l0ttBxpd5VcgYrH+GNPOnoDfnsBpbDnzM= github.com/wailsapp/wails/v2 v2.4.1/go.mod h1:jbOZbcr/zm79PxXxAjP8UoVlDd9wLW3uDs+isIthDfs= +github.com/weaveworks/eksctl v0.143.0 h1:Lky87+0IXuu7gVPCmqM1a2lAJ8Uz55VH8Ev2dxxwZ+M= +github.com/weaveworks/eksctl v0.143.0/go.mod h1:yz42S4Vn344QYrles2xMmq3ENFW/P2BuYUgA6K/qoxQ= +github.com/weaveworks/goformation/v4 v4.10.2-0.20221208090411-a71cb48c37d5 h1:bG65NywFrvj9REHN7RXXqQWHHy/zg9TkmJAuXkf1sJ8= +github.com/weaveworks/goformation/v4 v4.10.2-0.20221208090411-a71cb48c37d5/go.mod h1:x92o12+Azh6DQ4yoXT5oEuE7dhQHR5V2vy/fmZ6pO7k= +github.com/weppos/publicsuffix-go v0.13.1-0.20210123135404-5fd73613514e/go.mod h1:HYux0V0Zi04bHNwOHy4cXJVz/TQjYonnF6aoYhj+3QE= +github.com/weppos/publicsuffix-go v0.15.1-0.20210511084619-b1f36a2d6c0b/go.mod h1:HYux0V0Zi04bHNwOHy4cXJVz/TQjYonnF6aoYhj+3QE= +github.com/xanzy/go-gitlab v0.31.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug= github.com/xanzy/go-gitlab v0.70.0 h1:zJ8WukB5psMcfmQctHsiG/PyqLqLIdD05wCLwdPNEBg= github.com/xanzy/go-gitlab v0.70.0/go.mod h1:o4yExCtdaqlM8YGdDJWuZoBmfxBsmA9TPEjs9mx1UO4= -github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= +github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= +github.com/xanzy/ssh-agent v0.3.1 h1:AmzO1SSWxw73zxFZPRwaMN1MohDw8UyHnmuxyceTEGo= +github.com/xanzy/ssh-agent v0.3.1/go.mod h1:QIE4lCeL7nkC25x+yA3LBIYfwCc1TFziCtG7cBAac6w= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v0.0.0-20181112162635-ac52e6811b56/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xlab/treeprint v1.1.0 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk= -github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= +github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= +github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4= +github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/gopher-lua v0.0.0-20190206043414-8bfc7677f583/go.mod h1:gqRgreBUhTSL0GeU64rtZ3Uq3wtjOa/TB2YfrtkCbVQ= github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64 h1:5mLPGnFdSsevFRFc9q3yYbBkB6tsm4aCwwQV/j1JQAQ= @@ -1145,20 +1701,60 @@ github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMzt github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= github.com/zclconf/go-cty v1.7.1/go.mod h1:VDR4+I79ubFBGm1uJac1226K5yANQFHeauxPBoP54+o= -github.com/zclconf/go-cty v1.10.0 h1:mp9ZXQeIcN8kAwuqorjH+Q+njbJKjLrvB2yIh4q7U+0= -github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= +github.com/zclconf/go-cty v1.13.2 h1:4GvrUxe/QUDYuJKAav4EYqdM47/kZa672LwmXFmEKT0= +github.com/zclconf/go-cty v1.13.2/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= +github.com/zmap/rc2 v0.0.0-20131011165748-24b9757f5521/go.mod h1:3YZ9o3WnatTIZhuOtot4IcUfzoKVjUHqu6WALIyI0nE= +github.com/zmap/zcertificate v0.0.0-20180516150559-0e3d58b1bac4/go.mod h1:5iU54tB79AMBcySS0R2XIyZBAVmeHranShAFELYx7is= +github.com/zmap/zcrypto v0.0.0-20210123152837-9cf5beac6d91/go.mod h1:R/deQh6+tSWlgI9tb4jNmXxn8nSCabl5ZQsBX9//I/E= +github.com/zmap/zcrypto v0.0.0-20210511125630-18f1e0152cfc/go.mod h1:FM4U1E3NzlNMRnSUTU3P1UdukWhYGifqEsjk9fn7BCk= +github.com/zmap/zlint/v3 v3.1.0/go.mod h1:L7t8s3sEKkb0A2BxGy1IWrxt1ZATa1R4QfJZaQOD3zU= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= +go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd/api/v3 v3.5.0-alpha.0/go.mod h1:mPcW6aZJukV6Aa81LSKpBjQXTWlXB5r74ymPoSWa3Sw= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.5/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8= +go.etcd.io/etcd/api/v3 v3.5.6 h1:Cy2qx3npLcYqTKqGJzMypnMv2tiRyifZJ17BlWIWA7A= +go.etcd.io/etcd/api/v3 v3.5.6/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.5/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ= +go.etcd.io/etcd/client/pkg/v3 v3.5.6 h1:TXQWYceBKqLp4sa87rcPs11SXxUA/mHwH975v+BDvLU= +go.etcd.io/etcd/client/pkg/v3 v3.5.6/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ= +go.etcd.io/etcd/client/v2 v2.305.0-alpha.0/go.mod h1:kdV+xzCJ3luEBSIeQyB/OEKkWKd8Zkux4sbDeANrosU= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.etcd.io/etcd/client/v2 v2.305.5/go.mod h1:zQjKllfqfBVyVStbt4FaosoX2iYd8fV/GRy/PbowgP4= +go.etcd.io/etcd/client/v2 v2.305.6 h1:fIDR0p4KMjw01MJMfUIDWdQbjo06PD6CeYM5z4EHLi0= +go.etcd.io/etcd/client/v2 v2.305.6/go.mod h1:BHha8XJGe8vCIBfWBpbBLVZ4QjOIlfoouvOwydu63E0= +go.etcd.io/etcd/client/v3 v3.5.0-alpha.0/go.mod h1:wKt7jgDgf/OfKiYmCq5WFGxOFAkVMLxiiXgLDFhECr8= +go.etcd.io/etcd/client/v3 v3.5.5/go.mod h1:aApjR4WGlSumpnJ2kloS75h6aHUmAyaPLjHMxpc7E7c= +go.etcd.io/etcd/client/v3 v3.5.6 h1:coLs69PWCXE9G4FKquzNaSHrRyMCAXwF+IX1tAPVO8E= +go.etcd.io/etcd/client/v3 v3.5.6/go.mod h1:f6GRinRMCsFVv9Ht42EyY7nfsVGwrNO0WEoS2pRKzQk= +go.etcd.io/etcd/etcdctl/v3 v3.5.0-alpha.0 h1:odMFuQQCg0UmPd7Cyw6TViRYv9ybGuXuki4CusDSzqA= +go.etcd.io/etcd/etcdctl/v3 v3.5.0-alpha.0/go.mod h1:YPwSaBciV5G6Gpt435AasAG3ROetZsKNUzibRa/++oo= +go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0 h1:3yLUEC0nFCxw/RArImOyRUI4OAFbg4PFpBbAhSNzKNY= +go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0/go.mod h1:tV31atvwzcybuqejDoY3oaNRTtlD2l/Ot78Pc9w7DMY= +go.etcd.io/etcd/raft/v3 v3.5.0-alpha.0/go.mod h1:FAwse6Zlm5v4tEWZaTjmNhe17Int4Oxbu7+2r0DiD3w= +go.etcd.io/etcd/raft/v3 v3.5.5 h1:Ibz6XyZ60OYyRopu73lLM/P+qco3YtlZMOhnXNS051I= +go.etcd.io/etcd/raft/v3 v3.5.5/go.mod h1:76TA48q03g1y1VpTue92jZLr9lIHKUNcYdZOOGyx8rI= +go.etcd.io/etcd/server/v3 v3.5.0-alpha.0/go.mod h1:tsKetYpt980ZTpzl/gb+UOJj9RkIyCb1u4wjzMg90BQ= +go.etcd.io/etcd/server/v3 v3.5.5 h1:jNjYm/9s+f9A9r6+SC4RvNaz6AqixpOvhrFdT0PvIj0= +go.etcd.io/etcd/server/v3 v3.5.5/go.mod h1:rZ95vDw/jrvsbj9XpTqPrTAB9/kzchVdhRirySPkUBc= +go.etcd.io/etcd/tests/v3 v3.5.0-alpha.0 h1:UcRoCA1FgXoc4CEM8J31fqEvI69uFIObY5ZDEFH7Znc= +go.etcd.io/etcd/tests/v3 v3.5.0-alpha.0/go.mod h1:HnrHxjyCuZ8YDt8PYVyQQ5d1ZQfzJVEtQWllr5Vp/30= +go.etcd.io/etcd/v3 v3.5.0-alpha.0 h1:ZuqKJkD2HrzFUj8IB+GLkTMKZ3+7mWx172vx6F1TukM= +go.etcd.io/etcd/v3 v3.5.0-alpha.0/go.mod h1:JZ79d3LV6NUfPjUxXrpiFAYcjhT+06qqw+i28snx8To= go.mercari.io/hcledit v0.0.8 h1:ZYitdauqspPYXJKQepKDD7WFem6flYS47fK6cGcnmXg= go.mercari.io/hcledit v0.0.8/go.mod h1:hxXqCyKJ6WA+Oeo7KZuMr9SZLq/GGFD627ovBcIUAq0= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1168,19 +1764,67 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.25.0/go.mod h1:E5NNboN0UqSAki0Atn9kVwaN7I+l25gGxDqBueo/74E= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.35.0 h1:xFSRQBbXF6VvYRf2lqMJXxoB72XI1K/azav8TekHHSw= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.35.0/go.mod h1:h8TWwRAhQpOd0aM5nYsRD8+flnkj+526GEIVlarH7eY= +go.opentelemetry.io/otel v1.0.1/go.mod h1:OPEOD4jIT2SlZPMmwT6FqZz2C0ZNdQqiWcoK6M0SNFU= +go.opentelemetry.io/otel v1.16.0 h1:Z7GVAX/UkAXPKsy94IU+i6thsQS4nb7LviLpnaNeW8s= +go.opentelemetry.io/otel v1.16.0/go.mod h1:vl0h9NUa1D5s1nv3A5vZOYWn8av4K8Ml6JDeHrT/bx4= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.14.0 h1:/fXHZHGvro6MVqV34fJzDhi7sHGpX3Ej/Qjmfn003ho= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.14.0/go.mod h1:UFG7EBMRdXyFstOwH028U0sVf+AvukSGhF0g8+dmNG8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.0.1/go.mod h1:Kv8liBeVNFkkkbilbgWRpV+wWuu+H5xdOT6HAgd30iw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.14.0 h1:TKf2uAs2ueguzLaxOCBXNpHxfO/aC7PAdDsSH0IbeRQ= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.14.0/go.mod h1:HrbCVv40OOLTABmOn1ZWty6CHXkU8DK/Urc43tHug70= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.0.1/go.mod h1:xOvWoTOrQjxjW61xtOmD/WKGRYb/P4NzRo3bs65U6Rk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.14.0 h1:ap+y8RXX3Mu9apKVtOkM6WSFESLM8K3wNQyOU8sWHcc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.14.0/go.mod h1:5w41DY6S9gZrbjuq6Y+753e96WfPha5IcsOSZTtullM= +go.opentelemetry.io/otel/metric v1.16.0 h1:RbrpwVG1Hfv85LgnZ7+txXioPDoh6EdbZHo26Q3hqOo= +go.opentelemetry.io/otel/metric v1.16.0/go.mod h1:QE47cpOmkwipPiefDwo2wDzwJrlfxxNYodqc4xnGCo4= +go.opentelemetry.io/otel/sdk v1.0.1/go.mod h1:HrdXne+BiwsOHYYkBE5ysIcv2bvdZstxzmCQhxTcZkI= +go.opentelemetry.io/otel/sdk v1.14.0 h1:PDCppFRDq8A1jL9v6KMI6dYesaq+DFcDZvjsoGvxGzY= +go.opentelemetry.io/otel/sdk v1.14.0/go.mod h1:bwIC5TjrNG6QDCHNWvW4HLHtUQ4I+VQDsnjhvyZCALM= +go.opentelemetry.io/otel/trace v1.0.1/go.mod h1:5g4i4fKLaX2BQpSBsxw8YYcgKpMMSW3x7ZTuYBr3sUk= +go.opentelemetry.io/otel/trace v1.16.0 h1:8JRpaObFoW0pxuVPapkgH8UhHQj+bJW8jJsCZEu5MQs= +go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLkqr2QVwea0ef0= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.9.0/go.mod h1:1vKfU9rv61e9EVGthD1zNvUbiwPcimSsOPU9brfSHJg= +go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= go.uber.org/atomic v0.0.0-20181018215023-8dc6146f7569/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= go.uber.org/multierr v0.0.0-20180122172545-ddea229ff1df/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v0.0.0-20180814183419-67bc79d13d15/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +gocloud.dev v0.19.0/go.mod h1:SmKwiR8YwIMMJvQBKLsC3fHNyMwXLw3PMDO+VVteJMI= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= +golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1194,24 +1838,34 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191117063200-497ca9f6d64f/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200420201142-3c4aac89819a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220824171710-5757bc0c5503/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1224,8 +1878,9 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 h1:3MTrJm4PyNL9NBqvYDSj3DHl46qQakyfqfWo4jgfaEM= -golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= +golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1251,10 +1906,11 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180112015858-5ccada7d0a7b/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1263,10 +1919,12 @@ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181108082009-03003ca0c849/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -1276,14 +1934,18 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190812203447-cdfb69ac37fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191119073136-fc4aabc6c914/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1291,16 +1953,20 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= @@ -1308,19 +1974,28 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/oauth2 v0.0.0-20180227000427-d7d64896b5ff/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1331,14 +2006,16 @@ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1347,9 +2024,9 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180117170059-2c42eef0765b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180224232135-f6cff0780e54/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1359,10 +2036,12 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1373,10 +2052,12 @@ golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190620070143-6f217b454f45/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1384,7 +2065,10 @@ golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191119060738-e882bf8e40c2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1396,31 +2080,38 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210331175145-43e1dd70ce54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210412220455-f1c623a9e750/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1430,31 +2121,44 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220330033206-e17cdc41300f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20171227012246-e19ae1496984/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1465,18 +2169,24 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220411224347-583f2d630306 h1:+gHMid33q6pen7kv9xvT+JRinntgeXO2AeZVd0AWD3w= -golang.org/x/time v0.0.0-20220411224347-583f2d630306/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1486,6 +2196,7 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1494,18 +2205,25 @@ golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191118222007-07fc4c7f2b98/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1516,26 +2234,39 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200313205530-4303120df7d8/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201014170642-d1624618ad65/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= +golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1543,13 +2274,19 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gomodules.xyz/jsonpatch/v2 v2.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= +gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= +gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.5.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.6.0/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -1568,22 +2305,31 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= -google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/api v0.45.0/go.mod h1:ISLIJCedJolbZvDfAk+Ctuq5hf+aJ33WgtUsfyFoLXA= +google.golang.org/api v0.122.0 h1:zDobeejm3E7pEG1mNHvdxvjs5XJoCMzyNH+CmwL94Es= +google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= google.golang.org/appengine v1.0.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190620144150-6af8c5fc6601/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -1600,6 +2346,7 @@ google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -1621,14 +2368,23 @@ google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210331142528-b7513248f0ba/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210413151531-c14fb6ef47c3/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210510173355-fb37daa5cd7a/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 h1:EfLuoKW5WfkgVdDy7dTK8qSbH37AX5mj/MFh+bGPz14= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -1640,15 +2396,23 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= +google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1659,29 +2423,40 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.25.1-0.20200805231151-a709e31e5d12/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= +gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= @@ -1706,8 +2481,9 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= -helm.sh/helm/v3 v3.11.1 h1:cmL9fFohOoNQf+wnp2Wa0OhNFH0KFnSzEkVxi3fcc3I= -helm.sh/helm/v3 v3.11.1/go.mod h1:z/Bu/BylToGno/6dtNGuSmjRqxKq5gaH+FU0BPO+AQ8= +helm.sh/helm/v3 v3.11.2 h1:P3cLaFxfoxaGLGJVnoPrhf1j86LC5EDINSpYSpMUkkA= +helm.sh/helm/v3 v3.11.2/go.mod h1:Hw+09mfpDiRRKAgAIZlFkPSeOkvv7Acl5McBvQyNPVw= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1715,55 +2491,64 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.1.4/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= k8s.io/api v0.0.0-20190918155943-95b840bb6a1f/go.mod h1:uWuOHnjmNrtQomJrvEBg0c0HRNyQ+8KTEERVsK0PW48= k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI= -k8s.io/api v0.26.1 h1:f+SWYiPd/GsiWwVRz+NbFyCgvv75Pk9NK6dlkZgpCRQ= -k8s.io/api v0.26.1/go.mod h1:xd/GBNgR0f707+ATNyPmQ1oyKSgndzXij81FzWGsejg= +k8s.io/api v0.26.4 h1:qSG2PmtcD23BkYiWfoYAcak870eF/hE7NNYBYavTT94= +k8s.io/api v0.26.4/go.mod h1:WwKEXU3R1rgCZ77AYa7DFksd9/BAIKyOmRlbVxgvjCk= k8s.io/apiextensions-apiserver v0.0.0-20190918161926-8f644eb6e783/go.mod h1:xvae1SZB3E17UpV59AWc271W/Ph25N+bjPyR63X6tPY= k8s.io/apiextensions-apiserver v0.17.0/go.mod h1:XiIFUakZywkUl54fVXa7QTEHcqQz9HG55nHd1DCoHj8= -k8s.io/apiextensions-apiserver v0.26.0 h1:Gy93Xo1eg2ZIkNX/8vy5xviVSxwQulsnUdQ00nEdpDo= -k8s.io/apiextensions-apiserver v0.26.0/go.mod h1:7ez0LTiyW5nq3vADtK6C3kMESxadD51Bh6uz3JOlqWQ= +k8s.io/apiextensions-apiserver v0.26.1 h1:cB8h1SRk6e/+i3NOrQgSFij1B2S0Y0wDoNl66bn8RMI= +k8s.io/apiextensions-apiserver v0.26.1/go.mod h1:AptjOSXDGuE0JICx/Em15PaoO7buLwTs0dGleIHixSM= k8s.io/apimachinery v0.0.0-20190913080033-27d36303b655/go.mod h1:nL6pwRT8NgfF8TT68DBI8uEePRt89cSvoXUVqbkWHq4= k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= -k8s.io/apimachinery v0.26.1 h1:8EZ/eGJL+hY/MYCNwhmDzVqq2lPl3N3Bo8rvweJwXUQ= -k8s.io/apimachinery v0.26.1/go.mod h1:tnPmbONNJ7ByJNz9+n9kMjNP8ON+1qoAIIC70lztu74= +k8s.io/apimachinery v0.26.4 h1:rZccKdBLg9vP6J09JD+z8Yr99Ce8gk3Lbi9TCx05Jzs= +k8s.io/apimachinery v0.26.4/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= k8s.io/apiserver v0.0.0-20190918160949-bfa5e2e684ad/go.mod h1:XPCXEwhjaFN29a8NldXA901ElnKeKLrLtREO9ZhFyhg= k8s.io/apiserver v0.17.0/go.mod h1:ABM+9x/prjINN6iiffRVNCBR2Wk7uY4z+EtEGZD48cg= -k8s.io/apiserver v0.26.0 h1:q+LqIK5EZwdznGZb8bq0+a+vCqdeEEe4Ux3zsOjbc4o= -k8s.io/apiserver v0.26.0/go.mod h1:aWhlLD+mU+xRo+zhkvP/gFNbShI4wBDHS33o0+JGI84= -k8s.io/cli-runtime v0.26.1 h1:f9+bRQ1V3elQsx37KmZy5fRAh56mVLbE9A7EMdlqVdI= -k8s.io/cli-runtime v0.26.1/go.mod h1:+e5Ym/ARySKscUhZ8K3hZ+ZBo/wYPIcg+7b5sFYi6Gg= +k8s.io/apiserver v0.26.1 h1:6vmnAqCDO194SVCPU3MU8NcDgSqsUA62tBUSWrFXhsc= +k8s.io/apiserver v0.26.1/go.mod h1:wr75z634Cv+sifswE9HlAo5FQ7UoUauIICRlOE+5dCg= +k8s.io/cli-runtime v0.26.3 h1:3ULe0oI28xmgeLMVXIstB+ZL5CTGvWSMVMLeHxitIuc= +k8s.io/cli-runtime v0.26.3/go.mod h1:5YEhXLV4kLt/OSy9yQwtSSNZU2Z7aTEYta1A+Jg4VC4= k8s.io/client-go v0.0.0-20190918160344-1fbdaa4c8d90/go.mod h1:J69/JveO6XESwVgG53q3Uz5OSfgsv4uxpScmmyYOOlk= k8s.io/client-go v0.17.0/go.mod h1:TYgR6EUHs6k45hb6KWjVD6jFZvJV4gHDikv/It0xz+k= -k8s.io/client-go v0.26.1 h1:87CXzYJnAMGaa/IDDfRdhTzxk/wzGZ+/HUQpqgVSZXU= -k8s.io/client-go v0.26.1/go.mod h1:IWNSglg+rQ3OcvDkhY6+QLeasV4OYHDjdqeWkDQZwGE= +k8s.io/client-go v0.26.4 h1:/7P/IbGBuT73A+G97trf44NTPSNqvuBREpOfdLbHvD4= +k8s.io/client-go v0.26.4/go.mod h1:6qOItWm3EwxJdl/8p5t7FWtWUOwyMdA8N9ekbW4idpI= +k8s.io/cluster-bootstrap v0.25.3 h1:Rwi4SLbpsRYa4n+dPlvyl+VpZH6idHzH5izRQrrFW1s= +k8s.io/cluster-bootstrap v0.25.3/go.mod h1:C5NZX+WE7v/hEyUfMj2sjQfKHsOVAYLrSFLtPspVljM= k8s.io/code-generator v0.0.0-20190912054826-cd179ad6a269/go.mod h1:V5BD6M4CyaN5m+VthcclXWsVcT1Hu+glwa1bi3MIsyE= k8s.io/code-generator v0.17.0/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= k8s.io/component-base v0.0.0-20190918160511-547f6c5d7090/go.mod h1:933PBGtQFJky3TEwYx4aEPZ4IxqhWh3R6DCmzqIn1hA= k8s.io/component-base v0.17.0/go.mod h1:rKuRAokNMY2nn2A6LP/MiwpoaMRHpfRnrPaUJJj1Yoc= k8s.io/component-base v0.26.1 h1:4ahudpeQXHZL5kko+iDHqLj/FSGAEUnSVO0EBbgDd+4= k8s.io/component-base v0.26.1/go.mod h1:VHrLR0b58oC035w6YQiBSbtsf0ThuSwXP+p5dD/kAWU= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/helm v2.14.3+incompatible/go.mod h1:LZzlS4LQBHfciFOurYBFkCMTaZ0D1l+p0teMg7TSULI= k8s.io/helm v2.17.0+incompatible h1:Bpn6o1wKLYqKM3+Osh8e+1/K2g/GsQJ4F4yNF2+deao= k8s.io/helm v2.17.0+incompatible/go.mod h1:LZzlS4LQBHfciFOurYBFkCMTaZ0D1l+p0teMg7TSULI= -k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= -k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= -k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E= -k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= +k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= +k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kops v1.25.2 h1:ToP6P3L4A+HJhcZgzNqWqEU7faCSDpG6hLXgj88/YRc= +k8s.io/kops v1.25.2/go.mod h1:xTWLLCq+oAUUEEbs1fFYtyTRn7dY9KFKKO+y1OfjVvo= +k8s.io/kube-aggregator v0.25.2 h1:NJHDtwmQR0EfoIQ00JNT8QrBIOljojtxtpXcTQqWZeg= +k8s.io/kube-aggregator v0.25.2/go.mod h1:7N5x4bK6jyxkEYCd77mgiz2uGTwiVs18MRwLwCPeUz8= +k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596 h1:8cNCQs+WqqnSpZ7y0LMQPKD+RZUHU17VqLPMW3qxnxc= +k8s.io/kube-openapi v0.0.0-20230109183929-3758b55a6596/go.mod h1:/BYxry62FuDzmI+i9B+X2pqfySRmSOW2ARmj5Zbqhj0= k8s.io/kubectl v0.26.1 h1:K8A0Jjlwg8GqrxOXxAbjY5xtmXYeYjLU96cHp2WMQ7s= k8s.io/kubectl v0.26.1/go.mod h1:miYFVzldVbdIiXMrHZYmL/EDWwJKM+F0sSsdxsATFPo= +k8s.io/kubelet v0.25.2 h1:L0PXLc2kTfIf6bm+wv4/1dIWwgXWDRTxTErxqFR4nqc= +k8s.io/kubelet v0.25.2/go.mod h1:/ASc/pglUA3TeRMG4hRKSjTa7arT0D6yqLzwqSxwMlY= k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20221107191617-1a15be271d1d h1:0Smp/HP1OH4Rvhe+4B8nWGERtlqAGSftbSbbmm45oFs= -k8s.io/utils v0.0.0-20221107191617-1a15be271d1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20230505201702-9f6742963106 h1:EObNQ3TW2D+WptiYXlApGNLVy0zm/JIBVY9i+M4wpAU= +k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= layeh.com/gopher-luar v1.0.10 h1:55b0mpBhN9XSshEd2Nz6WsbYXctyBT35azk4POQNSXo= layeh.com/gopher-luar v1.0.10/go.mod h1:TPnIVCZ2RJBndm7ohXyaqfhzjlZ+OA2SZR/YwL8tECk= modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= @@ -1771,28 +2556,43 @@ modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= +monis.app/mlog v0.0.4 h1:YEzh5sguG4ApywaRWnBU+mGP6SA4WxOqiJ36u+KtoeE= +monis.app/mlog v0.0.4/go.mod h1:LtOpnndFuRGqnLBwzBvpA1DaoKuud2/moLzYXIiNl1s= oras.land/oras-go v1.2.2 h1:0E9tOHUfrNH7TCDk5KU0jVBEzCqbfdyuVfGmJ7ZeRPE= oras.land/oras-go v1.2.2/go.mod h1:Apa81sKoZPpP7CDciE006tSZ0x3Q3+dOoBcMZ/aNxvw= +pack.ag/amqp v0.11.2/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/application v0.8.3 h1:5UETobiVhxTkKn3pIESImXiMNmSg3VkM5+JvmYGDPko= sigs.k8s.io/application v0.8.3/go.mod h1:Mv+ht9RE/QNtITYCzRbt3XTIN6t6so6cInmiyg6wOIg= +sigs.k8s.io/cluster-api v1.4.3 h1:QSeKr3qnWPtVp+EMQZQduKoi5WDwUhAtBRreEukkcy0= +sigs.k8s.io/cluster-api v1.4.3/go.mod h1:/SeFds4NXJ+Gp2etqHyoNuO6yoxTfVq6Zmd2OGxd/qM= +sigs.k8s.io/cluster-api-operator v0.2.0 h1:huBrSA89cw3aLrKG0wZ6GTAPxUwwu9ky8VxlCwRLbdc= +sigs.k8s.io/cluster-api-operator v0.2.0/go.mod h1:vcLYLBlLOJGjGKW8XI5mC022Adi/KdPpElEMb+/GujU= +sigs.k8s.io/cluster-api-provider-aws/v2 v2.1.4 h1:MDxXEtc0FuljKU6HNs7la0BQmhj2BXcpxC0xnwOzxlM= +sigs.k8s.io/cluster-api-provider-aws/v2 v2.1.4/go.mod h1:Hlw74YkIZpb8dFhn8Dad5Jybvq1kHlvaJnNdc0Rakac= sigs.k8s.io/controller-runtime v0.4.0/go.mod h1:ApC79lpY3PHW9xj/w9pj+lYkLgwAAUZwfXkME1Lajns= -sigs.k8s.io/controller-runtime v0.12.1 h1:4BJY01xe9zKQti8oRjj/NeHKRXthf1YkYJAgLONFFoI= -sigs.k8s.io/controller-runtime v0.12.1/go.mod h1:BKhxlA4l7FPK4AQcsuL4X6vZeWnKDXez/vp1Y8dxTU0= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/controller-runtime v0.14.6 h1:oxstGVvXGNnMvY7TAESYk+lzr6S3V5VFxQ6d92KcwQA= +sigs.k8s.io/controller-runtime v0.14.6/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= +sigs.k8s.io/gateway-api v0.5.0 h1:ze+k9fJqvmL8s1t3e4q1ST8RnN+f09dEv+gfacahlAE= +sigs.k8s.io/gateway-api v0.5.0/go.mod h1:x0AP6gugkFV8fC/oTlnOMU0pnmuzIR8LfIPRVUjxSqA= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/kind v0.18.0 h1:ahgZdVV1pdhXlYe1f+ztISakT23KdrBl/NFY9JMygzs= +sigs.k8s.io/kind v0.18.0/go.mod h1:Qqp8AiwOlMZmJWs37Hgs31xcbiYXjtXlRBSftcnZXQk= sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= sigs.k8s.io/kustomize/api v0.12.1/go.mod h1:y3JUhimkZkR6sbLNwfJHxvo1TCLwuwm14sCYnkH6S1s= sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= -sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff v0.0.0-20190817042607-6149e4549fca/go.mod h1:IIgPezJWb76P0hotTxzDbWsMYB8APh18qZnxkomBpxA= sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18= sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= sigs.k8s.io/testing_frameworks v0.1.2/go.mod h1:ToQrwSC3s8Xf/lADdZp3Mktcql9CG0UAmdJG9th5i0w= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/hack/e2e/kind-install-for-capd.sh b/hack/e2e/kind-install-for-capd.sh new file mode 100755 index 000000000..478d2916b --- /dev/null +++ b/hack/e2e/kind-install-for-capd.sh @@ -0,0 +1,116 @@ +#!/usr/bin/env bash + +# Copyright 2021 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# This script installs a local kind cluster with a local container registry and the correct files mounted for using CAPD +# to test Cluster API. +# This script is a customized version of the kind_with_local_registry script supplied by the kind maintainers at +# https://kind.sigs.k8s.io/docs/user/local-registry/ +# The modifications mount the docker socket inside the kind cluster so that CAPD can be used to +# created docker containers. + +set -o errexit +set -o nounset +set -o pipefail + +if [[ "${TRACE-0}" == "1" ]]; then + set -o xtrace +fi + +KIND_CLUSTER_NAME=${CAPI_KIND_CLUSTER_NAME:-"bootstrap"} + + +# 1. If kind cluster already exists exit. +if [[ "$(kind get clusters)" =~ .*"${KIND_CLUSTER_NAME}".* ]]; then + echo "kind cluster already exists, moving on" + exit 0 +fi + +# 2. Create registry container unless it already exists +reg_name='kind-registry' +reg_port='5000' +if [ "$(docker inspect -f '{{.State.Running}}' "${reg_name}" 2>/dev/null || true)" != 'true' ]; then + docker run \ + -d --restart=always -p "127.0.0.1:${reg_port}:5000" --name "${reg_name}" \ + registry:2 +fi + +# 3. Create kind cluster with containerd registry config dir enabled. +# TODO(killianmuldoon): kind will eventually enable this by default and this patch will be unnecessary. +# +# See: +# https://github.com/kubernetes-sigs/kind/issues/2875 +# https://github.com/containerd/containerd/blob/main/docs/cri/config.md#registry-configuration +# See: https://github.com/containerd/containerd/blob/main/docs/hosts.md +cat < "$TESTDIR"/workspace.yaml @@ -66,6 +67,7 @@ metadata: name: testcli spec: cluster: testcli + clusterapi: __USE_CLUSTER_API__ bucket: testcli-tf-state project: "" provider: kind @@ -79,6 +81,9 @@ spec: context: {} EOF +sed -i "s;__USE_CLUSTER_API__;$USE_CLUSTER_API;g" "$TESTDIR"/workspace.yaml + +cat "$TESTDIR"/workspace.yaml echodate "Entering to work directory ..." cd "$TESTDIR" @@ -105,9 +110,14 @@ export PLURAL_LOGIN_AFFIRM_CURRENT_USER=true export PLURAL_INIT_AFFIRM_CURRENT_REPO=true export PLURAL_INIT_AFFIRM_BACKUP_KEY=false +export PLURAL_DISABLE_MP_TABLE_VIEW=true + +INSTALL_APP=${INSTALL_APP:-"bootstrap"} +INSTALL_RECIPE=${INSTALL_RECIPE:-"docker-cluster-api-simple-test"} + plural init plural repos reset -plural bundle install console console-kind +plural bundle install "$INSTALL_APP" "$INSTALL_RECIPE" plural build --force retry 3 plural deploy --commit="" diff --git a/pkg/api/charts.go b/pkg/api/charts.go index dece5cdd9..b037f8b22 100644 --- a/pkg/api/charts.go +++ b/pkg/api/charts.go @@ -62,6 +62,10 @@ func (client *client) GetChartInstallations(repoId string) ([]*ChartInstallation return insts, err } +func ClearPackageCache() { + packageCache = make(map[string]*packageCacheEntry) +} + func (client *client) GetPackageInstallations(repoId string) (charts []*ChartInstallation, tfs []*TerraformInstallation, err error) { if entry, ok := packageCache[repoId]; ok { return entry.Charts, entry.Terraform, nil diff --git a/pkg/api/client.go b/pkg/api/client.go index 681a52397..a4e0c30df 100644 --- a/pkg/api/client.go +++ b/pkg/api/client.go @@ -10,9 +10,10 @@ import ( "github.com/pkg/errors" "github.com/pluralsh/gqlclient" + "github.com/samber/lo" + "github.com/pluralsh/plural/pkg/config" "github.com/pluralsh/plural/pkg/utils" - "github.com/samber/lo" ) type authedTransport struct { @@ -71,7 +72,7 @@ type Client interface { InstallRecipe(id string) error GetShell() (CloudShell, error) DeleteShell() error - GetTerraforma(repoId string) ([]*Terraform, error) + GetTerraform(repoId string) ([]*Terraform, error) GetTerraformInstallations(repoId string) ([]*TerraformInstallation, error) UploadTerraform(dir string, repoName string) (Terraform, error) GetStack(name, provider string) (*Stack, error) @@ -176,7 +177,7 @@ func FindTerraform(client Client, repo, name string) (*Terraform, error) { return nil, err } - tfs, err := client.GetTerraforma(r.Id) + tfs, err := client.GetTerraform(r.Id) if err != nil { return nil, err } diff --git a/pkg/api/cluster.go b/pkg/api/cluster.go index 91bf362f9..5e560937f 100644 --- a/pkg/api/cluster.go +++ b/pkg/api/cluster.go @@ -6,7 +6,7 @@ import ( ) func (client *client) DestroyCluster(domain, name, provider string) error { - _, err := client.pluralClient.DestroyCluster(client.ctx, domain, name, gqlclient.Provider(NormalizeProvider(provider))) + _, err := client.pluralClient.DestroyCluster(client.ctx, domain, name, gqlclient.Provider(ToGQLClientProvider(provider))) if err != nil { return err } diff --git a/pkg/api/constants.go b/pkg/api/constants.go new file mode 100644 index 000000000..27bd4ead7 --- /dev/null +++ b/pkg/api/constants.go @@ -0,0 +1,11 @@ +package api + +const ( + ProviderGCPDeprecated = "google" + ProviderGCP = "gcp" + ProviderAWS = "aws" + ProviderAzure = "azure" + ProviderEquinix = "equinix" + ProviderKind = "kind" + TEST = "test" +) diff --git a/pkg/api/recipes.go b/pkg/api/recipes.go index c29d73918..b90ca3e0c 100644 --- a/pkg/api/recipes.go +++ b/pkg/api/recipes.go @@ -402,7 +402,7 @@ func (client *client) ListRecipes(repo, provider string) ([]*Recipe, error) { recipes := make([]*Recipe, 0) if provider != "" { - p := gqlclient.Provider(NormalizeProvider(provider)) + p := gqlclient.Provider(ToGQLClientProvider(provider)) resp, err := client.pluralClient.ListRecipes(client.ctx, &repo, &p) if err != nil { return nil, err @@ -432,7 +432,7 @@ func (client *client) InstallRecipe(id string) error { } func (client *client) GetStack(name, provider string) (*Stack, error) { - p := gqlclient.Provider(NormalizeProvider(provider)) + p := gqlclient.Provider(ToGQLClientProvider(provider)) resp, err := client.pluralClient.GetStack(client.ctx, name, p) if err != nil { return nil, err diff --git a/pkg/api/terraform.go b/pkg/api/terraform.go index 5a1b27e0e..3589269eb 100644 --- a/pkg/api/terraform.go +++ b/pkg/api/terraform.go @@ -8,12 +8,13 @@ import ( "github.com/pluralsh/gqlclient" "github.com/pluralsh/gqlclient/pkg/utils" + "github.com/samber/lo" + tarutils "github.com/pluralsh/plural/pkg/utils" "github.com/pluralsh/plural/pkg/utils/pathing" - "github.com/samber/lo" ) -func (client *client) GetTerraforma(repoId string) ([]*Terraform, error) { +func (client *client) GetTerraform(repoId string) ([]*Terraform, error) { terraformResponse, err := client.pluralClient.GetTerraform(client.ctx, repoId) if err != nil { diff --git a/pkg/api/users.go b/pkg/api/users.go index 5b16d8ca6..82dbb6e46 100644 --- a/pkg/api/users.go +++ b/pkg/api/users.go @@ -166,7 +166,7 @@ func (client *client) CreateKey(name, content string) error { } func (client *client) GetEabCredential(cluster, provider string) (*EabCredential, error) { - resp, err := client.pluralClient.GetEabCredential(client.ctx, cluster, gqlclient.Provider(NormalizeProvider(provider))) + resp, err := client.pluralClient.GetEabCredential(client.ctx, cluster, gqlclient.Provider(ToGQLClientProvider(provider))) if err != nil { return nil, err } @@ -181,7 +181,7 @@ func (client *client) GetEabCredential(cluster, provider string) (*EabCredential } func (client *client) DeleteEabCredential(cluster, provider string) error { - _, err := client.pluralClient.DeleteEabCredential(client.ctx, cluster, gqlclient.Provider(NormalizeProvider(provider))) + _, err := client.pluralClient.DeleteEabCredential(client.ctx, cluster, gqlclient.Provider(ToGQLClientProvider(provider))) if err != nil { return err } diff --git a/pkg/api/utils.go b/pkg/api/utils.go index d9f114487..8f25e4b2b 100644 --- a/pkg/api/utils.go +++ b/pkg/api/utils.go @@ -7,13 +7,17 @@ import ( "github.com/samber/lo" ) -func NormalizeProvider(prov string) string { - provider := strings.ToUpper(prov) - if provider == "GOOGLE" { - return "GCP" +func NormalizeProvider(p string) string { + // Compare with ignore case + if strings.EqualFold(p, ProviderGCPDeprecated) { + return ProviderGCP } - return provider + return p +} + +func ToGQLClientProvider(p string) string { + return strings.ToUpper(NormalizeProvider(p)) } func FromSlicePtr[T any](s []*T) []T { diff --git a/pkg/api/utils_test.go b/pkg/api/utils_test.go index 07fd293cb..69563099d 100644 --- a/pkg/api/utils_test.go +++ b/pkg/api/utils_test.go @@ -3,12 +3,30 @@ package api_test import ( "testing" - "github.com/pluralsh/plural/pkg/api" - "github.com/stretchr/testify/assert" + + "github.com/pluralsh/plural/pkg/api" ) func TestNormalizeProvider(t *testing.T) { + tests := []struct { + provider string + expected string + }{ + {provider: `aws`, expected: `aws`}, + {provider: `gcp`, expected: `gcp`}, + {provider: `google`, expected: `gcp`}, + {provider: `azure`, expected: `azure`}, + } + for _, test := range tests { + t.Run(test.provider, func(t *testing.T) { + result := api.NormalizeProvider(test.provider) + assert.Equal(t, result, test.expected) + }) + } +} + +func TestToGQLClientProvider(t *testing.T) { tests := []struct { provider string expected string @@ -20,7 +38,7 @@ func TestNormalizeProvider(t *testing.T) { } for _, test := range tests { t.Run(test.provider, func(t *testing.T) { - result := api.NormalizeProvider(test.provider) + result := api.ToGQLClientProvider(test.provider) assert.Equal(t, result, test.expected) }) } diff --git a/pkg/application/clientset.go b/pkg/application/clientset.go index d17d8477e..027fcd294 100644 --- a/pkg/application/clientset.go +++ b/pkg/application/clientset.go @@ -2,10 +2,8 @@ package application import ( "k8s.io/client-go/kubernetes/scheme" - "sigs.k8s.io/application/api/v1beta1" - - // "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/rest" + "sigs.k8s.io/application/api/v1beta1" ) type ApplicationV1Beta1Interface interface { diff --git a/pkg/application/printer.go b/pkg/application/printer.go index 497c2dbe4..cb7a38fbb 100644 --- a/pkg/application/printer.go +++ b/pkg/application/printer.go @@ -7,7 +7,6 @@ import ( tm "github.com/buger/goterm" "k8s.io/client-go/kubernetes" "sigs.k8s.io/application/api/v1beta1" - // corev1 "k8s.io/api/core/v1" ) func Ready(app *v1beta1.Application) bool { diff --git a/pkg/bootstrap/aws/auth.go b/pkg/bootstrap/aws/auth.go new file mode 100644 index 000000000..0fcc11dc0 --- /dev/null +++ b/pkg/bootstrap/aws/auth.go @@ -0,0 +1,137 @@ +package aws + +import ( + "context" + "fmt" + "strings" + + "github.com/pluralsh/plural/pkg/kubernetes" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + ekscontrolplanev1 "sigs.k8s.io/cluster-api-provider-aws/v2/controlplane/eks/api/v1beta2" + "sigs.k8s.io/yaml" +) + +const ( + awsAuthNs = "kube-system" + awsAuthName = "aws-auth" + roleKey = "mapRoles" + usersKey = "mapUsers" +) + +func FetchAuth() (*ekscontrolplanev1.IAMAuthenticatorConfig, error) { + ctx := context.Background() + kube, err := kubernetes.Kubernetes() + if err != nil { + return nil, err + } + + return fetchAwsAuth(ctx, kube) +} + +func AddUser(userArn string) error { + ctx := context.Background() + kube, err := kubernetes.Kubernetes() + if err != nil { + return err + } + + eksConfig, err := fetchAwsAuth(ctx, kube) + if err != nil { + return err + } + + eksConfig.UserMappings = append(eksConfig.UserMappings, ekscontrolplanev1.UserMapping{ + KubernetesMapping: ekscontrolplanev1.KubernetesMapping{ + Groups: []string{"system:masters"}, + UserName: username(userArn), + }, + UserARN: userArn, + }) + + return persistAuth(ctx, kube, eksConfig) +} + +func AddRole(roleArn string) error { + ctx := context.Background() + kube, err := kubernetes.Kubernetes() + if err != nil { + return err + } + + eksConfig, err := fetchAwsAuth(ctx, kube) + if err != nil { + return err + } + + eksConfig.RoleMappings = append(eksConfig.RoleMappings, ekscontrolplanev1.RoleMapping{ + KubernetesMapping: ekscontrolplanev1.KubernetesMapping{ + Groups: []string{"system:masters"}, + UserName: username(roleArn), + }, + RoleARN: roleArn, + }) + + return persistAuth(ctx, kube, eksConfig) +} + +func username(arn string) string { + parts := strings.Split(arn, "/") + return parts[len(parts)-1] +} + +func fetchAwsAuth(ctx context.Context, kube kubernetes.Kube) (*ekscontrolplanev1.IAMAuthenticatorConfig, error) { + client := kube.GetClient() + cm, err := client.CoreV1().ConfigMaps(awsAuthNs).Get(ctx, awsAuthName, metav1.GetOptions{}) + if err != nil { + return nil, err + } + + res := &ekscontrolplanev1.IAMAuthenticatorConfig{ + RoleMappings: []ekscontrolplanev1.RoleMapping{}, + UserMappings: []ekscontrolplanev1.UserMapping{}, + } + + if rolesSection, ok := cm.Data[roleKey]; ok { + err := yaml.Unmarshal([]byte(rolesSection), &res.RoleMappings) + if err != nil { + return nil, fmt.Errorf("unmarshalling mapped roles: %w", err) + } + } + + if usersSection, ok := cm.Data[usersKey]; ok { + err := yaml.Unmarshal([]byte(usersSection), &res.UserMappings) + if err != nil { + return nil, fmt.Errorf("unmarshalling mapped users: %w", err) + } + } + + return res, nil +} + +func persistAuth(ctx context.Context, kube kubernetes.Kube, authConfig *ekscontrolplanev1.IAMAuthenticatorConfig) error { + client := kube.GetClient() + cmClient := client.CoreV1().ConfigMaps(awsAuthNs) + cm, err := cmClient.Get(ctx, awsAuthName, metav1.GetOptions{}) + if err != nil { + return err + } + + if len(authConfig.RoleMappings) > 0 { + roleMappings, err := yaml.Marshal(authConfig.RoleMappings) + if err != nil { + return fmt.Errorf("marshalling auth config roles: %w", err) + } + cm.Data[roleKey] = string(roleMappings) + } + + if len(authConfig.UserMappings) > 0 { + userMappings, err := yaml.Marshal(authConfig.UserMappings) + if err != nil { + return fmt.Errorf("marshalling auth config users: %w", err) + } + cm.Data[usersKey] = string(userMappings) + } + + _, err = cmClient.Update(ctx, cm, metav1.UpdateOptions{}) + return err +} diff --git a/pkg/bootstrap/azure/auth.go b/pkg/bootstrap/azure/auth.go new file mode 100644 index 000000000..845b64584 --- /dev/null +++ b/pkg/bootstrap/azure/auth.go @@ -0,0 +1,112 @@ +package azure + +import ( + "context" + "fmt" + + "github.com/Azure/azure-sdk-for-go/sdk/azidentity" + azwi "github.com/Azure/azure-workload-identity/pkg/cloud" + "github.com/Azure/go-autorest/autorest/azure" + msgraph "github.com/microsoftgraph/msgraph-sdk-go" + "github.com/microsoftgraph/msgraph-sdk-go/models" + "github.com/microsoftgraph/msgraph-sdk-go/serviceprincipals" + "github.com/pluralsh/plural/pkg/utils" +) + +type AuthService struct { + subscriptionID string + + azwiClient *azwi.AzureClient + msgraphClient *msgraph.GraphServiceClient + context context.Context + + app models.Applicationable + sp models.ServicePrincipalable +} + +func GetAuthService(subscriptionID string) (*AuthService, error) { + credential, err := azidentity.NewDefaultAzureCredential(nil) + if err != nil { + return nil, err + } + + azwiClient, err := azwi.NewAzureClientWithCLI(azure.PublicCloud, subscriptionID, nil) + if err != nil { + return nil, err + } + + msgraphClient, err := msgraph.NewGraphServiceClientWithCredentials(credential, nil) + if err != nil { + return nil, err + } + + return &AuthService{ + subscriptionID: subscriptionID, + msgraphClient: msgraphClient, + azwiClient: azwiClient, + context: context.Background(), + }, nil +} + +func (as *AuthService) addServicePrincipalPassword(servicePrincipalId string) (models.PasswordCredentialable, error) { + pwd := serviceprincipals.NewItemAddPasswordPostRequestBody() + pwd.SetPasswordCredential(models.NewPasswordCredential()) + + return as.msgraphClient.ServicePrincipalsById(servicePrincipalId).AddPassword(). + Post(as.context, pwd, nil) +} + +func (as *AuthService) Setup(name string) (clientId string, clientSecret string, err error) { + app, err := as.azwiClient.CreateApplication(as.context, name) + if err != nil { + return + } + as.app = app + utils.Success("Created %s application\n", *app.GetDisplayName()) + + sp, err := as.azwiClient.CreateServicePrincipal(as.context, *app.GetAppId(), nil) + if err != nil { + return + } + as.sp = sp + utils.Success("Created %s service principal\n", *sp.GetDisplayName()) + + role := "Contributor" + scope := fmt.Sprintf("/subscriptions/%s/", as.subscriptionID) + _, err = as.azwiClient.CreateRoleAssignment(as.context, scope, role, *sp.GetId()) + if err != nil { + return + } + utils.Success("Assigned %s role to %s service principal\n", role, *sp.GetDisplayName()) + + pwd, err := as.addServicePrincipalPassword(*sp.GetId()) + if err != nil { + return + } + utils.Success("Added password for %s service principal\n", *sp.GetDisplayName()) + + clientId = *sp.GetAppId() + clientSecret = *pwd.GetSecretText() + + return +} + +func (as *AuthService) Cleanup() error { + if as.sp != nil { + err := as.azwiClient.DeleteServicePrincipal(as.context, *as.sp.GetId()) + if err != nil { + return err + } + utils.Success("Deleted %s service principal\n", *as.sp.GetDisplayName()) + } + + if as.app != nil { + err := as.azwiClient.DeleteApplication(as.context, *as.app.GetId()) + if err != nil { + return err + } + utils.Success("Deleted %s application\n", *as.app.GetDisplayName()) + } + + return nil +} diff --git a/pkg/bootstrap/bootstrap.go b/pkg/bootstrap/bootstrap.go new file mode 100644 index 000000000..9a0b07a0c --- /dev/null +++ b/pkg/bootstrap/bootstrap.go @@ -0,0 +1,240 @@ +package bootstrap + +import ( + "os/exec" + "path/filepath" + + capi "sigs.k8s.io/cluster-api/api/v1beta1" + "sigs.k8s.io/cluster-api/cmd/clusterctl/client" + + "github.com/pluralsh/plural/pkg/api" + "github.com/pluralsh/plural/pkg/manifest" + "github.com/pluralsh/plural/pkg/provider" + "github.com/pluralsh/plural/pkg/utils" + "github.com/pluralsh/plural/pkg/utils/backup" +) + +func shouldDeleteProviderCluster(cluster, namespace string) bool { + clusterExists := bootstrapClusterExists() + deleting, err := IsClusterPhase(localClusterContext, cluster, namespace, capi.ClusterPhaseDeleting) + + if err != nil { + return false + } + + return clusterExists && !deleting +} + +func shouldDeleteBootstrapCluster(cluster, namespace string) bool { + clusterExists := bootstrapClusterExists() + deleting, err := IsClusterPhase(localClusterContext, cluster, namespace, capi.ClusterPhaseDeleting) + + if err != nil { + return false + } + + return clusterExists && deleting +} + +// getBootstrapSteps returns list of steps to run during cluster bootstrap. +func getBootstrapSteps(runPlural ActionFunc, additionalFlags []string) ([]*Step, error) { + man, err := manifest.FetchProject() + if err != nil { + return nil, err + } + + kubeconfigPath, err := getKubeconfigPath() + if err != nil { + return nil, err + } + + bootstrapPath, err := GetBootstrapPath() + if err != nil { + return nil, err + } + + flags := append(getBootstrapFlags(man.Provider), additionalFlags...) + + prov, err := provider.GetProvider() + if err != nil { + return nil, err + } + + clusterBackup := backup.NewCAPIBackup(man.Cluster) + + return []*Step{ + { + Name: "Destroy cluster API", + Args: []string{"plural", "bootstrap", "cluster", "destroy-cluster-api", man.Cluster}, + Execute: runPlural, + Confirm: "It looks like your existing bootstrap cluster has a provider cluster configuration. All resources at your provider should be removed before continuing. Would you like to try and remove it automatically?", + Skip: !shouldDeleteProviderCluster(man.Cluster, "bootstrap"), + }, + { + Name: "Destroy local bootstrap cluster", + Args: []string{"plural", "--bootstrap", "bootstrap", "cluster", "delete", "bootstrap"}, + Execute: runPlural, + Confirm: "It looks like your existing bootstrap cluster has a provider cluster configuration in a non-recoverable state. Please make sure to manually delete all existing cluster resources at your provider before continuing. Would you like to destroy the bootstrap cluster?", + Skip: !shouldDeleteBootstrapCluster(man.Cluster, "bootstrap"), + }, + { + Name: "Create local bootstrap cluster", + Args: []string{"plural", "bootstrap", "cluster", "create", "bootstrap", "--skip-if-exists"}, + Execute: runPlural, + }, + { + Name: "Bootstrap CRDs in local cluster", + Args: []string{"plural", "--bootstrap", "wkspace", "crds", "bootstrap"}, + Execute: runPlural, + }, + { + Name: "Install Cluster API operators in local cluster", + Args: append([]string{"plural", "--bootstrap", "wkspace", "helm", "bootstrap", "--skip", "cluster-api-cluster"}, append(flags, disableAzurePodIdentityFlag...)...), + Execute: runPlural, + }, + { + Name: "Deploy cluster", + Args: append([]string{"plural", "--bootstrap", "wkspace", "helm", "bootstrap"}, flags...), + Execute: runPlural, + Skip: clusterBackup.Exists(), + }, + { + Name: "Restore cluster", + Execute: func(_ []string) error { + options := client.MoveOptions{ + ToKubeconfig: client.Kubeconfig{ + Path: kubeconfigPath, + Context: "kind-bootstrap", + }, + } + + return clusterBackup.Restore(options) + }, + Skip: !clusterBackup.Exists(), + }, + { + Name: "Wait for cluster", + Args: []string{"plural", "--bootstrap", "clusters", "wait", "bootstrap", man.Cluster}, + Execute: runPlural, + }, + { + Name: "Install Network", + Execute: func(_ []string) error { + return installCilium(man.Cluster) + }, + Skip: man.Provider != api.ProviderKind, + }, + { + Name: "Install StorageClass", + Execute: func(_ []string) error { + return applyManifest(storageClassManifest) + }, + Skip: man.Provider != api.ProviderKind, + }, + { + Name: "Save kubeconfig", + Execute: func(_ []string) error { + cmd := exec.Command("kind", "export", "kubeconfig", "--name", man.Cluster, + "--kubeconfig", filepath.Join(bootstrapPath, "terraform", "kube_config_cluster.yaml")) + return utils.Execute(cmd) + }, + Skip: man.Provider != api.ProviderKind, + }, + { + Name: "Wait for machine pools", + Args: []string{"plural", "--bootstrap", "clusters", "mpwait", "bootstrap", man.Cluster}, + Execute: runPlural, + OnAfter: func() { + options := client.MoveOptions{ + FromKubeconfig: client.Kubeconfig{ + Path: kubeconfigPath, + Context: "kind-bootstrap", + }, + } + + err := clusterBackup.Save(options) + if err != nil { + _ = clusterBackup.Remove() + utils.Error("error during saving state backup: %s", err) + } + }, + }, + { + // TODO: Once https://github.com/kubernetes-sigs/cluster-api-provider-azure/issues/2498 + // will be done we can use it and remove this step. + Name: "Enable OIDC issuer", + Execute: func(_ []string) error { + return utils.Exec("az", "aks", "update", "-g", man.Project, "-n", man.Cluster, "--enable-oidc-issuer") + }, + Skip: man.Provider != api.ProviderAzure, + }, + { + Name: "Initialize kubeconfig for target cluster", + Args: []string{"plural", "wkspace", "kube-init"}, + Execute: runPlural, + }, + { + Name: "Create bootstrap namespace in target cluster", + Args: []string{"plural", "bootstrap", "namespace", "create", "bootstrap"}, + Execute: runPlural, + }, + { + Name: "Bootstrap CRDs in target cluster", + Args: []string{"plural", "wkspace", "crds", "bootstrap"}, + Execute: runPlural, + }, + { + Name: "Install Cluster API operators in target cluster", + Args: append([]string{"plural", "wkspace", "helm", "bootstrap", "--skip", "cluster-api-cluster"}, append(flags, disableAzurePodIdentityFlag...)...), + Execute: runPlural, + }, + { + Name: "Move resources from local to target cluster", + Args: []string{"plural", "bootstrap", "cluster", "move", "--kubeconfig-context", localClusterContext, "--to-kubeconfig", kubeconfigPath}, + Execute: runPlural, + Retries: 2, + }, + { + Name: "Move Helm secrets", + Execute: func(_ []string) error { + return moveHelmSecrets(localClusterContext, prov.KubeContext()) + }, + Retries: 2, + }, + { + Name: "Destroy local bootstrap cluster", + Args: []string{"plural", "--bootstrap", "bootstrap", "cluster", "delete", "bootstrap"}, + Execute: runPlural, + OnAfter: func() { + err := clusterBackup.Remove() + if err != nil { + utils.Error("error during removing state backup: %s", err) + } + }, + }, + }, nil +} + +// BootstrapCluster bootstraps cluster with Cluster API. +func BootstrapCluster(runPlural ActionFunc) error { + utils.Highlight("Bootstrapping cluster with Cluster API...\n") + + if err := RunWithTempCredentials(func(flags []string) error { + steps, err := getBootstrapSteps(runPlural, flags) + if err != nil { + return err + } + + err = ExecuteSteps(steps) + if err != nil { + utils.Error("Cluster bootstrapping failed\n") + return err + } + return nil + }); err != nil { + return err + } + + utils.Success("Cluster bootstrapped successfully!\n") + return nil +} diff --git a/pkg/bootstrap/check.go b/pkg/bootstrap/check.go new file mode 100644 index 000000000..8bb452c84 --- /dev/null +++ b/pkg/bootstrap/check.go @@ -0,0 +1,92 @@ +package bootstrap + +import ( + "context" + "fmt" + "time" + + "github.com/cert-manager/cert-manager/pkg/issuer/acme/dns/util" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/rest" + capi "sigs.k8s.io/cluster-api/api/v1beta1" + + "github.com/pluralsh/plural/pkg/cluster" + "github.com/pluralsh/plural/pkg/config" + "github.com/pluralsh/plural/pkg/kubernetes" + "github.com/pluralsh/plural/pkg/provider" + "github.com/pluralsh/plural/pkg/utils" +) + +const ( + ClusterNotReadyError = "cluster exists but it is not ready yet" +) + +// getCluster returns Cluster resource. +func getCluster(kubeContext, name, namespace string) (*capi.Cluster, error) { + prov, err := provider.GetProvider() + if err != nil { + return nil, err + } + + err = prov.KubeConfig() + if err != nil { + return nil, err + } + + var kubeConf *rest.Config + if len(kubeContext) > 0 { + kubeConf, err = kubernetes.KubeConfigWithContext(kubeContext) + } else { + kubeConf, err = kubernetes.KubeConfig() + } + + if err != nil { + return nil, err + } + + conf := config.Read() + ctx := context.Background() + clusters, err := cluster.NewForConfig(kubeConf) + if err != nil { + return nil, err + } + + client := clusters.Clusters(conf.Namespace(namespace)) + return client.Get(ctx, name, metav1.GetOptions{}) +} + +func IsClusterPhase(context, name, namespace string, phase capi.ClusterPhase) (bool, error) { + c, err := getCluster(context, name, namespace) + if err != nil { + return false, err + } + + return c.Status.GetTypedPhase() == phase, nil +} + + +// CheckClusterReadiness checks if Cluster API cluster is in ready state. +func CheckClusterReadiness(name, namespace string) (bool, error) { + utils.Highlight("Checking cluster status") + + err := util.WaitFor(10*time.Second, time.Second, func() (bool, error) { + utils.Highlight(".") + + c, err := getCluster("", name, namespace) + if err != nil { + return false, err + } + + for _, cond := range c.Status.Conditions { + if cond.Type == capi.ReadyCondition && cond.Status == "True" { + return true, nil + } + } + + return true, fmt.Errorf(ClusterNotReadyError) + }) + + utils.Highlight("\n") + + return err == nil, err +} diff --git a/pkg/bootstrap/cilium.go b/pkg/bootstrap/cilium.go new file mode 100644 index 000000000..f8c84fbcc --- /dev/null +++ b/pkg/bootstrap/cilium.go @@ -0,0 +1,140 @@ +package bootstrap + +import ( + "context" + "fmt" + "os" + "os/exec" + "path/filepath" + "strings" + "time" + + "github.com/gofrs/flock" + "github.com/pkg/errors" + "github.com/pluralsh/plural/pkg/helm" + "github.com/pluralsh/plural/pkg/utils" + "helm.sh/helm/v3/pkg/action" + "helm.sh/helm/v3/pkg/chart/loader" + "helm.sh/helm/v3/pkg/cli" + "helm.sh/helm/v3/pkg/getter" + "helm.sh/helm/v3/pkg/helmpath" + "helm.sh/helm/v3/pkg/repo" + "helm.sh/helm/v3/pkg/storage/driver" + "sigs.k8s.io/yaml" +) + +var settings = cli.New() + +const ( + ciliumRepoName = "cilium" + ciliumRepoUrl = "https://helm.cilium.io/" +) + +func installCilium(cluster string) error { + namespace := "kube-system" + cmd := exec.Command("kind", "export", "kubeconfig", "--name", cluster) + if err := utils.Execute(cmd); err != nil { + return err + } + + if err := addCiliumRepo(); err != nil { + return err + } + + helmConfig, err := helm.GetActionConfig(namespace) + if err != nil { + return nil + } + + cp, err := action.NewInstall(helmConfig).ChartPathOptions.LocateChart("cilium/cilium", settings) + if err != nil { + return err + } + + chart, err := loader.Load(cp) + if err != nil { + return err + } + + histClient := action.NewHistory(helmConfig) + histClient.Max = 5 + if _, err := histClient.Run(ciliumRepoName); errors.Is(err, driver.ErrReleaseNotFound) { + instClient := action.NewInstall(helmConfig) + instClient.Namespace = namespace + instClient.ReleaseName = ciliumRepoName + instClient.Timeout = time.Minute * 10 + + _, err = instClient.Run(chart, map[string]interface{}{}) + return err + } + client := action.NewUpgrade(helmConfig) + client.Namespace = namespace + client.Timeout = time.Minute * 10 + _, err = client.Run(ciliumRepoName, chart, map[string]interface{}{}) + + return err +} + +func addCiliumRepo() error { + repoFile := getEnvVar("HELM_REPOSITORY_CONFIG", helmpath.ConfigPath("repositories.yaml")) + err := os.MkdirAll(filepath.Dir(repoFile), os.ModePerm) + if err != nil && !os.IsExist(err) { + return err + } + + // Acquire a file lock for process synchronization. + repoFileExt := filepath.Ext(repoFile) + var lockPath string + if len(repoFileExt) > 0 && len(repoFileExt) < len(repoFile) { + lockPath = strings.TrimSuffix(repoFile, repoFileExt) + ".lock" + } else { + lockPath = repoFile + ".lock" + } + fileLock := flock.New(lockPath) + lockCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + locked, err := fileLock.TryLockContext(lockCtx, time.Second) + if err == nil && locked { + defer func(fileLock *flock.Flock) { + _ = fileLock.Unlock() + }(fileLock) + } + if err != nil { + return err + } + + b, err := os.ReadFile(repoFile) + if err != nil && !os.IsNotExist(err) { + return err + } + + var f repo.File + if err := yaml.Unmarshal(b, &f); err != nil { + return err + } + + c := repo.Entry{ + Name: ciliumRepoName, + URL: ciliumRepoUrl, + InsecureSkipTLSverify: true, + } + + // If the repo exists do one of two things: + // 1. If the configuration for the name is the same continue without error. + // 2. When the config is different require --force-update. + if f.Has(ciliumRepoName) { + return nil + } + + r, err := repo.NewChartRepository(&c, getter.All(settings)) + if err != nil { + return err + } + + if _, err := r.DownloadIndexFile(); err != nil { + return fmt.Errorf("looks like %q is not a valid chart repository or cannot be reached", ciliumRepoUrl) + } + + f.Update(&c) + return f.WriteFile(repoFile, 0644) +} diff --git a/pkg/bootstrap/common.go b/pkg/bootstrap/common.go new file mode 100644 index 000000000..bad081767 --- /dev/null +++ b/pkg/bootstrap/common.go @@ -0,0 +1,325 @@ +package bootstrap + +import ( + "context" + "fmt" + "os" + "path/filepath" + + "github.com/AlecAivazis/survey/v2" + awsConfig "github.com/aws/aws-sdk-go-v2/config" + "golang.org/x/oauth2/google" + v1 "k8s.io/api/core/v1" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/kind/pkg/cluster" + + "github.com/pluralsh/plural/pkg/api" + "github.com/pluralsh/plural/pkg/bootstrap/azure" + "github.com/pluralsh/plural/pkg/kubernetes" + "github.com/pluralsh/plural/pkg/manifest" + "github.com/pluralsh/plural/pkg/utils" + "github.com/pluralsh/plural/pkg/utils/git" + "github.com/pluralsh/plural/pkg/utils/pathing" +) + +const localClusterContext = "kind-bootstrap" + +var disableAzurePodIdentityFlag = []string{"--set", "bootstrap.azurePodIdentity.enabled=false"} + +func bootstrapClusterExists() bool { + clusterName := "bootstrap" + p := cluster.NewProvider() + n, _ := p.ListNodes(clusterName) + return len(n) > 0 +} + +func applyManifest(manifest string) error { + kube, err := kubernetes.Kubernetes() + if err != nil { + return err + } + + f, err := os.CreateTemp("", "manifest") + if err != nil { + return err + } + defer func(name string) { + err := os.Remove(name) + if err != nil { + utils.Error("%s", err) + } + }(f.Name()) + + _, err = f.WriteString(manifest) + if err != nil { + return err + } + + return kube.Apply(f.Name(), true) +} + +// deleteSecrets deletes secrets matching label selector from given namespace in given context. +func deleteSecrets(context, namespace, labelSelector string) error { + kubernetesClient, err := kubernetes.KubernetesWithContext(context) + if err != nil { + return err + } + + return kubernetesClient.SecretDeleteCollection(namespace, meta.DeleteOptions{}, meta.ListOptions{LabelSelector: labelSelector}) +} + +// getSecrets returns secrets matching label selector from given namespace in given context. +func getSecrets(context, namespace, labelSelector string) (*v1.SecretList, error) { + kubernetesClient, err := kubernetes.KubernetesWithContext(context) + if err != nil { + return nil, err + } + + return kubernetesClient.SecretList(namespace, meta.ListOptions{LabelSelector: labelSelector}) +} + +// createSecrets creates secrets in given context. +func createSecrets(context string, secrets []v1.Secret) error { + kubernetesClient, err := kubernetes.KubernetesWithContext(context) + if err != nil { + return err + } + + for _, secret := range secrets { + _, err := kubernetesClient.SecretCreate(secret.Namespace, prepareSecret(secret)) + if err != nil { + return err + } + } + + return nil +} + +// prepareSecret unsets read-only secret fields to prepare it for creation. +func prepareSecret(secret v1.Secret) *v1.Secret { + secret.UID = "" + secret.ResourceVersion = "" + secret.Generation = 0 + secret.CreationTimestamp = meta.Time{} + return &secret +} + +// moveHelmSecrets moves secrets owned by Helm from one cluster to another. +func moveHelmSecrets(sourceContext, targetContext string) error { + err := deleteSecrets(targetContext, "bootstrap", "owner=helm") + if err != nil { + return err + } + + secrets, err := getSecrets(sourceContext, "bootstrap", "owner=helm") + if err != nil { + return err + } + + return createSecrets(targetContext, secrets.Items) +} + +// getEnvVar gets value of environment variable, if it is not set then default value is returned instead. +func getEnvVar(name, defaultValue string) string { + if v, ok := os.LookupEnv(name); ok { + return v + } + + return defaultValue +} + +// getBootstrapFlags returns list of provider-specific flags used during cluster bootstrap and destroy. +func getBootstrapFlags(prov string) []string { + switch prov { + case api.ProviderAWS: + return []string{ + "--set", "cluster-api-provider-aws.cluster-api-provider-aws.bootstrapMode=true", + "--set", "bootstrap.aws-ebs-csi-driver.enabled=false", + "--set", "bootstrap.aws-load-balancer-controller.enabled=false", + "--set", "bootstrap.cluster-autoscaler.enabled=false", + "--set", "bootstrap.metrics-server.enabled=false", + "--set", "bootstrap.snapshot-controller.enabled=false", + "--set", "bootstrap.snapshot-validation-webhook.enabled=false", + "--set", "bootstrap.tigera-operator.enabled=false", + "--set", "bootstrap.external-dns.enabled=false", + "--set", "plural-certmanager-webhook.enabled=false", + } + case api.ProviderAzure: + return []string{ + "--set", "cluster-api-cluster.cluster.azure.clusterIdentity.bootstrapMode=true", + "--set", "bootstrap.external-dns.enabled=false", + "--set", "plural-certmanager-webhook.enabled=false", + } + case api.ProviderGCP: + return []string{ + "--set", "bootstrap.cert-manager.serviceAccount.create=true", + "--set", "cluster-api-provider-gcp.cluster-api-provider-gcp.bootstrapMode=true", + "--set", "bootstrap.external-dns.enabled=false", + "--set", "plural-certmanager-webhook.enabled=false", + } + default: + return []string{} + } +} + +// getKubeconfigPath returns path to kubeconfig in user home directory. +func getKubeconfigPath() (string, error) { + homeDir, err := os.UserHomeDir() + if err != nil { + return "", err + } + + return pathing.SanitizeFilepath(filepath.Join(homeDir, ".kube", "config")), nil +} + +// GetBootstrapPath returns bootstrap repository path. +func GetBootstrapPath() (string, error) { + gitRootPath, err := git.Root() + if err != nil { + return "", err + } + + return pathing.SanitizeFilepath(filepath.Join(gitRootPath, "bootstrap")), nil +} + +// GetStepPath returns path from which step will be executed. +func GetStepPath(step *Step, defaultPath string) string { + if step != nil && step.TargetPath != "" { + return step.TargetPath + } + + return defaultPath +} + +func FilterSteps(steps []*Step) []*Step { + filteredSteps := make([]*Step, 0, len(steps)) + for _, step := range steps { + if !step.Skip { + filteredSteps = append(filteredSteps, step) + } + } + + return filteredSteps +} + +// ExecuteSteps of a bootstrap, migration or destroy process. +func ExecuteSteps(steps []*Step) error { + defaultPath, err := GetBootstrapPath() + if err != nil { + return err + } + + filteredSteps := FilterSteps(steps) + for i, step := range filteredSteps { + if len(step.Confirm) > 0 { + res := true + prompt := &survey.Confirm{Message: step.Confirm} + if err := survey.AskOne(prompt, &res, survey.WithValidator(survey.Required)); err != nil || !res { + continue + } + } + + utils.Highlight("[%d/%d] %s\n", i+1, len(filteredSteps), step.Name) + + if step.SkipFunc != nil && step.SkipFunc() { + utils.Highlight("Skipping step [%d/%d]\n", i+1, len(filteredSteps)) + continue + } + + path := GetStepPath(step, defaultPath) + err := os.Chdir(path) + if err != nil { + return err + } + + for j := 0; j <= step.Retries; j++ { + if j > 0 { + utils.Highlight("Retrying, attempt %d of %d...\n", j, step.Retries) + } + err = step.Execute(step.Args) + if err == nil { + if step.OnAfter != nil { + step.OnAfter() + } + + break + } + utils.Error("[%d/%d] %s failed: %s\n", i+1, len(filteredSteps), step.Name, err) + } + if err != nil { + if step.OnError != nil { + step.OnError() + } + + return err + } + } + + return nil +} + +// RunWithTempCredentials is a function wrapper that provides provider-specific flags with credentials +// that are used during bootstrap and destroy. +func RunWithTempCredentials(function ActionFunc) error { + man, err := manifest.FetchProject() + if err != nil { + return err + } + + var flags []string + switch man.Provider { + case api.ProviderAzure: + as, err := azure.GetAuthService(utils.ToString(man.Context["SubscriptionId"])) + if err != nil { + return err + } + + clientId, clientSecret, err := as.Setup(man.Cluster) + if err != nil { + return err + } + + pathPrefix := "cluster-api-cluster.cluster.azure.clusterIdentity.bootstrapCredentials" + flags = []string{ + "--set", fmt.Sprintf("%s.%s=%s", pathPrefix, "clientID", clientId), + "--set", fmt.Sprintf("%s.%s=%s", pathPrefix, "clientSecret", clientSecret), + } + + defer func(as *azure.AuthService) { + err := as.Cleanup() + if err != nil { + utils.Error("%s", err) + } + }(as) + case api.ProviderAWS: + ctx := context.Background() + cfg, err := awsConfig.LoadDefaultConfig(ctx) + if err != nil { + return err + } + + cred, err := cfg.Credentials.Retrieve(ctx) + if err != nil { + return err + } + + pathPrefix := "cluster-api-provider-aws.cluster-api-provider-aws.managerBootstrapCredentials" + flags = []string{ + "--set", fmt.Sprintf("%s.%s=%s", pathPrefix, "AWS_ACCESS_KEY_ID", cred.AccessKeyID), + "--set", fmt.Sprintf("%s.%s=%s", pathPrefix, "AWS_SECRET_ACCESS_KEY", cred.SecretAccessKey), + "--set", fmt.Sprintf("%s.%s=%s", pathPrefix, "AWS_SESSION_TOKEN", cred.SessionToken), + "--set", fmt.Sprintf("%s.%s=%s", pathPrefix, "AWS_REGION", man.Region), + } + case api.ProviderGCP: + credentials, err := google.FindDefaultCredentials(context.Background()) + if err != nil { + return err + } + + flags = []string{ + "--setJSON", fmt.Sprintf(`cluster-api-provider-gcp.cluster-api-provider-gcp.managerBootstrapCredentials.credentialsJson=%q`, string(credentials.JSON)), + } + } + + return function(flags) +} diff --git a/pkg/bootstrap/common_test.go b/pkg/bootstrap/common_test.go new file mode 100644 index 000000000..199b31166 --- /dev/null +++ b/pkg/bootstrap/common_test.go @@ -0,0 +1,119 @@ +package bootstrap_test + +import ( + "testing" + + "github.com/pluralsh/plural/pkg/bootstrap" + "github.com/stretchr/testify/assert" + "golang.org/x/exp/slices" +) + +func doNothing(_ []string) error { + return nil +} + +func TestGetStepPath(t *testing.T) { + tests := []struct { + name string + step *bootstrap.Step + defaultPath string + expectedPath string + }{ + { + name: `step path should be used if it was set`, + step: &bootstrap.Step{ + Name: "Test", + Args: []string{}, + TargetPath: "/test/path", + Execute: doNothing, + }, + defaultPath: "/default/path", + expectedPath: "/test/path", + }, + { + name: `step path should be defaulted if not set`, + step: &bootstrap.Step{ + Name: "Test", + Args: []string{}, + Execute: doNothing, + }, + defaultPath: "/default/path", + expectedPath: "/default/path", + }, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + path := bootstrap.GetStepPath(test.step, test.defaultPath) + assert.Equal(t, path, test.expectedPath) + }) + } +} + +func TestFilterSteps(t *testing.T) { + tests := []struct { + name string + steps []*bootstrap.Step + expectedSteps []*bootstrap.Step + }{ + { + name: `steps without skip flag should not be filtered`, + steps: []*bootstrap.Step{ + { + Name: "Test", + Execute: doNothing, + }, + }, + expectedSteps: []*bootstrap.Step{ + { + Name: "Test", + Execute: doNothing, + }, + }, + }, + { + name: `steps with skip flag should be filtered`, + steps: []*bootstrap.Step{ + { + Name: "Test", + Execute: doNothing, + }, + { + Name: "Test AWS", + Execute: doNothing, + Skip: true, + }, + { + Name: "Test Azure", + Execute: doNothing, + Skip: false, + }, + { + Name: "Test GCP", + Execute: doNothing, + Skip: true, + }, + }, + expectedSteps: []*bootstrap.Step{ + { + Name: "Test", + Execute: doNothing, + }, + { + Name: "Test Azure", + Execute: doNothing, + Skip: false, + }, + }, + }, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + filteredSteps := bootstrap.FilterSteps(test.steps) + assert.Equal(t, len(filteredSteps), len(test.expectedSteps)) + assert.True(t, slices.EqualFunc(filteredSteps, test.expectedSteps, + func(a *bootstrap.Step, b *bootstrap.Step) bool { + return a.Name == b.Name && a.Skip == b.Skip + })) + }) + } +} diff --git a/pkg/bootstrap/destroy.go b/pkg/bootstrap/destroy.go new file mode 100644 index 000000000..00b54f8aa --- /dev/null +++ b/pkg/bootstrap/destroy.go @@ -0,0 +1,117 @@ +package bootstrap + +import ( + "github.com/pluralsh/plural/pkg/manifest" + "github.com/pluralsh/plural/pkg/provider" + "github.com/pluralsh/plural/pkg/utils" +) + +// getDestroySteps returns list of steps to run during cluster destroy. +func getDestroySteps(destroy func() error, runPlural ActionFunc, additionalFlags []string) ([]*Step, error) { + man, err := manifest.FetchProject() + if err != nil { + return nil, err + } + + kubeconfigPath, err := getKubeconfigPath() + if err != nil { + return nil, err + } + + flags := append(getBootstrapFlags(man.Provider), additionalFlags...) + + prov, err := provider.GetProvider() + if err != nil { + return nil, err + } + + return []*Step{ + { + Name: "Create local bootstrap cluster", + Args: []string{"plural", "bootstrap", "cluster", "create", "bootstrap", "--skip-if-exists"}, + Execute: runPlural, + }, + { + Name: "Bootstrap CRDs in local cluster", + Args: []string{"plural", "--bootstrap", "wkspace", "crds", "bootstrap"}, + Execute: runPlural, + }, + { + Name: "Install Cluster API operators in local cluster", + Args: append([]string{"plural", "--bootstrap", "wkspace", "helm", "bootstrap", "--skip", "cluster-api-cluster"}, append(flags, disableAzurePodIdentityFlag...)...), + Execute: runPlural, + }, + { + Name: "Move resources from target to local cluster", + Args: []string{"plural", "bootstrap", "cluster", "move", "--kubeconfig-context", prov.KubeContext(), "--to-kubeconfig", kubeconfigPath, "--to-kubeconfig-context", localClusterContext}, + Execute: runPlural, + SkipFunc: func() bool { + _, err := CheckClusterReadiness(man.Cluster, "bootstrap") + return err != nil + }, + Retries: 2, + }, + { + Name: "Move Helm secrets", + Execute: func(_ []string) error { + return moveHelmSecrets(prov.KubeContext(), localClusterContext) + }, + Retries: 2, + }, + { + Name: "Reinstall Helm charts to update configuration", + Args: append([]string{"plural", "--bootstrap", "wkspace", "helm", "bootstrap"}, flags...), + Execute: runPlural, + }, + { + Name: "Destroy bootstrap on target cluster", + Execute: func(_ []string) error { + return destroy() + }, + }, + { + Name: "Wait for cluster", + Args: []string{"plural", "--bootstrap", "clusters", "wait", "bootstrap", man.Cluster}, + Execute: runPlural, + }, + { + Name: "Wait for machine pools", + Args: []string{"plural", "--bootstrap", "clusters", "mpwait", "bootstrap", man.Cluster}, + Execute: runPlural, + }, + { + Name: "Destroy cluster API", + Args: []string{"plural", "bootstrap", "cluster", "destroy-cluster-api", man.Cluster}, + Execute: runPlural, + }, + { + Name: "Destroy local bootstrap cluster", + Args: []string{"plural", "--bootstrap", "bootstrap", "cluster", "delete", "bootstrap"}, + Execute: runPlural, + }, + }, nil +} + +// DestroyCluster destroys cluster managed by Cluster API. +func DestroyCluster(destroy func() error, runPlural ActionFunc) error { + utils.Highlight("Destroying Cluster API cluster...\n") + + if err := RunWithTempCredentials(func(flags []string) error { + steps, err := getDestroySteps(destroy, runPlural, flags) + if err != nil { + return err + } + + err = ExecuteSteps(steps) + if err != nil { + return err + } + + return nil + }); err != nil { + return err + } + + utils.Success("Cluster destroyed successfully!\n") + return nil +} diff --git a/pkg/bootstrap/manifests.go b/pkg/bootstrap/manifests.go new file mode 100644 index 000000000..7095f4903 --- /dev/null +++ b/pkg/bootstrap/manifests.go @@ -0,0 +1,132 @@ +package bootstrap + +const storageClassManifest = ` +apiVersion: v1 +kind: Namespace +metadata: + name: local-path-storage + +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: local-path-provisioner-service-account + namespace: local-path-storage + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: local-path-provisioner-role +rules: + - apiGroups: [ "" ] + resources: [ "nodes", "persistentvolumeclaims", "configmaps" ] + verbs: [ "get", "list", "watch" ] + - apiGroups: [ "" ] + resources: [ "endpoints", "persistentvolumes", "pods" ] + verbs: [ "*" ] + - apiGroups: [ "" ] + resources: [ "events" ] + verbs: [ "create", "patch" ] + - apiGroups: [ "storage.k8s.io" ] + resources: [ "storageclasses" ] + verbs: [ "get", "list", "watch" ] + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: local-path-provisioner-bind +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: local-path-provisioner-role +subjects: + - kind: ServiceAccount + name: local-path-provisioner-service-account + namespace: local-path-storage + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: local-path-provisioner + namespace: local-path-storage +spec: + replicas: 1 + selector: + matchLabels: + app: local-path-provisioner + template: + metadata: + labels: + app: local-path-provisioner + spec: + serviceAccountName: local-path-provisioner-service-account + containers: + - name: local-path-provisioner + image: rancher/local-path-provisioner:v0.0.24 + imagePullPolicy: IfNotPresent + command: + - local-path-provisioner + - --debug + - start + - --config + - /etc/config/config.json + volumeMounts: + - name: config-volume + mountPath: /etc/config/ + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + volumes: + - name: config-volume + configMap: + name: local-path-config +--- +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + annotations: + storageclass.kubernetes.io/is-default-class: "true" + name: standard +provisioner: rancher.io/local-path +reclaimPolicy: Delete +volumeBindingMode: WaitForFirstConsumer +--- +kind: ConfigMap +apiVersion: v1 +metadata: + name: local-path-config + namespace: local-path-storage +data: + config.json: |- + { + "nodePathMap":[ + { + "node":"DEFAULT_PATH_FOR_NON_LISTED_NODES", + "paths":["/opt/local-path-provisioner"] + } + ] + } + setup: |- + #!/bin/sh + set -eu + mkdir -m 0777 -p "$VOL_DIR" + teardown: |- + #!/bin/sh + set -eu + rm -rf "$VOL_DIR" + helperPod.yaml: |- + apiVersion: v1 + kind: Pod + metadata: + name: helper-pod + spec: + containers: + - name: helper-pod + image: busybox + imagePullPolicy: IfNotPresent +` diff --git a/pkg/bootstrap/migrate.go b/pkg/bootstrap/migrate.go new file mode 100644 index 000000000..6be1bbcc0 --- /dev/null +++ b/pkg/bootstrap/migrate.go @@ -0,0 +1,412 @@ +package bootstrap + +import ( + "fmt" + "log" + "os" + "path/filepath" + "strings" + + tfjson "github.com/hashicorp/terraform-json" + migratorapi "github.com/pluralsh/cluster-api-migration/pkg/api" + "github.com/pluralsh/cluster-api-migration/pkg/migrator" + "github.com/pluralsh/polly/containers" + delinkeranalyze "github.com/pluralsh/terraform-delinker/api/analyze/v1alpha1" + delinkerdelink "github.com/pluralsh/terraform-delinker/api/delink/v1alpha1" + delinkerexec "github.com/pluralsh/terraform-delinker/api/exec/v1alpha1" + delinkerplan "github.com/pluralsh/terraform-delinker/api/plan/v1alpha1" + "helm.sh/helm/v3/pkg/chart/loader" + "helm.sh/helm/v3/pkg/chartutil" + "sigs.k8s.io/yaml" + + "github.com/pluralsh/plural/pkg/api" + bootstrapaws "github.com/pluralsh/plural/pkg/bootstrap/aws" + "github.com/pluralsh/plural/pkg/manifest" + "github.com/pluralsh/plural/pkg/provider" + "github.com/pluralsh/plural/pkg/utils" + "github.com/pluralsh/plural/pkg/utils/git" + "github.com/pluralsh/plural/pkg/utils/pathing" +) + +func newConfiguration(cliProvider provider.Provider, clusterProvider migratorapi.ClusterProvider) (*migratorapi.Configuration, error) { + switch clusterProvider { + case migratorapi.ClusterProviderGCP: + kubeconfigPath, err := getKubeconfigPath() + if err != nil { + log.Fatalln(err) + } + + return &migratorapi.Configuration{ + GCPConfiguration: &migratorapi.GCPConfiguration{ + Project: cliProvider.Project(), + Region: cliProvider.Region(), + Name: cliProvider.Cluster(), + KubeconfigPath: kubeconfigPath, + }, + }, nil + case migratorapi.ClusterProviderAzure: + context := cliProvider.Context() + config := migratorapi.Configuration{ + AzureConfiguration: &migratorapi.AzureConfiguration{ + SubscriptionID: utils.ToString(context["SubscriptionId"]), + ResourceGroup: cliProvider.Project(), + Name: cliProvider.Cluster(), + }, + } + + if err := config.Validate(); err != nil { + log.Fatalln(err) + } + + return &config, nil + case migratorapi.ClusterProviderAWS: + err := os.Setenv("AWS_REGION", cliProvider.Region()) + if err != nil { + return nil, err + } + + config := &migratorapi.Configuration{ + AWSConfiguration: &migratorapi.AWSConfiguration{ + ClusterName: cliProvider.Cluster(), + Region: cliProvider.Region(), + }, + } + return config, nil + case migratorapi.ClusterProviderKind: + return &migratorapi.Configuration{ + KindConfiguration: &migratorapi.KindConfiguration{ + ClusterName: cliProvider.Cluster(), + }, + }, nil + + } + + return nil, fmt.Errorf("unknown provider, no configuration found") +} + +// getMigrator returns configured migrator for current provider. +func getMigrator() (migratorapi.Migrator, error) { + prov, err := provider.GetProvider() + if err != nil { + return nil, err + } + + clusterProvider := migratorapi.ClusterProvider(prov.Name()) + + configuration, err := newConfiguration(prov, clusterProvider) + if err != nil { + return nil, err + } + + return migrator.NewMigrator(clusterProvider, configuration) +} + +func isDesiredKubernetesVersion(key string, value, diffValue any) bool { + if key != "kubernetesVersion" { + return false + } + + defaultKubernetesVersion, _ := diffValue.(string) + currentKubernetesVersion, _ := value.(string) + + defaultKubernetesVersion = strings.TrimPrefix(defaultKubernetesVersion, "v") + currentKubernetesVersion = strings.TrimPrefix(currentKubernetesVersion, "v") + + return len(defaultKubernetesVersion) > 0 && strings.HasPrefix(currentKubernetesVersion, defaultKubernetesVersion) +} + +// generateValuesFile generates values.yaml file based on current cluster configuration that will be used by Cluster API. +func generateValuesFile() error { + utils.Highlight("Generating values.yaml file based on current cluster configuration...\n") + + gitRootDir, err := git.Root() + if err != nil { + return err + } + + bootstrapHelmDir := pathing.SanitizeFilepath(filepath.Join(gitRootDir, "bootstrap", "helm", "bootstrap")) + valuesFile := pathing.SanitizeFilepath(filepath.Join(bootstrapHelmDir, "values.yaml")) + defaultValuesFile := pathing.SanitizeFilepath(filepath.Join(bootstrapHelmDir, "default-values.yaml")) + + m, err := getMigrator() + if err != nil { + return err + } + + migratorValues, err := m.Convert() + if err != nil { + return err + } + + prov, err := provider.GetProvider() + if err != nil { + return err + } + + if prov.Name() == api.ProviderAWS { + availabilityZoneSet := containers.NewSet[string]() + for _, subnet := range migratorValues.Cluster.AWSCloudSpec.NetworkSpec.Subnets { + availabilityZoneSet.Add(subnet.AvailabilityZone) + } + man, err := manifest.FetchProject() + if err != nil { + return err + } + man.AvailabilityZones = availabilityZoneSet.List() + if err := man.Flush(); err != nil { + return err + } + } + + chart, err := loader.Load(bootstrapHelmDir) + if err != nil { + return err + } + + defaultValues, err := chartutil.ReadValuesFile(defaultValuesFile) + if err != nil { + return err + } + + // Nullify main values.yaml as we only use it to generate migration values + chart.Values = nil + chartValues, err := chartutil.CoalesceValues(chart, defaultValues) + if err != nil { + return err + } + + migrationYamlData, err := yaml.Marshal(Bootstrap{ClusterAPICluster: migratorValues}) + if err != nil { + return err + } + + migrationValues, err := chartutil.ReadValues(migrationYamlData) + if err != nil { + return err + } + + values := utils.DiffMap(migrationValues, chartValues, isDesiredKubernetesVersion) + + valuesYamlData, err := yaml.Marshal(values) + if err != nil { + return err + } + + if utils.Exists(valuesFile) { + if err := os.WriteFile(valuesFile, valuesYamlData, 0644); err != nil { + return err + } + } else { + return fmt.Errorf("can't save %s file", valuesFile) + } + + utils.Success("values.yaml saved successfully!\n") + return nil +} + +// GetProviderTags returns map of tags to set on provider resources during migration. +func GetProviderTags(prov, cluster string) map[string]string { + switch prov { + case api.ProviderAWS: + return map[string]string{ + fmt.Sprintf("kubernetes.io/cluster/%s", cluster): "owned", + fmt.Sprintf("sigs.k8s.io/cluster-api-provider-aws/cluster/%s", cluster): "owned", + } + case api.ProviderAzure: + return map[string]string{ + fmt.Sprintf("sigs.k8s.io_cluster-api-provider-azure_cluster_%s", cluster): "owned", + "sigs.k8s.io_cluster-api-provider-azure_role": "common", + } + default: + return map[string]string{} + } +} + +// delinkTerraformState delinks resources managed by Cluster API from Terraform state. +func delinkTerraformState(path string) error { + planner := delinkerplan.NewPlanner(delinkerplan.WithTerraform(delinkerexec.WithDir(path))) + + plan, err := planner.Plan() + if err != nil { + return err + } + + report := delinkeranalyze.NewAnalyzer(plan).Analyze(tfjson.ActionDelete) + delinker := delinkerdelink.NewDelinker(delinkerdelink.WithTerraform(delinkerexec.WithDir(path))) + return delinker.Run(report) +} + +// getMigrationFlags returns list of provider-specific flags used during cluster migration. +func getMigrationFlags(prov string) []string { + switch prov { + case api.ProviderAWS: + return []string{ + "--set", "cluster-api-provider-aws.cluster-api-provider-aws.bootstrapMode=false", + } + case api.ProviderGCP: + return []string{ + "--set", "cluster-api-provider-gcp.cluster-api-provider-gcp.bootstrapMode=false", + } + default: + return []string{} + } +} + +// getMigrationSteps returns list of steps to run during cluster migration. +func getMigrationSteps(runPlural ActionFunc) ([]*Step, error) { + man, err := manifest.FetchProject() + if err != nil { + return nil, err + } + + gitRootDir, err := git.Root() + if err != nil { + return nil, err + } + + bootstrapPath := pathing.SanitizeFilepath(filepath.Join(gitRootDir, "bootstrap")) + terraformPath := filepath.Join(bootstrapPath, "terraform") + flags := getMigrationFlags(man.Provider) + + if man.Provider == api.ProviderAzure { + // Setting PLURAL_PACKAGES_UNINSTALL variable to avoid confirmation prompt on package uninstall. + err := os.Setenv("PLURAL_PACKAGES_UNINSTALL", "true") + if err != nil { + return nil, err + } + } + + return []*Step{ + { + Name: "Ensure Cluster API IAM role has access", + Execute: func(_ []string) error { + roleArn := fmt.Sprintf("arn:aws:iam::%s:role/%s-capa-controller", man.Project, man.Cluster) + return bootstrapaws.AddRole(roleArn) + }, + Skip: man.Provider != api.ProviderAWS, + }, + { + Name: "Uninstall azure-identity package", + Args: []string{"plural", "packages", "uninstall", "helm", "bootstrap", "azure-identity"}, + TargetPath: gitRootDir, + Execute: runPlural, + Skip: man.Provider != api.ProviderAzure, + Retries: 2, + }, + { + Name: "Clear package cache", + TargetPath: gitRootDir, + Execute: func(_ []string) error { + api.ClearPackageCache() + return nil + }, + Skip: man.Provider != api.ProviderAzure, + }, + { + Name: "Normalize GCP provider value", + Execute: func(_ []string) error { + path := manifest.ProjectManifestPath() + project, err := manifest.ReadProject(path) + if err != nil { + return err + } + + project.Provider = api.ProviderGCP + return project.Write(path) + }, + Skip: man.Provider != api.ProviderGCP, + }, + { + Name: "Set Cluster API flag", + TargetPath: gitRootDir, + Execute: func(_ []string) error { + path := manifest.ProjectManifestPath() + project, err := manifest.ReadProject(path) + if err != nil { + return err + } + + project.ClusterAPI = true + return project.Write(path) + }, + }, + { + Name: "Build values", + Args: []string{"plural", "build", "--only", "bootstrap", "--force"}, + TargetPath: gitRootDir, + Execute: runPlural, + }, + { + Name: "Bootstrap CRDs", + Args: []string{"plural", "wkspace", "crds", bootstrapPath}, + Execute: runPlural, + }, + { + Name: "Install Cluster API operators", + Args: append([]string{"plural", "wkspace", "helm", "bootstrap", "--skip", "cluster-api-cluster"}, flags...), + Execute: runPlural, + }, + { + Name: "Add Cluster API tags for provider resources", + Execute: func(_ []string) error { + m, err := getMigrator() + if err != nil { + return err + } + + return m.AddTags(GetProviderTags(man.Provider, man.Cluster)) + }, + }, + { + Name: "Deploy cluster", + Args: append([]string{"plural", "wkspace", "helm", "bootstrap"}, flags...), + Execute: runPlural, + }, + { + Name: "Wait for cluster", + Args: []string{"plural", "clusters", "wait", "bootstrap", man.Cluster}, + Execute: runPlural, + }, + { + Name: "Wait for machine pools", + Args: []string{"plural", "clusters", "mpwait", "bootstrap", man.Cluster}, + Execute: runPlural, + }, + { + Name: "Delink resources managed by Cluster API from Terraform state", + Execute: func(_ []string) error { + return delinkTerraformState(terraformPath) + }, + Retries: 2, + }, + { + Name: "Run deploy", + Args: []string{"plural", "deploy", "--from", "bootstrap", "--silence", "--commit", "migrate to cluster api"}, + TargetPath: gitRootDir, + Execute: runPlural, + }, + }, nil +} + +// MigrateCluster migrates existing clusters to Cluster API. +func MigrateCluster(runPlural ActionFunc) error { + utils.Highlight("Migrating cluster to Cluster API...\n") + + err := generateValuesFile() + if err != nil { + return err + } + + steps, err := getMigrationSteps(runPlural) + if err != nil { + return err + } + + err = ExecuteSteps(steps) + if err != nil { + return err + } + + utils.Success("Cluster migrated successfully!\n") + return nil +} diff --git a/pkg/bootstrap/types.go b/pkg/bootstrap/types.go new file mode 100644 index 000000000..9b198cf77 --- /dev/null +++ b/pkg/bootstrap/types.go @@ -0,0 +1,32 @@ +package bootstrap + +import "github.com/pluralsh/cluster-api-migration/pkg/api" + +// ActionFunc is an action function that is executed as a part of single bootstrap, migrate and destroy step. +type ActionFunc func(arguments []string) error + +// ConditionFunc is a condition function that is checks if step should be executed or skipped. +type ConditionFunc func() bool + +type HookFunc func() + +// Step is a representation of a single step in a process of bootstrap, migrate and destroy. +type Step struct { + Name string + Args []string + TargetPath string + Execute ActionFunc + Skip bool + SkipFunc ConditionFunc + Retries int + OnError HookFunc + OnAfter HookFunc + Confirm string +} + +// Bootstrap is a representation of existing cluster to be migrated to Cluster API. +// This data is fetched from provider with migrator tool. +// See github.com/pluralsh/cluster-api-migration for more details. +type Bootstrap struct { + ClusterAPICluster *api.Values `json:"cluster-api-cluster"` +} diff --git a/pkg/bootstrap/validation/migration.go b/pkg/bootstrap/validation/migration.go new file mode 100644 index 000000000..e53431ae0 --- /dev/null +++ b/pkg/bootstrap/validation/migration.go @@ -0,0 +1,69 @@ +package validation + +import ( + "fmt" + + "github.com/Masterminds/semver" + "github.com/pluralsh/plural/pkg/api" +) + +var ( + tfRequirements = map[string]string{ + "aws-bootstrap": ">= 0.1.53", + "gcp-bootstrap": ">= 0.2.24", + "azure-bootstrap": ">= 0.2.0", + } + helmRequirements = map[string]string{ + "bootstrap": ">= 0.8.72", + } +) + +func ValidateMigration(client api.Client) error { + repo, err := client.GetRepository("bootstrap") + if err != nil { + return err + } + + charts, tfs, err := client.GetPackageInstallations(repo.Id) + if err != nil { + return err + } + chartsByName, tfsByName := map[string]*api.ChartInstallation{}, map[string]*api.TerraformInstallation{} + for _, chart := range charts { + chartsByName[chart.Chart.Name] = chart + } + for _, tf := range tfs { + tfsByName[tf.Terraform.Name] = tf + } + + for name, req := range tfRequirements { + if tf, ok := tfsByName[name]; ok { + if !testSemver(req, tf.Version.Version) { + return fmt.Errorf("You must have installed the %s terraform module at least at version %s to run cluster migration, your version is %s", name, req, tf.Version.Version) + } + } + } + + for name, req := range helmRequirements { + if chart, ok := chartsByName[name]; ok { + if !testSemver(req, chart.Version.Version) { + return fmt.Errorf("You must have installed the %s helm chart at least at version %s to run cluster migration, your version is %s", name, req, chart.Version.Version) + } + } + } + + return nil +} + +func testSemver(constraint, vsn string) bool { + c, err := semver.NewConstraint(constraint) + if err != nil { + return false + } + v, err := semver.NewVersion(vsn) + if err != nil { + return false + } + + return c.Check(v) +} diff --git a/pkg/bundle/configuration_test.go b/pkg/bundle/configuration_test.go index f07c4f2f4..d8e88f645 100644 --- a/pkg/bundle/configuration_test.go +++ b/pkg/bundle/configuration_test.go @@ -113,7 +113,7 @@ func TestConfigureEnvVariables(t *testing.T) { ctx: map[string]interface{}{}, repo: "test", envVars: map[string]string{"PLURAL_TEST_TEST_ITEM": "workspace.yaml"}, - expectedValue: "apiVersion: \"\"\nkind: \"\"\nmetadata: null\nspec:\n cluster: \"\"\n bucket: \"\"\n project: test\n provider: \"\"\n region: \"\"\n owner: null\n network: null\n bucketPrefix: \"\"\n context: {}\n", + expectedValue: "apiVersion: \"\"\nkind: \"\"\nmetadata: null\nspec:\n clusterapi: false\n cluster: \"\"\n bucket: \"\"\n project: test\n provider: \"\"\n region: \"\"\n owner: null\n network: null\n availabilityzones: null\n bucketPrefix: \"\"\n context: {}\n", }, } for _, test := range tests { diff --git a/pkg/cluster/clientset.go b/pkg/cluster/clientset.go new file mode 100644 index 000000000..95b583551 --- /dev/null +++ b/pkg/cluster/clientset.go @@ -0,0 +1,41 @@ +package cluster + +import ( + "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" + clusterapi "sigs.k8s.io/cluster-api/api/v1beta1" +) + +type ClusterV1Beta1Interface interface { + Clusters(namespace string) ClusterInterface +} + +type ClusterV1Beta1Client struct { + restClient rest.Interface +} + +func NewForConfig(c *rest.Config) (*ClusterV1Beta1Client, error) { + if err := AddToScheme(scheme.Scheme); err != nil { + return nil, err + } + + config := *c + config.ContentConfig.GroupVersion = &clusterapi.GroupVersion + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.UserAgent = rest.DefaultKubernetesUserAgent() + + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + + return &ClusterV1Beta1Client{restClient: client}, nil +} + +func (c *ClusterV1Beta1Client) Clusters(namespace string) ClusterInterface { + return &clusterClient{ + restClient: c.restClient, + ns: namespace, + } +} diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go new file mode 100644 index 000000000..d9cbd8ca3 --- /dev/null +++ b/pkg/cluster/cluster.go @@ -0,0 +1,83 @@ +package cluster + +import ( + "context" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" + clusterapi "sigs.k8s.io/cluster-api/api/v1beta1" +) + +type ClusterInterface interface { + List(ctx context.Context, opts metav1.ListOptions) (*clusterapi.ClusterList, error) + Get(ctx context.Context, name string, options metav1.GetOptions) (*clusterapi.Cluster, error) + Create(ctx context.Context, clust *clusterapi.Cluster) (*clusterapi.Cluster, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + // ... +} + +type clusterClient struct { + restClient rest.Interface + ns string +} + +func (c *clusterClient) List(ctx context.Context, opts metav1.ListOptions) (*clusterapi.ClusterList, error) { + result := clusterapi.ClusterList{} + err := c.restClient. + Get(). + Namespace(c.ns). + Resource("clusters"). + VersionedParams(&opts, scheme.ParameterCodec). + Do(ctx). + Into(&result) + + return &result, err +} + +func (c *clusterClient) Get(ctx context.Context, name string, opts metav1.GetOptions) (*clusterapi.Cluster, error) { + result := clusterapi.Cluster{} + err := c.restClient. + Get(). + Namespace(c.ns). + Resource("clusters"). + Name(name). + VersionedParams(&opts, scheme.ParameterCodec). + Do(ctx). + Into(&result) + + return &result, err +} + +func (c *clusterClient) Create(ctx context.Context, cluster *clusterapi.Cluster) (*clusterapi.Cluster, error) { + result := clusterapi.Cluster{} + err := c.restClient. + Post(). + Namespace(c.ns). + Resource("clusters"). + Body(cluster). + Do(ctx). + Into(&result) + + return &result, err +} + +func (c *clusterClient) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + opts.Watch = true + return c.restClient. + Get(). + Namespace(c.ns). + Resource("clusters"). + VersionedParams(&opts, scheme.ParameterCodec). + Watch(ctx) +} + +func WatchNamespace(ctx context.Context, client ClusterInterface) (watch.Interface, error) { + clusters, err := client.List(ctx, metav1.ListOptions{}) + if err != nil { + return nil, err + } + resourceVersion := clusters.ListMeta.ResourceVersion + return client.Watch(ctx, metav1.ListOptions{ResourceVersion: resourceVersion}) +} diff --git a/pkg/cluster/printer.go b/pkg/cluster/printer.go new file mode 100644 index 000000000..89f95bd7c --- /dev/null +++ b/pkg/cluster/printer.go @@ -0,0 +1,84 @@ +package cluster + +import ( + "fmt" + "strings" + + tm "github.com/buger/goterm" + clusterapi "sigs.k8s.io/cluster-api/api/v1beta1" +) + +func Ready(cluster *clusterapi.Cluster) bool { + cond := findReadiness(cluster) + tm.Printf("Cluster %s ", cluster.Name) + if cond == nil { + warn("WAITING") + tm.Println("") + return false + } + + if cond.Status == "True" { + success("READY") + tm.Println("") + return true + } + + if cond.Status == "False" { + warn("WAITING") + } else if cond.Status == "Unknown" { + highlight("UNKNOWN") + } + + tm.Println("") + return false +} + +func Flush() { + for idx, str := range strings.SplitAfter(tm.Screen.String(), "\n") { + if idx == tm.Height()-1 { + _, err := tm.Output.WriteString("...") + if err != nil { + return + } + break + } + + _, err := tm.Output.WriteString(str) + if err != nil { + return + } + } + + if err := tm.Output.Flush(); err != nil { + return + } + tm.Screen.Reset() +} + +func findReadiness(cluster *clusterapi.Cluster) (condition *clusterapi.Condition) { + for _, cond := range cluster.Status.Conditions { + if cond.Type == clusterapi.ReadyCondition { + condition = &cond + return + } + } + return +} + +func warn(line string, args ...interface{}) { + if _, err := tm.Print(tm.Color(fmt.Sprintf(line, args...), tm.YELLOW)); err != nil { + return + } +} + +func success(line string, args ...interface{}) { + if _, err := tm.Print(tm.Color(fmt.Sprintf(line, args...), tm.GREEN)); err != nil { + return + } +} + +func highlight(line string, args ...interface{}) { + if _, err := tm.Print(tm.Bold(fmt.Sprintf(line, args...))); err != nil { + return + } +} diff --git a/pkg/cluster/register.go b/pkg/cluster/register.go new file mode 100644 index 000000000..b7ce864a9 --- /dev/null +++ b/pkg/cluster/register.go @@ -0,0 +1,38 @@ +package cluster + +import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + clusterapi "sigs.k8s.io/cluster-api/api/v1beta1" +) + +var Scheme = runtime.NewScheme() +var Codecs = serializer.NewCodecFactory(Scheme) +var ParameterCodec = runtime.NewParameterCodec(Scheme) +var localSchemeBuilder = runtime.SchemeBuilder{ + clusterapi.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(Scheme)) +} diff --git a/pkg/cluster/waiter.go b/pkg/cluster/waiter.go new file mode 100644 index 000000000..139dc1cfc --- /dev/null +++ b/pkg/cluster/waiter.go @@ -0,0 +1,75 @@ +package cluster + +import ( + "context" + "fmt" + "time" + + tm "github.com/buger/goterm" + "github.com/pluralsh/plural/pkg/config" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/rest" + clusterapi "sigs.k8s.io/cluster-api/api/v1beta1" +) + +const ( + waitTime = 40 * 60 * time.Second +) + +func Waiter(kubeConf *rest.Config, namespace string, name string, clustFunc func(cluster *clusterapi.Cluster) (bool, error), timeout func() error) error { + conf := config.Read() + ctx := context.Background() + clusters, err := NewForConfig(kubeConf) + if err != nil { + return err + } + + client := clusters.Clusters(conf.Namespace(namespace)) + cluster, err := client.Get(ctx, name, metav1.GetOptions{}) + if err != nil { + return err + } + + tm.Clear() + if ready, err := clustFunc(cluster); ready || err != nil { + return err + } + + watcher, err := WatchNamespace(ctx, client) + if err != nil { + return err + } + + ch := watcher.ResultChan() + for { + select { + case event := <-ch: + tm.Clear() + cluster, ok := event.Object.(*clusterapi.Cluster) + if !ok { + return fmt.Errorf("failed to parse watch event") + } + + if stop, err := clustFunc(cluster); stop || err != nil { + return err + } + case <-time.After(waitTime): + if err := timeout(); err != nil { + return err + } + } + } +} + +func Wait(kubeConf *rest.Config, namespace string, name string) error { + timeout := func() error { + return fmt.Errorf("Failed to become ready after 40 minutes, try running `plural cluster watch %s %s` to get an idea where to debug", namespace, name) + } + + return Waiter(kubeConf, namespace, name, func(cluster *clusterapi.Cluster) (bool, error) { + tm.MoveCursor(1, 1) + ready := Ready(cluster) + Flush() + return ready, nil + }, timeout) +} diff --git a/pkg/executor/default.go b/pkg/executor/default.go index 41af04f73..6fc085e72 100644 --- a/pkg/executor/default.go +++ b/pkg/executor/default.go @@ -36,6 +36,14 @@ func defaultSteps(path string) []*Step { Args: []string{"output", "terraform", app}, Sha: "", }, + { + Name: "kube-init", + Wkdir: sanitizedPath, + Target: path, + Command: "plural", + Args: []string{"wkspace", "kube-init"}, + Sha: "", + }, { Name: "crds", Wkdir: sanitizedPath, diff --git a/pkg/executor/execution.go b/pkg/executor/execution.go index 0a7d7f3f9..1295de1e8 100644 --- a/pkg/executor/execution.go +++ b/pkg/executor/execution.go @@ -49,7 +49,7 @@ func GetExecution(path, name string) (*Execution, error) { return &ex, nil } -func (e *Execution) Execute(verbose bool) error { +func (e *Execution) Execute(actionName string, verbose bool) error { root, err := git.Root() if err != nil { return err @@ -60,7 +60,7 @@ func (e *Execution) Execute(verbose bool) error { return err } - fmt.Printf("deploying %s. This may take a while, so hold on to your butts\n", e.Metadata.Path) + fmt.Printf("%s %s. This may take a while, so hold on to your butts\n", actionName, e.Metadata.Path) for i, step := range e.Steps { prev := step.Verbose if verbose { diff --git a/pkg/executor/step.go b/pkg/executor/step.go index 5f5fdc58b..0442caddd 100644 --- a/pkg/executor/step.go +++ b/pkg/executor/step.go @@ -140,7 +140,7 @@ func filteredHash(root string, ignore []string) (string, error) { func ignorePath(file string, ignore []string) bool { for _, pref := range ignore { - if strings.HasPrefix(file, pref) { + if strings.Contains(file, pref) { return true } } diff --git a/pkg/exp/env.go b/pkg/exp/env.go new file mode 100644 index 000000000..1a3904780 --- /dev/null +++ b/pkg/exp/env.go @@ -0,0 +1,15 @@ +package exp + +import ( + "os" +) + +type EnvProvider struct{} + +func (this *EnvProvider) IsFeatureEnabled(feature FeatureFlag) bool { + return os.Getenv(string(feature)) == "true" +} + +func newEnvProvider() Provider { + return &EnvProvider{} +} diff --git a/pkg/exp/features.go b/pkg/exp/features.go new file mode 100644 index 000000000..8615b858a --- /dev/null +++ b/pkg/exp/features.go @@ -0,0 +1,22 @@ +package exp + +const ( + EXP_PLURAL_CAPI = FeatureFlag("EXP_PLURAL_CAPI") +) + +var ( + providers = []Provider{ + newEnvProvider(), + newPostHogProvider(), + } +) + +func IsFeatureEnabled(feature FeatureFlag) bool { + for _, p := range providers { + if p.IsFeatureEnabled(feature) { + return true + } + } + + return false +} diff --git a/pkg/exp/posthog.go b/pkg/exp/posthog.go new file mode 100644 index 000000000..d698557bc --- /dev/null +++ b/pkg/exp/posthog.go @@ -0,0 +1,50 @@ +package exp + +import ( + "github.com/pluralsh/plural/pkg/config" + "github.com/pluralsh/plural/pkg/exp/posthog" +) + +// PostHogProvider implements Provider interface +type PostHogProvider struct { + cache map[FeatureFlag]bool + client posthog.Client + email string +} + +func (this *PostHogProvider) IsFeatureEnabled(feature FeatureFlag) bool { + if enabled, exists := this.fromCache(feature); exists { + return enabled + } + + isEnabled, err := this.client.IsFeatureEnabled(posthog.FeatureFlagPayload{ + Key: string(feature), + DistinctId: this.email, + }) + + if err != nil { + // We can cache it for the CLI to avoid retries + this.cache[feature] = false + return false + } + + this.cache[feature] = isEnabled + return isEnabled +} + +func (this *PostHogProvider) fromCache(feature FeatureFlag) (enabled, exists bool) { + enabled, exists = this.cache[feature] + return +} + +func (this *PostHogProvider) init() Provider { + this.client = posthog.New() + this.email = config.Read().Email + this.cache = make(map[FeatureFlag]bool, 0) + + return this +} + +func newPostHogProvider() Provider { + return (&PostHogProvider{}).init() +} diff --git a/pkg/exp/posthog/client.go b/pkg/exp/posthog/client.go new file mode 100644 index 000000000..bfb38e78b --- /dev/null +++ b/pkg/exp/posthog/client.go @@ -0,0 +1,79 @@ +package posthog + +import ( + "bytes" + "encoding/json" + "fmt" + "net/http" + "time" + + "github.com/posthog/posthog-go" +) + +const ( + publicAPIKey = "phc_r0v4jbKz8Rr27mfqgO15AN5BMuuvnU8hCFedd6zpSDy" + endpoint = "posthog.plural.sh" +) + +type posthogClient struct { + config Config + contentType string + client http.Client +} + +func (this *posthogClient) IsFeatureEnabled(payload FeatureFlagPayload) (bool, error) { + values := posthog.DecideRequestData{ + ApiKey: this.config.APIKey, + DistinctId: payload.DistinctId, + PersonProperties: posthog.Properties{ + "email": payload.DistinctId, + }, + } + data, err := json.Marshal(values) + if err != nil { + return false, err + } + + resp, err := this.client.Post(this.decideEndpoint(), this.contentType, bytes.NewBuffer(data)) + if err != nil { + return false, err + } + + defer resp.Body.Close() + + decide := new(posthog.DecideResponse) + err = json.NewDecoder(resp.Body).Decode(decide) + if err != nil { + return false, err + } + + enabled := decide.FeatureFlags[payload.Key] + + switch v := enabled.(type) { + case nil: + return false, nil + case bool: + return v, nil + case string: + return v == "true", nil + default: + return true, nil + } +} + +func (this *posthogClient) decideEndpoint() string { + return fmt.Sprintf("https://%s/decide/?v=3", this.config.Endpoint) +} + +func New() Client { + return &posthogClient{ + config: Config{ + APIKey: publicAPIKey, + Endpoint: endpoint, + }, + contentType: "application/json", + client: http.Client{ + Timeout: 5 * time.Second, + }, + } +} diff --git a/pkg/exp/posthog/types.go b/pkg/exp/posthog/types.go new file mode 100644 index 000000000..90437598a --- /dev/null +++ b/pkg/exp/posthog/types.go @@ -0,0 +1,15 @@ +package posthog + +type Client interface { + IsFeatureEnabled(FeatureFlagPayload) (bool, error) +} + +type FeatureFlagPayload struct { + Key string + DistinctId string +} + +type Config struct { + APIKey string + Endpoint string +} diff --git a/pkg/exp/types.go b/pkg/exp/types.go new file mode 100644 index 000000000..dc90a7c01 --- /dev/null +++ b/pkg/exp/types.go @@ -0,0 +1,7 @@ +package exp + +type FeatureFlag string + +type Provider interface { + IsFeatureEnabled(feature FeatureFlag) bool +} diff --git a/pkg/kubernetes/kube.go b/pkg/kubernetes/kube.go index 7f9ec677f..65ea2a396 100644 --- a/pkg/kubernetes/kube.go +++ b/pkg/kubernetes/kube.go @@ -48,6 +48,9 @@ func InKubernetes() bool { type Kube interface { Secret(namespace string, name string) (*v1.Secret, error) + SecretList(namespace string, opts metav1.ListOptions) (*v1.SecretList, error) + SecretCreate(namespace string, secret *v1.Secret) (*v1.Secret, error) + SecretDeleteCollection(namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error Node(name string) (*v1.Node, error) Nodes() (*v1.NodeList, error) FinalizeNamespace(namespace string) error @@ -62,6 +65,7 @@ type Kube interface { WireguardPeerCreate(namespace string, wireguardPeer *vpnv1alpha1.WireguardPeer) (*vpnv1alpha1.WireguardPeer, error) WireguardPeerDelete(namespace string, name string) error Apply(path string, force bool) error + CreateNamespace(namespace string) error GetClient() *kubernetes.Clientset GetRestClient() *restclient.RESTClient } @@ -83,12 +87,21 @@ func (k *kube) GetRestClient() *restclient.RESTClient { } func KubeConfig() (*rest.Config, error) { + return KubeConfigWithContext("") +} + +func KubeConfigWithContext(context string) (*rest.Config, error) { if InKubernetes() { return rest.InClusterConfig() } homedir, _ := os.UserHomeDir() conf := pathing.SanitizeFilepath(filepath.Join(homedir, ".kube", "config")) + + if len(context) > 0 { + return buildConfigFromFlags(context, conf) + } + return clientcmd.BuildConfigFromFlags("", conf) } @@ -101,6 +114,28 @@ func Kubernetes() (Kube, error) { return buildKubeFromConfig(conf) } +func KubernetesWithContext(context string) (Kube, error) { + homedir, err := os.UserHomeDir() + if err != nil { + return nil, err + } + + kubeconfigPath := pathing.SanitizeFilepath(filepath.Join(homedir, ".kube", "config")) + + conf, err := buildConfigFromFlags(context, kubeconfigPath) + if err != nil { + return nil, err + } + + return buildKubeFromConfig(conf) +} + +func buildConfigFromFlags(context, kubeconfigPath string) (*rest.Config, error) { + return clientcmd.NewNonInteractiveDeferredLoadingClientConfig( + &clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeconfigPath}, + &clientcmd.ConfigOverrides{CurrentContext: context}).ClientConfig() +} + func buildKubeFromConfig(config *rest.Config) (Kube, error) { clientset, err := kubernetes.NewForConfig(config) if err != nil { @@ -143,6 +178,18 @@ func (k *kube) Secret(namespace string, name string) (*v1.Secret, error) { return k.Kube.CoreV1().Secrets(namespace).Get(context.Background(), name, metav1.GetOptions{}) } +func (k *kube) SecretList(namespace string, opts metav1.ListOptions) (*v1.SecretList, error) { + return k.Kube.CoreV1().Secrets(namespace).List(context.Background(), opts) +} + +func (k *kube) SecretCreate(namespace string, secret *v1.Secret) (*v1.Secret, error) { + return k.Kube.CoreV1().Secrets(namespace).Create(context.Background(), secret, metav1.CreateOptions{}) +} + +func (k *kube) SecretDeleteCollection(namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + return k.Kube.CoreV1().Secrets(namespace).DeleteCollection(context.Background(), opts, listOpts) +} + func (k *kube) Node(name string) (*v1.Node, error) { return k.Kube.CoreV1().Nodes().Get(context.Background(), name, metav1.GetOptions{}) } @@ -262,3 +309,18 @@ func (k *kube) Apply(path string, force bool) error { return nil } + +func (k *kube) CreateNamespace(namespace string) error { + ctx := context.Background() + _, err := k.Kube.CoreV1().Namespaces().Create(ctx, &v1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: namespace, + Labels: map[string]string{ + "app.kubernetes.io/managed-by": "plural", + "app.plural.sh/name": namespace, + }, + }, + }, metav1.CreateOptions{}) + + return err +} diff --git a/pkg/machinepool/clientset.go b/pkg/machinepool/clientset.go new file mode 100644 index 000000000..b87bc4a08 --- /dev/null +++ b/pkg/machinepool/clientset.go @@ -0,0 +1,41 @@ +package machinepool + +import ( + "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" + clusterapiExp "sigs.k8s.io/cluster-api/exp/api/v1beta1" +) + +type MachinePoolV1Beta1Interface interface { + MachinePools(namespace string) MachinePoolInterface +} + +type MachinePoolV1Beta1Client struct { + restClient rest.Interface +} + +func NewForConfig(c *rest.Config) (*MachinePoolV1Beta1Client, error) { + if err := AddToScheme(scheme.Scheme); err != nil { + return nil, err + } + + config := *c + config.ContentConfig.GroupVersion = &clusterapiExp.GroupVersion + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.UserAgent = rest.DefaultKubernetesUserAgent() + + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + + return &MachinePoolV1Beta1Client{restClient: client}, nil +} + +func (c *MachinePoolV1Beta1Client) MachinePools(namespace string) MachinePoolInterface { + return &machinepoolClient{ + restClient: c.restClient, + ns: namespace, + } +} diff --git a/pkg/machinepool/machinepool.go b/pkg/machinepool/machinepool.go new file mode 100644 index 000000000..e67186721 --- /dev/null +++ b/pkg/machinepool/machinepool.go @@ -0,0 +1,98 @@ +package machinepool + +import ( + "context" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" + clusterapiExp "sigs.k8s.io/cluster-api/exp/api/v1beta1" +) + +type MachinePoolInterface interface { + List(ctx context.Context, opts metav1.ListOptions) (*clusterapiExp.MachinePoolList, error) + Get(ctx context.Context, name string, options metav1.GetOptions) (*clusterapiExp.MachinePool, error) + Create(ctx context.Context, mp *clusterapiExp.MachinePool) (*clusterapiExp.MachinePool, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Update(ctx context.Context, mp *clusterapiExp.MachinePool) (*clusterapiExp.MachinePool, error) + // ... +} + +type machinepoolClient struct { + restClient rest.Interface + ns string +} + +func (c *machinepoolClient) List(ctx context.Context, opts metav1.ListOptions) (*clusterapiExp.MachinePoolList, error) { + result := clusterapiExp.MachinePoolList{} + err := c.restClient. + Get(). + Namespace(c.ns). + Resource("machinepools"). + VersionedParams(&opts, scheme.ParameterCodec). + Do(ctx). + Into(&result) + + return &result, err +} + +func (c *machinepoolClient) Get(ctx context.Context, name string, opts metav1.GetOptions) (*clusterapiExp.MachinePool, error) { + result := clusterapiExp.MachinePool{} + err := c.restClient. + Get(). + Namespace(c.ns). + Resource("machinepools"). + Name(name). + VersionedParams(&opts, scheme.ParameterCodec). + Do(ctx). + Into(&result) + + return &result, err +} + +func (c *machinepoolClient) Update(ctx context.Context, mp *clusterapiExp.MachinePool) (*clusterapiExp.MachinePool, error) { + result := clusterapiExp.MachinePool{} + err := c.restClient. + Put(). + Namespace(c.ns). + Resource("machinepools"). + Name(mp.Name). + Body(mp). + Do(ctx). + Into(&result) + + return &result, err +} + +func (c *machinepoolClient) Create(ctx context.Context, machinepool *clusterapiExp.MachinePool) (*clusterapiExp.MachinePool, error) { + result := clusterapiExp.MachinePool{} + err := c.restClient. + Post(). + Namespace(c.ns). + Resource("machinepools"). + Body(machinepool). + Do(ctx). + Into(&result) + + return &result, err +} + +func (c *machinepoolClient) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + opts.Watch = true + return c.restClient. + Get(). + Namespace(c.ns). + Resource("machinepools"). + VersionedParams(&opts, scheme.ParameterCodec). + Watch(ctx) +} + +func WatchNamespace(ctx context.Context, client MachinePoolInterface, listOps metav1.ListOptions) (watch.Interface, error) { + mps, err := client.List(ctx, listOps) + if err != nil { + return nil, err + } + resourceVersion := mps.ListMeta.ResourceVersion + return client.Watch(ctx, metav1.ListOptions{ResourceVersion: resourceVersion}) +} diff --git a/pkg/machinepool/printer.go b/pkg/machinepool/printer.go new file mode 100644 index 000000000..3def94f5e --- /dev/null +++ b/pkg/machinepool/printer.go @@ -0,0 +1,115 @@ +package machinepool + +import ( + "fmt" + "strings" + + tm "github.com/buger/goterm" + clusterapi "sigs.k8s.io/cluster-api/api/v1beta1" + clusterapiExp "sigs.k8s.io/cluster-api/exp/api/v1beta1" +) + +func Ready(mp *clusterapiExp.MachinePool) bool { + phase := findReadiness(mp) + tm.Printf("MachinePool %s ", mp.Name) + + switch phase { + case clusterapiExp.MachinePoolPhasePending: + warn("PENDING") + tm.Println("") + return false + case clusterapiExp.MachinePoolPhaseProvisioning: + warn("PROVISIONING") + tm.Println("") + return false + case clusterapiExp.MachinePoolPhaseProvisioned: + warn("PROVISIONED") + tm.Println("") + return false + case clusterapiExp.MachinePoolPhaseRunning: + success("RUNNING") + tm.Println("") + return true + case clusterapiExp.MachinePoolPhaseDeleting: + warn("DELETING") + tm.Println("") + return false + case clusterapiExp.MachinePoolPhaseFailed: + warn("FAILED") + tm.Println("") + return false + case clusterapiExp.MachinePoolPhaseUnknown: + highlight("UNKNOWN") + tm.Println("") + return false + case clusterapiExp.MachinePoolPhaseScalingUp: + warn("SCALING UP") + tm.Println("") + return false + case clusterapiExp.MachinePoolPhaseScalingDown: + warn("SCALING DOWN") + tm.Println("") + return false + case clusterapiExp.MachinePoolPhaseScaling: + warn("SCALING") + tm.Println("") + return false + } + + tm.Println("") + return false +} + +func Flush() { + for idx, str := range strings.SplitAfter(tm.Screen.String(), "\n") { + if idx == tm.Height()-1 { + _, err := tm.Output.WriteString("...") + if err != nil { + return + } + break + } + + _, err := tm.Output.WriteString(str) + if err != nil { + return + } + } + + if err := tm.Output.Flush(); err != nil { + return + } + tm.Screen.Reset() +} + +func findReadiness(mp *clusterapiExp.MachinePool) clusterapiExp.MachinePoolPhase { + return clusterapiExp.MachinePoolPhase(mp.Status.Phase) +} + +func findCondition(mp *clusterapiExp.MachinePool) (condition clusterapi.Condition) { + for _, cond := range mp.Status.Conditions { + if cond.Type == clusterapi.ReadyCondition { + condition = cond + return + } + } + return +} + +func warn(line string, args ...interface{}) { + if _, err := tm.Print(tm.Color(fmt.Sprintf(line, args...), tm.YELLOW)); err != nil { + return + } +} + +func success(line string, args ...interface{}) { + if _, err := tm.Print(tm.Color(fmt.Sprintf(line, args...), tm.GREEN)); err != nil { + return + } +} + +func highlight(line string, args ...interface{}) { + if _, err := tm.Print(tm.Bold(fmt.Sprintf(line, args...))); err != nil { + return + } +} diff --git a/pkg/machinepool/register.go b/pkg/machinepool/register.go new file mode 100644 index 000000000..9546b6bec --- /dev/null +++ b/pkg/machinepool/register.go @@ -0,0 +1,38 @@ +package machinepool + +import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + clusterapiExp "sigs.k8s.io/cluster-api/exp/api/v1beta1" +) + +var Scheme = runtime.NewScheme() +var Codecs = serializer.NewCodecFactory(Scheme) +var ParameterCodec = runtime.NewParameterCodec(Scheme) +var localSchemeBuilder = runtime.SchemeBuilder{ + clusterapiExp.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(Scheme)) +} diff --git a/pkg/machinepool/waiter.go b/pkg/machinepool/waiter.go new file mode 100644 index 000000000..b243ecf73 --- /dev/null +++ b/pkg/machinepool/waiter.go @@ -0,0 +1,294 @@ +package machinepool + +import ( + "context" + "fmt" + "time" + + tm "github.com/buger/goterm" + "github.com/gdamore/tcell/v2" + "github.com/pluralsh/plural/pkg/config" + "github.com/pluralsh/plural/pkg/utils" + "github.com/rivo/tview" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/rest" + clusterapi "sigs.k8s.io/cluster-api/api/v1beta1" + clusterapiExp "sigs.k8s.io/cluster-api/exp/api/v1beta1" +) + +const ( + waitTime = 40 * 60 * time.Second +) + +func ListAll(kubeConf *rest.Config) ([]clusterapiExp.MachinePool, error) { + mps, err := NewForConfig(kubeConf) + if err != nil { + return nil, err + } + + client := mps.MachinePools("") + l, err := client.List(context.Background(), metav1.ListOptions{}) + if err != nil { + return nil, err + } + + return l.Items, nil +} + +type MachinePoolWaiter interface { + Init() + Check(mp *clusterapiExp.MachinePool) bool +} + +type machinePoolWaiterClient struct { + pools *clusterapiExp.MachinePoolList + phase map[string]clusterapiExp.MachinePoolPhase + condition map[string]clusterapi.Condition + app *tview.Application + table *tview.Table +} + +func (c *machinePoolWaiterClient) Init() { + c.phase = make(map[string]clusterapiExp.MachinePoolPhase) + c.condition = make(map[string]clusterapi.Condition) + for _, mp := range c.pools.Items { + c.phase[mp.Name] = findReadiness(&mp) + } + for _, mp := range c.pools.Items { + c.condition[mp.Name] = findCondition(&mp) + } + + app := tview.NewApplication() + c.app = app + table := tview.NewTable(). + SetBorders(true).SetDoneFunc(func(key tcell.Key) { + if key == tcell.KeyEscape { + app.Stop() + } + }) + c.table = table +} + +// UpdateTable updates the table with the current status of the machine pools +// the table has 2 columns, the first one is the name of the machine pool and the second one is the phase +func (c *machinePoolWaiterClient) UpdateTable() { + c.table.Clear() + headers := []string{"Machine Pool", "Phase"} + for i, header := range headers { + c.table.SetCell(0, i, tview.NewTableCell(header).SetTextColor(tcell.ColorYellow)) + } + for i, mp := range c.pools.Items { + name := mp.Name + phase := string(c.phase[name]) + c.table.SetCell(i+1, 0, tview.NewTableCell(name)) + c.table.SetCell(i+1, 1, tview.NewTableCell(phase)) + } +} + +func (c *machinePoolWaiterClient) Check(mp *clusterapiExp.MachinePool) bool { + c.phase[mp.Name] = findReadiness(mp) + c.condition[mp.Name] = findCondition(mp) + c.UpdateTable() + c.app.Draw() + + return areAllConditionsTrue(c.condition) +} + +// areAllConditionsTrue checks if all conditions in provided map are true. +func areAllConditionsTrue(conditions map[string]clusterapi.Condition) bool { + for _, condition := range conditions { + if condition.Status != corev1.ConditionTrue { + return false + } + } + return true +} + +func AllWaiter(kubeConf *rest.Config, namespace string, clusterName string, timeout func() error) error { + conf := config.Read() + ctx := context.Background() + mps, err := NewForConfig(kubeConf) + if err != nil { + return err + } + + label := &metav1.LabelSelector{MatchLabels: map[string]string{"cluster.x-k8s.io/cluster-name": clusterName}} + + client := mps.MachinePools(conf.Namespace(namespace)) + pools, err := client.List(ctx, metav1.ListOptions{LabelSelector: metav1.FormatLabelSelector(label)}) + if err != nil { + return err + } + if len(pools.Items) == 0 { + return fmt.Errorf("No machine pools found for cluster %s", clusterName) + } + + waitClient := &machinePoolWaiterClient{pools: pools} + + waitClient.Init() + + go func() { + if err := waitClient.app.SetRoot(waitClient.table, true).SetFocus(waitClient.table).Run(); err != nil { + utils.Error("%s\n", err) + panic(err) + } + }() + + if ready := waitClient.Check(&pools.Items[0]); ready { + waitClient.app.Stop() + return err + } + + watcher, err := WatchNamespace(ctx, client, metav1.ListOptions{LabelSelector: metav1.FormatLabelSelector(label)}) + if err != nil { + return err + } + + ch := watcher.ResultChan() + for { + select { + case event := <-ch: + mp, ok := event.Object.(*clusterapiExp.MachinePool) + if !ok { + waitClient.app.Stop() + return fmt.Errorf("Failed to parse watch event") + } + + if stop := waitClient.Check(mp); stop { + waitClient.app.Stop() + return nil + } + case <-time.After(waitTime): + waitClient.app.Stop() + if err := timeout(); err != nil { + return err + } + } + } +} + +func Waiter(kubeConf *rest.Config, namespace string, name string, mpFunc func(mp *clusterapiExp.MachinePool) (bool, error), timeout func() error) error { + conf := config.Read() + ctx := context.Background() + mps, err := NewForConfig(kubeConf) + if err != nil { + return err + } + + client := mps.MachinePools(conf.Namespace(namespace)) + mp, err := client.Get(ctx, name, metav1.GetOptions{}) + if err != nil { + return err + } + + if ready, err := mpFunc(mp); ready || err != nil { + return err + } + + watcher, err := WatchNamespace(ctx, client, metav1.ListOptions{}) + if err != nil { + return err + } + + ch := watcher.ResultChan() + for { + select { + case event := <-ch: + mp, ok := event.Object.(*clusterapiExp.MachinePool) + if !ok { + return fmt.Errorf("Failed to parse watch event") + } + + if stop, err := mpFunc(mp); stop || err != nil { + return err + } + case <-time.After(waitTime): + if err := timeout(); err != nil { + return err + } + } + } +} + +func SilentWait(kubeConf *rest.Config, namespace string, name string) error { + timeout := func() error { + return fmt.Errorf("Failed to become ready after 40 minutes, try running `plural cluster mpwait %s %s` to get an idea where to debug", namespace, name) + } + + return Waiter(kubeConf, namespace, name, func(mp *clusterapiExp.MachinePool) (bool, error) { + phase := findReadiness(mp) + if phase == clusterapiExp.MachinePoolPhaseRunning { + fmt.Printf("MachinePool %s is finally ready!", name) + return true, nil + } + return false, nil + }, timeout) +} + +func Wait(kubeConf *rest.Config, namespace string, name string) error { + timeout := func() error { + return fmt.Errorf("Failed to become ready after 40 minutes, try running `plural cluster mpwait %s %s` to get an idea where to debug", namespace, name) + } + + return Waiter(kubeConf, namespace, name, func(mp *clusterapiExp.MachinePool) (bool, error) { + ready := Ready(mp) + Flush() + return ready, nil + }, timeout) +} + +func NoTableAllWaiter(kubeConf *rest.Config, namespace string, clusterName string) error { + conf := config.Read() + ctx := context.Background() + mps, err := NewForConfig(kubeConf) + if err != nil { + return err + } + + label := &metav1.LabelSelector{MatchLabels: map[string]string{"cluster.x-k8s.io/cluster-name": clusterName}} + + client := mps.MachinePools(conf.Namespace(namespace)) + pools, err := client.List(ctx, metav1.ListOptions{LabelSelector: metav1.FormatLabelSelector(label)}) + if err != nil { + return err + } + if len(pools.Items) == 0 { + return fmt.Errorf("No machine pools found for cluster %s", clusterName) + } + condition := map[string]clusterapi.Condition{} + + if err := utils.WaitFor(20*time.Minute, 5*time.Second, func() (bool, error) { + pools, err := client.List(ctx, metav1.ListOptions{LabelSelector: metav1.FormatLabelSelector(label)}) + if err != nil { + return false, err + } + for y, mp := range pools.Items { + tm.MoveCursor(1, y+1) + Ready(&mp) + Flush() + condition[mp.Name] = findCondition(&mp) + if areAllConditionsTrue(condition) { + return true, nil + } + } + + return false, nil + }); err != nil { + return err + } + + return nil +} + +func WaitAll(kubeConf *rest.Config, namespace string, clusterName string) error { + value, ok := utils.GetEnvBoolValue("PLURAL_DISABLE_MP_TABLE_VIEW") + if ok && value { + return NoTableAllWaiter(kubeConf, namespace, clusterName) + } + timeout := func() error { + return fmt.Errorf("Failed to become ready after 40 minutes, try running `plural cluster mpwait %s %s` to get an idea where to debug", namespace, clusterName) + } + + return AllWaiter(kubeConf, namespace, clusterName, timeout) +} diff --git a/pkg/manifest/manifest.go b/pkg/manifest/manifest.go index 8b413e139..9e4fcc5ab 100644 --- a/pkg/manifest/manifest.go +++ b/pkg/manifest/manifest.go @@ -7,10 +7,12 @@ import ( "strings" "github.com/AlecAivazis/survey/v2" + "gopkg.in/yaml.v2" + "github.com/pluralsh/plural/pkg/api" + "github.com/pluralsh/plural/pkg/exp" "github.com/pluralsh/plural/pkg/utils" "github.com/pluralsh/plural/pkg/utils/pathing" - "gopkg.in/yaml.v2" ) const pluralDomain = "onplural.sh" @@ -73,6 +75,14 @@ func ReadProject(path string) (man *ProjectManifest, err error) { } man = versioned.Spec + + // Override Cluster API flag silently + if !exp.IsFeatureEnabled(exp.EXP_PLURAL_CAPI) { + man.ClusterAPI = false + } + + man.Provider = api.NormalizeProvider(man.Provider) + return } @@ -125,6 +135,10 @@ func (pMan *ProjectManifest) Configure() Writer { return nil } + if exp.IsFeatureEnabled(exp.EXP_PLURAL_CAPI) { + pMan.ClusterAPI = true + } + return func() error { return pMan.Write(ProjectManifestPath()) } } diff --git a/pkg/manifest/types.go b/pkg/manifest/types.go index 8bc5443bc..99b76a725 100644 --- a/pkg/manifest/types.go +++ b/pkg/manifest/types.go @@ -51,40 +51,44 @@ type NetworkConfig struct { } type ProjectManifest struct { - Cluster string - Bucket string - Project string - Provider string - Region string - Owner *Owner - Network *NetworkConfig - BucketPrefix string `yaml:"bucketPrefix"` - Context map[string]interface{} + ClusterAPI bool + Cluster string + Bucket string + Project string + Provider string + Region string + Owner *Owner + Network *NetworkConfig + AvailabilityZones []string + BucketPrefix string `yaml:"bucketPrefix"` + Context map[string]interface{} } func (this *ProjectManifest) MarshalJSON() ([]byte, error) { json := jsoniter.ConfigCompatibleWithStandardLibrary return json.Marshal(&struct { - Cluster string `json:"cluster"` - Bucket string `json:"bucket"` - Project string `json:"project"` - Provider string `json:"provider"` - Region string `json:"region"` - Owner *Owner `json:"owner"` - Network *NetworkConfig `json:"network"` - BucketPrefix string `yaml:"bucketPrefix" json:"bucketPrefix"` - Context map[string]interface{} `json:"context"` + Cluster string `json:"cluster"` + Bucket string `json:"bucket"` + Project string `json:"project"` + Provider string `json:"provider"` + Region string `json:"region"` + Owner *Owner `json:"owner"` + Network *NetworkConfig `json:"network"` + AvailabilityZones []string `json:"availabilityZones"` + BucketPrefix string `yaml:"bucketPrefix" json:"bucketPrefix"` + Context map[string]interface{} `json:"context"` }{ - Cluster: this.Cluster, - Bucket: this.Bucket, - Project: this.Project, - Provider: this.Provider, - Region: this.Region, - Owner: this.Owner, - Network: this.Network, - BucketPrefix: this.BucketPrefix, - Context: this.Context, + Cluster: this.Cluster, + Bucket: this.Bucket, + Project: this.Project, + Provider: this.Provider, + Region: this.Region, + Owner: this.Owner, + Network: this.Network, + AvailabilityZones: this.AvailabilityZones, + BucketPrefix: this.BucketPrefix, + Context: this.Context, }) } diff --git a/pkg/provider/aws.go b/pkg/provider/aws.go index 2311ee545..0ce3f861c 100644 --- a/pkg/provider/aws.go +++ b/pkg/provider/aws.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "os/exec" + "sort" "strings" "github.com/AlecAivazis/survey/v2" @@ -16,6 +17,7 @@ import ( "github.com/aws/aws-sdk-go-v2/service/sts" v1 "k8s.io/api/core/v1" + "github.com/pluralsh/plural/pkg/api" "github.com/pluralsh/plural/pkg/config" "github.com/pluralsh/plural/pkg/kubernetes" "github.com/pluralsh/plural/pkg/manifest" @@ -35,6 +37,7 @@ type AWSProvider struct { storageClient *s3.Client writer manifest.Writer goContext *context.Context + ctx map[string]interface{} } var ( @@ -106,12 +109,18 @@ func mkAWS(conf config.Config) (provider *AWSProvider, err error) { provider.project = account provider.storageClient = client + azones, err := getAvailabilityZones(ctx, provider.Region()) + if err != nil { + return + } + projectManifest := manifest.ProjectManifest{ - Cluster: provider.Cluster(), - Project: provider.Project(), - Provider: AWS, - Region: provider.Region(), - Owner: &manifest.Owner{Email: conf.Email, Endpoint: conf.Endpoint}, + Cluster: provider.Cluster(), + Project: provider.Project(), + Provider: api.ProviderAWS, + Region: provider.Region(), + AvailabilityZones: azones, + Owner: &manifest.Owner{Email: conf.Email, Endpoint: conf.Endpoint}, } provider.writer = projectManifest.Configure() @@ -125,8 +134,9 @@ func awsFromManifest(man *manifest.ProjectManifest) (*AWSProvider, error) { if err != nil { return nil, err } + providerCtx := map[string]interface{}{} - return &AWSProvider{Clus: man.Cluster, project: man.Project, bucket: man.Bucket, Reg: man.Region, storageClient: client, goContext: &ctx}, nil + return &AWSProvider{Clus: man.Cluster, project: man.Project, bucket: man.Bucket, Reg: man.Region, storageClient: client, goContext: &ctx, ctx: providerCtx}, nil } func getClient(region string, context context.Context) (*s3.Client, error) { @@ -139,6 +149,89 @@ func getClient(region string, context context.Context) (*s3.Client, error) { return s3.NewFromConfig(cfg), nil } +func getEC2Client(ctx context.Context, region string) (*ec2.Client, error) { + cfg, err := awsConfig.LoadDefaultConfig(ctx) + if err != nil { + return nil, err + } + cfg.Region = region + return ec2.NewFromConfig(cfg), nil +} + +// TODO: during Plural init we should ask the user to choose which AZs they want to use (first 3, random, manual, look at how CAPA does that). There should be a minimum limit of 3. +func getAvailabilityZones(ctx context.Context, region string) ([]string, error) { + first3 := "first three" + random := "random" + manual := "manual" + choice := "" + prompt := &survey.Select{ + Message: "Which availability zones you would like to use:", + Options: []string{first3, random, manual}, + } + if err := survey.AskOne(prompt, &choice); err != nil { + return nil, err + } + + switch choice { + case first3: + return fetchAZ(ctx, region, true) + case random: + return fetchAZ(ctx, region, false) + case manual: + text := "" + prompt := &survey.Multiline{ + Message: "Enter at least three availability zones ", + } + if err := survey.AskOne(prompt, &text); err != nil { + return nil, err + } + res := strings.Split(text, "\n") + if len(res) < 3 { + return nil, fmt.Errorf("expected at least three availability zones") + } + return res, nil + } + + return nil, nil +} + +func fetchAZ(context context.Context, region string, sorted bool) ([]string, error) { + ec2Client, err := getEC2Client(context, region) + if err != nil { + return nil, err + } + allAvailabilityZones := true + dryRun := false + regionName := "region-name" + azones, err := ec2Client.DescribeAvailabilityZones(context, &ec2.DescribeAvailabilityZonesInput{ + AllAvailabilityZones: &allAvailabilityZones, + DryRun: &dryRun, + Filters: []ec2Types.Filter{ + { + Name: ®ionName, + Values: []string{region}, + }, + }, + }) + if err != nil { + return nil, err + } + result := []string{} + for _, az := range azones.AvailabilityZones { + if az.ParentZoneId == nil { + result = append(result, *az.ZoneName) + } + } + // append when there are fewer zones than 3 + for i := 0; (3 - len(result)) > 0; i++ { + result = append(result, result[i]) + } + if sorted { + sort.Strings(result) + } + return result, nil +} + func getAwsConfig(ctx context.Context) (aws.Config, error) { cfg, err := awsConfig.LoadDefaultConfig(ctx) return cfg, plrlErrors.ErrorWrap(err, "Failed to initialize aws client: ") @@ -156,7 +249,7 @@ func (aws *AWSProvider) CreateBackend(prefix string, version string, ctx map[str if _, ok := ctx["Cluster"]; !ok { ctx["Cluster"] = fmt.Sprintf("\"%s\"", aws.Cluster()) } - scaffold, err := GetProviderScaffold("AWS", version) + scaffold, err := GetProviderScaffold(api.ToGQLClientProvider(api.ProviderAWS), version) if err != nil { return "", err } @@ -173,6 +266,10 @@ func (aws *AWSProvider) KubeConfig() error { return utils.Execute(cmd) } +func (aws *AWSProvider) KubeContext() string { + return fmt.Sprintf("arn:aws:eks:%s:%s:cluster/%s", aws.Region(), aws.project, aws.Cluster()) +} + func (p *AWSProvider) mkBucket(name string) error { client := p.storageClient _, err := client.HeadBucket(*p.goContext, &s3.HeadBucketInput{Bucket: &name}) @@ -197,7 +294,7 @@ func (p *AWSProvider) mkBucket(name string) error { } func (aws *AWSProvider) Name() string { - return AWS + return api.ProviderAWS } func (aws *AWSProvider) Cluster() string { @@ -217,7 +314,7 @@ func (aws *AWSProvider) Region() string { } func (aws *AWSProvider) Context() map[string]interface{} { - return map[string]interface{}{} + return aws.ctx } func (aws *AWSProvider) Preflights() []*Preflight { diff --git a/pkg/provider/azure.go b/pkg/provider/azure.go index c4e4a70bc..3e5284fc1 100644 --- a/pkg/provider/azure.go +++ b/pkg/provider/azure.go @@ -7,24 +7,22 @@ import ( "fmt" "net/http" "net/url" - "os" "os/exec" "regexp" "time" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "github.com/AlecAivazis/survey/v2" "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources" - "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage" + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage" "github.com/Azure/azure-storage-blob-go/azblob" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "github.com/Azure/go-autorest/autorest/azure/auth" - "github.com/Azure/go-autorest/autorest/to" + v1 "k8s.io/api/core/v1" + + "github.com/pluralsh/plural/pkg/api" "github.com/pluralsh/plural/pkg/config" "github.com/pluralsh/plural/pkg/kubernetes" "github.com/pluralsh/plural/pkg/manifest" @@ -32,7 +30,6 @@ import ( "github.com/pluralsh/plural/pkg/template" "github.com/pluralsh/plural/pkg/utils" pluralerr "github.com/pluralsh/plural/pkg/utils/errors" - v1 "k8s.io/api/core/v1" ) // ResourceGroupClient is the subset of functions we need from armresources.VirtualResourceGroupsClient; @@ -43,10 +40,10 @@ type ResourceGroupClient interface { } type AccountsClient interface { - GetProperties(ctx context.Context, resourceGroupName string, accountName string, expand storage.AccountExpand) (result storage.Account, err error) - Create(ctx context.Context, resourceGroupName string, accountName string, parameters storage.AccountCreateParameters) (result storage.AccountsCreateFuture, err error) - ListKeys(ctx context.Context, resourceGroupName string, accountName string, expand storage.ListKeyExpand) (result storage.AccountListKeysResult, err error) - List(ctx context.Context) (result storage.AccountListResultPage, err error) + GetProperties(ctx context.Context, resourceGroupName string, accountName string, options *armstorage.AccountsClientGetPropertiesOptions) (armstorage.AccountsClientGetPropertiesResponse, error) + BeginCreate(ctx context.Context, resourceGroupName string, accountName string, parameters armstorage.AccountCreateParameters, options *armstorage.AccountsClientBeginCreateOptions) (*runtime.Poller[armstorage.AccountsClientCreateResponse], error) + NewListPager(options *armstorage.AccountsClientListOptions) *runtime.Pager[armstorage.AccountsClientListResponse] + ListKeys(ctx context.Context, resourceGroupName string, accountName string, options *armstorage.AccountsClientListKeysOptions) (armstorage.AccountsClientListKeysResponse, error) } type ContainerClient interface { @@ -55,29 +52,30 @@ type ContainerClient interface { } type ClientSet struct { - Groups ResourceGroupClient - Accounts AccountsClient - Containers ContainerClient - AutorestClient autorest.Client - AccountClient storage.AccountsClient + Groups ResourceGroupClient + Accounts AccountsClient + Containers ContainerClient } func GetClientSet(subscriptionId string) (*ClientSet, error) { - resourceGroupClient, err := getResourceGroupClient(subscriptionId) + cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { return nil, err } - storageAccountsClient, err := getStorageAccountsClient(subscriptionId) + resourceGroupClient, err := armresources.NewResourceGroupsClient(subscriptionId, cred, nil) + if err != nil { + return nil, err + } + + storageAccountsClient, err := armstorage.NewAccountsClient(subscriptionId, cred, nil) if err != nil { return nil, err } return &ClientSet{ - Groups: resourceGroupClient, - Accounts: storageAccountsClient, - AutorestClient: storageAccountsClient.Client, - AccountClient: storageAccountsClient, + Groups: resourceGroupClient, + Accounts: storageAccountsClient, }, nil } @@ -127,7 +125,7 @@ var azureSurvey = []*survey.Question{ { Name: "storage", Prompt: &survey.Input{Message: "Enter the name of the storage account to use for your stage, must be globally unique or already owned by your subscription: "}, - Validate: utils.ValidateAlphaNumeric, + Validate: utils.ValidateStorageAccountName, }, { Name: "region", @@ -137,7 +135,7 @@ var azureSurvey = []*survey.Question{ { Name: "resource", Prompt: &survey.Input{Message: "Enter the name of the resource group to use as default: "}, - Validate: utils.ValidateAlphaNumExtended, + Validate: utils.ValidateResourceGroupName, }, } @@ -157,10 +155,12 @@ func mkAzure(conf config.Config) (prov *AzureProvider, err error) { if err != nil { return } + clients, err := GetClientSet(subId) if err != nil { return } + prov = &AzureProvider{ resp.Cluster, resp.Resource, @@ -178,7 +178,7 @@ func mkAzure(conf config.Config) (prov *AzureProvider, err error) { projectManifest := manifest.ProjectManifest{ Cluster: prov.Cluster(), Project: prov.Project(), - Provider: AZURE, + Provider: api.ProviderAzure, Region: prov.Region(), Context: prov.Context(), Owner: &manifest.Owner{Email: conf.Email, Endpoint: conf.Endpoint}, @@ -201,29 +201,29 @@ func AzureFromManifest(man *manifest.ProjectManifest, clientSet *ClientSet) (*Az return &AzureProvider{man.Cluster, man.Project, man.Bucket, man.Region, man.Context, nil, clients}, nil } -func (azure *AzureProvider) CreateBackend(prefix string, version string, ctx map[string]interface{}) (string, error) { - if err := azure.CreateResourceGroup(azure.Project()); err != nil { - return "", pluralerr.ErrorWrap(err, fmt.Sprintf("Failed to create terraform state resource group %s", azure.Project())) +func (az *AzureProvider) CreateBackend(prefix string, version string, ctx map[string]interface{}) (string, error) { + if err := az.CreateResourceGroup(az.Project()); err != nil { + return "", pluralerr.ErrorWrap(err, fmt.Sprintf("Failed to create terraform state resource group %s", az.Project())) } - if err := azure.CreateBucket(azure.bucket); err != nil { - return "", pluralerr.ErrorWrap(err, fmt.Sprintf("Failed to create terraform state bucket %s", azure.bucket)) + if err := az.CreateBucket(az.bucket); err != nil { + return "", pluralerr.ErrorWrap(err, fmt.Sprintf("Failed to create terraform state bucket %s", az.bucket)) } - ctx["Region"] = azure.Region() - ctx["Bucket"] = azure.Bucket() + ctx["Region"] = az.Region() + ctx["Bucket"] = az.Bucket() ctx["Prefix"] = prefix - ctx["ResourceGroup"] = azure.Project() - ctx["__CLUSTER__"] = azure.Cluster() - ctx["Context"] = azure.Context() + ctx["ResourceGroup"] = az.Project() + ctx["__CLUSTER__"] = az.Cluster() + ctx["Context"] = az.Context() if cluster, ok := ctx["cluster"]; ok { ctx["Cluster"] = cluster ctx["ClusterCreated"] = true } else { - ctx["Cluster"] = fmt.Sprintf(`"%s"`, azure.Cluster()) + ctx["Cluster"] = fmt.Sprintf(`"%s"`, az.Cluster()) } - scaffold, err := GetProviderScaffold("AZURE", version) + scaffold, err := GetProviderScaffold(api.ToGQLClientProvider(api.ProviderAzure), version) if err != nil { return "", err } @@ -236,7 +236,7 @@ func (az *AzureProvider) CreateBucket(bucket string) (err error) { return } - err = az.upsertStorageContainer(acc, bucket) + err = az.upsertStorageContainer(*acc, bucket) if err != nil { return } @@ -252,10 +252,7 @@ func (az *AzureProvider) CreateResourceGroup(resourceGroup string) error { if isNotFoundResourceGroup(err) { utils.LogInfo().Printf("The resource group %s is not found, creating ...", resourceGroup) - param := armresources.ResourceGroup{ - Location: to.StringPtr(az.region), - } - + param := armresources.ResourceGroup{Location: to.Ptr(az.region)} _, err := az.clients.Groups.CreateOrUpdate(ctx, resourceGroup, param, nil) if err != nil { return err @@ -266,18 +263,22 @@ func (az *AzureProvider) CreateResourceGroup(resourceGroup string) error { return nil } -func (azure *AzureProvider) KubeConfig() error { +func (az *AzureProvider) KubeConfig() error { if kubernetes.InKubernetes() { return nil } cmd := exec.Command( - "az", "aks", "get-credentials", "--overwrite-existing", "--name", azure.cluster, "--resource-group", azure.resourceGroup) + "az", "aks", "get-credentials", "--overwrite-existing", "--name", az.cluster, "--resource-group", az.resourceGroup) return utils.Execute(cmd) } +func (az *AzureProvider) KubeContext() string { + return az.cluster +} + func (az *AzureProvider) Name() string { - return AZURE + return api.ProviderAzure } func (az *AzureProvider) Cluster() string { @@ -308,11 +309,11 @@ func (*AzureProvider) Permissions() (permissions.Checker, error) { return permissions.NullChecker(), nil } -func (azure *AzureProvider) Flush() error { - if azure.writer == nil { +func (az *AzureProvider) Flush() error { + if az.writer == nil { return nil } - return azure.writer() + return az.writer() } func (az *AzureProvider) Decommision(node *v1.Node) error { @@ -343,101 +344,101 @@ func (az *AzureProvider) Decommision(node *v1.Node) error { // This method scale down the virtualMachineScaleSet otherwise the VM will be recreated pollerDeallocate, err := client.BeginDeallocate(ctx, resourceGroup, virtualMachineScaleSet, &armcompute.VirtualMachineScaleSetsClientBeginDeallocateOptions{ VMInstanceIDs: &armcompute.VirtualMachineScaleSetVMInstanceIDs{ - InstanceIDs: []*string{to.StringPtr(InstanceID)}, + InstanceIDs: []*string{to.Ptr(InstanceID)}, }, }) if err != nil { return err } - if _, err = pollerDeallocate.PollUntilDone(ctx, &runtime.PollUntilDoneOptions{ - Frequency: 1 * time.Second, - }); err != nil { + if _, err = pollerDeallocate.PollUntilDone(ctx, &runtime.PollUntilDoneOptions{Frequency: time.Second}); err != nil { return err } pollerDelete, err := client.BeginDeleteInstances(ctx, resourceGroup, virtualMachineScaleSet, armcompute.VirtualMachineScaleSetVMInstanceRequiredIDs{ - InstanceIDs: []*string{ - to.StringPtr(InstanceID)}, - }, &armcompute.VirtualMachineScaleSetsClientBeginDeleteInstancesOptions{ForceDeletion: to.BoolPtr(true)}) + InstanceIDs: []*string{to.Ptr(InstanceID)}}, &armcompute.VirtualMachineScaleSetsClientBeginDeleteInstancesOptions{ForceDeletion: to.Ptr(true)}) if err != nil { return err } - if _, err := pollerDelete.PollUntilDone(ctx, &runtime.PollUntilDoneOptions{ - Frequency: 1 * time.Second, - }); err != nil { + if _, err := pollerDelete.PollUntilDone(ctx, &runtime.PollUntilDoneOptions{Frequency: time.Second}); err != nil { return err } return nil } -func (az *AzureProvider) getStorageAccount(account string) (storage.Account, error) { +func (az *AzureProvider) getStorageAccount(account string) (*armstorage.Account, error) { ctx := context.Background() - saList, err := az.clients.Accounts.List(ctx) - if err != nil { - return storage.Account{}, err - } - // check if storage account belongs to the same resource group - for _, sa := range saList.Values() { - if *sa.Name == account { - err, resourceGroup := getPathElement(*sa.ID, "resourceGroups") - if err != nil { - return storage.Account{}, err - } - if resourceGroup != az.resourceGroup { - return storage.Account{}, fmt.Errorf("The '%s' Storage Account already exists and belongs to the '%s' Resource Group.", account, resourceGroup) + pager := az.clients.Accounts.NewListPager(nil) + + for pager.More() { + nextResult, err := pager.NextPage(ctx) + if err != nil { + return nil, fmt.Errorf("failed to advance page: %w", err) + } + + for _, sa := range nextResult.Value { + if *sa.Name == account { + err, resourceGroup := getPathElement(*sa.ID, "resourceGroups") + if err != nil { + return nil, fmt.Errorf("failed to read Storage Account's Resource Group: %w", err) + } + + if resourceGroup != az.resourceGroup { + return nil, fmt.Errorf("the '%s' Storage Account already exists and belongs to the '%s' Resource Group", account, resourceGroup) + } + break } - break } } - return az.clients.Accounts.GetProperties(ctx, az.resourceGroup, account, storage.AccountExpandBlobRestoreStatus) + res, err := az.clients.Accounts.GetProperties(ctx, az.resourceGroup, account, nil) + if err != nil { + return nil, err + } + + return &res.Account, nil } -func (az *AzureProvider) upsertStorageAccount(account string) (storage.Account, error) { +func (az *AzureProvider) upsertStorageAccount(account string) (*armstorage.Account, error) { acc, err := az.getStorageAccount(account) if err != nil && !inNotFoundStorageAccount(err) { - return storage.Account{}, err + return nil, err } if inNotFoundStorageAccount(err) { utils.LogInfo().Printf("The storage account %s is not found, creating ...", account) ctx := context.Background() - future, err := az.clients.Accounts.Create( - ctx, - az.resourceGroup, - account, - storage.AccountCreateParameters{ - Sku: &storage.Sku{Name: storage.StandardLRS}, - Kind: storage.StorageV2, - Location: to.StringPtr(az.region), - AccountPropertiesCreateParameters: &storage.AccountPropertiesCreateParameters{}, - }) - + poller, err := az.clients.Accounts.BeginCreate(ctx, az.resourceGroup, account, + armstorage.AccountCreateParameters{ + SKU: &armstorage.SKU{Name: to.Ptr(armstorage.SKUNameStandardLRS)}, + Kind: to.Ptr(armstorage.KindStorageV2), + Location: to.Ptr(az.region), + Properties: &armstorage.AccountPropertiesCreateParameters{}, + }, nil) if err != nil { - return storage.Account{}, err + return nil, err } - err = future.WaitForCompletionRef(ctx, az.clients.AutorestClient) + res, err := poller.PollUntilDone(ctx, &runtime.PollUntilDoneOptions{Frequency: time.Second}) if err != nil { - return storage.Account{}, err + return nil, err } - return future.Result(az.clients.AccountClient) + return &res.Account, nil } return acc, nil } -func (az *AzureProvider) upsertStorageContainer(acc storage.Account, name string) error { +func (az *AzureProvider) upsertStorageContainer(acc armstorage.Account, name string) error { ctx := context.Background() accountName := *acc.Name - resp, err := az.clients.Accounts.ListKeys(ctx, az.resourceGroup, accountName, storage.Kerb) + resp, err := az.clients.Accounts.ListKeys(ctx, az.resourceGroup, accountName, to.Ptr(armstorage.AccountsClientListKeysOptions{Expand: to.Ptr("kerb")})) if err != nil { return err } - key := *(((*resp.Keys)[0]).Value) + key := *resp.Keys[0].Value if az.clients.Containers == nil { c, _ := azblob.NewSharedKeyCredential(accountName, key) @@ -486,7 +487,7 @@ func isNotFoundResourceGroup(err error) bool { } func inNotFoundStorageAccount(err error) bool { - var aerr *azure.RequestError + var aerr *azcore.ResponseError if err != nil && errors.As(err, &aerr) { return aerr.StatusCode == http.StatusNotFound } @@ -494,37 +495,6 @@ func inNotFoundStorageAccount(err error) bool { return false } -func authorizer() (autorest.Authorizer, error) { - if os.Getenv("ARM_USE_MSI") != "" { - return auth.NewAuthorizerFromEnvironment() - } - - return auth.NewAuthorizerFromCLI() -} - -func getStorageAccountsClient(subscriptionId string) (storage.AccountsClient, error) { - storageAccountsClient := storage.NewAccountsClient(subscriptionId) - authorizer, err := authorizer() - if err != nil { - return storage.AccountsClient{}, err - } - storageAccountsClient.Authorizer = authorizer - return storageAccountsClient, nil -} - -func getResourceGroupClient(subscriptionId string) (*armresources.ResourceGroupsClient, error) { - cred, err := azidentity.NewDefaultAzureCredential(nil) - if err != nil { - return nil, pluralerr.ErrorWrap(err, "getting resource group client failed with") - } - groupClient, err := armresources.NewResourceGroupsClient(subscriptionId, cred, nil) - if err != nil { - return nil, err - } - - return groupClient, nil -} - func getPathElement(path, indexName string) (error, string) { pattern := fmt.Sprintf(`.*\/%s\/(?P([\w'-]+))`, indexName) captureGroupRegex := regexp.MustCompile(pattern) diff --git a/pkg/provider/azure_test.go b/pkg/provider/azure_test.go index 951ac8055..f55850156 100644 --- a/pkg/provider/azure_test.go +++ b/pkg/provider/azure_test.go @@ -4,7 +4,7 @@ import ( "testing" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources" - "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage" + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage" "github.com/pluralsh/plural/pkg/manifest" "github.com/pluralsh/plural/pkg/provider" "github.com/stretchr/testify/assert" @@ -69,13 +69,13 @@ func TestCreateBucket(t *testing.T) { expectedAccountCreateCalledCount int expectedContainerCreateCalledCount int accountName string - existingAccount *storage.Account + existingAccount *armstorage.Account manifest *manifest.ProjectManifest }{ { name: `create account when doesn't exist`, accountName: accountName, - existingAccount: &storage.Account{ + existingAccount: &armstorage.Account{ Name: &secondAccountName, }, manifest: &manifest.ProjectManifest{ @@ -89,7 +89,7 @@ func TestCreateBucket(t *testing.T) { { name: `storage account exists`, accountName: accountName, - existingAccount: &storage.Account{ + existingAccount: &armstorage.Account{ Name: &accountName, }, manifest: &manifest.ProjectManifest{ diff --git a/pkg/provider/azure_utils_test.go b/pkg/provider/azure_utils_test.go index 60f6854ce..f856a5ec0 100644 --- a/pkg/provider/azure_utils_test.go +++ b/pkg/provider/azure_utils_test.go @@ -1,23 +1,24 @@ package provider_test import ( + "bytes" "context" + "encoding/json" "fmt" + "io" "net/http" - "time" "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources" - "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage" + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage" "github.com/Azure/azure-storage-blob-go/azblob" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" "github.com/pluralsh/plural/pkg/provider" ) type fakeAccountsClient struct { - storage.AccountsClient - Account *storage.Account + armstorage.AccountsClient + Account *armstorage.Account CreateCalledCount int } @@ -39,7 +40,7 @@ func getFakeClientSetWithGroupsClient(existingGroup *armresources.ResourceGroup) } } -func getFakeClientSetWithAccountsClient(existingAccount *storage.Account) *provider.ClientSet { +func getFakeClientSetWithAccountsClient(existingAccount *armstorage.Account) *provider.ClientSet { return &provider.ClientSet{ Accounts: &fakeAccountsClient{ Account: existingAccount, @@ -58,43 +59,60 @@ func (f *fakeContainersClient) Create(_ context.Context, _ azblob.Metadata, _ az return nil, nil } -func (a *fakeAccountsClient) GetProperties(_ context.Context, _ string, name string, _ storage.AccountExpand) (result storage.Account, err error) { - if a.Account != nil && a.Account.Name != nil && *a.Account.Name == name { - return *a.Account, nil - } +func (a *fakeAccountsClient) BeginCreate(_ context.Context, _ string, _ string, _ armstorage.AccountCreateParameters, _ *armstorage.AccountsClientBeginCreateOptions) (*runtime.Poller[armstorage.AccountsClientCreateResponse], error) { + a.CreateCalledCount++ - return storage.Account{}, &azure.RequestError{ - DetailedError: autorest.DetailedError{StatusCode: http.StatusNotFound}, + js, err := json.Marshal(a.Account) + if err != nil { + return nil, err } + + return runtime.NewPoller( + &http.Response{ + StatusCode: http.StatusOK, + Body: io.NopCloser(bytes.NewReader(js)), + Request: &http.Request{ + Method: http.MethodGet, + }, + }, + runtime.Pipeline{}, &runtime.NewPollerOptions[armstorage.AccountsClientCreateResponse]{ + Response: &armstorage.AccountsClientCreateResponse{Account: *a.Account}, + }) } -func (a *fakeAccountsClient) List(_ context.Context) (result storage.AccountListResultPage, err error) { - return storage.NewAccountListResultPage(storage.AccountListResult{ - Value: &[]storage.Account{}, - }, nil), nil +func (a *fakeAccountsClient) GetProperties(_ context.Context, _, name string, _ *armstorage.AccountsClientGetPropertiesOptions) (armstorage.AccountsClientGetPropertiesResponse, error) { + if a.Account != nil && a.Account.Name != nil && *a.Account.Name == name { + return armstorage.AccountsClientGetPropertiesResponse{Account: *a.Account}, nil + } + + return armstorage.AccountsClientGetPropertiesResponse{}, &azcore.ResponseError{StatusCode: http.StatusNotFound} } -func (a *fakeAccountsClient) Create(_ context.Context, _ string, _ string, _ storage.AccountCreateParameters) (result storage.AccountsCreateFuture, err error) { - a.CreateCalledCount++ - return storage.AccountsCreateFuture{ - FutureAPI: &fakeFutureAPI{}, - Result: func(storage.AccountsClient) (storage.Account, error) { - return *a.Account, nil +func (a *fakeAccountsClient) NewListPager(_ *armstorage.AccountsClientListOptions) *runtime.Pager[armstorage.AccountsClientListResponse] { + return runtime.NewPager(runtime.PagingHandler[armstorage.AccountsClientListResponse]{ + More: func(_ armstorage.AccountsClientListResponse) bool { + return false }, - }, nil + Fetcher: func(ctx context.Context, a *armstorage.AccountsClientListResponse) (armstorage.AccountsClientListResponse, error) { + return armstorage.AccountsClientListResponse{ + AccountListResult: armstorage.AccountListResult{ + NextLink: nil, + Value: nil, + }, + }, nil + }, + }) } -func (a *fakeAccountsClient) ListKeys(_ context.Context, _ string, _ string, _ storage.ListKeyExpand) (result storage.AccountListKeysResult, err error) { +func (a *fakeAccountsClient) ListKeys(_ context.Context, _ string, _ string, _ *armstorage.AccountsClientListKeysOptions) (armstorage.AccountsClientListKeysResponse, error) { keyName := "name" keyValue := "value" - keys := []storage.AccountKey{{ - KeyName: &keyName, - Value: &keyValue, - Permissions: "", + keys := []*armstorage.AccountKey{{ + KeyName: &keyName, + Value: &keyValue, }} - return storage.AccountListKeysResult{ - Response: autorest.Response{}, - Keys: &keys, + return armstorage.AccountsClientListKeysResponse{ + AccountListKeysResult: armstorage.AccountListKeysResult{Keys: keys}, }, nil } @@ -108,7 +126,6 @@ func (c *fakeGroupsClient) CreateOrUpdate(_ context.Context, _ string, parameter } func (c *fakeGroupsClient) Get(_ context.Context, resourceGroupName string, _ *armresources.ResourceGroupsClientGetOptions) (armresources.ResourceGroupsClientGetResponse, error) { - if c.Group != nil && c.Group.Name != nil && resourceGroupName == *c.Group.Name { return armresources.ResourceGroupsClientGetResponse{ ResourceGroup: *c.Group, @@ -118,48 +135,4 @@ func (c *fakeGroupsClient) Get(_ context.Context, resourceGroupName string, _ *a return armresources.ResourceGroupsClientGetResponse{}, &azcore.ResponseError{ StatusCode: http.StatusNotFound, } - -} - -type fakeFutureAPI struct { -} - -func (f *fakeFutureAPI) Response() *http.Response { - return nil -} - -func (f *fakeFutureAPI) Status() string { - return "" -} - -func (f *fakeFutureAPI) PollingMethod() azure.PollingMethodType { - return "" -} - -func (f *fakeFutureAPI) DoneWithContext(_ context.Context, _ autorest.Sender) (bool, error) { - return false, nil -} - -func (f *fakeFutureAPI) GetPollingDelay() (time.Duration, bool) { - return time.Nanosecond, false -} - -func (f *fakeFutureAPI) MarshalJSON() ([]byte, error) { - return nil, nil -} - -func (f *fakeFutureAPI) UnmarshalJSON(_ []byte) error { - return nil -} - -func (f *fakeFutureAPI) PollingURL() string { - return "" -} - -func (f *fakeFutureAPI) GetResult(_ autorest.Sender) (*http.Response, error) { - return nil, nil -} - -func (f *fakeFutureAPI) WaitForCompletionRef(context.Context, autorest.Client) error { - return nil } diff --git a/pkg/provider/constants.go b/pkg/provider/constants.go deleted file mode 100644 index a2f5bfbba..000000000 --- a/pkg/provider/constants.go +++ /dev/null @@ -1,10 +0,0 @@ -package provider - -const ( - GCP = "google" - AWS = "aws" - AZURE = "azure" - EQUINIX = "equinix" - KIND = "kind" - TEST = "test" -) diff --git a/pkg/provider/equinix.go b/pkg/provider/equinix.go index 7dbded4f1..13620c062 100644 --- a/pkg/provider/equinix.go +++ b/pkg/provider/equinix.go @@ -14,13 +14,21 @@ import ( "strings" "time" + "github.com/pluralsh/plural/pkg/api" "github.com/pluralsh/plural/pkg/kubernetes" "github.com/AlecAivazis/survey/v2" - retryablehttp "github.com/hashicorp/go-retryablehttp" + "github.com/hashicorp/go-retryablehttp" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging" "github.com/imdario/mergo" metal "github.com/packethost/packngo" + v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/tools/clientcmd" + clientcmdapi "k8s.io/client-go/tools/clientcmd/api" + clientcmdlatest "k8s.io/client-go/tools/clientcmd/api/latest" + "sigs.k8s.io/yaml" + "github.com/pluralsh/plural/pkg/config" "github.com/pluralsh/plural/pkg/manifest" "github.com/pluralsh/plural/pkg/provider/permissions" @@ -29,12 +37,6 @@ import ( pluralErrors "github.com/pluralsh/plural/pkg/utils/errors" "github.com/pluralsh/plural/pkg/utils/git" "github.com/pluralsh/plural/pkg/utils/pathing" - v1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/client-go/tools/clientcmd" - clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - clientcmdlatest "k8s.io/client-go/tools/clientcmd/api/latest" - "sigs.k8s.io/yaml" ) type EQUINIXProvider struct { @@ -100,7 +102,7 @@ func mkEquinix(conf config.Config) (provider *EQUINIXProvider, err error) { projectManifest := manifest.ProjectManifest{ Cluster: provider.Cluster(), Project: provider.Project(), - Provider: EQUINIX, + Provider: api.ProviderEquinix, Region: provider.Region(), Context: provider.Context(), Owner: &manifest.Owner{Email: conf.Email, Endpoint: conf.Endpoint}, @@ -135,7 +137,7 @@ func (equinix *EQUINIXProvider) CreateBackend(prefix string, version string, ctx if err := utils.WriteFile(pathing.SanitizeFilepath(filepath.Join(equinix.Bucket(), ".gitattributes")), []byte("/** filter=plural-crypt diff=plural-crypt\n.gitattributes !filter !diff")); err != nil { return "", err } - scaffold, err := GetProviderScaffold("EQUINIX", version) + scaffold, err := GetProviderScaffold(api.ToGQLClientProvider(api.ProviderEquinix), version) if err != nil { return "", err } @@ -227,8 +229,12 @@ func (equinix *EQUINIXProvider) KubeConfig() error { return os.WriteFile(pathing.SanitizeFilepath(filepath.Join(usr.HomeDir, ".kube/config")), output, 0644) } +func (equinix *EQUINIXProvider) KubeContext() string { + return equinix.Cluster() // TODO: this might not be correct so needs to be tested +} + func (equinix *EQUINIXProvider) Name() string { - return EQUINIX + return api.ProviderEquinix } func (equinix *EQUINIXProvider) Cluster() string { diff --git a/pkg/provider/gcp.go b/pkg/provider/gcp.go index 0c78ccad8..d99f11960 100644 --- a/pkg/provider/gcp.go +++ b/pkg/provider/gcp.go @@ -15,14 +15,6 @@ import ( "cloud.google.com/go/serviceusage/apiv1/serviceusagepb" "cloud.google.com/go/storage" "github.com/AlecAivazis/survey/v2" - "github.com/pluralsh/plural/pkg/config" - "github.com/pluralsh/plural/pkg/kubernetes" - "github.com/pluralsh/plural/pkg/manifest" - permissions "github.com/pluralsh/plural/pkg/provider/permissions" - provUtils "github.com/pluralsh/plural/pkg/provider/utils" - "github.com/pluralsh/plural/pkg/template" - "github.com/pluralsh/plural/pkg/utils" - utilerr "github.com/pluralsh/plural/pkg/utils/errors" "github.com/pluralsh/polly/algorithms" "golang.org/x/oauth2/google" "google.golang.org/api/cloudresourcemanager/v1" @@ -30,6 +22,16 @@ import ( "google.golang.org/api/iterator" "google.golang.org/api/option" v1 "k8s.io/api/core/v1" + + "github.com/pluralsh/plural/pkg/api" + "github.com/pluralsh/plural/pkg/config" + "github.com/pluralsh/plural/pkg/kubernetes" + "github.com/pluralsh/plural/pkg/manifest" + "github.com/pluralsh/plural/pkg/provider/permissions" + provUtils "github.com/pluralsh/plural/pkg/provider/utils" + "github.com/pluralsh/plural/pkg/template" + "github.com/pluralsh/plural/pkg/utils" + utilerr "github.com/pluralsh/plural/pkg/utils/errors" ) type GCPProvider struct { @@ -152,7 +154,7 @@ func mkGCP(conf config.Config) (provider *GCPProvider, err error) { projectManifest := manifest.ProjectManifest{ Cluster: provider.Cluster(), Project: provider.Project(), - Provider: GCP, + Provider: api.ProviderGCP, Region: provider.Region(), Context: provider.Context(), Owner: &manifest.Owner{Email: conf.Email, Endpoint: conf.Endpoint}, @@ -235,6 +237,10 @@ func (gcp *GCPProvider) KubeConfig() error { return utils.Execute(cmd) } +func (gcp *GCPProvider) KubeContext() string { + return fmt.Sprintf("gke_%s_%s_%s", gcp.Proj, gcp.Reg, gcp.Clust) +} + func (gcp *GCPProvider) Flush() error { if gcp.writer == nil { return nil @@ -263,7 +269,7 @@ func (gcp *GCPProvider) CreateBackend(prefix string, version string, ctx map[str } else { ctx["Cluster"] = fmt.Sprintf(`"%s"`, gcp.Cluster()) } - scaffold, err := GetProviderScaffold("GCP", version) + scaffold, err := GetProviderScaffold(api.ToGQLClientProvider(api.ProviderGCP), version) if err != nil { return "", err } @@ -289,7 +295,7 @@ func (gcp *GCPProvider) clusterLocation() (string, string) { } func (gcp *GCPProvider) Name() string { - return GCP + return api.ProviderGCP } func (gcp *GCPProvider) Cluster() string { @@ -340,10 +346,17 @@ func (gcp *GCPProvider) Decommision(node *v1.Node) error { return utilerr.ErrorWrap(err, "failed to delete instance") } +type PreflightCheck string + +const ( + PreflightCheckEnabledServices = PreflightCheck("[User] Enabled Services") + PreflightCheckServiceAccountPermissions = PreflightCheck("[User] Test Permissions") +) + func (gcp *GCPProvider) Preflights() []*Preflight { return []*Preflight{ - {Name: "Enabled Services", Callback: gcp.validateEnabled}, - {Name: "Test IAM Permissions", Callback: gcp.validatePermissions}, + {Name: string(PreflightCheckEnabledServices), Callback: gcp.validateEnabled}, + {Name: string(PreflightCheckServiceAccountPermissions), Callback: gcp.validatePermissions}, } } @@ -419,7 +432,7 @@ func (gcp *GCPProvider) Permissions() (permissions.Checker, error) { } func (gcp *GCPProvider) validatePermissions() error { - utils.LogInfo().Println("Validate GCP permissions") + utils.LogInfo().Println("Validate GCP roles/permissions") ctx := context.Background() proj, err := gcp.getProject() if err != nil { @@ -436,12 +449,13 @@ func (gcp *GCPProvider) validatePermissions() error { return nil } + utils.Error("\u2700\n") for _, perm := range missing { - utils.LogError().Printf("Required GCP permission %s \n", perm) + utils.LogError().Printf("Recommended GCP permissions %s \n", perm) provUtils.FailedPermission(perm) } - return fmt.Errorf("Your gcp identity is missing permissions for project %s; %s\nIf you aren't comfortable granting these permissions, consider creating a separate gcp project for plural resources and adding storage.admin and owner roles to your identity", proj.Name, strings.Join(missing, ", ")) + return fmt.Errorf("Your GCP user is missing permissions for project %s: %s\nIf you aren't comfortable granting these permissions, consider creating a separate GCP project for plural resources and adding required roles to your identity", proj.Name, strings.Join(missing, ", ")) } func (gcp *GCPProvider) getProject() (*resourcemanagerpb.Project, error) { diff --git a/pkg/provider/kind.go b/pkg/provider/kind.go index ae8f9ba98..a59ffa382 100644 --- a/pkg/provider/kind.go +++ b/pkg/provider/kind.go @@ -5,16 +5,18 @@ import ( "os/exec" "path/filepath" + "github.com/pluralsh/plural/pkg/api" "github.com/pluralsh/plural/pkg/kubernetes" "github.com/AlecAivazis/survey/v2" + v1 "k8s.io/api/core/v1" + "github.com/pluralsh/plural/pkg/config" "github.com/pluralsh/plural/pkg/manifest" "github.com/pluralsh/plural/pkg/provider/permissions" "github.com/pluralsh/plural/pkg/template" "github.com/pluralsh/plural/pkg/utils" "github.com/pluralsh/plural/pkg/utils/pathing" - v1 "k8s.io/api/core/v1" ) type KINDProvider struct { @@ -54,7 +56,7 @@ func mkKind(conf config.Config) (provider *KINDProvider, err error) { projectManifest := manifest.ProjectManifest{ Cluster: provider.Cluster(), Project: provider.Project(), - Provider: KIND, + Provider: api.ProviderKind, Region: provider.Region(), Context: provider.Context(), Owner: &manifest.Owner{Email: conf.Email, Endpoint: conf.Endpoint}, @@ -89,7 +91,7 @@ func (kind *KINDProvider) CreateBackend(prefix string, version string, ctx map[s if err := utils.WriteFile(pathing.SanitizeFilepath(filepath.Join(kind.Bucket(), ".gitattributes")), []byte("/** filter=plural-crypt diff=plural-crypt\n.gitattributes !filter !diff")); err != nil { return "", err } - scaffold, err := GetProviderScaffold("KIND", version) + scaffold, err := GetProviderScaffold(api.ToGQLClientProvider(api.ProviderKind), version) if err != nil { return "", err } @@ -105,8 +107,12 @@ func (kind *KINDProvider) KubeConfig() error { return utils.Execute(cmd) } +func (kind *KINDProvider) KubeContext() string { + return fmt.Sprintf("kind-%s", kind.Cluster()) +} + func (kind *KINDProvider) Name() string { - return KIND + return api.ProviderKind } func (kind *KINDProvider) Cluster() string { diff --git a/pkg/provider/permissions/gcp.go b/pkg/provider/permissions/gcp.go index e3a490658..7c69e069a 100644 --- a/pkg/provider/permissions/gcp.go +++ b/pkg/provider/permissions/gcp.go @@ -14,14 +14,44 @@ type GcpChecker struct { ctx context.Context } -var gcpExpected = []string{ - "storage.buckets.create", - "storage.buckets.setIamPolicy", - "iam.serviceAccounts.create", - "iam.serviceAccounts.setIamPolicy", - "container.clusters.create", - "compute.networks.create", - "compute.subnetworks.create", +func (g *GcpChecker) requiredPermissions() []string { + return []string{ + // Compute service permissions + "compute.globalOperations.get", + "compute.instanceGroupManagers.get", + "compute.networks.create", + "compute.networks.delete", + "compute.networks.get", + "compute.networks.updatePolicy", + "compute.regionOperations.get", + "compute.regions.get", + "compute.routers.create", + "compute.routers.delete", + "compute.routers.get", + "compute.subnetworks.create", + "compute.subnetworks.delete", + "compute.subnetworks.get", + "compute.subnetworks.list", + "compute.zones.list", + // Container service permissions + "container.clusters.create", + "container.clusters.delete", + "container.clusters.get", + "container.clusters.getCredentials", + "container.clusters.update", + "container.nodes.get", + "container.nodes.list", + "container.nodes.update", + "container.pods.get", + // IAM service permissions + "iam.serviceAccounts.actAs", + "iam.serviceAccounts.getAccessToken", + "iam.serviceAccounts.create", + "iam.serviceAccounts.setIamPolicy", + // Storage service permissions + "storage.buckets.create", + "storage.buckets.setIamPolicy", + } } func NewGcpChecker(ctx context.Context, project string) (*GcpChecker, error) { @@ -34,15 +64,17 @@ func (g *GcpChecker) MissingPermissions() (result []string, err error) { return } + defer svc.Close() + res, err := svc.TestIamPermissions(g.ctx, &iampb.TestIamPermissionsRequest{ Resource: fmt.Sprintf("projects/%s", g.project), - Permissions: gcpExpected, + Permissions: g.requiredPermissions(), }) if err != nil { return } has := containers.ToSet(res.Permissions) - result = containers.ToSet(gcpExpected).Difference(has).List() + result = containers.ToSet(g.requiredPermissions()).Difference(has).List() return } diff --git a/pkg/provider/provider.go b/pkg/provider/provider.go index e6a74da0f..255565448 100644 --- a/pkg/provider/provider.go +++ b/pkg/provider/provider.go @@ -5,14 +5,15 @@ import ( "strings" "github.com/AlecAivazis/survey/v2" + "github.com/pluralsh/polly/algorithms" + "github.com/pluralsh/polly/containers" + v1 "k8s.io/api/core/v1" + "github.com/pluralsh/plural/pkg/api" "github.com/pluralsh/plural/pkg/config" "github.com/pluralsh/plural/pkg/manifest" "github.com/pluralsh/plural/pkg/provider/permissions" "github.com/pluralsh/plural/pkg/utils" - "github.com/pluralsh/polly/algorithms" - "github.com/pluralsh/polly/containers" - v1 "k8s.io/api/core/v1" ) type Provider interface { @@ -22,6 +23,7 @@ type Provider interface { Region() string Bucket() string KubeConfig() error + KubeContext() string CreateBackend(prefix string, version string, ctx map[string]interface{}) (string, error) Context() map[string]interface{} Decommision(node *v1.Node) error @@ -95,17 +97,17 @@ func GetProvider() (Provider, error) { func FromManifest(man *manifest.ProjectManifest) (Provider, error) { switch man.Provider { - case GCP: + case api.ProviderGCP: return gcpFromManifest(man) - case AWS: + case api.ProviderAWS: return awsFromManifest(man) - case AZURE: + case api.ProviderAzure: return AzureFromManifest(man, nil) - case EQUINIX: + case api.ProviderEquinix: return equinixFromManifest(man) - case KIND: + case api.ProviderKind: return kindFromManifest(man) - case TEST: + case api.TEST: return testFromManifest(man) default: return nil, fmt.Errorf("invalid provider name: %s", man.Provider) @@ -115,15 +117,15 @@ func FromManifest(man *manifest.ProjectManifest) (Provider, error) { func New(provider string) (Provider, error) { conf := config.Read() switch provider { - case GCP: + case api.ProviderGCP: return mkGCP(conf) - case AWS: + case api.ProviderAWS: return mkAWS(conf) - case AZURE: + case api.ProviderAzure: return mkAzure(conf) - case EQUINIX: + case api.ProviderEquinix: return mkEquinix(conf) - case KIND: + case api.ProviderKind: return mkKind(conf) default: return nil, fmt.Errorf("invalid provider name: %s", provider) @@ -139,12 +141,7 @@ func getAvailableProviders() error { } available = containers.ToSet(available).Difference(filterProviders).List() - providers.AvailableProviders = algorithms.Map(available, func(p string) string { - if p == "GCP" { - return "google" - } - return strings.ToLower(p) - }) + providers.AvailableProviders = algorithms.Map(available, strings.ToLower) } return nil } diff --git a/pkg/provider/test.go b/pkg/provider/test.go index 9b0a79a3f..83a7629c9 100644 --- a/pkg/provider/test.go +++ b/pkg/provider/test.go @@ -1,9 +1,11 @@ package provider import ( + corev1 "k8s.io/api/core/v1" + + "github.com/pluralsh/plural/pkg/api" "github.com/pluralsh/plural/pkg/manifest" "github.com/pluralsh/plural/pkg/provider/permissions" - corev1 "k8s.io/api/core/v1" ) type TestProvider struct { @@ -15,7 +17,7 @@ type TestProvider struct { } func (t TestProvider) Name() string { - return TEST + return api.TEST } func (t TestProvider) Cluster() string { @@ -38,6 +40,10 @@ func (t TestProvider) KubeConfig() error { return nil } +func (t TestProvider) KubeContext() string { + return t.Clust +} + func (t TestProvider) CreateBackend(prefix string, version string, ctx map[string]interface{}) (string, error) { return "test", nil } diff --git a/pkg/scaffold/helm.go b/pkg/scaffold/helm.go index ed6335525..0f9eb3733 100644 --- a/pkg/scaffold/helm.go +++ b/pkg/scaffold/helm.go @@ -177,10 +177,15 @@ func (s *Scaffold) buildChartValues(w *wkspace.Workspace) error { "Config": conf, "Provider": w.Provider.Name(), "Context": w.Provider.Context(), + "ClusterAPI": proj.ClusterAPI, "Network": proj.Network, "Applications": apps, } + if proj.AvailabilityZones != nil { + vals["AvailabilityZones"] = proj.AvailabilityZones + } + if w.Context.SMTP != nil { vals["SMTP"] = w.Context.SMTP.Configuration() } @@ -206,7 +211,6 @@ func (s *Scaffold) buildChartValues(w *wkspace.Workspace) error { vals[k] = v } } - defaultValues, err := scftmpl.BuildValuesFromTemplate(vals, w) if err != nil { return err @@ -217,26 +221,28 @@ func (s *Scaffold) buildChartValues(w *wkspace.Workspace) error { return err } - mapValues, err := getValues(valuesFile) - if err != nil { - return err - } - patchValues, err := utils.PatchInterfaceMap(defaultValues, mapValues) - if err != nil { - return err - } - - values, err := yaml.Marshal(patchValues) - if err != nil { - return err - } - if err := utils.WriteFile(valuesFile, values); err != nil { - return err - } + // TODO: Remove this after testing. It is deprecated as values.yaml migration should not longer be required. + //mapValues, err := getValues(valuesFile) + //if err != nil { + // return err + //} + //patchValues, err := utils.PatchInterfaceMap(defaultValues, mapValues) + //if err != nil { + // return err + //} + // + //values, err := yaml.Marshal(patchValues) + //if err != nil { + // return err + //} + //if err := utils.WriteFile(valuesFile, values); err != nil { + // return err + //} return utils.WriteFile(defaultValuesFile, io) } +//nolint:golint,unused func getValues(path string) (map[string]map[string]interface{}, error) { values := map[string]map[string]interface{}{} valuesFromFile, err := os.ReadFile(path) diff --git a/pkg/scaffold/template/gotpl.go b/pkg/scaffold/template/gotpl.go index 0c01dfd8b..a7db762d7 100644 --- a/pkg/scaffold/template/gotpl.go +++ b/pkg/scaffold/template/gotpl.go @@ -4,9 +4,10 @@ import ( "bytes" "github.com/imdario/mergo" + "gopkg.in/yaml.v2" + "github.com/pluralsh/plural/pkg/template" "github.com/pluralsh/plural/pkg/utils" - "gopkg.in/yaml.v2" ) func FromGoTemplate(vals map[string]interface{}, globals map[string]interface{}, output map[string]map[string]interface{}, chartName, tplate string) error { @@ -22,11 +23,11 @@ func FromGoTemplate(vals map[string]interface{}, globals map[string]interface{}, return err } - var subVals map[string]interface{} + var subVals = map[string]interface{}{} + subVals["enabled"] = true if err := yaml.Unmarshal(buf.Bytes(), &subVals); err != nil { return err } - subVals["enabled"] = true // need to handle globals in a dedicated way if glob, ok := subVals["global"]; ok { diff --git a/pkg/scaffold/template/lua.go b/pkg/scaffold/template/lua.go index 92e495f53..1ee0e08d8 100644 --- a/pkg/scaffold/template/lua.go +++ b/pkg/scaffold/template/lua.go @@ -5,10 +5,11 @@ import ( "github.com/Masterminds/sprig/v3" "github.com/imdario/mergo" - "github.com/pluralsh/plural/pkg/template" - "github.com/pluralsh/plural/pkg/utils" lua "github.com/yuin/gopher-lua" luar "layeh.com/gopher-luar" + + "github.com/pluralsh/plural/pkg/template" + "github.com/pluralsh/plural/pkg/utils" ) func ExecuteLua(vals map[string]interface{}, tplate string) (map[string]interface{}, error) { @@ -41,11 +42,12 @@ func ExecuteLua(vals map[string]interface{}, tplate string) (map[string]interfac } func FromLuaTemplate(vals map[string]interface{}, globals map[string]interface{}, output map[string]map[string]interface{}, chartName, tplate string) error { + var subVals = map[string]interface{}{} + subVals["enabled"] = true subVals, err := ExecuteLua(vals, tplate) if err != nil { return err } - subVals["enabled"] = true // need to handle globals in a dedicated way if glob, ok := subVals["global"]; ok { diff --git a/pkg/scaffold/terraform.go b/pkg/scaffold/terraform.go index a3a77f1e2..6eb619f05 100644 --- a/pkg/scaffold/terraform.go +++ b/pkg/scaffold/terraform.go @@ -62,6 +62,10 @@ func (scaffold *Scaffold) handleTerraform(wk *wkspace.Workspace) error { var providerVersions semver.ByVersion + if len(wk.Terraform) == 0 { + return nil + } + for i := range wk.Terraform { providerVersions = append(providerVersions, wk.Terraform[i].Terraform.Dependencies.ProviderVsn) } @@ -126,6 +130,7 @@ func (scaffold *Scaffold) handleTerraform(wk *wkspace.Workspace) error { "Region": wk.Provider.Region(), "Context": wk.Provider.Context(), "Config": config.Read(), + "ClusterAPI": wk.Manifest.ClusterAPI, "Applications": apps, } if err := tmpl.Execute(&buf, values); err != nil { diff --git a/pkg/server/setup.go b/pkg/server/setup.go index 23c2c1f7a..0f7999434 100644 --- a/pkg/server/setup.go +++ b/pkg/server/setup.go @@ -8,6 +8,7 @@ import ( "github.com/gin-gonic/gin" "github.com/mitchellh/go-homedir" + "github.com/pluralsh/plural/pkg/api" "github.com/pluralsh/plural/pkg/config" "github.com/pluralsh/plural/pkg/crypto" "github.com/pluralsh/plural/pkg/manifest" @@ -172,9 +173,9 @@ func setupCli(c *gin.Context) error { func runPreflights(prov provider.Provider) error { // run only relevant preflights preflights := []*provider.Preflight{} - if prov.Name() == provider.GCP { + if prov.Name() == api.ProviderGCP { preflights = algorithms.Filter(prov.Preflights(), func(pre *provider.Preflight) bool { - return pre.Name == "Enabled Services" + return pre.Name == string(provider.PreflightCheckEnabledServices) }) } diff --git a/pkg/template/funcs.go b/pkg/template/funcs.go index 35c8b34d6..c2712db56 100644 --- a/pkg/template/funcs.go +++ b/pkg/template/funcs.go @@ -10,12 +10,13 @@ import ( "gopkg.in/yaml.v2" + "github.com/pluralsh/polly/retry" + "github.com/pluralsh/plural/pkg/api" "github.com/pluralsh/plural/pkg/config" "github.com/pluralsh/plural/pkg/crypto" "github.com/pluralsh/plural/pkg/kubernetes" "github.com/pluralsh/plural/pkg/utils" - "github.com/pluralsh/polly/retry" ) func fileExists(path string) bool { diff --git a/pkg/test/e2eclusterapi/e2e_api_test.go b/pkg/test/e2eclusterapi/e2e_api_test.go new file mode 100644 index 000000000..17a738447 --- /dev/null +++ b/pkg/test/e2eclusterapi/e2e_api_test.go @@ -0,0 +1,193 @@ +//go:build e2e + +package e2e_test + +import ( + "context" + "fmt" + "os" + "os/exec" + "path" + "strings" + "testing" + "time" + + "github.com/pluralsh/plural/pkg/kubernetes" + "github.com/pluralsh/plural/pkg/machinepool" + "github.com/pluralsh/plural/pkg/utils" + "github.com/pluralsh/polly/containers" + "github.com/stretchr/testify/assert" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +func TestApiListInstallations(t *testing.T) { + + cmd := exec.Command("plural", "api", "list", "installations") + cmdOutput, err := cmd.CombinedOutput() + if err != nil { + t.Fatal(err) + } + installations := make([]string, 0) + rows := strings.Split(string(cmdOutput[:]), "\n") + for _, row := range rows[1:] { // Skip the heading row and iterate through the remaining rows + row = strings.ReplaceAll(row, "|", "") + cols := strings.Fields(row) // Extract each column from the row. + if len(cols) == 3 { + installations = append(installations, cols[0]) + } + } + expected := []string{"bootstrap"} + expects := containers.ToSet(expected) + assert.True(t, expects.Equal(containers.ToSet(installations)), fmt.Sprintf("the expected %s is different then %s", expected, installations)) +} + +func TestPackagesList(t *testing.T) { + homeDir, err := os.UserHomeDir() + assert.NoError(t, err) + + testDir := path.Join(homeDir, "test") + + err = os.Chdir(testDir) + assert.NoError(t, err) + cmd := exec.Command("plural", "packages", "list", "bootstrap") + cmdOutput, err := cmd.CombinedOutput() + if err != nil { + t.Fatal(err) + } + packages := make([]string, 0) + rows := strings.Split(string(cmdOutput[:]), "\n") + for _, row := range rows[3:] { // Skip the heading row and iterate through the remaining rows + row = strings.ReplaceAll(row, "|", "") + cols := strings.Fields(row) // Extract each column from the row. + if len(cols) == 3 { + packages = append(packages, cols[1]) + } + } + expected := []string{"bootstrap", "kind-bootstrap-cluster-api", "cluster-api-control-plane", "cluster-api-bootstrap", "plural-certmanager-webhook", "cluster-api-cluster", "cluster-api-core", "cluster-api-provider-docker"} + expects := containers.ToSet(expected) + assert.True(t, expects.Equal(containers.ToSet(packages)), fmt.Sprintf("the expected %s is different then %s", expected, packages)) +} + +func TestUpdateNodePools(t *testing.T) { + cmd := exec.Command("plural", "ops", "cluster") + cmdOutput, err := cmd.CombinedOutput() + if err != nil { + t.Fatal(err) + } + nodes := make([]string, 0) + rows := strings.Split(string(cmdOutput[:]), "\n") + for _, row := range rows[3:] { // Skip the heading row and iterate through the remaining rows + row = strings.ReplaceAll(row, "|", "") + cols := strings.Fields(row) // Extract each column from the row. + if len(cols) == 3 { + nodes = append(nodes, cols[0]) + } + } + + assert.Equal(t, 3, len(nodes), fmt.Sprintf("expected %d nodes got %d", 3, len(nodes))) + kubeConf, err := kubernetes.KubeConfig() + if err != nil { + t.Fatal(err) + } + + mpools, err := machinepool.ListAll(kubeConf) + if err != nil { + t.Fatal(err) + } + if len(mpools) != 1 { + t.Fatal("expected one machine pool") + } + mp := mpools[0] + + mps, err := machinepool.NewForConfig(kubeConf) + if err != nil { + t.Fatal(err) + } + + client := mps.MachinePools("bootstrap") + machinePool, err := client.Get(context.Background(), mp.Name, metav1.GetOptions{}) + if err != nil { + t.Fatal(err) + } + + replicas := *machinePool.Spec.Replicas + + if replicas != 2 { + t.Fatal("expected 2 replicas") + } + replicas = 3 + machinePool.Spec.Replicas = &replicas + + machinePool, err = client.Update(context.Background(), machinePool) + if err != nil { + t.Fatal(err) + } + + kube, err := kubernetes.Kubernetes() + if err != nil { + t.Fatal(err) + } + + if err := utils.WaitFor(5*time.Minute, 5*time.Second, func() (bool, error) { + nodeList, err := kube.Nodes() + if err != nil { + t.Fatal(err) + } + if len(nodeList.Items) == 4 { + return true, nil + } + return false, nil + }); err != nil { + t.Fatal(err) + } + + machinePool, err = client.Get(context.Background(), mp.Name, metav1.GetOptions{}) + if err != nil { + t.Fatal(err) + } + + replicas = 2 + machinePool.Spec.Replicas = &replicas + machinePool, err = client.Update(context.Background(), machinePool) + if err != nil { + t.Fatal(err) + } + if err := utils.WaitFor(5*time.Minute, 5*time.Second, func() (bool, error) { + nodeList, err := kube.Nodes() + if err != nil { + t.Fatal(err) + } + if len(nodeList.Items) == 3 { + return true, nil + } + return false, nil + }); err != nil { + t.Fatal(err) + } + + machinePool, err = client.Get(context.Background(), mp.Name, metav1.GetOptions{}) + if err != nil { + t.Fatal(err) + } + version := "v1.23.17" + machinePool.Spec.Template.Spec.Version = &version + machinePool, err = client.Update(context.Background(), machinePool) + if err != nil { + t.Fatal(err) + } + if err := utils.WaitFor(5*time.Minute, 5*time.Second, func() (bool, error) { + nodeList, err := kube.Nodes() + if err != nil { + t.Fatal(err) + } + for _, node := range nodeList.Items { + if node.Status.NodeInfo.KubeletVersion == version { + return true, nil + } + } + + return false, nil + }); err != nil { + t.Fatal(err) + } +} diff --git a/pkg/test/mocks/Client.go b/pkg/test/mocks/Client.go index 2314b690e..fc910adb7 100644 --- a/pkg/test/mocks/Client.go +++ b/pkg/test/mocks/Client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.33.0. DO NOT EDIT. +// Code generated by mockery v2.33.1. DO NOT EDIT. package mocks @@ -805,20 +805,20 @@ func (_m *Client) GetStack(name string, provider string) (*api.Stack, error) { return r0, r1 } -// GetTerraformInstallations provides a mock function with given fields: repoId -func (_m *Client) GetTerraformInstallations(repoId string) ([]*api.TerraformInstallation, error) { +// GetTerraform provides a mock function with given fields: repoId +func (_m *Client) GetTerraform(repoId string) ([]*api.Terraform, error) { ret := _m.Called(repoId) - var r0 []*api.TerraformInstallation + var r0 []*api.Terraform var r1 error - if rf, ok := ret.Get(0).(func(string) ([]*api.TerraformInstallation, error)); ok { + if rf, ok := ret.Get(0).(func(string) ([]*api.Terraform, error)); ok { return rf(repoId) } - if rf, ok := ret.Get(0).(func(string) []*api.TerraformInstallation); ok { + if rf, ok := ret.Get(0).(func(string) []*api.Terraform); ok { r0 = rf(repoId) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.TerraformInstallation) + r0 = ret.Get(0).([]*api.Terraform) } } @@ -831,25 +831,25 @@ func (_m *Client) GetTerraformInstallations(repoId string) ([]*api.TerraformInst return r0, r1 } -// GetTerraformVersions provides a mock function with given fields: id -func (_m *Client) GetTerraformVersions(id string) ([]*api.Version, error) { - ret := _m.Called(id) +// GetTerraformInstallations provides a mock function with given fields: repoId +func (_m *Client) GetTerraformInstallations(repoId string) ([]*api.TerraformInstallation, error) { + ret := _m.Called(repoId) - var r0 []*api.Version + var r0 []*api.TerraformInstallation var r1 error - if rf, ok := ret.Get(0).(func(string) ([]*api.Version, error)); ok { - return rf(id) + if rf, ok := ret.Get(0).(func(string) ([]*api.TerraformInstallation, error)); ok { + return rf(repoId) } - if rf, ok := ret.Get(0).(func(string) []*api.Version); ok { - r0 = rf(id) + if rf, ok := ret.Get(0).(func(string) []*api.TerraformInstallation); ok { + r0 = rf(repoId) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.Version) + r0 = ret.Get(0).([]*api.TerraformInstallation) } } if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(id) + r1 = rf(repoId) } else { r1 = ret.Error(1) } @@ -857,25 +857,25 @@ func (_m *Client) GetTerraformVersions(id string) ([]*api.Version, error) { return r0, r1 } -// GetTerraforma provides a mock function with given fields: repoId -func (_m *Client) GetTerraforma(repoId string) ([]*api.Terraform, error) { - ret := _m.Called(repoId) +// GetTerraformVersions provides a mock function with given fields: id +func (_m *Client) GetTerraformVersions(id string) ([]*api.Version, error) { + ret := _m.Called(id) - var r0 []*api.Terraform + var r0 []*api.Version var r1 error - if rf, ok := ret.Get(0).(func(string) ([]*api.Terraform, error)); ok { - return rf(repoId) + if rf, ok := ret.Get(0).(func(string) ([]*api.Version, error)); ok { + return rf(id) } - if rf, ok := ret.Get(0).(func(string) []*api.Terraform); ok { - r0 = rf(repoId) + if rf, ok := ret.Get(0).(func(string) []*api.Version); ok { + r0 = rf(id) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.Terraform) + r0 = ret.Get(0).([]*api.Version) } } if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(repoId) + r1 = rf(id) } else { r1 = ret.Error(1) } diff --git a/pkg/test/mocks/Kube.go b/pkg/test/mocks/Kube.go index 3d8555a59..cb9b229b8 100644 --- a/pkg/test/mocks/Kube.go +++ b/pkg/test/mocks/Kube.go @@ -1,10 +1,12 @@ -// Code generated by mockery v2.33.0. DO NOT EDIT. +// Code generated by mockery v2.33.1. DO NOT EDIT. package mocks import ( client_gokubernetes "k8s.io/client-go/kubernetes" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + mock "github.com/stretchr/testify/mock" rest "k8s.io/client-go/rest" @@ -35,6 +37,20 @@ func (_m *Kube) Apply(path string, force bool) error { return r0 } +// CreateNamespace provides a mock function with given fields: namespace +func (_m *Kube) CreateNamespace(namespace string) error { + ret := _m.Called(namespace) + + var r0 error + if rf, ok := ret.Get(0).(func(string) error); ok { + r0 = rf(namespace) + } else { + r0 = ret.Error(0) + } + + return r0 +} + // FinalizeNamespace provides a mock function with given fields: namespace func (_m *Kube) FinalizeNamespace(namespace string) error { ret := _m.Called(namespace) @@ -263,6 +279,72 @@ func (_m *Kube) Secret(namespace string, name string) (*v1.Secret, error) { return r0, r1 } +// SecretCreate provides a mock function with given fields: namespace, secret +func (_m *Kube) SecretCreate(namespace string, secret *v1.Secret) (*v1.Secret, error) { + ret := _m.Called(namespace, secret) + + var r0 *v1.Secret + var r1 error + if rf, ok := ret.Get(0).(func(string, *v1.Secret) (*v1.Secret, error)); ok { + return rf(namespace, secret) + } + if rf, ok := ret.Get(0).(func(string, *v1.Secret) *v1.Secret); ok { + r0 = rf(namespace, secret) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*v1.Secret) + } + } + + if rf, ok := ret.Get(1).(func(string, *v1.Secret) error); ok { + r1 = rf(namespace, secret) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// SecretDeleteCollection provides a mock function with given fields: namespace, opts, listOpts +func (_m *Kube) SecretDeleteCollection(namespace string, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + ret := _m.Called(namespace, opts, listOpts) + + var r0 error + if rf, ok := ret.Get(0).(func(string, metav1.DeleteOptions, metav1.ListOptions) error); ok { + r0 = rf(namespace, opts, listOpts) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// SecretList provides a mock function with given fields: namespace, opts +func (_m *Kube) SecretList(namespace string, opts metav1.ListOptions) (*v1.SecretList, error) { + ret := _m.Called(namespace, opts) + + var r0 *v1.SecretList + var r1 error + if rf, ok := ret.Get(0).(func(string, metav1.ListOptions) (*v1.SecretList, error)); ok { + return rf(namespace, opts) + } + if rf, ok := ret.Get(0).(func(string, metav1.ListOptions) *v1.SecretList); ok { + r0 = rf(namespace, opts) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*v1.SecretList) + } + } + + if rf, ok := ret.Get(1).(func(string, metav1.ListOptions) error); ok { + r1 = rf(namespace, opts) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // WireguardPeer provides a mock function with given fields: namespace, name func (_m *Kube) WireguardPeer(namespace string, name string) (*vpnv1alpha1.WireguardPeer, error) { ret := _m.Called(namespace, name) diff --git a/pkg/ui/client.go b/pkg/ui/client.go index 9ec914264..a7b9062dc 100644 --- a/pkg/ui/client.go +++ b/pkg/ui/client.go @@ -92,7 +92,7 @@ func (this *Client) Provider() string { return "" } - return api.NormalizeProvider(project.Provider) + return project.Provider } func (this *Client) Install(applications []Application, domains, buckets []string) error { diff --git a/pkg/utils/backup/capi.go b/pkg/utils/backup/capi.go new file mode 100644 index 000000000..4d6abb804 --- /dev/null +++ b/pkg/utils/backup/capi.go @@ -0,0 +1,81 @@ +package backup + +import ( + "fmt" + "os" + "path/filepath" + + apiclient "sigs.k8s.io/cluster-api/cmd/clusterctl/client" + + "github.com/pluralsh/plural/pkg/config" +) + +type CAPIBackup struct { + dirPath string +} + +func (this CAPIBackup) createDir() { + if this.Exists() { + return + } + + _ = os.MkdirAll(this.dirPath, os.ModePerm) +} + +func (this CAPIBackup) Exists() bool { + _, err := os.Stat(this.dirPath) + return !os.IsNotExist(err) +} + +func (this CAPIBackup) Save(options apiclient.MoveOptions) error { + client, err := apiclient.New("") + if err != nil { + return err + } + + this.createDir() + if len(options.FromKubeconfig.Context) == 0 || len(options.FromKubeconfig.Path) == 0 { + return fmt.Errorf("both FromKubeconfig context and path have to be configured\n") + } + + options.ToDirectory = this.dirPath + options.Namespace = "bootstrap" + + return client.Move(options) +} + +func (this CAPIBackup) Restore(options apiclient.MoveOptions) error { + client, err := apiclient.New("") + if err != nil { + return err + } + + if len(options.ToKubeconfig.Context) == 0 || len(options.ToKubeconfig.Path) == 0 { + return fmt.Errorf("both ToKubeconfig context and path have to be configured\n") + } + + if !this.Exists() { + return fmt.Errorf("could not find move backup to restore from") + } + + options.FromDirectory = this.dirPath + options.Namespace = "bootstrap" + + return client.Move(options) +} + +func (this CAPIBackup) Remove() error { + if !this.Exists() { + return nil + } + + return os.RemoveAll(this.dirPath) +} + +func NewCAPIBackup(cluster string) Backup[apiclient.MoveOptions] { + path, _ := config.PluralDir() + + return CAPIBackup{ + dirPath: filepath.Join(path, backupsDir, cluster), + } +} diff --git a/pkg/utils/backup/types.go b/pkg/utils/backup/types.go new file mode 100644 index 000000000..c4ba744f4 --- /dev/null +++ b/pkg/utils/backup/types.go @@ -0,0 +1,14 @@ +package backup + +type BackupOptions any + +const ( + backupsDir = "backups" +) + +type Backup[T BackupOptions] interface { + Exists() bool + Save(opts T) error + Restore(opts T) error + Remove() error +} \ No newline at end of file diff --git a/pkg/utils/cmd.go b/pkg/utils/cmd.go index dc42e452b..b5e0e26fe 100644 --- a/pkg/utils/cmd.go +++ b/pkg/utils/cmd.go @@ -24,7 +24,7 @@ func Exec(program string, args ...string) error { func Execute(cmd *exec.Cmd) error { res, err := cmd.CombinedOutput() if err != nil { - return fmt.Errorf("Command %s failed with output:\n\n%s", cmd.String(), res) + return fmt.Errorf("Command %s failed with output:\n\n%s\n%w", cmd.String(), res, err) } return nil diff --git a/pkg/utils/map.go b/pkg/utils/map.go index 35a3ac272..e20b5727b 100644 --- a/pkg/utils/map.go +++ b/pkg/utils/map.go @@ -5,7 +5,9 @@ import ( "reflect" jsonpatch "github.com/evanphx/json-patch" + "github.com/google/go-cmp/cmp" jsoniter "github.com/json-iterator/go" + "golang.org/x/exp/maps" "k8s.io/apimachinery/pkg/util/sets" ) @@ -79,6 +81,56 @@ func PatchInterfaceMap(defaultValues, values map[string]map[string]interface{}) return patch, nil } +type DiffCondition func(key string, value, diffValue any) bool + +var ( + equalDiffCondition DiffCondition = func(_ string, value, diffValue any) bool { + return cmp.Equal(value, diffValue) + } +) + +// DiffMap removes keys from the base map based on provided DiffCondition match against the same keys in provided +// diff map. It always uses an equal comparison for the values, but specific keys can use extended comparison +// if needed by passing custom DiffCondition function. +// +// Example: +// A: {a: 1, b: 1, c: 2} +// B: {a: 1, d: 2, c: 3} +// Result: {b: 1, c: 2} +// +// Note: It does not remove null value keys by default. +func DiffMap(base, diff map[string]interface{}, conditions ...DiffCondition) map[string]interface{} { + result := make(map[string]interface{}) + maps.Copy(result, base) + + if diff == nil { + diff = make(map[string]interface{}) + } + + for k, v := range base { + switch v.(type) { + case map[string]interface{}: + dValue, _ := diff[k].(map[string]interface{}) + if dMap := DiffMap(v.(map[string]interface{}), dValue, conditions...); len(dMap) > 0 { + result[k] = dMap + break + } + + delete(result, k) + default: + diffV, _ := diff[k] + for _, condition := range append(conditions, equalDiffCondition) { + if condition(k, v, diffV) { + delete(result, k) + break + } + } + } + } + + return result +} + func cleanUpInterfaceArray(in []interface{}) []interface{} { result := make([]interface{}, len(in)) for i, v := range in { diff --git a/pkg/utils/print.go b/pkg/utils/print.go index bf9831ca8..dfa14fd20 100644 --- a/pkg/utils/print.go +++ b/pkg/utils/print.go @@ -53,7 +53,7 @@ func ReadPwd(prompt string) (string, error) { } func Warn(line string, args ...interface{}) { - color.New(color.FgYellow, color.Bold).Fprintf(os.Stderr, line, args...) + color.New(color.FgYellow, color.Bold).Fprintf(color.Error, line, args...) } func Success(line string, args ...interface{}) { @@ -61,7 +61,7 @@ func Success(line string, args ...interface{}) { } func Error(line string, args ...interface{}) { - color.New(color.FgRed, color.Bold).Printf(line, args...) + color.New(color.FgRed, color.Bold).Fprintf(color.Error, line, args...) } func Highlight(line string, args ...interface{}) { diff --git a/pkg/utils/time.go b/pkg/utils/time.go new file mode 100644 index 000000000..8d64e7bfe --- /dev/null +++ b/pkg/utils/time.go @@ -0,0 +1,28 @@ +package utils + +import ( + "fmt" + "time" +) + +func WaitFor(timeout, interval time.Duration, f func() (bool, error)) error { + var lastErr string + timeup := time.After(timeout) + for { + select { + case <-timeup: + return fmt.Errorf("Time limit exceeded. Last error: %s", lastErr) + default: + } + + stop, err := f() + if stop { + return nil + } + if err != nil { + return err + } + + time.Sleep(interval) + } +} diff --git a/pkg/utils/validation.go b/pkg/utils/validation.go index 2abea5c0c..f49d59b77 100644 --- a/pkg/utils/validation.go +++ b/pkg/utils/validation.go @@ -2,6 +2,7 @@ package utils import ( "fmt" + "os" "regexp" "github.com/AlecAivazis/survey/v2" @@ -51,14 +52,21 @@ func RegexValidator(regex, message string) survey.Validator { } } -var ValidateAlphaNumeric = survey.ComposeValidators( +// ValidateStorageAccountName validates Azure storage account names. +var ValidateStorageAccountName = survey.ComposeValidators( survey.Required, - RegexValidator("[a-z][0-9\\-a-z]+", "Must be an alphanumeric string"), + RegexValidator("[a-z][a-z0-9]{2,23}", "Must be between 3 and 24 characters in length, start with lowercase letter and may contain numbers and lowercase letters only"), +) + +// ValidateResourceGroupName validates Azure resource group names. +var ValidateResourceGroupName = survey.ComposeValidators( + survey.Required, + RegexValidator("[a-z][a-z0-9]{2,62}", "Must be between 3 and 63 characters in length, start with lowercase letter and may contain numbers and lowercase letters only"), ) -var ValidateAlphaNumExtended = survey.ComposeValidators( +var ValidateAlphaNumeric = survey.ComposeValidators( survey.Required, - RegexValidator("[a-zA-Z][0-9\\-_a-zA-Z]+", "Must be an alphanumeric string"), + RegexValidator("[a-z][0-9\\-a-z]+", "Must be an alphanumeric string"), ) func ValidateDns(val string) error { @@ -73,3 +81,21 @@ func Confirm(msg string) bool { } return res } + +func FileExists(val interface{}) error { + path, ok := val.(string) + if !ok { + return fmt.Errorf("value is not a string: %v", val) + } + + info, err := os.Stat(path) + if os.IsNotExist(err) { + return err + } + + if info.IsDir() { + return fmt.Errorf("provided path points to a directory, not a file: %s", path) + } + + return nil +} diff --git a/pkg/wkspace/actions.go b/pkg/wkspace/actions.go index 41c00b636..ddd67011b 100644 --- a/pkg/wkspace/actions.go +++ b/pkg/wkspace/actions.go @@ -7,14 +7,15 @@ import ( "strings" "time" + "go.mercari.io/hcledit" + "helm.sh/helm/v3/pkg/action" + "github.com/pluralsh/plural/pkg/executor" "github.com/pluralsh/plural/pkg/helm" "github.com/pluralsh/plural/pkg/kubernetes" "github.com/pluralsh/plural/pkg/utils" "github.com/pluralsh/plural/pkg/utils/git" "github.com/pluralsh/plural/pkg/utils/pathing" - "go.mercari.io/hcledit" - "helm.sh/helm/v3/pkg/action" ) type checker func(s string) bool @@ -57,7 +58,7 @@ func (w *Workspace) DestroyHelm() error { } func (w *Workspace) Bounce() error { - return w.ToMinimal().BounceHelm(false) + return w.ToMinimal().BounceHelm(false, nil, nil, nil) } func (w *Workspace) HelmDiff() error { @@ -100,7 +101,11 @@ func (w *Workspace) Reset() error { func (w *Workspace) DestroyTerraform() error { repo := w.Installation.Repository - path, err := filepath.Abs(pathing.SanitizeFilepath(filepath.Join(repo.Name, "terraform"))) + repoRoot, err := git.Root() + if err != nil { + return err + } + path, err := filepath.Abs(pathing.SanitizeFilepath(filepath.Join(repoRoot, repo.Name, "terraform"))) if err != nil { return err } diff --git a/pkg/wkspace/minimal.go b/pkg/wkspace/minimal.go index 0da21941a..7aad2cfe3 100644 --- a/pkg/wkspace/minimal.go +++ b/pkg/wkspace/minimal.go @@ -7,16 +7,25 @@ import ( "os" "os/exec" "path/filepath" + "strings" "text/template" "time" helmdiff "github.com/databus23/helm-diff/v3/diff" diffmanifest "github.com/databus23/helm-diff/v3/manifest" + "github.com/google/go-cmp/cmp" "github.com/helm/helm-mapkubeapis/pkg/common" release "github.com/helm/helm-mapkubeapis/pkg/v3" "github.com/imdario/mergo" "github.com/mitchellh/go-homedir" "github.com/pkg/errors" + "helm.sh/helm/v3/pkg/action" + "helm.sh/helm/v3/pkg/chart/loader" + relutil "helm.sh/helm/v3/pkg/releaseutil" + "helm.sh/helm/v3/pkg/storage/driver" + "helm.sh/helm/v3/pkg/strvals" + "sigs.k8s.io/yaml" + "github.com/pluralsh/plural/pkg/config" "github.com/pluralsh/plural/pkg/diff" "github.com/pluralsh/plural/pkg/helm" @@ -26,12 +35,6 @@ import ( "github.com/pluralsh/plural/pkg/utils" "github.com/pluralsh/plural/pkg/utils/git" "github.com/pluralsh/plural/pkg/utils/pathing" - "helm.sh/helm/v3/pkg/action" - "helm.sh/helm/v3/pkg/chart/loader" - relutil "helm.sh/helm/v3/pkg/releaseutil" - "helm.sh/helm/v3/pkg/storage/driver" - "helm.sh/helm/v3/pkg/strvals" - "sigs.k8s.io/yaml" ) const ( @@ -74,7 +77,7 @@ func FormatValues(w io.Writer, vals string, output *output.Output) (err error) { return } -func (m *MinimalWorkspace) BounceHelm(wait bool, skipArgs ...string) error { +func (m *MinimalWorkspace) BounceHelm(wait bool, skipArgs, setArgs, setJSONArgs []string) error { path, err := filepath.Abs(pathing.SanitizeFilepath(filepath.Join("helm", m.Name))) if err != nil { return err @@ -89,6 +92,16 @@ func (m *MinimalWorkspace) BounceHelm(wait bool, skipArgs ...string) error { return err } } + for _, arg := range setArgs { + if err := strvals.ParseInto(arg, defaultVals); err != nil { + return err + } + } + for _, arg := range setJSONArgs { + if err := strvals.ParseJSON(arg, defaultVals); err != nil { + return err + } + } namespace := m.Config.Namespace(m.Name) if m.HelmConfig == nil { @@ -349,7 +362,19 @@ func templateTerraformInputs(name, vals string) ([]byte, error) { if err != nil { return nil, err } - return buf.Bytes(), nil + + templatedData := buf.String() + + // This is a workaround for https://github.com/golang/go/issues/24963 + // In case terraform outputs are not there it will print '' and break helm templating + sanitized := strings.ReplaceAll(templatedData, "", "") + + if len(templatedData) != len(sanitized) { + msg := "Replaced '' with empty string to sanitize helm values:\n%s" + utils.Warn(msg, cmp.Diff(templatedData, sanitized)) + } + + return []byte(sanitized), nil } func getHelmPath(name string) (string, error) { diff --git a/pkg/wkspace/validator.go b/pkg/wkspace/validator.go index 6b03d2962..e82f3b19e 100644 --- a/pkg/wkspace/validator.go +++ b/pkg/wkspace/validator.go @@ -4,7 +4,7 @@ import ( "fmt" "os/exec" - "github.com/pluralsh/plural/pkg/provider" + "github.com/pluralsh/plural/pkg/api" "github.com/pluralsh/plural/pkg/utils" ) @@ -71,11 +71,11 @@ func (wk *Workspace) providersValid(providers []string) error { func (wk *Workspace) match(prov string) bool { switch wk.Provider.Name() { - case provider.GCP: + case api.ProviderGCP: return prov == "GCP" - case provider.AWS: + case api.ProviderAWS: return prov == "AWS" - case provider.AZURE: + case api.ProviderAzure: return prov == "AZURE" default: return false diff --git a/plural_bootstrap_procedure.drawio b/plural_bootstrap_procedure.drawio new file mode 100644 index 000000000..fc5d6a65d --- /dev/null +++ b/plural_bootstrap_procedure.drawio @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plural_bootstrap_procedure.drawio.png b/plural_bootstrap_procedure.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..a200ff5368a695b30f46185d56b81f413ab46a78 GIT binary patch literal 835023 zcmeEP30#b87bisclQp^Sy?lP({TT1O@AE#(IsfxN=Q+=r-8x$8lbL5Sj~h2`@~V}~ z*Nq#;UNUan)W?hy;R-1!vK#&y@32mN*|@7Yv+Kr2cOX0~X9ns_%WYirzmaWyGXF=%R`CeFml))DVuIbUKK z{CkzHqnS1Q4VU3hZC&_dBm5sDW{8n8lo5iDO9=#PGd(loHCE6YH7N-hQ3+|dyl~CR z^_m*<#Z}?6wbgbr_)Fc)WIG;tMAgzBZv$79v$vvY0vVZ^BhG>{ zs^$92<&4$Ws!2*(FVogsyF%8OU`H8^vzfhv72XydJVsPPREqM2qbtFTa@Ew#*~$c7 z2s5!_zSvS|82L{^6`e}>hb;~|M4nm%er3EW=N;hb4v$2#W>d847Tj{Qq_|ty- zTEh=pqqb?|qHd2PSZd-;$rESlLTOe?TpI0`sVn6QMotDM3K^w^J@rNCdyxyeR&HpI zFwk4_ZBACEW)A4XluM3yytShhVdO;RFjOf`lLG%Jbw) zw97)7Na}RjSP@=HgCvTBiCNMKG|Q$dWqatew!=)rX}eUvqGDrOvoL-pSUKtk)o|%kcJ&mUs)i zEzVj4k0-$FVc_C6Ge<{PR90|Kj(E6a>1bn(erx7p<+u?(Bab7W^=YmzM3j; z<{MdYV+m<#_=Yl8Gt-Ym?)|Kz3*mrwvIpfQ3)`nBlhT$W&fWqL@$>gd$s#v?S(e^Q zl)4#U6pRs8$==Kw=V;|TQVnpZHdzecH@ddpzd;8NNDIxQ2!RoorXm*=A*4~kqrQtW zMD#gCe!ec?)YrkCfK1fBet8lk0JPz5vQB;N&W}{@(@P{lStA;G*TPdS{RnX<%kHSe z{R6=@mo+gnG5M6>8p}#aN)4;QuuhFuK`3MWXT_b2zF%HHs&vqZ#y=(Q(h{g}Q-vL7 zmyCZuzp#HK>#EjH4vuE_ps)bKz~#VD*}@;H)_5n=uV?|$(#p|Hmw+Q9AQ6}a2qz7| zqpvcvcQm8I2;~w1_W_WOK@iXuB@ih=(1!Tl>Whn^*DPr)zT5{ZNDGal!K%L>cTj3V z13N#~%!-Nw;~u4@{Q!DKVKd3*m<&B&D89iuQ&#V90Ur*I12msF9?$)nF;<#X&O!2?``D=#7#s_<^$p;N%eewdRvC- zJB_@nT7nyoSTJ+Mf-Tiq1%DCj@y_6z+Jgrp26hMe*4DuhXKf9>3xonx*DZGdzaIgP z&$7L**trknbQEBTD(Vllj3Sa$Gl-HH2{F{={rOC#I2w$gS?V7NZDOJ_qc@d5CAy*W z`BhUXPWFvPgFr|~aM*?W2A=-!*h-mSi+uf!c5k$jL5UCkdXj+=`#2o%DPE2+R$Vk2 z_CENv;{DZS-yI+ut6lk9$nTzo+0}&iu_pO`it|{Q45spFG^hHM#oORn|r*+n{Nx} zeE>J3_J#iz&N6E0ko!eB3kLHs-uz4C_16|43`Nv_J=RNAA(}|b2-<5hyjx^%M%ny! z0OpJC9Q}epG&xCGBp5_yF(|{8qwakFd~r0)$6*gOD_bi_sQMKHpu-DA-NluoZtMPh zD@W})jb8p(BKfOFKryJB`t=a#uj-nRGmie9G%qmPHIaazs0lvS7 zeU4V5Fk)mF{sqYcIs-HyHG({tnh~t=uH;CVn4=}K75AP_5b;jdrjU371Xe;q4uTv= zT+P_t42SIJIa$*V+Hxejz~%^JdE!4IXTcaNx6d@kV7(1|K7d5QHM_;@%IO2 zy@*IkqUkJD(WshkD5Uq1U*4Na`*a?EB$PTWFnW>XKA~2tfv{LRd zwl=c?8TlJY=znIlKZvo)NTG^0g2((Ei~TV~%$I;fX!3u*;@XKzjPxEbl2jM#=UY5D zt?}h0dcP6&?OEW%lt3Ti*wiH1Pt${8V?Qzv{C%YA{bM6C!T&~MPf7dv|4lZdj-STV zucD;Y02qIqdGlFNMpp0}(`#^MvgV&mgO)atH8VDc1}W?OgH13-cBBa&&a0x)YYa7X zKx=`i&r$QQ{{2i;IW%fWlK_P<;vc-dJ$(LSESisc5dT7oyCk|x_*KV|l5za&v3%+T z(5U`$GO-8Ef6wP>!h^q{@=MEMkgZp;HKbB-32MIG&j$d~=y4{RCH(=G9#K{#L;M@9 z_ApK$JKv)^IP*8!d1*9a`c-WwQ==cL?4xP>vuVImqEa#vGBRS4a$vT^WvT0piY_?Z zwBJjhdyG^AMTztOgeSWwhw4UnmdoJCCLH{Ov&zWPMdY;YdV4tK_z|tO#M>AJ`ia{YU(gX-~r6^EqB$~zjc__;E6sS`kBqCVDTHJr7>KcUQsDwCC& z0vtcq)A;Bx;!mu{XnGt+0>`eixkT+e`V*8LDjIpmA#}3!Ect_<{re#rsTfNO`GG-am1Z`BIEJRPs|0XRvjE9cvrvn{1&>57H)}Ho4*z@(B7GBHrF~WXFcv z5+RxyZ?|$3A-74XS|ozv{)l%P<4m?&kU5jc2kR&<1+hwGC22pPt4VIv)XW4=$*T~7 zTnm%!wq_3KEI@joBQ-WbnG2eGY1ZgP~T%qS9vSp5{+z zV?N#)_qvem(`~E}x5e*>F@W+2(i(ohw^mFAWQ42SJm6iUg zM;NISK%@P`N^eF$cm2_wLI6N%oDEX9lJe(A{}dbHSPr-IvE4Ver@Er>H#x}i{)#s8 z-3Qk`zB1hS2dN3)*vF5Y-w(hI>RXdbk6W6#;GkeL44q(RZw0X=B&e|*y{bdKghVI4 z;tiWyxtLKaf+KkO&v?gB=AH5)l)8K>CtgBa9CVi)C#MBC4D~SGe+S`Y(Qf|t5$^Bw zpGSRQihScQ$WuN(4DlNTK&?Oe?*saYoEZc;6#20B5Jrp|_NU=E;#41p76PcTwf_(T zpoxb6R|r6<(lQE9g_3jp>mdMj0zSo6hH1dx$W?wxE+F%9jRq)$f@15>hXiu}k4W(2 z4@-;&JU+j{Ec4-kTPf-VstNgNcbKX6kp_eGXv-RYcv2gF#|2JiBYSdiI@{EhLI`Qh z)-Mn}5gGpBAk@3SNPa3Z`g252Fw}fenl<`I!zVCJqdmDX96cQ_WT+2Zk0$NhE0BUn$p= z8V;v=yHeEDMp{lw%?qH7qfCE&Hs=`x|L5`YRlx;k{yH z(*Nrjui+`6v0fiD-?7Eg|4;VRC8=tU;(#>uCk1I>;3wHm!%%?BiVI_lS-Jvc^&a6|wT<*q5jnxG%K7o-Hbk zWMF=Y29UoS&euevX@9G0G1?MnziLPwt=B%Hj@a;dg8!F_hf-1>TKu1SPaK2RD4-!` z|HPg+Rncj7wEttZbLT>ON(WMb!Jk8W#-~ec3P(T8$~eG8K7a?9|!jSf690w+n_L4 zBH)C>8X(Aoy5R7mbm)Z<`iowp4cq?*D|=$7zfDG?!2g6rrXKPAchXhR-w_;zcK`SU z*?&vB(fyh)YWLW}_QNOvIx>7r{{vJ0YaEA@lau)HX9_W&{7E3Hg{MUWsyF^4H}S}3 z!5(6zpD+rj$xw%?%$AyXQ?rqVgZwR&N4BuXK^-Ns?Li-af{ReB2e~p;rG4ADas1;} zEnm9c#h{_Y^~P2+SLGI&EpNb^0ax2*3mzS(D-XUJrjfGTyY=HmCQa**jB4973;cH)^#gKU*@*V?b|gC zK}qh-xdxB!!N;!B+%{L~B<~*Hyl2mzP2WP#$i}a-W88SUF?>jyIh{w$C~c-^ia!T5 zqH>#|zdZAiqVhB3U(nw(9sc-W+5%)?T6-^+b_?jbh!Qx zenOO1!E@m;b)MY5sc;@+348E?#$B9hJI0X~Go0kp-@jrlrMoJb@MiHj`=5+`iXxQg z=s4;nwuesRSBY3TzDE7v@y>Z@@A;wkQ*@sTd`It>@QcmuV;4FAW6@`pRlYuZ&uL0u zNqZUSn@kmEpJN~M;;MMk(=T{x@mwBeTjd~KPT)ML#uXGndAd}kLW?)@viewrhO(~r z4OEPlbqcKGhtXf>BzT$1ajii6I)jC=wE|4VDtyh?PwEtbZub(rLXrlf;eVoterX5Ij3iQst)4lX?{f)`pXGxx^P{A0SW@V z^z=P;0jtVt#f_G>#sk}_?ao85gSm%BV1sc>RPw$htIqm1TV+E&ofb! zTmgJzy<{h_#! z(|4G@b6`K#yCoe5Mx>GjGsAo4CI;mMYXO9(^Inb{!-S*OGGYrD)`wC{o*~wW8?2LP z5HJmL=XJQCb+eGe@?&Ql5l^7?MT!R5Fu4&XFf;q}i-Rece*QezzJMtkHh+f!5d{PC z`uMSJ2r1YDq~O@9^E)Z6FWdvIU)NY2`W>xXLF-56M8AQ_&BMUVWLes1P)zCi^*}jR zOu8g8D!ut+7Zx4^yKSGn<|cf5e+6){M}ItBN@@M@3TRz_!8xt5w|@Qxw7xn}&jDJm z4F=O{azlCnMVl8b0>|U@&SzYx0E~eg99{!->Gqp*o1lZQ<^csZn^uo9yNC0j^~FK! z1jpX``c2UKxvWca(7K~WT2DS^(=61ZoIV|BLH?a>D4QP(n|wGQSn8Ixbt2F~dv=1? zD{&?#lu(wd@0N|^x7mh*)Z!^j&+lTnbqg?Mga6O?%XP>Sb!*Zfs`3>)%K~a_8@cu~%14#cr zgLjoH3<=8^Cu|dma2*{suU-gv;G?Q54tOBW25}BC`uV83otp+|bJ0!+QRdG~@7Hws z;v#7MV$d@rLLe^;XmdHb6h)hQCP14q4X5Q_YvVIA51pFN322jkN+<+A&j7R$=lN?I ziZ<(@b)jeRoWRw_+W9}HL+j5T)FV(HIvvR5^TH;|G^lg{-CK{3l>ZJgIgJ^}WM$rA zu-7D3piDDZmolNPUqHy@wk-i@6!G)p|LmfWE<)?)>rFcV%1Jp8q>+ESok&^32sfa6 z7iDyLhsk97nh0SZu?R!q5|lfP8u&?C5XP$Yxu^(Bs^ba#qr>8|D*Bp@z|8Ks6@N#x zhVjN9AUyM>_rL_`xI^oWhU3SfQ=|-RzMbQ7<7a2!>x&-20mM)K)HZGC@OncCOAO3- zi^M6R$%Pw$-dqcF9(#aqJe>$Q3zoaH=Rtc<4WRWty>X}{=4r#!4A47Zzuw2s3U93s zuqUna#Rw62#!c{A@0}@+`W^uY1GyYkItH>2O=$h;;Pi2*qt&hp zQ=@#RMC-F%`#LF+p9|~Caj_E#*>phg^I7<{DJUoy!@6?5wUVI-(U{(mcL=8DXwhQO zO_fGy{iZj=I8>qsIN9P0w8d_rTx~4E^KXcJ@w8gzxvZAkC+$J>ObMjt^@)%G%8XH$ z43({s?(k;@81Wb4^2n|i0SGXX0^Hm%;kr7NVj-A+!ET%1w=_6%ogN~Xe>q532Kx5= z@{Tr>>|S?yN0$yZc|bBVKw4DoZYD_ zJ&JZdGs^Xd`*8Ekg;^knmqo|dWYr()oK2C*h(!o~im&n8U9nJX3cicC~|&jv!+WaCrlAr z;!?d2moZs}wY>k047O=w%_LdndIis9)Jj|dztw6*_RP<&%V#iz1|M`{z$E>(R4-;L zYoXk$1FGpKOdnQN3O=lCho-o-}cKn!hRD(HpcL? z&QXx{&09YZP^oUGR^FW{lRp30mM7~H@ky;}@qJB+1;uO6sQGG2zc`!gX?y$iQ8DL+ zBFFO6EB3feHmG+9@+xU5-X48UC6q@a_WJg!ySpn(9CEiV7-y-O5_suJ)zb^Q8S!@2 z>2FTp!_tGcgd#E1oaZ?d!=WOD#7rHoCV(m3wAHDbnhWst0e{jAkq!YRs_jpU)I7m8 zMX9^u%}%wwJnWri?#(e7Q?New_Hg@$NLYw+cuZ5(nWEU9_hw+bc*U#pXZADeMrtsf zQ4gF_5T)I$@O-A%GIkOc!)evsQh6b05}$`yL)=SSPv@KR6Nq76y>%@ixgHB1pO9Jd zOvwHi^{typ;NuPGb%d@4Yj8xv_DysaUm*f=JQS4 zub9p87#isEhvkz>J)!LF#k_3yv9!>fob!E6xr$v|T-vf_GTcG(V_uk_xY=H@fsS}| zvHmo!#TyTV-O84J>64jyOk{dq*69gTWcf>6YeMU;+Er)z3SW(%XMH1I?a^ho)_dF; z_YVr3kScY1dnG&Xyi||U)d2sr&_CBMdNZd+9kbtgE@h!$Uz8Aq?u&jrkWpQM-C40y zu^DpJdnM8txVIdbGi|4)mO|^@=}Ikc4Ts#~8?HZk(tOO&%T>1SY|xV$Eryf*%|nBD zmyTz883*R7rl*l6xLWH*Ym^Nu=M44d4$V$!@m+GZTzRM`*T1{#VoKn(Ol||0xk+!gHZ$*>G_{Es zI-t*HF|9l?)B6!P9qQ4^?xB2*J^Gpy0eGqngm}RGDjKW*npAvhGVkjE+o>mcn3{53oeT_KKWud%Rq)BsX zui>k^c)Z&3RHsUv=r0H#P|rJzn74G2Z%eMvy-)z2OMRqb_t~0W$_j!4YX$QO~okG9o=ke<#ns)%?bZp&nAb;#PR{# zBFi)To^<)owqMzu!8geECi}#(!7}?tA{p*wZDEp+c%6%IzK!>0WDXR9A`#wRx#dSp z?JKP-TjJHar*gMo7^6kFr*n6$y7Elu!(~Eqa@T^`?*4(Ua^>vm1EXUB2fCgUY>_Q>i^CQklBSy}d7D4D4*$6^8oT zPH64(_v(xdpNy!fY^4uJIt--z%+XBN)Yg4?AJ9UPHg^wyn6~h<7WcNp%e9(ySZ!x2 zdwIAurTenzJ-DZN1$KBgImDs~0_US)FQ7Napk|C%15$P1AlR6k$tKS)>*HSCKUgd)up68O@XKexTEpr8vAY~E0G4VQCLF4>kl!^x}Xk)hw6os*)<%K=nk%G}%6U|p>Wl%lX8t~Tm{_3QJNllXc#w|Gj zf;`3ta$|5A8)^$4wpE$i4GBjli8sDvv~jIFcPw4{rFGD@eFMsa-PO1=`=nQQwR6RD z^aV`Bq`i(jVauG@aD9zSO(=0)u#Ujf+WJe;QxGcU(sa8f9s2V8q!VlB3qYF;b)|O) zW10Z9V^UM-h%;H1B-EZJ6yf}R3k}>wPTFP8$PO8JC8%tbvR&A1nz3Yx@zNGxUw8*W*QYqg__sXggxuSVyJA%IXWO@@fF_qNW-W=$B>EG@HMW3tUn&cQ+2(iU{C?&LOWF^`Y#`sFP7I0>-VZtx)kJKWx-I#&jMSH;0|wIm8qW z1W(#`ln)Jd;i5vFx7FcRFf{cKln;3_=j|>;?8(`dlbIb2vAKRCaYge6ToKfTt}gLZ zsy}}w{jiYkI{q9`tP@?tsT=|2S>=g_WUC02q(IN%&10sQHn+A0riFs^OHbI*`IoEUSbf}U7X^#Q=C&O31xk8JzdUv13Nmk zW%+HtdV4`bVslDmQ)07Lsv@+Hpm1H=&Z$Z~zHv+Lf0<6tDufjNBE4slQJsssU9Q)Znl zE9RMeIxUoE3Wut(GdLYBU|~CI-yYF3U}^?p_N0q@3t?&Z^IIu5H7atz1n@1;4oiAC z=ZZq~wH`1vd}{k<9vR#_R~4fmXkZcMYAy@5cCa<@E1Wg!62Q1vYrj z37s{>in|hsjjwfw8v}VN}vf_FIccPSkVjJ zQ%dQ+x8&+|@2*+y?tHWE$f?h9H4T<`+7{@^ExLuL45T!w`Hbt0Kt1mXL}R0MtoQ)E z2AR&}{^{kd-B(#ktgMm-HofYvkj_B22%@-vW{%7(g zSA(u(L9LTKqAA@~Z}bGz_A*LX_1iQ%_k}3in`d z^pM-1J;!e2d%7?ar(C&J=2jQRH`wBztrPWH22anuZIRsS;eW#12CO&zmt0g!8SxKQ&xo6ioqKpB?WuYI7 z$dFPFc=^`J9nb5+42OCP=RSY>@@7q#yWb26b02NbdfiH}ZYyuKPmhnySDQ7z4SWL0 zlg`CfIN&CgcR92*wh#5C4q>em>LL~AOn(awrYb{IyHp9C7txDzhb0Rd-rE4-y=_vq z+24^3a~0WGkO|Q<^t?HP(f%@da~N#o0&>NWbKTZcY*m! z3soDRtI(!FcIk&~fsdN~Wonz)7)JnVeQvWmOUdrOD>t8Ss_Wtt<@O-T;=`S9*NvyO&uC&&hVRM8?R9Z9)qMU*_}jC36L<1b8#EE z6Ox7dc`)-7`dc#Q4)#3-H300#o`jWF4DREI=iqL>QJ^K1C)COJ)|$TMvL!ejw+!oL z4DiVv8#Y>mI=LkUvT!Y4c}K1_0l0fc(KQoy>q14z3w^09!Yn2FU_p2!Ep>`7vB$Ta z;Tu@!0nAaWJUd)jnUz=mMpmq`<)0pEtOqv56Dn7iYbwVHR`gru=59lm!3&n5UdDlU z?4f!UKV%uOhk2wW@MTHu2f!ncW}PK%?K`z$&H{0(Cua%u7osBF`PN z*4^4?(?WP$-u1WTMn#0Yj?S9nzBmbtzR+H?*lg+Ta)hX7HB$9G_m+6EPr)|Cv|F$q zw|ZRNT^%?zNKo4#vf(v=Gvkwz+YY*EI;@xKypmheS>{gck)*RS-nCZXzByvJpAQE* zQcUeO?2AC0L#dtSGdnn^$2+7m3Hl&J?wJF`v3vyf%NqOMyq5yV^tQbZ0%++stP0#b z`HqQhojGyJ>|n3N+S7Z|>!QNTOmcbN6|^M6>r`2N0`vq3f>(EMPc&>D2x!(%nh8Oc z7R#sS*VZLML{0dvO2q5v_(F(2%_BtR-nu$4>m*;}tYQ*{MV*Iap-{K%&9}x*j}Kfx zEXI^K!=AdTQpW{t-|&G3i)^tYP1^f$vVF~|-Wy|#miD?0_V)-qUVu2mU?EePfC=Gy zJ$rPH@z8TjFf`t%f%LwwAyzvctSC9c1uxDGsE7fsgiV z+@7ry#uNFD+q;$fQ9~Dgs1uJnw$*u6c`10tm0 zWg-jFymjHN0iKy&vkKpluwA7@!y@?{)S?0{x`5kh-c z|IN(!*rcpzuZ~M>?goPa28P|~+{d+Gxwgx8SM1d5R@y&XPW7G(nU z;^&qCr}3zmz_+rk3<9qi;DEZfzu8j-d(QXti+7{T=Z`GkWBp^_v3$3Y<(qomeWM2J zAGaailMcjdwjb+^X~wcSduK?bBi^66O3pJqL*D&zZ-UKnuy{$m^_Os9q%^zWjs?EO zms1COD?=>8n7ljmypMERZ`qd?n%b9`$^s!7TyHNp`CE6*71}54clT~gFwc5>Bw*^0 zt0*(zSYnsuyHT5UNl)NVcVG;eL?!w^yjzo15wuUHEWT$m>rLR)T1CJ|kZ{rA=U_-S zk&U&Q8ukpkPKZNusuUDX-)U6(G?#3BnI1CtS&r5p3G;YDmg0?&aq zuUB3wlHa>Q**;>FA!9&X=!=4xgFPZ3APx;Y*#cg!cJg8!__>bqMHOTu1JXohV7 z9JBZCLYODs!MgCl3;KnB>TR9AA3WanE_U_V?6%-yx4ZVFg?5+TO6j;l$X~&IuG}9& za?bGnr;i|JRB&U95?hTbU#|{=Lr~IxEUDIJ{aEvJu6K#DgA!g#0CL%HIqhsaBcg=t0t5de%|z1mD)VlBYt{yhAKU{G z`HhMau3*_Sz^$2~CHMNU0be}gTJx~QzO+s3=pF#0raf1oH7twIJE^A+L|>QxVRBbl z;^X7s^Gkd3P0*=Aq$%8_fFvh8BIyVwPmv7UYb5%%MK_Xt5eD>*XEs-}0Hgx#37 zt_!+Ren7WR%}^-lp8Fh$QTy+lB7fes841oJL4(Ltd`iz7WE;b)I=a5iIPYN}Nazi3 zRwLKW7Zw>1hbZkk&xIh+aOx$6j+(!OyJ z*+lRyS<WYp(mz+kz9HD0CK?Ai+W$fY?;b;`x4^l4Vzp z&f0t@{n@nryLA9L%wudXx=yaIponA~@-Q$S-Xm517tbt|+T-yT-S zreItw@BGD32^%J>JtxnSUd(` z2uz&B)3HJ0vf}fBmW-)U-riN%!otLIdtI*1MHT%m##9%oR}g|i-Udx*%D|_h@?Z7C zc;O&i9{Yw9;3-7BgT(QNfg5*H%%{p7V6V&*Z}QTp+P4~3%N2l>!rPuBJ>Jolfu(wU zwc%i?2VHNU7ygoS~kTbQJ+R+Gan3dj|*S4cFA4fQlq?hws^k#k{$qvaQVM3E&4(x=qdVitw zC=p#41oI=Vx#r5)N1&sRq}B6Y$%GlpTMLP2>aI3uzSDXgFo6vI7w3;^44>@6LRdhb zci9^E;M@C4A+0`x^C`NxhgU)CA(7`cjJ@^qm!b8C`!|?C>$T@0t^Q1sG~~!2Yp`e` z$oyZb&!&xCDi3Re;PjYB8bb$P@k3fYj(Hop@(+=-&Kd>lzT>R(`VG*!nffIRwC=bb z((2b5oS>%FL*|z5om1OTx=JH$Bco35W&9(le<%n+Tn`CdbMreAU0-uRDr!o|1>|6g z9FkTa{MSs%t4ZQWqHDp8r=ZJYUDqQ>qU($NZF`{wUL?`=aN!$@=&CRv832Uyn?~qh z^PKj{)LejXdMD`}a)PS-@p>fbbv8I4avDn~qi+g9l3uMgZTpU-*M~^bYlEc}a!`Ih zlJxp;y8}g&kc>AXn(;Qqc~a>?PEg^^7lFx8nF4S>J2GM-+PVg`{!min<`-i|ItNtr z7;!2~-Cukuw@w8EQHub(8%PpdJsi(C|MG4Jn!|iU7&L6_(znz|EoI`qY1LK6L+i{c zHyEJxZ406G_w@0`d}w``Tz=ECQg8m<_s=cK?|J|1%>0)3VH+~?!*7}SEi>QBbAHRr zZ<+ZmGvg3K@~iQgm~G@z2$!5MC62TcyVg7!BAq{2a zB&QWQbNS2}n(}nh?j0wuNFC0c;a)o@eRfR1WXS~*nrFtFPP|BvJ)$nfvpM4Qb2Sy! z+x*LQGE`3+@$EXg>!kZK=Epo%Oo1USIy3FBwX0a1iwg0)XK?w2!P%oxjkkL?G|MYm zbSiY3T)A0Tee2KzR`=(Cu>K3J^bWxA^zaJ#|}4zfz)$~RFw0rV3`$8 z;Z2su;WY(XPrZh3{^k!6N9q1zx~U+&2g15(PZ|3AOzPE*##6jVm27%?;x=caqu)_P zBAb&cY z=>`Wd9Re}q(5SRI-CtNKtk|RPh^U)0GcJ&9+tP>}Q(3{%-KCzNo{8=z9bdp7UvPut zCLiT(pIN*wuE+UvJB*fz1ZJNG2Sm(i{Lo-EOFK7ev&2!TZvWi?&7HwSLloFd}bM*t^@f$nq{63%NLvg z@~<(#xEP&=^C2LZ*;5|dkKMJ3(5HL*V0FSND2Xh+-Nc!^nR<@dqtZJ`bhfOcY(u#6 z#`>fM)Cv_(5m~YoG*3oliFA?iB;(wMOAn1NqvggvIYplwS_gY=M^N5dyiaz!yS;s7 zv|&n$(utUL$U2`tnU-Zhuu6zr950Zfdt2Z-KPqeUK-Q+qF+LjoTRs$ek~y;}DKtLu zrm2%r(4NxQ?Xe+RG6VMHDkY?~41?80yp`Sg0(B;>H4Oo+p*&@~^|-2LI9Yd5GerLe zfecPabGv@%DlRciYj6Ey=Qs4ukzT90Ksb=jwT9|uVC|x+u-OXuM07t)jhn4xM(JaY z4+rxNQdJ>IGEinp9#kvRNEMtQPae5%(=?>C7!-Rro@M}Jt+b;SYbi#wE{@}t;n=k< zcq2bc!(GzzL(fR9*VA$|qGnYcqf{%?*sS7VQ7mZWMMr;8fDF#^kFHIlqhAf96bdcz z8T%-8)JYwt^S5?7lR|l(g)}}sXU9tll@Gfr1&bH4m97fgD34D>aY_r`)~fdTfW{Xg z1(83J4ZYjIAML%fa1sMytR>fqwrVMFt`%*i=*rFMY~>dk^YvvZYa|xAqar7mFo&v0 z-~L{bITIqdmk_~q&^NM(ESTK-2p|XA2a!yn!AK+Q_&dDK$llvm$METUZfr18)L+$= zveigX&B+|=V6{cvDC%bPu6@Wf9-+e|aYR?E2l_PBuo@5b-yu}wRkEcHM~j>|*-9={ zU(lEMblamD_}=+>Zv{^kmNTBH>oPUkd#}m9_r)@z)#X-2%HHm>Ks-3DX=h}4$E@4JE!%G`jc7L z*|huhJ+d~Vr%;}*g12f#nSDnVNK6z024%6dlWn2BT82DPBwhyRJEs}lw5m|H4b<-5zZlZ^@L z9u|0IBD!*~nHif7zqOGbvvffc0D=rS1R3&2A_Ln(ZKLRJt-USrRLLy>X$pxn68!=68fLGr8~6VeNbn zjEGnqBT-Q2*Zmr`A@#!iDZ1scvG(NQ<tNr#qsyrIGGN33${ zuRVBR;3PY+7M>}y==ZzO(X?X0IFxTrgRbtl~MRjX&m9Uq$h9OeKO%mqo9eSJYG&m&R%tQ(W zs!#b1hi~M9X&dP_Uq8Gj~mKcC{EDWSeDRk>Bz6_&Gt#*vCy?iS^6le<+Awje>bZ^BK|Y3NwM zAt}*sM{Ua(6|R?ZH6+`FNA7b%b~Q zdu#W)c?kvW61P&XG0+n;Bis1L(4DBX3)e!=;kO3OyR1}ia~j*|!P{_r9Epp}`#L~1 zQ~-WPuGtDkpk3VqPq(Ayto=-PEW%Z;u*pirwe9yG97-T`yj)J)WY;Y%w;wFI?6xqp zrUiA`M}x#7(~Csog4XV8y3u|v2C~~X&5a4We73JdG=}4hd~E1#$*Te}1p$S37LXB6 zfc|R!W*0{D&XM;R9j8l#hMaacX|(w~ zhU0*wep(X4nuL;=*D@ClQb#7o*f72Pg|fGpzdkF}gOwWq!rO++;zTwX9Y3SyweE0FCyxFeQOWwIe6yB1!*oy2%42jg5l}} zBc^zNGOa0&iV+YKqcp5@dPld`?xM(fDiJQEwZ_;N+m;gpl({9Is=<0ltDBwr#_mf;iuZXePA)H+FOfflislG<#_pE{c_^* zA+MrJ9WWiLnA>B>TfCudbf`!xa(+TVN>}E7CbskY5gH`C2^N9tD1)=Pd?{Nh^~Z5Y zaZGnxw2}Z(rdvm`iPk$^?ezK}Q_*UNSfvueXSkIF{)|?>y6`I}SA_8h`MoNU(?d zGqEjH~$1|#&yXCgpEngN|_rt|gN%ZZ)qy80%vFakUh z$nf}$!m@Xf&T?zP%{yyz&PP>(=fud0;92(xz_SX!4@^A-3N)y|e~1G7LATui1KH^V zb~Tz7>}lFdV6(M31i^zKtpWo?(IInDa2aFYqIl6YC|{te{}=no%FH?A2J+#a#-W4Sa%Z6)0i_Ir3PT@!mce_`yzdPsflzTV8 ziPBNC7L?#9wJLsTqU_Gd*yOTeRC6$bFsM9YcnHIJdKxR@U1uFWj#NN@Jx!~h08}CG z!3U5wjh zrU8dSFtxL%m=~1zBHPOc((@969vz%{HUTj8nc^(rG5GAhjO&Hsf^2jgqYj*rUI-P0 zSuP6-*XGp z(ju5f!TiugDVXQWccj_Uu7T}V6v9;A$31!2c2$PD@G86gVXAB)(@0C9Cv%@SwiXoN zF16}@R9M!?)O4e(q4DImhy)(H4b5h#heh7Cg1Bw)y1o+0 zj|o|t{c+%up3kwi5Z(8du|cw-!iEx70Kr^A;whK&YG0Y~*W$Yz-dyD&Ri}cFtFY5K z0hIP}l?qi&7JI`9>KeHVkDe<3D)XTcR2@H+P-AR}f34OGyq_H7t0gVvLj&b=z3w4J zC5oN?;t4N45X@|H_w|&v#LNrkykYuLl0is6@ zRP16zj$G>A3RUcrkHsm1cs>Pj&EM5@xc^Y_ z)s^5X&2!pEEfzsVZ<F8J0e_&yf^Iz{q=6Gey{qQ z-h)Q6gjz!H+J4ttZxx$ewOw8d8-|pseCC4F5 z;)>0QV=8U*^*k>hXf1V&a&0zQL;NGY;K|Ng-+so_GDRiS1pA^69GxM>n;GUz9z%WQ zQ^_S-9_pn`%TelUIPk|Rmj)9)Y|H~V=jJ_i(v;aNhg`bSS(dPd_m$M7&#*YTc4j6p z&77MfnC1-u48?6j2E2=|I+Iuig{}Od&{F*?Yow+LQj+m{V?$qO;~Hf{eSM}iYt{%{ z&10pc?^pLYpy0uZm6gk5o;Tca;%OdPZ1+_<2|RgPJGnh^$cL+#o_oMEkd zEza&4EG-`>ZHc>;Y-2P5>f@QkL#2&^+|>4SOMJt7FN800459(}H=8KnGQe(kY7&k> z#V*n^`c5)MaAC)d?HnaSui{yY%}EP@*|&iaZaY!3E19K9 zvWmy%uWtq#Muo+BXJJBw^Lg>IBsZolo*mCBLz_J;5^9%t_dKesxZ^*R*2QAjz09Sz zAUtfa3F^q%xIEfiCf@ocr7g6XwV%|2cmjz>FHhMU{*l3;KRyovkToIdc&%IUQt=$h z?$xu(c?_Uf$W%5~j*=cI)iWI_IYNN*@{+!JN{pNWNOuuYmZ54#})i!sL5sEQc!}zF{k_Gl`^IjorKxixl%K z7%KBBOe{NM`x;K@vpP69MA>YQs>qQ^Y2AmEweZ`FPnP;))gdK^N?&fj^1;UPDM(qp zw<;$4=pRnE1cSrDSt``EReZB87~A(c6FW%^G?U4`9MJI9en$2fttf0($-W zv@lS@$iRLO>8(h;$aFZj&*N1s<0UZAP|Y{w(mN@o6>9JFMz@^iPF{G|A}-Mjv{*T* zCmTN{(B-bc6GQLzGklYCp+ulonH!v@jj{`OQH1ljQ^I>5Tcpe6^p@8R8PtmIyKdd} z-nv@eNP~idO@wEE>iP1N^gvz6RGWno6N*IRInIQncJE2$X@V2pK|=$cZ~#11(!G+! zkO!%B6M07y*x_8C1zFD5CvcUvUM$oBUgqa-{@@#@0$|kWlFBR~MPVz5Nki}>g=|Ab zowfOA=1#P$;%hS?++mnIh-q45*!u)2=M!3TABsTqwnWM#3+;QI1QpO&0B$Nzl=qu= zBUsx~T$m!A+&qD=Tc!JmVb78FnhBGpob|5g3(!lN*PqWfu(takU(dmoj%aViBq#?k zCA|NYUmB08n~RSo>MY>p@#F7agEzQ;Ugm zr%9bU$jQ+0!E3fjh%ynNxLw$rHn0QYNi~YiOvkp^uL9gwI=H_hI7?wcvY?u~agtyn zQud)`b85%tN;-F0>*E^vJ zp}`&RMR7C+J$QY^^8W21t0uK7jHmmP-O|KbFqXUY!o$s$y!6i82>fRpX`MQGXy~TY zAr1j-DpU$QIcV4HJy_!%)_fezo;9C=}d&TE018Q9hk<(?pA zCZq^whFs0b>V-5WsYul*u_EWfsmI5X8_X(^5}NW4pI2!0UVK@QV!wSJ}179XHjfO9d(Ip_1bfo|mDYR2C zBpP_ZhfW~4}FH*!$_DwO|g@%QfbpCCN+?pW&Vu->Opk>P@??8Q@b z-*IWG8@bULW2e5{)1=X?DA_jlz}I?p6>E!@#mk8o+q^b0ks9fpS(;3}TV{p#Ar%x5 z`+bldDSk8mE>CXwP*1o&Vo5!f)LgvY33}VVx~A~naz}t`&p@mS3*^OeO_`$*Y&(>V z_i}J4eQR)R@FWBAYD#Z?3kan|e{uA{CZx)^Od6-M`-?{gN4*9c@!ox=F;Ne~I@K!9 z?kLKsc*LJj&3AwqLPhJl35&<@!zR|#*#T(Q+F%hP-{#|%ABf!Xt!sV(o0IVAQf%hij$G@XBl7;yW3-7IlLKj z-JZu@++%F^UZW!UV>S~6MQirqJxp9OW|a|&A6~D>G3>u*=u_UGUCtWl)qW-es(4`8 zp5Cqs5Kf;gQ^J-|YFkuP6rA3qvC3#QEG0Grma^`gWTOF~wL4SK7z${f-vtv_Hfe4` z?5%@XMow~AJ>%;9OO?gv-cF1x5{U;+=OOqwH`gC3RbmyO1oKqB?zBniPyr}pfBxGJ zgjgRMY(grH!fL$CfZAv5Vebw{olPC8;!fr9dSl`B=9LH3&Cw%Qv>WmSA{4on9JZl? z%T$(z=_Ng#w^DgU<179;@W+D({xB0z$Au%T#YgaL_)uB%fI&CZ{;Q6`m!|{`*$g7C zQC%)se>$MtQhUvith0KNvUeUko8?txJQl*_@r*q!!pL#_wb07!v7EI(t}{nJ;c5hzjLvDha?te36<*NEPTxyFm9XvUXL= zUEWB9&rlj{4UFo_QhpU08af&H!m)IyPI$a*h$Xd!r4p(v%k^ZXRyP$OKe>kjF6`Lr z5d@ovHZ~$#JX-Gw-UpZ$XM;RRS%kvp|aNWpG2; z?3SI%-8<`sQeNjRIahAth(r*pu$u0tic|PteC6ZvLo2V8=m$VJ6KZvhVPB@2Wmn@~ zTfqd0gb+c-h6M*0oU0Te4Iu5xaDGs++psZCr!piP>@zYJLIE0ID8zA8TUa47OLh351>NrcY3=a}~lgVq4Ov$&Ip^(@P; z2@t-@h?Fw!?SmhtZ#h|`Q1dDosfisg?xz;Fr8PCbT0*%$L)qh<%&p|g;ugNFCfP=< zR^Dhc0s6bnYRYQ)q50VgYlC4ra5pAWc4ObK#PE`Q{zDKl9r%R_5-FjAOv{mwuJ3U0 zkaq&Mn%N7=lCnVkK8tQ(I)?@iHX+QY1$d6#%Sx@2vg|3n&!Qu}{~(v0heAcIr(QPt zL2*m(k~&5B)lsTNPCGz{lrfWaZrB))7`VreHG;##r}lLQ!SK?1Nz&1yhQ#_QA+ZZ@ zcS{pWjj=s^7i+Z!Bh_Yaf?2U#BttWS!!!Bi52PxXl>i9{tK~eu|7`mE3_fXs#DpXd) zS}+}1mFdW;7=LnA{^Yt}g>CJ-P&nALvl7|YP;a&1CZ&TKGM`bDi>cLW%{1p>gFLf! zV~`JK#$AnviHxVQuk}w{n2o4m=!l&aEx8&T7tK5bu(Op5Wj;Hfh&evmv zYoUiCZiT2JkBOYnCq$V|vQ7L@|2{cv+HUFa!Vv1heQR^tbJLjPxRFE)Lu=YZi`I$M z_&xGm1#WyRFFxZgP#O*nErlJm$aY52X3zw@05y5)8#+NM0Zp(MA?Vq|V-5LQS!uK;>RRHt_J|AzpspD@Uyu(gu+1 zwY$w%kAhWM-^>6T8)YGqmMi|kPL|i${LRK1d=zM=YcH^NcWF)i7Z9bhHKW~c)Y8=| zQKA{&`Qxx@|4i%bytnKxFWg^h9m|>@S|6sFt+yavw{5}=bQ6pU^PicFY))DBWkrRL zue?C=>&dOFT!M+Y=-q!B`%L+a{FNA*sQeS^;>g=P+VtKBf+A0hq)@VkMD}4JhJD}5 z_O73eu{(%aed-KyLo=`Hj4`;QgP645lOeTQo;eq{3112J zmN|MOAu8S9#A^8V(SFeJM&=~!6wFEP)%!=fXp-@^QIqlPXJo!NY%l=QG<2t7`c7;W zcK&RYwYs|+Ip=Tgk3WsQH%rgSk7KTnXOD;$K~Q;(0Im9eMTF2k!+tP~Y-ri8rl&)! zf~8AAo2oB^Hf5N7Qkx`o(R|2l{4l3GRf|n_!<;B*FgHLDkj~!-{VC5;FAd0`0?f&q zlNV~W9CGZ7LXo|%D>tF3lE=)5=HYv?UVPMgap33a)?p6@M%q9WEFt?lD$tjo7i85 z(7CPB4QM({Uz%hESx3Z3=WkDF)SbrmGGv;^?gD6MS7_UMIDH{sH6mgCWaVTUnmmql z6jCYIzpA+ByvUx7K~&W-N~Pq@6p?s<`I{2&b!e1Iv2ZOAoaGHd+Vf$PZUT>eFU_fd z|B?3G@l@{rm&mH9jIz58*~uoOrHhP`Yzift$R25M%c^9AV~i)ZgkdrcvFAxi7dqb9fQdT@I7g7{OFT|wr>)0 z@^+SOsV~ny#$1`X7MIOl2{i8+BJCN_7v{m#mLM5*oB$zAxbZ@s_H-fRtG{yS+71vu|iU={u z34TC|K<_se>GaRs^1-p95*R%0JWJ?1wd(lp3zxg988Z`p2-)g^JopTX)GB$p~2DX*Tu!(zbNtWD1d=O zbpB8pM-~r$9e+BsUsWPqEqXoP>k|q&#HYSbWc>Mb8m9Nkj`|=jJI8N-=76}GxcOcg zG?JQs>^He&u765E{#WVpCj&{4f&x>s9X@QTYNc=X{y^ghbeL=X)O?ULnP)*;4GV*g z$m(Q^4EWJp5m#5WV8?iwY5gxlzK)a=ao~-|=%918t@OW+0|91=k?ymAzuLdiD?_DK z8$BM0Yo}bVmf3u;E_E-4f2pNNXAX>x12oEGJ-wt*aG+BK^+iFQ8xY_Os0Kv*ygylJ|ev zXsjDV2}Q(y*(a4uypgSi8KZwgy+VkDXZO0w4CauufR6MK2Ri1e{rREuMHP?RRrr%y zAVQQyK}$j`v&d8)zK!Iu=|AcG%YUSt2bIpjtl1$};feV$TqzsoqMot*(n$JI8<=;N z4(PAhcHmosu@ya@NJ*}?B#y_k9nXRIIkcfocVOL&>I3B?YUvYEx!xTUbNk3UTV-M> z^Qk)wO1RsPtRvxU~&9(?V>1H%G$*6RMxRuvK2!a{P;?U0DF@GjwLCx(vd z)m)ggTw&X`&a6Lt(O;l&8p$7MTjnXM<0rHBpA|GJH_RGr1A$NctEB)Zi4Wr2~|e;Cij~UAuKj{=j$=E3cJ7pP`GJ^{=CA9ReZZ zKhOjC27&YhQ=S-OFZ2f~uKeMkr#gZ#o0bfdMdAll=K9ur=HSL5tm`QILE{>{Kie;> zVDK<|b%?MS#;fEUO#6ntTjWT)vRKS6S?PZwJb@Y^uzB5YdUeZwPD~)Av`Y58Dy%3! zoRzF;%=`>Z*#TV(F!3}_iA;B0AerNx&oJIpUxCrLZv#jn_9oOFkMbEsvJR)!x7j4j zczIx+%ZZ_h;W|!ugFl9o*KzURs?;?W;#Qd4RZG7s^-@Hn#QL|sRGH@8Dy2*PsnBGy z%<1-h(2n`9L6Sco+D^P{e|IZO#{M!|A-GQed3JRPt7zlN*ed1>9wldA9Dih!6#XqY zLjsId3EBg=V)7C^}>F;%{#m59j?hgYa_aOA#HBC{(~B zHwyC3gZtt_(}^(+(;aVvHeL2-hv6#AQVR0+gZry=ACek-VZd@+ho)saty;}G&Eow zplu}^2!a~Y2`z58irlrA02ww&)|hv}>|V;B?j+|NcKhmWfz?_y0 z&55=hzC-d=Uq8q@vOeH)zGSTbyJfoUCGfl+&zD@}$WZirb7||?IRiXFDZESOpfubl zWPd1?f6<*09#t!5XGZ=aOLX1Y>a0x&+Ky*OJWkQxO4IOYO~l#6LDMd(MNW%QC*(H% zIh#)woCZ{dkRz4-F~*9E-0uiecwg{{yeRM9&C^Y%fMhn%RQ-gfT{4GkTz(m`$f+Teisq|F$)urK-WF0Ph$`$P4oKG(M#N zV|;j<3Yv=!Hkd2!KLFLj)RG`%Q8v!y-uvEd@wSO%0bP_TE>(zXV~p7SGwlAWy)C%9 zJ&}ImTs@#D$oeIA6Oq)8L137)!>rI6T9}5{YqeC=wLkVuU;6Jq)WOc=?3bk`?=)B> zZpTS05s}|QEOhan2J4*wr{Th7B22?n3;Wj9)_4D{?Kh^ZdVk+Ed0cuZSb|~+VhsO6 z#=(@u!>goZO3@MfNlJxq6W#um9^Z)U$pOwRKZ?+Z6;xgQ{bXa@gKDVYptO(_r<(}r z?Wtj-%N-3W7;xF*LElkkLJ24vD{mLT{dEkKLgh-xK2DMB2NmbZKjBJXGeyP6fcve@ zy6Gpp@EmwZktX#KD*{aI{Y3UnzyJfH(n52b^bufe5nwDXQvEqS^WVt&!5ZIz!Dj%4 zJb7$0yZAxoDE0%l$~gj{KdU)WHrHwM=&1{OuA5o)KcRcCBw<`8a=OQAJM{bFZ~FQP zC4eP%DmdpJz(RTIxqHBo48@WDL_u7Te*vZz2xt0HOz(4{HB4ahx|6`i5FB4=kyYEV zy%zO};aQK|4WH7YpP+s-8gQY#_6E@(_X;p@*)H-;R}8-bpj^(By?PeTkY)(#kvr;B z^74N^!yL{i7RuZt`Y@gk=I@MzPr4*{nYS;1&B{ES_+tUf7TEa*woU{=A?()Q-+&^C zI2(IEqu+sYh;3kF%215$e}7;T!2f;R@@Ue*^xk2jsyR zpGwCI-Pgggt?>yi`v3btrYAligJRy21_^hE+n&?3jocp;MfBV6P4A}0~%qF?vGmQnUYKEn?H+v;d| zZF+?S4Hww6`NL_2EC9?!Vln(eRBUbV-z@9;o&Hg~eYXQd6l|c<-X_%IdRY?vki?|1 zdBuN)8!iz`_eT#RtebA~3zGChqkY;7`nRl=9TyehSfG8X_!-)mN5C5+ghw+Jg)@n9 zFY*f{`k@0PGJ%7>*avTlP#fgHG+SS|S;z;H!!o;#;D2*+ktV@OIr2bn5EiSB%1xMH z1)3->98M~51OMQ;_4|7wQI~?Z-hcmtBo~!I;C~e{|bAYAj zk*vfuc3|Sf7B{=!&Gio)o!hc@k>G^uW}cvVAaNbJZY|9wX@m2Pzn^~+4m#6CP>4FC zvU?Mc{Dqr;JpTu2MiJ8ZSSCqtB26NgOl0I!;V~c;^BIObd})4c_WK2jte^S=XAO|v zj@BBwk&276YkGh)B!ayb2cTw7kzxiu8Jxhq$bYI9BJv-$ML{0$VILZ-gqw456$M8Z zd*t>GS80%!0c&;u<$sx1SqBBl?{p36&u#)m0^A&#)8SnRAR%Era-5#Xi21)u2ks-* z{eEJ+N^;Qnr9y3+)xXXQ$X{aD`U&}KD)mKf+Npc*O5FR)PLXpzyYS-pzu(;4jX)2DrQ}XbkO`*7{1On zIJf#a5`VC75QGl(s&QcV8F7~}cj%hp#o{1BEJIS>}>&}>Z{VUgI46nf2n z_y0Y78+;ydiNMC~_3gv|dGpPTzRqRoz-8Ih-54A*3+oIZV{(c@<~LZ{Fw_^ zc8nhaN&W|*qiY8a{h1W@0>K{BJ-9(0m;`5p5;A2ZGe4#MIdy-|VBg61gO#_rDgv|S zkl~W_+9v=+QEXfNen@B!SH%*QU08`f2f+Lq(XxFg^`MAg5i!fS*;6&k)&{v2%m zrcQpO7mOY7k(5j;m4dl`(cGtgT+sgoWj{W;)+0H14rdxRk?u4LvhD1?j?VkpA`cGjI`YxySjO3+9{ip3#&-|dG>WAMi}}xt(2ZbL8q{o7qO<4X zHD?_uSMQ8<*$cRakP>z7&G4Oe!F#>c?HR6A1P{z)h~` zDtSJVK$8v#T3zUoLvv~KY~s9sW7=;dlgK6}YBvy&rr*m{bMI~qeZ{7pn3PKZ5pAJ{ z++B%a{M$5Hhs~p9-+Vw`8M&pCVzjqk7nxO8=Q*q(i+9E*E|#Vg*N<1?0C3|fbj|Tc zC7IkKMDT1zZ_Wl0ZB;~Asmaq6Gf^V2(IXoOlop(cn})f4jLDc;pFltpPm}#gat*z! zh-OaLsnGxCS6t(wiQM)LTh9Xi6bq9TbJ!gLBOFmYeipEH@OREb65*W$w<)p|%Unew z55H8;PS{QVx8yg`!1;pJ%UY}^q5p_g*Bnx!_VOi?6E1j~Y)n?sMk}HyoIA%Uz=4!h zB~OS3erIBi5V=E_;Tu_E8267){0GFwNWgOlZkc|&_ybIeNbDXQjTwFwxURwQi)XNe z6Y&5O!gWp@s>xe*G9^^;imX5B+ylV*d(1YKek2;W6kc`K1|KtE zaVdDK8$&ax$kTksrh-qo#!-@IDW*no7@NQ5&ij^K!EnAczrW$X+S=(MkWq2oP zAn^8{$VP4)Dqab``yOTZ=8s9};d~}R?}j1jNNm8N-hUfRrYAc9B|^uOSoXyn-VS_p z<)R`Eab5ip1$YpjsNtCe>LDBv8&#tJ_W!|V6$B43R(8a@aPKB84fMZIJ{kZo(4>fo zL?}a_sW7wEjU%p{zyb9o1Yd3O@Jpp6hN}c8Ghg5e4x-=qu9gH6ksntMmpcQT_FUb( zd8<8F;idS%0xE^O;KE=cFo=oRpdl3mfOey=pC3EJ)QoqB9JDBNGh55R7Ksz1478b5 zQ=R_pi9FC|;cd3+M#nik9=U^(kgS^ohQRO?BAXcH6F-))KEideip@Qc$UMB8`6L|nCE4L*5 z4J-gn6@mcvL1r<5{Y(nFczjfdEiG*d=>5Av!1);tyCV1tkCg~5vhH$R%FS@7IsA_E zp473><5VFoRpV>R7H$UY{&Xac(`XxuHlb!c9`S1vCOV_B$IOz8%EBBOnmZj`f+xmm zBQMZpRP&qURqysACW3u@mEgK=IJJft?+#6x-m}UKo{3Ay!hF9Bt>c4g!TsYlfQT-%oDbPNSMJE6) zz`nHjn!3w&tY^L_QeHP!oa4ZocWudi&bOU(cOzP)d{&yz4u>rNO5ktYY^cd3e_bT@ zYI?_Hb&I2W-VHzW*ZbCwb-gM{q+F93U z(u-NMs%3wUEms6vz8?m)jEfH}B>0p*7HFp9DMJZ_FnDmDs#Zxr$B?!eiKE>aT^_r; ziTUof{6gvf2TOF|+ekMJ>Xp~zV79eq!`)HH5sJI~6#5;(p#l+F0K8(ptIEjX8QHv83w_PG)2<_^K*O}x=J>1y;?CHtX9vhPTCXWKg)$&!%)le04mpFWs`(X&3^Su9Ix}RDt9#e5xY+(5R#+a4A1Vgd)GZTZJstWl|3J-Q( z8=k2lZAYG_HrsCY14rpU%ulTx;_k8)6@J58GDOrdVl_4H3K*$x`^c3s;NP+o?wcH@ zuI{4AVA71+spdD$pX4&sK9be%rGSqNZ zr@J$K_*or1d>?i=rT}#T!+7A$+YCK-Iq4obk?E^;!`=lb>-coc)?fpNp%%|>ce_;l z7ktdCu_{Je%W=!EEUGLF4n1`$1`Fb;D*jeP!^J-09tP1bPLd9>M0+ua3X81{Odl}I znbdI`i8h_}zrDj|b)}^FX(@L}2dJG7^*`&(ruew@SKugbaY+}r8b^rd0C!8;ys$~q)47do}E!+c5 z+hW^t=4ML*w997dQ}d`>>%v)EtBuB-6;EDV(tIeIV7RM8%IKu(D`9!=g;(#I%-~vI z-Uj#!C+OuTFRmU|?)@X~TP*jG?+)!oFn)oc3*-mr_oAtNxG^{F_Owgcf7yxYuxjsV zxgCA@^2W+arD}xGrgz!p3%=&X zqS7?QvE4>v^ZmQ(Df06tn+h!^Dbq{tO;;auXUtFxv0J@k(d^{&;iHSwbIoK-5L<~V zGb6?HXFj9JP>M4tgW7YCw4GP@_JZS@BTEs8nF&fS*dXvK8uPq(-vyn7i{thi>s z)-O2P;-NF#U))#hBUVx5gD529oYNC67QwUX%kI++$y{Zv)LrCc;wRZfP9*o;_9&xy z!$BQvJU^tO*IJqE&}F}h4Ya|uKAsD^Q#d=>L27mmashphNte;Jju88&G_m}aUrNywBoMohChz_}8W&~}t+ZMv=Iol5;F{c~KHX_K7FLz8_KW|VU! zbqvj~eC6nxHSIOhxEl2H`};?(Cww@)WEzYfiV}@z?mF-SosP1rb5(7Q6k9r37uxWp zxuf$|p21ptwH$3pXtr?>!3>338@05PX>O}p;@5kYWd&@eKJ63Eg6(H7>Rw#B!OWPf z9Z5bYjh!yNlRwfHyt8ChVC`^wq%;Tmi%E)e!U31%NuBJ@#T&Y^4%Z+0duv8CuJ;09 z*B0q*E@3S^WSc%>50o`w7-nu6XWY2oe|V0}Q|YS4ZR2#_MbURJ>Z>x3)j6vf$SlPX zj_1m<(YAqM|aF#Zc{zFgfa=z;Ly~FLQ)on273>(ZBc47sXjWi$gw&Lfqs%L zR!2MPbvQ2FZ?%^q6p`*;b^K5}RQ4!ZyLMDfn$UG;x1IBHFIhfe#H$?=v?fmGZ{}XD zGBP?EP+=|$m)6m)8|bHdC^_nlmLz)xWJMT+Z(VzvRrgFaLx#l8piNH5I$vA}pHb@Fwn;naAL)$x(9+lOwr zRG*xlQQamdWAf37`a*(Vz$a(v>JhQ?)#DR0<5uruqWt&Bby}<#c;R`~6$ZSs7Jhl) zRKrZ3n1~785X$n?t)xW16r)x5#$w)4wBE0E(t~D^9zG-kR^!fe_ zo`KryiEZ`{dQKCWW3MfGqtdCue4G02pAGd!{G=t!(j^}Ohju&Rx6k(+P30}^m&;`L z7LK1yFVeQ}x|CRfrA@Qbnzg=PgR*}Uv#`;~hd+j7Oqy?;f?SVWTbP>T!*@w9qgLLe z_$b{<$X_sho8G!wvMt!3H5lu?nx&N>DV};m+{}2%z@Xc(_XbT-kh&qu73POb@;tK? zB@6tym~!{{Kfc&=(mcHDPtkL`((C@?07^WYIHg#R*94rL7tx7?oL(<(hHx&$K3mB-6K2wBCcSjmMI2kielaKNYD=&YO$N{S zLi5X^xOV;YR|Vl`=gj6EE}CfI+3XZwzCuMV_8L2WSh=iDhW$#;tEd80+S`CL7yQO; zyenT0x+D}KZXsWO+*b3BuBV6~9T;=lAh2?GK-iO9p{$y^?f%NzjC<$A=g+-5yE~TN z=>w)VVZyY;h=FGD;_{9Axk=S;=Ct^$PK|`W^+~^w!#Jd2rK@4pYSL;}MwfYk?oLa5 zD{Nrv8w)h5-Tm0?Y2KGn-)ll z9YC#W`9vwVaxU3{1uQ=W{QmfN_h8P_7A2iyVU zmBrnvx4&%1n&U~V(ERi9EUWiJv)9van)Pt*?qFH=-&6JW{kTqRvYgm-+<3S`y}lFT zO;~jCd90vZO0Oq2gi(3Ui7)e3WzP@lC@8EIFMYUMyrkFcv|K*KJ-uwC@4{R^T|G=& z!IgXqyK;S{$}2k5DN|)4eou$g4k>q!%S3Wh((VbSxnmKJf#I^W^nKlS7#g5Mtv=^* zkA3FRGt(2FiAnBn9nz|BUK;A8{t)KCp~(AjjPZ=kl$zc2#)w^lnPh<7n7Nz^;oO#k z%ycRrR!wHixTiXO`uv(Ne0VXW8GzP}atcn@&fvKj=nUp4#U*7bD7$n`bXEtuFzQGa5L*D1cE z?A7&#oxXxI_jjs~mQ4iBW!s&qKRV~lj~~_xKt!#Rsu$e5lms|3Kqj=Q%09u z`Fur_sDow3uJE9fZe>0@qqfU*SjJSF!{a48gM5~UT+vs{owc$Oo~^vDV;ZN(aT=5& zEbXwY+J{7rY4U1BMWz!4s1%nM7uAh?Wrd|I-Z`xm`*8Q4GP*g&g04IkO(DEmcp&bwFlyTiEAq%1*te8E&he=_cV6;UF;g)^=CNZzw~8e5%`)rvs>aA0hIu)jcpYpV zCpiBxxo^fYp)${5s6-@r$B`)Xva0~~*;|<0FK<hiWBAn({$hhlsjBXIhFEV84h6slDdR0de zT3xk!-&jSBlZUo5 z-#m1|z|m}1{=50BmRVD?a?z=Y3a>DXSUrLbUv`B&IFUxCt>q}7Ua z-LO;G5*q^Eqxe!h#BR)Ct0Hwd*>}dM5SK90&TqQ+o{TBWPWIg82HC`qXDkJ>O+H2z z>!i+NKjz6F5|Lk?e%yCGY(~?-E1z-J7IF4zW-ZXN_aD1wOS*`#FQEgpoxRTccb*DX z7FL;=@2Pls!3R^aB<+;mW&AD!ljL^xteqK1T^`=&A1{mip4p&3{-pRl>Xj-m=LM`^ zw3+uq>X0|KBcgNSG_=OG6FzP`tU;`<*cxP#akxg zCQ~o28l*8^J#e<|g3OY^dOR~eCeZE7MWtfsJ3bN3kav=_o+agsgv_GjA~B)f_0}kp zV9iyA=I$vUky{X^I*lTuzG?Py zx${s9-RS5XD+!V(S7xiw`-RBouV@c)>;jO6^I~h`HD@MBrBEaBHfXzi?Xw^C?mxKoh=6u;V|39W*@#nUZlbmK<(aSY!sliX%at!HTs~pR#%w-x zznQRvokza=mNcWIAS;p$yC_tm*V>*g)1E!yL|5@HO_ypwQSifaXD-q3dfu92E1{(= zx}R<&#qVix7!&OOu!EKW^QtE-I6*j8l|#CF7**u*`i1@DVZ_zSI=rV#$a^APIoUy) ztnt;87c-KhMTY{=X&TH9`|azkXLrw)?8%<1&NHRSs2}g+cdl(JK+QBwa|oEI&_28> z)gw1@D1s1kimOS*B=hEB@!>ysz9ks))+X}9j45&&N)4JCznrldjSD%paj?L3l>DPX zi(C;GSh&srnS8#^V43`Ar%W#a6^=LU7#ER4JGCqvBCmaUO@MMK_ew74)nenKJd4TB z=v&EYFf&>*csQZR^w~=}g#1l>ik{U(7rAlBnOmz%)77m*XMVp84)Am(k9rPv{GAux zGesA!+$n3v$u9!jLv%bPpvW6;WwCrcN|68RDor1#bSY&TqzEM z&#%H?Kq$c4YDNQDIGw^Mfyz)P#EBR}^WVan-HsOZ@n%cNj#h=X=rvom-4Kaev{)wG zh-i<^8*!mhBk6|><=MW%L-J+MJh;e<8I6e4gLR%h95l769a>vu?P8cby-TpSZ@lK5;nGa&sVY%) zjqSkX(933Fr=$rrQXQ#Y-sx3?$nhYVY7y47P95}ovDI#~fV|~<&WZJDm1Iv}b(0Ws z!3U^}!Dnvdflc4N#J3C0PLKQL-1VE(oF1x}_=P4mjaCSVI4ZWS#g?sb?CDDAm5?dEWme0X0*}iBKg+>93 z+8gONy0u*vCKIb@*h-%#&wLWocEs+j)sJ=)xEYXU^~7M3GVN2|=x71#knUESyBPl|Y|Gk%KC{DGS!{!l0vXQ5U|P-IJv<&wOLCpVAb-5w zhw11KNh{(YFw{!V5B(?4HpzY9t*}h4n0VvkYWhxqT}$q_KBMisW2d zq96r?LA2`3=-6S8L#GqOEG^kn3N$K9m5JWU#Yal+Vu*Hm0N*ONS-3%El$xJ%^Jb7m zmSnyQWcep+YV`Y31-iUka@Q;d#g-SEJ$e-&iyA8g$o{F;M)MsUruSSK^ogUZDaeOKX-Idks$rOF{wv!-TnoDb-S z+Bk(cOv+BS4r!+?%D)C7RlON1CT8oT;4w!r*koD$u2Ri~*Zy$V`tW z^@nr&We=3U>##1*bn$^i-VrKw=ZbNEk$7>GBwqa^3x)bcK|z|r!#r2%I=B*8sS z2ICCF3ty1vkxL6}yxb#aupP5frkl7rNT{bxiT8?hN&Ny{jwM~USpwCV-@T}MXJx~D z=h=%ImiIP=@6gdJ*mg6Ez7gfpa(yk;U0N*kpKsEx9IX;t=n0(kslTZm zuspwi8zU6ZWrbvwOq)7`JPR}1}jVou#& zD^R&nayo)Ps-H>N3RB>P<3jjHYAGL-8WZspCS8jSr!PW0MK_71!6* znwmVTJ}{-D0A;0|-_P|}S3Zw->>85$udmMA2MLmM*oEY$Wc&{5cNWD6X4oOoF&<>Z zCCYzQ(;_zTPNCaZP=8vNGpgqmxq>y5+r4Q^AjbH-%AnXIwAWQ!>g=W+QMRVUA4H9^p_*U%3R*q%R2E>H5MRj*jQ?6Qm635PfHXGlLE zWJ}02;ve$IvnidS8ok5c%7tz`!S{==QoiJxJ9$hTEYGa`z~|GJOX{?4pBZv@SmXY(6a+e?ki zJU?flQ>QK`Vn^9Zi%6^d(6AjIeT5q`?aAGU(pxez2zzHBVA~1|Hgi%xziCk+b)xg%H1(+zbl5F$&5ih75n&ix_GOKz~ ztLt^$%$X+6zntcyDMpIf?Xx2R1iI1u zeNov-HKTuqJ=sXu#8v(pJLFrC|*%!T7FLy2f-wJ&ga4J zs&NHH9hMRCq8@S3EjhAIV^{j`b5-2aBZ0hZ_U$>ut7Jvhi%;Y+f!#keADu$qG!bI# zVtMg;*OyhcT!)&-#9sg1y%&8t#7|sRwJ1+Au57qL5N5 zB+PjhTHmx%g_ObG3N==qSK626dx`+lP#Je}??wUMn7jOk298lxXbwDkrvjXEQ6fd# z!&qf)7h1*YG_@xA-pV%F=Fe0j3=9I@tJk1B|6#H>c&==~SN7S%8Kn9HmNq>!Kl0Ko z*{rpf6{a4dWP;pdqex=X&wou3Ya`<-BECA`9cb%DncU4KIuT<`7llTud8;QnNm`Yo z>9V!yrqa>L`E0};2PZM^+|_+9l^Ag-8taCM?IyG(LBHrtC{4i%fq}t;qZf^pa?ftx2X0d+hm0c8}T|Fyl(M5Di^VP3@m7J%sb?SpIvrQZzbMn;*eK;S7$Ro;zQom{dc}u-%EbDT zcOEE@NS$ETjn*nl8fi*Is-rz26t|o};oS7g9DJs$)6UWKsF*M$fS~vlw#vf>NgdV2 z+)l{h|BXu1)MGrme+f;A82BsSqILsu^wY9153Mm?e8GI~<+MPTu2x#FUP$mirc~}0 zTEc+OaskpWaf0ibZz62g@1AAQ&Ld&Ym{g0ePxWu)gXGr-DMH;7@df-k=gQm3J}~MB zzP{8Wm$_u;H!k3WT?lw#WT5+{ZGbdZBzsi+I%>6pm84zDk~*V)gsou5R<)+W3+PHK1vB;jCNxl(JP;a9=IZ~_ z-1P`7c*^_=B{kNEK3!FO$+4$bAF_(tVJn@yUk4u>O?ac`gpVzuhYwr(I6K)?tmaL3 zMI_cX?KX>%+b%>MYG=zm@MVFz+f%8zi$mmG(iDlzhsd>zSMwd6Yu0CW<@904&C9bB zI_USy&$y4LpSde9tY^7qGNgCt{d`?}1Zg4XLjkX7Z<+2tP-4`3sH5@~YbwDS(T|wR zl9Vs>c%9}h8Ss@f=#eWN2~i{~A6!NpO+W zE{nK;Qk*fM$?z?5U~rykJ&$@md z;jla&K_pWv+5DV=LLKsaeg1Fct45#UJ*zwPcFke5q;D3=Ju~NTOKZg*_0W6P25$jV zf3-ucTribK?$n7rE!mT_^%W@XTn%R9Xf0L)hK*`GX1i<1LktC;4PuK0Bi6dSNM@$1 z^Gnqyastp%qJje>sJ7ra)bldSqL%R8*X`adQ1})<3DG@%qeY(alp-vYa%%a2I zyQEF{;iYrs4`N!z3c7drDIUK_;x1+4wR?_pF>0l_&?Z#dDhn#fiH%hk^qNhO+VpIJ zTkhv?Hv@q}JA7ra=qdiLBw-<+v;ejQnYtpuxrJ5d2 z@E7Y49j-Md<4OI|o-v>@Aw^9w`fPQz`OVyi@#Lz&&H!w8THDAU>>8q}6m+YjJi9Gf zauXD)rJH1+qIg3#u8Auy={@QLfiB=_~&|E3X7pqo0IY4Kt@&)$~mk22hdBzB=&&!bvU$ z+u`!@ISO9HuhDH7(xxKY9yP&`HTQD-y+VYhLw$IQX}WVs^@wcOh*uZO?>AAhST<~< z(U+*?nxF_DGB)o+^lCIvdh`^~@)^(4oD<^b%wCMw(Po*^hdRq6ZU{y^Y&vu$H14eA zmMmRWPt`vqvfQXsQ{_1QnaV78+8Mj#HWp7~(`9a-yhC^-9f|Iag&Eh`qP?D$i@q1R2ts+B`$AYbfLmei8C0pm$1tB0<@Yg}$rU(846 zw%=4`x&wNwcfo*+>!DfzcDD4Zy2nxgg4z`y192`*#d7C*Bu_=9YVFbIe1*n=B#Luf z=vY`$h@{s64PH7(7u8xeqLZtUdOTg0OL4cZAvBgfck6n!S}(jb++Y3JndM^)Ip(>u zjB6Kk-N|^&8jsn>>g8J+@8Mf>pmakYQAFyMNn5U0<`54ESq(LbFg~tK6Mx(IjJimf zO5L`r#q`Y`ospx?WCbi8&+o}zCYL42Gidvk2%5=>OuEk#l}{d2u-*%R9tv}L9cC$YYQUk{OF?Ylw=Ljq?}UCyY`<`mJXdCOWOlvrys zl#kxGI@Zs{aw0tj+_z$CE(l*tt6j`Zx*OdP0(dN zmV71#F8zaVFqoe$z*G$sHP*I#t$syOw;)bXF?KKE^wYyUOTBeOcpea;PIPNJv^E zrq*|ej(Yb#A#>5N;--V;!>^IOKAORqX;=PK^>3-T;_BX`&Vj0@qJGZ3RaNicddeM> za$&MQ!UHKN*F^-#i>=sTtw*4oB!V<=a9f9U#h@^D4j-1dD?aml_>Hs*l}ntho^JZC zYp&`eS(1Q4^w=@fz#LPUS>6g~U18YX!{VR221J*Pc}jCEtNp#AqWl+ar_pmdMZ{%3 zt@^0M+K8~k7dgwLB9o=+YmcRvQG))ehP{C|M_C@HFHcn@a4$b>)@?I*{kh0Mnrzq; z8d#0TxpJ0oTCYL(CY_6#abBQa-y<5)B(R@u74jd8Z0k-!B@qeH&3L)q+!xOIy+w|ms`2?otEpgw zCq&$7;FI)<+!q=i4kqM@{npNsp+rttL}{b<^i2Y3wtr&w1Y|^s7s@^P<75!|b>h_=# zPxBRv7P*rY8Hzk?+cuiY zjnsMK02!G~Z9McIh4Sst+k)2GN$<}BQ&<;|2jC2ANDM(k`^c#=VaI0$C}DQPuGd#~ zKx6R{Je#Ss6O{oQb<;+#_UGjr*R1_8H)L}ZT}MpZF>=|N%UpUmE4wy z7$uc*Ll)>;6|jvqLGVyoi=I~!#&WN#G)y>LVI2~~NgfRI0?JU5n(}07Mv+eauI{0p zh?U?Jj5JeKe4{6x@YY-NTsQ|FAGAchJ_;QRC3iS*Zt@H1hdAI6IZEoX8rar_6kgGi zv4?RlaSJZ-eZ(s6ba-iz^}ZJcC_@#&(*N$b#y#HEdLQJ4<(_20Xc{X5?hVylk8!A3 z3X^1Ii;%nvB``c;%gt%Zn)JVR|gf6(?(~~|C^_9Q9LXS_|c4=XoZo|bcqWO(J6C+vm2MY z!`Ic|FkK6He~LUz+@$$_Vls~orHahN#SiXdf5vCw=RlgjNZgeWg&wb1ch;aCIKRCFwTxyZq2Z@^VV;^;K!2X5!t)>-7A*|jp4c!dq0HC9W7~C1WAPUe*zBhPo z;brcRNrom~ahL&7FFCeF?^z-gC@_$@I4Bpsh)9%+mnZIWl{O@~C~|+)dz-5@Wel{d z3;^adl^<3896$dIn!*Y|6qhe4`8$&j40lbb+_Bu)g0{`|BCzH|U`;-f2Iw((NtL1K zMOpJl|P7P6E;86ouqO1IRS-9uLz`IN&IR0)J11Xq>+*u|zU(#F#k(sxRG9 zkph21KaO5m2jVYuLcCLh3StjFy??_v;fC9}Rw1fhwJ!ARU5R}kL6Cyt3+OAhJfw|( z62z4Xf^XCz5Lce(qPYIbC^A;B`MmZB(Un|@sv_&lqWG9AD{;IMTLs4o!An&#_6VLG z1*DG4;x^4Gd-}rX7JZg5y{x~tf54WDx(6l^UV~0Rh-R6sP#qcUnQ4Myk zvOW^b#Bdn6oxpTt=birX`Z!4W3#s99$b$^7%X+|rh}uVv-15QIsmnw}o#pcHDxXVS z0P|RWg#csqp|6e^hXTKF=qMtp^py2ih^$_Mt0?yYdmM+(9|M3H92?t>iBkgL^Ovs* zP*}Aqi#T`rg)=4SL9@j6_XW|o?jeT}=j}0BI1b8oyeQDPZ^3%Q+Ee4`r~c3&&d$*M zW7JgX$O+-!vXp9VcRj?_B>xEDEW#A4M#gUc;QSLkKLlUcbtHhCiM+@Y*59_n?xKw{VG_|D*9c-=t! z%jsAAfCzD{?uFzrG~l!@r)0JQ=g}x^NG(6rIYc$6ZfPYd38=j@W23RwUx?Cz1 zt_w!U>TN<7j=*j}YZi>d^E6G7bR1-RO1jl^B*OVXSetgbIwH#`Y*s39H8QNA0P}&Y zp!ml5N$&|T&r1e=+bV6yZ^?o$kb0Ua3~>}xZIW>v1sZa2eRiBbc@B@B2^ib>imS*C z#mp@$Ieaw;>~u}YK^)(I7sm|gyIvFsBJ&XYLkm#+7MYuN;BEZHKagqt z6nEs5hE{eQx`gk6De;EWdu3fE4g##7Bn%xN!8yK}o6P&KpA%yS+&rtPos1LnxC$fg zqWgKiqj*Q*99FeGcs8s$mivD}&EPV6$}tGA+L#m&%8Vw*-^AUcEd-SDz5iRV4l-_k zMZ?-vgt9(!>u)vsfwCAb1QaEC+|?qkbR-~{*K1`nfjhV>asEk5ZY0Y3A+M1`-UeUVbVwqg>zk-wiGnX! zvw6UDaAX7Ss;ysOFQRqIs{`c?-)Kp0+FISl4$8k$&y=Yq3ck?hr`;o$eS6e%<3)c3 zn029y*$uQ$y~G^3$)xqeG2dtrt_T5Tibyg*!`yi2f9B&(xNKaunB=B#yG;`mS+?)! z6NzlFLI%oJXY}!GgdZqH{}K!v`K%@gHYyq2m$(DZiLJ^yu*rZ7n}a^3mmA-X&$Ha|su{8CkkmMX#hqno%CxUl9M7dD3hBkXw>TY%d0rBUdA zMjbtZy2w3}r*Y58(g4&21Qcu|(t|GuJ05~bb#ooEUogqITWu}_!ukVY4}nBBBlb`$}oGoS@O z`*#3_y6^(<*-3jc99Q8NPJyWXJD;^7>!z0MM>lO!9*~1$Fw&+)^z3kr`>tgjxdkZB zFLUO&6kKPge<9C0r#T^t%O_F`m%6a82NE&P#M^E$gXTlytJ(>GiB7lNa`ZuD^&aGW z&(0>NPVmuUm-Yp3BJi*VNDgWYZ7_?hmt!?#HIHWfbd4OBi2ouu;fKF()^WU>_s!@^ zxPyfmQP4s)CjxT|bH>NwCe>Wy!S|^5TMX5#Ks3f{d&q#irr5cOH*vA?Q?v0yhEkC2 zMC~~mn-@XBnmTxOT%ks&10YZ-6(0fvC84e7bJi`;ad|k#PA-1)hWJuArb-YmOBC7X z6c^tB(8M3v`9Es}Pf*t0l$()Z6$dnw`+|K>1L*`szw`Su6#Z^+%9PfqHq0=D@Z*ij_uL*J4x_Vxt(*HFMsVbqN|=DEBay| zQ9^S5*eAUwxLEoZiCX{YyRUFK0r0qaLKg%=i4#1mPo#Rb^bjgW7vE~n)`c1vN1XU3 zjITfKpHnCIb^pVm`{GD;m;Bv;?WYJL>qD1< ztLk{sD)lJtCH}EcVjlb_^z~A_Pj2PQxcl9)dOH9}&=3yTyK$-f+_eVbkkVgqb+0q@ zMAKJ+njHNDfBcT0ZZ$;+B&>SZ#o6U+KspODDa0Zi8(U}84l>4kVeiteY`<=utV4ij zewVT1F$il@t`siksuvh*A1d`9AD0wD&kpk=CS1!F^Sg)ty@2nU84ggP?~`_c*YYFe zi%5DGvIFVs;0q`A)7M*2Q()`M)Ybm@MaK##_-%~4%b!$09i2fo$A;*(d#u{cpdua4 zRF9U8S%2pauMK9*+z`cYM%ds{Yqt*W+r&li{JAsQy*A<{9;#A{rdJtx$hqpD?Dn~! z9sop*P83|dG{%S4lm75ppZlLJ9Fe}U!tbNML2=y4fVXFts>Huj6&)5%sa}g&*F+RM zJ9j#Ip-8l9p_3uA>UiyRECT8j&CHj3-%Chf7OVNvrAXL}U~ak#_<7XS;Lph{P#&w3 z*4ut}`@y!XGm`m5qPpEaJJrRJ9h1Q(Hn(8MamOZ#MUk$BJ!9J~32`4yul(_A?^530 zz{Z;GIN@_9+u;HZ^}K0o7EM!vO!NWR?MeUFoXaSPi$n5*pEnQAUI)LEsZRs^&B^Ea z^CtEDX1urhfyK~<_98ecZ+LDh@?58-x{nTv1`7kQ>53G~IXFqk%ERmW*X{Vz+{#^j z9AmN{1y+5ltb>ghHMFVJ+o~sPeeTCu@KOgAjU;qWKG?~81CC`q_Ye-RYkaTzTy<%6 z#WK2(Gjdam`=-0Y4fC$8tccN!XW4W9kS8@<3C)nmyi)zfHdDPNY1uY@#&*$JE7vtV z&${npa)1JR<)pdapH5*#&r>=~^s^njv!Mizkh(FZs@<6RY9-B*)3q4Q_l`o#R(nhX zu)?KiU2)mdU|{ufj;t28By1A@7wns z*2%O?q^=?P4^VUn1^vxFPk_dLJ9_@wk|+Kisr+q$k3C02ySGH0JG5IiWjl-sWNm$d zWPM+%0J^wvAmi^uQ{IB%0Os1)=x_PHp)c1`KQLJ9AtHF4ey_;&^t_9iTUKtNW8AO! zI`Wvml_lkgV>Fqe=^}fc-Vi$wcTfPRDWi*|jxpjpJG)~8OZum4tiCujuOXb0T zFoH|f!DyF=wDjZX&zG3$-64f`(1xHVTBNoUhKkkwO^hD|vw_CxgjH@r_h9IQ|NMTs zM*cbO6-yuYADH`=pDqFK)~{g3`xIrp1^ykk#>BvYu`ZGvboqXm#jwHP!Kk_cYG>2r z&_|}mA(np!PRn?mSH4!^BJXvSXklStXNp_}-hL=x`aH}mv&b!2jx(BIC>-%Y@1VY> znepU=-Gg0>je$G;|2#2r){;_5Nl88Xj9S2vo#L$C_G-E|#?3b)v#!-*h^dX&mz#z& z(AR!c-Em+4&Q!5&Gqq1nQuo_XS6=uJ)LgpRuzeJtFNu5m_!uE1wlRQz2NJf`z&x!Y zIh~!$3`4mwkXOzkZ$;A?GvjL#F_Ida8;RaYS$|Anv@a!BGQ(>;b)SMI!4E{p@9|sv z-3j(9e|d7g?YiVG1%V!|7_0F&Du2G!RTT6M?%f!maf){AD$Q-K zYb)?Rej7@t3T$s1?b>~FnJTdCfZgt|k8LhJX+}tEUS%Ws8o#n$P~%Un?+RQX6_eoU zyKJ8>?p2Re51hIwwQYN**qY?+@``50?<8x7mu&@SK;zcW=;%5vib}w{Jlj|-ONCu+ z6r=Jd9;ciam*8Ki->?~psn-ersgTep%VrN(@l+O~f&< zKq+<${k*AF@{U-N^kT6#OxmeFvC1{9wlvS;Ts$*pdX=fw#FEpu|L{`iasHjU^oZHd zz1@w;?Qq2EC*Yg4vPe$p&LYE|MtB5gVGPH*Tt&s;uvQE`wjg+!p#S@8!*=7``V?Ry zRy;vFwz@h4FL&C8Q1!GRBcztR5lCW!;ke?T^Vs-O#VmDB`LCtvXS~2$ytJz3zbvCu z@a5Up*Lxe4!tV(Ld%u2eBeN#mv2QefIT zelW@JE}NKwo4sr$Wp`!eYc{pz$vd(tx`gAjFVHt_xzZU7&CFih?SV0X9jV2a;E_oN zSC+J0MwWW^B}~^_ZJMiXyem~K-BI&pATZYKpvsbNp-WxcZ*Yc@u*jZ0_rHxfM4u3N zUU9K_KA)X~KeNhka6==;3;`?4j*Fl$A{sb*9BcH=-o1~uIb^e4;dK;M^EQn?S0N(R zFN(`Q3|k)V_X-WFEp6=$2wa+e0!noX!Z;w~%#cvN)GF)YbGc7iOJ5GW93x@JGFC33 zF+#dSRDU^JV>(dWA?#r@!ldK*+so;N^MPqfHeQLQ%$pjBtd|3Y1=BS;o6>Cm*z~_# zH2oU!H5##}wmu2~Z-$M@xAlNtI7-X8(hZYUF*O&voX;iT?HMxjIw-EALTLZ=jdU!B za8xu*=SR%f0qc>bXMiebU=Sm*{i6Vd3C5q2a_-fZzIeW^Hs@L^X2z)W zKN$R_YJ`)c@$&JBx|H(x7Ra%f8>s5OES^-2;A|0woelqn6{P=TKx2(HB}Oytp$h`}uw?@3%Z<<>Xqy77p} zs@M2UW{EpVq>SXxmP*ChN8h0ui=m<6s@%QszROSGeZ5UfM^wO5j-3WCK7ZL8`Shr* zF-&H^oc{HXUsq1G1PAZe$4IzV;F~SNYcT^QO(dlnA|l{vvReee4+TA(^tq1O+3a+5 z*@Vue8(J=a!1X-Nbthsz?}f0Y01%6qAn*~3;!mwYnPN%UL;C{cbs!Z?1-821e=T*t z9o@fBko1LT&;AX6jcY+8C$J~X2s4HKBsPRT0aNcMyqnI6gPq;DY}Da@5L#NV zCF*FOCUzVq+9lVcPMHy8g_W0wG?dg4{tDR42^P0Lo3iQv!e+Y0p=ai%pc+2v8SQJp|`ETlUFtt-%~Q4;s}ooi6QuP70Z{5<6778I>@~u zcy=sfwUtMDwQc7oR{r-3jjTQVNAn}t#EO^>a>^yqH@b^TNSyLIJa&-@!sH(qC7{6uR1rm$mzP;{WJnYy$}n3(d%a1#n5Ep`mw;aUecNr zXyge3AC1<2zVZkT$c;+DrL=-e(fgxPxU+E-4B^s4)>&U3$xw@l()z8j{=n*Ga<%w| zY;1fE&6@tbgQeEXBy$Zz@cc{Ei9)9km)8tB|^z_S)fmL&h_oV)3l=J%uAo zukm(15TtcNP&v}?*;j1VvHXk^2BvNR*IrD^pDLDgkJ~{AVgTzalFLe${&8XcN5jP9 z7+gaxKZ_Kv-t^=_b?C>Pr+Ytl&SZe>TREbte7?mv7q^7+urz{8Y^5 zb4Q%U5-Jq3Nz(o75q4Gj z>Okh1WB6csNp5cLx=bU6FYaCM#P*)>ef@%op-d@7yCg@ME8TEb6<|q$!JKcDPK|DW zger>QTt#FjK@y<&*#P>df-=A*hRS2jj)Fq&7Ft7U$A3?=5B%kq-(ES5E00^7{1X&1Nth*7Z3^RCBANIhC>Jh)+g z_rA%!wAZfvISU>5@2*j63mJ28uGI1D8NH(1xXZUc`F1Fe#{1BZ1)j__Nwn_`85}uY z;}IBgFfqDRIJ~%m4LpUsS{&(NgNPb#k1{sjwsUH5U$!RL&+PlQ9LtUWKiE(7ekyHl z9{bw!Z6`(seeNFKFPU(&>aprgUJ4n}ODWppj`P-QGgjNaADUxqkx#&SD;b`xsql1v zD4NNgTII?6QI-@DbnZA-*zHqW8qB_#cT5==Cg0z`tX_!pkAC@0cTk=R4o|J4LK`r8 zIZ=Mc!r0GR0CSbI4=DOp+vS4=Z0LFm0ftAmcdd_XkiFOk#wPlPz$tr6N)qWshf*zm zN*sCHIo`L9x<7eWr`;crC~w8Oj(d2A?40`Eks2o9GlCaIuQ{52(4bLxcH!%X0Iioh zHx4JWv#opx@|3-!Q~eb$|2WK(PLQN;6gA>Kb{nBZZwQq#iS|)5qQhtr)>6n^j4F=< zOP*!m^Cy6g_FA3|4)3O!FO0*ltUaXB`wUH~J6u+nze0_@(S3#QBu2Te%P9dQTTYQt za3gogl)+Av)uV6}q>LRO?OuLz$|*ui@pc=~am#JqWPejgVSi24*-Jvt-%68+83ldh z>5MBEmUN{x_dIhx#bL@v3DEe0V7GjA}p$h=xV$^k1VI$>jeh_c5G~+z2rRENK zF4ZQMC}1fD$1bQ5=m{1;_fzn%eR=0oC2VH=XodR7l ze<0fEjZ|E-^h55|gUXF^TquM#5#3+Tq@RRAnvXsr=GLpdO@0XWv$5Hov>KU`r{OB6@`4U^E z=SR3+wtM9ezVzK~LrN@?+h7YHp}0W@`aqn`$>Ji}7})dG+d+6W%I_2vG%!YT@rJ9oh<^!IoDiPNrUbSuZ0p6A8*hBAZ2Ev$%&e7lxW>umHOhP{P< zxN$~24atF|K@KEmW7ey+iU`YX?5p(tz5|2aPFbja#C5LBU+Y~eLPaVccam@y*kugaRU_87uKrSDOmCr*493{6H!Dlhp=VTE~&|9 zxtgNGCcl5mxG*L1)`yz9-{xk8;?I5lVi0}{>|8g~)er3eKE$E(joPxfU3`xh4r1n; zwwPM%W$oJ}owJH!&JB@@v+cShrxWP2`>3Yr5m#4g{63loiTlrzdy|MGZc?5>Ph{pT z+tLxTKURp_vzEHg-y|(I0F9;mu&o)w04+;CE+Lt zoD*!ThA5g4e%sZPVPi6Xc?m*|pr9{<=jiDgw>-cnZy;IU@Au0K`;|Rs3lV}gbl+U(n$I1VH~t@D;2AiJ77k0pKvgz92u7YwM4`;H*%k`pc6g!z&q6Q+6vm#J=5Ht_oa(9HZL*t*l zNGZSiL>R-Opfx#F^+y25dBycSNmlpQGME3rB7k#4ztGLt11EoGdP9zo&K zgP*QNjlS8v#Zch|PfqA+er*P8-|rCNb)(z;Vh1_ot@mYiJRnt^aujX~VVFajTK|cQ z;3p4Q_`d%GmdtH(yQ|1v?=A(##gw-ZX8aN9dEeqTGsOCr*X=Nx( zJ$(*ZQgGg-QFz6ZQ`9!WLZ9INNR?i>SoAtdF~pF*$wP!thb+M3rA8;|UXHE9Eq;1r zi0|}yN07)qd#R=Odr76~m*21)z{$+s6^>mzuavmCD`f`-YTJ z2%d=Ib%s19%_-!qpiyB)3~;Nr_?S6FWi}c$DWrDtmlrN^RJb=ZDzqAVS-szs)ltHq ziTI)O&Dv&mgBM7CS#q6ji|AS`}5%rN8Zx-m< z0Z@fkf|vALzg5h)oaL+y{MudyEKaew6}WjC#vw-`F7)D=rd#mX!j`}?TJ3O@75MiqJ!XoAhi8P58H`*P(+an(>O zzE}_QFbyjVu4hz_(?HVRhQQHsV`{=OQvERfoG5v53rnJ)VG?{N#OKhgrK!192;Tms zUM=Pisx~04+%R+z=nL7Sxmmg58}i7ZmJg}7T2xa!;1S{rLd<#sgqN26F(>~(9(Pm3 zTCKge#uov->QFeLN}uaa|0QVBym$QFKwZqtRY%!4wdGbG5gbUQQ};7kX%;`f2)016 zfqvu<_9rbsx8L1OCZDc>$QSEL&nePMk?qsp(NZ+#Ap7}J%E}rsXR^+oQ3Gu6qZxx! z1rXTtSGzn~|62$^vSz4&OMnWvOvaTI2l?qL@b~WB6I40%{6wONR+`ehuS|Yf=FZ+s zQfY$U96D@Sq=7zb1dJqmK0|6OfBc3v49(s^v_%`NFi}BH1!LCQ%%H@s%UNw~dC$JI z-PccLw9$kuX63}mZ3D8tP4GSS8>W+6Xfm}8YTHWWTFqO&@{)nl*?NFHp8ZRQ+5ffJ zayHmce|qLOOE})4t#Q%*@5JQGMzdd~c7yo7(s2c>9F3xwlFxs(nAc9R{^nog1Bbtp z=HuCo^cZHca*>w|+heDr5CdaXOfD_|TgIM6FV+Jpa2bF(hw7r$=R2bSGvExUlMAh+ zH#fb{4QfY8}Y+t$)O zBA`uQy?~k!IOJ|a)ni9wBnye;xI*{n7U-qm-EHa)K=4X=iWTI|28qPN@v9|uhpT-$ zgO%GCx`cJ062*F9;+bL+5)xfBUqzFTMBb;u{-z?J8%Ypio%NjeA^SAsh$Rhb$h>e7 z>A^m=W24-psipm=MPEYhQ(Ew@GPaXp&&XWk7gZ}MvZ`6k$(i0xzg;8=_FAmu^HZEj zeFVvG)(PHSv)#Z0($`cW&yfp=X9p>VT_1_obYomx!YkfAy-0elwYbjzhpHUm|55js zYAbq2U5P*7!7)e5$lw!b;>zk4{o6g2y_XD0-zR&yNjK95`?>%NPg$2YL<^K?xX zJvk_N00kjp1uKzQZln8~##-Q|8o^6F(t@f)BW`69#*$t0qEb;YzFSDNg!6BRN04uY zIa1hL^7h|dW5e}~;T-<`Q`FOoO${`fq$y00t2`Sp9U&Y42h$ODmg2w$ss_3$XhO(H zF@?2YuYG?5l`!dEfuEH_djs3eru6J7;33} zx+{ZT$X2lwu`RhE?ED)CJH+0Fqo%B&u6ZUzf;_e0>u^YuWJ`DrPJT;cwwN_p?ITBf zh!`O1E8hR^iGPDd1ppW=PTyVyU0$VmN4eNZshn_UwF&$1#=lcwi%PZlBwQs3l)r7y z?pNz!#}Y5MEth<9@B3jcM>RPqHXyQdaW4SnMemip`Q1W-QvOw*)mUxgO)XWTkOQi7 zlFBJE%pb5ak3H4X*U>~ixpolFW5qhQn%T2K5`ah@?)eWdUj9)w-8;zE*S|lwAv- zSST92$-ZcuyTMyFYFU?vS8@BwRE|@^Yk91fbQS-L_eQ(nwWb1V9-M~P<_B4jcPM0E zd-v~Zq+6lW128z#rtZSS$k6#w0`bGHcoq4n_iB~WJum!H8_ctkEx)`;?upBaTD4&x z=T}!^#vqMA9c5RRE3=->@l2RjRi$kj8?ZsD<1Vhk)9%ClokuIfedQiA?bh}`Guy^o zX5T*|>NOMUJYJ_&d|{+SQf*<skq%Rr4@z)lSlE^X&sQiX1 z7KtmQ=Wl;Y;WEY?TY-~F*H|nk=F9Vn3VHJ(U{}>H{izQ&U3e@8Rn}zNu-kdqFH{B9 zpKkc1n&F<`!o`uA>+A5Y>Ts&nMq$t4aV2L*f3Kf64TovKl@hx{Od@T z8+2|TL^BlRK3+ zHp)FxHN3H2qI<$-+GPRoB;!!9?d@6&O52BQC462Z*pbf8&KFkzaQU0&#{Ty!CQuNX zqOD5bjccWMev64e)0cg^28wHFk|IXR(7*qRq$XMWQ;bByes?F!II~(R!UGk*_TJWK3d>M6+G{ zXjSO^UfHkwYW(?Ug0ao^TAz3dDLY*ShVAQFNBbyyC=1!qK|b8D!NB4qQ%Ym21E`Bt!ONMO zmy(pdEjK%V8wv;Lle~Bz2g^MmeypeQ*TqH8l-{hefhTXIU%H;wofH^L=W2( zU|VlOu=%($&1R0^6BvUwU zZ@NtW?Pv>-G>7(Hp&N)jshu%i(oyvv*#nNz{?qn18|W?g+V%~<-!N+CNk$vDt<5&Z@8SMSAX`#dL!9^ zsckGXWAY0l@^wjRLxo$lTaO+7SqotN(8KsVY~thm>}|%6Y_>CW=(wj``Q{c)RcDYzNcCw$@542XnK_e!LfXj}wSyc7vL%}=->$Fg+C6?X zx(9Rhp4*jzE`f2L&QtlKdX|KDxMVKv$0Q~Hi;^$B6OK>#57%r#g2;2tdZz!qMEW4t zvC&q{P0``Ahwp|u_Gb`J#yfoWn)a2OzUVNX6pE*kH_){z*c@|9TkplbYUvA>cT@kiT-ri@mg*? zaHb@~btI@oWd_(AG16=rpIxcQthcv6n`3_P4u7Y}P$oUSL;Kd2M~G{%D#~r85CGZDGbx%*(9WA5x%;VQ9^A+JuWp$t@4uyvyGL@8=O zw{I4{lU>&(u+b>HOLhR7Ey_mUC2bEb=hb? zHWwv3kx{1Cr!8#%{%E4HGc5VgP=<$;Q?DV1sUwHcSRQsT?D=)b;<72&@{={B$^0NE zJdfTUh5u`OxSV#8?6=5iy~ydG_tkI@sHGS$E99LAd-E}B^F2Qui|nf@cU7{iefSP3 z9E@7$+)>j2Rl z2eTIgGc5})7^2Ds!V0 zOn9x@zlLpZdt=V@=lH0(iI!aZ#(0;pm}GEVM)J9x;_-)#0d_>x)LIp>Rejdf$18fy z&vwcCqB^hB2ptl3tos=CY63i-e_ZCb=-xS7I4Y9}7D{I*J9zU7kB)xMOE+Thl@I)N zzULCa4|G1}He%QxOjM$L!ezTzG$!0fTEMZHcPqURV7NM+i6*SRbekJ@WtaTIlu3Lx zSfS73Fq?*pi!t=xq+n+_-ucnclW&77{iv|os?tuVhvd~7rv)dL#T4(iM>7BEO;1Ms zuJTX+~25O3m>%~aO#4BFeFKg8n6?Zysja>Pwab>yTd!upK z>|HcedbV{Jh`IAUxs{0JpD@&$=}l5&+NAx;&T70qUqp@a@HisvfD|G)=DL;nJ0JVH z4d?5Q&<}jY-M8EQbRT_@`%ryNjs)JiRH`mCbYZs3czc-JjDlTfTvq=P3&)0r#0jo- z){Rz07kZqhKI%8?PUzl1HPz;VW=J;KXw+YdiG9p|huz_#^knOeDkdGXd$-P&0&*QK zv2YP{l)t`*zHaRd%gFkEUBJ{Ppkx=DQC^0w+-Die6lB)KhU3eR64qyJZZr|6Zn0x; zA4x(G-TaVL`qu|Kdv3ewu{ri8)b-TpyEdD6cQA;|Wb5ChAcj6BLtc~y(3 z>7qhLx@5Yfh=7)lGV428O#>on=l`0U{I40 z9kK7xX?ctwJ9{lzAd^YZlg5-e#pR@@fsc9jB+)Y^P-I`!h3zk~#ON?6r#k zW@|*Mo8;IGWKTpD!87X0Hp-43W2(yd79Eoq%FSi-e&@r8c-OfelZCknixBI#>m|>x zo^l(L8+)!+;v&->cB9f`^R823K2nM=c?$hPMkB07Ld*|>E4PXVp2s^j^(-owne-P9 z(WkS*IbCw`b_Kik__EOFON|tZCCQgbLJlmnkvAluN=;riHmOuv^|9OTf>$FI7)wIc z?WT48!A`^PiA@78*wlQtPKEU6SCd%>fOSN~Y>o6m+?BZHsRwo0Q$^3m19QUVL`7plc1M_x32=D1wq9=)McPFre(T1 zjVD{dl%*?D*x6(nH0l8xtfbDa-5We&lRp5YY^$1!>pjf?OD%$-kvZaZROno(kj89;S!EOqg=EAO_Kyp78quNSQM^A+*rEXQM;1GAHzriMFZ zhYgJw8ck}XbkglAj-nY0458sQSqnxRdinQnVRn)DhZ!+@8h%_~<~_eyhD|WZj|7 zkvvz6hW{O1<+98oMiG4c;XvD2m)?Y;(xdY?88C-~;5zJfh9OmzJ!k09pl0G?*pXQ(?hV$44NseAYyTG6!C6y22Ne zX|WjcBfc=Z<|j9j3ttS2=gg1At7Y|Pnra*4uSU%^VwfAX(k;(v1Ddg&mz`+zlc+s= z<8b_E2k%E8W6q34_oi2O?Yw>hkaknDHGgH0;)09N{Q&Y4EW(&6<{cZ(@MRT+A?J|O z8y+v~eDl*5lEE;1I3&sq4-bdihY?32)zdeJ0?Z1q)bcD}D=es}gv(?H1RY>{lgmDaWhK!udH zLOGLdy$p)G%k4S`ZV53f z8!;HHIp>+7#?&Y^H(Hg{#a+0?IQSmbfEK37&ifpw@K@ zHk)7g)HTVrk*y&^+1tvV|K=QN4iE`(f&J0`AxOx0SVF*l0A%1v3b;m0n}Hw>%ak`& z`7p-CnJ}9G5+}Ka4 zW;)69Mu0v%&?Fd%##?V}EZyL_@5oJuYRH)`hTqg*^8tkKsHW-ni_Zg2i( z1ONw|agboTH3Y_lgBzrF=+y8Ng75oCe|yH?r~OvRK98uGJAJa=w&8M;^_jVEngn5| zFElau1%mt>zwG>wuZ5h3y`?dz4iNyf_4qWBY+DrTN=E?a@@k$;yFWCW@s|lXqhIexjwc9*xuWPd|ER<_;w>fyhb-EwyfZM*-;(l z?yA=}2AdjrS<}d-KjEG)CEW8JC|rdk3(-LrqW?~n{R?OcdjUnvS5GINKg`tOMn4n` zc?pTjsdYvg=5-Jvh6)565nETuDmnE|S+3H{MPar*!VmL!RQltC-A66#Kk6h-Y>*u- zAI&Ip7MigJr^*{_c|aP8N@tuV-*R9;pBf{qQ6QF;qD9;MvL{||bP>rWs#;uPXC5eU zvW}si=*{Q~AwJMChiDcF2O-;7q?gtJHmF};#VPUH2ShZ_3|?nG-venpd?kXe5BIgz zK|csDZ^`C;O<<$yLUqOmHg~4!@LceL0d`G$%|3hYSMMZG@x&ai#8f|@q z2>kl9di>RDXX&n^d}W3YA>krZgB$%5|9GdbyZmlTx-87J5FkcP+tTeO@&RCEXvnZX z;d~boyj$Gf*OrYWoDrzmE+G_0f819_W>bPMq+aanMDeuW;XQu9$#|rhzQ}%lBs6qx zn{^g3DyULv>*c-X=JfV;ApTX0Sa$xS{`?-<_AO=a=AGbZ!dNsA)RcE-3bMvFOzrNI z@7NuCD_)h}Vm|W--0H)(A8JR36ozuI!X%cbWXsD+R?k zmvgFF8%>%XZnbzNdKn^>7}*U2&I67~k4|_U70%w<@R21JYZvNPD->zBac}NY@KE?rz%#`N)O9TjteT#`sac(AgbqS3eyuNmrqi z69WI=IR)-nL8XIA*lxdVc5GU+G~Q*JXo8$R(J%`YpYcSO8q19YcFsWhT&>K$)OzvA zDpt62KB#4u$8jO-#)eCUhH#+Xt?M*YQ0GYBJqanhASBJ(+m-g}>uwXsfR%_VKjZbC zl0iah@OGEuh5)pysyWtI?P-{;qrTxb)G-3+*|n*|iuRvVjm|s6!a)x-j8Nh&=kxsOFtA1QBNz zZ4YF^>zx+-H8Ah{*}95Ca>rBRFR!+53$wj}vceE(A(<(tmAJ#RCErcFFq0Wh;%+^E zBWWNR8xGcBJD&Pmel7U=Dg=@uX9>yRjUu<2r*Ef`%5G;HxESKn;ye)vdM7_K#mzBw zNP4{1Fi9Q(4#Y=>KJPhOWW~2J)vBMV{{eA6?T-77(91Hsp z|5#Q!)4?krIR90DKGMF<&Cd)Xf|AgMQG)!1b5GMVDLWF6&rh^zAcnw!Jz2Jw(PY~fe)G!|$(MBg09(rAyw z%e&4DdDy(BVpg$tQNVNMFc<>(!fXLUpMlsiBsFJc73NOk(KS+eRJi1fIUIGkF3f4M z@NPWtwd>aB{IXu=oWWb8-!yYG?TNeMU+w9G#B00x=V@o;u=m1@c$Kj{*9qicFX+j$ z^j6N*SS4j;4N&?wT5uOLQ@PHOyw5E^2*(oa23eo;kV=x?>cIcr@rmzYUKl0TK(im* z8FGY2Ku&Em%qzhP4=<+ifwuM^3;{pqjK(ia#}maur-~zr6w(b5L}KOZ*qA<%izIu2 z(g;LC!oBv0E+k*9m3%&_MB=Dqi_=KDVcRS0t9G^$yF;Kb8@w#vL%b36Ku~KBF~t{5 zhz%sh_SP`3d_s`<%3orrCQXd!opncI0+oePwS`YkQ;^EAtq1W*3g!NmurNR4OY=B+ zHC8C2<9>1xyW{yHrSvW&eOh%Vf?BRADy1J)~+snOk2(WdJL$82jvMKnl)Y(dh< z1gO2%-A)9AX{VZL>C!F_77iNY z)xs`Ao{UjbZYkOQSL2V;zY8=odo@%@{G_3#3THtvh1qim7Blpb;&Bw_U|4lFcdpN( z3Ql~cJDbzaaK<@~Rwx_iBFAu6H6i`>fmN$VTO*uGhcdj3%gBf0P)!Hs-;ksDX)S<( zf@Y4TGigYb_SfHNQ?Bk4rfva)uSK`xjWB(39b|MX!9PDNIE$Eet${wU-j7|tjl-(o z@Dqu(Mv=Jia&m=IQcj`n2Cr7N{KH&y4Aw1h-lmyV3<&KW$VTV|YsX?kc0Y+Go2t>L z%-MXhL+)z9A9owebOCmLC&-=5u+oosT~X|e+3i)*DXtn#oocSr8ca7broY8#oGuC} zjCU*SD4Raf1?Lyx#KNr>DmA*+s!SG$(TJiQRk8Jkw8$<ZPnt3-5OW6i5DENULj?S#H|}Kt*u?}6a8;08J(7u+->KLr=2GCC z3hC$1{meBUWvacVPV?>7tTktlWcrpZ5AMl_Ly>1`n%HXpLNQrqR93#gqICnB5#a;6jG^h-(67r;wGyw`Wm4DuK!05 zKc@xTmIgMm{#1k+IF|8DieLuva-qShhio85w!-Eh=a1%J<1wdV*1z@;L|TXzFfX<~ zbDCgsjsFD+{`~;lFj6Rn9f)-rhc`kmj~%}n0kQ%OCnX8OpO< zo2a7ITCvQ{G$n^tgZSVsQ7=3X}EerZWzAWVbQLlU!xj6#OVOKkf8o{*z-1W5` z3nJl*cYaR2tP9*gmZH=uz|J9+|0O#{#S9gc*XgKQ_^PT==19K@w%tW!zeT=c=@#&C_+>ZdT-v*QYC0B9oXmM94fd^Dw}u4L;1t2C#NJ-BT1*iy-VTtegVLjYE$eYqP~>Zj25& zJja5!~V!|)5_R;eD4cDoXCvqnhl=RTIc5qcd$b7s@r z;#7Iy;G7kfd^H+b6$$hFQ6Itc+D(Wn3mR1%&i)=}O28$M^5#aZ*z&)4mZ35e(1w}m^0d#m?qL2}#zi9HKuYh|;H#y}vv zv+P-u8>!g+?l;|ckn3HJ%7+fXHK?rC5K3ysEwUbGn_g!`t^61*&VV1cbHP!5Vd$QNSyp@I7KKy8V37sy<-k zi%9q9QuI6#hSuSGuwZRIk40snOp_#ro4ej8?a?f?FT-!&x+nB++2dP-`||dVvd57K zRo$oCPUW)z@%dK9-&wVDfc!P1Zbw*sj->6a4{%!Wd{%t#D)KBO=Wsx}Z{2gBo}Olr zG}mSJP2LI=h&~9+k*=;l5Yi8U`{jpnxCrCpcmv%9w8L+$`%ONG+@C(Gu$PnL-Ef1seW=%u?Y#Hj&n)maU=RF*ufJu4v$q^AjlZ?j!F8@ zVzH9qf*_~N@j_3-i%`#=iC)(ik%y^QKWo;QZk6q_o|k;vF5EC&RN(i$D&jE=y39W? zCMx|0gxyHBj+>ERsiM5R{EnveCHTwH+-o%%^O9IavQMFfThpcJZ&|jHu)7l%{-V?>IBw`tvh+{RUOn`1^l?{y*jQX8mFC75Eyqc4L9 z)t_-qB75{fUaz?lIThCpP-~r zsdScvPK%W*{=0ER3yGY6cek?};|xvD_U?5%kq$kfp0TVPdg-Ahu!<~RMTdgGjBbf# z(7XpGYxC}?=f8+CsbDYtjVv?Wi|&jkVh|)OP`tgf(HCi5PeUlv*jxOYK7A?R(KK{= zE~iE!W!jycd}Jw3b_ro0sMfV_9vd6eO6PJ;2JsIIro3tU!9?7Pv{4aa)K@{aRcz4o zEag}DL1P}7+D%q2e%TT_aBcA3@vaLJTyK$!b+{v&_MPi42-w^Bn4@QMsGYk&u(Bw5 z?ZBtm-7Bx5wbn8g+Olrl8XgyiVR`Z5)I0KXUVt*-O)dI80^rtzhP|m#{=Y5*?qfru zXpkZuxjrF)`2Ic2FGVihGrIeRY5n^30a9DS0pYe$z2Z4JyXiOA#HUr@&&n?1(>=he zM_&|GB~PSZ*V4@acL0*UdaM~QqtaXadh~(TPWSL6d(gGAc3=D>?>dT=I<8mGbeO>SRZq7!>{!E%kFo};@-H@JcVIQWRv;o^pw54qkB zo?kct4&qZyP1+Vq=zKdnY1LjBuyEe{E}8?;YWf#d|8D(1LrWlyY*SMs*jo2d#7TbI z?Q2al;9n%oLWMiRL|6a3nJK+saIvpxgON(uvuou(TYuxkkI?gtcYP$v@W1k#=QugP5LvkpbSWEJ=hl}g zg*^c2yJSCBf+xenrCjAZ3>vaSVhv)~I+4GcVB%wH=AYG6GSw_BUi&Eu?ZBW=zpka@ z?iq&Rnp^cJL`}(?&h9w0BMg`*^_v%zrox(0!el5*LiNCkk$?AEnGj4>UEZ?>(F(Kz zb^oXF%jFfhd+N)}TlMK<`x@T%nkt0V_5e;j9KQ_r3v5zQ6g{^@=#c@(EzU6wL+>uT>Uh+v+L~SP+h#!QP&JDCxVg1W`=lm z+~_uoOP4%kUihhrx$b^eX%fV=l%PNPJnDzWK1C516eC-GyjS3;U$bHV6~O`zfl?Jz@o5`sZw8I%f ztVpt-Yseez-%@BRMbp~;h+53_!ZG*`CAM)Dc~bu3nO5M;k+Ytl;+4o(fv6f2=$_o# zV6LrrDhZEU*iDZoF{(|{JUU+}3b;@vNA&F1KO20$RgOGO;Oe|4LKCU)GPY=o6fC7djbB59d~%x^(`a6XA#j zT~+iE+&CAC=uKlU5+lHCu1>{3B!1*9F;r&jN1$bQg zR8gtz&+E1r$k5r{^7J zK6~DwR8uO6NZz5Mh1W8I(_b+5M@%fGHhAXr|5A=iLY|PVPsa35^_SIRObZwr--mPF z8p0>*Pt$xNYU=6XSE!9Ox)@d7q3A1kF?=+tE3-?3L+F|YdGi7Dd^`Xcm=(!?D(616 zM)NtijsT$-CggYUs|j`nELMe0Ek&qx2@KEk+0VNPqp1U>QvA=9OvA4D)JGgM>RQ``3e3vNA%N*VS@|Ck@8)b*K8ohmk}}EOjg*IsuYPB zk9!~MPrw^w@@M)LDQK^;8+Ltv;u;}w;Ar?j4%$IzuekVy3zunK@=c zace5*Rz{7my89En z0k!?<9VLX*=XcCq=oyWPi!0TC)jyW?ZtWU%&W*hhq8+06H$&9Dv>o5lC6+w$FJCcw z3q8MZL*24S=^EM!KpK`jcKlVkmz(43r~oWCpl@~m@F!264D(c!x@p|pQ6hY~kIJsn za4LANhj21!^rZZ~H#3>x=_kI->5cJ`n+_PZjw4z~8$t)Q&TZus=cUr$O_ z&GRxpQ^1<=X#U6ID;kB!T!#;P0kr;b>HB!*%}Bstb<`;DUqvVnjRXv%>(UW>FM#xM znXQSfK7eA2J;c7}Fvkd|TF;!0vdVD$N7qR2mzyAtl4fgqXm3Y|i;I&=)^HyYHzMcF zrJ3N8w;zw{f$tr&G6nB0OdPZ%d^~SUJ{Pcr-zuP1R=fxS(fnYWBA<=5h~7%TGx{9P zWo2cZwpek&B~m8SFSxQ=>n88i+7SP#rw@h(Gg)iihsKx)gv4KX6?U6U5E-@+k;WCD z`N7^ETZI_Cm+zwfy{vZB8w9!~U3wR+F&aTcGMee&rj=@IYxx>03L-y*^VvHQvZ>Xi z_11+)?Dl=yp^qI>w~bN9#ofL-Ozgt3i4p{|x2uq8*M^pa6=mWsET&5@BD;ooc&U#d z!@wiRDGPn+Ir!)qXaRmWbLDWk^19v#)r&CVf!DV`;_mVK%uQbo(+4mfdoL*((yZlq zMf&Ku)4Z-ZSNG-s?ir_tQpJG1Ok_Cs6_HLk({nqJr|*ELAJN`zNH+Zc)hJSaI0A%u z@nCUa=`m5D?boCe{Hy)$*j7Hvx1F}VJlu`Z(9p2HMhK@w5g72bNEQM&Mxza_=sv$GjSr)r}ZyH7d4$w?&^`z&A^TvfaT6 zgek+SWZQZIZrrkUxRp?YQ5Vej!!&VWkQCes7~y&K%vr?%)IF%XOI?dcC1|2yw4A+rdSn46P92EP|~P>c@_zJZCY zt`YhWpv%g{yq!4`Cel&)>C>le&csWtJ2^DZbtndRxyGCneCo&EXMTuKu62wMAF{rb zTzrQXMS|DGksJP8Kr@fWhD*%hPprLE%ILSJw@VwAUD}J1EoSJ2A3JuJWP1!Dx*RtiQ{} z&98Ky0%gKbPt;$ylA(RhjK{ZX^i(iGxAXLeebOG?5hH7f{!hQL{8$G10(J6+J+?dB zYMYCXc%y8)CW3Cwq%!CBmQD#626)~7Dbr!QKv?vSCvHUSQZk~LYKw}AQ#q@ypz`{k zR*OzUbh_YzG4jgE#S9L17cGa}E2(6^IDynE*YNgPkis^`}}_Y4H( zFnnd9<_GNoa4p=`i~&sH>S#=efo%j-n;VlvpBp-!m|4OWTH`Zfv5r;&F_n1M{q^V% zjlv9zjNX~N4MjErtC8M#*snuvECJt8HZf)mX||)_f$wWs%>A=9a)(qtUI7UeT#7+t zyAriJ$GQ|WK%ie|2>G+WpJHF4oXTUVs>@P&oK0h?d89K9EfMEc3|h~4*&31pT7-OwVB-cU=7YaJ`>fbjN6a=14H-C*fZpSoX>vmswkzsH+iUu(Eyo2 zX|L3yc!hgMDrswQOOMGuWN54GH3xbGMQs$q@8PxG1 zGvBWY$i#b7m9#mX$3uiK{(>hHSivGb864e64XkgJ3y);{vv+eB0?i`$6D^?UK!LDB zahuS-$wU!RKxS6nnUyOd^+&|wd!PB+6J84LSe5iwXUlcLF#?6ygshxalV38~h`?xq zFH<)|D3de5`aBCVya68P!xr$=do@p8`RD8Q9dbdX@l_wdCfp{2lk3%fJ8$}B{`!|S zCI8E?-Z`|yAHE{($eG|bLvW+qMFqHHqSCjoNHsw^-GJ%D^LM*|tC$l;!4F^9HTcUe z&nJP0)gPCFKH?KZ=;w}aulr-Sf4%Sb{%_bsSzrLhj2@%_7)&k#n0+TNgO*r>If;_w z_g`I#ZO#7de&h~9Bn#}g8Mp&P7>Ujwp0fEqWFEDBB=4EhqtUwj^SgZGA#nO`BSi1@ zK?!V4mkt8`A33%DroG)SffX|!L_*d_4D4cu3V^OGcmPGIKEj4s}pTpr2%|t(K z&K`xWoHHDV&9A$?ADnetRv^T1>q~|7zmKEFKa0z!t6)zQnVLnxS{iZSBdRLsufQzA z7`qkhsDElixrE!ttFFYv#N;I0n0Rr6ioUusO5C%w-u%O@?kJ zbQcbTyKvT_Eg0g5{3{={@u%O`@o&eou|slx;AroTR`sU+YM3suQMsSZ#Ls2t z@=j;B-}b`f%nNy!W*mKb0po6k^6~NU94IX!#WZ^6egxcK^$~Wi26^@8cin|{IVtV6 z1Hj}HO2IwXth$t)vuQ$ANfX+#PwO&6lZZUZR@ zHKkMw!GGSCa!BIO6#!0Axdcn_0NfrYff8=(X+C}VukB3G*a5bKZ{^N0>J8=_@GGrt zZPx-HbpVH-%~u-JvOVE;4k3#v%uw|%H-Z$px zhlL-?2G+b~2I4+n^y>Q#o>u;AMUUi|hOLEi!d=&Tew;o5(s2VD>A0VdD`x@3EvZNn z(vSZOu$l)LuGhDS(3rT^T)Fg}2q^O3d9eHASc-4WZ?NiMrvt;m5668Q24Em>c~q1Q zIz;GLKS3$wF7;MVNa8ojZ3anz!vF6o>#u|T^+N6_B$xf~Vh)4ftXxWH2RM6fc;A~S z?<5d4a@k&p`mOtJSJR~%#Zhp3#*BdP#S+%j2&h)Uqm#GMdGVd+<4zu}rN6kLLRG<1 z&PKH*LQ8?_6}*&5zvcVCtw}BqTFS)t7-ncG>IspLVd;b$=ki+$mLk!=H{gth?>zca zS2J!qCDKPQM=c}ORA;*s^BE?>$IMLJfY#XiUr|{j7x?P+wb zf7_rHC~bmD(1q^Nz0&XF&z4vy{U*|v3!qE)5xSDI>Mocl{l^^uIYL{&b?SWhEqUO#h<_?Lyfv5r>T8I5WtnQpLotKwxa? zZ!p#pnx>ZD-fayIyHOi#XBp3!^zZHakJ}E;s2k(X9~pRG@X1d-WCG=W^KTkG0N-@R3dnqp9_N!^viNUz z?XM5~4l%97X<&g?KYklS7XkX{)<^Dx>EdPB;NZWcM9yyS?#cP&WXD6tZ{L!0#d>Yl z8_z@5p4T0s@soo_fVGmlV*i<2brWZif+qQioxN=VU3Av6J4z5C^Ts}btm#u1ODfYA zxdg(Fr-&6~&yJ0YBXlWYV0IgtyP5^+X5un<1q)S!3{f~b>X;coG*q4Q?42l(#o47#xeK0gGgjA_H;&3x2fZWLE-*g2q_v0fXm z{x>1A6HnnB#YZ-57uowfb-9vj&@V;*xrCn2NmHavyQb63HKUm%rm#swx1edf$%uIT z5zd%{xLcm5N1~@zv)e+oBSV(TX$w<@RJ?@oV5d7a-7s0p^sJk;UHOcQv_0;L@U>fq zU{q`WH=va-78k);vR(}v2+<%sA2WL+tIXp3upnb@z)`5`NVx~Mqt9ZE*&v)oRpHO+ z;LiSLNRRDeOXEmw&+JN?^IEA%acB{fFk3yqDr!S2#D;QkB3Ab!zQU>0Fqfrhz=LNr z%}rnZs+M1?RWO~Rb_CTBN-$XBFf1P1>1+`fQK%+AL1^;iT$#KwGk_MVW{6rbNP{`` zD#p2Mg%-6goWa%%;of(eqQu0zUC`Fgxk{HV^>}s5tk3qi4<~61^ueY=STG_+q-+BD zTEKU)!a@BIAuO!x&0kk__k7tS)Q*+D4lu%fvPte2DjY9_kB%c18Zwn~Q(oBCzl zws6tFTT_rBn-CWEiHt?b2p})X=(n>AbhlPl8yR=v) zN)%nP?CsK~0Tzt*lj%3z8{%C0ERd7r8Nt1;i#c_rz5GkOW+==vt9#0Ei(1}E!yb&Y zio|ay`6tXQ>kivkd)@Jo$gu{a3Go5+=r0Ef0$G0D-oG7;#z-@W*C& zOdSTKN+$FLDV#oMUHY7&My6!u=bs2KNjsY9<1gD2=V+dsT%|MvaY6;XP{$hc33;UW zSwR-D)23?;!82d2!VnZaHWBw*aUSCztZ9rblB=)KhQ5AG<_>Gj`fC!QT}$6we~@>f zrx?1;G})W%U7M^*soy8EYhq&aUHL=CvZJ^{J|@S18Wjda6IJ&#g3s9%y{nhi_okTi zICk3&c5Dl)=e$W=T|XBlMqtZh?6I(0hiThaARC@4dXxesGHEFgcDQG3e-#<^e!4zy zY!p;!lJuVz{9zSt_tNnx3q!S|3M*O(#rSU0?z<(ATs8ADvnU&H1K1jXOzLa&Hq0Fe z8L%AxrG4m6BXj0XLfH>x&R~TU8S4C?(W*gro`+vcC|n=|Gao~m8B~D@<`ZmINpp*j zVYKCLxM6#znaz}SDaCXq|v93_pd+h^H?g= zMEEV_IQFiO>Sq6_q<0xB?d=?kQ)>vhi7OFh(z1S8IN0A^;xsDnLp#&1>0WP5=p1-ZwBM2At@2R)%4_3~bk&TL86c77gv*Ogsi*7bjTXV^ z$wRx4p7S*hy%FU#7|$Oyt48r|#2VSD^dAi=C{NZW$!v^IcJ3d4rQbCcge!l}xIM-# zGP;|6Zb3ue%ppOlmDuH>a22%Mh)?!e z!qi}xZ0OK=VvpmZ>q-p;#kDSCN+t6P_d4n7zYndB+S%4i^!Rv0A(H{+wW8JJk+dKQ z2+F#bSM_O}fW6JDPPF#cHK9&G#k4niok*Ys0Nat?n^*r^b(M_#R9!_Li_sg4IkVG_I1$9!;*5t>aIfbqPQ`F^ zoK1djwRLXQ^_d`g+_z8xz-{5wpfHmf?U9U^K;;y`W%tXoW%#W>- z^`AU4Cve_wF+KD#%*Tx=q?@O)wq4zV7bhyM8!Xto7pFTcu>!Cj_zo}C z4qlrAS*M%)`9p>Riz)`;D_jgU)!9{xvDgYMC%cuPTGS-ErkxFIK}4$0ujvBXMp`PH z;nzDSa~#*k^UoRiMQD7JodQ(AdGInOUM@#PQ`d&1lY`In2?qzs99%eAinR+S$*0tb z-D%#}hVGJtu9upQBPFlXc}aTOOnB|vAz>xII|>C)vBh%VPso)3Im%!bT8|;R1Ckoe98iqN-jOC=S>Y0X!luRNw$+6 zNzKFr-jvs84HK1NRe{eqF$roJrHdKPO^OF)7xWypSgUG3(ffpmbkLKY`Sz7m^osn& zi6OnDN$MqexN@?Js24cMAS=s;6GP~75Ru+`I^O+9I|cb(y~>E@hD8Ol9+A*@bex;x zM$XZ^XMG%6738Zf2kj$I%bxQ*U(Xi;+mYYrxn4iw-|Q?-u$}8L$wV537LAxwsW)+D zj9BLj7{J1YTQYoNyY5+sAIvH{5Ckt@yiW2MmCgQqnf~jjNJCISm~x$TbBBhOW5mV9 z*G64wZp9Kn=}SR=oWMwN`%bH>L;L+DcG(>0T2FALRKcrC?8;&%qsW;org0}c1lB4T zc*`+KjUAanMQ3e`$dM!XXY=cf!(HygbfXf3?rPDNTP>bQP)2E?9EJ38lV13$R`00o z_02N7Ozr-f{9hYHrG(QeM3t_$6_&6A>TqF(tbA z)Y4kQ9tNf7Wrz;m)!Ert!Jr6reZIvmDskppp?uDi40U`e_Q?r9=5b4V;yXvdhRX96 zC96#(h82FybHHfP4p56!@Z`_NB=J!u8&; zakNL8EmCZ-GF7PVGQZyhe2!nl47)ag_NjX7!O?Er>%N6D_ZAR*rPB_1aNU_Nde!i< zk{^q5*O@Du`Fc|2tF1OU9x1y++uLz?p*~7+sav!~nXP->sf5WPuHC3;w*8z@)xFc$ zS5jT4m0}pNT%MPET-I$S$>OdrD;y?u@y0lGuCq91zVys6rLS*Gmv)#^dylAxjDm19 zV-jC}l82Drd(|_%HWoA|9S`lmaUEJW!T4qTf<{+@WWHLVPtJ|Z6MTmGgN+>BUP?Ey z)>$^3k;YCQ5x zucvdeaQ?#1zkuxgaC0IKC_=9#q#wmZ`t4dY$ z`L9Wfce;o3Gd;u$Ag~`=uA2~hy*peS*2b`AsFV*ii)`eBd@JGk)go*;6M%P#7BI6E z8iu|e7vTlJrVhnAq&ddW4u?_Y8B#dTR6oTrJ&$@{*u2@%2S0v=^VS3D-q*>lOs8hjqZ|CrYW~sKMk^yFe?!lH_`?w$9~bzArR%n_4{qWWby0y)qjIpK?ULhz}*G!+vf*8aKB^{Q`$`XHj-*SX7`LhI*Q_ zl=$|dJMBH%>lv!;nD%7uy~UW>@!CuitTC}@v`*77n#Zt@QqDCd){l?UISP3gi<<6A z-R40dhTr*8f}`|ZB^zXH?mBKC#RM!>m(HnpBS!&^;`xjS^1_u+_$kcNy4%14FzRL@ z7fUD$^EqrnArW{@Ntn;ud+tan_pf(^X+J1~VM1%d%2F#sBd%IS+YzNrY42eKqu+kk zC+*L;ZEa;3Q+ZH}>C1TRW~PsuIn?m?4rcqauH`&x0R%gP%bKI;b}%q3XxAomkzlV4EX76qn}24wDw$7$aDD@xpih$fk(&vd>t_lsGn!fU@8( zS<3-RF#O6X4jX;1g?nqR)ZrXmResaf;c%m?Nw&1LWmI<8;Z!q!-lZW_z6zD1khb!r zEeEIe#;9(=s7r?%*to{((2}Xfftm941-qFNhcM%}k)AMetC5la<8}ALJ<%TVMT3ho z1y#4ub*-LMBFbAfe|2oJ6CZ0+q7`>xe26qxIg#l4orO6*-Y=v%vQnu#qg=Oie(k2# z{OGe)+vj7+Y^|OR^UM8kI5)X$u8-t#L@(|jx?a{wlv7yRwsgFjjwBD0#OZNDOIivy%Sl5KBV>VZHlXi*bg&@ zZw|Z67=Xc1ji0Kjj`YbqSAjfdi;?!u=~9VNnd{_5RecZ2eC1V!^)A7_51e~@@zr6}DfxQ*#fOCV0~y-nv#bvl-)3=$ zcL{eFOp9fvRv9sEt0ThACSh78riHC-EIa0x=$F#^o*(PAk#wXR~U_4haeAEFZW1113)p z-@e!9^z@vZOuIS8PA<*fJ5;m$Y| z?g&axR2Ke7qemCP=jX2g*nvjxn-7o?R7O?5+k?dOqxPS(wxORZWXs)< zT86^Nwx~Gve#zyICx*CfOV)=J_*{^@Ts{|qjBW{6y>@8+c4(%57gu%hxwI&x(frZ( zIfH7ac>JzH229hsrm9%FzHcuXaJl&yQ7UT9@V&Mj`3{w1yiRWWs$6dMM-Ij2cgNZW zU1QeIbt~v`on4VV#`jRIa2T|R?>p}263Xgrd`qUjwZ3HORAKlCa)jXCZ5Op}wB|L4 zc5UEbAjHe)xFXx0NPiz9pQ`pDey%e@1Du(Wu^gF7x1+UMINB z=&7XJ4UGc4yY50^v*xgWs_E89q<6j%yW{N81Lf?6^0AoM_x)KlmtJIt1&8=CvGfdd zjpI8y5Jh!>y$ThR-XR+(K zRe7N@(}jiW&ua9(;5g&!c^MdzMjM$?J}+g&zXXdo756|$Z0UM+w{T0HNZuaRveiX> z!`1x-xOjQLrWoKzWY0v*dQO=qAa@|3IInOv@?2M(;rq5{rWG*)`2=ZYDPkgNhEYjz zP9ampOy5&IE$jPU;o;ZeSH$@q&H=_tQ+;Bl6@c{g+{Pkq97=Ozej_o0^yy>5qoy05 zc6j)EGX(2T~njplA3)a`2PbID5O6Q!I z>R5|csyp!(7>mC2g24k)vbH7Ee7!y7A-fk!OKutk?KD6U^xFAegZCfyK^}CuySF#r z0&*Mu2>&IXvN@Lc|GAjK*RTQ!q9Isl2l1OVlSB{V3je};o|`duID7c^jWfodVNhh0 z#ZVR5jD??5nBp>(q))*YU)?dvQ7Pzin=qF~pLk}It$oYW$#9>Zv3<|Nw+?0ON?*y8 z*e=9ggff;OPHlf<8e<_PBagXaw*%2kX}@nf$zQ2juIHr#g76aQXNEA_GP3wg^PG?g zL!K;t9U=3=Pqf*^c<@m6L|^ze5lZAPgz6*nq&5vp$Car%Q6nY{gaM;RZ%(B1Rv>F_ zOGVZ7jE2RD?9N>uzTwv?OYyarc>%b#_BkMI9V}0le|45DKNYxxSud+zQcZd!CDrEPniFfH@VR)tFn7*Nkwg!~dJWYChDorwQB-(|k3qCY{o)#CORYv8Xm z>H~LXoo7<&w~YT6FGj9y4-=%UG#h@yG~2JGl6SfNh~t z$GhPS|27*)&k9i27e=>C?emUkn}yMR81{ zfp0QH#Ir(9f=f$RYR3vu7-^VKIj$^2&Mh3tv5MIy1c5iC+?od6e9leCN_#tk(;M^A z+?ppuScX~cSjs~F(1n{IEyRWQoN^LSbM*yE zqFnZ9dj2oab?jV_(1V9cQbyl6k|ohtAZw*S-ww>u3tAmGeKel` z+Kbt_sKY%hn;^R&0cPZbFq5X1@D3!tSNR_5Ha{$H7&+C@JhHrs?c>@-Bfa1RcN~-p zo#3}YmMN&4r_|P(%l{UvdjgF})X7h*l|zuoD9Slu1%9I4pP+{JVmzJ%{ayozk{8cJ z=|79ot-$AepE}-Z+7nw;WJB&T>5IiKsKacIe!*FiKt&t3ch0C{r>s?4-gOf0DC1qpzP~H?Kqtf*jP&Au`U4#ji+dup<(ueh7v#{o{ zVMci4-&n|oP-34h6p3cq%_Ir5!QRel(JrBE{FVeJzM?7&TdzS3^Fod~iUiLCkH z?T)T}ltB8-;EmvyR)j!pGQhgw3$`+0u@t3S_%8U6Wi%d~ZaQL0HOaWG|?^MKP`^OhmP3cSMp4 zN^FZ#B@5@UMA|X!^b+TMtGx>8vc?Ms@Ko$M{#Z$wnQuq3yCX}?Kqo+tLRgaPt>Wq_ zpCwly1=zut4q>7w_zrzlCqR2n)APq$OB=fOxVD9K%JMzTC10PYR)ycc5KH6^5;_dC z%elG84ltpVR-%Xe6B2(R8fUQjl`2odk1$p}hEbHE+{EBVEb2SASj}V-QQuNlc1MtH z;nd0vAK!G4?~wAIa4rbI>$}Oo1pU(5H9bN|Vy4rT^wnS^n9d1d6c;u5fPXHhxHTm= z$-Wgh-z8t1b)c9Ulf5Li>m#T8O2r$G_6_RH)gGh+7e@BaikLk+A`Ktdjr z8FH^%P5xQ74(dm&H|s}6F>)(&k@LheV@50J@Oh%Z=KB()pi(6xj(Vu{bRB91Bn)Ky z7lx}pMEY)sT=oy;n4Xn$HV1)Dw-v{&((Ls;eK1o6Fd`$f!poPr9G$LLNySSUokRft zBpRu{;oc#jx@Djuh4b5Grt|_xZ(*q86U%+2gdi=mSh2-k3xc`(kACZd6oU8JWTZy+@+w)7h1ujdO0R!y*+2=Hy6rgO1cNE- z@?>H)mff+w$@7!pgip-}Vd3%IJDsve^nJKZ-#9!I$2UyPDdqQFREACEE|Xe(KoFE3 zHyM?IXqM#7liUEy@p|3@tJKSI&5K~RB6SH#*lB{S@Q0uRjWis@}@xC-%wb5+2O1*|$lCcxfT%_oRDS&-DK&Kg- zR%F3cItH>*^(XzJlEM5gCgD#`laRv!01TrX`#W8;7uBKE=tQSmi*Alr7^}lwQVzaB zAo)dgM0Hd?fT^Jh43DWS75|Cl8aO;)sn1O)ImYr6N%HQ+zkCvfQ`NqE2i- z^~p@B{^=H9%#rDs&Yvy30F&McTGz}HhIFCsj0h;&>YOl}|3ixZGZgrF%idg|EnddR z6m*|s)7o1Q=T*}w43O9Y7K^}Jr0h1%`u-^Yc<=K;!-?syK_*jO0ZWh~w`*DlZ~-$I z1TqHQX%dpbjv%LERQ7hFiejesqDrH=T`KO?yOY{!WhSMw&F8WKuopVvvl{CPN+4pM zzz}eE4gSLE#{$){n2Q^DK`&y|$;4fxFq~Ve#1>=4Dp|&B!S^R!V{juh_>mavK z9URZz!jg~6y7;bt8X%0Eid*01BE6|&*)!@_f*MZjP#yQa%f+?6{+|DXFg4mixUE&q zWc7ftz1ak^AhcRUd#7acF+7w7we}N^0%DVQq5Owcult??S#9cyKV4 zmksv40o5GWi|xuqS`aZy3JxeIAy5u)%2~Ktp=tFbZ=m!X@2=~!=^ZO!B?ui-`NY;v zL14*((_OkgRSDx{7Idu3`-eQv0f+>L2i`Zy?RE8B2a40`i08@zk46;>Z~RLR339Z* zVa8N_n}IzsNQlZ-%b+LQ4X=kwGTK6!ZT^DKG!udp>FXE6B`?G|_sm2)%-jepyW%^% zo>OSC$CWxpG%7*a5==wlU55fXY-)SaQ}8uUH7KPZkZ}h%vAvfT4eiYajC`IO#4^+h ziY>m(&Tiy>qOFsEUNb^Zt=Z}(5bAEb!jmA@>mV&N1}Rp=R!)A`*JCj|06({?4szd!0ck;Y=CvmErsVx;E8>-mmfr94bL3R}Yfsvt<6De(Ck zQ`>5?%3oCX%3;P%Fcd08T3snVmk|^mCdsq9_RCoWB*$>VM&1dLOSn-*~FI)ojan;2$=b2!r9+rQjJjz#`e6r@G1kSGK&A= z9He)ixWF%-mX#7_(>A#M5m?JEiE`SkBhyYZ+x7Z%hqVe`V`2~O`MM$M%c4bv+A&fM z*A38++{@P!m`(#udpOI;(pVK$xQLX+=+WiaT{cjUC)8mC_mQFOi9^pNtQkRN zuyZNP3xa9uF!3N7zi6HL1x>ua?!Mqqk%_}$2wIJ%-TU){nB(0}1eGQ_Bob{gNzWTE zm2kcGa_bCEDJ3yJ7Qcw`^-NP$5bmLF|S#|&X(-|XQpvw59a$2fkX8kW3^4AX#B!Zp} z`Mf+isSkoqjwt`r%|yO5D7O+SBunFt_nPe-F$kvA^JH7Df2!BlM-1By482#erAl49 zBnu`_xq^Bq^wiPomsRJDp=vdZ&t|n+hiA{a(Nx$IAD0`83zk>ZYq@#+94#jsyDN}R z)YuFRA3#4z!O~FO$uY?h669~Az2GZYY<9J(l`+b$w5{>t`dSN28at-~=K_hkhm5DL zT~p?ek-R0^Sb_BHW!5pTa2=yW#SmYRGa0cp1r3j3Tt4#-);S}|^;?q|dGDLQ^c#qP zV-7=QaxO8(t_w(wsycLCPxbiovashRb|t*4-o*@Dl))*(7>i_!Y<-Uj{bO1RyC9^b zP8Lg=85&d(M+xn)+zYTUJ@l%&hbY!hb=3GHmq5fd_gUftRxI)eIk<=z&E7D^Ul@K_ z#$)QdQS!H(A&`e$GS~C7l~S z^2YzE>YFn=0;SmWrBpyFeQ{@3pL^o!ah80H|Lh#8Xfl4ryv0bMeehSQPPYl!Z6tJ9 zea*p>GORJPJjDs-98S!oLxq4DHLDs0dMxw;#kZ~Rmut;g-MNo<;u=}HEQJX4;=#^$ z94N6tg`i;oAps?y+5Ml`#KO+?;t8m!)ftfJ0hyrM%v?_$09w>f#OVo%r>_#`PU^1i zg0Eegi%Fg#8f{d!)Y!#elv<_kxgumcbEsg z&ftY3NRoI9en=md&<3T~mlDo<@)x(zCn*1n6L;PQ?#PxIU5K3RC`3n95oGp9HT-{p z96o>E>%`cjaB_7eHFI!9U!N<56LG)EH#zG|4Kbb(zEaMW=eAbYZ&npiUV1^bac~@# zVL7*aji|#8l}j*1n{zlF^O);628tf)w+5{Ja4P$vd{K0~J>AL?!`KaZb6xCcsCL9x zp6i%ngN&I=-L5IGgH|+xR3~vs+6BR%)kr7MkOyVbTegL7J3`cRSBC0QU6?HZaBEbq zyNKhYt)n=DqD`auRy|uS-VXq1t_$g5mP#dR(AZNreC{)C<;$OhbUoqFYIVY;Cox=@ z;bQHonD|)aZ5ps)67N4X?2D z6+p{+^Q@2`bmQ$C#(0Y|8<3b5HXM4+e^t%;TyWdI%_6&4r~owAXz$fY;J?&Ygs=U0 zuOcOdS)1}P8mb|FHSM-#N(o-kKQmq{R31#itbnDy|Nf>%={@Cji(is4Q#x@YcsS6~eq+M;z`5!^AAy178~M4C@%FT_*~cY(!~rb!_MKT5GdF>&^<9NK9j?EnpOCr zYj6p|GtRqmtkX(^^W0e%A4F~+U$NuBTVC;UmtiBtr6pN^@{#VTd|jw0P9S*}&p>7M zCp&9Gv5Wwwyx$ZaV&l?z8bV#0@I+4{z;7!hYV#3lNfJIupCLksM4XyAZ&`NxpZeZr z594+2uP&BWll75XeEW``S(`i7gzU?6{uzumq98x#!N`(y#6SqX@3{(`BDzyZ`XZB_bw88{Tebem=lb&UQK&3=UyN<>8y`@t^bzEa z*Mx!?OQt~$9-Cb`#if+e#iliC;_JuE&w64EeQ9Yn0MgYn?Vzez+paW1E2Xdwq}uV^ z(k-=7q@|XlI}x0oy&iYnNH@x612C3ci}t(dQ|?S_FnojTGY~DTa9E_UJ%RH9rBF)T-t}DP(M)@_b&44!+@tvZT_nM7)z)_z}!4**b(!>nWGy>Fk;^iU3h6jwImy4Pu)5&_40OktRXs~Cl+ z)(Bx-Yty?XuLr(b(1$OdrsbsYgI8L8*;QBc2J(>~=r5E#|5 z5dAR?jGK{7P3WL_8lwG^GjQTvcl)r}Eb~Dc2*r18k&~cf zQBD$KL-=y`*k-ruMnl10pYyjDw_nnMY{=cAp?$^N5I59W!yh{p5~_Cqa=>T%SPl)v-%R#Rvmbx^^8d81znFP2fDah-RPANliBJW%#UQ^VR^pMfMjiF{N1W9^ z&Tu&~`c};AS5h0-WK_U+EhLg!msD^S`Lm&I9*{mO)3i#U2Eb2H>syR^i_Whd{ryS* z@*7`oP~J7BVat3DkckZDAHN+<=Lh2XZiObKYW~00)Ii50=S)C?& zBoDT1->YwS4YBjVR-K<*4D%36-!9h!P#e#F&??qCJrFDP*Ova<3*N>n=D%tIHg~>J z1e`I*C>0awpgKfSR#Rwa006(<0`RNI-CGqfu_WMj0Fb*t#T(wtR_I>rc0}`Ulrafw zz>nNQS@)r2MjSeP{B{vULJL}kV-&(q-y>fQhR$lUML$HKa13fNjRGK;`<`Ztf7zmc zTkjU%E{Fo7OiaQEd<1CQ2cR=$ZPkI2jc{3Y+UNrs)&{P@qDB8wv6t!wXX55_-EOCI z+rqt$@c}M^iHthbP$ic{Ka^QSXBL5ZRlUJ@lLvL(-b}U00Eadz1NNa0?R5J0<@hg0 znNST@Z)shj1i>6-r(QgUX|Th@`&_AIwy5l~EM*X~O1HQ4UV8m7ovioe57FAargGe8 zP6ZIltrx-|B1^AxFLoiC?}5^=)&ge7pTVbGf(EoXeoav8*q?-Q|GqhY`^|hL5K23R zjT&Ifo5yz``aG%Y%X40+Dp12^WjLFJ;VXPS`1GmeK;#95&1aOW-#ygtKkqTf*aI4s z!3Gh)29<%-Iz$D%#O$===leGKejK6xHcLRbkzyLv_w}C(y#Cgj?+aY2Zs6JhcX~`o zM|b~JqC_W?$9oN6xeA0!-0RzU1s4i!8M5dOoZ;F1I{Dsrhs&3b+Fv=wz4?#{Q9GKa z%KZ1Syh4gqxhPV+jD;9##-J@aLg$xR4*0P?1xUvJoXzpU7#yXdo{SM-8TkAel+5po zD?9hQdjUM?ri}dk#ZibRv!C948Js(qdI0jrvQNoR5oc#Y^pdW-KYhA$%+ygVcge z-tk5buwP{J&JD7chY%SP-QPqWdVqgB$%L!mpAPr4x0}(ORFUP4_ZTm_IPp$oqrBJ= z3GDJ1EgNzAhiWK|i%R9oNzRG5$b$^L48N(ReKk_tgg57Ej%kQJKcDuAfWwy+11>+m z+ngN2lz4{cX5_L0&&?Hm6mczn3@Ir>tcw&k$xKZZnUkGZmlh#Q%lCczvQHQC^EC;EE8I?s7T~X1b z^y3Z`#255v8?${PtjCkvsU)=^er?UI^+i{LTC8i#Zd#Lav(?e+A&2wiO?ICOmveXu z!w}2|kV>)QJdT>VJHW%A@x6LgCY)DAaMAk6m^|{-{mhPSb&vK2d_R2nqyLRF+r+nD zc?ur)_U^6g)Yta%FVj}3ooKUeESC?7S{EZ$i=m9L)z;KxgSo7P@z#$<959#M@wQa7 zpoQFn;qMXR29-}Q%d2MSNOptq&*^$)?&=>^lSGe+UAb}87fxGiNmfQ$&W+Tg!(>;! z$*xUbSp^Y@HSpdXCkP3bww3&NOm7WF{)I_BrOXja@MZ6uC)(AM6eI5L7qjZ-@r7GO zMFw1gwqK6v(2pf&CV|sxzF@goJN6v!>3p0uws+&;{^4Xcj*|oqm$#%{B;0HcN1$o0 z4oY=2^W2>D!^bm(_gXI-J<-Keq+-|lcD?0`Z>BP)YLv&{OS{{ISzlpeqg2)|*5b+w zCsrjo2+u;jD)M_>x^Ghw>{I&t_tPibpCgE6Og-3lOzLw??nUwWySEF&OMEgE(gp`p zxV&@h)IE==(@4r@VCGA&JimS!xQkjYj%rvW&lha9$mEnpJ8v1VKe$_*C3fwQA z+so^o8&eZkZ=1EgTzx9XYQep5a8E=7Ys)#X zCBu7M`$PNA@hZjKeYZ7Dzq~J_c>Ju#NVHj?HIceHRR9fSC5iZQpR@6$149T46r|pD zfH}4Wa$(mH*$#u(R|mu3Iu(15o_(|ZVohMvdwK2E#mPZiK?w=Gp8FV&RY%qjGjRur zSMMHAw5K~ZpYg&RSxftPsyFGCmqK+!VDULnPy`x+dQa7z^;1SKY`{(uQ7yy^Y+F{5E`uX^|-N$=s0!@q$ zL$`9{a1$8!jM5*WWiqa&Sp84;QI7Ah93Zco9+L|GJbgk)3rCijd~w~sV=hyM*=6#h zw@T;9GEQflLUM~){O86WM-!}4!aD7-dufNQpvuupyQn7WV+D-}HG^Dc?zB7)+kyKr4cVRtk z)cuM^$-uLWJ(-JOAg5J&n1xYolwbiyWg$Bw(wAKa4^X_up|a&>p2Fk=Dd;kU+_?30&{!*+{WwbuoR^K|o(R~27;X4dyK zNI|;92xw*<-&dy$n>60VZvRL?JHO5wOl{1v0O9uWV_|eQ!yb!Ro2?ZpSx}Bz1`?BgKhM(kqFJ27vyfxL z+9# zS38GqGtiyv`0`}6YfrlJ?t86{*j9MEOh&1d2^)M>H#JMw@56o{+T>CON7Vrs`GJTm z%2qq7RwW}yzHpFj($mx|R@UvAN8yiH%3JZk!{p@^R%}sv0~$b`6*6KrO?SJKngw@M z^G7$};8g2wn*!wIU5Au6S=Xf{n#mZ7EoAESVx_CseBK0x2__wX!Ai$-l)QY$&Ebl| zVS6=^EBF026i?38EiZ4Irn|gb+Fz9pR4#gP$9p9>UCj-qbx?Gdc0GjE;4-M{#dJ$K zj~jy_iwN^(FxnNlK<n$SnRSA z!ap6ldQv`=U%~Nh@ke9S>#e8XzN`u7^{>g#%?A*F&JpE{6=yXv*vI?dhsovuQ{4vO z4`id`k<+)bM(ShzIid4a!wa!Y)hcwbif-Msk#hU!)-p`3HqKj)8#0HNL!|z?!~f&y zLT2`J9k96jn|(i9ozyST&cw7SJWTc$uL6U?V;i$Leas*2cQt?H;i-WtA>}&47^Q|P z!uIF;PkDWfV3C=*SKAB6uj{b)H#|Ye7+;A$HZZP4aSFVbp<1)fo@vjUL%JuSYoVLb zy(TcDFGy|Xob1J&4vjq)6J&h3Ud7s0Vx;#0jGSxK!S17vZf7NmyWl|6`vWV_TU6Zk z?TX=YIZt6plDk%({ghQ>n6CiOVZ~h3)d`cq;-eZnhgeRjGQ7MkPEMGQ4c8;o$A~%R zgn*!sNBT3lx1<}`&#Cb#FjH0Bvh@sX<=Epe&&in7<k>J8Nja27)rq z<3c@z=j}Og^u(r@vzzyky+6m#;|w?`R~WuqZ2bSu``Or)r!bPQ=m~pW;>09UqAxqV z8)?iSOL@@op*SAjcDj7Y*Ta_j-Az5iv*_t{U2sx)QBLR?Bdqp9-1uTcox@vd;K?4X z0v99)M*pNnfkKdx&F4l>i$-9l)9bTsj2bR^g&tdaHK}S5m34ubH)hU-Tj^*h8PX|9 zA`0vgPB^^%l>$&P7c82Yep-z!bX6x_eE48CJ5*COR(*Jqx5>SVRp%L_GSICbd7$HR zw+S@9!J(d}X&`3Vx?9P5wDGMA7z@fI*<=(Z)1G`Qdf>YZm@MC(RBO7`Hft8TT!+hU zd`E+RnNFZ0rxInW_A6Y%tc;(lt*_6MS?UonT^QJlXwT5K()XP43qOoc)xhO#p1y42|lcjqxm62NO!wQ`H5Qc-spD zYxO24#NL*^iFV-2M69=el=u{`xpWonfl3+1V$M7 zSsnjHc-tyi6-QX*KmoxUt?Sac=GIZ^N1yJ!zLKH%$q)8X51w8_METg>=PkoSbCs(q zEPywFR)Md#roX&;J>a?mA(p2ry42YEgGY_a!%suC4SRmsYenVb$fvMkTBFQ5>X}-^BGK8A8Jqslggiq+4V_>$j5YE>CQ5EvM@y;I028~;58&n#3MgjKFpq1TO-o# z|K2n`q+1Fut6OO5&q`J6W9E=M&bpN+j=dCd1u>T2Cqp99;|`o_&uI!+tPix~N6>WG zWM<+W?nV$nR6vkUL68RNhHozKJ@@tA@BQ8P z{3rfk@3q$RJadjY#+Y+iOY>_R-ZASbxSKIWo9gVXFr~{llqxS^c=EdYQ_FpmR9R=Y z6o>kvYDT+0VW&ap$-Ttc*RtgGInmwu!7&1bM#0Qe-Y5hU2|ZQ$RoDCq)yMEKQmz4v z7nPzhn~_M}Gy`yQB2=PQhJ+weW$uRF-C-NwjoGg)mXrjl=y*EyJX3<@7Z<5@@Y03Y zVjFx2HLCBp0N1%%m1X^7t(ofp_I5Zr-|*PcZp8d}Ct z_&f8SY}Mq29!Gyd5}m8LxWT9ri9NaGv=KQRcV&`lnSQSU%P&{jhGi^!q4-xCd5AC_jN zwZcURlx&sMAt>4}jU5=ra=Uh}7Cs8|F^Q)tm9`JnfB2kczFpf)rHQsX@UiSj;QE?7 zR`U33<8Jrf2mi}@rqehly<@jr59UjALYrpcbLu~95COE|PA8FgWNbZKN9}jk3LT3dM%zGUaj>(?ls>_%sye^r``-h@9*+bhY%8eH?XLCNtwqbi0dNgO@oiFAW&st`U)$ zu+2%@avL<__eG=$-oO9o$xyWWqtO}{xtnfab098vZI0Yxd*E^Sb0#&!s&l1&Yt(HM z!p6M;ld{vM=*h_2YLpo3oHa+q)1k9_MB{RbjGrC;iZuUsJ$S+Qk4CaGvByLjB{pF= z$NgEWD=c-a-RJlhzI_SxVM~O@b(0YO@NF-#wMHD7<8Z?uF7_zthHs(!fNebIW4qN) z_n%)k4ype##-KX7zZm$QWJ%}AVWix*RE?i)?n70>y^hW;1lZYQ9I^Uk$!1^O(uAdbU@q<+_%3>2dF}d% zRKTBBgaK$O{I1(6JzodsJJKY>QK++7x=GHNNxnW|SQ(G;Mt^2j+kv8o{+xDzRtF#% z5vf7>%`GQZ1i)kP*vaePP?d)7VFy2q*0IG@FFd^4`BCaYcy#nMbFOxIJ4RB^dE8&9 zD4tFfXr$rr`q}w zJ0XE*zuHQBIY0zcHldfV$9LKmlQTK+W)b?8M|G`+%5op?H}G9^=acx+Rc<{-6^*9L zQZ%4>0B2_NILqP$L2uB2Tzr6NnVGAt5ctzfAm~=f4K~X_`pY-)@QN;Z@J#8KI8KzrZx)szr z*mg5Q0-ewh1xC1&B9D^JjwP-{Eh^jDt+qcq>orJuXSLpYFGtQ~ zaB*vdT>NF{OXqR9nzLuz)W=; z7rs!Ra~PY<*q&bYTF9?Iv<+djh(412!T+NJXFZ)@o9A|g{$_xaT!gP68!$JLH)RKX z{-@^qfW~{_H=&=4J>}%?6XW_a!oNwtr;Uc@7}v}z--Y51emi+itKt6E+vpC>LPP(c zYj@jsH|8&A-=J&-0^_plf;#yNBk6GHB$`Kj&h*h1PJq&NeDtquKscC5bMd>SHe0gUT;k6t(JN|VgYS0QkU zc(Ak4r(eA>Gg@1X37_azmM;aF^Ns~3vdOLas)=7>_1;o-uFKjFIjPjjO-Qq?p~PU> z4K%vAn?uv!5RLEpIfm8BGQVPiu&)dobVsc;_lXof66p5;28}qZSPm4WFG3m&cIimu zv-}uAzZ93)NB;7;he8Dre)3_dKKc>&>Idq@5vMVSMTQcS60cG{EvF|}IW1zeP5gV+ zTEFu9G?E=93@RxVG;zBw@*i%0Pp%XVFl)R-H__0QF8vN4y5^7jv-$S~IWUnlk_9o6 z%x7?k1VpaysmwC!J}Eu=f_{J?D$+u{iwy6de4Y0siq3L8*pIvF^7>Xe)?r5P{h0RN07R>v5vM(k zO51eRe7zCATc;bzMy$Qo+U{D_VU>3s!qF;hq9fJ0n#DKs+Mupsmbt2VYP>y4lN0xe z#zl4J*3wkz`$e*GxhEJ!^1n+B0!vD8%#TO2DD*0CP+@*xX?*_7(xcl`U+L8Q9P}WH}?ezQn)xtVM*cN3u%edc&)?)l2?)?R4R%+4_t=~o|6gb z_z)yu8eKOBOcqmKGTZiqaL>`X0lTV8Wqf<7{>YP7MR5U$hE2dCTKXOCM#@ER@C5>Z zEF5iBbHAluH*D6MbJf)yU|_#x`N$&#No_0+_3`Bwwk2?}b5QVICLWMDg$|Q8ei6UT zh&EdBd6m*jsdSGjO#U`PRpH4d0GN@JQ7JTh|D_b+j9ayN`_%PZ-Vc^rQ>dw<;^Axk zKbn5VaXZ*Pl&V@XbAz*LYbh#af)L6)6ECP!@-T@JI->J4EqP5kN&D(o_9VuG`?G3L zoW4(>fanKWaxoDbAvux$V8$WMgR(bFvOcU47cR%$3NWrsp{QVxpj|$MddohC?}CMP zJ~e@}6lvClr8KhxPK*9;##(yzG@W67;tespE=A#^+Zxr5mNR@TN)>jHXn10kQZT6v zo~e*!1{7uViZnl{^t(!yP>-Mc7ca6(5K(5+a@vT4z4dan<07dYwok`SRziaTlM$`b zj9S_UDxhr0s+uHpt7%SfOJ$;Pv1|xD1VZwyQZ!?kK*SvzPes2u45ZOCSsX0=ZdQKJ z->P!z679X7SV@ysXR0_G@h#{I-;9qJ=S{AhA4VAY@Cwe+FMOH!socvF{iICjkjQn# zBEoIc^6&FRW}NaAgwzKZI4B1Jtf-L?2q=X z(`D<0|MCKO2&5mhI)0%%S(#L8L;I^5W8IJM@;x}-@^$I6qvLWapK$a`sLhaM_Q6$r zpsI8}=dfYJvZ*3khi5k=QGVl^h5VM+pzg~+pmPVA_~7l*ZVQ(jXIoSSw2FP#Xn3|Z z>N~WOqFBZ#ZzyOXnC_Cx?k_g*FQROhi0*MpW*v_A?%lf_iZtOQcXt@EO2D`Z;RQCL zj{6$o5EUl*`Hz>*z8wO;7zpWTywgv{{VxwfZ}{+HNKMBD=(i?m7cDUi?5RYO$%JS!#CVPBwv zLfzbOnN5!t;zj$rKzWtINs=H9Mg1bAFsCUvZ~m~cl@#>}gLF|DP&sg0xFfl;Er#_S zUk3go78izKn`tNnO95DxzOBix+cgWX5Ve#_LoME+q72=v7D|%b>3fuBGd*No??B)i zb}^!U7)~9tcSYtYsbH!p1yM*cd?bxHm0bPXVcT8OET!Im-hEl_yH>qW^vUAOtNTmz zwTB%%%e-55HhHLrZ8)Ctre&`N&ja$9n(d7W8lHyT^6~)wB$2+Tf0ixBPFdVk=(1Ch z)R6i)L4yWZSB`Km3IlCOZMQMkV>dyBVF!jrv=34yHCGz`tE%T)(^p0)ARE)l2+p-I zb$*8P@DNBgJCu^YaTd_&_H3P|c#ZH`+T~UwP`Pi7d7Y;WeYzIRvvdk03F{#7Ae%k* z%FL*i$<E9>l`MR+<&Evs$K!)xXT5Mx=&fAYB zUwzVV@LY3ww005r;nRGyowNHpYr@l}tsF>^UET|Xk<*m@3GBiKaJYm$Up4h?6>?** zNPbRnq?ufCw@+f6{g|U!JbaKhS;5`$0s-AtsP}Yev(;5K0wD_58A_*30x=jcO7{HO z*=x@dqijX?#FA)c&ZHjjx^LUiUR5<^#){~=EtWo!ex)K$^$NJ_zLhn%!F(qGB_p02 z7iB9_*|<;7*_~jKKie)kk1(I*UgRF@onL5J7kb`A&-X3cEr!6=4U&6q8*I7w3)%JX z9?XkBL>olfizm37cDyXsFe7Kk;4l55r#Js8zyOwGWcc|xGBXOV{X$)rsYt8qh3(m4 z*H}gm?U^mVz7Cp~cGEK{dlk5Y;O=T>%IHo1-M$WPmid}Dd^v@?63vGy+Ne$54Y0>; zjW|8uEJ*B|7hBfc%}FWwb6oCm{vQYb)Pny{OnoD?5DvESLf6B#x8i5X9=hC}^jbTJ zkk8PVVu)<~(L24wzxny8$%x(Z=j$dtcG;J?x4c8n6nSoK*gbq!yJJ}B&vWf)z*M}O zudCIDlzjBdv%18jpRehHZN#xRT78Iht!K>Chc6s5h3;R z>5XD9-vi6ZYU;+iLhGs3NJqo(`$su@yk!7WTd%#ouq}f%FB4 zJEpe>l)tMMsiu8MySJt=@mjuX5Cp+R$dW;tx~&fpLg#S$k9W_jjYUNjDpJ$hO$kDz z?3I18CLjTvmo{aTsUWh@mNb_#47}99iB92K`^^3>pwzst9qo)cL!-iQjFqhn*v!_z zj09ULjV-CCDqU}S4WTqO=!+nBn!wOjO-G>LqzQ`}w7N^Z0#J?YY z^F5!kNtqmiVj+>*R9!VuOy1zxnGDxuEmUZ{Gr>=m9qiwQ9FZ_Z%X`6)x9sW#mR!i479j~#vP)ICE2D-TeP zdqquNHd4`jR;|V!(5+t;%<-V{&c>HsaUXrvL9gNoH3sYR@qtW14nXY*sB($VsT-Ix zm;m$y!N*5E`Fip9?<*PeVeCpmXfCc!2Rw*9N$&hsGMN~APIC3yVrkYqsSyZ}x$Zlw zc{PXf!T>+@V~8vHS57$v4C!wzjVuD2?sPDFAhImZpCTzuL%r&gb9dDFomT0`qplR= zMfpXVMZ4B#hW;W7D4EDdH-_nDch}GUGoAiVDfyRP{2yAApcoN|8J(Y^NqoJW7OHy} zvHQj)gqZcF5^795y3<&-yPUn+b3Zs!KO+5RWB{QG>g zD?4DVAMyJ6#!k@FFd&3N{lIi2zvlfTIoxbwK*VXu4|cmNCKcxQ!xYpk@NR~MAwgxb zh}HCWP-Jlt57CpxBJ!HJSmx=hTBOp}G2tj9I!(6D(C&1Eo!>ovS?7W9von~12$8F( zM|A75Q>Z#RAEgASmY-p_e9qFd$`RNSO1k;9J}(49FLhglv*+vGw3Yx67tLDbB7}86rP0fpkQ;=|b z-(!9)R1u!Nu_pP|Okc7SA!@nbffUVOqGmZ%=0GqR@J+{K!s7ai35Jx-^}`&G^rV+W z_wUOqG<`qLCmUxK<$E%nckWMC`6m*}mwwfVAKARSKwX`oCwNXpmrDn&aQ-~mjK|X2 zMY-3`T;u%gx;`@=w=h`xh7Zc*C6kd1sc%#U0fyh+ddtO8Qod-O5T(2?i9ufxCwDQP zIg?ywFHghz0btm*Z0eOv{IpIGJ*-vZxt*k(*%7-;hf$(vnvDr?ba!x%(RW-xN+0$p z7C{eL6bJP{Mpp1^a1$qS2WD(!xGzt4{+`5K_7|7OO)oAknGlHCC(-kB^UPW#uRWg> zAdOFBBpg|jO}NLpew?LY?{mCWRcqweN;iZ^y~JiY$f4em^!@!pxI8}rfebp$vcDj? zCsXkq&YDBOKTRAJeBI{lF{?AXnzx8iBQv*hixZlYfDTOT8&I3Ri(3YcK=*5c{j=`t zJdO)9ekt7Hrgd5@I3|ZB5<8qj?JG9tr89(1-LD6+O`>jMCN~dqst7Tf?GRt7%Bwc5 z^7U$UDjD-@x^Tze3w;;Z8nzqR_Az;FOyJb?wf+R!BWzej$N-awJ`=?;_x8{8_O@9` zp1ZBN-kZM7seP&V+=g0NN;IbvmzzZLwAgsj|V?TuLSQ# zT%n_-rM+1#vWsXr*TSRGE|^ZhBGa33LKAdHT=zM~+kuJ1l^oEwyLu^^lC4*DPAgA% zw%zHA@hc|8EpHCnbx>_7W)lK2MWQ+QJ5K+vf#t?L)FQ3BG;(_c|0vuUj^dm3+>J8H z-1{30jG{!QeUw=WLQFgs61~=E#dF@%GZB84K62T)$VR+L5)?beDgEWQq4+o4t1{u`X{gOg6Y6Lu@kS@n#@b?`*f+(zK~xN7>;CE)cJ+Z8Xh7kSpFXDj z4s1e+@men|;S-&Y+|FpKa2Ar3<8M%C^+h}(dncTZn5N5zZKdfXnYG*+CR@LiXSt0B zqgeZLG>IJOFsGc*QHm+rPlO44q_BZ!Xm;ttdY)rtBmFKjb%|D_7D|RvHw2%r{~=Yf z2Mqr3SE(z*K-L+hDEVZ_e^l?SwiIi>kG==N{q!Ri%X ziylf}yKA*(qTJwE>QvI_;iHefvZ%_sc2T+_)mS6x?bWk+^25s5ALj)orSnd|d|;dU zarQ~2?T*kwiV#7A)Vj)bfWgUqwvv844d{*shOc)e-tQuu8Ed+D;SUO(X$?E30A1cb zUjP*k_RxdQbIlB27ZQYX1_qut^@u3cP}7G{Wqf=@&t;fcaa-xsuSii8Blwum$#rw# zF=&+4sf@>7riEcd6e{eNYqtiWHX`l)JpP29fg(0=uysz_G8^sPOpp_lWxqm zB9dk!PDSM39tVguDcnv1g_6hbs71XkF}-+b{q3@zvw?&Um1IzRdYpL@zlY8m_5{@S zj5&;wDri5&Kr)_QNkQM~IMc>9eXoO_bA0Oxv=<5Tg8F-Mwfjob*Hlx*f`&V=9#R!4 zFLc-oa{-K*Ggh2LQ)7w6lfC-3E)p-zEO2=2+SB5#uB^0BRI}29ol;dW0DUZ|T?G4i zrpj7h=?2B1U0l-nHudk(IUI?0!5?S&^*gH^%xOQJDWh;da9)uD_XPLXIrgA$`}@3l zU~dS$WeW5-;-jmS)_ZV$XE2mbT!|J(Qkn!A=#pWILwNseq`KY{nYx2bZKvRu#7oY{ zA>qLaJ|hg`P`idjA%Z8kl? zPv><#oM2=rQTl{%}=@e%& zsOOHOgd))l7_r;kn<=6%bC3cyPKI_o_(b1p*=ug!gYFLBtEKxuOFzejQTD+^hY<~e z2SM29s>f(VpaY9k#rKw<@Wqu)3Is+GbZ?BiAJEauV?OESsVI#H$xhgT6jkr(M>-+FVUWj z)*^;qPMgv`y=$)Lzw8B2#eCxecYrdgXd){ku}GS^GEMMu1A1IyT#liah0ar{YuBoJ zQLVc~7yCL|*phxcSdW7LV(o`xV)Pew>S_!(unP1CHSQY|1ugGq5gcKv_zxUWgh8Ui z{#7|%n$mvr{92R{cm#8_%b8`evrg1LrKaP0+?R)wG$fLxOX0qsEC%^8q5ntGC+6b& zz9%YK#pcDg-c|`j5R01dwhEhdXO4fA?oHj*D`R(<>kj3;nJAedRAKj-wWa?gg}cJ5 zz2m1Z`Av$GmTR~)eCL`@Fhb>tJVVF2EmdZ??IyY{6#}2w_Ut@`6+`~du9Oe14eS+Y zMg(JolZXOWu}+;8EHr%qW97lcm$CM-Ip`X$AYI6R-)lJ-ya!Jb9eOnlgulibwgI|6QJgWUB&|})E zQ+g9TY7V@nN=hd{=ql)<``f4eq4yt+xT1oOvjXBQ6^{q1(ld1|5@L*Y-a+iG!%RwCs6~&?$ga0&!-9ze_yRvoS?c zw{`K_e*c3ln~-cbjd$Nl7_u&@Hfi zMy@p`kT9zGVHs=vXw`%p@D*G2Yw)R6LA;@+3xLYq3nkUH3oK6#)Cw~mOX;CQb76TYp1(xZvY^EWVmqsyZSCwU}=PzOHXe=>-ueNVS+0d$`9jhoFn7z&s0pEa82a~=D>3DLs(u8%7(^?o?)G|qqUWQDbP_>VwT#72)q&r2_1YEhds7NZ$hc+L)$TYFQ^kdI39 z+Si)*y`VL$NtH-6(DW$IOD>A^{LQB~p5HQ86!Wh=rzA7r^m z+@x6vKVKLL&3YlAWgYv7TVfjP3 z>SJa+3l+X?+wN7Cy3D)fUQBz2u^V-{<+4e<)N={Ub*qNe6U}*LAc9<~7|lBH=XBe( z7^-hL++5w>_e;`P84m9l_|u7hhMA&gf$kcI`>Va3bV}-l#HFpK9NJd7_Bt*{r6Ho+ zjmNo`(*ZkUe~<^B^|B~vA)m1ZV<@T=$K2;o_^H~V(01yRf1WiMz{#|aG-xMXOuq@| zdEnut%K`-WPcra^2LW2R0)$Ue+TEXcu`u>&UAIj{Cudo8ko{uWV>l=Pw)gRy$eGkJh?%yPPNE?#`<} zbah$;C(xbRXC&H6aB=&44vOa4^KI>1O-r9Y6&u-Uw=}b2H^?Z*`p(Me|$- zc3rWj(Kw;AnRwBYTP+pDycy4*0K|g^)05^Ao$|7djW^GC2E?MqGww%}(i`?u%tRWa zinf^T&I%8YlPY2}@6E|{uy0mz@fV1`baQxT+3U!>sxRsbt=7z;PD-5Z)ap?i5BYdI zAXb^Rpffm8dwsHqM3E>A&2Z;7nmi!z+c08y61iU}WJnE;j_OVmk`)oEMx0#-UmwN_ zZ5#Hs=lN!Wp0*zI^#%PkL<}9-84w4Ctyg7_YBY3P%_IW!P0tRJ zBZ=Mb!V@_NL25w=F`;!ZX>I|y+ft;`M&AlL)A|k(d$&j#+rai0w?2FA?+W4Gfru$T zHJZiz1Pei1;n}!*$)BGl|Cs|u+|#%rmN#CdB+}7C0r_h8vSf3IwbVS4=2%7fW>1;* zIK8nLz&_j@xjPnnFm^Pc=cZmf=wLpSSG}zDpu#%HWyos5HdS(leLQt5V1w!9>^-OE z2r`7}YT;%({X0NS^ATk8;~`a_yjuzC%=_MYuOo#bb(;mL6rQ8~HDP)BtDP@}*3+;h z5jp9hlM~6$$r)}t(5&b_0fWlU2mEqlLZ|h!i}$a}K_#^C?3$I$K^Zs#5s^34wCTJp zfSF`~u0qkq40>X#&DX3o;yEpa)-)?@l6&&?$3TZk2oz0j5|mU$st|_D5s|!5pe3{7 zH_)wY0z`F?pN${tapGkKN=N~l*DKpvQE1qiA_~BWC;Wya<*`82U_{Ig_*DIxgyMXE zM1_YF^>#zQ6fW&U-}zOh*{YN2cf#DL=or8X!UY+vJes%xJ=oZP1eH}8^i@3H^c{Q= z2t-m-mBajx#Na67oU{)>NQV1sfXG)*`x z89fgzKFtIk?jkqOw_v~EhZ{%o@_Ov9D+uKe65c#J{{-5SvNz(n>>kk#sJf|5y!sf) z_*_<7vPvoNJ*aIM!#O&=!aDc+q33&=WUV zCRJ%eJIWVj#wsrt$(@`$snQzcq!Ho!54r>`^NPctr)qj@>sD1r#FwIiFMJd2Jkwq) z5oJKDh?(GUCRh|H%6iD?Oe0;gnRMdo{K^ z`w+2bw`+B#SdZ0FQl>2#I4l9O{64e|O&1o8egsS8$|lMzZ9N;;tZO$$twDQ3(Xo!&i~hJ z`x|E^*o&|}rPA?Fh^}paxB<u^*n+0 zkB%gYn?Dq>QCN15nW5GVaROr?97<~scjq0!68bE!BZifF;o5{W!>}TD9Pv^OS_A5r zHtu#tzeRk|3H?o{jUq$_z=KEoEmTHq%!1_{Kl-L(W7O)kXo``?-Z|gp>J4$>d|&06+lWmeA~%#7R1?s&6WXg7|lsWLL-V0kic@<;_sek z?HRZb<*GWx&YSs8|t>Q?J!hhcQfr-98^@}@vMTghQElkoQ zpEF<8v9U#`SAlx70G@;ea3I)6(_Dx&6<5?551w;webIiFJ6<&WnAD3k(8{abdO%U{ z!4Wu=DT)xik{Hdl3peHm-Jry}{(uub99EKM@a~zMUP>JaxBkrGh_vi!qZq<*xm)); z0kzJG1QFuGwSe;?{SILLGPlu*mg)x$cuo{~p)X#$Z7p4jn4PInOcwITQ|4VP`MQ9R zM;$Lq+s{IZM1{|NPPJ1=%M{z%=01{S&RUEANRJ{}a()uD*;3=OmLnC(U|_U`?a^q& zX*7-`3qRKa-CI|iI~-}Z_)&C{rn12fmw%%*lwV&#qJ-h1fKO~uP)0XuI}P?ZpIR|f7H0HXOSjO4@c@eeso#aG&%MUl4gz{uccOx zgB|RIl->VHWc~FE5oFLf_px0oV^8Mpeqnkm}1oSgGsrB)8*i*ZV|g!{P^3 zw>Lp=L|buzjAJ>`gkfC?$k$RODLg28%^=arv+M z5>Y6HOV*zLyR7p0|$oUTF+=iy6i>RfU(QavrednIwv`D=;rT#n#e;e@w$q21{ zz3uvtd7Z&x6ZyN>Th$!eH%vH2q|KPau&mN>8Fg9lw_9Y-!bkBZf8Ln2>OX> z&S&XV7V)%5V7b7#@5BeyLds=~9!>WSWLsQ6-4*Py5!+8pOIe^gR?S07t>G2(=|sG* zIZ2S`G=Z2NsW1Xc)Ou!< zLj-k)H8!-)oDogRwp|bKAKpVP4}+6t$rey@VswF2zBW$tPWy*iB3>S8C7M>5lt!G$ zo^tIC>sBzKc6;`5n=gPZyz*K+SmbEIgJwd9^Iwm{@b10wYE4JbIe$mkt;!NSsQ1D$ z^nZt<|F!RpEfHv=K>fy?xVP(D8QRmu%%wkQIm=s~t$)g{q~VTjH*qYR4L9j8&gV6H zPEpErpSg20^Q5=&MaajuuqA)~mchLj(4nCEXHbU)7*q0Rv18*<2fLe#=F^F8R>^`i zbX?HSgu6h^7EzIIEiEt=p-iar^=>!gF{J~<1D3BiES|@^MKy^KIz=R8Ig;>K-bo~5ydNZTN7Nrn6?sOx-qWK+4uk0w!bE_BF^CVw7b@mU zr={RG0YAqzw;|G}8zd>$Rc1MK8xwqa39KExGjQUn-O`}RTJ>YpdiosoW^!j?0rWc$#VE=x844e1>-;?fA#e8#X6 zucJe&<>r7t&+~rCwM?^Ujou;%cg^veHC<(>ofdh9Qo19Ml#pdCTifiBW_aK}G~btB zj+E(bd|Eo5J5$V(E|A>MRO@u>5b2&uqRT#5py3X)+(EZ}ThseOL_bNNCBxL|65&`2 zq)~IR`^FFa#cvzV%>gmA`8Kcs!vlg_8hW>{ z61!%5LVfqDTXd_QrEc3$Vl&fxaj4wMgca9kKUM_*znVR^KBOzw5M1Vn;j^-B72cfk zyopOM7$yA=a$#&`>(i$wrecU7m#Su!XokbKMH_>`0$O?KaEN`Nn!MH|e4cO8lbrog z;4Hsxa%pJ)*QAR`gB2}f&#uHDI}Il(Dr~W%FT&9x6LiU#%f(VZ=;`0I(-Puv_RE=H zuHK=gZ8^x<8)VF@Xgs(ziVCFbu5X{?Z&IEgKC?#r`eVM3ST0jB)Zhep0m%Rs-24v zC(K+mlTyG>O_7OMhb!xv;<~8h>;Foh|1}OEh{%{10Q1#)Kh3+|Jk~Xz_??&k zbbGR(@TN+=CnsM2$<6f*b$#uO&C7#@Ou?l*6rUO8R6h#cn1b>*?K&&j?;n5TI{})< zKn3#@;`Y$z=v$f-*f;3LEcJXn@3fl6Z}bK-mbZX_RLj$OEM*b#Qxp>fBRHh#ooJrT zb#M+@d`I8d<+&nNri{%%QQm2R@~+xXh(;E~j57MG@y48U${viBDw3A7q*AK~P&Exx z5Ll3Mn10)QdXI#JMsw@zHO`7!s?Oj^@i1%zfU;g_!d&W=IRJjKr%=V#*0|BsCZY8~ zewr3d6honEBPl_k&)yv3v>RHE^WEIZt6n0#IjlI5hjKpJoo9(>Hwgx>W?!59!;L{H zwM>sib{ZOn$4cK7lybm{m#DlKHw|);PEjeA!?!ilzl}O_KBI3Bc;=DB9&-&NrB%yF z234#-XPzTW!2-l3krhlDOg!)WBqUF=Ikl-v123uKL{z%}g*D^ZMm8oSc+=kuU0745 zdKbAM)Fn$`6+k#bD=~O6Vv~kySWy5bl$2NJE6j{4piUEy!gj?a&Rhf-RQU%U$){I#)GZ(r_cIF z|1mpE=Mp5~J2QN9{Drf#9@b*6PI+45NJoJ%bs9a^S=sg6c{Wicuy#gN=sH1&&-fHm z-3YYW$4{~h(t3KVYnV_xIY(&R5<+3kq*Y?m=CRSEzI5h#LPoPrgbgj7rJ^pz&;Dqs zPt#-1WquG$CG)!kgibzoy_!uO>V{WyO$_E2=cUT1+WFVHeA?6Q|Df<#4+GfgnJ4j! zN9qGB+x1C`y)w|b7sUwzdA&y5)N?dCpKJ;lVuIHDy%H}Hn`9+MQ_ZrINV@EkKF%kz z{Xl6ovTv?u)D>%nIPE>6L@L51y#7K}dCQQQ+SmJ^`w1eZpYt@>NCi&tpZjEiOUvU# za&fvob!##dXB1zxPWI`UbUJq=8L$+f`5^V7Lpgp=eZOVF|NozY1Asg;7IL}Rk(T?= zGXP?-_ro~<&A%{$UlT*A)E_!h{K)Zwgclyr28m?Q9cJ}PuOj>~^^qS2r680$8WNfC z#_tEX+qxAiO_#^a;AmLs3UfAiQ2aPqIm~>a{Nd>es%Z`Y$fYWLQ6P6;?p2D1koUe(&yTSS>HUVGO`K`ss-lhlDWc<> zyq5z7(m*SNFXcd*vG@e)D(Z^_6)~51WH@?q{j2=>Rx=-me<)vgda@E-4+T9 zYHu4gpP@~>sGJ);eaS+49x-VQYMS6kIBPZ+hlXZ4Q-wPu$%XdxIc@zz zgagYiN|=S-b=e+&j;m>YUZ20zn;Q=;B6rton(DC^T#~WO61LQ{5%~G#qpojowjb#^ z9T)l)aM0~JoL95@F;n;}Zxc72f8=$ERWu8YD~M4GK;7AI(0u9StLx=qD@la2svUDr z%&qN{SE(a3NHCsJ^frG#YYkae?q>Rzs=3mO5tO2YFVXKh`)fX{d~T8p%Q?s@D-nOs zRq@C(1*I-|NWEkE_yk1$H2JZ=ANe_u$Y1Mz2I(~t%mQ$yY&J7{<#)dIs<5EY2^w3< z;no-$qgN0805-A}eL0GMEx#FQ(L&4KLiKHm_t4eAVc)HW<&&Go+@@+;jLFX2`{Z_? zz6mn#=;iM1B)^la@->rmzlwxXe6ZJiH=$o?hYW1FGVxySR=74#-`t{p2ZL&M1lt7! z^}wEOB9H}u!Gnxt!hN8k8+ozd4({nqV85!KNXaMzS79irqQn`CPa0(-YIvnE`UCW3 zZqk)R0$d(g!HQ(UI1x2~ds|KhHHSOX6xv0`7|DIA*pJXh`T($eDFhk*NBT(5i3ju; z$(}@$E811j3tMX%V%GltY@0Y9 z1wlM8I@A4^E@}OVv0snd2Zn(OfX(6tw*%+tOTHVW?XI$>febJkVW;3n>4`YsUb*~u z-*eoVe|(*2&nj5et`ZQ4f{0bChR*4l7jskap@w=EFa~Qp4RXCLv3VVRKQMUNCFCNYr$Zk)CG-VaC()`t3 zZOUY1Ku4Hi634rUJMSc4$FxYh;KSngT3oz|ckEOe*RgiF$8~~dSd31=@P{m5>y1uy z2vUar0pCd=m`eD!W$z0Y;4c>b{8jHrAe&MoQ}N{Q`}SeT)5~{6u@ z9G!%p8}7J?P3?p_x_B+T7cNSl`pOT%6dQ9$$Dop_V4C5|2m3!MPo~m#YM25V7(Xy0 zUu@17D?5vvc-Mv5N_!YsMNhW0PWb<)vES&}-~K6h37M{P{N)E?B;7>dA$#Tz9P_{J znPmK$r{jQ7N@{9q&ft!}`;`VY@zFzJ_OzW_dbLiptBJY%s_I^hah#TOgPmg{n-?WY zV`wv^a2HAv7%DYS{_GT|CN3wl;j_8mykTJ@t)&AU_^Ln(NVG_${vvU5;3S zR3(!5so(Q{QfE1Lmf4wU^rG92T+orEGn?vXgiaiSGRGpxV>5OURDm+%RunSg=-3&7 zgY|G=89spvzzIUnJB!`*S-{Jc&QBE2!O~rTrDHQrzH$@!Rt^9dv~8FC#(&4)|KS|} zZOsrA!iDVFb}d#VWY5lu+=xZogDXtavn5r5$A3RRt+Y0Mx=vgJc#Zy(#p%BU%`jNH z&S|FEpNaEhM|Z^FZKKiAEz^P)12Onm`X4Jw5q^k>jC_>%ubuW^ zR|>8Xje}>BMxA~ixs!)Jg5U(zD@jFb(`d-Xab(HdHp2e?QFQb8KB!Z;KkdnH{Cb8r zT=3B)kD-g%{5IK`iEsT$4l#U-R&6&e28kQtO}wBD7XsTm6e4gqvlMbuF2PhPVH7&Y z$(}S_P6SQY9c~c@Q_dyWZxi+0w*nW?8|8=!z@59-3&G|DG zIk2IR@lh9-@I`q%>tQ^w2{L}# zkL$WIBi}=a*KX<8-s2emR_aXeywkoTu0xS+3w{0lFu30WHG$YO&hc+QKzj9a0rGEx z@8|i)5pX}lNU^PZn(a`!DLfOxVF==lk0aNJ$(X z@LYcvvaP%=ZeD=VM^UCNc8aJ-?Aw2D%zd?R@n@@`gww~-L3Sf}m^=72A7q%U2TSO8 z$kGblf9vl#TYp*URQ&7mQ{EE+E>_leZgb?pUT#Mi7&H$*xZxQ4%_>nsN*Awykd4KvemU7tO+OORMv+4+mmWXKv6}@6tE$1-> z$>;vrTFLq(r>ynOO`L;%_>_f-Q5273of3WxrNYdga$@4(y0j%)= z?0fbTWIZlW;UKjiY=qLBsZUKeLbH%{o%_gYg{*73G%VTdYKGI_USzfyI0a|)c%Pkv ztA|mVB1B6~)PpO+?cMkVN+NQ7zdx4`+<5nA&zbn;XzSgCq-}8w@BV-s=Z8;J?|BAp zXD}6 zEc56^?T_5JE-?^LNKY3>f{$*z3i}cVV+l4VUa~xEgSy$O2u!zM_-G%?86@|~m74YF zgo(bqH1Ms#7b$z;ycQLhp|%%n*7K96eI{_Es{?e z5$t`nMB@y}?||X=HTd@!hTIe~ytcO2xARvjAjU&2$&m8*ff0k#W9Z&rHz;UR^|Wy+@<((hye+(zyO)n+oYu>Ql#**|c(?8z^R}Q>h_Nww`}CM2 zOrpAn4~^s*mc?zH@0-CICq-K{2NO=(zy{j0%(-pxrldvgz1gRiF6b%68$akT@e>Na zLJAKH!e1Nle=Q^a+g%+y6>}AaFdh4~E@&aaM%>it`tpa%hvZW3QfXv=4Icc6fa8Y- zk+HD63QBkb%)xZ@6my81^Aw6sdN~%gWLn3M_Kb3V{uFU{%2ccYA+H5o-N?vB3O z;vIzduz=#W;5`5KTb0A?H+e-cYqKAe5%O>P-rj$C0iIa`a71S0Z4E=Gx+Mgols%XC zb2Q1eyDm_W8-%=kH!AI-0_E6~4~k{CV4o^qQpa&2S3<`H*GOX`ar(dC@2_Crg1H)nNVr|fgL1wNk(`p;S21@?zr58=;&IA5m=-u9xPJii z0CRy-Sy}=9Zz+v;MGPvujSFi{(jm4NUda71evaqQU)vZ3{RXrb&AJht1UYB$RQ_`t z|L6ZcdS>(7@*ls8xp0cm$^BsBg%dOgMo5(Z^)bf8$XO}XIRg%R2_n4v$#{)L9Gb+> zV9%!=_b$3MgxMG%n!uIx$DN@%js)?{>c66@YkOOp0~QDOHW0&Vv;Yyi9Pxno96y}{ z!s_b|1MM=4$I#;FG=(TNZxmCXfmNep)MHCm9rWRla_F~jaW8UY%kYb#g}31{4k6uM znl~I;PAgr1SSR% z^&^gLm{a^1PTA()V1rAOTxUsnolik2?U%g1;A2FyIcRf88GM`rmhM3bXiJjA4p7m7 zJ0#1{m&)57zlPqUgJ=#Vgh|`L#}q?5-d)GFj6N10=wtEkWbb1!M3J#V)CVjJ{01{m zW&2BRK&Uyk$YL^mSsHZL5FcobBIrHK$N=KZUZvPEbz_2A#>N}7F}jI8lURZ*8~LgL zx6b@|`ZwS_WPYi*ueIGQZXqlklBs-E<26Ux<63RfcT@z?_Uu5 ztoJe|FEmC zcPa|>(Jca57nvEOExw0xrGT7W zBLJF%hwKDOKAeMoFz-51Uz?n!mSS%^1*Cc!E-hciMuI<4=FHst@WYpLFEctP$JZOb zQL3($qX-}_yjY~V0X@hT#pLBmJQMyMbTLApOTe{Vw=hPZM@_U%&_u@2+6^n<>)+Vu zoJaq9e35U2Uhp;xi;$*+NC=1#Lf?BX22C=I|8j4BrrOo#SGEA#zX+bCr#VHdKz-6Z z>DUXh`^p1v=TvUYRNuJoZ-m`Fd2<*ZcFv=7$)y+EB z@2|Nqw^CkUg#zZE6M((}W#KlT(VE9tAj3fiz)G$PhG7o&5rV`n0j|uD@@F)%3LEaEA@aT!syU=PNW)VNAO4RlGSkW_@d={5% z@Mk?f-wsG!1Xd(FFc7mMYQUkgwA37smw#I!IRFL9hG~mYkRY`mIj8dQy}PixFRuXu zb(Pyc0)6QVsbde1-v@`eM|%7hmGC6H*X25ww6xGt*N;=(+!U`u%7-ZotIt2e?yZF< z?Nk9N{MU8hk&WS>RgB&ha0o>;zb0DsVR!S3!dD&Id50fJP7dSeev6PwI}ZldE+pD6fG3A2Xd$np^iZpfcQa5+|N;Had{5Xl-Js- zy8jenpk;7ikeu+Olzur9jGw#(D-e8IlkKegO}cw#PFWJg_3*_S4KwcvfvQayG;qQND_G@?a z%A-6tkxq~e!S+TPKP;5TG-wY3<7Ygvnk)(yRTDSpZ7Q@MY7+JJ^(l1jZa+Tm4n=9z zG7s-HLhZWHP3|F4Ac)<%MuuO$-rzRUhqn{svQI4Zf4Lm017;gC~Du%~#=2 zSMrced$sm{!n>jOnLqT;o2m%53wPG2Q+&_87TKhE`P;83c(sp%?HyH(Lu%b#m? zZAzGWbK}>YvsS3Q4xYa|t2TLRg9dchY`Cjg)n*5} zi`E3RxRsY*MgJuJQ|Ob3>0J0$W4FN$wYh@??}K~I0=M1Y;v)WW1}xfco}<8Dx897cG0kYjwCwBe5v^8CMk~b8EVyDHfMp7Ym15w>T6Fm$q@6W`F3Wi^%>X~Pv zyZqofOGEP%x+_Kr7FXU?EHNHe%n!V}u&ntwO%BN9XZTbjzq9L(MuI*M{LXj2BP^r2 zzh-M_sY+LE$w8C;hI}8{p+_{z9X(Smc&ywLckqiPX?5?4Mj*DZv z9!Gx0&0Q&LmFWQ_KRxdwY9}?3Y|htKq_P!(M~}(hr-;&1cTkocLw- z-Y&5(rC1$(yuK6p?s1P5zkCKVQ!XQ=kV8sAQ-ycU63VInJADx8$RWpQ67AUOSGU#> zYx6c1Rjx*ibrIrEHcC3za(x_GfxA-9T^8pit-Ii!kB1^JMZ>-ZcezS(hpM?)H=j z(Dn*&lb^3#Ank6md-sH?n1pCt0Uim(r<{Y&N)(09>fbtUOxclgG(^ID%}ElT(TwD! zx~oJBJ+E69{$r)=R-}B5IDs^Q+q@m2)xP?txU0@qNfW6vaUEJ2DJdS$sS*vCt$+|mi#y&&t8tA-HQ->WoGNaGVuL|bw!imdfj|r@SdXCYmmsu zpcQ`pBu|0sB>rTB?<8|&^Q`@=smpOodCSf<&)v8FHOb?v=?k4{Lw+Dhhji@VZA2ui z!cNLD==wdn_SS9&9YL@9i+1xafK@!aYk&@~<3;Q#s56*_ZV?74Cas!ydoo;4HX#1W z<3A*!XGOy;fWv{n%64y#Yuwv$#nymUiyPoSavSR>n}85{u9nEZ322JyZz-Z z(g8Z$e|6sszULbscTLA4ez7>>k!cPN4iSp)Ec7>=q;%spzuJB~vP4g+`pvH@YSQN_ z`^0T7y9-nh4Q9=ea?D-;HfcOg7UaZ9P`&4Gwic}!Zo{{^PeRM8JqdbC;%>msIgPpo z3b^gU_5@gD@@=BZuem=h_&1x2-Ik1(cD&uAs*S^wlnWe^x`L;j`PRKcw(`rDCvCHC z5z`{m-5!e$ezBp|9-)AUkstAarR>KS!x5Y04xrDBOHU)m_Ld_2zdnaw`m*D9jm=;v zuk&5(>`5`SCWDP$n288516tjTj6~;TPPUN3xq04}n)KZ5^G1PW{-K+pp`tW3cTd?Z z`nA?Ox1?{GTlAvGh-;E1InZ+@pXbU+_;zEfsBK6Bj=}d&=Ki1x-x&qcL7`~H^wX=^>Ovs(R3z@(e@YN3NtAu376q7uZXzb;BF3084v zGp!5ktUd_@x&Bsg4D#bvkAbV}T3T)4ez^qV$+qriYo<>6zUK0Vd)&Jkz0JQ`6qBfy zx&wN>0FQ*>tlF*++6GiW~Cp8SB8cG!I;VSX_kZD?ItnOAA1DA^KIgDWcXoxZb($ zHb1tohp;f*wDlNsqlqd3U##@seA?nkCg9w4G{5);O0>6q{c2rZl|{UAqV?5NuU`ZA z<<30et~92KKKj_-wIW0IbH39~JByj{G>BMgA!50QBDTq^K?oNbQ#Oue)47YZ;Vz|D z_s}V_lg;5S+D7{6%p%~OjIwUqAs5ai+{ktFMK#|(4f6>85Zu%U&txPfm!uSXmGM<0 zU7c_Esb|%GSs{&CX+kwB=~9XQltyLj15@Dx?`+=SjVK=h*Sqr8n*5bkh>S!YP|pCX z4LbASdOVU)M>!oNq2yd}*fv_hLg@8}5>_=y|P5>96#=q{&Uj&Qs zPcDd6+0iXG;jT!Cwwydy%VKo=0kkvrd8LWyc$3RBYl^^U{@76d5N?mN`~oVTV~-1iN9bs3?1hku`U;m`K*`O`9T*p~ zovQ<1oK-+ML0N+Cf_cKQ)Sa^ERn(QHv*Hu%PZg7@#m~3c75>`z4a-%APvSph9pTuPo{~ENp-mWzKK^x6GMHEy7)YDq3jWV_5zCL*?P1Ap3w+ z$(KS>`qRi&KN7pY>|Xgcm~!K0?g_VDNpupBhrs-I%%^|SAlKB>x!uofCyL}1`iQ)I z+PP(pronyUh0nRVYw@pS_qAYK<+pbF@w+V%O=M#SvXka|j0Oy?D zPrvoFtm8tzhFT-fomw3!!8@Gp#$0r2&Fb%;l9uw`rK_t;MJ~K1;dEp(WQ#FUbeTvJ zL^7f9IARiF=%2J>bXj1nccCu%#7;ujg{~(1y2^!;4M;*K>sh&ZD^06zy02CyTKFR8 zTR}*J6(&^r6G4Rb-hhpvEJ-uoET#QI+C5Tq{&cd1KF%|)Bz(Im_F2>ipjOSA9^S(lqTFfPr&@~Q zyUtpP^GFkXQ9|mjW&kU~zm2XHao3wyFjYY zCjvdVVFynbD(5Q?LAue&*6xq5UahlR68ute3-X^)(V(h9Q!OgsS_1`0Mz~az1OAmQ zb1$9BVDUiY(I#T6eBK)}ua8k~u{ z0CO4e2e}|3zU@W3Li)A6X0y|FBV>!_jyz6DO(DEke+v>b%B|FYScJNehS(Fe8jaAr zC3(fVL`W%$Or*5kq>spce34`CTT3Zb!YH7>7oKSn@}PQn83Eg=RSuEd73YfWmmtx? zekgVcnADN%r2s2`i*UMcLdGk{;1>{vIv*FieSy5TTf}^ETU&>e`8)O_ymUz5ERDhq zn#5go)57!xh92P+P8l~@a64;KgtLH=f@wzQ;_Z$@xfX1td{b=zct)}+ z3L9Rr^?o1!`^=uXe zTlcW6n#AjAf!x;`In+b5Ew>88JCCNlm0 zv+7YQ$KMD!1W9s(GQ@4;$Sn}Wxy%2(&w#@!37@_Tm7Yj{+9w&Y{&x9W~OT$gd z{vT!8Zu$eisB3V~Ty+*Jh6_sRi;>eQt;?Ndf0_!Us--_Pz0rr@UwFpFxl)b|8rvQK z3z(dzM&Zt!aC@Zq?u45nqJ`Kk5T-0MO(YsFC@_q)ZMnw$G3&1XT#$5u zZ;6h6q98IwvqmS!Joqx*Lc;}YU$&m-aYd^z12_xH{c4cZi{T92C_dr7nhSWW zG~quGfn!;x1d4!RoGgQcMg$ya#&a#8+3oZ6m-3V;A8%%SorExl10t% zgJTvjxw8Q0w(WjkEv5OQxeXxC8$gfFQnjG2jT1phOgz~R%Z~moGWuJF;{37+BLF`!Mi@$Bn}$0|5dotq$4{rd6HO+JbLe^PRaAMOez~LIYHC zVLtE#f8#*4kd1n9E(n+_79w1P5TU`{;=z2RK5T&_+g+^N*)IHc5KHq)*HgzqJx6LZ zLa;+G42yIEdEjVpI;FdLs%JcY*afUR0ff-hHM<0l7E43I8?1R{Y=I@#iZO$NquKPJ zcvhXmb*#{Jh%Hvi+u!aLT1%;uN)1F0T?ZOzGcRX08x%rZg_m}gefMa-*$-@onUu&1RMZUHuvXWLzg1?p@( zVKe-!MLOCKOKxR+z9VMdZ;?ie5f(at?Wzko)-W7TN-b0-i*vQx+uQra&dO&P9v#K+ z=lch@S_}*w`6esVrrm@;4KCd#IfI0Xu4Bjzzs5WcyW5M|g&TNjN7>_Uo(nM7m~DI^ z8^dn@E05q_U7u2*-_Yi40mVAO%x(GrW3}1*kg!Zvy#8?u5cI(MxI@DP{S%33ja(;N z{i-X4z|uJepg`BNGhVX(x?WCB1b6j0sMw&-se=crO?Al!aDw@9)O|P#Np|gb^zeokxeDqDgDtng6$#tT@WHu8iHQVs2w;y z1_ir&!5mD&kdVQFb@vU%ppjS#?OJTrWAKwJx0dF;?$tu&Y;V4A58~<}SetKc-Ngzp z7b<}8+`am97TY7=&Z8#gCRrAA7NfNP$hQTg$GhvwA!vFi16jsS=7LaSdrxF?DqHA+#FR{^9*N({-&5^Ss2&|K75rPdg697RPMr?_((aRKSHgboey@X2^TL?g4$#k<;B*ggaM6 zZ$5;+mz}!o8c#mVJ!^8s&4af#+lV*3HAq%KEP;{&7G_2!f%ADrkKLpea--N$-x;ej zG6d8`n3=S)`vQ1?1;|RX`oXFYU0Bka%1V0p@ux-5*XJn2A-XwO0-+$sk{XMNtt&RV={Nl9ldr5aEV&|zQaNJvs38aM+yKNRIPpN+OA!uygcYL zf|3ZNC1+6FFT*_x%DoNy=58HcFl*)ix#*tbnBt{+z*VJwt8%VVBmgdwZYikV4G`1! z{%_jl09$Rp$&ou=1V7i1yz2qGpQGin3=3d0vBiREb>VcAFM|)`*o- z{<92@r9wjv6IEDMN=mQcssen%lFVIsjzyooK8=L7Hj@jJR%GGW{Nn(yziIs& zb#{(x+$27&A_+VZV$Y3$*NMO;yUtDXzg%W{> zWVwGy1m*+0us0}h8xUlnCtGqf47E6_Av21}Fq7GS>!h?HORMlPJyL0xxUS1_Gb1QC z4Z(s!tuTx+3Rpu=C>#S;lF1-g zGq~@rRzNw`=LsLNZ)Dv$>V;JSZqjqtui_1bWv^0Jt$c=+ee?}RWYq5+5;1c*TJwU{ zLb?kW+=*Pk%$!do2CJC;EXKRwBV=ZWd|)Hy=$t~KqiNN)jgZExmu=YO^sY`W3u6KG z3+`#levj{@d*^PJ0oFiI#E=!8%KlYWX{;zSDA#&+Digti>NSM8%f5!a?EqPy5tkXs z7O=Cs9*oh9wdu%6*+&}J87jgbd6n2qe%>BSMdw^!tZe)V0c{!aSW%8HCg5o#$F(vzqEa15_liOgfc~kECss8rpo{P>c&k|lzVME@mSe(>5fZ{o&RTxRD>Q}1oE|4zypGS=UC9I8wur|Ka3ss8jl=#Vn%zWi<;%l(X z`M%!b&0rlgL0_Vu2mIK;k};GO4afM=&y0UyL^naLY}Yn6?`E$;{z+r$ripltOW92& zBDXC(?F7B#Aa`h~4)XfsM+hq(2`U#OL^d}C!;Klnjoi!tm8ZNypmOSz7Sz*+Y&1}V z=XBVMc%*Cn+`@knjA0weFBifzv7+@7#ggWmPA%=$Lr-9F~E@0EPbKLK(D%Q3`mF(CsI4 zSG{>;KXm6;a@A0ST1LZUjm=P~0=N)D zSs!mx$|9J|PQ~hJR*FEHSI^pR%b-B=5m_F!^0I%&@ETYoTDXrRtXGw^UH&6RHKY(foT$wHY!Kehz!^;SLXf=yscmQO#I3%u( zseXT1Q<5yQ{OqGwlYYUxi*TQT7R%mj74N1^h374Qe-3^!nC~;F zHqc))L_%|=J>Q?VFkUN-vN7sIAOB7Z^`sNt!<)MbD z_Z4y*PmIO#S(Z#t_@M9;rz0!fP@F{U#bc2AiHAJWfdP zZ-c$REee9kY7uihP(W#@19;vrg7o5@`Dp~$Q z5Rusn5X8$-{0LIm7mSGB3_CF#W&1Aq?EeWn<$GJ?`gkgPvsVsYae$e4-B+)tg*gQD z!N-F8f@a!lCG?&o#wW|2g3R#EQ1uRGiBmXn!Bvcv%mU=;JBa9gCyV|iY@tHfGJcmP zsvqNZWD58yJ)VnKU#=efnG|_O@~B4K5NM5)XH|B(IsnS<&(k{#y^bY9QY zt#VkJ*#PHgH5rBW8G8=(*H|h{dx@NS6iAz|<_wP7gH<;pPdQNsbqn=A?d9~cNdVwM zq&E{ID&xUS&)|D{hAk3c8J`gs>r|LdW10mWets|d=^VyR;QOQrZcm;(`2Zv2DIqY~ z_jk=jumwY!KeS!%q=|F2E$?_C)I@1NVgm;&M0QSXgK06&F!^!7VfysxAIi(i`SNBM z#mh~9uabelvb^D#^RzL}w-%rYu)>jH4gUG0BCbaYf4>+P1_ceww> zo4Z1OKtmn-Oj&*nvE&30+M_=cLc`tCTXytrT=^?&+6VaGVDwVnN{?(p^_8O?=PkoZ z(!Q!Ufed+g)`{2L0H$Szub1>*tOX}F^ro-;{b^d^q!r)ELdFf#(efJ+Ca8?GnDsfd z3;3y%+V_}2b)DX#bBy)_c$X&fzd+sL(^>kLcMa?Gf;T|_=d7uf=hUkEt9v3Ohkj)@ z!9Y6Q&00T?5?S?7CAz{n0 zHhtO&c{0yhEb)$Ox8j;@GeNw2bLdeIbhe9W3$4)y6=qvqHGp;@rCem| z9rEwRGr43?=i}2hU?{@EMQHsmo@WlU9*n$nwEM1yM8~woocw%C(c~^TH8~6p3!3NM z=^v^KgT=nPsJFMZMZh>MI4H%=DwR>dnOgVraVNaavm_Vbz%wXkd zWxcHjeS&9RSmy~xT@^~WRbE-y{rTnjrpgqjrmFU%ZhcLgeS(zDlP_m{Kc!;6wIFn` zJJK0uW_<~5cYWIbiEtviQXT{(>N?nS&)n@v3}wc&TI}R#&>yQ;O>#ZNCWjuI|3mFk z?i@3E+`7O%a^7kq3<`#goYrJQM*)RGSxg`VuN>NB*=N{S*|6fePbJvf#@lB;lw|x& z?7ltCTh6=PtLEv0ykC_t0St{(wF#}7_HBmU>ZxdZ!CH_XW9NtE902NNmi$14dQoy6 z@=(+Q5FK8v*)K)d_78FB{V)TVhK)wW59dlJG|QJ^B%(gXCGl3CidL~@NA@7~M zvj+Q*z@9*;U00trrUwQjXys|Z?{kQz0DsCam_KLd&!~b!Eark%3qwE+^_F}9e5Saf znBKwAxT!XZMuB-~OVXS44(e1nxDBOQ)aJo4XA}#FRvJQwx+7OoGCHrtg~1ekrJ)vN zCYy2(9(5Y*aLeqk>i#s%Cppg391GEwLZVTZ%dr6RD(>#1nSKczkU=wQMVe~#vCbA) zbZbk&z?kbFN5=7h%`aFOfMq481T_>KWqqqEE01KYbS~tpJQwHP`_7USI`GY=D+CT7 z^RMm~`N46c@flg(`a?BW%wTli$!e4{bjH zZevY{kd}O&es2+G;9%P!8Ere%4M&3InHI#zB z98OEh_;J5G{*t%iv{$`#l0)u=`z2u>U-#>|m%dnLIyV`n!fAy)aRYg78U8CeuUs;B zYybRt*U|h179G4sh{$9k1cl2`D>%ZeT1`f}+l2s5X?op=*^^f~4%R-IztG?xD1L~? zJf&O@+Wva$PPO{&=cV@zyYMH2WiKx)+xYb9Q(HSbh1{H+uyg0mX+D0i9?0Z}Hj-|* zp@r31n3PFGr~uZP$x-CeR|kTc1VH!m zmOhL05@x6SM1*QP29nq{9$Lm=UoE@Ors{yY$1K)MpA0>uc@Otc{=rmZ zMnJ{nYc%KyrFWX=FH z+Q@`9XPk+~cICR0q5DJy|G$8&b66PK69$I1hvG|Lx{L5HZ`V1k(7bzpGg~c*yd5IM zj?+w4!@dTJkf@|3*~(GU0;8OYxJ1}aVNWwhmkN>T%vQ3gr&^8O3$|fcx8cZ!%uQAP z2;^C44^sDhy6XxK!dB{1dkD5i(nr+Gam6U(Prupx4?E72X;}{`y{~$mpB#GdSzkoARklldT7YW9e+ERjhNowV5@02Y4mEqChQ2=u0{x$KWSI$* z3txqN)h}Uspy(j?-{PIV4QPc+NJcfg&C<7LG-IhO(slz69)Erdj7@;u7}~XtwRv#J z+%;EM*AEb09@^o9b5l?~tmg;lcOLg;EwmfvkK_c49I{z{prIz5-WqSfg6&TGOeiz3 z&Y(v*Z>3ovFU}2Bu{QNKgNLBekPEw2MCN$@LL!+I=?~a6bk!yo+9l%KCl{1rUd}O{ z_K8MGmOeV$d$21sv+eUy91O&`Sp|U+vjnQ4=y7jyU|S>H|wH1Qa1v zba^L4!w8)#JjEyaLB*%{T~VuRmluk0R{V(G9FCx`=W-P{Id{Ud*@XW}iM|`uxLtfE zbYqFSiy&+N4w(>_-tK+et+`vU@!B}@JSYHh-o2NRMegDNvL_qXTGi%#{J15xzwK!u z4BGV{%ISq1km5Oq(2?^W2;mV6LJ$;XK?r*W@}%|GfDEp^191u)8=%`{rt^cfAc^xJ%f)d>q#T829+zt(!@?ziwi3S5d@3IJczL7)EZo^V`cA)FW$ zP}Bcha&Vz{?F31=v{N{q$*}7-k2;USo)G>)JH)8Wj3`vj-safDi*$D?Bgk~8B5dxI zc#UhYC3A4W&?ModOO|x{5Z{l88}A-*aT`~Nfz1yEfC9*bO_tB&a z(sOl}z#yNu(>?c~dN%PBmxFL}7o5Bj2{_x2CKwam1d~`dUs}<(uR0r)KJMs`*e12m zUR}?Y?KMG1yMk-XOIkJ`?ey;s=}D6v`du?L*wYQjT-x{9yz@ru&SJ=v3qIsh=5uq3 zt21X!q+XcA7}VQqqb~qmrxE|#Nkc3~y)g&w^fCGkupbh&P(Er0(9BO$(7WE*jVN9_ zA((7XOS%O>gb%^H`>tfJq|i#IuMG`xkpIHS;tz1@pa`p?(el0V+n2>cRwf_td(Jgu{=| zi>gF8HROe(1hOe|<$!If<0tLDXQCO75{)CFh%Y?GI{@)4mc6%adBTE@m|$ zv@@CzB3w@~0Mffc!~L7g?k23w)_A9{C&$ysa9#+b`Lc&_EB2)P!T2dM0@FMZZ(W zzeRofIfX_9mU#c^LVpHpchCA#(%x4w0vHJvF6N9iG#)oBLq)B-&={bmV4Ke_V5pr4 zM)<(yp4~-z8C^vBwOh!9_ayw&y=Fg;=fU1y%b~uKLfI7^=bYj6$p{-jfm4Z;NweLh zv^rnUjefr`42|eLsi`yH5lu6Yb#fB@(~5_AVP(ap^khmaHUI&XzI>F{n7wE#*2g!| z7~Ib?CVe8XaUC`U>?t-|HSCZDm!{9OPI)(nZRx_G=Ph$iypREDUqY7 zK(obCG|@Kp6m6F9ua8L?*H-+Dzf_;40i`&}gT5@7bf_R=12UO81pZ zN4}(biHeGLd0BM$ZY9dG?cglg~%?Qee5AJv|hrH2H%Gi(_Cvc*h|Cc{y!l+I-ap=#WOR!4r*~& zeAiHpLncNGuJmP?s(Nr^DTy%#3nGfi|LFr3M&|6jY}g78b0!wZ7LGi>>Z;6mqZG_~ zsOF4ZMio}tS+?GdxesV{bTxu58n!L8+}Mr*{XHnm3b|O$(lm5oCCsQd-9`Ik)P2`` zG24{?hv9TdH8Hgw!e>yicJxoJKGvD+-bT z)z64F-*Aj5i9;JGTIw{>?ld+@N&A`61G@z5fI%8Sj8o$0j&l;j4|#w@*zbm##ZaQQ zd+ltdv4}zg1MPAQMCqUQmj%K65N4av2L?p4s#u4Ca>dMJv^^!kUIW-SZ(?Vl0_{UE z`h@gmQq&Pn>F{NESy$v`Pj@P^s(wr;b?i;w3tgEK8n+sDc4gnDhhh3&02iM7PC;!f z2%#PpN=3gzb)3~4;RzNjjqiV{$3+Tq zL~)Ut?{XQOC9mT9Pcs<#5URVLNwwiHk;EAc<5FE-TDk!|mf!s-46m7p+Ma0Ci?OH| zS?8jO(bz&`0O6SMUcqLDo;%2ZoNQk4^X@<`1>0tQ65%#i07;v%EM*esD$cPu#HfxL zeZHxH_T!&Gdz`q}+WdPgWo6Hdr3Qb~Wmjyw(rh|_fEst$oCmWbZ1ng;fd`oRn^d)Z zxW%*xrlOFv8XmONL9J|A$n{vd6Uc1lOJw!}{8h`nS;%zaGuJ+8Cp7&4Bt)N|GcGd4 zHv2*81LAJ)XMG%SJ$WbZD9wyNP-|tJN6XJWAVs9FU$NOiquN`R*2CVL;X=@3rWFZi z3pSaXg~U*s{?2Ai&M2o@iiu&tzygT~3`9>uQ#Y3$r@e<&TwHRP>#xMX1gh4QV}E|H zX-_JO2r;V68$p#Y!D8)W#Fr==v8R@E28;1LbmTAp5~PeDOPf2a&@;qPo$0-qm!Suc zGQiDMfqj1jixM0cymEj~A6snzBT>;J9PQXz=^5LuLAyYPA4jooKYb7uS3&U2l$ZM7f3C28`fbm z#flak6*(cb05pKC*Cy)3XzlK!b4O%4gvOsf*g&;g$ci`s=Kk#cPzWw`{u`g6-?J0Gb!Z{?=4MzIX2<{nKN2*9L^p{34=N(`~mc zdDxLCw2PP-^g%pKfLU(wop%}MHapKJHatlCMF?P0qW^Ki%(%8`!??i%%`a&OH`Q-zV`zEzP=JY>QfqpUv(@rhK-E!VB_sQy$2; z%bsepKU7;va#`Hdw?Cne;{Cvg5(P=f8&FO86d6@U=F1SgC~b0IU*CqEgy=7aQxu(L zB}9-g%S{8a*2k09l|6+;dX`wW56c&aK^hic;tXD0hg)Lu&Njd~F-yYj$u?H6nalgk z9aeA)X!JIl%2)tat_pQw7?FEVG2e3C&1W`_V`lHf9Q!xQ=->T?A_7~}w z;ZAAKG5k)_jDYD!k4h@O0q+$N?-N6;3)RpfUzx;?y~tC%+!fIUr_`0`Dof4A8}1|V zR&C5SHf+qBKI!5P2cKLrLE?U9mW&+(>qp?!f+AjZN7$A%W|xr8jvugl>pcH7GqRVUxketC7S?DfgkfLh!Ph6B}~j*HXkaG##)e=$0& zfTA>YRz+Ls_DOAuu@+{!l~S-UG{SMJQ8e3j31rKBl|eD@WMr)Ppn6R>xv-!>zxz-l zHncntwo+zKo%0Y8@7+?vG5cHjqYjfl?j$_l|MTKb^}8|VFS?oPvqR{H*Fd7#calPj zL&AaSpqaTcT%F5r4Q&aAoqNu?m4*1XYr!O^+zU9w8Lz7I!M7Y)QKNl1ucf&;=H`n^ zcqW`Z1>~|@HaTJq3O5>`i81yiu?+ryFZ4BW{^GLhc&la<#La(ILXxA9XE66AQ2n?J zqZl$*n|HBS?NJwW=6v{}6h^PE_qam0S|yzMK#Av;G>;Cpk@_4K}F0 zLLchhF`09+SIjml$dzF!$;o!#zO&}aTZ`w<2iHihh9J6dduN}LEYi=%+g@SYIsa-Z zg!QZjWA#*14(<9F`jB!bzJ;MFAaW@smcd-@im{VtI_V=bt8jghH|`o@!QqmRIn2+( zo=)xL;ytAu25PG-!_`()T+CA){X2Xq%pui5O|$2e&VC9&Y1mcs=_f{%N=8|orxDeq zH1B&*`fk(QsOni4GnnFTGPmFgjdC)6_n@CCn2Fd|FW2xG`@?hXwjFTdXu2lrh+uB0 zj>8Sj0^Y4Q9pcA5yU5J`@Tz`C+n-)6Ev-_lZ2-d>hNoV5@wZM+jLW&oEJc1z^` zwRVfibtBp&TZNCF!7zfvNnD!ZPYNsV6;P()V%Je~kQFaGK7$EjF`Sm^MdEG!v&eHt z0}{0tcvsK`@ARxTomP*A`u;8{n9RY@VP`ii%VY;ZrUY*jr%P~CM4&pWxb`ra<~60< zwkj{g$N|6U81WPekRNiXOK=+O??YS=O{@q#*s%e*lq2Z9KxWXVaWV53kU(5sDn;`! zgP}jKs(md}a(_lWr1VHPvS^ZxxA6Mh;corb#jM`B`r4v>IjiC!jC%UvqzwxK^(A#fukr>mLjP2`BzQM9olNT9*eh+>~}xmi6#IU66T&Zd7Whg3~{CR9!X0 zRr^$Ko-_7iVh5Llhoi-&NT*OAErO3{)*WPK$%lnX9}Sf&t*-ujV*mQSlpl$QgEvQC z+6wcF<1Tk_@`cnJpKYDX|zfHry(#DE6fhMT&)s|b)z4t;O zIqiEx$=re8&q9aXl&XX?3cdHsI7ap>CURN@{M(II9kt+vnQ?M~2goL6Y1bMimv?hY z!+*UmQA+x2X1OqUVC(4+vGZWRFYqA01iQ4_)ph1_YS#r1WLEadT|Vw+oflFw|A@_+ zR+`u{XR8@`5zeO-9V4ATKHD&Yln1$sN=nxAR@f>}nKI?dyL!*va%f%$u?&`KU*BXc%n6ZL>YB5-moCAFh6s)lW1DVg(Y0A+-347PN}WI z;XRFOx4NzTD43S;a{m78*OW=G0tZUk-mh4YcnD(P)JI=O%;V5RaTaF+l+9BNr_CJa zLT13;6+)v{LmNnrjxRkH?Sf7xakyK=&syQ1F7%a01UA=qiqq%KHM)>tpV9uhw7^5$ z6-_^6Q~}S`*f=t8VR9;QhW z$Qa>UozFxqfjq*P46e-Sr&C$?lW&=>vzA&v)uGs3%Gp#)y7bVF(Xhr;h=4?5SB+@c zMz(CpIF`tp;{k@Xth=Pjx4Dcox? z1wv>g9OQ*xzx8%J3#~aTkT_xYmjZI}q94k+Mzy5tzm_v$Tn3R9EWoOL>FN#ii0Dd9 zP4x{;;(Ja(mYUiN#$XW^t3i}Tg+&J<1rhJJK`T8?gL#`GOy1<^(a&0P)~gMi)bR5Dg|0{I*0nELQ%Wk)(9(ll-n@_%h_`tv2B#EI zE*=;M`Js~`Hp^~U(Tx*Wu>`wh_|raUy9MsOeB9Nr_M$em9L3T7Qy2P-Wx@2hIMpob z_>5p_OeY&tX@zi<+(skoy;FE9no=WS5@wXe_}c`^cBuJNx(qqtTwo{BD~kXIt5|ne z8??&Zqs&<bu}%8l|2m zWdx+g{aALSIlb75Kx;nd`Hr%uTEhw?U34q)QL@a&Bp@w9Y%KyuWdhY@g`I>+=;HBU`-m_&6R4gA=$6Ye{|m zr@mgzZ%C*`tHE7UEVxoY5q|8CbA$M4I#0J*GPJdbao)&O33jrQbp+YG)71zYdM_Jw zJr^WbfR(Hw$UCmbqKG!3eN(Gu(5YAIJ!Px@CJ5R0sp??^xrVvceTV4n?H%@z!X88_ z7*OYu2@w6CLVQ+)kZ3o@9FWmg1}Ks2LdeQM9|0=a1xC_0IFue0lS70xejeBU`1?@Z ziZcHyY^$cpf`v^%UI{5fwQGjRTfKt8R}>H0-Jp*HXBu?=Mpv@-ZGHqw8Nqmi))zCu zOP<6Bilq9}we}bwefYN0DPt0jxEA(=L`T&x#$s-{M@&V1IbZzeh4)XV$RBP`MQvg( z+)So2T;i7OFoNnP&|aG1$N@!-ml;r#OQFY(9Xrm1n4pOR_0kXT(J0_wv=M6u(P#_@ z*7yAJLSY>K_$QoQ>fb`trC|z$B;?;pDpztHM;oixQlm>}UiuK1ut%HF($Ix)=7!&s-ID zZPdfkJ(&Fb1OXnYq3;B^Kn-+X)z$U+fi7UlzR&m#wuXj^~ zX-!J2T2OPniOfQ$pTBP`>rWA5*b@^c%j!K`ZHk*;W0RNJ7(*o>@EFoPTLnrj-6 zcZ|*FfJA75cx18S1d1xif`T^|@7=OIz4nJ#dd20^Jr7xW?%)p;OeS^62`?&;fqS`sdbC+twy^GWfl;q|0A1p|kn;Q*~1^KFw>Gw`?rQM#N z^5fR`EgRT9;r^!RGwqO$r5xBx9Aov+`O(PvCNw1R)G!>V z>ESNXWTV5IcKyS8A3;w>sU-GYR2zg6`NeJlG~wZ5Q0LZnu&IeK0?6SG2x0}O+|}}l zBFzIGV5=hmF>&pG25kEplVX&IpQEH>PNplG-1fsz$&JbrA~IzorJk*yM18 zNe(0mBpaoAeSAIQLFBc#Tpyn+c}{eIOy>vBCY zODlhve%v8{vJDjI2?I;Ni4zVGV0`DBxEtePT)hIMk`1@Zx^`y` zr;_PQ7DE+mUEJ8n5OppLzSq1HMjr;tZaOJ2wyQ8BkVeV-Chal;nIjwWk1V|ydN8w! z>w5Ox4y#YL8dnPjL+6i{A~+?77pn|Q z6|4o(+kx*!QM4wEw2ky$2$5^$hM18MjEpQD-j7THq!yY37Ni`Sso%h*d~4AHWO7_* zrrCa5>`rVD|BfA|^q3VDKPlbQsxe4w^;Mn=v+ciVj=c>xP_{tR-o`z*TJ@fFQRnPK zp>#{qcn3VAGR_mtFQvf#)4~-uXcUseyyB7Uy(-LNuW+)_)~&Mck@L33?mm%PpXG4~ zAT1Q3sCp*Nk?`7pWoxDp#IC1T8MbC^v0$>1vBN)X43!Yz#GKd9Hee#C|Gd)asDjf@ z2->tFH2=6;K&K$mV^z>+`vPVz1>VVp46Y?Rr!0T(l!4k8<|X3a*6@MRC5NMPR{qX- zsDZ#(4yb{k-xXY>Jv-ZIRJ90j0e9RgvcSHCkr6 zD$J2AU1f)Shy=#!04P5@NR2fAq4QZ!9vw; zEF$S2VrB6jki{q0tIt8V$W0h8dH#Bq^bEjiL}UuYB`;l{K&4R*o677SDa5JLU?w_y zk8BcZN_+6&!2&(cCzH5BEWUf{1}$2E&^^EE0~@CO3`2AJjpJwlq3-_rtzj1fr8ba) zo!O_%&^eGC9QY4+X^#NnYn>cdMmSyUhr@+km7CNxC_1QK~GHr{6C>>wTk;L1~LjG1jx|9L%K58;`_8Qdef zL)O`!#a>74L=}kYpdhfF;m`vRIq(DgYKCR+Aoo zlo{W?IrT-uPN0*sDYdj+uTRlD*>UHY^^tVIjO~N|YvicGFp-~CHKBP4f6w~mb+QW` z6;yqf7{79s&!y*zeY;^C66pcdZ8=s%#WQla85>cRX94+&Ne}->4!Z2Vflg}nG_?Zs z6Jiu6)jO_MezPC!M^b(b((gdWJpp=M|&}#@tgisSg2qAFEGx=)Gy+bzt=n??9&YbLBPazp0?zdPo!2X%=wA(D)%&|%`lEJ#24qe1 zNgF6j#oaZKF>7s3zqJJzF4Tse(*fa1hRGfM*X=FPt87mElRxlO;zv#b`PrPhN4`Pu z|0zR!t*4NAw3x*Gr{{XB{Z~Fn#OJal@1$A>$(Y2XoB+J7_mG|ngG0D%aR%~EbjClvrFJR!9YZt-iy_s0af$%%z=Snk$5@LLjWS>~JR}_f` z;cB173*Y>^_5XPdg#KP=G(Qo#vC^XVf|j9b)>%PXeo!TAIdFC`WMI!Kql3Vx)uaO9 z)}!FY9KPERo@M_*09E}>8SNkKOZ6-VfT~7^WfY*_f6Nqwbh9##M;iB3b)f_U(F6S8 zu$%1NRe$|e;1bN}9lioHrdX^mgN^ALXM)%d;CYh@*jOHT7Xgv0EalIa{O6|uqbPeX zYnghreauK-;rp4mq;oC*#aHXrs_Y~EFYGw@bff3|P5h*B!Bs?ZDyVeib2xw6_3{_~ zC%IRJow2=ZNE$1Iu$!@}k^>0<8Q@wKt$sZ&|2MxkAo7I)x1nKSM}gKZr2iVtv5leCxQnpAp1CIqTR~7m z1rerxS1SY^Drmm@UQ6s(uM>N+X8Zmt-`3XnxPxUPpXI{GR{tb;>3^QnUoyh~`G@=t z-o!G!5d`w5^cD|Va0x+wM^PK4_U}WB;O!p2_=--_YRy<-4qWJhjHTo?w7RQ#FJvqr zIgW|A`hO6wT=@*w-`)$Y6>+(JIS5qzOOJmfsJW>U*lL^A-qqd(6be6)Ky`np1CnyG zESEpfUC6A|WdpGEn9aK={ZGKs(f-3f8F&Bu*nhQ@5-o59{qNpEd7!BAt7ySs350Zt z)|o+#v5bHhtKZwO(8?K9F2T3-%gKM7o9tJABKq()@U${3XJAzj@#Md#QvL;N*>nuz zAXD9} zPt5dhY#{Jd7k;64Tp;`g4k%+0XWpsHCK0n z-!uA9RT93BRQW=^5T?PO`WsQt=s}A$k=AW+X z2VYIM$q2mT%?Mr4hW0lCSFUs?D6~u375}q2TrS}-^hBr@l7q0>pJ#yyu`TQ`FuMW` zB~N~A)9AsZ#XDVy_nqr86qp9OD4{o9J8qO>LpCfQ70C6bfp76zBEZ-0ggjk6??vH$ z;OQ=;-xgiEEm6wwYY@tz2N^kmbL8sg^9i6D_r`2w~d$al>L$3_l!Y+{B`mcoU0-7G}qGvY8}AQbB<%q=qp%fI=uy+qH5Q#?vkE2wJ~8zV)I+ zFt2@?q=3)#r<=C<9VXzLp^~Px)qaer!fHMqcGt``?{`zqO$tJ?13r{6sTC6Tm0%F& zvTJY1S%4H#3pyU!h!U(1KqO61->vRJZW}H8(MD@^2Ox+Le?$TFoZJ7upEJ3#{hgL6 z(s!<|b`GfP9;^-F=Z!M<^Yj6tlnq(^o`eM5R~p9=KoQgwTjcm6(K0(8h;2HK#8}jB z7Rh+tUjeR$>3}cI_Fc)R4ZL^0sl3a`@6>Yy->G?i;LL^AnpaDw2mo~8i(<9=3;@Aw z{gN-*Oqm+p11`$-3(BjE@1APcZ`|xa=if-8V`Kg5U31ZC;IcLAuEdF+j;kw0{lA~z z^|zJ&8wK`grCxfn>v0u;{zrTj?#Cj@tE} z0wy%77bdcihF;$Sc-|n`tR8x>9BvP=Mq}RRrXdPP{pPC#YqLs;``ib7-8(yhJ7i^O zY@Sm8rrbFEEl@B7I6iUNewVf)Ai;Z_XNB0R8Uuy@OWa>i08Zzgr32Nt3z$5X`OjAO zE#L0?*;EC+5ZzG?MQvv?F*#Oe08pwyUurq}^NM7E_T1mS^N*+ckriEevo^}mO_$HL z{i;}!zS3c#fXPV|oAu(p2hIZ@Jld9~85e_f>$8X*49YK6fig*o9SzL!kJidT=g|>?jkRGAfpVCxc8vb72Y3EVZS5Y8@ zL7`JZqJa2cDYELjP09P?Ay-!$%*&%=?CTo$Ex~7|&JpKHFzdQ@w<-6+f(}s@oJ_`7 zNZg=kai$)h8fOPxq=H6M;YvchbCa;l20TO`07a|NU=sN+AEU)XLNi~hp94F#E9w`s z_ZRpH-K-FXP4jn=G~Sz~G=>AQ-|fqXk&-)J`=9N|3xC|w1+p>*PU=2Drm^YV0wfux zZR9zu5xPJpAVYW6I=7tVsj1?E$15XGd&u_L@%53$`9?xeysFw#60BCM zb=(!CpM|L*3IN8wu#)?|)W+TX2Xp!BZvZ^l-$g|n z2q7@yW8ikAc+EC9>Mj~*F@UBKKhVE%vMKuZ2t=D_=c%E}bKTum>6t?#arSmnrBOy+ z!m_=0lO}sJ3vv6rr}A|+HQ=@_{W(?YW?(;FUAP8tANe8s!NH__?8|{ZvAtd5FLdzpg)w@fapSODCvv?-Cw%r-*gqBR{`p4sD&z!w%kHZYklf2 z6jAVI)eyB2;`Cd0QhXV+SDLNz= zWDUiQ%w5&apVsqKYwO!~IQf3Mzh1YWK|&#(6r2kc;D;`m&4*7L&L*Z1mwzY7h<&8( zG$F@Yv~)y8QWJXi0A?8>{ADTWa#T>2Tp!C87ox^2^A9p!f(w+Ak?aW`PkiM98Mp=f zeTrvw0D;2kj-B&Bl4-Z53jGccJQwOTaBhUcCk@}I{8C#Z7`s>-MGJevmG#+H=0M^B@VAT6rx5NgUP8M4N7|FrLBaN1Q z2Lyv(mx?Y#1qk{UNecMRvu+j+Eab3HA*W`q3m_(2qCJhzGjU{3M65?ufITA>u~a%vWTTo<*=s=hMaw z9o3x=3PWi$L+>YEjT8+zPUXe=obmVRu6N^yZ(6bh3AG7@xLv+)H2K`BbxejMbjF&c zi6v7b9*Z-00ha_@pSJnY%19P}6F(~=Tr zbIj8y*2n#w`iQDMxy%qlqBpjp*yGNKuO#cSDgL9B#FyUEyF+^=$I2G=$iF>GEJA1m zGCY=&aCJiUdP00fgGHEbzizn611_7g2Cpvm;*9)Ma+3Zy)`f5=hdMYFxzKeAZuq3r>w1?Q>7y zynG~6PWBb=4=#Y3UKF#IZy$j*_?1&R=^72xb4g?(zbB^P=+YF+Dj*iTG2xY_cC028 ziU^uY~^lnVeWi3B} zDz|2S>^^m$@$$KG5lK=^ zs%+O$LqEew87r5188Ejupt06H(!RY-2C9lRF)6S<(1cHj?foU5?9y3{NDtq9PwrP& z$O@MPzFT4Cay!ih$NVi6{&?npdL8~W(JR4%!5jd;EHzLZi;wo`wCrizl}cgO`)yw* z+xO=3Fwg}`h<0eW?MM)lGwb4Fx9Z?umN@s>I@qr^WE5_CPLea z7Bfy@vRetOBnLDy!mRrkve?fznAz#U4a; zj$>~O&mC&)1B(ru@1MYk$ULkgYT;}B)zYb2-EzMP+if%@B{>iYsBTDaasc5Vt)(%~ zyMA*ss4Rr5g(AW=;X+N!IpH3cNTmy=A>L#gB_1qM0}6r}A>hN8<`& z+!tPx$vk<*Wl>@G16WiHqL#tP>i>ow@FYx~_gD30WaU*$vFS8ao^wh8Hf4q2A4JLx0_#I z{WFB9daGwGl}dd9C@9BMniIfCp{z~EJTcjZ8?6c|pz|vU!VCQ`$v?y8e|@1!_zk+Q zDL^KyUH(wh{0KQ`u6Lp~qH90^9_ylkm7UTdx5xMF9Uq)hi45qS^sYQ$`y7HFYN&9O zl6b6#dGcWFNZ7a_!bydrQ+?QfuRFSj9a5dpUT-pH-nlzTCg1p*S@e%|;hXPSsi;$~<*kkne*h-vV8t z#v)WnMf>LMfJn(SYQ=aO4?5&bU`-3!S6Ks2k1isFSmvB<>~ySuhVIQUb4pO2coAv+ zuCXdqq+g(xcpKn+;WV8_Rp#!S*?*xlOgC z83)O9d9io+x=1?^!Z<3z*Hq`P)SN)=jalu~fiwxppU z5x_a*k)Ng659l*3hA$)#S$;Ym*uc7kKRr~&C$E5_G_#=UTc~PbUCOk|%Aq!e7pz}b| z0F6HMG zPbANLS`&xvm*NR{yvS+^G->#fkViQbq9Dwvuy~Q|AH0C3P>{h=nlQ<0)0d9Z;060Z zUY+SNrpYlhS(0t`O;$K#c#^}9&pIPV+h*E77@tr$@H8QC7PD5fwLGs0CAtB`NrV@f z?s03ukleUQ&CE7I*qhV@_zJN~M;0;* zPhn{cLf)%b-YkZ0ywf62ZULrr)FOwpCQ!6RQ*Et#Y@*LW&VBh8M_zt574V#q$QimI zVrJ_KCJsGqQFEDjrh%aywNje!y-|iPc33zw>qsrO1nJ@&_o)w^m^2r9O5aa@ZcnkX zG|pSo$E_hPkDwyyLz}NH#Dq3(?5Hk-tMG?QppN;G^DgFjqml8U5(w%?4?;pA{!pCQ z=KWTj?Uuom(W+ocHAV^4{Uant|=50@4KIoo11gj2`P!a?&tfr?o#c5JK%>r@FlIi`@Ps7@` zvZ%_mZB1NFg(+unx;W}s1!F4P!WHFC{=TPz@%W}MRVH^JCR@JudLRj!hRQ3+h}T?1%r72mRpj$G+x(-M zI{tfKj_%Tb29vti@oISfP1wC9^=U&-t?g|$IjO_&-WGm`IBuyAuUxpDI*X(CbW~{jb1X51|Pv31H z8fr#Bl}vpSolbLAFu}eRtrRlUq{Us-S?A7z0;#N^fwHxDK#jp-o3Yy%&o?TnVxJ&; z`jIZLnjpf;huRJl8RU!*Vs4Ag8+tr9zb+msIeYt$%!|&08k_AEW~WViu@_&Tpvhui ztk0K@YQvPAfQm0MxVwx4;iud4wl5=hb;AmMxnI7lZJ(bH>M8GJKI>-Oo5vjq$NQ4> z6-sHuQc~@xvinmZbGCTF+a5)`B2)8>l5s0B+f;^-fQ-0ZLdh5UCn46Zi8+0E1vOuy z##M(YU)ouQiWRitY*A;3bQptNy>BbllNu3~ z4r#;*zn`BzdeGkwS;Y-`e$r=n}_{RaOK*2Fl{(b z{9c~jFWkXw|Uod z-~`a-UBtwmUBY+1Kbr94PUB+-O!m$n3JI1-aIoUO&}xA5WMtk1#ePQaxK+;3QxWs1 zC?E^mIWX|72gSDKem+C)y={B{8qRNmL>{im} zR}s6;UGe0-T^}jI3#6J0ByZ!3)U4l#$%FA62%o7PhQ^*f0gjzxJ98(b2xYq_GD?jA ztW!fE4{>155|iRAsF+1u=uqXE(3@`>VSdi0KEoWQxf6}vQ!ip@XZ7l@U%S$zl7u!R zu$dUdkg1>^yp?s{dlD*_vxLy!V=g$WVqT^rb_~QjTz8wAV;~=IV6^#mgUuKy|k{lETwmcIq@N5;y}bR2;yLifWC1l&Ml z=vKMjAObN@;JlCBg*e&uqc^)O*lVcuX;d1$CdV#MVQZ2n^xWwWna>@%(gw zpykf^@NrSV8KTqW*mLKgc+g-QyA${$cw!vwk`k*sNzB*9eNbcEy?bt5-nK|Xxbks7 zX?m(SbBB+4C_ny5530WRW?AMg>G0D}uPMkNjC@$5JNsrk_=@ssW3A6li6iw)_^h+2 ztUcE$-?|;s0G=rk6a}n<&%1T(1xwV3C;}87L-}7AR(zX_$(d49>D^Hj{yAcwAR?#n z5SL8T<1_F)>p0(Bk2nfjUT*F!^NJfCMlj|!t>qUGet2{}HQBY>H`{k8OvL^Ru@ILn zhb3RJf!zt5^a3NJ1277&W6xQ_xfw=37FAFhA}oD8Kuu;NF7EMVKei| z->}zWc+p|WR|x%!uNW2ZA3^QBkU6|8RpecI9bX!blkEaCsU2d=V90y#>==kew<^N? z{X4&dftZ!W;Ln#ztdQS`i>w|wll+dZyLsxp99Z?;iGEfZK8$u#(~)&;QQg;tpATCP zD8lC8qj_R9fZsY(BjC?=#kML|T9D6qA9NsmIYWE$*|4y>@|27tn&}+LsDE+#wx3T6 zE!WGNgmAE-wIt+HQiYI@uNH@j(&*Q32gPRMBlm{pzv}~s+tyTtf6q%KUV&wbfW(7P z7Uajx5ODai!aKu(QDO%e`F4)h@GfY4Adim|s=fg) zehdC!OQ68x9LAQ34^;P~M*B=T>8F8H*=Ua127LUt9k$7miH7dil;G^1Bg7P61NWx0 zV%}+0>)zgb3Q?Tmi~gl32K^7fK!cMGkbRm$+7AiwhqADcf@W z*-ybY2n@Y(qm6*RUB0VQcAc0uxTc&R-abse%^8qR}te@q9uF zZrT^iaa*vU?lBJ58s`pJpD&JL4R?_9vwaF04J2Yc&RtT>R#}0>+EV={P9#{T;do(_ zH%tGB(=m2bZ%39KQ?ei{n$q@ihpNn~LYd$m-)RE=v18EvSR%saR0itP#-(#6sPQE7 z6OhczjHV0=qtK47o6b)v;Cbi}a`of@@DpY9Lb;(NnV>nn3E$p@Pk^RjOr8x78Y!kn z>esvns9i&40@%$`D=5JB)kfrrS@k~DDQ9*L;D^A90C>fG*(9qNUUZW8qD;h6{h9S| z_2)0+pQ7gP08(8u+X3nAbMq`8`rPv3zJKi>fim;-Ux~R_KD}J-rula+ft2nWhDLb|+YJGXIls@2FS}yKX;RV&RWzT5vT5st*`s#D zxW*PYG|TBj$6y6UMq;7m|vaj91X^wjNqOwO}yvY4HH`-yQ>gN&lq3%VWPw0qu|PZW`x0!<=rXxmCnj@*mw z{H9nB8l(`08lsnIVwqhV1iL+A{9#~2D@^jv zpq?&Mn*F`GWD#u4eP%0Xc&OB6W{gn19Ub3JGg{BuWC^_9hXZY~_qH3ZUm zITs+XAu`hs%Gnc_y?V~Ze{6$Zx#J(Oy(R67?|8^hK)Q11Z}VW{3tZ;Q(?ej7+Ik58 zByPdR0C-;Pn-r=nU-FR+%C!E`0$xh9hULxKc-kpMd2Du4^Z39*Z`4ppx?g-iBbG9a zg{W0|6ZpBtnnO~g`X*ih&!e(q@cl4^9Zm|k*}&>a-OxMmv|G{o=1QHdniOYzsJyHO zjB0NZ+ZI#9P$E6k!lQYRQHB*O!P|^bzPBiRLG#mzG+zRv zCl*4SpEzTbWU}U44z}fq&pYxtOcP+=z1{lN9cxksFyrC^@|1Mz>}OhV^55< z8N84aTl}pAStE=_94Jk!4QFM1_`JCXvjnffX9jHqNeg3F$w_sf-=WVIP(Hy3xM|Pa z+V{+U*62*0a%o5BgFMIN=ZPa>ryo}M%&+;gzOE@ef0k_kfs~uT?BG9wlur-+eZ*^m z+yv$Dp-JOVF;~BB*+Ufk=OD)0lR#eNM!{g}at~4Q*izPRG1ycuQ4ZSVxtF=mg?)t* zb6)#gOC?E0i-%RyB)A|d#movJy|rq7%=&b^wK3hMe)ALn%pGxO;X$3Rg~mqEZoNlX zi>*QA#YKy}65*oc;zkz|D7kjTaq_kAXm9JNOlU_#z`6!(Y;>5IxNE`rTWEH$SYfYX zI-@ro@#J-%&C3KijD>En(p+gE{@(U{-3Sbyyb55tr}cQ+ZzM{GdP0y<8NA6>w`-R) zr3%@<$9F;W=?!C}S1rcI-bc=H^6r3qmNq*SUqa0#h03pk@uAAo3N>dxCm=HY` zu{ILQ6vP;W*YHIJum~xluiY91{2S5q%2|0E_SrS(-fiK#zHlU0GdygHT8{Q$KyyX?l(O10-j10`4H#Ew zK5jtH90xD2*&ndR(6>q%!o|d_ORrR>S&Xk6|q(+VbOJS}|V z1)6)6Vav!6nsfD>(=R#u?n56=9OPyOqArU3&_12|nf{gkNdF9%(mz3~`0asy=3QHe zpmcc*TI5176zB;!&dxJ)Dd>^%y@2Ya$BWfPCG6eE8W760c9&Jz3p#xVVVYC?;O2^b zJDw?c;ggt!4@qsQZgNrxXp47fFY=hKcr@9&()8kn`V{Jf4s;Cx*^@f3%g+h)xT=L7 zkpw^)?{d-MYp}Zt-#g~6tg!pnR1oc(9IcqNTnjB;p2RrJX+ygh^362aIw?)|fhMJ? z>LSE~;gpK|cO8uoQsf1y)REbJoShA!SF3> z_8P11+Vo)mF8|K^st4ZP()(_9{K0R}BljksPq?y%ky*|-l6=@UTv|ba5kH|jkr5uB zN26dduB7RW-r2_J8cPdfzVw%wopYW#KH(n{!iD(usZTcushuRm@EAlq>UNRs4ea3a z`c5X7$2!CKI$2)6-;3Q%hW#J(hNx$C9OA;ISIKyekMUFkR&cgF`xyz1Glt1;wYB00 z+;$W`jN-RT$H++|FrQQY`(yd>Zc<^uxqKs9CPJ+Z>1VnI*}2KCXk_Ls%3LKpk5tsVtX-OpYNrVMA;&-K)7ZEg3JweckFA|=cQ zBq@N1)_lX?2M5g}bY#i@8Nq&rvcG?E$KcjneB|A`S(@$#Y=rQQpFTt&e{cb=FR$<% zUAKlSn8rE2QE*Wx(QhW_uBV&%zPq{Oc9KdPw(MyhJD6webpTM}t8O}H ze#%+gEK`{CEHi@xJpk}mkh z-un?=*Yr=aC$h`=Fl_SJJVoEWdV$wAzDdEM`M7dSmOkO|8pXQ&nMG$!wAUHgOI0zw z#uglLljW!eb&R*!9J00Y&1Knv+$x#wgww3Ku3~a^5*NBY&*+&ag~e;lB_4W!*Jc-J zusXV@3coj{(3?FX2Y(~pd8co+didb?S)?kMOF4WSR`>S(`wM5>!)Q1@V!~`{YB6vc zA3T;%C2!tO{y$5}J4Ua3!9prKn`d8x>lPDjR-nXDL+B*3(t2`_G=oi91#Yi;MK^z^ zye5m%f5+BcD{TKo33k-jzqYpa{C)6Q?##MPhj5z;N<&CT$&u$6Z&1pXbnM%>diZ)ZR^mSiw2A7B zFxQu*))vlGp20I;+clmBQ}0^G5{_jm&Ok?XXZ=4P)vid@3AX-)_u!wUgG%J2X?Ptc zC_$abOZ$;D(2APPP;2^y=CQi?i`f?4c~Ur5?`T?nNcP*1nOuXT!Wu`;iY#64hsXZ;dcT_fZ67ahQdX8YI5x0a5n5;-y1B8p zJp3IhVV6Ytyg{0`q1Tw1NfOpPr*1^Q_I-M0%b`%5(pXZc%2Vs?l4C3w36(=38b3L} zyJf0z%v(ukC`w-3MznBobI!Ns%cfPYpp8-<=3a|{R0WCR%HKAclPF8GLed{?lHb5m#PJgO3u<2j3yR#kxMTpmCx% zpx~wo35@ayeTM2bS=nykuXnU$oB_Rmp9^9t(&D z7#)XC z#fc1k0eckP3+vs*FG(S*wPx$wbWAB?;^2SK7kKme2asSL9>4E-tY1C#MY|6*IGhpm zVSi^Mp&X3utZ#8TyZS!<;wEsr|LVJP>H9B{o<^@s&fJWL49^(r=L5-VpXT{OID-$c zYpGE2hv|+->iuHRJ=^B*OlvF!+`OU}`QAdAV9GQ-OQ2D+9CzEBv`Ej4UYv*<%4k#Z z3;EuwPki!}-(8RIY&HTJP?=B{toesscq43*850wVmZJ$KY-m6HNi1}cjFG%Gmg3!i z*Ky}&EdAzaOCUm!;p=&Q;Z$pQP*#cXxv7tRYadcZ8iUd$;P56G^W`k1G0=8*VL!zI z3ZrABweH;RHNynPQq&JeChDz{tNZmOeZLI!M{sY&mPHDlUf6HV70k1{q7l$g!`9M$ z?kZiZT`)EjQa z((6k}e_TUbS!d)o7auRU3ER3&k^a$nC{9gmL2%BC%|x7QMftCTw^#FDQ*q&W5i@cEGHrB+oCYx*h5oL1(=x?BXZB>h zOS%MIMSdx;d@n8STrF(#OI6`}>_n#7HR=2Y#I%XeS=X0Q!wU{FS}Rep=J50Uz}lcX zoDm>SU-tJ=kxo2v`%j~NwQK#z+3IU4MULJ-L;JCPe=$+}X;c_RM9=!OJ_`q)ZrJyQvqwYe0_c;ctp? zW;8l#Ro%$BZPzC6^SO>3BqH&YL9CE6ieaYFYhj@wTAHZ+U%Lk0PL%=ckjBX!5m#WV zLD#&uNw?7Ff&A=aQ&SWe94Ae&?FA z@DStv>AZsCFaf)~egeL|ZNikfRW8xqtxiFb-X)j6zWFeEi;?|#AIg{UZfEQ%a{5Ge z$b_Gtt_{rTI-lgX?+`P0h~<40eXh9Ca+R1j-vHb6EVwMmP*a(P+3 z>%w`+(L`ObwgKC(5AKHit?ofU>QAwIw|d@c|8qmIA6tlyxS9#gDQ?AC!l5_?1Idt_ zX3&GVUg3VCa6X|%E<`@dc0&DTgQFT>H+TC?oj77@V&G|Po_I(~lxeP zQ9%Yyld&S=&+@D_FL9}_4Gg;ym-q}w z)A>1k-fkIvC6^sXjPJbNs};(2!#d$HZU0M1w~uFYB_BDu6mA_SwsMH!y=4fsuhj&Q zkLY}qOr|1VmtO^urCh-7QyhGLXsFiMphXr{nXvxddgAPNi5i8~v3FJ0ruwS#x8A_1 z>m#+bZ?Vy9)32=jfa+_GJ5#U8r)k$A;GG+2f2KJf@P`GJIzeH1)h}s|TMMw77Z0Zn z|Hxm$p+MZf2^+(}mF7$xrJOMddmei@4v6mq?F_9YZ-B)NCKi41>ycrn!~ zZfomvWYg)Zy&E|UXWQaTLUS16Gc%Tg_nf}%mIFnq9oB7efF&zuHVebb*1i+pO&)qhh_3& zeY&-C`l8FB>Y-LViS{fl(MNg?=UO^D!Q@g=qJk;&2oEwHUfbAZ%-_YFY@IEoh?mP& z$Qi+`X%%!aE+h!%^3MbU2T z{xNqhWx7>H(a?pld~dhLCu1@Z22~cu^KF1!8(~6~0b=n3ri{u2?ZCqx7Wm77HE$(| z0ux)rNt-lrO?68NqNjCwz%PMym6fUvY?7AlQUmpbQDhK#cZYA`^O%+5_Ra1uy=U-e z`+ny=r26X4Z%g&$m4B-z169EW=)<32b>1iS9=IP>kwqYOa&}AZ+j$<(n42k;g0uMn0D(=^feb`-;LFP#C*ILt`BurJyw>Z4IrMTA(_OSo}5~}iH`}+3-8bc0ToK*R%6rR;Yi~< z5`AFXQP!CHy-Pa|x8c%+sO%zQ@;sew^jyPvV3uG~et=i}!|c{B101)WO9$2cTt`z< z8_AwIEJJ4EDDq*+v}(&@iB7vHY5vKKw{BD zQD_3Z)NbE*=lK>PHR?Ny)Pa1iyW`{3+_y$Pz9fm-X9IGs4mSFr0Em?z4iQ;-7=jCDCvU-krpPiZ^ha$ zR(?L}d>&t3j9~up9KyJZW3Py(ghW2qf>@P_$n5BU7 zEg~t68ro}h9!l&1Ta=l^nwe0{AU7cgo=ycea&1?f`(7eHUZmBA*EOVt|_9&9B0JiC)+(KBpPd2h`aIspW?SyB$D zk69Z91zZURou=U|dC6sjNG&k)KlcE7sow%u|E^UGTY@)u86uKswAr^@n!joXVo)#j z&{I+W^Jj5G`4F?bi zyn)0*wLT^FyUlMUCb`u=w7yMn14F0$t+#_gVF3&e6yOzCO1R+j`}d{cc55n=5#+Cv z@RV#c+x}c1nFEYpLvA9GIbD4SKQb{AD6CAY-I&vU?V?y#V}jp+KDcKCEp{*)fvI(| zI~Y^$Sg7b$vni>ufVFo6pjDGC01PVLn=F$<&_Ur2g|ZZdmn}diD)T?b1S7BffY>dz z7vw#R)>zRRIXxH>1SL51r9_zC-xHR3)WM=|G5*K8ygw-j&9Jq>!NHQ`9J=#m`CDjQ z%*Rj*g@q5R+J}Rnjdjv-N3+{K!jr*2^~h4mX@T-H4q>=dSWX!gBfXBDmL24vbny$yVVDh~<+CQV0x%WUxk+VVx@vwr zn!k11>pMz}anw-A6FHYsRzG^OjeGwrC64%%|GnGT$J%5Gbwt?yWNW($*wTsDxzqZ6 zE#eKGPw(@g)aB4WWWE_eN7Vv%{Lwcb{N@9^BSVRSiDTWN2-cyj;u#^wevEjK0;#P0 z$^b}lOPtF^-#d00INk=ej)~V7l0^kKAd%D_WW+zb+=2A8I^1>5NtviXd^J0t2qq2$ zsnlqfK8cmGy@|cCEsVVAjHwRQP*5~qtax`utd8n2#DxhdN4YtGiOHW1Aq8G~#Esc% z6jV;+7`wLwzG$6K(BW8>vi=1DUCw4l-~0v0tC8aW0dS6j)#M=}kg)9k#Ui}d>Xy2< z0)i6-Gw)~MI#w*)nO}(Axf@2@1>uZy*kR`}3sV{n?zZ^ZE~pwi?tCc8hZ)=pz@pu= z&fRNFO?sK`=r8;g+qM?s`YZ>VAZRxPHdN`-IHrl(4zn?XABEa|d){jd16QQYNdJB}5R(=6sM3c~Dpa!xE}wpp=NyD6)QKw=%8Hi`K6Ak_ z1pQPJfeW_lLiNujnY3%4X;lEjoF7-MUS3YO16N@&3H%F?lDZzW~_Pz zn}lFPfT?J#U>Q6WKCik+^!M%^F}ht70oB!}nfYCp;S=Cvb7?A_w5uSdjq#};!`K=3 z!V0>bCT;?Fq5CfWvMF0aC-wCo;LKbIAR15vifD3<^Ie3}eAH2Hx28i<0+*^>!yH>J z;UQHaiU*j*fYj+dm1_$D;hZ4lwMHpT)Z7K7`B?fGs}wJYVC(Da>KM7J`P`0@Xw1fs zo*A0c&oaK1n8;Gzj2&x5dU-tu)9d;QKexyIQo*d4!>(tlXPkXOCu`WOc#rW_!xOH; z50}m3OBRGmVzNGd1u4P_Xw@!3=YAzW;=roR75v`;2cLuD2f$yR0N|>ftLjv*f`<)8 zz?B$oqU8-I$%Uw%*IiKHb-53U(+~H0LhhJbW@D7`RMAbfyh-A-u z1I#0a+*aRo5e}n;8CNIbIWHiHpeO1iW>Z02q`U7ew*cc1ai$=M+fE$uhu2YG8d&_a z10!!&H=l3Lys3eQU&Gxm#}%vcBb8|0Xdfxa56UvwVa*8h`jJOsN1?%#cIaH)7vZP^6X$8W6fZ3Po6PC&m=(Y_cgS!8H^ zxcv*j|7r6Qrnh!^Fodiou#2Wqtn8Z2V(oRDe@M!w-h%Gmt@y)_2`>n^v26x3z;Qp# z(}-hpol%~jug_VCwU*dcre5;St?#-C`H3qL{VFI=MN+Kw))33k#;1v$C=Bt?p-sGc;06~FXc)H>?BRT! zbB%Qa>Rk)N{FieYA7j$s?qJFx8&NK(cSR3TsF>kFN`Eh>~ShnJsxyR$Xhdq)vv zCWFV6@PapufCRaQWAkf@wGBTQ4-V{h52e3WUr7pzHn6_O#}+MqmTIdCYkq^*P$+L} zPJp^>Y64|CUIshfI8PWhLI8c+0E`1${E;h$H*k$$8n3x=Q;1y)iM zO=hG*Ktio&R1?>nCA@;1-;aNt%HWny%d1Rq!3it^PoazLm?6_Ztg;(EzxoW9y}(~$ zKWS~7-qEvK^^1t@mMc(j`O)<&pnlDPB`Ekzzc_$`%|I76!QFUJLzsP|8@4(Qz54JQ z1fj_|2yIGIzi-+UfQOa1s8T(Q?*@Tk!gA1^n z93a?sRIawJG=MJ5(ky8M{AeFLvdYy-l5dL7sq!lzul8IxIHuHqm0i?IN zIp0i2|3O{&JL}%0Jd>1&jc%ZNV{Jnh-$gm;AuNJniuQLHOZCa<3?_d?E zE!}s3s1Q=`A$9W~Bb5a?JcBUK-p36E9xSu|*edXxh?q zf`_Iw+pv~(NPI@VYtmb+fO)BuQ6u!95R(o#Ojs`uB)fA2$A(-7B@EG$5M9k*V( zpIl4)=n8=0Bg)d7Tos3+wM<59<5If%C!-QWAuJtg_k=P9Jd~W`>{{l$0sK2v^(F*9 zJUc(vB7`pUq_o~kJ}jT+iU2wHIA-CLfhRe%%`;pT2^e1mw!w$rT9W$Dr4smkKUnza@YU6zG-dTptZ zWVX}hDG;=TmO^@#0&ZqI(!cSS>AKB&`>kmjdh6Uv?koDlZMVGDblfam%)w(vq|&d6<7b_zUSAHiBDDMVc9rRFQCY;pVbeuO72VUMy^z4R-gy%Ul4+a~OzFP^dM-MF6VbWLju-+T3beWY(+ z=!c;t$Wx5%|wU0iwiniZ3)5HZyc6;E?aNA z45)qk?&pDqen>sSQ9m>*Dr@$j?*C)$yTfX3|A6VK2Zhj4R%JJ|h?3SZ6R9*Q4MKZq zZwHA|Aq~<%LpyD4qcTz{EiFVtVQ=2kAOZGEhai$rP{P-lw4*Y6u0a!qLAgY|{B)glYf_W% zT>D~@G92)1$aPUkS&oZXfcC}v^2{gb#0A9gGKNC$xJnj!Y*;D7K02Nee*61q4MfW} zv{!8L^#YT4f)2M;c10<3S(Z?KT6^v1sL?N1CttU934~3!4)0-MTP!VmK>qH=z^!}R z{PYNcB}K%FuL)G~^`U#0V|iA0JJV1{_gD^>!mTA9E@#@gd}V8z&b?32YyFUMOR|I= zqv>oLyu6AKG4ZM_u5`V9uLCV}=;1!{L zed2S8pYr!BVosj3|GAc}7*$~W9!Ig*5>5xj++Cvzo%$3d_AP~}?1ooag17gj;G%nm z3bsM`B&!xLJiC=aquo#llXKuF=d#1KuRS~+EyA8xNf z6BgpDlx;uT$c=S0zGusF)npzUY1Wau8kKMP=b7cPreV%tsZkXa)y`P)^t;#heS1*= zd#Iq%!6}96{qt? z$uyVC3U-qmY=fEAswEQ=0wn)fKRRKqH#^HC%I2=9IKwI1A@6WnpjchSu8+@yGCDL{ z0BN_Jd|??h6IF--#bD1eT5Chvh0o@A!fXP*T6h5l|kVVzjPC z*gkJie0QG9<#!MP>ig)yS)8gMy;4wWvgDLq-k@F;ztsBo`~?Rx1p*uf+KOh^l5IFB z+RTSc<2wUs5~C`&hF|_71R?Y9-#|i1hv7I9GzP=1RXax&%1a&?Gy6OWHsO#}tOU7{ zUST>m+#}kWSCG3NDg{`PS7qCXGCmNU3)IhBGtf3JTElUMAm5 zn%^MoX&o<|<@^XI7ZUO?tKiQ|PCfV4YPUeHi~Q>n72lJL!X2TG{U867@?J1BP}Dgi z7#81&Oykm#DyBX#Ob=IjZ51+jbN!%R{e{4;z8}9(F`gH{+b#b^%RQHQn59%yMAtCf z{Sq7<=FF!N8nPB;vd&dk*N#oPF~35Vb4bn3(MYy$P*f!6ln(`c0v2-WlN?UDFX+Tb z5ircrD*wL@r(@l|(WE4ueB1Yf;h#9ym3utf1IBHIHmO_%y1nKtSFvQuva3vokpS38 zWBtJoC-rMX*C5A!-KqYmtn6M2*$y89N<2kLCHiO~MjWlyA+=6DUsglpQsj z>b8**>~iwuYjsYtgBxZRg4ZP*V_0W*fO^YGb2#=eiCBL2*H3^dJvDXy21aW3It(CqaE(hxBIH8B0AA5fgjCMBUhC z46HR$bm&}SGt}*%a-h5xY2i6m#w^1sx+zxLcdX+Tb8Am#%Z=6QXT;Pr9CY0R&Y8mGD@9Ua z9N*d0hm@&Vr_u^@Z=7OWH3u~$cyt7S<7Z|mMmg?o8!Go)6=4Xws5p$uJerH{GJb>O zX&65KJ5TA;p=(ZD0%!>GcXiUIzh`Eu{k77>3qvVkEV)IDPj4U{GYaITO)s%KlcwYDJa``DRiB~mZAKZ4QEQsvEW=Wzbfpd zziGl$(z_U9od6x{{B;6~jerM?om-F30^Ca$5-GUXx~-%$_J=J|rVrr}#BXE@TAZRTt54p6Kkwzt}*}@@t&zu5Vm>BtW$@hU~7`^_otH6`S z2PqUEPS3FJLD!ZgO+13{i~e~2T!l$S!}Jk|3y{!hVNZs#>&We-`tKby3PiJjTX=dW zKC?p*h>KJ;%a}CD`Cx!ZWuog$xc*_aeziO#{V~z zm&h64$DH8zt77*hB|nz*G^3N_^z+!=aU4)(=0|X(ckNvJOnk$oM{t|wI5`=eS%V>Q`mfs_qsBE}tVHZ?H z8<7g%GH4XOd1@Bs`F-n6YJwn)J-K-L*GST467Fb)`Brc*#Qlcjs-8dF$txN~Z)@sB zrn5~*a^KE*0<&*CPZC+{t-}A9wKmQ$s{#vsOvz%G+ZyBwo1@1kpxkFbxllh|Ppe$} z|C7kyz%eu!hpVRO98vnk=T!jAYfT@fELrg;9;vDFRd;Dxa2EK8tWje-IMpYVq#${6 zC*p2U*oOw7Jx`IdY!7=aNHG#m`^*fo5pZ4>K2NIXbKdg+~Ti*q_%z;KqlK z0Ja|xv3=M3e~fK8C||v^=aVf7%6E{=KDypm6A(cpFTqpS_fDHCsKS>|Eje{PU~tP;;Sy-a|#({^eKWfB$~e4L0hunjLEwU^|1LxB1bP{ zaYTtm*D$jA{mTC>2^51+JD-btN76~#c)?y=Wts~XONBX6ZMBHhUv-D{;DQf4bESpL zW{@ml$q(+qPMAR1B9m3%(0_{+F#Ej7!Qb!J#ZaAeQahllsQv``w5$~!;>bV@NkA1# z759mBr?iMha}p-=vJ+QPlTHp4GyS3`nfG4@bq>#6>5N})pQKP-f_9z!k>IB$#3d`f zq+@I8x0jgw>GZ6eE%TO5&6-m$S7m^mi_2%T?@4&R)AFa^PU~OcK|*HsErLOhR>QKM zo<26GrUCODPSo0Lp4KR)nr%f#szAgs*|p5zIlh9^3+4{NmCeG4YF~&SJlxu37a&X8GG=^$s!0U*xre z_{pcz5M>2Pi&Zc{5Kaqw37xj=coOo9g6AHf&YKx{pY4$nA`8<3WIuk|C8kBGN53Ry zMJb3Hk%QNSeSCm6&Q8Bw-es4zld+lH8c~Vs%Q+4`4S^F=1OJ)x1?(eql-WJ`r&rOq zd+6KZ4axZ1@dS>$!EBgKu49G@>Q@g2UtV&$Z+{pM?Odll|w%Tq_ zx#!APHC`)Uz4OwQ$w2FQ$ugTEzOJq-U%jNUv;AL^U?XV}GJL{MKpB7+60pN?zO0{) zc^rkpXWTZ;0>POv&8T5)l4@B(-UUcyfa?vdlPqvt?e^PHH~UB&nm1Nu>+x}Kv?y6U zH+ZASjkqw9 z{1+mJG7vz_2|g)C0VE5Kr%Jy_>qF|f*U5wMcZqoZI*3%3XsNX@tydI?6T?!x3}1BL zOP?1S7^{wpQ}~+7FXy#@v}?qlx`O`M4id(gU0HC>LS}N$y=zn&RjrekO>5jvba=3D z8PlY&0@l&z1sAU8!iF=`-wh7|Rk@ag5Np6xYwT>$f{w)iySi5{v4Q3sUck+<$g1Ce zt2(>Ca!Nq%QqDO*a<~@KHLVWX<)YSDEwMw=^yNZv+ac=`#KKrEI^r5qWr}XEk-W6{ zi90Z+r6Cmt)C-I!Nb3Wg*Y?4(R>QI)D-B2g(jbp3T|9$0@5g99q7Y{&;~DGst$i=! z@I^PycER5d$&g|P^xqXLg)f%*tQFSr@&1?DQ?GcLe#&C_o&fncz3IeH?)X%MgDN67 zgCteiXBsw(!e*jp#m3u9K#<-y@Y_s+3r?Gr0+tY)FhR4mUGY1U1J#AVxrUCqFX@?W z#jj%&qJl#}mn~(Nc)DAp`IQ!wdu)1GHItIjcN`JDB>6o+r$u`ql+w*1DJnS07Yv&z zp~yILD3UHlZY>2!`D`n)tA>izfFHAvbj?~@E%xG2FGI83oqTwjAriJSE$abE%&E z%Q20qMra;G=3sI-;F#u@Z<-vw?K&=khwIwCG#Q(CdfvZ)(_T8RU{|FGgYD6I=cR4- zf|}kHIPs=|OJu<`O{qcM_u|G*aZR+xaA6>=M5fttX*ShVl+!`)>YZ!7(2Rw2ptQOk zv!t4y*Iqzq_Xtp$1NThU4M5?aD89)c)y!N zI*}k=qCf33D**Im0{SL;FAq`}mj*#Yko8*6J?l|ZqJ0cUdR{BM*O~e)vF&u{%C2}R zp(D$8_=0Kn<`&w^=Ep7-@^qU`qV)rzA2IZ~7^(esI`M=L!5Q&{{Ft@y-DC(|h$m7Q zuI_sK3Q8@&Y`{>#TA@I-RtL$}YVlS~}pg_!F=P=2>S5}EBV@b%nu z#Wo;W63zrzQPDZ=-DDW%Aq>`Xp8!V~CxGZ{mEYC>S`vB;i(fJoh|CjxexLHdVcuV3 zarnqb&{8mZ=Nf*gww~@%Z5PFck}LL}gw4tPblW!m`mAYHrIkPOyJRxKm@~!Cnad!0 zNPr$<;rfQ#=RgCujRj27^R8vk6o|D0L|dzu{?*#iT{1IVx$WTx%Eob(ET>NWk?)kP z+lfT)?Q7jz^$2f<@kj8$+@0()snaQoB(eFP7Zznogibv9XVls9{V!%FzUR?vVZ+JX zxbK|UpuK}{*X*-b1iLY}{8_*QQ83A*bc*I|WHzG1FQaIah1ESuyhmxH!ygHUykGB} zOb59N)&rv6JjV9x+U*k2u$yq&b*-DA#RYyE$#J4mFX*!%Z>`sS4dtl!PQ5anbAYH~A)Rtmxo6G;eTtrBI1^I|aJ%gSJX()`#6B0)Gk(Dy zp}$yec=LMONSel3@wJ8zc2Nb3r*=5Z8EDdjwq}pK3|BQ}Wo5#0k)z=%Kp^*w+Ixbh zc0t+>L_fhmOyYuIbGSXj#nOlD!WZ*5kOdrJ_(&k&O}n3&bIn}-nE6Y1#I$~}yPpfD z)rfF!UARfy{nN7a6&*UT!|^V28wx0=VCoAi%vy(_AdS1J9CoX=`N4Xy=6oMrT{JlS z62iw1>*hQ}eVV+N8#6`vrhuo@_~!7A3OIBR1`OQE3Ve-M*$2H|fMn(Z9EA?46-gW>O-8X-TEDrX9bhy+5}Ls6u3E6Na zzS8B)r85(~n;08;Jdc-br+kI_xtSNbmQ%UV(r@y8(}%ojt#}$2cicBNA)&{@x=SBA zu(g8TqN3g#U?lQVw?@6--aX5G=|8YTK@#o<7Z}XZVq^0U-azU_*DPNRWUvA5o@A`} z3+@QfGm4Iz!Xi&iu{XAj;ad0ke0LFSxGr!O#>5yiCyCB&2*hn7Hza5s9U=G+SYwd3 zo$kc=C2g|c(y6SOqpxQo6Xyzfs48;;>r{LCD%75CU}WU^UD6?)Q&m;0`9aVOy z9R4_%_4=}ehjVysV}&|JFh*7>Kx0I{MsY4ch?@tu)r4zF6Li%cy~QE6HOYxB%TL|R z>o1NpHlONFrofz=C%Jrq_*L;!2a0X_5%NzCZRFIaK}khrt;y5Pq%l47XYh?6fmeOh5 zh0LA|(FkPr5c~=eeSuh&Qx7A#J=}PI7&0XOoZ&BmYa{0r56DRcq*E%vz$TJgg2s=4 zhS`dL8#jLRip^bhkgid`BTj*H%@1Z=!?^NvmH{|{fT&}*){AlS=<$WvA`1MGz0{*R zg7uwaAYt5_9usez<`mB2gNoXjVqQm3AKZBgJnpYVjA@(zjHzhVrGLP7SCzc`Dv)D1 zk{qK*HVS8ALa@diWncFETYQ86onFYEe_5M2Oi_Z$WfKHgO6`qob4O|#DTa(-KxgGc zD4~1(edE+8so$P{@#ZdBvYxJ!4|otojTz#kR-ZcaMjkYeimK|M;j-=E1Yy-7G-G}E z?at{hAT4m5-=dG-w`3qGKQI8rW--}SEz6!kPMJXvmM8acY@;Ier8; z_YE_CsbI&|B!_%|2==^ThtE{J2wKm+doglFAIeeqFczmZ6#hF@S4ZKNCEjw@j=Bdu6Y%O5jwB+5CUQy zC^)50*^G2$z~|F%FfHtz@d;L_)c6mJli*PZC}mRy8;}W5D-cGH?@k>E7(eN`2N+UOXqNY+ zBs93Bktaxvo7`10|1trR0f)jNrF6F<1ZG!3{fGA5m}znrG{Ifn5M;K#w1(B{hJ05A z?oA%tfgDON19Pkhy?kw~rpMy^H)}(}CWT zJ0rrc*lIAbWL3o_h_0ogcK!lNy%{FK77q^JnFreN6R+<8p80!!ln0 zvwfEZDhv(hpDRu)xai6YMzq&u`{ibG%KjlT^Ox#H=`MUXq7^iBmFVdENzRq3w##Vi zWKBAAy=?xDPvIeI9H3~k6#1t3V1B9N!d0;@!!KSa|M9+MO*^L`b6#uXl6pfE6FHq8 z8IaIhlK}mMCO{4(;(;GCd_FVJ-g&q+11oF3a`t9hINbLc)7DMmZy`oE;k1bv!h((L z>3>mbg_{}3raxf~WDi&=LI}slwDrY45WgppIk`R|tQrpZbnr4l!X*$1mz!_*&kzJe zF}RlH=u5l1wMX09zjNUakchp!Z@S2&2@K>oS+XiSh_H1}J+QmhL}=-g)IzcpyDF zN(~16+p67EsJd|7rtjVg<4rPNZ6?B>ptbNKa?XnZ{^#S*zMGRRBfozw#1;KsMDg55 zHa_jINAe*eTmxJ!f6#8})Sd2IH=d8ao&5-C;cp@BH=zK7?m@Yt|M(32i~BUi9&aj0 z4!N7R)P&;vLQ>D$+Z#@g#k_UuHd5Honi|`^d4s7iaWGV_2l-U@(qLzI%?duy!fq}& z|8JR657UM(@f*6bvjQX`Wy4d8%;pDBH=LJ89G(f3Y#m%mNzG8#NV&j@q8nIBzfL_q z@3(Ke;SBlx9>-irNe&sS(xlW@&?EcDM;22sy&Z5|^y!4te|w?WVv1t4W_xM7t6A;`MH2LHMYdz23Q~+k z#5ha8iuVOX0>JDry(1=kfQk+(VNB6tBbgQ{>zR+jHVRI2lC*2msZkf~ZvgZ8Bz<0_ z2h@>3P<>}P6JcK_pV@IKUh=;%aardG!|H_$`XARWx_4hq5kvnvIpP@Rq@1E6>q6Q-#jP`Z{^c!qv5aBMmD8}-Y)*fF6>g? zM)>OI;e~)nC@Q?r8nN-v9j5A|1xYiS416vkio@V%sC}ZEqyZvs8 zMcf1VxRUYdPt71?Ih6b9WEFw)f@rLTw5WJB-J(|qpV<#T9&ZiXS>jh$TbscY~} z3SXu1=La&+&-kSIAB!BTMt}sT1Vk;TOU5xe7RLBnH`2FDyjwW$H-hfM8hDM85}Gt|0!Z_lA}9sh+Q*c;R}MN#rtrPjsj889_v2DTf(q}CBvQn~fE6rLSDNpP z(!_o#vt|nZ+bq2!i+8`Ytt?}(Vr_dQPK~8thnPMYr8}=ggnVut0`QRFCq}d=T@4^q zxgAMwX)y>6#T!LvtxJ+Gd6&zYidS8!yAi-Tq;RX5nTvpz`(L{ESnEuZ=PfT@u?8%g z5=o*T6aqV~GCVmz(-V0DOUmM+fQ$y_b&t?Lcx8L+p8>tz!rZmb6H(UziPEj*!?lxS z0xsOqo(tt5l<1CmDn@gBZqO~b;jMw#UsMr&6kjs1($Poa>&x2P*4k9DAwzjx5U16mHk-pu)VL`j1 zx*z5{d4h}|TqxVo7yC{J9A>OqD@lfVx%jD#2hS5Ru|KA8j{kegW3hVGCPoYTiFcv501p z(O1XClGIuN+&5Io=<2I-l&UM|yTB!`LW=P*Tj}W_kKU==VAYP>2W-I_$oJ;pIUlXU zd-(a8(B{phq=u<|8v*qH+=!aBl_{#OK}BrK=9V~4r#7faWTB8-m_nU=$tjedC-TOc zEw``Or0{uRqJ$kIbVJfqc~@T|zC64OML@LPV@T8GXKo)on=KD)Uz;xXVrngOZvuBI z3Tss-Z>Z~9${wU%dO($0xT}QZiMo{b8+pC3+aUs`iO?DWvilUc!@)FbVuH*7EmePY zhY2@l>c(URHPid#b>cc#AKfGlI;&-tZ2&!QsCY_!pCS9ymZB7NFC2>B<5Cqo&0)bw zA&t7|M8@3UE)l2{WXWX~raanqXBq$M4B@7VHge3>QF|jp7npuXacK}O0}7!Nl7P@B zdh-0|C%Of=`%qCUtX!G+7vaLO8WGwL{#h271{<>cUL3I15Vax>=qDt?_nLbW{AmfZ z$EZf>7}uwHV|_STk_F}9^NPZlA*@s~Q>&AYw)sHL91&u%dD^~w?>FZ~B{BQ$H9|IXswwtv1fA6MQtz>N`rI$a^#TXfp9UC=-oonZOco$ZrYrtC!<1l zAH7k!hLmZ#2D`8eQE~Yk4PWD>%iy7g%4V*NLhq@9 zvlQp}6%`8qaR*(#9dc#QA)?}{SPgs4etd!|b*Vase4zy?py;@UX#4-vTZ>D5rU*-X zERlTX1x96>-kN2KZ4}A}qtcFQJo}J|y30x7r zfNlo|hiB1ywjchB8+fn>?~&nL>Iq;zeb$a>0e7%~lyIpucu%!nC>%)!b1Dc;ebzp$ zzu>iL>oi@dJZwY>M#`Q34?tI-c;WB)M%a;;DhJMw{<$qOvvEHQ^4LSjI#B8;D_+0s zHNg8m<$gzvaJ9G}U2$r0dNuV3+K!(KzY$5X&;nZC$CYHe?3#TJ$)AsmYdcMJMhyStRIIeYuK6&rB zCG=_%5*V*Q!FRr^GFolP)~Vxu1l{*f0lEQIMChK4sUcx5TM0Ctdd7*5G@utAhg7C& z4rV?{hILzl=y=5Vts42?m}64{Yln)9C&fHY;{`aA8t=h*tB2U2@TjCB`5at|SfTEz z!v-Ou`D_<0M35F+h?!-3DL*VSq(I_6+kb!?a~yX4Y~&GnUgunJdjYr|pT*TsObY7K zW?bMz7y_2@-!w6ZNe&TV4u`>F9AMo#p3ofN4t#$nLn-E7!8+1Auy#nx zl;y|Jl1A2kK=5Ys9mg?a5klT{AI^$L;)ZwH={E1y{_u%{-WsF;U3Eb^TOB|O(9m?3 z44J3hfx49cu=1c%?HMm4gTXovX-M-&lv!Kz-2-wdT$m2{$P<&D+IQriXS!uC%jAqG zX|_TPg!AMUk{iOpWq?NrN4M}(bjNIXW558E#|1wj`rfp#LBBX{N5$fb`v##G4j$jU zUW3;}e=|3pjJ&GNib=Iw-lrT*GBoD+aY?LFjn}_lo&3EHQ^YP!I&rkvwJ5YTTLrSEG~B8J(r-wToBS&Bli1_t9Bmninb zEU03c5kb6&(x4T>Cxhi~p{Iw(xxW6xC)WkBfjj5xRk?S29*;?h3)wz|INI&0I9i7* ze733O;0{_)J&cHfusnv;u}o1na~7$L0XJ$l7`DUpC1s=CL8qr;7ChQ-sY0cXW`q;b z8bsIFhiJ*PjsKU{NYFMMSOSL`t7V_;77_%zkMpE#>$tb*x*LFuG9`ZjvZN(EKvE`9 z1*8mL0+KR>&nXGya7o8)pz!7UA6&=E(5oGJt-*f(?bccNAn^t_3J7ktImkcnf2lC- z2*+A|k$>>J&LNCF)TO@S?wjiY*ONn*Um+gt1ObF+fDmnO5=_$mIV&V}FF!4q| z$nR)EMdJz*5$_fb>!r zEwP=kp2z>#NrAx8^>2TYOn#gXVm0pQxAT4%A;=QsRTe+3f0LwU#Z{vC0~{pSUO-T9 zX|R8S<2aMIjVxxBS5H&0n0UX8W0AY6J3}aSbwP@t$gUk)P9>t*7oQ>DQ?)(3iiV#; zhKb@K97{lc=dk zk%g1$YAX;@N8k_|5)4KwkZih#$?%lh8FRAbJ(T*iG+7ggbcm0`>K2;Vq{f%JwK|83h zcrV4dn}5>_aE2@fdn{xs%F@ycUz6}qL$CBkK2N(m^CPU~-myrqH&WHYsFVA*qZq=S z+e5Ty31){Fj;#0CCf50kXzCKMNlfwf_S_Io+}*p2p@-l<9#4BZraoeww<|zo$?~kO?CK3SVBSW-r4c1e+&L`2XrL`;M-WUJ_MYw3WK{J%hd>veL+=wZ zRNu>c3VcX{KhmqUJI+TZeKvbWdPgDZnKD~KLy}{`E&_i)GkKU6`N2;2@xrQ~JlqcQ zfz+dx6QC)CJHSLMsfXZ3@Ivg=nPx+iouE`t*y(p7t#Br6PKW__ORDU15p=gg7pY!0?Ypj+DwloDz1S~x*NJ5 zSZtk6JM@Y4Lk!};2f?ZHfs3d>YG8k9|2ZTXM~A|+SQZou!wDc$!Tp5tF5H#HkRQ#x z3m!<+83@I8+0~qr~iLGbXHI@TMUOWmPTDm`HDNbOzNi{n}1iYLFc#f*A z?WRFCm$BC%97@vxfzPU=&&JyFpscAo8qI(zi6NJX1i*150F;RWKrWAwA^`q3G6(>s zjI|<)A6TL&EKwHw#%GigcTseP8;bCE7-UM}jE+YXGQN+;X(d z6)<4W`u=|t>N!MYM>tjH%>@8z98r^npk3|fStv$wl#G2z2)jlv3O163UxHB1Q2289 zDtgAvC;@jY778UiiFy3}v8vQKb)f;=*89IxC$NdmU^PvHFvi98omIt}BBbR(Z36_c zQW97x>8aV42_uS}D)uNYowgn7zDO5^hu|ICSM@`m0sZ1z5Kt;{*$=aS|I6uGY#j&! zvG-@75iM+rBLAc~F=kr!Y1RrVN)R@)h66wV;zU4aq~Y3C=onCykHa>|G07c9;fKhL z)x6Y@%k&Z^xf8?$SGsb@JX;SpM#9y!3-cesRRIt*UT+tNgli5g<@0K5DP+8+OgCPG zPQYEMG5F83UE%zM~_SpLh`- zWVC^6x5X4JAU8Bwm835nk%4diyE>No%ghVx9c1^#tT&=CG3CK&w@r7?DE=Tu9qFth zRY=nx7Wu8p>;Fvvi}J>#&$7evs!q!Lk=;M)@6-#>J&jYkhw>Qp-;nd3mYSMUCg14} z*fuVv-WCToO>6UPQl-A_|DwJo{0RVc-#bIpwngv;TFf_0cW3>tJQ85p4M`aMgyx(+ zC9;ePT7p>nQ8zihNx?Bif)NqJ4ok1vd5i@h6rO}|ubRW3v5^=eh(IBNr^FCJgvJFb zJ}}4-IJxf;t@_*wM0}1g?sHDd9u+_xvam48dNnUFjSACHMA!Bl+s4~WUfmFeU4#NOA{%OZllS_jQ1S7P5JaH6kknSf&L8=4vl&I2tXIz%7OzqP}VR zg@Ft}L)@{9l9Hk>f9fL05}`r9_X<4Mflwm(@rW0ADqynjhyh!R*9h5K3^8hJ=@-i- z6~4Q1%GgoxtS$N;Ow|I5srC{R$$y{zVG=Nfp&~@T_^lSLxG}6EoE_fL(;3m9xP(2@1AO6rvL z@oMupQ=Mt4I&xjfDBG^7;yT<(_;TZ_xmzUtQfQ6H#O&+Q6WMMy4!-GAbcFfTSP90Q1cWOD3llww1H-3BW;u7pTdyhMcYl|KgN(2f?Y^o z$s(|5(IO_ro2#fSPQA!RUO}dv;yBzLgdm^V+8bNMHZ$(B*`-E*8h!AA~u zhFI_*(rb4KVZb>`RPy&lD&ZQyuqSzAc^{hYN|bIN}cIqh%alQXO61UU_wAC6rs0_Z*A7yGVDi)%)xRGA?ieC@9Bp zLWx$wiT1KFwOv9!3qX{#a}LPq!zM%YBcNJRAsJ3kGg4O2)@ zHzAE@ovThez+DKD=YD_|IF8b7la9^IJLH+uj~#p?FKyjGEoUA_LekCAG?E5g>SoY0 zvSn5MxxCe7nzt!@ZcmFkKGwBAQe%H4LT%r{?nm}X z#L9ORVw&P#(l3&Hia`h$;e@Y8iQJJ^{Yo^1T--LpWBS&{c>o^LquSq9qw((}?ru&D6MY78b(kT3lh zM}^FX3>C`DD2u@^Lgw{~Diye|V++9AWO02dxjNuyzOQR=KW*o7&Al6*Z&_!mYx1B%6LqT5+BxDQtt|*abS8&g6Um z^-Um<7a_DU3QD!*2X5Fa7y;z2$9#kqOB%lXO^W14D zWZYVopmbn}Pl<%HB!>93M~~lb6A|``5(^91FvP(vv(}73-s>IWFzUq^b-1>4s$%ko zfW5nb2Gv-=oFYa_@}G}T}A*{)a5ox;{%1bsf&X)-qcmV z51$lbWtNkqIfUJAClSMLvosYh12&gd)P5cyMFz4<32SIR{_YXS8?T9yNtwM>ggOTr z%Zc28);7(36mp*R`Jhd>waksO3WLWuuSD$JySGDDTlkYfAW1VcZTvEHZQdr9R0zcB z|8@!|7Ck=!WSez=?yluKPx*}qYTN|!AKWA}&&}p3@*;$)=!7{yNi5hZS^r)+?_zdS zA}QPEDR?_S?V+mzVv4?-%C79gWTgV zSSHqqVd;ng@v$>4aREW*=}lWa7|vx6PCc1dF& zbDLB9^=GSyWF!PppwWv;4e7I31ExkImFeUd32pI~z-^t!7oF0LX19j0aL{t}_ zN(nDjryi6$f=rFH4G?3Se*tobbwB@OSE>A>(u2cr>GI`{tLjv;zmt+^714CAz8zEH zsVRxCO9wD9TZxuShKWs!*a6#_$#EgnQ|v^u@-D~>XUN=W==|kQ=+d?r-Kr*el6Qk^ zW;v?kDPJH16}l3+#b$WzhCFo+iyXesB0)O7A zFuD-x_4+WigIVy9%PdSo%A&ujNs7D-=+XL8OYG5_#Z1^ZkarsXmo^}X?ndG#WOS1Y z=QeLb#r2O*o|PYbsIwA|Panf`|(q^T2(?oKAL5Ctx7QZJIkIv=-3h_wf=;VxIjt=@+5Z zI724DLB*ZW4Q(-Jl?}bENVJ2y2wd@#-~?R&Wv|BOas_Sz#g+>4GB3fKNtRsReQ8n2 z+ndN0Pn`pg(~uQ=`N42a)|C5zGem`iJ+B35VPZsER|D+WtAFwfl1QD(IK!1IIz;*7 zx6iS8tdZ7EG`@cYtSm(|mDJtf)jF@EEuykpB(I$%dKA&$hEBRq?fo-ab>e??jozf+ zhs-D50IBasiRRPm?LRM*lhn8XhOy9(yZrwl8giOw{?H&1SV+~8hMLz0 zY(Iaq+C>FDE)?ZN{7loiX&^(98|SkKe7i446<7yUo*fv}*hyS@I2V0oU}6=1EpjM^ z=5Z)SP*!NKQ>ggQaY8c_cdyB){h2!ULr*TX2 z@hXV*4uft{PV;$6t6Pi^iY-ArQBvu#p2!oGr|?ZX)JR4L zNb+o+W)IR{$aE8)MaPcxL$gn^m!AV~{jI?d?qobqg8B3*#Fbh0ksHt0JSw8Y1$UFqj>GZGqf@p$ zDOsaAEnYch1v@w#e?77vDUgs9VXxb*oz=vo=j)=);_J|@cLXch|0e8PX;t~HQ_pv4 zrt5B@eE){u7j6>V9ho_K4SsN=C-_1Asr#|3;n+$Jnco>j9x>v?GU zS>PFaQifpugC)HqWlfd?qUJvMrs2G-)*A6|%mtGNU0cle{ff8m+@Za$Au!Xtv$9}# z&>RjUEV##+Q?}2zWPS74^*y1r$y!bOJDZ!%S9$9V@Qe5kikvbpJ)7Bb$!V;XKl8`v zkW-aw-=C7CDy5Jn`wAE7Y{A6w5u0af@vF`E+83O1>PgqsC>~VT;*-tt=k4Ms4K4ghXD4OzbFF1@jQ&!#jH)v6q5++(!xH0b z6@0@a2?dr-wMky$<^{rT(hP19EAF_tv=y|u^$rz={5+YSMHmQdW98Z1?w{m(xI1gW zhhNkoOuaj}!L@%(;q`G_t--bDJ{H^K#HF*_n}af6<>r18Jmc{3#)_yt)h&tYT&79} z6*$mimNluD ze!Sb;e#@%$377M3X#ob`GyUFPdI{+@KZ6THbR@>!{~1hjW%qR(+t-)o=KA^9iOR*N zWcTxPinV^1ZIWP?{H2&na2I@E{(Mkoa;>l1%T_L%2|4z$!g1!;VH1RQ`+jAS8__0z z?v14=!(sC!aaCQC0|epLR<2MHX9dBL#+X<8mAs9K^0MPqGfShij=rw5c%r&r=!4!I z@pY!;{BjfeH+*{um-mkRdBSC7L zNK7nI2vP~FOmA4$c>hh8Abgow-QnGJg|e&R8tk2+Ko4$yVVP0b0G+Whwr5oXZEaOi zqpc4#^Phb#e6q-`UpLpJORHb678CCG(n;xt!a62j%{5*=I@MLe1%IB`<>!uP9S`ER zh_lnt*17Xy>zNVIf`k;u{#aSTNKw+caW3=Q z92dlAQ6>Ko(yJ*&>?Me`OqJEi0|o=$i#;{a`zmWj5^fmV@vYri^E-==TL z?&j-77yRIoo{)9^_Fdui2hrwL$VzYsf1A-@zCI`S=Y_rpF51Fol01a=*UZj)&7OA# zd>yKCFn4a)|LhAt)AfHeYA{(=%HvUg>O7=4+=jb!zSRdazm^S?F!VN7__|kJ%T-mP zt0io0Nr>|q=g!B1C3oKkEUmqrSTH;w>Kme+t(-gDV{R04-`ue&*eY6CYWz;4flaH{ zqDh(fKVLoTj2id{j75F7G+Q5Pw8Q%j6yEX*(B8W_o;zW(TOq{H>5Rp2yNAO2L@n0# zP|M!M1%x&*e|#A{1a5rDs55!JM@d&Ud%`Tq;X?C(^#^>*V2kCX=jcG|#D!M3w+DSI z#|QA`!$X#VA7j;Hdu}P0-vAY1WgohGa=*Ex&~NSJ@*5ldbMme1oWE#s-YAi3duI7{ zHQQ@0`H@2pt%{!yJMif8Fm%S7Isg15+}{;(Qd7mNHt%b?ad-Xcu)RA9bSl>f2Jtc^ z-OF^Ajo26_sZ$`6+cl2&e6D$~ztykHL%Q#)WxM$vi}r5=f;U@zrKG}I$C5(X8glJ} z#|pUCXZan-Sl%>LA+fZpiSv(d7G7qk$Y1CAuDec80!Q=u1}zI8EqdKD-Zbf6bH?_? z15(jv8DBqGXRTY6ETq){`0fKOu%V;wY3$+gqh?tcy^=*6WXv?^^^VqBCA2u#VeO#?e6r5lF67!WBF?eV*a@tbQR=Lr3z|;Y6 z_t_!3POqi*b)}%r%9x415uy7a4I9mQ8r!U*L)PkK|2p0WuaZg<93OZ3>ZQF#Cd|TG z!pg65;Xz6*K-GyF`>;I)_iOI`%>NS4)Y|OS%kH`(!PM7f=mth(@ROVU&tDUm-hq*( z-|yX`LdIhJTAk41I>tHQb?xnWSoICrHPRvs+afudg#LW^x*$D4J59CwRP(0gjt%?c zmWBST1sR#*Cv{L(bKq#p5bCP#Z}JVm8!ehv1uKNoe-{tb@0qC_sje54bI9$pi0)f> z#4+W5^n<~n4|;<{jT(Lf(rK-oL-z;_eVFA2bNF*HAruMe0ck5&=LpAR`4wJCBj+T{ z-?yJ|{K%twuH=K=yYk~NxV={dd}N8VxbehS+VOQSrr+|DrtiAtQEObvv=?=+=G@yC zM3gpTHU2u|j;>`ti_4Pg#N?%i(j*%7ZE)hEXWS0v+7x8|P>v|PZB<|`Z$cPapJ3U; zr7pF~OFCySsDwBFs7twiGqh~$)b|nNa;JCcNMn}osO!!cD=_yQ6g}mZ-v01cGs|X% ziHN?CQT&?a)x*_-ZmY#jGFpE*1ZrE!n&cO?y>gR(u@`C7t$qp*?Hu!^8J4l9;2#;s zeW-DgOaD9smtIg8z`$w0qkCavbQBpVIvCN~iv9Gm3rcsYY#Qfnu z5AZQo0^;Hs4VF2334`W0*Do?J^_}?5oWEK@123yrW&#W(%sFbpA?IK0FRHb2y|i)b zSV8ovtbyEU)1A)v=zJg1cY=Z?o$aAg8!SF$$unM*T`0gq;Pq~U=`RF)mrf3^kMsLG z!yC9lUC-q@;+tgd^<@@}^B*f0Y+raJGVp`9u)y9ei3LAL_Ktj`RcVoj# zS$|C)>==wF3|1Kcguk5_yWipJ)cD!BBtNOq?$F+{4vn(WcMjlMsh*WJUdOYh^B?>^ zk$lHKb#Tz(a~XCwC`8KqT-RRB+;|>3fXm_WQv_y z`kL#$ZWDjqp8usDmdwzDQI8v>p5QXYo2A{rqOn{i7uUq zbylINE*!g+#M9R$HB8#{l}L~66jc~ivUsR$K^w@xKD2H)U-tR19FoQHjop&_n*1i~i z-VoUK{i|GgBjNtDZ!$Z+T}c&Kldr(+RxbW60q<(;dd6zOvDQ%g9@nG~_-IUGO14Jj zGw+J&Kv7Xl?u=?22tc) z5Zqa(-kopEXaD}nsmZtN5B>Ibe5fQoIN95p*H(h`+*rBt@UZa5aoew_*@|LHlCqoM zhVA2N%QrET_}27av8u0QN5&#n0C(Vj$nBfC?9Gu}DTWqG4`v*jo8e%%l!*I%!) zy05(d_A*s)L)8;t-Qvf}zsd?PmivGep*L1lHOZr0(BNv>-ecEhuC5Ss$S_c8Y+}gm z#z^(x*Uweu*O>$+$AX;F10lCCBzB1fhS5%NTN7(i$r79ab+}&M&P{8`3Ly*o9+E{% z3_4$Vp=8mMGuneiXDQyP;_ih7ne#TvSgRp^+V7OV6PZtAo9!gic(0vJc>;c}JMPRt zSj(HMo7S~PjhwK2lkd^yCeeCDxZlEi_qwyvoev{h&a9gJr4V<;zLMzNgUmU5CYA6& zb>a3*=C*}fxH#=D@l7G?UzsS!9Zo;GgJs!-(v|6nhCNRpnpM&};OR23zzaj?_fl7bT_(5lM%M3lUHuha zn3~k6zMPf`fsD~1Rb%7j)u$mifgC*#g%g_&@|bXYt0>3vdw=qao_t?LRMNR-fvUCH ze_{oT2Qr+SZ@kY34OO(Pw&gZn0WVq%LNaYqW~g!ffbFT(8wcEX2zs^`{2J!xcacc? zgmYq@VkaAa zUUFpe6B$mI-5JisYQtxE_}bE}+0U;R=aojmftr^U#Bw@%_^hnlCi9Tt`n8c zJ|A&9-Ua5J?XQ;E@q5|SoYrqF3~5`DsNORiE75TgJmYo0v&Sm8_2s{637iyj7uo}{ z(f$Gb$D{lViWh1H)(;GEY2~b(@Shm1aWZGObn~^-iBt@Ecc)rHw=>wTMQF3cPZW{6 zr}OKs#O2N}ub6!%_qJ&bV*sB5+23B;zo-#h6FTuO$yL(FvFqe;n6%Z$XuaqVyLFbG zUS-d@r3e!&11`tSvLu+5jX3h){PY91mHL}et9l&gKt>oRl~&7)5{Yh)3Mv z%`8w^Rl)18s^GqxqKOW#KB}`zp&&Ct@LqH>mclPn>6UOi`Xh^ay9-7aS~h&hJj}S` z`ACEM3ByMpaN-{94ySU*-@H0fI#BTsbJ1~~KPk>Sj5$XivF(63X1k=Rm$Qx)R(9a# zRdwcK@#PW{EjBNHg!vN9!QB7D*n3Acopt-eHY`CvG>FtFC`ANBKsr&Xg(@l?M7s1E zdK5&YizrAZAfVDjdKZzRlu(pVLJg46LJ6S-!tZ3BnYlC1eeYWDKUsmmH(ANq`_uM0 z`F)pk{?+=p{Wu}+n;dmvc0aAE(yo_}Uf%I}G+?+<&S@JN5JE9DbJO2@e<}>jxbpyVN+5`+@Lq%<{(0EemCrAWF*A zXj_9EvJqS^->-i5m<^RXQo<=m*G*DaD@$)}4De&_7tDm(wT!#LOXWc;4M=@eQazBWK z-ivQdV+um39Jrf*uImB=0L@tsSm1i^;2N9pOs(S9>Y2whr2|~aQlB3Qa(GIGXxER! zu4=L7`}3H%V2wWMnSL0}^S&mp4dIrV{l2Mf@EDj?>(2yxF45I$*mz!Z#SaS=cQiYh zeJ0aSWeJHmevCqA_})zQT)bUEj30=e*{_!m+OHjNNwsy!$nYn3>9-Y$4omJY-)(Ta zEx);)(uOKV-o;A$SaK)FeG^Y^b3u}7w>B8YBlg*9__?=MwWk{Vk(>x5o+v+YF*=D6 zTW!6KY`y8v`No{`Go|QdbVm8=xp=7J+E1C<8A|LvVRdzQZ-bM$%Hwxs12=kbnoZa+ zH-vpsb0#qnrxytyTJyzmRbfQ@+eXLh<&X~RCKwYprvUO)@$7Pap5J}Wt$_yz#iM(V zV{ZqJI=3ygYV5x!4|FNVSByC?$lE~ zdwcSM6t>z?g-vhC9D=%i^RD2@JegacWCnBH;Cb{htW~65rl2c-@SO3;lzsdNZew*c z>`GLAqKN`$mH68Xc;c#3Ae_+PmOmE}&FAE7X zHx1!tZb)q76qS~VyucfpPIQOoWt=M>^WS8~jCj@RPvi5Rmj4db3nZ3_lRP$L9~FN{ zzqV$fGMt;f3_XE%=9Mbn#CyITh=D#K!FoR0f-DaDKgSO~sT zG)SaEv>5WtK5F$4!nt<4Vi37`*hsBN_*09wT%CZ~>XiO0o)fX=R)T)!ukAwxW_w>a zK5(XP(7XHkneJZc%=l+=%W}JcZreF`TNxf1n%<0e6(< zv~AR{zrZv_^ARnV>HOOUQXJD@wObB&yoGS|YAC7U9E>v2_M+LVwRTJc6!48?8n-q3 zDZGj0)Hc}+xBPi$6FY!5`CUvyJhzp}W3k6?*w0X%(j|rfaz<)iAH7&q%5b!q3*!miK+4#%>~l#{0dxQ^h@II~7Sgirfmx zNgjph1=&P#alBvG9Gf|kFgG`_7-fT+(2^)tiOooWVX2i;_0|;F=f+X55mS*0mN^#T zDx9Tkuj5_}15Ey#P1idX2=Su(p3MI1BDXY`VKq}BXhk@upV_GI@IizM!YM^4>1@aIj$+XGE$kG-k} z4gT@V|9SY2dl5M|Dw??V=_B8~d2`5@WKeS7Dx3K~SIBIK5ExecxU!`(g}B@QzUn_N zAV577*OYdtShz$n(QMhC|t*gG_-Wvbr|Jd;O)VEEf3Q7E33X|FEDQU>-cLmK@L}be zG_Uzn3v?u`7eBjoYby69+9~T^hH3gb_m)1)3rg#;3T4Aq+wNYK+syJ1cUl{M;IK5c zF*=GdH!J!2>Gy{OYghhWT;7b!o@0L6XhFR(W^m53z^it^duLS`OS0@44O#3nQ&1XV z6|TzGi4TU$2Fb?swiX6Dmu{oGnCK9vtEuhh$4E=Xjnr#}xI(G%ipueTk%Sy!dZ&c+ z_y`fMpy^4&bQi(HdP_-d8E*Xo?!PLOjq{O@6)H0%7k-u9l{23$l3P8BfZla*{eHsP zx8{YZ+bD}+QRA@KgQe+K{xHpWJ6H8a2c2EM#vpX&j00hlEv^|^c>XcmFnI0!q2uSD z9{B4<=jov%2*|0F2N(Y5cmH)y=MLSMlSJ1LKS2edL8t$${X5{G*{0LpH-@^?)h|9Fq$^SGF>m}I?Yh(C`4XlXL zlMCO@l+=FWyxc%8G7WOpuB>v{A%8j6rj6*2_I1^;V~MyVnCv;o95&<;nNc1h#Kl?R zr|JUL{)kXg@SiQuQ;wZMxbmOtPa;p9Nm7ChzmkdVECK01uHuLG8J7c>lHIPJ_UN5q z9qx%!w&adb@TY#M$gA)w;f>y`EOcYehVO6nC&Q36kvipSNp$CA55y)ZrQK13fWl4GRjMpo=A{~!5`P9%%*h-IWU6h&IqFThJu){s zO;KdArXW+hf4B?l%j)8)zOcsVM-??9*DRG|%#yBK^sA>}eFL|2!;Eu&PEO{l1j}uc z8&2@ZiD|>Q|K0GSCK&k-{ z9naTdQaSd$nX9CZs`>l8sTsxM8A*>EatbtslQ- zVg8F^BPG1J=+@OJtu$G~(HbvYl0?76NQF}=e?~xGV7<$DL&b6fg|94iH}$rQw`sL| zPT;z3Yl_1Hrr0H#Ln_AqZFL$vpXG;3Q!rh{li!#9H%Admk)jQs=YQuL*ZYwRR3pz0 zl-g*_sN5 z4)9)!?2=Ec3XLnfDGVJmr}5os3*C9~+KNLp-b=~ZIdjnjS$@ezjWHk-q#ETt(+I!w z6Mugsq0M*6^yUo#)xyRVos0_WI*2jwyqO>BihfWOEW`g<=l^++Z_Ghoo+RF~m}(Ed z?q#A@rzZ9)sB$xsee|~RJDWh!#wN|Y^BwV`=#p#J9iT*euNg_n_tR-Wn+;c2BQzEQ z7Mt3frhDR?1MMBojx;jvCvIO2YpC#BxGV%-1>r_e=^h6K$#1*6ScZwNU(A);2@RHe zn}5F|2Ua)9Jwn2BFL-aXhCzcCV(d zw~NYfYb>AZ;p_J!lNMHa`3Bcdu!*HTdT;Y%!NnkhI}nTEEexUWTMn=i@=uGLbLhi* zsApddk&95A+a0&f2>iA&5@s0emR1lf7tRfD?6b9n+bX;KILeQhX}^x{G!}j+~vlHb(MPmHma=(L~KgJu)S^JCdev0?B{xPAuUD{oCb>KhKT)5&C8#O`ZkV@u!V=k9+<1qsYei2R~(}8 z{ppp%Z7|jfEZG5GM!z43q6}AswGKDR*?b?|ZMS!A8=v^N?Llccu~+o?$LmYE`wKMc zBlZXNfh^Uti81jp{R1Vy>Ipr6!!_?zkKv{NyJ~YZ&fB=Q?Pu{^y43PIKAt{$Ccn7h zOLmOxQ#j4`h?587@~efngez;I$D&Kz^P#j9IxS)Q`e9K|7%6@8dd`YT<(Nd0=> z=PlO*M>Mve4;I^Z};ZWL7&~#58H&scb&% zm&nSVW$2$Jtm95c-6d)FBiUIl-*0zU_c~MPtTUkV^v!Ym9}1#_;(vm2?TxaD7_(z( zn3{a2p}LmUvL_xdO#7GF^9}P79$=Ah%5G_4Zcoc#ZQF~j;F1^1-a)p)^W~ng3hV2h z4&G{|S7+hWt!AyF;hsRJ!99d=qO&QsO;ny7%s@osQ4A)N6!(hh_nsXOwcaro|Jq_s z<9PAh{$DjWXQ!l=hKco~Z8R*ur#$K?gWyb1GUz&R#wek~b=HD6vpWNb1dmS;A>bD4Y+mB~Y zvns`-A;P%i$l`Kq`wpdyyv7WhFm7)<0;!|B8aw7sQP|veSZ;Wt&K>xkV(={XVEr*! zR)$c6*?KW433I%7cS#qARPC*ok1w#BBe%=T?SBmf2H;;dd9Sjt9elO;0$ZLwR=Hlm z;k?9=jHS%e$2GmiX9SE9>+D~qTt9dDClC!CJC3BY3qCvWn>=)RvYz%Xk}>&{1LgM3 zd?}Ka6ehlr?2+6)@_d(LM&%Pn&wD*e;#tyr+VxNuIm3(LuktzyB7Y=V|6Ap3SH z)*ncEV!8IEc}C5AY?zedhOM7|rk7fP}9o5*%h!{kE&4@?re#9yU)r z-M2lt!jXO9z8gjywye85zsd@$gs^Ogg{F*|t`^Z}%ng5V8Mc0!EKDl)1CX3@P5 z#@7~+c==<$9A?ChcjdS3nD&ZJZ?)E3BBmaX0gWcOgiDw=ZXzZ~3WXYHP-WaN{}upO z>pa|k_+P+t;{yFDtl;$Fuk(Kjp}+LhKa~&NA>9x;Ixl5E`G%&67^Nd#^S@4XRXAWo zMylMh=?k||_KG_M-Vu;8O&JEHYh~Y30th~OZQO66&_q>Hq;~O||L$s=CNqkT{_OOe zcf$A38GTngAv?A^!Qtl{!GRJS+~sk%_lvJbR29G|x~ZIT)m0qB0IQh~%HMhWT<@z3 z${KO63e=qOvE`2S+rJuR9`qA@vp#5%=YMNrqQKuZjrroaq-wK7fjInPRQ_aUx@UT* zEJ7fV)FpM@Z{3dL>Z2R!!ct>&Gi~M5If*Vx0~UYH0+@XPlq2-|B%mU0Nc+;8AxAer zUmuBJ5&D)T4(UlnQsKz(@{30i*PVu~WXIuq>w5Ss2X)HE($aLiws(e*#`@R8Y*Kx8 zSl4ET>lWYO$leMX{@gS5`u)JU*3-lLHf);>8eoZwj49r^;B}n%X8la~p7I}WH289O z=%>25+!U-4xipwt!S6dZ*uFp4aCwYP%6Y+(?h@NypVp1r(3fYiy+N0sy3cIuhw?C% zY?$7RWIhu%l4P5~mVB{yB4&!&2rt(m9wcH~ea9Lol0eoUI`YcO3;w`y_a0>4e=Zap zcSbXt(8&)&o*v#H>U&oLh;k)0t}ov89wCQdza$2&s0}**N7=W({Ee00;;Y?xkzXo5 z4H|$Ushhp_y&jX?;>%{o-cOh_JM|{ZL`+h!3Oj^F@CGhSNih4KTCFzAyboaE%^QN} z*m@5~YdKiSRV;rNRYY&4p_DFgz_A3y0n5!On9YOOk577o<&tx~n#G;kFmg(5^SyXm z8xH0OP+Y$6$pUKcQB|7J$&!w^7tts$fg|hRBV$LN9pfV8{t$WkdgkC>%4puuB5ohg#{|wUk*fIiRr+9tMTMTTbt~=!6QhbrO(1wo-r0i= z&etRP9`C!qYY}JpgxfOgzRX2vVxO1Fv*bsv{BaA~-uRUCM8BXXc4^TmQrdkT=aG@l|PjgY^UB8@>>3EyxH6F>4# zSL7d6Or!W~#^?3GXsg2L`dvu03RTJ2%*FL;RrcrbM*AyO>HE~pMvVco z#x4CF9|ZQGO`7ZA%fBMkFL(VzAI8PRBB5j*N%HTWHDcNIb;Ey zDB!wAWpj;}c^TfQ_=%nrQ6_$-uEPt00UY4 zdRW}~%?fUzxUqsyGx<4>8)>$SJ~Z+;ae5=^?Edcds%%@BcYhR(;flPWrVvLphR*s=eEa#?%q#oYTYh#hXJf1mnYWySVqC#9GB8FRytQk_}a?5HV4o7!0R4AJ2ftFz+TOXXU3Ys zGqn@i{MQ2GN4?F5@Q?+#L`gQVn{fj}-dm+jv`|gHSr*!3vO)ErHGlfyG~piFGm( z#lfl&)@?C=>J`=-Kc865HO|)veZHG)Pm)$R%fsYxk7LgbG`U7h`_wMBf z+{(Fv;aX_YmI{2rOXRfZNGy0M8@@r=c^2ph2Hs< zrXlFw{s3KidH>VvC5r*_Tue}iW*lll2kNl3<-drA@0SJXk3nTK23+>PVmH4&5D&t@ zC*xKvEXpRXL3wHyDr&{)20R@pOw}z$chO}OH=tiQ5s zxI%iOxQF@lKxh+r^xq8s1~>~8G3D|2^8a#r{zuZ^G67ZJwjcZ_^FL$m&fUeP?W&&d zx4*YJ+GWeWiS>vbbyIIO-;Lt*BjqG~D1TR4iOJzId!oVT>;?TsyfM!H!DFu=gwP=n{f*M8}BLt8}~LM z{lv{4(hpn%s@yzZ2c=Y}kxSlNM(%q^9cYyUvP!>lv`K2yMyhz=OqozbQ`&eCrOWXC zr~5x-)Hqg;AlCVYmPRV&`cpY0VaQ!Ey%kjLpt)50I!p;Y8J(@H3Nm@~a)_lm%|{Qk&>B&wJ}q zZ3{9VIrL&>=Rfpx(XSfK`DSsLZjSjce<+>4SXBy`&Zc~O2ghR%cj0i`jAKmPj?H0A zi1^Ew`}4FHQ$%*i3$|zYG+g@?SH2$h-XpUi)1=cUVu~uw16D(8iv$baWbm%}xpzro z2G{5Mm-_CCmbY>HUm1DOxHF&c4Wjw#IgzS~L#)ptB-8zgG7H1y`TkWvBjutc*MzFh zpvkz&Fjz%?QO!>$b#G+S1GJE^-hS@1mB6p}93k$q=2`=B@%H3IYqBhVrA7H8yS8HU z5-wH5xxcxC8GYT}#>haKeJewIgjo!mIA8zeqWTRZ|COd=qnOeiZh_*;=$XGw#?T9| z9=Nu-poylnOC)W0CHlHcFH@ri^NV@O*b)c}H9UHnT!Gvl-P~B+iFF#mn;Yc(JZ7A> z(-8(5#yqR5f#f73jvXsrFc#UlU{_!TC z0~h@sb6klOjvl?7&Nv+PBb6Mja4k!CvFx0{@@k$ z`;%S=qpY-tym)avg1Rh62_T&X;t9Rk3b53UuP~GMX2#d($}Wf_bqArdKYfJ1FsBG76rqry5i~DRdhB z(nY0GMCH~9yoJLhzYEp6EZrAt+?x3)i}Bi{L8(0}N93ydno!mPHWfijeyoN+=fo)B z#X8ZPHc8J62ur~ea&{s0Hn}u_YQusJXBp{jRikR%Y;@@9S?1sg+c(nnX;h72IxGG+ z!2I!%sj55$NA<{@a{RAi|0mjCGB|&wDqdeI6Q83G3RARkw~y|IL>WvujFDmFWQ(hF z!?uk-DBw|ZKa9@T_r{gZ-k|u@8RBT zr=x;g)tZa|6@xCSTf4(Ltk-*K-#5qxd;Q0$-FBrtB zmor;IiB3{TVWbV{@pELG@-A}FRu2v}>?LiX!nh%F4`s*Iqt02_ru*6qW=R63sQ3i*!ODY&j}AIj zj@r<(ig@DFg0I%BJ|GFMWxFlcZw{x*cqrj3b3f{4zev$XE5j=sho;ioWW9q7WjEJ% z=Z3^_#Y0aB?3ii~+s#Bpz-k>u>(^gDDA+=qH$Lc5i4}U3gDb+9Rfr9gt8{eEk(4pt zLzudK4wn^GW(2I=PCyl;$svXTds;5?ZNj~M;Hr)hG35aAE3Kzt!S54Cg#RXy>+JBo zmp{XtJp-Nk-rpV+>zB+nt@S24)G!icXTs9+Wz`~Pt^lH#G$(t-Lo+3QLM!sDF!q{+ zr^4@Y!F-g*EwoFa9wjqH0eEumrN~tic*EX?F(TbTfjWL^&p(^c|MRVoa&0EQo@(kd z70$0j`55@CuIB86VlxFt1k07aMh3qEpz4U@S4>O2_Bf=RO%krtZ9j586w<3CH|!ni z4aHjgU2@x(GMDkojr&2BTV4wT)frM-D2!`fns+kg{&?{MB_7Kdh>VM0ad5`8?f%_S zwT?`kAWmEPYD6A5)N=Q{5!l_ibkNw?;801hoMDT1Sz*&>#<;X^vVH}u|K#I$;z3H; z=UFzS|9|5(MEyJzd!pf)2Jq|h$Vi{Z#O}&#MS-!JJ-~_ZX zC%Qse&EDBx3q61Kiov6%8y#L4Q(L`UjT4#+A##vgTgO!k$bvR*^B?nS!dQs9i)uI^ zj!)3n9l`4ls+XLCLnnMereI=(!QS$pL;;L4CNXglN4KT$4(ay zHPU@`(VeihZJ=W1s_u3yR93?CO4;I~T2>QReTlwBc#^nnt4V0E%rGOJp2TB11UGWm z4blCbT{eS73c{!w2XzjYgeFwaf6D(dviG@-<(EO7PYESC1{cL9u0&x)d+}6~)SU~m zr2NwD2sZax+)lGaD4Du8(TTh};~?-b`+Ou!Hr7*d?%ZX+GfS!Z_to3%y`6t+6x*3(Rj~`I#S)%W zf#lb}%T@Yk*0)g$FJg!7Myb_r`z=oiRe7{=A*_7$K4 zQ7fC!%A&9?lXmT2`!#t|Hq-; zyNZ{A5yg1;uLajGdayp>H(F#};d794_A&O`$=l9{$$zP%o=;<${qb*$a`R?VwyRn&HXQf=vnIVQ`jHjXTg`b ztQ`SvMxCXRjz3hmD&EwQf4E|f;=Y#$Pu06WW~{68qTtwHFXj(ADscQ@upAw#Q}(}f z=|6rH7(IlVh}my>PGvWCcXyA|J#q9P^lKF%D^h7>V+2rfFl{;gjYCmBTdGvpsH}Zs z%-=<76vPk<&d2rSZ(5wCbArwdR(s@irO9Db#Uz5IKFu*CL*!`vMj>}1cuLMFcS>UT zsIWHbpsExId>%u10{{&|^`JrPEU;*PA#$|DrYl*8po(HB)RQW(9}C*s8R`&iTpS<) zE4tSD^5yIgFCTM4CI#HHiiM2MoGi2BUW(_rJgnZr06io#^^zC6VQ;4T5PE#5!YPIR z-unFSj>5Ynf>`t;SM>}bV)kb(nmuMIH6Gw0;F)cp1#EO|fMOMn>E#p;WG?`aa*?0c z+@`*3Ec8VOMT`;nZZM3l^BX%AE8SL9$#T*^a$C6#2fU|>atBNe+6$KvEIzCsnlO!1 zHv_RV%n#JAo$JpFlZR#!db7ifoy#V=0iU** z=}1JxRyvIgKrQcmRmB%5KK!hz+>`}Y=~!Ta$A>`52Flly*XsAD2Tnlg)5yb%I+j+Q zBm83})*WZ_b+grSf8gr10O4+D5xOSnHGhB8+83~Q!7$?wujhlv31YVn_5 zq&LbYa)1;L@EET+E|_y4d2s)2r#W)(w1?vsbAvQ(Gi-g-Z9CX22VUrN57 z*OW$!59xv>c$#fwWKIFMsm7V|C}u--dTE&RXifF<^4=z;>0HjCh|yXEqIf);p?*xS?)UylYe156 zF)l$z4p;6}KX1^6uYNy6@@F+v{7W02N(3-d_3qvAXQzcgF!Y^!IAFY_9h8;nO?jb> z#!{g>%Xu$tYm<)tyEi>H9KNW0tNTlk_G6O!e#Gwi7OJC6cu2%9C zV9X1?2l5u3@5G2CZN=^HAgN)iIHxMIv$3?$kUOXp#>j<@wxiCL^QZfK6RDnl{n__n zv6)juiJicJnEUjt%@S&G9gigYPX1~HyaQ#5#uH6`u@iI)D4>3-=-G#H4Rm zBF3*6d_FG`c(o_%R#>n!By@`zdp-0elyaO=)evgiiy>F3U9IA620%X4bPUFstl7T} zHf@yVMMl~k0oeAKX40a3*ZDyDTRRLo>T<)ZvO?3Nu#LMER!&It*34FB)HmgbH9G;T zEW6vT0^IL=V$=Y5t-?aJB>?rap)8ha57zZ6%FMlwS8~f(K{6pnMe(a=ITp@Vikna`ZCRlO}& zJP*GQW(x`c1l`#e5<*bx0A1R;(iqj|b#nb~hfBjY-?}8-2PjXtEv?49w#+l<7i8N` zvo$$HINu5c-K+U5Z?T@X!f&>P!TECzM|g#6Y(Q`&;n)D2v8vCyuH2fL_`F@USZ=Pf z9;>V8(?n~W=XO_=+YB$f0~zT6onOQ5+Fc>ziUNP>Elzz6hq=BSk#E_!e0%Gl_6uRp z6Id3EvQD_~?Dj-gDSBs1$E6E}M}hUUp^th0ApfBu@BkMK5G^YE&sa(WoI z-v|0M!6&)Qbsq=On?tr4)$ih7H1au^A-jH&Zeq58mnT#vVv4ZNW!84ZM@x;lBCGE! zV?<$Y9Ut$~O3iPt$9ul!6$dsCL|nLhFMnBz*SvY2k^l_Ik-&^k%QNKq@*oiu=IPGZ zeanr-A=Kwwv;8@*%m#Bd#egcx(9_4Lo$B_fmPpfrdvM&Nzv-gtO(4#6r6G=o4~6od zI!VMzEh)-TQoTbf#R{qoPJmS=6TW1}kK4<>*aCSTt@^J(CE^1pOdh{SgIE4<{&(lq zS2KHid*njmY4!-@#Y>l1K8{A7Bp$Jp9M&1tIm;O#DG!?5!^WV%%^BK?WMdyHu?*u1 z+M0AW8h!qUMgapK3p|{0sK^Pw`ClJ#hxpfCr>GTxuWC&a2T^U2Yd@BjkNT`Us&s^V zFAdM|9D`_V>D-YA!*Pj=AtRTVS}sFh=^WuX_gZItrjFF@VG;2Ndhr}KN#6HMZHb7x zzzuMKK>()Me3^TriHqw@s2qUd<Fj*KC%og%Y6CU&ju3wZwwLRv6zSsrFuMiRWpn z^Ce+D)RdWX`nBN-65+v`$=b?jIFc*MdlzWO>0hE-xt4T6F~DC+75SzKW5W*Bc;y4R zGOBR)WaSZ7D%JyC{W7uj^`*PmYo|{T30ShlxzHF-VWt>BCHtTJ`Y=fyeF*?5B?c`| z(x^O6*CJ9w$a=1^cDX9PeDSHe^|I$wX zAc;2)JPT$W6cQAia~X9syFY#oq^ktA&w%BG3C_K^N_UhdB!KKo1>>b>v?WGQ=6(nb zzQ}GEY7lTLTRoQBS%#V@Vc2pO+M|0*U8-!ZxY^-5gs4)>tR+<@*yp-2WLw*)0y~Mb zGX&;i**GLkg(HHO@It1AktU~|YxEAZjYqKxRgu7UzpyFhrkTs9-yev1@mMq>bPEKe z=OMu=jHru4eiSI*a7Evd;wQ^ zmnBYFsx-Ir1?wWp)Mql3=+WZpsi@AV0D~I!>AY8wx@{xrc{m5IDErXQOyGD{W@Ia{ zVQeF|2%HaHFUrWsEHZoqp2R@K_PGS^eGsNxQ*il${kZS1V^N4w4zq#aj^G*8z688! zIfi)L5=5-uG-G`k!C!Tzu1N5HUzHn9Bc;IuuayG43rbCQGfhfKL}y(EgCi&9)ICWH zTdO#6VSdpNxh8|SZWjfqGi+e~kj^t;QS*X0EEOUmckZ>WggV}jrzs6YuS4x|yv;?U zagY}j`G4@-y5ikViKOLujdQE_k6rgbj zZ!uqH?D(TK5#o2o0QMJwdR6%KRZRc4T-}0u&5JUaRjAlWU^uzK z<9i0{{VOTkKW-l5nr^5Zkk3|&zSe>OY_|O~d52@9bo3G5-zGfdR;B|k%1+`x;_R8v z5h(U{3MoCOD@Zi`N4A#U{c+>C6-F`Mzh1x}6Ja_>=#CSiO(Ea-{O8}dx^YV~b?~6lx9SOqXp`vDiiDd4GK?8RG%GD zy%da`Q*=)Q4hMu^fai=%@Xe#6AM(CNGZ6&>PzTh?CWXUJvQ6>ugCU|wir}w$e?*F; zLxOSQhH4XcsDDbTCWV`ebW>ue{&O5LTOEvEmR(16xeaN~F`9Sd90OJQWXb|ek zv9EmkYZidb%WD{B$|T|GWH(kc`V!FwGny`Y`Fn=w?f(e$AZxcC;BzFPc{9rNXp{BP}If%j&V z41nU!3P%vqGJjqt^TP=+E%HSD`4X+gM^rowmSY#*L~mKL?r=R*D;vkzmh-D1A~xJ? z7XI0-Gq-3%Ce*f93V+wbKOg=BEiymQFTPDk*r*H=M4_r)^6;wK2atd36LUqQ1@&?b zmdENXoz1Sk22tcj4lt{o{r0RkJ9fPfYKr%1Ir7y>%af3Ipze8- zW_!Dk5N3OVn-c~wq9sL|G;{j;^q^t-6In(`+Lm2xOnvt=yJmG?Fh=YFT(laJy0X+o zK*D~5A=BwamQA~%FFAq+r?p+%mT}!_a--E*_}p%$(IazVF=5V`_s^-Im>9T>_XEO1 zM{@2aezsc zi6*aSWXk?yIlp?_SyW4urFCyPzLH>}rqAdEVdDa@CV>f)t__rjO)hyBL|}g8C!3tV zbPPTLBiE3qUTV|zEj=+pZtmRnR-DblTWV5mYB6;ui2^nE!3Lj72(rHONwZfvq57j6 z0Mn6RI(lqd+|7hX^0!d@bap)IS2u96fnealG<#3-w|RVV)f7Z;LLGhAG&Y+dO~2F@ z9V1kgy{#=fcM%a^n(z_-l4<4p7a3BgxYO!X3({bgVJaPl4NX?=Z-WpC zDCoM)-)MX-sE*G`}+>JWIk$HhUQF2g@22I*fy+uqqi9MAc)Zgtk*OBZLtYJ z4k;eF<(enJ$xv|+sAU1gLyBNXqvALB79ob}6TB~-e~PI$ZOQ{Xbnma{qAhoUAez)3 z7qg7~t3v-jq_*=R|2;5@gj^`DnCp53`9#qc&AJ#wGJK4oR*Z^Uk65|vM=A>IK?8G6HfZ7s z4BRA+5@#h_EO&Jl)umbm-=N%P-s%qne-+yneiRYVu5=+&(qUlmLKx@iial2IfD%Dx zW}zx^m$5pXo{Q4B-}>fD6`FCe;AM_0OaqiJro+?BPLrof%Fj-R-hpNsmOpt*&*C&% z^BW9r6l*lV0#=?y?g%8@&$+`wa*HrP#Xmao{&TP#Z3oLzDO%Cl99jlOGi{ad=?!P) zZ2{>aq>j@Bj_cQhNmJ@y5^J+ALN43OhNcWxx-1VA3bf`VnkE0ZKgrN?dp%%9EX@E- zdh}hnO$n7dal8l(B%(_YEeamVDL!^ssK#QwnF)TM35W=T zPzcMl!Zk1xUP;r$fuqNAovUZg(rBbytOo~n8-%b}$%|{gFzhL?C-(ULN@vp%#CV`G z(>O2{HohKaszQ@FNt0=Rj=p}|pwS+q&rGl9EMdG6UY*d2Ua_8Y;x3we#}AQ#9Hh9! z>7m9{Gk94#_{{hGKM)dLOsP=)xUn#&>>^Rw3_wMh$y=?m@Q9z7Jr41#dO=10$uv8c zPSMMhcJDu>?~NZU?U$?0?6QS3Da_tidS@Tz^$u)k8g=UyY9tNuqT2RCc? zfJiob@`WaIGuMxUamnzUR}Wr>5wzxH5QBREDg^_YC%n)#{J$XKuZx`$hz6!pHWzyS z1?k)KaH*>7r>YABg{GaV&20yhCG4l1A$kIjKx~&Z#i^I4QCE$cAfQ<@C(t%ZKCC62HB>)fz5VFrj zW{EZ(k4UHn>AxH>bxo{z9=hU_9g0f8fL^Fmb^>1cW|KkGxU(i_m*6>vEg%J!K(s0a zBlgNiaQUh?ext>qT0jzQe$0}DWUMcbkE`C3fEvhvCu^qdX803ASinRP-k4?rU)M;L z7K0vL<@hw%VV{>as|ZHXJb)=Q(t}bq)lql$U#>?CQZIAoc-*%{rz?p3oK!x?YU27# z0r&w)-6a4mMgadlcb3#H(Yqgb;T)<@9-;$IqGAIVcSo}_(AkXv-QVLqODl(&Mn$Xk zQ-Bb>qugf}RyY=DAS7Kpr5oXFPY6KLNEML87SDJTVC1@!jG><|>lZDi^Vj5F0iL@; zY9g3b)4uspv|;O8=v!!X1U3vr#pAThxsv!t6kRJ}hTQXF-RaXYQOBpmG*;+$04R=C z>VJ}4$4C^ontLwkMFkG5aS+Exd-4DoTm1Sn&{SU&|?&r+RtTU{>OJCCOf z;RyMYxxYF33~V)M!Vn{731m0dPLM(bB0nu}k`>Z&^|5-zPGloV=?a%|Vo-V}>bOI# z_tKriqLi0^@_AJgTJjIS;m8dxr=vm#ynye+EU>9wT--Q@hD;%7dJj zuS5Sge*DR`o;?;i1;DZE(ay|swK9$phyzndQyPa$U2h8{SovTG1IP8jH-dUtb3+UP z7^UC{LtY||Hd5PSD*<)y@dRw%BLmQ@;ZWtWC_oNsI65Vu9y%wLv)yp5BKN04#39Or zF87ECyG3lZI5cJOPiG?#K-3;63It53T^x9!nIRhGhDX`K-JsqJ3dwUpMf@*iy0Qh9M41Kv&rU3b760q8WYP@9*LJi}_p!yW2 z?X?+^=zP@(X9?AzRI5lWVFA@VUCMQF*dsvtbl$J1%{f1x(-xx(XW;j*5D zM}W6{31O6N*UW44EX~Z4jd)_WUp9VI->LF3i=txIxri+8Akdo2c0s059mW#-^5pJw zo09>qeYg3marw9cyplXF(LCq`7jKK{SO7_r*8gc+1;5a?sIElDl(cF}jaq?L6zMC^ zvY-=iTN&>FsH<|y3J6n-z|63zib|WtLT}YngplKGXA%(ypz3D2m}P6#)#w-BR28RA zJ2V3BA_eA{lOyd2yYU~RfOiVp1QV+PRbB7Icpbe}g`g+;+Lv~ReD}fIn``<0X~K(c zUWGQObgyqINMZY$SmbT1{nOP!z}RdnQ(&iU*-&Kn zE1Cm_as7t!P3h5qLR5R&At%L^oDc7)!u>D31C-^Ao-5v(_R{vAOuN9<9O9*FhZutX ziAVydLxx}%)`!<5JtGcA{Gw7hdtf zbbq7B6;#3E**_Zq^bEkWmgyTMNkFULU_R5{0V;Y#^7?-zp}K$o-uX3YW&5v!{#O+X zyrxB=6^jMGE7twix|CMV9={c1+1&q=f}5DFvl5jU&3klm-pfz zGiW>xkjgECr@0(5?(Z4cB?QXu(D_1fIz3IX0J^FtZn$n$y)aLFEChKh@Olz=rskuj z?(tC8fGYKo%#?wETYT5Xda~7-Xfyk!2l(gRacJ0xcPyx z8>KeW>x$E;1F?^FdSmi}uY&0JxG&+IpiLGBPYCjo?&Jj+$Gy~B9h>-f-&7*tb9}d3 z40o$DpK1VKx0JUX%GA64@#!n`gtM8r4}mNAcF=DYf^W0O;a#-wXy?N-et>bl*pM1n zH(IugRj|RQ`#TR_jBpUFmSWeMcI=5(`!YqCZXa2NG7?GazQXmL%OuK+Y6oKB`d`TQ)rCmv16AlW=VpWY40`~2XRaj5>dxvGcd;x z5~f$nve0B~ua_T4Xf7bqj>((=w&l_9?z%^`dOz7=RGlKHEQ6*!X*D4*&$pb3qMG*T zy!r$*FsjXy;lXiXAE#PUx18xjd+gL{?5az9kIbiu2U==U7Gw$Pnop0*|=X0lG&s~g6t7TY2IuZCtaKb^sV%Ik8<<% zn^Nt9oTs8-c86320DWI}j?r6e3cCcg>NT(51iZV20tQhfp&wW1Vb`o)il1yX3UF0N zC0(=rS@l%K)vl42O&}b3+6oLy7i$)ZI-nZ5I?8Pyft8Uoo1_@%m-{s?Ce-8w1IMiM zj^2%1Be<}Q?c5Y+_l%<<9ENH6idESh%q)*15VQ#b=TQ%QH$#dl{+-e-nvv|aG%RVA zZ^^RY;|xaXw>vZ7@c#L|l3&}*oDoC;;%S-KD9=T(=@qBMwi-i2O<&4^=nQQO#!w?! z1Ta3d(kc~Qzkv49;~`i{vaJL|U_?)R%^~AnH2@ZlAY~FOhC%3Pvo|Q|`>x;wY5!t> z?jtTdTvs1Gjb;;XRnUh9hI0ao^vj5IZI=Qjpg^UcHk3+~o#MTp>^$-HnX|WQHk8t{ z!xI+MsKlrEjipZa`mkn^?9rN-ZCsAQ5VJa`1wb7ma~?EPW14Kn3`gA<-R4cSHQi?| zxur6YckHMAKla`{oT|2a94{e5MdlJtrOc#~bPT6aA{1q&qDTmt2`7~(L(yn#kW_|D zAyZMP3?cKFGEZfmziV^Ov5$D4=ej=cAHUyqz5hJdd9?Sw*S+R@-D^mN0H-+=7(dQS zVsKiM0XcgRkr`5}WDY5Q|Jd@_%=Ae01bqpi8(S&@aWvQH)U7eO@nkMjWPhMuXU7&o}X z=k=M}bQzr!dHI!@<5C`(Z`ImM8K{IL%(w08<|!LV2;ft(YaG}{WP1D)q|TFn16A_l z-SoGVxX=0>b^dBv`O3Ul%r$0rA6>04&KFX0e%`q0g%+b__rn{A1>`KAm?=fx+hsb8p8Lk7@2uJy?vs${+-?=Zl(v0 z>=xVyMXoeIJRF2vJ0X|I?AK{T4Vrll%2t3PyRrr{FjKz2IF>_o{>qyxO@Cy^elkzM zwR^pF;iWhJJS{B)`*$kG_#eKg)42uBRjg0-TcDIy#2>G zKk_8H(Y3TY1PW=0>ffVysGK(fNtD)kub@o5sD$C*k;JJJFV(%)J9^jQLhR|1+EX^z zl>$%_qUa3p&RkQSzP zwKyR4X~tY|VV8h4fKp9EHQoblHc(GmFLk%Rag?1UzqSayUY%uF=SC>1MkT?paa?(0(YDIxUrbA>_eJM~Vs%3YHs({OWRUj)ZT zKb6toGV$`Um z|L#&+iqE7&2=l7G#FzEoie3~Nc!*lGQPo1uBjVdAu$PQr$7N4Igi0bdv(IbjkydO0 z#ORy!g}NqOE*nHujzLohgHQoTn&*}W zXX&Bm`MIU}m6p#OT9r|xpsZX}cJz01$d^Y$#bv+Zw~?(n7jeLUg|&AJG3JM47tLHY zmUEf$IPoIRkISljZK@8(rOm1^E~J;`smI6Xo92OW$3?M$jJ;%#!}<|T9w}#lxCtDd z=D_M+lfp5_{Z9DqbwXY`u=hH3rP<@3>Mbf7I<^*%yyu%ypCxnVyaOW)YFXJ9qB<(AlKMibdSq zUjH}mXE!Is(qwyd&HD!%{#G#jKM+!nE*GQ<8VTc@Hca3SHILjS^WCZ5At|E4>3&4k zBMXTOm5GiQza~YsJg@%1&JImTI&14&dW(3s+jgt#jF!Htc;;yM?s8R6?{E8)=@)WV zGQ9OzBb$FtddmN3*tYtk3BPlEdVf>%Nyc$&jKm>r2z2ykE{xYkhPj-(Y>`?7ong)~ zA5u=Vzn5kB&b8qz()Qq-@y-NnZ)*LT7#mBIOg>}Tv$0>DKl;kVTwl#4wNs<3@~iW7 zouQwSW3GPCOxoqR))m;a@oyDrdKbE?lAfAFU!QxTPB}#;WuMdRFz=kDypS@QmA6whICY7@k>+7-DiUZxvIkP^5<&4L zTQ=`|*PGU5_UC7TRbkG7Ird_??(VkYx_%`uA0PXtt#QhWtcI6{3;6)g2f~6I@dAd= zp@fZ3D`)F!y{b?0RxXx&jyP|D&rkEh9*j6Vw_TNS_Js^~Lh3?wTEx*1nU6A=qjx{r z?Jwr6&x@`JKCP(lwz)IeCv^Mg8vFA+POk^nwN_pMR%kq7pf<#=;KcoueufqJ z4*;dwgYnm#WEi_)0KzhPQpt-9x8ySBMQgOK?%Sr+y)xpOt@{Y#{A42z7iY3zWikcX z_hxC4uLx}H7*!C@w6^~}mt5?XUFO*2Btt)JMNOhynKftKH*3z|x@?OqXaA|L8*bI_ zgc=fRFG6kX2E8d0ozY>T$AypqGjk1!;;NBeFNpN*a?PdGNppyD=I7`vfMU{sp+-5E zbc9c%pI#Ul=4HcO%e> zX2JHe2sEWIzhFcg z(sA}(C@{BdOJs|z9^~UmgkB?8?@8HJ?MAvsjf{Ew-JdPNm4);xZpY!%7p$EEN~Gnc z`U51Q%f4QA{XV2oBeLJZipQ9}&dYuZo7r$WnlrTHUQ|;_N{692^dY8;b}RbIXI>S4 zy7v;G-i0YXCy8zcKyK*CS2?8bA$#n}8mMz@72@h;5y zyHcJ?L_UA6edLJu%^v==9Fnwod$_x`T+`1(M8oqalo*r#WnLnGFk(`eS26|sdjxTj9)L^F=q#CG&(_vQyPKsA_xcK;W)q zV0@tQ&@H3p-=LzsG`u_JVS-=y53C>zDbugH{$^gnF7TxoMh#1O#=1ED^~x)U*FyMR z!+op4^mx1tFcf$uhrTI2@QcIE52Bu6B=+{h=v+?w#yGFB<2Eqj1^AibZTgqbsZ_QH*1_4Uaezc z_dcXS(%^z*o!$QD<_f%!2s`fCu)RDqWGeWhb;+l?(pOm`E>@4%)(NaJwkv2nbOpO* zh9kif&AF=Ek(~KkE&2M35QXrdY9Q5*HN7T$$JNwCpj*pFJC^$Sa+QO}va_1^#p*y0 zmzzJf#vet0oJibM;N<{%>2rn5_&REPQ4{CKms5Ik9=s13k#(*V?AF<6rUQ(rTRF3* z3)?@gG;#m1C11mk-`s&h81fk!H9$12JKy;00#6of!6cBoBvia`3~>+FT1}>{h^x;+ z6rqWcf6palwZd6IR;S8#jxgT%W%%qfmi|=-{w5U3<4a|Ok{7kUt4_mTFQ|A%_d!xf zGPQhgQ)WfHtzys~XYUDz-$FNgu7^sd`L(QWFsUgr4mJ#uv`GFy)BDxcA-Voip5@!Z z3t0}0;21F{$0FX6#A`e6iS_S8bi?d~F$~BNY5As` z*p7}4(X^+x@7+76pr8;D>|alaP2itw%I*q$V$EB%=I>8n+<^0c#)>Hx>ti78!%bJw zd(}5#6$6WmG`*IS$Ll<>itJ)Z4fU~?Cbm0unp|+}tv>DW9>efHq`O$?dA=K1sj-V+ z*ORM;bcD?8-om8oX!0G+J{-@KZv_z?MU-cOCyEsd6*$H88Oq=ki_!(O176|_JEbK|#!LQr zh~?u5{D@W*M7RlX;5bUys>gbiFH{b8t7^)NuV2km^ZNpS?|ZJEJg6LxmTyzsZ&Fj)eFMeXts zofy)1=Qiqa;d|?s#o!urS@fwWZL#wdQH@P5n|I! zTK~N+Pft6{7@BgJR5G+1UZx%d-Cn8d5-p;rbFNL_CZ>Le>jP((xi$kzuLuqHE+x4Z zrVk}V@7nGdSi4eg{jT#SNEZR_N2C5C2Js(aGMi1`Irbk7-cQ5w67aL{m+>z$C55X4 z+WvTcX5ZgpLXX9(Cf|ztj~E(Q2AJBSoRjBt24Vp4`8mn~at<+;E8e20sp?9E%VHjmh0J3_FD* zQ{A`m)MgoWdAt^ZeK4TaW~`MytwPgc4g)x^wZH*q)@;GTs8lFBzlijk+GSXpgE)w% zoy)<;hM{wDo=T@eNA=zyPG&lhup8p+zMHy%PfW_cBR zD!}5Zh1X_(X3SRxYihSo+Lw%gEUSTa4z}!$WBnU0;)8)kcxn1x8UYE3@5hfH*EN&> z#ziWF_vfLQUd`%Me>*rhnCI0g~6F50Ke*0L>8Joa-Nghk>vnK z@S4S5C;ZL7k-~9(-M3HHD_mT8w%?lz>EJrpF#Q^7esa!>gm@r~wWe*hYbI_JXbq-g zhTLTOExZW8&>*PT16$KnUaqdFpkPH_P@_*XDtWx!_7Ie1>I>gF zOTst-JcJZ1`w=ku!`~Flf`M=&(c&Iw3OG$UHvOkG(?U>EBc>0uxtOt6x`th*;)8~u|nYYGiy-}kiR&$*FX$le@pwR zcp(J)%aMp5&g>+4#Bcr@j*L4=h8Nk-52pM|xOjHw{MoW+jS}%t27|XptxOkN_W-Qa z96XDO!$|9jO{QPTJ5#X$c|xv88vBsZgp7d$ci~+adY?r`zH9eAq^ae2v+jFUGn2R0t2e-+PW77zXcxxaJHmgqg^AAb%x*I_Ca) z6WX01Lp>u7qZEzO0&F)={+}sN z0SbTDVhW$}Xm-}=eX*Rt^m|E1ee~uqN}zW6C=pQqFKU+sT5_k<;S6e&#R)8j52j^o z|MHMsZ4oCb;utXbdFjsX9k8yyGvGW`(ukIfwQzf(NM3;EYz4UnMoSM^6aM}M`ldsc zqFaW5_p6i+A=w4ws&nprMnB+YhrkE3ng|1_mTTH(F+ie>sx)$T@N3CExpd%AHJFM{ zI%V_g#ZJWLaVIQ-wg^Oj3rM$jZ%2r}5`_KFvfBsI1YJf!g*ceY{I#eEBqaaWS!g44!%MDU ztyLB|k4LCwXYJh=OApMh$VcJqLn7xq4=}z3%BMs*xSlH&F8`wm=OxfQR|EOOlawvQ%&Ucc=?=&j%mq1PWB*v z5{zCz;|F0L;wmIwnSYK>hFrzu9wR7H{Ba1KxF5F;uRi)W}xuDh+eh%`?B9IU&??oq~K9$J19EUe2M zzYG8jSErkF8}6k}j`@?xGrB*I<5dMk5w&SSR)M9p+UbBd=V?lIVxI)@ms?c7Xt|YX z*15C&OZb;*?b@SHuO?}~J9=61t!=tZ{fkd`G;bw4M3j8X9lR!a^bGIwQyUJ{Bnm1$ zQ$1v`a;!^gs!=D;%DSh^x#)6{RG7TCXjPkZao@<8%pIZZM!LGFUsV!E-AR*IaI{pE zy@8e{N4DbT|48~*__2lg@Fq*XM`PC}?$mGiH9LnCe-`GY>ue3L{A(Jz1RIQ^YiYg^ z0xy1nv2+Qmq+?N|OL5`2<#;UB8LT&Y1=L8Qa&^qZ>=3xDI{O%F)dQKKP|fxD`Q~rC zW(Rt`$aD{z_#XCV&0p&}0zd_7l@0Kz7cnqWva{%facCO2lxed)UDDpeWzJ*3AHFmeJc912w}ZVZWc{_H&^o$f_~`VTT?h zi2g+y0*=I}?$FnHaX?wIZB_hPMYd$-{r19hf6X*xIyTK2sB7AX4H;*@kS ziCk@W>I(R}DlM#Zm*eSH)Kf3;K=bvhv~HqkjsgxBo=2fT-FtvJ%fGQDsM%p|j_BFt zcqcvTBrX)CW?v8g1lu!}c8O-j;7+ZB-}mrsC(w+;!VfgYnaR&mYT?^JyGL}qoJjk> z7-1W}7)W`7+^b#XHV10vBXZ^ocO`yR-`kDys;OdJqNlN;8Bu7w4qzCou6c-ls-6W%fApyH68l|FK~KxemBLJKF-_0hvUyI8d=`m=rZ{nsPG&9n z*y%5b@w}9jy}aVo2LZxx8(9B{NKXTamUUiBEEA3>#?D<< zQ%r|d0p2V7k1?S?PJ#`!1N>FMGq3c92sE>u@^#PVs>GvLMz5HU2u1@GPT|6%L2Qx_ zaHF=0+8BNwDeVW~6+Y93jU(IlLgVA4D2AAb;WdmA@J%V;75vMh3YC5ey8exR6k59pgRuSfRie^*ThZu(Ie za(FQqVZF|+@No;~N-;boA`!b;wxIck^b&dpXr(|}YF>g#@1TDCPp$oz)mmZVNkL*R z0Gez5f2-n9%tG4F|3nCdmH&y*e_4b`Yz9C6CpIV-;s0xv2Y(KH&@F;Kh+oFUmSX+$ z(bZRKh(}5?K8W|Ygn2}})F+sBbL`vwd}1|iT}NgV*P=eZDje6aCqiQy;N$*TU^^#$ zLdcwlU$B^#Z>asEZzCT3N92K9cZ_Km^G|^H7n8ngZZt9qT*7%tk2&R1>%DCfJF06g ze)m44nQ=ys!}OL-&nnKfFCJy%J7iAxYTKZnkLT$5g|^uf&IneU=kY-J zFkz{GtuinrYWT6e*c_j4uetYPWw>tUC~n0#L>jG76D33Qpb~7TxSdN0rI*kTn8KkX za@W%ee!LChjAA+OE(CZEGTddVVHqjrVVN<@2ag__ZKSD*>bqRxI6_I;XH#4X_X((d zs2&A^d=GvVgZ?9mBDf>q;vRo=U7My{9iTh9GS(c;8S`H{e7vdXp-y~S>&l*05{K@* z);LD_S&-4g{!ufwkb9h(djCw7!;LUD^nSn@e}y>X%KD9DFwHL?z8j$XsD<@fhTn{E zp~O;9_EAyx47ySazKG54_BC&=Wl%O=E^S5I5Y?wwB1N|5RXEs*EPk?p=l-p5xOUx?qSeYk5Y?$l{KM@oYI8D}8}KH2YbyF#h@bLAFp+5BW`6)eI36qehr ze6(<><#b`W&k|zanO;1DCy)4^P+R;-{}-^{ft62%Dd=fv8mvUfXc6uUU+LU!D}y@z z&(jg)_6)ErOIOcM3Q9JJLA7Yla}F6X@RL*s2T2}E*zdW1^B7MroUZO|!8jOex#*L{ zHt~1hj4e=|9jLg3v>ZX=J6HFsZO6YvPUAHPhW0Q1qyQ~Vjl%i$rW@m2@YP(k9~!)R zqJ5U+*eie|L8W7mN4V$?Fy_Fq=ZocSDNQ%R`fP?3ykzW0dWnUfalhS z9UA=kC-GN6Df6aG-rFeZQ+VF&Nb(9H>o}n7mG@lo5L&)M3@y9kQfI|Oz@Gl)oFgI+ z7;JGxy@z5}z@H-!xIm|Bnvy1w72vv;zha5iR^T}jcS!7TJRAv*!?tpcsJ$cFytwfD zu(nfFpBWjGKY(~-UdU2B^{=g3_y>wBc7oEn(QEl1;#M`Bzuvb~v5%8u)s$h&Mptce zIKycGSqJ&C9`igwLMifNKF+NG_*FQw%6oC}<{63d9&gDiU?Z!K*&zYSJT##Dv`b~V z7x14VU@bviym$#}E~l7(pu`qH)Z7fL)uA^6N|Bm#7xpad#+IJ|8i9kNusHdZxeVkx$U98%&1Z=YZdx zZBGOj#~MZzxjj1Z=(#>kAmVN-tc)ZVbP|4PuGoR!MoF{bKWV=Ik}C3lkUbe50=#pw zS=EsD&5^s{NZ}i3X&O30G6K-dsd^5eKN}iagZ?9musA8irWh)}ean!!ouH6Cp8d z!6OJQRh3DSfrs5`COx@5^#%dxlof@zL*%;5GMA@IoDK2dT;|Cv^3AzD{M%zh_(}?S zx|(&Sw+6%4%OiKP+7t=chVT(hg_Q3bmXl-*3j)2BeP7PZ~xLWXo4S7KP zNa#i!Mg#Vq`llwCobic>xW~`vVaM%ky|vrf8rnR97e-T~wdq+NU@DGg{t%N{y67RM zTm`su>RgQBQhb~UeE#HPh`f9DY0y%-bc;WCcrU>XJnkJH!m{-#HJEY?V#-(5f$=GS zk0U=L^&7&LEGWTW=|Jc-Pan#Z9LR6pc4W8c<@$q^W`go+5aDB*G=C$@WnpYaH>A_8FV2?y( zwpn z5b}j(fs>f{H6%lsO!vYutZw!gwgl0>BSa}o?exY)AzH*#*LzVRfPd``PTlg#-nFDi z)$p16W&YW#WY_<2z_CW|KSw6jm$C()5!Zi}+VRbJZ+J3l)ICX_3~~a=@Z2;sH66>- zHUn9~S8ST~6;Ti3uK?UElsz1a%K}Cf;cf};%nI6Pn}EOWD!f?SxBA6?V=q>1M}X(f z?Q=fxAIZqs7=flLuHW}2+D_t4k)v;gwCxf{U&`Zv)PNuAtkFEKwlc_*ZJ4Vb0FYY5sPu!+XsIM_@!!<1zkaC zw2%-$NyCDO*zOB_YcZCT0748k>Rr@h!Y6ShMQ0+UXF2Q=6&qbc2RPv3E_@68Z-2N< z53xD-m}x0yIsuEE2zi}J6L=V8*Xw$O`l3$`;xN~{b0r{1y619=`1EbQ=K( zjQRV8#{9)iST#*aI}9FZkI#P3_(5E+q09~iKY<1ABG{<@W_kkA7( zWV#6=Gk0u+U0SA)l%wPlF`xfZvPU}}JYw!}EFwdc+C)!rM+`^GrP7WSrwczF4J6~< ze@?Q4z0byD|D)!FdAs=Fc)+yJ1WtaHB&o^gTW`p;)uDwdVhiC#RyQ52-u<-l9 z=COS4*#?n3AWw__qEa6oN{COa%LOeQib+F`arkGHz|dZJY+--MGw&0tP?V+=L^6B! z<&@K*|A<1!VZ^C-It&SEdCG$cA27A~k8(|1iL#GpEJQnK)JY2QRZb@UeTm#I?jMolA(t;84++w87nfLc zIYkewnke~)ayf+*5|LO}HH=zpo}}$~+^U*~j~+_@{5f}cBzUSoOc%;EN__=a?0*1U^!7gr2jxz!R z@Z1m(?pT{{h=7d|I6#%hLCOVqk5%y555+Jf1pUJ?4WqgVu{Z1Q9j8@?6Q}YCzE@(4 z>ETWcAr_G&1CgHn6HapsL=Q)2EAjc&7%?TOz#~OH=}VoPX@r&GVEZFj`k*@w3CUaM zCP|Ql1NGxB^JwGDR3qa|t}QYSJt@m$CBt=|$)=UnJ77Gq*>Ge~mrTI@q-5sAvZGqF zIfJ+plxO;tceq4Ws}X~XmmUwn@S1BpQ|nL(8qn*%BAS)(7D9~y_!1_T5&pNMrjk%6~Gd5gHShsd#-^^~8rWHK9Uynk+OkrK; zo}}tZ==3n%ub4Hc`0KptT)u2LHJA|lqOcUHE+^NfB4~=u_B=8&2e{Skfj1-y>#~T< zi~5VlAQ$V`=zT%SCK~GSQ-FAw<>U)TwwTQEPPmzjN$Y$`|`^8abqn^HsRQ?!A!;;hAUo&PNLX}3HyvLz2?h(&W-V`Su<08Vxu>w zzcf@)&q5O3N>SJpl8~Iv7w~{5g*l6DCZywC<5X|XGdAXwf%-mI$ypJpGW3g1O++6E z`4LwuUg=24QX5J~%nBBJmzm!OH|Zz$)~x!@_ji!3n{&n9mnCJ#NCrnTb7K-(cg)iR z5*HiCitIl?kIWoq73tek17%_^&GZ|m2P&ZZsc0~CNpFT8<@894Lr9OLQLw`I+zaM-21L?jod_n9H(oGr0eEeK0eoO!d$9tH5|_yRvq+fyfyJLqY*|r zdLpBF_~*dDZ=igH$3}*^It^cPf-dgW0t_;Ps+w;t>NoOn3s|;6OK>_3eaEvY&>J%6 z>sO`WA{b%7+Aux**0VCB*H%j1ToJ82ZIB?uh;Yw=#Tbx4n=0#X7|E1OZ=w>*&zyQ#?6NhzRU-Dhj1zP(G;Wr) z%4k0*MrSZydjA8=z4o~}ryanDuFDRAc3v0WyJxiCrl;!7jmv=9+}os~VS02}Ei&-y z)n^}0$?MR>_3YluWH-sAv)dBef4K!bD(!*t)p#SSR?qgG^ga-ooY^Q91M``T+*)IS zKf)50;15gusNw)KGxJ93AGrpf6{>g}O$@J#c&DS|COfvd=?X$4yZ8CiYAFO46 zd#PN#efxHQNS_PeWQ*Lip+n`nhPyKMEk2Uh8^=N#3#QW$wRLdnZTc^fX0e$+VmV%X zp&Xe*(HE~FbOq)b-B*?Fcxkk0rJM=x9A$9#samOfl~h!Cn68Wz&rB9K`&@J}?8?1H zVXr^-S>rl%5*2x^o4S2+B5THZcgw9E@l6?iZj&w5#eFHVV+AVL!4M4T#nh1>t+yhQ2Cl6EPP;!Fv|qGp4Fe`6Ug`!Bi<1U3H>b8}>iFVhuQ zH->)S&Frqt?D1lkTR0o@T{~oBU?z(P`|Z%G!qEWX2J>p2V{FndnpKG!e`}P=o@?2ahf; z07wWD>IfuM>KPAfhX-Vb0GE(TJQkv0cYHSV1LqWd*BxK6Vqm}Znf#)QGs72+v!2Zi zmZ`jTmC73X&?Y;Q3XNgejocINQF zrf zz`9(Aj>%I!^aF6jK!Awj#c!tSl?FdRE5GP|*5t45Hpf*pSmmBsqnZzKL`DU$6k($BGcx8f{#l%~; ziMNPd{F2GM-@)}ayPH*kvm>FP0c7Deh5ZlCva+(%mX_O`$1?gZUmP8fn;Gbi4Z>rC zBrmSvneO+@>6>ckyQbpugV~ddDQoz-WQM@R_(rEDjznHVlrp-GXi=By5hABj z8hUFFYo8LwV}IY@HDB$9{tzOxH<@>9Hx>1~ZR9S37PV$iuT772MaoTe^!wVUZw|Kp zEYMtp?OXMG3?|`7zt(vx>e9L+OzN5Y#mikf&0EAA6^4_L?$zmk?#Als;zJ26%(lfc zF*_vX{l1yZq;)9+_HHBg%?vaB3^_OT2cPuAAdL-dFD`XN+`rxx^GjNns6XVX8B4)E!&(MC-irNK|~ysu99<2MUq)#g_baP`<%f{fZSL> zzlPh8Ml;MPJU^v0^W9+Tdv`1hi5Tw(J2g=+R6~}2*Zu@Fkm#A3CDI*0MM1?464J$~ zQ2Mf^B$Uj&vsUr8;a?P4M|cr>RDB|8TrP?AKEg(Ah<*$kFOU4Nqga~xWQ^`QZigm3 zGS%W5a^`~;$8s((45B#HFUvm*hJRT?2XRjrwl3p5E$KEOnPdL8zG8gKG}AGGyR$^% z6#*>pvB^nDu>P32t#CA^lrn(Zuc%jPxvA_7@}n700+yQ+}s1hNkd(g zp3p2=a`J2Oq*Cb`Z$fn$LdI|;PpA{?9I`~90{;ZgA}m{aHc(KmfxB`WzG?Z#;+8~; zEMNqD4iysnpZK9_I2d;^b2uq>HH=YGbI9RrV6;eSzD_mvL(Z)}@w}SD4==toW3H=y zjFouGvOu@$%JK2(sfh$*P)lMw$(0}34K|$N$S&XuGgF%5MsP=_n|Y=;f(LW4;EL6B zSJrgbjduo49TCk)yY@^uD3{kCda02V3bTzba%2Wq zud+*}uO;LEOThmjwT=Nx@IRwwFmT96DM#;R;5@U@)p=!gi;v8BiF+EFFB$^Cm(uR^ zuzP-PYeG%zhScXR+_Oh<7|6^oJ=)|^Emn){kO3OYYFW-6`D0y&UR8@t$iZmqSxGn9 zx&Ab?t>y~rJ2>ZRhjZYKLmjt*Bj$;S1&qK0^TRkkKE4J!nf#{lGll(l-Y2R)mL2OO zQCg=2a)Ec+AcYxypoo?ymUs^e21W5rD%2Vx1W+;0epFlDQ%&p(2!z#LUW zO5!C|xDdsNdFpl~U9JZ*kCgXZ#=Ndhi4t|`s_ma{-mG_?AeSMyl@Q;xD zsxhh(Su*U;Z=W9rwsU#@S?M1M_Hq@1&cj_QXWgdqr+M6vY#;uh?3%lL$w%}D+>}@S z?rU?6Hk*1ucI`8V1}8$OS1aI(-Al;}T(b<0-wsKl0y%-@^KMEwlB)L-s}q8j0F+OO zR|iTw+wMi#X>z^0&Z$!6gB=sUA}uVEe-v}QSJ$%Fv>BU9Tl-*shlG8Fhd^xIZeJ!L zCNp>(E?C8eLgowP|D~D<>6e16Uf2AhYUA|RCw@mo20xe@`W&EgIE5Z5Wo*i)m+9ggBSi?rGOn;8Xf9=>kdmkXv)I|(#n0M~CE0Q%l;d3HU*&P=GQMw|TcOzU( znU~(DzRJ1Q_Bw{yL;vr16CD#{q8ekO;T&`0b*UCcbDd%eQE$CKYMIBsYDX>sP`C!b z#G~+fLb;mJLNY?+x2{{-Ser5)+V%A*H2z_wC z-1~3uhW{-g=={uUF6bQiPW(H;KqRq2##AI+1LpRJkZ0_Nt0B7dv*S{}1f%9_M3){p z@iUbp`BImjUsBrIWVPGxP2so~L(}c{qrRX=@89?i8I1;q+KfR zjXm2Jt><_q4TAOBl}^ntt9ZIi_^ph;f34T% zT)W6ZFmUyhb1B+8t~~y9xSoHIkbzyUiJ|U;M7Bq(7SA&10qIU;{&RWZ_lUfGDit{B zo{;91k)YF9Ar+~O!7?dFs+4KZJwE`&-i$XMV@G-$*oWn&ZBm-*zBhlkbTabT1Hr#{ zdIuOgpnNwA;m(_v7ZJ75VUIGcWh%N??3vd49-n`S7eYjQ&CUF?P&l4)>Ph#>QDRZ)A}yRFWeqZi|S0i zvMyZMN3#)biz@Dw6IByvHtOE)kg5i_7h5^x=L2O6zx~kH5_kkFb^lZYK4Li|KP<0!BZIYk6JW18CdT2qvYonwR&3AoPJdzwhFq^kSz*RI%~X+nbg*Lk&3 z374mqgGj|tk=SR!4?@C?bIOeT)?S8$i7@c{e#cu5uY2XB>Gc$phpH>y*{+X%q?m?kn3p)P*J zWTv=bN;73BChr4iaz;_tkK^1Ynl<4yb;VO%J_cXcrx6%QL{bKZ{3hIWd+$9r>ZcYXT}ms+3pN&n20S zQH*pqu=iF^C7C_-vuKE$T-`Gtp(WDH|20@PBl)Lr+lp{!_>{r>6biHmw}sAVVJ5I*{+#4YEznO{6LcSD>$ zZpmu!DB}VL7vD*5mht$HJO2QldEcoYI)S((EUxO%ebI>0I1ZlCTNpU+F&8VI3%AIO1S5u~8&pLBi z%KPLN_|OqS#Beu<)*H~X2fy2+>rm8r$L{f8iL*Ev#Bv)Jr4cUYJNbw{*msA;e6VoR z4GS4O^N_~_Ln{OZHqHATP{BF>o9bNxAv_$jtj_<`GZC7$Eu%;o)Zn zade0-J_8SI;SMcbfN1<@`mYQ%>nv`alVOlJB-r?ln)rb2Qm&Tj8iYF@1PBtJT)+dk zhrqIdj!pxn?1Yv{_@7jnzemfOpJTac!0qFR;lS<~b7Gx88xZ9Ag$JlRRBar77|I=L zI30}@j4X+AHOHq>PW;MNooi`2oK!rAE2;j z;`S|tto zx=AUKLsaR2pCdQ|HZ9<1{2h8wq+`qO67TvCBbmEDRvhOhZU-lV_|w+ik5En%(KO92 zcny#)5QuHefr`DZ3-*AHuaKtFqWl+;{xCn_NlXA9e69aR6p|GFV9Se0oRP!|r;OTf z7f4yk|GBRa_z7nK|AISJp;%-6^OJCtN6h~5TMDz8eP~P+5PbQBHIzMpX8xavG=#jC zezNid{1L!uRQYa+rBX@nAgQE3HTMV|X;L<}Xn-Iw4ziu?_uL&IVT)+In^f_aRf?`& zR*~HRkt&@=#>AF;B!moV6SF;E-C8WU3Fiu5{gaTigGdA7SBZF^%@Su#qy0zfUY(5= zzOtCj6y|Myd6(3CNmX*8Lu322M2xf`ejo4;%ZF~pCAeGl0`L>-`mF2_y47kzlr(`* z7O5=o>Dl20&jS_rl6QwPUn=9%Mjk$4zoBQzklF_18swUV=RdBwkyuxDa4syN@Zv}W z3Hgk>)7+c5Brbl9$4^$ zP;Rf=G!0cxxpq)0yF__(_BZmh`?WSCIieKYOejfzzG$+iB9b+?Q%q&v$6sLj6_Fe> zn*^gq;Pq}3mP78igP;J^ZQ^POmm(yf?}-pHx_UsBS10Zwedw?*!r%QpDEqKGf)P;ch5roR01c<4U5s-JS<}EHTn^a0#8{}OTvIX%~z9gs) zYtNrEKMwzW&dk0I`$*xM#}w*gi2Koi2pyZKr5ma7<3>o?i}@>M4|A1JYqt(Xr`y^gMAPjzaJXf`q91AQ11xPW<{Zyf)%`kasL4)7o@Mx;VdmrYCJ( zL1kqx;A`=U*5k}oBR`c+mcC^5IeUNCT=iy;R5^#%aKpTS0oE*$fCeJrs~Ww+zUVMYNVUo2KbR0)G^IsK*NTnQEy8@3@+HdAF}Kc< zmSAGZ7jkGru1G#OBM#E3$|EFc#PlQ8-4^Kj0W!%W1Xk$l44Md1jHB7xusXqljldkPwKSh=zdjZ^0lppG z)1$C4!kOm}hQw)eKm4C&*Tsc6d_6;9-J6%fYHC<=HURZ!L3jB z-(LQV{r0BtC*>D=3hk|#w?6#D8}O&`!ke$b3B{sW_H8k`h0^(6AL-3=o_!9HkFSj8 z>kJc@n8@ZDQu1Z!${VB^K{aST43^BE=~{>a>TfvmzVI}lRO}~T)KT`19uu#oqo5gu zGBB*{v8`+iyIs2*&>!7t)bIsDNtX=uxf{%ywZZ?;k;8q=I}i1fbz*k=R+jA^n+7tpB~Bf`aew6aAO6y{R9;e zLl3=^8_*52(+@%BTC4ySJ9em5QhQEL9N&wL*#Gk5OR*3XdT`lUl)hrx7(pYxT_PuX zrH|)I^Y7B@K#hKIuZ7jDu;R>^`4;92elhkV>wklis60RKf|HE6Y(7eW&};jf!wa`C zc?6Su8e!)X)zzy|(5jI5d7a)D{kNe%N8_fM3qR(dFwBbx3+?0lMTZy=o?{GwXIyP$ z5&WEqXQgE9hnpXJmnTXKhByGnWidU-xRm&!B;dF^!p*u87=$7_Tx{^>$yn z#>XgLamSsa%iUs@$0&G)n>Wh3jaF%!-F#E|CRRkk53bWBA00qO9#;`W!tYk9;jxOX z#es6M2H<jz`|r9(wc%X3_rIlxjJBs~6I_#12nwjW%@o6t<_k@txXmUp@B)F}E75 z^KUV{UTri}=5HM-=gzAvBIoZskKQv@N!^md35ilPhwT5_`;E6amk)Ng3K~{NZH?I9 z;5SkyO*XP6Q-Conj>|BTm0fJ4@MwbR{0FiS?IZR%e=C|r$pxX`6p`38X)B%JNDBJ~ zq4k@LRc6lV)Wz&)xAnjE%5Gv-SI?Nj zEWa&nGZ|Ka-*D-a$_74x)mZtwF0Gc0`|Lw+_<5ojqF)N1(YoBar{ujuES4Zz4aEZ( zG}mu}B9DOf-{f=i$QQ~5g#g?)b~r4Tu5R6Sr#hgJyj6Z7xywpMS7>Sw5F*_o#csL06+|&~&!Tx9JCT*8`@vv1S9X?2=_=tr ze*9{9%YSli$c(!mEoetWDnn$75y=*j{~8TP?4IUM4MpYG*&$~lKIeCD;nX`~XI^_a zQ}0cQU0603n1Ob4c2%7yy{HEVHdOKTRhnX+@)gs*$aq&HjK^*uj0ts-&o)i+9^c2k znkbz8?D*LGN~{3|EIoEW9~-AEo5K=rr%&+^!NCQCa`Iwk51FOa4*@udNjE#JntLDa zVC{GRr=e0!7Vt!!Nca2SGF&MGFb4Qbqg#C`wr+YrOCd;fe_;Lez=**exrv+OY2W0Y zXNSDf5dD(z&VI-N7|klEsmE>l-p_)tJ5A3N!W?{S-_G0?x-X{ivi$szEYC$|d4@Z` zH;dfa;(WubD%27Zg8Le7%ZVB=ogFV%Q^D5f5vV+_|1-k*TkjB*THFl}$Mi7Ww;T8r zc1PIJTH*GOhbhuqNBZgmI3;7gC`OgGJMvt#(o->$<__B*^6i4gjK9q~{kuj5ck<3p zS@mqFcm1AmlfCHkj$+x!;$voy_*}XxPgC~pyil(-zIp>!57T$&A4MTEyk|e(e=?}n z*Qdx{+>wTL&N?939~~t5bBz7?o}MSYG6P=|X#a%z`eb$PZ&EgkX!o2YJnjd*rZAg$ zP~rIf(wv+eX1BesNwRz+(*1Ypq07m%^z=8|_@zk`l_;OPuT3%RWMBVaS@(K`CfU&x z6^}iJMnU1;efWNsW)ufNB$f&6tUW;b+`J1h_Y1QYtd_!o$*Z9?Wzc=4Q{wJfdgBgr z&Fd<6sE^hjs4h*DP>fLf;xz7*;ip~jLCT=h@AnEieX|r z>q`ZLFZ>0;5}rNU15S5;e&)$id@fvlw)EB(<#pKPNmb=3J0QlIK*B>>RIvEGH`f+WNXOOSrzASQSS4Y)l_wpCDRcxDD zge{G~wAyaBwlq*!AFR&i`cC9XzK@l`wMJpRw_i@5?`)_#z2c{8u1a#3;McaCLn6-( z)>`a&(LSCeRQgQWG1Yp^KInXruH%sOa7)ywK(D9N1^4=GlP|Nlyt|ri_!1*hV|$b7 z33JWU=*e`qw=Q+bK}LnQ)yD143*>EPP*mC|ywa^&?D9Jov)aD4uxkZ_1y2XZzdNe7 z?Mq6Dk(XiSWN^-&80q`+HOlbpx4L!Kow+m9_xjSu=oS5@_eYFk&vKqcw*uE#rE|Lql|oRA-9D(_Io=626X^ zK6!1BpcLjf#QjP=I(eu0_hVr}v`<$S)SS3!o+Nzo<*h+lPJz@vt$tlPdy1xL>%4ZX zW0+H4{w5SI>%_jbKja{27$!}3%zH}ev%3jqYu2l$cv)wLOmFH>0nNtEXFN9-Q;w}E z>-U6}RW&llj$8$j{#PGtfbV^lO&jkucVvegDy%6maH|iztJr#^`ALLP!;uSt<~9~5 z3|8I^e5I}z|I1wRRPALcdhSUXrE}64a-lDjcl(B zvg7*x9y{DKSkQ7jbCh%Zcv#%pJv$FcunvDqGT%Hl5v!xzb_|a@y+2Q})TrRh3E#(I zcK2f=eJ)jNP*Fu?vwRPx>V2)fN5#p;%~-&Lo~D0_2_W!?;JtBC4sj5;Axy*~4O z#OW>-Ck4Nf$H^0dMu)F`et~&H^(y&*V~pF|iYNQdgH_`#Ym5FiVwli)QA4=gxb%ct zUy#C%`!!dBq?=pJM4ozH|6Kk%>|kodzL)CZcdat-`u&lhcmXFSU7ypdUQSCIwLY=^ z1NyZ~F{mQ?&Tye=N2MUk7g_&&heK4n5tpSh){Ho&N2!Lha*ph|YMXl1^$HwLq?dF1 zZJMQM)86H;z6*AKad;`?GFsxXV+Sjd)=k`a(9W{8DW3O^5&VMeV#IYHph%Db=E2-X zbkt9ZZL`y&+zk-BsqxEb$C9k_|5$qqs4BN_eOM3`P(e{Zq(n+uKpbGuMl3pA4)^ zLpgkprVV&C%Fiic`x!kY!s6AFG~6-4TR05ESh=3esMGesCmgnIYVY>;1tZtL-tz$& zYkSU3<0`7d-KFm^0kJ)mHn}uPVb9-ldxrnulU-Q!ScP-bfN%^$4c2aNS>ip0qVT+JMDUK>Vu;EmJtH zF2>1jRU~InX3jyhMpfd#%Rdy4)vDE>JGWIaq`4&`L}0;b!puJ?Ysji?KBRei1k)D+ zb2T-theRN(D)|I)*st*{C{PgHzP2;(^jg3*esOZ!vwJgm0ad~>&J^F4v4@(lt``S*97 z1kJ}Ph;-k)XCnUWJ!!oOE*`%wQ zv#jwqw3?-PfSK8kp`U~J+17lFT6|FNxH8>M(Xrb z_bd2|J00{uv|lG1{`5F4aAc*5Z@2%NzWi4JIC%&qimo@!*oFM+Vvb)owWun`4w~#) z&#@SdCcHM|G*P4trZv025a;GsMH$kB_70=0(4q0Zs#aH;aAC6JvLMXgmgSdwAGM~^ zNm_%nBicPO%A{1a{ODIZTNVkPOyM~rGizdDJr=F&EsZ*qiu@@qn~y??v+S8&oio zEA%^l`Ag9^nYSMugW8gOqvct;0$DAA(?Qi!nF>=vPJ0~7OO(FdC9Yx{`n_J)CP++e5mS*c!sqzJqAy2I?Anub zDLl*o-6zCSA~3am7#oA}hN*Bkb$LzpI9)LnRv6!HZsC9+wF1*dbBBX@!FcH=SdQ8K zHoMG-xi~xgibo)Gv_T%tccaVX+BuY29lFUL0E{=OuWO>#PI7Q>A*_9)-bY+-Zx4sw zZ1LR+=#72u%;5*O0{3R5y@#>QX_3fhfs}&;7>v*7$n%?V9!Y?lxt59omlwdgDiMeW zp}gh`&r8-`A{?{V24V-z{38v!u&_yRc+Scm&j+2#FJF*Haljp%@P8-ps&8OZQu@}6 znX8(EbV+Y&7*i%+g(mW`%LiwJc}!AE!+V!{oX)iXJYBX0mYosZSI6WYMT$zqybVnt z9S>t|uNjIp5Q-t<6MGo%$L$DJ^H7c@Dk6``=h3<6z~L?o5G$$*tTE!X0^%;u<>>q)AW zO^zCew}=kCZ=fwx7N$ymk3fro30`aFFq#Y~goV=v@zbhvq;^HISp_n0*X+IQvTY3~ zPUR|%U3-@vl#enxw9!j}|6Kpc;jS+#i_9~@z|xx&v=NeAIhk}_>bGh6-&arFDr0n- zC!JK$2Z$R0fWOME!7hoXBRxxjO=U%(9uf}z-cL(P9Ywj6? zYZCwNn9W=QT1>g~yk}@zobUwQzBy~_r&^&<2lFEb@!wrh8M%S`zi`ucp1DMj>#pWx z_oNx%_*8$j_Vcqz4~n`ug1)$t8QvK}fFCtC$Q@TjK_SC2_4r#Gsa5hUx%hT*i|DTD zE?1U{4BAoI$c`0A0cP-J`6;9iI4R_c^g>^%U0Hd=J+r6s+f=&2!mmEn4>v_~;4m#L z&62bqxL`m6wHZ#;yf<1bIRt?OfW|N}N|&uJo~t1P%bqLmw++Fz8dC7UqTjb4j^XS}fz^zw6Dpjhtrs5UFNob8+>5Gg z3SIu_gp))8xNLNX!w&0>UCq*@T!*A579;Y2w~(qRF-uako%|BF@vX3n_2wu=>?~%v z<4ge*7%H~$r;F}W@(5lTNVAKyG%hJTHr@JyiOLSeqtb5Q;3Inq)-jhXcq}I@< zFIR(YAdKLY?RjMRRarIvMZnfVpW1|qE=-wsyaj*i$2!WW@>Yj6{#HVi%VcKl{IKC?ByyL#LcgdjXOF9$HVm3lb=69{f5KF5>TON4qOF_-30=-N z;QD~Ko55seY$Jt|1+iuJTPuCM;dD_n4x8BF$&0qE>W2X|6QYIaR0~em6)eI$`QJB# z`foK%u)uN1nL@oJSS+qofE#zrwJVy9Xy*M)AB?(@T=;d0S%S@0sHE6eKMKocE~&PA z?Ob&&dlR0`v*j*_gsl^AL=!7Dj zH(Iw~(d8R$02m5ZdV_tvIEmBm_c_t)#;8Lu*x!vTsb`rq%h={O3SIq=<*7B;HLG4# zQS?@R9_)mnbPs(Vy1uuW?DXC={37@0Q*5H(oRlPqyfzgoldV5gV&Jv>8^TFAi1a~_yt6VQ@{pxirm z)pfZ@eqC$}6NKG=$X^{$G9ou1c7*TZFPdO+_eR#wsvLpWZ7fOSRiB>69!nBlwfCvq7dW>d?lFl-WWpV%LN@v~6|p!$(9r zSAcW7YJ+;TC5VfJ)Sn>QL3y;|aT#?N*REQq)Mrg}*u#!R`CvdJvU}ZU1!XMV`$Y7V zEpt9F@~?X{c!&JYj~#_p#;U1sG&&y9C5t3lloMN$*MKK{`4DR*dV5fWWK9^6^|Z9PL#%|(si;H368U~3N_<0~S_TNz4ViB3p3VkHKm zF3GGS^t+N-lBe`oo>x`Wkd?9(q%|94pRrR~`dmd%8L!PX{;CMCWA3FjHg`Bnz$i50l|Xikp=^!CD>c9Yg{ zjcgtVpjwt&uSbU$qqkXNl`%RBxka*Rm#tJ94NA9$l2-EZ%T0_lfy9w1Jh-yNiPWF=!t^Vqi&J z%$1e2TX>jn5>>{Jy!98N!=NAtD@0v*ar8`?)scnwq-uALFqmOR6b-Wwot@r%=`D)| zZev-A=}+qU-hExz6#3Y-Ic|Znmhg_nB&)@%Y@;cr-o_02JMZsFew~YtXRtXktcXLs zCH?GSM*8Pa144!1sSiHeT>?^XZ~r)D`j6*gU2eTgSHr|N-rVY?nEsZ2rzca^O7))a zf(bxLLsc3oOj#Lmr8nY8Zbp^lXK&}KGAHXN8XvG?@)T+HW4Ty#Y+UKdR@a3&_U|6f z_>Y2=gj^CY>^-T~;-ImseCDjCkWuAeyn}i*I;LlWm~4{0z=W0Jqy#+O1iY?j$A=A84e;Y9CamN4Z#HLP6urdC-^?ai^Pn z$#fPP>L#vaDP*Q~ab%>sY4Sssar(qt4UjcTAVVSEogJ!Mr_$=ep#xIXrITvz@06Xc zXH4A1C4U0QS`{#-SZ2Eszjyd$g%-O^_)R)RbOtmLyOcE+heOJf0TrxfzmRdBmc?aj z0&;e`zVRBG2P36l(zsxD!jCbK0gKFZktpV>4eYilrc;C%P`~Su^iF@0EvsR>y7z2C zH0HN{D@@^8x#fx<4W8hYysQyNsUCg%r%m_M^P*KS-?t6*)($lRPECPzZOVM4kdh}= zrg-?k&=7Duj$M^)r&HE;5S+5nd#R5$OJ<(tx4OejNGDd%cV9llfQj~sF? z0w+7OFoCCpFpOa1@=dHDY}w=iCxv*?3{C>9WMi2eC5aIi{p6_biF;IFwHG2gvlrU! zGEeL@HbI8n96(UwKT^hjZ69zsBP#w@(-LuWXl~Az?Q%3LAIgi=>a&mJ>UWYU7y1ZI ze|Vk1TPoLnJ6QC0?r}X<2LGglb=V}q88G`IP`5W@71B!b^XJce2QRL3&+aaX3gw12 znOz(Uh3FUcKAyT_ux!z2a0{@5GD8XVCU`Q440`A65VL!tqXE44pyZd zbLl{FOKR1ce&<8aXCvJF8*zFgfvDURVXIG7)0*f~&0BjVQ}f0MS<`ZzS&fp=D(Mk5 z{XUt5(*>C?-xti6t|yyHp$Y2Ir>d}))#juu5-g@DR1_LQ?T_B6wwmRReEjOOSj=ON zHrShvVUa^x*!0X+?w1NKW{V>Vm&%e*P|juH2;t%rm}j>Pm2<5PSUyOif2}`?T!@CL zTseb1V)InM=XWuF!>c}VOj@~`SK`2@XRHAKkT!@-7af+Tf&Zn#$Sky&as==`$;KUy zXuE7hX;XO;hwBP7G346S?9WjGrA?MuwLXSYoV>UxaF{mW0PB;%TgP(qXx1kZ@o?G zG@R8i*k7F(VQ_qr_OVU=17Ik60>2p4E^snBEZvHHY^-(HH^=2F0HT$m8`F}kqnloV znF;qj*zuj5DHj5})nY6TU&_6ZUX`HH1645TH@Py^IX7?^#eKMN%r@UVg(z;=)YOS; zLXLNmWX9@Ef~WjkrlURD-@X%=>31{t+PL@i*i`Dc2u$_9JgUk*$VXA%*Du-ITR)SS ztlT}z3+ZC+0Q)dHwGW<49$&B?bM2;eacOI7zpKXkeI9aPfqJZ?v&0DMl8E{?-!uc{BK42G>l z^}>W#Oi1JoHxK0Zx4+Y|na(838BGK4E!-rgJjGds+QI5b!fSrAS*rIfl%GMrlU6u{ z)VJ53`M8QqFc7b=ORxQdY)_In_S7cWeFIKq_Q!r4yUrr5dn#D1Va&Bj_P>==yN+M( z2Ol}WqLL&+m_&Z~7jW+^60s6EDEW|7hqHc~ZdH6FGAHKeEAkm_U0G6%b7i8EoZQX# zE@l$ASv0-_%zt#4i~qf0!k9Pe9_#J>%&MRb{?_9ITr?v3^|52O6Bt!9abQdG^;wce zs$Ai4Q`Rk~I{8g6N#|XRF)MUJuF&hVU2}yy&8yg?CIQhKj-6`38(-yCK6Vo80{PNy z1F}=u!2=CM=Y3iYQ;t&&!6ihlM?Bv@qhtA#o+f_oJPCkn4tcR9262fByYiIqcpTUfV(AH2$R0}-(ynXbpB1c#d8Vuo(KCW zv2j_-o#y<@e?~d0qf06&DSbAJgTV(4eQZ9IAPvY_!z)QGrE6c!}lesn4}fy`%}w*{R5*JiGYs^x7KerLa57j9r2# z+%+a>V`M+fg5&qPh%0-m$2Dr40|9>^`QLtXw}40$T$}g(l%V2@c?S}vc_4wqM9AwO z;heI>9!QwTsHiB`=X>5hJFv$OCp3A$%j>_thHu7QP`jDx6P zL-iqeEsp0G_?Qrum2ZEfk>?Qf>|%GG2T&J`t?&PUtC)C&*o)$~$Y`bjF zaKwY4D}Sk#1X288KQojElQO_Kw_fUAbbIN)CZBpP5-DjaXVO9Bv0f}X^ zSREtO@pClVc5~o(XoNnMyt}W^6ZUn%^@}! z#sdc8D%+LA3y&HNB6DLs-1@-%w*X1or*8@k+=B;N@Bb+<10oRra1ZD!r9#}!WBB*E zwMGl41V!yAUkF}V`F{FG_**}AMW{Dr68-zGp$CJxLwp+_{>oS&)r%poo02}YEdnqe zAL7$#{xc=+*w@o)(O0@BLPRgnrZW^I;%MWhegO^EzsU_BxFhXd*}O!_qzX@0;G@R! z<(K<`1_VsEE=;)`Oh@z$_{0Bq{30|NF!BNi(kNI`@=T&#yL@UEs~D5l?Z)NN70wl% zvDlC$bKObbS&Kg~@p|!R^>?5dC4f)KC=f*ju-o9^LT~cmJJR0j$^X?}k?+;2nZtL_ zs1sI`$oU$9><$8TIQ@nXw};+dPy!FuxPdcaxd|WL%3WZ+F%^Dr-Q%qnV3^UO`V#{fx_kP8#)_3Mr2H7%fDf~r~pm;aA$U@N&U=Jz&b>kc84@R=UMoblai zU8%(hF<`a^0yCvPW6RXsn~0wVtRh5lBnf|#7^jpX8J{8o$&~)}B*|NI02!3%`UKC$GD({s^v9zsD0wq16aMN7!xeW}f6O{d9A*s;k_W&vJ zoX1e))MnL?*Yw!~uAVQznvnYgUJ1nWhm+8@kob4MH-Ug$^uAE@-1PsMgmKUT%bV>O zV6(v2r zf*KVOO6_kMEOf4Rez{s7ci9eO19lr%)MABiGJsjprx?x`AqB&uy*_(C0hjYVAyvcN z^IhOB3y=7?7m4O21afFwQ2*<;KpsW;-+Y@-K^_kQYo(^XB>2#>nNr+1qL+mIVW((R z(fsJ;WxYNxXE%G(Zu6+Ob@3qmvz|tknZpCTM$&!O zEbzb)95y&|(xS<1AvA1_qr-o=_LC1PWq}0$ern!_b8RCBq-|tVG`-A!ynjen{&K3K zDtZMI1r5!XO+gLO4q(dEW+w{y`}D_H#=74jAz3k1#LWENE~s?u7xtlh9;$N2oE(Qh zCY(AeH%q!{C{mk~y=4WoM&-_2HQSa?KNmoomIFvGgDGu>AC2h%n#$OEd4VvPwlOo9 zT6u$Im75kl?LN-zlDZ-@H!((beds|2 z$Gpv|tM*oEa@q-J8OYRxBR7&+IA`ZO0h~~Y-amCzmb7))%Pcq-W|9cGY~*t@uKN!j zyyn`i7np{%=U4uTDCfV~L)k^wr%E#c&6}eRmCucEm>Z~pj>YJcVVsi&r9w8T3k@;p zjBk2^eR^IX(dCNvK&KM8=yX>$)j>I9Ad6hxQ8oIi(`bbQpTLa;;!icI6qJ_DFZ8M8 zLO^O4%xZ!*QjA8k(30!p`k^q@t#?qPJz6~0VMiHAZ{{~*_x=o8$gIhZ9HH`-JxRlLCs-vBq#IxCrA*)6HgG| zI1SWk1qSkGHKh`C zSEGauf=UApxj)wnP5M2g~ALfMB@jDY<) zq`%xalPKytgf!gBb;K!RHwGdF(-G$LYxKf35{+&!TH?&oTQsoIW{1n$%Z0 zldMxbEVDgUYCTZ~>XGxuBTVTOluN1Fy(NG!`1Huh2o!zL7>q#~rZ26x#rEV!cO!$X zQktnsX`8KhO#LpUd<2&^vFU2&$8o}@#)T?Z)|W}kE*VXZP~9Q#r6`43QD|dD-=R^b zpRi1ll9AC!da3hpX0_>fp1>=w>EL2j*LN#rBnO;;6R$?1KJ%S4T3+%QU5!u9ZSj(a zAfmItFOt)o1Z;0FOEBfiK0~LkzY`ScwW5HAB*X`*lZat!oUTDQ*=*!&- zK92wwccCyWuphsHpOR#3$R4<;Abe<09Nn4NnQ(jM?g*$e{&1T|RG#knYPBJ}i_nv9 zsMNQ)d$Q{Uj=kkFpHQDroJ|s$7yQZ78Rdvht6nOr;Y?vuv>JHi{eGcY-o1OaF|pIk zk5lj4lk|~1Z?lYdK#sci0c$yT!O%l4}1AE5KMvm_0KZ^ zQGPQhJideV`(UE~(glP<3I;yPL(Xgm%6iV63?nggo%;#IlGPUL8~z8c`7Op)!1js2qigKbFBwltEv$b*Jyz~Fko z3nUJCqh+q*Oxc>G;avDOwUCZxNR)YA3Ja5`_j6Nafm;`viv^HVB#U`x1d}{^cT{AN zYHdEo6PW7h#x21;4Pvt2Ray0rws1OAzdhLDH_2y`P9HQOITGCZ5i(C>q)C96dK zDn%in(7NCrTOY5k5BQ^l@g2?1R;w<~+}DzCytnTzrWCV@>HYXYHv^7Pjfm*2{dMbJ zVyv`NMsJ?CUR$)hai1AAq?pIB(C=H6?Lxz66fe-b{sEH32LQNrvSPNSMp^d!%EvSV z!m>nHg=Z9;*KUM(di%D&)2(eQdPl5xi2liX;=>(7VSl!qMl%8q`v<9#1R+3<+N1p_ zBYVPCD3}B#{F}1XmrR0gd@D=|S&lBM3g3cz9F7@xDRu%zD{T0hZrlv(ZzqU(4dk+S zFsr60Ee#veJQ9x61_0rvo(KfA^TRh8ck^PrAvuyEe=(>E|G0*czIlhq)bs8mH8I)~ zS7`yX1>$S2qh=%Kroc%Up8$z~w4r*8^bFT}=GS0yHzJo~Cf8CKN7o*?Ro%5TiVf|l z@a`IJ@Qg_9HBe+oiK77el=<6iVhmNm(txm{Cce584%F3K)ylriLhE*I3xj}qMhFMu zjC7^!a6LDeIE7}ifps%k_o{zfseGx*n@%`axVVuKm@U(FFNH$Hc?F(sqIawAS|R|uZp9QbiCa;+&%E85$nWI^j*;!v*H ze1$rjT1!p3)E!Logq+Mnz_OPWo;kVYe5iTjFa?nfS;#wc35ajB#SFQrBe`V{Y|N4^ z_%$jF7ct@-pED1Am#l0b>}{H-JyT_jR7?OAfa;wzz|CwlB+Yv*(B?j<(R(H~Xv+!t zxyT;o%Ezan3CYCMwllBvmx2O5qp>A7zE;w3)Y@f?4FiG^IlGl3^8U8FL9*lzw~K!O zy!z$1Ukw-%MbH!}{!$;1YRr$jy?q_2Et@5W6Ird7STnl-d%3!zp03lDx*Jm~B^_C7 z>!<_j3DCpgh0ro%BBUKm3iy_t*_F=RXG2ccm798ffvcMm$( z3GS+2d7pOc0p``DC{$OY!Q@H+adk1j95f)b zzgWm&yTIWx4ocDqgE_p`a_&-6!6d;CzcKteWbKuUloVWjMsMTv-Zf8ikl5S!>ofcO}62ED$J0wCK1 z$ANf^dI-^(PDDTdo!ja+fG#f!{VZ7+}@9490o5lu?i?6iFI1}wNqlnZD5tR@38gyVzy9FLw6*9JKf7QbhRaCspo2J-G= zx8k=Tyf|}lh=G13osriYRI2e&p^sp(cimF6l0;$#wB2&X2`92O9>%El54tRZqJMgC zitjIsms+`K?`1j;rYttvG9!Tu_g#)TJ;B@O3xI5YSkFjv>h@3Q>ga;3?w)f%9&-?d znwAH8{#Yo^AxRxEL;#_{AO0T*AneO_KzT<3Z3bfxG@vyiD0nqIB=Y*;JNh?Kd>u1c{)9%|9)ubAtS526pH%_~>;lEa%ZIjo z&$t4aG4J(Q)jdv^&rM%e0NdKH?qhTFr^9V*2H;YC+~b-L%K*&u;G?vkTQ?vK-vHr> zO^&qUH<06jv}ZlTC(}XhtyH-V>$X|@nlO|@+?ycp1c&e1856Z*cZ7rXs&Wa0+$%iZrCe1VL&W9G_Yso5+M~;52j1eN`ZBG-vZJ)Mi_#HT& zF6mQ6@c)%pRY_g4tCBwLpcc2do$j8QKE)kkbVrbl(*(#}i9xrP2*~uU-4s38js3d$ z_;j;ky0ynjUI)`OI_k&nT}1xN;UC^h-7y-WK|IXQhMd9)$a z9o>EZrUg{ig*TbhlXCS#W%mJ~^tI_#5so8DG~J&MU74bk`r>*CGq}KN(Ev8<)3J!> zDU#BuOrhVV*grOfTUMykjW^$)UQWPwWgk+E0W||JltgQEMT+_)rn%n%(*^ba5$!cA z9d;e=3XM^cZUy4n9aBaY{(igjoDJLz#Clz=YT>7G0w{>RO_ySFsRU9wBbadRy$MpV z=nal`LHmU%B9Qjpww+F*`6H`-)(ytpzTJl1m>@+)g8+KV+1DHV@E$;*x2lWJm;Ei$ zAGHk@dSqQQStgz1&q9L(BcQsnw^d5FNdXWHVx3I5owNm3mbQ1A{Vbqyt{yM!?qgLg z(GCRMYq_%Sh+|06}p`&z%>2wza{Hd=TyWwnt7z!y|ePgP^{&CRuH6 z+!|FP$dwH)Jb6J2S{Tzco0%Vh3lG1Bj_m<3rqn4xrGX{3KVENZnf}G!FZYMQW`wOxMC7CK6dpdqQEs={f z^PqbNtol-;^+SmhQc2G3NA9gPHm3XWP?w@6+p85#6p5%lECAg!^f+`0kL6C;PXEzL zC&gFQ;km5i! z=0LowiUy+tv5J$+h_bST^We(Ps-56M9l7FaAkC*i;r2KE))Tky)PzUb;0nGh2O3jW zw;ey=_(Y+`QrKB~+8WIHoXM1XY2l;&%=Y?b$%2jeTpL}cgT9B-U3hY-dC~LR1j-_d zGKJ@-gxK>UOj(5-EZxPz+VM(UhX-$HZ%>W@+t{;(DM4*;lgr?Ny_2^Ryx#h^4x>LF z0flT$>Nx=nW_)38Kqm%Oz!3B##eV{eY5RSKckn-Q5fYGvG^2G7o`EOgVk*oKkkeRC z`k+3R_Q2mU11evPfy&o4PuynEWzt>+vAe{|)7t&z|iN z(eM0x3<+>I{GAfKI@9VfF{>~}EbjoZk1_pvx}f!{_d&mC`!OfGb;N5!sBN6^%34~A zrzQ{?C25w<_X$?);x0V_!s<2te!>3MnslwC28*PA^K)(Ah`^*TT-(=m-i1fFyqM7t zBiACk@Pw{?AWlLMg;u7X(U>#i>s_GvgOEOpfK&)f#lPAQhlwWzGz+)^N$Sqh=tF<* zN13@$CR1e1mSFFbZCJ^ZO)+rP_OtMzVc{PTJR|m zH*WiV(*&=R5GemX{!#wjnryep=SjGJiU*J%Ja~wN`Rc|+oHzlHuF>dUi-nWy2>;Vk z)K-5TKIRdF%Zjn;y-v`?W|E}O##He+vSzA!ik(@aC96QiwX zIQU62WiKcqOM5a7)hp~JM6g>DG&4U3rCTY80Iq(k3#c6jpAl0&;V-ThJP87{NKYU z9Mt^xMs_Z!Ydf0K)Zoix4TDvi(wN=c54vQD*S|})D;@LC@PAG9!Xa!!V5M|xaj%cK zqP4_SgN_DQp|#ENgJKX)Ap+Dj+cQGNZYi54EFV=`=Ba!K*B67asN|k> zeNGn`P+d+JzSI;h&}-f9>Lm{hzJ2-dM+xpHh)S!CvYh^0voVwO!Eq%QJ39g+c_IWl z9$`B(LL^t>B(wB(nH4zXK!(Ne{@BTD^iM5yA41HC#M`W zU1on=3IL{_o&>OBL1)`vNvDj4JI`mJ7`rn^?hemTS0JHJb&Vff;{du7KxtB;dgu)1 z{&81-etSm*kg!f#rI7?+`{`Na9{3wWdchNC&_}DB=jfXR`i+m3VGM6k^+5CUvy&`D zd8mO+@px|xD=IOkL!&_2XYrod@R!>V${gvU44MThM2Jlrd5XCrvzn-Y7AF0SlQOUQ zqshvKrEtiOe!3E6DUExwQaS^K$pL_H^?8~#VJoB|aq`|(;mTJibeS!k`7j*-a^p!U ztG>K29;*eh0(3T|(9L`c8)QnYNJZ2PRR&!J3DJ3@4%b`KLz>MN6^I^bep8`sq8om0 zN75C;N})gDIyS)HZ!}wfeLY9e+A94sDQ2186Zr{ULG+PB{hGM|?X&L85?WC5n;%@y_Q@=Vx(`6){(zErRbalSxQl1M%*76f z(J5T$*lM9p)zt89)1S|GUT-7gQ)aVm`C%~Kb(sE)mXV*E$wnCC6gg81>WaV-pLPNl zwlPJcCgU)C{scOx`?aen^$dPDtWL)uMs9EWv%A?i(h^SS@h+c?U|vr)84*Bh%zR7+ zGP8|->_i(ODa}nGqw$i=6)SMS5Y!cC;7s3SWW;8DJq%6#5Hwz&T(^3)eJphuoG5iX zrUIoGKI@^g?bGy6ME8}|(s@qXy)=wSAhLvueM#5u| zM=c(eS1g@t&_;p32w<1PxpQV4&eDMT(9F7T0x4Xb0glF>NXMjt^Vj%w*@(5~R|;);L;e2Ns9sfl*J2ZwbR-uKEW6cUtEs0)!6~ z8QK;tro+J=6F`y9Cw%Vx{@p1e!Viq9B*T=#_^20m|rM1n>d z5_GxxZIl+jTj}cS>m{1mT{g-_YuzLR6MqMqRf57U9_wCVEV)GuZ!o>Af{&mZ=a%od zT|f{ssjy`pjiupIXt_+W0Vn>0MAO&7Bp(K?e!rJr^DQh+zXkQshV&Wr2%sziS|nkl zb~qDNr^5PYw4VLU)7D@b!RT*&KOlNPq?Z3ZYEQY&iyGs|s(!UqF)b}gY+pufWH%l3Fz(5fE5WP!?u005 zU6dK=K_Y)xO`avBy&IV9iMXT~`UCySDPhq>i~@-RHJ>>p#o?fPiggA>a0&x!t*UbLNB0H%&H6L3mOk>*G0%2F zz?_2to$s1AC0dw*Tlc0421FCn^u!&L(a?|z_x zP>lvPcz})VlMFY#J!rICiVRq%UHku-F6i^RpcSwpwW`(vkt^+^DUd=t^Mb{UdvwPa zzDjGv2(HgYPY(lxf58XR(2){wjt|2-?);3*y6YgzU-x{NhXkgkE)dc@PW>u)3ZEya zy>IH}E3)%d|EC>2n1rrQ3lhEYQCFY<#YKIpl(C zdIy~XrnA7v45gqa(A>Ha)VK?rYXSU+h~V=)i?rwJKARPZ^3M$iPgWq!;pt(KKv4Uy zhef(R)H-@qc8VLghcHLZE<-@#pu2VVZW6hCTza1&)rGa*0!NLnAjuRDQ9%Q90A|5q z(dh@4;1c376Cf$*6Bz6I`F6N{mR4~Vl%5BZ?$UIHjVj;3UNYQ2*v=bKyfCr~vI zkp-S>j(M)%i_7dY%*@Nnb1%`_gnuSDyV4#SkVeN4Jv1O;Xh7*5YNrE&&i|-Y{0RH+ z2Nbjit|oE4iD3%P9Jrs(&-vONj44+qZ;HYo)dZI0nVNEeO1j=Lr~+CCBOeulbz{!`L8U z*j%J=(dKYih{fE{pDa45725Z@mW6lk4*a?BRX5l zl@c73(U-V1m!VmgfRq|qr(>VQK>(UVJqBTW`!Yi^eXMiq2b<)N-1u9dUE9Eg-w*^t zV7U$dr2luq`~xVgbTd4L7FP~zXtXntU+nEkU+dVH2Iu2I#seRQm^!d@_iQKNL1TXo zAN$``CTpA?Jee$q7vAz>z!%?X6D)!K_^25ppp=mdFYQWvn00_}BR9^GZ389h60v`iCz(BQ+E z)4jVZ*>dB2QF+{v|02(KUpnh40Jio2SFQ+#gw&n~4e2^Gr2D6zT&C$x*Ij;2sshgR zF~qojt0*)%omoV6K(q32BP>Dvx0boUt*>nBTf;qJ9mZrOqKCYN?SC&p=h1;w^Y<3a zqe3q9h?9_$KNo(kU_%0MNSNr`s`u)|>)XYqLka>#+r^)aJ_to77v~XsfG8vJKryZw zGW8WG2*R39FS*46`IP_L&b7=vttPVly_$$ZrFGQcIb<3R{FoPh^q<~xI!IM~-M1ka zvPW(RLR^F^3~1t>(;-~H@Xr6V*;Oc5C1U(*>^UNIGDN`t+W+Qf;4i6Bk;_OlE9PdF zR5GJu*=0pMp4fIizs#?QJc|9bqM+tBTC8-kIj;X^sKdNqh(ynB({6v8X4lWc4i{h((8sj7W8x{DLXvDfbsLbJadF$=Ze1&2=Zv ztWPy>^h$CI=ctwAnF;iR8&<~xec#{;6Qx4dBOC_3yvnNlNq<~sa0Ddjg3RI0GO6R% z99r?6s4yIeV#+aT*EF-(lFl zre5bqIoh3YGw#x=#pAG-3LxapIp~VztYm9eDS8qAyOUvOX^6PeZZ#adJl*9hvI8Qx z3p;j;?W0i?hZ55dNJ8%LpE_0)sj{i)&4w)K4|VFu;1Mlj>&u`^DBy?XG6Jeyv^Lhq z%h03$@KeSNUO4)~m16W|V(YXNcrP{2OWy3X^x|T{r=R1E;KufTIm6pO4`0{O5Jhe58IVd zqi}_pwy-NxXkxeSjvgT7E7iJI_od4U#&Wxv7vB3qr*vn3a~7R3OBKw^V6G+=3it%0 z8hZjFmvF5c5p|)CZ(4^g=SI* zSRKmv&W)M&%S*Y6xf&t|7*CDmsz==sE`J#rQ3ZENXWyTVbE^@mQ6XPx;C}qV)z#H= zwfxpCV*0bifL34(T8|aRZ|fhxg!BBs_-sjTx?gCA@c;q*>^{6TP)j$d@r3pM=^y^X zza~hJz+%`u`x$^MPUgdlNHU25{pFpJPB7RB&}IXWH^BF8 zKhdahrkL%DQ%u05k@`JaZiPX_>qQq!OM(PUUJAA{Qc9;39QfuYZrjoR<`oPgP0a~9 zE-b~x$3P?j6Jt zNMvR_kQFJ?D$oB2n^x`ClAw6FS7EmE{zfpdAllO$M#IjQFYoTyEa9_R2LW4L%x#n@ zn?gHUR__|#rM0(syh7)+Scvz>_RBC36mPFkkCX|UkC*G-p{emXB-2K0jigUZ+T03# ztLZW$())SVaiigiaao{i*<(f>fqzY+1;7K`jXw&Z=ej2DUl+Ujo`V)9}Ub|fL&Aeoeaj3sqw zTIr8%o_dVG{d?{}en~0ZU19O^4}<#=ZA9?EF91{c^wkff5O1mQfJXlY{I}vNrRK|Y zt3bO>g@cUr47ug$tKZ*n=Jt3ic!W?1cvXUL_vqS`?C|oHZITXDGhVmzE6AK_j}YBn z=820!LA z*d8Nt&fsv3Yg4}Ws7qU}dsgsjGyD?0twoR0L6I>|T2{t-u8Usln_4+l7AJGF5lZQY zf+fQ{iK&t^BRZr@Q8j+)vhCAcwIcO+Lmh1iOStN*XF|d9!PCUS5hjb=xse zK#(YG&HoS1A9~8&3V5n!*4eM|S-@_Paj78p<=zMx(LH>s;M3s2^BF1nXT+>u51MKN z{*CFq^{L>g-pk@ZJQS|!y8m@y@4+vgPhcG}-acOP2b&$`IR=>juw2ul;#W>r(CIX) zf|>&f+e;^0scsVs6h-k$d9klf)G98MihcYZCp8TYQt%wr{qmOR<*zUKc4ZlO!(e$U zp8H~TtT@tX)`X@>CsNitLz({g;2Gj44(gGHGQXv0>9Wn$+LJcu5C)AZ`}c{(d4gq| zJIksNy+tAs%_3yAzBI(>#_Rw2TWc(*Qi-(2TqAL z|6$5dww?Xd52l(XMKn}u5m({w5=W!Tl*y{4Io%nf3f?V#g^=A=tiX`jO-U&8Ehoy$ z2p=CG5TZ#ReeC0^A1|<>MdB};nma~$^z(Bx>CO!f5Q|>zZ|IY<7LtuV!~GGbwA&TO z9r5d{Z~H*Dsu`16*O0ODQ0#ueE=P%>+ZFk;O;A!QCVQyr@criQEtb`X&);gHzmoqA zY}u2M)O@tecCZ`Oe7H!sEtDcrV<1hMPdLN$YleJgl1j1h!j2?xCHDTvG(RPTHk)e% zKiPL(7vXT&c)kq#JaAova3|E}YIi)RL&1$d4$%t8I4F#pckC3d`nHjaE2Gw!Tp5Pb0FSk_!?ul5t~oe-lfqQA>+C zViQDFYM!1+AdDe8)WA>TbgFFf-zUNgaxTr3=oofL|k;3t)6@%Pu6)Td?k^L;|e3-bZjAX zJBm+wsv?)ABrPo1lOmp}nW<8o5$wkE+(Rgat=Jj1Jy>A*lNT75FUF;BAL;poult$J zbbL~rQO!|fmA7aQrx7to5azYK$@_uOb?;eIAR!&d?7~yTKT*ct^dfUP+zA8wB&`A* zelD-eo26N+ArOE^@ljCs$&2qiFIyrRQ(gDB=6ic;T%1U6DAzcbi+y4e2ktFXR6J3;M=2Wr`>RR-KLhP zrzY0sn3Qrs`MS+f`Th6HTn#Hi=_>Sk{3 zaWKCxR{G%h_&B1nkQM^P^*wMWo0py#!yLLfopIc`ieIZ9^LI!8{d_X}db}HiTxy!LbJ%_W1QYR_aaik`I4h+_g&P0J z(>A7?q;~&->YRt3C&8OpQ*29QPN7_oR3Tq#u3lV=_&$c+t_>jS-1lNJZ1P|?BxC#B zy?SW>`&*=emG?H6^_&!ibi)yyTjCM`Macj`^kl0t&kq%*Lf}So^9t%+sqF{*&yIFR zEDG$`bzJClHIqcbMEbvS^)-ycUNh#%B#R)%3mxsP&vbF0gnp#gU0CM1=Xq!`UL`$y zY3IqSBAf8f3B-qu1V7P+2imm9w7c#TKQhczpnJ55`NP4FX?aL9Xi5v8$38h`ge8y& zlihOCJvdK$oSytT7IjdfU?Am+eV|9$)rR|DT0_YDYo6oi@(A?B^Ic1qNq+B&<8;Fb z%S`vCdX>F&HgWVka#iW%w?<_h(G9(F^7nTs9)e^+A>!ru)Y6Sdc}?}#7Lj#*?zKc& zUfX^00eyVp|D)}#qpE7V?qNYBqz<7-AK*{|A}Jw_bVzr1NrQBQbf=_%(k&8_A|28p zQWDbAjo)>w`+nc?yuatKZwv?HfE&))d#`J)x#pbf+MxECO)w5_Rhje^S#gB`+*C4; zjdrbRq#t~8=lghPD2w5aovORLd)mr)m5KCpi%&~KGQXGmQD)c){=<(Ris~UWhPV56 zo7&S5E`F^buqsi>k+fy&;yHA9xa*uM$9v9BwzX1gJ%bMKacF*FR;r6BNqsn%PZQTp znw(a~99P1C?yCFVof<7Xg&#X@?hf zKbY~_fk8^C}dqg|wF4%L> z^}zJHmk&TPPa4^Yj{+Qh2}y1u0w+R?a_S`{$C5vxks#urh;KXTS}M9JK-E8?^#ApB zM+zMHC`|+28?kcZgCvv;6QvR|6ZvLU1irZKQY2CNE>=^s}JQ$9^PTvA&Reu}C7R6e9*`ahv-%;wI`Qnj>mk*xPCZ zMbdue4$7EUGMSI3^$sBAPP@;}8CHb82sF7L;dVzuy3NK46x=Uj&}6gtb(%VX36Und z8fk@On*12m6?)djFRWj3ullYKpOyl1!NHwRZV_y)b5|ywKPuBDwoZTurv{qT*UvOE zyTIzOG476OTO|x_;OYWxN$HGGW10lY$h{Z(CAR|Ao@0mIV=?sATKL)(?M{d~0JU_0 zm7uwTnm|LZ^jdkqX70U4vVq06UcJK;G=B)75R`UI>s;?O0TWsXHW z^ZpWB?{&GA+HrPn)p#qt_PllIb_}0oySPUXukBoOA}S>=hZKIX>@Kgj@cT4&m6M&z zCY`0uu>9uh`6drsfoIyGrn#9^j3wi3bz6z?GoRP4#G{pWa9YlL=kD(>pE-h%sOmU9 zWXr9jG=7LpCJ<|jN2_SE6{==C*Zl=xDudbQxD2Kk9!1@KljY-&Z<&yKw+_W*brR0B zlSZIb6+N#s(jtwfIYMZ0H{u;N zn;4f$ObGhG?=xYXIz;}tR&x6p-T93*vRL;k`@w8y&o(1`G4E921Jze_7LV@WuZo zHEe-acv0>KaFgE+PpdcL;C{GcC&~^*Yk^8}5`!-Ak;yp6X5c(9`5a+Qu(xTAtt0yKWJ6|^D z-n$(nc%oo$3CabKd?F)T4soI~Xb(i(YX!`N)9?_$gVbh&=~7~LTT?7LhlpoL=YiJ9 z&OX;?X44f00UK+_+n_K0$fiCCz!))Tcr*pI(B}nu zEzRdMX?AO%=d+xB0ct9mu?(b6e_+WURyfcDOg}WpNl&ekWR&KZbWry=ai}m5$ z5W$K--{*+9BpzQk#*5)>pU=nbJ3{cZ(iM{iFZnvi(a-mmrg`zJ9lFU60&b9R^}r#NLf;H z;o)xhT_(j{CjEeeSMEm}8&>bh7a}I^5t3tl)IjY~%n=S6)9^31Poj!23oVWGJ;6)A zg(`if@RU(I*Y-Xpa(TA`p_!qpSn|i zFwYNarQ5afPvzQJiX&R>jl1B^OG)cj*~3h&f~QIwO+@JWhH` z8&4AKsP!gFSSv(4dXCl|5j-Ya4fXUisur229k)`7_PxNf)#~e#MWgT~(+<~ZLzlXe ziM2RWIZ!IQ7c53iMl+in0Q=%xt{=6fSfnqsK9=2_s@zF8TVH3;gpt7_J#l`9mdEj; zWPL<(exfu_v2rNRM4Oz)F{xzc{Syb1Ub@lu7iYwSF@$U;M@gmoUYWD3MUC|s=VKqk zS)Dp%rtME(Y`oDPrc|u8Gbq%4pK|$l3|5*kH?I{Mh8Si-{HUitk%3yINO>gJ0*|mo zKd0p2LaS`HA-^c+OYD~hsWf>3BMY0ir0nWgnUC|;J(EY2G|w?&s*{_yr=dIv%{J7c@kS_G$$1uEn-Fi~&2BBpcB{X$Prgm<(Hj4h8AjHjk z=U3D&I2V!I^Tw_#k|tgRM6ewiAgSs)*jXfh{SpBz`zpu^6}O!=qCKN^-?!!lYakq? zKcR>sACl{RlArFx+n%@ z$($9v#-bmSlCqmW0(3*mjCD~LsJV7181k8q>FvLEju+>ob0&305;N4J3dd*ZKVHD1 zh`AeM3*erTYMFMSDBingU*aTUDO1s0p#vIkEfY1ofvyk_TBt%RAV}P?^L>umPK6{& z6O(lB<~|faxuo_CTKP=6Jv5*};KNDl>V^qjs=Y6cHP4YgY^>%mp10%xkgv{7G#7w#%#x;cAHwq zIak8WWxVd3ghTkK1+V3^o=sprU+IY#XX%_ZjKUFH#0tE3b)G74BZXOypPG|(LWplm z{yQ;?VIZ!C#bWohkj_`K5E&~_w4~Yt&OYkiJU~Lj{dP6QBmJ~B_R5b9-+BwJ+Z7r< z(jHqqK73Z?Oorm@L*bgvz-7ibnUQZNjt8~)`jKdSnfp0;I}t1L1k#)c1m3|pL z+u-l$%Np=$ejZBM1^p8;*BxG$tr&PSp6G`v8{ZFzqfS-|>RB|&YxR&B51v5JwCCb| zpX<~rhBy`h^<-qD>)%Vm-pku}qMyUUS^KBM01X8Zf-C;c*!rA^s_mE8NaSXdr3xZJ zDa(zwX@*006M7UMx74ezY?S_x3=Vrel2Bk(rj_gPJKNrj2A2DTWx-|HuRl+ zaqu9yJnva_rc{bCLj%V%SO8C2hqR^>IkzSaqo#57;P*0}Jfo(D^D9hVSIG~0-Z+P5 zOlc~m_l-P`KHa)ccQfZ{LR`)@dR{>S z-VDX~DZME?^V-`_d;np+?Ml)!uQ~UGh&@5%&CqEh$A>O0$q)kSN$C9Kk+EGh zYZTU+e9uY-&T3AOC+H^bFU<|MP%C!4z-@VobJSorm|o>Pf#D;23vj#*CJfW|-zr+F z0WkD1d$IDHF>mFAOF5Yby$WzH^#AeCmkkGSr>Uk?DfNJ1lJPB(gF{dunBbxu#IKU; z_wP;#wGIu*OLD${|2_c%V+1mVQNlQs8C51CmR^ZQqt-h0fty6;V>jPdINi6K&sK@Y zJ6ip2=7UfjDN!Tah+ZM^m_AW4m5!U=}9tVs%)7z}cJF-O59p#k0@84RPET`9R+=bnbKTq-I$DoTaydxne=Cn;&7*88-w00ev zkF+wtyOuM$j;Z%+DPLrv)IWpN$K6| z^Qki1xjbWWS8{&*Aw`qJ%g&=6`g&H=giY6-?u7h4FVv#D|} zJa2L?L5}hEH!b{KfRav3Aj``CR%aV+xAvhcdcSMJMzP$Cd7NfqZ-1C3l+VANRNO4` z=x@q`%ROWV-3tG&d<9o_*zn*f%Z&C#y+R$Hs6OM*l+^}LSq~Aacz&lWb&3U<7Irg0 z37Os~^kadhwcfl0cpw>2#RXcRC5i{i&wYD@K-ddkQN}b#uJ_e>5vk23CJ}oKFidFZ zP(i*4!Vq#gs?CO!3AOxDA}E07V(O3$x?Kh|;d+M^n0OS4sUb;?Nwgix*Wk-`O+o$& z=S@{=ygK)zqPTbxeoyrw3biur4UTp?@Q50d@CRlOYtbcRXo7togNJeQE-fzRgb5nQ zJhIjGu@Ho^IBzIBleVYxIB%o?@I(}bLlxZOezw1&bf8vg_{6V<)^%srVYwTJn!w-l zgJwq*sa7NtXkGOK-`@;VE>t{=pM39eBIoJlm3WHk54{XX5eo+^oKCGmU#OZ#ebl5k zAvTU$`gR_h*t5Q5=43#Z7p+p;etPK6H~{b!Lc5Zf_P zbs)elf-m7&5lnID3qdqQW%AdWS9M6MxOK9(kflI(XTcZa5yiyDWOxrL(&%d27|7e{$V7J`-nR#wAc{5S3e_Bld);;RuR};9aWvaWOSt>1 zS%A#R5F;%#WBRz*{@VBDzp|CETRMXun(OLdM)9DHmERd+JRr3;*Y*I_oQNTZZq-iO z=arur#D%qhJBjZ*nMYDFFkH{u5I=E$aO$N#CEz>K1Xw<9<;guvIe229^H(UUNfLU8>md| zgLiX=Ac{MxomVm7CZR+3wQ}8fYn9@{NjTd)9U#*V0U1h1JR(6dJh|Y!k)S_*HkEb# z>b>WcCaZEuNuQVh{aHUG)Aa%z)2|tI=9Nyw7Pv9}M4$9FuGEFR0F1=g9MSMD(~~bZ zOPFCVJ&%{!IVje68J)$a7gxh9yeTIU0^jfi44aTj*7l`z9wxiyG&%7zrFIsjNLbCwsgJ(Ik0R ztFZvl`|_nT{zs9hl8bV06{$^*v;7(>P`7#GS_maT+0kuI=y>AuRL$#+Ow!WXL18&* zD)tyCW+f}O3Wj4pdP$g#F7&BMcQ5WTC6Ew~Y?cGpkkf>E^lu(>Ho%wdYRA_D zvO@P?ya&EWjBto0W(Bg?qcj<;AmE>&hG#I`(GJ)zCQduTm!@*6*{kunn_G~@F$my@ z9wB2^FxqTz4^<8qCIMX^$yX|;xJ|D!bEsC%bQ3Wi5K9d97^28&z9`t=!2?XDEJ6b|e{p=ib4^!H_^AJG!4^J>bK!GD;y|xLEZN z0NYg664S!ho&oTn)OgWr6y-<+3Kak=6D}FED`;lhu0v1y-qUR%SR`)frvdmIkDfW5x+iqv;4XIVAlMh zpq|8Dmq!B)E;^*_MJkCrNP>M-6}2Lp&Bsmm23e5*f#P*k@PsnOi^97)cvr%;1{G~_ z@WU700VHm7;#b6|wh{g$THM!;M@7cvnmS)HSHH*;sgy03o153g zyiR(Y%GOhMb{#Z^o%I+edg*nRID1csLR~fJch30bpZR!=gEp>5kM*@2leikA(g`Wf zj&X^)MyTb6DjjnRHoKRYS%gJjQr}PurcyFU6qWd&vN2y+87{MgYVk}IGkj=tQP8uZ zjC0DQU!Ll{gF6hpr+GdpW^ouUS(Pgp%6PyY7Ld6;&j8>^g42qR@<*tqzg-V&Lo^8! zb{4-vRR+L45{I)iI4(n`viUxZwb#8r&Q7oj=cW^OkLS(Mj3q+DyvvaoYEPLi9h=xU z*Ge}6^X%3}koBl>M-T-LxZ+w`goqwY;qGv;k^>_NC*F?wD*00~Zxn2)X;mBL*s~VQ zSRzjTmskauUz^VPJo>^0UJi6f*8MpC!n;SOD?C6uvDh&2S$$<6e6|6AxqE;f>q5s3g8luzL^>uTGNAW4AcAPFc%>f7S+`+^a}d7)=| z_E;P3eZc6M&Sg*8?UAigtZI1$h2|HimZrfyCY2#hugr&EIecFbsuZuwUBN&@xhHrT zaAbe5D(l6S5)BNc3~ksQIH>)lAtBD0vX(c?TWU3s9bW>kiZl5pcy^N?2bRJB zfNBF9EzkFa4Lc(W%Wl2%7VIIWegM~+-H-Txj6b(J0_IBk7%OP&?S9~*rBZq$r{ai+ zll1msm{*x@)BViM%mzD@3yaAzo$DgdD8sq2kmKkH`enHkDp~KqO%AJxgna4b^FD@> zK;9S<3oFEt^i(!89;aF!9=+rAuH!A{8_vpgM)-r-8AKeG62K-irU589G3UVqU>_Yw zhq%~;{toRe?{71amLvzthPV>!4rNjQ(Wyux%=4I+>L{WUga!e{h3r= zv@$i)b=AL$<6%7l(j&+h^P4kePeOG7091x&~0+27(y&T8};BZZZt)y@AKVE;NoRTx(0azhlW z+@z1(7c1uTH0eLbsU*~U{bN9$`3exMuvi9E2YCE=jV6M6sRJ%AZbrzud%#&(f%Zde+{Uzgc>{5Z!ePN1Kp)uFg?B znKts<#1o#eQY&ZjX~$u@0l$ZZT1KO5Et(izca-q{r_LKu&YIRA3!;q`q-_i#%fY7(qX(vMG?p!q4!u` zxnmNF0qOk;$M^dURzxIYYM>-5`rmkg2nrCD&(%?K3(slz1R!TsMq+>W+CLi>?GVo; zptGs$-(!Ma_@Sb{!Vm?Lk;z1f#)g%65O12q4a#hzt|&==B((nha-}y>j2cxPukFl$ zS4a^w96m0yYy4B^PMc z&^s-jpjXU$YM2TL*W023X_swD-`L##SE@KWqh ztgd&yG{T)dKKoP^%sLGVbSDFvDfa<6mz`jbe*|j= zuvbg7GhlyGDc99eEo0|wkSEKzp2{xFiD)0~77Kp4Yl;j7e5HE?YZ0HCtzN34PJ?T`#aRYxPBFpu1I73hZhr1DHrU z5N8S?wb!tHa?las%-?oQ=SyQBoR}NVds1g>6M1hF?t=j-{mlcFf~P{zdSP>;w&t5! zeOKQ$H;elMYK{TJPMhKpNCW3?pSJ|#V<4oG9{Zat0IBZ1UOq7Pd~vz6C;84M*f}GX(aiRwJ;)%@ZkVDuhASs)1|P<~a-UN_TpX-tP=krTB`TU5baRB+ zCNXYolI4o^od$)&fb3Oev}5gah5V$B&Fk#;I@jT&@y;K$w(+O-h8I@0N1%Iuy);lpRCWc@; z-0!Umjpbg_w7N}sY}Mgg&Ghfo!_7L&18Gmps;$Q)3YGg|^DLdf9`La`L9zxPe^Kt$ ztNA`a1sj{c$;x*W88uV>&Dl!w4B9QboD9170wGK6`L(`ec_>e7z$tLqpU|$Q@HiImxaSJ!DM5DUs;9FP=v|5)uCQ2Qcpjv0vthYF_I^R4@%_&ZqL(-4J(ksq$vG?7@ZG{egll+ zHE%-wBdSuCd*T^busR;b%$Yk-mF@#!BOi1k8!G^OB-o*9w-HpD4^#Tx=)NbWfi8*- z0S{e9SVu`UB8K2+T_NnQ4nM@?bE&{h=LZBF)Eb!xq0OR(mZKMj2wSkZF4U8j=@q=ED zJVC@O{4qb+$9pl9SKmKiTed(eTwJ!Ma@GiE&ujNb%1*XFt07|&<>?B)3gR=bKeof( zr;~UGQHT4>)s{$dAEI91T#Vd<7ziN+dHJ)MY`zIe7gnqbxF(qvD0pYmcbEEHSgkx zbpR<(*+e|z9>tdiFYgNci*7KB;j%kdx?=^WaBcCih3eikC0kkj0Kv0yMZ9aE9zDf? z3Z@TE&(6@AeFXKJ9{wvNzo6E=v_tVv%hUasV4erW@2V@;_@~?;-vnngF2Bi=eI*4r z8Y8Vv4hTMIJ?(DBVg#}#v3MMjkC-k%b?O3kg>u&hi^GIC^Fo!ZOFxYD#G!S-E~2s^ zXrIm&fz4B4zMBb z8A+*NRLsn0HX8nUk91rhhOwWC#%^PNJDVl_Q_q7tV-I+s99Pn!;ie{tVd2S#u$}m^fG+PbQ8B!iiH60 zE`Q7CTV9!2@^QK^dE8`+srxOZcvzmUQe8Dqg~gKBAN|=+5S8omF1B6!KX>SV4Nm;| zb~YMxGtb!H04;jh*ntkDq6b2t5lT*>q4}i-E>I%Xgf#BOTmlbI2BlT5-5UTIq>%M7 zP!R`#9k2r{S%6RZ(@)~;^WkL6kJGQ%)LBC8RueLb;g{<|L2zTJJt}w@YfV91Fccc= zhjB9&5T4ZchXdIleZJUvl&G?CzU4qUc>oam#yOB^@^ub_olLX{yJtd1_$J0p`<``cnumI(*<-dIsiuC;)*lgVS zA?QhRqQ_jgK#Pjgr-rz2~Mn`IwXU0lRW%3d}}EdPA!D$ zwIU7|D$x?Mbsj=HXh)1$d>%Al_C)RA#xUl&kUrT%a@2|m7-5WO z1QCZ+s09QLP)FF=lGOz(32Lh zP}SOeevQsda%acfkaR2e4uk5q501t^7A|{YC<2Wy((?ECy+5}?N-;zELVXzyvULVv(XDZrM+ zUnm{C5$fWt<*Nw7< zI~ax1Ooeg&#|wZ>hT6f?t%WWNXNT?Y>dzbT8InLIgct*T1F;dgWd%(=%kA$hVs++h z8@*T4Z@%}tWP`#BMwMn|>jLWOzf>h|aXG1@Sz<&B@E*7Gp3%~)k0UnA zbk6i(M9m|LG=53;WidaeOa|jej4Wx3`b(Z??<3N9^v)5kju4S=Bo@F&Z zmz-q(oZ+V0q_ME|u})fzLIDO!4IGXK}cH3Al4$jjKaS$sCJvgBXOyyRUAU zMnvqBf4?a%TBGeY_M^pl2bMvU(&sdOq|p*Sl-E-v1IAY9ur(wvxhk(#VrxBb)jOYL zZh*%VBjWDdGvSdx-i|d_cy;=@)4Aa!W?buC;U+WIPI9iwbP*b4Rb5 zVAIZMQU19Zp_oA|C_?+f-krYqXq(9J`Gxgx0--?x_pyTOeGc7UU0myZu69z{{eVmB zp2(V6<}Y8Jxxl`Mg{;l@OO$poH);=1HV5_1CJlM|sr zt@ZRFzdg1gWrgqK5BIuhL9f%`iEsi{ZX+5-d<@j+oWAE!Ge6HoAhg2=;W8c>6O)mV zZM@C5Lz#qHz98kT)dep$ABH(Wk57-(M)gj_^vj?w!>1OLAm2eg3nutaHM*9kU9`62 z05!a0<|VId+1%q*LVqfoxfU>Vs)KtI0Xq*i5y%UPfCEfufuQ~%c&oxX%Oxslu^8uU zuTth0p->+l021S>&8-j+Qzf#l8=M767$?amZXyY5Y89X(pmb)V@kF%8f+1$>sMb4H z^2Ft(``sSEnF>1IJJpmiRzkJ;w~!vA;liHwzvW~Kq5{Hw+9TU%G^)cesi>_iFfv-? zc*E~)@T8`oU4GA#2($RoYNR7zyH2yCt>7Lx228v(H2{F__Tq!8;;ZPSn!M4KS^fK0LM-@IfE=2s)E@cpT6yo8HxRVL6F zSDNuN4$)~jLkk1?X~AHZI}VsR+rB`iBHm7KoyPJb6~^1)a%i4jiguys_b-q|Pv48d zBOIFJ_d2ITh`Cz^n;kw~@?ewL{$H6!p-!n(i9n;pC?s$HdrbA_M8UfI(Q0G|vvHj6 zy<4#7SD-VaAAgnqQ$xmPS{wv^X_#BjNKy36N^fs^TR?x(2yjAEo2;|$U#>8)Ey`^o z+%y>^e{D~qSu0wVCu^m;+dW;aSfG2;*=G2=f#O?ZG;mOW)E$%H=(Cf`=uG~2+wfG; zk(gjXGXGD3G^a!(gc5Q!Q&p~6ms5kvgLJdQfr4=NPh}zlY)MUT-T9OJ;yLDWZ>iRX zCg6)4LokvwP5M$IC+V_TdSyV)fgADeyM8N}N#!&59i!KqE0Hbn127Wbqx`+wO1Xv7 za?ioq{s8tz<$By(`+es<@%< zpM>XKbPpE|CPos&EMAGmy;CLSc3bpMJLvN{lQIq;3XgfTFAki=GtVO(bEv=ZSyW-X zG>Nl`cX&EsiA7MZm&~Xl!@7`WA_W*w zAQ=J2c8$44%I~C60!F?<`uzV3_bdUefscXB1h(j3;O}?}O>KoCNkC_T8csV49^v?N z&y&Fk46+?)R;Y70T^P2P^$3B0~2L z%nSKBePD&|`A#8TX>1-O?Wk-wJoE zOh*eUAtXq&yt&C>jv@?0%0mVWDXTPsKgHt&+XVFN8%Q|7`KM%v*o_aE+QJQ??)}vP zVx78b(9gjw(GMg)5dn`!xuH3|m7g6V<&76kjJdKeIT453z>K9gswj|Kb%)}#+<8_p`CHoWV~lLFGz{hV8!vxV{N%u!bDC_b24+MhtCSrzOswuMg) z9$}&dvs83Kg+X7Np=;P53thf4HTZ*eN zMGX8b3h$ZnIa7FFXx>*Tf_39Z7eP>r|dTl6xhl9^v# z$35Io!iF+5DkT&P`FR`tM7Op|Y z%mYJws*`+!VemoZ0OZ#wrjdRp_~}$J$Qk@znk~2N@dq82pJAkDb>pnyfGsCJ<-1UP z)Z4_~HJUO4^unV)1P>gKQqa!h4u7vGJ8r@%izc&iUl`N)K=|avU~ib)UvF9+8QgHl zzCJ2{_u{;$=egr@3_pF^J>)9PmgyGhecR^P5c$k*xGQ>OiQ2vX6YfrSz~G1AK45oI z)-!THj^TW3SyZm~ca4eRk*z{GgMXo#d8>7ioY_z`|CVR#| z%sHQ-t6rZkD~;Q`3>hkw%SyU!^O;@)t)0$IXz<8A&3HQIB4T4swmFJSM^3LHZKv>|X7<0%vVgv(pMRYps2jMaJG)R^jVe)hu=rJ+{^^^{qGLZ*Ls-0c5Yq*&#_)tWU_+eTA@d?5{>lUCa5spzj~;-u;eUa&RzjbU)~Fhd!2gyCTZ7;%m~i|Z z^`hpBvfkh(HEN#;{5XMPGyRWlzvjoG_W+}YhWuFd&k!#9uc6r_5kc5O)E<~s=62pl z5WEeZI>!p1b3LD@E3F_oDOM{_(7y4b`TE>S1w|2EdM~1K4)l*JfEhw`^Q-jgCWJf9L+0QH7W-#$@D#z6hz%mlR|Pak`pKK(?KM+x{Vd%%~_IjWU`qoby;j0LFN_2M?8FE#!taOT))0gvDJ8ij# z^-&4$!;kMlKP|5KTBdM9S}+1W`9&+2{`A!yR5d7nC;@Y($cN7JE}{P41UP&enuwX zT{7s6x(r=tC*o)h(FQYUlErqJLSgyaa5zZ*fltEKj?`)_vziKe{Ja2I7G7Fze|_JY zCMqY!t@(6K=cRna9mNM84j7WxGh`ohJGsM8`h|mTuM6j8M|Gw4TFvLyZJwA8cBIw+ zb(48&z~@C+q->5E)0u%`PWdT{?8~xi3xq<<4klEI=g+=0y=lghT^tPPil#P;)O2s@ zrf>uk@TdJ2)cd{|$UlgKc)KO>A{VR@dNSy%6sbG!3>PDw zooHR|fc#d9-ljjX_9%=^lN``dPfaIdso)wJUw%3vtHfoUJ-&#ICuGjt{|D!ttK5iQI=!m#Pg7^;3GY!@fT6jkfQ--U{`_6G z(mTH=Tm4oIGz7KQ2*F-9xePM<56rMzC<2tjOaSM7TxjV1tD}A(2%0p46xeHte-zMv zdhLHryFQSEADAU*bp8)>B`2@{qsOZ1$FeiM+Qa+==9rQ70~7z>zrN6q#J(7noSbYu z-~1(2$>bS@j6PtbuLF50W`pL^^X+JB&J7yj2QP#neQ(Xpx9hso)s`+2B?v?oIO}wE zaD0qaA3TlwkA)+U1-=_g!n0{9Ng1f*bfdYD?^q|3Ivt;Qw1SD$9Y(rM8ri3MA~b+R zR8OrikJa!3kk-VyoGdO^6Vusi^3n~6oHR!qfrJn<{Qg*-+8_LVdM&xDgYh64pU`%r z(Y1X(*_Hm1*#w_!G5u(nM9(x(tb!LY4mf0g_!b^rIU-j*w$QnImyRg(dNl=eWPuOo zA6dTAwN2xfoxvotrkQCwnn%HkX}HsSA$>JHqlTUz8l7S-^QF>`jsOsp+6uH+7waP$Pc)_mi2ZuQiI`i;v_##)h19Xp zdtX#iXM$b+&16Xudr$nP$uG;?4?|UyS(?ict994!lv8gkuerfdP zc;Eb-`ET_pt$zEREWzH?26o)*h&v3$pVP8$BfbI6$@tsr?HQ>d)9ZY7zm@V*N8quh z`grjt)H2~h&XC(m!GED&TT|gBOr{#AUmMgZ8bMXKhUW)`sMj9_&Nf^q^GtM8tjB%C z6qddFr-I>Dz*_YZ&|84%EaN-x2?;lR^Aos%zkc-tVO5S@7on*i_uqsUhzt+Vz~w2u zCO0ax2Rcb`wx-CK%oH&`W{Wnv7W$*!?y7-=+ffV*-7?j)nZ$LVEuqZtIS6>|#iciT zYJgGW`-P9=BzI&8uOtmiIGoN_Wx3st(}`?XYb;<6c@hZ6t_M3h+^%O~9iexmS@Wdw z^LUSukT~w?U2@qg@2P0jN_`>Y8=tg|BDr0I1}fTC1IIpSQn{~(1RSn6R3y(zLyV<= zWB^Mf-zOLAJAxh{apJuQnrrf4CLGO6I;2;U0`Lsc8t*HQ^P)d+G>R#@domQpQ=`W$ z!uONuI6H7yS!IHIFpUA-pu(Je3Py+FP6W4uLmaSy)QwI3$M6o!>PI6}%nbuZ zzkyP|?_dfe(}k&zi-$bw(4-`Q!+mp(kNQ=E_eE`vh<6LxXbq z_s2W_`Z6Fgh?ji+`iREPe<=4qGl{=?uz$Y#3Bo%zI?BoWp9~_hr0R^m4EYQUycKJ; zhFb(%IZz|?YLuvXa;lT9VEv4L26#i!%&`>~41B~+DS@hYnr0i71P*qC`wiba;w7c- zdDK+o4K@Eh+!skWT<|&AE97q9_nDnfsnrQwbQy2nV4T(G3ScmKp7&k8-Gs@n%2Zih zzZYZya}9{4t?>LRCkvA3n@lnq@t@gt!4Mv|m1sr{zXSPS`SySOWWgVPV4Ea5oyokH zn#qT`;y3}T+dWz1qXS}Hi}2|4b%fM8pA?qNx(km`hcl2`E!#!qrQG_RI_u~V1Ox=y zn0wva+ z#!u;@9S;E%ECAXRi&aa%vwKF3Bl}%nU4+A@($}`PW##_)zzcWbpEleAV^jzul|>0z zCbh^x9dNS=^x6_$aKa?D!6_A0cwD z?^mQ#X@{t4BiVl<2~`&Ut~5HevVW=|L=~I^8pHn1=KYnVn9iBVbTmcpptf;7D|(D-gW*kY%c-7uwX(1JSm_sF6GlS!&bZj^6!hi zu!ID5{K*!p@Vao>+h6i14wt7L{d=VVYdUjc`Qz#&>t$rbhrdI-sO9ieD`z9G`pWNd zR&_`ypfIsJWiVj}yiA3fRe>1aKFvLt#=0L3IC5{&N4if>KnkIFNvB1HfP1;WlSRP){pTC=`{%SkERTwp5tVqo*tlC{J>{XYZzfA|R_z{aJZc>d zZ#~-i`~bh(UD_y5ty5JuQYjW?HxzK=cS479AzfZxBDKI!hOq*9G5-BtYn0i1pBBD; zrJ9?Y8%!jr{(GKK1Qht4xWTSkDY?-0waa1q*v9SXJQ8>n#Fn~3MKr-hTucXQ+@dFf z-RZ9@N&$B8$bfw8>HIH+#1{$9A9cwlKM7&+wlq%Isar>KR0n^kw5<-rGxG3&kiHxvC|pR^yIyIwQ2yUwdjSDX|P>2x(b`Qns7aui?CB|J~?yg_VbNCr}KQq#^C-7Oc?|j5dKtgjYuC#yn>%)Mr zi}COa=s3r13BM<&itzAI%$vsk86JYqp{?_@sMyv0EdQMNAAkSf6NbO|v-4qy{>)|L+MyugQ#X8IbinxgE<_-3>+b%#+QRTC z$&pO9`8C}U_z3Yb!~Z+yR}$vm1?qnU!@nZL(+$2D+*bA8i_12|GfI;5WPMb69M^HS z#9bi*KT)tFLCp4+fV1qgIj{Qwx+O+&IMgjYOkw-|hq*|9RlY8Y>kDjT?Y~t39#L#~ zFCcA)1n8$tFWH809sj1V3izEreribg>spJ$yyqyNxmhI_-`Yg9=L&(?2AodWA-mF2c6&cy_c4gg?8$6@&GOx>$^j zskXA5Yp?Gy2^Qm;iA~LJ@h~~ae3?6=C}JDf7)H(xt&0D50D021&ND1n{^zs&SJC@> zyRGJbXWZUiDti+8m~nW#+E+2AV!{7nASObtISS#^T0G8!R^4BjW;RPO5EW+(`r~3( z;Dnq}{9mp3GhyHP5A{8w4u51R$RLPDyg>rNdl*^ZzKFcBqdmo#ZcnBX1gOVoAoJIH zo6Q1OYe%4q+_XWx$UlH}%lyuxt+J?af08%LAh0vl+RpFL0 zT-IX(wzjq>J#O52#0i4lR*swUXH@uAfXg5^RcSW#H*Ws(3y3a226(!r zGre41Cpw9k9_1UZ(7E6D3av|-%L%lF-$if4k#=0iPaYX0Go-}5%J^P`%BA}2jhN+p zTkual##aAKLcf9o6$ifHQN=j_ZW9LS1Sf^|6%Dm*N5J!vE;{qEf+CT}*Q*fh{bjH( zL~|&F!e8UjX4W6UV z2{0OyF{OdsNf|!vGcH`h@6k24Ves!vCF0wnwZP-}QRcsZkyaIW3N2zI5O&k6I}??3 z{ocX?otI34MZu&m&zMUTI`D))O@mD)TM204b#i=dz$0sjC)XI|gl^_+X|x^d*Bi9c zBW&lyf^DC}latlB@>>o54hzQkTH$_bPX6$r`(M}))CQ0umP$ea#1+Cy=b?TJL^&CY zk?#KgkF@WO$FhCnwnN#Zl+mKC>`ftLhU``Lmc2&wK*9bL4sU@~i=;4e2XH3&N_B!^m8u8v8_j$<^Pe`oS8Ny7 ze)KBCA+b}1T2Wq0)~#bc7np^;Sm}D+&;@#Fsphbrvs8^NxI<(lff^le$U`SWBmZWE@e z+*#W?E-GFD^^ EiJGxj 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 Hu-a4abDO-MLZj-O6LteX-+edoq$g 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�*|M`)BX)j+n)^Y6fX(BBX$KXtZA&5F(!2 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�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 YlD?dNJe{3%WEA|_e92gG*~&Ti-#jjvt^fc4 literal 0 HcmV?d00001