From cc3a51ec02797448a39d3cec80fc42c1034eb35e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Nov 2023 11:34:02 +0000 Subject: [PATCH] Bump github.com/gardener/gardener from 1.82.2 to 1.84.0 Bumps [github.com/gardener/gardener](https://github.com/gardener/gardener) from 1.82.2 to 1.84.0. - [Release notes](https://github.com/gardener/gardener/releases) - [Commits](https://github.com/gardener/gardener/compare/v1.82.2...v1.84.0) --- updated-dependencies: - dependency-name: github.com/gardener/gardener dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 13 +- go.sum | 25 +- .../cyphar/filepath-securejoin/.travis.yml | 8 +- .../cyphar/filepath-securejoin/README.md | 20 +- .../cyphar/filepath-securejoin/VERSION | 2 +- .../cyphar/filepath-securejoin/join.go | 25 +- .../cyphar/filepath-securejoin/vendor.conf | 1 - .../extensions/pkg/util/shoot_clients.go | 2 +- .../gardener/hack/.ci/component_descriptor | 20 +- .../gardener/gardener/hack/.ci/doc.go | 0 .../gardener/hack/.ci/prepare_release | 0 .../gardener/hack/.ci/set_dependency_version | 0 .../gardener/hack/LICENSE_BOILERPLATE.txt | 0 .../gardener/hack/add-license-header.sh | 2 - .../gardener/gardener/hack/check-apidiff.sh | 0 .../gardener/gardener/hack/check-charts.sh | 2 +- .../gardener/gardener/hack/check-docforge.sh | 39 - .../gardener/gardener/hack/check-generate.sh | 16 +- .../gardener/gardener/hack/check-imports.sh | 18 + .../gardener/hack/check-license-header.sh | 4 +- .../gardener/hack/check-plutono-dashboards.sh | 0 .../hack/check-skaffold-deps-for-binary.sh | 74 +- .../gardener/hack/check-skaffold-deps.sh | 42 +- .../gardener/gardener/hack/check.sh | 2 +- .../gardener/hack/cherry-pick-pull.sh | 0 .../gardener/gardener/hack/ci-common.sh | 0 .../hack/ci-e2e-kind-ha-multi-zone.sh | 0 .../hack/ci-e2e-kind-ha-single-zone.sh | 0 .../ci-e2e-kind-migration-ha-single-zone.sh | 0 .../gardener/hack/ci-e2e-kind-migration.sh | 0 .../gardener/hack/ci-e2e-kind-operator.sh | 0 .../gardener/hack/ci-e2e-kind-upgrade.sh | 0 .../gardener/gardener/hack/ci-e2e-kind.sh | 0 .../gardener/gardener/hack/clean.sh | 0 .../hack/compare-k8s-admission-plugins.sh | 0 .../gardener/hack/compare-k8s-api-groups.sh | 90 + .../gardener/hack/compare-k8s-controllers.sh | 0 .../hack/compare-k8s-feature-gates.sh | 0 .../gardener/hack/compute-k8s-controllers.sh | 175 ++ .../hack/download_gardener_source_code.sh | 0 .../gardener/gardener/hack/format.sh | 0 .../gardener/gardener/hack/gardener-down.sh | 0 .../gardener/hack/gardener-extensions-down.sh | 0 .../gardener/hack/gardener-extensions-up.sh | 0 .../hack/generate-controller-registration.sh | 0 .../gardener/gardener/hack/generate-crds.sh | 36 +- .../gardener/gardener/hack/generate-groups.sh | 0 .../hack/generate-imagename-constants.sh | 0 .../gardener/hack/generate-internal-groups.sh | 0 .../hack/generate-logcheck-symlinks.sh | 36 + .../gardener/hack/generate-monitoring-docs.sh | 0 .../gardener/hack/generate-parallel.sh | 0 .../gardener/hack/generate-sequential.sh | 0 .../gardener/gardener/hack/generate.sh | 11 +- .../gardener/hack/get-build-ld-flags.sh | 0 .../gardener/gardener/hack/hook-me.sh | 0 .../gardener/gardener/hack/install.sh | 2 +- .../gardener/gardener/hack/kind-down.sh | 0 .../gardener/hack/kind-extensions-up.sh | 0 .../gardener/gardener/hack/kind-up.sh | 0 .../gardener/gardener/hack/prepare-envtest.sh | 0 .../gardener/gardener/hack/start-envtest.sh | 0 .../gardener/hack/test-cover-clean.sh | 0 .../gardener/gardener/hack/test-cover.sh | 2 +- .../gardener/gardener/hack/test-e2e-local.env | 0 .../gardener/gardener/hack/test-e2e-local.sh | 0 .../gardener/hack/test-integration.env | 0 .../gardener/hack/test-integration.sh | 2 +- .../gardener/gardener/hack/test-prometheus.sh | 0 .../github.com/gardener/gardener/hack/test.sh | 2 +- .../gardener/gardener/hack/tools.go | 1 + .../gardener/gardener/hack/tools.mk | 38 +- .../gardener/gardener/hack/update-codegen.sh | 26 +- .../gardener/gardener/hack/update-protobuf.sh | 27 +- .../gardener/hack/update-skaffold-deps.sh | 20 + ....go => defaults_adminkubeconfigrequest.go} | 6 +- .../gardener/gardener/pkg/apis/core/types.go | 4 +- .../pkg/apis/core/types_cloudprofile.go | 19 + .../apis/core/types_controllerregistration.go | 2 +- .../gardener/pkg/apis/core/types_seed.go | 24 - .../pkg/apis/core/v1beta1/defaults.go | 8 +- .../core/v1beta1/defaults_cloudprofile.go | 8 + .../pkg/apis/core/v1beta1/generated.pb.go | 2038 +++++++---------- .../pkg/apis/core/v1beta1/generated.proto | 37 +- .../pkg/apis/core/v1beta1/helper/condition.go | 20 +- .../pkg/apis/core/v1beta1/helper/helper.go | 317 ++- .../apis/core/v1beta1/types_cloudprofile.go | 20 + .../pkg/apis/core/v1beta1/types_common.go | 4 +- .../v1beta1/types_controllerregistration.go | 2 +- .../pkg/apis/core/v1beta1/types_seed.go | 31 +- .../core/v1beta1/zz_generated.conversion.go | 66 +- .../core/v1beta1/zz_generated.deepcopy.go | 47 +- .../core/v1beta1/zz_generated.defaults.go | 1 + .../pkg/apis/core/zz_generated.deepcopy.go | 47 +- .../v1alpha1/types_operatingsystemconfig.go | 38 +- .../v1alpha1/zz_generated.deepcopy.go | 28 +- .../pkg/apis/operator/v1alpha1/types.go | 2 +- .../pkg/extensions/customresources.go | 2 +- .../pkg/gardenlet/apis/config/types.go | 2 + .../gardenlet/apis/config/v1alpha1/types.go | 3 + .../v1alpha1/zz_generated.conversion.go | 2 + .../config/v1alpha1/zz_generated.deepcopy.go | 5 + .../apis/config/zz_generated.deepcopy.go | 5 + .../gardener/pkg/utils/errors/unwrap.go | 4 +- .../gardener/pkg/utils/gardener/shoot.go | 15 + .../pkg/utils/kubernetes/controllers.go | 118 + .../pkg/utils/kubernetes/health/daemonset.go | 2 +- .../builder/managedresources.go | 43 +- .../gardener/pkg/utils/secrets/vpn_tlsauth.go | 1 - .../gardener/pkg/utils/version/version.go | 38 + .../gardener/test/framework/common.go | 4 +- .../test/framework/commonframework.go | 1 - .../gardener/test/framework/errors.go | 4 +- .../gardener/test/framework/k8s_utils.go | 17 +- .../gardener/test/framework/test_options.go | 1 - .../gardener/test/framework/worker_utils.go | 8 +- .../test/utils/access/serviceaccount.go | 2 +- .../github.com/google/go-cmp/cmp/compare.go | 38 +- .../cmp/{export_unsafe.go => export.go} | 5 - .../google/go-cmp/cmp/export_panic.go | 16 - .../value/{pointer_unsafe.go => pointer.go} | 3 - .../cmp/internal/value/pointer_purego.go | 34 - .../github.com/google/go-cmp/cmp/options.go | 84 +- vendor/github.com/google/go-cmp/cmp/path.go | 46 +- .../google/go-cmp/cmp/report_reflect.go | 2 +- .../github.com/hashicorp/errwrap/errwrap.go | 9 + .../ironcore-dev/vgopath/.gitignore | 33 + .../ironcore-dev/vgopath/.golangci.yaml | 20 + .../ironcore-dev/vgopath/CODEOWNERS | 2 + .../ironcore-dev/vgopath/CODE_OF_CONDUCT.md | 1 + .../github.com/ironcore-dev/vgopath/LICENSE | 201 ++ .../github.com/ironcore-dev/vgopath/Makefile | 105 + .../github.com/ironcore-dev/vgopath/README.md | 36 + .../vgopath/internal/cmd/version/version.go | 40 + .../vgopath/internal/cmd/vgopath/exec/exec.go | 109 + .../vgopath/internal/cmd/vgopath/vgopath.go | 63 + .../vgopath/internal/link/link.go | 284 +++ .../vgopath/internal/module/module.go | 184 ++ .../vgopath/internal/version/version.go | 38 + .../github.com/ironcore-dev/vgopath/main.go | 27 + vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md | 6 + vendor/github.com/onsi/ginkgo/v2/core_dsl.go | 94 +- .../onsi/ginkgo/v2/internal/global/init.go | 11 + .../onsi/ginkgo/v2/internal/node.go | 6 + .../onsi/ginkgo/v2/internal/suite.go | 24 + .../onsi/ginkgo/v2/types/version.go | 2 +- vendor/github.com/onsi/gomega/CHANGELOG.md | 29 + vendor/github.com/onsi/gomega/gomega_dsl.go | 10 +- vendor/github.com/onsi/gomega/matchers.go | 39 +- .../gomega/matchers/have_http_body_matcher.go | 9 +- .../gomega/matchers/match_error_matcher.go | 25 +- vendor/modules.txt | 23 +- 152 files changed, 3528 insertions(+), 1959 deletions(-) delete mode 100644 vendor/github.com/cyphar/filepath-securejoin/vendor.conf mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/.ci/component_descriptor mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/.ci/doc.go mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/.ci/prepare_release mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/.ci/set_dependency_version mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/LICENSE_BOILERPLATE.txt mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/add-license-header.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/check-apidiff.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/check-charts.sh delete mode 100755 vendor/github.com/gardener/gardener/hack/check-docforge.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/check-generate.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/check-imports.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/check-license-header.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/check-plutono-dashboards.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/check-skaffold-deps-for-binary.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/check-skaffold-deps.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/check.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/cherry-pick-pull.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/ci-common.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/ci-e2e-kind-ha-multi-zone.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/ci-e2e-kind-ha-single-zone.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/ci-e2e-kind-migration-ha-single-zone.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/ci-e2e-kind-migration.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/ci-e2e-kind-operator.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/ci-e2e-kind-upgrade.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/ci-e2e-kind.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/clean.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/compare-k8s-admission-plugins.sh create mode 100644 vendor/github.com/gardener/gardener/hack/compare-k8s-api-groups.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/compare-k8s-controllers.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/compare-k8s-feature-gates.sh create mode 100644 vendor/github.com/gardener/gardener/hack/compute-k8s-controllers.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/download_gardener_source_code.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/format.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/gardener-down.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/gardener-extensions-down.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/gardener-extensions-up.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/generate-controller-registration.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/generate-crds.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/generate-groups.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/generate-imagename-constants.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/generate-internal-groups.sh create mode 100644 vendor/github.com/gardener/gardener/hack/generate-logcheck-symlinks.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/generate-monitoring-docs.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/generate-parallel.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/generate-sequential.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/generate.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/get-build-ld-flags.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/hook-me.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/install.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/kind-down.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/kind-extensions-up.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/kind-up.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/prepare-envtest.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/start-envtest.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/test-cover-clean.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/test-cover.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/test-e2e-local.env mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/test-e2e-local.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/test-integration.env mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/test-integration.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/test-prometheus.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/test.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/tools.go mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/tools.mk mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/update-codegen.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/update-protobuf.sh create mode 100644 vendor/github.com/gardener/gardener/hack/update-skaffold-deps.sh rename vendor/github.com/gardener/gardener/pkg/apis/authentication/v1alpha1/{defaults.go => defaults_adminkubeconfigrequest.go} (88%) create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/kubernetes/controllers.go rename vendor/github.com/google/go-cmp/cmp/{export_unsafe.go => export.go} (94%) delete mode 100644 vendor/github.com/google/go-cmp/cmp/export_panic.go rename vendor/github.com/google/go-cmp/cmp/internal/value/{pointer_unsafe.go => pointer.go} (95%) delete mode 100644 vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go create mode 100644 vendor/github.com/ironcore-dev/vgopath/.gitignore create mode 100644 vendor/github.com/ironcore-dev/vgopath/.golangci.yaml create mode 100644 vendor/github.com/ironcore-dev/vgopath/CODEOWNERS create mode 100644 vendor/github.com/ironcore-dev/vgopath/CODE_OF_CONDUCT.md create mode 100644 vendor/github.com/ironcore-dev/vgopath/LICENSE create mode 100644 vendor/github.com/ironcore-dev/vgopath/Makefile create mode 100644 vendor/github.com/ironcore-dev/vgopath/README.md create mode 100644 vendor/github.com/ironcore-dev/vgopath/internal/cmd/version/version.go create mode 100644 vendor/github.com/ironcore-dev/vgopath/internal/cmd/vgopath/exec/exec.go create mode 100644 vendor/github.com/ironcore-dev/vgopath/internal/cmd/vgopath/vgopath.go create mode 100644 vendor/github.com/ironcore-dev/vgopath/internal/link/link.go create mode 100644 vendor/github.com/ironcore-dev/vgopath/internal/module/module.go create mode 100644 vendor/github.com/ironcore-dev/vgopath/internal/version/version.go create mode 100644 vendor/github.com/ironcore-dev/vgopath/main.go diff --git a/go.mod b/go.mod index 7eb4c1c1b..590f83546 100644 --- a/go.mod +++ b/go.mod @@ -4,10 +4,10 @@ go 1.21 require ( github.com/ahmetb/gen-crd-api-reference-docs v0.3.0 - github.com/gardener/gardener v1.82.2 + github.com/gardener/gardener v1.84.0 github.com/go-logr/logr v1.2.4 - github.com/onsi/ginkgo/v2 v2.12.1 - github.com/onsi/gomega v1.27.10 + github.com/onsi/ginkgo/v2 v2.13.0 + github.com/onsi/gomega v1.29.0 github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 go.uber.org/mock v0.2.0 @@ -34,7 +34,7 @@ require ( github.com/bronze1man/yaml2json v0.0.0-20211227013850-8972abeaea25 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect - github.com/cyphar/filepath-securejoin v0.2.2 // indirect + github.com/cyphar/filepath-securejoin v0.2.3 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect @@ -57,15 +57,16 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/gnostic-models v0.6.8 // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect github.com/google/uuid v1.3.0 // indirect - github.com/hashicorp/errwrap v1.0.0 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/huandu/xstrings v1.3.2 // indirect github.com/imdario/mergo v0.3.12 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/ironcore-dev/vgopath v0.1.3 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kubernetes-csi/external-snapshotter/client/v4 v4.2.0 // indirect diff --git a/go.sum b/go.sum index e22bc5c91..cdd705c24 100644 --- a/go.sum +++ b/go.sum @@ -98,8 +98,8 @@ github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8 github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.2 h1:jCwT2GTP+PY5nBz3c/YL5PAIbusElVrPujOBSCj8xRg= -github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= +github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= +github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= 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= @@ -136,8 +136,8 @@ github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4 github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gardener/etcd-druid v0.20.1 h1:o6F4higujfg7dvBXvk+yPb86+3t2+XLE0Hmw5W1kXtM= github.com/gardener/etcd-druid v0.20.1/go.mod h1:1tAeHycB0Vb2GfCX6sUCc6V6frGrCQI//quVg4K3GNA= -github.com/gardener/gardener v1.82.2 h1:0+GB58jYQ6ONe/jQgCqZ017vaM5TPD8yu50vC/XCra4= -github.com/gardener/gardener v1.82.2/go.mod h1:ZdLfUC8Ia/Qo+e13FspxHsMJZ9c3DTek6Iy0ff0QQzc= +github.com/gardener/gardener v1.84.0 h1:sfW8RljFT6vaShlHV04RW/99GkTdyiwfsoUDEehVNVE= +github.com/gardener/gardener v1.84.0/go.mod h1:3XZ+Yn5iHl0acqUIVZ0K78p1OYWp52sRBQOJW6sCRR8= github.com/gardener/hvpa-controller/api v0.5.0 h1:f4F3O7YUrenwh4S3TgPREPiB287JjjUiUL18OqPLyAA= github.com/gardener/hvpa-controller/api v0.5.0/go.mod h1:QQl3ELkCaki+8RhXl0FZMfvnm0WCGwGJlGmrxJj6lvM= github.com/gardener/machine-controller-manager v0.50.0 h1:3dcQjzueFU1TGgprV00adjb3OCR99myTBx8DQGxywks= @@ -234,8 +234,8 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 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.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 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= @@ -269,8 +269,9 @@ github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8 github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -287,6 +288,8 @@ github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/ironcore-dev/vgopath v0.1.3 h1:/g3QJ29VrUkYEy52kcUhtvQ3mxfbMIlI1uvEbmt6S4E= +github.com/ironcore-dev/vgopath v0.1.3/go.mod h1:edfsCmU2M4r2N+t4RebSluq//tF3vzogyiDDhcf7MXs= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= 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= @@ -360,12 +363,12 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.12.1 h1:uHNEO1RP2SpuZApSkel9nEh1/Mu+hmQe7Q+Pepg5OYA= -github.com/onsi/ginkgo/v2 v2.12.1/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= +github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= +github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= +github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/vendor/github.com/cyphar/filepath-securejoin/.travis.yml b/vendor/github.com/cyphar/filepath-securejoin/.travis.yml index 3938f3834..b94ff8cf9 100644 --- a/vendor/github.com/cyphar/filepath-securejoin/.travis.yml +++ b/vendor/github.com/cyphar/filepath-securejoin/.travis.yml @@ -4,10 +4,12 @@ language: go go: - - 1.7.x - - 1.8.x + - 1.13.x + - 1.16.x - tip - +arch: + - AMD64 + - ppc64le os: - linux - osx diff --git a/vendor/github.com/cyphar/filepath-securejoin/README.md b/vendor/github.com/cyphar/filepath-securejoin/README.md index 49b2baa9f..3624617c8 100644 --- a/vendor/github.com/cyphar/filepath-securejoin/README.md +++ b/vendor/github.com/cyphar/filepath-securejoin/README.md @@ -7,6 +7,19 @@ standard library][go#20126]. The purpose of this function is to be a "secure" alternative to `filepath.Join`, and in particular it provides certain guarantees that are not provided by `filepath.Join`. +> **NOTE**: This code is *only* safe if you are not at risk of other processes +> modifying path components after you've used `SecureJoin`. If it is possible +> for a malicious process to modify path components of the resolved path, then +> you will be vulnerable to some fairly trivial TOCTOU race conditions. [There +> are some Linux kernel patches I'm working on which might allow for a better +> solution.][lwn-obeneath] +> +> In addition, with a slightly modified API it might be possible to use +> `O_PATH` and verify that the opened path is actually the resolved one -- but +> I have not done that yet. I might add it in the future as a helper function +> to help users verify the path (we can't just return `/proc/self/fd/` +> because that doesn't always work transparently for all users). + This is the function prototype: ```go @@ -16,8 +29,8 @@ func SecureJoin(root, unsafePath string) (string, error) This library **guarantees** the following: * If no error is set, the resulting string **must** be a child path of - `SecureJoin` and will not contain any symlink path components (they will all - be expanded). + `root` and will not contain any symlink path components (they will all be + expanded). * When expanding symlinks, all symlink path components **must** be resolved relative to the provided root. In particular, this can be considered a @@ -25,7 +38,7 @@ This library **guarantees** the following: these symlinks will **not** be expanded lexically (`filepath.Clean` is not called on the input before processing). -* Non-existant path components are unaffected by `SecureJoin` (similar to +* Non-existent path components are unaffected by `SecureJoin` (similar to `filepath.EvalSymlinks`'s semantics). * The returned path will always be `filepath.Clean`ed and thus not contain any @@ -57,6 +70,7 @@ func SecureJoin(root, unsafePath string) (string, error) { } ``` +[lwn-obeneath]: https://lwn.net/Articles/767547/ [go#20126]: https://github.com/golang/go/issues/20126 ### License ### diff --git a/vendor/github.com/cyphar/filepath-securejoin/VERSION b/vendor/github.com/cyphar/filepath-securejoin/VERSION index ee1372d33..717903969 100644 --- a/vendor/github.com/cyphar/filepath-securejoin/VERSION +++ b/vendor/github.com/cyphar/filepath-securejoin/VERSION @@ -1 +1 @@ -0.2.2 +0.2.3 diff --git a/vendor/github.com/cyphar/filepath-securejoin/join.go b/vendor/github.com/cyphar/filepath-securejoin/join.go index c4ca3d713..7dd08dbbd 100644 --- a/vendor/github.com/cyphar/filepath-securejoin/join.go +++ b/vendor/github.com/cyphar/filepath-securejoin/join.go @@ -12,39 +12,20 @@ package securejoin import ( "bytes" + "errors" "os" "path/filepath" "strings" "syscall" - - "github.com/pkg/errors" ) -// ErrSymlinkLoop is returned by SecureJoinVFS when too many symlinks have been -// evaluated in attempting to securely join the two given paths. -var ErrSymlinkLoop = errors.Wrap(syscall.ELOOP, "secure join") - // IsNotExist tells you if err is an error that implies that either the path // accessed does not exist (or path components don't exist). This is // effectively a more broad version of os.IsNotExist. func IsNotExist(err error) bool { - // If it's a bone-fide ENOENT just bail. - if os.IsNotExist(errors.Cause(err)) { - return true - } - // Check that it's not actually an ENOTDIR, which in some cases is a more // convoluted case of ENOENT (usually involving weird paths). - var errno error - switch err := errors.Cause(err).(type) { - case *os.PathError: - errno = err.Err - case *os.LinkError: - errno = err.Err - case *os.SyscallError: - errno = err.Err - } - return errno == syscall.ENOTDIR || errno == syscall.ENOENT + return errors.Is(err, os.ErrNotExist) || errors.Is(err, syscall.ENOTDIR) || errors.Is(err, syscall.ENOENT) } // SecureJoinVFS joins the two given path components (similar to Join) except @@ -68,7 +49,7 @@ func SecureJoinVFS(root, unsafePath string, vfs VFS) (string, error) { n := 0 for unsafePath != "" { if n > 255 { - return "", ErrSymlinkLoop + return "", &os.PathError{Op: "SecureJoin", Path: root + "/" + unsafePath, Err: syscall.ELOOP} } // Next path component, p. diff --git a/vendor/github.com/cyphar/filepath-securejoin/vendor.conf b/vendor/github.com/cyphar/filepath-securejoin/vendor.conf deleted file mode 100644 index 66bb574b9..000000000 --- a/vendor/github.com/cyphar/filepath-securejoin/vendor.conf +++ /dev/null @@ -1 +0,0 @@ -github.com/pkg/errors v0.8.0 diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/util/shoot_clients.go b/vendor/github.com/gardener/gardener/extensions/pkg/util/shoot_clients.go index 9570a197b..cb3c8ebbe 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/util/shoot_clients.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/util/shoot_clients.go @@ -111,7 +111,7 @@ func NewClientForShoot(ctx context.Context, c client.Client, namespace string, o // TODO(ary1992): The new rest mapper implementation doesn't return a NoKindMatchError but a ErrGroupDiscoveryFailed // when an API GroupVersion is not present in the cluster. Remove the old restmapper usage once the upstream issue // (https://github.com/kubernetes-sigs/controller-runtime/pull/2425) is fixed. - mapper, err := thirdpartyapiutil.NewDynamicRESTMapper(shootRESTConfig) + mapper, err := thirdpartyapiutil.NewDynamicRESTMapper(shootRESTConfig, thirdpartyapiutil.WithLazyDiscovery) if err != nil { return nil, nil, fmt.Errorf("failed to create new DynamicRESTMapper: %w", err) } diff --git a/vendor/github.com/gardener/gardener/hack/.ci/component_descriptor b/vendor/github.com/gardener/gardener/hack/.ci/component_descriptor old mode 100755 new mode 100644 index 0a4ac1715..acc328c8e --- a/vendor/github.com/gardener/gardener/hack/.ci/component_descriptor +++ b/vendor/github.com/gardener/gardener/hack/.ci/component_descriptor @@ -4,10 +4,7 @@ # # COMPONENT_PREFIXES: Set the image prefix that should be used to # determine if an image is defined by another component. -# Defaults to "eu.gcr.io/gardener-project/gardener" -# -# GENERIC_DEPENDENCIES: Set images that are generic dependencies with no specific tag. -# Defaults to "hyperkube,kube-apiserver,kube-controller-manager,kube-scheduler,kube-proxy" +# Defaults to "eu.gcr.io/gardener-project/gardener,europe-docker.pkg.dev/gardener-project" # # COMPONENT_CLI_ARGS: Set all component-cli arguments. # This should be used with care as all defaults are overwritten. @@ -58,10 +55,7 @@ fi if [[ ! -z "$image_vector_path" ]]; then # default environment variables if [[ -z "${COMPONENT_PREFIXES}" ]]; then - COMPONENT_PREFIXES="eu.gcr.io/gardener-project/gardener" - fi - if [[ -z "${GENERIC_DEPENDENCIES}" ]]; then - GENERIC_DEPENDENCIES="hyperkube,kube-apiserver,kube-controller-manager,kube-scheduler,kube-proxy" + COMPONENT_PREFIXES="eu.gcr.io/gardener-project/gardener,europe-docker.pkg.dev/gardener-project" fi if [[ -z "${COMPONENT_CLI_ARGS}" ]]; then @@ -69,7 +63,6 @@ if [[ ! -z "$image_vector_path" ]]; then --comp-desc ${BASE_DEFINITION_PATH} \ --image-vector "$image_vector_path" \ --component-prefixes "${COMPONENT_PREFIXES}" \ - --generic-dependencies "${GENERIC_DEPENDENCIES}" \ " fi @@ -96,14 +89,7 @@ if [[ -d "$repo_root_dir/charts/" ]]; then REPOSITORY=${imageAndTag[0]} TAG=${imageAndTag[1]} - gardener="eu.gcr.io/gardener-project/gardener" - if [[ "$NAME" == "hyperkube" ]]; then - ${ADD_DEPENDENCIES_CMD} --generic-dependencies "{\"name\": \"$NAME\", \"version\": \"$TAG\"}" - elif [[ $REPOSITORY =~ "eu.gcr.io/gardener-project/gardener"* ]]; then - ${ADD_DEPENDENCIES_CMD} --generic-dependencies "{\"name\": \"$NAME\", \"version\": \"$TAG\"}" - else - ${ADD_DEPENDENCIES_CMD} --container-image-dependencies "{\"name\": \"${NAME}\", \"image_reference\": \"${REPOSITORY}:${TAG}\", \"version\": \"$TAG\"}" - fi + ${ADD_DEPENDENCIES_CMD} --container-image-dependencies "{\"name\": \"${NAME}\", \"image_reference\": \"${REPOSITORY}:${TAG}\", \"version\": \"$TAG\"}" done < <(echo "$outputFile") done fi diff --git a/vendor/github.com/gardener/gardener/hack/.ci/doc.go b/vendor/github.com/gardener/gardener/hack/.ci/doc.go old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/.ci/prepare_release b/vendor/github.com/gardener/gardener/hack/.ci/prepare_release old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/.ci/set_dependency_version b/vendor/github.com/gardener/gardener/hack/.ci/set_dependency_version old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/LICENSE_BOILERPLATE.txt b/vendor/github.com/gardener/gardener/hack/LICENSE_BOILERPLATE.txt old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/add-license-header.sh b/vendor/github.com/gardener/gardener/hack/add-license-header.sh old mode 100755 new mode 100644 index dd5b9ab08..28f2b8ed9 --- a/vendor/github.com/gardener/gardener/hack/add-license-header.sh +++ b/vendor/github.com/gardener/gardener/hack/add-license-header.sh @@ -24,12 +24,10 @@ addlicense \ -ignore ".idea/**" \ -ignore ".vscode/**" \ -ignore "dev/**" \ - -ignore "vendor/**" \ -ignore "**/*.md" \ -ignore "**/*.html" \ -ignore "**/*.yaml" \ -ignore "**/Dockerfile" \ - -ignore "hack/tools/gomegacheck/**" \ -ignore "pkg/component/**/*.sh" \ -ignore "third_party/gopkg.in/yaml.v2/**" \ . diff --git a/vendor/github.com/gardener/gardener/hack/check-apidiff.sh b/vendor/github.com/gardener/gardener/hack/check-apidiff.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/check-charts.sh b/vendor/github.com/gardener/gardener/hack/check-charts.sh old mode 100755 new mode 100644 index 8371b5aae..499990cd1 --- a/vendor/github.com/gardener/gardener/hack/check-charts.sh +++ b/vendor/github.com/gardener/gardener/hack/check-charts.sh @@ -29,7 +29,7 @@ if [[ -d "$1" ]]; then echo "Checking whether all charts can be rendered" for chart_dir in $(find charts -type d -exec test -f '{}'/Chart.yaml \; -print -prune | sort); do [ -f "$chart_dir/values-test.yaml" ] && values_files="-f $chart_dir/values-test.yaml" || unset values_files - helm template $values_files "$chart_dir" 3>&1 1>/dev/null 2>&3 | (grep -v "found symbolic link in path" || true) + helm template $values_files "$chart_dir" > /dev/null 2> >(sed '/found symbolic link in path/d' >&2) done fi diff --git a/vendor/github.com/gardener/gardener/hack/check-docforge.sh b/vendor/github.com/gardener/gardener/hack/check-docforge.sh deleted file mode 100755 index 8186f74a8..000000000 --- a/vendor/github.com/gardener/gardener/hack/check-docforge.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright 2021 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -# -# 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. - -set -e - -docCommitHash="fa2e9f84851be81e85668986675db235bb43a6b5" - -echo "> Check Docforge Manifest" -repoPath=${1-"$(readlink -f "$(dirname "${0}")/..")"} -manifestPath=${2-"${repoPath}/.docforge/manifest.yaml"} -diffDirs=${3-".docforge/;docs/"} -repoName=${4-"gardener"} -useToken=${5-false} - -tmpDir=$(mktemp -d) -function cleanup { - rm -rf "$tmpDir" -} -trap cleanup EXIT ERR INT TERM - -curl https://raw.githubusercontent.com/gardener/documentation/${docCommitHash}/.ci/check-manifest --output "${tmpDir}/check-manifest-script.sh" && chmod +x "${tmpDir}/check-manifest-script.sh" -curl https://raw.githubusercontent.com/gardener/documentation/${docCommitHash}/.ci/check-manifest-config --output "${tmpDir}/manifest-config" -scriptPath="${tmpDir}/check-manifest-script.sh" -configPath="${tmpDir}/manifest-config" - -${scriptPath} --repo-path "${repoPath}" --repo-name "${repoName}" --use-token "${useToken}" --manifest-path "${manifestPath}" --diff-dirs "${diffDirs}" --config-path "${configPath}" diff --git a/vendor/github.com/gardener/gardener/hack/check-generate.sh b/vendor/github.com/gardener/gardener/hack/check-generate.sh old mode 100755 new mode 100644 index 59679519f..c966f7855 --- a/vendor/github.com/gardener/gardener/hack/check-generate.sh +++ b/vendor/github.com/gardener/gardener/hack/check-generate.sh @@ -16,7 +16,7 @@ set -e -echo "> Generate / Vendor Check" +echo "> Generate" makefile="$1/Makefile" check_branch="__check" @@ -24,14 +24,13 @@ initialized_git=false stashed=false checked_out=false generated=false -vendored=false function delete-check-branch { git rev-parse --verify "$check_branch" &>/dev/null && git branch -q -D "$check_branch" || : } function cleanup { - if [[ "$generated" == true ]] || [[ "$vendored" == true ]]; then + if [[ "$generated" == true ]]; then if ! clean_err="$(make -f "$makefile" clean && git reset --hard -q && git clean -qdf)"; then echo "Could not clean: $clean_err" fi @@ -107,20 +106,19 @@ if which git &>/dev/null; then exit 1 fi - echo ">> make revendor" - vendored=true - if ! out=$(make -f "$makefile" revendor 2>&1); then - echo "Error during calling make revendor: $out" + echo ">> make tidy" + if ! out=$(make -f "$makefile" tidy 2>&1); then + echo "Error during calling make tidy: $out" exit 1 fi new_status="$(git status -s)" if [[ "$old_status" != "$new_status" ]]; then - echo "make revendor needs to be run:" + echo "make tidy needs to be run:" echo "$new_status" exit 1 fi else - echo "No git detected, cannot run vendor check" + echo "No git detected, cannot run make check-generate" fi exit 0 diff --git a/vendor/github.com/gardener/gardener/hack/check-imports.sh b/vendor/github.com/gardener/gardener/hack/check-imports.sh old mode 100755 new mode 100644 index c42828a7c..2ea80cd25 --- a/vendor/github.com/gardener/gardener/hack/check-imports.sh +++ b/vendor/github.com/gardener/gardener/hack/check-imports.sh @@ -31,6 +31,24 @@ echo "> Check Imports" this_module=$(go list -m) +SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +VGOPATH="$VGOPATH" + +# Ensure that if GOPATH is set, the GOPATH/{bin,pkg} directory exists. This seems to be not always +# the case in certain environments like Prow. As we will create a symlink against the bin folder we +# need to make sure that the bin directory is present in the GOPATH. +if [ -n "$GOPATH" ] && [ ! -d "$GOPATH/bin" ]; then mkdir -p "$GOPATH/bin"; fi +if [ -n "$GOPATH" ] && [ ! -d "$GOPATH/pkg" ]; then mkdir -p "$GOPATH/pkg"; fi + +VIRTUAL_GOPATH="$(mktemp -d)" +trap 'rm -rf "$VIRTUAL_GOPATH"' EXIT + +# Setup virtual GOPATH so the codegen tools work as expected. +(cd "$SCRIPT_DIR/.."; go mod download && "$VGOPATH" -o "$VIRTUAL_GOPATH") + +export GOROOT="${GOROOT:-"$(go env GOROOT)"}" +export GOPATH="$VIRTUAL_GOPATH" + # We need to explicitly pass GO111MODULE=off to import-boss as it is significantly slower otherwise, # see https://github.com/kubernetes/code-generator/issues/100. export GO111MODULE=off diff --git a/vendor/github.com/gardener/gardener/hack/check-license-header.sh b/vendor/github.com/gardener/gardener/hack/check-license-header.sh old mode 100755 new mode 100644 index 84e3fb3cd..26724f582 --- a/vendor/github.com/gardener/gardener/hack/check-license-header.sh +++ b/vendor/github.com/gardener/gardener/hack/check-license-header.sh @@ -22,13 +22,11 @@ missing_license_header_files="$(addlicense \ -ignore ".idea/**" \ -ignore ".vscode/**" \ -ignore "dev/**" \ - -ignore "vendor/**" \ -ignore "**/*.md" \ -ignore "**/*.html" \ -ignore "**/*.yaml" \ -ignore "**/Dockerfile" \ - -ignore "hack/tools/gomegacheck/**" \ - -ignore "pkg/component/**/*.sh" \ + -ignore "pkg/**/*.sh" \ -ignore "third_party/gopkg.in/yaml.v2/**" \ .)" || true diff --git a/vendor/github.com/gardener/gardener/hack/check-plutono-dashboards.sh b/vendor/github.com/gardener/gardener/hack/check-plutono-dashboards.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/check-skaffold-deps-for-binary.sh b/vendor/github.com/gardener/gardener/hack/check-skaffold-deps-for-binary.sh old mode 100755 new mode 100644 index 5b24d93c0..eb8b75363 --- a/vendor/github.com/gardener/gardener/hack/check-skaffold-deps-for-binary.sh +++ b/vendor/github.com/gardener/gardener/hack/check-skaffold-deps-for-binary.sh @@ -21,7 +21,10 @@ binary_name="" skaffold_config_name="" parse_flags() { - while test $# -gt 0; do + operation="$1" + shift + + while test $# -gt 1; do case "$1" in --skaffold-file) shift; skaffold_file="$1" @@ -57,7 +60,7 @@ path_actual_dependencies="${out_dir}/actual-$skaffold_file-deps-$binary_name.txt echo "$skaffold_yaml" |\ yq eval "select(.metadata.name == \"$skaffold_config_name\") | .build.artifacts[] | select(.ko.main == \"./cmd/$binary_name\") | .ko.dependencies.paths[]?" - |\ - sort |\ + sort -f |\ uniq > "$path_current_skaffold_dependencies" module_name=$(go list -m) @@ -65,28 +68,55 @@ module_prefix="$module_name/" go list -f '{{ join .Deps "\n" }}' "./cmd/$binary_name" |\ grep "$module_prefix" |\ sed "s@$module_prefix@@g" |\ - sort |\ + sort -f |\ uniq > "$path_actual_dependencies" -# always add vendor directory and VERSION file -echo "vendor" >> "$path_actual_dependencies" +# always add VERSION file echo "VERSION" >> "$path_actual_dependencies" # sort dependencies -sort -o $path_current_skaffold_dependencies{,} -sort -o $path_actual_dependencies{,} - -echo -n ">> Checking defined dependencies in Skaffold config '$skaffold_config_name' for '$binary_name' in '$skaffold_file'..." -if ! diff="$(diff "$path_current_skaffold_dependencies" "$path_actual_dependencies")"; then - echo - echo ">>> The following actual dependencies are missing in $skaffold_file (need to be added):" - echo "$diff" | grep '>' | awk '{print $2}' - echo - echo ">>> The following dependencies defined in $skaffold_file are not needed actually (need to be removed):" - echo "$diff" | grep '<' | awk '{print $2}' - echo - - exit 1 -else - echo " success." -fi +sort -fo "$path_current_skaffold_dependencies"{,} +sort -fo "$path_actual_dependencies"{,} + +case "$operation" in + check) + echo -n ">> Checking defined dependencies in Skaffold config '$skaffold_config_name' for '$binary_name' in '$skaffold_file'..." + if ! diff="$(diff "$path_current_skaffold_dependencies" "$path_actual_dependencies")"; then + echo + echo ">>> The following actual dependencies are missing (need to be added):" + echo "$diff" | grep '>' | awk '{print $2}' + echo + echo ">>> The following dependencies are not needed actually (need to be removed):" + echo "$diff" | grep '<' | awk '{print $2}' + echo + echo ">>> Run './hack/update-skaffold-deps.sh' to fix." + + exit 1 + else + echo " success." + fi + ;; + update) + echo -n ">> Updating dependencies in Skaffold config '$skaffold_config_name' for '$binary_name' in '$skaffold_file'..." + + yq eval -i "select(.metadata.name == \"$skaffold_config_name\") |= .build.artifacts[] |= select(.ko.main == \"./cmd/$binary_name\") |= .ko.dependencies.paths |= [$(cat "$path_actual_dependencies" | sed -e 's/^/"/' -e 's/$/"/' | tr '\n' ',' | sed 's/,$//')]" "$skaffold_file" + + if ! diff="$(diff "$path_current_skaffold_dependencies" "$path_actual_dependencies")"; then + echo + echo ">>> Added the following dependencies:" + echo "$diff" | grep '>' | awk '{print $2}' + echo + echo ">>> Removed the following dependencies:" + echo "$diff" | grep '<' | awk '{print $2}' + echo + + exit 1 + else + echo " already up to date." + fi + ;; + *) + echo "Unknown operation: $operation" + exit 1 + ;; +esac diff --git a/vendor/github.com/gardener/gardener/hack/check-skaffold-deps.sh b/vendor/github.com/gardener/gardener/hack/check-skaffold-deps.sh old mode 100755 new mode 100644 index 03411ada4..48cf864ec --- a/vendor/github.com/gardener/gardener/hack/check-skaffold-deps.sh +++ b/vendor/github.com/gardener/gardener/hack/check-skaffold-deps.sh @@ -16,34 +16,36 @@ set -e -echo "> Check Skaffold Dependencies" +operation="${1:-check}" -check_successful=true +echo "> ${operation^} Skaffold Dependencies" + +success=true repo_root="$(git rev-parse --show-toplevel)" -function check() { - if ! $repo_root/hack/check-skaffold-deps-for-binary.sh --skaffold-file $1 --binary $2 --skaffold-config $3; then - check_successful=false +function run() { + if ! "$repo_root"/hack/check-skaffold-deps-for-binary.sh "$operation" --skaffold-file "$1" --binary "$2" --skaffold-config "$3"; then + success=false fi } # skaffold.yaml -check "skaffold.yaml" "gardener-admission-controller" "controlplane" -check "skaffold.yaml" "gardener-apiserver" "controlplane" -check "skaffold.yaml" "gardener-controller-manager" "controlplane" -check "skaffold.yaml" "gardener-extension-provider-local" "provider-local" -check "skaffold.yaml" "gardener-resource-manager" "gardenlet" -check "skaffold.yaml" "gardener-scheduler" "controlplane" -check "skaffold.yaml" "gardenlet" "gardenlet" +run "skaffold.yaml" "gardener-admission-controller" "controlplane" +run "skaffold.yaml" "gardener-apiserver" "controlplane" +run "skaffold.yaml" "gardener-controller-manager" "controlplane" +run "skaffold.yaml" "gardener-extension-provider-local" "provider-local" +run "skaffold.yaml" "gardener-resource-manager" "gardenlet" +run "skaffold.yaml" "gardener-scheduler" "controlplane" +run "skaffold.yaml" "gardenlet" "gardenlet" # skaffold-operator.yaml -check "skaffold-operator.yaml" "gardener-operator" "gardener-operator" -check "skaffold-operator.yaml" "gardener-resource-manager" "gardener-operator" -check "skaffold-operator.yaml" "gardener-admission-controller" "gardener-operator" -check "skaffold-operator.yaml" "gardener-apiserver" "gardener-operator" -check "skaffold-operator.yaml" "gardener-controller-manager" "gardener-operator" -check "skaffold-operator.yaml" "gardener-scheduler" "gardener-operator" - -if [ "$check_successful" = false ] ; then +run "skaffold-operator.yaml" "gardener-operator" "gardener-operator" +run "skaffold-operator.yaml" "gardener-resource-manager" "gardener-operator" +run "skaffold-operator.yaml" "gardener-admission-controller" "gardener-operator" +run "skaffold-operator.yaml" "gardener-apiserver" "gardener-operator" +run "skaffold-operator.yaml" "gardener-controller-manager" "gardener-operator" +run "skaffold-operator.yaml" "gardener-scheduler" "gardener-operator" + +if ! $success ; then exit 1 fi diff --git a/vendor/github.com/gardener/gardener/hack/check.sh b/vendor/github.com/gardener/gardener/hack/check.sh old mode 100755 new mode 100644 index 2753e3711..2925af165 --- a/vendor/github.com/gardener/gardener/hack/check.sh +++ b/vendor/github.com/gardener/gardener/hack/check.sh @@ -34,7 +34,7 @@ golangci-lint run $GOLANGCI_LINT_CONFIG_FILE --timeout 10m $@ echo "Executing gofmt/goimports" folders=() -for f in $@; do +for f in "$@"; do folders+=( "$(echo $f | sed 's/\.\.\.//')" ) done unformatted_files="$(goimports -l ${folders[*]})" diff --git a/vendor/github.com/gardener/gardener/hack/cherry-pick-pull.sh b/vendor/github.com/gardener/gardener/hack/cherry-pick-pull.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/ci-common.sh b/vendor/github.com/gardener/gardener/hack/ci-common.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-ha-multi-zone.sh b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-ha-multi-zone.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-ha-single-zone.sh b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-ha-single-zone.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-migration-ha-single-zone.sh b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-migration-ha-single-zone.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-migration.sh b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-migration.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-operator.sh b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-operator.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-upgrade.sh b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-upgrade.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/ci-e2e-kind.sh b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/clean.sh b/vendor/github.com/gardener/gardener/hack/clean.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/compare-k8s-admission-plugins.sh b/vendor/github.com/gardener/gardener/hack/compare-k8s-admission-plugins.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/compare-k8s-api-groups.sh b/vendor/github.com/gardener/gardener/hack/compare-k8s-api-groups.sh new file mode 100644 index 000000000..59b0818cf --- /dev/null +++ b/vendor/github.com/gardener/gardener/hack/compare-k8s-api-groups.sh @@ -0,0 +1,90 @@ +#!/usr/bin/env bash +# +# Copyright 2023 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +# +# 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. + +set -e + +usage() { + echo "Usage:" + echo "> compare-k8s-apigroups.sh [ -h | ]" + echo + echo ">> For example: compare-k8s-apigroups.sh 1.26 1.27" + + exit 0 +} + +if [ "$1" == "-h" ] || [ "$#" -ne 2 ]; then + usage +fi + +versions=("$1" "$2") + +out_dir=$(mktemp -d) +function cleanup_output { + rm -rf "$out_dir" +} +trap cleanup_output EXIT + +base_dir="staging/src/k8s.io/client-go/informers" + +for version in "${versions[@]}"; do + rm -rf "${out_dir}/kubernetes-${version}" + rm -f "${out_dir}/k8s-apiGVRs-${version}.txt" + rm -f "${out_dir}/k8s-apiGVs-${version}.txt" + + git clone --depth 1 --filter=blob:none --sparse https://github.com/kubernetes/kubernetes -b "release-${version}" "${out_dir}/kubernetes-${version}" + pushd "${out_dir}/kubernetes-${version}" > /dev/null + git sparse-checkout set "$base_dir" + popd > /dev/null + + groupVersions=() + groupVersionResources=() + g="" + v="" + + while IFS= read -r line; do + if [[ $line =~ Group=([a-zA-Z0-9.-]+),[[:space:]]*Version=([a-zA-Z0-9.-]+) ]]; then + g="${BASH_REMATCH[1]}" + v="${BASH_REMATCH[2]}" + if [[ $g == "core" ]]; then + groupVersions+=("$v") + else + groupVersions+=("$g/$v") + fi + elif [[ $line =~ WithResource\(\"(.*)\"\) ]]; then + k="${BASH_REMATCH[1]}" + if [[ $g == "core" ]]; then + groupVersionResources+=("$v/$k") + else + groupVersionResources+=("$g/$v/$k") + fi + fi + done < "${out_dir}/kubernetes-${version}/${base_dir}/generic.go" + + echo "${groupVersions[@]}" | tr ' ' '\n' | sort | uniq > "${out_dir}/k8s-apiGVs-${version}.txt" + echo "${groupVersionResources[@]}" | tr ' ' '\n' | sort | uniq > "${out_dir}/k8s-apiGVRs-${version}.txt" +done + +echo +echo "Kubernetes API group versions added in $2 compared to $1:" +diff "${out_dir}/k8s-apiGVs-$1.txt" "${out_dir}/k8s-apiGVs-$2.txt" | grep '>' | awk '{print $2}' +echo +echo "Kubernetes API GVRs added in $2 compared to $1:" +diff "${out_dir}/k8s-apiGVRs-$1.txt" "${out_dir}/k8s-apiGVRs-$2.txt" | grep '>' | awk '{print $2}' +echo +echo "Kubernetes API group versions removed in $2 compared to $1:" +diff "${out_dir}/k8s-apiGVs-$1.txt" "${out_dir}/k8s-apiGVs-$2.txt" | grep '<' | awk '{print $2}' +echo +echo "Kubernetes API GVRs removed in $2 compared to $1:" \ No newline at end of file diff --git a/vendor/github.com/gardener/gardener/hack/compare-k8s-controllers.sh b/vendor/github.com/gardener/gardener/hack/compare-k8s-controllers.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/compare-k8s-feature-gates.sh b/vendor/github.com/gardener/gardener/hack/compare-k8s-feature-gates.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/compute-k8s-controllers.sh b/vendor/github.com/gardener/gardener/hack/compute-k8s-controllers.sh new file mode 100644 index 000000000..559a136c5 --- /dev/null +++ b/vendor/github.com/gardener/gardener/hack/compute-k8s-controllers.sh @@ -0,0 +1,175 @@ +#!/usr/bin/env bash +# +# Copyright 2023 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file. +# +# 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. + +set -e + +usage() { + echo "Usage:" + echo "> compute-k8s-controllers.sh [ -h | ]" + echo + echo ">> For example: compute-k8s-controllers.sh 1.26 1.27" + + exit 0 +} + +if [ "$1" == "-h" ] || [ "$#" -ne 2 ]; then + usage +fi + +versions=("$1" "$2") + +out_dir=$(mktemp -d) +function cleanup_output { + rm -rf "$out_dir" +} +trap cleanup_output EXIT + +# Define the path map +declare -A path_map=( + ["attachdetach"]="pkg/controller/volume/attachdetach/attach_detach_controller.go" + ["bootstrapsigner"]="pkg/controller/bootstrap/bootstrapsigner.go" + ["cloud-node-lifecycle"]="staging/src/k8s.io/cloud-provider/controllers/nodelifecycle/node_lifecycle_controller.go" + ["clusterrole-aggregation"]="pkg/controller/clusterroleaggregation/clusterroleaggregation_controller.go" + ["cronjob"]="pkg/controller/cronjob/cronjob_controllerv2.go" + ["csrapproving"]="pkg/controller/certificates/approver/sarapprove.go" + ["csrcleaner"]="pkg/controller/certificates/cleaner/cleaner.go" + ["csrsigning"]="pkg/controller/certificates/signer/signer.go" + ["daemonset"]="pkg/controller/daemon/daemon_controller.go" + ["deployment"]="pkg/controller/deployment/deployment_controller.go" + ["disruption"]="pkg/controller/disruption/disruption.go" + ["endpoint"]="pkg/controller/endpoint/endpoints_controller.go" + ["endpointslice"]="pkg/controller/endpointslice/endpointslice_controller.go" + ["endpointslicemirroring"]="pkg/controller/endpointslicemirroring/endpointslicemirroring_controller.go" + ["ephemeral-volume"]="pkg/controller/volume/ephemeral/controller.go" + ["garbagecollector"]="pkg/controller/garbagecollector/garbagecollector.go" + ["horizontalpodautoscaling"]="pkg/controller/podautoscaler/horizontal.go" + ["job"]="pkg/controller/job/job_controller.go" + ["legacy-service-account-token-cleaner"]="pkg/controller/serviceaccount/legacy_serviceaccount_token_cleaner.go" + ["namespace"]="pkg/controller/namespace/namespace_controller.go" + ["nodeipam"]="pkg/controller/nodeipam/node_ipam_controller.go" + ["nodelifecycle"]="pkg/controller/nodelifecycle/node_lifecycle_controller.go" + ["persistentvolume-binder"]="pkg/controller/volume/persistentvolume/pv_controller_base.go" + ["persistentvolume-expander"]="pkg/controller/volume/expand/expand_controller.go" + ["podgc"]="pkg/controller/podgc/gc_controller.go" + ["pv-protection"]="pkg/controller/volume/pvprotection/pv_protection_controller.go" + ["pvc-protection"]="pkg/controller/volume/pvcprotection/pvc_protection_controller.go" + ["replicaset"]="pkg/controller/replicaset/replica_set.go" + ["replicationcontroller"]="pkg/controller/replication/replication_controller.go" + ["resource-claim-controller"]="pkg/controller/resourceclaim/controller.go" + ["resourcequota"]="pkg/controller/resourcequota/resource_quota_controller.go" + ["root-ca-cert-publisher"]="pkg/controller/certificates/rootcacertpublisher/publisher.go" + ["route"]="staging/src/k8s.io/cloud-provider/controllers/route/route_controller.go" + ["service"]="staging/src/k8s.io/cloud-provider/controllers/service/controller.go" + ["serviceaccount"]="pkg/controller/serviceaccount/serviceaccounts_controller.go" + ["serviceaccount-token"]="pkg/controller/serviceaccount/tokens_controller.go" + ["statefulset"]="pkg/controller/statefulset/stateful_set.go" + ["storage-version-gc"]="pkg/controller/storageversiongc/gc_controller.go" + ["tokencleaner"]="pkg/controller/bootstrap/tokencleaner.go" + ["ttl"]="pkg/controller/ttl/ttl_controller.go" + ["ttl-after-finished"]="pkg/controller/ttlafterfinished/ttlafterfinished_controller.go" +) + +for version in "${versions[@]}"; do + rm -rf "${out_dir}/kubernetes-${version}" + rm -f "${out_dir}/k8s-controllers-${version}.txt" + + git clone --depth 1 --filter=blob:none --sparse https://github.com/kubernetes/kubernetes -b "release-${version}" "${out_dir}/kubernetes-${version}" + pushd "${out_dir}/kubernetes-${version}" > /dev/null + git sparse-checkout set "cmd/kube-controller-manager" "pkg/controller" "staging/src/k8s.io/cloud-provider/controllers" + popd > /dev/null + + if [ "$version" \< "1.26" ]; then + names=$(grep -o 'controllers\["[^"]*' "${out_dir}/kubernetes-${version}/cmd/kube-controller-manager/app/controllermanager.go" | awk -F '"' '{print $2}') + # This is a special controller which is not initialized normally, see https://github.com/kubernetes/kubernetes/blob/99151c39b7d4595632f7745ba7fb4dea4356f7fd/cmd/kube-controller-manager/app/controllermanager.go#L405-L411 + names+=" serviceaccount-token" + elif [ "$version" \< "1.28" ]; then + names=$(grep -o 'register("[^"]*' "${out_dir}/kubernetes-${version}/cmd/kube-controller-manager/app/controllermanager.go" | awk -F '"' '{print $2}') + # This is a special controller which is not initialized normally, see https://github.com/kubernetes/kubernetes/blob/99151c39b7d4595632f7745ba7fb4dea4356f7fd/cmd/kube-controller-manager/app/controllermanager.go#L405-L411 + names+=" serviceaccount-token" + else + names=$(grep -E 'func KCMControllerAliases\(\) map\[string\]string \{' "${out_dir}/kubernetes-${version}/cmd/kube-controller-manager/names/controller_names.go" -A 200 | awk -F '[" :]+' '/^ \"[a-zA-Z0-9-]+\"/ {print $2}') + fi + + for name in $names; do + if [ ! "${path_map[$name]}" ]; then + echo "No path mapping found for $name", The controller could have been removed or the path might have changed. + echo "Please enhance the map in the script with the path for this controller." + exit 1 + fi + done + + unset api_group_controllers + declare -A api_group_controllers + + for controller in $names; do + file_path="${out_dir}/kubernetes-${version}/${path_map[$controller]}" + if [ -f "$file_path" ]; then + # Find lines containing 'k8s.io/api/' in the file, and extract content after 'k8s.io/api/' up to + # the next double quote. This will be the API groups used for this controller. + api_groups=$(grep -o 'k8s\.io/api/[^"]*' "$file_path" | awk -F 'k8s.io/api/' '{print $2}') + for api_group in $api_groups + do + api_group=$(echo "$api_group" | tr -d '[:space:]' | sed 's/^core\/v1$/v1/' | sed 's/apiserverinternal/internal/') + if [ -n "$api_group" ]; then + api_group_controllers["$api_group"]+="$controller " + fi + done + else + echo "The file $file_path cannot be found. Please enhance the map in the script with the correct path for this controller." + exit 1 + fi + done + + for api_group in "${!api_group_controllers[@]}"; do + echo "$api_group:$(echo "${api_group_controllers[$api_group]}" | tr ' ' '\n' | sort | tr '\n' ' ')" >> "${out_dir}/k8s-controllers-${version}.txt" + done + + sort -o "${out_dir}/k8s-controllers-${version}.txt" "${out_dir}/k8s-controllers-${version}.txt" +done + +echo +echo "kube-controller-manager controllers added in $2 compared to $1:" +IFS=$'\n' read -r -d '' -a added_lines < <(diff "${out_dir}/k8s-controllers-$1.txt" "${out_dir}/k8s-controllers-$2.txt" | grep '^>' | sed 's/^> //' && printf '\0') +for added_line in "${added_lines[@]}"; do + api_group=$(echo "$added_line" | awk -F ': ' '{print $1}') + controllers=$(echo "$added_line" | awk -F ': ' '{print $2}' | tr ' ' '\n') + + # Find the corresponding line in the other file + old_line=$(grep "^$api_group: " "${out_dir}/k8s-controllers-$1.txt" | awk -F ': ' '{print $2}' | tr ' ' '\n') + + added_controllers=$(comm -23 <(echo "$controllers" | sort) <(echo "$old_line" | sort) | tr '\n' ' ') + + if [ -n "$added_controllers" ]; then + echo "Added Controllers for API Group [$api_group]: $added_controllers" + fi +done + +echo +echo "kube-controller-manager controllers removed in $2 compared to $1:" +IFS=$'\n' read -r -d '' -a removed_lines < <(diff "${out_dir}/k8s-controllers-$1.txt" "${out_dir}/k8s-controllers-$2.txt" | grep '^<' | sed 's/^< //' && printf '\0') +for removed_line in "${removed_lines[@]}"; do + api_group=$(echo "$removed_line" | awk -F ': ' '{print $1}') + controllers=$(echo "$removed_line" | awk -F ': ' '{print $2}' | tr ' ' '\n') + + # Find the corresponding line in the other file + new_line=$(grep "^$api_group: " "${out_dir}/k8s-controllers-$2.txt" | awk -F ': ' '{print $2}' | tr ' ' '\n') + + removed_controllers=$(comm -23 <(echo "$controllers" | sort) <(echo "$new_line" | sort) | tr '\n' ' ') + + if [ -n "$removed_controllers" ]; then + echo "Removed Controllers for API Group [$api_group]: $removed_controllers" + fi +done diff --git a/vendor/github.com/gardener/gardener/hack/download_gardener_source_code.sh b/vendor/github.com/gardener/gardener/hack/download_gardener_source_code.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/format.sh b/vendor/github.com/gardener/gardener/hack/format.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/gardener-down.sh b/vendor/github.com/gardener/gardener/hack/gardener-down.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/gardener-extensions-down.sh b/vendor/github.com/gardener/gardener/hack/gardener-extensions-down.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/gardener-extensions-up.sh b/vendor/github.com/gardener/gardener/hack/gardener-extensions-up.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/generate-controller-registration.sh b/vendor/github.com/gardener/gardener/hack/generate-controller-registration.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/generate-crds.sh b/vendor/github.com/gardener/gardener/hack/generate-crds.sh old mode 100755 new mode 100644 index 179994a56..1655ef6e3 --- a/vendor/github.com/gardener/gardener/hack/generate-crds.sh +++ b/vendor/github.com/gardener/gardener/hack/generate-crds.sh @@ -42,6 +42,25 @@ add_keep_object_annotation=false k8s_io_api_approval_reason="unapproved, temporarily squatting" crd_options="" +SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +VGOPATH="$VGOPATH" + +# Ensure that if GOPATH is set, the GOPATH/{bin,pkg} directory exists. This seems to be not always +# the case in certain environments like Prow. As we will create a symlink against the bin folder we +# need to make sure that the bin directory is present in the GOPATH. +if [ -n "$GOPATH" ] && [ ! -d "$GOPATH/bin" ]; then mkdir -p "$GOPATH/bin"; fi +if [ -n "$GOPATH" ] && [ ! -d "$GOPATH/pkg" ]; then mkdir -p "$GOPATH/pkg"; fi + +VIRTUAL_GOPATH="$(mktemp -d)" +trap 'rm -rf "$VIRTUAL_GOPATH"' EXIT + +# Setup virtual GOPATH so the codegen tools work as expected. +(cd "$SCRIPT_DIR/.."; go mod download && "$VGOPATH" -o "$VIRTUAL_GOPATH") + +export GOROOT="${GOROOT:-"$(go env GOROOT)"}" +export GOPATH="$VIRTUAL_GOPATH" +export GO111MODULE=off + get_group_package () { case "$1" in "extensions.gardener.cloud") @@ -63,7 +82,7 @@ get_group_package () { echo "github.com/fluent/fluent-operator/v2/apis/fluentbit/v1alpha2" ;; "autoscaling.k8s.io") - echo "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/..." + echo "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" ;; "machine.sapcloud.io") echo "github.com/gardener/machine-controller-manager/pkg/apis/machine/v1alpha1" @@ -93,7 +112,7 @@ generate_group () { if [ -z "$package" ] ; then exit 1 fi - local package_path="$(go list -f '{{ .Dir }}' "$package" | tr '\n' ';')" + local package_path="$(go list -f '{{ .Dir }}' "$package")" if [ -z "$package_path" ] ; then exit 1 fi @@ -105,13 +124,22 @@ generate_group () { # etcd-druid, due to adverse interaction with VPA. # See https://github.com/gardener/gardener/pull/6850 and https://github.com/gardener/gardener/pull/8560#discussion_r1347470394 # TODO(shreyas-s-rao): Remove this workaround as soon as the scale subresource is supported properly. - etcd_api_types_file="$(dirname "$0")/../vendor/github.com/gardener/etcd-druid/api/v1alpha1/types_etcd.go" + etcd_druid_dir="$(go list -f '{{ .Dir }}' "github.com/gardener/etcd-druid")" + etcd_api_types_file="${etcd_druid_dir}/api/v1alpha1/types_etcd.go" + # Create a local copy outside the mod cache path in order to patch the types file via sed. + etcd_api_types_backup="$(mktemp -d)/types_etcd.go" + cp "$etcd_api_types_file" "$etcd_api_types_backup" + chmod +w "$etcd_api_types_file" "$etcd_druid_dir/api/v1alpha1/" + trap 'cp "$etcd_api_types_backup" "$etcd_api_types_file" && chmod -w "$etcd_druid_dir/api/v1alpha1/"' EXIT sed -i '/\/\/ +kubebuilder:subresource:scale:specpath=.spec.replicas,statuspath=.status.replicas,selectorpath=.status.labelSelector/d' "$etcd_api_types_file" $generate - git checkout "$etcd_api_types_file" elif [[ "$group" == "autoscaling.k8s.io" ]]; then # See https://github.com/kubernetes/autoscaler/blame/master/vertical-pod-autoscaler/hack/generate-crd-yaml.sh#L43-L45 generator_output="$(mktemp -d)/controller-gen.log" + # As go list does not work with symlinks we need to manually construct the package paths to correctly + # generate v1beta2 CRDs. + package_path="${package_path};${package_path}beta2;" + generate="controller-gen crd"$crd_options" paths="$package_path" output:crd:dir="$output_dir_temp" output:stdout" $generate &> "$generator_output" ||: grep -v -e 'map keys must be strings, not int' -e 'not all generators ran successfully' -e 'usage' "$generator_output" && { echo "Failed to generate CRD YAMLs."; exit 1; } else diff --git a/vendor/github.com/gardener/gardener/hack/generate-groups.sh b/vendor/github.com/gardener/gardener/hack/generate-groups.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/generate-imagename-constants.sh b/vendor/github.com/gardener/gardener/hack/generate-imagename-constants.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/generate-internal-groups.sh b/vendor/github.com/gardener/gardener/hack/generate-internal-groups.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/generate-logcheck-symlinks.sh b/vendor/github.com/gardener/gardener/hack/generate-logcheck-symlinks.sh new file mode 100644 index 000000000..e079f03ca --- /dev/null +++ b/vendor/github.com/gardener/gardener/hack/generate-logcheck-symlinks.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# +# Copyright 2023 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +# +# 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. + +set -o errexit +set -o nounset +set -o pipefail + +# Create symlinks to local mod chache for logr and controller-runtime log. + +SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +LOGCHECK_DIR="$LOGCHECK_DIR" + +cd "$SCRIPT_DIR"/.. +echo $LOGCHECK_DIR +LOGR_DIR=$(go list -f '{{ .Dir }}' github.com/go-logr/logr) +CONTROLLER_RUNTIME_LOGR_DIR=$(go list -f '{{ .Dir }}' sigs.k8s.io/controller-runtime/pkg/log) + +if [ ! -h "./$LOGCHECK_DIR/pkg/logcheck/testdata/src/github.com/go-logr/logr" ]; then + ln -s "$LOGR_DIR" "./$LOGCHECK_DIR/pkg/logcheck/testdata/src/github.com/go-logr/logr" +fi +if [ ! -h "./$LOGCHECK_DIR/pkg/logcheck/testdata/src/sigs.k8s.io/controller-runtime/pkg/log" ]; then + ln -s "$CONTROLLER_RUNTIME_LOGR_DIR" "./$LOGCHECK_DIR/pkg/logcheck/testdata/src/sigs.k8s.io/controller-runtime/pkg/log" +fi diff --git a/vendor/github.com/gardener/gardener/hack/generate-monitoring-docs.sh b/vendor/github.com/gardener/gardener/hack/generate-monitoring-docs.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/generate-parallel.sh b/vendor/github.com/gardener/gardener/hack/generate-parallel.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/generate-sequential.sh b/vendor/github.com/gardener/gardener/hack/generate-sequential.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/generate.sh b/vendor/github.com/gardener/gardener/hack/generate.sh old mode 100755 new mode 100644 index bfd431d37..d236964c6 --- a/vendor/github.com/gardener/gardener/hack/generate.sh +++ b/vendor/github.com/gardener/gardener/hack/generate.sh @@ -16,7 +16,7 @@ set -e -WHAT="protobuf codegen manifests logcheck gomegacheck monitoring-docs" +WHAT="protobuf codegen manifests logcheck monitoring-docs" CODEGEN_GROUPS="" MANIFESTS_DIRS="" MODE="" @@ -78,12 +78,12 @@ run_target() { $REPO_ROOT/hack/update-protobuf.sh ;; codegen) - local mode="${MODE:-sequential}" + local mode="${MODE:-sequential}" $REPO_ROOT/hack/update-codegen.sh --groups "$CODEGEN_GROUPS" --mode "$mode" ;; manifests) local which=() - local mode="${MODE:-parallel}" + local mode="${MODE:-parallel}" if [[ -z "$MANIFESTS_DIRS" ]]; then which=("${DEFAULT_MANIFESTS_DIRS[@]}") @@ -105,14 +105,11 @@ run_target() { logcheck) cd "$REPO_ROOT/$LOGCHECK_DIR" && go generate ./... ;; - gomegacheck) - cd "$REPO_ROOT/$GOMEGACHECK_DIR" && go generate ./... - ;; monitoring-docs) $REPO_ROOT/hack/generate-monitoring-docs.sh ;; *) - printf "ERROR: Unknown target: $target. Available targets are 'protobuf', 'codegen', 'manifests', 'logcheck', 'gomegacheck', 'monitoring-docs'.\n\n" + printf "ERROR: Unknown target: $target. Available targets are 'protobuf', 'codegen', 'manifests', 'logcheck', 'monitoring-docs'.\n\n" ;; esac } diff --git a/vendor/github.com/gardener/gardener/hack/get-build-ld-flags.sh b/vendor/github.com/gardener/gardener/hack/get-build-ld-flags.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/hook-me.sh b/vendor/github.com/gardener/gardener/hack/hook-me.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/install.sh b/vendor/github.com/gardener/gardener/hack/install.sh old mode 100755 new mode 100644 index 718d1bfd7..25282b2e7 --- a/vendor/github.com/gardener/gardener/hack/install.sh +++ b/vendor/github.com/gardener/gardener/hack/install.sh @@ -21,5 +21,5 @@ echo "> Install" LD_FLAGS="${LD_FLAGS:-$($(dirname $0)/get-build-ld-flags.sh)}" CGO_ENABLED=0 GOOS=$(go env GOOS) GOARCH=$(go env GOARCH) GO111MODULE=on \ - go install -mod=vendor -ldflags "$LD_FLAGS" \ + go install -ldflags "$LD_FLAGS" \ $@ diff --git a/vendor/github.com/gardener/gardener/hack/kind-down.sh b/vendor/github.com/gardener/gardener/hack/kind-down.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/kind-extensions-up.sh b/vendor/github.com/gardener/gardener/hack/kind-extensions-up.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/kind-up.sh b/vendor/github.com/gardener/gardener/hack/kind-up.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/prepare-envtest.sh b/vendor/github.com/gardener/gardener/hack/prepare-envtest.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/start-envtest.sh b/vendor/github.com/gardener/gardener/hack/start-envtest.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/test-cover-clean.sh b/vendor/github.com/gardener/gardener/hack/test-cover-clean.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/test-cover.sh b/vendor/github.com/gardener/gardener/hack/test-cover.sh old mode 100755 new mode 100644 index bbe19d0e1..c67df801f --- a/vendor/github.com/gardener/gardener/hack/test-cover.sh +++ b/vendor/github.com/gardener/gardener/hack/test-cover.sh @@ -27,7 +27,7 @@ COVERPROFILE_HTML="$REPO_ROOT/test.coverage.html" trap "rm -rf \"$COVERPROFILE_TMP\"" EXIT ERR INT TERM -GO111MODULE=on go test -cover -coverprofile "$COVERPROFILE_TMP" -race -timeout=2m -mod=vendor $@ | grep -v 'no test files' +GO111MODULE=on go test -cover -coverprofile "$COVERPROFILE_TMP" -race -timeout=2m $@ | grep -v 'no test files' cat "$COVERPROFILE_TMP" | grep -vE "\.pb\.go|zz_generated" > "$COVERPROFILE" go tool cover -html="$COVERPROFILE" -o="$COVERPROFILE_HTML" diff --git a/vendor/github.com/gardener/gardener/hack/test-e2e-local.env b/vendor/github.com/gardener/gardener/hack/test-e2e-local.env old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/test-e2e-local.sh b/vendor/github.com/gardener/gardener/hack/test-e2e-local.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/test-integration.env b/vendor/github.com/gardener/gardener/hack/test-integration.env old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/test-integration.sh b/vendor/github.com/gardener/gardener/hack/test-integration.sh old mode 100755 new mode 100644 index 5e3b70754..c36566f42 --- a/vendor/github.com/gardener/gardener/hack/test-integration.sh +++ b/vendor/github.com/gardener/gardener/hack/test-integration.sh @@ -36,4 +36,4 @@ else timeout_flag=-timeout=5m fi -GO111MODULE=on go test ${timeout_flag:-} -mod=vendor $@ $test_flags | grep -v 'no test files' +GO111MODULE=on go test ${timeout_flag:-} $@ $test_flags | grep -v 'no test files' diff --git a/vendor/github.com/gardener/gardener/hack/test-prometheus.sh b/vendor/github.com/gardener/gardener/hack/test-prometheus.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/test.sh b/vendor/github.com/gardener/gardener/hack/test.sh old mode 100755 new mode 100644 index fd194f28c..9daa5e27b --- a/vendor/github.com/gardener/gardener/hack/test.sh +++ b/vendor/github.com/gardener/gardener/hack/test.sh @@ -38,4 +38,4 @@ else timeout_flag=-timeout=2m fi -GO111MODULE=on go test -race ${timeout_flag:-} -mod=vendor $@ $test_flags | grep -v 'no test files' +GO111MODULE=on go test -race ${timeout_flag:-} "$@" $test_flags | grep -v 'no test files' diff --git a/vendor/github.com/gardener/gardener/hack/tools.go b/vendor/github.com/gardener/gardener/hack/tools.go old mode 100755 new mode 100644 index 45fdc98de..677963f87 --- a/vendor/github.com/gardener/gardener/hack/tools.go +++ b/vendor/github.com/gardener/gardener/hack/tools.go @@ -21,6 +21,7 @@ package tools import ( _ "github.com/ahmetb/gen-crd-api-reference-docs" _ "github.com/bronze1man/yaml2json" + _ "github.com/ironcore-dev/vgopath" _ "github.com/onsi/ginkgo/v2/ginkgo" _ "go.uber.org/mock/mockgen" _ "golang.org/x/tools/cmd/goimports" diff --git a/vendor/github.com/gardener/gardener/hack/tools.mk b/vendor/github.com/gardener/gardener/hack/tools.mk old mode 100755 new mode 100644 index 05216500f..b699684ad --- a/vendor/github.com/gardener/gardener/hack/tools.mk +++ b/vendor/github.com/gardener/gardener/hack/tools.mk @@ -23,20 +23,18 @@ ifeq ($(strip $(shell go list -m 2>/dev/null)),github.com/gardener/gardener) TOOLS_PKG_PATH := ./hack/tools else # dependency on github.com/gardener/gardener/hack/tools is optional and only needed if other projects want to reuse -# install-promtool.sh, logcheck, or gomegacheck. If they don't use it and the project doesn't depend on the package, +# install-promtool.sh, or logcheck. If they don't use it and the project doesn't depend on the package, # silence the error to minimize confusion. TOOLS_PKG_PATH := $(shell go list -tags tools -f '{{ .Dir }}' github.com/gardener/gardener/hack/tools 2>/dev/null) endif TOOLS_BIN_DIR := $(TOOLS_DIR)/bin CONTROLLER_GEN := $(TOOLS_BIN_DIR)/controller-gen -DOCFORGE := $(TOOLS_BIN_DIR)/docforge GEN_CRD_API_REFERENCE_DOCS := $(TOOLS_BIN_DIR)/gen-crd-api-reference-docs GINKGO := $(TOOLS_BIN_DIR)/ginkgo GOIMPORTS := $(TOOLS_BIN_DIR)/goimports GOIMPORTSREVISER := $(TOOLS_BIN_DIR)/goimports-reviser GOLANGCI_LINT := $(TOOLS_BIN_DIR)/golangci-lint -GOMEGACHECK := $(TOOLS_BIN_DIR)/gomegacheck.so # plugin binary GO_ADD_LICENSE := $(TOOLS_BIN_DIR)/addlicense GO_APIDIFF := $(TOOLS_BIN_DIR)/go-apidiff GO_VULN_CHECK := $(TOOLS_BIN_DIR)/govulncheck @@ -56,21 +54,22 @@ SETUP_ENVTEST := $(TOOLS_BIN_DIR)/setup-envtest SKAFFOLD := $(TOOLS_BIN_DIR)/skaffold YAML2JSON := $(TOOLS_BIN_DIR)/yaml2json YQ := $(TOOLS_BIN_DIR)/yq +VGOPATH := $(TOOLS_BIN_DIR)/vgopath # default tool versions -DOCFORGE_VERSION ?= v0.34.0 -GOLANGCI_LINT_VERSION ?= v1.54.2 +GOLANGCI_LINT_VERSION ?= v1.55.1 GO_APIDIFF_VERSION ?= v0.6.1 GO_ADD_LICENSE_VERSION ?= v1.1.1 -GOIMPORTSREVISER_VERSION ?= v3.4.5 +GOIMPORTSREVISER_VERSION ?= v3.5.6 GO_VULN_CHECK_VERSION ?= latest -HELM_VERSION ?= v3.12.3 +HELM_VERSION ?= v3.13.1 KIND_VERSION ?= v0.20.0 -KUBECTL_VERSION ?= v1.28.2 -PROMTOOL_VERSION ?= 2.34.0 -PROTOC_VERSION ?= 24.1 +KUBECTL_VERSION ?= v1.28.3 +PROMTOOL_VERSION ?= 2.47.2 +PROTOC_VERSION ?= 24.4 SKAFFOLD_VERSION ?= v2.8.0 -YQ_VERSION ?= v4.35.1 +YQ_VERSION ?= v4.35.2 +VGOPATH_VERSION ?= v0.1.3 # tool versions from go.mod CONTROLLER_GEN_VERSION ?= $(call version_gomod,sigs.k8s.io/controller-tools) @@ -124,7 +123,7 @@ ifeq ($(shell if [ -d $(TOOLS_BIN_SOURCE_DIR) ]; then echo "found"; fi),found) endif .PHONY: create-tools-bin -create-tools-bin: $(CONTROLLER_GEN) $(DOCFORGE) $(GEN_CRD_API_REFERENCE_DOCS) $(GINKGO) $(GOIMPORTS) $(GOIMPORTSREVISER) $(GO_ADD_LICENSE) $(GO_APIDIFF) $(GO_VULN_CHECK) $(GO_TO_PROTOBUF) $(HELM) $(IMPORT_BOSS) $(KIND) $(KUBECTL) $(MOCKGEN) $(OPENAPI_GEN) $(PROMTOOL) $(PROTOC) $(PROTOC_GEN_GOGO) $(SETUP_ENVTEST) $(SKAFFOLD) $(YAML2JSON) $(YQ) +create-tools-bin: $(CONTROLLER_GEN) $(GEN_CRD_API_REFERENCE_DOCS) $(GINKGO) $(GOIMPORTS) $(GOIMPORTSREVISER) $(GO_ADD_LICENSE) $(GO_APIDIFF) $(GO_VULN_CHECK) $(GO_TO_PROTOBUF) $(HELM) $(IMPORT_BOSS) $(KIND) $(KUBECTL) $(MOCKGEN) $(OPENAPI_GEN) $(PROMTOOL) $(PROTOC) $(PROTOC_GEN_GOGO) $(SETUP_ENVTEST) $(SKAFFOLD) $(YAML2JSON) $(YQ) $(VGOPATH) ######################################### # Tools # @@ -133,10 +132,6 @@ create-tools-bin: $(CONTROLLER_GEN) $(DOCFORGE) $(GEN_CRD_API_REFERENCE_DOCS) $( $(CONTROLLER_GEN): $(call tool_version_file,$(CONTROLLER_GEN),$(CONTROLLER_GEN_VERSION)) go build -o $(CONTROLLER_GEN) sigs.k8s.io/controller-tools/cmd/controller-gen -$(DOCFORGE): $(call tool_version_file,$(DOCFORGE),$(DOCFORGE_VERSION)) - curl -L -o $(DOCFORGE) https://github.com/gardener/docforge/releases/download/$(DOCFORGE_VERSION)/docforge-$(shell uname -s | tr '[:upper:]' '[:lower:]')-$(shell uname -m | sed 's/x86_64/amd64/') - chmod +x $(DOCFORGE) - $(GEN_CRD_API_REFERENCE_DOCS): $(call tool_version_file,$(GEN_CRD_API_REFERENCE_DOCS),$(GEN_CRD_API_REFERENCE_DOCS_VERSION)) go build -o $(GEN_CRD_API_REFERENCE_DOCS) github.com/ahmetb/gen-crd-api-reference-docs @@ -154,14 +149,6 @@ $(GOLANGCI_LINT): $(call tool_version_file,$(GOLANGCI_LINT),$(GOLANGCI_LINT_VERS @# see https://github.com/golangci/golangci-lint/issues/1276 GOBIN=$(abspath $(TOOLS_BIN_DIR)) CGO_ENABLED=1 go install github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLANGCI_LINT_VERSION) -ifeq ($(strip $(shell go list -m 2>/dev/null)),github.com/gardener/gardener) -$(GOMEGACHECK): $(TOOLS_PKG_PATH)/gomegacheck/go.* $(shell find $(TOOLS_PKG_PATH)/gomegacheck -type f -name '*.go') - cd $(TOOLS_PKG_PATH)/gomegacheck; CGO_ENABLED=1 go build -o $(abspath $(GOMEGACHECK)) -buildmode=plugin ./plugin -else -$(GOMEGACHECK): go.mod - CGO_ENABLED=1 go build -o $(GOMEGACHECK) -buildmode=plugin github.com/gardener/gardener/hack/tools/gomegacheck/plugin -endif - $(GO_ADD_LICENSE): $(call tool_version_file,$(GO_ADD_LICENSE),$(GO_ADD_LICENSE_VERSION)) GOBIN=$(abspath $(TOOLS_BIN_DIR)) go install github.com/google/addlicense@$(GO_ADD_LICENSE_VERSION) @@ -232,3 +219,6 @@ $(YAML2JSON): $(call tool_version_file,$(YAML2JSON),$(YAML2JSON_VERSION)) $(YQ): $(call tool_version_file,$(YQ),$(YQ_VERSION)) curl -L -o $(YQ) https://github.com/mikefarah/yq/releases/download/$(YQ_VERSION)/yq_$(shell uname -s | tr '[:upper:]' '[:lower:]')_$(shell uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') chmod +x $(YQ) + +$(VGOPATH): $(call tool_version_file,$(VGOPATH),$(VGOPATH_VERSION)) + go build -o $(VGOPATH) github.com/ironcore-dev/vgopath diff --git a/vendor/github.com/gardener/gardener/hack/update-codegen.sh b/vendor/github.com/gardener/gardener/hack/update-codegen.sh old mode 100755 new mode 100644 index 98d3ff314..4d404a194 --- a/vendor/github.com/gardener/gardener/hack/update-codegen.sh +++ b/vendor/github.com/gardener/gardener/hack/update-codegen.sh @@ -42,13 +42,23 @@ AVAILABLE_CODEGEN_OPTIONS=( "nodeagent_groups" ) -# Friendly reminder if workspace location is not in $GOPATH -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" -if [ "${SCRIPT_DIR}" != "$(realpath $GOPATH)/src/github.com/gardener/gardener/hack" ]; then - echo "'hack/update-codegen.sh' script does not work correctly if your workspace is outside GOPATH" - echo "Please check https://github.com/gardener/gardener/blob/master/docs/development/local_setup.md#get-the-sources" - exit 1 -fi +SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +VGOPATH="$VGOPATH" + +# Ensure that if GOPATH is set, the GOPATH/{bin,pkg} directory exists. This seems to be not always +# the case in certain environments like Prow. As we will create a symlink against the bin folder we +# need to make sure that the bin directory is present in the GOPATH. +if [ -n "$GOPATH" ] && [ ! -d "$GOPATH/bin" ]; then mkdir -p "$GOPATH/bin"; fi +if [ -n "$GOPATH" ] && [ ! -d "$GOPATH/pkg" ]; then mkdir -p "$GOPATH/pkg"; fi + +VIRTUAL_GOPATH="$(mktemp -d)" +trap 'rm -rf "$VIRTUAL_GOPATH"' EXIT + +# Setup virtual GOPATH so the codegen tools work as expected. +(cd "$SCRIPT_DIR/.."; go mod download && "$VGOPATH" -o "$VIRTUAL_GOPATH") + +export GOROOT="${GOROOT:-"$(go env GOROOT)"}" +export GOPATH="$VIRTUAL_GOPATH" # We need to explicitly pass GO111MODULE=off to k8s.io/code-generator as it is significantly slower otherwise, # see https://github.com/kubernetes/code-generator/issues/100. @@ -536,7 +546,7 @@ else break fi done - + if $valid; then valid_options+=("$option") else diff --git a/vendor/github.com/gardener/gardener/hack/update-protobuf.sh b/vendor/github.com/gardener/gardener/hack/update-protobuf.sh old mode 100755 new mode 100644 index c81a5ac13..e0583c301 --- a/vendor/github.com/gardener/gardener/hack/update-protobuf.sh +++ b/vendor/github.com/gardener/gardener/hack/update-protobuf.sh @@ -18,13 +18,23 @@ set -o errexit set -o nounset set -o pipefail -# Friendly reminder if workspace location is not in $GOPATH -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" -if [ "${SCRIPT_DIR}" != "$(realpath $GOPATH)/src/github.com/gardener/gardener/hack" ]; then - echo "'hack/update-protobuf.sh' script does not work correctly if your workspace is outside GOPATH" - echo "Please check https://github.com/gardener/gardener/blob/master/docs/development/local_setup.md#get-the-sources" - exit 1 -fi +SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +VGOPATH="$VGOPATH" + +# Ensure that if GOPATH is set, the GOPATH/{bin,pkg} directory exists. This seems to be not always +# the case in certain environments like Prow. As we will create a symlink against the bin folder we +# need to make sure that the bin directory is present in the GOPATH. +if [ -n "$GOPATH" ] && [ ! -d "$GOPATH/bin" ]; then mkdir -p "$GOPATH/bin"; fi +if [ -n "$GOPATH" ] && [ ! -d "$GOPATH/pkg" ]; then mkdir -p "$GOPATH/pkg"; fi + +VIRTUAL_GOPATH="$(mktemp -d)" +trap 'rm -rf "$VIRTUAL_GOPATH"' EXIT + +# Setup virtual GOPATH so the codegen tools work as expected. +(cd "$SCRIPT_DIR/.."; go mod download && "$VGOPATH" -o "$VIRTUAL_GOPATH") + +export GOROOT="${GOROOT:-"$(go env GOROOT)"}" +export GOPATH="$VIRTUAL_GOPATH" # We need to explicitly pass GO111MODULE=off to k8s.io/code-generator as it is significantly slower otherwise, # see https://github.com/kubernetes/code-generator/issues/100. @@ -53,5 +63,4 @@ read -ra PACKAGES <<< $(echo ${APIROOTS}) go-to-protobuf \ --packages="$(IFS=, ; echo "${PACKAGES[*]}")" \ --apimachinery-packages='-k8s.io/apimachinery/pkg/util/intstr,-k8s.io/apimachinery/pkg/api/resource,-k8s.io/apimachinery/pkg/runtime/schema,-k8s.io/apimachinery/pkg/runtime,-k8s.io/apimachinery/pkg/apis/meta/v1,-k8s.io/apimachinery/pkg/apis/meta/v1beta1,-k8s.io/api/core/v1,-k8s.io/api/rbac/v1,-k8s.io/api/autoscaling/v1,-k8s.io/api/networking/v1' \ - --go-header-file=${PROJECT_ROOT}/hack/LICENSE_BOILERPLATE.txt \ - --proto-import=${PROJECT_ROOT}/vendor + --go-header-file=${PROJECT_ROOT}/hack/LICENSE_BOILERPLATE.txt diff --git a/vendor/github.com/gardener/gardener/hack/update-skaffold-deps.sh b/vendor/github.com/gardener/gardener/hack/update-skaffold-deps.sh new file mode 100644 index 000000000..ec09bfd3b --- /dev/null +++ b/vendor/github.com/gardener/gardener/hack/update-skaffold-deps.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +# +# Copyright 2023 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +# +# 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. + +set -e + +repo_root="$(git rev-parse --show-toplevel)" +$repo_root/hack/check-skaffold-deps.sh update diff --git a/vendor/github.com/gardener/gardener/pkg/apis/authentication/v1alpha1/defaults.go b/vendor/github.com/gardener/gardener/pkg/apis/authentication/v1alpha1/defaults_adminkubeconfigrequest.go similarity index 88% rename from vendor/github.com/gardener/gardener/pkg/apis/authentication/v1alpha1/defaults.go rename to vendor/github.com/gardener/gardener/pkg/apis/authentication/v1alpha1/defaults_adminkubeconfigrequest.go index 71a213467..ad987fd35 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/authentication/v1alpha1/defaults.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/authentication/v1alpha1/defaults_adminkubeconfigrequest.go @@ -1,5 +1,5 @@ /* -Copyright 2021 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +Copyright 2023 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ package v1alpha1 import ( "k8s.io/apimachinery/pkg/runtime" + "k8s.io/utils/pointer" ) func addDefaultingFuncs(scheme *runtime.Scheme) error { @@ -27,7 +28,6 @@ func addDefaultingFuncs(scheme *runtime.Scheme) error { // SetDefaults_AdminKubeconfigRequestSpec sets default values for AdminKubeconfigRequestSpec objects. func SetDefaults_AdminKubeconfigRequestSpec(obj *AdminKubeconfigRequestSpec) { if obj.ExpirationSeconds == nil { - hour := int64(60 * 60) - obj.ExpirationSeconds = &hour + obj.ExpirationSeconds = pointer.Int64(60 * 60) } } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types.go index ac7692b80..212ecdedf 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/types.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types.go @@ -14,7 +14,9 @@ package core -import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) const ( // GardenerSeedLeaseNamespace is the namespace in which Gardenlet will report Seeds' diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types_cloudprofile.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types_cloudprofile.go index b77e77eb3..3c582e078 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/types_cloudprofile.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types_cloudprofile.go @@ -98,6 +98,11 @@ type MachineImage struct { Name string // Versions contains versions, expiration dates and container runtimes of the machine image Versions []MachineImageVersion + // UpdateStrategy is the update strategy to use for the machine image. Possible values are: + // - patch: update to the latest patch version of the current minor version. + // - minor: update to the latest minor and patch version. + // - major: always update to the overall latest version (default). + UpdateStrategy *MachineImageUpdateStrategy } // MachineImageVersion is an expirable version with list of supported container runtimes and interfaces @@ -212,3 +217,17 @@ const ( // and will eventually expire. ClassificationDeprecated VersionClassification = "deprecated" ) + +// MachineImageUpdateStrategy is the update strategy to use for a machine image +type MachineImageUpdateStrategy string + +const ( + // UpdateStrategyPatch indicates that auto-updates are performed to the latest patch version of the current minor version. + // When using an expired version during the maintenance window, force updates to the latest patch of the next (not necessarily consecutive) minor when using an expired version. + UpdateStrategyPatch MachineImageUpdateStrategy = "patch" + // UpdateStrategyMinor indicates that auto-updates are performed to the latest patch and minor version of the current major version. + // When using an expired version during the maintenance window, force updates to the latest minor and patch of the next (not necessarily consecutive) major version. + UpdateStrategyMinor MachineImageUpdateStrategy = "minor" + // UpdateStrategyMajor indicates that auto-updates are performed always to the overall latest version. + UpdateStrategyMajor MachineImageUpdateStrategy = "major" +) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types_controllerregistration.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types_controllerregistration.go index 6192201fb..0cce61bd9 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/types_controllerregistration.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types_controllerregistration.go @@ -94,7 +94,7 @@ type ControllerRegistrationDeployment struct { // considered for a deployment. // An empty list means that all seeds are selected. SeedSelector *metav1.LabelSelector - // DeploymentRefs holds references to `ControllerDeployments`. Only one element is support now. + // DeploymentRefs holds references to `ControllerDeployments`. Only one element is supported currently. DeploymentRefs []DeploymentRef } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types_seed.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types_seed.go index ffea2cbe4..86a1caac0 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/types_seed.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types_seed.go @@ -278,36 +278,12 @@ type SeedSettingVerticalPodAutoscaler struct { // SeedSettingDependencyWatchdog controls the dependency-watchdog settings for the seed. type SeedSettingDependencyWatchdog struct { - // Endpoint controls the endpoint settings for the dependency-watchdog for the seed. - // Deprecated: This field is deprecated and will be removed in a future version of Gardener. Use `Weeder` instead. - Endpoint *SeedSettingDependencyWatchdogEndpoint - // Probe controls the probe settings for the dependency-watchdog for the seed. - // Deprecated: This field is deprecated and will be removed in a future version of Gardener. Use `Prober` instead. - Probe *SeedSettingDependencyWatchdogProbe // Weeder controls the weeder settings for the dependency-watchdog for the seed. Weeder *SeedSettingDependencyWatchdogWeeder // Prober controls the prober settings for the dependency-watchdog for the seed. Prober *SeedSettingDependencyWatchdogProber } -// SeedSettingDependencyWatchdogEndpoint controls the endpoint settings for the dependency-watchdog for the seed. -// Deprecated: This type is deprecated and will be removed in a future version of Gardener. Use type `SeedSettingDependencyWatchdogWeeder` instead. -type SeedSettingDependencyWatchdogEndpoint struct { - // Enabled controls whether the endpoint controller of the dependency-watchdog should be enabled. This controller - // helps to alleviate the delay where control plane components remain unavailable by finding the respective pods in - // CrashLoopBackoff status and restarting them once their dependants become ready and available again. - Enabled bool -} - -// SeedSettingDependencyWatchdogProbe controls the probe settings for the dependency-watchdog for the seed. -// Deprecated: This type is deprecated and will be removed in a future version of Gardener. Use type `SeedSettingDependencyWatchdogProber` instead. -type SeedSettingDependencyWatchdogProbe struct { - // Enabled controls whether the probe controller of the dependency-watchdog should be enabled. This controller - // scales down the kube-controller-manager, machine-controller-manager and cluster-autoscaler of shoot clusters in case their respective kube-apiserver is not - // reachable via its external ingress in order to avoid melt-down situations. - Enabled bool -} - // SeedSettingDependencyWatchdogWeeder controls the weeder settings for the dependency-watchdog for the seed. type SeedSettingDependencyWatchdogWeeder struct { // Enabled controls whether the weeder of the dependency-watchdog should be enabled. This controller diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults.go index 009b717bf..2d23f2687 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults.go @@ -91,7 +91,13 @@ func SetDefaults_SeedNetworks(obj *SeedNetworks) { } // SetDefaults_SeedSettingDependencyWatchdog sets defaults for SeedSettingDependencyWatchdog objects. -func SetDefaults_SeedSettingDependencyWatchdog(_ *SeedSettingDependencyWatchdog) { +func SetDefaults_SeedSettingDependencyWatchdog(obj *SeedSettingDependencyWatchdog) { + if obj.Weeder == nil { + obj.Weeder = &SeedSettingDependencyWatchdogWeeder{Enabled: true} + } + if obj.Prober == nil { + obj.Prober = &SeedSettingDependencyWatchdogProber{Enabled: true} + } } // SetDefaults_Shoot sets default values for Shoot objects. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_cloudprofile.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_cloudprofile.go index 5b9bd84a2..a744a7db6 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_cloudprofile.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults_cloudprofile.go @@ -20,6 +20,14 @@ import ( v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" ) +// SetDefaults_MachineImage sets default values for MachineImage objects. +func SetDefaults_MachineImage(obj *MachineImage) { + if obj.UpdateStrategy == nil { + updateStrategyMajor := UpdateStrategyMajor + obj.UpdateStrategy = &updateStrategyMajor + } +} + // SetDefaults_MachineImageVersion sets default values for MachineImageVersion objects. func SetDefaults_MachineImageVersion(obj *MachineImageVersion) { if len(obj.CRI) == 0 { diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.pb.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.pb.go index c1debd393..86f454346 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.pb.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.pb.go @@ -3553,66 +3553,10 @@ func (m *SeedSettingDependencyWatchdog) XXX_DiscardUnknown() { var xxx_messageInfo_SeedSettingDependencyWatchdog proto.InternalMessageInfo -func (m *SeedSettingDependencyWatchdogEndpoint) Reset() { *m = SeedSettingDependencyWatchdogEndpoint{} } -func (*SeedSettingDependencyWatchdogEndpoint) ProtoMessage() {} -func (*SeedSettingDependencyWatchdogEndpoint) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{125} -} -func (m *SeedSettingDependencyWatchdogEndpoint) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SeedSettingDependencyWatchdogEndpoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *SeedSettingDependencyWatchdogEndpoint) XXX_Merge(src proto.Message) { - xxx_messageInfo_SeedSettingDependencyWatchdogEndpoint.Merge(m, src) -} -func (m *SeedSettingDependencyWatchdogEndpoint) XXX_Size() int { - return m.Size() -} -func (m *SeedSettingDependencyWatchdogEndpoint) XXX_DiscardUnknown() { - xxx_messageInfo_SeedSettingDependencyWatchdogEndpoint.DiscardUnknown(m) -} - -var xxx_messageInfo_SeedSettingDependencyWatchdogEndpoint proto.InternalMessageInfo - -func (m *SeedSettingDependencyWatchdogProbe) Reset() { *m = SeedSettingDependencyWatchdogProbe{} } -func (*SeedSettingDependencyWatchdogProbe) ProtoMessage() {} -func (*SeedSettingDependencyWatchdogProbe) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{126} -} -func (m *SeedSettingDependencyWatchdogProbe) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *SeedSettingDependencyWatchdogProbe) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *SeedSettingDependencyWatchdogProbe) XXX_Merge(src proto.Message) { - xxx_messageInfo_SeedSettingDependencyWatchdogProbe.Merge(m, src) -} -func (m *SeedSettingDependencyWatchdogProbe) XXX_Size() int { - return m.Size() -} -func (m *SeedSettingDependencyWatchdogProbe) XXX_DiscardUnknown() { - xxx_messageInfo_SeedSettingDependencyWatchdogProbe.DiscardUnknown(m) -} - -var xxx_messageInfo_SeedSettingDependencyWatchdogProbe proto.InternalMessageInfo - func (m *SeedSettingDependencyWatchdogProber) Reset() { *m = SeedSettingDependencyWatchdogProber{} } func (*SeedSettingDependencyWatchdogProber) ProtoMessage() {} func (*SeedSettingDependencyWatchdogProber) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{127} + return fileDescriptor_ca37af0df9a5bbd2, []int{125} } func (m *SeedSettingDependencyWatchdogProber) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3640,7 +3584,7 @@ var xxx_messageInfo_SeedSettingDependencyWatchdogProber proto.InternalMessageInf func (m *SeedSettingDependencyWatchdogWeeder) Reset() { *m = SeedSettingDependencyWatchdogWeeder{} } func (*SeedSettingDependencyWatchdogWeeder) ProtoMessage() {} func (*SeedSettingDependencyWatchdogWeeder) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{128} + return fileDescriptor_ca37af0df9a5bbd2, []int{126} } func (m *SeedSettingDependencyWatchdogWeeder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3668,7 +3612,7 @@ var xxx_messageInfo_SeedSettingDependencyWatchdogWeeder proto.InternalMessageInf func (m *SeedSettingExcessCapacityReservation) Reset() { *m = SeedSettingExcessCapacityReservation{} } func (*SeedSettingExcessCapacityReservation) ProtoMessage() {} func (*SeedSettingExcessCapacityReservation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{129} + return fileDescriptor_ca37af0df9a5bbd2, []int{127} } func (m *SeedSettingExcessCapacityReservation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3698,7 +3642,7 @@ func (m *SeedSettingExcessCapacityReservationConfig) Reset() { } func (*SeedSettingExcessCapacityReservationConfig) ProtoMessage() {} func (*SeedSettingExcessCapacityReservationConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{130} + return fileDescriptor_ca37af0df9a5bbd2, []int{128} } func (m *SeedSettingExcessCapacityReservationConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3726,7 +3670,7 @@ var xxx_messageInfo_SeedSettingExcessCapacityReservationConfig proto.InternalMes func (m *SeedSettingLoadBalancerServices) Reset() { *m = SeedSettingLoadBalancerServices{} } func (*SeedSettingLoadBalancerServices) ProtoMessage() {} func (*SeedSettingLoadBalancerServices) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{131} + return fileDescriptor_ca37af0df9a5bbd2, []int{129} } func (m *SeedSettingLoadBalancerServices) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3754,7 +3698,7 @@ var xxx_messageInfo_SeedSettingLoadBalancerServices proto.InternalMessageInfo func (m *SeedSettingLoadBalancerServicesZones) Reset() { *m = SeedSettingLoadBalancerServicesZones{} } func (*SeedSettingLoadBalancerServicesZones) ProtoMessage() {} func (*SeedSettingLoadBalancerServicesZones) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{132} + return fileDescriptor_ca37af0df9a5bbd2, []int{130} } func (m *SeedSettingLoadBalancerServicesZones) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3782,7 +3726,7 @@ var xxx_messageInfo_SeedSettingLoadBalancerServicesZones proto.InternalMessageIn func (m *SeedSettingScheduling) Reset() { *m = SeedSettingScheduling{} } func (*SeedSettingScheduling) ProtoMessage() {} func (*SeedSettingScheduling) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{133} + return fileDescriptor_ca37af0df9a5bbd2, []int{131} } func (m *SeedSettingScheduling) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3810,7 +3754,7 @@ var xxx_messageInfo_SeedSettingScheduling proto.InternalMessageInfo func (m *SeedSettingTopologyAwareRouting) Reset() { *m = SeedSettingTopologyAwareRouting{} } func (*SeedSettingTopologyAwareRouting) ProtoMessage() {} func (*SeedSettingTopologyAwareRouting) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{134} + return fileDescriptor_ca37af0df9a5bbd2, []int{132} } func (m *SeedSettingTopologyAwareRouting) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3838,7 +3782,7 @@ var xxx_messageInfo_SeedSettingTopologyAwareRouting proto.InternalMessageInfo func (m *SeedSettingVerticalPodAutoscaler) Reset() { *m = SeedSettingVerticalPodAutoscaler{} } func (*SeedSettingVerticalPodAutoscaler) ProtoMessage() {} func (*SeedSettingVerticalPodAutoscaler) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{135} + return fileDescriptor_ca37af0df9a5bbd2, []int{133} } func (m *SeedSettingVerticalPodAutoscaler) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3866,7 +3810,7 @@ var xxx_messageInfo_SeedSettingVerticalPodAutoscaler proto.InternalMessageInfo func (m *SeedSettings) Reset() { *m = SeedSettings{} } func (*SeedSettings) ProtoMessage() {} func (*SeedSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{136} + return fileDescriptor_ca37af0df9a5bbd2, []int{134} } func (m *SeedSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3894,7 +3838,7 @@ var xxx_messageInfo_SeedSettings proto.InternalMessageInfo func (m *SeedSpec) Reset() { *m = SeedSpec{} } func (*SeedSpec) ProtoMessage() {} func (*SeedSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{137} + return fileDescriptor_ca37af0df9a5bbd2, []int{135} } func (m *SeedSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3922,7 +3866,7 @@ var xxx_messageInfo_SeedSpec proto.InternalMessageInfo func (m *SeedStatus) Reset() { *m = SeedStatus{} } func (*SeedStatus) ProtoMessage() {} func (*SeedStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{138} + return fileDescriptor_ca37af0df9a5bbd2, []int{136} } func (m *SeedStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3950,7 +3894,7 @@ var xxx_messageInfo_SeedStatus proto.InternalMessageInfo func (m *SeedTaint) Reset() { *m = SeedTaint{} } func (*SeedTaint) ProtoMessage() {} func (*SeedTaint) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{139} + return fileDescriptor_ca37af0df9a5bbd2, []int{137} } func (m *SeedTaint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3978,7 +3922,7 @@ var xxx_messageInfo_SeedTaint proto.InternalMessageInfo func (m *SeedTemplate) Reset() { *m = SeedTemplate{} } func (*SeedTemplate) ProtoMessage() {} func (*SeedTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{140} + return fileDescriptor_ca37af0df9a5bbd2, []int{138} } func (m *SeedTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4006,7 +3950,7 @@ var xxx_messageInfo_SeedTemplate proto.InternalMessageInfo func (m *SeedVolume) Reset() { *m = SeedVolume{} } func (*SeedVolume) ProtoMessage() {} func (*SeedVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{141} + return fileDescriptor_ca37af0df9a5bbd2, []int{139} } func (m *SeedVolume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4034,7 +3978,7 @@ var xxx_messageInfo_SeedVolume proto.InternalMessageInfo func (m *SeedVolumeProvider) Reset() { *m = SeedVolumeProvider{} } func (*SeedVolumeProvider) ProtoMessage() {} func (*SeedVolumeProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{142} + return fileDescriptor_ca37af0df9a5bbd2, []int{140} } func (m *SeedVolumeProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4062,7 +4006,7 @@ var xxx_messageInfo_SeedVolumeProvider proto.InternalMessageInfo func (m *ServiceAccountConfig) Reset() { *m = ServiceAccountConfig{} } func (*ServiceAccountConfig) ProtoMessage() {} func (*ServiceAccountConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{143} + return fileDescriptor_ca37af0df9a5bbd2, []int{141} } func (m *ServiceAccountConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4090,7 +4034,7 @@ var xxx_messageInfo_ServiceAccountConfig proto.InternalMessageInfo func (m *ServiceAccountKeyRotation) Reset() { *m = ServiceAccountKeyRotation{} } func (*ServiceAccountKeyRotation) ProtoMessage() {} func (*ServiceAccountKeyRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{144} + return fileDescriptor_ca37af0df9a5bbd2, []int{142} } func (m *ServiceAccountKeyRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4118,7 +4062,7 @@ var xxx_messageInfo_ServiceAccountKeyRotation proto.InternalMessageInfo func (m *Shoot) Reset() { *m = Shoot{} } func (*Shoot) ProtoMessage() {} func (*Shoot) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{145} + return fileDescriptor_ca37af0df9a5bbd2, []int{143} } func (m *Shoot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4146,7 +4090,7 @@ var xxx_messageInfo_Shoot proto.InternalMessageInfo func (m *ShootAdvertisedAddress) Reset() { *m = ShootAdvertisedAddress{} } func (*ShootAdvertisedAddress) ProtoMessage() {} func (*ShootAdvertisedAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{146} + return fileDescriptor_ca37af0df9a5bbd2, []int{144} } func (m *ShootAdvertisedAddress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4174,7 +4118,7 @@ var xxx_messageInfo_ShootAdvertisedAddress proto.InternalMessageInfo func (m *ShootCredentials) Reset() { *m = ShootCredentials{} } func (*ShootCredentials) ProtoMessage() {} func (*ShootCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{147} + return fileDescriptor_ca37af0df9a5bbd2, []int{145} } func (m *ShootCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4202,7 +4146,7 @@ var xxx_messageInfo_ShootCredentials proto.InternalMessageInfo func (m *ShootCredentialsRotation) Reset() { *m = ShootCredentialsRotation{} } func (*ShootCredentialsRotation) ProtoMessage() {} func (*ShootCredentialsRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{148} + return fileDescriptor_ca37af0df9a5bbd2, []int{146} } func (m *ShootCredentialsRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4230,7 +4174,7 @@ var xxx_messageInfo_ShootCredentialsRotation proto.InternalMessageInfo func (m *ShootKubeconfigRotation) Reset() { *m = ShootKubeconfigRotation{} } func (*ShootKubeconfigRotation) ProtoMessage() {} func (*ShootKubeconfigRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{149} + return fileDescriptor_ca37af0df9a5bbd2, []int{147} } func (m *ShootKubeconfigRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4258,7 +4202,7 @@ var xxx_messageInfo_ShootKubeconfigRotation proto.InternalMessageInfo func (m *ShootList) Reset() { *m = ShootList{} } func (*ShootList) ProtoMessage() {} func (*ShootList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{150} + return fileDescriptor_ca37af0df9a5bbd2, []int{148} } func (m *ShootList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4286,7 +4230,7 @@ var xxx_messageInfo_ShootList proto.InternalMessageInfo func (m *ShootMachineImage) Reset() { *m = ShootMachineImage{} } func (*ShootMachineImage) ProtoMessage() {} func (*ShootMachineImage) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{151} + return fileDescriptor_ca37af0df9a5bbd2, []int{149} } func (m *ShootMachineImage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4314,7 +4258,7 @@ var xxx_messageInfo_ShootMachineImage proto.InternalMessageInfo func (m *ShootNetworks) Reset() { *m = ShootNetworks{} } func (*ShootNetworks) ProtoMessage() {} func (*ShootNetworks) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{152} + return fileDescriptor_ca37af0df9a5bbd2, []int{150} } func (m *ShootNetworks) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4342,7 +4286,7 @@ var xxx_messageInfo_ShootNetworks proto.InternalMessageInfo func (m *ShootSSHKeypairRotation) Reset() { *m = ShootSSHKeypairRotation{} } func (*ShootSSHKeypairRotation) ProtoMessage() {} func (*ShootSSHKeypairRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{153} + return fileDescriptor_ca37af0df9a5bbd2, []int{151} } func (m *ShootSSHKeypairRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4370,7 +4314,7 @@ var xxx_messageInfo_ShootSSHKeypairRotation proto.InternalMessageInfo func (m *ShootSpec) Reset() { *m = ShootSpec{} } func (*ShootSpec) ProtoMessage() {} func (*ShootSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{154} + return fileDescriptor_ca37af0df9a5bbd2, []int{152} } func (m *ShootSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4398,7 +4342,7 @@ var xxx_messageInfo_ShootSpec proto.InternalMessageInfo func (m *ShootState) Reset() { *m = ShootState{} } func (*ShootState) ProtoMessage() {} func (*ShootState) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{155} + return fileDescriptor_ca37af0df9a5bbd2, []int{153} } func (m *ShootState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4426,7 +4370,7 @@ var xxx_messageInfo_ShootState proto.InternalMessageInfo func (m *ShootStateList) Reset() { *m = ShootStateList{} } func (*ShootStateList) ProtoMessage() {} func (*ShootStateList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{156} + return fileDescriptor_ca37af0df9a5bbd2, []int{154} } func (m *ShootStateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4454,7 +4398,7 @@ var xxx_messageInfo_ShootStateList proto.InternalMessageInfo func (m *ShootStateSpec) Reset() { *m = ShootStateSpec{} } func (*ShootStateSpec) ProtoMessage() {} func (*ShootStateSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{157} + return fileDescriptor_ca37af0df9a5bbd2, []int{155} } func (m *ShootStateSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4482,7 +4426,7 @@ var xxx_messageInfo_ShootStateSpec proto.InternalMessageInfo func (m *ShootStatus) Reset() { *m = ShootStatus{} } func (*ShootStatus) ProtoMessage() {} func (*ShootStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{158} + return fileDescriptor_ca37af0df9a5bbd2, []int{156} } func (m *ShootStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4510,7 +4454,7 @@ var xxx_messageInfo_ShootStatus proto.InternalMessageInfo func (m *ShootTemplate) Reset() { *m = ShootTemplate{} } func (*ShootTemplate) ProtoMessage() {} func (*ShootTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{159} + return fileDescriptor_ca37af0df9a5bbd2, []int{157} } func (m *ShootTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4538,7 +4482,7 @@ var xxx_messageInfo_ShootTemplate proto.InternalMessageInfo func (m *SystemComponents) Reset() { *m = SystemComponents{} } func (*SystemComponents) ProtoMessage() {} func (*SystemComponents) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{160} + return fileDescriptor_ca37af0df9a5bbd2, []int{158} } func (m *SystemComponents) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4566,7 +4510,7 @@ var xxx_messageInfo_SystemComponents proto.InternalMessageInfo func (m *Toleration) Reset() { *m = Toleration{} } func (*Toleration) ProtoMessage() {} func (*Toleration) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{161} + return fileDescriptor_ca37af0df9a5bbd2, []int{159} } func (m *Toleration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4594,7 +4538,7 @@ var xxx_messageInfo_Toleration proto.InternalMessageInfo func (m *VerticalPodAutoscaler) Reset() { *m = VerticalPodAutoscaler{} } func (*VerticalPodAutoscaler) ProtoMessage() {} func (*VerticalPodAutoscaler) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{162} + return fileDescriptor_ca37af0df9a5bbd2, []int{160} } func (m *VerticalPodAutoscaler) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4622,7 +4566,7 @@ var xxx_messageInfo_VerticalPodAutoscaler proto.InternalMessageInfo func (m *Volume) Reset() { *m = Volume{} } func (*Volume) ProtoMessage() {} func (*Volume) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{163} + return fileDescriptor_ca37af0df9a5bbd2, []int{161} } func (m *Volume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4650,7 +4594,7 @@ var xxx_messageInfo_Volume proto.InternalMessageInfo func (m *VolumeType) Reset() { *m = VolumeType{} } func (*VolumeType) ProtoMessage() {} func (*VolumeType) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{164} + return fileDescriptor_ca37af0df9a5bbd2, []int{162} } func (m *VolumeType) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4678,7 +4622,7 @@ var xxx_messageInfo_VolumeType proto.InternalMessageInfo func (m *WatchCacheSizes) Reset() { *m = WatchCacheSizes{} } func (*WatchCacheSizes) ProtoMessage() {} func (*WatchCacheSizes) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{165} + return fileDescriptor_ca37af0df9a5bbd2, []int{163} } func (m *WatchCacheSizes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4706,7 +4650,7 @@ var xxx_messageInfo_WatchCacheSizes proto.InternalMessageInfo func (m *Worker) Reset() { *m = Worker{} } func (*Worker) ProtoMessage() {} func (*Worker) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{166} + return fileDescriptor_ca37af0df9a5bbd2, []int{164} } func (m *Worker) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4734,7 +4678,7 @@ var xxx_messageInfo_Worker proto.InternalMessageInfo func (m *WorkerKubernetes) Reset() { *m = WorkerKubernetes{} } func (*WorkerKubernetes) ProtoMessage() {} func (*WorkerKubernetes) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{167} + return fileDescriptor_ca37af0df9a5bbd2, []int{165} } func (m *WorkerKubernetes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4762,7 +4706,7 @@ var xxx_messageInfo_WorkerKubernetes proto.InternalMessageInfo func (m *WorkerSystemComponents) Reset() { *m = WorkerSystemComponents{} } func (*WorkerSystemComponents) ProtoMessage() {} func (*WorkerSystemComponents) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{168} + return fileDescriptor_ca37af0df9a5bbd2, []int{166} } func (m *WorkerSystemComponents) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4790,7 +4734,7 @@ var xxx_messageInfo_WorkerSystemComponents proto.InternalMessageInfo func (m *WorkersSettings) Reset() { *m = WorkersSettings{} } func (*WorkersSettings) ProtoMessage() {} func (*WorkersSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{169} + return fileDescriptor_ca37af0df9a5bbd2, []int{167} } func (m *WorkersSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4951,8 +4895,6 @@ func init() { proto.RegisterType((*SeedProvider)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedProvider") proto.RegisterType((*SeedSelector)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedSelector") proto.RegisterType((*SeedSettingDependencyWatchdog)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedSettingDependencyWatchdog") - proto.RegisterType((*SeedSettingDependencyWatchdogEndpoint)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedSettingDependencyWatchdogEndpoint") - proto.RegisterType((*SeedSettingDependencyWatchdogProbe)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedSettingDependencyWatchdogProbe") proto.RegisterType((*SeedSettingDependencyWatchdogProber)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedSettingDependencyWatchdogProber") proto.RegisterType((*SeedSettingDependencyWatchdogWeeder)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedSettingDependencyWatchdogWeeder") proto.RegisterType((*SeedSettingExcessCapacityReservation)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedSettingExcessCapacityReservation") @@ -5012,758 +4954,755 @@ func init() { } var fileDescriptor_ca37af0df9a5bbd2 = []byte{ - // 12005 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x6c, 0x24, 0xc9, - 0x75, 0x98, 0x7a, 0xf8, 0x35, 0x7c, 0xfc, 0x58, 0x6e, 0xed, 0xc7, 0x71, 0xb9, 0x77, 0x3b, 0xab, - 0xbe, 0x93, 0x72, 0xe7, 0x93, 0xb9, 0xbe, 0xb3, 0xe4, 0xd3, 0xad, 0x7c, 0x3a, 0x91, 0x33, 0xdc, - 0xdd, 0xf1, 0x92, 0x5c, 0x5e, 0x0d, 0x79, 0x77, 0x3a, 0x3b, 0x67, 0x37, 0xa7, 0x8b, 0xc3, 0x3e, - 0xf6, 0x74, 0xcf, 0x75, 0xf7, 0x70, 0x39, 0x77, 0x76, 0x6c, 0xcb, 0x96, 0x62, 0x9d, 0xad, 0xc0, - 0x10, 0xe0, 0x28, 0x92, 0x9c, 0x58, 0x86, 0xe1, 0x38, 0x89, 0x03, 0xc7, 0x70, 0xe0, 0x00, 0xb6, - 0x11, 0xc0, 0x10, 0x90, 0x58, 0x32, 0x2c, 0x43, 0x90, 0x12, 0x44, 0x42, 0x62, 0x3a, 0x62, 0x14, - 0x39, 0x40, 0x02, 0x23, 0x80, 0x11, 0x04, 0xd9, 0x18, 0x4e, 0x50, 0x5f, 0xdd, 0xd5, 0x5f, 0x43, - 0xb2, 0x87, 0xa4, 0x74, 0xb0, 0x7f, 0x91, 0x53, 0x1f, 0xef, 0x55, 0x55, 0x57, 0xbd, 0x7a, 0xef, - 0xd5, 0xfb, 0x80, 0xc5, 0x96, 0x15, 0x6c, 0x77, 0x37, 0xe7, 0x9b, 0x6e, 0xfb, 0x46, 0xcb, 0xf0, - 0x4c, 0xe2, 0x10, 0x2f, 0xfa, 0xa7, 0xb3, 0xd3, 0xba, 0x61, 0x74, 0x2c, 0xff, 0x46, 0xd3, 0xf5, - 0xc8, 0x8d, 0xdd, 0xa7, 0x36, 0x49, 0x60, 0x3c, 0x75, 0xa3, 0x45, 0xeb, 0x8c, 0x80, 0x98, 0xf3, - 0x1d, 0xcf, 0x0d, 0x5c, 0xf4, 0x74, 0x04, 0x63, 0x5e, 0x76, 0x8d, 0xfe, 0xe9, 0xec, 0xb4, 0xe6, - 0x29, 0x8c, 0x79, 0x0a, 0x63, 0x5e, 0xc0, 0x98, 0xfb, 0x6e, 0x15, 0xaf, 0xdb, 0x72, 0x6f, 0x30, - 0x50, 0x9b, 0xdd, 0x2d, 0xf6, 0x8b, 0xfd, 0x60, 0xff, 0x71, 0x14, 0x73, 0x4f, 0xec, 0xbc, 0xdf, - 0x9f, 0xb7, 0x5c, 0x3a, 0x98, 0x1b, 0x46, 0x37, 0x70, 0xfd, 0xa6, 0x61, 0x5b, 0x4e, 0xeb, 0xc6, - 0x6e, 0x6a, 0x34, 0x73, 0xba, 0xd2, 0x54, 0x0c, 0xbb, 0x6f, 0x1b, 0x6f, 0xd3, 0x68, 0x66, 0xb5, - 0x79, 0x6f, 0xd4, 0xa6, 0x6d, 0x34, 0xb7, 0x2d, 0x87, 0x78, 0x3d, 0xb9, 0x20, 0x37, 0x3c, 0xe2, - 0xbb, 0x5d, 0xaf, 0x49, 0x8e, 0xd5, 0xcb, 0xbf, 0xd1, 0x26, 0x81, 0x91, 0x85, 0xeb, 0x46, 0x5e, - 0x2f, 0xaf, 0xeb, 0x04, 0x56, 0x3b, 0x8d, 0xe6, 0xfb, 0x0e, 0xeb, 0xe0, 0x37, 0xb7, 0x49, 0xdb, - 0x48, 0xf5, 0xfb, 0xde, 0xbc, 0x7e, 0xdd, 0xc0, 0xb2, 0x6f, 0x58, 0x4e, 0xe0, 0x07, 0x5e, 0xb2, - 0x93, 0xfe, 0x96, 0x06, 0x33, 0x0b, 0x6b, 0xf5, 0x06, 0xf1, 0x76, 0x89, 0xb7, 0xec, 0xb6, 0x5a, - 0x96, 0xd3, 0x42, 0x4f, 0xc2, 0xf8, 0x2e, 0xf1, 0x36, 0x5d, 0xdf, 0x0a, 0x7a, 0xb3, 0xda, 0x75, - 0xed, 0xf1, 0x91, 0xc5, 0xa9, 0x83, 0xfd, 0xca, 0xf8, 0x8b, 0xb2, 0x10, 0x47, 0xf5, 0xa8, 0x0e, - 0x17, 0xb6, 0x83, 0xa0, 0xb3, 0xd0, 0x6c, 0x12, 0xdf, 0x0f, 0x5b, 0xcc, 0x96, 0x58, 0xb7, 0x87, - 0x0e, 0xf6, 0x2b, 0x17, 0xee, 0xac, 0xaf, 0xaf, 0x25, 0xaa, 0x71, 0x56, 0x1f, 0xfd, 0xb7, 0x34, - 0x38, 0x1f, 0x0e, 0x06, 0x93, 0xd7, 0xbb, 0xc4, 0x0f, 0x7c, 0x84, 0xe1, 0x72, 0xdb, 0xd8, 0x5b, - 0x75, 0x9d, 0x95, 0x6e, 0x60, 0x04, 0x96, 0xd3, 0xaa, 0x3b, 0x5b, 0xb6, 0xd5, 0xda, 0x0e, 0xc4, - 0xd0, 0xe6, 0x0e, 0xf6, 0x2b, 0x97, 0x57, 0x32, 0x5b, 0xe0, 0x9c, 0x9e, 0x74, 0xd0, 0x6d, 0x63, - 0x2f, 0x05, 0x50, 0x19, 0xf4, 0x4a, 0xba, 0x1a, 0x67, 0xf5, 0xd1, 0x9f, 0x86, 0x91, 0x05, 0xd3, - 0x74, 0x1d, 0xf4, 0x04, 0x8c, 0x11, 0xc7, 0xd8, 0xb4, 0x89, 0xc9, 0x06, 0x56, 0x5e, 0x3c, 0xf7, - 0x85, 0xfd, 0xca, 0x3b, 0x0e, 0xf6, 0x2b, 0x63, 0x4b, 0xbc, 0x18, 0xcb, 0x7a, 0xfd, 0x17, 0x4a, - 0x30, 0xca, 0x3a, 0xf9, 0xe8, 0x93, 0x1a, 0x5c, 0xd8, 0xe9, 0x6e, 0x12, 0xcf, 0x21, 0x01, 0xf1, - 0x6b, 0x86, 0xbf, 0xbd, 0xe9, 0x1a, 0x1e, 0x07, 0x31, 0xf1, 0xf4, 0xed, 0xf9, 0xe3, 0x9f, 0xbf, - 0xf9, 0xbb, 0x69, 0x70, 0x7c, 0x4e, 0x19, 0x15, 0x38, 0x0b, 0x39, 0xda, 0x85, 0x49, 0xa7, 0x65, - 0x39, 0x7b, 0x75, 0xa7, 0xe5, 0x11, 0xdf, 0x67, 0xeb, 0x32, 0xf1, 0xf4, 0x87, 0x8a, 0x0c, 0x66, - 0x55, 0x81, 0xb3, 0x38, 0x73, 0xb0, 0x5f, 0x99, 0x54, 0x4b, 0x70, 0x0c, 0x8f, 0xfe, 0x57, 0x1a, - 0x9c, 0x5b, 0x30, 0xdb, 0x96, 0xef, 0x5b, 0xae, 0xb3, 0x66, 0x77, 0x5b, 0x96, 0x83, 0xae, 0xc3, - 0xb0, 0x63, 0xb4, 0x09, 0x5b, 0x90, 0xf1, 0xc5, 0x49, 0xb1, 0xa6, 0xc3, 0xab, 0x46, 0x9b, 0x60, - 0x56, 0x83, 0x5e, 0x80, 0xd1, 0xa6, 0xeb, 0x6c, 0x59, 0x2d, 0x31, 0xce, 0xef, 0x9e, 0xe7, 0x27, - 0x61, 0x5e, 0x3d, 0x09, 0x6c, 0x78, 0xe2, 0x04, 0xcd, 0x63, 0xe3, 0xfe, 0xd2, 0x5e, 0x40, 0x1c, - 0x8a, 0x66, 0x11, 0x0e, 0xf6, 0x2b, 0xa3, 0x55, 0x06, 0x00, 0x0b, 0x40, 0xe8, 0x71, 0x28, 0x9b, - 0x96, 0xcf, 0x3f, 0xe6, 0x10, 0xfb, 0x98, 0x93, 0x07, 0xfb, 0x95, 0x72, 0x4d, 0x94, 0xe1, 0xb0, - 0x16, 0x2d, 0xc3, 0x45, 0xba, 0x82, 0xbc, 0x5f, 0x83, 0x34, 0x3d, 0x12, 0xd0, 0xa1, 0xcd, 0x0e, - 0xb3, 0xe1, 0xce, 0x1e, 0xec, 0x57, 0x2e, 0xde, 0xcd, 0xa8, 0xc7, 0x99, 0xbd, 0xf4, 0x5b, 0x50, - 0x5e, 0xb0, 0x89, 0x47, 0x37, 0x18, 0xba, 0x09, 0xd3, 0xa4, 0x6d, 0x58, 0x36, 0x26, 0x4d, 0x62, - 0xed, 0x12, 0xcf, 0x9f, 0xd5, 0xae, 0x0f, 0x3d, 0x3e, 0xbe, 0x88, 0x0e, 0xf6, 0x2b, 0xd3, 0x4b, - 0xb1, 0x1a, 0x9c, 0x68, 0xa9, 0xff, 0xa4, 0x06, 0x13, 0x0b, 0x5d, 0xd3, 0x0a, 0xf8, 0xbc, 0x90, - 0x07, 0x13, 0x06, 0xfd, 0xb9, 0xe6, 0xda, 0x56, 0xb3, 0x27, 0x36, 0xd7, 0xf3, 0x45, 0xbe, 0xe7, - 0x42, 0x04, 0x66, 0xf1, 0xdc, 0xc1, 0x7e, 0x65, 0x42, 0x29, 0xc0, 0x2a, 0x12, 0x7d, 0x1b, 0xd4, - 0x3a, 0xf4, 0x61, 0x98, 0xe4, 0xd3, 0x5d, 0x31, 0x3a, 0x98, 0x6c, 0x89, 0x31, 0x3c, 0xaa, 0x7c, - 0x2b, 0x89, 0x68, 0xfe, 0xde, 0xe6, 0x6b, 0xa4, 0x19, 0x60, 0xb2, 0x45, 0x3c, 0xe2, 0x34, 0x09, - 0xdf, 0x36, 0x55, 0xa5, 0x33, 0x8e, 0x81, 0xd2, 0xff, 0x94, 0x12, 0xb1, 0x5d, 0xc3, 0xb2, 0x8d, - 0x4d, 0xcb, 0xb6, 0x82, 0xde, 0x2b, 0xae, 0x43, 0x8e, 0xb0, 0x6f, 0x36, 0xe0, 0xa1, 0xae, 0x63, - 0xf0, 0x7e, 0x36, 0x59, 0xe1, 0x3b, 0x65, 0xbd, 0xd7, 0x21, 0x74, 0xc3, 0xd3, 0x95, 0xbe, 0x7a, - 0xb0, 0x5f, 0x79, 0x68, 0x23, 0xbb, 0x09, 0xce, 0xeb, 0x4b, 0xe9, 0x95, 0x52, 0xf5, 0xa2, 0x6b, - 0x77, 0xdb, 0x02, 0xea, 0x10, 0x83, 0xca, 0xe8, 0xd5, 0x46, 0x66, 0x0b, 0x9c, 0xd3, 0x53, 0xff, - 0x42, 0x09, 0x26, 0x17, 0x8d, 0xe6, 0x4e, 0xb7, 0xb3, 0xd8, 0x6d, 0xee, 0x90, 0x00, 0xfd, 0x08, - 0x94, 0xe9, 0x85, 0x63, 0x1a, 0x81, 0x21, 0x56, 0xf2, 0x7b, 0x72, 0x77, 0x3d, 0xfb, 0x88, 0xb4, - 0x75, 0xb4, 0xb6, 0x2b, 0x24, 0x30, 0x16, 0x91, 0x58, 0x13, 0x88, 0xca, 0x70, 0x08, 0x15, 0x6d, - 0xc1, 0xb0, 0xdf, 0x21, 0x4d, 0x71, 0xa6, 0x6a, 0x45, 0xf6, 0x8a, 0x3a, 0xe2, 0x46, 0x87, 0x34, - 0xa3, 0xaf, 0x40, 0x7f, 0x61, 0x06, 0x1f, 0x39, 0x30, 0xea, 0x07, 0x46, 0xd0, 0xf5, 0xd9, 0x41, - 0x9b, 0x78, 0xfa, 0xd6, 0xc0, 0x98, 0x18, 0xb4, 0xc5, 0x69, 0x81, 0x6b, 0x94, 0xff, 0xc6, 0x02, - 0x8b, 0xfe, 0x1f, 0x34, 0x98, 0x51, 0x9b, 0x2f, 0x5b, 0x7e, 0x80, 0x7e, 0x28, 0xb5, 0x9c, 0xf3, - 0x47, 0x5b, 0x4e, 0xda, 0x9b, 0x2d, 0xe6, 0x8c, 0x40, 0x57, 0x96, 0x25, 0xca, 0x52, 0x12, 0x18, - 0xb1, 0x02, 0xd2, 0xe6, 0xdb, 0xaa, 0x20, 0x1d, 0x55, 0x87, 0xbc, 0x38, 0x25, 0x90, 0x8d, 0xd4, - 0x29, 0x58, 0xcc, 0xa1, 0xeb, 0x3f, 0x02, 0x17, 0xd5, 0x56, 0x6b, 0x9e, 0xbb, 0x6b, 0x99, 0xc4, - 0xa3, 0x27, 0x21, 0xe8, 0x75, 0x52, 0x27, 0x81, 0xee, 0x2c, 0xcc, 0x6a, 0xd0, 0xbb, 0x61, 0xd4, - 0x23, 0x2d, 0xcb, 0x75, 0xd8, 0xd7, 0x1e, 0x8f, 0xd6, 0x0e, 0xb3, 0x52, 0x2c, 0x6a, 0xf5, 0xff, - 0x55, 0x8a, 0xaf, 0x1d, 0xfd, 0x8c, 0x68, 0x17, 0xca, 0x1d, 0x81, 0x4a, 0xac, 0xdd, 0x9d, 0x41, - 0x27, 0x28, 0x87, 0x1e, 0xad, 0xaa, 0x2c, 0xc1, 0x21, 0x2e, 0x64, 0xc1, 0xb4, 0xfc, 0xbf, 0x3a, - 0x00, 0xf9, 0x67, 0xe4, 0x74, 0x2d, 0x06, 0x08, 0x27, 0x00, 0xa3, 0x75, 0x18, 0xf7, 0x19, 0x91, - 0xa6, 0x84, 0x6b, 0x28, 0x9f, 0x70, 0x35, 0x64, 0x23, 0x41, 0xb8, 0xce, 0x8b, 0xe1, 0x8f, 0x87, - 0x15, 0x38, 0x02, 0x44, 0x2f, 0x19, 0x9f, 0x10, 0x53, 0xb9, 0x2e, 0xd8, 0x25, 0xd3, 0x10, 0x65, - 0x38, 0xac, 0xd5, 0x3f, 0x37, 0x0c, 0x28, 0xbd, 0xc5, 0xd5, 0x15, 0xe0, 0x25, 0x62, 0xfd, 0x07, - 0x59, 0x01, 0x71, 0x5a, 0x12, 0x80, 0xd1, 0x1b, 0x30, 0x65, 0x1b, 0x7e, 0x70, 0xaf, 0x43, 0xb9, - 0x47, 0xb9, 0x51, 0x26, 0x9e, 0x5e, 0x28, 0xf2, 0xa5, 0x97, 0x55, 0x40, 0x8b, 0xe7, 0x0f, 0xf6, - 0x2b, 0x53, 0xb1, 0x22, 0x1c, 0x47, 0x85, 0x5e, 0x83, 0x71, 0x5a, 0xb0, 0xe4, 0x79, 0xae, 0x27, - 0x56, 0xff, 0xb9, 0xa2, 0x78, 0x19, 0x10, 0xce, 0xcd, 0x86, 0x3f, 0x71, 0x04, 0x1e, 0xfd, 0x00, - 0x20, 0x77, 0xd3, 0xa7, 0x0c, 0xa8, 0x79, 0x9b, 0xb3, 0xca, 0x74, 0xb2, 0xf4, 0xeb, 0x0c, 0x2d, - 0xce, 0x89, 0xaf, 0x89, 0xee, 0xa5, 0x5a, 0xe0, 0x8c, 0x5e, 0x68, 0x07, 0x50, 0xc8, 0x6e, 0x87, - 0x1b, 0x60, 0x76, 0xe4, 0xe8, 0xdb, 0xe7, 0x32, 0x45, 0x76, 0x3b, 0x05, 0x02, 0x67, 0x80, 0xd5, - 0xff, 0x4d, 0x09, 0x26, 0xf8, 0x16, 0x59, 0x72, 0x02, 0xaf, 0x77, 0x06, 0x17, 0x04, 0x89, 0x5d, - 0x10, 0xd5, 0xe2, 0x67, 0x9e, 0x0d, 0x38, 0xf7, 0x7e, 0x68, 0x27, 0xee, 0x87, 0xa5, 0x41, 0x11, - 0xf5, 0xbf, 0x1e, 0xfe, 0xbd, 0x06, 0xe7, 0x94, 0xd6, 0x67, 0x70, 0x3b, 0x98, 0xf1, 0xdb, 0xe1, - 0xf9, 0x01, 0xe7, 0x97, 0x73, 0x39, 0xb8, 0xb1, 0x69, 0x31, 0xc2, 0xfd, 0x34, 0xc0, 0x26, 0x23, - 0x27, 0xab, 0x11, 0x9f, 0x14, 0x7e, 0xf2, 0xc5, 0xb0, 0x06, 0x2b, 0xad, 0x62, 0x34, 0xab, 0xd4, - 0x97, 0x66, 0xfd, 0xd7, 0x21, 0x38, 0x9f, 0x5a, 0xf6, 0x34, 0x1d, 0xd1, 0xbe, 0x4d, 0x74, 0xa4, - 0xf4, 0xed, 0xa0, 0x23, 0x43, 0x85, 0xe8, 0xc8, 0x91, 0xef, 0x09, 0xe4, 0x01, 0x6a, 0x5b, 0x2d, - 0xde, 0xad, 0x11, 0x18, 0x5e, 0xb0, 0x6e, 0xb5, 0x89, 0xa0, 0x38, 0xdf, 0x75, 0xb4, 0x2d, 0x4b, - 0x7b, 0x70, 0xc2, 0xb3, 0x92, 0x82, 0x84, 0x33, 0xa0, 0xeb, 0x5f, 0x19, 0x06, 0xa8, 0x2e, 0x60, - 0x37, 0xe0, 0x83, 0x7d, 0x1e, 0x46, 0x3a, 0xdb, 0x86, 0x2f, 0xf7, 0xd3, 0x13, 0x72, 0x33, 0xae, - 0xd1, 0xc2, 0x07, 0xfb, 0x95, 0xd9, 0xaa, 0x47, 0x4c, 0xe2, 0x04, 0x96, 0x61, 0xfb, 0xb2, 0x13, - 0xab, 0xc3, 0xbc, 0x1f, 0x9d, 0x03, 0x5d, 0xc6, 0xaa, 0xdb, 0xee, 0xd8, 0x84, 0xd6, 0xb2, 0x39, - 0x94, 0x8a, 0xcd, 0x61, 0x39, 0x05, 0x09, 0x67, 0x40, 0x97, 0x38, 0xeb, 0x8e, 0x15, 0x58, 0x46, - 0x88, 0x73, 0xa8, 0x38, 0xce, 0x38, 0x24, 0x9c, 0x01, 0x1d, 0xbd, 0xa5, 0xc1, 0x5c, 0xbc, 0xf8, - 0x96, 0xe5, 0x58, 0xfe, 0x36, 0x31, 0x19, 0xf2, 0xe1, 0x63, 0x23, 0xbf, 0x76, 0xb0, 0x5f, 0x99, - 0x5b, 0xce, 0x85, 0x88, 0xfb, 0x60, 0x43, 0x9f, 0xd0, 0xe0, 0x6a, 0x62, 0x5d, 0x3c, 0xab, 0xd5, - 0x22, 0x9e, 0x18, 0xcd, 0xf1, 0xb7, 0x50, 0xe5, 0x60, 0xbf, 0x72, 0x75, 0x39, 0x1f, 0x24, 0xee, - 0x87, 0x4f, 0xff, 0xbc, 0x06, 0x43, 0x55, 0x5c, 0x47, 0x4f, 0xc6, 0x84, 0xb8, 0x87, 0x54, 0x21, - 0xee, 0xc1, 0x7e, 0x65, 0xac, 0x8a, 0xeb, 0x8a, 0x3c, 0xf7, 0x09, 0x0d, 0xce, 0x37, 0x5d, 0x27, - 0x30, 0xe8, 0xb8, 0x30, 0xe7, 0x74, 0x24, 0x55, 0x2d, 0x24, 0xbf, 0x54, 0x13, 0xc0, 0x16, 0xaf, - 0x88, 0x01, 0x9c, 0x4f, 0xd6, 0xf8, 0x38, 0x8d, 0x59, 0xff, 0x9a, 0x06, 0x93, 0x55, 0xdb, 0xed, - 0x9a, 0x6b, 0x9e, 0xbb, 0x65, 0xd9, 0xe4, 0xed, 0x21, 0xb4, 0xa9, 0x23, 0xce, 0xbb, 0x94, 0x99, - 0x10, 0xa5, 0x36, 0x7c, 0x9b, 0x08, 0x51, 0xea, 0x90, 0x73, 0xee, 0xc9, 0x5f, 0x18, 0x8b, 0xcf, - 0x8c, 0xdd, 0x94, 0x8f, 0x43, 0xb9, 0x69, 0x2c, 0x76, 0x1d, 0xd3, 0x0e, 0xa5, 0x28, 0x3a, 0xca, - 0xea, 0x02, 0x2f, 0xc3, 0x61, 0x2d, 0x7a, 0x03, 0x20, 0x52, 0xa8, 0x89, 0xcf, 0x70, 0x6b, 0x30, - 0x25, 0x5e, 0x83, 0x04, 0x81, 0xe5, 0xb4, 0xfc, 0xe8, 0xd3, 0x47, 0x75, 0x58, 0xc1, 0x86, 0x7e, - 0x0c, 0xa6, 0xc4, 0x22, 0xd7, 0xdb, 0x46, 0x4b, 0xe8, 0x1b, 0x0a, 0xae, 0xd4, 0x8a, 0x02, 0x68, - 0xf1, 0x92, 0x40, 0x3c, 0xa5, 0x96, 0xfa, 0x38, 0x8e, 0x0d, 0xf5, 0x60, 0xb2, 0xad, 0xea, 0x50, - 0x86, 0x8b, 0xb3, 0x33, 0x8a, 0x3e, 0x65, 0xf1, 0xa2, 0x40, 0x3e, 0x19, 0xd3, 0xbe, 0xc4, 0x50, - 0x65, 0x88, 0x82, 0x23, 0xa7, 0x25, 0x0a, 0x12, 0x18, 0xe3, 0xc2, 0xb0, 0x3f, 0x3b, 0xca, 0x26, - 0x78, 0xb3, 0xc8, 0x04, 0xb9, 0x5c, 0x1d, 0x69, 0x88, 0xf9, 0x6f, 0x1f, 0x4b, 0xd8, 0x68, 0x17, - 0x26, 0xe9, 0xad, 0xde, 0x20, 0x36, 0x69, 0x06, 0xae, 0x37, 0x3b, 0x56, 0x5c, 0x03, 0xdb, 0x50, - 0xe0, 0x70, 0x55, 0x9a, 0x5a, 0x82, 0x63, 0x78, 0x42, 0x5d, 0x41, 0x39, 0x57, 0x57, 0xd0, 0x85, - 0x89, 0x5d, 0x45, 0xa7, 0x35, 0xce, 0x16, 0xe1, 0x83, 0x45, 0x06, 0x16, 0x29, 0xb8, 0x16, 0x2f, - 0x08, 0x44, 0x13, 0xaa, 0x32, 0x4c, 0xc5, 0xa3, 0xff, 0x23, 0x80, 0xf3, 0x55, 0xbb, 0xeb, 0x07, - 0xc4, 0x5b, 0x10, 0x8f, 0x44, 0xc4, 0x43, 0x1f, 0xd1, 0xe0, 0x32, 0xfb, 0xb7, 0xe6, 0xde, 0x77, - 0x6a, 0xc4, 0x36, 0x7a, 0x0b, 0x5b, 0xb4, 0x85, 0x69, 0x1e, 0x8f, 0x02, 0xd5, 0xba, 0x82, 0x8b, - 0x64, 0xca, 0xb9, 0x46, 0x26, 0x44, 0x9c, 0x83, 0x09, 0xfd, 0xac, 0x06, 0x57, 0x32, 0xaa, 0x6a, - 0xc4, 0x26, 0x81, 0xe4, 0x5c, 0x8e, 0x3b, 0x8e, 0x47, 0x0e, 0xf6, 0x2b, 0x57, 0x1a, 0x79, 0x40, - 0x71, 0x3e, 0x3e, 0xf4, 0xf7, 0x34, 0x98, 0xcb, 0xa8, 0xbd, 0x65, 0x58, 0x76, 0xd7, 0x93, 0x4c, - 0xcd, 0x71, 0x87, 0xc3, 0x78, 0x8b, 0x46, 0x2e, 0x54, 0xdc, 0x07, 0x23, 0xfa, 0x71, 0xb8, 0x14, - 0xd6, 0x6e, 0x38, 0x0e, 0x21, 0x66, 0x8c, 0xc5, 0x39, 0xee, 0x50, 0xae, 0x1c, 0xec, 0x57, 0x2e, - 0x35, 0xb2, 0x00, 0xe2, 0x6c, 0x3c, 0xa8, 0x05, 0x8f, 0x44, 0x15, 0x81, 0x65, 0x5b, 0x6f, 0x70, - 0x2e, 0x6c, 0xdb, 0x23, 0xfe, 0xb6, 0x6b, 0x9b, 0x8c, 0x58, 0x68, 0x8b, 0xef, 0x3c, 0xd8, 0xaf, - 0x3c, 0xd2, 0xe8, 0xd7, 0x10, 0xf7, 0x87, 0x83, 0x4c, 0x98, 0xf4, 0x9b, 0x86, 0x53, 0x77, 0x02, - 0xe2, 0xed, 0x1a, 0xf6, 0xec, 0x68, 0xa1, 0x09, 0xf2, 0x23, 0xaa, 0xc0, 0xc1, 0x31, 0xa8, 0xe8, - 0xfd, 0x50, 0x26, 0x7b, 0x1d, 0xc3, 0x31, 0x09, 0x27, 0x0b, 0xe3, 0x8b, 0x0f, 0xd3, 0xcb, 0x68, - 0x49, 0x94, 0x3d, 0xd8, 0xaf, 0x4c, 0xca, 0xff, 0x57, 0x5c, 0x93, 0xe0, 0xb0, 0x35, 0xfa, 0x51, - 0xb8, 0xc8, 0xde, 0xc3, 0x4c, 0xc2, 0x88, 0x9c, 0x2f, 0x19, 0xdd, 0x72, 0xa1, 0x71, 0xb2, 0xb7, - 0x8d, 0x95, 0x0c, 0x78, 0x38, 0x13, 0x0b, 0xfd, 0x0c, 0x6d, 0x63, 0xef, 0xb6, 0x67, 0x34, 0xc9, - 0x56, 0xd7, 0x5e, 0x27, 0x5e, 0xdb, 0x72, 0xb8, 0x2c, 0x41, 0x9a, 0xae, 0x63, 0x52, 0x52, 0xa2, - 0x3d, 0x3e, 0xc2, 0x3f, 0xc3, 0x4a, 0xbf, 0x86, 0xb8, 0x3f, 0x1c, 0xf4, 0x5e, 0x98, 0xb4, 0x5a, - 0x8e, 0xeb, 0x91, 0x75, 0xc3, 0x72, 0x02, 0x7f, 0x16, 0x98, 0xda, 0x9d, 0x2d, 0x6b, 0x5d, 0x29, - 0xc7, 0xb1, 0x56, 0x68, 0x17, 0x90, 0x43, 0xee, 0xaf, 0xb9, 0x26, 0xdb, 0x02, 0x1b, 0x1d, 0xb6, - 0x91, 0x67, 0x27, 0x0a, 0x2d, 0x0d, 0x93, 0x03, 0x56, 0x53, 0xd0, 0x70, 0x06, 0x06, 0x74, 0x0b, - 0x50, 0xdb, 0xd8, 0x5b, 0x6a, 0x77, 0x82, 0xde, 0x62, 0xd7, 0xde, 0x11, 0x54, 0x63, 0x92, 0xad, - 0x05, 0x97, 0xc3, 0x52, 0xb5, 0x38, 0xa3, 0x87, 0xbe, 0x3f, 0x04, 0xe3, 0x55, 0xd7, 0x31, 0x2d, - 0x26, 0x86, 0x3d, 0x15, 0xd3, 0xf9, 0x3e, 0xa2, 0xd2, 0xf1, 0x07, 0xfb, 0x95, 0xa9, 0xb0, 0xa1, - 0x42, 0xd8, 0x9f, 0x0d, 0x15, 0x2d, 0x5c, 0xb0, 0x7f, 0x67, 0x5c, 0x43, 0xf2, 0x60, 0xbf, 0x72, - 0x2e, 0xec, 0x16, 0x57, 0x9a, 0xd0, 0xb5, 0xa3, 0xdc, 0xfc, 0xba, 0x67, 0x38, 0xbe, 0x35, 0x80, - 0xfc, 0x14, 0x4a, 0xc6, 0xcb, 0x29, 0x68, 0x38, 0x03, 0x03, 0x7a, 0x0d, 0xa6, 0x69, 0xe9, 0x46, - 0xc7, 0x34, 0x02, 0x52, 0x50, 0x6c, 0xba, 0x2c, 0x70, 0x4e, 0x2f, 0xc7, 0x20, 0xe1, 0x04, 0x64, - 0xae, 0x23, 0x37, 0x7c, 0xd7, 0x61, 0xe4, 0x22, 0xa6, 0x23, 0xa7, 0xa5, 0x58, 0xd4, 0xa2, 0x27, - 0x60, 0xac, 0x4d, 0x7c, 0xdf, 0x68, 0x11, 0x76, 0xfe, 0xc7, 0xa3, 0x4b, 0x7e, 0x85, 0x17, 0x63, - 0x59, 0x8f, 0xde, 0x03, 0x23, 0x4d, 0xd7, 0x24, 0xfe, 0xec, 0x18, 0xdb, 0xa1, 0xf4, 0x6b, 0x8f, - 0x54, 0x69, 0xc1, 0x83, 0xfd, 0xca, 0x38, 0xd3, 0x23, 0xd0, 0x5f, 0x98, 0x37, 0xd2, 0x7f, 0x89, - 0xf2, 0xdc, 0x09, 0x21, 0xe3, 0x08, 0xba, 0xfd, 0xb3, 0x53, 0x93, 0xeb, 0x9f, 0xa2, 0x02, 0x8f, - 0xeb, 0x04, 0x9e, 0x6b, 0xaf, 0xd9, 0x86, 0x43, 0xd0, 0xc7, 0x34, 0x98, 0xd9, 0xb6, 0x5a, 0xdb, - 0xea, 0xe3, 0x9c, 0xb8, 0x98, 0x0b, 0xc9, 0x26, 0x77, 0x12, 0xb0, 0x16, 0x2f, 0x1e, 0xec, 0x57, - 0x66, 0x92, 0xa5, 0x38, 0x85, 0x53, 0xff, 0x78, 0x09, 0x2e, 0x8a, 0x91, 0xd9, 0xf4, 0xa6, 0xec, - 0xd8, 0x6e, 0xaf, 0x4d, 0x9c, 0xb3, 0x78, 0x47, 0x93, 0x5f, 0xa8, 0x94, 0xfb, 0x85, 0xda, 0xa9, - 0x2f, 0x34, 0x54, 0xe4, 0x0b, 0x85, 0x1b, 0xf9, 0x90, 0xaf, 0xf4, 0x67, 0x1a, 0xcc, 0x66, 0xad, - 0xc5, 0x19, 0xc8, 0x70, 0xed, 0xb8, 0x0c, 0x77, 0xa7, 0xa8, 0x50, 0x9e, 0x1c, 0x7a, 0x8e, 0x2c, - 0xf7, 0xad, 0x12, 0x5c, 0x8e, 0x9a, 0xd7, 0x1d, 0x3f, 0x30, 0x6c, 0x9b, 0xab, 0xa9, 0x4e, 0xff, - 0xbb, 0x77, 0x62, 0xa2, 0xf8, 0xea, 0x60, 0x53, 0x55, 0xc7, 0x9e, 0xab, 0x29, 0xdf, 0x4b, 0x68, - 0xca, 0xd7, 0x4e, 0x10, 0x67, 0x7f, 0xa5, 0xf9, 0x7f, 0xd7, 0x60, 0x2e, 0xbb, 0xe3, 0x19, 0x6c, - 0x2a, 0x37, 0xbe, 0xa9, 0x7e, 0xe0, 0xe4, 0x66, 0x9d, 0xb3, 0xad, 0x7e, 0xab, 0x94, 0x37, 0x5b, - 0xa6, 0x2c, 0xd8, 0x82, 0x73, 0x54, 0x8a, 0xf3, 0x03, 0xa1, 0xd2, 0x3d, 0x9e, 0xad, 0x83, 0xd4, - 0x71, 0x9d, 0xc3, 0x71, 0x18, 0x38, 0x09, 0x14, 0xad, 0xc2, 0x18, 0x15, 0xdd, 0x28, 0xfc, 0xd2, - 0xd1, 0xe1, 0x87, 0xb7, 0x51, 0x83, 0xf7, 0xc5, 0x12, 0x08, 0xfa, 0x21, 0x98, 0x32, 0xc3, 0x13, - 0x75, 0xc8, 0x43, 0x67, 0x12, 0x2a, 0x53, 0xbe, 0xd7, 0xd4, 0xde, 0x38, 0x0e, 0x4c, 0xff, 0x4b, - 0x0d, 0x1e, 0xee, 0xb7, 0xb7, 0xd0, 0xeb, 0x00, 0x4d, 0xc9, 0x5e, 0x70, 0x53, 0x97, 0x82, 0xea, - 0xf9, 0x90, 0x49, 0x89, 0x0e, 0x68, 0x58, 0xe4, 0x63, 0x05, 0x49, 0xc6, 0xfb, 0x69, 0xe9, 0x94, - 0xde, 0x4f, 0xf5, 0xff, 0xa1, 0xa9, 0xa4, 0x48, 0xfd, 0xb6, 0x6f, 0x37, 0x52, 0xa4, 0x8e, 0x3d, - 0x57, 0x3f, 0xf8, 0xd5, 0x12, 0x5c, 0xcf, 0xee, 0xa2, 0xdc, 0xbd, 0x1f, 0x82, 0xd1, 0x0e, 0xb7, - 0x47, 0x1a, 0x62, 0x77, 0xe3, 0xe3, 0x94, 0xb2, 0x70, 0x6b, 0xa1, 0x07, 0xfb, 0x95, 0xb9, 0x2c, - 0x42, 0x2f, 0xec, 0x8c, 0x44, 0x3f, 0x64, 0x25, 0xb4, 0x24, 0x9c, 0xfb, 0xfb, 0xde, 0x23, 0x12, - 0x17, 0x63, 0x93, 0xd8, 0x47, 0x56, 0x8c, 0xfc, 0xa4, 0x06, 0xd3, 0xb1, 0x1d, 0xed, 0xcf, 0x8e, - 0xb0, 0x3d, 0x5a, 0xe8, 0xe9, 0x2a, 0x76, 0x54, 0xa2, 0x9b, 0x3b, 0x56, 0xec, 0xe3, 0x04, 0xc2, - 0x04, 0x99, 0x55, 0x57, 0xf5, 0x6d, 0x47, 0x66, 0xd5, 0xc1, 0xe7, 0x90, 0xd9, 0x5f, 0x2c, 0xe5, - 0xcd, 0x96, 0x91, 0xd9, 0xfb, 0x30, 0x2e, 0x2d, 0x75, 0x25, 0xb9, 0xb8, 0x35, 0xe8, 0x98, 0x38, - 0xb8, 0xc8, 0x6c, 0x43, 0x96, 0xf8, 0x38, 0xc2, 0x85, 0x7e, 0x5a, 0x03, 0x88, 0x3e, 0x8c, 0x38, - 0x54, 0xeb, 0x27, 0xb7, 0x1c, 0x0a, 0x5b, 0x33, 0x4d, 0x8f, 0xb4, 0xb2, 0x29, 0x14, 0xbc, 0xfa, - 0xff, 0x19, 0x02, 0x94, 0x1e, 0x3b, 0x65, 0x37, 0x77, 0x2c, 0xc7, 0x4c, 0x0a, 0x04, 0x77, 0x2d, - 0xc7, 0xc4, 0xac, 0xe6, 0x08, 0x0c, 0xe9, 0x73, 0x70, 0xae, 0x65, 0xbb, 0x9b, 0x86, 0x6d, 0xf7, - 0x84, 0xe9, 0xaa, 0x30, 0x82, 0xbc, 0x40, 0x2f, 0xa6, 0xdb, 0xf1, 0x2a, 0x9c, 0x6c, 0x8b, 0x3a, - 0x30, 0xe3, 0x51, 0x51, 0xbc, 0x69, 0xd9, 0x4c, 0x74, 0x72, 0xbb, 0x41, 0x41, 0x5d, 0x0f, 0x63, - 0xef, 0x71, 0x02, 0x16, 0x4e, 0x41, 0x47, 0xef, 0x82, 0xb1, 0x8e, 0x67, 0xb5, 0x0d, 0xaf, 0xc7, - 0x84, 0xb3, 0xf2, 0xe2, 0x04, 0xbd, 0xe1, 0xd6, 0x78, 0x11, 0x96, 0x75, 0xe8, 0x47, 0x61, 0xdc, - 0xb6, 0xb6, 0x48, 0xb3, 0xd7, 0xb4, 0x89, 0x50, 0xce, 0xdc, 0x3b, 0x99, 0x2d, 0xb3, 0x2c, 0xc1, - 0x8a, 0x27, 0x61, 0xf9, 0x13, 0x47, 0x08, 0x51, 0x1d, 0x2e, 0xdc, 0x77, 0xbd, 0x1d, 0xe2, 0xd9, - 0xc4, 0xf7, 0x1b, 0xdd, 0x4e, 0xc7, 0xf5, 0x02, 0x62, 0x32, 0x15, 0x4e, 0x99, 0xdb, 0xe7, 0xbe, - 0x94, 0xae, 0xc6, 0x59, 0x7d, 0xf4, 0xb7, 0x4a, 0x70, 0xb5, 0xcf, 0x20, 0x10, 0xa6, 0x67, 0x43, - 0xac, 0x91, 0xd8, 0x09, 0xef, 0xe5, 0xfb, 0x59, 0x14, 0x3e, 0xd8, 0xaf, 0x3c, 0xda, 0x07, 0x40, - 0x83, 0x6e, 0x45, 0xd2, 0xea, 0xe1, 0x08, 0x0c, 0xaa, 0xc3, 0xa8, 0x19, 0x69, 0x34, 0xc7, 0x17, - 0x9f, 0xa2, 0xd4, 0x9a, 0xeb, 0x1e, 0x8e, 0x0a, 0x4d, 0x00, 0x40, 0xcb, 0x30, 0xc6, 0x1f, 0x92, - 0x89, 0xa0, 0xfc, 0x4f, 0x33, 0xf1, 0x98, 0x17, 0x1d, 0x15, 0x98, 0x04, 0xa1, 0xff, 0x6f, 0x0d, - 0xc6, 0xaa, 0xae, 0x47, 0x6a, 0xab, 0x0d, 0xd4, 0x83, 0x09, 0xc5, 0x85, 0x40, 0x50, 0xc1, 0x82, - 0x64, 0x81, 0x41, 0x5c, 0x88, 0xa0, 0x49, 0x73, 0xd7, 0xb0, 0x00, 0xab, 0xb8, 0xd0, 0xeb, 0x74, - 0xcd, 0xef, 0x7b, 0x56, 0x40, 0x11, 0x0f, 0xf2, 0xfe, 0xc6, 0x11, 0x63, 0x09, 0x8b, 0xef, 0xa8, - 0xf0, 0x27, 0x8e, 0xb0, 0xe8, 0x6b, 0x94, 0x02, 0x24, 0x87, 0x89, 0x6e, 0xc2, 0x70, 0xdb, 0x35, - 0xe5, 0x77, 0x7f, 0xb7, 0x3c, 0xdf, 0x2b, 0xae, 0x49, 0xd7, 0xf6, 0x72, 0xba, 0x07, 0xd3, 0x12, - 0xb2, 0x3e, 0xfa, 0x2a, 0xcc, 0x24, 0xf1, 0xa3, 0x9b, 0x30, 0xdd, 0x74, 0xdb, 0x6d, 0xd7, 0x69, - 0x74, 0xb7, 0xb6, 0xac, 0x3d, 0x12, 0xb3, 0x43, 0xae, 0xc6, 0x6a, 0x70, 0xa2, 0xa5, 0xfe, 0x59, - 0x0d, 0x86, 0xe8, 0x77, 0xd1, 0x61, 0xd4, 0x74, 0xdb, 0x86, 0xe5, 0x88, 0x51, 0x31, 0x9b, 0xeb, - 0x1a, 0x2b, 0xc1, 0xa2, 0x06, 0x75, 0x60, 0x5c, 0x32, 0x4d, 0x03, 0xd9, 0xc2, 0xd4, 0x56, 0x1b, - 0xa1, 0xfd, 0x60, 0x48, 0xc9, 0x65, 0x89, 0x8f, 0x23, 0x24, 0xba, 0x01, 0xe7, 0x6b, 0xab, 0x8d, - 0xba, 0xd3, 0xb4, 0xbb, 0x26, 0x59, 0xda, 0x63, 0x7f, 0x28, 0x2d, 0xb1, 0x78, 0x89, 0x98, 0x27, - 0xa3, 0x25, 0xa2, 0x11, 0x96, 0x75, 0xb4, 0x19, 0xe1, 0x3d, 0x84, 0xb1, 0x30, 0x6b, 0x26, 0x80, - 0x60, 0x59, 0xa7, 0x7f, 0xad, 0x04, 0x13, 0xca, 0x80, 0x90, 0x0d, 0x63, 0x7c, 0xba, 0xd2, 0x56, - 0x6f, 0xa9, 0xe0, 0x14, 0xe3, 0xa3, 0xe6, 0xd8, 0xf9, 0x82, 0xfa, 0x58, 0xa2, 0x50, 0xe9, 0x62, - 0xa9, 0x0f, 0x5d, 0x9c, 0x07, 0xf0, 0x23, 0xcb, 0x75, 0x7e, 0x24, 0xd9, 0xd5, 0xa3, 0xd8, 0xab, - 0x2b, 0x2d, 0xd0, 0xc3, 0xe2, 0x06, 0xe1, 0xc6, 0x28, 0xe5, 0xc4, 0xed, 0xb1, 0x05, 0x23, 0x6f, - 0xb8, 0x0e, 0xf1, 0xc5, 0x1b, 0xdc, 0x09, 0x4d, 0x70, 0x9c, 0xf2, 0x07, 0xaf, 0x50, 0xb8, 0x98, - 0x83, 0xd7, 0x7f, 0x59, 0x03, 0xa8, 0x19, 0x81, 0xc1, 0x9f, 0x8c, 0x8e, 0x60, 0xef, 0xfd, 0x70, - 0xec, 0xe2, 0x2b, 0xa7, 0x6c, 0x60, 0x87, 0x7d, 0xeb, 0x0d, 0x39, 0xfd, 0x90, 0xa1, 0xe6, 0xd0, - 0x1b, 0xd6, 0x1b, 0x04, 0xb3, 0x7a, 0xf4, 0x24, 0x8c, 0x13, 0xa7, 0xe9, 0xf5, 0x3a, 0x94, 0x78, - 0x0f, 0xb3, 0x55, 0x65, 0x27, 0x74, 0x49, 0x16, 0xe2, 0xa8, 0x5e, 0x7f, 0x0a, 0xe2, 0x52, 0xd1, - 0xe1, 0xa3, 0xd4, 0xbf, 0x31, 0x0c, 0x57, 0x96, 0xd6, 0xab, 0x35, 0x01, 0xcf, 0x72, 0x9d, 0xbb, - 0xa4, 0xf7, 0x37, 0xe6, 0x35, 0x7f, 0x63, 0x5e, 0x73, 0x82, 0xe6, 0x35, 0x0f, 0x34, 0x98, 0x59, - 0xda, 0xeb, 0x58, 0x1e, 0xf3, 0x33, 0x20, 0x1e, 0x15, 0x63, 0xd1, 0x13, 0x30, 0xb6, 0xcb, 0xff, - 0x15, 0x9b, 0x2b, 0x54, 0x15, 0x88, 0x16, 0x58, 0xd6, 0xa3, 0x2d, 0x98, 0x26, 0xac, 0x3b, 0xe3, - 0x57, 0x8d, 0xa0, 0xc8, 0x06, 0xe2, 0x6e, 0x2c, 0x31, 0x28, 0x38, 0x01, 0x15, 0x35, 0x60, 0xba, - 0x69, 0x1b, 0xbe, 0x6f, 0x6d, 0x59, 0xcd, 0xc8, 0x82, 0x6e, 0x7c, 0xf1, 0x49, 0x76, 0xf5, 0xc4, - 0x6a, 0x1e, 0xec, 0x57, 0x2e, 0x89, 0x71, 0xc6, 0x2b, 0x70, 0x02, 0x84, 0xfe, 0xe9, 0x12, 0x4c, - 0x2d, 0xed, 0x75, 0x5c, 0xbf, 0xeb, 0x11, 0xd6, 0xf4, 0x0c, 0x24, 0xf0, 0x27, 0x60, 0x6c, 0xdb, - 0x70, 0x4c, 0x9b, 0x78, 0x82, 0xfa, 0x84, 0x6b, 0x7b, 0x87, 0x17, 0x63, 0x59, 0x8f, 0xde, 0x04, - 0xf0, 0x9b, 0xdb, 0xc4, 0xec, 0x32, 0x0e, 0x86, 0x1f, 0x92, 0xbb, 0x45, 0x68, 0x68, 0x6c, 0x8e, - 0x8d, 0x10, 0xa4, 0xa0, 0xec, 0xe1, 0x6f, 0xac, 0xa0, 0xd3, 0xbf, 0xae, 0xc1, 0xf9, 0x58, 0xbf, - 0x33, 0x10, 0x2c, 0xb7, 0xe2, 0x82, 0xe5, 0xc2, 0xc0, 0x73, 0xcd, 0x91, 0x27, 0x7f, 0xa6, 0x04, - 0x0f, 0xe5, 0xac, 0x49, 0xca, 0xdc, 0x42, 0x3b, 0x23, 0x73, 0x8b, 0x2e, 0x4c, 0x04, 0xae, 0x2d, - 0x0c, 0x3d, 0xe5, 0x0a, 0x14, 0x32, 0xa6, 0x58, 0x0f, 0xc1, 0x44, 0xc6, 0x14, 0x51, 0x99, 0x8f, - 0x55, 0x3c, 0xfa, 0xe7, 0x35, 0x18, 0x0f, 0xf5, 0x57, 0xdf, 0x51, 0x6f, 0x48, 0x47, 0xf7, 0xbc, - 0xd3, 0xff, 0xa8, 0x04, 0x97, 0x43, 0xd8, 0x52, 0x4e, 0x68, 0x04, 0x94, 0x6e, 0x1c, 0x2e, 0x04, - 0x3f, 0x2c, 0xee, 0x61, 0x85, 0x17, 0x50, 0x38, 0x05, 0xca, 0x37, 0x75, 0xbd, 0x8e, 0xeb, 0x4b, - 0x76, 0x80, 0xf3, 0x4d, 0xbc, 0x08, 0xcb, 0x3a, 0xb4, 0x0a, 0x23, 0x3e, 0xc5, 0x27, 0x6e, 0x93, - 0x63, 0xae, 0x06, 0xe3, 0x68, 0xd8, 0x78, 0x31, 0x07, 0x83, 0xde, 0x54, 0x55, 0x1a, 0x23, 0xc5, - 0xd5, 0x2c, 0x74, 0x26, 0xa6, 0x5c, 0x91, 0x0c, 0x6f, 0x94, 0x2c, 0xb5, 0x86, 0xbe, 0x0c, 0x33, - 0xc2, 0x62, 0x83, 0x6f, 0x1b, 0xa7, 0x49, 0xd0, 0xfb, 0x63, 0x3b, 0xe3, 0xb1, 0xc4, 0x2b, 0xf2, - 0xc5, 0x64, 0xfb, 0x68, 0xc7, 0xe8, 0x3e, 0x94, 0x6f, 0x8b, 0x41, 0xa2, 0x39, 0x28, 0x59, 0xf2, - 0x5b, 0x80, 0x80, 0x51, 0xaa, 0xd7, 0x70, 0xc9, 0x32, 0x43, 0x7e, 0xa8, 0x94, 0xcb, 0xb5, 0x29, - 0xd7, 0xd2, 0x50, 0xff, 0x6b, 0x49, 0xff, 0x66, 0x09, 0x2e, 0x4a, 0xac, 0x72, 0x8e, 0x35, 0xf1, - 0x06, 0x77, 0x08, 0x6f, 0x78, 0xb8, 0x52, 0xe4, 0x1e, 0x0c, 0x33, 0x02, 0x58, 0xe8, 0x6d, 0x2e, - 0x04, 0x48, 0x87, 0x83, 0x19, 0x20, 0xf4, 0xa3, 0x30, 0x6a, 0x1b, 0x9b, 0xc4, 0x96, 0x96, 0x72, - 0x85, 0x54, 0x48, 0x59, 0xd3, 0xe5, 0x9a, 0x4d, 0x9f, 0x7b, 0x03, 0x84, 0x4f, 0x36, 0xbc, 0x10, - 0x0b, 0x9c, 0x73, 0xcf, 0xc2, 0x84, 0xd2, 0x0c, 0xcd, 0xc0, 0xd0, 0x0e, 0xe1, 0x6f, 0xb3, 0xe3, - 0x98, 0xfe, 0x8b, 0x2e, 0xc2, 0xc8, 0xae, 0x61, 0x77, 0xc5, 0x92, 0x60, 0xfe, 0xe3, 0x66, 0xe9, - 0xfd, 0x9a, 0xfe, 0x1b, 0x1a, 0x4c, 0xdc, 0xb1, 0x36, 0x89, 0xc7, 0xcd, 0x2e, 0x98, 0x28, 0x14, - 0x73, 0x7c, 0x9e, 0xc8, 0x72, 0x7a, 0x46, 0x7b, 0x30, 0x2e, 0x6e, 0x9a, 0xd0, 0x2a, 0xf7, 0x76, - 0xb1, 0x47, 0xe0, 0x10, 0xb5, 0xa0, 0xe0, 0xaa, 0xa3, 0x95, 0xc4, 0x80, 0x23, 0x64, 0xfa, 0x9b, - 0x70, 0x21, 0xa3, 0x13, 0xaa, 0xb0, 0xe3, 0xeb, 0x05, 0x62, 0x5b, 0xc8, 0xf3, 0xe8, 0x05, 0x98, - 0x97, 0xa3, 0x2b, 0x30, 0x44, 0x1c, 0x53, 0xec, 0x89, 0xb1, 0x83, 0xfd, 0xca, 0xd0, 0x92, 0x63, - 0x62, 0x5a, 0x46, 0xc9, 0x94, 0xed, 0xc6, 0x78, 0x12, 0x46, 0xa6, 0x96, 0x45, 0x19, 0x0e, 0x6b, - 0xd9, 0xb3, 0x7d, 0xf2, 0x85, 0x9a, 0x72, 0xa7, 0x33, 0x5b, 0x89, 0xd3, 0x33, 0xc8, 0xc3, 0x78, - 0xf2, 0x24, 0x2e, 0xce, 0x8a, 0x05, 0x49, 0x9d, 0x69, 0x9c, 0xc2, 0xab, 0xff, 0xee, 0x30, 0x3c, - 0x72, 0xc7, 0xf5, 0xac, 0x37, 0x5c, 0x27, 0x30, 0xec, 0x35, 0xd7, 0x8c, 0x0c, 0xec, 0x04, 0x51, - 0xfe, 0xa8, 0x06, 0x0f, 0x35, 0x3b, 0x5d, 0xce, 0xdd, 0x4a, 0xbb, 0xa7, 0x35, 0xe2, 0x59, 0x6e, - 0x51, 0x3b, 0x3b, 0xe6, 0x5a, 0x5b, 0x5d, 0xdb, 0xc8, 0x02, 0x89, 0xf3, 0x70, 0x31, 0x73, 0x3f, - 0xd3, 0xbd, 0xef, 0xb0, 0xc1, 0x35, 0x02, 0xb6, 0x9a, 0x6f, 0x44, 0x1f, 0xa1, 0xa0, 0xb9, 0x5f, - 0x2d, 0x13, 0x22, 0xce, 0xc1, 0x84, 0x7e, 0x1c, 0x2e, 0x59, 0x7c, 0x70, 0x98, 0x18, 0xa6, 0xe5, - 0x10, 0xdf, 0xe7, 0xb6, 0x42, 0x03, 0xd8, 0xb3, 0xd5, 0xb3, 0x00, 0xe2, 0x6c, 0x3c, 0xe8, 0x55, - 0x00, 0xbf, 0xe7, 0x34, 0xc5, 0xfa, 0x8f, 0x14, 0xc2, 0xca, 0x99, 0xc0, 0x10, 0x0a, 0x56, 0x20, - 0x52, 0x09, 0x37, 0x08, 0x37, 0xe5, 0x28, 0xb3, 0x8d, 0x63, 0x12, 0x6e, 0xb4, 0x87, 0xa2, 0x7a, - 0xfd, 0x9f, 0x6b, 0x30, 0x26, 0xdc, 0xf7, 0xd1, 0xbb, 0x13, 0x5a, 0x9e, 0x90, 0xf6, 0x24, 0x34, - 0x3d, 0x3d, 0xf6, 0xd4, 0x27, 0x34, 0x7c, 0x82, 0x95, 0x28, 0xa4, 0x26, 0x10, 0x88, 0x23, 0x75, - 0x61, 0xec, 0xc9, 0x4f, 0xaa, 0x10, 0x15, 0x64, 0xfa, 0xe7, 0x34, 0x38, 0x9f, 0xea, 0x75, 0x04, - 0x7e, 0xe1, 0x0c, 0xad, 0x68, 0xbe, 0x3a, 0x0c, 0xd3, 0xcc, 0xd8, 0xcf, 0x31, 0x6c, 0xae, 0x80, - 0x39, 0x03, 0x01, 0xe5, 0x49, 0x18, 0xb7, 0xda, 0xed, 0x6e, 0x40, 0x49, 0xb5, 0xd0, 0xa1, 0xb3, - 0x6f, 0x5e, 0x97, 0x85, 0x38, 0xaa, 0x47, 0x8e, 0xb8, 0x0a, 0x39, 0x11, 0x5f, 0x2e, 0xf6, 0xe5, - 0xd4, 0x09, 0xce, 0xd3, 0x6b, 0x8b, 0xdf, 0x57, 0x59, 0x37, 0xe5, 0xc7, 0x34, 0x00, 0x3f, 0xf0, - 0x2c, 0xa7, 0x45, 0x0b, 0xc5, 0x75, 0x89, 0x4f, 0x00, 0x6d, 0x23, 0x04, 0xca, 0x91, 0x87, 0x6b, - 0x14, 0x55, 0x60, 0x05, 0x33, 0x5a, 0x10, 0x5c, 0x02, 0xa7, 0xf8, 0xdf, 0x9d, 0xe0, 0x87, 0x1e, - 0x49, 0x47, 0xa7, 0x11, 0x2e, 0x9d, 0x11, 0x1b, 0x31, 0xf7, 0x0c, 0x8c, 0x87, 0xf8, 0x0e, 0xbb, - 0x75, 0x27, 0x95, 0x5b, 0x77, 0xee, 0x39, 0x38, 0x97, 0x18, 0xee, 0xb1, 0x2e, 0xed, 0xff, 0xa8, - 0x01, 0x8a, 0xcf, 0xfe, 0x0c, 0x44, 0xbb, 0x56, 0x5c, 0xb4, 0x5b, 0x1c, 0xfc, 0x93, 0xe5, 0xc8, - 0x76, 0x5f, 0x9e, 0x02, 0x16, 0xdd, 0x24, 0x8c, 0x1e, 0x23, 0x2e, 0x2e, 0x7a, 0xcf, 0x46, 0x1e, - 0x12, 0xe2, 0xe4, 0x0e, 0x70, 0xcf, 0xde, 0x4d, 0xc0, 0x8a, 0xee, 0xd9, 0x64, 0x0d, 0x4e, 0xe1, - 0x45, 0x1f, 0xd7, 0x60, 0xc6, 0x88, 0x47, 0x37, 0x91, 0x2b, 0x53, 0xc8, 0x7b, 0x36, 0x11, 0x29, - 0x25, 0x1a, 0x4b, 0xa2, 0xc2, 0xc7, 0x29, 0xb4, 0xe8, 0xbd, 0x30, 0x69, 0x74, 0xac, 0x85, 0xae, - 0x69, 0x51, 0xd1, 0x40, 0x86, 0xa6, 0x60, 0xe2, 0xea, 0xc2, 0x5a, 0x3d, 0x2c, 0xc7, 0xb1, 0x56, - 0x61, 0x18, 0x11, 0xb1, 0x90, 0xc3, 0x03, 0x86, 0x11, 0x11, 0x6b, 0x18, 0x85, 0x11, 0x11, 0x4b, - 0xa7, 0x22, 0x41, 0x0e, 0x80, 0x6b, 0x99, 0x4d, 0x81, 0x92, 0xbf, 0xda, 0x15, 0x92, 0x90, 0xef, - 0xd5, 0x6b, 0x55, 0x81, 0x91, 0xdd, 0x7e, 0xd1, 0x6f, 0xac, 0x60, 0x40, 0x9f, 0xd2, 0x60, 0x4a, - 0xd0, 0x6e, 0x81, 0x73, 0x8c, 0x7d, 0xa2, 0x57, 0x8a, 0xee, 0x97, 0xc4, 0x9e, 0x9c, 0xc7, 0x2a, - 0x70, 0x4e, 0x77, 0x42, 0x07, 0x9b, 0x58, 0x1d, 0x8e, 0x8f, 0x03, 0xfd, 0x7d, 0x0d, 0x2e, 0xfa, - 0xc4, 0xdb, 0xb5, 0x9a, 0x64, 0xa1, 0xd9, 0x74, 0xbb, 0x8e, 0xfc, 0x0e, 0xe5, 0xe2, 0x51, 0x17, - 0x1a, 0x19, 0xf0, 0xb8, 0x65, 0x77, 0x56, 0x0d, 0xce, 0xc4, 0x4f, 0xd9, 0xb2, 0x73, 0xf7, 0x8d, - 0xa0, 0xb9, 0x5d, 0x35, 0x9a, 0xdb, 0x4c, 0x57, 0xce, 0x8d, 0xb9, 0x0b, 0xee, 0xeb, 0x97, 0xe2, - 0xa0, 0xf8, 0xab, 0x73, 0xa2, 0x10, 0x27, 0x11, 0x22, 0x17, 0xca, 0x9e, 0x08, 0x19, 0x35, 0x0b, - 0xc5, 0x59, 0x8a, 0x54, 0xfc, 0x29, 0xce, 0xd8, 0xcb, 0x5f, 0x38, 0x44, 0x82, 0x5a, 0xf0, 0x08, - 0x17, 0x6d, 0x16, 0x1c, 0xd7, 0xe9, 0xb5, 0xdd, 0xae, 0xbf, 0xd0, 0x0d, 0xb6, 0x89, 0x13, 0x48, - 0x5d, 0xe5, 0x04, 0xbb, 0x46, 0x99, 0x3d, 0xfb, 0x52, 0xbf, 0x86, 0xb8, 0x3f, 0x1c, 0xf4, 0x32, - 0x94, 0xc9, 0x2e, 0x71, 0x82, 0xf5, 0xf5, 0x65, 0x66, 0x17, 0x7e, 0x7c, 0x6e, 0x8f, 0x4d, 0x61, - 0x49, 0xc0, 0xc0, 0x21, 0x34, 0xb4, 0x03, 0x63, 0x36, 0x8f, 0xf9, 0x35, 0x3b, 0x55, 0x9c, 0x28, - 0x26, 0xe3, 0x87, 0x71, 0xf9, 0x4f, 0xfc, 0xc0, 0x12, 0x03, 0xea, 0xc0, 0x75, 0x93, 0x6c, 0x19, - 0x5d, 0x3b, 0x58, 0x75, 0x03, 0xca, 0xd2, 0xf6, 0x22, 0xfd, 0x94, 0x74, 0x01, 0x98, 0x66, 0x0e, - 0xd2, 0x8f, 0x1d, 0xec, 0x57, 0xae, 0xd7, 0x0e, 0x69, 0x8b, 0x0f, 0x85, 0x86, 0x7a, 0xf0, 0xa8, - 0x68, 0xb3, 0xe1, 0x78, 0xc4, 0x68, 0x6e, 0xd3, 0x55, 0x4e, 0x23, 0x3d, 0xc7, 0x90, 0xfe, 0xad, - 0x83, 0xfd, 0xca, 0xa3, 0xb5, 0xc3, 0x9b, 0xe3, 0xa3, 0xc0, 0x9c, 0xfb, 0x10, 0xa0, 0xf4, 0x39, - 0x3f, 0xec, 0xc2, 0x2e, 0xab, 0x17, 0xf6, 0x67, 0x46, 0xe0, 0x2a, 0x25, 0x1f, 0x11, 0x9b, 0xba, - 0x62, 0x38, 0x46, 0xeb, 0x3b, 0xf3, 0x6a, 0xfb, 0x0d, 0x0d, 0x1e, 0xda, 0xce, 0x16, 0x21, 0x05, - 0xa3, 0xfc, 0x42, 0x21, 0x51, 0xbf, 0x9f, 0x54, 0xca, 0x4f, 0x56, 0xdf, 0x26, 0x38, 0x6f, 0x50, - 0xe8, 0x43, 0x30, 0xe3, 0xb8, 0x26, 0xa9, 0xd6, 0x6b, 0x78, 0xc5, 0xf0, 0x77, 0x1a, 0xf2, 0xe5, - 0x6f, 0x84, 0xdb, 0x9c, 0xac, 0x26, 0xea, 0x70, 0xaa, 0x35, 0xda, 0x05, 0xd4, 0x71, 0xcd, 0xa5, - 0x5d, 0xab, 0x29, 0xdf, 0x9c, 0x8a, 0xdb, 0xb9, 0xb0, 0x87, 0xad, 0xb5, 0x14, 0x34, 0x9c, 0x81, - 0x81, 0xc9, 0xc0, 0x74, 0x30, 0x2b, 0xae, 0x63, 0x05, 0xae, 0xc7, 0xfc, 0x60, 0x06, 0x12, 0x05, - 0x99, 0x0c, 0xbc, 0x9a, 0x09, 0x11, 0xe7, 0x60, 0xd2, 0xff, 0xa7, 0x06, 0xe7, 0xe8, 0xb6, 0x58, - 0xf3, 0xdc, 0xbd, 0xde, 0x77, 0xe2, 0x86, 0x7c, 0x42, 0x18, 0x41, 0x70, 0xdd, 0xcd, 0x25, 0xc5, - 0x00, 0x62, 0x9c, 0x8d, 0x39, 0xb2, 0x79, 0x50, 0xd5, 0x57, 0x43, 0xf9, 0xea, 0x2b, 0xfd, 0x53, - 0x25, 0xce, 0x62, 0x4a, 0xf5, 0xd1, 0x77, 0xe4, 0x39, 0x7c, 0x06, 0xa6, 0x68, 0xd9, 0x8a, 0xb1, - 0xb7, 0x56, 0x7b, 0xd1, 0xb5, 0xa5, 0x2b, 0x0f, 0x33, 0xcf, 0xbd, 0xab, 0x56, 0xe0, 0x78, 0x3b, - 0x74, 0x13, 0xc6, 0x3a, 0xdc, 0xe1, 0x59, 0x08, 0x37, 0xd7, 0xb9, 0xa5, 0x00, 0x2b, 0x7a, 0xb0, - 0x5f, 0x39, 0x1f, 0x3d, 0x96, 0x88, 0x42, 0x2c, 0x3b, 0xe8, 0x9f, 0xb8, 0x04, 0x0c, 0xb8, 0x4d, - 0x82, 0xef, 0xc4, 0x35, 0x79, 0x0a, 0x26, 0x9a, 0x9d, 0x6e, 0xf5, 0x56, 0xe3, 0x85, 0xae, 0xcb, - 0x84, 0x56, 0x16, 0x9b, 0x91, 0xf2, 0x9c, 0xd5, 0xb5, 0x0d, 0x59, 0x8c, 0xd5, 0x36, 0x94, 0x3a, - 0x34, 0x3b, 0x5d, 0x41, 0x6f, 0xd7, 0x54, 0x1b, 0x55, 0x46, 0x1d, 0xaa, 0x6b, 0x1b, 0xb1, 0x3a, - 0x9c, 0x6a, 0x8d, 0x7e, 0x1c, 0x26, 0x89, 0x38, 0xb8, 0x77, 0x0c, 0xcf, 0x14, 0x74, 0xa1, 0x5e, - 0x74, 0xf2, 0xe1, 0xd2, 0x4a, 0x6a, 0xc0, 0x59, 0xf5, 0x25, 0x05, 0x05, 0x8e, 0x21, 0x44, 0x3f, - 0x08, 0x57, 0xe4, 0x6f, 0xfa, 0x95, 0x5d, 0x33, 0x49, 0x28, 0x46, 0xb8, 0x8f, 0xe9, 0x52, 0x5e, - 0x23, 0x9c, 0xdf, 0x1f, 0xfd, 0xba, 0x06, 0x97, 0xc3, 0x5a, 0xcb, 0xb1, 0xda, 0xdd, 0x36, 0x26, - 0x4d, 0xdb, 0xb0, 0xda, 0x82, 0x41, 0x7f, 0xe9, 0xc4, 0x26, 0x1a, 0x07, 0xcf, 0x89, 0x55, 0x76, - 0x1d, 0xce, 0x19, 0x12, 0xfa, 0x9c, 0x06, 0xd7, 0x65, 0xd5, 0x9a, 0x47, 0x7c, 0xbf, 0xeb, 0x91, - 0xc8, 0x91, 0x4c, 0x2c, 0xc9, 0x58, 0x21, 0xda, 0xc9, 0x38, 0x95, 0xa5, 0x43, 0x60, 0xe3, 0x43, - 0xb1, 0xab, 0xdb, 0xa5, 0xe1, 0x6e, 0x05, 0x82, 0xa3, 0x3f, 0xad, 0xed, 0x42, 0x51, 0xe0, 0x18, - 0x42, 0xf4, 0x2f, 0x34, 0x78, 0x48, 0x2d, 0x50, 0x77, 0x0b, 0x67, 0xe5, 0x5f, 0x3e, 0xb1, 0xc1, - 0x24, 0xe0, 0x73, 0x5d, 0x70, 0x4e, 0x25, 0xce, 0x1b, 0x15, 0x25, 0xdb, 0x6d, 0xb6, 0x31, 0x39, - 0xbb, 0x3f, 0xc2, 0xc9, 0x36, 0xdf, 0xab, 0x3e, 0x96, 0x75, 0x54, 0xd0, 0xed, 0xb8, 0xe6, 0x9a, - 0x65, 0xfa, 0xcb, 0x56, 0xdb, 0x0a, 0x18, 0x53, 0x3e, 0xc4, 0x97, 0x63, 0xcd, 0x35, 0xd7, 0xea, - 0x35, 0x5e, 0x8e, 0x63, 0xad, 0x98, 0x4b, 0xb7, 0xd5, 0x36, 0x5a, 0x64, 0xad, 0x6b, 0xdb, 0x6b, - 0x9e, 0xcb, 0x14, 0x86, 0x35, 0x62, 0x98, 0xb6, 0xe5, 0x90, 0x82, 0x4c, 0x38, 0x3b, 0x6e, 0xf5, - 0x3c, 0xa0, 0x38, 0x1f, 0x1f, 0x9a, 0x07, 0xd8, 0x32, 0x2c, 0xbb, 0x71, 0xdf, 0xe8, 0xdc, 0x73, - 0x18, 0xa7, 0x5e, 0xe6, 0x22, 0xec, 0xad, 0xb0, 0x14, 0x2b, 0x2d, 0xe8, 0x6e, 0xa2, 0x54, 0x10, - 0x13, 0x1e, 0x4a, 0x88, 0x71, 0xd5, 0x27, 0xb1, 0x9b, 0x24, 0x40, 0xbe, 0x7c, 0x77, 0x15, 0x14, - 0x38, 0x86, 0x10, 0x7d, 0x54, 0x83, 0x69, 0xbf, 0xe7, 0x07, 0xa4, 0x1d, 0x8e, 0xe1, 0xdc, 0x49, - 0x8f, 0x81, 0xa9, 0x52, 0x1b, 0x31, 0x24, 0x38, 0x81, 0x14, 0x19, 0x70, 0x95, 0xad, 0xea, 0xed, - 0xea, 0x1d, 0xab, 0xb5, 0x1d, 0x3a, 0x6a, 0xaf, 0x11, 0xaf, 0x49, 0x9c, 0x60, 0x76, 0x86, 0xed, - 0x1b, 0x66, 0x4a, 0x53, 0xcf, 0x6f, 0x86, 0xfb, 0xc1, 0x40, 0xaf, 0xc2, 0x9c, 0xa8, 0x5e, 0x76, - 0xef, 0xa7, 0x30, 0x9c, 0x67, 0x18, 0x98, 0xe9, 0x50, 0x3d, 0xb7, 0x15, 0xee, 0x03, 0x01, 0xd5, - 0xe1, 0x82, 0x4f, 0x3c, 0xf6, 0x12, 0x42, 0xc2, 0xcd, 0xe3, 0xcf, 0xa2, 0xc8, 0x6a, 0xb8, 0x91, - 0xae, 0xc6, 0x59, 0x7d, 0xd0, 0x73, 0xa1, 0x63, 0x52, 0x8f, 0x16, 0xbc, 0xb0, 0xd6, 0x98, 0xbd, - 0xc0, 0xc6, 0x77, 0x41, 0xf1, 0x37, 0x92, 0x55, 0x38, 0xd9, 0x96, 0xf2, 0x16, 0xb2, 0x68, 0xb1, - 0xeb, 0xf9, 0xc1, 0xec, 0x45, 0xd6, 0x99, 0xf1, 0x16, 0x58, 0xad, 0xc0, 0xf1, 0x76, 0xe8, 0x26, - 0x4c, 0xfb, 0xa4, 0xd9, 0x74, 0xdb, 0x1d, 0x21, 0x5e, 0xcd, 0x5e, 0x62, 0xa3, 0xe7, 0x5f, 0x30, - 0x56, 0x83, 0x13, 0x2d, 0x51, 0x0f, 0x2e, 0x84, 0x81, 0x75, 0x96, 0xdd, 0xd6, 0x8a, 0xb1, 0xc7, - 0x58, 0xf5, 0xcb, 0x87, 0x9f, 0xc0, 0x79, 0xf9, 0xb4, 0x3d, 0xff, 0x42, 0xd7, 0x70, 0x02, 0x2b, - 0xe8, 0xf1, 0xe5, 0xaa, 0xa6, 0xc1, 0xe1, 0x2c, 0x1c, 0x68, 0x19, 0x2e, 0x26, 0x8a, 0x6f, 0x59, - 0x36, 0xf1, 0x67, 0x1f, 0x62, 0xd3, 0x66, 0x3a, 0x92, 0x6a, 0x46, 0x3d, 0xce, 0xec, 0x85, 0xee, - 0xc1, 0xa5, 0x8e, 0xe7, 0x06, 0xa4, 0x19, 0xdc, 0xa5, 0xec, 0x89, 0x2d, 0x26, 0xe8, 0xcf, 0xce, - 0xb2, 0xb5, 0x60, 0xaf, 0x40, 0x6b, 0x59, 0x0d, 0x70, 0x76, 0x3f, 0xf4, 0x19, 0x0d, 0xae, 0xf9, - 0x81, 0x47, 0x8c, 0xb6, 0xe5, 0xb4, 0xaa, 0xae, 0xe3, 0x10, 0x46, 0x26, 0xeb, 0x66, 0x64, 0x74, - 0x7f, 0xa5, 0x10, 0x9d, 0xd2, 0x0f, 0xf6, 0x2b, 0xd7, 0x1a, 0x7d, 0x21, 0xe3, 0x43, 0x30, 0xa3, - 0x37, 0x01, 0xda, 0xa4, 0xed, 0x7a, 0x3d, 0x4a, 0x91, 0x66, 0xe7, 0x8a, 0x1b, 0x31, 0xad, 0x84, - 0x50, 0xf8, 0xf1, 0x8f, 0xbd, 0x5f, 0x45, 0x95, 0x58, 0x41, 0xa7, 0xef, 0x97, 0xe0, 0x52, 0xe6, - 0xc5, 0x43, 0x4f, 0x00, 0x6f, 0xb7, 0x20, 0x83, 0xec, 0x8a, 0x27, 0x1f, 0x76, 0x02, 0x56, 0xe2, - 0x55, 0x38, 0xd9, 0x96, 0xb2, 0x85, 0xec, 0xa4, 0xde, 0x6a, 0x44, 0xfd, 0x4b, 0x11, 0x5b, 0x58, - 0x4f, 0xd4, 0xe1, 0x54, 0x6b, 0x54, 0x85, 0xf3, 0xa2, 0xac, 0x4e, 0x25, 0x2b, 0xff, 0x96, 0x47, - 0x24, 0xc3, 0x4d, 0x65, 0x94, 0xf3, 0xf5, 0x64, 0x25, 0x4e, 0xb7, 0xa7, 0xb3, 0xa0, 0x3f, 0xd4, - 0x51, 0x0c, 0x47, 0xb3, 0x58, 0x8d, 0x57, 0xe1, 0x64, 0x5b, 0x29, 0xfa, 0xc6, 0x86, 0x30, 0x12, - 0xcd, 0x62, 0x35, 0x51, 0x87, 0x53, 0xad, 0xf5, 0xff, 0x34, 0x0c, 0x8f, 0x1e, 0x81, 0x59, 0x43, - 0xed, 0xec, 0xe5, 0x3e, 0xfe, 0xc1, 0x3d, 0xda, 0xe7, 0xe9, 0xe4, 0x7c, 0x9e, 0xe3, 0xe3, 0x3b, - 0xea, 0xe7, 0xf4, 0xf3, 0x3e, 0xe7, 0xf1, 0x51, 0x1e, 0xfd, 0xf3, 0xb7, 0xb3, 0x3f, 0x7f, 0xc1, - 0x55, 0x3d, 0x74, 0xbb, 0x74, 0x72, 0xb6, 0x4b, 0xc1, 0x55, 0x3d, 0xc2, 0xf6, 0xfa, 0x93, 0x61, - 0x78, 0xec, 0x28, 0x8c, 0x63, 0xc1, 0xfd, 0x95, 0x41, 0xf2, 0x4e, 0x75, 0x7f, 0xe5, 0xf9, 0x35, - 0x9d, 0xe2, 0xfe, 0xca, 0x40, 0x79, 0xda, 0xfb, 0x2b, 0x6f, 0x55, 0x4f, 0x6b, 0x7f, 0xe5, 0xad, - 0xea, 0x11, 0xf6, 0xd7, 0x5f, 0x24, 0xef, 0x87, 0x90, 0x5f, 0xac, 0xc3, 0x50, 0xb3, 0xd3, 0x2d, - 0x48, 0xa4, 0x98, 0x81, 0x50, 0x75, 0x6d, 0x03, 0x53, 0x18, 0x08, 0xc3, 0x28, 0xdf, 0x3f, 0x05, - 0x49, 0x10, 0xf3, 0x90, 0xe1, 0x5b, 0x12, 0x0b, 0x48, 0x74, 0xa9, 0x48, 0x67, 0x9b, 0xb4, 0x89, - 0x67, 0xd8, 0x8d, 0xc0, 0xf5, 0x8c, 0x56, 0x51, 0x6a, 0xc3, 0x96, 0x6a, 0x29, 0x01, 0x0b, 0xa7, - 0xa0, 0xd3, 0x05, 0xe9, 0x58, 0x66, 0x41, 0xfa, 0xc2, 0x16, 0x64, 0xad, 0x5e, 0xc3, 0x14, 0x86, - 0xfe, 0x8f, 0xc7, 0x41, 0x09, 0x5c, 0x87, 0x7e, 0x10, 0xae, 0x18, 0xb6, 0xed, 0xde, 0x5f, 0xf3, - 0xac, 0x5d, 0xcb, 0x26, 0x2d, 0x62, 0x86, 0xcc, 0x94, 0x2f, 0xcc, 0xc8, 0x98, 0xc0, 0xb4, 0x90, - 0xd7, 0x08, 0xe7, 0xf7, 0x47, 0x6f, 0x69, 0x70, 0xbe, 0x99, 0x0c, 0x16, 0x36, 0x88, 0xa1, 0x49, - 0x2a, 0xf2, 0x18, 0x3f, 0x4f, 0xa9, 0x62, 0x9c, 0x46, 0x8b, 0x7e, 0x42, 0xe3, 0x4a, 0xb9, 0xf0, - 0x99, 0x44, 0x7c, 0xb3, 0xdb, 0x27, 0xf4, 0xa0, 0x18, 0x69, 0xf7, 0xa2, 0xb7, 0xab, 0x38, 0x42, - 0xf4, 0x39, 0x0d, 0x2e, 0xed, 0x64, 0xbd, 0x25, 0x88, 0x2f, 0x7b, 0xaf, 0xe8, 0x50, 0x72, 0x1e, - 0x27, 0x38, 0x3b, 0x9b, 0xd9, 0x00, 0x67, 0x0f, 0x24, 0x5c, 0xa5, 0x50, 0xbd, 0x2a, 0x88, 0x40, - 0xe1, 0x55, 0x4a, 0xe8, 0x69, 0xa3, 0x55, 0x0a, 0x2b, 0x70, 0x1c, 0x21, 0xea, 0xc0, 0xf8, 0x8e, - 0xd4, 0x69, 0x0b, 0x3d, 0x56, 0xb5, 0x28, 0x76, 0x45, 0x31, 0xce, 0x0d, 0x69, 0xc2, 0x42, 0x1c, - 0x21, 0x41, 0xdb, 0x30, 0xb6, 0xc3, 0x09, 0x91, 0xd0, 0x3f, 0x2d, 0x0c, 0x2c, 0x1f, 0x73, 0x35, - 0x88, 0x28, 0xc2, 0x12, 0xbc, 0x6a, 0x45, 0x5b, 0x3e, 0xc4, 0xb9, 0xe3, 0x33, 0x1a, 0x5c, 0xda, - 0x25, 0x5e, 0x60, 0x35, 0x93, 0x2f, 0x39, 0xe3, 0xc5, 0x65, 0xf8, 0x17, 0xb3, 0x00, 0xf2, 0x6d, - 0x92, 0x59, 0x85, 0xb3, 0x87, 0x40, 0x25, 0x7a, 0xae, 0x90, 0x6f, 0x04, 0x46, 0x60, 0x35, 0xd7, - 0xdd, 0x1d, 0xe2, 0x44, 0xf9, 0x55, 0x98, 0x26, 0xa8, 0xcc, 0x25, 0xfa, 0xa5, 0xfc, 0x66, 0xb8, - 0x1f, 0x0c, 0xfd, 0x5b, 0x1a, 0xa4, 0xd4, 0xca, 0xe8, 0xe7, 0x35, 0x98, 0xdc, 0x22, 0x46, 0xd0, - 0xf5, 0xc8, 0x6d, 0x23, 0x08, 0x3d, 0xce, 0x5f, 0x3c, 0x09, 0x6d, 0xf6, 0xfc, 0x2d, 0x05, 0x30, - 0x37, 0x08, 0x08, 0x83, 0x5e, 0xaa, 0x55, 0x38, 0x36, 0x82, 0xb9, 0xe7, 0xe1, 0x7c, 0xaa, 0xe3, - 0xb1, 0x5e, 0x18, 0xff, 0xb5, 0x06, 0x59, 0x29, 0x81, 0xd0, 0xab, 0x30, 0x62, 0x98, 0x66, 0x18, - 0xe3, 0xff, 0xd9, 0x62, 0xb6, 0x29, 0xa6, 0xea, 0xd8, 0xcf, 0x7e, 0x62, 0x0e, 0x16, 0xdd, 0x02, - 0x64, 0xc4, 0x5e, 0xb8, 0x57, 0x22, 0x77, 0x55, 0xf6, 0x12, 0xb6, 0x90, 0xaa, 0xc5, 0x19, 0x3d, - 0xf4, 0x9f, 0xd1, 0x00, 0xa5, 0xc3, 0xa4, 0x22, 0x0f, 0xca, 0x62, 0x2b, 0xcb, 0xaf, 0x54, 0x2b, - 0xe8, 0x52, 0x12, 0xf3, 0x8f, 0x8a, 0x0c, 0x9d, 0x44, 0x81, 0x8f, 0x43, 0x3c, 0xfa, 0x5f, 0x6a, - 0x10, 0xc5, 0x01, 0x47, 0xef, 0x83, 0x09, 0x93, 0xf8, 0x4d, 0xcf, 0xea, 0x04, 0x91, 0x37, 0x55, - 0xe8, 0x95, 0x51, 0x8b, 0xaa, 0xb0, 0xda, 0x0e, 0xe9, 0x30, 0x1a, 0x18, 0xfe, 0x4e, 0xbd, 0x26, - 0x84, 0x4a, 0xc6, 0x02, 0xac, 0xb3, 0x12, 0x2c, 0x6a, 0xa2, 0x90, 0x61, 0x43, 0x47, 0x08, 0x19, - 0x86, 0xb6, 0x4e, 0x20, 0x3e, 0x1a, 0x3a, 0x3c, 0x36, 0x9a, 0xfe, 0xab, 0x25, 0x38, 0x47, 0x9b, - 0xac, 0x18, 0x96, 0x13, 0x10, 0x87, 0xf9, 0x0e, 0x14, 0x5c, 0x84, 0x16, 0x4c, 0x05, 0x31, 0xdf, - 0xb8, 0xe3, 0x7b, 0x96, 0x85, 0xd6, 0x34, 0x71, 0x8f, 0xb8, 0x38, 0x5c, 0xf4, 0xac, 0x74, 0xde, - 0xe0, 0xe2, 0xf7, 0xa3, 0x72, 0xab, 0x32, 0x8f, 0x8c, 0x07, 0xc2, 0xd1, 0x30, 0x0c, 0x1e, 0x1f, - 0xf3, 0xd3, 0x78, 0x06, 0xa6, 0x84, 0x11, 0x35, 0x8f, 0xfd, 0x26, 0xc4, 0x6f, 0x76, 0xc3, 0xdc, - 0x52, 0x2b, 0x70, 0xbc, 0x9d, 0xfe, 0x95, 0x12, 0xc4, 0x43, 0xd4, 0x17, 0x5d, 0xa5, 0x74, 0xe0, - 0xbb, 0xd2, 0xa9, 0x05, 0xbe, 0x7b, 0x0f, 0xcb, 0xef, 0xc2, 0x13, 0x81, 0xf1, 0x27, 0x72, 0x35, - 0x2b, 0x0b, 0x4f, 0xe3, 0x15, 0xb6, 0x88, 0x96, 0x75, 0xf8, 0xd8, 0xcb, 0xfa, 0x3e, 0x61, 0x5d, - 0x39, 0x12, 0x0b, 0x3f, 0x28, 0xad, 0x2b, 0xcf, 0xc7, 0x3a, 0x2a, 0xae, 0x26, 0x5f, 0xd4, 0x60, - 0x4c, 0xc4, 0x06, 0x3e, 0x82, 0x2b, 0xd3, 0x16, 0x8c, 0x30, 0x91, 0x67, 0x10, 0x6e, 0xb0, 0xb1, - 0xed, 0xba, 0x41, 0x2c, 0x42, 0x32, 0xf3, 0x1d, 0x60, 0xff, 0x62, 0x0e, 0x9e, 0x19, 0xd8, 0x79, - 0xcd, 0x6d, 0x2b, 0x20, 0xcd, 0x40, 0xc6, 0x5d, 0x95, 0x06, 0x76, 0x4a, 0x39, 0x8e, 0xb5, 0xd2, - 0x3f, 0x3b, 0x0c, 0xd7, 0x05, 0xe0, 0x14, 0x8b, 0x14, 0x12, 0xb8, 0x1e, 0x5c, 0x10, 0xdf, 0xb6, - 0xe6, 0x19, 0x56, 0x68, 0x7a, 0x50, 0x4c, 0xf4, 0x15, 0xc9, 0xee, 0x52, 0xe0, 0x70, 0x16, 0x0e, - 0x1e, 0x41, 0x94, 0x15, 0xdf, 0x21, 0x86, 0x1d, 0x6c, 0x4b, 0xdc, 0xa5, 0x41, 0x22, 0x88, 0xa6, - 0xe1, 0xe1, 0x4c, 0x2c, 0xcc, 0xf4, 0x41, 0x54, 0x54, 0x3d, 0x62, 0xa8, 0x76, 0x17, 0x03, 0x98, - 0xff, 0xaf, 0x64, 0x42, 0xc4, 0x39, 0x98, 0x98, 0x0e, 0xd1, 0xd8, 0x63, 0x2a, 0x09, 0x4c, 0x02, - 0xcf, 0x62, 0x91, 0xae, 0x43, 0x2d, 0xfa, 0x4a, 0xbc, 0x0a, 0x27, 0xdb, 0xa2, 0x9b, 0x30, 0xcd, - 0x4c, 0x49, 0xa2, 0x50, 0x57, 0x23, 0x51, 0x34, 0x85, 0xd5, 0x58, 0x0d, 0x4e, 0xb4, 0xd4, 0x7f, - 0x4d, 0x83, 0x49, 0x75, 0xdb, 0x1d, 0xc1, 0xaf, 0xa9, 0xab, 0x5c, 0x86, 0x03, 0xf8, 0xdc, 0xa8, - 0x58, 0x8f, 0x72, 0x1f, 0x7e, 0x62, 0x08, 0x2e, 0x64, 0xf4, 0x61, 0x86, 0x01, 0x24, 0x71, 0xb1, - 0x0e, 0x62, 0x18, 0x90, 0xba, 0xa4, 0x43, 0xc3, 0x80, 0x64, 0x0d, 0x4e, 0xe1, 0x45, 0x2f, 0xc2, - 0x50, 0xd3, 0xb3, 0xc4, 0xb2, 0x3c, 0x53, 0x48, 0x2c, 0xc4, 0xf5, 0xc5, 0x09, 0x81, 0x71, 0xa8, - 0x8a, 0xeb, 0x98, 0x02, 0xa4, 0xd7, 0x83, 0x7a, 0xa8, 0xe5, 0x5d, 0xcd, 0xae, 0x07, 0xf5, 0xec, - 0xfb, 0x38, 0xde, 0x0e, 0xbd, 0x0c, 0xb3, 0x82, 0x5f, 0x97, 0x9e, 0xcc, 0xae, 0xe3, 0x07, 0xf4, - 0xfc, 0x05, 0x82, 0x9c, 0x3e, 0x7c, 0xb0, 0x5f, 0x99, 0xbd, 0x9b, 0xd3, 0x06, 0xe7, 0xf6, 0xd6, - 0xff, 0x7c, 0x08, 0x26, 0x94, 0xf8, 0xe9, 0x68, 0x65, 0x10, 0x45, 0x47, 0x34, 0x63, 0xa9, 0xec, - 0x58, 0x81, 0xa1, 0x56, 0xa7, 0x5b, 0x50, 0xd3, 0x11, 0x82, 0xbb, 0x4d, 0xc1, 0xb5, 0x3a, 0x5d, - 0xf4, 0x62, 0xa8, 0x3b, 0x29, 0xa6, 0xdd, 0x08, 0xfd, 0x4e, 0x12, 0xfa, 0x13, 0x79, 0x5c, 0x86, - 0x73, 0x8f, 0x4b, 0x1b, 0xc6, 0x7c, 0xa1, 0x58, 0x19, 0x29, 0x1e, 0x3b, 0x46, 0x59, 0x69, 0xa1, - 0x48, 0xe1, 0x52, 0x99, 0xd4, 0xb3, 0x48, 0x1c, 0x94, 0xe3, 0xeb, 0x32, 0x6f, 0x56, 0x26, 0x6e, - 0x96, 0x39, 0xc7, 0xb7, 0xc1, 0x4a, 0xb0, 0xa8, 0x49, 0x5d, 0x24, 0x63, 0x47, 0xba, 0x48, 0xfe, - 0x6e, 0x09, 0x50, 0x7a, 0x18, 0xe8, 0x51, 0x18, 0x61, 0xde, 0xf0, 0x82, 0x62, 0x84, 0xfc, 0x39, - 0xf3, 0x87, 0xc6, 0xbc, 0x0e, 0x35, 0x44, 0x24, 0x8c, 0x62, 0x9f, 0x93, 0x59, 0xd6, 0x08, 0x7c, - 0x4a, 0xd8, 0x8c, 0xeb, 0x31, 0xd7, 0x89, 0xac, 0x9b, 0x79, 0x03, 0xc6, 0xda, 0x96, 0xc3, 0x9e, - 0xf7, 0x8a, 0xe9, 0x9b, 0xb8, 0x01, 0x00, 0x07, 0x81, 0x25, 0x2c, 0xfd, 0x4f, 0x4a, 0x74, 0xeb, - 0x47, 0x7c, 0x69, 0x0f, 0xc0, 0xe8, 0x06, 0x2e, 0x67, 0x70, 0xc4, 0x09, 0xa8, 0x17, 0xfb, 0xca, - 0x21, 0xd0, 0x85, 0x10, 0x20, 0x7f, 0x98, 0x8a, 0x7e, 0x63, 0x05, 0x19, 0x45, 0x1d, 0x58, 0x6d, - 0xf2, 0x92, 0xe5, 0x98, 0xee, 0x7d, 0xb1, 0xbc, 0x83, 0xa2, 0x5e, 0x0f, 0x01, 0x72, 0xd4, 0xd1, - 0x6f, 0xac, 0x20, 0xa3, 0xa4, 0x85, 0x89, 0xb7, 0x0e, 0x4b, 0x68, 0x21, 0xc6, 0xe6, 0xda, 0xb6, - 0xbc, 0x3b, 0xcb, 0x9c, 0xb4, 0x54, 0x73, 0xda, 0xe0, 0xdc, 0xde, 0xfa, 0xaf, 0x6b, 0x70, 0x29, - 0x73, 0x29, 0xd0, 0x6d, 0x38, 0x1f, 0x19, 0x63, 0xa9, 0xc4, 0xbe, 0x1c, 0x25, 0x52, 0xb9, 0x9b, - 0x6c, 0x80, 0xd3, 0x7d, 0x78, 0xb6, 0xde, 0xd4, 0x65, 0x22, 0x2c, 0xb9, 0x54, 0x06, 0x46, 0xad, - 0xc6, 0x59, 0x7d, 0xf4, 0x1f, 0x8c, 0x0d, 0x36, 0x5a, 0x2c, 0x7a, 0x32, 0x36, 0x49, 0x2b, 0x74, - 0x5d, 0x0b, 0x4f, 0xc6, 0x22, 0x2d, 0xc4, 0xbc, 0x0e, 0x3d, 0xa2, 0x3a, 0x84, 0x86, 0x74, 0x4b, - 0x3a, 0x85, 0xea, 0x3f, 0x0c, 0x0f, 0xe5, 0xbc, 0x57, 0xa2, 0x1a, 0x4c, 0xfa, 0xf7, 0x8d, 0xce, - 0x22, 0xd9, 0x36, 0x76, 0x2d, 0x11, 0x60, 0x80, 0x1b, 0xd9, 0x4d, 0x36, 0x94, 0xf2, 0x07, 0x89, - 0xdf, 0x38, 0xd6, 0x4b, 0x0f, 0x00, 0x84, 0x31, 0xa6, 0xe5, 0xb4, 0xd0, 0x16, 0x94, 0x0d, 0x91, - 0x2c, 0x56, 0xec, 0xe3, 0xef, 0x2f, 0x24, 0xaa, 0x0b, 0x18, 0xdc, 0x4a, 0x5c, 0xfe, 0xc2, 0x21, - 0x6c, 0xfd, 0x9f, 0x6a, 0x70, 0x39, 0xdb, 0xa5, 0xfc, 0x08, 0x0c, 0x48, 0x1b, 0x26, 0xbc, 0xa8, - 0x9b, 0xd8, 0xf4, 0xdf, 0xa7, 0xc6, 0x14, 0x55, 0x82, 0x68, 0x51, 0xe6, 0xac, 0xea, 0xb9, 0xbe, - 0xfc, 0xf2, 0xc9, 0x30, 0xa3, 0xa1, 0x60, 0xa4, 0x8c, 0x04, 0xab, 0xf0, 0xf5, 0xdf, 0x2d, 0x01, - 0xac, 0x92, 0xe0, 0xbe, 0xeb, 0xed, 0xd0, 0x25, 0x7a, 0x38, 0x26, 0x0f, 0x94, 0xbf, 0x7d, 0x61, - 0x0d, 0x1e, 0x86, 0xe1, 0x8e, 0x6b, 0xfa, 0x82, 0xfc, 0xb1, 0x81, 0x30, 0x3b, 0x25, 0x56, 0x8a, - 0x2a, 0x30, 0xc2, 0x9e, 0x27, 0xc4, 0xcd, 0xc4, 0xa4, 0x09, 0xca, 0x0b, 0xfa, 0x98, 0x97, 0xf3, - 0x14, 0x60, 0xcc, 0xf3, 0xc2, 0x17, 0xe2, 0x91, 0x48, 0x01, 0xc6, 0xcb, 0x70, 0x58, 0x8b, 0x6e, - 0x02, 0x58, 0x9d, 0x5b, 0x46, 0xdb, 0xb2, 0x29, 0x67, 0x3a, 0x1a, 0x66, 0x9c, 0x85, 0xfa, 0x9a, - 0x2c, 0x7d, 0xb0, 0x5f, 0x29, 0x8b, 0x5f, 0x3d, 0xac, 0xb4, 0xd6, 0xff, 0x6a, 0x08, 0x62, 0xd9, - 0x99, 0x23, 0x4d, 0x90, 0x76, 0x3a, 0x9a, 0xa0, 0x97, 0x61, 0xd6, 0x76, 0x0d, 0x73, 0xd1, 0xb0, - 0xe9, 0x69, 0xf4, 0x1a, 0xfc, 0x33, 0x1a, 0x4e, 0x2b, 0x4c, 0xc1, 0xcb, 0xa8, 0xd2, 0x72, 0x4e, - 0x1b, 0x9c, 0xdb, 0x1b, 0x05, 0x61, 0x4e, 0xe8, 0xa1, 0xe2, 0x4e, 0x8a, 0xea, 0x5a, 0xcc, 0xab, - 0xfe, 0x3a, 0x21, 0x83, 0x91, 0x48, 0x1b, 0xfd, 0x11, 0x0d, 0x2e, 0x91, 0x3d, 0xee, 0xaf, 0xb6, - 0xee, 0x19, 0x5b, 0x5b, 0x56, 0x53, 0x58, 0x8f, 0xf2, 0x0f, 0xbb, 0x7c, 0xb0, 0x5f, 0xb9, 0xb4, - 0x94, 0xd5, 0xe0, 0xc1, 0x7e, 0xe5, 0x46, 0xa6, 0xfb, 0x20, 0xfb, 0xac, 0x99, 0x5d, 0x70, 0x36, - 0xaa, 0xb9, 0x67, 0x61, 0xe2, 0x18, 0x3e, 0x07, 0x31, 0x27, 0xc1, 0xdf, 0x2b, 0xc1, 0x24, 0xdd, - 0x77, 0xcb, 0x6e, 0xd3, 0xb0, 0x6b, 0xab, 0x8d, 0x63, 0xe4, 0x34, 0x47, 0xcb, 0x70, 0x71, 0xcb, - 0xf5, 0x9a, 0x64, 0xbd, 0xba, 0xb6, 0xee, 0x8a, 0x87, 0x91, 0xda, 0x6a, 0x43, 0x50, 0x69, 0x26, - 0xea, 0xdd, 0xca, 0xa8, 0xc7, 0x99, 0xbd, 0xd0, 0x3d, 0xb8, 0x14, 0x95, 0x6f, 0x74, 0xb8, 0xb9, - 0x09, 0x05, 0x37, 0x14, 0x99, 0xcb, 0xdc, 0xca, 0x6a, 0x80, 0xb3, 0xfb, 0x21, 0x03, 0xae, 0x8a, - 0xc8, 0x21, 0xb7, 0x5c, 0xef, 0xbe, 0xe1, 0x99, 0x71, 0xb0, 0xc3, 0x91, 0xe2, 0xb8, 0x96, 0xdf, - 0x0c, 0xf7, 0x83, 0xa1, 0xff, 0xe2, 0x28, 0x28, 0x4e, 0x65, 0xc7, 0x48, 0x1a, 0xf5, 0x2b, 0x1a, - 0x5c, 0x6c, 0xda, 0x16, 0x71, 0x82, 0x84, 0x07, 0x11, 0x27, 0x47, 0x1b, 0x85, 0xbc, 0xdd, 0x3a, - 0xc4, 0xa9, 0xd7, 0x84, 0x75, 0x4e, 0x35, 0x03, 0xb8, 0xb0, 0x60, 0xca, 0xa8, 0xc1, 0x99, 0x83, - 0x61, 0xf3, 0x61, 0xe5, 0xf5, 0x9a, 0x1a, 0xf2, 0xa0, 0x2a, 0xca, 0x70, 0x58, 0x8b, 0x9e, 0x82, - 0x89, 0x96, 0xe7, 0x76, 0x3b, 0x7e, 0x95, 0x99, 0x04, 0xf3, 0xbd, 0xcf, 0xf8, 0xc2, 0xdb, 0x51, - 0x31, 0x56, 0xdb, 0x50, 0x2e, 0x97, 0xff, 0x5c, 0xf3, 0xc8, 0x96, 0xb5, 0x27, 0x88, 0x1c, 0xe3, - 0x72, 0x6f, 0x2b, 0xe5, 0x38, 0xd6, 0x8a, 0x79, 0x2d, 0xfb, 0x7e, 0x97, 0x78, 0x1b, 0x78, 0x59, - 0x64, 0x5b, 0xe0, 0x5e, 0xcb, 0xb2, 0x10, 0x47, 0xf5, 0xe8, 0x93, 0x1a, 0x4c, 0x7b, 0xe4, 0xf5, - 0xae, 0xe5, 0x11, 0x93, 0x21, 0xf5, 0x85, 0x67, 0x1f, 0x1e, 0xcc, 0x9b, 0x70, 0x1e, 0xc7, 0x80, - 0x72, 0x0a, 0x11, 0x2a, 0xd7, 0xe2, 0x95, 0x38, 0x31, 0x02, 0xba, 0x54, 0xbe, 0xd5, 0x72, 0x2c, - 0xa7, 0xb5, 0x60, 0xb7, 0xfc, 0xd9, 0x32, 0x23, 0x7a, 0x9c, 0x85, 0x8e, 0x8a, 0xb1, 0xda, 0x86, - 0x8a, 0x97, 0x5d, 0x9f, 0x9e, 0xfb, 0x36, 0xe1, 0xeb, 0x3b, 0x1e, 0x69, 0x1f, 0x37, 0xd4, 0x0a, - 0x1c, 0x6f, 0x87, 0x6e, 0xc2, 0xb4, 0x2c, 0x10, 0xab, 0x0c, 0x3c, 0xd6, 0x1d, 0x1d, 0xe7, 0x46, - 0xac, 0x06, 0x27, 0x5a, 0xce, 0x2d, 0xc0, 0x85, 0x8c, 0x69, 0x1e, 0x8b, 0xb8, 0xfc, 0x3f, 0x0d, - 0x2e, 0xf1, 0x8c, 0x97, 0x32, 0x4f, 0x83, 0x0c, 0x6a, 0x97, 0x1d, 0x1f, 0x4e, 0x3b, 0xd5, 0xf8, - 0x70, 0xdf, 0x86, 0x38, 0x78, 0xfa, 0xaf, 0x95, 0xe0, 0x9d, 0x87, 0x9e, 0x4b, 0xf4, 0x0f, 0x35, - 0x98, 0x20, 0x7b, 0x81, 0x67, 0x84, 0x7e, 0x13, 0x74, 0x93, 0x6e, 0x9d, 0x0a, 0x11, 0x98, 0x5f, - 0x8a, 0x10, 0xf1, 0x8d, 0x1b, 0xb2, 0x58, 0x4a, 0x0d, 0x56, 0xc7, 0x43, 0x85, 0x56, 0x1e, 0x0b, - 0x52, 0x7d, 0xa6, 0x10, 0x89, 0x88, 0x45, 0xcd, 0xdc, 0x07, 0x61, 0x26, 0x09, 0xf9, 0x58, 0x7b, - 0xe5, 0x77, 0x4a, 0x30, 0xb6, 0xe6, 0xb9, 0x94, 0xfb, 0x3b, 0x83, 0xe0, 0x07, 0x46, 0x2c, 0x3e, - 0x7a, 0x21, 0x7f, 0x66, 0x31, 0xd8, 0xdc, 0xdc, 0x0c, 0x56, 0x22, 0x37, 0xc3, 0xc2, 0x20, 0x48, - 0xfa, 0x27, 0x63, 0xf8, 0x92, 0x06, 0x13, 0xa2, 0xe5, 0x19, 0xb8, 0xf8, 0xff, 0x48, 0xdc, 0xc5, - 0xff, 0x03, 0x03, 0xcc, 0x2b, 0xc7, 0xb7, 0xff, 0x33, 0x1a, 0x4c, 0x89, 0x16, 0x2b, 0xa4, 0xbd, - 0x49, 0x3c, 0x74, 0x0b, 0xc6, 0xfc, 0x2e, 0xfb, 0x90, 0x62, 0x42, 0x57, 0x55, 0x79, 0xc2, 0xdb, - 0x34, 0x9a, 0x2c, 0x9b, 0x36, 0x6f, 0xa2, 0x64, 0x3c, 0xe0, 0x05, 0x58, 0x76, 0xa6, 0xd2, 0x8b, - 0xe7, 0xda, 0xa9, 0xa0, 0x4f, 0xd8, 0xb5, 0x09, 0x66, 0x35, 0x94, 0x31, 0xa7, 0x7f, 0xa5, 0x0a, - 0x8f, 0x31, 0xe6, 0xb4, 0xda, 0xc7, 0xbc, 0x5c, 0xff, 0xe8, 0x70, 0xb8, 0xd8, 0x2c, 0x2a, 0xf9, - 0x1d, 0x18, 0x6f, 0x7a, 0xc4, 0x08, 0x88, 0xb9, 0xd8, 0x3b, 0xca, 0xe0, 0xd8, 0x75, 0x55, 0x95, - 0x3d, 0x70, 0xd4, 0x99, 0xde, 0x0c, 0xea, 0xcb, 0x50, 0x29, 0xba, 0x44, 0x73, 0x5f, 0x85, 0xbe, - 0x1f, 0x46, 0xdc, 0xfb, 0x4e, 0x68, 0x60, 0xd2, 0x17, 0x31, 0x9b, 0xca, 0x3d, 0xda, 0x1a, 0xf3, - 0x4e, 0x6a, 0xd0, 0xb3, 0xe1, 0x3e, 0x41, 0xcf, 0x6c, 0x18, 0x6b, 0xb3, 0xcf, 0x30, 0x50, 0x00, - 0xfc, 0xd8, 0x07, 0x55, 0x53, 0x24, 0x31, 0xc8, 0x58, 0xa2, 0xa0, 0x37, 0x3c, 0xbd, 0x85, 0xfc, - 0x8e, 0xd1, 0x24, 0xea, 0x0d, 0xbf, 0x2a, 0x0b, 0x71, 0x54, 0x8f, 0x7a, 0xf1, 0x68, 0x7a, 0x63, - 0xc5, 0x35, 0x78, 0x62, 0x78, 0x4a, 0x00, 0x3d, 0xbe, 0xf4, 0xb9, 0x11, 0xf5, 0x7e, 0x76, 0x38, - 0xdc, 0xa4, 0x22, 0x9f, 0x45, 0x76, 0x06, 0x68, 0xad, 0x50, 0x06, 0xe8, 0xef, 0x95, 0x51, 0x5f, - 0x4b, 0xb1, 0x74, 0x5e, 0x61, 0xd4, 0xd7, 0x49, 0x81, 0x3a, 0x16, 0xe9, 0xb5, 0x0b, 0x17, 0xfc, - 0xc0, 0xb0, 0x49, 0xc3, 0x12, 0x9a, 0x0e, 0x3f, 0x30, 0xda, 0x9d, 0x02, 0x61, 0x57, 0xb9, 0x97, - 0x41, 0x1a, 0x14, 0xce, 0x82, 0x8f, 0x7e, 0x5a, 0x83, 0x59, 0x56, 0xbe, 0xd0, 0x0d, 0x5c, 0x1e, - 0x1f, 0x3c, 0x42, 0x7e, 0xfc, 0xe7, 0x67, 0x26, 0x00, 0x36, 0x72, 0xe0, 0xe1, 0x5c, 0x4c, 0xe8, - 0x4d, 0xb8, 0x44, 0x6f, 0xe0, 0x85, 0x66, 0x60, 0xed, 0x5a, 0x41, 0x2f, 0x1a, 0xc2, 0xf1, 0x63, - 0xad, 0x32, 0x61, 0x63, 0x39, 0x0b, 0x18, 0xce, 0xc6, 0xa1, 0xff, 0x85, 0x06, 0x28, 0xbd, 0x85, - 0x90, 0x0d, 0x65, 0x53, 0x9a, 0xfd, 0x6b, 0x27, 0x12, 0xea, 0x31, 0xa4, 0xcc, 0xa1, 0xb7, 0x40, - 0x88, 0x01, 0xb9, 0x30, 0x7e, 0x7f, 0xdb, 0x0a, 0x88, 0x6d, 0xf9, 0xc1, 0x09, 0x45, 0x96, 0x0c, - 0xc3, 0xac, 0xbd, 0x24, 0x01, 0xe3, 0x08, 0x87, 0xfe, 0x73, 0xc3, 0x50, 0x0e, 0x03, 0x5d, 0x1f, - 0xfe, 0x12, 0xdb, 0x05, 0xd4, 0x54, 0x92, 0x85, 0x0d, 0xa2, 0x81, 0x61, 0x4c, 0x58, 0x35, 0x05, - 0x0c, 0x67, 0x20, 0x40, 0x6f, 0xc2, 0x45, 0xcb, 0xd9, 0xf2, 0x0c, 0x3f, 0xf0, 0xba, 0x4c, 0x57, - 0x3e, 0x48, 0xce, 0x2d, 0x26, 0x43, 0xd5, 0x33, 0xc0, 0xe1, 0x4c, 0x24, 0x88, 0xc0, 0x18, 0x8f, - 0xe7, 0x2f, 0x83, 0xfe, 0x15, 0xca, 0x1e, 0xcb, 0xf3, 0x04, 0x44, 0x54, 0x93, 0xff, 0xf6, 0xb1, - 0x84, 0xcd, 0x03, 0x72, 0xf0, 0xff, 0xe5, 0xab, 0xb1, 0xd8, 0xf7, 0xd5, 0xe2, 0xf8, 0xa2, 0x44, - 0xc4, 0x3c, 0x20, 0x47, 0xbc, 0x10, 0x27, 0x11, 0xea, 0x7f, 0xa8, 0xc1, 0x08, 0x77, 0xa7, 0x3d, - 0x7d, 0x0e, 0xee, 0x87, 0x63, 0x1c, 0x5c, 0xa1, 0xb4, 0x41, 0x6c, 0xa8, 0xb9, 0x09, 0x6d, 0xbe, - 0xa8, 0xc1, 0x38, 0x6b, 0x71, 0x06, 0x2c, 0xd5, 0xab, 0x71, 0x96, 0xea, 0xd9, 0xc2, 0xb3, 0xc9, - 0x61, 0xa8, 0xfe, 0x70, 0x48, 0xcc, 0x85, 0x71, 0x2c, 0x75, 0xb8, 0x20, 0x6c, 0x56, 0x97, 0xad, - 0x2d, 0x42, 0xb7, 0x78, 0xcd, 0xe8, 0xf1, 0x07, 0xa2, 0x11, 0xe1, 0x31, 0x95, 0xae, 0xc6, 0x59, - 0x7d, 0xd0, 0xef, 0x69, 0x94, 0x37, 0x08, 0x3c, 0xab, 0x39, 0x50, 0x96, 0x98, 0x70, 0x6c, 0xf3, - 0x2b, 0x1c, 0x18, 0x97, 0x4c, 0x36, 0x22, 0x26, 0x81, 0x95, 0x3e, 0xd8, 0xaf, 0x54, 0x32, 0x54, - 0x66, 0x51, 0xc6, 0x08, 0x3f, 0xf8, 0xc8, 0x9f, 0xf6, 0x6d, 0xc2, 0xd4, 0xd4, 0x72, 0xc4, 0xe8, - 0x0e, 0x8c, 0xf8, 0x4d, 0xb7, 0x43, 0x8e, 0x93, 0xf7, 0x2a, 0x5c, 0xe0, 0x06, 0xed, 0x89, 0x39, - 0x80, 0xb9, 0xd7, 0x60, 0x52, 0x1d, 0x79, 0x86, 0xe4, 0x53, 0x53, 0x25, 0x9f, 0x63, 0xbf, 0x74, - 0xa9, 0x92, 0xd2, 0xef, 0x97, 0x60, 0x94, 0x67, 0x8f, 0x3e, 0x82, 0x32, 0xde, 0x92, 0xa1, 0xf9, - 0x07, 0x48, 0x8a, 0xaf, 0xc6, 0xb1, 0x7c, 0xc5, 0x75, 0x94, 0x35, 0x50, 0xa3, 0xf3, 0x23, 0x27, - 0x8c, 0x6e, 0x3a, 0x54, 0x3c, 0x37, 0x0f, 0x9f, 0xd8, 0x69, 0xc7, 0x33, 0xfd, 0x63, 0x0d, 0x26, - 0x63, 0xe1, 0x62, 0xdb, 0x30, 0xe4, 0x85, 0x59, 0xdb, 0x8a, 0xbe, 0x55, 0x48, 0xcb, 0xa7, 0xab, - 0x7d, 0x1a, 0x61, 0x8a, 0x27, 0x8c, 0x2c, 0x5b, 0x3a, 0xa1, 0xc8, 0xb2, 0xfa, 0xa7, 0x34, 0xb8, - 0x2c, 0x27, 0x14, 0x8f, 0x9b, 0x84, 0x1e, 0x87, 0xb2, 0xd1, 0xb1, 0x98, 0x4a, 0x4d, 0x55, 0x4a, - 0x2e, 0xac, 0xd5, 0x59, 0x19, 0x0e, 0x6b, 0xd1, 0x7b, 0xa0, 0x2c, 0x37, 0x9e, 0x60, 0x3b, 0x43, - 0x9a, 0x15, 0xbe, 0xbe, 0x84, 0x2d, 0xd0, 0xbb, 0x94, 0xec, 0x09, 0x23, 0x11, 0x9f, 0x10, 0x22, - 0xe6, 0xaf, 0xc0, 0xfa, 0xf7, 0xc1, 0x78, 0xa3, 0x71, 0x67, 0xa1, 0xd9, 0x24, 0xbe, 0x7f, 0x0c, - 0xe5, 0xb2, 0xfe, 0xf1, 0x21, 0x98, 0x12, 0x01, 0xe0, 0x2c, 0xc7, 0xb4, 0x9c, 0xd6, 0x19, 0xdc, - 0x29, 0xeb, 0x30, 0xce, 0xb5, 0x19, 0x87, 0x64, 0xd8, 0x6b, 0xc8, 0x46, 0xc9, 0x30, 0xcb, 0x61, - 0x05, 0x8e, 0x00, 0xa1, 0xbb, 0x30, 0xfa, 0x3a, 0xa5, 0x6f, 0xf2, 0x5c, 0x1c, 0x89, 0xcc, 0x84, - 0x9b, 0x9e, 0x91, 0x46, 0x1f, 0x0b, 0x10, 0xc8, 0x67, 0xa6, 0x79, 0x8c, 0xe1, 0x1a, 0x24, 0xc2, - 0x44, 0x6c, 0x65, 0xc3, 0xdc, 0x29, 0x93, 0xc2, 0xc2, 0x8f, 0xfd, 0xc2, 0x21, 0x22, 0x16, 0x23, - 0x3e, 0xd6, 0xe3, 0x6d, 0x12, 0x23, 0x3e, 0x36, 0xe6, 0x9c, 0xab, 0xf1, 0x59, 0xb8, 0x94, 0xb9, - 0x18, 0x87, 0xb3, 0xb3, 0xfa, 0x6f, 0x96, 0x60, 0xb8, 0x41, 0x88, 0x79, 0x06, 0x3b, 0xf3, 0xd5, - 0x18, 0xb7, 0xf3, 0xfd, 0x85, 0xa3, 0xd4, 0xe7, 0x29, 0xab, 0xb6, 0x12, 0xca, 0xaa, 0x0f, 0x16, - 0xc6, 0xd0, 0x5f, 0x53, 0xf5, 0x4b, 0x25, 0x00, 0xda, 0x6c, 0xd1, 0x68, 0xee, 0x70, 0x8a, 0x13, - 0xee, 0x66, 0x2d, 0x4e, 0x71, 0xd2, 0xdb, 0xf0, 0x2c, 0x1f, 0x6f, 0x75, 0x18, 0xf5, 0xd8, 0x4d, - 0x24, 0xde, 0x3d, 0x80, 0xa7, 0x7d, 0xa6, 0x25, 0x58, 0xd4, 0xc4, 0xa9, 0xc5, 0xf0, 0x09, 0x51, - 0x0b, 0x7d, 0x0f, 0x58, 0x9e, 0xce, 0xda, 0x6a, 0x03, 0xb5, 0x95, 0xd5, 0x29, 0x15, 0xe7, 0xe5, - 0x05, 0xb8, 0x43, 0x4f, 0xf9, 0xc7, 0x35, 0x38, 0x97, 0x68, 0x7b, 0x04, 0x99, 0xee, 0x54, 0x68, - 0xa6, 0xfe, 0x07, 0x1a, 0x94, 0xe9, 0x58, 0xce, 0x80, 0xd0, 0xfc, 0xed, 0x38, 0xa1, 0x79, 0x7f, - 0xd1, 0x25, 0xce, 0xa1, 0x2f, 0x7f, 0x56, 0x02, 0x96, 0x0e, 0x42, 0x98, 0x28, 0x28, 0x2f, 0xff, - 0x5a, 0xce, 0xcb, 0xff, 0x75, 0x61, 0x38, 0x90, 0xd0, 0x51, 0x2a, 0xc6, 0x03, 0xef, 0x51, 0x6c, - 0x03, 0x86, 0xe2, 0xc7, 0x26, 0xc3, 0x3e, 0xe0, 0x0d, 0x98, 0xf2, 0xb7, 0x5d, 0x37, 0x08, 0xe3, - 0x0f, 0x0c, 0x17, 0xd7, 0x47, 0x33, 0x3b, 0x68, 0x39, 0x15, 0xfe, 0x00, 0xd5, 0x50, 0x61, 0xe3, - 0x38, 0x2a, 0x34, 0x0f, 0xb0, 0x69, 0xbb, 0xcd, 0x9d, 0x6a, 0xbd, 0x86, 0xa5, 0xdd, 0x2b, 0x33, - 0x5a, 0x5a, 0x0c, 0x4b, 0xb1, 0xd2, 0x62, 0x20, 0x5b, 0x86, 0x6f, 0x6a, 0x7c, 0xa5, 0x8f, 0xb1, - 0x79, 0xcf, 0x90, 0xa2, 0xbc, 0x3b, 0x41, 0x51, 0x94, 0x64, 0xf2, 0x31, 0xaa, 0x52, 0x91, 0x0c, - 0xfb, 0x70, 0xa4, 0x7f, 0x8e, 0x25, 0xc1, 0xfa, 0x1d, 0x31, 0xcd, 0x30, 0xa3, 0x48, 0x07, 0xa6, - 0x6c, 0x35, 0xb1, 0xa9, 0x38, 0x23, 0x85, 0x72, 0xa2, 0x86, 0x8e, 0x14, 0xb1, 0x62, 0x1c, 0x47, - 0x80, 0x9e, 0x81, 0x29, 0x39, 0x3b, 0xba, 0x98, 0xd2, 0x72, 0x83, 0x6d, 0x87, 0x35, 0xb5, 0x02, - 0xc7, 0xdb, 0xe9, 0xff, 0x60, 0x18, 0x1e, 0xe1, 0x63, 0x67, 0x1a, 0x83, 0x1a, 0xe9, 0x10, 0xc7, - 0x24, 0x4e, 0xb3, 0xc7, 0x78, 0x56, 0xd3, 0x6d, 0xa1, 0x9f, 0xd2, 0xa0, 0x4c, 0x1c, 0xb3, 0xe3, - 0x5a, 0x8e, 0x54, 0xf5, 0x7f, 0xb8, 0x78, 0x4e, 0x96, 0x1c, 0x2c, 0x4b, 0x02, 0x81, 0x88, 0x92, - 0x29, 0x7e, 0xe1, 0x10, 0x31, 0xba, 0x0f, 0x23, 0x1d, 0xcf, 0xdd, 0x94, 0xc2, 0xda, 0x8b, 0x27, - 0x3e, 0x82, 0x35, 0x0a, 0x9d, 0x7f, 0x5c, 0xf6, 0x2f, 0xe6, 0xf8, 0xd0, 0x9b, 0x30, 0x7a, 0x9f, - 0x10, 0x33, 0x54, 0xe8, 0xbf, 0x74, 0xe2, 0x98, 0x5f, 0x62, 0xe0, 0xf9, 0x85, 0xc6, 0xff, 0xc7, - 0x02, 0x25, 0x45, 0xce, 0x46, 0x21, 0x39, 0xcb, 0x97, 0x4e, 0x67, 0xda, 0x02, 0x39, 0xff, 0x1f, - 0x0b, 0x94, 0x3a, 0x86, 0x77, 0x1d, 0xe9, 0x9b, 0x1d, 0x47, 0x86, 0xb8, 0x07, 0xfa, 0xe1, 0xc3, - 0x39, 0x0e, 0xc0, 0x35, 0x78, 0xf4, 0x08, 0xf3, 0x3b, 0x49, 0x88, 0xfc, 0x13, 0x1d, 0x07, 0xe2, - 0xd7, 0x35, 0x78, 0x4c, 0x01, 0xb9, 0xb4, 0x47, 0x25, 0xaf, 0xaa, 0xd1, 0x31, 0x9a, 0x56, 0xd0, - 0xe3, 0x7e, 0xef, 0xc7, 0x4a, 0xe2, 0xf1, 0x71, 0x0d, 0xc6, 0xb8, 0xb1, 0x93, 0xbc, 0x22, 0x5f, - 0x1d, 0x70, 0x5f, 0xe4, 0x0e, 0x49, 0x46, 0x87, 0x96, 0x73, 0xe3, 0xbf, 0x7d, 0x2c, 0xf1, 0xeb, - 0xff, 0x76, 0x04, 0xbe, 0xeb, 0xe8, 0x80, 0xd0, 0x37, 0xb5, 0x74, 0xc6, 0xe0, 0xf6, 0xe9, 0x0e, - 0x3e, 0xd4, 0x34, 0x09, 0xe5, 0xc5, 0x4b, 0xa9, 0x0c, 0x3c, 0x27, 0xa4, 0xc4, 0x52, 0xd2, 0x13, - 0xff, 0x33, 0x0d, 0x26, 0x29, 0xeb, 0x10, 0x5e, 0x00, 0xfc, 0x33, 0x75, 0x4e, 0x79, 0xa6, 0xab, - 0x0a, 0xca, 0x84, 0x0f, 0xab, 0x5a, 0x85, 0x63, 0x63, 0x43, 0x1b, 0xf1, 0x17, 0x3b, 0x2e, 0x12, - 0x5f, 0xcb, 0xe2, 0x18, 0x8f, 0x93, 0xdf, 0x6a, 0xce, 0x86, 0xe9, 0xf8, 0xca, 0x9f, 0xa6, 0x0a, - 0x6e, 0xee, 0x79, 0x38, 0x9f, 0x9a, 0xfd, 0xb1, 0x14, 0x50, 0x3f, 0x35, 0x0c, 0x15, 0x65, 0xa9, - 0x63, 0xe6, 0x8e, 0x92, 0x6f, 0xfb, 0xac, 0x06, 0x13, 0x86, 0xe3, 0x08, 0x93, 0x19, 0xb9, 0x7f, - 0xcd, 0x01, 0xbf, 0x6a, 0x16, 0xaa, 0xf9, 0x85, 0x08, 0x4d, 0xc2, 0x26, 0x44, 0xa9, 0xc1, 0xea, - 0x68, 0xfa, 0x18, 0x3e, 0x96, 0xce, 0xcc, 0xf0, 0x11, 0xfd, 0x98, 0x64, 0x96, 0xf8, 0x36, 0x7a, - 0xf9, 0x14, 0xd6, 0x86, 0xf1, 0x5e, 0xd9, 0x1a, 0xcf, 0xb9, 0x0f, 0xc2, 0x4c, 0x72, 0xe5, 0x8e, - 0xb5, 0x0b, 0x7e, 0x73, 0x28, 0x46, 0xaa, 0x73, 0xd1, 0x1f, 0x41, 0xcf, 0xfb, 0xb9, 0xc4, 0x66, - 0xe1, 0x24, 0xc0, 0x3a, 0xad, 0x05, 0x39, 0xd9, 0x1d, 0x33, 0x74, 0x76, 0xa6, 0xb2, 0x83, 0x7e, - 0xb2, 0x45, 0xb8, 0xa4, 0xac, 0x8f, 0x92, 0x4f, 0xf0, 0x09, 0x18, 0xdb, 0xb5, 0x7c, 0x4b, 0x46, - 0x24, 0x52, 0x6e, 0xe8, 0x17, 0x79, 0x31, 0x96, 0xf5, 0xfa, 0x72, 0xec, 0xec, 0xaf, 0xbb, 0x1d, - 0xd7, 0x76, 0x5b, 0xbd, 0x85, 0xfb, 0x86, 0x47, 0xb0, 0xdb, 0x0d, 0x04, 0xb4, 0xa3, 0xde, 0xf7, - 0x2b, 0x70, 0x5d, 0x81, 0x96, 0x19, 0x5a, 0xe1, 0x38, 0xe0, 0xbe, 0x34, 0x26, 0xc5, 0x0b, 0xe1, - 0x7b, 0xfa, 0xdb, 0x1a, 0x5c, 0x21, 0x79, 0x57, 0x81, 0x60, 0xd1, 0x5f, 0x3e, 0xad, 0xab, 0x46, - 0x44, 0xac, 0xcd, 0xab, 0xc6, 0xf9, 0x23, 0x43, 0xbd, 0x58, 0x56, 0xcd, 0xd2, 0x20, 0xba, 0xd2, - 0x8c, 0xef, 0xdd, 0x2f, 0xa7, 0x26, 0xfa, 0x65, 0x0d, 0x2e, 0xda, 0x19, 0x47, 0x47, 0xf0, 0xd5, - 0x8d, 0x53, 0x38, 0x95, 0xfc, 0x5d, 0x3a, 0xab, 0x06, 0x67, 0x0e, 0x05, 0xfd, 0x6a, 0x6e, 0xcc, - 0x0f, 0xfe, 0x6c, 0xbc, 0x3e, 0xe0, 0x20, 0x4f, 0x2a, 0xfc, 0xc7, 0xa7, 0x35, 0x40, 0x66, 0x8a, - 0x2d, 0x16, 0x96, 0x3e, 0x2f, 0x9c, 0xb8, 0x84, 0xc2, 0x0d, 0x0b, 0xd2, 0xe5, 0x38, 0x63, 0x10, - 0xec, 0x3b, 0x07, 0x19, 0xc7, 0x57, 0x04, 0xf3, 0x1d, 0xf4, 0x3b, 0x67, 0x51, 0x06, 0xfe, 0x9d, - 0xb3, 0x6a, 0x70, 0xe6, 0x50, 0xf4, 0x4f, 0x8d, 0x71, 0x4d, 0x1a, 0x7b, 0xf9, 0xdd, 0x84, 0xd1, - 0x4d, 0xa6, 0x79, 0x15, 0xe7, 0xb6, 0xb0, 0x9a, 0x97, 0xeb, 0x6f, 0xb9, 0x20, 0xc7, 0xff, 0xc7, - 0x02, 0x32, 0x7a, 0x05, 0x86, 0x4c, 0xc7, 0x17, 0x07, 0xee, 0x03, 0x03, 0x28, 0x2c, 0x23, 0x77, - 0xab, 0xda, 0x6a, 0x03, 0x53, 0xa0, 0xc8, 0x81, 0xb2, 0x23, 0x94, 0x4f, 0x42, 0x40, 0x2e, 0x9c, - 0xb0, 0x35, 0x54, 0x62, 0x85, 0xaa, 0x33, 0x59, 0x82, 0x43, 0x1c, 0x14, 0x5f, 0xe2, 0xb5, 0xa5, - 0x30, 0xbe, 0x50, 0xfd, 0xda, 0x4f, 0xc3, 0xbd, 0xa6, 0x2a, 0x53, 0x47, 0x8e, 0xae, 0x4c, 0x9d, - 0xca, 0x7d, 0x7c, 0x22, 0x30, 0x1a, 0x18, 0x96, 0x13, 0x70, 0x65, 0x5a, 0x41, 0x43, 0x09, 0x3a, - 0xfe, 0x75, 0x0a, 0x25, 0xd2, 0x5a, 0xb1, 0x9f, 0x3e, 0x16, 0xc0, 0xe9, 0xc6, 0xda, 0x65, 0x69, - 0xd3, 0xc5, 0xc1, 0x2c, 0xbc, 0xb1, 0x78, 0xf2, 0x75, 0xbe, 0xb1, 0xf8, 0xff, 0x58, 0x40, 0x46, - 0xaf, 0x41, 0xd9, 0x97, 0xa6, 0x2d, 0xe5, 0x41, 0xb3, 0xf5, 0x0a, 0xbb, 0x16, 0xe1, 0x53, 0x25, - 0x0c, 0x5a, 0x42, 0xf8, 0x68, 0x13, 0xc6, 0x2c, 0xee, 0x05, 0x24, 0x42, 0x20, 0x7d, 0x60, 0x80, - 0x64, 0x75, 0x5c, 0xb0, 0x16, 0x3f, 0xb0, 0x04, 0xac, 0x7f, 0x09, 0xf8, 0x5b, 0x88, 0xb0, 0x1e, - 0xdc, 0x82, 0xb2, 0x04, 0x37, 0x88, 0x6f, 0x9f, 0x4c, 0x0f, 0xca, 0xa7, 0x16, 0x26, 0x0b, 0x0d, - 0x61, 0xa3, 0x6a, 0x96, 0x8f, 0x66, 0x94, 0x34, 0xe1, 0x68, 0xfe, 0x99, 0xaf, 0xb3, 0x7c, 0x7e, - 0x32, 0x9e, 0xc1, 0x50, 0xf1, 0xad, 0x15, 0xc6, 0x3a, 0x88, 0xe5, 0xf1, 0x93, 0xe1, 0x10, 0x14, - 0x24, 0x39, 0xd6, 0x95, 0xc3, 0x85, 0xac, 0x2b, 0x9f, 0x83, 0x73, 0xc2, 0x9a, 0xa5, 0xce, 0x52, - 0xe7, 0x07, 0x3d, 0xe1, 0x7e, 0xc2, 0xec, 0x9c, 0xaa, 0xf1, 0x2a, 0x9c, 0x6c, 0x8b, 0x7e, 0x5f, - 0x83, 0x72, 0x53, 0xb0, 0x1c, 0xe2, 0x5c, 0x2d, 0x0f, 0xf6, 0x60, 0x36, 0x2f, 0x39, 0x18, 0xce, - 0x4c, 0xbf, 0x28, 0x69, 0x84, 0x2c, 0x3e, 0x21, 0xa5, 0x41, 0x38, 0x6a, 0xf4, 0x47, 0x54, 0x5e, - 0xb0, 0x59, 0xca, 0x52, 0xe6, 0x8d, 0xce, 0xfd, 0x62, 0xee, 0x0d, 0x38, 0x8b, 0x85, 0x08, 0x22, - 0x9f, 0xc8, 0x87, 0x43, 0xa9, 0x20, 0xaa, 0x39, 0xa1, 0xb9, 0xa8, 0xc3, 0x47, 0xff, 0x44, 0x83, - 0xc7, 0xb8, 0x33, 0x52, 0x95, 0x72, 0x11, 0x2c, 0xf3, 0x3b, 0x89, 0x52, 0xcd, 0x47, 0xb6, 0xa0, - 0xe5, 0x63, 0xdb, 0x82, 0x3e, 0x7e, 0xb0, 0x5f, 0x79, 0xac, 0x7a, 0x04, 0xd8, 0xf8, 0x48, 0x23, - 0x40, 0x6f, 0xc0, 0x94, 0xad, 0xc6, 0xb5, 0x11, 0x04, 0xa6, 0xd0, 0x73, 0x4c, 0x2c, 0x40, 0x0e, - 0xd7, 0xbf, 0xc7, 0x8a, 0x70, 0x1c, 0xd5, 0xdc, 0x0e, 0x4c, 0xc5, 0x36, 0xda, 0xa9, 0x2a, 0x49, - 0x1c, 0x98, 0x49, 0xee, 0x87, 0x53, 0xb5, 0x8b, 0xba, 0x0b, 0xe3, 0xe1, 0x45, 0x85, 0x1e, 0x51, - 0x10, 0x45, 0x8c, 0xc4, 0x5d, 0xd2, 0xe3, 0x58, 0x2b, 0x31, 0x01, 0x8f, 0x2b, 0xe2, 0x5f, 0xa4, - 0x05, 0x02, 0xa0, 0xfe, 0x65, 0xf1, 0xca, 0xb2, 0x4e, 0xda, 0x1d, 0xdb, 0x08, 0xc8, 0xdb, 0xff, - 0x8d, 0x5f, 0xff, 0x6f, 0x1a, 0xbf, 0x6f, 0xf8, 0xb5, 0x8a, 0x0c, 0x98, 0x68, 0xf3, 0xe0, 0xcd, - 0x2c, 0x00, 0x83, 0x56, 0x3c, 0xf4, 0xc3, 0x4a, 0x04, 0x06, 0xab, 0x30, 0xd1, 0x7d, 0x18, 0x97, - 0xac, 0x8d, 0xd4, 0x48, 0xdc, 0x1a, 0x8c, 0x31, 0x08, 0xb9, 0xa8, 0xf0, 0xf9, 0x58, 0x96, 0xf8, - 0x38, 0xc2, 0xa5, 0x1b, 0x80, 0xd2, 0x7d, 0xa8, 0x14, 0x2c, 0xdd, 0x1d, 0xb4, 0x78, 0x44, 0xc4, - 0x94, 0xcb, 0xc3, 0xa1, 0x49, 0xca, 0xf5, 0xcf, 0x97, 0x20, 0x33, 0x61, 0x1e, 0xd2, 0x61, 0x94, - 0x7b, 0x20, 0xca, 0xfc, 0xe7, 0x94, 0x95, 0xe1, 0xee, 0x89, 0x58, 0xd4, 0xa0, 0x7b, 0x5c, 0x13, - 0xe2, 0x98, 0x2c, 0x12, 0x61, 0x44, 0x25, 0x54, 0x5f, 0xd7, 0xa5, 0xac, 0x06, 0x38, 0xbb, 0x1f, - 0xda, 0x05, 0xd4, 0x36, 0xf6, 0x92, 0xd0, 0x06, 0x48, 0x4d, 0xb5, 0x92, 0x82, 0x86, 0x33, 0x30, - 0xd0, 0x8b, 0xd4, 0x68, 0x36, 0x49, 0x27, 0x20, 0x26, 0x9f, 0xa2, 0x7c, 0xe4, 0x65, 0x17, 0xe9, - 0x42, 0xbc, 0x0a, 0x27, 0xdb, 0xea, 0xdf, 0x18, 0x86, 0x2b, 0xf1, 0x45, 0xa4, 0x27, 0x54, 0x3a, - 0x09, 0x3e, 0x2f, 0x7d, 0x20, 0xf8, 0x42, 0x3e, 0x91, 0xf4, 0x81, 0x98, 0xad, 0x7a, 0x84, 0x5d, - 0xc9, 0x86, 0xed, 0xcb, 0x4e, 0x31, 0x7f, 0x88, 0x6f, 0x83, 0xc7, 0x5f, 0x8e, 0x67, 0xe3, 0xd0, - 0xa9, 0x7a, 0x36, 0xbe, 0xa5, 0xc1, 0x5c, 0xbc, 0xf8, 0x96, 0xe5, 0x58, 0xfe, 0xb6, 0x88, 0xa7, - 0x77, 0x7c, 0x17, 0x0c, 0x96, 0xbe, 0x62, 0x39, 0x17, 0x22, 0xee, 0x83, 0x0d, 0x7d, 0x42, 0x83, - 0xab, 0x89, 0x75, 0x89, 0x45, 0xf7, 0x3b, 0xbe, 0x37, 0x06, 0xf3, 0xd1, 0x5e, 0xce, 0x07, 0x89, - 0xfb, 0xe1, 0xd3, 0xff, 0x65, 0x09, 0x46, 0x98, 0x8d, 0xc2, 0xdb, 0xc3, 0x28, 0x9d, 0x0d, 0x35, - 0xd7, 0x4e, 0xab, 0x95, 0xb0, 0xd3, 0x7a, 0xbe, 0x38, 0x8a, 0xfe, 0x86, 0x5a, 0x1f, 0x86, 0xcb, - 0xac, 0xd9, 0x82, 0xc9, 0xd4, 0x32, 0x3e, 0x31, 0x17, 0x4c, 0x93, 0x45, 0x88, 0x38, 0x5c, 0x17, - 0xfd, 0x08, 0x0c, 0x75, 0x3d, 0x3b, 0x19, 0x33, 0x65, 0x03, 0x2f, 0x63, 0x5a, 0xae, 0xbf, 0xa5, - 0xc1, 0x0c, 0x83, 0xad, 0x1c, 0x5f, 0xb4, 0x0b, 0x65, 0x4f, 0x1c, 0x61, 0xf1, 0x6d, 0x96, 0x0b, - 0x4f, 0x2d, 0x83, 0x2c, 0x88, 0x94, 0x9e, 0xe2, 0x17, 0x0e, 0x71, 0xe9, 0x5f, 0x1b, 0x85, 0xd9, - 0xbc, 0x4e, 0xe8, 0x93, 0x1a, 0x5c, 0x6e, 0x46, 0xdc, 0xdc, 0x42, 0x37, 0xd8, 0x76, 0x3d, 0x2b, - 0xb0, 0x84, 0xf1, 0x4e, 0x41, 0x31, 0xb7, 0xba, 0x10, 0x8e, 0x8a, 0x45, 0xa3, 0xab, 0x66, 0x62, - 0xc0, 0x39, 0x98, 0xd1, 0x9b, 0x00, 0x3b, 0x51, 0xf8, 0xdb, 0x52, 0xf1, 0x44, 0x1b, 0x6c, 0xda, - 0x4a, 0x88, 0x5c, 0x39, 0x28, 0xa6, 0xd9, 0x54, 0xca, 0x15, 0x74, 0x14, 0xb9, 0xef, 0x6f, 0xdf, - 0x25, 0xbd, 0x8e, 0x61, 0x49, 0x1b, 0x85, 0xe2, 0xc8, 0x1b, 0x8d, 0x3b, 0x02, 0x54, 0x1c, 0xb9, - 0x52, 0xae, 0xa0, 0x43, 0x1f, 0xd1, 0x60, 0xca, 0x55, 0xdd, 0xc9, 0x07, 0xb1, 0x80, 0xcd, 0xf4, - 0x4b, 0xe7, 0x2c, 0x74, 0xbc, 0x2a, 0x8e, 0x92, 0xee, 0x89, 0xf3, 0x7e, 0xf2, 0xca, 0x12, 0x44, - 0x6d, 0x65, 0xf0, 0x7c, 0xbc, 0xca, 0xfd, 0xc7, 0xc5, 0xf1, 0x74, 0x75, 0x1a, 0x3d, 0x1b, 0x14, - 0x09, 0x9a, 0xe6, 0x92, 0xd3, 0xf4, 0x7a, 0xcc, 0x33, 0x94, 0x0e, 0x6a, 0xb4, 0xf8, 0xa0, 0x96, - 0xd6, 0xab, 0xb5, 0x18, 0xb0, 0xf8, 0xa0, 0xd2, 0xd5, 0x69, 0xf4, 0xfa, 0x4f, 0x96, 0xe0, 0xa1, - 0x9c, 0x3d, 0xf6, 0xd7, 0xc6, 0xff, 0xff, 0x8b, 0x1a, 0x8c, 0xb3, 0x35, 0x78, 0x9b, 0x38, 0x11, - 0xb1, 0xb1, 0xe6, 0x58, 0x32, 0xfe, 0x81, 0x06, 0xe7, 0x53, 0x71, 0x50, 0x8f, 0xe4, 0x82, 0x72, - 0x66, 0x46, 0x76, 0xef, 0x8a, 0x62, 0x9e, 0x0f, 0x45, 0x0e, 0xcd, 0xc9, 0x78, 0xe7, 0xfa, 0x4b, - 0x30, 0x15, 0x33, 0x64, 0x0c, 0x63, 0x35, 0x69, 0x99, 0xb1, 0x9a, 0xd4, 0x50, 0x4c, 0xa5, 0x7e, - 0xa1, 0x98, 0xa2, 0x2d, 0x9f, 0xa6, 0x6c, 0x7f, 0x6d, 0xb6, 0xfc, 0xd7, 0xcf, 0x89, 0x2d, 0xcf, - 0x5e, 0x1c, 0x5e, 0x85, 0x51, 0x16, 0xf8, 0x49, 0xde, 0x98, 0x37, 0x0b, 0x07, 0x94, 0xf2, 0xb9, - 0x24, 0xc5, 0xff, 0xc7, 0x02, 0x2a, 0xaa, 0xc1, 0x4c, 0xd3, 0x76, 0xbb, 0xa6, 0x48, 0x51, 0xba, - 0x1a, 0x09, 0x6d, 0x61, 0x5c, 0xd0, 0x6a, 0xa2, 0x1e, 0xa7, 0x7a, 0x20, 0xcc, 0xdf, 0x2c, 0xf8, - 0x7d, 0x56, 0x28, 0x2e, 0x68, 0x6d, 0xb5, 0xc1, 0xb3, 0x5f, 0x84, 0x6f, 0x15, 0xaf, 0x03, 0x10, - 0xb9, 0x79, 0xa5, 0xef, 0xe7, 0x73, 0xc5, 0x22, 0x9e, 0x86, 0x47, 0x40, 0x32, 0x9f, 0x61, 0x91, - 0x8f, 0x15, 0x24, 0xc8, 0x83, 0x89, 0x6d, 0x6b, 0x93, 0x78, 0x0e, 0xe7, 0xa3, 0x46, 0x8a, 0xb3, - 0x88, 0x77, 0x22, 0x30, 0x5c, 0xc6, 0x57, 0x0a, 0xb0, 0x8a, 0x04, 0x79, 0x9c, 0x1d, 0xe1, 0xea, - 0xe1, 0x41, 0x92, 0xf5, 0x47, 0x7a, 0xe7, 0x68, 0x9e, 0x51, 0x19, 0x56, 0xb0, 0x20, 0x07, 0xc0, - 0x09, 0x23, 0xbe, 0x0d, 0xf2, 0xe2, 0x10, 0xc5, 0x8d, 0xe3, 0x8c, 0x47, 0xf4, 0x1b, 0x2b, 0x18, - 0xe8, 0xba, 0xb6, 0xa3, 0x10, 0x82, 0x42, 0x87, 0xf8, 0xfc, 0x80, 0x61, 0x1c, 0x85, 0xee, 0x24, - 0x2a, 0xc0, 0x2a, 0x12, 0x3a, 0xc7, 0x76, 0x18, 0xf8, 0x4f, 0xe8, 0x08, 0x0b, 0xcd, 0x31, 0x0a, - 0x1f, 0x28, 0x52, 0xa8, 0x85, 0xbf, 0xb1, 0x82, 0x01, 0xbd, 0xa6, 0x3c, 0x75, 0x41, 0x71, 0x0d, - 0xd4, 0x91, 0x9e, 0xb9, 0xde, 0x17, 0x29, 0x62, 0x26, 0xd8, 0x59, 0xbd, 0xaa, 0x28, 0x61, 0x58, - 0x40, 0x44, 0x4a, 0x3f, 0x52, 0x4a, 0x99, 0xc8, 0x84, 0x7a, 0xb2, 0xaf, 0x09, 0x75, 0x95, 0x72, - 0x68, 0x8a, 0x4b, 0x0f, 0x23, 0x0a, 0x53, 0xd1, 0x0b, 0x47, 0x23, 0x59, 0x89, 0xd3, 0xed, 0x39, - 0xd1, 0x27, 0x26, 0xeb, 0x3b, 0xad, 0x12, 0x7d, 0x5e, 0x86, 0xc3, 0x5a, 0xb4, 0x0b, 0x93, 0xbe, - 0x62, 0x8f, 0x2d, 0xf2, 0x5e, 0x0e, 0xf0, 0x36, 0x25, 0x6c, 0xb1, 0x59, 0x28, 0x2c, 0xb5, 0x04, - 0xc7, 0xf0, 0xa0, 0x37, 0x55, 0xe3, 0xc6, 0x99, 0xe2, 0xce, 0xb7, 0xd9, 0x81, 0x1e, 0x23, 0x0d, - 0x5b, 0x68, 0x57, 0xa7, 0xda, 0x1c, 0x76, 0xe3, 0x66, 0x7c, 0xe7, 0x4f, 0x24, 0xd8, 0xc0, 0xa1, - 0x66, 0x7e, 0xf4, 0xd3, 0x92, 0xbd, 0x8e, 0xeb, 0x77, 0x3d, 0xc2, 0x02, 0xd8, 0xb2, 0xcf, 0x83, - 0xa2, 0x4f, 0xbb, 0x94, 0xac, 0xc4, 0xe9, 0xf6, 0xe8, 0x63, 0x1a, 0xcc, 0xf0, 0xb4, 0xa1, 0xf4, - 0xea, 0x72, 0x1d, 0xe2, 0x04, 0x3e, 0xcb, 0x8b, 0x59, 0xd0, 0x3f, 0xb6, 0x91, 0x80, 0xc5, 0x73, - 0x2d, 0x25, 0x4b, 0x71, 0x0a, 0x27, 0xdd, 0x39, 0x6a, 0xb8, 0x02, 0x96, 0x5e, 0xb3, 0xe0, 0xce, - 0x51, 0x43, 0x21, 0xf0, 0x9d, 0xa3, 0x96, 0xe0, 0x18, 0x1e, 0xf4, 0x0c, 0x4c, 0xf9, 0x32, 0x07, - 0x0e, 0x5b, 0xc1, 0x4b, 0x51, 0x3c, 0xb1, 0x86, 0x5a, 0x81, 0xe3, 0xed, 0xf4, 0x7f, 0xa7, 0x01, - 0x84, 0xda, 0x83, 0xb3, 0xd0, 0x89, 0x9b, 0x31, 0x85, 0xca, 0xe2, 0x40, 0xda, 0x0e, 0x92, 0xab, - 0x19, 0xff, 0xaa, 0x06, 0xd3, 0x51, 0xb3, 0x33, 0x60, 0xd5, 0x9b, 0x71, 0x56, 0xfd, 0x83, 0x83, - 0xcd, 0x2b, 0x87, 0x5f, 0xff, 0xbf, 0x25, 0x75, 0x56, 0x8c, 0x1b, 0xdb, 0x8d, 0xbd, 0x31, 0x53, - 0xd4, 0x77, 0x06, 0x79, 0x63, 0x56, 0x5d, 0xa8, 0xa3, 0xf9, 0x66, 0xbc, 0x39, 0xff, 0x9d, 0x18, - 0x2f, 0x34, 0x40, 0xa0, 0x80, 0x90, 0xf1, 0x91, 0xa8, 0xf9, 0x02, 0x1c, 0xc6, 0x18, 0xbd, 0xae, - 0x92, 0x4a, 0xfe, 0x5a, 0xfd, 0xa1, 0x62, 0xde, 0xe9, 0xca, 0x84, 0xfb, 0x12, 0x48, 0xfd, 0x8b, - 0x53, 0x30, 0xa1, 0x28, 0xda, 0x12, 0x2f, 0xe6, 0xda, 0x59, 0xbc, 0x98, 0x07, 0x30, 0xd1, 0x0c, - 0x03, 0xc2, 0xcb, 0x65, 0x1f, 0x10, 0x67, 0x48, 0xa2, 0xa3, 0x50, 0xf3, 0x3e, 0x56, 0xd1, 0x50, - 0x46, 0x22, 0xdc, 0x63, 0x43, 0x27, 0x60, 0xc7, 0xd0, 0x6f, 0x5f, 0xbd, 0x17, 0x40, 0xf2, 0xa2, - 0xc4, 0x14, 0x11, 0x3d, 0x43, 0x23, 0xf4, 0xba, 0x7f, 0x27, 0xac, 0xc3, 0x4a, 0xbb, 0xf4, 0x0b, - 0xec, 0xc8, 0x99, 0xbd, 0xc0, 0xd2, 0x6d, 0x60, 0xcb, 0xac, 0x41, 0x03, 0xd9, 0xe4, 0x84, 0xb9, - 0x87, 0xa2, 0x6d, 0x10, 0x16, 0xf9, 0x58, 0x41, 0x92, 0x63, 0x38, 0x31, 0x56, 0xc8, 0x70, 0xa2, - 0x0b, 0x17, 0x3c, 0x12, 0x78, 0xbd, 0x6a, 0xaf, 0xc9, 0x92, 0x69, 0x79, 0x01, 0x93, 0x28, 0xcb, - 0xc5, 0x22, 0x4c, 0xe1, 0x34, 0x28, 0x9c, 0x05, 0x3f, 0xc6, 0x8c, 0x8d, 0xf7, 0x65, 0xc6, 0xde, - 0x07, 0x13, 0x01, 0x69, 0x6e, 0x3b, 0x56, 0xd3, 0xb0, 0xeb, 0x35, 0x11, 0xee, 0x32, 0xe2, 0x2b, - 0xa2, 0x2a, 0xac, 0xb6, 0x43, 0x8b, 0x30, 0xd4, 0xb5, 0x4c, 0xc1, 0x8d, 0x7e, 0x4f, 0xa8, 0xb2, - 0xae, 0xd7, 0x1e, 0xec, 0x57, 0xde, 0x19, 0x59, 0x22, 0x84, 0xb3, 0xba, 0xd1, 0xd9, 0x69, 0xdd, - 0x08, 0x7a, 0x1d, 0xe2, 0xcf, 0x6f, 0xd4, 0x6b, 0x98, 0x76, 0xce, 0x32, 0x2a, 0x99, 0x3c, 0x86, - 0x51, 0xc9, 0xa7, 0x35, 0xb8, 0x60, 0x24, 0xb5, 0xed, 0xc4, 0x9f, 0x9d, 0x2a, 0x4e, 0x2d, 0xb3, - 0x35, 0xf8, 0x8b, 0x57, 0xc5, 0xfc, 0x2e, 0x2c, 0xa4, 0xd1, 0xe1, 0xac, 0x31, 0x20, 0x0f, 0x50, - 0xdb, 0x6a, 0x85, 0x09, 0x7c, 0xc4, 0x57, 0x9f, 0x2e, 0xa6, 0x47, 0x58, 0x49, 0x41, 0xc2, 0x19, - 0xd0, 0xd1, 0x7d, 0x98, 0x68, 0x46, 0x3a, 0x79, 0xc1, 0x55, 0xd7, 0x4e, 0xe2, 0x51, 0x80, 0x4b, - 0x5e, 0xaa, 0xc2, 0x5f, 0xc5, 0x14, 0xbe, 0xa6, 0x29, 0x22, 0xaf, 0x78, 0x51, 0x62, 0xb3, 0x9e, - 0x29, 0xfe, 0x9a, 0x96, 0x0d, 0x11, 0xf7, 0xc1, 0xc6, 0xe2, 0x3a, 0xd9, 0xf1, 0x3c, 0x5b, 0x2c, - 0xc5, 0x7c, 0x41, 0x5f, 0xf0, 0x44, 0xca, 0x2e, 0xbe, 0x35, 0x13, 0x85, 0x38, 0x89, 0x50, 0xff, - 0x8a, 0x26, 0x14, 0x66, 0x67, 0x68, 0x0d, 0x71, 0xda, 0x4f, 0x69, 0xfa, 0x9f, 0x6b, 0x90, 0xe2, - 0xd1, 0xd1, 0x26, 0x8c, 0x51, 0x10, 0xb5, 0xd5, 0x86, 0x98, 0xd6, 0x07, 0x8a, 0x5d, 0x97, 0x0c, - 0x04, 0xd7, 0x3e, 0x8a, 0x1f, 0x58, 0x02, 0xa6, 0x5c, 0xbf, 0xa3, 0x44, 0xdc, 0x16, 0x33, 0x2c, - 0xc4, 0x8f, 0xa8, 0x91, 0xbb, 0x39, 0xd7, 0xaf, 0x96, 0xe0, 0x18, 0x1e, 0x7d, 0x19, 0x20, 0x92, - 0xab, 0x06, 0x36, 0x90, 0xf9, 0xd6, 0x08, 0x5c, 0x1a, 0xd4, 0xd9, 0x80, 0xa5, 0x77, 0x22, 0xbb, - 0x56, 0x33, 0x58, 0xd8, 0x0a, 0x88, 0x77, 0xef, 0xde, 0xca, 0xfa, 0xb6, 0x47, 0xfc, 0x6d, 0xd7, - 0x36, 0x0b, 0xe6, 0x97, 0x62, 0x0f, 0x6a, 0x4b, 0x99, 0x10, 0x71, 0x0e, 0x26, 0x26, 0x53, 0x8a, - 0x74, 0xd3, 0x98, 0x32, 0x93, 0x5d, 0xcf, 0x0f, 0x44, 0x54, 0x1b, 0x2e, 0x53, 0x26, 0x2b, 0x71, - 0xba, 0x7d, 0x12, 0xc8, 0xb2, 0xd5, 0xb6, 0x78, 0x06, 0x1f, 0x2d, 0x0d, 0x84, 0x55, 0xe2, 0x74, - 0x7b, 0x15, 0x08, 0xff, 0x52, 0xf4, 0xb4, 0x8f, 0xa4, 0x81, 0x84, 0x95, 0x38, 0xdd, 0x1e, 0x99, - 0xf0, 0xb0, 0x47, 0x9a, 0x6e, 0xbb, 0x4d, 0x1c, 0x93, 0x67, 0x4e, 0x34, 0xbc, 0x96, 0xe5, 0xdc, - 0xf2, 0x0c, 0xd6, 0x90, 0xa9, 0xe8, 0x34, 0x96, 0x87, 0xe2, 0x61, 0xdc, 0xa7, 0x1d, 0xee, 0x0b, - 0x05, 0xb5, 0xe1, 0x5c, 0x97, 0xe5, 0xfc, 0xf0, 0xea, 0x4e, 0x40, 0xbc, 0x5d, 0xc3, 0x16, 0x7a, - 0xb8, 0x42, 0x29, 0xa3, 0x37, 0xe2, 0xa0, 0x70, 0x12, 0x36, 0xea, 0x51, 0xbe, 0x43, 0x0c, 0x47, - 0x41, 0x59, 0x2e, 0x9e, 0x00, 0x0d, 0xa7, 0xc1, 0xe1, 0x2c, 0x1c, 0xfa, 0xa7, 0x35, 0x10, 0x96, - 0xc8, 0xe8, 0xe1, 0xd8, 0x5b, 0x47, 0x39, 0xf1, 0xce, 0x21, 0x33, 0x4f, 0x94, 0x32, 0x33, 0x4f, - 0xbc, 0x5b, 0x09, 0x97, 0x34, 0x1e, 0xd1, 0x3e, 0x0e, 0x59, 0xc9, 0x9a, 0xf3, 0x24, 0x8c, 0x13, - 0xfe, 0x8c, 0x16, 0x72, 0xb4, 0xcc, 0xba, 0x7b, 0x49, 0x16, 0xe2, 0xa8, 0x5e, 0xff, 0x63, 0x0d, - 0x04, 0x04, 0x96, 0xe3, 0xe9, 0x48, 0xb9, 0x7e, 0x0e, 0x35, 0x6d, 0x52, 0x72, 0x14, 0x0d, 0xe5, - 0xe6, 0x28, 0x3a, 0xa5, 0xd4, 0x3d, 0xbf, 0xad, 0xc1, 0xb9, 0x78, 0xfc, 0x2a, 0x1f, 0xbd, 0x0b, - 0xc6, 0x44, 0x84, 0x4b, 0x11, 0xa2, 0x8e, 0x75, 0x15, 0x21, 0x26, 0xb0, 0xac, 0x8b, 0xab, 0xc3, - 0x06, 0x10, 0x31, 0xb3, 0xc3, 0x68, 0x1d, 0x22, 0xed, 0x7d, 0x74, 0x06, 0x46, 0x79, 0x78, 0x44, - 0x4a, 0xd3, 0x32, 0xdc, 0x36, 0xef, 0x16, 0x8f, 0xc2, 0x58, 0xc4, 0xd7, 0x4e, 0xcd, 0x44, 0x50, - 0xea, 0x9b, 0x89, 0x00, 0xf3, 0x94, 0x68, 0x03, 0x3c, 0x7d, 0x54, 0x71, 0x5d, 0x64, 0x42, 0x97, - 0xe9, 0xd0, 0x82, 0xd8, 0x9b, 0xc0, 0x70, 0x71, 0xce, 0x8d, 0x2f, 0x80, 0xf2, 0x32, 0x30, 0xdd, - 0xf7, 0x55, 0x40, 0xc6, 0x9f, 0x1b, 0x29, 0x6e, 0x6a, 0x28, 0x96, 0xfc, 0x08, 0xf1, 0xe7, 0xc2, - 0x83, 0x34, 0x9a, 0x7b, 0x90, 0xb6, 0x60, 0x4c, 0x1c, 0x05, 0x41, 0x1c, 0x3f, 0x30, 0x40, 0x6e, - 0x31, 0x25, 0x64, 0x32, 0x2f, 0xc0, 0x12, 0x38, 0xbd, 0x71, 0xdb, 0xc6, 0x9e, 0xd5, 0xee, 0xb6, - 0x19, 0x45, 0x1c, 0x51, 0x9b, 0xb2, 0x62, 0x2c, 0xeb, 0x59, 0x53, 0x6e, 0xa1, 0xc9, 0x04, 0x29, - 0xb5, 0x29, 0x2f, 0xc6, 0xb2, 0x1e, 0xbd, 0x02, 0xe5, 0xb6, 0xb1, 0xd7, 0xe8, 0x7a, 0x2d, 0x22, - 0x5e, 0x04, 0xf2, 0x79, 0xbc, 0x6e, 0x60, 0xd9, 0xf3, 0x54, 0xfc, 0x0f, 0xbc, 0xf9, 0xba, 0x13, - 0xdc, 0xf3, 0x1a, 0x81, 0x17, 0x26, 0x18, 0x5a, 0x11, 0x50, 0x70, 0x08, 0x0f, 0xd9, 0x30, 0xdd, - 0x36, 0xf6, 0x36, 0x1c, 0x83, 0x87, 0x16, 0xb4, 0xf9, 0x43, 0x40, 0x11, 0x0c, 0xec, 0x59, 0x78, - 0x25, 0x06, 0x0b, 0x27, 0x60, 0x67, 0xbc, 0x40, 0x4f, 0x9e, 0xd6, 0x0b, 0xf4, 0x42, 0xe8, 0x6f, - 0xc3, 0xe5, 0xb6, 0x2b, 0x99, 0x9e, 0xed, 0x7d, 0x7d, 0x69, 0x5e, 0x0d, 0x7d, 0x69, 0xa6, 0x8b, - 0x3f, 0x99, 0xf6, 0xf1, 0xa3, 0xe9, 0xc2, 0x04, 0xe5, 0xb0, 0x79, 0x29, 0x15, 0xac, 0x0a, 0xab, - 0x20, 0x6b, 0x21, 0x18, 0x25, 0x81, 0x6d, 0x04, 0x1a, 0xab, 0x78, 0xd0, 0x3d, 0x9e, 0x90, 0xde, - 0x26, 0x41, 0xd4, 0x84, 0x09, 0xf4, 0x33, 0xec, 0xfc, 0x84, 0xf9, 0xe3, 0x53, 0x0d, 0x70, 0x76, - 0xbf, 0x28, 0x52, 0xce, 0xf9, 0xec, 0x48, 0x39, 0xe8, 0xe7, 0xb2, 0xf4, 0xfc, 0x88, 0xad, 0xe9, - 0x0f, 0x14, 0xa7, 0x0d, 0x85, 0xb5, 0xfd, 0xff, 0x4a, 0x83, 0xd9, 0x76, 0x4e, 0xa6, 0x57, 0xf1, - 0xfc, 0xb0, 0x3e, 0x00, 0x7d, 0xc8, 0xcd, 0x1e, 0xbb, 0xf8, 0xd8, 0xc1, 0x7e, 0xe5, 0xd0, 0x1c, - 0xb3, 0x38, 0x77, 0x6c, 0xc8, 0x83, 0x31, 0xbf, 0xe7, 0x37, 0x03, 0xdb, 0x9f, 0xbd, 0x58, 0x3c, - 0xa1, 0xa8, 0xa0, 0xac, 0x0d, 0x0e, 0x89, 0x93, 0xd6, 0x28, 0x50, 0x3f, 0x2f, 0xc5, 0x12, 0xd1, - 0xa0, 0x7e, 0xda, 0x03, 0x04, 0x07, 0x9d, 0xbb, 0x09, 0x93, 0xea, 0x20, 0x8f, 0xe5, 0x1e, 0xfe, - 0x2b, 0x1a, 0xcc, 0x24, 0x2f, 0x2d, 0x35, 0xe7, 0xbf, 0x76, 0xba, 0x39, 0xff, 0x15, 0xfb, 0x97, - 0x52, 0x1f, 0xfb, 0x97, 0xe7, 0xe0, 0x72, 0xf6, 0x5e, 0xa6, 0x1c, 0xa4, 0x61, 0xdb, 0xee, 0x7d, - 0x21, 0xb9, 0x45, 0x39, 0xbc, 0x68, 0x21, 0xe6, 0x75, 0xfa, 0x8f, 0x41, 0x32, 0x14, 0x34, 0x7a, - 0x0d, 0xc6, 0x7d, 0x7f, 0x9b, 0x47, 0xf9, 0x14, 0x93, 0x2c, 0x26, 0xb2, 0xcb, 0x50, 0xa1, 0xc2, - 0xa5, 0x51, 0xfe, 0xc4, 0x11, 0xf8, 0xc5, 0x97, 0xbf, 0xf0, 0x8d, 0x6b, 0xef, 0xf8, 0xf2, 0x37, - 0xae, 0xbd, 0xe3, 0x6b, 0xdf, 0xb8, 0xf6, 0x8e, 0x9f, 0x38, 0xb8, 0xa6, 0x7d, 0xe1, 0xe0, 0x9a, - 0xf6, 0xe5, 0x83, 0x6b, 0xda, 0xd7, 0x0e, 0xae, 0x69, 0xff, 0xf9, 0xe0, 0x9a, 0xf6, 0xf3, 0xff, - 0xe5, 0xda, 0x3b, 0x5e, 0x79, 0x3a, 0xc2, 0x7e, 0x43, 0x22, 0x8d, 0xfe, 0xe9, 0xec, 0xb4, 0x6e, - 0x50, 0xec, 0xd2, 0xb5, 0x88, 0x61, 0xff, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x81, 0x58, 0xdc, - 0xab, 0x3f, 0xeb, 0x00, 0x00, + // 11965 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x6c, 0x25, 0x59, + 0x56, 0x18, 0xbe, 0xf5, 0xfc, 0x7d, 0xfc, 0xd1, 0xee, 0xdb, 0x1f, 0xe3, 0x76, 0xcf, 0xf4, 0xeb, + 0xad, 0x99, 0xdd, 0xdf, 0x0c, 0xbb, 0xb8, 0x99, 0x61, 0x97, 0xdd, 0xe9, 0x65, 0x76, 0xd6, 0x7e, + 0xcf, 0xdd, 0xfd, 0x68, 0xdb, 0xed, 0xb9, 0xcf, 0x9e, 0x19, 0x06, 0x7e, 0x03, 0xe5, 0xaa, 0xeb, + 0xe7, 0x1a, 0xd7, 0xab, 0x7a, 0x53, 0x55, 0xcf, 0xed, 0x37, 0x03, 0x81, 0xdd, 0xb0, 0x84, 0x1d, + 0xd8, 0x08, 0x21, 0x91, 0xd5, 0x2e, 0x24, 0x2c, 0x42, 0xe4, 0x8b, 0x88, 0x20, 0x22, 0x22, 0x01, + 0x8a, 0x84, 0x90, 0x12, 0x76, 0x11, 0xa0, 0x15, 0x24, 0xca, 0xa2, 0x04, 0x93, 0x75, 0x08, 0x44, + 0x4a, 0x84, 0x22, 0xa1, 0x28, 0x4a, 0x07, 0x91, 0xe8, 0x7e, 0x55, 0xdd, 0xfa, 0x7a, 0xb6, 0xeb, + 0xd9, 0xde, 0x1d, 0xc1, 0x5f, 0xf6, 0xbb, 0xe7, 0xde, 0x73, 0xee, 0xbd, 0x75, 0xef, 0xb9, 0xe7, + 0x9e, 0x7b, 0x3e, 0x60, 0xa9, 0x65, 0x87, 0x3b, 0xdd, 0xad, 0x05, 0xd3, 0x6b, 0xdf, 0x6a, 0x19, + 0xbe, 0x45, 0x5c, 0xe2, 0xc7, 0xff, 0x74, 0x76, 0x5b, 0xb7, 0x8c, 0x8e, 0x1d, 0xdc, 0x32, 0x3d, + 0x9f, 0xdc, 0xda, 0x7b, 0x76, 0x8b, 0x84, 0xc6, 0xb3, 0xb7, 0x5a, 0x14, 0x66, 0x84, 0xc4, 0x5a, + 0xe8, 0xf8, 0x5e, 0xe8, 0xa1, 0xe7, 0x62, 0x1c, 0x0b, 0xb2, 0x69, 0xfc, 0x4f, 0x67, 0xb7, 0xb5, + 0x40, 0x71, 0x2c, 0x50, 0x1c, 0x0b, 0x02, 0xc7, 0xfc, 0x37, 0xab, 0x74, 0xbd, 0x96, 0x77, 0x8b, + 0xa1, 0xda, 0xea, 0x6e, 0xb3, 0x5f, 0xec, 0x07, 0xfb, 0x8f, 0x93, 0x98, 0x7f, 0x66, 0xf7, 0xa3, + 0xc1, 0x82, 0xed, 0xd1, 0xce, 0xdc, 0x32, 0xba, 0xa1, 0x17, 0x98, 0x86, 0x63, 0xbb, 0xad, 0x5b, + 0x7b, 0x99, 0xde, 0xcc, 0xeb, 0x4a, 0x55, 0xd1, 0xed, 0xbe, 0x75, 0xfc, 0x2d, 0xc3, 0xcc, 0xab, + 0xf3, 0xa1, 0xb8, 0x4e, 0xdb, 0x30, 0x77, 0x6c, 0x97, 0xf8, 0x3d, 0x39, 0x21, 0xb7, 0x7c, 0x12, + 0x78, 0x5d, 0xdf, 0x24, 0x27, 0x6a, 0x15, 0xdc, 0x6a, 0x93, 0xd0, 0xc8, 0xa3, 0x75, 0xab, 0xa8, + 0x95, 0xdf, 0x75, 0x43, 0xbb, 0x9d, 0x25, 0xf3, 0x6d, 0x47, 0x35, 0x08, 0xcc, 0x1d, 0xd2, 0x36, + 0x32, 0xed, 0xbe, 0xb5, 0xa8, 0x5d, 0x37, 0xb4, 0x9d, 0x5b, 0xb6, 0x1b, 0x06, 0xa1, 0x9f, 0x6e, + 0xa4, 0xbf, 0xa3, 0xc1, 0xec, 0xe2, 0x7a, 0xa3, 0x49, 0xfc, 0x3d, 0xe2, 0xaf, 0x78, 0xad, 0x96, + 0xed, 0xb6, 0xd0, 0x07, 0x60, 0x62, 0x8f, 0xf8, 0x5b, 0x5e, 0x60, 0x87, 0xbd, 0x39, 0xed, 0xa6, + 0xf6, 0xf4, 0xc8, 0xd2, 0xf4, 0xe1, 0x41, 0x75, 0xe2, 0x65, 0x59, 0x88, 0x63, 0x38, 0x6a, 0xc0, + 0xa5, 0x9d, 0x30, 0xec, 0x2c, 0x9a, 0x26, 0x09, 0x82, 0xa8, 0xc6, 0x5c, 0x85, 0x35, 0x7b, 0xec, + 0xf0, 0xa0, 0x7a, 0xe9, 0xde, 0xc6, 0xc6, 0x7a, 0x0a, 0x8c, 0xf3, 0xda, 0xe8, 0xbf, 0xac, 0xc1, + 0xc5, 0xa8, 0x33, 0x98, 0xbc, 0xd9, 0x25, 0x41, 0x18, 0x20, 0x0c, 0x57, 0xdb, 0xc6, 0xfe, 0x9a, + 0xe7, 0xae, 0x76, 0x43, 0x23, 0xb4, 0xdd, 0x56, 0xc3, 0xdd, 0x76, 0xec, 0xd6, 0x4e, 0x28, 0xba, + 0x36, 0x7f, 0x78, 0x50, 0xbd, 0xba, 0x9a, 0x5b, 0x03, 0x17, 0xb4, 0xa4, 0x9d, 0x6e, 0x1b, 0xfb, + 0x19, 0x84, 0x4a, 0xa7, 0x57, 0xb3, 0x60, 0x9c, 0xd7, 0x46, 0x7f, 0x0e, 0x46, 0x16, 0x2d, 0xcb, + 0x73, 0xd1, 0x33, 0x30, 0x46, 0x5c, 0x63, 0xcb, 0x21, 0x16, 0xeb, 0xd8, 0xf8, 0xd2, 0x85, 0x2f, + 0x1d, 0x54, 0xdf, 0x73, 0x78, 0x50, 0x1d, 0x5b, 0xe6, 0xc5, 0x58, 0xc2, 0xf5, 0x9f, 0xac, 0xc0, + 0x28, 0x6b, 0x14, 0xa0, 0x9f, 0xd0, 0xe0, 0xd2, 0x6e, 0x77, 0x8b, 0xf8, 0x2e, 0x09, 0x49, 0x50, + 0x37, 0x82, 0x9d, 0x2d, 0xcf, 0xf0, 0x39, 0x8a, 0xc9, 0xe7, 0xee, 0x2e, 0x9c, 0x7c, 0xff, 0x2d, + 0xdc, 0xcf, 0xa2, 0xe3, 0x63, 0xca, 0x01, 0xe0, 0x3c, 0xe2, 0x68, 0x0f, 0xa6, 0xdc, 0x96, 0xed, + 0xee, 0x37, 0xdc, 0x96, 0x4f, 0x82, 0x80, 0xcd, 0xcb, 0xe4, 0x73, 0x9f, 0x28, 0xd3, 0x99, 0x35, + 0x05, 0xcf, 0xd2, 0xec, 0xe1, 0x41, 0x75, 0x4a, 0x2d, 0xc1, 0x09, 0x3a, 0xfa, 0x5f, 0x69, 0x70, + 0x61, 0xd1, 0x6a, 0xdb, 0x41, 0x60, 0x7b, 0xee, 0xba, 0xd3, 0x6d, 0xd9, 0x2e, 0xba, 0x09, 0xc3, + 0xae, 0xd1, 0x26, 0x6c, 0x42, 0x26, 0x96, 0xa6, 0xc4, 0x9c, 0x0e, 0xaf, 0x19, 0x6d, 0x82, 0x19, + 0x04, 0xbd, 0x04, 0xa3, 0xa6, 0xe7, 0x6e, 0xdb, 0x2d, 0xd1, 0xcf, 0x6f, 0x5e, 0xe0, 0x3b, 0x61, + 0x41, 0xdd, 0x09, 0xac, 0x7b, 0x62, 0x07, 0x2d, 0x60, 0xe3, 0xe1, 0xf2, 0x7e, 0x48, 0x5c, 0x4a, + 0x66, 0x09, 0x0e, 0x0f, 0xaa, 0xa3, 0x35, 0x86, 0x00, 0x0b, 0x44, 0xe8, 0x69, 0x18, 0xb7, 0xec, + 0x80, 0x7f, 0xcc, 0x21, 0xf6, 0x31, 0xa7, 0x0e, 0x0f, 0xaa, 0xe3, 0x75, 0x51, 0x86, 0x23, 0x28, + 0x5a, 0x81, 0xcb, 0x74, 0x06, 0x79, 0xbb, 0x26, 0x31, 0x7d, 0x12, 0xd2, 0xae, 0xcd, 0x0d, 0xb3, + 0xee, 0xce, 0x1d, 0x1e, 0x54, 0x2f, 0xdf, 0xcf, 0x81, 0xe3, 0xdc, 0x56, 0xfa, 0x1d, 0x18, 0x5f, + 0x74, 0x88, 0x4f, 0x17, 0x18, 0xba, 0x0d, 0x33, 0xa4, 0x6d, 0xd8, 0x0e, 0x26, 0x26, 0xb1, 0xf7, + 0x88, 0x1f, 0xcc, 0x69, 0x37, 0x87, 0x9e, 0x9e, 0x58, 0x42, 0x87, 0x07, 0xd5, 0x99, 0xe5, 0x04, + 0x04, 0xa7, 0x6a, 0xea, 0x9f, 0xd4, 0x60, 0x72, 0xb1, 0x6b, 0xd9, 0x21, 0x1f, 0x17, 0xf2, 0x61, + 0xd2, 0xa0, 0x3f, 0xd7, 0x3d, 0xc7, 0x36, 0x7b, 0x62, 0x71, 0xbd, 0x58, 0xe6, 0x7b, 0x2e, 0xc6, + 0x68, 0x96, 0x2e, 0x1c, 0x1e, 0x54, 0x27, 0x95, 0x02, 0xac, 0x12, 0xd1, 0x77, 0x40, 0x85, 0xa1, + 0xef, 0x84, 0x29, 0x3e, 0xdc, 0x55, 0xa3, 0x83, 0xc9, 0xb6, 0xe8, 0xc3, 0x93, 0xca, 0xb7, 0x92, + 0x84, 0x16, 0x1e, 0x6c, 0xbd, 0x41, 0xcc, 0x10, 0x93, 0x6d, 0xe2, 0x13, 0xd7, 0x24, 0x7c, 0xd9, + 0xd4, 0x94, 0xc6, 0x38, 0x81, 0x4a, 0xff, 0x63, 0xca, 0xc4, 0xf6, 0x0c, 0xdb, 0x31, 0xb6, 0x6c, + 0xc7, 0x0e, 0x7b, 0xaf, 0x79, 0x2e, 0x39, 0xc6, 0xba, 0xd9, 0x84, 0xc7, 0xba, 0xae, 0xc1, 0xdb, + 0x39, 0x64, 0x95, 0xaf, 0x94, 0x8d, 0x5e, 0x87, 0xd0, 0x05, 0x4f, 0x67, 0xfa, 0xfa, 0xe1, 0x41, + 0xf5, 0xb1, 0xcd, 0xfc, 0x2a, 0xb8, 0xa8, 0x2d, 0xe5, 0x57, 0x0a, 0xe8, 0x65, 0xcf, 0xe9, 0xb6, + 0x05, 0xd6, 0x21, 0x86, 0x95, 0xf1, 0xab, 0xcd, 0xdc, 0x1a, 0xb8, 0xa0, 0xa5, 0xfe, 0xa5, 0x0a, + 0x4c, 0x2d, 0x19, 0xe6, 0x6e, 0xb7, 0xb3, 0xd4, 0x35, 0x77, 0x49, 0x88, 0xbe, 0x17, 0xc6, 0xe9, + 0x81, 0x63, 0x19, 0xa1, 0x21, 0x66, 0xf2, 0x5b, 0x0a, 0x57, 0x3d, 0xfb, 0x88, 0xb4, 0x76, 0x3c, + 0xb7, 0xab, 0x24, 0x34, 0x96, 0x90, 0x98, 0x13, 0x88, 0xcb, 0x70, 0x84, 0x15, 0x6d, 0xc3, 0x70, + 0xd0, 0x21, 0xa6, 0xd8, 0x53, 0xf5, 0x32, 0x6b, 0x45, 0xed, 0x71, 0xb3, 0x43, 0xcc, 0xf8, 0x2b, + 0xd0, 0x5f, 0x98, 0xe1, 0x47, 0x2e, 0x8c, 0x06, 0xa1, 0x11, 0x76, 0x03, 0xb6, 0xd1, 0x26, 0x9f, + 0xbb, 0x33, 0x30, 0x25, 0x86, 0x6d, 0x69, 0x46, 0xd0, 0x1a, 0xe5, 0xbf, 0xb1, 0xa0, 0xa2, 0xff, + 0x7b, 0x0d, 0x66, 0xd5, 0xea, 0x2b, 0x76, 0x10, 0xa2, 0xef, 0xce, 0x4c, 0xe7, 0xc2, 0xf1, 0xa6, + 0x93, 0xb6, 0x66, 0x93, 0x39, 0x2b, 0xc8, 0x8d, 0xcb, 0x12, 0x65, 0x2a, 0x09, 0x8c, 0xd8, 0x21, + 0x69, 0xf3, 0x65, 0x55, 0x92, 0x8f, 0xaa, 0x5d, 0x5e, 0x9a, 0x16, 0xc4, 0x46, 0x1a, 0x14, 0x2d, + 0xe6, 0xd8, 0xf5, 0xef, 0x85, 0xcb, 0x6a, 0xad, 0x75, 0xdf, 0xdb, 0xb3, 0x2d, 0xe2, 0xd3, 0x9d, + 0x10, 0xf6, 0x3a, 0x99, 0x9d, 0x40, 0x57, 0x16, 0x66, 0x10, 0xf4, 0x7e, 0x18, 0xf5, 0x49, 0xcb, + 0xf6, 0x5c, 0xf6, 0xb5, 0x27, 0xe2, 0xb9, 0xc3, 0xac, 0x14, 0x0b, 0xa8, 0xfe, 0x3f, 0x2b, 0xc9, + 0xb9, 0xa3, 0x9f, 0x11, 0xed, 0xc1, 0x78, 0x47, 0x90, 0x12, 0x73, 0x77, 0x6f, 0xd0, 0x01, 0xca, + 0xae, 0xc7, 0xb3, 0x2a, 0x4b, 0x70, 0x44, 0x0b, 0xd9, 0x30, 0x23, 0xff, 0xaf, 0x0d, 0xc0, 0xfe, + 0x19, 0x3b, 0x5d, 0x4f, 0x20, 0xc2, 0x29, 0xc4, 0x68, 0x03, 0x26, 0x02, 0xc6, 0xa4, 0x29, 0xe3, + 0x1a, 0x2a, 0x66, 0x5c, 0x4d, 0x59, 0x49, 0x30, 0xae, 0x8b, 0xa2, 0xfb, 0x13, 0x11, 0x00, 0xc7, + 0x88, 0xe8, 0x21, 0x13, 0x10, 0x62, 0x29, 0xc7, 0x05, 0x3b, 0x64, 0x9a, 0xa2, 0x0c, 0x47, 0x50, + 0xfd, 0x8b, 0xc3, 0x80, 0xb2, 0x4b, 0x5c, 0x9d, 0x01, 0x5e, 0x22, 0xe6, 0x7f, 0x90, 0x19, 0x10, + 0xbb, 0x25, 0x85, 0x18, 0xbd, 0x05, 0xd3, 0x8e, 0x11, 0x84, 0x0f, 0x3a, 0x54, 0x7a, 0x94, 0x0b, + 0x65, 0xf2, 0xb9, 0xc5, 0x32, 0x5f, 0x7a, 0x45, 0x45, 0xb4, 0x74, 0xf1, 0xf0, 0xa0, 0x3a, 0x9d, + 0x28, 0xc2, 0x49, 0x52, 0xe8, 0x0d, 0x98, 0xa0, 0x05, 0xcb, 0xbe, 0xef, 0xf9, 0x62, 0xf6, 0x5f, + 0x28, 0x4b, 0x97, 0x21, 0xe1, 0xd2, 0x6c, 0xf4, 0x13, 0xc7, 0xe8, 0xd1, 0x77, 0x00, 0xf2, 0xb6, + 0x02, 0x2a, 0x80, 0x5a, 0x77, 0xb9, 0xa8, 0x4c, 0x07, 0x4b, 0xbf, 0xce, 0xd0, 0xd2, 0xbc, 0xf8, + 0x9a, 0xe8, 0x41, 0xa6, 0x06, 0xce, 0x69, 0x85, 0x76, 0x01, 0x45, 0xe2, 0x76, 0xb4, 0x00, 0xe6, + 0x46, 0x8e, 0xbf, 0x7c, 0xae, 0x52, 0x62, 0x77, 0x33, 0x28, 0x70, 0x0e, 0x5a, 0xfd, 0x5f, 0x57, + 0x60, 0x92, 0x2f, 0x91, 0x65, 0x37, 0xf4, 0x7b, 0xe7, 0x70, 0x40, 0x90, 0xc4, 0x01, 0x51, 0x2b, + 0xbf, 0xe7, 0x59, 0x87, 0x0b, 0xcf, 0x87, 0x76, 0xea, 0x7c, 0x58, 0x1e, 0x94, 0x50, 0xff, 0xe3, + 0xe1, 0xdf, 0x69, 0x70, 0x41, 0xa9, 0x7d, 0x0e, 0xa7, 0x83, 0x95, 0x3c, 0x1d, 0x5e, 0x1c, 0x70, + 0x7c, 0x05, 0x87, 0x83, 0x97, 0x18, 0x16, 0x63, 0xdc, 0xcf, 0x01, 0x6c, 0x31, 0x76, 0xb2, 0x16, + 0xcb, 0x49, 0xd1, 0x27, 0x5f, 0x8a, 0x20, 0x58, 0xa9, 0x95, 0xe0, 0x59, 0x95, 0xbe, 0x3c, 0xeb, + 0xbf, 0x0c, 0xc1, 0xc5, 0xcc, 0xb4, 0x67, 0xf9, 0x88, 0xf6, 0x75, 0xe2, 0x23, 0x95, 0xaf, 0x07, + 0x1f, 0x19, 0x2a, 0xc5, 0x47, 0x8e, 0x7d, 0x4e, 0x20, 0x1f, 0x50, 0xdb, 0x6e, 0xf1, 0x66, 0xcd, + 0xd0, 0xf0, 0xc3, 0x0d, 0xbb, 0x4d, 0x04, 0xc7, 0xf9, 0xa6, 0xe3, 0x2d, 0x59, 0xda, 0x82, 0x33, + 0x9e, 0xd5, 0x0c, 0x26, 0x9c, 0x83, 0x5d, 0xff, 0xfd, 0x61, 0x80, 0xda, 0x22, 0xf6, 0x42, 0xde, + 0xd9, 0x17, 0x61, 0xa4, 0xb3, 0x63, 0x04, 0x72, 0x3d, 0x3d, 0x23, 0x17, 0xe3, 0x3a, 0x2d, 0x7c, + 0x74, 0x50, 0x9d, 0xab, 0xf9, 0xc4, 0x22, 0x6e, 0x68, 0x1b, 0x4e, 0x20, 0x1b, 0x31, 0x18, 0xe6, + 0xed, 0xe8, 0x18, 0xe8, 0x34, 0xd6, 0xbc, 0x76, 0xc7, 0x21, 0x14, 0xca, 0xc6, 0x50, 0x29, 0x37, + 0x86, 0x95, 0x0c, 0x26, 0x9c, 0x83, 0x5d, 0xd2, 0x6c, 0xb8, 0x76, 0x68, 0x1b, 0x11, 0xcd, 0xa1, + 0xf2, 0x34, 0x93, 0x98, 0x70, 0x0e, 0x76, 0xf4, 0x8e, 0x06, 0xf3, 0xc9, 0xe2, 0x3b, 0xb6, 0x6b, + 0x07, 0x3b, 0xc4, 0x62, 0xc4, 0x87, 0x4f, 0x4c, 0xfc, 0xc6, 0xe1, 0x41, 0x75, 0x7e, 0xa5, 0x10, + 0x23, 0xee, 0x43, 0x0d, 0x7d, 0x56, 0x83, 0xeb, 0xa9, 0x79, 0xf1, 0xed, 0x56, 0x8b, 0xf8, 0xa2, + 0x37, 0x27, 0x5f, 0x42, 0xd5, 0xc3, 0x83, 0xea, 0xf5, 0x95, 0x62, 0x94, 0xb8, 0x1f, 0x3d, 0xfd, + 0x37, 0x35, 0x18, 0xaa, 0xe1, 0x06, 0xfa, 0x40, 0xe2, 0x12, 0xf7, 0x98, 0x7a, 0x89, 0x7b, 0x74, + 0x50, 0x1d, 0xab, 0xe1, 0x86, 0x72, 0x9f, 0xfb, 0xac, 0x06, 0x17, 0x4d, 0xcf, 0x0d, 0x0d, 0xda, + 0x2f, 0xcc, 0x25, 0x1d, 0xc9, 0x55, 0x4b, 0xdd, 0x5f, 0x6a, 0x29, 0x64, 0x4b, 0xd7, 0x44, 0x07, + 0x2e, 0xa6, 0x21, 0x01, 0xce, 0x52, 0xd6, 0xbf, 0xaa, 0xc1, 0x54, 0xcd, 0xf1, 0xba, 0xd6, 0xba, + 0xef, 0x6d, 0xdb, 0x0e, 0x79, 0x77, 0x5c, 0xda, 0xd4, 0x1e, 0x17, 0x1d, 0xca, 0xec, 0x12, 0xa5, + 0x56, 0x7c, 0x97, 0x5c, 0xa2, 0xd4, 0x2e, 0x17, 0x9c, 0x93, 0x3f, 0x39, 0x96, 0x1c, 0x19, 0x3b, + 0x29, 0x9f, 0x86, 0x71, 0xd3, 0x58, 0xea, 0xba, 0x96, 0x13, 0xdd, 0xa2, 0x68, 0x2f, 0x6b, 0x8b, + 0xbc, 0x0c, 0x47, 0x50, 0xf4, 0x16, 0x40, 0xac, 0x50, 0x13, 0x9f, 0xe1, 0xce, 0x60, 0x4a, 0xbc, + 0x26, 0x09, 0x43, 0xdb, 0x6d, 0x05, 0xf1, 0xa7, 0x8f, 0x61, 0x58, 0xa1, 0x86, 0xbe, 0x1f, 0xa6, + 0xc5, 0x24, 0x37, 0xda, 0x46, 0x4b, 0xe8, 0x1b, 0x4a, 0xce, 0xd4, 0xaa, 0x82, 0x68, 0xe9, 0x8a, + 0x20, 0x3c, 0xad, 0x96, 0x06, 0x38, 0x49, 0x0d, 0xf5, 0x60, 0xaa, 0xad, 0xea, 0x50, 0x86, 0xcb, + 0x8b, 0x33, 0x8a, 0x3e, 0x65, 0xe9, 0xb2, 0x20, 0x3e, 0x95, 0xd0, 0xbe, 0x24, 0x48, 0xe5, 0x5c, + 0x05, 0x47, 0xce, 0xea, 0x2a, 0x48, 0x60, 0x8c, 0x5f, 0x86, 0x83, 0xb9, 0x51, 0x36, 0xc0, 0xdb, + 0x65, 0x06, 0xc8, 0xef, 0xd5, 0xb1, 0x86, 0x98, 0xff, 0x0e, 0xb0, 0xc4, 0x8d, 0xf6, 0x60, 0x8a, + 0x9e, 0xea, 0x4d, 0xe2, 0x10, 0x33, 0xf4, 0xfc, 0xb9, 0xb1, 0xf2, 0x1a, 0xd8, 0xa6, 0x82, 0x87, + 0xab, 0xd2, 0xd4, 0x12, 0x9c, 0xa0, 0x13, 0xe9, 0x0a, 0xc6, 0x0b, 0x75, 0x05, 0x5d, 0x98, 0xdc, + 0x53, 0x74, 0x5a, 0x13, 0x6c, 0x12, 0x3e, 0x5e, 0xa6, 0x63, 0xb1, 0x82, 0x6b, 0xe9, 0x92, 0x20, + 0x34, 0xa9, 0x2a, 0xc3, 0x54, 0x3a, 0xfa, 0x3f, 0x00, 0xb8, 0x58, 0x73, 0xba, 0x41, 0x48, 0xfc, + 0x45, 0xf1, 0x48, 0x44, 0x7c, 0xf4, 0x29, 0x0d, 0xae, 0xb2, 0x7f, 0xeb, 0xde, 0x43, 0xb7, 0x4e, + 0x1c, 0xa3, 0xb7, 0xb8, 0x4d, 0x6b, 0x58, 0xd6, 0xc9, 0x38, 0x50, 0xbd, 0x2b, 0xa4, 0x48, 0xa6, + 0x9c, 0x6b, 0xe6, 0x62, 0xc4, 0x05, 0x94, 0xd0, 0x8f, 0x6a, 0x70, 0x2d, 0x07, 0x54, 0x27, 0x0e, + 0x09, 0xa5, 0xe4, 0x72, 0xd2, 0x7e, 0x3c, 0x71, 0x78, 0x50, 0xbd, 0xd6, 0x2c, 0x42, 0x8a, 0x8b, + 0xe9, 0xa1, 0xbf, 0xab, 0xc1, 0x7c, 0x0e, 0xf4, 0x8e, 0x61, 0x3b, 0x5d, 0x5f, 0x0a, 0x35, 0x27, + 0xed, 0x0e, 0x93, 0x2d, 0x9a, 0x85, 0x58, 0x71, 0x1f, 0x8a, 0xe8, 0x07, 0xe0, 0x4a, 0x04, 0xdd, + 0x74, 0x5d, 0x42, 0xac, 0x84, 0x88, 0x73, 0xd2, 0xae, 0x5c, 0x3b, 0x3c, 0xa8, 0x5e, 0x69, 0xe6, + 0x21, 0xc4, 0xf9, 0x74, 0x50, 0x0b, 0x9e, 0x88, 0x01, 0xa1, 0xed, 0xd8, 0x6f, 0x71, 0x29, 0x6c, + 0xc7, 0x27, 0xc1, 0x8e, 0xe7, 0x58, 0x8c, 0x59, 0x68, 0x4b, 0xef, 0x3d, 0x3c, 0xa8, 0x3e, 0xd1, + 0xec, 0x57, 0x11, 0xf7, 0xc7, 0x83, 0x2c, 0x98, 0x0a, 0x4c, 0xc3, 0x6d, 0xb8, 0x21, 0xf1, 0xf7, + 0x0c, 0x67, 0x6e, 0xb4, 0xd4, 0x00, 0xf9, 0x16, 0x55, 0xf0, 0xe0, 0x04, 0x56, 0xf4, 0x51, 0x18, + 0x27, 0xfb, 0x1d, 0xc3, 0xb5, 0x08, 0x67, 0x0b, 0x13, 0x4b, 0x8f, 0xd3, 0xc3, 0x68, 0x59, 0x94, + 0x3d, 0x3a, 0xa8, 0x4e, 0xc9, 0xff, 0x57, 0x3d, 0x8b, 0xe0, 0xa8, 0x36, 0xfa, 0x3e, 0xb8, 0xcc, + 0xde, 0xc3, 0x2c, 0xc2, 0x98, 0x5c, 0x20, 0x05, 0xdd, 0xf1, 0x52, 0xfd, 0x64, 0x6f, 0x1b, 0xab, + 0x39, 0xf8, 0x70, 0x2e, 0x15, 0xfa, 0x19, 0xda, 0xc6, 0xfe, 0x5d, 0xdf, 0x30, 0xc9, 0x76, 0xd7, + 0xd9, 0x20, 0x7e, 0xdb, 0x76, 0xf9, 0x5d, 0x82, 0x98, 0x9e, 0x6b, 0x51, 0x56, 0xa2, 0x3d, 0x3d, + 0xc2, 0x3f, 0xc3, 0x6a, 0xbf, 0x8a, 0xb8, 0x3f, 0x1e, 0xf4, 0x21, 0x98, 0xb2, 0x5b, 0xae, 0xe7, + 0x93, 0x0d, 0xc3, 0x76, 0xc3, 0x60, 0x0e, 0x98, 0xda, 0x9d, 0x4d, 0x6b, 0x43, 0x29, 0xc7, 0x89, + 0x5a, 0x68, 0x0f, 0x90, 0x4b, 0x1e, 0xae, 0x7b, 0x16, 0x5b, 0x02, 0x9b, 0x1d, 0xb6, 0x90, 0xe7, + 0x26, 0x4b, 0x4d, 0x0d, 0xbb, 0x07, 0xac, 0x65, 0xb0, 0xe1, 0x1c, 0x0a, 0xe8, 0x0e, 0xa0, 0xb6, + 0xb1, 0xbf, 0xdc, 0xee, 0x84, 0xbd, 0xa5, 0xae, 0xb3, 0x2b, 0xb8, 0xc6, 0x14, 0x9b, 0x0b, 0x7e, + 0x0f, 0xcb, 0x40, 0x71, 0x4e, 0x0b, 0xfd, 0x60, 0x08, 0x26, 0x6a, 0x9e, 0x6b, 0xd9, 0xec, 0x1a, + 0xf6, 0x6c, 0x42, 0xe7, 0xfb, 0x84, 0xca, 0xc7, 0x1f, 0x1d, 0x54, 0xa7, 0xa3, 0x8a, 0x0a, 0x63, + 0x7f, 0x3e, 0x52, 0xb4, 0xf0, 0x8b, 0xfd, 0x7b, 0x93, 0x1a, 0x92, 0x47, 0x07, 0xd5, 0x0b, 0x51, + 0xb3, 0xa4, 0xd2, 0x84, 0xce, 0x1d, 0x95, 0xe6, 0x37, 0x7c, 0xc3, 0x0d, 0xec, 0x01, 0xee, 0x4f, + 0xd1, 0xcd, 0x78, 0x25, 0x83, 0x0d, 0xe7, 0x50, 0x40, 0x6f, 0xc0, 0x0c, 0x2d, 0xdd, 0xec, 0x58, + 0x46, 0x48, 0x4a, 0x5e, 0x9b, 0xae, 0x0a, 0x9a, 0x33, 0x2b, 0x09, 0x4c, 0x38, 0x85, 0x99, 0xeb, + 0xc8, 0x8d, 0xc0, 0x73, 0x19, 0xbb, 0x48, 0xe8, 0xc8, 0x69, 0x29, 0x16, 0x50, 0xf4, 0x0c, 0x8c, + 0xb5, 0x49, 0x10, 0x18, 0x2d, 0xc2, 0xf6, 0xff, 0x44, 0x7c, 0xc8, 0xaf, 0xf2, 0x62, 0x2c, 0xe1, + 0xe8, 0x83, 0x30, 0x62, 0x7a, 0x16, 0x09, 0xe6, 0xc6, 0xd8, 0x0a, 0xa5, 0x5f, 0x7b, 0xa4, 0x46, + 0x0b, 0x1e, 0x1d, 0x54, 0x27, 0x98, 0x1e, 0x81, 0xfe, 0xc2, 0xbc, 0x92, 0xfe, 0x33, 0x54, 0xe6, + 0x4e, 0x5d, 0x32, 0x8e, 0xa1, 0xdb, 0x3f, 0x3f, 0x35, 0xb9, 0xfe, 0x39, 0x7a, 0xe1, 0xf1, 0xdc, + 0xd0, 0xf7, 0x9c, 0x75, 0xc7, 0x70, 0x09, 0xfa, 0x61, 0x0d, 0x66, 0x77, 0xec, 0xd6, 0x8e, 0xfa, + 0x38, 0x27, 0x0e, 0xe6, 0x52, 0x77, 0x93, 0x7b, 0x29, 0x5c, 0x4b, 0x97, 0x0f, 0x0f, 0xaa, 0xb3, + 0xe9, 0x52, 0x9c, 0xa1, 0xa9, 0x7f, 0xa6, 0x02, 0x97, 0x45, 0xcf, 0x1c, 0x7a, 0x52, 0x76, 0x1c, + 0xaf, 0xd7, 0x26, 0xee, 0x79, 0xbc, 0xa3, 0xc9, 0x2f, 0x54, 0x29, 0xfc, 0x42, 0xed, 0xcc, 0x17, + 0x1a, 0x2a, 0xf3, 0x85, 0xa2, 0x85, 0x7c, 0xc4, 0x57, 0xfa, 0x33, 0x0d, 0xe6, 0xf2, 0xe6, 0xe2, + 0x1c, 0xee, 0x70, 0xed, 0xe4, 0x1d, 0xee, 0x5e, 0xd9, 0x4b, 0x79, 0xba, 0xeb, 0x05, 0x77, 0xb9, + 0x3f, 0xad, 0xc0, 0xd5, 0xb8, 0x7a, 0xc3, 0x0d, 0x42, 0xc3, 0x71, 0xb8, 0x9a, 0xea, 0xec, 0xbf, + 0x7b, 0x27, 0x71, 0x15, 0x5f, 0x1b, 0x6c, 0xa8, 0x6a, 0xdf, 0x0b, 0x35, 0xe5, 0xfb, 0x29, 0x4d, + 0xf9, 0xfa, 0x29, 0xd2, 0xec, 0xaf, 0x34, 0xff, 0x6f, 0x1a, 0xcc, 0xe7, 0x37, 0x3c, 0x87, 0x45, + 0xe5, 0x25, 0x17, 0xd5, 0x77, 0x9c, 0xde, 0xa8, 0x0b, 0x96, 0xd5, 0x2f, 0x57, 0x8a, 0x46, 0xcb, + 0x94, 0x05, 0xdb, 0x70, 0x81, 0xde, 0xe2, 0x82, 0x50, 0xa8, 0x74, 0x4f, 0x66, 0xeb, 0x20, 0x75, + 0x5c, 0x17, 0x70, 0x12, 0x07, 0x4e, 0x23, 0x45, 0x6b, 0x30, 0x46, 0xaf, 0x6e, 0x14, 0x7f, 0xe5, + 0xf8, 0xf8, 0xa3, 0xd3, 0xa8, 0xc9, 0xdb, 0x62, 0x89, 0x04, 0x7d, 0x37, 0x4c, 0x5b, 0xd1, 0x8e, + 0x3a, 0xe2, 0xa1, 0x33, 0x8d, 0x95, 0x29, 0xdf, 0xeb, 0x6a, 0x6b, 0x9c, 0x44, 0xa6, 0xff, 0xa5, + 0x06, 0x8f, 0xf7, 0x5b, 0x5b, 0xe8, 0x4d, 0x00, 0x53, 0x8a, 0x17, 0xdc, 0xd4, 0xa5, 0xa4, 0x7a, + 0x3e, 0x12, 0x52, 0xe2, 0x0d, 0x1a, 0x15, 0x05, 0x58, 0x21, 0x92, 0xf3, 0x7e, 0x5a, 0x39, 0xa3, + 0xf7, 0x53, 0xfd, 0xbf, 0x6b, 0x2a, 0x2b, 0x52, 0xbf, 0xed, 0xbb, 0x8d, 0x15, 0xa9, 0x7d, 0x2f, + 0xd4, 0x0f, 0xfe, 0x41, 0x05, 0x6e, 0xe6, 0x37, 0x51, 0xce, 0xde, 0x4f, 0xc0, 0x68, 0x87, 0xdb, + 0x23, 0x0d, 0xb1, 0xb3, 0xf1, 0x69, 0xca, 0x59, 0xb8, 0xb5, 0xd0, 0xa3, 0x83, 0xea, 0x7c, 0x1e, + 0xa3, 0x17, 0x76, 0x46, 0xa2, 0x1d, 0xb2, 0x53, 0x5a, 0x12, 0x2e, 0xfd, 0x7d, 0xeb, 0x31, 0x99, + 0x8b, 0xb1, 0x45, 0x9c, 0x63, 0x2b, 0x46, 0x3e, 0xa9, 0xc1, 0x4c, 0x62, 0x45, 0x07, 0x73, 0x23, + 0x6c, 0x8d, 0x96, 0x7a, 0xba, 0x4a, 0x6c, 0x95, 0xf8, 0xe4, 0x4e, 0x14, 0x07, 0x38, 0x45, 0x30, + 0xc5, 0x66, 0xd5, 0x59, 0x7d, 0xd7, 0xb1, 0x59, 0xb5, 0xf3, 0x05, 0x6c, 0xf6, 0xa7, 0x2b, 0x45, + 0xa3, 0x65, 0x6c, 0xf6, 0x21, 0x4c, 0x48, 0x4b, 0x5d, 0xc9, 0x2e, 0xee, 0x0c, 0xda, 0x27, 0x8e, + 0x2e, 0x36, 0xdb, 0x90, 0x25, 0x01, 0x8e, 0x69, 0xa1, 0x1f, 0xd2, 0x00, 0xe2, 0x0f, 0x23, 0x36, + 0xd5, 0xc6, 0xe9, 0x4d, 0x87, 0x22, 0xd6, 0xcc, 0xd0, 0x2d, 0xad, 0x2c, 0x0a, 0x85, 0xae, 0xfe, + 0xbf, 0x87, 0x00, 0x65, 0xfb, 0x4e, 0xc5, 0xcd, 0x5d, 0xdb, 0xb5, 0xd2, 0x17, 0x82, 0xfb, 0xb6, + 0x6b, 0x61, 0x06, 0x39, 0x86, 0x40, 0xfa, 0x02, 0x5c, 0x68, 0x39, 0xde, 0x96, 0xe1, 0x38, 0x3d, + 0x61, 0xba, 0x2a, 0x8c, 0x20, 0x2f, 0xd1, 0x83, 0xe9, 0x6e, 0x12, 0x84, 0xd3, 0x75, 0x51, 0x07, + 0x66, 0x7d, 0x7a, 0x15, 0x37, 0x6d, 0x87, 0x5d, 0x9d, 0xbc, 0x6e, 0x58, 0x52, 0xd7, 0xc3, 0xc4, + 0x7b, 0x9c, 0xc2, 0x85, 0x33, 0xd8, 0xd1, 0xfb, 0x60, 0xac, 0xe3, 0xdb, 0x6d, 0xc3, 0xef, 0xb1, + 0xcb, 0xd9, 0xf8, 0xd2, 0x24, 0x3d, 0xe1, 0xd6, 0x79, 0x11, 0x96, 0x30, 0xf4, 0x7d, 0x30, 0xe1, + 0xd8, 0xdb, 0xc4, 0xec, 0x99, 0x0e, 0x11, 0xca, 0x99, 0x07, 0xa7, 0xb3, 0x64, 0x56, 0x24, 0x5a, + 0xf1, 0x24, 0x2c, 0x7f, 0xe2, 0x98, 0x20, 0x6a, 0xc0, 0xa5, 0x87, 0x9e, 0xbf, 0x4b, 0x7c, 0x87, + 0x04, 0x41, 0xb3, 0xdb, 0xe9, 0x78, 0x7e, 0x48, 0x2c, 0xa6, 0xc2, 0x19, 0xe7, 0xf6, 0xb9, 0xaf, + 0x64, 0xc1, 0x38, 0xaf, 0x8d, 0xfe, 0x4e, 0x05, 0xae, 0xf7, 0xe9, 0x04, 0xc2, 0x74, 0x6f, 0x88, + 0x39, 0x12, 0x2b, 0xe1, 0x43, 0x7c, 0x3d, 0x8b, 0xc2, 0x47, 0x07, 0xd5, 0x27, 0xfb, 0x20, 0x68, + 0xd2, 0xa5, 0x48, 0x5a, 0x3d, 0x1c, 0xa3, 0x41, 0x0d, 0x18, 0xb5, 0x62, 0x8d, 0xe6, 0xc4, 0xd2, + 0xb3, 0x94, 0x5b, 0x73, 0xdd, 0xc3, 0x71, 0xb1, 0x09, 0x04, 0x68, 0x05, 0xc6, 0xf8, 0x43, 0x32, + 0x11, 0x9c, 0xff, 0x39, 0x76, 0x3d, 0xe6, 0x45, 0xc7, 0x45, 0x26, 0x51, 0xe8, 0xff, 0x4b, 0x83, + 0xb1, 0x9a, 0xe7, 0x93, 0xfa, 0x5a, 0x13, 0xf5, 0x60, 0x52, 0x71, 0x21, 0x10, 0x5c, 0xb0, 0x24, + 0x5b, 0x60, 0x18, 0x17, 0x63, 0x6c, 0xd2, 0xdc, 0x35, 0x2a, 0xc0, 0x2a, 0x2d, 0xf4, 0x26, 0x9d, + 0xf3, 0x87, 0xbe, 0x1d, 0x52, 0xc2, 0x83, 0xbc, 0xbf, 0x71, 0xc2, 0x58, 0xe2, 0xe2, 0x2b, 0x2a, + 0xfa, 0x89, 0x63, 0x2a, 0xfa, 0x3a, 0xe5, 0x00, 0xe9, 0x6e, 0xa2, 0xdb, 0x30, 0xdc, 0xf6, 0x2c, + 0xf9, 0xdd, 0xdf, 0x2f, 0xf7, 0xf7, 0xaa, 0x67, 0xd1, 0xb9, 0xbd, 0x9a, 0x6d, 0xc1, 0xb4, 0x84, + 0xac, 0x8d, 0xbe, 0x06, 0xb3, 0x69, 0xfa, 0xe8, 0x36, 0xcc, 0x98, 0x5e, 0xbb, 0xed, 0xb9, 0xcd, + 0xee, 0xf6, 0xb6, 0xbd, 0x4f, 0x12, 0x76, 0xc8, 0xb5, 0x04, 0x04, 0xa7, 0x6a, 0xea, 0x3f, 0xa5, + 0xc1, 0x10, 0xfd, 0x2e, 0x3a, 0x8c, 0x5a, 0x5e, 0xdb, 0xb0, 0x5d, 0xd1, 0x2b, 0x66, 0x73, 0x5d, + 0x67, 0x25, 0x58, 0x40, 0x50, 0x07, 0x26, 0xa4, 0xd0, 0x34, 0x90, 0x2d, 0x4c, 0x7d, 0xad, 0x19, + 0xd9, 0x0f, 0x46, 0x9c, 0x5c, 0x96, 0x04, 0x38, 0x26, 0xa2, 0x1b, 0x70, 0xb1, 0xbe, 0xd6, 0x6c, + 0xb8, 0xa6, 0xd3, 0xb5, 0xc8, 0xf2, 0x3e, 0xfb, 0x43, 0x79, 0x89, 0xcd, 0x4b, 0xc4, 0x38, 0x19, + 0x2f, 0x11, 0x95, 0xb0, 0x84, 0xd1, 0x6a, 0x84, 0xb7, 0x10, 0xc6, 0xc2, 0xac, 0x9a, 0x40, 0x82, + 0x25, 0x4c, 0xff, 0x6a, 0x05, 0x26, 0x95, 0x0e, 0x21, 0x07, 0xc6, 0xf8, 0x70, 0xa5, 0xad, 0xde, + 0x72, 0xc9, 0x21, 0x26, 0x7b, 0xcd, 0xa9, 0xf3, 0x09, 0x0d, 0xb0, 0x24, 0xa1, 0xf2, 0xc5, 0x4a, + 0x1f, 0xbe, 0xb8, 0x00, 0x10, 0xc4, 0x96, 0xeb, 0x7c, 0x4b, 0xb2, 0xa3, 0x47, 0xb1, 0x57, 0x57, + 0x6a, 0xa0, 0xc7, 0xc5, 0x09, 0xc2, 0x8d, 0x51, 0xc6, 0x53, 0xa7, 0xc7, 0x36, 0x8c, 0xbc, 0xe5, + 0xb9, 0x24, 0x10, 0x6f, 0x70, 0xa7, 0x34, 0xc0, 0x09, 0x2a, 0x1f, 0xbc, 0x46, 0xf1, 0x62, 0x8e, + 0x5e, 0xff, 0x59, 0x0d, 0xa0, 0x6e, 0x84, 0x06, 0x7f, 0x32, 0x3a, 0x86, 0xbd, 0xf7, 0xe3, 0x89, + 0x83, 0x6f, 0x3c, 0x63, 0x03, 0x3b, 0x1c, 0xd8, 0x6f, 0xc9, 0xe1, 0x47, 0x02, 0x35, 0xc7, 0xde, + 0xb4, 0xdf, 0x22, 0x98, 0xc1, 0xd1, 0x07, 0x60, 0x82, 0xb8, 0xa6, 0xdf, 0xeb, 0x50, 0xe6, 0x3d, + 0xcc, 0x66, 0x95, 0xed, 0xd0, 0x65, 0x59, 0x88, 0x63, 0xb8, 0xfe, 0x2c, 0x24, 0x6f, 0x45, 0x47, + 0xf7, 0x52, 0xff, 0xda, 0x30, 0x5c, 0x5b, 0xde, 0xa8, 0xd5, 0x05, 0x3e, 0xdb, 0x73, 0xef, 0x93, + 0xde, 0xdf, 0x98, 0xd7, 0xfc, 0x8d, 0x79, 0xcd, 0x29, 0x9a, 0xd7, 0x3c, 0xd2, 0x60, 0x76, 0x79, + 0xbf, 0x63, 0xfb, 0xcc, 0xcf, 0x80, 0xf8, 0xf4, 0x1a, 0x8b, 0x9e, 0x81, 0xb1, 0x3d, 0xfe, 0xaf, + 0x58, 0x5c, 0x91, 0xaa, 0x40, 0xd4, 0xc0, 0x12, 0x8e, 0xb6, 0x61, 0x86, 0xb0, 0xe6, 0x4c, 0x5e, + 0x35, 0xc2, 0x32, 0x0b, 0x88, 0xbb, 0xb1, 0x24, 0xb0, 0xe0, 0x14, 0x56, 0xd4, 0x84, 0x19, 0xd3, + 0x31, 0x82, 0xc0, 0xde, 0xb6, 0xcd, 0xd8, 0x82, 0x6e, 0x62, 0xe9, 0x03, 0xec, 0xe8, 0x49, 0x40, + 0x1e, 0x1d, 0x54, 0xaf, 0x88, 0x7e, 0x26, 0x01, 0x38, 0x85, 0x42, 0xff, 0x7c, 0x05, 0xa6, 0x97, + 0xf7, 0x3b, 0x5e, 0xd0, 0xf5, 0x09, 0xab, 0x7a, 0x0e, 0x37, 0xf0, 0x67, 0x60, 0x6c, 0xc7, 0x70, + 0x2d, 0x87, 0xf8, 0x82, 0xfb, 0x44, 0x73, 0x7b, 0x8f, 0x17, 0x63, 0x09, 0x47, 0x6f, 0x03, 0x04, + 0xe6, 0x0e, 0xb1, 0xba, 0x4c, 0x82, 0xe1, 0x9b, 0xe4, 0x7e, 0x19, 0x1e, 0x9a, 0x18, 0x63, 0x33, + 0x42, 0x29, 0x38, 0x7b, 0xf4, 0x1b, 0x2b, 0xe4, 0xf4, 0x3f, 0xd4, 0xe0, 0x62, 0xa2, 0xdd, 0x39, + 0x5c, 0x2c, 0xb7, 0x93, 0x17, 0xcb, 0xc5, 0x81, 0xc7, 0x5a, 0x70, 0x9f, 0xfc, 0x91, 0x0a, 0x3c, + 0x56, 0x30, 0x27, 0x19, 0x73, 0x0b, 0xed, 0x9c, 0xcc, 0x2d, 0xba, 0x30, 0x19, 0x7a, 0x8e, 0x30, + 0xf4, 0x94, 0x33, 0x50, 0xca, 0x98, 0x62, 0x23, 0x42, 0x13, 0x1b, 0x53, 0xc4, 0x65, 0x01, 0x56, + 0xe9, 0xe8, 0xbf, 0xa9, 0xc1, 0x44, 0xa4, 0xbf, 0xfa, 0x86, 0x7a, 0x43, 0x3a, 0xbe, 0xe7, 0x9d, + 0xfe, 0x3b, 0x15, 0xb8, 0x1a, 0xe1, 0x96, 0xf7, 0x84, 0x66, 0x48, 0xf9, 0xc6, 0xd1, 0x97, 0xe0, + 0xc7, 0xc5, 0x39, 0xac, 0xc8, 0x02, 0x8a, 0xa4, 0x40, 0xe5, 0xa6, 0xae, 0xdf, 0xf1, 0x02, 0x29, + 0x0e, 0x70, 0xb9, 0x89, 0x17, 0x61, 0x09, 0x43, 0x6b, 0x30, 0x12, 0x50, 0x7a, 0xe2, 0x34, 0x39, + 0xe1, 0x6c, 0x30, 0x89, 0x86, 0xf5, 0x17, 0x73, 0x34, 0xe8, 0x6d, 0x55, 0xa5, 0x31, 0x52, 0x5e, + 0xcd, 0x42, 0x47, 0x62, 0xc9, 0x19, 0xc9, 0xf1, 0x46, 0xc9, 0x53, 0x6b, 0xe8, 0x2b, 0x30, 0x2b, + 0x2c, 0x36, 0xf8, 0xb2, 0x71, 0x4d, 0x82, 0x3e, 0x9a, 0x58, 0x19, 0x4f, 0xa5, 0x5e, 0x91, 0x2f, + 0xa7, 0xeb, 0xc7, 0x2b, 0x46, 0x0f, 0x60, 0xfc, 0xae, 0xe8, 0x24, 0x9a, 0x87, 0x8a, 0x2d, 0xbf, + 0x05, 0x08, 0x1c, 0x95, 0x46, 0x1d, 0x57, 0x6c, 0x2b, 0x92, 0x87, 0x2a, 0x85, 0x52, 0x9b, 0x72, + 0x2c, 0x0d, 0xf5, 0x3f, 0x96, 0xf4, 0x3f, 0xa9, 0xc0, 0x65, 0x49, 0x55, 0x8e, 0xb1, 0x2e, 0xde, + 0xe0, 0x8e, 0x90, 0x0d, 0x8f, 0x56, 0x8a, 0x3c, 0x80, 0x61, 0xc6, 0x00, 0x4b, 0xbd, 0xcd, 0x45, + 0x08, 0x69, 0x77, 0x30, 0x43, 0x84, 0xbe, 0x0f, 0x46, 0x1d, 0x63, 0x8b, 0x38, 0xd2, 0x52, 0xae, + 0x94, 0x0a, 0x29, 0x6f, 0xb8, 0x5c, 0xb3, 0x19, 0x70, 0x6f, 0x80, 0xe8, 0xc9, 0x86, 0x17, 0x62, + 0x41, 0x73, 0xfe, 0x79, 0x98, 0x54, 0xaa, 0xa1, 0x59, 0x18, 0xda, 0x25, 0xfc, 0x6d, 0x76, 0x02, + 0xd3, 0x7f, 0xd1, 0x65, 0x18, 0xd9, 0x33, 0x9c, 0xae, 0x98, 0x12, 0xcc, 0x7f, 0xdc, 0xae, 0x7c, + 0x54, 0xd3, 0x7f, 0x51, 0x83, 0xc9, 0x7b, 0xf6, 0x16, 0xf1, 0xb9, 0xd9, 0x05, 0xbb, 0x0a, 0x25, + 0x1c, 0x9f, 0x27, 0xf3, 0x9c, 0x9e, 0xd1, 0x3e, 0x4c, 0x88, 0x93, 0x26, 0xb2, 0xca, 0xbd, 0x5b, + 0xee, 0x11, 0x38, 0x22, 0x2d, 0x38, 0xb8, 0xea, 0x68, 0x25, 0x29, 0xe0, 0x98, 0x98, 0xfe, 0x36, + 0x5c, 0xca, 0x69, 0x84, 0xaa, 0x6c, 0xfb, 0xfa, 0xa1, 0x58, 0x16, 0x72, 0x3f, 0xfa, 0x21, 0xe6, + 0xe5, 0xe8, 0x1a, 0x0c, 0x11, 0xd7, 0x12, 0x6b, 0x62, 0xec, 0xf0, 0xa0, 0x3a, 0xb4, 0xec, 0x5a, + 0x98, 0x96, 0x51, 0x36, 0xe5, 0x78, 0x09, 0x99, 0x84, 0xb1, 0xa9, 0x15, 0x51, 0x86, 0x23, 0x28, + 0x7b, 0xb6, 0x4f, 0xbf, 0x50, 0x53, 0xe9, 0x74, 0x76, 0x3b, 0xb5, 0x7b, 0x06, 0x79, 0x18, 0x4f, + 0xef, 0xc4, 0xa5, 0x39, 0x31, 0x21, 0x99, 0x3d, 0x8d, 0x33, 0x74, 0xf5, 0x5f, 0x1b, 0x86, 0x27, + 0xee, 0x79, 0xbe, 0xfd, 0x96, 0xe7, 0x86, 0x86, 0xb3, 0xee, 0x59, 0xb1, 0x81, 0x9d, 0x60, 0xca, + 0x9f, 0xd6, 0xe0, 0x31, 0xb3, 0xd3, 0xe5, 0xd2, 0xad, 0xb4, 0x7b, 0x5a, 0x27, 0xbe, 0xed, 0x95, + 0xb5, 0xb3, 0x63, 0xae, 0xb5, 0xb5, 0xf5, 0xcd, 0x3c, 0x94, 0xb8, 0x88, 0x16, 0x33, 0xf7, 0xb3, + 0xbc, 0x87, 0x2e, 0xeb, 0x5c, 0x33, 0x64, 0xb3, 0xf9, 0x56, 0xfc, 0x11, 0x4a, 0x9a, 0xfb, 0xd5, + 0x73, 0x31, 0xe2, 0x02, 0x4a, 0xe8, 0x07, 0xe0, 0x8a, 0xcd, 0x3b, 0x87, 0x89, 0x61, 0xd9, 0x2e, + 0x09, 0x02, 0x6e, 0x2b, 0x34, 0x80, 0x3d, 0x5b, 0x23, 0x0f, 0x21, 0xce, 0xa7, 0x83, 0x5e, 0x07, + 0x08, 0x7a, 0xae, 0x29, 0xe6, 0x7f, 0xa4, 0x14, 0x55, 0x2e, 0x04, 0x46, 0x58, 0xb0, 0x82, 0x91, + 0xde, 0x70, 0xc3, 0x68, 0x51, 0x8e, 0x32, 0xdb, 0x38, 0x76, 0xc3, 0x8d, 0xd7, 0x50, 0x0c, 0xd7, + 0xff, 0x99, 0x06, 0x63, 0xc2, 0x7d, 0x1f, 0xbd, 0x3f, 0xa5, 0xe5, 0x89, 0x78, 0x4f, 0x4a, 0xd3, + 0xd3, 0x63, 0x4f, 0x7d, 0x42, 0xc3, 0x27, 0x44, 0x89, 0x52, 0x6a, 0x02, 0x41, 0x38, 0x56, 0x17, + 0x26, 0x9e, 0xfc, 0xa4, 0x0a, 0x51, 0x21, 0xa6, 0x7f, 0x51, 0x83, 0x8b, 0x99, 0x56, 0xc7, 0x90, + 0x17, 0xce, 0xd1, 0x8a, 0xe6, 0x0f, 0x86, 0x61, 0x86, 0x19, 0xfb, 0xb9, 0x86, 0xc3, 0x15, 0x30, + 0xe7, 0x70, 0x41, 0xf9, 0x00, 0x4c, 0xd8, 0xed, 0x76, 0x37, 0xa4, 0xac, 0x5a, 0xe8, 0xd0, 0xd9, + 0x37, 0x6f, 0xc8, 0x42, 0x1c, 0xc3, 0x91, 0x2b, 0x8e, 0x42, 0xce, 0xc4, 0x57, 0xca, 0x7d, 0x39, + 0x75, 0x80, 0x0b, 0xf4, 0xd8, 0xe2, 0xe7, 0x55, 0xde, 0x49, 0xf9, 0xc3, 0x1a, 0x40, 0x10, 0xfa, + 0xb6, 0xdb, 0xa2, 0x85, 0xe2, 0xb8, 0xc4, 0xa7, 0x40, 0xb6, 0x19, 0x21, 0xe5, 0xc4, 0xa3, 0x39, + 0x8a, 0x01, 0x58, 0xa1, 0x8c, 0x16, 0x85, 0x94, 0xc0, 0x39, 0xfe, 0x37, 0xa7, 0xe4, 0xa1, 0x27, + 0xb2, 0xd1, 0x69, 0x84, 0x4b, 0x67, 0x2c, 0x46, 0xcc, 0x7f, 0x04, 0x26, 0x22, 0x7a, 0x47, 0x9d, + 0xba, 0x53, 0xca, 0xa9, 0x3b, 0xff, 0x02, 0x5c, 0x48, 0x75, 0xf7, 0x44, 0x87, 0xf6, 0x7f, 0xd0, + 0x00, 0x25, 0x47, 0x7f, 0x0e, 0x57, 0xbb, 0x56, 0xf2, 0x6a, 0xb7, 0x34, 0xf8, 0x27, 0x2b, 0xb8, + 0xdb, 0x7d, 0x65, 0x1a, 0x58, 0x74, 0x93, 0x28, 0x7a, 0x8c, 0x38, 0xb8, 0xe8, 0x39, 0x1b, 0x7b, + 0x48, 0x88, 0x9d, 0x3b, 0xc0, 0x39, 0x7b, 0x3f, 0x85, 0x2b, 0x3e, 0x67, 0xd3, 0x10, 0x9c, 0xa1, + 0x8b, 0x3e, 0xa3, 0xc1, 0xac, 0x91, 0x8c, 0x6e, 0x22, 0x67, 0xa6, 0x94, 0xf7, 0x6c, 0x2a, 0x52, + 0x4a, 0xdc, 0x97, 0x14, 0x20, 0xc0, 0x19, 0xb2, 0xe8, 0x43, 0x30, 0x65, 0x74, 0xec, 0xc5, 0xae, + 0x65, 0xd3, 0xab, 0x81, 0x0c, 0x4d, 0xc1, 0xae, 0xab, 0x8b, 0xeb, 0x8d, 0xa8, 0x1c, 0x27, 0x6a, + 0x45, 0x61, 0x44, 0xc4, 0x44, 0x0e, 0x0f, 0x18, 0x46, 0x44, 0xcc, 0x61, 0x1c, 0x46, 0x44, 0x4c, + 0x9d, 0x4a, 0x04, 0xb9, 0x00, 0x9e, 0x6d, 0x99, 0x82, 0x24, 0x7f, 0xb5, 0x2b, 0x75, 0x43, 0x7e, + 0xd0, 0xa8, 0xd7, 0x04, 0x45, 0x76, 0xfa, 0xc5, 0xbf, 0xb1, 0x42, 0x01, 0x7d, 0x4e, 0x83, 0x69, + 0xc1, 0xbb, 0x05, 0xcd, 0x31, 0xf6, 0x89, 0x5e, 0x2b, 0xbb, 0x5e, 0x52, 0x6b, 0x72, 0x01, 0xab, + 0xc8, 0x39, 0xdf, 0x89, 0x1c, 0x6c, 0x12, 0x30, 0x9c, 0xec, 0x07, 0xfa, 0x7b, 0x1a, 0x5c, 0x0e, + 0x88, 0xbf, 0x67, 0x9b, 0x64, 0xd1, 0x34, 0xbd, 0xae, 0x2b, 0xbf, 0xc3, 0x78, 0xf9, 0xa8, 0x0b, + 0xcd, 0x1c, 0x7c, 0xdc, 0xb2, 0x3b, 0x0f, 0x82, 0x73, 0xe9, 0x53, 0xb1, 0xec, 0xc2, 0x43, 0x23, + 0x34, 0x77, 0x6a, 0x86, 0xb9, 0xc3, 0x74, 0xe5, 0xdc, 0x98, 0xbb, 0xe4, 0xba, 0x7e, 0x25, 0x89, + 0x8a, 0xbf, 0x3a, 0xa7, 0x0a, 0x71, 0x9a, 0x20, 0xf2, 0x60, 0xdc, 0x17, 0x21, 0xa3, 0xe6, 0xa0, + 0xbc, 0x48, 0x91, 0x89, 0x3f, 0xc5, 0x05, 0x7b, 0xf9, 0x0b, 0x47, 0x44, 0x50, 0x0b, 0x9e, 0xe0, + 0x57, 0x9b, 0x45, 0xd7, 0x73, 0x7b, 0x6d, 0xaf, 0x1b, 0x2c, 0x76, 0xc3, 0x1d, 0xe2, 0x86, 0x52, + 0x57, 0x39, 0xc9, 0x8e, 0x51, 0x66, 0xcf, 0xbe, 0xdc, 0xaf, 0x22, 0xee, 0x8f, 0x07, 0xbd, 0x0a, + 0xe3, 0x64, 0x8f, 0xb8, 0xe1, 0xc6, 0xc6, 0x0a, 0xb3, 0x0b, 0x3f, 0xb9, 0xb4, 0xc7, 0x86, 0xb0, + 0x2c, 0x70, 0xe0, 0x08, 0x1b, 0xda, 0x85, 0x31, 0x87, 0xc7, 0xfc, 0x9a, 0x9b, 0x2e, 0xcf, 0x14, + 0xd3, 0xf1, 0xc3, 0xf8, 0xfd, 0x4f, 0xfc, 0xc0, 0x92, 0x02, 0xea, 0xc0, 0x4d, 0x8b, 0x6c, 0x1b, + 0x5d, 0x27, 0x5c, 0xf3, 0x42, 0x2a, 0xd2, 0xf6, 0x62, 0xfd, 0x94, 0x74, 0x01, 0x98, 0x61, 0x0e, + 0xd2, 0x4f, 0x1d, 0x1e, 0x54, 0x6f, 0xd6, 0x8f, 0xa8, 0x8b, 0x8f, 0xc4, 0x86, 0x7a, 0xf0, 0xa4, + 0xa8, 0xb3, 0xe9, 0xfa, 0xc4, 0x30, 0x77, 0xe8, 0x2c, 0x67, 0x89, 0x5e, 0x60, 0x44, 0xff, 0xbf, + 0xc3, 0x83, 0xea, 0x93, 0xf5, 0xa3, 0xab, 0xe3, 0xe3, 0xe0, 0x9c, 0xff, 0x04, 0xa0, 0xec, 0x3e, + 0x3f, 0xea, 0xc0, 0x1e, 0x57, 0x0f, 0xec, 0x2f, 0x8c, 0xc0, 0x75, 0xca, 0x3e, 0x62, 0x31, 0x75, + 0xd5, 0x70, 0x8d, 0xd6, 0x37, 0xe6, 0xd1, 0xf6, 0x8b, 0x1a, 0x3c, 0xb6, 0x93, 0x7f, 0x85, 0x14, + 0x82, 0xf2, 0x4b, 0xa5, 0xae, 0xfa, 0xfd, 0x6e, 0xa5, 0x7c, 0x67, 0xf5, 0xad, 0x82, 0x8b, 0x3a, + 0x85, 0x3e, 0x01, 0xb3, 0xae, 0x67, 0x91, 0x5a, 0xa3, 0x8e, 0x57, 0x8d, 0x60, 0xb7, 0x29, 0x5f, + 0xfe, 0x46, 0xb8, 0xcd, 0xc9, 0x5a, 0x0a, 0x86, 0x33, 0xb5, 0xd1, 0x1e, 0xa0, 0x8e, 0x67, 0x2d, + 0xef, 0xd9, 0xa6, 0x7c, 0x73, 0x2a, 0x6f, 0xe7, 0xc2, 0x1e, 0xb6, 0xd6, 0x33, 0xd8, 0x70, 0x0e, + 0x05, 0x76, 0x07, 0xa6, 0x9d, 0x59, 0xf5, 0x5c, 0x3b, 0xf4, 0x7c, 0xe6, 0x07, 0x33, 0xd0, 0x55, + 0x90, 0xdd, 0x81, 0xd7, 0x72, 0x31, 0xe2, 0x02, 0x4a, 0xfa, 0xff, 0xd0, 0xe0, 0x02, 0x5d, 0x16, + 0xeb, 0xbe, 0xb7, 0xdf, 0xfb, 0x46, 0x5c, 0x90, 0xcf, 0x08, 0x23, 0x08, 0xae, 0xbb, 0xb9, 0xa2, + 0x18, 0x40, 0x4c, 0xb0, 0x3e, 0xc7, 0x36, 0x0f, 0xaa, 0xfa, 0x6a, 0xa8, 0x58, 0x7d, 0xa5, 0x7f, + 0xae, 0xc2, 0x45, 0x4c, 0xa9, 0x3e, 0xfa, 0x86, 0xdc, 0x87, 0x1f, 0x81, 0x69, 0x5a, 0xb6, 0x6a, + 0xec, 0xaf, 0xd7, 0x5f, 0xf6, 0x1c, 0xe9, 0xca, 0xc3, 0xcc, 0x73, 0xef, 0xab, 0x00, 0x9c, 0xac, + 0x87, 0x6e, 0xc3, 0x58, 0x87, 0x3b, 0x3c, 0x8b, 0xcb, 0xcd, 0x4d, 0x6e, 0x29, 0xc0, 0x8a, 0x1e, + 0x1d, 0x54, 0x2f, 0xc6, 0x8f, 0x25, 0xa2, 0x10, 0xcb, 0x06, 0xfa, 0x67, 0xaf, 0x00, 0x43, 0xee, + 0x90, 0xf0, 0x1b, 0x71, 0x4e, 0x9e, 0x85, 0x49, 0xb3, 0xd3, 0xad, 0xdd, 0x69, 0xbe, 0xd4, 0xf5, + 0xd8, 0xa5, 0x95, 0xc5, 0x66, 0xa4, 0x32, 0x67, 0x6d, 0x7d, 0x53, 0x16, 0x63, 0xb5, 0x0e, 0xe5, + 0x0e, 0x66, 0xa7, 0x2b, 0xf8, 0xed, 0xba, 0x6a, 0xa3, 0xca, 0xb8, 0x43, 0x6d, 0x7d, 0x33, 0x01, + 0xc3, 0x99, 0xda, 0xe8, 0x07, 0x60, 0x8a, 0x88, 0x8d, 0x7b, 0xcf, 0xf0, 0x2d, 0xc1, 0x17, 0x1a, + 0x65, 0x07, 0x1f, 0x4d, 0xad, 0xe4, 0x06, 0x5c, 0x54, 0x5f, 0x56, 0x48, 0xe0, 0x04, 0x41, 0xf4, + 0x5d, 0x70, 0x4d, 0xfe, 0xa6, 0x5f, 0xd9, 0xb3, 0xd2, 0x8c, 0x62, 0x84, 0xfb, 0x98, 0x2e, 0x17, + 0x55, 0xc2, 0xc5, 0xed, 0xd1, 0x2f, 0x68, 0x70, 0x35, 0x82, 0xda, 0xae, 0xdd, 0xee, 0xb6, 0x31, + 0x31, 0x1d, 0xc3, 0x6e, 0x0b, 0x01, 0xfd, 0x95, 0x53, 0x1b, 0x68, 0x12, 0x3d, 0x67, 0x56, 0xf9, + 0x30, 0x5c, 0xd0, 0x25, 0xf4, 0x45, 0x0d, 0x6e, 0x4a, 0xd0, 0xba, 0x4f, 0x82, 0xa0, 0xeb, 0x93, + 0xd8, 0x91, 0x4c, 0x4c, 0xc9, 0x58, 0x29, 0xde, 0xc9, 0x24, 0x95, 0xe5, 0x23, 0x70, 0xe3, 0x23, + 0xa9, 0xab, 0xcb, 0xa5, 0xe9, 0x6d, 0x87, 0x42, 0xa2, 0x3f, 0xab, 0xe5, 0x42, 0x49, 0xe0, 0x04, + 0x41, 0xf4, 0xcf, 0x35, 0x78, 0x4c, 0x2d, 0x50, 0x57, 0x0b, 0x17, 0xe5, 0x5f, 0x3d, 0xb5, 0xce, + 0xa4, 0xf0, 0x73, 0x5d, 0x70, 0x01, 0x10, 0x17, 0xf5, 0x8a, 0xb2, 0xed, 0x36, 0x5b, 0x98, 0x5c, + 0xdc, 0x1f, 0xe1, 0x6c, 0x9b, 0xaf, 0xd5, 0x00, 0x4b, 0x18, 0xbd, 0xe8, 0x76, 0x3c, 0x6b, 0xdd, + 0xb6, 0x82, 0x15, 0xbb, 0x6d, 0x87, 0x4c, 0x28, 0x1f, 0xe2, 0xd3, 0xb1, 0xee, 0x59, 0xeb, 0x8d, + 0x3a, 0x2f, 0xc7, 0x89, 0x5a, 0xcc, 0xa5, 0xdb, 0x6e, 0x1b, 0x2d, 0xb2, 0xde, 0x75, 0x9c, 0x75, + 0xdf, 0x63, 0x0a, 0xc3, 0x3a, 0x31, 0x2c, 0xc7, 0x76, 0x49, 0x49, 0x21, 0x9c, 0x6d, 0xb7, 0x46, + 0x11, 0x52, 0x5c, 0x4c, 0x0f, 0x2d, 0x00, 0x6c, 0x1b, 0xb6, 0xd3, 0x7c, 0x68, 0x74, 0x1e, 0xb8, + 0x4c, 0x52, 0x1f, 0xe7, 0x57, 0xd8, 0x3b, 0x51, 0x29, 0x56, 0x6a, 0xd0, 0xd5, 0x44, 0xb9, 0x20, + 0x26, 0x3c, 0x94, 0x10, 0x93, 0xaa, 0x4f, 0x63, 0x35, 0x49, 0x84, 0x7c, 0xfa, 0xee, 0x2b, 0x24, + 0x70, 0x82, 0x20, 0xfa, 0xb4, 0x06, 0x33, 0x41, 0x2f, 0x08, 0x49, 0x3b, 0xea, 0xc3, 0x85, 0xd3, + 0xee, 0x03, 0x53, 0xa5, 0x36, 0x13, 0x44, 0x70, 0x8a, 0x28, 0x32, 0xe0, 0x3a, 0x9b, 0xd5, 0xbb, + 0xb5, 0x7b, 0x76, 0x6b, 0x27, 0x72, 0xd4, 0x5e, 0x27, 0xbe, 0x49, 0xdc, 0x70, 0x6e, 0x96, 0xad, + 0x1b, 0x66, 0x4a, 0xd3, 0x28, 0xae, 0x86, 0xfb, 0xe1, 0x40, 0xaf, 0xc3, 0xbc, 0x00, 0xaf, 0x78, + 0x0f, 0x33, 0x14, 0x2e, 0x32, 0x0a, 0xcc, 0x74, 0xa8, 0x51, 0x58, 0x0b, 0xf7, 0xc1, 0x80, 0x1a, + 0x70, 0x29, 0x20, 0x3e, 0x7b, 0x09, 0x21, 0xd1, 0xe2, 0x09, 0xe6, 0x50, 0x6c, 0x35, 0xdc, 0xcc, + 0x82, 0x71, 0x5e, 0x1b, 0xf4, 0x42, 0xe4, 0x98, 0xd4, 0xa3, 0x05, 0x2f, 0xad, 0x37, 0xe7, 0x2e, + 0xb1, 0xfe, 0x5d, 0x52, 0xfc, 0x8d, 0x24, 0x08, 0xa7, 0xeb, 0x52, 0xd9, 0x42, 0x16, 0x2d, 0x75, + 0xfd, 0x20, 0x9c, 0xbb, 0xcc, 0x1a, 0x33, 0xd9, 0x02, 0xab, 0x00, 0x9c, 0xac, 0x87, 0x6e, 0xc3, + 0x4c, 0x40, 0x4c, 0xd3, 0x6b, 0x77, 0xc4, 0xf5, 0x6a, 0xee, 0x0a, 0xeb, 0x3d, 0xff, 0x82, 0x09, + 0x08, 0x4e, 0xd5, 0x44, 0x3d, 0xb8, 0x14, 0x05, 0xd6, 0x59, 0xf1, 0x5a, 0xab, 0xc6, 0x3e, 0x13, + 0xd5, 0xaf, 0x1e, 0xbd, 0x03, 0x17, 0xe4, 0xd3, 0xf6, 0xc2, 0x4b, 0x5d, 0xc3, 0x0d, 0xed, 0xb0, + 0xc7, 0xa7, 0xab, 0x96, 0x45, 0x87, 0xf3, 0x68, 0xa0, 0x15, 0xb8, 0x9c, 0x2a, 0xbe, 0x63, 0x3b, + 0x24, 0x98, 0x7b, 0x8c, 0x0d, 0x9b, 0xe9, 0x48, 0x6a, 0x39, 0x70, 0x9c, 0xdb, 0x0a, 0x3d, 0x80, + 0x2b, 0x1d, 0xdf, 0x0b, 0x89, 0x19, 0xde, 0xa7, 0xe2, 0x89, 0x23, 0x06, 0x18, 0xcc, 0xcd, 0xb1, + 0xb9, 0x60, 0xaf, 0x40, 0xeb, 0x79, 0x15, 0x70, 0x7e, 0x3b, 0xf4, 0x05, 0x0d, 0x6e, 0x04, 0xa1, + 0x4f, 0x8c, 0xb6, 0xed, 0xb6, 0x6a, 0x9e, 0xeb, 0x12, 0xc6, 0x26, 0x1b, 0x56, 0x6c, 0x74, 0x7f, + 0xad, 0x14, 0x9f, 0xd2, 0x0f, 0x0f, 0xaa, 0x37, 0x9a, 0x7d, 0x31, 0xe3, 0x23, 0x28, 0xa3, 0xb7, + 0x01, 0xda, 0xa4, 0xed, 0xf9, 0x3d, 0xca, 0x91, 0xe6, 0xe6, 0xcb, 0x1b, 0x31, 0xad, 0x46, 0x58, + 0xf8, 0xf6, 0x4f, 0xbc, 0x5f, 0xc5, 0x40, 0xac, 0x90, 0xd3, 0x0f, 0x2a, 0x70, 0x25, 0xf7, 0xe0, + 0xa1, 0x3b, 0x80, 0xd7, 0x5b, 0x94, 0x41, 0x76, 0xc5, 0x93, 0x0f, 0xdb, 0x01, 0xab, 0x49, 0x10, + 0x4e, 0xd7, 0xa5, 0x62, 0x21, 0xdb, 0xa9, 0x77, 0x9a, 0x71, 0xfb, 0x4a, 0x2c, 0x16, 0x36, 0x52, + 0x30, 0x9c, 0xa9, 0x8d, 0x6a, 0x70, 0x51, 0x94, 0x35, 0xe8, 0xcd, 0x2a, 0xb8, 0xe3, 0x13, 0x29, + 0x70, 0xd3, 0x3b, 0xca, 0xc5, 0x46, 0x1a, 0x88, 0xb3, 0xf5, 0xe9, 0x28, 0xe8, 0x0f, 0xb5, 0x17, + 0xc3, 0xf1, 0x28, 0xd6, 0x92, 0x20, 0x9c, 0xae, 0x2b, 0xaf, 0xbe, 0x89, 0x2e, 0x8c, 0xc4, 0xa3, + 0x58, 0x4b, 0xc1, 0x70, 0xa6, 0xb6, 0xfe, 0x1f, 0x87, 0xe1, 0xc9, 0x63, 0x08, 0x6b, 0xa8, 0x9d, + 0x3f, 0xdd, 0x27, 0xdf, 0xb8, 0xc7, 0xfb, 0x3c, 0x9d, 0x82, 0xcf, 0x73, 0x72, 0x7a, 0xc7, 0xfd, + 0x9c, 0x41, 0xd1, 0xe7, 0x3c, 0x39, 0xc9, 0xe3, 0x7f, 0xfe, 0x76, 0xfe, 0xe7, 0x2f, 0x39, 0xab, + 0x47, 0x2e, 0x97, 0x4e, 0xc1, 0x72, 0x29, 0x39, 0xab, 0xc7, 0x58, 0x5e, 0x7f, 0x34, 0x0c, 0x4f, + 0x1d, 0x47, 0x70, 0x2c, 0xb9, 0xbe, 0x72, 0x58, 0xde, 0x99, 0xae, 0xaf, 0x22, 0xbf, 0xa6, 0x33, + 0x5c, 0x5f, 0x39, 0x24, 0xcf, 0x7a, 0x7d, 0x15, 0xcd, 0xea, 0x59, 0xad, 0xaf, 0xa2, 0x59, 0x3d, + 0xc6, 0xfa, 0xfa, 0x8b, 0xf4, 0xf9, 0x10, 0xc9, 0x8b, 0x0d, 0x18, 0x32, 0x3b, 0xdd, 0x92, 0x4c, + 0x8a, 0x19, 0x08, 0xd5, 0xd6, 0x37, 0x31, 0xc5, 0x81, 0x30, 0x8c, 0xf2, 0xf5, 0x53, 0x92, 0x05, + 0x31, 0x0f, 0x19, 0xbe, 0x24, 0xb1, 0xc0, 0x44, 0xa7, 0x8a, 0x74, 0x76, 0x48, 0x9b, 0xf8, 0x86, + 0xd3, 0x0c, 0x3d, 0xdf, 0x68, 0x95, 0xe5, 0x36, 0x6c, 0xaa, 0x96, 0x53, 0xb8, 0x70, 0x06, 0x3b, + 0x9d, 0x90, 0x8e, 0x6d, 0x95, 0xe4, 0x2f, 0x6c, 0x42, 0xd6, 0x1b, 0x75, 0x4c, 0x71, 0xe8, 0xff, + 0x70, 0x02, 0x94, 0xc0, 0x75, 0xe8, 0xbb, 0xe0, 0x9a, 0xe1, 0x38, 0xde, 0xc3, 0x75, 0xdf, 0xde, + 0xb3, 0x1d, 0xd2, 0x22, 0x56, 0x24, 0x4c, 0x05, 0xc2, 0x8c, 0x8c, 0x5d, 0x98, 0x16, 0x8b, 0x2a, + 0xe1, 0xe2, 0xf6, 0xe8, 0x1d, 0x0d, 0x2e, 0x9a, 0xe9, 0x60, 0x61, 0x83, 0x18, 0x9a, 0x64, 0x22, + 0x8f, 0xf1, 0xfd, 0x94, 0x29, 0xc6, 0x59, 0xb2, 0xe8, 0x07, 0x35, 0xae, 0x94, 0x8b, 0x9e, 0x49, + 0xc4, 0x37, 0xbb, 0x7b, 0x4a, 0x0f, 0x8a, 0xb1, 0x76, 0x2f, 0x7e, 0xbb, 0x4a, 0x12, 0x44, 0x5f, + 0xd4, 0xe0, 0xca, 0x6e, 0xde, 0x5b, 0x82, 0xf8, 0xb2, 0x0f, 0xca, 0x76, 0xa5, 0xe0, 0x71, 0x82, + 0x8b, 0xb3, 0xb9, 0x15, 0x70, 0x7e, 0x47, 0xa2, 0x59, 0x8a, 0xd4, 0xab, 0x82, 0x09, 0x94, 0x9e, + 0xa5, 0x94, 0x9e, 0x36, 0x9e, 0xa5, 0x08, 0x80, 0x93, 0x04, 0x51, 0x07, 0x26, 0x76, 0xa5, 0x4e, + 0x5b, 0xe8, 0xb1, 0x6a, 0x65, 0xa9, 0x2b, 0x8a, 0x71, 0x6e, 0x48, 0x13, 0x15, 0xe2, 0x98, 0x08, + 0xda, 0x81, 0xb1, 0x5d, 0xce, 0x88, 0x84, 0xfe, 0x69, 0x71, 0xe0, 0xfb, 0x31, 0x57, 0x83, 0x88, + 0x22, 0x2c, 0xd1, 0xab, 0x56, 0xb4, 0xe3, 0x47, 0x38, 0x77, 0x7c, 0x41, 0x83, 0x2b, 0x7b, 0xc4, + 0x0f, 0x6d, 0x33, 0xfd, 0x92, 0x33, 0x51, 0xfe, 0x0e, 0xff, 0x72, 0x1e, 0x42, 0xbe, 0x4c, 0x72, + 0x41, 0x38, 0xbf, 0x0b, 0xf4, 0x46, 0xcf, 0x15, 0xf2, 0xcd, 0xd0, 0x08, 0x6d, 0x73, 0xc3, 0xdb, + 0x25, 0x6e, 0x9c, 0x5f, 0x85, 0x69, 0x82, 0xc6, 0xf9, 0x8d, 0x7e, 0xb9, 0xb8, 0x1a, 0xee, 0x87, + 0x43, 0xff, 0x53, 0x0d, 0x32, 0x6a, 0x65, 0xf4, 0xe3, 0x1a, 0x4c, 0x6d, 0x13, 0x23, 0xec, 0xfa, + 0xe4, 0xae, 0x11, 0x46, 0x1e, 0xe7, 0x2f, 0x9f, 0x86, 0x36, 0x7b, 0xe1, 0x8e, 0x82, 0x98, 0x1b, + 0x04, 0x44, 0x41, 0x2f, 0x55, 0x10, 0x4e, 0xf4, 0x60, 0xfe, 0x45, 0xb8, 0x98, 0x69, 0x78, 0xa2, + 0x17, 0xc6, 0x7f, 0xa5, 0x41, 0x5e, 0x4a, 0x20, 0xf4, 0x3a, 0x8c, 0x18, 0x96, 0x15, 0xc5, 0xf8, + 0x7f, 0xbe, 0x9c, 0x6d, 0x8a, 0xa5, 0x3a, 0xf6, 0xb3, 0x9f, 0x98, 0xa3, 0x45, 0x77, 0x00, 0x19, + 0x89, 0x17, 0xee, 0xd5, 0xd8, 0x5d, 0x95, 0xbd, 0x84, 0x2d, 0x66, 0xa0, 0x38, 0xa7, 0x85, 0xfe, + 0x23, 0x1a, 0xa0, 0x6c, 0x98, 0x54, 0xe4, 0xc3, 0xb8, 0x58, 0xca, 0xf2, 0x2b, 0xd5, 0x4b, 0xba, + 0x94, 0x24, 0xfc, 0xa3, 0x62, 0x43, 0x27, 0x51, 0x10, 0xe0, 0x88, 0x8e, 0xfe, 0x97, 0x1a, 0xc4, + 0x71, 0xc0, 0xd1, 0x87, 0x61, 0xd2, 0x22, 0x81, 0xe9, 0xdb, 0x9d, 0x30, 0xf6, 0xa6, 0x8a, 0xbc, + 0x32, 0xea, 0x31, 0x08, 0xab, 0xf5, 0x90, 0x0e, 0xa3, 0xa1, 0x11, 0xec, 0x36, 0xea, 0xe2, 0x52, + 0xc9, 0x44, 0x80, 0x0d, 0x56, 0x82, 0x05, 0x24, 0x0e, 0x19, 0x36, 0x74, 0x8c, 0x90, 0x61, 0x68, + 0xfb, 0x14, 0xe2, 0xa3, 0xa1, 0xa3, 0x63, 0xa3, 0xe9, 0x3f, 0x5f, 0x81, 0x0b, 0xb4, 0xca, 0xaa, + 0x61, 0xbb, 0x21, 0x71, 0x99, 0xef, 0x40, 0xc9, 0x49, 0x68, 0xc1, 0x74, 0x98, 0xf0, 0x8d, 0x3b, + 0xb9, 0x67, 0x59, 0x64, 0x4d, 0x93, 0xf4, 0x88, 0x4b, 0xe2, 0x45, 0xcf, 0x4b, 0xe7, 0x0d, 0x7e, + 0xfd, 0x7e, 0x52, 0x2e, 0x55, 0xe6, 0x91, 0xf1, 0x48, 0x38, 0x1a, 0x46, 0xc1, 0xe3, 0x13, 0x7e, + 0x1a, 0x1f, 0x81, 0x69, 0x61, 0x44, 0xcd, 0x63, 0xbf, 0x89, 0xeb, 0x37, 0x3b, 0x61, 0xee, 0xa8, + 0x00, 0x9c, 0xac, 0xa7, 0xff, 0x7e, 0x05, 0x92, 0x21, 0xea, 0xcb, 0xce, 0x52, 0x36, 0xf0, 0x5d, + 0xe5, 0xcc, 0x02, 0xdf, 0x7d, 0x90, 0xe5, 0x77, 0xe1, 0x89, 0xc0, 0xf8, 0x13, 0xb9, 0x9a, 0x95, + 0x85, 0xa7, 0xf1, 0x8a, 0x6a, 0xc4, 0xd3, 0x3a, 0x7c, 0xe2, 0x69, 0xfd, 0xb0, 0xb0, 0xae, 0x1c, + 0x49, 0x84, 0x1f, 0x94, 0xd6, 0x95, 0x17, 0x13, 0x0d, 0x15, 0x57, 0x93, 0x2f, 0x6b, 0x30, 0x26, + 0x62, 0x03, 0x1f, 0xc3, 0x95, 0x69, 0x1b, 0x46, 0xd8, 0x95, 0x67, 0x10, 0x69, 0xb0, 0xb9, 0xe3, + 0x79, 0x61, 0x22, 0x42, 0x32, 0xf3, 0x1d, 0x60, 0xff, 0x62, 0x8e, 0x9e, 0x19, 0xd8, 0xf9, 0xe6, + 0x8e, 0x1d, 0x12, 0x33, 0x94, 0x71, 0x57, 0xa5, 0x81, 0x9d, 0x52, 0x8e, 0x13, 0xb5, 0xf4, 0x9f, + 0x1a, 0x86, 0x9b, 0x02, 0x71, 0x46, 0x44, 0x8a, 0x18, 0x5c, 0x0f, 0x2e, 0x89, 0x6f, 0x5b, 0xf7, + 0x0d, 0x3b, 0x32, 0x3d, 0x28, 0x77, 0xf5, 0x15, 0xc9, 0xee, 0x32, 0xe8, 0x70, 0x1e, 0x0d, 0x1e, + 0x41, 0x94, 0x15, 0xdf, 0x23, 0x86, 0x13, 0xee, 0x48, 0xda, 0x95, 0x41, 0x22, 0x88, 0x66, 0xf1, + 0xe1, 0x5c, 0x2a, 0xcc, 0xf4, 0x41, 0x00, 0x6a, 0x3e, 0x31, 0x54, 0xbb, 0x8b, 0x01, 0xcc, 0xff, + 0x57, 0x73, 0x31, 0xe2, 0x02, 0x4a, 0x4c, 0x87, 0x68, 0xec, 0x33, 0x95, 0x04, 0x26, 0xa1, 0x6f, + 0xb3, 0x48, 0xd7, 0x91, 0x16, 0x7d, 0x35, 0x09, 0xc2, 0xe9, 0xba, 0xe8, 0x36, 0xcc, 0x30, 0x53, + 0x92, 0x38, 0xd4, 0xd5, 0x48, 0x1c, 0x4d, 0x61, 0x2d, 0x01, 0xc1, 0xa9, 0x9a, 0xfa, 0x27, 0x2b, + 0x30, 0xa5, 0x2e, 0xbb, 0x63, 0xf8, 0x35, 0x75, 0x95, 0xc3, 0x70, 0x00, 0x9f, 0x1b, 0x95, 0xea, + 0x31, 0xce, 0x43, 0xf4, 0x2a, 0xcc, 0x74, 0x19, 0x07, 0x91, 0xe1, 0x3a, 0xc4, 0xfa, 0xff, 0x16, + 0x3a, 0xca, 0xcd, 0x04, 0xe4, 0xd1, 0x41, 0x75, 0x5e, 0x45, 0x9f, 0x84, 0xe2, 0x14, 0x1e, 0xfd, + 0xb3, 0x43, 0x70, 0x29, 0xa7, 0x37, 0xcc, 0xe4, 0x80, 0xa4, 0x8e, 0xec, 0x41, 0x4c, 0x0e, 0x32, + 0xc7, 0x7f, 0x64, 0x72, 0x90, 0x86, 0xe0, 0x0c, 0x5d, 0xf4, 0x32, 0x0c, 0x99, 0xbe, 0x2d, 0x26, + 0xfc, 0x23, 0xa5, 0x2e, 0x9c, 0xb8, 0xb1, 0x34, 0x29, 0x28, 0x0e, 0xd5, 0x70, 0x03, 0x53, 0x84, + 0xf4, 0xe0, 0x51, 0xd9, 0x85, 0x94, 0x02, 0xd8, 0xc1, 0xa3, 0x72, 0x95, 0x00, 0x27, 0xeb, 0xa1, + 0x57, 0x61, 0x4e, 0xdc, 0x04, 0xa4, 0x8f, 0xb4, 0xe7, 0x06, 0x21, 0xdd, 0xd9, 0xa1, 0x60, 0xd4, + 0x8f, 0x1f, 0x1e, 0x54, 0xe7, 0xee, 0x17, 0xd4, 0xc1, 0x85, 0xad, 0xf5, 0x3f, 0x1f, 0x82, 0x49, + 0x25, 0x32, 0x3b, 0x5a, 0x1d, 0x44, 0x85, 0x12, 0x8f, 0x58, 0xaa, 0x51, 0x56, 0x61, 0xa8, 0xd5, + 0xe9, 0x96, 0xd4, 0xa1, 0x44, 0xe8, 0xee, 0x52, 0x74, 0xad, 0x4e, 0x17, 0xbd, 0x1c, 0x69, 0x65, + 0xca, 0xe9, 0x4d, 0x22, 0x8f, 0x96, 0x94, 0x66, 0x46, 0x6e, 0xc4, 0xe1, 0xc2, 0x8d, 0xd8, 0x86, + 0xb1, 0x40, 0xa8, 0x6c, 0x46, 0xca, 0x47, 0xa5, 0x51, 0x66, 0x5a, 0xa8, 0x68, 0xf8, 0x7d, 0x4f, + 0x6a, 0x70, 0x24, 0x0d, 0x2a, 0x4b, 0x76, 0x99, 0x9f, 0x2c, 0xbb, 0xc8, 0x8e, 0x73, 0x59, 0x72, + 0x93, 0x95, 0x60, 0x01, 0xc9, 0x1c, 0x51, 0x63, 0xc7, 0x3a, 0xa2, 0xfe, 0x4e, 0x05, 0x50, 0xb6, + 0x1b, 0xe8, 0x49, 0x18, 0x61, 0x7e, 0xf6, 0x82, 0x17, 0x45, 0x92, 0x3f, 0xf3, 0xb4, 0xc6, 0x1c, + 0x86, 0x9a, 0x22, 0xc6, 0x46, 0xb9, 0xcf, 0xc9, 0x6c, 0x76, 0x04, 0x3d, 0x25, 0x20, 0xc7, 0xcd, + 0x84, 0x53, 0x46, 0xde, 0x99, 0xbf, 0x09, 0x63, 0x6d, 0xdb, 0x65, 0x0f, 0x87, 0xe5, 0x34, 0x59, + 0xdc, 0xb4, 0x80, 0xa3, 0xc0, 0x12, 0x97, 0xfe, 0x47, 0x15, 0xba, 0xf4, 0x63, 0x89, 0xb7, 0x07, + 0x60, 0x74, 0x43, 0x8f, 0x33, 0x30, 0xb1, 0x03, 0x1a, 0xe5, 0xbe, 0x72, 0x84, 0x74, 0x31, 0x42, + 0xc8, 0x9f, 0xbc, 0xe2, 0xdf, 0x58, 0x21, 0x46, 0x49, 0x87, 0x76, 0x9b, 0xbc, 0x62, 0xbb, 0x96, + 0xf7, 0x50, 0x4c, 0xef, 0xa0, 0xa4, 0x37, 0x22, 0x84, 0x9c, 0x74, 0xfc, 0x1b, 0x2b, 0xc4, 0x28, + 0x6b, 0x61, 0x17, 0x67, 0x97, 0xa5, 0xca, 0x10, 0x7d, 0xf3, 0x1c, 0x47, 0x9e, 0xca, 0xe3, 0x9c, + 0xb5, 0xd4, 0x0a, 0xea, 0xe0, 0xc2, 0xd6, 0xfa, 0x2f, 0x68, 0x70, 0x25, 0x77, 0x2a, 0xd0, 0x5d, + 0xb8, 0x18, 0x9b, 0x79, 0xa9, 0xcc, 0x7e, 0x3c, 0x4e, 0xd1, 0x72, 0x3f, 0x5d, 0x01, 0x67, 0xdb, + 0xf0, 0x3c, 0xc0, 0x99, 0xc3, 0x44, 0xd8, 0x88, 0xa9, 0xa2, 0x91, 0x0a, 0xc6, 0x79, 0x6d, 0xf4, + 0xef, 0x4a, 0x74, 0x36, 0x9e, 0x2c, 0xba, 0x33, 0xb6, 0x48, 0x2b, 0x72, 0x8a, 0x8b, 0x76, 0xc6, + 0x12, 0x2d, 0xc4, 0x1c, 0x86, 0x9e, 0x50, 0x5d, 0x4d, 0x23, 0xbe, 0x25, 0xdd, 0x4d, 0xf5, 0xef, + 0x81, 0xc7, 0x0a, 0x5e, 0x42, 0x51, 0x1d, 0xa6, 0x82, 0x87, 0x46, 0x67, 0x89, 0xec, 0x18, 0x7b, + 0xb6, 0x08, 0x5d, 0xc0, 0xcd, 0xf7, 0xa6, 0x9a, 0x4a, 0xf9, 0xa3, 0xd4, 0x6f, 0x9c, 0x68, 0xa5, + 0x87, 0x00, 0xc2, 0xcc, 0xd3, 0x76, 0x5b, 0x68, 0x1b, 0xc6, 0x0d, 0x91, 0x86, 0x56, 0xac, 0xe3, + 0x6f, 0x2f, 0xa5, 0x04, 0x10, 0x38, 0xb8, 0xfd, 0xb9, 0xfc, 0x85, 0x23, 0xdc, 0xfa, 0x3f, 0xd1, + 0xe0, 0x6a, 0xbe, 0xb3, 0xfa, 0x31, 0x44, 0x9b, 0x36, 0x4c, 0xfa, 0x71, 0x33, 0xb1, 0xe8, 0xbf, + 0x4d, 0x8d, 0x56, 0xaa, 0x84, 0xe7, 0xa2, 0x62, 0x5f, 0xcd, 0xf7, 0x02, 0xf9, 0xe5, 0xd3, 0x01, + 0x4c, 0xa3, 0x2b, 0x97, 0xd2, 0x13, 0xac, 0xe2, 0xd7, 0x7f, 0xad, 0x02, 0xb0, 0x46, 0xc2, 0x87, + 0x9e, 0xbf, 0x4b, 0xa7, 0xe8, 0xf1, 0xc4, 0x4d, 0x63, 0xfc, 0xeb, 0x17, 0x30, 0xe1, 0x71, 0x18, + 0xee, 0x78, 0x56, 0x20, 0xd8, 0x1f, 0xeb, 0x08, 0xb3, 0x80, 0x62, 0xa5, 0xa8, 0x0a, 0x23, 0xec, + 0xe1, 0x43, 0x9c, 0x4c, 0xec, 0x9e, 0x42, 0xa5, 0xcc, 0x00, 0xf3, 0x72, 0x9e, 0x5c, 0x8c, 0xf9, + 0x74, 0x04, 0xe2, 0xe2, 0x25, 0x92, 0x8b, 0xf1, 0x32, 0x1c, 0x41, 0xd1, 0x6d, 0x00, 0xbb, 0x73, + 0xc7, 0x68, 0xdb, 0x0e, 0x95, 0x79, 0x47, 0xa3, 0x5c, 0xb6, 0xd0, 0x58, 0x97, 0xa5, 0x8f, 0x0e, + 0xaa, 0xe3, 0xe2, 0x57, 0x0f, 0x2b, 0xb5, 0xf5, 0xbf, 0x1a, 0x82, 0x44, 0xde, 0xe7, 0x58, 0xc7, + 0xa4, 0x9d, 0x8d, 0x8e, 0xe9, 0x55, 0x98, 0x73, 0x3c, 0xc3, 0x5a, 0x32, 0x1c, 0xba, 0x1b, 0xfd, + 0x26, 0xff, 0x8c, 0x86, 0xdb, 0x8a, 0x92, 0xfb, 0x32, 0xae, 0xb4, 0x52, 0x50, 0x07, 0x17, 0xb6, + 0x46, 0x61, 0x94, 0x6d, 0x7a, 0xa8, 0xbc, 0xfb, 0xa3, 0x3a, 0x17, 0x0b, 0xaa, 0x27, 0x50, 0x24, + 0x60, 0xa4, 0x12, 0x52, 0x7f, 0x4a, 0x83, 0x2b, 0x64, 0x9f, 0x7b, 0xc2, 0x6d, 0xf8, 0xc6, 0xf6, + 0xb6, 0x6d, 0x0a, 0xbb, 0x54, 0xfe, 0x61, 0x57, 0x0e, 0x0f, 0xaa, 0x57, 0x96, 0xf3, 0x2a, 0x3c, + 0x3a, 0xa8, 0xde, 0xca, 0x75, 0x4c, 0x64, 0x9f, 0x35, 0xb7, 0x09, 0xce, 0x27, 0x35, 0xff, 0x3c, + 0x4c, 0x9e, 0xc0, 0x9b, 0x21, 0xe1, 0x7e, 0xf8, 0xeb, 0x15, 0x98, 0xa2, 0xeb, 0x6e, 0xc5, 0x33, + 0x0d, 0xa7, 0xbe, 0xd6, 0x3c, 0x41, 0xb6, 0x74, 0xb4, 0x02, 0x97, 0xb7, 0x3d, 0xdf, 0x24, 0x1b, + 0xb5, 0xf5, 0x0d, 0x4f, 0x3c, 0xb9, 0xd4, 0xd7, 0x9a, 0x82, 0x4b, 0xb3, 0x4b, 0xe4, 0x9d, 0x1c, + 0x38, 0xce, 0x6d, 0x85, 0x1e, 0xc0, 0x95, 0xb8, 0x7c, 0xb3, 0xc3, 0x0d, 0x59, 0x28, 0xba, 0xa1, + 0xd8, 0x10, 0xe7, 0x4e, 0x5e, 0x05, 0x9c, 0xdf, 0x0e, 0x19, 0x70, 0x5d, 0xc4, 0x24, 0xb9, 0xe3, + 0xf9, 0x0f, 0x0d, 0xdf, 0x4a, 0xa2, 0x1d, 0x8e, 0x55, 0xd2, 0xf5, 0xe2, 0x6a, 0xb8, 0x1f, 0x0e, + 0xfd, 0xa7, 0x47, 0x41, 0x71, 0x57, 0x3b, 0x41, 0x3a, 0xaa, 0x9f, 0xd3, 0xe0, 0xb2, 0xe9, 0xd8, + 0xc4, 0x0d, 0x53, 0xbe, 0x49, 0x9c, 0x1d, 0x6d, 0x96, 0xf2, 0xa3, 0xeb, 0x10, 0xb7, 0x51, 0x17, + 0x76, 0x3f, 0xb5, 0x1c, 0xe4, 0xc2, 0x36, 0x2a, 0x07, 0x82, 0x73, 0x3b, 0xc3, 0xc6, 0xc3, 0xca, + 0x1b, 0x75, 0x35, 0x98, 0x42, 0x4d, 0x94, 0xe1, 0x08, 0x8a, 0x9e, 0x85, 0xc9, 0x96, 0xef, 0x75, + 0x3b, 0x41, 0x8d, 0x19, 0x1b, 0xf3, 0xb5, 0xcf, 0xe4, 0xc2, 0xbb, 0x71, 0x31, 0x56, 0xeb, 0x50, + 0x29, 0x97, 0xff, 0x5c, 0xf7, 0xc9, 0xb6, 0xbd, 0x2f, 0x98, 0x1c, 0x93, 0x72, 0xef, 0x2a, 0xe5, + 0x38, 0x51, 0x8b, 0xf9, 0x43, 0x07, 0x41, 0x97, 0xf8, 0x9b, 0x78, 0x45, 0xe4, 0x71, 0xe0, 0xfe, + 0xd0, 0xb2, 0x10, 0xc7, 0x70, 0xf4, 0x13, 0x1a, 0xcc, 0xf8, 0xe4, 0xcd, 0xae, 0xed, 0x13, 0x8b, + 0x11, 0x0d, 0x84, 0xcf, 0x20, 0x1e, 0xcc, 0x4f, 0x71, 0x01, 0x27, 0x90, 0x72, 0x0e, 0x11, 0xa9, + 0xed, 0x92, 0x40, 0x9c, 0xea, 0x01, 0x9d, 0xaa, 0xc0, 0x6e, 0xb9, 0xb6, 0xdb, 0x5a, 0x74, 0x5a, + 0xc1, 0xdc, 0x38, 0x63, 0x7a, 0x5c, 0x84, 0x8e, 0x8b, 0xb1, 0x5a, 0x87, 0x5e, 0x2f, 0xbb, 0x01, + 0xdd, 0xf7, 0x6d, 0xc2, 0xe7, 0x77, 0x22, 0xd6, 0x6b, 0x6e, 0xaa, 0x00, 0x9c, 0xac, 0x87, 0x6e, + 0xc3, 0x8c, 0x2c, 0x10, 0xb3, 0x0c, 0x3c, 0x8a, 0x1e, 0xbb, 0xee, 0x27, 0x20, 0x38, 0x55, 0x73, + 0x7e, 0x11, 0x2e, 0xe5, 0x0c, 0xf3, 0x44, 0xcc, 0xe5, 0xff, 0x6a, 0x70, 0x85, 0xe7, 0xd2, 0x94, + 0x19, 0x20, 0x64, 0xb8, 0xbc, 0xfc, 0xc8, 0x73, 0xda, 0x99, 0x46, 0x9e, 0xfb, 0x3a, 0x44, 0xd8, + 0xd3, 0xff, 0x51, 0x05, 0xde, 0x7b, 0xe4, 0xbe, 0x44, 0x7f, 0x5f, 0x83, 0x49, 0xb2, 0x1f, 0xfa, + 0x46, 0xe4, 0x91, 0x41, 0x17, 0xe9, 0xf6, 0x99, 0x30, 0x81, 0x85, 0xe5, 0x98, 0x10, 0x5f, 0xb8, + 0x91, 0x88, 0xa5, 0x40, 0xb0, 0xda, 0x1f, 0x7a, 0x69, 0xe5, 0x51, 0x26, 0xd5, 0x07, 0x10, 0x91, + 0xe2, 0x58, 0x40, 0xe6, 0x3f, 0x0e, 0xb3, 0x69, 0xcc, 0x27, 0x5a, 0x2b, 0xbf, 0x5a, 0x81, 0xb1, + 0x75, 0xdf, 0xa3, 0xd2, 0xdf, 0x39, 0x84, 0x55, 0x30, 0x12, 0x91, 0xd7, 0x4b, 0x79, 0x4a, 0x8b, + 0xce, 0x16, 0x66, 0x7d, 0xb0, 0x53, 0x59, 0x1f, 0x16, 0x07, 0x21, 0xd2, 0x3f, 0xcd, 0xc3, 0xef, + 0x6a, 0x30, 0x29, 0x6a, 0x9e, 0x43, 0xf0, 0x80, 0xef, 0x4d, 0x06, 0x0f, 0xf8, 0xd8, 0x00, 0xe3, + 0x2a, 0x88, 0x1a, 0xf0, 0x05, 0x0d, 0xa6, 0x45, 0x8d, 0x55, 0xd2, 0xde, 0x22, 0x3e, 0xba, 0x03, + 0x63, 0x41, 0x97, 0x7d, 0x48, 0x31, 0xa0, 0xeb, 0xea, 0x7d, 0xc2, 0xdf, 0x32, 0x4c, 0x96, 0xa7, + 0x9b, 0x57, 0x51, 0x72, 0x29, 0xf0, 0x02, 0x2c, 0x1b, 0xd3, 0xdb, 0x8b, 0xef, 0x39, 0x99, 0x70, + 0x52, 0xd8, 0x73, 0x08, 0x66, 0x10, 0x2a, 0x98, 0xd3, 0xbf, 0x52, 0x85, 0xc7, 0x04, 0x73, 0x0a, + 0x0e, 0x30, 0x2f, 0xd7, 0x3f, 0x3d, 0x1c, 0x4d, 0x36, 0x8b, 0x77, 0x7e, 0x0f, 0x26, 0x4c, 0x9f, + 0x18, 0x21, 0xb1, 0x96, 0x7a, 0xc7, 0xe9, 0x1c, 0x3b, 0xae, 0x6a, 0xb2, 0x05, 0x8e, 0x1b, 0xd3, + 0x93, 0x41, 0x7d, 0x73, 0xaa, 0xc4, 0x87, 0x68, 0xe1, 0x7b, 0xd3, 0xb7, 0xc3, 0x88, 0xf7, 0xd0, + 0x8d, 0x4c, 0x57, 0xfa, 0x12, 0x66, 0x43, 0x79, 0x40, 0x6b, 0x63, 0xde, 0x48, 0x0d, 0xa7, 0x36, + 0xdc, 0x27, 0x9c, 0x9a, 0x03, 0x63, 0x6d, 0xf6, 0x19, 0x06, 0x0a, 0xad, 0x9f, 0xf8, 0xa0, 0x6a, + 0xf2, 0x25, 0x86, 0x19, 0x4b, 0x12, 0xf4, 0x84, 0xa7, 0xa7, 0x50, 0xd0, 0x31, 0x4c, 0xa2, 0x9e, + 0xf0, 0x6b, 0xb2, 0x10, 0xc7, 0x70, 0xd4, 0x4b, 0xc6, 0xe9, 0x1b, 0x2b, 0xaf, 0xc1, 0x13, 0xdd, + 0x53, 0x42, 0xf3, 0xf1, 0xa9, 0x2f, 0x8c, 0xd5, 0xf7, 0xa3, 0xc3, 0xd1, 0x22, 0x15, 0x99, 0x32, + 0xf2, 0x73, 0x4b, 0x6b, 0xa5, 0x72, 0x4b, 0x7f, 0xab, 0x8c, 0x27, 0x5b, 0x49, 0x24, 0x0a, 0x8b, + 0xe2, 0xc9, 0x4e, 0x09, 0xd2, 0x89, 0x18, 0xb2, 0x5d, 0xb8, 0x14, 0x84, 0x86, 0x43, 0x9a, 0xb6, + 0xd0, 0x74, 0x04, 0xa1, 0xd1, 0xee, 0x94, 0x08, 0xe8, 0xca, 0xfd, 0x17, 0xb2, 0xa8, 0x70, 0x1e, + 0x7e, 0xf4, 0x43, 0x1a, 0xcc, 0xb1, 0xf2, 0xc5, 0x6e, 0xe8, 0xf1, 0xc8, 0xe3, 0x31, 0xf1, 0x93, + 0x3f, 0x6c, 0xb3, 0x0b, 0x60, 0xb3, 0x00, 0x1f, 0x2e, 0xa4, 0x84, 0xde, 0x86, 0x2b, 0xf4, 0x04, + 0x5e, 0x34, 0x43, 0x7b, 0xcf, 0x0e, 0x7b, 0x71, 0x17, 0x4e, 0x1e, 0xc5, 0x95, 0x5d, 0x36, 0x56, + 0xf2, 0x90, 0xe1, 0x7c, 0x1a, 0xfa, 0x5f, 0x68, 0x80, 0xb2, 0x4b, 0x08, 0x39, 0x30, 0x6e, 0x49, + 0x87, 0x02, 0xed, 0x54, 0x82, 0x48, 0x46, 0x9c, 0x39, 0xf2, 0x43, 0x88, 0x28, 0x20, 0x0f, 0x26, + 0x1e, 0xee, 0xd8, 0x21, 0x71, 0xec, 0x20, 0x3c, 0xa5, 0x98, 0x95, 0x51, 0x00, 0xb7, 0x57, 0x24, + 0x62, 0x1c, 0xd3, 0xd0, 0x7f, 0x6c, 0x18, 0xc6, 0xa3, 0x10, 0xda, 0x47, 0xbf, 0xf1, 0x76, 0x01, + 0x99, 0x4a, 0x1a, 0xb2, 0x41, 0x34, 0x30, 0x4c, 0x08, 0xab, 0x65, 0x90, 0xe1, 0x1c, 0x02, 0xe8, + 0x6d, 0xb8, 0x6c, 0xbb, 0xdb, 0xbe, 0x11, 0x84, 0x7e, 0x97, 0xe9, 0xca, 0x07, 0xc9, 0xe6, 0xc5, + 0xee, 0x50, 0x8d, 0x1c, 0x74, 0x38, 0x97, 0x08, 0x22, 0x30, 0xc6, 0x33, 0x05, 0xc8, 0x70, 0x82, + 0xa5, 0xf2, 0xd2, 0xf2, 0x0c, 0x04, 0x31, 0xd7, 0xe4, 0xbf, 0x03, 0x2c, 0x71, 0xf3, 0x50, 0x1f, + 0xfc, 0x7f, 0xf9, 0x1e, 0x2d, 0xd6, 0x7d, 0xad, 0x3c, 0xbd, 0x38, 0xc5, 0x31, 0x0f, 0xf5, 0x91, + 0x2c, 0xc4, 0x69, 0x82, 0xfa, 0x6f, 0x6b, 0x30, 0xc2, 0x1d, 0x75, 0xcf, 0x5e, 0x82, 0xfb, 0x9e, + 0x84, 0x04, 0x57, 0x2a, 0x21, 0x11, 0xeb, 0x6a, 0x61, 0xaa, 0x9c, 0x2f, 0x6b, 0x30, 0xc1, 0x6a, + 0x9c, 0x83, 0x48, 0xf5, 0x7a, 0x52, 0xa4, 0x7a, 0xbe, 0xf4, 0x68, 0x0a, 0x04, 0xaa, 0xdf, 0x1e, + 0x12, 0x63, 0x61, 0x12, 0x4b, 0x03, 0x2e, 0x09, 0x6b, 0xd8, 0x15, 0x7b, 0x9b, 0xd0, 0x25, 0x5e, + 0x37, 0x7a, 0xfc, 0x81, 0x68, 0x44, 0xf8, 0x62, 0x65, 0xc1, 0x38, 0xaf, 0x0d, 0xfa, 0x75, 0x8d, + 0xca, 0x06, 0xa1, 0x6f, 0x9b, 0x03, 0xe5, 0x9f, 0x89, 0xfa, 0xb6, 0xb0, 0xca, 0x91, 0xf1, 0x9b, + 0xc9, 0x66, 0x2c, 0x24, 0xb0, 0xd2, 0x47, 0x07, 0xd5, 0x6a, 0x8e, 0xca, 0x2c, 0xce, 0x45, 0x11, + 0x84, 0x9f, 0xfa, 0xe3, 0xbe, 0x55, 0x98, 0x9a, 0x5a, 0xf6, 0x18, 0xdd, 0x83, 0x91, 0xc0, 0xf4, + 0x3a, 0xe4, 0x24, 0x19, 0xb5, 0xa2, 0x09, 0x6e, 0xd2, 0x96, 0x98, 0x23, 0x98, 0x7f, 0x03, 0xa6, + 0xd4, 0x9e, 0xe7, 0xdc, 0x7c, 0xea, 0xea, 0xcd, 0xe7, 0xc4, 0x2f, 0x5d, 0xea, 0x4d, 0xe9, 0x37, + 0x2a, 0x30, 0xca, 0xf3, 0x52, 0x1f, 0x43, 0x19, 0x6f, 0xcb, 0xa0, 0xff, 0x03, 0xa4, 0xdb, 0x57, + 0x23, 0x64, 0xbe, 0xe6, 0xb9, 0xca, 0x1c, 0xa8, 0x71, 0xff, 0x91, 0x1b, 0xc5, 0x4d, 0x1d, 0x2a, + 0x9f, 0xf5, 0x87, 0x0f, 0xec, 0xac, 0x23, 0xa5, 0xfe, 0x9e, 0x06, 0x53, 0x89, 0x40, 0xb4, 0x6d, + 0x18, 0xf2, 0xa3, 0x7c, 0x70, 0x65, 0xdf, 0x2a, 0xa4, 0x4d, 0xd5, 0xf5, 0x3e, 0x95, 0x30, 0xa5, + 0x13, 0xc5, 0xac, 0xad, 0x9c, 0x52, 0xcc, 0x5a, 0xfd, 0x73, 0x1a, 0x5c, 0x95, 0x03, 0x4a, 0x46, + 0x64, 0x42, 0x4f, 0xc3, 0xb8, 0xd1, 0xb1, 0x99, 0x4a, 0x4d, 0x55, 0x4a, 0x2e, 0xae, 0x37, 0x58, + 0x19, 0x8e, 0xa0, 0xe8, 0x83, 0x30, 0x2e, 0x17, 0x9e, 0x10, 0x3b, 0x23, 0x9e, 0x15, 0xbd, 0xbe, + 0x44, 0x35, 0xd0, 0xfb, 0x94, 0xbc, 0x0c, 0x23, 0xb1, 0x9c, 0x10, 0x11, 0xe6, 0xaf, 0xc0, 0xfa, + 0xb7, 0xc1, 0x44, 0xb3, 0x79, 0x6f, 0xd1, 0x34, 0x49, 0x10, 0x9c, 0x40, 0xb9, 0xac, 0x7f, 0x66, + 0x08, 0xa6, 0x45, 0x68, 0x39, 0xdb, 0xb5, 0x6c, 0xb7, 0x75, 0x0e, 0x67, 0xca, 0x06, 0x4c, 0x70, + 0x6d, 0xc6, 0x11, 0xb9, 0xfb, 0x9a, 0xb2, 0x52, 0x3a, 0x80, 0x73, 0x04, 0xc0, 0x31, 0x22, 0x74, + 0x1f, 0x46, 0xdf, 0xa4, 0xfc, 0x4d, 0xee, 0x8b, 0x63, 0xb1, 0x99, 0x68, 0xd1, 0x33, 0xd6, 0x18, + 0x60, 0x81, 0x02, 0x05, 0xcc, 0xe8, 0x8f, 0x09, 0x5c, 0x83, 0xc4, 0xae, 0x48, 0xcc, 0x6c, 0x94, + 0x95, 0x65, 0x4a, 0xd8, 0x0e, 0xb2, 0x5f, 0x38, 0x22, 0xc4, 0xa2, 0xcf, 0x27, 0x5a, 0xbc, 0x4b, + 0xa2, 0xcf, 0x27, 0xfa, 0x5c, 0x70, 0x34, 0x3e, 0x0f, 0x57, 0x72, 0x27, 0xe3, 0x68, 0x71, 0x56, + 0xff, 0xa5, 0x0a, 0x0c, 0x37, 0x09, 0xb1, 0xce, 0x61, 0x65, 0xbe, 0x9e, 0x90, 0x76, 0xbe, 0xbd, + 0x74, 0xfc, 0xfb, 0x22, 0x65, 0xd5, 0x76, 0x4a, 0x59, 0xf5, 0xf1, 0xd2, 0x14, 0xfa, 0x6b, 0xaa, + 0x7e, 0xa6, 0x02, 0x40, 0xab, 0x2d, 0x19, 0xe6, 0x2e, 0xe7, 0x38, 0xd1, 0x6a, 0xd6, 0x92, 0x1c, + 0x27, 0xbb, 0x0c, 0xcf, 0xf3, 0xf1, 0x56, 0x87, 0x51, 0x9f, 0x9d, 0x44, 0xe2, 0xdd, 0x03, 0x78, + 0x42, 0x69, 0x5a, 0x82, 0x05, 0x24, 0xc9, 0x2d, 0x86, 0x4f, 0x89, 0x5b, 0xe8, 0xfb, 0xc0, 0x32, + 0x80, 0xd6, 0xd7, 0x9a, 0xa8, 0xad, 0xcc, 0x4e, 0xa5, 0xbc, 0x2c, 0x2f, 0xd0, 0x1d, 0xb9, 0xcb, + 0x3f, 0xa3, 0xc1, 0x85, 0x54, 0xdd, 0x63, 0xdc, 0xe9, 0xce, 0x84, 0x67, 0xea, 0xbf, 0xa5, 0xc1, + 0x38, 0xed, 0xcb, 0x39, 0x30, 0x9a, 0xff, 0x3f, 0xc9, 0x68, 0x3e, 0x5a, 0x76, 0x8a, 0x0b, 0xf8, + 0xcb, 0x9f, 0x55, 0x80, 0x25, 0x9a, 0x10, 0x26, 0x0a, 0xca, 0xcb, 0xbf, 0x56, 0xf0, 0xf2, 0x7f, + 0x53, 0x18, 0x0e, 0xa4, 0x74, 0x94, 0x8a, 0xf1, 0xc0, 0x07, 0x15, 0xdb, 0x80, 0xa1, 0xe4, 0xb6, + 0xc9, 0xb1, 0x0f, 0x78, 0x0b, 0xa6, 0x83, 0x1d, 0xcf, 0x0b, 0xa3, 0xc8, 0x06, 0xc3, 0xe5, 0xf5, + 0xd1, 0xcc, 0xc2, 0x5a, 0x0e, 0x85, 0x3f, 0x40, 0x35, 0x55, 0xdc, 0x38, 0x49, 0x0a, 0x2d, 0x00, + 0x6c, 0x39, 0x9e, 0xb9, 0x5b, 0x6b, 0xd4, 0xb1, 0xb4, 0xa8, 0x65, 0x46, 0x4b, 0x4b, 0x51, 0x29, + 0x56, 0x6a, 0x0c, 0x64, 0xcb, 0xf0, 0x27, 0x1a, 0x9f, 0xe9, 0x13, 0x2c, 0xde, 0x73, 0xe4, 0x28, + 0xef, 0x4f, 0x71, 0x14, 0x25, 0x4d, 0x7d, 0x82, 0xab, 0x54, 0xa5, 0xc0, 0x3e, 0x1c, 0xeb, 0x9f, + 0x13, 0xe9, 0xb5, 0x7e, 0x55, 0x0c, 0x33, 0xca, 0x55, 0xd2, 0x81, 0x69, 0x47, 0x4d, 0x99, 0x2a, + 0xf6, 0x48, 0xa9, 0x6c, 0xab, 0x91, 0x8b, 0x46, 0xa2, 0x18, 0x27, 0x09, 0xa0, 0x8f, 0xc0, 0xb4, + 0x1c, 0x1d, 0x9d, 0x4c, 0x69, 0xb9, 0xc1, 0x96, 0xc3, 0xba, 0x0a, 0xc0, 0xc9, 0x7a, 0xfa, 0xe7, + 0x2b, 0xf0, 0x04, 0xef, 0x3b, 0xd3, 0x18, 0xd4, 0x49, 0x87, 0xb8, 0x16, 0x71, 0xcd, 0x1e, 0x93, + 0x59, 0x2d, 0xaf, 0x85, 0xde, 0x86, 0xd1, 0x87, 0x84, 0x58, 0x91, 0x46, 0xfb, 0x95, 0xf2, 0xa9, + 0x5e, 0x0a, 0x48, 0xbc, 0xc2, 0xd0, 0x73, 0x8e, 0xce, 0xff, 0xc7, 0x82, 0x24, 0x25, 0xde, 0xf1, + 0xbd, 0xad, 0x48, 0xb4, 0x3a, 0x7d, 0xe2, 0xeb, 0x0c, 0x3d, 0x27, 0xce, 0xff, 0xc7, 0x82, 0xa4, + 0xbe, 0x0e, 0x4f, 0x1e, 0xa3, 0xe9, 0x49, 0x44, 0xe8, 0xa3, 0x30, 0xf2, 0xd1, 0x9f, 0x04, 0xe3, + 0x1f, 0x6a, 0xf0, 0x94, 0x82, 0x72, 0x79, 0x9f, 0x4a, 0xf5, 0x35, 0xa3, 0x63, 0x98, 0xf4, 0x8e, + 0xca, 0xbc, 0xb5, 0x4f, 0x94, 0x7a, 0xe2, 0x33, 0x1a, 0x8c, 0x71, 0x43, 0x1a, 0xc9, 0x7e, 0x5f, + 0x1f, 0x70, 0xca, 0x0b, 0xbb, 0x24, 0x63, 0x1a, 0xcb, 0xb1, 0xf1, 0xdf, 0x01, 0x96, 0xf4, 0xf5, + 0x7f, 0x33, 0x02, 0xdf, 0x74, 0x7c, 0x44, 0xe8, 0x4f, 0xb4, 0x6c, 0x9e, 0xdb, 0xf6, 0xd9, 0x76, + 0x3e, 0xd2, 0x62, 0x88, 0x8b, 0xf1, 0x2b, 0x99, 0xbc, 0x31, 0xa7, 0xa4, 0x20, 0x51, 0x92, 0xea, + 0xfe, 0x53, 0x0d, 0xa6, 0xe8, 0xb1, 0x14, 0x31, 0x17, 0xfe, 0x99, 0x3a, 0x67, 0x3c, 0xd2, 0x35, + 0x85, 0x64, 0xca, 0xf3, 0x52, 0x05, 0xe1, 0x44, 0xdf, 0xd0, 0x66, 0xf2, 0x35, 0x88, 0x5f, 0xb7, + 0x6e, 0xe4, 0x49, 0x23, 0x27, 0xc9, 0xca, 0x34, 0xef, 0xc0, 0x4c, 0x72, 0xe6, 0xcf, 0x52, 0xbd, + 0x33, 0xff, 0x22, 0x5c, 0xcc, 0x8c, 0xfe, 0x44, 0xca, 0x8d, 0xbf, 0x3d, 0x0c, 0x55, 0x65, 0xaa, + 0x13, 0xa6, 0x74, 0x52, 0x26, 0xf8, 0x29, 0x0d, 0x26, 0x0d, 0xd7, 0x15, 0xe6, 0x18, 0x72, 0xfd, + 0x5a, 0x03, 0x7e, 0xd5, 0x3c, 0x52, 0x0b, 0x8b, 0x31, 0x99, 0x94, 0xbd, 0x81, 0x02, 0xc1, 0x6a, + 0x6f, 0xfa, 0x18, 0xd5, 0x55, 0xce, 0xcd, 0xa8, 0x0e, 0x7d, 0xbf, 0x3c, 0x88, 0xf9, 0x32, 0x7a, + 0xf5, 0x0c, 0xe6, 0x86, 0x9d, 0xeb, 0xf9, 0xda, 0xb4, 0xf9, 0x8f, 0xc3, 0x6c, 0x7a, 0xe6, 0x4e, + 0xb4, 0x0a, 0x7e, 0x69, 0x28, 0xc1, 0xaa, 0x0b, 0xc9, 0x1f, 0x43, 0x87, 0xf8, 0xc5, 0xd4, 0x62, + 0xe1, 0x2c, 0xc0, 0x3e, 0xab, 0x09, 0x39, 0xdd, 0x15, 0x33, 0x74, 0x7e, 0x66, 0x98, 0x83, 0x7e, + 0xb2, 0x25, 0xb8, 0xa2, 0xcc, 0x8f, 0x92, 0x05, 0xef, 0x19, 0x18, 0xdb, 0xb3, 0x03, 0x5b, 0xc6, + 0xd1, 0x51, 0x4e, 0xe8, 0x97, 0x79, 0x31, 0x96, 0x70, 0x7d, 0x25, 0xb1, 0xf7, 0x37, 0xbc, 0x8e, + 0xe7, 0x78, 0xad, 0xde, 0xe2, 0x43, 0xc3, 0x27, 0xd8, 0xeb, 0x86, 0x02, 0xdb, 0x71, 0xcf, 0xfb, + 0x55, 0xb8, 0xa9, 0x60, 0xcb, 0x0d, 0x08, 0x70, 0x12, 0x74, 0xbf, 0x3b, 0x26, 0x45, 0x57, 0xe1, + 0x31, 0xf9, 0x2b, 0x1a, 0x5c, 0x23, 0x45, 0x47, 0x81, 0x90, 0x63, 0x5f, 0x3d, 0xab, 0xa3, 0x46, + 0xc4, 0x59, 0x2d, 0x02, 0xe3, 0xe2, 0x9e, 0xa1, 0x5e, 0x22, 0x17, 0x64, 0x65, 0x10, 0x3d, 0x5c, + 0xce, 0xf7, 0xee, 0x97, 0x09, 0x12, 0xfd, 0xac, 0x06, 0x97, 0x9d, 0x9c, 0xad, 0x23, 0x44, 0xd6, + 0xe6, 0x19, 0xec, 0x4a, 0xfe, 0xe6, 0x99, 0x07, 0xc1, 0xb9, 0x5d, 0x41, 0x3f, 0x5f, 0x18, 0xa9, + 0x62, 0xa4, 0x7c, 0x52, 0xfe, 0xa3, 0x16, 0x62, 0x89, 0xa0, 0x15, 0x9f, 0xd7, 0x00, 0x59, 0x19, + 0xb1, 0x58, 0x58, 0x91, 0xbc, 0x74, 0xea, 0xc2, 0x3f, 0x7f, 0xb4, 0xce, 0x96, 0xe3, 0x9c, 0x4e, + 0xb0, 0xef, 0x1c, 0xe6, 0x6c, 0x5f, 0x11, 0x82, 0x76, 0xd0, 0xef, 0x9c, 0xc7, 0x19, 0xf8, 0x77, + 0xce, 0x83, 0xe0, 0xdc, 0xae, 0xe8, 0x9f, 0x1b, 0xe3, 0x5a, 0x1a, 0xf6, 0xaa, 0xb8, 0x05, 0xa3, + 0x5b, 0x4c, 0xab, 0x27, 0xf6, 0x6d, 0x69, 0x15, 0x22, 0xd7, 0x0d, 0xf2, 0x3b, 0x12, 0xff, 0x1f, + 0x0b, 0xcc, 0xe8, 0x35, 0x18, 0xb2, 0xdc, 0x40, 0x6c, 0xb8, 0x8f, 0x0d, 0xa0, 0x0c, 0x8b, 0x5d, + 0x79, 0xea, 0x6b, 0x4d, 0x4c, 0x91, 0x22, 0x17, 0xc6, 0x5d, 0xa1, 0xd8, 0x10, 0x77, 0xcf, 0xd2, + 0x69, 0x46, 0x23, 0x05, 0x49, 0xa4, 0x96, 0x91, 0x25, 0x38, 0xa2, 0x41, 0xe9, 0xa5, 0x34, 0xf9, + 0xa5, 0xe9, 0x45, 0xaa, 0xbd, 0x7e, 0xda, 0xd3, 0x75, 0x55, 0x51, 0x37, 0x72, 0x7c, 0x45, 0xdd, + 0x74, 0xe1, 0xc3, 0x06, 0x81, 0xd1, 0xd0, 0xb0, 0xdd, 0x90, 0x2b, 0x6a, 0x4a, 0x3e, 0xc2, 0xd3, + 0xfe, 0x6f, 0x50, 0x2c, 0xb1, 0x46, 0x84, 0xfd, 0x0c, 0xb0, 0x40, 0x4e, 0x17, 0xd6, 0x1e, 0x4b, + 0xf6, 0x2d, 0x36, 0x66, 0xe9, 0x85, 0xc5, 0x53, 0x86, 0xf3, 0x85, 0xc5, 0xff, 0xc7, 0x02, 0x33, + 0x7a, 0x03, 0xc6, 0x03, 0x69, 0x36, 0x31, 0x3e, 0x68, 0x8e, 0x59, 0x61, 0x33, 0x21, 0xfc, 0x75, + 0x84, 0xb1, 0x44, 0x84, 0x1f, 0x6d, 0xc1, 0x98, 0xcd, 0x3d, 0x4c, 0x44, 0xe0, 0x9e, 0x8f, 0x0d, + 0x90, 0x62, 0x4d, 0x66, 0xc1, 0xe7, 0xe1, 0x1e, 0x24, 0x62, 0xfd, 0x77, 0x81, 0xeb, 0xd9, 0x85, + 0x65, 0xda, 0x36, 0x8c, 0x4b, 0x74, 0x83, 0xf8, 0x8d, 0xc9, 0xa4, 0x96, 0x7c, 0x68, 0x51, 0x8a, + 0xcb, 0x08, 0x37, 0xaa, 0xe5, 0xf9, 0xff, 0xc5, 0xa1, 0xfe, 0x8f, 0xe7, 0xfb, 0xf7, 0x26, 0xcb, + 0x42, 0x27, 0xbd, 0xf0, 0x87, 0xca, 0x2f, 0xad, 0xc8, 0x43, 0x3f, 0x91, 0x7d, 0x4e, 0x3a, 0xf1, + 0x2b, 0x44, 0x0a, 0x2c, 0xf7, 0x86, 0x4b, 0x59, 0xee, 0xbd, 0x00, 0x17, 0x84, 0xa5, 0x44, 0x83, + 0x25, 0x7c, 0x0f, 0x7b, 0xc2, 0xb5, 0x81, 0xd9, 0xd0, 0xd4, 0x92, 0x20, 0x9c, 0xae, 0x8b, 0x7e, + 0x43, 0x83, 0x71, 0x53, 0x88, 0x1c, 0x62, 0x5f, 0xad, 0x0c, 0xf6, 0x18, 0xb3, 0x20, 0x25, 0x18, + 0x2e, 0x4c, 0xbf, 0x2c, 0x79, 0x84, 0x2c, 0x3e, 0x25, 0xa5, 0x41, 0xd4, 0x6b, 0xf4, 0x3b, 0xf4, + 0xbe, 0xe0, 0xb0, 0x44, 0x9b, 0xcc, 0xd3, 0x99, 0xfb, 0x5c, 0x3c, 0x18, 0x70, 0x14, 0x8b, 0x31, + 0x46, 0x3e, 0x90, 0xef, 0x8c, 0x6e, 0x05, 0x31, 0xe4, 0x94, 0xc6, 0xa2, 0x76, 0x1f, 0xfd, 0x63, + 0x0d, 0x9e, 0xe2, 0x8e, 0x2e, 0x35, 0x2a, 0x45, 0xb0, 0x7c, 0xe5, 0x24, 0x4e, 0x90, 0x1e, 0xdb, + 0x19, 0x8e, 0x9f, 0xd8, 0xce, 0xf0, 0xe9, 0xc3, 0x83, 0xea, 0x53, 0xb5, 0x63, 0xe0, 0xc6, 0xc7, + 0xea, 0x01, 0x7a, 0x0b, 0xa6, 0x1d, 0x35, 0x1a, 0x8b, 0x60, 0x30, 0xa5, 0x54, 0xfd, 0x89, 0xb0, + 0x2e, 0x5c, 0xb7, 0x9b, 0x28, 0xc2, 0x49, 0x52, 0xf3, 0xbb, 0x30, 0x9d, 0x58, 0x68, 0x67, 0xaa, + 0x24, 0x71, 0x61, 0x36, 0xbd, 0x1e, 0xce, 0xd4, 0xe6, 0xe6, 0x3e, 0x4c, 0x44, 0x07, 0x15, 0x7a, + 0x42, 0x21, 0x14, 0x0b, 0x12, 0xf7, 0x49, 0x8f, 0x53, 0xad, 0x26, 0x2e, 0x78, 0x5c, 0x83, 0xff, + 0x32, 0x2d, 0x10, 0x08, 0xf5, 0xaf, 0x08, 0x0d, 0xfe, 0x06, 0x69, 0x77, 0x1c, 0x23, 0x24, 0xef, + 0xfe, 0xf7, 0x63, 0xfd, 0xbf, 0x6a, 0xfc, 0xbc, 0xe1, 0xc7, 0x2a, 0x32, 0x60, 0xb2, 0xcd, 0x43, + 0x0e, 0x33, 0xe7, 0x7e, 0xad, 0x7c, 0x58, 0x81, 0xd5, 0x18, 0x0d, 0x56, 0x71, 0xa2, 0x87, 0x30, + 0x21, 0x45, 0x1b, 0xa9, 0x91, 0xb8, 0x33, 0x98, 0x60, 0x10, 0x49, 0x51, 0xd1, 0xd3, 0xa4, 0x2c, + 0x09, 0x70, 0x4c, 0x4b, 0x37, 0x00, 0x65, 0xdb, 0xd0, 0x5b, 0xb0, 0x34, 0xa5, 0xd7, 0x92, 0x71, + 0xfc, 0x32, 0xe6, 0xf4, 0x47, 0xa6, 0xd6, 0xd6, 0x7f, 0xb3, 0x02, 0xb9, 0x69, 0xde, 0x90, 0x0e, + 0xa3, 0xdc, 0xbb, 0x4d, 0x66, 0xed, 0xa6, 0xa2, 0x0c, 0x77, 0x7d, 0xc3, 0x02, 0x82, 0x1e, 0x70, + 0x4d, 0x88, 0x6b, 0xb1, 0xf8, 0x79, 0x31, 0x97, 0x50, 0xfd, 0x28, 0x97, 0xf3, 0x2a, 0xe0, 0xfc, + 0x76, 0x68, 0x0f, 0x50, 0xdb, 0xd8, 0x4f, 0x63, 0x1b, 0x20, 0xa1, 0xd2, 0x6a, 0x06, 0x1b, 0xce, + 0xa1, 0x40, 0x0f, 0x52, 0xc3, 0x34, 0x49, 0x27, 0x24, 0x16, 0x1f, 0xa2, 0x7c, 0x40, 0x64, 0x07, + 0xe9, 0x62, 0x12, 0x84, 0xd3, 0x75, 0xf5, 0xaf, 0x0d, 0xc3, 0xb5, 0xe4, 0x24, 0xd2, 0x1d, 0x2a, + 0x1d, 0xd0, 0x5e, 0x94, 0xf6, 0xf5, 0x7c, 0x22, 0x9f, 0x49, 0xdb, 0xd7, 0xcf, 0xd5, 0x7c, 0xc2, + 0x8e, 0x64, 0xc3, 0x09, 0x64, 0xa3, 0x84, 0xad, 0xfd, 0xd7, 0xc1, 0x9b, 0xac, 0xc0, 0x6b, 0x6e, + 0xe8, 0x4c, 0xbd, 0xe6, 0xde, 0xd1, 0x60, 0x3e, 0x59, 0x7c, 0xc7, 0x76, 0xed, 0x60, 0x47, 0x44, + 0x81, 0x3b, 0xb9, 0x79, 0x3f, 0x4b, 0xba, 0xb0, 0x52, 0x88, 0x11, 0xf7, 0xa1, 0x86, 0x3e, 0xab, + 0xc1, 0xf5, 0xd4, 0xbc, 0x24, 0x62, 0xd2, 0x9d, 0xdc, 0xd2, 0x9f, 0xf9, 0xff, 0xae, 0x14, 0xa3, + 0xc4, 0xfd, 0xe8, 0xe9, 0xff, 0xa2, 0x02, 0x23, 0xec, 0xfd, 0xfb, 0xdd, 0x61, 0xf0, 0xcc, 0xba, + 0x5a, 0x68, 0x03, 0xd4, 0x4a, 0xd9, 0x00, 0xbd, 0x58, 0x9e, 0x44, 0x7f, 0x23, 0xa0, 0xef, 0x84, + 0xab, 0xac, 0xda, 0xa2, 0xc5, 0xd4, 0x32, 0x01, 0xb1, 0x16, 0x2d, 0x8b, 0x45, 0x1f, 0x38, 0x5a, + 0x17, 0xfd, 0x04, 0x0c, 0x75, 0x7d, 0x27, 0x1d, 0x8f, 0x63, 0x13, 0xaf, 0x60, 0x5a, 0xae, 0xbf, + 0xa3, 0xc1, 0x2c, 0xc3, 0xad, 0x6c, 0x5f, 0xb4, 0x07, 0xe3, 0xbe, 0xd8, 0xc2, 0xe2, 0xdb, 0xac, + 0x94, 0x1e, 0x5a, 0x0e, 0x5b, 0x10, 0x89, 0x28, 0xc5, 0x2f, 0x1c, 0xd1, 0xd2, 0xbf, 0x3a, 0x0a, + 0x73, 0x45, 0x8d, 0xd0, 0x4f, 0x68, 0x70, 0xd5, 0x8c, 0xa5, 0xb9, 0xc5, 0x6e, 0xb8, 0xe3, 0xf9, + 0x76, 0x68, 0x0b, 0xc3, 0x90, 0x92, 0xd7, 0xdc, 0xda, 0x62, 0xd4, 0x2b, 0x16, 0x43, 0xad, 0x96, + 0x4b, 0x01, 0x17, 0x50, 0x46, 0x6f, 0x03, 0xec, 0xc6, 0x41, 0x5b, 0x2b, 0xe5, 0xd3, 0x43, 0xb0, + 0x61, 0x2b, 0x81, 0x5d, 0x65, 0xa7, 0x98, 0x66, 0x53, 0x29, 0x57, 0xc8, 0x51, 0xe2, 0x41, 0xb0, + 0x73, 0x9f, 0xf4, 0x3a, 0x86, 0x2d, 0x9f, 0xff, 0xcb, 0x13, 0x6f, 0x36, 0xef, 0x09, 0x54, 0x49, + 0xe2, 0x4a, 0xb9, 0x42, 0x0e, 0x7d, 0x4a, 0x83, 0x69, 0x4f, 0x75, 0x55, 0x1e, 0xc4, 0xba, 0x32, + 0xd7, 0xe7, 0x99, 0x8b, 0xd0, 0x49, 0x50, 0x92, 0x24, 0x5d, 0x13, 0x17, 0x83, 0xf4, 0x91, 0x25, + 0x98, 0xda, 0xea, 0xe0, 0x59, 0x64, 0x95, 0xf3, 0x8f, 0x5f, 0xc7, 0xb3, 0xe0, 0x2c, 0x79, 0xd6, + 0x29, 0x12, 0x9a, 0xd6, 0xb2, 0x6b, 0xfa, 0x3d, 0xe6, 0x75, 0x48, 0x3b, 0x35, 0x5a, 0xbe, 0x53, + 0xcb, 0x1b, 0xb5, 0x7a, 0x02, 0x59, 0xb2, 0x53, 0x59, 0x70, 0x96, 0xbc, 0xfe, 0xc9, 0x0a, 0x3c, + 0x56, 0xb0, 0xc6, 0xfe, 0xda, 0xf8, 0x96, 0x7f, 0x59, 0x83, 0x09, 0x36, 0x07, 0xef, 0x12, 0x07, + 0x15, 0xd6, 0xd7, 0x02, 0x2b, 0xb9, 0xdf, 0xd2, 0xe0, 0x62, 0x26, 0x7a, 0xe7, 0xb1, 0xdc, 0x1b, + 0xce, 0xcd, 0x80, 0xeb, 0x7d, 0x71, 0xa4, 0xee, 0xa1, 0xd8, 0x59, 0x36, 0x1d, 0xa5, 0x5b, 0x7f, + 0x05, 0xa6, 0x13, 0x46, 0x72, 0x51, 0x1c, 0x20, 0x2d, 0x37, 0x0e, 0x90, 0x1a, 0xe6, 0xa7, 0xd2, + 0x2f, 0xcc, 0x4f, 0xbc, 0xe4, 0xb3, 0x9c, 0xed, 0xaf, 0xcd, 0x92, 0xff, 0xc3, 0x0b, 0x62, 0xc9, + 0xb3, 0x17, 0x87, 0xd7, 0x61, 0x94, 0x05, 0x15, 0x92, 0x27, 0xe6, 0xed, 0xd2, 0xc1, 0x8a, 0x02, + 0x7e, 0x93, 0xe2, 0xff, 0x63, 0x81, 0x15, 0xd5, 0x61, 0xd6, 0x74, 0xbc, 0xae, 0x25, 0x12, 0x6b, + 0xae, 0xc5, 0x97, 0xb6, 0x28, 0xe6, 0x64, 0x2d, 0x05, 0xc7, 0x99, 0x16, 0x08, 0xf3, 0x37, 0x0b, + 0x7e, 0x9e, 0x95, 0x8a, 0x39, 0x59, 0x5f, 0x6b, 0xf2, 0x9c, 0x0d, 0xd1, 0x5b, 0xc5, 0x9b, 0x00, + 0x44, 0x2e, 0x5e, 0xe9, 0x57, 0xf8, 0x42, 0xb9, 0x68, 0x9a, 0xd1, 0x16, 0x90, 0xc2, 0x67, 0x54, + 0x14, 0x60, 0x85, 0x08, 0xf2, 0x61, 0x72, 0xc7, 0xde, 0x22, 0xbe, 0xcb, 0xe5, 0xa8, 0x91, 0xf2, + 0x22, 0xe2, 0xbd, 0x18, 0x0d, 0xbf, 0xe3, 0x2b, 0x05, 0x58, 0x25, 0x82, 0x7c, 0x2e, 0x8e, 0x70, + 0xf5, 0xf0, 0x20, 0x29, 0xe6, 0x63, 0xbd, 0x73, 0x3c, 0xce, 0xb8, 0x0c, 0x2b, 0x54, 0x90, 0x0b, + 0xe0, 0x46, 0xd1, 0xc4, 0x06, 0x79, 0x71, 0x88, 0x63, 0x92, 0x71, 0xc1, 0x23, 0xfe, 0x8d, 0x15, + 0x0a, 0x74, 0x5e, 0xdb, 0x71, 0x78, 0x3a, 0xa1, 0x43, 0x7c, 0x71, 0xc0, 0x10, 0x81, 0x42, 0x77, + 0x12, 0x17, 0x60, 0x95, 0x08, 0x1d, 0x63, 0x3b, 0x0a, 0x2a, 0x27, 0x74, 0x84, 0xa5, 0xc6, 0x18, + 0x87, 0xa6, 0x13, 0x89, 0xbf, 0xa2, 0xdf, 0x58, 0xa1, 0x80, 0xde, 0x50, 0x9e, 0xba, 0xa0, 0xbc, + 0x06, 0xea, 0x58, 0xcf, 0x5c, 0x1f, 0x8e, 0x15, 0x31, 0x93, 0x6c, 0xaf, 0x5e, 0x57, 0x94, 0x30, + 0x2c, 0xd8, 0x1e, 0xe5, 0x1f, 0x19, 0xa5, 0x4c, 0x6c, 0x9e, 0x3b, 0xd5, 0xd7, 0x3c, 0xb7, 0x46, + 0x25, 0x34, 0xc5, 0x5d, 0x84, 0x31, 0x85, 0xe9, 0xf8, 0x85, 0xa3, 0x99, 0x06, 0xe2, 0x6c, 0x7d, + 0xce, 0xf4, 0x89, 0xc5, 0xda, 0xce, 0xa8, 0x4c, 0x9f, 0x97, 0xe1, 0x08, 0x8a, 0xf6, 0x60, 0x2a, + 0x50, 0x6c, 0x7d, 0x45, 0xb6, 0xc6, 0x01, 0xde, 0xa6, 0x84, 0x9d, 0x2f, 0x0b, 0xb3, 0xa4, 0x96, + 0xe0, 0x04, 0x1d, 0xf4, 0xb6, 0x6a, 0xdc, 0x38, 0x5b, 0xde, 0xb1, 0x33, 0x3f, 0x88, 0x60, 0xac, + 0x61, 0x8b, 0xec, 0xea, 0x54, 0x9b, 0xc3, 0x6e, 0xd2, 0x8c, 0xef, 0xe2, 0xa9, 0x38, 0xb2, 0x1f, + 0x69, 0xe6, 0x47, 0x3f, 0x2d, 0xd9, 0xef, 0x78, 0x41, 0xd7, 0x27, 0x2c, 0x38, 0x2a, 0xfb, 0x3c, + 0x28, 0xfe, 0xb4, 0xcb, 0x69, 0x20, 0xce, 0xd6, 0x47, 0x3f, 0xac, 0xc1, 0x2c, 0x4f, 0x76, 0x49, + 0x8f, 0x2e, 0xcf, 0x25, 0x6e, 0x18, 0xb0, 0x6c, 0x8e, 0x25, 0x7d, 0x2f, 0x9b, 0x29, 0x5c, 0x3c, + 0x43, 0x50, 0xba, 0x14, 0x67, 0x68, 0xd2, 0x95, 0xa3, 0xba, 0xc2, 0xb3, 0xa4, 0x90, 0x25, 0x57, + 0x8e, 0xea, 0x66, 0xcf, 0x57, 0x8e, 0x5a, 0x82, 0x13, 0x74, 0xd0, 0x47, 0x60, 0x3a, 0x90, 0x99, + 0x5b, 0xd8, 0x0c, 0x5e, 0x89, 0x63, 0x55, 0x35, 0x55, 0x00, 0x4e, 0xd6, 0xd3, 0xff, 0xad, 0x06, + 0x10, 0x69, 0x0f, 0xce, 0x43, 0x27, 0x6e, 0x25, 0x14, 0x2a, 0x4b, 0x03, 0x69, 0x3b, 0x48, 0xa1, + 0x66, 0xfc, 0x0f, 0x34, 0x98, 0x89, 0xab, 0x9d, 0x83, 0xa8, 0x6e, 0x26, 0x45, 0xf5, 0x8f, 0x0f, + 0x36, 0xae, 0x02, 0x79, 0xfd, 0xff, 0x54, 0xd4, 0x51, 0x31, 0x69, 0x6c, 0x2f, 0xf1, 0xc6, 0x4c, + 0x49, 0xdf, 0x1b, 0xe4, 0x8d, 0x59, 0x75, 0xcf, 0x8d, 0xc7, 0x9b, 0xf3, 0xe6, 0xfc, 0xb7, 0x12, + 0xb2, 0xd0, 0x00, 0x4e, 0xe8, 0x91, 0xe0, 0x23, 0x49, 0xf3, 0x09, 0x38, 0x4a, 0x30, 0x7a, 0x53, + 0x65, 0x95, 0xfc, 0xb5, 0xfa, 0x13, 0xe5, 0x3c, 0x9f, 0x95, 0x01, 0xf7, 0x65, 0x90, 0xfa, 0x97, + 0xa7, 0x61, 0x52, 0x51, 0xb4, 0xa5, 0x5e, 0xcc, 0xb5, 0xf3, 0x78, 0x31, 0x0f, 0x61, 0xd2, 0x8c, + 0x82, 0x8d, 0xcb, 0x69, 0x1f, 0x90, 0x66, 0xc4, 0xa2, 0xe3, 0x30, 0xe6, 0x01, 0x56, 0xc9, 0x50, + 0x41, 0x22, 0x5a, 0x63, 0x43, 0xa7, 0x60, 0xc7, 0xd0, 0x6f, 0x5d, 0x7d, 0x08, 0x40, 0xca, 0xa2, + 0xc4, 0x12, 0xd1, 0x22, 0x23, 0x23, 0xf4, 0x46, 0x70, 0x2f, 0x82, 0x61, 0xa5, 0x5e, 0xf6, 0x05, + 0x76, 0xe4, 0xdc, 0x5e, 0x60, 0xe9, 0x32, 0x70, 0x64, 0xae, 0x9b, 0x81, 0x6c, 0x72, 0xa2, 0x8c, + 0x39, 0xf1, 0x32, 0x88, 0x8a, 0x02, 0xac, 0x10, 0x29, 0x30, 0x9c, 0x18, 0x2b, 0x65, 0x38, 0xd1, + 0x85, 0x4b, 0x3e, 0x09, 0xfd, 0x5e, 0xad, 0x67, 0xb2, 0x14, 0x50, 0x7e, 0xc8, 0x6e, 0x94, 0xe3, + 0xe5, 0xa2, 0x17, 0xe1, 0x2c, 0x2a, 0x9c, 0x87, 0x3f, 0x21, 0x8c, 0x4d, 0xf4, 0x15, 0xc6, 0x3e, + 0x0c, 0x93, 0x21, 0x31, 0x77, 0x5c, 0xdb, 0x34, 0x9c, 0x46, 0x5d, 0x84, 0x52, 0x8c, 0xe5, 0x8a, + 0x18, 0x84, 0xd5, 0x7a, 0x68, 0x09, 0x86, 0xba, 0xb6, 0x25, 0xa4, 0xd1, 0x6f, 0x89, 0x54, 0xd6, + 0x8d, 0xfa, 0xa3, 0x83, 0xea, 0x7b, 0x63, 0x4b, 0x84, 0x68, 0x54, 0xb7, 0x3a, 0xbb, 0xad, 0x5b, + 0x61, 0xaf, 0x43, 0x82, 0x85, 0xcd, 0x46, 0x1d, 0xd3, 0xc6, 0x79, 0x46, 0x25, 0x53, 0x27, 0x30, + 0x2a, 0xf9, 0xbc, 0x06, 0x97, 0x8c, 0xb4, 0xb6, 0x9d, 0x04, 0x73, 0xd3, 0xe5, 0xb9, 0x65, 0xbe, + 0x06, 0x7f, 0xe9, 0xba, 0x18, 0xdf, 0xa5, 0xc5, 0x2c, 0x39, 0x9c, 0xd7, 0x07, 0xe4, 0x03, 0x6a, + 0xdb, 0xad, 0x28, 0xed, 0x8c, 0xf8, 0xea, 0x33, 0xe5, 0xf4, 0x08, 0xab, 0x19, 0x4c, 0x38, 0x07, + 0x3b, 0x7a, 0x08, 0x93, 0x66, 0xac, 0x93, 0x17, 0x52, 0x75, 0xfd, 0x34, 0x1e, 0x05, 0xf8, 0xcd, + 0x4b, 0x55, 0xf8, 0xab, 0x94, 0xa2, 0xd7, 0x34, 0xe5, 0xca, 0x2b, 0x5e, 0x94, 0xd8, 0xa8, 0x67, + 0xcb, 0xbf, 0xa6, 0xe5, 0x63, 0xc4, 0x7d, 0xa8, 0xb1, 0x98, 0x41, 0x4e, 0x32, 0x3b, 0x14, 0x4b, + 0x8c, 0x5e, 0xd2, 0xcf, 0x38, 0x95, 0x68, 0x8a, 0x2f, 0xcd, 0x54, 0x21, 0x4e, 0x13, 0xd4, 0x7f, + 0x5f, 0x13, 0x0a, 0xb3, 0x73, 0xb4, 0x86, 0x38, 0xeb, 0xa7, 0x34, 0xfd, 0xcf, 0x35, 0xc8, 0xc8, + 0xe8, 0x68, 0x0b, 0xc6, 0x28, 0x8a, 0xfa, 0x5a, 0x53, 0x0c, 0xeb, 0x63, 0xe5, 0x8e, 0x4b, 0x86, + 0x82, 0x6b, 0x1f, 0xc5, 0x0f, 0x2c, 0x11, 0x53, 0xa9, 0xdf, 0x55, 0xa2, 0x39, 0x8b, 0x11, 0x96, + 0x92, 0x47, 0xd4, 0xa8, 0xd0, 0x5c, 0xea, 0x57, 0x4b, 0x70, 0x82, 0x8e, 0xbe, 0x02, 0x10, 0xdf, + 0xab, 0x06, 0x36, 0x90, 0xf9, 0xd3, 0x11, 0xb8, 0x32, 0xa8, 0xb3, 0x01, 0x4b, 0x4a, 0x44, 0xf6, + 0x6c, 0x33, 0x5c, 0xdc, 0x0e, 0x89, 0xff, 0xe0, 0xc1, 0x6a, 0x94, 0xc2, 0xbf, 0x64, 0x56, 0x24, + 0xf6, 0xa0, 0xb6, 0x9c, 0x8b, 0x11, 0x17, 0x50, 0x62, 0x77, 0x4a, 0x91, 0x24, 0x19, 0x53, 0x61, + 0x92, 0xe5, 0xe7, 0xe7, 0x11, 0x53, 0xf8, 0x9d, 0x32, 0x0d, 0xc4, 0xd9, 0xfa, 0x69, 0x24, 0x2b, + 0x76, 0xdb, 0xe6, 0xd9, 0x61, 0xb4, 0x2c, 0x12, 0x06, 0xc4, 0xd9, 0xfa, 0x2a, 0x12, 0xfe, 0xa5, + 0xe8, 0x6e, 0x1f, 0xc9, 0x22, 0x89, 0x80, 0x38, 0x5b, 0x1f, 0x59, 0xf0, 0xb8, 0x4f, 0x4c, 0xaf, + 0xdd, 0x26, 0xae, 0xc5, 0xf3, 0xfd, 0x19, 0x7e, 0xcb, 0x76, 0xef, 0xf8, 0x06, 0xab, 0xc8, 0x54, + 0x74, 0x1a, 0xcb, 0x71, 0xf0, 0x38, 0xee, 0x53, 0x0f, 0xf7, 0xc5, 0x82, 0xda, 0x70, 0x81, 0x27, + 0x17, 0xf2, 0x1b, 0x6e, 0x48, 0xfc, 0x3d, 0xc3, 0x11, 0x7a, 0xb8, 0x52, 0x89, 0x8e, 0x37, 0x93, + 0xa8, 0x70, 0x1a, 0x37, 0xea, 0x51, 0xb9, 0x43, 0x74, 0x47, 0x21, 0x39, 0x5e, 0x3e, 0x6d, 0x17, + 0xce, 0xa2, 0xc3, 0x79, 0x34, 0xf4, 0xcf, 0x6b, 0x20, 0x2c, 0x91, 0xd1, 0xe3, 0x89, 0xb7, 0x8e, + 0xf1, 0xd4, 0x3b, 0x87, 0xcc, 0x6a, 0x50, 0xc9, 0xcd, 0x6a, 0xf0, 0x7e, 0x25, 0x14, 0xcf, 0x44, + 0xcc, 0xfb, 0x38, 0x66, 0x25, 0x23, 0xcb, 0x07, 0x60, 0x82, 0xf0, 0x67, 0xb4, 0x48, 0xa2, 0x65, + 0xd6, 0xdd, 0xcb, 0xb2, 0x10, 0xc7, 0x70, 0xfd, 0xf7, 0x34, 0x10, 0x18, 0x58, 0xfe, 0xa0, 0x63, + 0xe5, 0x91, 0x39, 0xd2, 0xb4, 0x49, 0xc9, 0x7f, 0x33, 0x54, 0x98, 0xff, 0xe6, 0x8c, 0xd2, 0xc2, + 0xfc, 0x8a, 0x06, 0x17, 0x92, 0xb1, 0x91, 0x02, 0xf4, 0x3e, 0x18, 0x13, 0xd1, 0x13, 0x45, 0xf8, + 0x33, 0xd6, 0x54, 0x84, 0x2f, 0xc0, 0x12, 0x96, 0x54, 0x87, 0x0d, 0x70, 0xc5, 0xcc, 0x0f, 0xd1, + 0x74, 0xc4, 0x6d, 0xef, 0xd3, 0xb3, 0x30, 0xca, 0x43, 0xef, 0x51, 0x9e, 0x96, 0xe3, 0xb6, 0x79, + 0xbf, 0x7c, 0x84, 0xbf, 0x32, 0xbe, 0x76, 0x6a, 0x94, 0xfb, 0x4a, 0xdf, 0x28, 0xf7, 0x98, 0xa7, + 0xdb, 0x1a, 0xe0, 0xe9, 0xa3, 0x86, 0x1b, 0x22, 0x7f, 0xb7, 0x4c, 0xb5, 0x15, 0x26, 0xde, 0x04, + 0x86, 0xcb, 0x4b, 0x6e, 0x7c, 0x02, 0x94, 0x97, 0x81, 0x99, 0xbe, 0xaf, 0x02, 0x32, 0xb6, 0xd9, + 0x48, 0x79, 0x53, 0x43, 0x31, 0xe5, 0xc7, 0x88, 0x6d, 0x16, 0x6d, 0xa4, 0xd1, 0xc2, 0x8d, 0xb4, + 0x0d, 0x63, 0x62, 0x2b, 0x08, 0xe6, 0xf8, 0xb1, 0x01, 0xf2, 0x56, 0x29, 0xe1, 0x78, 0x79, 0x01, + 0x96, 0xc8, 0xe9, 0x89, 0xdb, 0x36, 0xf6, 0xed, 0x76, 0xb7, 0xcd, 0x38, 0xe2, 0x88, 0x5a, 0x95, + 0x15, 0x63, 0x09, 0x67, 0x55, 0xb9, 0x85, 0x26, 0xbb, 0x48, 0xa9, 0x55, 0x79, 0x31, 0x96, 0x70, + 0xf4, 0x1a, 0x8c, 0xb7, 0x8d, 0xfd, 0x66, 0xd7, 0x6f, 0x11, 0xf1, 0x22, 0x50, 0x2c, 0xe3, 0x75, + 0x43, 0xdb, 0x59, 0xa0, 0xd7, 0xff, 0xd0, 0x5f, 0x68, 0xb8, 0xe1, 0x03, 0xbf, 0x19, 0xfa, 0x51, + 0xf2, 0x9a, 0x55, 0x81, 0x05, 0x47, 0xf8, 0x90, 0x03, 0x33, 0x6d, 0x63, 0x7f, 0xd3, 0x35, 0xa2, + 0x34, 0xf9, 0x93, 0x25, 0x29, 0xb0, 0x67, 0xe1, 0xd5, 0x04, 0x2e, 0x9c, 0xc2, 0x9d, 0xf3, 0x02, + 0x3d, 0x75, 0x56, 0x2f, 0xd0, 0x8b, 0x91, 0xbf, 0x0d, 0xbf, 0xb7, 0x5d, 0xcb, 0xf5, 0x6c, 0xef, + 0xeb, 0x4b, 0xf3, 0x7a, 0xe4, 0x4b, 0x33, 0x53, 0xfe, 0xc9, 0xb4, 0x8f, 0x1f, 0x4d, 0x17, 0x26, + 0xa9, 0x84, 0xcd, 0x4b, 0xe9, 0xc5, 0xaa, 0xb4, 0x0a, 0xb2, 0x1e, 0xa1, 0x51, 0xd2, 0xae, 0xc6, + 0xa8, 0xb1, 0x4a, 0x07, 0x3d, 0xe0, 0x69, 0xd4, 0x1d, 0x12, 0xc6, 0x55, 0xd8, 0x85, 0x7e, 0x96, + 0xed, 0x9f, 0x28, 0xeb, 0x79, 0xa6, 0x02, 0xce, 0x6f, 0x17, 0x47, 0x61, 0xb9, 0x98, 0x1f, 0x85, + 0x05, 0xfd, 0x58, 0x9e, 0x9e, 0x1f, 0xb1, 0x39, 0xfd, 0x8e, 0xf2, 0xbc, 0xa1, 0xb4, 0xb6, 0xff, + 0x5f, 0x6a, 0x30, 0xd7, 0x2e, 0xc8, 0x4f, 0x2a, 0x9e, 0x1f, 0x36, 0x06, 0xe0, 0x0f, 0x85, 0x39, + 0x4f, 0x97, 0x9e, 0x3a, 0x3c, 0xa8, 0x1e, 0x99, 0x19, 0x15, 0x17, 0xf6, 0x0d, 0xf9, 0x30, 0x16, + 0xf4, 0x02, 0x33, 0x74, 0x82, 0xb9, 0xcb, 0xe5, 0xd3, 0x60, 0x0a, 0xce, 0xda, 0xe4, 0x98, 0x38, + 0x6b, 0x8d, 0x83, 0xc0, 0xf3, 0x52, 0x2c, 0x09, 0x0d, 0xea, 0xa7, 0x3d, 0x40, 0xe0, 0xc9, 0xf9, + 0xdb, 0x30, 0xa5, 0x76, 0xf2, 0x44, 0xee, 0xe1, 0x3f, 0xa7, 0xc1, 0x6c, 0xfa, 0xd0, 0x52, 0x33, + 0xd5, 0x6b, 0x67, 0x9b, 0xa9, 0x5e, 0xb1, 0x7f, 0xa9, 0xf4, 0xb1, 0x7f, 0x79, 0x01, 0xae, 0xe6, + 0xaf, 0x65, 0x2a, 0x41, 0x1a, 0x8e, 0xe3, 0x3d, 0x14, 0x37, 0xb7, 0x38, 0x3f, 0x14, 0x2d, 0xc4, + 0x1c, 0xa6, 0x7f, 0x3f, 0xa4, 0xc3, 0x0c, 0xa3, 0x37, 0x60, 0x22, 0x08, 0x76, 0x78, 0x04, 0x49, + 0x31, 0xc8, 0x72, 0x57, 0x76, 0x19, 0x86, 0x52, 0xb8, 0x34, 0xca, 0x9f, 0x38, 0x46, 0xbf, 0xf4, + 0xea, 0x97, 0xbe, 0x76, 0xe3, 0x3d, 0x5f, 0xf9, 0xda, 0x8d, 0xf7, 0x7c, 0xf5, 0x6b, 0x37, 0xde, + 0xf3, 0x83, 0x87, 0x37, 0xb4, 0x2f, 0x1d, 0xde, 0xd0, 0xbe, 0x72, 0x78, 0x43, 0xfb, 0xea, 0xe1, + 0x0d, 0xed, 0x3f, 0x1d, 0xde, 0xd0, 0x7e, 0xfc, 0x3f, 0xdf, 0x78, 0xcf, 0x6b, 0xcf, 0xc5, 0xd4, + 0x6f, 0x49, 0xa2, 0xf1, 0x3f, 0x9d, 0xdd, 0xd6, 0x2d, 0x4a, 0x5d, 0xba, 0x16, 0x31, 0xea, 0xff, + 0x2f, 0x00, 0x00, 0xff, 0xff, 0x46, 0x8c, 0x06, 0x22, 0xf5, 0xe9, 0x00, 0x00, } func (m *APIServerLogging) Marshal() (dAtA []byte, err error) { @@ -10610,6 +10549,13 @@ func (m *MachineImage) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.UpdateStrategy != nil { + i -= len(*m.UpdateStrategy) + copy(dAtA[i:], *m.UpdateStrategy) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.UpdateStrategy))) + i-- + dAtA[i] = 0x1a + } if len(m.Versions) > 0 { for iNdEx := len(m.Versions) - 1; iNdEx >= 0; iNdEx-- { { @@ -12853,92 +12799,6 @@ func (m *SeedSettingDependencyWatchdog) MarshalToSizedBuffer(dAtA []byte) (int, i-- dAtA[i] = 0x1a } - if m.Probe != nil { - { - size, err := m.Probe.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if m.Endpoint != nil { - { - size, err := m.Endpoint.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *SeedSettingDependencyWatchdogEndpoint) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SeedSettingDependencyWatchdogEndpoint) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SeedSettingDependencyWatchdogEndpoint) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i-- - if m.Enabled { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x8 - return len(dAtA) - i, nil -} - -func (m *SeedSettingDependencyWatchdogProbe) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *SeedSettingDependencyWatchdogProbe) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *SeedSettingDependencyWatchdogProbe) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i-- - if m.Enabled { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x8 return len(dAtA) - i, nil } @@ -17649,6 +17509,10 @@ func (m *MachineImage) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } + if m.UpdateStrategy != nil { + l = len(*m.UpdateStrategy) + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -18479,14 +18343,6 @@ func (m *SeedSettingDependencyWatchdog) Size() (n int) { } var l int _ = l - if m.Endpoint != nil { - l = m.Endpoint.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.Probe != nil { - l = m.Probe.Size() - n += 1 + l + sovGenerated(uint64(l)) - } if m.Weeder != nil { l = m.Weeder.Size() n += 1 + l + sovGenerated(uint64(l)) @@ -18498,26 +18354,6 @@ func (m *SeedSettingDependencyWatchdog) Size() (n int) { return n } -func (m *SeedSettingDependencyWatchdogEndpoint) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 2 - return n -} - -func (m *SeedSettingDependencyWatchdogProbe) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 2 - return n -} - func (m *SeedSettingDependencyWatchdogProber) Size() (n int) { if m == nil { return 0 @@ -20789,6 +20625,7 @@ func (this *MachineImage) String() string { s := strings.Join([]string{`&MachineImage{`, `Name:` + fmt.Sprintf("%v", this.Name) + `,`, `Versions:` + repeatedStringForVersions + `,`, + `UpdateStrategy:` + valueToStringGenerated(this.UpdateStrategy) + `,`, `}`, }, "") return s @@ -21391,34 +21228,12 @@ func (this *SeedSettingDependencyWatchdog) String() string { return "nil" } s := strings.Join([]string{`&SeedSettingDependencyWatchdog{`, - `Endpoint:` + strings.Replace(this.Endpoint.String(), "SeedSettingDependencyWatchdogEndpoint", "SeedSettingDependencyWatchdogEndpoint", 1) + `,`, - `Probe:` + strings.Replace(this.Probe.String(), "SeedSettingDependencyWatchdogProbe", "SeedSettingDependencyWatchdogProbe", 1) + `,`, `Weeder:` + strings.Replace(this.Weeder.String(), "SeedSettingDependencyWatchdogWeeder", "SeedSettingDependencyWatchdogWeeder", 1) + `,`, `Prober:` + strings.Replace(this.Prober.String(), "SeedSettingDependencyWatchdogProber", "SeedSettingDependencyWatchdogProber", 1) + `,`, `}`, }, "") return s } -func (this *SeedSettingDependencyWatchdogEndpoint) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SeedSettingDependencyWatchdogEndpoint{`, - `Enabled:` + fmt.Sprintf("%v", this.Enabled) + `,`, - `}`, - }, "") - return s -} -func (this *SeedSettingDependencyWatchdogProbe) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&SeedSettingDependencyWatchdogProbe{`, - `Enabled:` + fmt.Sprintf("%v", this.Enabled) + `,`, - `}`, - }, "") - return s -} func (this *SeedSettingDependencyWatchdogProber) String() string { if this == nil { return "nil" @@ -36394,6 +36209,39 @@ func (m *MachineImage) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdateStrategy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := MachineImageUpdateStrategy(dAtA[iNdEx:postIndex]) + m.UpdateStrategy = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -43044,78 +42892,6 @@ func (m *SeedSettingDependencyWatchdog) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: SeedSettingDependencyWatchdog: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Endpoint", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Endpoint == nil { - m.Endpoint = &SeedSettingDependencyWatchdogEndpoint{} - } - if err := m.Endpoint.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Probe", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Probe == nil { - m.Probe = &SeedSettingDependencyWatchdogProbe{} - } - if err := m.Probe.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Weeder", wireType) @@ -43209,146 +42985,6 @@ func (m *SeedSettingDependencyWatchdog) Unmarshal(dAtA []byte) error { } return nil } -func (m *SeedSettingDependencyWatchdogEndpoint) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SeedSettingDependencyWatchdogEndpoint: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SeedSettingDependencyWatchdogEndpoint: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Enabled", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Enabled = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SeedSettingDependencyWatchdogProbe) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SeedSettingDependencyWatchdogProbe: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SeedSettingDependencyWatchdogProbe: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Enabled", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Enabled = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *SeedSettingDependencyWatchdogProber) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto index ad003c7a6..563b15176 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto @@ -553,7 +553,7 @@ message ControllerRegistrationDeployment { // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector seedSelector = 4; - // DeploymentRefs holds references to `ControllerDeployments`. Only one element is support now. + // DeploymentRefs holds references to `ControllerDeployments`. Only one element is supported currently. // +optional repeated DeploymentRef deploymentRefs = 5; } @@ -1564,6 +1564,13 @@ message MachineImage { // +patchMergeKey=version // +patchStrategy=merge repeated MachineImageVersion versions = 2; + + // UpdateStrategy is the update strategy to use for the machine image. Possible values are: + // - patch: update to the latest patch version of the current minor version. + // - minor: update to the latest minor and patch version. + // - major: always update to the overall latest version (default). + // +optional + optional string updateStrategy = 3; } // MachineImageVersion is an expirable version with list of supported container runtimes and interfaces @@ -2222,16 +2229,6 @@ message SeedSelector { // SeedSettingDependencyWatchdog controls the dependency-watchdog settings for the seed. message SeedSettingDependencyWatchdog { - // Endpoint controls the endpoint settings for the dependency-watchdog for the seed. - // Deprecated: This field is deprecated and will be removed in a future version of Gardener. Use `Weeder` instead. - // +optional - optional SeedSettingDependencyWatchdogEndpoint endpoint = 1; - - // Probe controls the probe settings for the dependency-watchdog for the seed. - // Deprecated: This field is deprecated and will be removed in a future version of Gardener. Use `Prober` instead. - // +optional - optional SeedSettingDependencyWatchdogProbe probe = 2; - // Weeder controls the weeder settings for the dependency-watchdog for the seed. // +optional optional SeedSettingDependencyWatchdogWeeder weeder = 3; @@ -2241,24 +2238,6 @@ message SeedSettingDependencyWatchdog { optional SeedSettingDependencyWatchdogProber prober = 4; } -// SeedSettingDependencyWatchdogEndpoint controls the endpoint settings for the dependency-watchdog for the seed. -// Deprecated: This type is deprecated and will be removed in a future version of Gardener. Use type `SeedSettingDependencyWatchdogWeeder` instead. -message SeedSettingDependencyWatchdogEndpoint { - // Enabled controls whether the endpoint controller of the dependency-watchdog should be enabled. This controller - // helps to alleviate the delay where control plane components remain unavailable by finding the respective pods in - // CrashLoopBackoff status and restarting them once their dependants become ready and available again. - optional bool enabled = 1; -} - -// SeedSettingDependencyWatchdogProbe controls the probe settings for the dependency-watchdog for the seed. -// Deprecated: This type is deprecated and will be removed in a future version of Gardener. Use type `SeedSettingDependencyWatchdogProber` instead. -message SeedSettingDependencyWatchdogProbe { - // Enabled controls whether the probe controller of the dependency-watchdog should be enabled. This controller - // scales down the kube-controller-manager, machine-controller-manager and cluster-autoscaler of shoot clusters in case their respective kube-apiserver is not - // reachable via its external ingress in order to avoid melt-down situations. - optional bool enabled = 1; -} - // SeedSettingDependencyWatchdogProber controls the prober settings for the dependency-watchdog for the seed. message SeedSettingDependencyWatchdogProber { // Enabled controls whether the probe controller(prober) of the dependency-watchdog should be enabled. This controller diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/condition.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/condition.go index 7f0bd42fa..b1aeed4c3 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/condition.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/condition.go @@ -21,6 +21,7 @@ import ( apiequality "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apimachinery/pkg/util/sets" "k8s.io/utils/clock" gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" @@ -166,14 +167,25 @@ func MergeConditions(oldConditions []gardencorev1beta1.Condition, newConditions // RemoveConditions removes the conditions with the given types from the given conditions slice. func RemoveConditions(conditions []gardencorev1beta1.Condition, conditionTypes ...gardencorev1beta1.ConditionType) []gardencorev1beta1.Condition { - conditionTypesMap := make(map[gardencorev1beta1.ConditionType]struct{}, len(conditionTypes)) - for _, conditionType := range conditionTypes { - conditionTypesMap[conditionType] = struct{}{} + unwantedConditionTypes := sets.New(conditionTypes...) + + var newConditions []gardencorev1beta1.Condition + for _, condition := range conditions { + if !unwantedConditionTypes.Has(condition.Type) { + newConditions = append(newConditions, condition) + } } + return newConditions +} + +// RetainConditions retains all given conditionsTypes from the given conditions slice. +func RetainConditions(conditions []gardencorev1beta1.Condition, conditionTypes ...gardencorev1beta1.ConditionType) []gardencorev1beta1.Condition { + wantedConditionsTypes := sets.New(conditionTypes...) + var newConditions []gardencorev1beta1.Condition for _, condition := range conditions { - if _, ok := conditionTypesMap[condition.Type]; !ok { + if wantedConditionsTypes.Has(condition.Type) { newConditions = append(newConditions, condition) } } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go index 7b02086cf..d7093445c 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go @@ -16,6 +16,7 @@ package helper import ( "fmt" + "slices" "strconv" "strings" "time" @@ -452,7 +453,8 @@ func ShootMachineImageVersionExists(constraint gardencorev1beta1.MachineImage, i return false, 0 } -func toExpirableVersions(versions []gardencorev1beta1.MachineImageVersion) []gardencorev1beta1.ExpirableVersion { +// ToExpirableVersions returns the expirable versions from the given machine image versions. +func ToExpirableVersions(versions []gardencorev1beta1.MachineImageVersion) []gardencorev1beta1.ExpirableVersion { expVersions := []gardencorev1beta1.ExpirableVersion{} for _, version := range versions { expVersions = append(expVersions, version.ExpirableVersion) @@ -460,32 +462,6 @@ func toExpirableVersions(versions []gardencorev1beta1.MachineImageVersion) []gar return expVersions } -// GetLatestQualifyingShootMachineImage determines the latest qualifying version in a machine image and returns that as a ShootMachineImage. -// A version qualifies if its classification is not preview and the version is not expired. -// Older but non-deprecated version is preferred over newer but deprecated one. -func GetLatestQualifyingShootMachineImage(image gardencorev1beta1.MachineImage, predicates ...VersionPredicate) (bool, *gardencorev1beta1.ShootMachineImage, error) { - predicates = append(predicates, FilterExpiredVersion()) - - // Try to find non-deprecated version first - qualifyingVersionFound, latestNonDeprecatedImageVersion, err := GetLatestQualifyingVersion(toExpirableVersions(image.Versions), append(predicates, FilterDeprecatedVersion())...) - if err != nil { - return false, nil, err - } - if qualifyingVersionFound { - return true, &gardencorev1beta1.ShootMachineImage{Name: image.Name, Version: &latestNonDeprecatedImageVersion.Version}, nil - } - - // It looks like there is no non-deprecated version, now look also into the deprecated versions - qualifyingVersionFound, latestImageVersion, err := GetLatestQualifyingVersion(toExpirableVersions(image.Versions), predicates...) - if err != nil { - return false, nil, err - } - if !qualifyingVersionFound { - return false, nil, nil - } - return true, &gardencorev1beta1.ShootMachineImage{Name: image.Name, Version: &latestImageVersion.Version}, nil -} - // FindMachineTypeByName tries to find the machine type details with the given name. If it cannot be found it returns nil. func FindMachineTypeByName(machines []gardencorev1beta1.MachineType, name string) *gardencorev1beta1.MachineType { for _, m := range machines { @@ -557,20 +533,89 @@ func FindPrimaryDNSProvider(providers []gardencorev1beta1.DNSProvider) *gardenco // VersionPredicate is a function that evaluates a condition on the given versions. type VersionPredicate func(expirableVersion gardencorev1beta1.ExpirableVersion, version *semver.Version) (bool, error) -// GetKubernetesVersionForPatchUpdate finds the latest Kubernetes patch version for its minor version in the compared -// to the given . Preview and expired versions do not qualify for the kubernetes patch update. In case it does not find a newer patch version, it returns false. Otherwise, -// true and the found version will be returned. -func GetKubernetesVersionForPatchUpdate(cloudProfile *gardencorev1beta1.CloudProfile, currentVersion string) (bool, string, error) { +// GetLatestVersionForPatchAutoUpdate finds the latest patch version for a given for the current minor version from a given slice of versions. +// The current version, preview and expired versions do not qualify. +// In case no newer patch version is found, returns false and an empty string. Otherwise, returns true and the found version. +func GetLatestVersionForPatchAutoUpdate(versions []gardencorev1beta1.ExpirableVersion, currentVersion string) (bool, string, error) { + currentSemVerVersion, err := semver.NewVersion(currentVersion) + if err != nil { + return false, "", err + } + + predicates := []VersionPredicate{FilterDifferentMajorMinorVersionAndLowerPatchVersionsOfSameMinor(*currentSemVerVersion)} + + return getVersionForAutoUpdate(versions, currentSemVerVersion, predicates) +} + +// GetLatestVersionForMinorAutoUpdate finds the latest minor with the latest patch version higher than a given for the current major version from a given slice of versions. +// Returns the highest patch version for the current minor in case the current version is not the highest patch version yet. +// The current version, preview and expired versions do not qualify. +// In case no newer version is found, returns false and an empty string. Otherwise, returns true and the found version. +func GetLatestVersionForMinorAutoUpdate(versions []gardencorev1beta1.ExpirableVersion, currentVersion string) (bool, string, error) { + // always first check if there is a higher patch version available + found, version, err := GetLatestVersionForPatchAutoUpdate(versions, currentVersion) + if found { + return found, version, nil + } + if err != nil { + return false, version, err + } + + currentSemVerVersion, err := semver.NewVersion(currentVersion) + if err != nil { + return false, "", err + } + + predicates := []VersionPredicate{FilterDifferentMajorVersion(*currentSemVerVersion)} + + return getVersionForAutoUpdate(versions, currentSemVerVersion, predicates) +} + +// GetOverallLatestVersionForAutoUpdate finds the overall latest version higher than a given for the current major version from a given slice of versions. +// Returns the highest patch version for the current minor in case the current version is not the highest patch version yet. +// The current, preview and expired versions do not qualify. +// In case no newer version is found, returns false and an empty string. Otherwise, returns true and the found version. +func GetOverallLatestVersionForAutoUpdate(versions []gardencorev1beta1.ExpirableVersion, currentVersion string) (bool, string, error) { + // always first check if there is a higher patch version available to update to + found, version, err := GetLatestVersionForPatchAutoUpdate(versions, currentVersion) + if found { + return found, version, nil + } + if err != nil { + return false, version, err + } + currentSemVerVersion, err := semver.NewVersion(currentVersion) if err != nil { return false, "", err } - qualifyingVersionFound, latestVersion, err := GetLatestQualifyingVersion(cloudProfile.Spec.Kubernetes.Versions, FilterDifferentMajorMinorVersion(*currentSemVerVersion), FilterSameVersion(*currentSemVerVersion), FilterExpiredVersion()) + // if there is no higher patch version available, get the overall latest + return getVersionForAutoUpdate(versions, currentSemVerVersion, []VersionPredicate{}) +} + +// getVersionForAutoUpdate finds the latest eligible version higher than a given from a slice of versions. +// Versions <= the current version, preview and expired versions do not qualify for patch updates. +// First tries to find a non-deprecated version. +// In case no newer patch version is found, returns false and an empty string. Otherwise, returns true and the found version. +func getVersionForAutoUpdate(versions []gardencorev1beta1.ExpirableVersion, currentSemVerVersion *semver.Version, predicates []VersionPredicate) (bool, string, error) { + versionPredicates := append([]VersionPredicate{FilterExpiredVersion(), FilterSameVersion(*currentSemVerVersion), FilterLowerVersion(*currentSemVerVersion)}, predicates...) + + // Try to find non-deprecated version first + qualifyingVersionFound, latestNonDeprecatedImageVersion, err := GetLatestQualifyingVersion(versions, append(versionPredicates, FilterDeprecatedVersion())...) if err != nil { return false, "", err } - // latest version cannot be found. Do not return an error, but allow for minor upgrade if Shoot's machine image version is expired. + if qualifyingVersionFound { + return true, latestNonDeprecatedImageVersion.Version, nil + } + + // otherwise, also consider deprecated versions + qualifyingVersionFound, latestVersion, err := GetLatestQualifyingVersion(versions, versionPredicates...) + if err != nil { + return false, "", err + } + // latest version cannot be found. Do not return an error, but allow for forceful upgrade if Shoot's version is expired. if !qualifyingVersionFound { return false, "", nil } @@ -578,24 +623,28 @@ func GetKubernetesVersionForPatchUpdate(cloudProfile *gardencorev1beta1.CloudPro return true, latestVersion.Version, nil } -// GetKubernetesVersionForMinorUpdate finds a Kubernetes version in the that qualifies for a Kubernetes minor level update given a . -// A qualifying version is a non-preview version having the minor version increased by exactly one version. -// In case the consecutive minor version has only expired versions, picks the latest expired version (will do another minor update during the next maintenance time) +// GetVersionForForcefulUpdateToConsecutiveMinor finds a version from a slice of expirable versions that qualifies for a minor level update given a . +// A qualifying version is a non-preview version having the minor version increased by exactly one version (required for Kubernetes version upgrades). +// In case the consecutive minor version has only expired versions, picks the latest expired version (will try another update during the next maintenance time). // If a version can be found, returns true and the qualifying patch version of the next minor version. -// In case it does not find a version, it returns false. -func GetKubernetesVersionForMinorUpdate(cloudProfile *gardencorev1beta1.CloudProfile, currentVersion string) (bool, string, error) { +// In case it does not find a version, it returns false and an empty string. +func GetVersionForForcefulUpdateToConsecutiveMinor(versions []gardencorev1beta1.ExpirableVersion, currentVersion string) (bool, string, error) { currentSemVerVersion, err := semver.NewVersion(currentVersion) if err != nil { return false, "", err } - qualifyingVersionFound, latestVersion, err := GetLatestQualifyingVersion(cloudProfile.Spec.Kubernetes.Versions, FilterNonConsecutiveMinorVersion(*currentSemVerVersion), FilterSameVersion(*currentSemVerVersion), FilterExpiredVersion()) + // filters out any version that does not have minor version +1 + predicates := []VersionPredicate{FilterDifferentMajorVersion(*currentSemVerVersion), FilterNonConsecutiveMinorVersion(*currentSemVerVersion)} + + qualifyingVersionFound, latestVersion, err := GetLatestQualifyingVersion(versions, append(predicates, FilterExpiredVersion())...) if err != nil { return false, "", err } + + // if no qualifying version is found, allow force update to an expired version if !qualifyingVersionFound { - // in case there are only expired versions in the consecutive minor version, pick the latest expired version - qualifyingVersionFound, latestVersion, err = GetLatestQualifyingVersion(cloudProfile.Spec.Kubernetes.Versions, FilterNonConsecutiveMinorVersion(*currentSemVerVersion), FilterSameVersion(*currentSemVerVersion)) + qualifyingVersionFound, latestVersion, err = GetLatestQualifyingVersion(versions, predicates...) if err != nil { return false, "", err } @@ -607,7 +656,78 @@ func GetKubernetesVersionForMinorUpdate(cloudProfile *gardencorev1beta1.CloudPro return true, latestVersion.Version, nil } -// GetLatestQualifyingVersion returns the latest expirable version from a set of expirable versions +// GetVersionForForcefulUpdateToNextHigherMinor finds a version from a slice of expirable versions that qualifies for a minor level update given a . +// A qualifying version is the highest non-preview version with the next higher minor version from the given slice of versions. +// In case the consecutive minor version has only expired versions, picks the latest expired version (will try another update during the next maintenance time). +// If a version can be found, returns true and the qualifying version. +// In case it does not find a version, it returns false and an empty string. +func GetVersionForForcefulUpdateToNextHigherMinor(versions []gardencorev1beta1.ExpirableVersion, currentVersion string) (bool, string, error) { + currentSemVerVersion, err := semver.NewVersion(currentVersion) + if err != nil { + return false, "", err + } + + predicates := []VersionPredicate{FilterDifferentMajorVersion(*currentSemVerVersion), FilterEqualAndSmallerMinorVersion(*currentSemVerVersion)} + + // prefer non-expired version + return getVersionForMachineImageForceUpdate(versions, func(v semver.Version) int64 { return int64(v.Minor()) }, currentSemVerVersion, predicates) +} + +// GetVersionForForcefulUpdateToNextHigherMajor finds a version from a slice of expirable versions that qualifies for a major level update given a . +// A qualifying version is a non-preview version with the next (as defined in the CloudProfile for the image) higher major version. +// In case the next major version has only expired versions, picks the latest expired version (will try another update during the next maintenance time). +// If a version can be found, returns true and the qualifying version of the next major version. +// In case it does not find a version, it returns false and an empty string. +func GetVersionForForcefulUpdateToNextHigherMajor(versions []gardencorev1beta1.ExpirableVersion, currentVersion string) (bool, string, error) { + currentSemVerVersion, err := semver.NewVersion(currentVersion) + if err != nil { + return false, "", err + } + + predicates := []VersionPredicate{FilterEqualAndSmallerMajorVersion(*currentSemVerVersion)} + + // prefer non-expired version + return getVersionForMachineImageForceUpdate(versions, func(v semver.Version) int64 { return int64(v.Major()) }, currentSemVerVersion, predicates) +} + +// getVersionForMachineImageForceUpdate finds a version from a slice of expirable versions that qualifies for an update given a . +// In contrast to determining a version for an auto-update, also allows update to an expired version in case a not-expired version cannot be determined. +// Used only for machine image updates, as finds a qualifying version from the next higher minor version, which is not necessarily consecutive (n+1). +func getVersionForMachineImageForceUpdate(versions []gardencorev1beta1.ExpirableVersion, getMajorOrMinor GetMajorOrMinor, currentSemVerVersion *semver.Version, predicates []VersionPredicate) (bool, string, error) { + foundVersion, qualifyingVersion, nextMinorOrMajorVersion, err := GetQualifyingVersionForNextHigher(versions, getMajorOrMinor, currentSemVerVersion, append(predicates, FilterExpiredVersion())...) + if err != nil { + return false, "", err + } + + skippedNextMajorMinor := false + if foundVersion { + parse, err := semver.NewVersion(qualifyingVersion.Version) + if err != nil { + return false, "", err + } + skippedNextMajorMinor = getMajorOrMinor(*parse) > nextMinorOrMajorVersion + } + + // Two options when allowing updates to expired versions + // 1) No higher non-expired qualifying version could be found at all + // 2) Found a qualifying non-expired version, but we skipped the next minor/major. + // Potentially skipped expired versions in the next minor/major that qualify. + // Prefer update to expired version in next minor/major instead of skipping over minor/major altogether. + // Example: current version: 1.1.0, qualifying version : 1.4.1, next minor: 2. We skipped over the next minor which might have qualifying expired versions. + if !foundVersion || skippedNextMajorMinor { + foundVersion, qualifyingVersion, _, err = GetQualifyingVersionForNextHigher(versions, getMajorOrMinor, currentSemVerVersion, predicates...) + if err != nil { + return false, "", err + } + if !foundVersion { + return false, "", nil + } + } + + return true, qualifyingVersion.Version, nil +} + +// GetLatestQualifyingVersion returns the latest expirable version from a set of expirable versions. // A version qualifies if its classification is not preview and the optional predicate does not filter out the version. // If the predicate returns true, the version is not considered for the latest qualifying version. func GetLatestQualifyingVersion(versions []gardencorev1beta1.ExpirableVersion, predicate ...VersionPredicate) (qualifyingVersionFound bool, latest *gardencorev1beta1.ExpirableVersion, err error) { @@ -652,9 +772,82 @@ OUTER: return true, latestVersion, nil } -// FilterDifferentMajorMinorVersion returns a VersionPredicate(closure) that evaluates whether a given version v has a different same major.minor version compared to the currentSemVerVersion -// returns true if v has a different major.minor version -func FilterDifferentMajorMinorVersion(currentSemVerVersion semver.Version) VersionPredicate { +// GetMajorOrMinor returns either the major or the minor version from a semVer version. +type GetMajorOrMinor func(v semver.Version) int64 + +// GetQualifyingVersionForNextHigher returns the latest expirable version for the next higher {minor/major} (not necessarily consecutive n+1) version from a set of expirable versions. +// A version qualifies if its classification is not preview and the optional predicate does not filter out the version. +// If the predicate returns true, the version is not considered for the latest qualifying version. +func GetQualifyingVersionForNextHigher(versions []gardencorev1beta1.ExpirableVersion, majorOrMinor GetMajorOrMinor, currentSemVerVersion *semver.Version, predicates ...VersionPredicate) (qualifyingVersionFound bool, qualifyingVersion *gardencorev1beta1.ExpirableVersion, nextMinorOrMajor int64, err error) { + // How to find the highest version with the next higher (not necessarily consecutive n+1) minor version (if the next higher minor version has no qualifying version, skip it to avoid consecutive updates) + // 1) Sort the versions in ascending order + // 2) Loop over the sorted array until the minor version changes (select all versions for the next higher minor) + // - predicates filter out version with minor/major <= current_minor/major + // 3) Then select the last version in the array (that's the highest) + + slices.SortFunc(versions, func(a, b gardencorev1beta1.ExpirableVersion) int { + return semver.MustParse(a.Version).Compare(semver.MustParse(b.Version)) + }) + + var ( + highestVersionNextHigherMinorOrMajor *semver.Version + nextMajorOrMinorVersion int64 = -1 + expirableVersionNextHigherMinorOrMajor = gardencorev1beta1.ExpirableVersion{} + ) + +OUTER: + for _, v := range versions { + parse, err := semver.NewVersion(v.Version) + if err != nil { + return false, nil, 0, err + } + + // Determine the next higher minor/major version, even though all versions from that minor/major might be filtered (e.g, all expired) + // That's required so that the caller can determine if the next minor/major version has been skipped or not. + if majorOrMinor(*parse) > majorOrMinor(*currentSemVerVersion) && (majorOrMinor(*parse) < nextMajorOrMinorVersion || nextMajorOrMinorVersion == -1) { + nextMajorOrMinorVersion = majorOrMinor(*parse) + } + + // never update to preview versions + if v.Classification != nil && *v.Classification == gardencorev1beta1.ClassificationPreview { + continue + } + + for _, p := range predicates { + if p == nil { + continue + } + + shouldFilter, err := p(v, parse) + if err != nil { + return false, nil, nextMajorOrMinorVersion, fmt.Errorf("error while evaluation predicate: %w", err) + } + if shouldFilter { + continue OUTER + } + } + + // last version is the highest version for next larger minor/major + if highestVersionNextHigherMinorOrMajor != nil && majorOrMinor(*parse) > majorOrMinor(*highestVersionNextHigherMinorOrMajor) { + break + } + highestVersionNextHigherMinorOrMajor = parse + expirableVersionNextHigherMinorOrMajor = v + } + + // unable to find qualified versions + if highestVersionNextHigherMinorOrMajor == nil { + return false, nil, nextMajorOrMinorVersion, nil + } + return true, &expirableVersionNextHigherMinorOrMajor, nextMajorOrMinorVersion, nil +} + +// FilterDifferentMajorMinorVersionAndLowerPatchVersionsOfSameMinor returns a VersionPredicate(closure) that returns true if a given version v +// - has a different major.minor version compared to the currentSemVerVersion +// - has a lower patch version (acts as >= relational operator) +// +// Uses the tilde range operator. +func FilterDifferentMajorMinorVersionAndLowerPatchVersionsOfSameMinor(currentSemVerVersion semver.Version) VersionPredicate { return func(_ gardencorev1beta1.ExpirableVersion, v *semver.Version) (bool, error) { isWithinRange, err := versionutils.CompareVersions(v.String(), "~", currentSemVerVersion.String()) if err != nil { @@ -665,7 +858,9 @@ func FilterDifferentMajorMinorVersion(currentSemVerVersion semver.Version) Versi } // FilterNonConsecutiveMinorVersion returns a VersionPredicate(closure) that evaluates whether a given version v has a consecutive minor version compared to the currentSemVerVersion -// returns true if v does not have a consecutive minor version +// - implicitly, therefore also versions cannot be smaller than the current version +// +// returns true if v does not have a consecutive minor version. func FilterNonConsecutiveMinorVersion(currentSemVerVersion semver.Version) VersionPredicate { return func(_ gardencorev1beta1.ExpirableVersion, v *semver.Version) (bool, error) { if v.Major() != currentSemVerVersion.Major() { @@ -677,8 +872,32 @@ func FilterNonConsecutiveMinorVersion(currentSemVerVersion semver.Version) Versi } } -// FilterSameVersion returns a VersionPredicate(closure) that evaluates whether a given version v is equal to the currentSemVerVersion -// returns true if it is equal +// FilterDifferentMajorVersion returns a VersionPredicate(closure) that evaluates whether a given version v has the same major version compared to the currentSemVerVersion. +// Returns true if v does not have the same major version. +func FilterDifferentMajorVersion(currentSemVerVersion semver.Version) VersionPredicate { + return func(_ gardencorev1beta1.ExpirableVersion, v *semver.Version) (bool, error) { + return v.Major() != currentSemVerVersion.Major(), nil + } +} + +// FilterEqualAndSmallerMajorVersion returns a VersionPredicate(closure) that evaluates whether a given version v has a smaller major version compared to the currentSemVerVersion. +// Returns true if v has a smaller or equal major version. +func FilterEqualAndSmallerMajorVersion(currentSemVerVersion semver.Version) VersionPredicate { + return func(_ gardencorev1beta1.ExpirableVersion, v *semver.Version) (bool, error) { + return v.Major() <= currentSemVerVersion.Major(), nil + } +} + +// FilterEqualAndSmallerMinorVersion returns a VersionPredicate(closure) that evaluates whether a given version v has a smaller or equal minor version compared to the currentSemVerVersion. +// Returns true if v has a smaller or equal minor version. +func FilterEqualAndSmallerMinorVersion(currentSemVerVersion semver.Version) VersionPredicate { + return func(_ gardencorev1beta1.ExpirableVersion, v *semver.Version) (bool, error) { + return v.Minor() <= currentSemVerVersion.Minor(), nil + } +} + +// FilterSameVersion returns a VersionPredicate(closure) that evaluates whether a given version v is equal to the currentSemVerVersion. +// returns true if it is equal. func FilterSameVersion(currentSemVerVersion semver.Version) VersionPredicate { return func(_ gardencorev1beta1.ExpirableVersion, v *semver.Version) (bool, error) { return v.Equal(¤tSemVerVersion), nil @@ -709,7 +928,7 @@ func FilterDeprecatedVersion() func(expirableVersion gardencorev1beta1.Expirable } } -// GetResourceByName returns the first NamedResourceReference with the given name in the given slice, or nil if not found. +// GetResourceByName returns the NamedResourceReference with the given name in the given slice, or nil if not found. func GetResourceByName(resources []gardencorev1beta1.NamedResourceReference, name string) *gardencorev1beta1.NamedResourceReference { for _, resource := range resources { if resource.Name == name { diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_cloudprofile.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_cloudprofile.go index 6617a8bdb..e8071afa2 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_cloudprofile.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_cloudprofile.go @@ -113,6 +113,12 @@ type MachineImage struct { // +patchMergeKey=version // +patchStrategy=merge Versions []MachineImageVersion `json:"versions" patchStrategy:"merge" patchMergeKey:"version" protobuf:"bytes,2,rep,name=versions"` + // UpdateStrategy is the update strategy to use for the machine image. Possible values are: + // - patch: update to the latest patch version of the current minor version. + // - minor: update to the latest minor and patch version. + // - major: always update to the overall latest version (default). + // +optional + UpdateStrategy *MachineImageUpdateStrategy `json:"updateStrategy,omitempty" protobuf:"bytes,3,opt,name=updateStrategy,casttype=MachineImageUpdateStrategy"` } // MachineImageVersion is an expirable version with list of supported container runtimes and interfaces @@ -245,3 +251,17 @@ const ( // and will eventually expire. ClassificationDeprecated VersionClassification = "deprecated" ) + +// MachineImageUpdateStrategy is the update strategy to use for a machine image +type MachineImageUpdateStrategy string + +const ( + // UpdateStrategyPatch indicates that auto-updates are performed to the latest patch version of the current minor version. + // When using an expired version during the maintenance window, force updates to the latest patch of the next (not necessarily consecutive) minor when using an expired version. + UpdateStrategyPatch MachineImageUpdateStrategy = "patch" + // UpdateStrategyMinor indicates that auto-updates are performed to the latest patch and minor version of the current major version. + // When using an expired version during the maintenance window, force updates to the latest minor and patch of the next (not necessarily consecutive) major version. + UpdateStrategyMinor MachineImageUpdateStrategy = "minor" + // UpdateStrategyMajor indicates that auto-updates are performed always to the overall latest version. + UpdateStrategyMajor MachineImageUpdateStrategy = "major" +) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_common.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_common.go index 7f8f0abd2..a18eced5d 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_common.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_common.go @@ -14,7 +14,9 @@ package v1beta1 -import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) // ErrorCode is a string alias. type ErrorCode string diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_controllerregistration.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_controllerregistration.go index a80c13707..70e39b0d3 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_controllerregistration.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_controllerregistration.go @@ -104,7 +104,7 @@ type ControllerRegistrationDeployment struct { // An empty list means that all seeds are selected. // +optional SeedSelector *metav1.LabelSelector `json:"seedSelector,omitempty" protobuf:"bytes,4,opt,name=seedSelector"` - // DeploymentRefs holds references to `ControllerDeployments`. Only one element is support now. + // DeploymentRefs holds references to `ControllerDeployments`. Only one element is supported currently. // +optional DeploymentRefs []DeploymentRef `json:"deploymentRefs,omitempty" protobuf:"bytes,5,opt,name=deploymentRefs"` } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_seed.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_seed.go index b166aada1..847d41612 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_seed.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_seed.go @@ -340,14 +340,11 @@ type SeedSettingVerticalPodAutoscaler struct { // SeedSettingDependencyWatchdog controls the dependency-watchdog settings for the seed. type SeedSettingDependencyWatchdog struct { - // Endpoint controls the endpoint settings for the dependency-watchdog for the seed. - // Deprecated: This field is deprecated and will be removed in a future version of Gardener. Use `Weeder` instead. - // +optional - Endpoint *SeedSettingDependencyWatchdogEndpoint `json:"endpoint,omitempty" protobuf:"bytes,1,opt,name=endpoint"` - // Probe controls the probe settings for the dependency-watchdog for the seed. - // Deprecated: This field is deprecated and will be removed in a future version of Gardener. Use `Prober` instead. - // +optional - Probe *SeedSettingDependencyWatchdogProbe `json:"probe,omitempty" protobuf:"bytes,2,opt,name=probe"` + // Endpoint is tombstoned to show why 1 is reserved protobuf tag. + // Endpoint *SeedSettingDependencyWatchdogEndpoint `json:"endpoint,omitempty" protobuf:"bytes,1,opt,name=endpoint"` + // Probe is tombstoned to show why 2 is reserved protobuf tag. + // Probe *SeedSettingDependencyWatchdogProbe `json:"probe,omitempty" protobuf:"bytes,2,opt,name=probe"` + // Weeder controls the weeder settings for the dependency-watchdog for the seed. // +optional Weeder *SeedSettingDependencyWatchdogWeeder `json:"weeder,omitempty" protobuf:"bytes,3,opt,name=weeder"` @@ -356,24 +353,6 @@ type SeedSettingDependencyWatchdog struct { Prober *SeedSettingDependencyWatchdogProber `json:"prober,omitempty" protobuf:"bytes,4,opt,name=prober"` } -// SeedSettingDependencyWatchdogEndpoint controls the endpoint settings for the dependency-watchdog for the seed. -// Deprecated: This type is deprecated and will be removed in a future version of Gardener. Use type `SeedSettingDependencyWatchdogWeeder` instead. -type SeedSettingDependencyWatchdogEndpoint struct { - // Enabled controls whether the endpoint controller of the dependency-watchdog should be enabled. This controller - // helps to alleviate the delay where control plane components remain unavailable by finding the respective pods in - // CrashLoopBackoff status and restarting them once their dependants become ready and available again. - Enabled bool `json:"enabled" protobuf:"bytes,1,opt,name=enabled"` -} - -// SeedSettingDependencyWatchdogProbe controls the probe settings for the dependency-watchdog for the seed. -// Deprecated: This type is deprecated and will be removed in a future version of Gardener. Use type `SeedSettingDependencyWatchdogProber` instead. -type SeedSettingDependencyWatchdogProbe struct { - // Enabled controls whether the probe controller of the dependency-watchdog should be enabled. This controller - // scales down the kube-controller-manager, machine-controller-manager and cluster-autoscaler of shoot clusters in case their respective kube-apiserver is not - // reachable via its external ingress in order to avoid melt-down situations. - Enabled bool `json:"enabled" protobuf:"bytes,1,opt,name=enabled"` -} - // SeedSettingDependencyWatchdogWeeder controls the weeder settings for the dependency-watchdog for the seed. type SeedSettingDependencyWatchdogWeeder struct { // Enabled controls whether the endpoint controller(weeder) of the dependency-watchdog should be enabled. This controller diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.conversion.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.conversion.go index d4af84026..c0aef342e 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.conversion.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.conversion.go @@ -1267,26 +1267,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*SeedSettingDependencyWatchdogEndpoint)(nil), (*core.SeedSettingDependencyWatchdogEndpoint)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_SeedSettingDependencyWatchdogEndpoint_To_core_SeedSettingDependencyWatchdogEndpoint(a.(*SeedSettingDependencyWatchdogEndpoint), b.(*core.SeedSettingDependencyWatchdogEndpoint), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*core.SeedSettingDependencyWatchdogEndpoint)(nil), (*SeedSettingDependencyWatchdogEndpoint)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_core_SeedSettingDependencyWatchdogEndpoint_To_v1beta1_SeedSettingDependencyWatchdogEndpoint(a.(*core.SeedSettingDependencyWatchdogEndpoint), b.(*SeedSettingDependencyWatchdogEndpoint), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*SeedSettingDependencyWatchdogProbe)(nil), (*core.SeedSettingDependencyWatchdogProbe)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_SeedSettingDependencyWatchdogProbe_To_core_SeedSettingDependencyWatchdogProbe(a.(*SeedSettingDependencyWatchdogProbe), b.(*core.SeedSettingDependencyWatchdogProbe), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*core.SeedSettingDependencyWatchdogProbe)(nil), (*SeedSettingDependencyWatchdogProbe)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_core_SeedSettingDependencyWatchdogProbe_To_v1beta1_SeedSettingDependencyWatchdogProbe(a.(*core.SeedSettingDependencyWatchdogProbe), b.(*SeedSettingDependencyWatchdogProbe), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*SeedSettingDependencyWatchdogProber)(nil), (*core.SeedSettingDependencyWatchdogProber)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_SeedSettingDependencyWatchdogProber_To_core_SeedSettingDependencyWatchdogProber(a.(*SeedSettingDependencyWatchdogProber), b.(*core.SeedSettingDependencyWatchdogProber), scope) }); err != nil { @@ -4014,6 +3994,7 @@ func Convert_core_MachineControllerManagerSettings_To_v1beta1_MachineControllerM func autoConvert_v1beta1_MachineImage_To_core_MachineImage(in *MachineImage, out *core.MachineImage, s conversion.Scope) error { out.Name = in.Name out.Versions = *(*[]core.MachineImageVersion)(unsafe.Pointer(&in.Versions)) + out.UpdateStrategy = (*core.MachineImageUpdateStrategy)(unsafe.Pointer(in.UpdateStrategy)) return nil } @@ -4025,6 +4006,7 @@ func Convert_v1beta1_MachineImage_To_core_MachineImage(in *MachineImage, out *co func autoConvert_core_MachineImage_To_v1beta1_MachineImage(in *core.MachineImage, out *MachineImage, s conversion.Scope) error { out.Name = in.Name out.Versions = *(*[]MachineImageVersion)(unsafe.Pointer(&in.Versions)) + out.UpdateStrategy = (*MachineImageUpdateStrategy)(unsafe.Pointer(in.UpdateStrategy)) return nil } @@ -5097,8 +5079,6 @@ func Convert_core_SeedSelector_To_v1beta1_SeedSelector(in *core.SeedSelector, ou } func autoConvert_v1beta1_SeedSettingDependencyWatchdog_To_core_SeedSettingDependencyWatchdog(in *SeedSettingDependencyWatchdog, out *core.SeedSettingDependencyWatchdog, s conversion.Scope) error { - out.Endpoint = (*core.SeedSettingDependencyWatchdogEndpoint)(unsafe.Pointer(in.Endpoint)) - out.Probe = (*core.SeedSettingDependencyWatchdogProbe)(unsafe.Pointer(in.Probe)) out.Weeder = (*core.SeedSettingDependencyWatchdogWeeder)(unsafe.Pointer(in.Weeder)) out.Prober = (*core.SeedSettingDependencyWatchdogProber)(unsafe.Pointer(in.Prober)) return nil @@ -5110,8 +5090,6 @@ func Convert_v1beta1_SeedSettingDependencyWatchdog_To_core_SeedSettingDependency } func autoConvert_core_SeedSettingDependencyWatchdog_To_v1beta1_SeedSettingDependencyWatchdog(in *core.SeedSettingDependencyWatchdog, out *SeedSettingDependencyWatchdog, s conversion.Scope) error { - out.Endpoint = (*SeedSettingDependencyWatchdogEndpoint)(unsafe.Pointer(in.Endpoint)) - out.Probe = (*SeedSettingDependencyWatchdogProbe)(unsafe.Pointer(in.Probe)) out.Weeder = (*SeedSettingDependencyWatchdogWeeder)(unsafe.Pointer(in.Weeder)) out.Prober = (*SeedSettingDependencyWatchdogProber)(unsafe.Pointer(in.Prober)) return nil @@ -5122,46 +5100,6 @@ func Convert_core_SeedSettingDependencyWatchdog_To_v1beta1_SeedSettingDependency return autoConvert_core_SeedSettingDependencyWatchdog_To_v1beta1_SeedSettingDependencyWatchdog(in, out, s) } -func autoConvert_v1beta1_SeedSettingDependencyWatchdogEndpoint_To_core_SeedSettingDependencyWatchdogEndpoint(in *SeedSettingDependencyWatchdogEndpoint, out *core.SeedSettingDependencyWatchdogEndpoint, s conversion.Scope) error { - out.Enabled = in.Enabled - return nil -} - -// Convert_v1beta1_SeedSettingDependencyWatchdogEndpoint_To_core_SeedSettingDependencyWatchdogEndpoint is an autogenerated conversion function. -func Convert_v1beta1_SeedSettingDependencyWatchdogEndpoint_To_core_SeedSettingDependencyWatchdogEndpoint(in *SeedSettingDependencyWatchdogEndpoint, out *core.SeedSettingDependencyWatchdogEndpoint, s conversion.Scope) error { - return autoConvert_v1beta1_SeedSettingDependencyWatchdogEndpoint_To_core_SeedSettingDependencyWatchdogEndpoint(in, out, s) -} - -func autoConvert_core_SeedSettingDependencyWatchdogEndpoint_To_v1beta1_SeedSettingDependencyWatchdogEndpoint(in *core.SeedSettingDependencyWatchdogEndpoint, out *SeedSettingDependencyWatchdogEndpoint, s conversion.Scope) error { - out.Enabled = in.Enabled - return nil -} - -// Convert_core_SeedSettingDependencyWatchdogEndpoint_To_v1beta1_SeedSettingDependencyWatchdogEndpoint is an autogenerated conversion function. -func Convert_core_SeedSettingDependencyWatchdogEndpoint_To_v1beta1_SeedSettingDependencyWatchdogEndpoint(in *core.SeedSettingDependencyWatchdogEndpoint, out *SeedSettingDependencyWatchdogEndpoint, s conversion.Scope) error { - return autoConvert_core_SeedSettingDependencyWatchdogEndpoint_To_v1beta1_SeedSettingDependencyWatchdogEndpoint(in, out, s) -} - -func autoConvert_v1beta1_SeedSettingDependencyWatchdogProbe_To_core_SeedSettingDependencyWatchdogProbe(in *SeedSettingDependencyWatchdogProbe, out *core.SeedSettingDependencyWatchdogProbe, s conversion.Scope) error { - out.Enabled = in.Enabled - return nil -} - -// Convert_v1beta1_SeedSettingDependencyWatchdogProbe_To_core_SeedSettingDependencyWatchdogProbe is an autogenerated conversion function. -func Convert_v1beta1_SeedSettingDependencyWatchdogProbe_To_core_SeedSettingDependencyWatchdogProbe(in *SeedSettingDependencyWatchdogProbe, out *core.SeedSettingDependencyWatchdogProbe, s conversion.Scope) error { - return autoConvert_v1beta1_SeedSettingDependencyWatchdogProbe_To_core_SeedSettingDependencyWatchdogProbe(in, out, s) -} - -func autoConvert_core_SeedSettingDependencyWatchdogProbe_To_v1beta1_SeedSettingDependencyWatchdogProbe(in *core.SeedSettingDependencyWatchdogProbe, out *SeedSettingDependencyWatchdogProbe, s conversion.Scope) error { - out.Enabled = in.Enabled - return nil -} - -// Convert_core_SeedSettingDependencyWatchdogProbe_To_v1beta1_SeedSettingDependencyWatchdogProbe is an autogenerated conversion function. -func Convert_core_SeedSettingDependencyWatchdogProbe_To_v1beta1_SeedSettingDependencyWatchdogProbe(in *core.SeedSettingDependencyWatchdogProbe, out *SeedSettingDependencyWatchdogProbe, s conversion.Scope) error { - return autoConvert_core_SeedSettingDependencyWatchdogProbe_To_v1beta1_SeedSettingDependencyWatchdogProbe(in, out, s) -} - func autoConvert_v1beta1_SeedSettingDependencyWatchdogProber_To_core_SeedSettingDependencyWatchdogProber(in *SeedSettingDependencyWatchdogProber, out *core.SeedSettingDependencyWatchdogProber, s conversion.Scope) error { out.Enabled = in.Enabled return nil diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.deepcopy.go index 0f762100e..98df27cd5 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.deepcopy.go @@ -2641,6 +2641,11 @@ func (in *MachineImage) DeepCopyInto(out *MachineImage) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.UpdateStrategy != nil { + in, out := &in.UpdateStrategy, &out.UpdateStrategy + *out = new(MachineImageUpdateStrategy) + **out = **in + } return } @@ -3811,16 +3816,6 @@ func (in *SeedSelector) DeepCopy() *SeedSelector { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SeedSettingDependencyWatchdog) DeepCopyInto(out *SeedSettingDependencyWatchdog) { *out = *in - if in.Endpoint != nil { - in, out := &in.Endpoint, &out.Endpoint - *out = new(SeedSettingDependencyWatchdogEndpoint) - **out = **in - } - if in.Probe != nil { - in, out := &in.Probe, &out.Probe - *out = new(SeedSettingDependencyWatchdogProbe) - **out = **in - } if in.Weeder != nil { in, out := &in.Weeder, &out.Weeder *out = new(SeedSettingDependencyWatchdogWeeder) @@ -3844,38 +3839,6 @@ func (in *SeedSettingDependencyWatchdog) DeepCopy() *SeedSettingDependencyWatchd return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SeedSettingDependencyWatchdogEndpoint) DeepCopyInto(out *SeedSettingDependencyWatchdogEndpoint) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeedSettingDependencyWatchdogEndpoint. -func (in *SeedSettingDependencyWatchdogEndpoint) DeepCopy() *SeedSettingDependencyWatchdogEndpoint { - if in == nil { - return nil - } - out := new(SeedSettingDependencyWatchdogEndpoint) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SeedSettingDependencyWatchdogProbe) DeepCopyInto(out *SeedSettingDependencyWatchdogProbe) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeedSettingDependencyWatchdogProbe. -func (in *SeedSettingDependencyWatchdogProbe) DeepCopy() *SeedSettingDependencyWatchdogProbe { - if in == nil { - return nil - } - out := new(SeedSettingDependencyWatchdogProbe) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SeedSettingDependencyWatchdogProber) DeepCopyInto(out *SeedSettingDependencyWatchdogProber) { *out = *in diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.defaults.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.defaults.go index 752ae794d..64aeb9796 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.defaults.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.defaults.go @@ -47,6 +47,7 @@ func RegisterDefaults(scheme *runtime.Scheme) error { func SetObjectDefaults_CloudProfile(in *CloudProfile) { for i := range in.Spec.MachineImages { a := &in.Spec.MachineImages[i] + SetDefaults_MachineImage(a) for j := range a.Versions { b := &a.Versions[j] SetDefaults_MachineImageVersion(b) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/apis/core/zz_generated.deepcopy.go index 9140af188..1c213ccc6 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/zz_generated.deepcopy.go @@ -2636,6 +2636,11 @@ func (in *MachineImage) DeepCopyInto(out *MachineImage) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.UpdateStrategy != nil { + in, out := &in.UpdateStrategy, &out.UpdateStrategy + *out = new(MachineImageUpdateStrategy) + **out = **in + } return } @@ -3806,16 +3811,6 @@ func (in *SeedSelector) DeepCopy() *SeedSelector { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SeedSettingDependencyWatchdog) DeepCopyInto(out *SeedSettingDependencyWatchdog) { *out = *in - if in.Endpoint != nil { - in, out := &in.Endpoint, &out.Endpoint - *out = new(SeedSettingDependencyWatchdogEndpoint) - **out = **in - } - if in.Probe != nil { - in, out := &in.Probe, &out.Probe - *out = new(SeedSettingDependencyWatchdogProbe) - **out = **in - } if in.Weeder != nil { in, out := &in.Weeder, &out.Weeder *out = new(SeedSettingDependencyWatchdogWeeder) @@ -3839,38 +3834,6 @@ func (in *SeedSettingDependencyWatchdog) DeepCopy() *SeedSettingDependencyWatchd return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SeedSettingDependencyWatchdogEndpoint) DeepCopyInto(out *SeedSettingDependencyWatchdogEndpoint) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeedSettingDependencyWatchdogEndpoint. -func (in *SeedSettingDependencyWatchdogEndpoint) DeepCopy() *SeedSettingDependencyWatchdogEndpoint { - if in == nil { - return nil - } - out := new(SeedSettingDependencyWatchdogEndpoint) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SeedSettingDependencyWatchdogProbe) DeepCopyInto(out *SeedSettingDependencyWatchdogProbe) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeedSettingDependencyWatchdogProbe. -func (in *SeedSettingDependencyWatchdogProbe) DeepCopy() *SeedSettingDependencyWatchdogProbe { - if in == nil { - return nil - } - out := new(SeedSettingDependencyWatchdogProbe) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SeedSettingDependencyWatchdogProber) DeepCopyInto(out *SeedSettingDependencyWatchdogProber) { *out = *in diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go index 61f5e04a5..9eb156e30 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go @@ -53,7 +53,6 @@ func (o *OperatingSystemConfig) GetExtensionSpec() Spec { // GetExtensionPurpose implements Object. func (o *OperatingSystemConfigSpec) GetExtensionPurpose() *string { return (*string)(&o.Purpose) - } // GetExtensionStatus implements Object. @@ -110,7 +109,7 @@ type Unit struct { Name string `json:"name"` // Command is the unit's command. // +optional - Command *string `json:"command,omitempty"` + Command *UnitCommand `json:"command,omitempty"` // Enable describes whether the unit is enabled or not. // +optional Enable *bool `json:"enable,omitempty"` @@ -122,6 +121,26 @@ type Unit struct { // +patchStrategy=merge // +optional DropIns []DropIn `json:"dropIns,omitempty" patchStrategy:"merge" patchMergeKey:"name"` + // FilePaths is a list of files the unit depends on. If any file changes a restart of the dependent unit will be + // triggered. For each FilePath there must exist a File with matching Path in OperatingSystemConfig.Spec.Files. + FilePaths []string `json:"filePaths,omitempty"` +} + +// UnitCommand is a string alias. +type UnitCommand string + +const ( + // CommandStart is the 'start' command for a unit. + CommandStart UnitCommand = "start" + // CommandRestart is the 'restart' command for a unit. + CommandRestart UnitCommand = "restart" + // CommandStop is the 'stop' command for a unit. + CommandStop UnitCommand = "stop" +) + +// UnitCommandPtr returns a pointer to the provided unit command. +func UnitCommandPtr(c UnitCommand) *UnitCommand { + return &c } // DropIn is a drop-in configuration for a systemd unit. @@ -157,6 +176,9 @@ type FileContent struct { // This for example can be used to manipulate the clear-text content before it reaches the node. // +optional TransmitUnencoded *bool `json:"transmitUnencoded,omitempty"` + // ImageRef describes a container image which contains a file. + // +optional + ImageRef *FileContentImageRef `json:"imageRef,omitempty"` } // FileContentSecretRef contains keys for referencing a file content's data from a secret in the same namespace. @@ -175,6 +197,14 @@ type FileContentInline struct { Data string `json:"data"` } +// FileContentImageRef describes a container image which contains a file +type FileContentImageRef struct { + // Image contains the container image repository with tag. + Image string `json:"image"` + // FilePathInImage contains the path in the image to the file that should be extracted. + FilePathInImage string `json:"filePathInImage"` +} + // OperatingSystemConfigStatus is the status for a OperatingSystemConfig resource. type OperatingSystemConfigStatus struct { // DefaultStatus is a structure containing common fields used by all extension resources. @@ -263,8 +293,4 @@ const ( PlainFileCodecID FileCodecID = "" // B64FileCodecID is the base64 file codec id. B64FileCodecID FileCodecID = "b64" - // GZIPFileCodecID is the gzip file codec id. - GZIPFileCodecID FileCodecID = "gzip" - // GZIPB64FileCodecID is the gzip combined with base64 codec id. - GZIPB64FileCodecID FileCodecID = "gzip+b64" ) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/zz_generated.deepcopy.go index 70dd50087..b60aa5ea6 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/zz_generated.deepcopy.go @@ -1056,6 +1056,11 @@ func (in *FileContent) DeepCopyInto(out *FileContent) { *out = new(bool) **out = **in } + if in.ImageRef != nil { + in, out := &in.ImageRef, &out.ImageRef + *out = new(FileContentImageRef) + **out = **in + } return } @@ -1069,6 +1074,22 @@ func (in *FileContent) DeepCopy() *FileContent { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FileContentImageRef) DeepCopyInto(out *FileContentImageRef) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FileContentImageRef. +func (in *FileContentImageRef) DeepCopy() *FileContentImageRef { + if in == nil { + return nil + } + out := new(FileContentImageRef) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *FileContentInline) DeepCopyInto(out *FileContentInline) { *out = *in @@ -1520,7 +1541,7 @@ func (in *Unit) DeepCopyInto(out *Unit) { *out = *in if in.Command != nil { in, out := &in.Command, &out.Command - *out = new(string) + *out = new(UnitCommand) **out = **in } if in.Enable != nil { @@ -1538,6 +1559,11 @@ func (in *Unit) DeepCopyInto(out *Unit) { *out = make([]DropIn, len(*in)) copy(*out, *in) } + if in.FilePaths != nil { + in, out := &in.FilePaths, &out.FilePaths + *out = make([]string, len(*in)) + copy(*out, *in) + } return } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/types.go b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/types.go index 2fccce0ff..19b94151a 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/types.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/types.go @@ -373,7 +373,7 @@ type KubeControllerManagerConfig struct { CertificateSigningDuration *metav1.Duration `json:"certificateSigningDuration,omitempty"` } -// Gardener contains the configuration settings for the Gardener componenets. +// Gardener contains the configuration settings for the Gardener components. type Gardener struct { // ClusterIdentity is the identity of the garden cluster. This field is immutable. // +kubebuilder:validation:MinLength=1 diff --git a/vendor/github.com/gardener/gardener/pkg/extensions/customresources.go b/vendor/github.com/gardener/gardener/pkg/extensions/customresources.go index 16989e1a6..78f198b2d 100644 --- a/vendor/github.com/gardener/gardener/pkg/extensions/customresources.go +++ b/vendor/github.com/gardener/gardener/pkg/extensions/customresources.go @@ -223,7 +223,7 @@ func WaitUntilExtensionObjectDeleted( } if lastErr := obj.GetExtensionStatus().GetLastError(); lastErr != nil { - log.Error(fmt.Errorf(lastErr.Description), "Object did not get deleted yet") + log.Info("Object did not get deleted yet", "description", lastErr.Description) lastObservedError = v1beta1helper.NewErrorWithCodes(errors.New(lastErr.Description), lastErr.Codes...) } diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/types.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/types.go index 8917a0b32..18e431649 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/types.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/types.go @@ -461,6 +461,8 @@ type ETCDConfig struct { // "github.com/gardener/etcd-druid/pkg/features/features.go". // Default: nil FeatureGates map[string]bool + // DeltaSnapshotRetentionPeriod defines the duration for which delta snapshots will be retained, excluding the latest snapshot set. + DeltaSnapshotRetentionPeriod *metav1.Duration } // ETCDController contains config specific to ETCD controller diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/types.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/types.go index 1614f95a1..e0f50d3de 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/types.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/types.go @@ -560,6 +560,9 @@ type ETCDConfig struct { // Default: nil // +optional FeatureGates map[string]bool `json:"featureGates,omitempty"` + // DeltaSnapshotRetentionPeriod defines the duration for which delta snapshots will be retained, excluding the latest snapshot set. + // +optional + DeltaSnapshotRetentionPeriod *metav1.Duration `json:"deltaSnapshotRetentionPeriod,omitempty"` } // ETCDController contains config specific to ETCD controller diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.conversion.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.conversion.go index 179e6273a..9b0a82075 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.conversion.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.conversion.go @@ -720,6 +720,7 @@ func autoConvert_v1alpha1_ETCDConfig_To_config_ETCDConfig(in *ETCDConfig, out *c out.BackupCompactionController = (*config.BackupCompactionController)(unsafe.Pointer(in.BackupCompactionController)) out.BackupLeaderElection = (*config.ETCDBackupLeaderElection)(unsafe.Pointer(in.BackupLeaderElection)) out.FeatureGates = *(*map[string]bool)(unsafe.Pointer(&in.FeatureGates)) + out.DeltaSnapshotRetentionPeriod = (*v1.Duration)(unsafe.Pointer(in.DeltaSnapshotRetentionPeriod)) return nil } @@ -734,6 +735,7 @@ func autoConvert_config_ETCDConfig_To_v1alpha1_ETCDConfig(in *config.ETCDConfig, out.BackupCompactionController = (*BackupCompactionController)(unsafe.Pointer(in.BackupCompactionController)) out.BackupLeaderElection = (*ETCDBackupLeaderElection)(unsafe.Pointer(in.BackupLeaderElection)) out.FeatureGates = *(*map[string]bool)(unsafe.Pointer(&in.FeatureGates)) + out.DeltaSnapshotRetentionPeriod = (*v1.Duration)(unsafe.Pointer(in.DeltaSnapshotRetentionPeriod)) return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.deepcopy.go index 73446340f..15302cf09 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.deepcopy.go @@ -305,6 +305,11 @@ func (in *ETCDConfig) DeepCopyInto(out *ETCDConfig) { (*out)[key] = val } } + if in.DeltaSnapshotRetentionPeriod != nil { + in, out := &in.DeltaSnapshotRetentionPeriod, &out.DeltaSnapshotRetentionPeriod + *out = new(v1.Duration) + **out = **in + } return } diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/zz_generated.deepcopy.go index 212e7d4b5..5d6d95943 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/zz_generated.deepcopy.go @@ -305,6 +305,11 @@ func (in *ETCDConfig) DeepCopyInto(out *ETCDConfig) { (*out)[key] = val } } + if in.DeltaSnapshotRetentionPeriod != nil { + in, out := &in.DeltaSnapshotRetentionPeriod, &out.DeltaSnapshotRetentionPeriod + *out = new(v1.Duration) + **out = **in + } return } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/errors/unwrap.go b/vendor/github.com/gardener/gardener/pkg/utils/errors/unwrap.go index d79b43d47..f751dda45 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/errors/unwrap.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/errors/unwrap.go @@ -14,7 +14,9 @@ package errors -import "errors" +import ( + "errors" +) // Unwrap unwraps and returns the root error. Multiple wrappings via `fmt.Errorf` implementations are properly taken into account. func Unwrap(err error) error { diff --git a/vendor/github.com/gardener/gardener/pkg/utils/gardener/shoot.go b/vendor/github.com/gardener/gardener/pkg/utils/gardener/shoot.go index 9c65e2a36..bd7272a93 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/gardener/shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/gardener/shoot.go @@ -681,3 +681,18 @@ func ComputeTechnicalID(projectName string, shoot *gardencorev1beta1.Shoot) stri // New clusters shall be created with the new technical id (double hyphens). return fmt.Sprintf("%s-%s--%s", v1beta1constants.TechnicalIDPrefix, projectName, shoot.Name) } + +// GetShootConditionTypes returns all known shoot condition types. +func GetShootConditionTypes(workerless bool) []gardencorev1beta1.ConditionType { + shootConditionTypes := []gardencorev1beta1.ConditionType{ + gardencorev1beta1.ShootAPIServerAvailable, + gardencorev1beta1.ShootControlPlaneHealthy, + gardencorev1beta1.ShootObservabilityComponentsHealthy, + } + + if !workerless { + shootConditionTypes = append(shootConditionTypes, gardencorev1beta1.ShootEveryNodeReady) + } + + return append(shootConditionTypes, gardencorev1beta1.ShootSystemComponentsHealthy) +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/controllers.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/controllers.go new file mode 100644 index 000000000..fea76268e --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/controllers.go @@ -0,0 +1,118 @@ +// Copyright 2023 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file. +// +// 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. + +package kubernetes + +import versionutils "github.com/gardener/gardener/pkg/utils/version" + +// APIGroupControllerMap is a map for the Kubernetes API groups and the corresponding controllers for them. +var APIGroupControllerMap = map[string]map[string]versionutils.VersionRange{ + "internal/v1alpha1": { + "storage-version-gc": {}, + }, + "apps/v1": { + "daemonset": {}, + "deployment": {}, + "replicaset": {}, + "statefulset": {}, + }, + "apps/v1beta1": { + "disruption": {}, + }, + "authentication/v1": { + "attachdetach": {}, + "persistentvolume-expander": {}, + }, + "authorization/v1": { + "csrapproving": {}, + }, + "autoscaling/v1": { + "horizontalpodautoscaling": {}, + }, + "autoscaling/v2": { + "horizontalpodautoscaling": {}, + }, + "batch/v1": { + "cronjob": {}, + "job": {}, + "ttl-after-finished": {}, + }, + "certificates/v1": { + "csrapproving": {}, + "csrcleaner": {}, + "csrsigning": {}, + }, + "certificates/v1beta1": { + "csrsigning": {}, + }, + "coordination/v1": { + "nodelifecycle": {}, + "storage-version-gc": {}, + }, + "discovery/v1": { + "endpointslice": {}, + "endpointslicemirroring": {}, + }, + "extensions/v1beta1": { + "disruption": {}, + }, + "policy/v1": { + "disruption": {}, + }, + "rbac/v1": { + "clusterrole-aggregation": {}, + }, + "resource/v1alpha2": { + "resource-claim-controller": {AddedInVersion: "1.27"}, + }, + "v1": { + "attachdetach": {}, + "bootstrapsigner": {}, + "cloud-node-lifecycle": {}, + "cronjob": {}, + "csrapproving": {}, + "csrsigning": {}, + "daemonset": {}, + "deployment": {}, + "disruption": {}, + "endpoint": {}, + "endpointslice": {}, + "endpointslicemirroring": {}, + "ephemeral-volume": {}, + "garbagecollector": {}, + "horizontalpodautoscaling": {}, + "job": {}, + "legacy-service-account-token-cleaner": {AddedInVersion: "1.28"}, + "namespace": {}, + "nodelifecycle": {}, + "persistentvolume-binder": {}, + "persistentvolume-expander": {}, + "podgc": {}, + "pv-protection": {}, + "pvc-protection": {}, + "replicaset": {}, + "replicationcontroller": {}, + "resource-claim-controller": {AddedInVersion: "1.27"}, + "resourcequota": {}, + "root-ca-cert-publisher": {}, + "route": {}, + "service": {}, + "serviceaccount": {}, + "serviceaccount-token": {}, + "statefulset": {}, + "tokencleaner": {}, + "ttl": {}, + "ttl-after-finished": {}, + }, +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/daemonset.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/daemonset.go index 577259707..e3f6985ed 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/daemonset.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/daemonset.go @@ -31,7 +31,7 @@ func daemonSetMaxUnavailable(daemonSet *appsv1.DaemonSet) int32 { return 0 } - maxUnavailable, err := intstr.GetValueFromIntOrPercent(rollingUpdate.MaxUnavailable, int(daemonSet.Status.DesiredNumberScheduled), false) + maxUnavailable, err := intstr.GetScaledValueFromIntOrPercent(rollingUpdate.MaxUnavailable, int(daemonSet.Status.DesiredNumberScheduled), false) if err != nil { return 0 } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/managedresources/builder/managedresources.go b/vendor/github.com/gardener/gardener/pkg/utils/managedresources/builder/managedresources.go index 040fa0ed9..4cbcd6b9b 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/managedresources/builder/managedresources.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/managedresources/builder/managedresources.go @@ -23,7 +23,6 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/util/sets" "sigs.k8s.io/controller-runtime/pkg/client" resourcesv1alpha1 "github.com/gardener/gardener/pkg/apis/resources/v1alpha1" @@ -143,11 +142,6 @@ func (m *ManagedResource) Reconcile(ctx context.Context) error { // if the mr is not found just create it mutateFn(resource) - // only mark the new secrets - if err := markSecretsAsGarbageCollectable(ctx, m.client, secretsFromRefs(resource, sets.New[string]()), false); err != nil { - return fmt.Errorf("marking new secrets as garbage collectable: %w", err) - } - return m.client.Create(ctx, resource) } return err @@ -159,9 +153,8 @@ func (m *ManagedResource) Reconcile(ctx context.Context) error { // This guarantees that "old" secrets are always taken care of. // If an old secret is already deleted then we do not care about it and continue the flow. // For more details, please see https://github.com/gardener/gardener/pull/8116 - excludedNames := sets.New[string]() - oldSecrets := secretsFromRefs(resource, excludedNames) - if err := markSecretsAsGarbageCollectable(ctx, m.client, oldSecrets, true); err != nil { + oldSecrets := secretsFromRefs(resource) + if err := markSecretsAsGarbageCollectable(ctx, m.client, oldSecrets); err != nil { return fmt.Errorf("marking old secrets as garbage collectable: %w", err) } @@ -172,17 +165,6 @@ func (m *ManagedResource) Reconcile(ctx context.Context) error { return nil } - // exclude all already patched secrets - for _, s := range oldSecrets { - excludedNames.Insert(s.Name) - } - - // mark new secrets (if any) as garbage collectable - newSecrets := secretsFromRefs(resource, excludedNames) - if err := markSecretsAsGarbageCollectable(ctx, m.client, newSecrets, false); err != nil { - return fmt.Errorf("marking new secrets as garbage collectable: %w", err) - } - return m.client.Update(ctx, resource) } @@ -191,10 +173,10 @@ func (m *ManagedResource) Delete(ctx context.Context) error { return client.IgnoreNotFound(m.client.Delete(ctx, m.resource)) } -func markSecretsAsGarbageCollectable(ctx context.Context, c client.Client, secrets []*corev1.Secret, ignoreNotFound bool) error { +func markSecretsAsGarbageCollectable(ctx context.Context, c client.Client, secrets []*corev1.Secret) error { for _, secret := range secrets { if err := c.Get(ctx, client.ObjectKeyFromObject(secret), secret); err != nil { - if apierrors.IsNotFound(err) && ignoreNotFound { + if apierrors.IsNotFound(err) { continue } return err @@ -214,18 +196,15 @@ func markSecretsAsGarbageCollectable(ctx context.Context, c client.Client, secre return nil } -func secretsFromRefs(obj *resourcesv1alpha1.ManagedResource, excludedNames sets.Set[string]) []*corev1.Secret { +func secretsFromRefs(obj *resourcesv1alpha1.ManagedResource) []*corev1.Secret { secrets := make([]*corev1.Secret, 0, len(obj.Spec.SecretRefs)) for _, secretRef := range obj.Spec.SecretRefs { - if !excludedNames.Has(secretRef.Name) { - secret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: secretRef.Name, - Namespace: obj.Namespace, - }, - } - secrets = append(secrets, secret) - } + secrets = append(secrets, &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: secretRef.Name, + Namespace: obj.Namespace, + }, + }) } return secrets } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/vpn_tlsauth.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/vpn_tlsauth.go index 2d879ae9c..9674b2229 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/vpn_tlsauth.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/vpn_tlsauth.go @@ -71,7 +71,6 @@ func (v *VPNTLSAuth) SecretData() map[string][]byte { // generateVPNKey generates PSK for OpenVPN similar as generated by `openvpn --genkey` command. func generateVPNKey() ([]byte, error) { - allowedCharacters := "0123456789abcdef" keyString, err := utils.GenerateRandomStringFromCharset(512, allowedCharacters) if err != nil { diff --git a/vendor/github.com/gardener/gardener/pkg/utils/version/version.go b/vendor/github.com/gardener/gardener/pkg/utils/version/version.go index 5ba29768b..8ac379018 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/version/version.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/version/version.go @@ -97,3 +97,41 @@ func normalize(version string) string { } return v } + +// VersionRange represents a version range of type [AddedInVersion, RemovedInVersion). +type VersionRange struct { + AddedInVersion string + RemovedInVersion string +} + +// Contains returns true if the range contains the given version, false otherwise. +// The range contains the given version only if it's greater or equal than AddedInVersion (always true if AddedInVersion is empty), +// and less than RemovedInVersion (always true if RemovedInVersion is empty). +func (r *VersionRange) Contains(version string) (bool, error) { + var constraint string + switch { + case r.AddedInVersion != "" && r.RemovedInVersion == "": + constraint = fmt.Sprintf(">= %s", r.AddedInVersion) + case r.AddedInVersion == "" && r.RemovedInVersion != "": + constraint = fmt.Sprintf("< %s", r.RemovedInVersion) + case r.AddedInVersion != "" && r.RemovedInVersion != "": + constraint = fmt.Sprintf(">= %s, < %s", r.AddedInVersion, r.RemovedInVersion) + default: + constraint = "*" + } + return CheckVersionMeetsConstraint(version, constraint) +} + +// SupportedVersionRange returns the supported version range for the given API. +func (r *VersionRange) SupportedVersionRange() string { + switch { + case r.AddedInVersion != "" && r.RemovedInVersion == "": + return fmt.Sprintf("versions >= %s", r.AddedInVersion) + case r.AddedInVersion == "" && r.RemovedInVersion != "": + return fmt.Sprintf("versions < %s", r.RemovedInVersion) + case r.AddedInVersion != "" && r.RemovedInVersion != "": + return fmt.Sprintf("versions >= %s, < %s", r.AddedInVersion, r.RemovedInVersion) + default: + return "all kubernetes versions" + } +} diff --git a/vendor/github.com/gardener/gardener/test/framework/common.go b/vendor/github.com/gardener/gardener/test/framework/common.go index fb3d9cef4..0cbe01d3a 100644 --- a/vendor/github.com/gardener/gardener/test/framework/common.go +++ b/vendor/github.com/gardener/gardener/test/framework/common.go @@ -14,7 +14,9 @@ package framework -import "time" +import ( + "time" +) const ( k8sClientInitPollInterval = 20 * time.Second diff --git a/vendor/github.com/gardener/gardener/test/framework/commonframework.go b/vendor/github.com/gardener/gardener/test/framework/commonframework.go index c88dca58b..32864b08c 100644 --- a/vendor/github.com/gardener/gardener/test/framework/commonframework.go +++ b/vendor/github.com/gardener/gardener/test/framework/commonframework.go @@ -102,7 +102,6 @@ func (f *CommonFramework) BeforeEach() { // CommonAfterSuite performs necessary common steps after all tests of a suite a run func CommonAfterSuite() { - // run all registered cleanup functions RunCleanupActions() diff --git a/vendor/github.com/gardener/gardener/test/framework/errors.go b/vendor/github.com/gardener/gardener/test/framework/errors.go index c27519db3..07224c83b 100644 --- a/vendor/github.com/gardener/gardener/test/framework/errors.go +++ b/vendor/github.com/gardener/gardener/test/framework/errors.go @@ -14,7 +14,9 @@ package framework -import "errors" +import ( + "errors" +) var ( // ErrNoRepositoriesFound no repositories found in repository file diff --git a/vendor/github.com/gardener/gardener/test/framework/k8s_utils.go b/vendor/github.com/gardener/gardener/test/framework/k8s_utils.go index 82777cdca..b97d055ce 100644 --- a/vendor/github.com/gardener/gardener/test/framework/k8s_utils.go +++ b/vendor/github.com/gardener/gardener/test/framework/k8s_utils.go @@ -39,6 +39,7 @@ import ( v1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" "github.com/gardener/gardener/pkg/client/kubernetes" "github.com/gardener/gardener/pkg/utils" + gardenerutils "github.com/gardener/gardener/pkg/utils/gardener" kubernetesutils "github.com/gardener/gardener/pkg/utils/kubernetes" "github.com/gardener/gardener/pkg/utils/kubernetes/health" "github.com/gardener/gardener/pkg/utils/retry" @@ -277,7 +278,7 @@ func DeleteAndWaitForResource(ctx context.Context, k8sClient kubernetes.Interfac } return retry.MinorError(err) } - return retry.MinorError(errors.New("Object still exists")) + return retry.MinorError(errors.New("object still exists")) }) } @@ -348,18 +349,8 @@ func ShootReconciliationSuccessful(shoot *gardencorev1beta1.Shoot) (bool, string return false, "no conditions and last operation present yet" } - shootConditions := sets.New( - gardencorev1beta1.ShootAPIServerAvailable, - gardencorev1beta1.ShootControlPlaneHealthy, - gardencorev1beta1.ShootObservabilityComponentsHealthy, - gardencorev1beta1.ShootSystemComponentsHealthy, - ) - - if !v1beta1helper.IsWorkerless(shoot) { - shootConditions.Insert( - gardencorev1beta1.ShootEveryNodeReady, - ) - } + workerlessShoot := v1beta1helper.IsWorkerless(shoot) + shootConditions := sets.New(gardenerutils.GetShootConditionTypes(workerlessShoot)...) for _, condition := range shoot.Status.Conditions { if condition.Status != gardencorev1beta1.ConditionTrue { diff --git a/vendor/github.com/gardener/gardener/test/framework/test_options.go b/vendor/github.com/gardener/gardener/test/framework/test_options.go index 8274b94d6..8cebebc35 100644 --- a/vendor/github.com/gardener/gardener/test/framework/test_options.go +++ b/vendor/github.com/gardener/gardener/test/framework/test_options.go @@ -45,7 +45,6 @@ func (o *TestOptions) ApplyOptions(opts []TestOption) *TestOptions { // it should be a function that configures a ginkgo test case // This should get called when all options are applied. func (o *TestOptions) Complete(it func()) { - if len(o.AfterTests) == 0 && len(o.CAfterTests) == 0 { it() return diff --git a/vendor/github.com/gardener/gardener/test/framework/worker_utils.go b/vendor/github.com/gardener/gardener/test/framework/worker_utils.go index 039757687..46b8fc0f4 100644 --- a/vendor/github.com/gardener/gardener/test/framework/worker_utils.go +++ b/vendor/github.com/gardener/gardener/test/framework/worker_utils.go @@ -80,7 +80,7 @@ func AddWorker(shoot *gardencorev1beta1.Shoot, cloudProfile *gardencorev1beta1.C machineType := cloudProfile.Spec.MachineTypes[0] - //select first machine type of CPU architecture amd64 + // select first machine type of CPU architecture amd64 for _, machine := range cloudProfile.Spec.MachineTypes { if *machine.Architecture == v1beta1constants.ArchitectureAMD64 { machineType = machine @@ -98,15 +98,17 @@ func AddWorker(shoot *gardencorev1beta1.Shoot, cloudProfile *gardencorev1beta1.C return fmt.Errorf("no MachineImage that supports architecture amd64 configured in the Cloudprofile '%s'", cloudProfile.Name) } - qualifyingVersionFound, shootMachineImage, err := helper.GetLatestQualifyingShootMachineImage(*machineImage) + qualifyingVersionFound, latestImageVersion, err := helper.GetLatestQualifyingVersion(helper.ToExpirableVersions(machineImage.Versions)) if err != nil { - return err + return fmt.Errorf("an error occurred while determining the latest Shoot machine image for machine image %q: %w", machineImage.Name, err) } if !qualifyingVersionFound { return fmt.Errorf("could not add worker. No latest qualifying Shoot machine image could be determined for machine image %q. Make sure the machine image in the CloudProfile has at least one version that is not expired and not in preview", machineImage.Name) } + shootMachineImage := &gardencorev1beta1.ShootMachineImage{Name: machineImage.Name, Version: &latestImageVersion.Version} + workerName, err := generateRandomWorkerName(fmt.Sprintf("%s-", shootMachineImage.Name)) if err != nil { return err diff --git a/vendor/github.com/gardener/gardener/test/utils/access/serviceaccount.go b/vendor/github.com/gardener/gardener/test/utils/access/serviceaccount.go index 9fab2e917..9338d6dc8 100644 --- a/vendor/github.com/gardener/gardener/test/utils/access/serviceaccount.go +++ b/vendor/github.com/gardener/gardener/test/utils/access/serviceaccount.go @@ -104,7 +104,7 @@ func CreateShootClientFromStaticServiceAccountToken(ctx context.Context, shootCl return retry.Ok() }); err != nil { - return "", nil + return "", err } return string(secret.Data[corev1.ServiceAccountTokenKey]), nil diff --git a/vendor/github.com/google/go-cmp/cmp/compare.go b/vendor/github.com/google/go-cmp/cmp/compare.go index 087320da7..0f5b8a48c 100644 --- a/vendor/github.com/google/go-cmp/cmp/compare.go +++ b/vendor/github.com/google/go-cmp/cmp/compare.go @@ -5,7 +5,7 @@ // Package cmp determines equality of values. // // This package is intended to be a more powerful and safer alternative to -// reflect.DeepEqual for comparing whether two values are semantically equal. +// [reflect.DeepEqual] for comparing whether two values are semantically equal. // It is intended to only be used in tests, as performance is not a goal and // it may panic if it cannot compare the values. Its propensity towards // panicking means that its unsuitable for production environments where a @@ -18,16 +18,17 @@ // For example, an equality function may report floats as equal so long as // they are within some tolerance of each other. // -// - Types with an Equal method may use that method to determine equality. -// This allows package authors to determine the equality operation -// for the types that they define. +// - Types with an Equal method (e.g., [time.Time.Equal]) may use that method +// to determine equality. This allows package authors to determine +// the equality operation for the types that they define. // // - If no custom equality functions are used and no Equal method is defined, // equality is determined by recursively comparing the primitive kinds on -// both values, much like reflect.DeepEqual. Unlike reflect.DeepEqual, +// both values, much like [reflect.DeepEqual]. Unlike [reflect.DeepEqual], // unexported fields are not compared by default; they result in panics -// unless suppressed by using an Ignore option (see cmpopts.IgnoreUnexported) -// or explicitly compared using the Exporter option. +// unless suppressed by using an [Ignore] option +// (see [github.com/google/go-cmp/cmp/cmpopts.IgnoreUnexported]) +// or explicitly compared using the [Exporter] option. package cmp import ( @@ -45,14 +46,14 @@ import ( // Equal reports whether x and y are equal by recursively applying the // following rules in the given order to x and y and all of their sub-values: // -// - Let S be the set of all Ignore, Transformer, and Comparer options that +// - Let S be the set of all [Ignore], [Transformer], and [Comparer] options that // remain after applying all path filters, value filters, and type filters. -// If at least one Ignore exists in S, then the comparison is ignored. -// If the number of Transformer and Comparer options in S is non-zero, +// If at least one [Ignore] exists in S, then the comparison is ignored. +// If the number of [Transformer] and [Comparer] options in S is non-zero, // then Equal panics because it is ambiguous which option to use. -// If S contains a single Transformer, then use that to transform +// If S contains a single [Transformer], then use that to transform // the current values and recursively call Equal on the output values. -// If S contains a single Comparer, then use that to compare the current values. +// If S contains a single [Comparer], then use that to compare the current values. // Otherwise, evaluation proceeds to the next rule. // // - If the values have an Equal method of the form "(T) Equal(T) bool" or @@ -66,21 +67,22 @@ import ( // Functions are only equal if they are both nil, otherwise they are unequal. // // Structs are equal if recursively calling Equal on all fields report equal. -// If a struct contains unexported fields, Equal panics unless an Ignore option -// (e.g., cmpopts.IgnoreUnexported) ignores that field or the Exporter option -// explicitly permits comparing the unexported field. +// If a struct contains unexported fields, Equal panics unless an [Ignore] option +// (e.g., [github.com/google/go-cmp/cmp/cmpopts.IgnoreUnexported]) ignores that field +// or the [Exporter] option explicitly permits comparing the unexported field. // // Slices are equal if they are both nil or both non-nil, where recursively // calling Equal on all non-ignored slice or array elements report equal. // Empty non-nil slices and nil slices are not equal; to equate empty slices, -// consider using cmpopts.EquateEmpty. +// consider using [github.com/google/go-cmp/cmp/cmpopts.EquateEmpty]. // // Maps are equal if they are both nil or both non-nil, where recursively // calling Equal on all non-ignored map entries report equal. // Map keys are equal according to the == operator. -// To use custom comparisons for map keys, consider using cmpopts.SortMaps. +// To use custom comparisons for map keys, consider using +// [github.com/google/go-cmp/cmp/cmpopts.SortMaps]. // Empty non-nil maps and nil maps are not equal; to equate empty maps, -// consider using cmpopts.EquateEmpty. +// consider using [github.com/google/go-cmp/cmp/cmpopts.EquateEmpty]. // // Pointers and interfaces are equal if they are both nil or both non-nil, // where they have the same underlying concrete type and recursively diff --git a/vendor/github.com/google/go-cmp/cmp/export_unsafe.go b/vendor/github.com/google/go-cmp/cmp/export.go similarity index 94% rename from vendor/github.com/google/go-cmp/cmp/export_unsafe.go rename to vendor/github.com/google/go-cmp/cmp/export.go index e2c0f74e8..29f82fe6b 100644 --- a/vendor/github.com/google/go-cmp/cmp/export_unsafe.go +++ b/vendor/github.com/google/go-cmp/cmp/export.go @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !purego -// +build !purego - package cmp import ( @@ -12,8 +9,6 @@ import ( "unsafe" ) -const supportExporters = true - // retrieveUnexportedField uses unsafe to forcibly retrieve any field from // a struct such that the value has read-write permissions. // diff --git a/vendor/github.com/google/go-cmp/cmp/export_panic.go b/vendor/github.com/google/go-cmp/cmp/export_panic.go deleted file mode 100644 index ae851fe53..000000000 --- a/vendor/github.com/google/go-cmp/cmp/export_panic.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2017, The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build purego -// +build purego - -package cmp - -import "reflect" - -const supportExporters = false - -func retrieveUnexportedField(reflect.Value, reflect.StructField, bool) reflect.Value { - panic("no support for forcibly accessing unexported fields") -} diff --git a/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_unsafe.go b/vendor/github.com/google/go-cmp/cmp/internal/value/pointer.go similarity index 95% rename from vendor/github.com/google/go-cmp/cmp/internal/value/pointer_unsafe.go rename to vendor/github.com/google/go-cmp/cmp/internal/value/pointer.go index 16e6860af..e5dfff69a 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_unsafe.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/value/pointer.go @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !purego -// +build !purego - package value import ( diff --git a/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go b/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go deleted file mode 100644 index 1a71bfcbd..000000000 --- a/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2018, The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build purego -// +build purego - -package value - -import "reflect" - -// Pointer is an opaque typed pointer and is guaranteed to be comparable. -type Pointer struct { - p uintptr - t reflect.Type -} - -// PointerOf returns a Pointer from v, which must be a -// reflect.Ptr, reflect.Slice, or reflect.Map. -func PointerOf(v reflect.Value) Pointer { - // NOTE: Storing a pointer as an uintptr is technically incorrect as it - // assumes that the GC implementation does not use a moving collector. - return Pointer{v.Pointer(), v.Type()} -} - -// IsNil reports whether the pointer is nil. -func (p Pointer) IsNil() bool { - return p.p == 0 -} - -// Uintptr returns the pointer as a uintptr. -func (p Pointer) Uintptr() uintptr { - return p.p -} diff --git a/vendor/github.com/google/go-cmp/cmp/options.go b/vendor/github.com/google/go-cmp/cmp/options.go index 1f9ca9c48..754496f3b 100644 --- a/vendor/github.com/google/go-cmp/cmp/options.go +++ b/vendor/github.com/google/go-cmp/cmp/options.go @@ -13,15 +13,15 @@ import ( "github.com/google/go-cmp/cmp/internal/function" ) -// Option configures for specific behavior of Equal and Diff. In particular, -// the fundamental Option functions (Ignore, Transformer, and Comparer), +// Option configures for specific behavior of [Equal] and [Diff]. In particular, +// the fundamental Option functions ([Ignore], [Transformer], and [Comparer]), // configure how equality is determined. // -// The fundamental options may be composed with filters (FilterPath and -// FilterValues) to control the scope over which they are applied. +// The fundamental options may be composed with filters ([FilterPath] and +// [FilterValues]) to control the scope over which they are applied. // -// The cmp/cmpopts package provides helper functions for creating options that -// may be used with Equal and Diff. +// The [github.com/google/go-cmp/cmp/cmpopts] package provides helper functions +// for creating options that may be used with [Equal] and [Diff]. type Option interface { // filter applies all filters and returns the option that remains. // Each option may only read s.curPath and call s.callTTBFunc. @@ -56,9 +56,9 @@ type core struct{} func (core) isCore() {} -// Options is a list of Option values that also satisfies the Option interface. +// Options is a list of [Option] values that also satisfies the [Option] interface. // Helper comparison packages may return an Options value when packing multiple -// Option values into a single Option. When this package processes an Options, +// [Option] values into a single [Option]. When this package processes an Options, // it will be implicitly expanded into a flat list. // // Applying a filter on an Options is equivalent to applying that same filter @@ -105,16 +105,16 @@ func (opts Options) String() string { return fmt.Sprintf("Options{%s}", strings.Join(ss, ", ")) } -// FilterPath returns a new Option where opt is only evaluated if filter f -// returns true for the current Path in the value tree. +// FilterPath returns a new [Option] where opt is only evaluated if filter f +// returns true for the current [Path] in the value tree. // // This filter is called even if a slice element or map entry is missing and // provides an opportunity to ignore such cases. The filter function must be // symmetric such that the filter result is identical regardless of whether the // missing value is from x or y. // -// The option passed in may be an Ignore, Transformer, Comparer, Options, or -// a previously filtered Option. +// The option passed in may be an [Ignore], [Transformer], [Comparer], [Options], or +// a previously filtered [Option]. func FilterPath(f func(Path) bool, opt Option) Option { if f == nil { panic("invalid path filter function") @@ -142,7 +142,7 @@ func (f pathFilter) String() string { return fmt.Sprintf("FilterPath(%s, %v)", function.NameOf(reflect.ValueOf(f.fnc)), f.opt) } -// FilterValues returns a new Option where opt is only evaluated if filter f, +// FilterValues returns a new [Option] where opt is only evaluated if filter f, // which is a function of the form "func(T, T) bool", returns true for the // current pair of values being compared. If either value is invalid or // the type of the values is not assignable to T, then this filter implicitly @@ -154,8 +154,8 @@ func (f pathFilter) String() string { // If T is an interface, it is possible that f is called with two values with // different concrete types that both implement T. // -// The option passed in may be an Ignore, Transformer, Comparer, Options, or -// a previously filtered Option. +// The option passed in may be an [Ignore], [Transformer], [Comparer], [Options], or +// a previously filtered [Option]. func FilterValues(f interface{}, opt Option) Option { v := reflect.ValueOf(f) if !function.IsType(v.Type(), function.ValueFilter) || v.IsNil() { @@ -192,9 +192,9 @@ func (f valuesFilter) String() string { return fmt.Sprintf("FilterValues(%s, %v)", function.NameOf(f.fnc), f.opt) } -// Ignore is an Option that causes all comparisons to be ignored. -// This value is intended to be combined with FilterPath or FilterValues. -// It is an error to pass an unfiltered Ignore option to Equal. +// Ignore is an [Option] that causes all comparisons to be ignored. +// This value is intended to be combined with [FilterPath] or [FilterValues]. +// It is an error to pass an unfiltered Ignore option to [Equal]. func Ignore() Option { return ignore{} } type ignore struct{ core } @@ -234,6 +234,8 @@ func (validator) apply(s *state, vx, vy reflect.Value) { name = fmt.Sprintf("%q.%v", t.PkgPath(), t.Name()) // e.g., "path/to/package".MyType if _, ok := reflect.New(t).Interface().(error); ok { help = "consider using cmpopts.EquateErrors to compare error values" + } else if t.Comparable() { + help = "consider using cmpopts.EquateComparable to compare comparable Go types" } } else { // Unnamed type with unexported fields. Derive PkgPath from field. @@ -254,7 +256,7 @@ const identRx = `[_\p{L}][_\p{L}\p{N}]*` var identsRx = regexp.MustCompile(`^` + identRx + `(\.` + identRx + `)*$`) -// Transformer returns an Option that applies a transformation function that +// Transformer returns an [Option] that applies a transformation function that // converts values of a certain type into that of another. // // The transformer f must be a function "func(T) R" that converts values of @@ -265,13 +267,14 @@ var identsRx = regexp.MustCompile(`^` + identRx + `(\.` + identRx + `)*$`) // same transform to the output of itself (e.g., in the case where the // input and output types are the same), an implicit filter is added such that // a transformer is applicable only if that exact transformer is not already -// in the tail of the Path since the last non-Transform step. +// in the tail of the [Path] since the last non-[Transform] step. // For situations where the implicit filter is still insufficient, -// consider using cmpopts.AcyclicTransformer, which adds a filter -// to prevent the transformer from being recursively applied upon itself. +// consider using [github.com/google/go-cmp/cmp/cmpopts.AcyclicTransformer], +// which adds a filter to prevent the transformer from +// being recursively applied upon itself. // -// The name is a user provided label that is used as the Transform.Name in the -// transformation PathStep (and eventually shown in the Diff output). +// The name is a user provided label that is used as the [Transform.Name] in the +// transformation [PathStep] (and eventually shown in the [Diff] output). // The name must be a valid identifier or qualified identifier in Go syntax. // If empty, an arbitrary name is used. func Transformer(name string, f interface{}) Option { @@ -329,7 +332,7 @@ func (tr transformer) String() string { return fmt.Sprintf("Transformer(%s, %s)", tr.name, function.NameOf(tr.fnc)) } -// Comparer returns an Option that determines whether two values are equal +// Comparer returns an [Option] that determines whether two values are equal // to each other. // // The comparer f must be a function "func(T, T) bool" and is implicitly @@ -377,35 +380,32 @@ func (cm comparer) String() string { return fmt.Sprintf("Comparer(%s)", function.NameOf(cm.fnc)) } -// Exporter returns an Option that specifies whether Equal is allowed to +// Exporter returns an [Option] that specifies whether [Equal] is allowed to // introspect into the unexported fields of certain struct types. // // Users of this option must understand that comparing on unexported fields // from external packages is not safe since changes in the internal -// implementation of some external package may cause the result of Equal +// implementation of some external package may cause the result of [Equal] // to unexpectedly change. However, it may be valid to use this option on types // defined in an internal package where the semantic meaning of an unexported // field is in the control of the user. // -// In many cases, a custom Comparer should be used instead that defines +// In many cases, a custom [Comparer] should be used instead that defines // equality as a function of the public API of a type rather than the underlying // unexported implementation. // -// For example, the reflect.Type documentation defines equality to be determined +// For example, the [reflect.Type] documentation defines equality to be determined // by the == operator on the interface (essentially performing a shallow pointer -// comparison) and most attempts to compare *regexp.Regexp types are interested +// comparison) and most attempts to compare *[regexp.Regexp] types are interested // in only checking that the regular expression strings are equal. -// Both of these are accomplished using Comparers: +// Both of these are accomplished using [Comparer] options: // // Comparer(func(x, y reflect.Type) bool { return x == y }) // Comparer(func(x, y *regexp.Regexp) bool { return x.String() == y.String() }) // -// In other cases, the cmpopts.IgnoreUnexported option can be used to ignore -// all unexported fields on specified struct types. +// In other cases, the [github.com/google/go-cmp/cmp/cmpopts.IgnoreUnexported] +// option can be used to ignore all unexported fields on specified struct types. func Exporter(f func(reflect.Type) bool) Option { - if !supportExporters { - panic("Exporter is not supported on purego builds") - } return exporter(f) } @@ -415,10 +415,10 @@ func (exporter) filter(_ *state, _ reflect.Type, _, _ reflect.Value) applicableO panic("not implemented") } -// AllowUnexported returns an Options that allows Equal to forcibly introspect +// AllowUnexported returns an [Option] that allows [Equal] to forcibly introspect // unexported fields of the specified struct types. // -// See Exporter for the proper use of this option. +// See [Exporter] for the proper use of this option. func AllowUnexported(types ...interface{}) Option { m := make(map[reflect.Type]bool) for _, typ := range types { @@ -432,7 +432,7 @@ func AllowUnexported(types ...interface{}) Option { } // Result represents the comparison result for a single node and -// is provided by cmp when calling Report (see Reporter). +// is provided by cmp when calling Report (see [Reporter]). type Result struct { _ [0]func() // Make Result incomparable flags resultFlags @@ -445,7 +445,7 @@ func (r Result) Equal() bool { } // ByIgnore reports whether the node is equal because it was ignored. -// This never reports true if Equal reports false. +// This never reports true if [Result.Equal] reports false. func (r Result) ByIgnore() bool { return r.flags&reportByIgnore != 0 } @@ -455,7 +455,7 @@ func (r Result) ByMethod() bool { return r.flags&reportByMethod != 0 } -// ByFunc reports whether a Comparer function determined equality. +// ByFunc reports whether a [Comparer] function determined equality. func (r Result) ByFunc() bool { return r.flags&reportByFunc != 0 } @@ -478,7 +478,7 @@ const ( reportByCycle ) -// Reporter is an Option that can be passed to Equal. When Equal traverses +// Reporter is an [Option] that can be passed to [Equal]. When [Equal] traverses // the value trees, it calls PushStep as it descends into each node in the // tree and PopStep as it ascend out of the node. The leaves of the tree are // either compared (determined to be equal or not equal) or ignored and reported diff --git a/vendor/github.com/google/go-cmp/cmp/path.go b/vendor/github.com/google/go-cmp/cmp/path.go index a0a588502..c3c145642 100644 --- a/vendor/github.com/google/go-cmp/cmp/path.go +++ b/vendor/github.com/google/go-cmp/cmp/path.go @@ -14,9 +14,9 @@ import ( "github.com/google/go-cmp/cmp/internal/value" ) -// Path is a list of PathSteps describing the sequence of operations to get +// Path is a list of [PathStep] describing the sequence of operations to get // from some root type to the current position in the value tree. -// The first Path element is always an operation-less PathStep that exists +// The first Path element is always an operation-less [PathStep] that exists // simply to identify the initial type. // // When traversing structs with embedded structs, the embedded struct will @@ -29,8 +29,13 @@ type Path []PathStep // a value's tree structure. Users of this package never need to implement // these types as values of this type will be returned by this package. // -// Implementations of this interface are -// StructField, SliceIndex, MapIndex, Indirect, TypeAssertion, and Transform. +// Implementations of this interface: +// - [StructField] +// - [SliceIndex] +// - [MapIndex] +// - [Indirect] +// - [TypeAssertion] +// - [Transform] type PathStep interface { String() string @@ -70,8 +75,9 @@ func (pa *Path) pop() { *pa = (*pa)[:len(*pa)-1] } -// Last returns the last PathStep in the Path. -// If the path is empty, this returns a non-nil PathStep that reports a nil Type. +// Last returns the last [PathStep] in the Path. +// If the path is empty, this returns a non-nil [PathStep] +// that reports a nil [PathStep.Type]. func (pa Path) Last() PathStep { return pa.Index(-1) } @@ -79,7 +85,8 @@ func (pa Path) Last() PathStep { // Index returns the ith step in the Path and supports negative indexing. // A negative index starts counting from the tail of the Path such that -1 // refers to the last step, -2 refers to the second-to-last step, and so on. -// If index is invalid, this returns a non-nil PathStep that reports a nil Type. +// If index is invalid, this returns a non-nil [PathStep] +// that reports a nil [PathStep.Type]. func (pa Path) Index(i int) PathStep { if i < 0 { i = len(pa) + i @@ -168,7 +175,8 @@ func (ps pathStep) String() string { return fmt.Sprintf("{%s}", s) } -// StructField represents a struct field access on a field called Name. +// StructField is a [PathStep] that represents a struct field access +// on a field called [StructField.Name]. type StructField struct{ *structField } type structField struct { pathStep @@ -204,10 +212,11 @@ func (sf StructField) String() string { return fmt.Sprintf(".%s", sf.name) } func (sf StructField) Name() string { return sf.name } // Index is the index of the field in the parent struct type. -// See reflect.Type.Field. +// See [reflect.Type.Field]. func (sf StructField) Index() int { return sf.idx } -// SliceIndex is an index operation on a slice or array at some index Key. +// SliceIndex is a [PathStep] that represents an index operation on +// a slice or array at some index [SliceIndex.Key]. type SliceIndex struct{ *sliceIndex } type sliceIndex struct { pathStep @@ -247,12 +256,12 @@ func (si SliceIndex) Key() int { // all of the indexes to be shifted. If an index is -1, then that // indicates that the element does not exist in the associated slice. // -// Key is guaranteed to return -1 if and only if the indexes returned -// by SplitKeys are not the same. SplitKeys will never return -1 for +// [SliceIndex.Key] is guaranteed to return -1 if and only if the indexes +// returned by SplitKeys are not the same. SplitKeys will never return -1 for // both indexes. func (si SliceIndex) SplitKeys() (ix, iy int) { return si.xkey, si.ykey } -// MapIndex is an index operation on a map at some index Key. +// MapIndex is a [PathStep] that represents an index operation on a map at some index Key. type MapIndex struct{ *mapIndex } type mapIndex struct { pathStep @@ -266,7 +275,7 @@ func (mi MapIndex) String() string { return fmt.Sprintf("[%#v]", // Key is the value of the map key. func (mi MapIndex) Key() reflect.Value { return mi.key } -// Indirect represents pointer indirection on the parent type. +// Indirect is a [PathStep] that represents pointer indirection on the parent type. type Indirect struct{ *indirect } type indirect struct { pathStep @@ -276,7 +285,7 @@ func (in Indirect) Type() reflect.Type { return in.typ } func (in Indirect) Values() (vx, vy reflect.Value) { return in.vx, in.vy } func (in Indirect) String() string { return "*" } -// TypeAssertion represents a type assertion on an interface. +// TypeAssertion is a [PathStep] that represents a type assertion on an interface. type TypeAssertion struct{ *typeAssertion } type typeAssertion struct { pathStep @@ -286,7 +295,8 @@ func (ta TypeAssertion) Type() reflect.Type { return ta.typ } func (ta TypeAssertion) Values() (vx, vy reflect.Value) { return ta.vx, ta.vy } func (ta TypeAssertion) String() string { return fmt.Sprintf(".(%v)", value.TypeString(ta.typ, false)) } -// Transform is a transformation from the parent type to the current type. +// Transform is a [PathStep] that represents a transformation +// from the parent type to the current type. type Transform struct{ *transform } type transform struct { pathStep @@ -297,13 +307,13 @@ func (tf Transform) Type() reflect.Type { return tf.typ } func (tf Transform) Values() (vx, vy reflect.Value) { return tf.vx, tf.vy } func (tf Transform) String() string { return fmt.Sprintf("%s()", tf.trans.name) } -// Name is the name of the Transformer. +// Name is the name of the [Transformer]. func (tf Transform) Name() string { return tf.trans.name } // Func is the function pointer to the transformer function. func (tf Transform) Func() reflect.Value { return tf.trans.fnc } -// Option returns the originally constructed Transformer option. +// Option returns the originally constructed [Transformer] option. // The == operator can be used to detect the exact option used. func (tf Transform) Option() Option { return tf.trans } diff --git a/vendor/github.com/google/go-cmp/cmp/report_reflect.go b/vendor/github.com/google/go-cmp/cmp/report_reflect.go index 2ab41fad3..e39f42284 100644 --- a/vendor/github.com/google/go-cmp/cmp/report_reflect.go +++ b/vendor/github.com/google/go-cmp/cmp/report_reflect.go @@ -199,7 +199,7 @@ func (opts formatOptions) FormatValue(v reflect.Value, parentKind reflect.Kind, break } sf := t.Field(i) - if supportExporters && !isExported(sf.Name) { + if !isExported(sf.Name) { vv = retrieveUnexportedField(v, sf, true) } s := opts.WithTypeMode(autoType).FormatValue(vv, t.Kind(), ptrs) diff --git a/vendor/github.com/hashicorp/errwrap/errwrap.go b/vendor/github.com/hashicorp/errwrap/errwrap.go index a733bef18..44e368e56 100644 --- a/vendor/github.com/hashicorp/errwrap/errwrap.go +++ b/vendor/github.com/hashicorp/errwrap/errwrap.go @@ -44,6 +44,8 @@ func Wrap(outer, inner error) error { // // format is the format of the error message. The string '{{err}}' will // be replaced with the original error message. +// +// Deprecated: Use fmt.Errorf() func Wrapf(format string, err error) error { outerMsg := "" if err != nil { @@ -148,6 +150,9 @@ func Walk(err error, cb WalkFunc) { for _, err := range e.WrappedErrors() { Walk(err, cb) } + case interface{ Unwrap() error }: + cb(err) + Walk(e.Unwrap(), cb) default: cb(err) } @@ -167,3 +172,7 @@ func (w *wrappedError) Error() string { func (w *wrappedError) WrappedErrors() []error { return []error{w.Outer, w.Inner} } + +func (w *wrappedError) Unwrap() error { + return w.Inner +} diff --git a/vendor/github.com/ironcore-dev/vgopath/.gitignore b/vendor/github.com/ironcore-dev/vgopath/.gitignore new file mode 100644 index 000000000..c8a6a5a5d --- /dev/null +++ b/vendor/github.com/ironcore-dev/vgopath/.gitignore @@ -0,0 +1,33 @@ + +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib +bin/ + +# Test binary, build with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Kubernetes Generated files - skip generated files, except for vendored files + +!vendor/**/zz_generated.* +vendor/ + +# editor and IDE paraphernalia +.idea +*.swp +*.swo +*~ +.vscode/ + +# Utilities +testbin/ + +# Goreleaser +dist/ + diff --git a/vendor/github.com/ironcore-dev/vgopath/.golangci.yaml b/vendor/github.com/ironcore-dev/vgopath/.golangci.yaml new file mode 100644 index 000000000..8bf422070 --- /dev/null +++ b/vendor/github.com/ironcore-dev/vgopath/.golangci.yaml @@ -0,0 +1,20 @@ +run: + timeout: 3m + +linters: + enable: + - revive + - ineffassign + - misspell + - goimports + +severity: + default-severity: error + +linters-settings: + revive: + severity: error + rules: + - name: exported + - name: if-return + disabled: true diff --git a/vendor/github.com/ironcore-dev/vgopath/CODEOWNERS b/vendor/github.com/ironcore-dev/vgopath/CODEOWNERS new file mode 100644 index 000000000..6eede2245 --- /dev/null +++ b/vendor/github.com/ironcore-dev/vgopath/CODEOWNERS @@ -0,0 +1,2 @@ +# ironcore-dev core maintainers +* @ironcore-dev/core diff --git a/vendor/github.com/ironcore-dev/vgopath/CODE_OF_CONDUCT.md b/vendor/github.com/ironcore-dev/vgopath/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..57aa8414c --- /dev/null +++ b/vendor/github.com/ironcore-dev/vgopath/CODE_OF_CONDUCT.md @@ -0,0 +1 @@ +Please refer to the [Gardener on Metal code of conduct](https://ironcore-dev.github.io/documentation/contribute/overview/#code-of-conduct). diff --git a/vendor/github.com/ironcore-dev/vgopath/LICENSE b/vendor/github.com/ironcore-dev/vgopath/LICENSE new file mode 100644 index 000000000..261eeb9e9 --- /dev/null +++ b/vendor/github.com/ironcore-dev/vgopath/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/vendor/github.com/ironcore-dev/vgopath/Makefile b/vendor/github.com/ironcore-dev/vgopath/Makefile new file mode 100644 index 000000000..6a1a70806 --- /dev/null +++ b/vendor/github.com/ironcore-dev/vgopath/Makefile @@ -0,0 +1,105 @@ +# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) +ifeq (,$(shell go env GOBIN)) +GOBIN=$(shell go env GOPATH)/bin +else +GOBIN=$(shell go env GOBIN) +endif + +# Setting SHELL to bash allows bash commands to be executed by recipes. +# This is a requirement for 'setup-envtest.sh' in the test target. +# Options are set to exit when a recipe line exits non-zero or a piped command fails. +SHELL = /usr/bin/env bash -o pipefail +.SHELLFLAGS = -ec + +all: build + +##@ General + +# The help target prints out all targets with their descriptions organized +# beneath their categories. The categories are represented by '##@' and the +# target descriptions by '##'. The awk commands is responsible for reading the +# entire set of makefiles included in this invocation, looking for lines of the +# file as xyz: ## something, and then pretty-format the target and help. Then, +# if there's a line with ##@ something, that gets pretty-printed as a category. +# More info on the usage of ANSI control characters for terminal formatting: +# https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters +# More info on the awk command: +# http://linuxcommand.org/lc3_adv_awk.php + +help: ## Display this help. + @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) + +##@ Development + +.PHONY: fmt +fmt: goimports ## Run goimports against code. + $(GOIMPORTS) -w . + +.PHONY: vet +vet: ## Run go vet against code. + go vet ./... + +.PHONY: lint +lint: ## Run golangci-lint on the code. + $(GOLANGCILINT) run ./... + +.PHONY: add-license +add-license: addlicense ## Add license headers to all go files. + find . -name '*.go' -exec $(ADDLICENSE) -c 'IronCore authors' {} + + +.PHONY: check-license +check-license: addlicense ## Check that every file has a license header present. + find . -name '*.go' -exec $(ADDLICENSE) -check -c 'IronCore authors' {} + + +.PHONY: check +check: add-license fmt lint test golangci-lint # Generate manifests, code, lint, add licenses, test + +.PHONY: test +test: fmt vet ## Run tests. + go test ./... -coverprofile cover.out + +##@ Build + +.PHONY: build +build: fmt vet ## Build manager binary. + go build -o bin/vgopath main.go + +.PHONY: install +install: ## Install vgopath into GOBIN. + go install . + +.PHONY: run +run: fmt lint ## Run a controller from your host. + go run ./main.go + +##@ Tools + +## Location to install dependencies to +LOCALBIN ?= $(shell pwd)/bin +$(LOCALBIN): + mkdir -p $(LOCALBIN) + +## Tool Binaries +ADDLICENSE ?= $(LOCALBIN)/addlicense +GOIMPORTS ?= $(LOCALBIN)/goimports +GOLANGCILINT ?= $(LOCALBIN)/golangci-lint + +## Tool Versions +ADDLICENSE_VERSION ?= v1.1.1 +GOIMPORTS_VERSION ?= v0.14.0 +GOLANGCILINT_VERSION ?= v1.55.1 + +.PHONY: addlicense +addlicense: $(ADDLICENSE) ## Download addlicense locally if necessary. +$(ADDLICENSE): $(LOCALBIN) + test -s $(LOCALBIN)/addlicense || GOBIN=$(LOCALBIN) go install github.com/google/addlicense@$(ADDLICENSE_VERSION) + +.PHONY: goimports +goimports: $(GOIMPORTS) ## Download goimports locally if necessary. +$(GOIMPORTS): $(LOCALBIN) + test -s $(LOCALBIN)/goimports || GOBIN=$(LOCALBIN) go install golang.org/x/tools/cmd/goimports@$(GOIMPORTS_VERSION) + +.PHONY: goimports +golangci-lint: $(GOLANGCILINT) ## Download golangci-lint locally if necessary. +$(GOLANGCILINT): $(LOCALBIN) + test -s $(LOCALBIN)/golangci-lint || GOBIN=$(LOCALBIN) go install github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLANGCILINT_VERSION) diff --git a/vendor/github.com/ironcore-dev/vgopath/README.md b/vendor/github.com/ironcore-dev/vgopath/README.md new file mode 100644 index 000000000..a15fab909 --- /dev/null +++ b/vendor/github.com/ironcore-dev/vgopath/README.md @@ -0,0 +1,36 @@ +# vgopath + +`vgopath` is a tool for module-enabled projects to set up a 'virtual' GOPATH for +legacy tools to run with (`kubernetes/code-generator` I'm looking at you...). + +## Installation + +The simplest way to install `vgopath` is by running + +```shell +go install github.com/ironcore-dev/vgopath@latest +``` + +## Usage + +`vgopath` has to be run from the module-enabled project root. It requires a +target directory to construct the virtual GOPATH. + +Example usage could look like this: + +```shell +# Create the target directory +mkdir -p my-vgopath + +# Do the linking in my-vgopath +vgopath my-vgopath +``` + +Once done, the structure will look something like + +``` +my-vgopath +├── bin -> /bin +├── pkg -> /pkg +└── src -> various subdirectories +``` diff --git a/vendor/github.com/ironcore-dev/vgopath/internal/cmd/version/version.go b/vendor/github.com/ironcore-dev/vgopath/internal/cmd/version/version.go new file mode 100644 index 000000000..949c7f24f --- /dev/null +++ b/vendor/github.com/ironcore-dev/vgopath/internal/cmd/version/version.go @@ -0,0 +1,40 @@ +// Copyright 2023 IronCore 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. + +package version + +import ( + "io" + + "github.com/ironcore-dev/vgopath/internal/version" + "github.com/spf13/cobra" +) + +func Command(out io.Writer) *cobra.Command { + cmd := &cobra.Command{ + Use: "version", + Short: "Prints version information.", + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, args []string) error { + return Run(out) + }, + } + + return cmd +} + +func Run(out io.Writer) error { + version.FPrint(out) + return nil +} diff --git a/vendor/github.com/ironcore-dev/vgopath/internal/cmd/vgopath/exec/exec.go b/vendor/github.com/ironcore-dev/vgopath/internal/cmd/vgopath/exec/exec.go new file mode 100644 index 000000000..bb08522a5 --- /dev/null +++ b/vendor/github.com/ironcore-dev/vgopath/internal/cmd/vgopath/exec/exec.go @@ -0,0 +1,109 @@ +// Copyright 2023 IronCore 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. + +package exec + +import ( + "fmt" + "os" + "os/exec" + "regexp" + + "github.com/ironcore-dev/vgopath/internal/link" + "github.com/spf13/cobra" +) + +func Command() *cobra.Command { + var ( + opts link.Options + dstDir string + shell bool + ) + + cmd := &cobra.Command{ + Use: "exec -- command [args...]", + Short: "Run an executable in a virtual GOPATH.", + Args: func(cmd *cobra.Command, args []string) error { + if !shell { + return cobra.MinimumNArgs(1)(cmd, args) + } + return cobra.ExactArgs(1)(cmd, args) + }, + RunE: func(cmd *cobra.Command, args []string) error { + executable, executableArgs := executableAndArgs(args, shell) + return Run(dstDir, executable, opts, executableArgs) + }, + } + + opts.AddFlags(cmd.Flags()) + cmd.Flags().StringVarP(&dstDir, "dst-dir", "o", "", "Destination directory. If empty, a temporary directory will be created.") + cmd.Flags().BoolVarP(&shell, "shell", "s", false, "Whether to run the command in a shell.") + + return cmd +} + +func executableAndArgs(args []string, doShell bool) (string, []string) { + if !doShell { + return args[0], args[1:] + } + + shell := os.Getenv("SHELL") + if shell == "" { + shell = "/bin/sh" + } + + return shell, []string{"-c", args[0]} +} + +func Run(dstDir, executable string, opts link.Options, args []string) error { + if dstDir == "" { + var err error + dstDir, err = os.MkdirTemp("", "vgopath") + if err != nil { + return fmt.Errorf("error creating temp directory: %w", err) + } + defer func() { _ = os.RemoveAll(dstDir) }() + } + + if err := link.Link(dstDir, opts); err != nil { + return err + } + + cmd := exec.Command(executable, args...) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + cmd.Dir = dstDir + + cmd.Env = mkEnv(dstDir) + return cmd.Run() +} + +var filterEnvRegexp = regexp.MustCompile(`^(GOPATH|GO111MODULE)=`) + +func mkEnv(gopath string) []string { + env := os.Environ() + res := make([]string, 0, len(env)+2) + + for _, kv := range env { + if !filterEnvRegexp.MatchString(kv) { + res = append(res, kv) + } + } + + return append(res, + fmt.Sprintf("GOPATH=%s", gopath), + "GO111MODULE=off", + ) +} diff --git a/vendor/github.com/ironcore-dev/vgopath/internal/cmd/vgopath/vgopath.go b/vendor/github.com/ironcore-dev/vgopath/internal/cmd/vgopath/vgopath.go new file mode 100644 index 000000000..06583b42f --- /dev/null +++ b/vendor/github.com/ironcore-dev/vgopath/internal/cmd/vgopath/vgopath.go @@ -0,0 +1,63 @@ +// Copyright 2023 IronCore 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. + +package vgopath + +import ( + "os" + + "github.com/ironcore-dev/vgopath/internal/cmd/version" + "github.com/ironcore-dev/vgopath/internal/cmd/vgopath/exec" + "github.com/ironcore-dev/vgopath/internal/link" + "github.com/spf13/cobra" +) + +func Command() *cobra.Command { + var ( + opts link.Options + dstDir string + ) + + cmd := &cobra.Command{ + Use: "vgopath", + Short: "Create and operate on virtual GOPATHs", + Long: `Create a 'virtual' GOPATH at the specified directory. + +vgopath will setup a GOPATH folder structure, ensuring that any tool used +to the traditional setup will function as normal. + +The target module will be mirrored to where its go.mod path (the line +after 'module') points at. +`, + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, args []string) error { + return Run(dstDir, opts) + }, + } + + opts.AddFlags(cmd.Flags()) + cmd.Flags().StringVarP(&dstDir, "dst-dir", "o", "", "Destination directory.") + _ = cmd.MarkFlagRequired("dst-dir") + + cmd.AddCommand( + exec.Command(), + version.Command(os.Stdout), + ) + + return cmd +} + +func Run(dstDir string, opts link.Options) error { + return link.Link(dstDir, opts) +} diff --git a/vendor/github.com/ironcore-dev/vgopath/internal/link/link.go b/vendor/github.com/ironcore-dev/vgopath/internal/link/link.go new file mode 100644 index 000000000..8a58b0aee --- /dev/null +++ b/vendor/github.com/ironcore-dev/vgopath/internal/link/link.go @@ -0,0 +1,284 @@ +// Copyright 2022 IronCore 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. + +package link + +import ( + "fmt" + "go/build" + "os" + "path" + "path/filepath" + "sort" + "strings" + + "github.com/ironcore-dev/vgopath/internal/module" + "github.com/spf13/pflag" +) + +type Node struct { + Segment string + Module *module.Module + Children []Node +} + +func insertModuleInNode(node *Node, mod module.Module, relativeSegments []string) error { + if len(relativeSegments) == 0 { + if node.Module != nil { + return fmt.Errorf("cannot insert module %s into node %s: module %s already exists", mod.Path, node.Segment, node.Module.Path) + } + + node.Module = &mod + return nil + } + + var ( + idx = -1 + segment = relativeSegments[0] + ) + for i, child := range node.Children { + if child.Segment == segment { + idx = i + break + } + } + + var child *Node + if idx == -1 { + child = &Node{Segment: segment} + } else { + child = &node.Children[idx] + } + + if err := insertModuleInNode(child, mod, relativeSegments[1:]); err != nil { + return err + } + + if idx == -1 { + node.Children = append(node.Children, *child) + } + + return nil +} + +func BuildModuleNodes(modules []module.Module) ([]Node, error) { + sort.Slice(modules, func(i, j int) bool { return modules[i].Path < modules[j].Path }) + nodeByRootSegment := make(map[string]*Node) + + for _, mod := range modules { + if mod.Path == "" { + return nil, fmt.Errorf("invalid empty module path") + } + + segments := strings.Split(mod.Path, "/") + + rootSegment := segments[0] + node, ok := nodeByRootSegment[rootSegment] + if !ok { + node = &Node{Segment: rootSegment} + nodeByRootSegment[rootSegment] = node + } + + if err := insertModuleInNode(node, mod, segments[1:]); err != nil { + return nil, err + } + } + + res := make([]Node, 0, len(nodeByRootSegment)) + for _, node := range nodeByRootSegment { + res = append(res, *node) + } + return res, nil +} + +func FilterModulesWithoutDir(modules []module.Module) []module.Module { + var res []module.Module + for _, mod := range modules { + // Don't vendor modules without backing directory. + if mod.Dir == "" { + continue + } + + res = append(res, mod) + } + + return res +} + +type Options struct { + SrcDir string + SkipGoBin bool + SkipGoSrc bool + SkipGoPkg bool +} + +func (o *Options) AddFlags(fs *pflag.FlagSet) { + fs.StringVar(&o.SrcDir, "src-dir", o.SrcDir, "Source directory for linking. Empty string indicates current directory.") + fs.BoolVar(&o.SkipGoPkg, "skip-go-pkg", o.SkipGoPkg, "Whether to skip mirroring $GOPATH/pkg") + fs.BoolVar(&o.SkipGoBin, "skip-go-bin", o.SkipGoBin, "Whether to skip mirroring $GOBIN") + fs.BoolVar(&o.SkipGoSrc, "skip-go-src", o.SkipGoSrc, "Whether to skip mirroring modules as src") +} + +func Link(dstDir string, opts Options) error { + if opts.SrcDir == "" { + opts.SrcDir = "." + } + + if !opts.SkipGoSrc { + if err := GoSrc(dstDir, opts.SrcDir); err != nil { + return fmt.Errorf("error linking GOPATH/src: %w", err) + } + } + + if !opts.SkipGoBin { + if err := GoBin(dstDir); err != nil { + return fmt.Errorf("error linking GOPATH/bin: %w", err) + } + } + + if !opts.SkipGoPkg { + if err := GoPkg(dstDir); err != nil { + return fmt.Errorf("error linking GOPATH/pkg: %w", err) + } + } + + return nil +} + +func GoBin(dstDir string) error { + dstGoBinDir := filepath.Join(dstDir, "bin") + if err := os.RemoveAll(dstGoBinDir); err != nil { + return err + } + + srcGoBinDir := os.Getenv("GOBIN") + if srcGoBinDir == "" { + srcGoBinDir = filepath.Join(build.Default.GOPATH, "bin") + } + + if err := os.Symlink(srcGoBinDir, dstGoBinDir); err != nil { + return err + } + return nil +} + +func GoPkg(dstDir string) error { + dstGoPkgDir := filepath.Join(dstDir, "pkg") + if err := os.RemoveAll(dstGoPkgDir); err != nil { + return err + } + + if err := os.Symlink(filepath.Join(build.Default.GOPATH, "pkg"), dstGoPkgDir); err != nil { + return err + } + return nil +} + +func GoSrc(dstDir, srcDir string) error { + mods, err := module.ReadAllGoListModules(module.InDir(srcDir)) + if err != nil { + return fmt.Errorf("error reading modules: %w", err) + } + + mods = FilterModulesWithoutDir(mods) + + nodes, err := BuildModuleNodes(mods) + if err != nil { + return fmt.Errorf("error building module tree: %w", err) + } + + dstGoSrcDir := filepath.Join(dstDir, "src") + if err := os.RemoveAll(dstGoSrcDir); err != nil { + return err + } + + if err := os.Mkdir(dstGoSrcDir, 0777); err != nil { + return err + } + + if err := Nodes(dstGoSrcDir, nodes); err != nil { + return err + } + return nil +} + +type linkNodeError struct { + path string + err error +} + +func (l *linkNodeError) Error() string { + return fmt.Sprintf("[path %s]: %v", l.path, l.err) +} + +func joinLinkNodeError(node Node, err error) error { + if linkNodeErr, ok := err.(*linkNodeError); ok { + return &linkNodeError{ + path: path.Join(node.Segment, linkNodeErr.path), + err: linkNodeErr.err, + } + } + return &linkNodeError{ + path: node.Segment, + err: err, + } +} + +func Nodes(dir string, nodes []Node) error { + for _, node := range nodes { + if err := linkNode(dir, node); err != nil { + return joinLinkNodeError(node, err) + } + } + return nil +} + +func linkNode(dir string, node Node) error { + dstDir := filepath.Join(dir, node.Segment) + + // If the node specifies a module and no children are present, we can take optimize and directly + // symlink the module directory to the destination directory. + if node.Module != nil && len(node.Children) == 0 { + srcDir := node.Module.Dir + + if err := os.Symlink(srcDir, dstDir); err != nil { + return fmt.Errorf("error symlinking node: %w", err) + } + } + + if err := os.RemoveAll(dstDir); err != nil { + return err + } + + if err := os.Mkdir(dstDir, 0777); err != nil { + return err + } + + if node.Module != nil { + srcDir := node.Module.Dir + entries, err := os.ReadDir(srcDir) + if err != nil { + return err + } + + for _, entry := range entries { + srcPath := filepath.Join(srcDir, entry.Name()) + dstPath := filepath.Join(dstDir, entry.Name()) + if err := os.Symlink(srcPath, dstPath); err != nil { + return fmt.Errorf("error symlinking entry %s to %s: %w", srcPath, dstPath, err) + } + } + } + return Nodes(dstDir, node.Children) +} diff --git a/vendor/github.com/ironcore-dev/vgopath/internal/module/module.go b/vendor/github.com/ironcore-dev/vgopath/internal/module/module.go new file mode 100644 index 000000000..c5dc27c7f --- /dev/null +++ b/vendor/github.com/ironcore-dev/vgopath/internal/module/module.go @@ -0,0 +1,184 @@ +// Copyright 2023 IronCore 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. + +package module + +import ( + "encoding/json" + "errors" + "fmt" + "io" + "os/exec" + "sync" + "syscall" + "time" +) + +type Module struct { + Path string + Dir string + Version string + Main bool +} + +type Reader interface { + Read(data []Module) (int, error) +} + +type ReadCloser interface { + Reader + io.Closer +} + +type readCloser struct { + mu sync.Mutex + + cmd *exec.Cmd + dec *json.Decoder + + closed bool + closeErr error +} + +type OpenGoListOptions struct { + Dir string + Command func() *exec.Cmd +} + +func (o *OpenGoListOptions) ApplyToOpenGoList(o2 *OpenGoListOptions) { + if o.Dir != "" { + o2.Dir = o.Dir + } + if o.Command != nil { + o2.Command = o.Command + } +} + +func (o *OpenGoListOptions) ApplyOptions(opts []OpenGoListOption) { + for _, opt := range opts { + opt.ApplyToOpenGoList(o) + } +} + +type OpenGoListOption interface { + ApplyToOpenGoList(o *OpenGoListOptions) +} + +type InDir string + +func (d InDir) ApplyToOpenGoList(o *OpenGoListOptions) { + o.Dir = string(d) +} + +func setOpenGoListDefaults(o *OpenGoListOptions) { + if o.Dir == "" { + o.Dir = "." + } + if o.Command == nil { + o.Command = func() *exec.Cmd { + return exec.Command("go", "list", "-m", "-json", "all") + } + } +} + +func OpenGoList(opts ...OpenGoListOption) (ReadCloser, error) { + o := &OpenGoListOptions{} + o.ApplyOptions(opts) + setOpenGoListDefaults(o) + + cmd := o.Command() + cmd.Dir = o.Dir + stdout, err := cmd.StdoutPipe() + if err != nil { + return nil, err + } + + if err := cmd.Start(); err != nil { + return nil, err + } + + dec := json.NewDecoder(stdout) + + return &readCloser{ + cmd: cmd, + dec: dec, + }, nil +} + +func (r *readCloser) Read(data []Module) (n int, err error) { + for i := 0; i < len(data); i++ { + mod := &data[i] + if err := r.dec.Decode(mod); err != nil { + return i, err + } + } + return len(data), nil +} + +func (r *readCloser) Close() error { + r.mu.Lock() + defer r.mu.Unlock() + + if r.closed { + return r.closeErr + } + + defer func() { r.closed = true }() + + waitDone := make(chan struct{}) + go func() { + defer close(waitDone) + _ = r.cmd.Wait() + }() + + _ = r.cmd.Process.Signal(syscall.SIGTERM) + + timer := time.NewTimer(3 * time.Second) + defer timer.Stop() + + select { + case <-timer.C: + r.closeErr = fmt.Errorf("error waiting for command to be completed") + case <-waitDone: + } + return r.closeErr +} + +func ReadAll(r Reader) ([]Module, error) { + b := make([]Module, 0, 128) + for { + if len(b) == cap(b) { + // Add more capacity (let append pick how much). + b = append(b, Module{})[:len(b)] + } + n, err := r.Read(b[len(b):cap(b)]) + b = b[:len(b)+n] + if err != nil { + if errors.Is(err, io.EOF) { + err = nil + } + return b, err + } + } +} + +func ReadAllGoListModules(opts ...OpenGoListOption) ([]Module, error) { + rc, err := OpenGoList(opts...) + if err != nil { + return nil, err + } + defer func() { _ = rc.Close() }() + + return ReadAll(rc) +} diff --git a/vendor/github.com/ironcore-dev/vgopath/internal/version/version.go b/vendor/github.com/ironcore-dev/vgopath/internal/version/version.go new file mode 100644 index 000000000..6e4ea243f --- /dev/null +++ b/vendor/github.com/ironcore-dev/vgopath/internal/version/version.go @@ -0,0 +1,38 @@ +// Copyright 2023 IronCore 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. + +package version + +import ( + "fmt" + "io" + "os" + "runtime/debug" +) + +func Version() string { + info, ok := debug.ReadBuildInfo() + if !ok || info == nil || info.Main.Version == "" { + return "(unknown)" + } + return info.Main.Version +} + +func FPrint(w io.Writer) { + _, _ = fmt.Fprintf(w, "Version: %s\n", Version()) +} + +func Print() { + FPrint(os.Stdout) +} diff --git a/vendor/github.com/ironcore-dev/vgopath/main.go b/vendor/github.com/ironcore-dev/vgopath/main.go new file mode 100644 index 000000000..62826886f --- /dev/null +++ b/vendor/github.com/ironcore-dev/vgopath/main.go @@ -0,0 +1,27 @@ +// Copyright 2022 IronCore 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. + +package main + +import ( + "log" + + "github.com/ironcore-dev/vgopath/internal/cmd/vgopath" +) + +func main() { + if err := vgopath.Command().Execute(); err != nil { + log.Fatalln(err.Error()) + } +} diff --git a/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md b/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md index 1eb88b6f9..fea67526e 100644 --- a/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md +++ b/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.13.0 + +### Features + +Add PreviewSpect() to enable programmatic preview access to the suite report (fixes #1225) + ## 2.12.1 ### Fixes diff --git a/vendor/github.com/onsi/ginkgo/v2/core_dsl.go b/vendor/github.com/onsi/ginkgo/v2/core_dsl.go index a244bdc18..2d7a70ecc 100644 --- a/vendor/github.com/onsi/ginkgo/v2/core_dsl.go +++ b/vendor/github.com/onsi/ginkgo/v2/core_dsl.go @@ -248,31 +248,13 @@ func RunSpecs(t GinkgoTestingT, description string, args ...interface{}) bool { exitIfErr(types.GinkgoErrors.RerunningSuite()) } suiteDidRun = true - - suiteLabels := Labels{} - configErrors := []error{} - for _, arg := range args { - switch arg := arg.(type) { - case types.SuiteConfig: - suiteConfig = arg - case types.ReporterConfig: - reporterConfig = arg - case Labels: - suiteLabels = append(suiteLabels, arg...) - default: - configErrors = append(configErrors, types.GinkgoErrors.UnknownTypePassedToRunSpecs(arg)) - } + err := global.PushClone() + if err != nil { + exitIfErr(err) } - exitIfErrors(configErrors) + defer global.PopClone() - configErrors = types.VetConfig(flagSet, suiteConfig, reporterConfig) - if len(configErrors) > 0 { - fmt.Fprintf(formatter.ColorableStdErr, formatter.F("{{red}}Ginkgo detected configuration issues:{{/}}\n")) - for _, err := range configErrors { - fmt.Fprintf(formatter.ColorableStdErr, err.Error()) - } - os.Exit(1) - } + suiteLabels := extractSuiteConfiguration(args) var reporter reporters.Reporter if suiteConfig.ParallelTotal == 1 { @@ -308,9 +290,8 @@ func RunSpecs(t GinkgoTestingT, description string, args ...interface{}) bool { registerReportAfterSuiteNodeForAutogeneratedReports(reporterConfig) } - err := global.Suite.BuildTree() + err = global.Suite.BuildTree() exitIfErr(err) - suitePath, err := os.Getwd() exitIfErr(err) suitePath, err = filepath.Abs(suitePath) @@ -335,6 +316,69 @@ func RunSpecs(t GinkgoTestingT, description string, args ...interface{}) bool { return passed } +func extractSuiteConfiguration(args []interface{}) Labels { + suiteLabels := Labels{} + configErrors := []error{} + for _, arg := range args { + switch arg := arg.(type) { + case types.SuiteConfig: + suiteConfig = arg + case types.ReporterConfig: + reporterConfig = arg + case Labels: + suiteLabels = append(suiteLabels, arg...) + default: + configErrors = append(configErrors, types.GinkgoErrors.UnknownTypePassedToRunSpecs(arg)) + } + } + exitIfErrors(configErrors) + + configErrors = types.VetConfig(flagSet, suiteConfig, reporterConfig) + if len(configErrors) > 0 { + fmt.Fprintf(formatter.ColorableStdErr, formatter.F("{{red}}Ginkgo detected configuration issues:{{/}}\n")) + for _, err := range configErrors { + fmt.Fprintf(formatter.ColorableStdErr, err.Error()) + } + os.Exit(1) + } + + return suiteLabels +} + +/* +PreviewSpecs walks the testing tree and produces a report without actually invoking the specs. +See http://onsi.github.io/ginkgo/#previewing-specs for more information. +*/ +func PreviewSpecs(description string, args ...any) Report { + err := global.PushClone() + if err != nil { + exitIfErr(err) + } + defer global.PopClone() + + suiteLabels := extractSuiteConfiguration(args) + priorDryRun, priorParallelTotal, priorParallelProcess := suiteConfig.DryRun, suiteConfig.ParallelTotal, suiteConfig.ParallelProcess + suiteConfig.DryRun, suiteConfig.ParallelTotal, suiteConfig.ParallelProcess = true, 1, 1 + defer func() { + suiteConfig.DryRun, suiteConfig.ParallelTotal, suiteConfig.ParallelProcess = priorDryRun, priorParallelTotal, priorParallelProcess + }() + reporter := reporters.NoopReporter{} + outputInterceptor = internal.NoopOutputInterceptor{} + client = nil + writer := GinkgoWriter.(*internal.Writer) + + err = global.Suite.BuildTree() + exitIfErr(err) + suitePath, err := os.Getwd() + exitIfErr(err) + suitePath, err = filepath.Abs(suitePath) + exitIfErr(err) + + global.Suite.Run(description, suiteLabels, suitePath, global.Failer, reporter, writer, outputInterceptor, interrupt_handler.NewInterruptHandler(client), client, internal.RegisterForProgressSignal, suiteConfig) + + return global.Suite.GetPreviewReport() +} + /* Skip instructs Ginkgo to skip the current spec diff --git a/vendor/github.com/onsi/ginkgo/v2/internal/global/init.go b/vendor/github.com/onsi/ginkgo/v2/internal/global/init.go index f2c0fd89c..464e3c97f 100644 --- a/vendor/github.com/onsi/ginkgo/v2/internal/global/init.go +++ b/vendor/github.com/onsi/ginkgo/v2/internal/global/init.go @@ -6,6 +6,7 @@ import ( var Suite *internal.Suite var Failer *internal.Failer +var backupSuite *internal.Suite func init() { InitializeGlobals() @@ -15,3 +16,13 @@ func InitializeGlobals() { Failer = internal.NewFailer() Suite = internal.NewSuite() } + +func PushClone() error { + var err error + backupSuite, err = Suite.Clone() + return err +} + +func PopClone() { + Suite = backupSuite +} diff --git a/vendor/github.com/onsi/ginkgo/v2/internal/node.go b/vendor/github.com/onsi/ginkgo/v2/internal/node.go index e108894da..16f0dc227 100644 --- a/vendor/github.com/onsi/ginkgo/v2/internal/node.go +++ b/vendor/github.com/onsi/ginkgo/v2/internal/node.go @@ -597,6 +597,12 @@ func (n Node) IsZero() bool { /* Nodes */ type Nodes []Node +func (n Nodes) Clone() Nodes { + nodes := make(Nodes, len(n)) + copy(nodes, n) + return nodes +} + func (n Nodes) CopyAppend(nodes ...Node) Nodes { numN := len(n) out := make(Nodes, numN+len(nodes)) diff --git a/vendor/github.com/onsi/ginkgo/v2/internal/suite.go b/vendor/github.com/onsi/ginkgo/v2/internal/suite.go index ea0d259d9..fe6e8288a 100644 --- a/vendor/github.com/onsi/ginkgo/v2/internal/suite.go +++ b/vendor/github.com/onsi/ginkgo/v2/internal/suite.go @@ -77,6 +77,20 @@ func NewSuite() *Suite { } } +func (suite *Suite) Clone() (*Suite, error) { + if suite.phase != PhaseBuildTopLevel { + return nil, fmt.Errorf("cnanot clone suite after tree has been built") + } + return &Suite{ + tree: &TreeNode{}, + phase: PhaseBuildTopLevel, + ProgressReporterManager: NewProgressReporterManager(), + topLevelContainers: suite.topLevelContainers.Clone(), + suiteNodes: suite.suiteNodes.Clone(), + selectiveLock: &sync.Mutex{}, + }, nil +} + func (suite *Suite) BuildTree() error { // During PhaseBuildTopLevel, the top level containers are stored in suite.topLevelCotainers and entered // We now enter PhaseBuildTree where these top level containers are entered and added to the spec tree @@ -328,6 +342,16 @@ func (suite *Suite) CurrentSpecReport() types.SpecReport { return report } +// Only valid in the preview context. In general suite.report only includes +// the specs run by _this_ node - it is only at the end of the suite that +// the parallel reports are aggregated. However in the preview context we run +// in series and +func (suite *Suite) GetPreviewReport() types.Report { + suite.selectiveLock.Lock() + defer suite.selectiveLock.Unlock() + return suite.report +} + func (suite *Suite) AddReportEntry(entry ReportEntry) error { if suite.phase != PhaseRun { return types.GinkgoErrors.AddReportEntryNotDuringRunPhase(entry.Location) diff --git a/vendor/github.com/onsi/ginkgo/v2/types/version.go b/vendor/github.com/onsi/ginkgo/v2/types/version.go index 04545630a..a37f30828 100644 --- a/vendor/github.com/onsi/ginkgo/v2/types/version.go +++ b/vendor/github.com/onsi/ginkgo/v2/types/version.go @@ -1,3 +1,3 @@ package types -const VERSION = "2.12.1" +const VERSION = "2.13.0" diff --git a/vendor/github.com/onsi/gomega/CHANGELOG.md b/vendor/github.com/onsi/gomega/CHANGELOG.md index 1526497b9..4fc45f29c 100644 --- a/vendor/github.com/onsi/gomega/CHANGELOG.md +++ b/vendor/github.com/onsi/gomega/CHANGELOG.md @@ -1,3 +1,32 @@ +## 1.29.0 + +### Features +- MatchError can now take an optional func(error) bool + description [2b39142] + +## 1.28.1 + +### Maintenance +- Bump github.com/onsi/ginkgo/v2 from 2.12.0 to 2.13.0 [635d196] +- Bump github.com/google/go-cmp from 0.5.9 to 0.6.0 [14f8859] +- Bump golang.org/x/net from 0.14.0 to 0.17.0 [d8a6508] +- #703 doc(matchers): HaveEach() doc comment updated [2705bdb] +- Minor typos (#699) [375648c] + +## 1.28.0 + +### Features +- Add VerifyHost handler to ghttp (#698) [0b03b36] + +### Fixes +- Read Body for Newer Responses in HaveHTTPBodyMatcher (#686) [18d6673] + +### Maintenance +- Bump github.com/onsi/ginkgo/v2 from 2.11.0 to 2.12.0 (#693) [55a33f3] +- Typo in matchers.go (#691) [de68e8f] +- Bump commonmarker from 0.23.9 to 0.23.10 in /docs (#690) [ab17f5e] +- chore: update test matrix for Go 1.21 (#689) [5069017] +- Bump golang.org/x/net from 0.12.0 to 0.14.0 (#688) [babe25f] + ## 1.27.10 ### Fixes diff --git a/vendor/github.com/onsi/gomega/gomega_dsl.go b/vendor/github.com/onsi/gomega/gomega_dsl.go index 1fd1803ac..ba082146a 100644 --- a/vendor/github.com/onsi/gomega/gomega_dsl.go +++ b/vendor/github.com/onsi/gomega/gomega_dsl.go @@ -22,7 +22,7 @@ import ( "github.com/onsi/gomega/types" ) -const GOMEGA_VERSION = "1.27.10" +const GOMEGA_VERSION = "1.29.0" const nilGomegaPanic = `You are trying to make an assertion, but haven't registered Gomega's fail handler. If you're using Ginkgo then you probably forgot to put your assertion in an It(). @@ -242,7 +242,7 @@ func ExpectWithOffset(offset int, actual interface{}, extra ...interface{}) Asse Eventually enables making assertions on asynchronous behavior. Eventually checks that an assertion *eventually* passes. Eventually blocks when called and attempts an assertion periodically until it passes or a timeout occurs. Both the timeout and polling interval are configurable as optional arguments. -The first optional argument is the timeout (which defaults to 1s), the second is the polling interval (which defaults to 10ms). Both intervals can be specified as time.Duration, parsable duration strings or floats/integers (in which case they are interpreted as seconds). In addition an optional context.Context can be passed in - Eventually will keep trying until either the timeout epxires or the context is cancelled, whichever comes first. +The first optional argument is the timeout (which defaults to 1s), the second is the polling interval (which defaults to 10ms). Both intervals can be specified as time.Duration, parsable duration strings or floats/integers (in which case they are interpreted as seconds). In addition an optional context.Context can be passed in - Eventually will keep trying until either the timeout expires or the context is cancelled, whichever comes first. Eventually works with any Gomega compatible matcher and supports making assertions against three categories of actual value: @@ -313,13 +313,13 @@ It is important to note that the function passed into Eventually is invoked *syn }).Should(BeNumerically(">=", 17)) }, SpecTimeout(time.Second)) -you an also use Eventually().WithContext(ctx) to pass in the context. Passed-in contexts play nicely with paseed-in arguments as long as the context appears first. You can rewrite the above example as: +you an also use Eventually().WithContext(ctx) to pass in the context. Passed-in contexts play nicely with passed-in arguments as long as the context appears first. You can rewrite the above example as: It("fetches the correct count", func(ctx SpecContext) { Eventually(client.FetchCount).WithContext(ctx).WithArguments("/users").Should(BeNumerically(">=", 17)) }, SpecTimeout(time.Second)) -Either way the context passd to Eventually is also passed to the underlying funciton. Now, when Ginkgo cancels the context both the FetchCount client and Gomega will be informed and can exit. +Either way the context passd to Eventually is also passed to the underlying function. Now, when Ginkgo cancels the context both the FetchCount client and Gomega will be informed and can exit. **Category 3: Making assertions _in_ the function passed into Eventually** @@ -349,7 +349,7 @@ For example: will rerun the function until all assertions pass. -You can also pass additional arugments to functions that take a Gomega. The only rule is that the Gomega argument must be first. If you also want to pass the context attached to Eventually you must ensure that is the second argument. For example: +You can also pass additional arguments to functions that take a Gomega. The only rule is that the Gomega argument must be first. If you also want to pass the context attached to Eventually you must ensure that is the second argument. For example: Eventually(func(g Gomega, ctx context.Context, path string, expected ...string){ tok, err := client.GetToken(ctx) diff --git a/vendor/github.com/onsi/gomega/matchers.go b/vendor/github.com/onsi/gomega/matchers.go index bdaf62b56..cd3f431d2 100644 --- a/vendor/github.com/onsi/gomega/matchers.go +++ b/vendor/github.com/onsi/gomega/matchers.go @@ -88,19 +88,44 @@ func Succeed() types.GomegaMatcher { } // MatchError succeeds if actual is a non-nil error that matches the passed in -// string, error, or matcher. +// string, error, function, or matcher. // // These are valid use-cases: // -// Expect(err).Should(MatchError("an error")) //asserts that err.Error() == "an error" -// Expect(err).Should(MatchError(SomeError)) //asserts that err == SomeError (via reflect.DeepEqual) -// Expect(err).Should(MatchError(ContainSubstring("sprocket not found"))) // asserts that edrr.Error() contains substring "sprocket not found" +// When passed a string: +// +// Expect(err).To(MatchError("an error")) +// +// asserts that err.Error() == "an error" +// +// When passed an error: +// +// Expect(err).To(MatchError(SomeError)) +// +// First checks if errors.Is(err, SomeError). +// If that fails then it checks if reflect.DeepEqual(err, SomeError) repeatedly for err and any errors wrapped by err +// +// When passed a matcher: +// +// Expect(err).To(MatchError(ContainSubstring("sprocket not found"))) +// +// the matcher is passed err.Error(). In this case it asserts that err.Error() contains substring "sprocket not found" +// +// When passed a func(err) bool and a description: +// +// Expect(err).To(MatchError(os.IsNotExist, "IsNotExist")) +// +// the function is passed err and matches if the return value is true. The description is required to allow Gomega +// to print a useful error message. // // It is an error for err to be nil or an object that does not implement the // Error interface -func MatchError(expected interface{}) types.GomegaMatcher { +// +// The optional second argument is a description of the error function, if used. This is required when passing a function but is ignored in all other cases. +func MatchError(expected interface{}, functionErrorDescription ...any) types.GomegaMatcher { return &matchers.MatchErrorMatcher{ - Expected: expected, + Expected: expected, + FuncErrDescription: functionErrorDescription, } } @@ -381,7 +406,7 @@ func ContainElements(elements ...interface{}) types.GomegaMatcher { } // HaveEach succeeds if actual solely contains elements that match the passed in element. -// Please note that if actual is empty, HaveEach always will succeed. +// Please note that if actual is empty, HaveEach always will fail. // By default HaveEach() uses Equal() to perform the match, however a // matcher can be passed in instead: // diff --git a/vendor/github.com/onsi/gomega/matchers/have_http_body_matcher.go b/vendor/github.com/onsi/gomega/matchers/have_http_body_matcher.go index 6a3dcdc35..d14d9e5fc 100644 --- a/vendor/github.com/onsi/gomega/matchers/have_http_body_matcher.go +++ b/vendor/github.com/onsi/gomega/matchers/have_http_body_matcher.go @@ -11,8 +11,9 @@ import ( ) type HaveHTTPBodyMatcher struct { - Expected interface{} - cachedBody []byte + Expected interface{} + cachedResponse interface{} + cachedBody []byte } func (matcher *HaveHTTPBodyMatcher) Match(actual interface{}) (bool, error) { @@ -73,7 +74,7 @@ func (matcher *HaveHTTPBodyMatcher) NegatedFailureMessage(actual interface{}) (m // the Reader is closed and it is not readable again in FailureMessage() // or NegatedFailureMessage() func (matcher *HaveHTTPBodyMatcher) body(actual interface{}) ([]byte, error) { - if matcher.cachedBody != nil { + if matcher.cachedResponse == actual && matcher.cachedBody != nil { return matcher.cachedBody, nil } @@ -91,8 +92,10 @@ func (matcher *HaveHTTPBodyMatcher) body(actual interface{}) ([]byte, error) { switch a := actual.(type) { case *http.Response: + matcher.cachedResponse = a return body(a) case *httptest.ResponseRecorder: + matcher.cachedResponse = a return body(a.Result()) default: return nil, fmt.Errorf("HaveHTTPBody matcher expects *http.Response or *httptest.ResponseRecorder. Got:\n%s", format.Object(actual, 1)) diff --git a/vendor/github.com/onsi/gomega/matchers/match_error_matcher.go b/vendor/github.com/onsi/gomega/matchers/match_error_matcher.go index 827475ea5..c539dd389 100644 --- a/vendor/github.com/onsi/gomega/matchers/match_error_matcher.go +++ b/vendor/github.com/onsi/gomega/matchers/match_error_matcher.go @@ -9,10 +9,14 @@ import ( ) type MatchErrorMatcher struct { - Expected interface{} + Expected any + FuncErrDescription []any + isFunc bool } -func (matcher *MatchErrorMatcher) Match(actual interface{}) (success bool, err error) { +func (matcher *MatchErrorMatcher) Match(actual any) (success bool, err error) { + matcher.isFunc = false + if isNil(actual) { return false, fmt.Errorf("Expected an error, got nil") } @@ -42,6 +46,17 @@ func (matcher *MatchErrorMatcher) Match(actual interface{}) (success bool, err e return actualErr.Error() == expected, nil } + v := reflect.ValueOf(expected) + t := v.Type() + errorInterface := reflect.TypeOf((*error)(nil)).Elem() + if t.Kind() == reflect.Func && t.NumIn() == 1 && t.In(0).Implements(errorInterface) && t.NumOut() == 1 && t.Out(0).Kind() == reflect.Bool { + if len(matcher.FuncErrDescription) == 0 { + return false, fmt.Errorf("MatchError requires an additional description when passed a function") + } + matcher.isFunc = true + return v.Call([]reflect.Value{reflect.ValueOf(actualErr)})[0].Bool(), nil + } + var subMatcher omegaMatcher var hasSubMatcher bool if expected != nil { @@ -57,9 +72,15 @@ func (matcher *MatchErrorMatcher) Match(actual interface{}) (success bool, err e } func (matcher *MatchErrorMatcher) FailureMessage(actual interface{}) (message string) { + if matcher.isFunc { + return format.Message(actual, fmt.Sprintf("to match error function %s", matcher.FuncErrDescription[0])) + } return format.Message(actual, "to match error", matcher.Expected) } func (matcher *MatchErrorMatcher) NegatedFailureMessage(actual interface{}) (message string) { + if matcher.isFunc { + return format.Message(actual, fmt.Sprintf("not to match error function %s", matcher.FuncErrDescription[0])) + } return format.Message(actual, "not to match error", matcher.Expected) } diff --git a/vendor/modules.txt b/vendor/modules.txt index 110566b7f..f4d4fe178 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -36,8 +36,8 @@ github.com/cespare/xxhash/v2 # github.com/coreos/go-systemd/v22 v22.5.0 ## explicit; go 1.12 github.com/coreos/go-systemd/v22/unit -# github.com/cyphar/filepath-securejoin v0.2.2 -## explicit +# github.com/cyphar/filepath-securejoin v0.2.3 +## explicit; go 1.13 github.com/cyphar/filepath-securejoin # github.com/davecgh/go-spew v1.1.1 ## explicit @@ -69,7 +69,7 @@ github.com/fsnotify/fsnotify # github.com/gardener/etcd-druid v0.20.1 ## explicit; go 1.20 github.com/gardener/etcd-druid/api/v1alpha1 -# github.com/gardener/gardener v1.82.2 +# github.com/gardener/gardener v1.84.0 ## explicit; go 1.21 github.com/gardener/gardener/.github github.com/gardener/gardener/.github/ISSUE_TEMPLATE @@ -245,7 +245,7 @@ github.com/google/gnostic-models/extensions github.com/google/gnostic-models/jsonschema github.com/google/gnostic-models/openapiv2 github.com/google/gnostic-models/openapiv3 -# github.com/google/go-cmp v0.5.9 +# github.com/google/go-cmp v0.6.0 ## explicit; go 1.13 github.com/google/go-cmp/cmp github.com/google/go-cmp/cmp/internal/diff @@ -262,7 +262,7 @@ github.com/google/pprof/profile # github.com/google/uuid v1.3.0 ## explicit github.com/google/uuid -# github.com/hashicorp/errwrap v1.0.0 +# github.com/hashicorp/errwrap v1.1.0 ## explicit github.com/hashicorp/errwrap # github.com/hashicorp/go-multierror v1.1.1 @@ -277,6 +277,15 @@ github.com/imdario/mergo # github.com/inconshreveable/mousetrap v1.1.0 ## explicit; go 1.18 github.com/inconshreveable/mousetrap +# github.com/ironcore-dev/vgopath v0.1.3 +## explicit; go 1.20 +github.com/ironcore-dev/vgopath +github.com/ironcore-dev/vgopath/internal/cmd/version +github.com/ironcore-dev/vgopath/internal/cmd/vgopath +github.com/ironcore-dev/vgopath/internal/cmd/vgopath/exec +github.com/ironcore-dev/vgopath/internal/link +github.com/ironcore-dev/vgopath/internal/module +github.com/ironcore-dev/vgopath/internal/version # github.com/josharian/intern v1.0.0 ## explicit; go 1.5 github.com/josharian/intern @@ -322,7 +331,7 @@ github.com/modern-go/reflect2 # github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 ## explicit github.com/munnerz/goautoneg -# github.com/onsi/ginkgo/v2 v2.12.1 +# github.com/onsi/ginkgo/v2 v2.13.0 ## explicit; go 1.18 github.com/onsi/ginkgo/v2 github.com/onsi/ginkgo/v2/config @@ -344,7 +353,7 @@ github.com/onsi/ginkgo/v2/internal/parallel_support github.com/onsi/ginkgo/v2/internal/testingtproxy github.com/onsi/ginkgo/v2/reporters github.com/onsi/ginkgo/v2/types -# github.com/onsi/gomega v1.27.10 +# github.com/onsi/gomega v1.29.0 ## explicit; go 1.18 github.com/onsi/gomega github.com/onsi/gomega/format