From ec2340a11f41c0ff646ad635be8d903dcc0a5f7c Mon Sep 17 00:00:00 2001 From: Maxence Laude Date: Fri, 2 Jun 2023 02:19:21 +0200 Subject: [PATCH] feat(appset): Implement Plugin Generator (#13017) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add internal http package Signed-off-by: Maxence Laude * add services plugin Signed-off-by: Maxence Laude * add generator plugin Signed-off-by: Maxence Laude * adapted matrix && merge generator Signed-off-by: Maxence Laude * adapted plugin to webhook Signed-off-by: Maxence Laude * update applicationset controller and types for plugin Signed-off-by: Maxence Laude * add proposal for applicationset plugin generator Signed-off-by: Maxence Laude * execute codegen Signed-off-by: Maxence Laude * First draft of documentation Signed-off-by: Maxence Laude * Fix wrong expected error on client_test Signed-off-by: Maxence Laude * docs(plugin-generator): minor improvements Signed-off-by: Sébastien Crocquesel <88554524+scrocquesel@users.noreply.github.com> * Improvement * changes Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * fix docs Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * wrap output Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * fix test Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * fix tests Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * nested parameters Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * simplify Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * docs Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --------- Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * Add plugin to GetRequeueAfter function (merge && matrix) Signed-off-by: Maxence Laude * Improvement : renaming * more changes Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * clearer docs Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * abstract Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * naming Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * revert accidental change Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * ugh Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * fix accidental renames Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --------- Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * Fix typo renaming Signed-off-by: Maxence Laude * Improve docs Signed-off-by: Maxence Laude * Webhook implementation Signed-off-by: Maxence Laude * Typo docs Signed-off-by: Maxence Laude * fix plugin generator nil panic Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * Add company to USERS.md Signed-off-by: Maxence Laude * input.parameters * fix plugin generator nil panic Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * input.parameters Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --------- Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * Change param structure * change param structure Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * nest parameters Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --------- Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * Fix conflicts Signed-off-by: Maxence Laude * Fix docs Signed-off-by: Maxence Laude * Fix docs Signed-off-by: Maxence Laude --------- Signed-off-by: Maxence Laude Signed-off-by: Sébastien Crocquesel <88554524+scrocquesel@users.noreply.github.com> Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Co-authored-by: Sébastien Crocquesel <88554524+scrocquesel@users.noreply.github.com> Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --- USERS.md | 1 + applicationset/generators/matrix.go | 2 + applicationset/generators/matrix_test.go | 51 +- applicationset/generators/merge.go | 2 + applicationset/generators/plugin.go | 211 + applicationset/generators/plugin_test.go | 705 +++ .../services/internal/http/client.go | 161 + .../services/internal/http/client_options.go | 22 + .../services/internal/http/client_test.go | 163 + .../services/plugin/plugin_service.go | 73 + .../services/plugin/plugin_service_test.go | 52 + applicationset/services/plugin/utils.go | 21 + applicationset/services/plugin/utils_test.go | 17 + applicationset/utils/utils.go | 12 +- applicationset/utils/utils_test.go | 29 + applicationset/webhook/webhook.go | 9 + applicationset/webhook/webhook_test.go | 80 +- assets/swagger.json | 54 + .../commands/applicationset_controller.go | 3 + .../applicationset/Generators-Plugin.md | 341 ++ .../applicationset/Generators.md | 3 +- .../applicationset-plugin-generator.md | 216 + manifests/core-install.yaml | 3793 +++++++++++----- manifests/crds/applicationset-crd.yaml | 3795 ++++++++++++----- manifests/ha/install.yaml | 3793 +++++++++++----- manifests/install.yaml | 3793 +++++++++++----- mkdocs.yml | 1 + .../v1alpha1/applicationset_types.go | 32 + pkg/apis/application/v1alpha1/generated.pb.go | 2595 +++++++---- pkg/apis/application/v1alpha1/generated.proto | 33 + .../application/v1alpha1/openapi_generated.go | 131 +- .../v1alpha1/zz_generated.deepcopy.go | 107 + util/settings/settings.go | 8 +- util/settings/settings_test.go | 15 + 34 files changed, 14980 insertions(+), 5344 deletions(-) create mode 100644 applicationset/generators/plugin.go create mode 100644 applicationset/generators/plugin_test.go create mode 100644 applicationset/services/internal/http/client.go create mode 100644 applicationset/services/internal/http/client_options.go create mode 100644 applicationset/services/internal/http/client_test.go create mode 100644 applicationset/services/plugin/plugin_service.go create mode 100644 applicationset/services/plugin/plugin_service_test.go create mode 100644 applicationset/services/plugin/utils.go create mode 100644 applicationset/services/plugin/utils_test.go create mode 100644 docs/operator-manual/applicationset/Generators-Plugin.md create mode 100644 docs/proposals/applicationset-plugin-generator.md diff --git a/USERS.md b/USERS.md index 7225e11cedf23..f02187afc2fee 100644 --- a/USERS.md +++ b/USERS.md @@ -175,6 +175,7 @@ Currently, the following organizations are **officially** using Argo CD: 1. [Objective](https://www.objective.com.br/) 1. [OCCMundial](https://occ.com.mx) 1. [Octadesk](https://octadesk.com) +1. [Olfeo](https://www.olfeo.com/) 1. [omegaUp](https://omegaUp.com) 1. [Omni](https://omni.se/) 1. [openEuler](https://openeuler.org) diff --git a/applicationset/generators/matrix.go b/applicationset/generators/matrix.go index 0389e8ad9062a..2e53c95067c72 100644 --- a/applicationset/generators/matrix.go +++ b/applicationset/generators/matrix.go @@ -97,6 +97,7 @@ func (m *MatrixGenerator) getParams(appSetBaseGenerator argoprojiov1alpha1.Appli SCMProvider: appSetBaseGenerator.SCMProvider, ClusterDecisionResource: appSetBaseGenerator.ClusterDecisionResource, PullRequest: appSetBaseGenerator.PullRequest, + Plugin: appSetBaseGenerator.Plugin, Matrix: matrixGen, Merge: mergeGen, Selector: appSetBaseGenerator.Selector, @@ -135,6 +136,7 @@ func (m *MatrixGenerator) GetRequeueAfter(appSetGenerator *argoprojiov1alpha1.Ap Clusters: r.Clusters, Git: r.Git, PullRequest: r.PullRequest, + Plugin: r.Plugin, Matrix: matrixGen, Merge: mergeGen, } diff --git a/applicationset/generators/matrix_test.go b/applicationset/generators/matrix_test.go index e2d55dfc28103..902a7b86b2d73 100644 --- a/applicationset/generators/matrix_test.go +++ b/applicationset/generators/matrix_test.go @@ -5,7 +5,6 @@ import ( "testing" "time" - "github.com/argoproj/argo-cd/v2/applicationset/services/mocks" "github.com/stretchr/testify/require" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -14,6 +13,8 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" + "github.com/argoproj/argo-cd/v2/applicationset/services/mocks" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" @@ -848,7 +849,7 @@ func TestMatrixGenerateListElementsYaml(t *testing.T) { } listGenerator := &argoprojiov1alpha1.ListGenerator{ - Elements: []apiextensionsv1.JSON{}, + Elements: []apiextensionsv1.JSON{}, ElementsYaml: "{{ .foo.bar | toJson }}", } @@ -870,60 +871,59 @@ func TestMatrixGenerateListElementsYaml(t *testing.T) { }, expected: []map[string]interface{}{ { - "chart": "a", - "version": "1", + "chart": "a", + "version": "1", "foo": map[string]interface{}{ "bar": []interface{}{ map[string]interface{}{ - "chart": "a", + "chart": "a", "version": "1", }, map[string]interface{}{ - "chart": "b", + "chart": "b", "version": "2", }, }, }, "path": map[string]interface{}{ - "basename": "dir", + "basename": "dir", "basenameNormalized": "dir", - "filename": "file_name.yaml", + "filename": "file_name.yaml", "filenameNormalized": "file-name.yaml", - "path": "path/dir", - "segments": []string { + "path": "path/dir", + "segments": []string{ "path", "dir", }, }, }, { - "chart": "b", - "version": "2", + "chart": "b", + "version": "2", "foo": map[string]interface{}{ "bar": []interface{}{ map[string]interface{}{ - "chart": "a", + "chart": "a", "version": "1", }, map[string]interface{}{ - "chart": "b", + "chart": "b", "version": "2", }, }, }, "path": map[string]interface{}{ - "basename": "dir", + "basename": "dir", "basenameNormalized": "dir", - "filename": "file_name.yaml", + "filename": "file_name.yaml", "filenameNormalized": "file-name.yaml", - "path": "path/dir", - "segments": []string { + "path": "path/dir", + "segments": []string{ "path", "dir", }, }, }, - }, }, } @@ -952,27 +952,26 @@ func TestMatrixGenerateListElementsYaml(t *testing.T) { "foo": map[string]interface{}{ "bar": []interface{}{ map[string]interface{}{ - "chart": "a", + "chart": "a", "version": "1", }, map[string]interface{}{ - "chart": "b", + "chart": "b", "version": "2", }, }, }, "path": map[string]interface{}{ - "basename": "dir", + "basename": "dir", "basenameNormalized": "dir", - "filename": "file_name.yaml", + "filename": "file_name.yaml", "filenameNormalized": "file-name.yaml", - "path": "path/dir", - "segments": []string { + "path": "path/dir", + "segments": []string{ "path", "dir", }, }, - }}, nil) genMock.On("GetTemplate", &gitGeneratorSpec). Return(&argoprojiov1alpha1.ApplicationSetTemplate{}) diff --git a/applicationset/generators/merge.go b/applicationset/generators/merge.go index a2827a74ba5f0..5eaea07a8990e 100644 --- a/applicationset/generators/merge.go +++ b/applicationset/generators/merge.go @@ -154,6 +154,7 @@ func (m *MergeGenerator) getParams(appSetBaseGenerator argoprojiov1alpha1.Applic SCMProvider: appSetBaseGenerator.SCMProvider, ClusterDecisionResource: appSetBaseGenerator.ClusterDecisionResource, PullRequest: appSetBaseGenerator.PullRequest, + Plugin: appSetBaseGenerator.Plugin, Matrix: matrixGen, Merge: mergeGen, Selector: appSetBaseGenerator.Selector, @@ -190,6 +191,7 @@ func (m *MergeGenerator) GetRequeueAfter(appSetGenerator *argoprojiov1alpha1.App Clusters: r.Clusters, Git: r.Git, PullRequest: r.PullRequest, + Plugin: r.Plugin, Matrix: matrixGen, Merge: mergeGen, } diff --git a/applicationset/generators/plugin.go b/applicationset/generators/plugin.go new file mode 100644 index 0000000000000..9876d0ff93a2a --- /dev/null +++ b/applicationset/generators/plugin.go @@ -0,0 +1,211 @@ +package generators + +import ( + "context" + "fmt" + "strconv" + "strings" + "time" + + "github.com/jeremywohl/flatten" + corev1 "k8s.io/api/core/v1" + "k8s.io/client-go/kubernetes" + "sigs.k8s.io/controller-runtime/pkg/client" + + argoprojiov1alpha1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + "github.com/argoproj/argo-cd/v2/util/settings" + + "github.com/argoproj/argo-cd/v2/applicationset/services/plugin" +) + +const ( + DefaultPluginRequeueAfterSeconds = 30 * time.Minute +) + +var _ Generator = (*PluginGenerator)(nil) + +type PluginGenerator struct { + client client.Client + ctx context.Context + clientset kubernetes.Interface + namespace string +} + +func NewPluginGenerator(client client.Client, ctx context.Context, clientset kubernetes.Interface, namespace string) Generator { + g := &PluginGenerator{ + client: client, + ctx: ctx, + clientset: clientset, + namespace: namespace, + } + return g +} + +func (g *PluginGenerator) GetRequeueAfter(appSetGenerator *argoprojiov1alpha1.ApplicationSetGenerator) time.Duration { + // Return a requeue default of 30 minutes, if no default is specified. + + if appSetGenerator.Plugin.RequeueAfterSeconds != nil { + return time.Duration(*appSetGenerator.Plugin.RequeueAfterSeconds) * time.Second + } + + return DefaultPluginRequeueAfterSeconds +} + +func (g *PluginGenerator) GetTemplate(appSetGenerator *argoprojiov1alpha1.ApplicationSetGenerator) *argoprojiov1alpha1.ApplicationSetTemplate { + return &appSetGenerator.Plugin.Template +} + +func (g *PluginGenerator) GenerateParams(appSetGenerator *argoprojiov1alpha1.ApplicationSetGenerator, applicationSetInfo *argoprojiov1alpha1.ApplicationSet) ([]map[string]interface{}, error) { + + if appSetGenerator == nil { + return nil, EmptyAppSetGeneratorError + } + + if appSetGenerator.Plugin == nil { + return nil, EmptyAppSetGeneratorError + } + + ctx := context.Background() + + providerConfig := appSetGenerator.Plugin + + pluginClient, err := g.getPluginFromGenerator(ctx, applicationSetInfo.Name, providerConfig) + if err != nil { + return nil, err + } + + list, err := pluginClient.List(ctx, providerConfig.Input.Parameters) + if err != nil { + return nil, fmt.Errorf("error listing params: %w", err) + } + + res, err := g.generateParams(appSetGenerator, applicationSetInfo, list.Output.Parameters, appSetGenerator.Plugin.Input.Parameters, applicationSetInfo.Spec.GoTemplate) + if err != nil { + return nil, err + } + + return res, nil +} + +func (g *PluginGenerator) getPluginFromGenerator(ctx context.Context, appSetName string, generatorConfig *argoprojiov1alpha1.PluginGenerator) (*plugin.Service, error) { + cm, err := g.getConfigMap(ctx, generatorConfig.ConfigMapRef.Name) + if err != nil { + return nil, fmt.Errorf("error fetching ConfigMap: %w", err) + } + token, err := g.getToken(ctx, cm["token"]) + if err != nil { + return nil, fmt.Errorf("error fetching Secret token: %v", err) + } + + var requestTimeout int + requestTimeoutStr, ok := cm["requestTimeout"] + if ok { + requestTimeout, err = strconv.Atoi(requestTimeoutStr) + if err != nil { + return nil, fmt.Errorf("error set requestTimeout : %w", err) + } + } + + pluginClient, err := plugin.NewPluginService(ctx, appSetName, cm["baseUrl"], token, requestTimeout) + if err != nil { + return nil, err + } + return pluginClient, nil +} + +func (g *PluginGenerator) generateParams(appSetGenerator *argoprojiov1alpha1.ApplicationSetGenerator, appSet *argoprojiov1alpha1.ApplicationSet, objectsFound []map[string]interface{}, pluginParams argoprojiov1alpha1.PluginParameters, useGoTemplate bool) ([]map[string]interface{}, error) { + res := []map[string]interface{}{} + + for _, objectFound := range objectsFound { + + params := map[string]interface{}{} + + if useGoTemplate { + for k, v := range objectFound { + params[k] = v + } + } else { + flat, err := flatten.Flatten(objectFound, "", flatten.DotStyle) + if err != nil { + return nil, err + } + for k, v := range flat { + params[k] = fmt.Sprintf("%v", v) + } + } + + params["generator"] = map[string]interface{}{ + "input": map[string]argoprojiov1alpha1.PluginParameters{ + "parameters": pluginParams, + }, + } + + err := appendTemplatedValues(appSetGenerator.Plugin.Values, params, appSet.Spec.GoTemplate, appSet.Spec.GoTemplateOptions) + if err != nil { + return nil, err + } + + res = append(res, params) + } + + return res, nil +} + +func (g *PluginGenerator) getToken(ctx context.Context, tokenRef string) (string, error) { + + if tokenRef == "" || !strings.HasPrefix(tokenRef, "$") { + return "", fmt.Errorf("token is empty, or does not reference a secret key starting with '$': %v", tokenRef) + } + + secretName, tokenKey := plugin.ParseSecretKey(tokenRef) + + secret := &corev1.Secret{} + err := g.client.Get( + ctx, + client.ObjectKey{ + Name: secretName, + Namespace: g.namespace, + }, + secret) + + if err != nil { + return "", fmt.Errorf("error fetching secret %s/%s: %v", g.namespace, secretName, err) + } + + secretValues := make(map[string]string, len(secret.Data)) + + for k, v := range secret.Data { + secretValues[k] = string(v) + } + + token := settings.ReplaceStringSecret(tokenKey, secretValues) + + return token, err +} + +func (g *PluginGenerator) getConfigMap(ctx context.Context, configMapRef string) (map[string]string, error) { + cm := &corev1.ConfigMap{} + err := g.client.Get( + ctx, + client.ObjectKey{ + Name: configMapRef, + Namespace: g.namespace, + }, + cm) + + if err != nil { + return nil, err + } + + baseUrl, ok := cm.Data["baseUrl"] + if !ok || baseUrl == "" { + return nil, fmt.Errorf("baseUrl not found in ConfigMap") + } + + token, ok := cm.Data["token"] + if !ok || token == "" { + return nil, fmt.Errorf("token not found in ConfigMap") + } + + return cm.Data, nil +} diff --git a/applicationset/generators/plugin_test.go b/applicationset/generators/plugin_test.go new file mode 100644 index 0000000000000..19f53a90b9442 --- /dev/null +++ b/applicationset/generators/plugin_test.go @@ -0,0 +1,705 @@ +package generators + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + v1 "k8s.io/api/core/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + kubefake "k8s.io/client-go/kubernetes/fake" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" + + "github.com/argoproj/argo-cd/v2/applicationset/services/plugin" + argoprojiov1alpha1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" +) + +func TestPluginGenerateParams(t *testing.T) { + testCases := []struct { + name string + configmap *v1.ConfigMap + secret *v1.Secret + inputParameters map[string]apiextensionsv1.JSON + values map[string]string + gotemplate bool + expected []map[string]interface{} + content []byte + expectedError error + }{ + { + name: "simple case", + configmap: &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "first-plugin-cm", + Namespace: "default", + }, + Data: map[string]string{ + "baseUrl": "http://127.0.0.1", + "token": "$plugin.token", + }, + }, + secret: &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "argocd-secret", + Namespace: "default", + }, + Data: map[string][]byte{ + "plugin.token": []byte("my-secret"), + }, + }, + inputParameters: map[string]apiextensionsv1.JSON{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + gotemplate: false, + content: []byte(`{"output": { + "parameters": [{ + "key1": "val1", + "key2": { + "key2_1": "val2_1", + "key2_2": { + "key2_2_1": "val2_2_1" + } + }, + "key3": 123 + }] + }}`), + expected: []map[string]interface{}{ + { + "key1": "val1", + "key2.key2_1": "val2_1", + "key2.key2_2.key2_2_1": "val2_2_1", + "key3": "123", + "generator": map[string]interface{}{ + "input": argoprojiov1alpha1.PluginInput{ + Parameters: argoprojiov1alpha1.PluginParameters{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + }, + }, + }, + }, + expectedError: nil, + }, + { + name: "simple case with values", + configmap: &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "first-plugin-cm", + Namespace: "default", + }, + Data: map[string]string{ + "baseUrl": "http://127.0.0.1", + "token": "$plugin.token", + }, + }, + secret: &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "argocd-secret", + Namespace: "default", + }, + Data: map[string][]byte{ + "plugin.token": []byte("my-secret"), + }, + }, + inputParameters: map[string]apiextensionsv1.JSON{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + values: map[string]string{ + "valuekey1": "valuevalue1", + "valuekey2": "templated-{{key1}}", + }, + gotemplate: false, + content: []byte(`{"output": { + "parameters": [{ + "key1": "val1", + "key2": { + "key2_1": "val2_1", + "key2_2": { + "key2_2_1": "val2_2_1" + } + }, + "key3": 123 + }] + }}`), + expected: []map[string]interface{}{ + { + "key1": "val1", + "key2.key2_1": "val2_1", + "key2.key2_2.key2_2_1": "val2_2_1", + "key3": "123", + "values.valuekey1": "valuevalue1", + "values.valuekey2": "templated-val1", + "generator": map[string]interface{}{ + "input": argoprojiov1alpha1.PluginInput{ + Parameters: argoprojiov1alpha1.PluginParameters{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + }, + }, + }, + }, + expectedError: nil, + }, + { + name: "simple case with gotemplate", + configmap: &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "first-plugin-cm", + Namespace: "default", + }, + Data: map[string]string{ + "baseUrl": "http://127.0.0.1", + "token": "$plugin.token", + }, + }, + secret: &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "argocd-secret", + Namespace: "default", + }, + Data: map[string][]byte{ + "plugin.token": []byte("my-secret"), + }, + }, + inputParameters: map[string]apiextensionsv1.JSON{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + gotemplate: true, + content: []byte(`{"output": { + "parameters": [{ + "key1": "val1", + "key2": { + "key2_1": "val2_1", + "key2_2": { + "key2_2_1": "val2_2_1" + } + }, + "key3": 123 + }] + }}`), + expected: []map[string]interface{}{ + { + "key1": "val1", + "key2": map[string]interface{}{ + "key2_1": "val2_1", + "key2_2": map[string]interface{}{ + "key2_2_1": "val2_2_1", + }, + }, + "key3": float64(123), + "generator": map[string]interface{}{ + "input": argoprojiov1alpha1.PluginInput{ + Parameters: argoprojiov1alpha1.PluginParameters{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + }, + }, + }, + }, + expectedError: nil, + }, + { + name: "simple case with appended params", + configmap: &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "first-plugin-cm", + Namespace: "default", + }, + Data: map[string]string{ + "baseUrl": "http://127.0.0.1", + "token": "$plugin.token", + }, + }, + secret: &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "argocd-secret", + Namespace: "default", + }, + Data: map[string][]byte{ + "plugin.token": []byte("my-secret"), + }, + }, + inputParameters: map[string]apiextensionsv1.JSON{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + gotemplate: false, + content: []byte(`{"output": {"parameters": [{ + "key1": "val1", + "key2": { + "key2_1": "val2_1", + "key2_2": { + "key2_2_1": "val2_2_1" + } + }, + "key3": 123, + "pkey2": "valplugin" + }]}}`), + expected: []map[string]interface{}{ + { + "key1": "val1", + "key2.key2_1": "val2_1", + "key2.key2_2.key2_2_1": "val2_2_1", + "key3": "123", + "pkey2": "valplugin", + "generator": map[string]interface{}{ + "input": argoprojiov1alpha1.PluginInput{ + Parameters: argoprojiov1alpha1.PluginParameters{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + }, + }, + }, + }, + expectedError: nil, + }, + { + name: "no params", + configmap: &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "first-plugin-cm", + Namespace: "default", + }, + Data: map[string]string{ + "baseUrl": "http://127.0.0.1", + "token": "$plugin.token", + }, + }, + secret: &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "argocd-secret", + Namespace: "default", + }, + Data: map[string][]byte{ + "plugin.token": []byte("my-secret"), + }, + }, + inputParameters: argoprojiov1alpha1.PluginParameters{}, + gotemplate: false, + content: []byte(`{"output": { + "parameters": [{ + "key1": "val1", + "key2": { + "key2_1": "val2_1", + "key2_2": { + "key2_2_1": "val2_2_1" + } + }, + "key3": 123 + }] + }}`), + expected: []map[string]interface{}{ + { + "key1": "val1", + "key2.key2_1": "val2_1", + "key2.key2_2.key2_2_1": "val2_2_1", + "key3": "123", + "generator": map[string]interface{}{ + "input": map[string]map[string]interface{}{ + "parameters": {}, + }, + }, + }, + }, + expectedError: nil, + }, + { + name: "empty return", + configmap: &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "first-plugin-cm", + Namespace: "default", + }, + Data: map[string]string{ + "baseUrl": "http://127.0.0.1", + "token": "$plugin.token", + }, + }, + secret: &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "argocd-secret", + Namespace: "default", + }, + Data: map[string][]byte{ + "plugin.token": []byte("my-secret"), + }, + }, + inputParameters: map[string]apiextensionsv1.JSON{}, + gotemplate: false, + content: []byte(`{"input": {"parameters": []}}`), + expected: []map[string]interface{}{}, + expectedError: nil, + }, + { + name: "wrong return", + configmap: &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "first-plugin-cm", + Namespace: "default", + }, + Data: map[string]string{ + "baseUrl": "http://127.0.0.1", + "token": "$plugin.token", + }, + }, + secret: &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "argocd-secret", + Namespace: "default", + }, + Data: map[string][]byte{ + "plugin.token": []byte("my-secret"), + }, + }, + inputParameters: map[string]apiextensionsv1.JSON{}, + gotemplate: false, + content: []byte(`wrong body ...`), + expected: []map[string]interface{}{}, + expectedError: fmt.Errorf("error listing params: error get api 'set': invalid character 'w' looking for beginning of value: wrong body ..."), + }, + { + name: "external secret", + configmap: &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "first-plugin-cm", + Namespace: "default", + }, + Data: map[string]string{ + "baseUrl": "http://127.0.0.1", + "token": "$plugin-secret:plugin.token", + }, + }, + secret: &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "plugin-secret", + Namespace: "default", + }, + Data: map[string][]byte{ + "plugin.token": []byte("my-secret"), + }, + }, + inputParameters: map[string]apiextensionsv1.JSON{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + gotemplate: false, + content: []byte(`{"output": {"parameters": [{ + "key1": "val1", + "key2": { + "key2_1": "val2_1", + "key2_2": { + "key2_2_1": "val2_2_1" + } + }, + "key3": 123, + "pkey2": "valplugin" + }]}}`), + expected: []map[string]interface{}{ + { + "key1": "val1", + "key2.key2_1": "val2_1", + "key2.key2_2.key2_2_1": "val2_2_1", + "key3": "123", + "pkey2": "valplugin", + "generator": map[string]interface{}{ + "input": argoprojiov1alpha1.PluginInput{ + Parameters: argoprojiov1alpha1.PluginParameters{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + }, + }, + }, + }, + expectedError: nil, + }, + { + name: "no secret", + configmap: &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "first-plugin-cm", + Namespace: "default", + }, + Data: map[string]string{ + "baseUrl": "http://127.0.0.1", + "token": "$plugin.token", + }, + }, + secret: &v1.Secret{}, + inputParameters: map[string]apiextensionsv1.JSON{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + gotemplate: false, + content: []byte(`{"output": { + "parameters": [{ + "key1": "val1", + "key2": { + "key2_1": "val2_1", + "key2_2": { + "key2_2_1": "val2_2_1" + } + }, + "key3": 123 + }] + }}`), + expected: []map[string]interface{}{ + { + "key1": "val1", + "key2.key2_1": "val2_1", + "key2.key2_2.key2_2_1": "val2_2_1", + "key3": "123", + "generator": map[string]interface{}{ + "input": argoprojiov1alpha1.PluginInput{ + Parameters: argoprojiov1alpha1.PluginParameters{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + }, + }, + }, + }, + expectedError: fmt.Errorf("error fetching Secret token: error fetching secret default/argocd-secret: secrets \"argocd-secret\" not found"), + }, + { + name: "no configmap", + configmap: &v1.ConfigMap{}, + secret: &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "argocd-secret", + Namespace: "default", + }, + Data: map[string][]byte{ + "plugin.token": []byte("my-secret"), + }, + }, + inputParameters: map[string]apiextensionsv1.JSON{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + gotemplate: false, + content: []byte(`{"output": { + "parameters": [{ + "key1": "val1", + "key2": { + "key2_1": "val2_1", + "key2_2": { + "key2_2_1": "val2_2_1" + } + }, + "key3": 123 + }] + }}`), + expected: []map[string]interface{}{ + { + "key1": "val1", + "key2.key2_1": "val2_1", + "key2.key2_2.key2_2_1": "val2_2_1", + "key3": "123", + "generator": map[string]interface{}{ + "input": argoprojiov1alpha1.PluginInput{ + Parameters: argoprojiov1alpha1.PluginParameters{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + }, + }, + }, + }, + expectedError: fmt.Errorf("error fetching ConfigMap: configmaps \"\" not found"), + }, + { + name: "no baseUrl", + configmap: &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "first-plugin-cm", + Namespace: "default", + }, + Data: map[string]string{ + "token": "$plugin.token", + }, + }, + secret: &v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "argocd-secret", + Namespace: "default", + }, + Data: map[string][]byte{ + "plugin.token": []byte("my-secret"), + }, + }, + inputParameters: map[string]apiextensionsv1.JSON{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + gotemplate: false, + content: []byte(`{"output": { + "parameters": [{ + "key1": "val1", + "key2": { + "key2_1": "val2_1", + "key2_2": { + "key2_2_1": "val2_2_1" + } + }, + "key3": 123 + }] + }}`), + expected: []map[string]interface{}{ + { + "key1": "val1", + "key2.key2_1": "val2_1", + "key2.key2_2.key2_2_1": "val2_2_1", + "key3": "123", + "generator": map[string]interface{}{ + "input": argoprojiov1alpha1.PluginInput{ + Parameters: argoprojiov1alpha1.PluginParameters{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + }, + }, + }, + }, + expectedError: fmt.Errorf("error fetching ConfigMap: baseUrl not found in ConfigMap"), + }, + { + name: "no token", + configmap: &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "first-plugin-cm", + Namespace: "default", + }, + Data: map[string]string{ + "baseUrl": "http://127.0.0.1", + }, + }, + secret: &v1.Secret{}, + inputParameters: map[string]apiextensionsv1.JSON{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + gotemplate: false, + content: []byte(`{"output": { + "parameters": [{ + "key1": "val1", + "key2": { + "key2_1": "val2_1", + "key2_2": { + "key2_2_1": "val2_2_1" + } + }, + "key3": 123 + }] + }}`), + expected: []map[string]interface{}{ + { + "key1": "val1", + "key2.key2_1": "val2_1", + "key2.key2_2.key2_2_1": "val2_2_1", + "key3": "123", + "generator": map[string]interface{}{ + "input": argoprojiov1alpha1.PluginInput{ + Parameters: argoprojiov1alpha1.PluginParameters{ + "pkey1": {Raw: []byte(`"val1"`)}, + "pkey2": {Raw: []byte(`"val2"`)}, + }, + }, + }, + }, + }, + expectedError: fmt.Errorf("error fetching ConfigMap: token not found in ConfigMap"), + }, + } + + ctx := context.Background() + + for _, testCase := range testCases { + + t.Run(testCase.name, func(t *testing.T) { + + generatorConfig := argoprojiov1alpha1.ApplicationSetGenerator{ + Plugin: &argoprojiov1alpha1.PluginGenerator{ + ConfigMapRef: argoprojiov1alpha1.PluginConfigMapRef{Name: testCase.configmap.Name}, + Input: argoprojiov1alpha1.PluginInput{ + Parameters: testCase.inputParameters, + }, + Values: testCase.values, + }, + } + + handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + authHeader := r.Header.Get("Authorization") + _, tokenKey := plugin.ParseSecretKey(testCase.configmap.Data["token"]) + expectedToken := testCase.secret.Data[strings.Replace(tokenKey, "$", "", -1)] + if authHeader != "Bearer "+string(expectedToken) { + w.WriteHeader(http.StatusUnauthorized) + return + } + + w.Header().Set("Content-Type", "application/json") + _, err := w.Write(testCase.content) + if err != nil { + assert.NoError(t, fmt.Errorf("Error Write %v", err)) + } + }) + + fakeServer := httptest.NewServer(handler) + + defer fakeServer.Close() + + if _, ok := testCase.configmap.Data["baseUrl"]; ok { + testCase.configmap.Data["baseUrl"] = fakeServer.URL + } + + fakeClient := kubefake.NewSimpleClientset(append([]runtime.Object{}, testCase.configmap, testCase.secret)...) + + fakeClientWithCache := fake.NewClientBuilder().WithObjects([]client.Object{testCase.configmap, testCase.secret}...).Build() + + var pluginGenerator = NewPluginGenerator(fakeClientWithCache, ctx, fakeClient, "default") + + applicationSetInfo := argoprojiov1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "set", + }, + Spec: argoprojiov1alpha1.ApplicationSetSpec{ + GoTemplate: testCase.gotemplate, + }, + } + + got, err := pluginGenerator.GenerateParams(&generatorConfig, &applicationSetInfo) + + if err != nil { + fmt.Println(err) + } + + if testCase.expectedError != nil { + assert.EqualError(t, err, testCase.expectedError.Error()) + } else { + assert.NoError(t, err) + expectedJson, err := json.Marshal(testCase.expected) + require.NoError(t, err) + gotJson, err := json.Marshal(got) + require.NoError(t, err) + assert.Equal(t, string(expectedJson), string(gotJson)) + } + }) + } +} diff --git a/applicationset/services/internal/http/client.go b/applicationset/services/internal/http/client.go new file mode 100644 index 0000000000000..00bcf32f3204f --- /dev/null +++ b/applicationset/services/internal/http/client.go @@ -0,0 +1,161 @@ +package http + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "io" + "net/http" + "strings" + "time" +) + +const ( + userAgent = "argocd-applicationset" + defaultTimeout = 30 +) + +type Client struct { + // URL is the URL used for API requests. + baseURL string + + // UserAgent is the user agent to include in HTTP requests. + UserAgent string + + // Token is used to make authenticated API calls. + token string + + // Client is an HTTP client used to communicate with the API. + client *http.Client +} + +type ErrorResponse struct { + Body []byte + Response *http.Response + Message string +} + +func NewClient(baseURL string, options ...ClientOptionFunc) (*Client, error) { + client, err := newClient(baseURL, options...) + if err != nil { + return nil, err + } + return client, nil +} + +func newClient(baseURL string, options ...ClientOptionFunc) (*Client, error) { + c := &Client{baseURL: baseURL, UserAgent: userAgent} + + // Configure the HTTP client. + c.client = &http.Client{ + Timeout: time.Duration(defaultTimeout) * time.Second, + } + + // Apply any given client options. + for _, fn := range options { + if fn == nil { + continue + } + if err := fn(c); err != nil { + return nil, err + } + } + + return c, nil +} + +func (c *Client) NewRequest(method, path string, body interface{}, options []ClientOptionFunc) (*http.Request, error) { + + // Make sure the given URL end with a slash + if !strings.HasSuffix(c.baseURL, "/") { + c.baseURL += "/" + } + + var buf io.ReadWriter + if body != nil { + buf = &bytes.Buffer{} + enc := json.NewEncoder(buf) + enc.SetEscapeHTML(false) + err := enc.Encode(body) + if err != nil { + return nil, err + } + } + + req, err := http.NewRequest(method, c.baseURL+path, buf) + if err != nil { + return nil, err + } + + if body != nil { + req.Header.Set("Content-Type", "application/json") + } + + if len(c.token) != 0 { + req.Header.Set("Authorization", "Bearer "+c.token) + } + + if c.UserAgent != "" { + req.Header.Set("User-Agent", c.UserAgent) + } + + return req, nil +} + +func (c *Client) Do(ctx context.Context, req *http.Request, v interface{}) (*http.Response, error) { + resp, err := c.client.Do(req) + if err != nil { + return nil, err + } + + defer resp.Body.Close() + + if err := CheckResponse(resp); err != nil { + return resp, err + } + + switch v := v.(type) { + case nil: + case io.Writer: + _, err = io.Copy(v, resp.Body) + default: + buf := new(bytes.Buffer) + teeReader := io.TeeReader(resp.Body, buf) + decErr := json.NewDecoder(teeReader).Decode(v) + if decErr == io.EOF { + decErr = nil // ignore EOF errors caused by empty response body + } + if decErr != nil { + err = fmt.Errorf("%s: %s", decErr.Error(), buf.String()) + } + } + return resp, err +} + +// CheckResponse checks the API response for errors, and returns them if present. +func CheckResponse(resp *http.Response) error { + + if c := resp.StatusCode; 200 <= c && c <= 299 { + return nil + } + + data, err := io.ReadAll(resp.Body) + if err != nil { + return fmt.Errorf("API error with status code %d: %v", resp.StatusCode, err) + } + + var raw map[string]interface{} + if err := json.Unmarshal(data, &raw); err != nil { + return fmt.Errorf("API error with status code %d: %s", resp.StatusCode, string(data)) + } + + message := "" + if value, ok := raw["message"].(string); ok { + message = value + } else if value, ok := raw["error"].(string); ok { + message = value + } + + return fmt.Errorf("API error with status code %d: %s", resp.StatusCode, message) +} diff --git a/applicationset/services/internal/http/client_options.go b/applicationset/services/internal/http/client_options.go new file mode 100644 index 0000000000000..ec388c9a80605 --- /dev/null +++ b/applicationset/services/internal/http/client_options.go @@ -0,0 +1,22 @@ +package http + +import "time" + +// ClientOptionFunc can be used to customize a new Restful API client. +type ClientOptionFunc func(*Client) error + +// WithToken is an option for NewClient to set token +func WithToken(token string) ClientOptionFunc { + return func(c *Client) error { + c.token = token + return nil + } +} + +// WithTimeout can be used to configure a custom timeout for requests. +func WithTimeout(timeout int) ClientOptionFunc { + return func(c *Client) error { + c.client.Timeout = time.Duration(timeout) * time.Second + return nil + } +} diff --git a/applicationset/services/internal/http/client_test.go b/applicationset/services/internal/http/client_test.go new file mode 100644 index 0000000000000..ca2c916177fee --- /dev/null +++ b/applicationset/services/internal/http/client_test.go @@ -0,0 +1,163 @@ +package http + +import ( + "bytes" + "context" + "fmt" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestClient(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + _, err := w.Write([]byte("Hello, World!")) + if err != nil { + assert.NoError(t, fmt.Errorf("Error Write %v", err)) + } + })) + defer server.Close() + + var clientOptionFns []ClientOptionFunc + _, err := NewClient(server.URL, clientOptionFns...) + + if err != nil { + t.Fatalf("Failed to create client: %v", err) + } +} + +func TestClientDo(t *testing.T) { + ctx := context.Background() + + for _, c := range []struct { + name string + params map[string]string + content []byte + fakeServer *httptest.Server + clientOptionFns []ClientOptionFunc + expected []map[string]interface{} + expectedCode int + expectedError error + }{ + { + name: "Simple", + params: map[string]string{ + "pkey1": "val1", + "pkey2": "val2", + }, + fakeServer: httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + _, err := w.Write([]byte(`[{ + "key1": "val1", + "key2": { + "key2_1": "val2_1", + "key2_2": { + "key2_2_1": "val2_2_1" + } + }, + "key3": 123 + }]`)) + if err != nil { + assert.NoError(t, fmt.Errorf("Error Write %v", err)) + } + })), + clientOptionFns: nil, + expected: []map[string]interface{}{ + { + "key1": "val1", + "key2": map[string]interface{}{ + "key2_1": "val2_1", + "key2_2": map[string]interface{}{ + "key2_2_1": "val2_2_1", + }, + }, + "key3": float64(123), + }, + }, + expectedCode: 200, + expectedError: nil, + }, + { + name: "With Token", + params: map[string]string{ + "pkey1": "val1", + "pkey2": "val2", + }, + fakeServer: httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + authHeader := r.Header.Get("Authorization") + if authHeader != "Bearer "+string("test-token") { + w.WriteHeader(http.StatusUnauthorized) + return + } + w.WriteHeader(http.StatusOK) + _, err := w.Write([]byte(`[{ + "key1": "val1", + "key2": { + "key2_1": "val2_1", + "key2_2": { + "key2_2_1": "val2_2_1" + } + }, + "key3": 123 + }]`)) + if err != nil { + assert.NoError(t, fmt.Errorf("Error Write %v", err)) + } + })), + clientOptionFns: nil, + expected: []map[string]interface{}(nil), + expectedCode: 401, + expectedError: fmt.Errorf("API error with status code 401: "), + }, + } { + cc := c + t.Run(cc.name, func(t *testing.T) { + defer cc.fakeServer.Close() + + client, err := NewClient(cc.fakeServer.URL, cc.clientOptionFns...) + + if err != nil { + t.Fatalf("NewClient returned unexpected error: %v", err) + } + + req, err := client.NewRequest("POST", "", cc.params, nil) + + if err != nil { + t.Fatalf("NewRequest returned unexpected error: %v", err) + } + + var data []map[string]interface{} + + resp, err := client.Do(ctx, req, &data) + + if cc.expectedError != nil { + assert.EqualError(t, err, cc.expectedError.Error()) + } else { + assert.Equal(t, resp.StatusCode, cc.expectedCode) + assert.Equal(t, data, cc.expected) + assert.NoError(t, err) + } + }) + } +} + +func TestCheckResponse(t *testing.T) { + resp := &http.Response{ + StatusCode: http.StatusBadRequest, + Body: io.NopCloser(bytes.NewBufferString(`{"error":"invalid_request","description":"Invalid token"}`)), + } + + err := CheckResponse(resp) + if err == nil { + t.Error("Expected an error, got nil") + } + + expected := "API error with status code 400: invalid_request" + if err.Error() != expected { + t.Errorf("Expected error '%s', got '%s'", expected, err.Error()) + } +} diff --git a/applicationset/services/plugin/plugin_service.go b/applicationset/services/plugin/plugin_service.go new file mode 100644 index 0000000000000..95573e0942407 --- /dev/null +++ b/applicationset/services/plugin/plugin_service.go @@ -0,0 +1,73 @@ +package plugin + +import ( + "context" + "fmt" + "net/http" + + internalhttp "github.com/argoproj/argo-cd/v2/applicationset/services/internal/http" + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" +) + +// ServiceRequest is the request object sent to the plugin service. +type ServiceRequest struct { + // ApplicationSetName is the appSetName of the ApplicationSet for which we're requesting parameters. Useful for logging in + // the plugin service. + ApplicationSetName string `json:"applicationSetName"` + // Input is the map of parameters set in the ApplicationSet spec for this generator. + Input v1alpha1.PluginInput `json:"input"` +} + +type Output struct { + // Parameters is the list of parameter sets returned by the plugin. + Parameters []map[string]interface{} `json:"parameters"` +} + +// ServiceResponse is the response object returned by the plugin service. +type ServiceResponse struct { + // Output is the map of outputs returned by the plugin. + Output Output `json:"output"` +} + +type Service struct { + client *internalhttp.Client + appSetName string +} + +func NewPluginService(ctx context.Context, appSetName string, baseURL string, token string, requestTimeout int) (*Service, error) { + var clientOptionFns []internalhttp.ClientOptionFunc + + clientOptionFns = append(clientOptionFns, internalhttp.WithToken(token)) + + if requestTimeout != 0 { + clientOptionFns = append(clientOptionFns, internalhttp.WithTimeout(requestTimeout)) + } + + client, err := internalhttp.NewClient(baseURL, clientOptionFns...) + if err != nil { + return nil, fmt.Errorf("error creating plugin client: %v", err) + } + + return &Service{ + client: client, + appSetName: appSetName, + }, nil +} + +func (p *Service) List(ctx context.Context, parameters v1alpha1.PluginParameters) (*ServiceResponse, error) { + req, err := p.client.NewRequest(http.MethodPost, "api/v1/getparams.execute", ServiceRequest{ApplicationSetName: p.appSetName, Input: v1alpha1.PluginInput{Parameters: parameters}}, nil) + + if err != nil { + return nil, fmt.Errorf("NewRequest returned unexpected error: %v", err) + } + + var data ServiceResponse + + _, err = p.client.Do(ctx, req, &data) + + if err != nil { + return nil, fmt.Errorf("error get api '%s': %v", p.appSetName, err) + } + + return &data, err +} diff --git a/applicationset/services/plugin/plugin_service_test.go b/applicationset/services/plugin/plugin_service_test.go new file mode 100644 index 0000000000000..6dc81d33df71f --- /dev/null +++ b/applicationset/services/plugin/plugin_service_test.go @@ -0,0 +1,52 @@ +package plugin + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestPlugin(t *testing.T) { + expectedJSON := `{"parameters": [{"number":123,"digest":"sha256:942ae2dfd73088b54d7151a3c3fd5af038a51c50029bfcfd21f1e650d9579967"},{"number":456,"digest":"sha256:224e68cc69566e5cbbb76034b3c42cd2ed57c1a66720396e1c257794cb7d68c1"}]}` + token := "0bc57212c3cbbec69d20b34c507284bd300def5b" + + handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + authHeader := r.Header.Get("Authorization") + if authHeader != "Bearer "+token { + w.WriteHeader(http.StatusUnauthorized) + return + } + _, err := w.Write([]byte(expectedJSON)) + + if err != nil { + assert.NoError(t, fmt.Errorf("Error Write %v", err)) + } + }) + ts := httptest.NewServer(handler) + defer ts.Close() + + client, err := NewPluginService(context.Background(), "plugin-test", ts.URL, token, 0) + + if err != nil { + t.Errorf("unexpected error: %v", err) + } + + data, err := client.List(context.Background(), nil) + + if err != nil { + t.Errorf("unexpected error: %v", err) + } + + var expectedData ServiceResponse + err = json.Unmarshal([]byte(expectedJSON), &expectedData) + if err != nil { + t.Fatal(err) + } + assert.Equal(t, &expectedData, data) +} diff --git a/applicationset/services/plugin/utils.go b/applicationset/services/plugin/utils.go new file mode 100644 index 0000000000000..26e38e492200d --- /dev/null +++ b/applicationset/services/plugin/utils.go @@ -0,0 +1,21 @@ +package plugin + +import ( + "fmt" + "strings" + + "github.com/argoproj/argo-cd/v2/common" +) + +// ParseSecretKey retrieves secret appSetName if different from common ArgoCDSecretName. +func ParseSecretKey(key string) (secretName string, tokenKey string) { + if strings.Contains(key, ":") { + parts := strings.Split(key, ":") + secretName = parts[0][1:] + tokenKey = fmt.Sprintf("$%s", parts[1]) + } else { + secretName = common.ArgoCDSecretName + tokenKey = key + } + return secretName, tokenKey +} diff --git a/applicationset/services/plugin/utils_test.go b/applicationset/services/plugin/utils_test.go new file mode 100644 index 0000000000000..c364d606392e4 --- /dev/null +++ b/applicationset/services/plugin/utils_test.go @@ -0,0 +1,17 @@ +package plugin + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestParseSecretKey(t *testing.T) { + secretName, tokenKey := ParseSecretKey("#my-secret:my-token") + assert.Equal(t, "my-secret", secretName) + assert.Equal(t, "$my-token", tokenKey) + + secretName, tokenKey = ParseSecretKey("#my-secret") + assert.Equal(t, "argocd-secret", secretName) + assert.Equal(t, "#my-secret", tokenKey) +} diff --git a/applicationset/utils/utils.go b/applicationset/utils/utils.go index f7ef2e89760ec..ca0e508858375 100644 --- a/applicationset/utils/utils.go +++ b/applicationset/utils/utils.go @@ -143,7 +143,7 @@ func (r *Render) deeplyReplace(copy, original reflect.Value, replaceMap map[stri } for _, key := range original.MapKeys() { originalValue := original.MapIndex(key) - if originalValue.Kind() != reflect.String && originalValue.IsNil() { + if originalValue.Kind() != reflect.String && isNillable(originalValue) && originalValue.IsNil() { continue } // New gives us a pointer, but again we want the value @@ -191,6 +191,16 @@ func (r *Render) deeplyReplace(copy, original reflect.Value, replaceMap map[stri return nil } +// isNillable returns true if the value is something which may be set to nil. This function is meant to guard against a +// panic from calling IsNil on a non-pointer type. +func isNillable(v reflect.Value) bool { + switch v.Kind() { + case reflect.Map, reflect.Pointer, reflect.UnsafePointer, reflect.Interface, reflect.Slice: + return true + } + return false +} + func (r *Render) RenderTemplateParams(tmpl *argoappsv1.Application, syncPolicy *argoappsv1.ApplicationSetSyncPolicy, params map[string]interface{}, useGoTemplate bool, goTemplateOptions []string) (*argoappsv1.Application, error) { if tmpl == nil { return nil, fmt.Errorf("application template is empty") diff --git a/applicationset/utils/utils_test.go b/applicationset/utils/utils_test.go index eca1b44198e49..8e7bfa58d4fa8 100644 --- a/applicationset/utils/utils_test.go +++ b/applicationset/utils/utils_test.go @@ -8,6 +8,7 @@ import ( logtest "github.com/sirupsen/logrus/hooks/test" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" @@ -484,6 +485,34 @@ func TestRenderTemplateParamsGoTemplate(t *testing.T) { } } +func TestRenderGeneratorParams_does_not_panic(t *testing.T) { + // This test verifies that the RenderGeneratorParams function does not panic when the value in a map is a non- + // nillable type. This is a regression test. + render := Render{} + params := map[string]interface{}{ + "branch": "master", + } + generator := &argoappsv1.ApplicationSetGenerator{ + Plugin: &argoappsv1.PluginGenerator{ + ConfigMapRef: argoappsv1.PluginConfigMapRef{ + Name: "cm-plugin", + }, + Input: argoappsv1.PluginInput{ + Parameters: map[string]apiextensionsv1.JSON{ + "branch": { + Raw: []byte(`"{{.branch}}"`), + }, + "repo": { + Raw: []byte(`"argo-test"`), + }, + }, + }, + }, + } + _, err := render.RenderGeneratorParams(generator, params, true, []string{}) + assert.NoError(t, err) +} + func TestRenderTemplateKeys(t *testing.T) { t.Run("fasttemplate", func(t *testing.T) { application := &argoappsv1.Application{ diff --git a/applicationset/webhook/webhook.go b/applicationset/webhook/webhook.go index 17e782386f061..f1dd5b5ebb0eb 100644 --- a/applicationset/webhook/webhook.go +++ b/applicationset/webhook/webhook.go @@ -98,6 +98,7 @@ func (h *WebhookHandler) HandleEvent(payload interface{}) { // check if the ApplicationSet uses any generator that is relevant to the payload shouldRefresh = shouldRefreshGitGenerator(gen.Git, gitGenInfo) || shouldRefreshPRGenerator(gen.PullRequest, prGenInfo) || + shouldRefreshPluginGenerator(gen.Plugin) || h.shouldRefreshMatrixGenerator(gen.Matrix, &appSet, gitGenInfo, prGenInfo) || h.shouldRefreshMergeGenerator(gen.Merge, &appSet, gitGenInfo, prGenInfo) if shouldRefresh { @@ -287,6 +288,10 @@ func shouldRefreshGitGenerator(gen *v1alpha1.GitGenerator, info *gitGeneratorInf return true } +func shouldRefreshPluginGenerator(gen *v1alpha1.PluginGenerator) bool { + return gen != nil +} + func genRevisionHasChanged(gen *v1alpha1.GitGenerator, revision string, touchedHead bool) bool { targetRev := parseRevision(gen.Revision) if targetRev == "HEAD" || targetRev == "" { // revision is head @@ -417,6 +422,7 @@ func (h *WebhookHandler) shouldRefreshMatrixGenerator(gen *v1alpha1.MatrixGenera SCMProvider: g0.SCMProvider, ClusterDecisionResource: g0.ClusterDecisionResource, PullRequest: g0.PullRequest, + Plugin: g0.Plugin, Matrix: matrixGenerator0, Merge: mergeGenerator0, } @@ -471,6 +477,7 @@ func (h *WebhookHandler) shouldRefreshMatrixGenerator(gen *v1alpha1.MatrixGenera SCMProvider: g1.SCMProvider, ClusterDecisionResource: g1.ClusterDecisionResource, PullRequest: g1.PullRequest, + Plugin: g1.Plugin, Matrix: matrixGenerator1, Merge: mergeGenerator1, } @@ -488,6 +495,7 @@ func (h *WebhookHandler) shouldRefreshMatrixGenerator(gen *v1alpha1.MatrixGenera // Check all interpolated child generators if shouldRefreshGitGenerator(interpolatedGenerator.Git, gitGenInfo) || shouldRefreshPRGenerator(interpolatedGenerator.PullRequest, prGenInfo) || + shouldRefreshPluginGenerator(interpolatedGenerator.Plugin) || h.shouldRefreshMatrixGenerator(interpolatedGenerator.Matrix, appSet, gitGenInfo, prGenInfo) || h.shouldRefreshMergeGenerator(requestedGenerator1.Merge, appSet, gitGenInfo, prGenInfo) { return true @@ -498,6 +506,7 @@ func (h *WebhookHandler) shouldRefreshMatrixGenerator(gen *v1alpha1.MatrixGenera // First child generator didn't return any params, just check the second child generator return shouldRefreshGitGenerator(requestedGenerator1.Git, gitGenInfo) || shouldRefreshPRGenerator(requestedGenerator1.PullRequest, prGenInfo) || + shouldRefreshPluginGenerator(requestedGenerator1.Plugin) || h.shouldRefreshMatrixGenerator(requestedGenerator1.Matrix, appSet, gitGenInfo, prGenInfo) || h.shouldRefreshMergeGenerator(requestedGenerator1.Merge, appSet, gitGenInfo, prGenInfo) } diff --git a/applicationset/webhook/webhook_test.go b/applicationset/webhook/webhook_test.go index d9b64bee0862c..eb36cc1730193 100644 --- a/applicationset/webhook/webhook_test.go +++ b/applicationset/webhook/webhook_test.go @@ -60,7 +60,7 @@ func TestWebhookHandler(t *testing.T) { headerKey: "X-GitHub-Event", headerValue: "push", payloadFile: "github-commit-event.json", - effectedAppSets: []string{"git-github", "matrix-git-github", "merge-git-github", "matrix-scm-git-github", "matrix-nested-git-github", "merge-nested-git-github"}, + effectedAppSets: []string{"git-github", "matrix-git-github", "merge-git-github", "matrix-scm-git-github", "matrix-nested-git-github", "merge-nested-git-github", "plugin", "matrix-pull-request-github-plugin"}, expectedStatusCode: http.StatusOK, expectedRefresh: true, }, @@ -69,7 +69,7 @@ func TestWebhookHandler(t *testing.T) { headerKey: "X-GitHub-Event", headerValue: "push", payloadFile: "github-commit-branch-event.json", - effectedAppSets: []string{"git-github"}, + effectedAppSets: []string{"git-github", "plugin", "matrix-pull-request-github-plugin"}, expectedStatusCode: http.StatusOK, expectedRefresh: true, }, @@ -78,7 +78,7 @@ func TestWebhookHandler(t *testing.T) { headerKey: "X-GitHub-Event", headerValue: "ping", payloadFile: "github-ping-event.json", - effectedAppSets: []string{"git-github"}, + effectedAppSets: []string{"git-github", "plugin"}, expectedStatusCode: http.StatusOK, expectedRefresh: false, }, @@ -87,7 +87,7 @@ func TestWebhookHandler(t *testing.T) { headerKey: "X-Gitlab-Event", headerValue: "Push Hook", payloadFile: "gitlab-event.json", - effectedAppSets: []string{"git-gitlab"}, + effectedAppSets: []string{"git-gitlab", "plugin", "matrix-pull-request-github-plugin"}, expectedStatusCode: http.StatusOK, expectedRefresh: true, }, @@ -96,7 +96,7 @@ func TestWebhookHandler(t *testing.T) { headerKey: "X-Random-Event", headerValue: "Push Hook", payloadFile: "gitlab-event.json", - effectedAppSets: []string{"git-gitlab"}, + effectedAppSets: []string{"git-gitlab", "plugin"}, expectedStatusCode: http.StatusBadRequest, expectedRefresh: false, }, @@ -105,7 +105,7 @@ func TestWebhookHandler(t *testing.T) { headerKey: "X-Random-Event", headerValue: "Push Hook", payloadFile: "invalid-event.json", - effectedAppSets: []string{"git-gitlab"}, + effectedAppSets: []string{"git-gitlab", "plugin"}, expectedStatusCode: http.StatusBadRequest, expectedRefresh: false, }, @@ -114,7 +114,7 @@ func TestWebhookHandler(t *testing.T) { headerKey: "X-GitHub-Event", headerValue: "pull_request", payloadFile: "github-pull-request-opened-event.json", - effectedAppSets: []string{"pull-request-github", "matrix-pull-request-github", "matrix-scm-pull-request-github", "merge-pull-request-github"}, + effectedAppSets: []string{"pull-request-github", "matrix-pull-request-github", "matrix-scm-pull-request-github", "merge-pull-request-github", "plugin", "matrix-pull-request-github-plugin"}, expectedStatusCode: http.StatusOK, expectedRefresh: true, }, @@ -123,7 +123,7 @@ func TestWebhookHandler(t *testing.T) { headerKey: "X-GitHub-Event", headerValue: "pull_request", payloadFile: "github-pull-request-assigned-event.json", - effectedAppSets: []string{"pull-request-github", "matrix-pull-request-github", "matrix-scm-pull-request-github", "merge-pull-request-github"}, + effectedAppSets: []string{"pull-request-github", "matrix-pull-request-github", "matrix-scm-pull-request-github", "merge-pull-request-github", "plugin", "matrix-pull-request-github-plugin"}, expectedStatusCode: http.StatusOK, expectedRefresh: false, }, @@ -132,7 +132,7 @@ func TestWebhookHandler(t *testing.T) { headerKey: "X-Gitlab-Event", headerValue: "Merge Request Hook", payloadFile: "gitlab-merge-request-open-event.json", - effectedAppSets: []string{"pull-request-gitlab"}, + effectedAppSets: []string{"pull-request-gitlab", "plugin", "matrix-pull-request-github-plugin"}, expectedStatusCode: http.StatusOK, expectedRefresh: true, }, @@ -141,7 +141,7 @@ func TestWebhookHandler(t *testing.T) { headerKey: "X-Gitlab-Event", headerValue: "Merge Request Hook", payloadFile: "gitlab-merge-request-approval-event.json", - effectedAppSets: []string{"pull-request-gitlab"}, + effectedAppSets: []string{"pull-request-gitlab", "plugin"}, expectedStatusCode: http.StatusOK, expectedRefresh: false, }, @@ -162,11 +162,13 @@ func TestWebhookHandler(t *testing.T) { fakeAppWithGitGenerator("git-gitlab", namespace, "https://gitlab/group/name"), fakeAppWithGithubPullRequestGenerator("pull-request-github", namespace, "Codertocat", "Hello-World"), fakeAppWithGitlabPullRequestGenerator("pull-request-gitlab", namespace, "100500"), + fakeAppWithPluginGenerator("plugin", namespace), fakeAppWithMatrixAndGitGenerator("matrix-git-github", namespace, "https://github.com/org/repo"), fakeAppWithMatrixAndPullRequestGenerator("matrix-pull-request-github", namespace, "Codertocat", "Hello-World"), fakeAppWithMatrixAndScmWithGitGenerator("matrix-scm-git-github", namespace, "org"), fakeAppWithMatrixAndScmWithPullRequestGenerator("matrix-scm-pull-request-github", namespace, "Codertocat"), fakeAppWithMatrixAndNestedGitGenerator("matrix-nested-git-github", namespace, "https://github.com/org/repo"), + fakeAppWithMatrixAndPullRequestGeneratorWithPluginGenerator("matrix-pull-request-github-plugin", namespace, "Codertocat", "Hello-World", "plugin-cm"), fakeAppWithMergeAndGitGenerator("merge-git-github", namespace, "https://github.com/org/repo"), fakeAppWithMergeAndPullRequestGenerator("merge-pull-request-github", namespace, "Codertocat", "Hello-World"), fakeAppWithMergeAndNestedGitGenerator("merge-nested-git-github", namespace, "https://github.com/org/repo"), @@ -214,6 +216,7 @@ func mockGenerators() map[string]generators.Generator { // generatorMockList := generatorMock{} generatorMockGit := &generatorMock{} generatorMockPR := &generatorMock{} + generatorMockPlugin := &generatorMock{} mockSCMProvider := &scm_provider.MockProvider{ Repos: []*scm_provider.Repository{ { @@ -239,6 +242,7 @@ func mockGenerators() map[string]generators.Generator { "Git": generatorMockGit, "SCMProvider": generatorMockSCM, "PullRequest": generatorMockPR, + "Plugin": generatorMockPlugin, } nestedGenerators := map[string]generators.Generator{ @@ -246,6 +250,7 @@ func mockGenerators() map[string]generators.Generator { "Git": terminalMockGenerators["Git"], "SCMProvider": terminalMockGenerators["SCMProvider"], "PullRequest": terminalMockGenerators["PullRequest"], + "Plugin": terminalMockGenerators["Plugin"], "Matrix": generators.NewMatrixGenerator(terminalMockGenerators), "Merge": generators.NewMergeGenerator(terminalMockGenerators), } @@ -255,6 +260,7 @@ func mockGenerators() map[string]generators.Generator { "Git": terminalMockGenerators["Git"], "SCMProvider": terminalMockGenerators["SCMProvider"], "PullRequest": terminalMockGenerators["PullRequest"], + "Plugin": terminalMockGenerators["Plugin"], "Matrix": generators.NewMatrixGenerator(nestedGenerators), "Merge": generators.NewMergeGenerator(nestedGenerators), } @@ -592,6 +598,60 @@ func fakeAppWithMergeAndNestedGitGenerator(name, namespace, repo string) *v1alph } } +func fakeAppWithPluginGenerator(name, namespace string) *v1alpha1.ApplicationSet { + return &v1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: namespace, + }, + Spec: v1alpha1.ApplicationSetSpec{ + Generators: []v1alpha1.ApplicationSetGenerator{ + { + Plugin: &v1alpha1.PluginGenerator{ + ConfigMapRef: v1alpha1.PluginConfigMapRef{ + Name: "test", + }, + }, + }, + }, + }, + } +} + +func fakeAppWithMatrixAndPullRequestGeneratorWithPluginGenerator(name, namespace, owner, repo, configmapName string) *v1alpha1.ApplicationSet { + return &v1alpha1.ApplicationSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: namespace, + }, + Spec: v1alpha1.ApplicationSetSpec{ + Generators: []v1alpha1.ApplicationSetGenerator{ + { + Matrix: &v1alpha1.MatrixGenerator{ + Generators: []v1alpha1.ApplicationSetNestedGenerator{ + { + PullRequest: &v1alpha1.PullRequestGenerator{ + Github: &v1alpha1.PullRequestGeneratorGithub{ + Owner: owner, + Repo: repo, + }, + }, + }, + { + Plugin: &v1alpha1.PluginGenerator{ + ConfigMapRef: v1alpha1.PluginConfigMapRef{ + Name: configmapName, + }, + }, + }, + }, + }, + }, + }, + }, + } +} + func newFakeClient(ns string) *kubefake.Clientset { s := runtime.NewScheme() s.AddKnownTypes(v1alpha1.SchemeGroupVersion, &v1alpha1.ApplicationSet{}) diff --git a/assets/swagger.json b/assets/swagger.json index 1383eb156cc5e..1426ed3f713cd 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -5848,6 +5848,9 @@ "merge": { "$ref": "#/definitions/v1alpha1MergeGenerator" }, + "plugin": { + "$ref": "#/definitions/v1alpha1PluginGenerator" + }, "pullRequest": { "$ref": "#/definitions/v1alpha1PullRequestGenerator" }, @@ -5896,6 +5899,9 @@ "merge": { "$ref": "#/definitions/v1JSON" }, + "plugin": { + "$ref": "#/definitions/v1alpha1PluginGenerator" + }, "pullRequest": { "$ref": "#/definitions/v1alpha1PullRequestGenerator" }, @@ -7313,6 +7319,54 @@ } } }, + "v1alpha1PluginConfigMapRef": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Name of the ConfigMap" + } + } + }, + "v1alpha1PluginGenerator": { + "description": "PluginGenerator defines connection info specific to Plugin.", + "type": "object", + "properties": { + "configMapRef": { + "$ref": "#/definitions/v1alpha1PluginConfigMapRef" + }, + "input": { + "$ref": "#/definitions/v1alpha1PluginInput" + }, + "requeueAfterSeconds": { + "description": "RequeueAfterSeconds determines how long the ApplicationSet controller will wait before reconciling the ApplicationSet again.", + "type": "string", + "format": "int64" + }, + "template": { + "$ref": "#/definitions/v1alpha1ApplicationSetTemplate" + }, + "values": { + "description": "Values contains key/value pairs which are passed directly as parameters to the template. These values will not be\nsent as parameters to the plugin.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1alpha1PluginInput": { + "type": "object", + "properties": { + "parameters": { + "description": "Parameters contains the information to pass to the plugin. It is a map. The keys must be strings, and the\nvalues can be any type.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/v1JSON" + } + } + } + }, "v1alpha1ProjectRole": { "type": "object", "title": "ProjectRole represents a role that has access to a project", diff --git a/cmd/argocd-applicationset-controller/commands/applicationset_controller.go b/cmd/argocd-applicationset-controller/commands/applicationset_controller.go index eae22d7907014..69b8d9ab0d57c 100644 --- a/cmd/argocd-applicationset-controller/commands/applicationset_controller.go +++ b/cmd/argocd-applicationset-controller/commands/applicationset_controller.go @@ -152,6 +152,7 @@ func NewCommand() *cobra.Command { "SCMProvider": generators.NewSCMProviderGenerator(mgr.GetClient(), scmAuth), "ClusterDecisionResource": generators.NewDuckTypeGenerator(ctx, dynamicClient, k8sClient, namespace), "PullRequest": generators.NewPullRequestGenerator(mgr.GetClient(), scmAuth), + "Plugin": generators.NewPluginGenerator(mgr.GetClient(), ctx, k8sClient, namespace), } nestedGenerators := map[string]generators.Generator{ @@ -161,6 +162,7 @@ func NewCommand() *cobra.Command { "SCMProvider": terminalGenerators["SCMProvider"], "ClusterDecisionResource": terminalGenerators["ClusterDecisionResource"], "PullRequest": terminalGenerators["PullRequest"], + "Plugin": terminalGenerators["Plugin"], "Matrix": generators.NewMatrixGenerator(terminalGenerators), "Merge": generators.NewMergeGenerator(terminalGenerators), } @@ -172,6 +174,7 @@ func NewCommand() *cobra.Command { "SCMProvider": terminalGenerators["SCMProvider"], "ClusterDecisionResource": terminalGenerators["ClusterDecisionResource"], "PullRequest": terminalGenerators["PullRequest"], + "Plugin": terminalGenerators["Plugin"], "Matrix": generators.NewMatrixGenerator(nestedGenerators), "Merge": generators.NewMergeGenerator(nestedGenerators), } diff --git a/docs/operator-manual/applicationset/Generators-Plugin.md b/docs/operator-manual/applicationset/Generators-Plugin.md new file mode 100644 index 0000000000000..187ec255fc446 --- /dev/null +++ b/docs/operator-manual/applicationset/Generators-Plugin.md @@ -0,0 +1,341 @@ +# Plugin Generator + +Plugins allow you to provide your own generator. + +- You can write in any language +- Simple: a plugin just responds to RPC HTTP requests. +- You can use it in a sidecar, or standalone deployment. +- You can get your plugin running today, no need to wait 3-5 months for review, approval, merge and an Argo software + release. +- You can combine it with Matrix or Merge. + +To start working on your own plugin, you can generate a new repository based on the example +[applicationset-hello-plugin](https://github.com/argoproj-labs/applicationset-hello-plugin). + +## Simple example + +Using a generator plugin without combining it with Matrix or Merge. + +```yaml +apiVersion: argoproj.io/v1alpha1 +kind: ApplicationSet +metadata: + name: myplugin +spec: + generators: + - plugin: + # Specify the configMap where the plugin configuration is located. + configMapRef: + name: my-plugin + # You can pass arbitrary parameters to the plugin. `input.parameters` is a map, but values may be any type. + # These parameters will also be available on the generator's output under the `generator.input.parameters` key. + input: + parameters: + key1: "value1" + key2: "value2" + list: ["list", "of", "values"] + boolean: true + map: + key1: "value1" + key2: "value2" + key3: "value3" + + # You can also attach arbitrary values to the generator's output under the `values` key. These values will be + # available in templates under the `values` key. + values: + value1: something + + # When using a Plugin generator, the ApplicationSet controller polls every `requeueAfterSeconds` interval (defaulting to every 30 minutes) to detect changes. + requeueAfterSeconds: 30 + template: + metadata: + name: myplugin + annotations: + example.from.input.parameters: "{{ generator.input.parameters.map.key1 }}" + example.from.values: "{{ values.value1 }}" + # The plugin determines what else it produces. + example.from.plugin.output: "{{ something.from.the.plugin }}" +``` + +- `configMapRef.name`: A `ConfigMap` name containing the plugin configuration to use for RPC call. +- `input.parameters`: Input parameters included in the RPC call to the plugin. (Optional) + +!!! note + The concept of the plugin should not undermine the spirit of GitOps by externalizing data outside of Git. The goal is to be complementary in specific contexts. + For example, when using one of the PullRequest generators, it's impossible to retrieve parameters related to the CI (only the commit hash is available), which limits the possibilities. By using a plugin, it's possible to retrieve the necessary parameters from a separate data source and use them to extend the functionality of the generator. + +### Add a ConfigMap to configure the access of the plugin + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: my-plugin + namespace: argocd +data: + token: "$plugin.myplugin.token" # Alternatively $:plugin.myplugin.token + baseUrl: "http://myplugin.plugin-ns.svc.cluster.local." +``` + +- `token`: Pre-shared token used to authenticate HTTP request (points to the right key you created in the `argocd-secret` Secret) +- `baseUrl`: BaseUrl of the k8s service exposing your plugin in the cluster. + +### Store credentials + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: argocd-secret + namespace: argocd + labels: + app.kubernetes.io/name: argocd-secret + app.kubernetes.io/part-of: argocd +type: Opaque +data: + # ... + # The secret value must be base64 encoded **once** + # this value corresponds to: `printf "strong-password" | base64` + plugin.myplugin.token: "c3Ryb25nLXBhc3N3b3Jk" + # ... +``` + +#### Alternative + +If you want to store sensitive data in **another** Kubernetes `Secret`, instead of `argocd-secret`, ArgoCD knows how to check the keys under `data` in your Kubernetes `Secret` for a corresponding key whenever a value in a configmap starts with `$`, then your Kubernetes `Secret` name and `:` (colon) followed by the key name. + +Syntax: `$:` + +> NOTE: Secret must have label `app.kubernetes.io/part-of: argocd` + +##### Example + +`another-secret`: + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: another-secret + namespace: argocd + labels: + app.kubernetes.io/part-of: argocd +type: Opaque +data: + # ... + # Store client secret like below. + # Ensure the secret is base64 encoded + plugin.myplugin.token: + # ... +``` + +### HTTP server + +#### A Simple Python Plugin + +You can deploy it either as a sidecar or as a standalone deployment (the latter is recommended). + +In the example, the token is stored in a file at this location : `/var/run/argo/token` + +``` +string-password +``` + +```python +import json +from http.server import BaseHTTPRequestHandler, HTTPServer + +with open("/var/run/argo/token") as f: + plugin_token = f.read().strip() + + +class Plugin(BaseHTTPRequestHandler): + + def args(self): + return json.loads(self.rfile.read(int(self.headers.get('Content-Length')))) + + def reply(self, reply): + self.send_response(200) + self.end_headers() + self.wfile.write(json.dumps(reply).encode("UTF-8")) + + def forbidden(self): + self.send_response(403) + self.end_headers() + + def unsupported(self): + self.send_response(404) + self.end_headers() + + def do_POST(self): + if self.headers.get("Authorization") != "Bearer " + plugin_token: + self.forbidden() + + if self.path == '/api/v1/getparams.execute': + args = self.args() + self.reply({ + "output": { + "parameters": [ + { + "key1": "val1", + "key2": "val2" + }, + { + "key1": "val2", + "key2": "val2" + } + ] + } + }) + else: + self.unsupported() + + +if __name__ == '__main__': + httpd = HTTPServer(('', 4355), Plugin) + httpd.serve_forever() +``` + +Execute getparams with curl : + +``` +curl http://localhost:4355/api/v1/getparams.execute -H "Authorization: Bearer string-password" -d \ +'{ + "applicationSetName": "fake-appset", + "input": { + "parameters": { + "param1": "value1" + } + } +}' +``` + +Some things to note here: + +- You only need to implement the calls `/api/v1/getparams.execute` +- You should check that the `Authorization` header contains the same bearer value as `/var/run/argo/token`. Return 403 if not +- The input parameters are included in the request body and can be accessed using the `input.parameters` variable. +- The output must always be a list of object maps nested under the `output.parameters` key in a map. +- `generator.input.parameters` and `values` are reserved keys. If present in the plugin output, these keys will be overwritten by the + contents of the `input.parameters` and `values` keys in the ApplicationSet's plugin generator spec. + +## With matrix and pull request example + +In the following example, the plugin implementation is returning a set of image digests for the given branch. The returned list contains only one item correspondng to the latest builded image for the branch. + +```yaml +apiVersion: argoproj.io/v1alpha1 +kind: ApplicationSet +metadata: + name: fb-matrix +spec: + goTemplate: true + generators: + - matrix: + generators: + - pullRequest: + github: ... + requeueAfterSeconds: 30 + - plugin: + configMapRef: + name: cm-plugin + input: + parameters: + branch: "{{.branch}}" # provided by generator pull request + values: + branchLink: "https://git.example.com/org/repo/tree/{{.branch}}" + template: + metadata: + name: "fb-matrix-{{.branch}}" + spec: + source: + repoURL: "https://github.com/myorg/myrepo.git" + targetRevision: "HEAD" + path: charts/my-chart + helm: + releaseName: fb-matrix-{{.branch}} + valueFiles: + - values.yaml + values: | + front: + image: myregistry:{{.branch}}@{{ .digestFront }} # digestFront is generated by the plugin + back: + image: myregistry:{{.branch}}@{{ .digestBack }} # digestBack is generated by the plugin + project: default + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=true + destination: + server: https://kubernetes.default.svc + namespace: "{{.branch}}" + info: + - name: Link to the Application's branch + value: "{{values.branchLink}}" +``` + +To illustrate : + +- The generator pullRequest would return, for example, 2 branches: `feature-branch-1` and `feature-branch-2`. + +- The generator plugin would then perform 2 requests as follows : + +```shell +curl http://localhost:4355/api/v1/getparams.execute -H "Authorization: Bearer string-password" -d \ +'{ + "applicationSetName": "fb-matrix", + "input": { + "parameters": { + "branch": "feature-branch-1" + } + } +}' +``` + +Then, + +```shell +curl http://localhost:4355/api/v1/getparams.execute -H "Authorization: Bearer string-password" -d \ +'{ + "applicationSetName": "fb-matrix", + "input": { + "parameters": { + "branch": "feature-branch-2" + } + } +}' +``` + +For each call, it would return a unique result such as : + +```json +{ + "output": { + "parameters": [ + { + "digestFront": "sha256:a3f18c17771cc1051b790b453a0217b585723b37f14b413ad7c5b12d4534d411", + "digestBack": "sha256:4411417d614d5b1b479933b7420079671facd434fd42db196dc1f4cc55ba13ce" + } + ] + } +} +``` + +Then, + +```json +{ + "output": { + "parameters": [ + { + "digestFront": "sha256:7c20b927946805124f67a0cb8848a8fb1344d16b4d0425d63aaa3f2427c20497", + "digestBack": "sha256:e55e7e40700bbab9e542aba56c593cb87d680cefdfba3dd2ab9cfcb27ec384c2" + } + ] + } +} +``` + +In this example, by combining the two, you ensure that one or more pull requests are available and that the generated tag has been properly generated. This wouldn't have been possible with just a commit hash because a hash alone does not certify the success of the build. diff --git a/docs/operator-manual/applicationset/Generators.md b/docs/operator-manual/applicationset/Generators.md index 5c162463d6e89..4a2982c740aa7 100644 --- a/docs/operator-manual/applicationset/Generators.md +++ b/docs/operator-manual/applicationset/Generators.md @@ -4,7 +4,7 @@ Generators are responsible for generating *parameters*, which are then rendered Generators are primarily based on the data source that they use to generate the template parameters. For example: the List generator provides a set of parameters from a *literal list*, the Cluster generator uses the *Argo CD cluster list* as a source, the Git generator uses files/directories from a *Git repository*, and so. -As of this writing there are eight generators: +As of this writing there are nine generators: - [List generator](Generators-List.md): The List generator allows you to target Argo CD Applications to clusters based on a fixed list of cluster name/URL values. - [Cluster generator](Generators-Cluster.md): The Cluster generator allows you to target Argo CD Applications to clusters, based on the list of clusters defined within (and managed by) Argo CD (which includes automatically responding to cluster addition/removal events from Argo CD). @@ -14,6 +14,7 @@ As of this writing there are eight generators: - [SCM Provider generator](Generators-SCM-Provider.md): The SCM Provider generator uses the API of an SCM provider (eg GitHub) to automatically discover repositories within an organization. - [Pull Request generator](Generators-Pull-Request.md): The Pull Request generator uses the API of an SCMaaS provider (eg GitHub) to automatically discover open pull requests within an repository. - [Cluster Decision Resource generator](Generators-Cluster-Decision-Resource.md): The Cluster Decision Resource generator is used to interface with Kubernetes custom resources that use custom resource-specific logic to decide which set of Argo CD clusters to deploy to. +- [Plugin generator](Generators-Plugin.md): The Plugin generator make RPC HTTP request to provide parameters. All generators can be filtered by using the [Post Selector](Generators-Post-Selector.md) diff --git a/docs/proposals/applicationset-plugin-generator.md b/docs/proposals/applicationset-plugin-generator.md new file mode 100644 index 0000000000000..6a3b2ec484c8a --- /dev/null +++ b/docs/proposals/applicationset-plugin-generator.md @@ -0,0 +1,216 @@ +--- +title: applicationset-plugin-generator +authors: + - "@binboum" + - "@scrocquesel" +sponsors: + - TBD +reviewers: + - TBD +approvers: + - "@alexmt" + - TBD + +creation-date: 2022-03-21 +last-updated: 2022-03-21 +--- + +# ApplicationSet `plugin` generator + +Provide a generator that request its values through a RPC call. + +## Summary + +ApplicationSet generators are useful for modeling templates using external data sources to deploy applications. + +Today, generators have been developed based on the needs of the community, and when a new need arises, it's necessary to modify the Appset codebase. + +The proposal here is to have a "plugin" generator that would allow extending the codebase according to specific needs, without having to modify it directly. + +## Motivation + +Using the current generators, we sometimes encounter a need that arises, which may or may not be useful for the community. In such cases, several procedures need to be undertaken to make the modification, and sometimes it may be rejected because it's not in everyone's interest. + +The plugin approach also reduces the burden on community developers by externalizing feature requests into plugins that are outside the Appset controller's scope. From a security and scalability perspective, this can be advantageous. + +With this approach, it becomes possible to offer a catalog of plugins and encourage people with specific needs to develop standalone plugins that are independent of the controller's codebase. + +### Goals + +Empowering community developers to develop and use plugins that extend the list of generators can be a significant advantage. It would be possible to offer a page listing plugins maintained by the community, which can help promote the development of a rich ecosystem of plugins for various use cases. This can enhance the overall user experience by providing more options for generating application templates. + +Additionally, allowing developers to create plugins and share them with the community can foster innovation and encourage experimentation with new features and functionalities. It can also reduce the workload on the Appset development team, enabling them to focus on core features and functionalities. + +Overall, giving autonomy to community developers through plugins is a practical way to enhance the Appset platform and provide more value to users. + +### Non-Goals + +The concept of the plugin should not undermine the spirit of GitOps by externalizing data outside of Git. The goal is to be complementary in specific contexts. + +For example, when using one of the PullRequest generators, it's impossible to retrieve parameters related to the CI (only the commit hash is available), which limits the possibilities. By using a plugin, it's possible to retrieve the necessary parameters from a separate data source and use them to extend the functionality of the generator. This approach allows for greater flexibility and can help overcome limitations imposed by GitOps. + +Overall, the use of plugins should be considered as a way to enhance the capabilities of existing tools and processes rather than as a replacement for them. By leveraging plugins, developers can take advantage of the strengths of different tools and technologies, resulting in a more robust and flexible development process. + +## Proposal + +### Add a new `generator` plugin + +``` +apiVersion: argoproj.io/v1alpha1 +kind: ApplicationSet +metadata: + name: fb-plugin + namespace: argo-system +spec: + generators: + - plugin: + configMapRef: fb-plugin + name: feature-branch-plugin + params: + repo: "my-repo" + branch: "my-branch" + requeueAfterSeconds: 10 + template: +... +``` + +### Add a configMap to configure the plugin + +The configMap name must match the configMapRef value in the plugin configuration. The configMap must be in the namespace of argo. + +``` +apiVersion: v1 +kind: ConfigMap +metadata: + name: fb-plugin + namespace: argo-system +data: + token: $plugin.myplugin.token # Alternatively $:plugin.myplugin.token + baseUrl: http://myplugin.plugin.svc.cluster.local +``` + +- token is used a a bearer token in the RPC request. It could be a [sensitive reference](https://argo-cd.readthedocs.io/en/stable/operator-manual/user-management/#sensitive-data-and-sso-client-secrets). + +### Reconciliation logic + +Here is a diagram describing what the plugin generator should do to get the params to return: + +```mermaid +sequenceDiagram + alt generator is plugin + Generator->>K8S: Get configmap {configMapRef} + K8S-->>Generator: (url,token) + Generator->>Plugin endpoint: POST {url}/v1/generator.getParams
Authorization: Bearer {token}
Content-Type: application/json
{params} + Plugin endpoint-->>Generator: []map{string}interface{} + end +``` + + +### Use cases + +#### Use case 1: +As a user, I would like to enrich PullRequest generator params with digests of images generated by the pull request CI pipeline. + +I could define a generator matrix like + +```yaml + generators: + - matrix: + generators: + - pullRequest: + github: + owner: binboum + repo: argo-test + labels: + - preview-matrix + tokenRef: + secretName: github-secret + key: token + - plugin: + configMapRef: cm-plugin + name: plugin-matrix + params: + repo: "argo-test" + branch: "{{.branch}}" +``` + +When pullRequest returns a new PR matching my labels, the plugin will be called with the branch name and would return a set of digests like + +```json +[ + { + "digestFront": "xxxxxxxx", + "digestBack": "xxxxxxxx", + } +] +``` + +Values can then be used in the template section : + +```yaml + template: + metadata: + name: "fb-matrix-{{.branch}}" + spec: + source: + repoURL: "git@github.com:binboum/argo-test.git" + targetRevision: "HEAD" + path: charts/app-client + helm: + releaseName: feature-test-matrix-{{.branch}} + valueFiles: + - values.yaml + values: | + front: + image: registry.my/argo-test/front:{{.branch}}@{{ .digestFront }} + back: + image: registry.my/argo-test/back:{{.branch}}@{{ .digestBack }} + destination: + server: https://kubernetes.default.svc + namespace: "{{.branch}}" +``` + +### Detailed examples + +### Security Considerations + +* Plugin server only has access to the params content. When deployed outside of the applicationset controller pod, operator must ensure the communication between applicationset controller and the plugin server is properly secured (https/network policy...). A few authentication mechanism are handled to help the plugin server authenticate the request. +* For now, the response payload is considered trusted and returned params are used as-is upstream + +### Risks and Mitigations + +TBD + +### Upgrade / Downgrade Strategy + +On the evolution of the plugin, and calls : + +The RPC method is standardized with a versioning system, which allows for a version parameter to be included in the API call. This makes it possible to avoid breaking changes in case of architecture changes in the future. + +Thought that the contract interface with the plugin server is kept simple to reduce future changes and breaking changes + +## Drawbacks + +No idea + +## Alternatives + +1. A design similar to Argo Workflow executor plugin : + + ``` + generators: + - plugin: + hello: {} + ``` + + A set of ConfigMaps or a specific CRDs to express configuration of the plugin endpoint would be walk by ApplicationSet server. For each configuration, call the plugin endpoint with the content of plugin until one return a valid response. + + Reconciliation should be fast as fast as possible and trying out every endpoint to figure out which one is able to handle the plugin payload could induce a lot of delay. + + Configuration rely on implicit and weakly typed convention which make the usage of the plugin less self documented. + +2. Plugin server as defacto sidecars + + Some magic could have inject a container image for the plugin in the ApplicationSet controller in a similar way, Argo Workflow does when creating a pod to execute a job. + + Require an external controler or manual configuration. The plugin would not scale independently of the ApplicationSet controller. \ No newline at end of file diff --git a/manifests/core-install.yaml b/manifests/core-install.yaml index 6f794a470f730..1668aef487445 100644 --- a/manifests/core-install.yaml +++ b/manifests/core-install.yaml @@ -8491,125 +8491,21 @@ spec: x-kubernetes-preserve-unknown-fields: true merge: x-kubernetes-preserve-unknown-fields: true - pullRequest: + plugin: properties: - bitbucketServer: - properties: - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - project: - type: string - repo: - type: string - required: - - api - - project - - repo - type: object - filters: - items: - properties: - branchMatch: - type: string - targetBranchMatch: - type: string - type: object - type: array - gitea: - properties: - api: - type: string - insecure: - type: boolean - owner: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - api - - owner - - repo - type: object - github: + configMapRef: properties: - api: - type: string - appSecretName: - type: string - labels: - items: - type: string - type: array - owner: - type: string - repo: + name: type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object required: - - owner - - repo + - name type: object - gitlab: + input: properties: - api: - type: string - labels: - items: - type: string - type: array - project: - type: string - pullRequestState: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName + parameters: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true type: object - required: - - project type: object requeueAfterSeconds: format: int64 @@ -9095,81 +8991,17 @@ spec: - metadata - spec type: object + values: + additionalProperties: + type: string + type: object + required: + - configMapRef type: object - scmProvider: + pullRequest: properties: - awsCodeCommit: - properties: - allBranches: - type: boolean - region: - type: string - role: - type: string - tagFilters: - items: - properties: - key: - type: string - value: - type: string - required: - - key - type: object - type: array - type: object - azureDevOps: - properties: - accessTokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - allBranches: - type: boolean - api: - type: string - organization: - type: string - teamProject: - type: string - required: - - accessTokenRef - - organization - - teamProject - type: object - bitbucket: - properties: - allBranches: - type: boolean - appPasswordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - owner: - type: string - user: - type: string - required: - - appPasswordRef - - owner - - user - type: object bitbucketServer: properties: - allBranches: - type: boolean api: type: string basicAuth: @@ -9192,41 +9024,32 @@ spec: type: object project: type: string + repo: + type: string required: - api - project + - repo type: object - cloneProtocol: - type: string filters: items: properties: branchMatch: type: string - labelMatch: - type: string - pathsDoNotExist: - items: - type: string - type: array - pathsExist: - items: - type: string - type: array - repositoryMatch: + targetBranchMatch: type: string type: object type: array gitea: properties: - allBranches: - type: boolean api: type: string insecure: type: boolean owner: type: string + repo: + type: string tokenRef: properties: key: @@ -9240,16 +9063,21 @@ spec: required: - api - owner + - repo type: object github: properties: - allBranches: - type: boolean api: type: string appSecretName: type: string - organization: + labels: + items: + type: string + type: array + owner: + type: string + repo: type: string tokenRef: properties: @@ -9262,18 +9090,21 @@ spec: - secretName type: object required: - - organization + - owner + - repo type: object gitlab: properties: - allBranches: - type: boolean api: type: string - group: + labels: + items: + type: string + type: array + project: + type: string + pullRequestState: type: string - includeSubgroups: - type: boolean tokenRef: properties: key: @@ -9285,7 +9116,7 @@ spec: - secretName type: object required: - - group + - project type: object requeueAfterSeconds: format: int64 @@ -9771,368 +9602,1044 @@ spec: - metadata - spec type: object - values: - additionalProperties: - type: string - type: object type: object - selector: + scmProvider: properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - type: array - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: + awsCodeCommit: properties: - group: + allBranches: + type: boolean + region: type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: + role: type: string - managedFieldsManagers: + tagFilters: items: - type: string + properties: + key: + type: string + value: + type: string + required: + - key + type: object type: array - name: + type: object + azureDevOps: + properties: + accessTokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + allBranches: + type: boolean + api: type: string - namespace: + organization: + type: string + teamProject: type: string required: - - kind + - accessTokenRef + - organization + - teamProject type: object - type: array - info: - items: + bitbucket: properties: - name: + allBranches: + type: boolean + appPasswordRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + owner: type: string - value: + user: type: string required: - - name - - value + - appPasswordRef + - owner + - user type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: + bitbucketServer: + properties: + allBranches: + type: boolean + api: + type: string + basicAuth: + properties: + passwordRef: properties: - name: + key: type: string - path: + secretName: type: string + required: + - key + - secretName type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: + username: + type: string + required: + - passwordRef + - username + type: object + project: + type: string + required: + - api + - project + type: object + cloneProtocol: + type: string + filters: + items: + properties: + branchMatch: + type: string + labelMatch: + type: string + pathsDoNotExist: items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object + type: string type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: + pathsExist: items: type: string type: array - values: - type: string - version: + repositoryMatch: type: string type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: + type: array + gitea: + properties: + allBranches: + type: boolean + api: + type: string + insecure: + type: boolean + owner: + type: string + tokenRef: + properties: + key: type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: + secretName: type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: + required: + - key + - secretName + type: object + required: + - api + - owner + type: object + github: properties: - chart: + allBranches: + type: boolean + api: type: string - directory: + appSecretName: + type: string + organization: + type: string + tokenRef: properties: - exclude: + key: type: string - include: + secretName: type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array + required: + - key + - secretName + type: object + required: + - organization + type: object + gitlab: + properties: + allBranches: + type: boolean + api: + type: string + group: + type: string + includeSubgroups: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - group + type: object + requeueAfterSeconds: + format: int64 + type: integer + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string type: object - recurse: - type: boolean + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string type: object - helm: + spec: properties: - fileParameters: + destination: + properties: + name: + type: string + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: items: properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array name: type: string - path: + namespace: type: string + required: + - kind type: object type: array - ignoreMissingValueFiles: - type: boolean - parameters: + info: items: properties: - forceString: - type: boolean name: type: string value: type: string + required: + - name + - value type: object type: array - passCredentials: - type: boolean - releaseName: + project: type: string - skipCrds: - type: boolean - valueFiles: + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + sources: + items: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + type: array + syncPolicy: + properties: + automated: + properties: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + retry: + properties: + backoff: + properties: + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string + type: object + limit: + format: int64 + type: integer + type: object + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + values: + additionalProperties: + type: string + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + type: array + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + destination: + properties: + name: + type: string + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: + items: + properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array + name: + type: string + namespace: + type: string + required: + - kind + type: object + type: array + info: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + project: + type: string + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + sources: + items: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: items: type: string type: array @@ -10161,140 +10668,658 @@ spec: items: type: string type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - replicas: + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + type: array + syncPolicy: + properties: + automated: + properties: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + retry: + properties: + backoff: + properties: + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string + type: object + limit: + format: int64 + type: integer + type: object + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + required: + - generators + type: object + merge: + properties: + generators: + items: + properties: + clusterDecisionResource: + properties: + configMapRef: + type: string + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + name: + type: string + requeueAfterSeconds: + format: int64 + type: integer + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + destination: + properties: + name: + type: string + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: + items: + properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array + name: + type: string + namespace: + type: string + required: + - kind + type: object + type: array + info: items: properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true name: type: string + value: + type: string required: - - count - name + - value type: object type: array - version: + project: type: string - type: object - path: - type: string - plugin: - properties: - env: + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + sources: items: properties: - name: + chart: type: string - value: + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array type: object - name: + ref: type: string - string: + repoURL: + type: string + targetRevision: type: string + required: + - repoURL type: object type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - required: - - generators - type: object - merge: - properties: - generators: - items: - properties: - clusterDecisionResource: + syncPolicy: + properties: + automated: + properties: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + retry: + properties: + backoff: + properties: + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string + type: object + limit: + format: int64 + type: integer + type: object + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + values: + additionalProperties: + type: string + type: object + required: + - configMapRef + type: object + clusters: properties: - configMapRef: - type: string - labelSelector: + selector: properties: matchExpressions: items: @@ -10317,11 +11342,6 @@ spec: type: string type: object type: object - name: - type: string - requeueAfterSeconds: - format: int64 - type: integer template: properties: metadata: @@ -10807,34 +11827,38 @@ spec: additionalProperties: type: string type: object - required: - - configMapRef type: object - clusters: + git: properties: - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: + directories: + items: + properties: + exclude: + type: boolean + path: type: string - type: object - type: object + required: + - path + type: object + type: array + files: + items: + properties: + path: + type: string + required: + - path + type: object + type: array + pathParamPrefix: + type: string + repoURL: + type: string + requeueAfterSeconds: + format: int64 + type: integer + revision: + type: string template: properties: metadata: @@ -11320,37 +12344,17 @@ spec: additionalProperties: type: string type: object + required: + - repoURL + - revision type: object - git: + list: properties: - directories: - items: - properties: - exclude: - type: boolean - path: - type: string - required: - - path - type: object - type: array - files: + elements: items: - properties: - path: - type: string - required: - - path - type: object + x-kubernetes-preserve-unknown-fields: true type: array - pathParamPrefix: - type: string - repoURL: - type: string - requeueAfterSeconds: - format: int64 - type: integer - revision: + elementsYaml: type: string template: properties: @@ -11833,22 +12837,32 @@ spec: - metadata - spec type: object - values: - additionalProperties: - type: string - type: object required: - - repoURL - - revision + - elements type: object - list: + matrix: + x-kubernetes-preserve-unknown-fields: true + merge: + x-kubernetes-preserve-unknown-fields: true + plugin: properties: - elements: - items: - x-kubernetes-preserve-unknown-fields: true - type: array - elementsYaml: - type: string + configMapRef: + properties: + name: + type: string + required: + - name + type: object + input: + properties: + parameters: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + requeueAfterSeconds: + format: int64 + type: integer template: properties: metadata: @@ -12330,13 +13344,13 @@ spec: - metadata - spec type: object + values: + additionalProperties: + type: string + type: object required: - - elements + - configMapRef type: object - matrix: - x-kubernetes-preserve-unknown-fields: true - merge: - x-kubernetes-preserve-unknown-fields: true pullRequest: properties: bitbucketServer: @@ -13163,494 +14177,998 @@ spec: properties: name: type: string - namespace: + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: + items: + properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array + name: + type: string + namespace: + type: string + required: + - kind + type: object + type: array + info: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + project: + type: string + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: type: string - server: + repoURL: type: string + targetRevision: + type: string + required: + - repoURL type: object - ignoreDifferences: + sources: items: properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: + chart: type: string - managedFieldsManagers: - items: - type: string - type: array - name: + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: type: string - namespace: + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: + repoURL: type: string - value: + targetRevision: type: string required: - - name - - value + - repoURL type: object type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: + syncPolicy: properties: - chart: - type: string - directory: + automated: properties: - exclude: - type: string - include: - type: string - jsonnet: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + retry: + properties: + backoff: properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string type: object - recurse: - type: boolean + limit: + format: int64 + type: integer type: object - helm: + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + values: + additionalProperties: + type: string + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + type: array + mergeKeys: + items: + type: string + type: array + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + destination: + properties: + name: + type: string + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: + items: + properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array + name: + type: string + namespace: + type: string + required: + - kind + type: object + type: array + info: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + project: + type: string + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: + code: type: boolean - valueFiles: - items: - type: string - type: array - values: + name: type: string - version: + value: type: string + required: + - name + - value type: object - kustomize: + type: array + libs: + items: + type: string + type: array + tlas: + items: properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: + code: type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: + name: type: string - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: + value: type: string + required: + - name + - value type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string path: type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: type: string - repoURL: + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: type: string - targetRevision: + value: type: string required: - - repoURL + - name + - value type: object - sources: - items: - properties: - chart: + type: array + name: + type: string + parameters: + items: + properties: + array: + items: type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + sources: + items: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: + code: type: boolean - valueFiles: - items: - type: string - type: array - values: + name: type: string - version: + value: type: string + required: + - name + - value type: object - kustomize: + type: array + libs: + items: + type: string + type: array + tlas: + items: properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: + code: type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: + name: type: string - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: + value: type: string + required: + - name + - value type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string path: type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: type: string - repoURL: + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: type: string - targetRevision: + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: type: string required: - - repoURL + - name + - value type: object type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: type: string - type: array - type: object - required: - - destination - - project + string: + type: string + type: object + type: array type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string + - repoURL type: object - type: object - selector: - properties: - matchExpressions: - items: + type: array + syncPolicy: + properties: + automated: properties: - key: - type: string - operator: - type: string - values: - items: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: type: string - type: array - required: - - key - - operator + type: object + labels: + additionalProperties: + type: string + type: object type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - type: array - mergeKeys: - items: - type: string - type: array + retry: + properties: + backoff: + properties: + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string + type: object + limit: + format: int64 + type: integer + type: object + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + required: + - generators + - mergeKeys + type: object + plugin: + properties: + configMapRef: + properties: + name: + type: string + required: + - name + type: object + input: + properties: + parameters: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + requeueAfterSeconds: + format: int64 + type: integer template: properties: metadata: @@ -14132,9 +15650,12 @@ spec: - metadata - spec type: object + values: + additionalProperties: + type: string + type: object required: - - generators - - mergeKeys + - configMapRef type: object pullRequest: properties: diff --git a/manifests/crds/applicationset-crd.yaml b/manifests/crds/applicationset-crd.yaml index f783ad457f99a..5c88df5dcac2b 100644 --- a/manifests/crds/applicationset-crd.yaml +++ b/manifests/crds/applicationset-crd.yaml @@ -4127,125 +4127,21 @@ spec: x-kubernetes-preserve-unknown-fields: true merge: x-kubernetes-preserve-unknown-fields: true - pullRequest: + plugin: properties: - bitbucketServer: - properties: - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - project: - type: string - repo: - type: string - required: - - api - - project - - repo - type: object - filters: - items: - properties: - branchMatch: - type: string - targetBranchMatch: - type: string - type: object - type: array - gitea: - properties: - api: - type: string - insecure: - type: boolean - owner: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - api - - owner - - repo - type: object - github: + configMapRef: properties: - api: - type: string - appSecretName: - type: string - labels: - items: - type: string - type: array - owner: - type: string - repo: + name: type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object required: - - owner - - repo + - name type: object - gitlab: + input: properties: - api: - type: string - labels: - items: - type: string - type: array - project: - type: string - pullRequestState: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName + parameters: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true type: object - required: - - project type: object requeueAfterSeconds: format: int64 @@ -4731,81 +4627,17 @@ spec: - metadata - spec type: object + values: + additionalProperties: + type: string + type: object + required: + - configMapRef type: object - scmProvider: + pullRequest: properties: - awsCodeCommit: - properties: - allBranches: - type: boolean - region: - type: string - role: - type: string - tagFilters: - items: - properties: - key: - type: string - value: - type: string - required: - - key - type: object - type: array - type: object - azureDevOps: - properties: - accessTokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - allBranches: - type: boolean - api: - type: string - organization: - type: string - teamProject: - type: string - required: - - accessTokenRef - - organization - - teamProject - type: object - bitbucket: - properties: - allBranches: - type: boolean - appPasswordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - owner: - type: string - user: - type: string - required: - - appPasswordRef - - owner - - user - type: object bitbucketServer: properties: - allBranches: - type: boolean api: type: string basicAuth: @@ -4828,41 +4660,32 @@ spec: type: object project: type: string + repo: + type: string required: - api - project + - repo type: object - cloneProtocol: - type: string filters: items: properties: branchMatch: type: string - labelMatch: - type: string - pathsDoNotExist: - items: - type: string - type: array - pathsExist: - items: - type: string - type: array - repositoryMatch: + targetBranchMatch: type: string type: object type: array gitea: properties: - allBranches: - type: boolean api: type: string insecure: type: boolean owner: type: string + repo: + type: string tokenRef: properties: key: @@ -4876,16 +4699,21 @@ spec: required: - api - owner + - repo type: object github: properties: - allBranches: - type: boolean api: type: string appSecretName: type: string - organization: + labels: + items: + type: string + type: array + owner: + type: string + repo: type: string tokenRef: properties: @@ -4898,18 +4726,21 @@ spec: - secretName type: object required: - - organization + - owner + - repo type: object gitlab: properties: - allBranches: - type: boolean api: type: string - group: + labels: + items: + type: string + type: array + project: + type: string + pullRequestState: type: string - includeSubgroups: - type: boolean tokenRef: properties: key: @@ -4921,7 +4752,7 @@ spec: - secretName type: object required: - - group + - project type: object requeueAfterSeconds: format: int64 @@ -5407,369 +5238,1045 @@ spec: - metadata - spec type: object - values: - additionalProperties: - type: string - type: object type: object - selector: + scmProvider: properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - type: array - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: + awsCodeCommit: properties: - group: + allBranches: + type: boolean + region: type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: + role: type: string - managedFieldsManagers: + tagFilters: items: - type: string + properties: + key: + type: string + value: + type: string + required: + - key + type: object type: array - name: + type: object + azureDevOps: + properties: + accessTokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + allBranches: + type: boolean + api: type: string - namespace: + organization: + type: string + teamProject: type: string required: - - kind + - accessTokenRef + - organization + - teamProject type: object - type: array - info: - items: + bitbucket: properties: - name: + allBranches: + type: boolean + appPasswordRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + owner: type: string - value: + user: type: string required: - - name - - value + - appPasswordRef + - owner + - user type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: + bitbucketServer: + properties: + allBranches: + type: boolean + api: + type: string + basicAuth: + properties: + passwordRef: properties: - name: + key: type: string - path: + secretName: type: string + required: + - key + - secretName type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: + username: + type: string + required: + - passwordRef + - username + type: object + project: + type: string + required: + - api + - project + type: object + cloneProtocol: + type: string + filters: + items: + properties: + branchMatch: + type: string + labelMatch: + type: string + pathsDoNotExist: items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object + type: string type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: + pathsExist: items: type: string type: array - values: - type: string - version: + repositoryMatch: type: string type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: + type: array + gitea: + properties: + allBranches: + type: boolean + api: + type: string + insecure: + type: boolean + owner: + type: string + tokenRef: + properties: + key: type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: + secretName: type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: + required: + - key + - secretName + type: object + required: + - api + - owner + type: object + github: properties: - chart: + allBranches: + type: boolean + api: type: string - directory: + appSecretName: + type: string + organization: + type: string + tokenRef: properties: - exclude: + key: type: string - include: + secretName: type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array + required: + - key + - secretName + type: object + required: + - organization + type: object + gitlab: + properties: + allBranches: + type: boolean + api: + type: string + group: + type: string + includeSubgroups: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - group + type: object + requeueAfterSeconds: + format: int64 + type: integer + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string type: object - recurse: - type: boolean + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string type: object - helm: + spec: properties: - fileParameters: + destination: + properties: + name: + type: string + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: items: properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array name: type: string - path: + namespace: type: string + required: + - kind type: object type: array - ignoreMissingValueFiles: - type: boolean - parameters: + info: items: properties: - forceString: - type: boolean name: type: string value: type: string + required: + - name + - value type: object type: array - passCredentials: - type: boolean - releaseName: + project: type: string - skipCrds: - type: boolean - valueFiles: - items: + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + sources: + items: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + type: array + syncPolicy: + properties: + automated: + properties: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + retry: + properties: + backoff: + properties: + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string + type: object + limit: + format: int64 + type: integer + type: object + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + values: + additionalProperties: + type: string + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + type: array + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + destination: + properties: + name: + type: string + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: + items: + properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array + name: + type: string + namespace: + type: string + required: + - kind + type: object + type: array + info: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + project: + type: string + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + sources: + items: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: type: string type: array values: @@ -5797,140 +6304,658 @@ spec: items: type: string type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - replicas: + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + type: array + syncPolicy: + properties: + automated: + properties: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + retry: + properties: + backoff: + properties: + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string + type: object + limit: + format: int64 + type: integer + type: object + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + required: + - generators + type: object + merge: + properties: + generators: + items: + properties: + clusterDecisionResource: + properties: + configMapRef: + type: string + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + name: + type: string + requeueAfterSeconds: + format: int64 + type: integer + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + destination: + properties: + name: + type: string + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: + items: + properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array + name: + type: string + namespace: + type: string + required: + - kind + type: object + type: array + info: items: properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true name: type: string + value: + type: string required: - - count - name + - value type: object type: array - version: + project: type: string - type: object - path: - type: string - plugin: - properties: - env: + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + sources: items: properties: - name: + chart: type: string - value: + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array type: object - name: + ref: type: string - string: + repoURL: + type: string + targetRevision: type: string + required: + - repoURL type: object type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - required: - - generators - type: object - merge: - properties: - generators: - items: - properties: - clusterDecisionResource: + syncPolicy: + properties: + automated: + properties: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + retry: + properties: + backoff: + properties: + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string + type: object + limit: + format: int64 + type: integer + type: object + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + values: + additionalProperties: + type: string + type: object + required: + - configMapRef + type: object + clusters: properties: - configMapRef: - type: string - labelSelector: + selector: properties: matchExpressions: items: @@ -5953,11 +6978,6 @@ spec: type: string type: object type: object - name: - type: string - requeueAfterSeconds: - format: int64 - type: integer template: properties: metadata: @@ -6443,34 +7463,38 @@ spec: additionalProperties: type: string type: object - required: - - configMapRef type: object - clusters: + git: properties: - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: + directories: + items: + properties: + exclude: + type: boolean + path: type: string - type: object - type: object + required: + - path + type: object + type: array + files: + items: + properties: + path: + type: string + required: + - path + type: object + type: array + pathParamPrefix: + type: string + repoURL: + type: string + requeueAfterSeconds: + format: int64 + type: integer + revision: + type: string template: properties: metadata: @@ -6956,37 +7980,17 @@ spec: additionalProperties: type: string type: object + required: + - repoURL + - revision type: object - git: + list: properties: - directories: - items: - properties: - exclude: - type: boolean - path: - type: string - required: - - path - type: object - type: array - files: + elements: items: - properties: - path: - type: string - required: - - path - type: object + x-kubernetes-preserve-unknown-fields: true type: array - pathParamPrefix: - type: string - repoURL: - type: string - requeueAfterSeconds: - format: int64 - type: integer - revision: + elementsYaml: type: string template: properties: @@ -7469,22 +8473,32 @@ spec: - metadata - spec type: object - values: - additionalProperties: - type: string - type: object required: - - repoURL - - revision + - elements type: object - list: + matrix: + x-kubernetes-preserve-unknown-fields: true + merge: + x-kubernetes-preserve-unknown-fields: true + plugin: properties: - elements: - items: - x-kubernetes-preserve-unknown-fields: true - type: array - elementsYaml: - type: string + configMapRef: + properties: + name: + type: string + required: + - name + type: object + input: + properties: + parameters: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + requeueAfterSeconds: + format: int64 + type: integer template: properties: metadata: @@ -7966,13 +8980,13 @@ spec: - metadata - spec type: object + values: + additionalProperties: + type: string + type: object required: - - elements + - configMapRef type: object - matrix: - x-kubernetes-preserve-unknown-fields: true - merge: - x-kubernetes-preserve-unknown-fields: true pullRequest: properties: bitbucketServer: @@ -8799,494 +9813,998 @@ spec: properties: name: type: string - namespace: + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: + items: + properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array + name: + type: string + namespace: + type: string + required: + - kind + type: object + type: array + info: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + project: + type: string + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: type: string - server: + repoURL: + type: string + targetRevision: type: string + required: + - repoURL type: object - ignoreDifferences: + sources: items: properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: + chart: type: string - managedFieldsManagers: - items: - type: string - type: array - name: + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: type: string - namespace: + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: + repoURL: type: string - value: + targetRevision: type: string required: - - name - - value + - repoURL type: object type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: + syncPolicy: properties: - chart: - type: string - directory: + automated: properties: - exclude: - type: string - include: - type: string - jsonnet: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + retry: + properties: + backoff: properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string type: object - recurse: - type: boolean + limit: + format: int64 + type: integer type: object - helm: + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + values: + additionalProperties: + type: string + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + type: array + mergeKeys: + items: + type: string + type: array + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + destination: + properties: + name: + type: string + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: + items: + properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array + name: + type: string + namespace: + type: string + required: + - kind + type: object + type: array + info: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + project: + type: string + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: + code: type: boolean - valueFiles: - items: - type: string - type: array - values: + name: type: string - version: + value: type: string + required: + - name + - value type: object - kustomize: + type: array + libs: + items: + type: string + type: array + tlas: + items: properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: + code: type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: + name: type: string - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: + value: type: string + required: + - name + - value type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string path: type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: type: string - repoURL: + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: type: string - targetRevision: + value: type: string required: - - repoURL + - name + - value type: object - sources: - items: - properties: - chart: + type: array + name: + type: string + parameters: + items: + properties: + array: + items: type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + sources: + items: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: + code: type: boolean - valueFiles: - items: - type: string - type: array - values: + name: type: string - version: + value: type: string + required: + - name + - value type: object - kustomize: + type: array + libs: + items: + type: string + type: array + tlas: + items: properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: + code: type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: + name: type: string - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: + value: type: string + required: + - name + - value type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string path: type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: type: string - repoURL: + value: type: string - targetRevision: + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: type: string required: - - repoURL + - count + - name type: object type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: type: string - type: array - type: object - required: - - destination - - project + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string + - repoURL type: object - type: object - selector: - properties: - matchExpressions: - items: + type: array + syncPolicy: + properties: + automated: properties: - key: - type: string - operator: - type: string - values: - items: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: type: string - type: array - required: - - key - - operator + type: object + labels: + additionalProperties: + type: string + type: object type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - type: array - mergeKeys: - items: - type: string - type: array + retry: + properties: + backoff: + properties: + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string + type: object + limit: + format: int64 + type: integer + type: object + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + required: + - generators + - mergeKeys + type: object + plugin: + properties: + configMapRef: + properties: + name: + type: string + required: + - name + type: object + input: + properties: + parameters: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + requeueAfterSeconds: + format: int64 + type: integer template: properties: metadata: @@ -9768,9 +11286,12 @@ spec: - metadata - spec type: object + values: + additionalProperties: + type: string + type: object required: - - generators - - mergeKeys + - configMapRef type: object pullRequest: properties: diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml index d4ddf0ba213a3..80ad0036798ef 100644 --- a/manifests/ha/install.yaml +++ b/manifests/ha/install.yaml @@ -8491,125 +8491,21 @@ spec: x-kubernetes-preserve-unknown-fields: true merge: x-kubernetes-preserve-unknown-fields: true - pullRequest: + plugin: properties: - bitbucketServer: - properties: - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - project: - type: string - repo: - type: string - required: - - api - - project - - repo - type: object - filters: - items: - properties: - branchMatch: - type: string - targetBranchMatch: - type: string - type: object - type: array - gitea: - properties: - api: - type: string - insecure: - type: boolean - owner: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - api - - owner - - repo - type: object - github: + configMapRef: properties: - api: - type: string - appSecretName: - type: string - labels: - items: - type: string - type: array - owner: - type: string - repo: + name: type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object required: - - owner - - repo + - name type: object - gitlab: + input: properties: - api: - type: string - labels: - items: - type: string - type: array - project: - type: string - pullRequestState: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName + parameters: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true type: object - required: - - project type: object requeueAfterSeconds: format: int64 @@ -9095,81 +8991,17 @@ spec: - metadata - spec type: object + values: + additionalProperties: + type: string + type: object + required: + - configMapRef type: object - scmProvider: + pullRequest: properties: - awsCodeCommit: - properties: - allBranches: - type: boolean - region: - type: string - role: - type: string - tagFilters: - items: - properties: - key: - type: string - value: - type: string - required: - - key - type: object - type: array - type: object - azureDevOps: - properties: - accessTokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - allBranches: - type: boolean - api: - type: string - organization: - type: string - teamProject: - type: string - required: - - accessTokenRef - - organization - - teamProject - type: object - bitbucket: - properties: - allBranches: - type: boolean - appPasswordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - owner: - type: string - user: - type: string - required: - - appPasswordRef - - owner - - user - type: object bitbucketServer: properties: - allBranches: - type: boolean api: type: string basicAuth: @@ -9192,41 +9024,32 @@ spec: type: object project: type: string + repo: + type: string required: - api - project + - repo type: object - cloneProtocol: - type: string filters: items: properties: branchMatch: type: string - labelMatch: - type: string - pathsDoNotExist: - items: - type: string - type: array - pathsExist: - items: - type: string - type: array - repositoryMatch: + targetBranchMatch: type: string type: object type: array gitea: properties: - allBranches: - type: boolean api: type: string insecure: type: boolean owner: type: string + repo: + type: string tokenRef: properties: key: @@ -9240,16 +9063,21 @@ spec: required: - api - owner + - repo type: object github: properties: - allBranches: - type: boolean api: type: string appSecretName: type: string - organization: + labels: + items: + type: string + type: array + owner: + type: string + repo: type: string tokenRef: properties: @@ -9262,18 +9090,21 @@ spec: - secretName type: object required: - - organization + - owner + - repo type: object gitlab: properties: - allBranches: - type: boolean api: type: string - group: + labels: + items: + type: string + type: array + project: + type: string + pullRequestState: type: string - includeSubgroups: - type: boolean tokenRef: properties: key: @@ -9285,7 +9116,7 @@ spec: - secretName type: object required: - - group + - project type: object requeueAfterSeconds: format: int64 @@ -9771,368 +9602,1044 @@ spec: - metadata - spec type: object - values: - additionalProperties: - type: string - type: object type: object - selector: + scmProvider: properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - type: array - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: + awsCodeCommit: properties: - group: + allBranches: + type: boolean + region: type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: + role: type: string - managedFieldsManagers: + tagFilters: items: - type: string + properties: + key: + type: string + value: + type: string + required: + - key + type: object type: array - name: + type: object + azureDevOps: + properties: + accessTokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + allBranches: + type: boolean + api: type: string - namespace: + organization: + type: string + teamProject: type: string required: - - kind + - accessTokenRef + - organization + - teamProject type: object - type: array - info: - items: + bitbucket: properties: - name: + allBranches: + type: boolean + appPasswordRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + owner: type: string - value: + user: type: string required: - - name - - value + - appPasswordRef + - owner + - user type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: + bitbucketServer: + properties: + allBranches: + type: boolean + api: + type: string + basicAuth: + properties: + passwordRef: properties: - name: + key: type: string - path: + secretName: type: string + required: + - key + - secretName type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: + username: + type: string + required: + - passwordRef + - username + type: object + project: + type: string + required: + - api + - project + type: object + cloneProtocol: + type: string + filters: + items: + properties: + branchMatch: + type: string + labelMatch: + type: string + pathsDoNotExist: items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object + type: string type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: + pathsExist: items: type: string type: array - values: - type: string - version: + repositoryMatch: type: string type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: + type: array + gitea: + properties: + allBranches: + type: boolean + api: + type: string + insecure: + type: boolean + owner: + type: string + tokenRef: + properties: + key: type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: + secretName: type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: + required: + - key + - secretName + type: object + required: + - api + - owner + type: object + github: properties: - chart: + allBranches: + type: boolean + api: type: string - directory: + appSecretName: + type: string + organization: + type: string + tokenRef: properties: - exclude: + key: type: string - include: + secretName: type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array + required: + - key + - secretName + type: object + required: + - organization + type: object + gitlab: + properties: + allBranches: + type: boolean + api: + type: string + group: + type: string + includeSubgroups: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - group + type: object + requeueAfterSeconds: + format: int64 + type: integer + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string type: object - recurse: - type: boolean + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string type: object - helm: + spec: properties: - fileParameters: + destination: + properties: + name: + type: string + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: items: properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array name: type: string - path: + namespace: type: string + required: + - kind type: object type: array - ignoreMissingValueFiles: - type: boolean - parameters: + info: items: properties: - forceString: - type: boolean name: type: string value: type: string + required: + - name + - value type: object type: array - passCredentials: - type: boolean - releaseName: + project: type: string - skipCrds: - type: boolean - valueFiles: + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + sources: + items: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + type: array + syncPolicy: + properties: + automated: + properties: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + retry: + properties: + backoff: + properties: + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string + type: object + limit: + format: int64 + type: integer + type: object + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + values: + additionalProperties: + type: string + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + type: array + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + destination: + properties: + name: + type: string + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: + items: + properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array + name: + type: string + namespace: + type: string + required: + - kind + type: object + type: array + info: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + project: + type: string + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + sources: + items: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: items: type: string type: array @@ -10161,140 +10668,658 @@ spec: items: type: string type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - replicas: + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + type: array + syncPolicy: + properties: + automated: + properties: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + retry: + properties: + backoff: + properties: + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string + type: object + limit: + format: int64 + type: integer + type: object + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + required: + - generators + type: object + merge: + properties: + generators: + items: + properties: + clusterDecisionResource: + properties: + configMapRef: + type: string + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + name: + type: string + requeueAfterSeconds: + format: int64 + type: integer + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + destination: + properties: + name: + type: string + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: + items: + properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array + name: + type: string + namespace: + type: string + required: + - kind + type: object + type: array + info: items: properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true name: type: string + value: + type: string required: - - count - name + - value type: object type: array - version: + project: type: string - type: object - path: - type: string - plugin: - properties: - env: + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + sources: items: properties: - name: + chart: type: string - value: + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array type: object - name: + ref: type: string - string: + repoURL: + type: string + targetRevision: type: string + required: + - repoURL type: object type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - required: - - generators - type: object - merge: - properties: - generators: - items: - properties: - clusterDecisionResource: + syncPolicy: + properties: + automated: + properties: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + retry: + properties: + backoff: + properties: + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string + type: object + limit: + format: int64 + type: integer + type: object + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + values: + additionalProperties: + type: string + type: object + required: + - configMapRef + type: object + clusters: properties: - configMapRef: - type: string - labelSelector: + selector: properties: matchExpressions: items: @@ -10317,11 +11342,6 @@ spec: type: string type: object type: object - name: - type: string - requeueAfterSeconds: - format: int64 - type: integer template: properties: metadata: @@ -10807,34 +11827,38 @@ spec: additionalProperties: type: string type: object - required: - - configMapRef type: object - clusters: + git: properties: - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: + directories: + items: + properties: + exclude: + type: boolean + path: type: string - type: object - type: object + required: + - path + type: object + type: array + files: + items: + properties: + path: + type: string + required: + - path + type: object + type: array + pathParamPrefix: + type: string + repoURL: + type: string + requeueAfterSeconds: + format: int64 + type: integer + revision: + type: string template: properties: metadata: @@ -11320,37 +12344,17 @@ spec: additionalProperties: type: string type: object + required: + - repoURL + - revision type: object - git: + list: properties: - directories: - items: - properties: - exclude: - type: boolean - path: - type: string - required: - - path - type: object - type: array - files: + elements: items: - properties: - path: - type: string - required: - - path - type: object + x-kubernetes-preserve-unknown-fields: true type: array - pathParamPrefix: - type: string - repoURL: - type: string - requeueAfterSeconds: - format: int64 - type: integer - revision: + elementsYaml: type: string template: properties: @@ -11833,22 +12837,32 @@ spec: - metadata - spec type: object - values: - additionalProperties: - type: string - type: object required: - - repoURL - - revision + - elements type: object - list: + matrix: + x-kubernetes-preserve-unknown-fields: true + merge: + x-kubernetes-preserve-unknown-fields: true + plugin: properties: - elements: - items: - x-kubernetes-preserve-unknown-fields: true - type: array - elementsYaml: - type: string + configMapRef: + properties: + name: + type: string + required: + - name + type: object + input: + properties: + parameters: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + requeueAfterSeconds: + format: int64 + type: integer template: properties: metadata: @@ -12330,13 +13344,13 @@ spec: - metadata - spec type: object + values: + additionalProperties: + type: string + type: object required: - - elements + - configMapRef type: object - matrix: - x-kubernetes-preserve-unknown-fields: true - merge: - x-kubernetes-preserve-unknown-fields: true pullRequest: properties: bitbucketServer: @@ -13163,494 +14177,998 @@ spec: properties: name: type: string - namespace: + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: + items: + properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array + name: + type: string + namespace: + type: string + required: + - kind + type: object + type: array + info: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + project: + type: string + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: type: string - server: + repoURL: type: string + targetRevision: + type: string + required: + - repoURL type: object - ignoreDifferences: + sources: items: properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: + chart: type: string - managedFieldsManagers: - items: - type: string - type: array - name: + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: type: string - namespace: + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: + repoURL: type: string - value: + targetRevision: type: string required: - - name - - value + - repoURL type: object type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: + syncPolicy: properties: - chart: - type: string - directory: + automated: properties: - exclude: - type: string - include: - type: string - jsonnet: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + retry: + properties: + backoff: properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string type: object - recurse: - type: boolean + limit: + format: int64 + type: integer type: object - helm: + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + values: + additionalProperties: + type: string + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + type: array + mergeKeys: + items: + type: string + type: array + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + destination: + properties: + name: + type: string + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: + items: + properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array + name: + type: string + namespace: + type: string + required: + - kind + type: object + type: array + info: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + project: + type: string + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: + code: type: boolean - valueFiles: - items: - type: string - type: array - values: + name: type: string - version: + value: type: string + required: + - name + - value type: object - kustomize: + type: array + libs: + items: + type: string + type: array + tlas: + items: properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: + code: type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: + name: type: string - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: + value: type: string + required: + - name + - value type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string path: type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: type: string - repoURL: + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: type: string - targetRevision: + value: type: string required: - - repoURL + - name + - value type: object - sources: - items: - properties: - chart: + type: array + name: + type: string + parameters: + items: + properties: + array: + items: type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + sources: + items: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: + code: type: boolean - valueFiles: - items: - type: string - type: array - values: + name: type: string - version: + value: type: string + required: + - name + - value type: object - kustomize: + type: array + libs: + items: + type: string + type: array + tlas: + items: properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: + code: type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: + name: type: string - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: + value: type: string + required: + - name + - value type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string path: type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: type: string - repoURL: + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: type: string - targetRevision: + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: type: string required: - - repoURL + - name + - value type: object type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: type: string - type: array - type: object - required: - - destination - - project + string: + type: string + type: object + type: array type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string + - repoURL type: object - type: object - selector: - properties: - matchExpressions: - items: + type: array + syncPolicy: + properties: + automated: properties: - key: - type: string - operator: - type: string - values: - items: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: type: string - type: array - required: - - key - - operator + type: object + labels: + additionalProperties: + type: string + type: object type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - type: array - mergeKeys: - items: - type: string - type: array + retry: + properties: + backoff: + properties: + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string + type: object + limit: + format: int64 + type: integer + type: object + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + required: + - generators + - mergeKeys + type: object + plugin: + properties: + configMapRef: + properties: + name: + type: string + required: + - name + type: object + input: + properties: + parameters: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + requeueAfterSeconds: + format: int64 + type: integer template: properties: metadata: @@ -14132,9 +15650,12 @@ spec: - metadata - spec type: object + values: + additionalProperties: + type: string + type: object required: - - generators - - mergeKeys + - configMapRef type: object pullRequest: properties: diff --git a/manifests/install.yaml b/manifests/install.yaml index 6333264dac44e..f90c3b62ef916 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -8491,125 +8491,21 @@ spec: x-kubernetes-preserve-unknown-fields: true merge: x-kubernetes-preserve-unknown-fields: true - pullRequest: + plugin: properties: - bitbucketServer: - properties: - api: - type: string - basicAuth: - properties: - passwordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - username: - type: string - required: - - passwordRef - - username - type: object - project: - type: string - repo: - type: string - required: - - api - - project - - repo - type: object - filters: - items: - properties: - branchMatch: - type: string - targetBranchMatch: - type: string - type: object - type: array - gitea: - properties: - api: - type: string - insecure: - type: boolean - owner: - type: string - repo: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - api - - owner - - repo - type: object - github: + configMapRef: properties: - api: - type: string - appSecretName: - type: string - labels: - items: - type: string - type: array - owner: - type: string - repo: + name: type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object required: - - owner - - repo + - name type: object - gitlab: + input: properties: - api: - type: string - labels: - items: - type: string - type: array - project: - type: string - pullRequestState: - type: string - tokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName + parameters: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true type: object - required: - - project type: object requeueAfterSeconds: format: int64 @@ -9095,81 +8991,17 @@ spec: - metadata - spec type: object + values: + additionalProperties: + type: string + type: object + required: + - configMapRef type: object - scmProvider: + pullRequest: properties: - awsCodeCommit: - properties: - allBranches: - type: boolean - region: - type: string - role: - type: string - tagFilters: - items: - properties: - key: - type: string - value: - type: string - required: - - key - type: object - type: array - type: object - azureDevOps: - properties: - accessTokenRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - allBranches: - type: boolean - api: - type: string - organization: - type: string - teamProject: - type: string - required: - - accessTokenRef - - organization - - teamProject - type: object - bitbucket: - properties: - allBranches: - type: boolean - appPasswordRef: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - owner: - type: string - user: - type: string - required: - - appPasswordRef - - owner - - user - type: object bitbucketServer: properties: - allBranches: - type: boolean api: type: string basicAuth: @@ -9192,41 +9024,32 @@ spec: type: object project: type: string + repo: + type: string required: - api - project + - repo type: object - cloneProtocol: - type: string filters: items: properties: branchMatch: type: string - labelMatch: - type: string - pathsDoNotExist: - items: - type: string - type: array - pathsExist: - items: - type: string - type: array - repositoryMatch: + targetBranchMatch: type: string type: object type: array gitea: properties: - allBranches: - type: boolean api: type: string insecure: type: boolean owner: type: string + repo: + type: string tokenRef: properties: key: @@ -9240,16 +9063,21 @@ spec: required: - api - owner + - repo type: object github: properties: - allBranches: - type: boolean api: type: string appSecretName: type: string - organization: + labels: + items: + type: string + type: array + owner: + type: string + repo: type: string tokenRef: properties: @@ -9262,18 +9090,21 @@ spec: - secretName type: object required: - - organization + - owner + - repo type: object gitlab: properties: - allBranches: - type: boolean api: type: string - group: + labels: + items: + type: string + type: array + project: + type: string + pullRequestState: type: string - includeSubgroups: - type: boolean tokenRef: properties: key: @@ -9285,7 +9116,7 @@ spec: - secretName type: object required: - - group + - project type: object requeueAfterSeconds: format: int64 @@ -9771,368 +9602,1044 @@ spec: - metadata - spec type: object - values: - additionalProperties: - type: string - type: object type: object - selector: + scmProvider: properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - type: array - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - finalizers: - items: - type: string - type: array - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - destination: - properties: - name: - type: string - namespace: - type: string - server: - type: string - type: object - ignoreDifferences: - items: + awsCodeCommit: properties: - group: + allBranches: + type: boolean + region: type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: + role: type: string - managedFieldsManagers: + tagFilters: items: - type: string + properties: + key: + type: string + value: + type: string + required: + - key + type: object type: array - name: + type: object + azureDevOps: + properties: + accessTokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + allBranches: + type: boolean + api: type: string - namespace: + organization: + type: string + teamProject: type: string required: - - kind + - accessTokenRef + - organization + - teamProject type: object - type: array - info: - items: + bitbucket: properties: - name: + allBranches: + type: boolean + appPasswordRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + owner: type: string - value: + user: type: string required: - - name - - value + - appPasswordRef + - owner + - user type: object - type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: - properties: - chart: - type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: - properties: - fileParameters: - items: + bitbucketServer: + properties: + allBranches: + type: boolean + api: + type: string + basicAuth: + properties: + passwordRef: properties: - name: + key: type: string - path: + secretName: type: string + required: + - key + - secretName type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: + username: + type: string + required: + - passwordRef + - username + type: object + project: + type: string + required: + - api + - project + type: object + cloneProtocol: + type: string + filters: + items: + properties: + branchMatch: + type: string + labelMatch: + type: string + pathsDoNotExist: items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object + type: string type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: - type: boolean - valueFiles: + pathsExist: items: type: string type: array - values: - type: string - version: + repositoryMatch: type: string type: object - kustomize: - properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: + type: array + gitea: + properties: + allBranches: + type: boolean + api: + type: string + insecure: + type: boolean + owner: + type: string + tokenRef: + properties: + key: type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: - type: boolean - images: - items: + secretName: type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: - type: string - type: object - path: - type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - sources: - items: + required: + - key + - secretName + type: object + required: + - api + - owner + type: object + github: properties: - chart: + allBranches: + type: boolean + api: type: string - directory: + appSecretName: + type: string + organization: + type: string + tokenRef: properties: - exclude: + key: type: string - include: + secretName: type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array + required: + - key + - secretName + type: object + required: + - organization + type: object + gitlab: + properties: + allBranches: + type: boolean + api: + type: string + group: + type: string + includeSubgroups: + type: boolean + tokenRef: + properties: + key: + type: string + secretName: + type: string + required: + - key + - secretName + type: object + required: + - group + type: object + requeueAfterSeconds: + format: int64 + type: integer + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string type: object - recurse: - type: boolean + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string type: object - helm: + spec: properties: - fileParameters: + destination: + properties: + name: + type: string + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: items: properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array name: type: string - path: + namespace: type: string + required: + - kind type: object type: array - ignoreMissingValueFiles: - type: boolean - parameters: + info: items: properties: - forceString: - type: boolean name: type: string value: type: string + required: + - name + - value type: object type: array - passCredentials: - type: boolean - releaseName: + project: type: string - skipCrds: - type: boolean - valueFiles: + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + sources: + items: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + type: array + syncPolicy: + properties: + automated: + properties: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + retry: + properties: + backoff: + properties: + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string + type: object + limit: + format: int64 + type: integer + type: object + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + values: + additionalProperties: + type: string + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + type: array + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + destination: + properties: + name: + type: string + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: + items: + properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array + name: + type: string + namespace: + type: string + required: + - kind + type: object + type: array + info: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + project: + type: string + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + sources: + items: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: items: type: string type: array @@ -10161,140 +10668,658 @@ spec: items: type: string type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: - type: string - replicas: + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + type: array + syncPolicy: + properties: + automated: + properties: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + retry: + properties: + backoff: + properties: + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string + type: object + limit: + format: int64 + type: integer + type: object + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + required: + - generators + type: object + merge: + properties: + generators: + items: + properties: + clusterDecisionResource: + properties: + configMapRef: + type: string + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + name: + type: string + requeueAfterSeconds: + format: int64 + type: integer + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + destination: + properties: + name: + type: string + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: + items: + properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array + name: + type: string + namespace: + type: string + required: + - kind + type: object + type: array + info: items: properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true name: type: string + value: + type: string required: - - count - name + - value type: object type: array - version: + project: type: string - type: object - path: - type: string - plugin: - properties: - env: + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + sources: items: properties: - name: + chart: type: string - value: + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array type: object - name: + ref: type: string - string: + repoURL: + type: string + targetRevision: type: string + required: + - repoURL type: object type: array - type: object - ref: - type: string - repoURL: - type: string - targetRevision: - type: string - required: - - repoURL - type: object - type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: - type: string - type: array - type: object - required: - - destination - - project - type: object - required: - - metadata - - spec - type: object - required: - - generators - type: object - merge: - properties: - generators: - items: - properties: - clusterDecisionResource: + syncPolicy: + properties: + automated: + properties: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + retry: + properties: + backoff: + properties: + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string + type: object + limit: + format: int64 + type: integer + type: object + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + values: + additionalProperties: + type: string + type: object + required: + - configMapRef + type: object + clusters: properties: - configMapRef: - type: string - labelSelector: + selector: properties: matchExpressions: items: @@ -10317,11 +11342,6 @@ spec: type: string type: object type: object - name: - type: string - requeueAfterSeconds: - format: int64 - type: integer template: properties: metadata: @@ -10807,34 +11827,38 @@ spec: additionalProperties: type: string type: object - required: - - configMapRef type: object - clusters: + git: properties: - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: + directories: + items: + properties: + exclude: + type: boolean + path: type: string - type: object - type: object + required: + - path + type: object + type: array + files: + items: + properties: + path: + type: string + required: + - path + type: object + type: array + pathParamPrefix: + type: string + repoURL: + type: string + requeueAfterSeconds: + format: int64 + type: integer + revision: + type: string template: properties: metadata: @@ -11320,37 +12344,17 @@ spec: additionalProperties: type: string type: object + required: + - repoURL + - revision type: object - git: + list: properties: - directories: - items: - properties: - exclude: - type: boolean - path: - type: string - required: - - path - type: object - type: array - files: + elements: items: - properties: - path: - type: string - required: - - path - type: object + x-kubernetes-preserve-unknown-fields: true type: array - pathParamPrefix: - type: string - repoURL: - type: string - requeueAfterSeconds: - format: int64 - type: integer - revision: + elementsYaml: type: string template: properties: @@ -11833,22 +12837,32 @@ spec: - metadata - spec type: object - values: - additionalProperties: - type: string - type: object required: - - repoURL - - revision + - elements type: object - list: + matrix: + x-kubernetes-preserve-unknown-fields: true + merge: + x-kubernetes-preserve-unknown-fields: true + plugin: properties: - elements: - items: - x-kubernetes-preserve-unknown-fields: true - type: array - elementsYaml: - type: string + configMapRef: + properties: + name: + type: string + required: + - name + type: object + input: + properties: + parameters: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + requeueAfterSeconds: + format: int64 + type: integer template: properties: metadata: @@ -12330,13 +13344,13 @@ spec: - metadata - spec type: object + values: + additionalProperties: + type: string + type: object required: - - elements + - configMapRef type: object - matrix: - x-kubernetes-preserve-unknown-fields: true - merge: - x-kubernetes-preserve-unknown-fields: true pullRequest: properties: bitbucketServer: @@ -13163,494 +14177,998 @@ spec: properties: name: type: string - namespace: + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: + items: + properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array + name: + type: string + namespace: + type: string + required: + - kind + type: object + type: array + info: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + project: + type: string + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: type: string - server: + repoURL: type: string + targetRevision: + type: string + required: + - repoURL type: object - ignoreDifferences: + sources: items: properties: - group: - type: string - jqPathExpressions: - items: - type: string - type: array - jsonPointers: - items: - type: string - type: array - kind: + chart: type: string - managedFieldsManagers: - items: - type: string - type: array - name: + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + libs: + items: + type: string + type: array + tlas: + items: + properties: + code: + type: boolean + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string + path: + type: string + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: type: string - namespace: + plugin: + properties: + env: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: type: string - required: - - kind - type: object - type: array - info: - items: - properties: - name: + repoURL: type: string - value: + targetRevision: type: string required: - - name - - value + - repoURL type: object type: array - project: - type: string - revisionHistoryLimit: - format: int64 - type: integer - source: + syncPolicy: properties: - chart: - type: string - directory: + automated: properties: - exclude: - type: string - include: - type: string - jsonnet: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + retry: + properties: + backoff: properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string type: object - recurse: - type: boolean + limit: + format: int64 + type: integer type: object - helm: + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + values: + additionalProperties: + type: string + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + type: object + type: array + mergeKeys: + items: + type: string + type: array + template: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + destination: + properties: + name: + type: string + namespace: + type: string + server: + type: string + type: object + ignoreDifferences: + items: + properties: + group: + type: string + jqPathExpressions: + items: + type: string + type: array + jsonPointers: + items: + type: string + type: array + kind: + type: string + managedFieldsManagers: + items: + type: string + type: array + name: + type: string + namespace: + type: string + required: + - kind + type: object + type: array + info: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + project: + type: string + revisionHistoryLimit: + format: int64 + type: integer + source: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: + code: type: boolean - valueFiles: - items: - type: string - type: array - values: + name: type: string - version: + value: type: string + required: + - name + - value type: object - kustomize: + type: array + libs: + items: + type: string + type: array + tlas: + items: properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: + code: type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: + name: type: string - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: + value: type: string + required: + - name + - value type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string path: type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: type: string - repoURL: + value: + type: string + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: + type: string + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: type: string - targetRevision: + value: type: string required: - - repoURL + - name + - value type: object - sources: - items: - properties: - chart: + type: array + name: + type: string + parameters: + items: + properties: + array: + items: type: string - directory: - properties: - exclude: - type: string - include: - type: string - jsonnet: - properties: - extVars: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - libs: - items: - type: string - type: array - tlas: - items: - properties: - code: - type: boolean - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - type: object - recurse: - type: boolean - type: object - helm: + type: array + map: + additionalProperties: + type: string + type: object + name: + type: string + string: + type: string + type: object + type: array + type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string + required: + - repoURL + type: object + sources: + items: + properties: + chart: + type: string + directory: + properties: + exclude: + type: string + include: + type: string + jsonnet: + properties: + extVars: + items: properties: - fileParameters: - items: - properties: - name: - type: string - path: - type: string - type: object - type: array - ignoreMissingValueFiles: - type: boolean - parameters: - items: - properties: - forceString: - type: boolean - name: - type: string - value: - type: string - type: object - type: array - passCredentials: - type: boolean - releaseName: - type: string - skipCrds: + code: type: boolean - valueFiles: - items: - type: string - type: array - values: + name: type: string - version: + value: type: string + required: + - name + - value type: object - kustomize: + type: array + libs: + items: + type: string + type: array + tlas: + items: properties: - commonAnnotations: - additionalProperties: - type: string - type: object - commonAnnotationsEnvsubst: - type: boolean - commonLabels: - additionalProperties: - type: string - type: object - forceCommonAnnotations: - type: boolean - forceCommonLabels: + code: type: boolean - images: - items: - type: string - type: array - namePrefix: - type: string - nameSuffix: - type: string - namespace: + name: type: string - replicas: - items: - properties: - count: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - name: - type: string - required: - - count - - name - type: object - type: array - version: + value: type: string + required: + - name + - value type: object + type: array + type: object + recurse: + type: boolean + type: object + helm: + properties: + fileParameters: + items: + properties: + name: + type: string path: type: string - plugin: - properties: - env: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - name: - type: string - parameters: - items: - properties: - array: - items: - type: string - type: array - map: - additionalProperties: - type: string - type: object - name: - type: string - string: - type: string - type: object - type: array - type: object - ref: + type: object + type: array + ignoreMissingValueFiles: + type: boolean + parameters: + items: + properties: + forceString: + type: boolean + name: + type: string + value: type: string - repoURL: + type: object + type: array + passCredentials: + type: boolean + releaseName: + type: string + skipCrds: + type: boolean + valueFiles: + items: + type: string + type: array + values: + type: string + version: + type: string + type: object + kustomize: + properties: + commonAnnotations: + additionalProperties: + type: string + type: object + commonAnnotationsEnvsubst: + type: boolean + commonLabels: + additionalProperties: + type: string + type: object + forceCommonAnnotations: + type: boolean + forceCommonLabels: + type: boolean + images: + items: + type: string + type: array + namePrefix: + type: string + nameSuffix: + type: string + namespace: + type: string + replicas: + items: + properties: + count: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + name: type: string - targetRevision: + required: + - count + - name + type: object + type: array + version: + type: string + type: object + path: + type: string + plugin: + properties: + env: + items: + properties: + name: + type: string + value: type: string required: - - repoURL + - name + - value type: object type: array - syncPolicy: - properties: - automated: - properties: - allowEmpty: - type: boolean - prune: - type: boolean - selfHeal: - type: boolean - type: object - managedNamespaceMetadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - retry: - properties: - backoff: - properties: - duration: - type: string - factor: - format: int64 - type: integer - maxDuration: - type: string - type: object - limit: - format: int64 - type: integer - type: object - syncOptions: - items: + name: + type: string + parameters: + items: + properties: + array: + items: + type: string + type: array + map: + additionalProperties: + type: string + type: object + name: type: string - type: array - type: object - required: - - destination - - project + string: + type: string + type: object + type: array type: object + ref: + type: string + repoURL: + type: string + targetRevision: + type: string required: - - metadata - - spec - type: object - values: - additionalProperties: - type: string + - repoURL type: object - type: object - selector: - properties: - matchExpressions: - items: + type: array + syncPolicy: + properties: + automated: properties: - key: - type: string - operator: - type: string - values: - items: + allowEmpty: + type: boolean + prune: + type: boolean + selfHeal: + type: boolean + type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: type: string - type: array - required: - - key - - operator + type: object + labels: + additionalProperties: + type: string + type: object type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: object - type: array - mergeKeys: - items: - type: string - type: array + retry: + properties: + backoff: + properties: + duration: + type: string + factor: + format: int64 + type: integer + maxDuration: + type: string + type: object + limit: + format: int64 + type: integer + type: object + syncOptions: + items: + type: string + type: array + type: object + required: + - destination + - project + type: object + required: + - metadata + - spec + type: object + required: + - generators + - mergeKeys + type: object + plugin: + properties: + configMapRef: + properties: + name: + type: string + required: + - name + type: object + input: + properties: + parameters: + additionalProperties: + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + requeueAfterSeconds: + format: int64 + type: integer template: properties: metadata: @@ -14132,9 +15650,12 @@ spec: - metadata - spec type: object + values: + additionalProperties: + type: string + type: object required: - - generators - - mergeKeys + - configMapRef type: object pullRequest: properties: diff --git a/mkdocs.yml b/mkdocs.yml index 0fd384bc697b9..5cfb049d867b8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -101,6 +101,7 @@ nav: - operator-manual/applicationset/Generators-Cluster-Decision-Resource.md - operator-manual/applicationset/Generators-Pull-Request.md - operator-manual/applicationset/Generators-Post-Selector.md + - operator-manual/applicationset/Generators-Plugin.md - Template fields: - operator-manual/applicationset/Template.md - operator-manual/applicationset/GoTemplate.md diff --git a/pkg/apis/application/v1alpha1/applicationset_types.go b/pkg/apis/application/v1alpha1/applicationset_types.go index 37549cfa2b394..e8e64064b2a0b 100644 --- a/pkg/apis/application/v1alpha1/applicationset_types.go +++ b/pkg/apis/application/v1alpha1/applicationset_types.go @@ -124,6 +124,8 @@ type ApplicationSetGenerator struct { // Selector allows to post-filter all generator. Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,9,name=selector"` + + Plugin *PluginGenerator `json:"plugin,omitempty" protobuf:"bytes,10,name=plugin"` } // ApplicationSetNestedGenerator represents a generator nested within a combination-type generator (MatrixGenerator or @@ -144,6 +146,8 @@ type ApplicationSetNestedGenerator struct { // Selector allows to post-filter all generator. Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,9,name=selector"` + + Plugin *PluginGenerator `json:"plugin,omitempty" protobuf:"bytes,10,name=plugin"` } type ApplicationSetNestedGenerators []ApplicationSetNestedGenerator @@ -159,6 +163,7 @@ type ApplicationSetTerminalGenerator struct { SCMProvider *SCMProviderGenerator `json:"scmProvider,omitempty" protobuf:"bytes,4,name=scmProvider"` ClusterDecisionResource *DuckTypeGenerator `json:"clusterDecisionResource,omitempty" protobuf:"bytes,5,name=clusterDecisionResource"` PullRequest *PullRequestGenerator `json:"pullRequest,omitempty" protobuf:"bytes,6,name=pullRequest"` + Plugin *PluginGenerator `json:"plugin,omitempty" protobuf:"bytes,7,name=pullRequest"` } type ApplicationSetTerminalGenerators []ApplicationSetTerminalGenerator @@ -176,6 +181,7 @@ func (g ApplicationSetTerminalGenerators) toApplicationSetNestedGenerators() []A SCMProvider: terminalGenerator.SCMProvider, ClusterDecisionResource: terminalGenerator.ClusterDecisionResource, PullRequest: terminalGenerator.PullRequest, + Plugin: terminalGenerator.Plugin, } } return nestedGenerators @@ -559,6 +565,32 @@ type PullRequestGeneratorFilter struct { TargetBranchMatch *string `json:"targetBranchMatch,omitempty" protobuf:"bytes,2,opt,name=targetBranchMatch"` } +type PluginConfigMapRef struct { + // Name of the ConfigMap + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` +} + +type PluginParameters map[string]apiextensionsv1.JSON + +type PluginInput struct { + // Parameters contains the information to pass to the plugin. It is a map. The keys must be strings, and the + // values can be any type. + Parameters PluginParameters `json:"parameters,omitempty" protobuf:"bytes,1,name=parameters"` +} + +// PluginGenerator defines connection info specific to Plugin. +type PluginGenerator struct { + ConfigMapRef PluginConfigMapRef `json:"configMapRef" protobuf:"bytes,1,name=configMapRef"` + Input PluginInput `json:"input,omitempty" protobuf:"bytes,2,name=input"` + // RequeueAfterSeconds determines how long the ApplicationSet controller will wait before reconciling the ApplicationSet again. + RequeueAfterSeconds *int64 `json:"requeueAfterSeconds,omitempty" protobuf:"varint,3,opt,name=requeueAfterSeconds"` + Template ApplicationSetTemplate `json:"template,omitempty" protobuf:"bytes,4,name=template"` + + // Values contains key/value pairs which are passed directly as parameters to the template. These values will not be + // sent as parameters to the plugin. + Values map[string]string `json:"values,omitempty" protobuf:"bytes,5,name=values"` +} + // ApplicationSetStatus defines the observed state of ApplicationSet type ApplicationSetStatus struct { // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index cdbc200ee2c81..d9de0c619ec17 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -2502,10 +2502,94 @@ func (m *OverrideIgnoreDiff) XXX_DiscardUnknown() { var xxx_messageInfo_OverrideIgnoreDiff proto.InternalMessageInfo +func (m *PluginConfigMapRef) Reset() { *m = PluginConfigMapRef{} } +func (*PluginConfigMapRef) ProtoMessage() {} +func (*PluginConfigMapRef) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{88} +} +func (m *PluginConfigMapRef) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PluginConfigMapRef) 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 *PluginConfigMapRef) XXX_Merge(src proto.Message) { + xxx_messageInfo_PluginConfigMapRef.Merge(m, src) +} +func (m *PluginConfigMapRef) XXX_Size() int { + return m.Size() +} +func (m *PluginConfigMapRef) XXX_DiscardUnknown() { + xxx_messageInfo_PluginConfigMapRef.DiscardUnknown(m) +} + +var xxx_messageInfo_PluginConfigMapRef proto.InternalMessageInfo + +func (m *PluginGenerator) Reset() { *m = PluginGenerator{} } +func (*PluginGenerator) ProtoMessage() {} +func (*PluginGenerator) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{89} +} +func (m *PluginGenerator) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PluginGenerator) 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 *PluginGenerator) XXX_Merge(src proto.Message) { + xxx_messageInfo_PluginGenerator.Merge(m, src) +} +func (m *PluginGenerator) XXX_Size() int { + return m.Size() +} +func (m *PluginGenerator) XXX_DiscardUnknown() { + xxx_messageInfo_PluginGenerator.DiscardUnknown(m) +} + +var xxx_messageInfo_PluginGenerator proto.InternalMessageInfo + +func (m *PluginInput) Reset() { *m = PluginInput{} } +func (*PluginInput) ProtoMessage() {} +func (*PluginInput) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{90} +} +func (m *PluginInput) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PluginInput) 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 *PluginInput) XXX_Merge(src proto.Message) { + xxx_messageInfo_PluginInput.Merge(m, src) +} +func (m *PluginInput) XXX_Size() int { + return m.Size() +} +func (m *PluginInput) XXX_DiscardUnknown() { + xxx_messageInfo_PluginInput.DiscardUnknown(m) +} + +var xxx_messageInfo_PluginInput proto.InternalMessageInfo + func (m *ProjectRole) Reset() { *m = ProjectRole{} } func (*ProjectRole) ProtoMessage() {} func (*ProjectRole) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{88} + return fileDescriptor_030104ce3b95bcac, []int{91} } func (m *ProjectRole) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2533,7 +2617,7 @@ var xxx_messageInfo_ProjectRole proto.InternalMessageInfo func (m *PullRequestGenerator) Reset() { *m = PullRequestGenerator{} } func (*PullRequestGenerator) ProtoMessage() {} func (*PullRequestGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{89} + return fileDescriptor_030104ce3b95bcac, []int{92} } func (m *PullRequestGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2561,7 +2645,7 @@ var xxx_messageInfo_PullRequestGenerator proto.InternalMessageInfo func (m *PullRequestGeneratorBitbucketServer) Reset() { *m = PullRequestGeneratorBitbucketServer{} } func (*PullRequestGeneratorBitbucketServer) ProtoMessage() {} func (*PullRequestGeneratorBitbucketServer) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{90} + return fileDescriptor_030104ce3b95bcac, []int{93} } func (m *PullRequestGeneratorBitbucketServer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2589,7 +2673,7 @@ var xxx_messageInfo_PullRequestGeneratorBitbucketServer proto.InternalMessageInf func (m *PullRequestGeneratorFilter) Reset() { *m = PullRequestGeneratorFilter{} } func (*PullRequestGeneratorFilter) ProtoMessage() {} func (*PullRequestGeneratorFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{91} + return fileDescriptor_030104ce3b95bcac, []int{94} } func (m *PullRequestGeneratorFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2617,7 +2701,7 @@ var xxx_messageInfo_PullRequestGeneratorFilter proto.InternalMessageInfo func (m *PullRequestGeneratorGitLab) Reset() { *m = PullRequestGeneratorGitLab{} } func (*PullRequestGeneratorGitLab) ProtoMessage() {} func (*PullRequestGeneratorGitLab) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{92} + return fileDescriptor_030104ce3b95bcac, []int{95} } func (m *PullRequestGeneratorGitLab) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2645,7 +2729,7 @@ var xxx_messageInfo_PullRequestGeneratorGitLab proto.InternalMessageInfo func (m *PullRequestGeneratorGitea) Reset() { *m = PullRequestGeneratorGitea{} } func (*PullRequestGeneratorGitea) ProtoMessage() {} func (*PullRequestGeneratorGitea) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{93} + return fileDescriptor_030104ce3b95bcac, []int{96} } func (m *PullRequestGeneratorGitea) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2673,7 +2757,7 @@ var xxx_messageInfo_PullRequestGeneratorGitea proto.InternalMessageInfo func (m *PullRequestGeneratorGithub) Reset() { *m = PullRequestGeneratorGithub{} } func (*PullRequestGeneratorGithub) ProtoMessage() {} func (*PullRequestGeneratorGithub) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{94} + return fileDescriptor_030104ce3b95bcac, []int{97} } func (m *PullRequestGeneratorGithub) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2701,7 +2785,7 @@ var xxx_messageInfo_PullRequestGeneratorGithub proto.InternalMessageInfo func (m *RefTarget) Reset() { *m = RefTarget{} } func (*RefTarget) ProtoMessage() {} func (*RefTarget) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{95} + return fileDescriptor_030104ce3b95bcac, []int{98} } func (m *RefTarget) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2729,7 +2813,7 @@ var xxx_messageInfo_RefTarget proto.InternalMessageInfo func (m *RepoCreds) Reset() { *m = RepoCreds{} } func (*RepoCreds) ProtoMessage() {} func (*RepoCreds) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{96} + return fileDescriptor_030104ce3b95bcac, []int{99} } func (m *RepoCreds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2757,7 +2841,7 @@ var xxx_messageInfo_RepoCreds proto.InternalMessageInfo func (m *RepoCredsList) Reset() { *m = RepoCredsList{} } func (*RepoCredsList) ProtoMessage() {} func (*RepoCredsList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{97} + return fileDescriptor_030104ce3b95bcac, []int{100} } func (m *RepoCredsList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2785,7 +2869,7 @@ var xxx_messageInfo_RepoCredsList proto.InternalMessageInfo func (m *Repository) Reset() { *m = Repository{} } func (*Repository) ProtoMessage() {} func (*Repository) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{98} + return fileDescriptor_030104ce3b95bcac, []int{101} } func (m *Repository) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2813,7 +2897,7 @@ var xxx_messageInfo_Repository proto.InternalMessageInfo func (m *RepositoryCertificate) Reset() { *m = RepositoryCertificate{} } func (*RepositoryCertificate) ProtoMessage() {} func (*RepositoryCertificate) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{99} + return fileDescriptor_030104ce3b95bcac, []int{102} } func (m *RepositoryCertificate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2841,7 +2925,7 @@ var xxx_messageInfo_RepositoryCertificate proto.InternalMessageInfo func (m *RepositoryCertificateList) Reset() { *m = RepositoryCertificateList{} } func (*RepositoryCertificateList) ProtoMessage() {} func (*RepositoryCertificateList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{100} + return fileDescriptor_030104ce3b95bcac, []int{103} } func (m *RepositoryCertificateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2869,7 +2953,7 @@ var xxx_messageInfo_RepositoryCertificateList proto.InternalMessageInfo func (m *RepositoryList) Reset() { *m = RepositoryList{} } func (*RepositoryList) ProtoMessage() {} func (*RepositoryList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{101} + return fileDescriptor_030104ce3b95bcac, []int{104} } func (m *RepositoryList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2897,7 +2981,7 @@ var xxx_messageInfo_RepositoryList proto.InternalMessageInfo func (m *ResourceAction) Reset() { *m = ResourceAction{} } func (*ResourceAction) ProtoMessage() {} func (*ResourceAction) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{102} + return fileDescriptor_030104ce3b95bcac, []int{105} } func (m *ResourceAction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2925,7 +3009,7 @@ var xxx_messageInfo_ResourceAction proto.InternalMessageInfo func (m *ResourceActionDefinition) Reset() { *m = ResourceActionDefinition{} } func (*ResourceActionDefinition) ProtoMessage() {} func (*ResourceActionDefinition) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{103} + return fileDescriptor_030104ce3b95bcac, []int{106} } func (m *ResourceActionDefinition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2953,7 +3037,7 @@ var xxx_messageInfo_ResourceActionDefinition proto.InternalMessageInfo func (m *ResourceActionParam) Reset() { *m = ResourceActionParam{} } func (*ResourceActionParam) ProtoMessage() {} func (*ResourceActionParam) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{104} + return fileDescriptor_030104ce3b95bcac, []int{107} } func (m *ResourceActionParam) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2981,7 +3065,7 @@ var xxx_messageInfo_ResourceActionParam proto.InternalMessageInfo func (m *ResourceActions) Reset() { *m = ResourceActions{} } func (*ResourceActions) ProtoMessage() {} func (*ResourceActions) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{105} + return fileDescriptor_030104ce3b95bcac, []int{108} } func (m *ResourceActions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3009,7 +3093,7 @@ var xxx_messageInfo_ResourceActions proto.InternalMessageInfo func (m *ResourceDiff) Reset() { *m = ResourceDiff{} } func (*ResourceDiff) ProtoMessage() {} func (*ResourceDiff) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{106} + return fileDescriptor_030104ce3b95bcac, []int{109} } func (m *ResourceDiff) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3037,7 +3121,7 @@ var xxx_messageInfo_ResourceDiff proto.InternalMessageInfo func (m *ResourceIgnoreDifferences) Reset() { *m = ResourceIgnoreDifferences{} } func (*ResourceIgnoreDifferences) ProtoMessage() {} func (*ResourceIgnoreDifferences) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{107} + return fileDescriptor_030104ce3b95bcac, []int{110} } func (m *ResourceIgnoreDifferences) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3065,7 +3149,7 @@ var xxx_messageInfo_ResourceIgnoreDifferences proto.InternalMessageInfo func (m *ResourceNetworkingInfo) Reset() { *m = ResourceNetworkingInfo{} } func (*ResourceNetworkingInfo) ProtoMessage() {} func (*ResourceNetworkingInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{108} + return fileDescriptor_030104ce3b95bcac, []int{111} } func (m *ResourceNetworkingInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3093,7 +3177,7 @@ var xxx_messageInfo_ResourceNetworkingInfo proto.InternalMessageInfo func (m *ResourceNode) Reset() { *m = ResourceNode{} } func (*ResourceNode) ProtoMessage() {} func (*ResourceNode) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{109} + return fileDescriptor_030104ce3b95bcac, []int{112} } func (m *ResourceNode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3121,7 +3205,7 @@ var xxx_messageInfo_ResourceNode proto.InternalMessageInfo func (m *ResourceOverride) Reset() { *m = ResourceOverride{} } func (*ResourceOverride) ProtoMessage() {} func (*ResourceOverride) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{110} + return fileDescriptor_030104ce3b95bcac, []int{113} } func (m *ResourceOverride) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3149,7 +3233,7 @@ var xxx_messageInfo_ResourceOverride proto.InternalMessageInfo func (m *ResourceRef) Reset() { *m = ResourceRef{} } func (*ResourceRef) ProtoMessage() {} func (*ResourceRef) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{111} + return fileDescriptor_030104ce3b95bcac, []int{114} } func (m *ResourceRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3177,7 +3261,7 @@ var xxx_messageInfo_ResourceRef proto.InternalMessageInfo func (m *ResourceResult) Reset() { *m = ResourceResult{} } func (*ResourceResult) ProtoMessage() {} func (*ResourceResult) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{112} + return fileDescriptor_030104ce3b95bcac, []int{115} } func (m *ResourceResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3205,7 +3289,7 @@ var xxx_messageInfo_ResourceResult proto.InternalMessageInfo func (m *ResourceStatus) Reset() { *m = ResourceStatus{} } func (*ResourceStatus) ProtoMessage() {} func (*ResourceStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{113} + return fileDescriptor_030104ce3b95bcac, []int{116} } func (m *ResourceStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3233,7 +3317,7 @@ var xxx_messageInfo_ResourceStatus proto.InternalMessageInfo func (m *RetryStrategy) Reset() { *m = RetryStrategy{} } func (*RetryStrategy) ProtoMessage() {} func (*RetryStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{114} + return fileDescriptor_030104ce3b95bcac, []int{117} } func (m *RetryStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3261,7 +3345,7 @@ var xxx_messageInfo_RetryStrategy proto.InternalMessageInfo func (m *RevisionHistory) Reset() { *m = RevisionHistory{} } func (*RevisionHistory) ProtoMessage() {} func (*RevisionHistory) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{115} + return fileDescriptor_030104ce3b95bcac, []int{118} } func (m *RevisionHistory) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3289,7 +3373,7 @@ var xxx_messageInfo_RevisionHistory proto.InternalMessageInfo func (m *RevisionMetadata) Reset() { *m = RevisionMetadata{} } func (*RevisionMetadata) ProtoMessage() {} func (*RevisionMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{116} + return fileDescriptor_030104ce3b95bcac, []int{119} } func (m *RevisionMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3317,7 +3401,7 @@ var xxx_messageInfo_RevisionMetadata proto.InternalMessageInfo func (m *SCMProviderGenerator) Reset() { *m = SCMProviderGenerator{} } func (*SCMProviderGenerator) ProtoMessage() {} func (*SCMProviderGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{117} + return fileDescriptor_030104ce3b95bcac, []int{120} } func (m *SCMProviderGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3345,7 +3429,7 @@ var xxx_messageInfo_SCMProviderGenerator proto.InternalMessageInfo func (m *SCMProviderGeneratorAWSCodeCommit) Reset() { *m = SCMProviderGeneratorAWSCodeCommit{} } func (*SCMProviderGeneratorAWSCodeCommit) ProtoMessage() {} func (*SCMProviderGeneratorAWSCodeCommit) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{118} + return fileDescriptor_030104ce3b95bcac, []int{121} } func (m *SCMProviderGeneratorAWSCodeCommit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3373,7 +3457,7 @@ var xxx_messageInfo_SCMProviderGeneratorAWSCodeCommit proto.InternalMessageInfo func (m *SCMProviderGeneratorAzureDevOps) Reset() { *m = SCMProviderGeneratorAzureDevOps{} } func (*SCMProviderGeneratorAzureDevOps) ProtoMessage() {} func (*SCMProviderGeneratorAzureDevOps) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{119} + return fileDescriptor_030104ce3b95bcac, []int{122} } func (m *SCMProviderGeneratorAzureDevOps) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3401,7 +3485,7 @@ var xxx_messageInfo_SCMProviderGeneratorAzureDevOps proto.InternalMessageInfo func (m *SCMProviderGeneratorBitbucket) Reset() { *m = SCMProviderGeneratorBitbucket{} } func (*SCMProviderGeneratorBitbucket) ProtoMessage() {} func (*SCMProviderGeneratorBitbucket) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{120} + return fileDescriptor_030104ce3b95bcac, []int{123} } func (m *SCMProviderGeneratorBitbucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3429,7 +3513,7 @@ var xxx_messageInfo_SCMProviderGeneratorBitbucket proto.InternalMessageInfo func (m *SCMProviderGeneratorBitbucketServer) Reset() { *m = SCMProviderGeneratorBitbucketServer{} } func (*SCMProviderGeneratorBitbucketServer) ProtoMessage() {} func (*SCMProviderGeneratorBitbucketServer) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{121} + return fileDescriptor_030104ce3b95bcac, []int{124} } func (m *SCMProviderGeneratorBitbucketServer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3457,7 +3541,7 @@ var xxx_messageInfo_SCMProviderGeneratorBitbucketServer proto.InternalMessageInf func (m *SCMProviderGeneratorFilter) Reset() { *m = SCMProviderGeneratorFilter{} } func (*SCMProviderGeneratorFilter) ProtoMessage() {} func (*SCMProviderGeneratorFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{122} + return fileDescriptor_030104ce3b95bcac, []int{125} } func (m *SCMProviderGeneratorFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3485,7 +3569,7 @@ var xxx_messageInfo_SCMProviderGeneratorFilter proto.InternalMessageInfo func (m *SCMProviderGeneratorGitea) Reset() { *m = SCMProviderGeneratorGitea{} } func (*SCMProviderGeneratorGitea) ProtoMessage() {} func (*SCMProviderGeneratorGitea) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{123} + return fileDescriptor_030104ce3b95bcac, []int{126} } func (m *SCMProviderGeneratorGitea) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3513,7 +3597,7 @@ var xxx_messageInfo_SCMProviderGeneratorGitea proto.InternalMessageInfo func (m *SCMProviderGeneratorGithub) Reset() { *m = SCMProviderGeneratorGithub{} } func (*SCMProviderGeneratorGithub) ProtoMessage() {} func (*SCMProviderGeneratorGithub) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{124} + return fileDescriptor_030104ce3b95bcac, []int{127} } func (m *SCMProviderGeneratorGithub) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3541,7 +3625,7 @@ var xxx_messageInfo_SCMProviderGeneratorGithub proto.InternalMessageInfo func (m *SCMProviderGeneratorGitlab) Reset() { *m = SCMProviderGeneratorGitlab{} } func (*SCMProviderGeneratorGitlab) ProtoMessage() {} func (*SCMProviderGeneratorGitlab) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{125} + return fileDescriptor_030104ce3b95bcac, []int{128} } func (m *SCMProviderGeneratorGitlab) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3569,7 +3653,7 @@ var xxx_messageInfo_SCMProviderGeneratorGitlab proto.InternalMessageInfo func (m *SecretRef) Reset() { *m = SecretRef{} } func (*SecretRef) ProtoMessage() {} func (*SecretRef) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{126} + return fileDescriptor_030104ce3b95bcac, []int{129} } func (m *SecretRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3597,7 +3681,7 @@ var xxx_messageInfo_SecretRef proto.InternalMessageInfo func (m *SignatureKey) Reset() { *m = SignatureKey{} } func (*SignatureKey) ProtoMessage() {} func (*SignatureKey) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{127} + return fileDescriptor_030104ce3b95bcac, []int{130} } func (m *SignatureKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3625,7 +3709,7 @@ var xxx_messageInfo_SignatureKey proto.InternalMessageInfo func (m *SyncOperation) Reset() { *m = SyncOperation{} } func (*SyncOperation) ProtoMessage() {} func (*SyncOperation) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{128} + return fileDescriptor_030104ce3b95bcac, []int{131} } func (m *SyncOperation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3653,7 +3737,7 @@ var xxx_messageInfo_SyncOperation proto.InternalMessageInfo func (m *SyncOperationResource) Reset() { *m = SyncOperationResource{} } func (*SyncOperationResource) ProtoMessage() {} func (*SyncOperationResource) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{129} + return fileDescriptor_030104ce3b95bcac, []int{132} } func (m *SyncOperationResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3681,7 +3765,7 @@ var xxx_messageInfo_SyncOperationResource proto.InternalMessageInfo func (m *SyncOperationResult) Reset() { *m = SyncOperationResult{} } func (*SyncOperationResult) ProtoMessage() {} func (*SyncOperationResult) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{130} + return fileDescriptor_030104ce3b95bcac, []int{133} } func (m *SyncOperationResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3709,7 +3793,7 @@ var xxx_messageInfo_SyncOperationResult proto.InternalMessageInfo func (m *SyncPolicy) Reset() { *m = SyncPolicy{} } func (*SyncPolicy) ProtoMessage() {} func (*SyncPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{131} + return fileDescriptor_030104ce3b95bcac, []int{134} } func (m *SyncPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3737,7 +3821,7 @@ var xxx_messageInfo_SyncPolicy proto.InternalMessageInfo func (m *SyncPolicyAutomated) Reset() { *m = SyncPolicyAutomated{} } func (*SyncPolicyAutomated) ProtoMessage() {} func (*SyncPolicyAutomated) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{132} + return fileDescriptor_030104ce3b95bcac, []int{135} } func (m *SyncPolicyAutomated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3765,7 +3849,7 @@ var xxx_messageInfo_SyncPolicyAutomated proto.InternalMessageInfo func (m *SyncStatus) Reset() { *m = SyncStatus{} } func (*SyncStatus) ProtoMessage() {} func (*SyncStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{133} + return fileDescriptor_030104ce3b95bcac, []int{136} } func (m *SyncStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3793,7 +3877,7 @@ var xxx_messageInfo_SyncStatus proto.InternalMessageInfo func (m *SyncStrategy) Reset() { *m = SyncStrategy{} } func (*SyncStrategy) ProtoMessage() {} func (*SyncStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{134} + return fileDescriptor_030104ce3b95bcac, []int{137} } func (m *SyncStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3821,7 +3905,7 @@ var xxx_messageInfo_SyncStrategy proto.InternalMessageInfo func (m *SyncStrategyApply) Reset() { *m = SyncStrategyApply{} } func (*SyncStrategyApply) ProtoMessage() {} func (*SyncStrategyApply) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{135} + return fileDescriptor_030104ce3b95bcac, []int{138} } func (m *SyncStrategyApply) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3849,7 +3933,7 @@ var xxx_messageInfo_SyncStrategyApply proto.InternalMessageInfo func (m *SyncStrategyHook) Reset() { *m = SyncStrategyHook{} } func (*SyncStrategyHook) ProtoMessage() {} func (*SyncStrategyHook) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{136} + return fileDescriptor_030104ce3b95bcac, []int{139} } func (m *SyncStrategyHook) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3877,7 +3961,7 @@ var xxx_messageInfo_SyncStrategyHook proto.InternalMessageInfo func (m *SyncWindow) Reset() { *m = SyncWindow{} } func (*SyncWindow) ProtoMessage() {} func (*SyncWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{137} + return fileDescriptor_030104ce3b95bcac, []int{140} } func (m *SyncWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3905,7 +3989,7 @@ var xxx_messageInfo_SyncWindow proto.InternalMessageInfo func (m *TLSClientConfig) Reset() { *m = TLSClientConfig{} } func (*TLSClientConfig) ProtoMessage() {} func (*TLSClientConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{138} + return fileDescriptor_030104ce3b95bcac, []int{141} } func (m *TLSClientConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3933,7 +4017,7 @@ var xxx_messageInfo_TLSClientConfig proto.InternalMessageInfo func (m *TagFilter) Reset() { *m = TagFilter{} } func (*TagFilter) ProtoMessage() {} func (*TagFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{139} + return fileDescriptor_030104ce3b95bcac, []int{142} } func (m *TagFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4061,6 +4145,11 @@ func init() { proto.RegisterType((*OrphanedResourceKey)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.OrphanedResourceKey") proto.RegisterType((*OrphanedResourcesMonitorSettings)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.OrphanedResourcesMonitorSettings") proto.RegisterType((*OverrideIgnoreDiff)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.OverrideIgnoreDiff") + proto.RegisterType((*PluginConfigMapRef)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.PluginConfigMapRef") + proto.RegisterType((*PluginGenerator)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.PluginGenerator") + proto.RegisterMapType((map[string]string)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.PluginGenerator.ValuesEntry") + proto.RegisterType((*PluginInput)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.PluginInput") + proto.RegisterMapType((PluginParameters)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.PluginInput.ParametersEntry") proto.RegisterType((*ProjectRole)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ProjectRole") proto.RegisterType((*PullRequestGenerator)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.PullRequestGenerator") proto.RegisterType((*PullRequestGeneratorBitbucketServer)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.PullRequestGeneratorBitbucketServer") @@ -4123,641 +4212,652 @@ func init() { } var fileDescriptor_030104ce3b95bcac = []byte{ - // 10141 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x70, 0x1c, 0xc9, - 0x75, 0x18, 0xae, 0xd9, 0xc5, 0x02, 0xbb, 0x0f, 0x1f, 0x24, 0x9a, 0xe4, 0x1d, 0x8e, 0xba, 0x23, - 0xe8, 0xb9, 0xf2, 0xe9, 0xf4, 0xd3, 0x1d, 0xe0, 0xa3, 0xee, 0xf4, 0x63, 0x7c, 0xf6, 0xc9, 0x58, - 0x80, 0x04, 0x41, 0x02, 0x04, 0xae, 0x01, 0x92, 0xd2, 0x9d, 0x4f, 0xa7, 0xc1, 0x6c, 0xef, 0x62, - 0x88, 0xd9, 0x99, 0xe5, 0xcc, 0x2c, 0x08, 0x9c, 0x65, 0x59, 0xb2, 0x2d, 0x5b, 0x89, 0x3e, 0x4e, - 0x39, 0xa5, 0xca, 0x72, 0x12, 0x3b, 0x8a, 0xed, 0x72, 0xc5, 0x95, 0x5c, 0xc5, 0xa9, 0xfc, 0x11, - 0xe7, 0xab, 0x5c, 0xb2, 0xf3, 0xc7, 0xa5, 0x94, 0x54, 0x54, 0x15, 0x97, 0xe5, 0xc4, 0x0e, 0x2c, - 0x21, 0x95, 0x4a, 0x2a, 0x55, 0x71, 0x55, 0x3e, 0xfe, 0x09, 0x2b, 0x55, 0x49, 0xf5, 0x77, 0xcf, - 0xec, 0x2e, 0xb1, 0x00, 0x06, 0x24, 0xa5, 0xba, 0xff, 0x76, 0xfb, 0xbd, 0x79, 0xaf, 0xa7, 0xa7, - 0xfb, 0xf5, 0x7b, 0xfd, 0x3e, 0x1a, 0x16, 0x1b, 0x5e, 0xb2, 0xd1, 0x5e, 0x9f, 0x72, 0xc3, 0xe6, - 0xb4, 0x13, 0x35, 0xc2, 0x56, 0x14, 0xde, 0x66, 0x3f, 0x9e, 0x77, 0x6b, 0xd3, 0x5b, 0x17, 0xa6, - 0x5b, 0x9b, 0x8d, 0x69, 0xa7, 0xe5, 0xc5, 0xd3, 0x4e, 0xab, 0xe5, 0x7b, 0xae, 0x93, 0x78, 0x61, - 0x30, 0xbd, 0xf5, 0x82, 0xe3, 0xb7, 0x36, 0x9c, 0x17, 0xa6, 0x1b, 0x24, 0x20, 0x91, 0x93, 0x90, - 0xda, 0x54, 0x2b, 0x0a, 0x93, 0x10, 0xfd, 0x84, 0xa6, 0x36, 0x25, 0xa9, 0xb1, 0x1f, 0x6f, 0xba, - 0xb5, 0xa9, 0xad, 0x0b, 0x53, 0xad, 0xcd, 0xc6, 0x14, 0xa5, 0x36, 0x65, 0x50, 0x9b, 0x92, 0xd4, - 0xce, 0x3e, 0x6f, 0xf4, 0xa5, 0x11, 0x36, 0xc2, 0x69, 0x46, 0x74, 0xbd, 0x5d, 0x67, 0xff, 0xd8, - 0x1f, 0xf6, 0x8b, 0x33, 0x3b, 0x6b, 0x6f, 0x5e, 0x8c, 0xa7, 0xbc, 0x90, 0x76, 0x6f, 0xda, 0x0d, - 0x23, 0x32, 0xbd, 0xd5, 0xd1, 0xa1, 0xb3, 0x57, 0x34, 0x0e, 0xd9, 0x4e, 0x48, 0x10, 0x7b, 0x61, - 0x10, 0x3f, 0x4f, 0xbb, 0x40, 0xa2, 0x2d, 0x12, 0x99, 0xaf, 0x67, 0x20, 0x74, 0xa3, 0xf4, 0xa2, - 0xa6, 0xd4, 0x74, 0xdc, 0x0d, 0x2f, 0x20, 0xd1, 0x8e, 0x7e, 0xbc, 0x49, 0x12, 0xa7, 0xdb, 0x53, - 0xd3, 0xbd, 0x9e, 0x8a, 0xda, 0x41, 0xe2, 0x35, 0x49, 0xc7, 0x03, 0x1f, 0xdb, 0xef, 0x81, 0xd8, - 0xdd, 0x20, 0x4d, 0xa7, 0xe3, 0xb9, 0x8f, 0xf6, 0x7a, 0xae, 0x9d, 0x78, 0xfe, 0xb4, 0x17, 0x24, - 0x71, 0x12, 0x65, 0x1f, 0xb2, 0xef, 0xc0, 0xe8, 0xcc, 0xad, 0xd5, 0x99, 0x76, 0xb2, 0x31, 0x1b, - 0x06, 0x75, 0xaf, 0x81, 0x5e, 0x82, 0x61, 0xd7, 0x6f, 0xc7, 0x09, 0x89, 0xae, 0x3b, 0x4d, 0x32, - 0x61, 0x9d, 0xb7, 0x9e, 0xad, 0x54, 0x4f, 0xbd, 0xb7, 0x3b, 0xf9, 0x81, 0xbd, 0xdd, 0xc9, 0xe1, - 0x59, 0x0d, 0xc2, 0x26, 0x1e, 0xfa, 0x30, 0x0c, 0x45, 0xa1, 0x4f, 0x66, 0xf0, 0xf5, 0x89, 0x02, - 0x7b, 0xe4, 0x84, 0x78, 0x64, 0x08, 0xf3, 0x66, 0x2c, 0xe1, 0xf6, 0x1f, 0x17, 0x00, 0x66, 0x5a, - 0xad, 0x95, 0x28, 0xbc, 0x4d, 0xdc, 0x04, 0x7d, 0x1a, 0xca, 0x74, 0xe8, 0x6a, 0x4e, 0xe2, 0x30, - 0x6e, 0xc3, 0x17, 0x7e, 0x6c, 0x8a, 0xbf, 0xc9, 0x94, 0xf9, 0x26, 0x7a, 0xe2, 0x50, 0xec, 0xa9, - 0xad, 0x17, 0xa6, 0x96, 0xd7, 0xe9, 0xf3, 0x4b, 0x24, 0x71, 0xaa, 0x48, 0x30, 0x03, 0xdd, 0x86, - 0x15, 0x55, 0x14, 0xc0, 0x40, 0xdc, 0x22, 0x2e, 0xeb, 0xd8, 0xf0, 0x85, 0xc5, 0xa9, 0xa3, 0xcc, - 0xd0, 0x29, 0xdd, 0xf3, 0xd5, 0x16, 0x71, 0xab, 0x23, 0x82, 0xf3, 0x00, 0xfd, 0x87, 0x19, 0x1f, - 0xb4, 0x05, 0x83, 0x71, 0xe2, 0x24, 0xed, 0x78, 0xa2, 0xc8, 0x38, 0x5e, 0xcf, 0x8d, 0x23, 0xa3, - 0x5a, 0x1d, 0x13, 0x3c, 0x07, 0xf9, 0x7f, 0x2c, 0xb8, 0xd9, 0xff, 0xc1, 0x82, 0x31, 0x8d, 0xbc, - 0xe8, 0xc5, 0x09, 0xfa, 0xe9, 0x8e, 0xc1, 0x9d, 0xea, 0x6f, 0x70, 0xe9, 0xd3, 0x6c, 0x68, 0x4f, - 0x0a, 0x66, 0x65, 0xd9, 0x62, 0x0c, 0x6c, 0x13, 0x4a, 0x5e, 0x42, 0x9a, 0xf1, 0x44, 0xe1, 0x7c, - 0xf1, 0xd9, 0xe1, 0x0b, 0x57, 0xf2, 0x7a, 0xcf, 0xea, 0xa8, 0x60, 0x5a, 0x5a, 0xa0, 0xe4, 0x31, - 0xe7, 0x62, 0xff, 0xce, 0x88, 0xf9, 0x7e, 0x74, 0xc0, 0xd1, 0x0b, 0x30, 0x1c, 0x87, 0xed, 0xc8, - 0x25, 0x98, 0xb4, 0xc2, 0x78, 0xc2, 0x3a, 0x5f, 0xa4, 0x53, 0x8f, 0xce, 0xd4, 0x55, 0xdd, 0x8c, - 0x4d, 0x1c, 0xf4, 0x55, 0x0b, 0x46, 0x6a, 0x24, 0x4e, 0xbc, 0x80, 0xf1, 0x97, 0x9d, 0x5f, 0x3b, - 0x72, 0xe7, 0x65, 0xe3, 0x9c, 0x26, 0x5e, 0x3d, 0x2d, 0x5e, 0x64, 0xc4, 0x68, 0x8c, 0x71, 0x8a, - 0x3f, 0x5d, 0x71, 0x35, 0x12, 0xbb, 0x91, 0xd7, 0xa2, 0xff, 0xd9, 0x9c, 0x31, 0x56, 0xdc, 0x9c, - 0x06, 0x61, 0x13, 0x0f, 0x05, 0x50, 0xa2, 0x2b, 0x2a, 0x9e, 0x18, 0x60, 0xfd, 0x5f, 0x38, 0x5a, - 0xff, 0xc5, 0xa0, 0xd2, 0xc5, 0xaa, 0x47, 0x9f, 0xfe, 0x8b, 0x31, 0x67, 0x83, 0xbe, 0x62, 0xc1, - 0x84, 0x58, 0xf1, 0x98, 0xf0, 0x01, 0xbd, 0xb5, 0xe1, 0x25, 0xc4, 0xf7, 0xe2, 0x64, 0xa2, 0xc4, - 0xfa, 0x30, 0xdd, 0xdf, 0xdc, 0x9a, 0x8f, 0xc2, 0x76, 0xeb, 0x9a, 0x17, 0xd4, 0xaa, 0xe7, 0x05, - 0xa7, 0x89, 0xd9, 0x1e, 0x84, 0x71, 0x4f, 0x96, 0xe8, 0xeb, 0x16, 0x9c, 0x0d, 0x9c, 0x26, 0x89, - 0x5b, 0x0e, 0xfd, 0xb4, 0x1c, 0x5c, 0xf5, 0x1d, 0x77, 0x93, 0xf5, 0x68, 0xf0, 0x70, 0x3d, 0xb2, - 0x45, 0x8f, 0xce, 0x5e, 0xef, 0x49, 0x1a, 0xdf, 0x87, 0x2d, 0xfa, 0x4d, 0x0b, 0xc6, 0xc3, 0xa8, - 0xb5, 0xe1, 0x04, 0xa4, 0x26, 0xa1, 0xf1, 0xc4, 0x10, 0x5b, 0x7a, 0x9f, 0x3a, 0xda, 0x27, 0x5a, - 0xce, 0x92, 0x5d, 0x0a, 0x03, 0x2f, 0x09, 0xa3, 0x55, 0x92, 0x24, 0x5e, 0xd0, 0x88, 0xab, 0x67, - 0xf6, 0x76, 0x27, 0xc7, 0x3b, 0xb0, 0x70, 0x67, 0x7f, 0xd0, 0xcf, 0xc0, 0x70, 0xbc, 0x13, 0xb8, - 0xb7, 0xbc, 0xa0, 0x16, 0xde, 0x8d, 0x27, 0xca, 0x79, 0x2c, 0xdf, 0x55, 0x45, 0x50, 0x2c, 0x40, - 0xcd, 0x00, 0x9b, 0xdc, 0xba, 0x7f, 0x38, 0x3d, 0x95, 0x2a, 0x79, 0x7f, 0x38, 0x3d, 0x99, 0xee, - 0xc3, 0x16, 0xfd, 0xb2, 0x05, 0xa3, 0xb1, 0xd7, 0x08, 0x9c, 0xa4, 0x1d, 0x91, 0x6b, 0x64, 0x27, - 0x9e, 0x00, 0xd6, 0x91, 0xab, 0x47, 0x1c, 0x15, 0x83, 0x64, 0xf5, 0x8c, 0xe8, 0xe3, 0xa8, 0xd9, - 0x1a, 0xe3, 0x34, 0xdf, 0x6e, 0x0b, 0x4d, 0x4f, 0xeb, 0xe1, 0x7c, 0x17, 0x9a, 0x9e, 0xd4, 0x3d, - 0x59, 0xa2, 0x9f, 0x82, 0x93, 0xbc, 0x49, 0x8d, 0x6c, 0x3c, 0x31, 0xc2, 0x04, 0xed, 0xe9, 0xbd, - 0xdd, 0xc9, 0x93, 0xab, 0x19, 0x18, 0xee, 0xc0, 0x46, 0x77, 0x60, 0xb2, 0x45, 0xa2, 0xa6, 0x97, - 0x2c, 0x07, 0xfe, 0x8e, 0x14, 0xdf, 0x6e, 0xd8, 0x22, 0x35, 0xd1, 0x9d, 0x78, 0x62, 0xf4, 0xbc, - 0xf5, 0x6c, 0xb9, 0xfa, 0x21, 0xd1, 0xcd, 0xc9, 0x95, 0xfb, 0xa3, 0xe3, 0xfd, 0xe8, 0xd9, 0xff, - 0xb2, 0x00, 0x27, 0xb3, 0x1b, 0x27, 0xfa, 0x6d, 0x0b, 0x4e, 0xdc, 0xbe, 0x9b, 0xac, 0x85, 0x9b, - 0x24, 0x88, 0xab, 0x3b, 0x54, 0xbc, 0xb1, 0x2d, 0x63, 0xf8, 0x82, 0x9b, 0xef, 0x16, 0x3d, 0x75, - 0x35, 0xcd, 0xe5, 0x52, 0x90, 0x44, 0x3b, 0xd5, 0xc7, 0xc5, 0xdb, 0x9d, 0xb8, 0x7a, 0x6b, 0xcd, - 0x84, 0xe2, 0x6c, 0xa7, 0xce, 0x7e, 0xc9, 0x82, 0xd3, 0xdd, 0x48, 0xa0, 0x93, 0x50, 0xdc, 0x24, - 0x3b, 0x5c, 0x2b, 0xc3, 0xf4, 0x27, 0x7a, 0x03, 0x4a, 0x5b, 0x8e, 0xdf, 0x26, 0x42, 0xbb, 0x99, - 0x3f, 0xda, 0x8b, 0xa8, 0x9e, 0x61, 0x4e, 0xf5, 0xc7, 0x0b, 0x17, 0x2d, 0xfb, 0xdf, 0x14, 0x61, - 0xd8, 0xd8, 0xdf, 0x1e, 0x80, 0xc6, 0x16, 0xa6, 0x34, 0xb6, 0xa5, 0xdc, 0xb6, 0xe6, 0x9e, 0x2a, - 0xdb, 0xdd, 0x8c, 0xca, 0xb6, 0x9c, 0x1f, 0xcb, 0xfb, 0xea, 0x6c, 0x28, 0x81, 0x4a, 0xd8, 0xa2, - 0x1a, 0x39, 0xdd, 0xfa, 0x07, 0xf2, 0xf8, 0x84, 0xcb, 0x92, 0x5c, 0x75, 0x74, 0x6f, 0x77, 0xb2, - 0xa2, 0xfe, 0x62, 0xcd, 0xc8, 0xfe, 0xae, 0x05, 0xa7, 0x8d, 0x3e, 0xce, 0x86, 0x41, 0xcd, 0x63, - 0x9f, 0xf6, 0x3c, 0x0c, 0x24, 0x3b, 0x2d, 0xa9, 0xf6, 0xab, 0x91, 0x5a, 0xdb, 0x69, 0x11, 0xcc, - 0x20, 0x54, 0xd1, 0x6f, 0x92, 0x38, 0x76, 0x1a, 0x24, 0xab, 0xe8, 0x2f, 0xf1, 0x66, 0x2c, 0xe1, - 0x28, 0x02, 0xe4, 0x3b, 0x71, 0xb2, 0x16, 0x39, 0x41, 0xcc, 0xc8, 0xaf, 0x79, 0x4d, 0x22, 0x06, - 0xf8, 0xff, 0xeb, 0x6f, 0xc6, 0xd0, 0x27, 0xaa, 0x8f, 0xed, 0xed, 0x4e, 0xa2, 0xc5, 0x0e, 0x4a, - 0xb8, 0x0b, 0x75, 0xfb, 0xeb, 0x16, 0x3c, 0xd6, 0x5d, 0x17, 0x43, 0xcf, 0xc0, 0x20, 0x37, 0xf9, - 0xc4, 0xdb, 0xe9, 0x4f, 0xc2, 0x5a, 0xb1, 0x80, 0xa2, 0x69, 0xa8, 0xa8, 0x7d, 0x42, 0xbc, 0xe3, - 0xb8, 0x40, 0xad, 0xe8, 0xcd, 0x45, 0xe3, 0xd0, 0x41, 0xa3, 0x7f, 0x84, 0xe6, 0xa6, 0x06, 0x8d, - 0x19, 0x49, 0x0c, 0x62, 0xff, 0xb9, 0x05, 0x27, 0x8c, 0x5e, 0x3d, 0x00, 0xd5, 0x3c, 0x48, 0xab, - 0xe6, 0x0b, 0xb9, 0xcd, 0xe7, 0x1e, 0xba, 0xf9, 0x57, 0x2c, 0x38, 0x6b, 0x60, 0x2d, 0x39, 0x89, - 0xbb, 0x71, 0x69, 0xbb, 0x15, 0x91, 0x98, 0x9a, 0xd3, 0xe8, 0x29, 0x43, 0x6e, 0x55, 0x87, 0x05, - 0x85, 0xe2, 0x35, 0xb2, 0xc3, 0x85, 0xd8, 0x73, 0x50, 0xe6, 0x93, 0x33, 0x8c, 0xc4, 0x88, 0xab, - 0x77, 0x5b, 0x16, 0xed, 0x58, 0x61, 0x20, 0x1b, 0x06, 0x99, 0x70, 0xa2, 0x8b, 0x95, 0x6e, 0x43, - 0x40, 0x3f, 0xe2, 0x4d, 0xd6, 0x82, 0x05, 0xc4, 0x5e, 0x4e, 0x75, 0x67, 0x25, 0x22, 0xec, 0xe3, - 0xd6, 0x2e, 0x7b, 0xc4, 0xaf, 0xc5, 0xd4, 0x6c, 0x70, 0x82, 0x20, 0x4c, 0x84, 0x05, 0x60, 0x98, - 0x0d, 0x33, 0xba, 0x19, 0x9b, 0x38, 0xf6, 0x5e, 0x81, 0x19, 0x1f, 0x6a, 0x59, 0x93, 0x07, 0x61, - 0xb9, 0x46, 0x29, 0x39, 0xb8, 0x92, 0x9f, 0x50, 0x22, 0xbd, 0xad, 0xd7, 0xb7, 0x32, 0xa2, 0x10, - 0xe7, 0xca, 0xf5, 0xfe, 0x16, 0xec, 0xb7, 0x0a, 0x30, 0x99, 0x7e, 0xa0, 0x43, 0x92, 0x52, 0x73, - 0xc9, 0x60, 0x94, 0x3d, 0xa0, 0x30, 0xf0, 0xb1, 0x89, 0xd7, 0x43, 0x18, 0x15, 0x8e, 0x53, 0x18, - 0x99, 0xb2, 0xb2, 0xb8, 0x8f, 0xac, 0x7c, 0x46, 0x8d, 0xfa, 0x40, 0x46, 0x38, 0xa5, 0xf7, 0x8b, - 0xf3, 0x30, 0x10, 0x27, 0xa4, 0x35, 0x51, 0x4a, 0xcb, 0x9a, 0xd5, 0x84, 0xb4, 0x30, 0x83, 0xd8, - 0xff, 0xb5, 0x00, 0x8f, 0xa7, 0xc7, 0x50, 0x8b, 0xf7, 0x8f, 0xa7, 0xc4, 0xfb, 0x47, 0x4c, 0xf1, - 0x7e, 0x6f, 0x77, 0xf2, 0x83, 0x3d, 0x1e, 0xfb, 0x81, 0x91, 0xfe, 0x68, 0x3e, 0x33, 0x8a, 0xd3, - 0xe9, 0x51, 0xbc, 0xb7, 0x3b, 0xf9, 0x54, 0x8f, 0x77, 0xcc, 0x0c, 0xf3, 0x33, 0x30, 0x18, 0x11, - 0x27, 0x0e, 0x03, 0x31, 0xd0, 0xea, 0x73, 0x60, 0xd6, 0x8a, 0x05, 0xd4, 0xfe, 0xf3, 0x72, 0x76, - 0xb0, 0xe7, 0xf9, 0x01, 0x5b, 0x18, 0x21, 0x0f, 0x06, 0x98, 0xca, 0xce, 0x45, 0xc3, 0xb5, 0xa3, - 0x2d, 0x23, 0x2a, 0xe2, 0x15, 0xe9, 0x6a, 0x99, 0x7e, 0x35, 0xda, 0x84, 0x19, 0x0b, 0xb4, 0x0d, - 0x65, 0x57, 0x6a, 0xd2, 0x85, 0x3c, 0xce, 0x9c, 0x84, 0x1e, 0xad, 0x39, 0x8e, 0x50, 0x59, 0xac, - 0xd4, 0x6f, 0xc5, 0x0d, 0x11, 0x28, 0x36, 0xbc, 0x44, 0x7c, 0xd6, 0x23, 0xda, 0x4a, 0xf3, 0x9e, - 0xf1, 0x8a, 0x43, 0x74, 0x83, 0x98, 0xf7, 0x12, 0x4c, 0xe9, 0xa3, 0x2f, 0x58, 0x30, 0x1c, 0xbb, - 0xcd, 0x95, 0x28, 0xdc, 0xf2, 0x6a, 0x24, 0x12, 0x9a, 0xd2, 0x11, 0x45, 0xd3, 0xea, 0xec, 0x92, - 0x24, 0xa8, 0xf9, 0x72, 0xdb, 0x55, 0x43, 0xb0, 0xc9, 0x97, 0x5a, 0x10, 0x8f, 0x8b, 0x77, 0x9f, - 0x23, 0xae, 0x47, 0xf7, 0x36, 0x69, 0x30, 0xb1, 0x99, 0x72, 0x64, 0xcd, 0x71, 0xae, 0xed, 0x6e, - 0xd2, 0xf5, 0xa6, 0x3b, 0xf4, 0xc1, 0xbd, 0xdd, 0xc9, 0xc7, 0x67, 0xbb, 0xf3, 0xc4, 0xbd, 0x3a, - 0xc3, 0x06, 0xac, 0xd5, 0xf6, 0x7d, 0x4c, 0xee, 0xb4, 0x09, 0x3b, 0x0e, 0xc9, 0x61, 0xc0, 0x56, - 0x34, 0xc1, 0xcc, 0x80, 0x19, 0x10, 0x6c, 0xf2, 0x45, 0x77, 0x60, 0xb0, 0xe9, 0x24, 0x91, 0xb7, - 0x2d, 0xce, 0x40, 0x8e, 0xa8, 0xcb, 0x2f, 0x31, 0x5a, 0x9a, 0x39, 0xdb, 0xfa, 0x79, 0x23, 0x16, - 0x8c, 0x50, 0x13, 0x4a, 0x4d, 0x12, 0x35, 0xc8, 0x44, 0x39, 0x8f, 0xf3, 0xde, 0x25, 0x4a, 0x4a, - 0x33, 0xac, 0x50, 0xcd, 0x87, 0xb5, 0x61, 0xce, 0x05, 0xbd, 0x01, 0xe5, 0x98, 0xf8, 0xc4, 0xa5, - 0xba, 0x4b, 0x85, 0x71, 0xfc, 0x68, 0x9f, 0x7a, 0x9c, 0xb3, 0x4e, 0xfc, 0x55, 0xf1, 0x28, 0x5f, - 0x60, 0xf2, 0x1f, 0x56, 0x24, 0xed, 0xff, 0x64, 0x01, 0x4a, 0x4b, 0x98, 0x07, 0xa0, 0x3d, 0xde, - 0x49, 0x6b, 0x8f, 0x8b, 0x79, 0xaa, 0x00, 0x3d, 0x14, 0xc8, 0xf7, 0xca, 0x90, 0x91, 0xcd, 0xd7, - 0x49, 0x9c, 0x90, 0xda, 0xfb, 0xf2, 0xf4, 0x7d, 0x79, 0xfa, 0xbe, 0x3c, 0x55, 0xf2, 0x74, 0x3d, - 0x23, 0x4f, 0x5f, 0x31, 0x56, 0xbd, 0xf6, 0x5e, 0xbe, 0xa9, 0xdc, 0x9b, 0x66, 0x0f, 0x0c, 0x04, - 0x2a, 0x09, 0xae, 0xae, 0x2e, 0x5f, 0xef, 0x2a, 0x40, 0xdf, 0x4c, 0x0b, 0xd0, 0xa3, 0xb2, 0x78, - 0xe0, 0x22, 0xf3, 0x6f, 0x14, 0xe0, 0x89, 0xb4, 0x28, 0xc1, 0xa1, 0xef, 0x87, 0xed, 0x84, 0x6a, - 0xc9, 0xe8, 0xd7, 0x2d, 0x38, 0xd9, 0x4c, 0x9b, 0xa7, 0xb1, 0x38, 0x05, 0xfc, 0x44, 0x6e, 0x72, - 0x2e, 0x63, 0xff, 0x56, 0x27, 0x84, 0xcc, 0x3b, 0x99, 0x01, 0xc4, 0xb8, 0xa3, 0x2f, 0xe8, 0x0d, - 0xa8, 0x34, 0x9d, 0xed, 0x1b, 0xad, 0x9a, 0x93, 0x48, 0x03, 0xa5, 0xb7, 0x5d, 0xd9, 0x4e, 0x3c, - 0x7f, 0x8a, 0xfb, 0x76, 0xa7, 0x16, 0x82, 0x64, 0x39, 0x5a, 0x4d, 0x22, 0x2f, 0x68, 0xf0, 0xb3, - 0x9f, 0x25, 0x49, 0x06, 0x6b, 0x8a, 0xf6, 0xaf, 0x59, 0x59, 0x41, 0xab, 0x46, 0x27, 0x72, 0x12, - 0xd2, 0xd8, 0x41, 0x9f, 0x81, 0x12, 0xb5, 0x24, 0xe4, 0xa8, 0xdc, 0xca, 0x53, 0xfa, 0x1b, 0x5f, - 0x42, 0x6f, 0x04, 0xf4, 0x5f, 0x8c, 0x39, 0x53, 0xfb, 0x5b, 0x83, 0xd9, 0x0d, 0x8f, 0x79, 0xfa, - 0x2e, 0x00, 0x34, 0xc2, 0x35, 0xd2, 0x6c, 0xf9, 0x74, 0x58, 0x2c, 0x76, 0x5c, 0xac, 0x8c, 0xe7, - 0x79, 0x05, 0xc1, 0x06, 0x16, 0xfa, 0xcb, 0x16, 0x40, 0x43, 0x2e, 0x2c, 0xb9, 0x99, 0xdd, 0xc8, - 0xf3, 0x75, 0xf4, 0xb2, 0xd5, 0x7d, 0x51, 0x0c, 0xb1, 0xc1, 0x1c, 0xfd, 0xbc, 0x05, 0xe5, 0x44, - 0x76, 0x9f, 0x8b, 0xf7, 0xb5, 0x3c, 0x7b, 0x22, 0x5f, 0x5a, 0xef, 0xeb, 0x6a, 0x48, 0x14, 0x5f, - 0xf4, 0x4b, 0x16, 0x40, 0xbc, 0x13, 0xb8, 0x2b, 0xa1, 0xef, 0xb9, 0x3b, 0x42, 0xea, 0xdf, 0xcc, - 0xd5, 0xc0, 0x57, 0xd4, 0xab, 0x63, 0x74, 0x34, 0xf4, 0x7f, 0x6c, 0x70, 0x46, 0x9f, 0x85, 0x72, - 0x2c, 0xa6, 0x9b, 0x90, 0xf3, 0x6b, 0xf9, 0x1e, 0x33, 0x70, 0xda, 0x42, 0x44, 0x88, 0x7f, 0x58, - 0xf1, 0x44, 0xbf, 0x62, 0xc1, 0x89, 0x56, 0xfa, 0x50, 0x48, 0x88, 0xf4, 0xfc, 0x64, 0x40, 0xe6, - 0xd0, 0xa9, 0x7a, 0x6a, 0x6f, 0x77, 0xf2, 0x44, 0xa6, 0x11, 0x67, 0x7b, 0x81, 0x66, 0x61, 0x5c, - 0xcf, 0xe0, 0xe5, 0x16, 0x3f, 0xa0, 0x1a, 0x62, 0x07, 0x54, 0xcc, 0xbf, 0x37, 0x9f, 0x05, 0xe2, - 0x4e, 0x7c, 0xfb, 0xdb, 0x85, 0xd4, 0xf9, 0xae, 0x3a, 0x78, 0x61, 0x2b, 0xc2, 0x95, 0x36, 0xaf, - 0x5c, 0xe0, 0xb9, 0xae, 0x08, 0x65, 0x51, 0xeb, 0x15, 0xa1, 0x9a, 0x62, 0x6c, 0x30, 0xa7, 0x7b, - 0xff, 0xb8, 0x93, 0x3d, 0xde, 0x11, 0x8b, 0xf4, 0x8d, 0x3c, 0xbb, 0xd4, 0x79, 0x1a, 0xff, 0x84, - 0xe8, 0xda, 0x78, 0x07, 0x08, 0x77, 0x76, 0xc9, 0xfe, 0x76, 0xfa, 0x4c, 0xd9, 0x98, 0x5f, 0x7d, - 0x9c, 0x97, 0x7f, 0xd5, 0x82, 0xe1, 0x28, 0xf4, 0x7d, 0x2f, 0x68, 0xd0, 0xb5, 0x20, 0x04, 0xfa, - 0xeb, 0xc7, 0x22, 0x53, 0xc5, 0xa4, 0x67, 0x1a, 0x04, 0xd6, 0x3c, 0xb1, 0xd9, 0x01, 0xfb, 0xf3, - 0x16, 0x4c, 0xf4, 0x5a, 0xb3, 0x88, 0xc0, 0x07, 0xe5, 0x84, 0x54, 0xde, 0xe2, 0xe5, 0x60, 0x8e, - 0xf8, 0x44, 0x1d, 0xb6, 0x95, 0xab, 0x4f, 0x8b, 0xd7, 0xfc, 0xe0, 0x4a, 0x6f, 0x54, 0x7c, 0x3f, - 0x3a, 0xf6, 0x6f, 0x15, 0xb2, 0x23, 0xaa, 0x64, 0xf6, 0x37, 0xac, 0x0e, 0xcb, 0xe6, 0x13, 0xc7, - 0x21, 0x27, 0x99, 0x0d, 0xa4, 0x9c, 0xc6, 0xbd, 0x71, 0x1e, 0xa2, 0x57, 0xca, 0xfe, 0x57, 0x03, - 0x70, 0x9f, 0x9e, 0x29, 0xbf, 0x83, 0xd5, 0xcb, 0xef, 0x70, 0x70, 0x57, 0xc6, 0x97, 0x2d, 0x18, - 0xf4, 0xa9, 0x92, 0xc5, 0xcf, 0xd6, 0x87, 0x2f, 0xd4, 0x8e, 0x6b, 0xec, 0xb9, 0x2e, 0x17, 0x73, - 0xcf, 0xa8, 0x3a, 0x5e, 0xe3, 0x8d, 0x58, 0xf4, 0x01, 0x7d, 0xd3, 0x4a, 0x1f, 0xd4, 0xf3, 0x50, - 0x17, 0xef, 0xd8, 0xfa, 0x64, 0x9c, 0xfe, 0xf3, 0x8e, 0xe9, 0x73, 0xe5, 0x1e, 0x7e, 0x01, 0x34, - 0x05, 0x50, 0xf7, 0x02, 0xc7, 0xf7, 0xde, 0xa2, 0xc6, 0x62, 0x89, 0x09, 0x6a, 0xb6, 0xf3, 0x5d, - 0x56, 0xad, 0xd8, 0xc0, 0x38, 0xfb, 0x97, 0x60, 0xd8, 0x78, 0xf3, 0x2e, 0x0e, 0xdd, 0xd3, 0xa6, - 0x43, 0xb7, 0x62, 0xf8, 0x61, 0xcf, 0xbe, 0x02, 0x27, 0xb3, 0x1d, 0x3c, 0xc8, 0xf3, 0xf6, 0x6f, - 0x0f, 0x66, 0x4f, 0xd7, 0xd7, 0x48, 0xd4, 0xa4, 0x5d, 0x7b, 0xdf, 0xc8, 0x7e, 0xdf, 0xc8, 0x7e, - 0xdf, 0xc8, 0x96, 0x7f, 0xec, 0xbd, 0x12, 0xa4, 0x34, 0x03, 0xde, 0xbb, 0x0f, 0xc3, 0x50, 0x44, - 0x5a, 0xe1, 0x0d, 0xbc, 0x28, 0x24, 0xae, 0x0e, 0x71, 0xe5, 0xcd, 0x58, 0xc2, 0xa9, 0x64, 0x6e, - 0x39, 0xc9, 0x86, 0x10, 0xb9, 0x4a, 0x32, 0xaf, 0x38, 0xc9, 0x06, 0x66, 0x10, 0xf4, 0x0a, 0x8c, - 0x25, 0x4e, 0xd4, 0x20, 0x09, 0x26, 0x5b, 0x6c, 0x10, 0x84, 0xc7, 0xe2, 0x31, 0x81, 0x3b, 0xb6, - 0x96, 0x82, 0xe2, 0x0c, 0x36, 0xba, 0x03, 0x03, 0x1b, 0xc4, 0x6f, 0x8a, 0x53, 0x80, 0xd5, 0xfc, - 0x24, 0x22, 0x7b, 0xd7, 0x2b, 0xc4, 0x6f, 0xf2, 0xf5, 0x4a, 0x7f, 0x61, 0xc6, 0x8a, 0x7e, 0x9d, - 0xca, 0x66, 0x3b, 0x4e, 0xc2, 0xa6, 0xf7, 0x96, 0x3c, 0x1b, 0xf8, 0x44, 0xce, 0x8c, 0xaf, 0x49, - 0xfa, 0xdc, 0x80, 0x55, 0x7f, 0xb1, 0xe6, 0xcc, 0xfa, 0x51, 0xf3, 0x22, 0x66, 0xeb, 0xef, 0x4c, - 0xc0, 0xb1, 0xf4, 0x63, 0x4e, 0xd2, 0xe7, 0xfd, 0x50, 0x7f, 0xb1, 0xe6, 0x8c, 0x76, 0x60, 0xb0, - 0xe5, 0xb7, 0x1b, 0x5e, 0x30, 0x31, 0xcc, 0xfa, 0x70, 0x23, 0xe7, 0x3e, 0xac, 0x30, 0xe2, 0xfc, - 0x84, 0x86, 0xff, 0xc6, 0x82, 0x21, 0x7a, 0x1a, 0x4a, 0xee, 0x86, 0x13, 0x25, 0x13, 0x23, 0x6c, - 0xd2, 0x28, 0x43, 0x7a, 0x96, 0x36, 0x62, 0x0e, 0x43, 0x4f, 0x41, 0x31, 0x22, 0x75, 0x16, 0x59, - 0x65, 0xf8, 0xdc, 0x31, 0xa9, 0x63, 0xda, 0x6e, 0xff, 0xed, 0x42, 0x5a, 0xb9, 0x48, 0xbf, 0x37, - 0x9f, 0xed, 0x6e, 0x3b, 0x8a, 0xa5, 0xb1, 0x6d, 0xcc, 0x76, 0xd6, 0x8c, 0x25, 0x1c, 0x7d, 0xde, - 0x82, 0xa1, 0xdb, 0x71, 0x18, 0x04, 0x24, 0x11, 0x82, 0xfc, 0x66, 0xce, 0x43, 0x71, 0x95, 0x53, - 0xd7, 0x7d, 0x10, 0x0d, 0x58, 0xf2, 0xa5, 0xdd, 0x25, 0xdb, 0xae, 0xdf, 0xae, 0x75, 0xb8, 0x5a, - 0x2f, 0xf1, 0x66, 0x2c, 0xe1, 0x14, 0xd5, 0x0b, 0x38, 0xea, 0x40, 0x1a, 0x75, 0x21, 0x10, 0xa8, - 0x02, 0x6e, 0xff, 0x6e, 0x09, 0xce, 0x74, 0x5d, 0x1c, 0x74, 0xdb, 0x67, 0x1b, 0xeb, 0x65, 0xcf, - 0x27, 0x32, 0x80, 0x80, 0x6d, 0xfb, 0x37, 0x55, 0x2b, 0x36, 0x30, 0xd0, 0xcf, 0x01, 0xb4, 0x9c, - 0xc8, 0x69, 0x12, 0xb1, 0xdd, 0x15, 0x8f, 0xbe, 0xbb, 0xd2, 0x7e, 0xac, 0x48, 0x9a, 0xda, 0xda, - 0x52, 0x4d, 0x31, 0x36, 0x58, 0xa2, 0x97, 0x60, 0x38, 0x22, 0x3e, 0x71, 0x62, 0x16, 0x98, 0x97, - 0x8d, 0x32, 0xc6, 0x1a, 0x84, 0x4d, 0x3c, 0xf4, 0x8c, 0x8a, 0xb5, 0xc8, 0xf8, 0xa5, 0xd3, 0xf1, - 0x16, 0xe8, 0x6d, 0x0b, 0xc6, 0xea, 0x9e, 0x4f, 0x34, 0x77, 0x11, 0x13, 0xbc, 0x7c, 0xf4, 0x97, - 0xbc, 0x6c, 0xd2, 0xd5, 0x12, 0x32, 0xd5, 0x1c, 0xe3, 0x0c, 0x7b, 0xfa, 0x99, 0xb7, 0x48, 0xc4, - 0x44, 0xeb, 0x60, 0xfa, 0x33, 0xdf, 0xe4, 0xcd, 0x58, 0xc2, 0xd1, 0x0c, 0x9c, 0x68, 0x39, 0x71, - 0x3c, 0x1b, 0x91, 0x1a, 0x09, 0x12, 0xcf, 0xf1, 0x79, 0xc4, 0x6e, 0x59, 0x47, 0xec, 0xad, 0xa4, - 0xc1, 0x38, 0x8b, 0x8f, 0x3e, 0x09, 0x8f, 0x7b, 0x8d, 0x20, 0x8c, 0xc8, 0x92, 0x17, 0xc7, 0x5e, - 0xd0, 0xd0, 0xd3, 0x80, 0x49, 0xca, 0x72, 0x75, 0x52, 0x90, 0x7a, 0x7c, 0xa1, 0x3b, 0x1a, 0xee, - 0xf5, 0x3c, 0x7a, 0x0e, 0xca, 0xf1, 0xa6, 0xd7, 0x9a, 0x8d, 0x6a, 0x31, 0x3b, 0x2d, 0x2d, 0xeb, - 0x23, 0x9e, 0x55, 0xd1, 0x8e, 0x15, 0x86, 0xfd, 0xab, 0x85, 0xb4, 0x79, 0x67, 0xae, 0x1f, 0x14, - 0xd3, 0x55, 0x92, 0xdc, 0x74, 0x22, 0x69, 0xfa, 0x1f, 0x31, 0xe6, 0x57, 0xd0, 0xbd, 0xe9, 0x44, - 0xe6, 0x7a, 0x63, 0x0c, 0xb0, 0xe4, 0x84, 0x6e, 0xc3, 0x40, 0xe2, 0x3b, 0x39, 0x25, 0x09, 0x18, - 0x1c, 0xb5, 0xb5, 0xbd, 0x38, 0x13, 0x63, 0xc6, 0x03, 0x3d, 0x49, 0xd5, 0xd7, 0x75, 0x19, 0x18, - 0x24, 0x34, 0xce, 0xf5, 0x18, 0xb3, 0x56, 0xfb, 0xff, 0x96, 0xbb, 0x88, 0x3c, 0xb5, 0xc7, 0xa0, - 0x0b, 0x00, 0xd4, 0x12, 0x5a, 0x89, 0x48, 0xdd, 0xdb, 0x16, 0x7b, 0xbc, 0x5a, 0x56, 0xd7, 0x15, - 0x04, 0x1b, 0x58, 0xf2, 0x99, 0xd5, 0x76, 0x9d, 0x3e, 0x53, 0xe8, 0x7c, 0x86, 0x43, 0xb0, 0x81, - 0x85, 0x5e, 0x84, 0x41, 0xaf, 0xe9, 0x34, 0x54, 0xfc, 0xd2, 0x93, 0x74, 0x3d, 0x2d, 0xb0, 0x96, - 0x7b, 0xbb, 0x93, 0x63, 0xaa, 0x43, 0xac, 0x09, 0x0b, 0x5c, 0xf4, 0x5b, 0x16, 0x8c, 0xb8, 0x61, - 0xb3, 0x19, 0x06, 0xdc, 0x7e, 0x10, 0xc6, 0xd0, 0xed, 0xe3, 0xda, 0x81, 0xa7, 0x66, 0x0d, 0x66, - 0xdc, 0x1a, 0x52, 0xd9, 0x0c, 0x26, 0x08, 0xa7, 0x7a, 0x65, 0x2e, 0xbb, 0xd2, 0x3e, 0xcb, 0xee, - 0xf7, 0x2c, 0x18, 0xe7, 0xcf, 0x1a, 0x66, 0x8d, 0x08, 0xdc, 0x0f, 0x8f, 0xf9, 0xb5, 0x3a, 0x2c, - 0x3d, 0x75, 0x24, 0xd4, 0x01, 0xc7, 0x9d, 0x9d, 0x44, 0xf3, 0x30, 0x5e, 0x0f, 0x23, 0x97, 0x98, - 0x03, 0x21, 0x64, 0x86, 0x22, 0x74, 0x39, 0x8b, 0x80, 0x3b, 0x9f, 0x41, 0x37, 0xe1, 0x31, 0xa3, - 0xd1, 0x1c, 0x07, 0x2e, 0x36, 0xce, 0x09, 0x6a, 0x8f, 0x5d, 0xee, 0x8a, 0x85, 0x7b, 0x3c, 0x9d, - 0xb6, 0xfc, 0x2b, 0x7d, 0x58, 0xfe, 0x6f, 0xc2, 0x13, 0x6e, 0xe7, 0xc8, 0x6c, 0xc5, 0xed, 0xf5, - 0x38, 0x61, 0x4a, 0x56, 0xb9, 0xfa, 0x23, 0x82, 0xc0, 0x13, 0xb3, 0xbd, 0x10, 0x71, 0x6f, 0x1a, - 0xe8, 0x33, 0x50, 0x8e, 0x08, 0xfb, 0x2a, 0xb1, 0x88, 0x62, 0x3f, 0xa2, 0xb9, 0xa7, 0x95, 0x43, - 0x4e, 0x56, 0x8b, 0x45, 0xd1, 0x10, 0x63, 0xc5, 0xf1, 0xec, 0xc7, 0x61, 0xbc, 0x63, 0x3e, 0x1f, - 0xc8, 0xf8, 0x9e, 0x83, 0xc7, 0xba, 0xcf, 0x9c, 0x03, 0x99, 0xe0, 0xff, 0x30, 0x13, 0x9c, 0x65, - 0x28, 0x7a, 0x7d, 0x1c, 0xe7, 0x38, 0x50, 0x24, 0xc1, 0x96, 0x10, 0xa4, 0x97, 0x8f, 0x36, 0x7a, - 0x97, 0x82, 0x2d, 0x3e, 0xf1, 0x99, 0xcd, 0x7a, 0x29, 0xd8, 0xc2, 0x94, 0x36, 0x7a, 0xc7, 0x4a, - 0x29, 0x2a, 0xfc, 0x10, 0xe8, 0x53, 0xc7, 0xa2, 0xd9, 0xf6, 0xad, 0xbb, 0xd8, 0xff, 0xba, 0x00, - 0xe7, 0xf7, 0x23, 0xd2, 0xc7, 0xf0, 0x3d, 0x0d, 0x83, 0x31, 0xf3, 0x8e, 0x09, 0xc9, 0x34, 0x4c, - 0xa5, 0x12, 0xf7, 0x97, 0xbd, 0x89, 0x05, 0x08, 0xf9, 0x50, 0x6c, 0x3a, 0x2d, 0x71, 0x36, 0xb0, - 0x70, 0xd4, 0x50, 0x6c, 0xfa, 0xdf, 0xf1, 0x97, 0x9c, 0x16, 0xb7, 0x38, 0x8d, 0x06, 0x4c, 0xd9, - 0xa0, 0x04, 0x4a, 0x4e, 0x14, 0x39, 0xd2, 0x15, 0x73, 0x2d, 0x1f, 0x7e, 0x33, 0x94, 0x64, 0x75, - 0x7c, 0x6f, 0x77, 0x72, 0x34, 0xd5, 0x84, 0x39, 0x33, 0xfb, 0xcb, 0x43, 0xa9, 0x70, 0x64, 0xe6, - 0x5f, 0x8b, 0x61, 0x50, 0x1c, 0x09, 0x58, 0x79, 0x47, 0xc0, 0xf3, 0x7c, 0x12, 0x66, 0xc7, 0x88, - 0xac, 0x3c, 0xc1, 0x0a, 0x7d, 0xc9, 0x62, 0xb9, 0x6f, 0x32, 0x44, 0x5b, 0x58, 0x0f, 0xc7, 0x93, - 0x8a, 0x67, 0x66, 0xd4, 0xc9, 0x46, 0x6c, 0x72, 0xa7, 0x5b, 0x57, 0x8b, 0x67, 0x71, 0x64, 0x6d, - 0x08, 0x99, 0x1d, 0x27, 0xe1, 0x68, 0xbb, 0x8b, 0x1f, 0x2d, 0x87, 0xfc, 0xa9, 0x3e, 0x3c, 0x67, - 0xdf, 0xb4, 0x60, 0x9c, 0x6b, 0x8a, 0x73, 0x5e, 0xbd, 0x4e, 0x22, 0x12, 0xb8, 0x44, 0xea, 0xda, - 0x47, 0xf4, 0xd4, 0xca, 0x73, 0x98, 0x85, 0x2c, 0x79, 0xbd, 0xa7, 0x75, 0x80, 0x70, 0x67, 0x67, - 0x50, 0x0d, 0x06, 0xbc, 0xa0, 0x1e, 0x8a, 0x9d, 0xbc, 0x7a, 0xb4, 0x4e, 0x2d, 0x04, 0xf5, 0x50, - 0xaf, 0x66, 0xfa, 0x0f, 0x33, 0xea, 0x68, 0x11, 0x4e, 0x47, 0xe2, 0x34, 0xe4, 0x8a, 0x17, 0x53, - 0x9b, 0x75, 0xd1, 0x6b, 0x7a, 0x09, 0xdb, 0x85, 0x8b, 0xd5, 0x89, 0xbd, 0xdd, 0xc9, 0xd3, 0xb8, - 0x0b, 0x1c, 0x77, 0x7d, 0x0a, 0xbd, 0x05, 0x43, 0x32, 0x59, 0xaf, 0x9c, 0x87, 0xdd, 0xd2, 0x39, - 0xff, 0xd5, 0x64, 0x5a, 0x15, 0x79, 0x79, 0x92, 0xa1, 0xfd, 0xf6, 0x30, 0x74, 0x3a, 0xa2, 0xd0, - 0xcf, 0x42, 0x25, 0x52, 0x09, 0x84, 0x56, 0x1e, 0x71, 0x58, 0xf2, 0xfb, 0x0a, 0x27, 0x98, 0xd2, - 0x07, 0x74, 0xaa, 0xa0, 0xe6, 0x48, 0xb5, 0xf6, 0x58, 0xfb, 0xab, 0x72, 0x98, 0xdb, 0x82, 0xab, - 0xf6, 0x73, 0xec, 0x04, 0x2e, 0x66, 0x3c, 0x50, 0x04, 0x83, 0x1b, 0xc4, 0xf1, 0x93, 0x8d, 0x7c, - 0x8e, 0x64, 0xaf, 0x30, 0x5a, 0xd9, 0x50, 0x73, 0xde, 0x8a, 0x05, 0x27, 0xb4, 0x0d, 0x43, 0x1b, - 0x7c, 0x02, 0x08, 0x45, 0x7a, 0xe9, 0xa8, 0x83, 0x9b, 0x9a, 0x55, 0xfa, 0x73, 0x8b, 0x06, 0x2c, - 0xd9, 0x31, 0x27, 0xbc, 0xe1, 0x83, 0xe5, 0x4b, 0x37, 0xbf, 0x28, 0xfb, 0xfe, 0x1d, 0xb0, 0x9f, - 0x86, 0x91, 0x88, 0xb8, 0x61, 0xe0, 0x7a, 0x3e, 0xa9, 0xcd, 0xc8, 0xe3, 0xd6, 0x83, 0xc4, 0x66, - 0x9f, 0xa4, 0xc6, 0x00, 0x36, 0x68, 0xe0, 0x14, 0x45, 0xf4, 0x45, 0x0b, 0xc6, 0x54, 0xd6, 0x11, - 0xfd, 0x20, 0x44, 0x1c, 0x58, 0x2e, 0xe6, 0x94, 0xe3, 0xc4, 0x68, 0x56, 0xd1, 0xde, 0xee, 0xe4, - 0x58, 0xba, 0x0d, 0x67, 0xf8, 0xa2, 0xd7, 0x00, 0xc2, 0x75, 0xee, 0x69, 0x9f, 0x49, 0xc4, 0xe9, - 0xe5, 0x41, 0x5e, 0x75, 0x8c, 0x27, 0x69, 0x48, 0x0a, 0xd8, 0xa0, 0x86, 0xae, 0x01, 0xf0, 0x65, - 0xb3, 0xb6, 0xd3, 0x92, 0xda, 0xb6, 0x0c, 0xae, 0x87, 0x55, 0x05, 0xb9, 0xb7, 0x3b, 0xd9, 0x79, - 0x9a, 0xc4, 0x5c, 0xc5, 0xc6, 0xe3, 0xe8, 0x67, 0x60, 0x28, 0x6e, 0x37, 0x9b, 0x8e, 0x3a, 0xdb, - 0xcc, 0x31, 0xed, 0x83, 0xd3, 0x35, 0x44, 0x11, 0x6f, 0xc0, 0x92, 0x23, 0xba, 0x4d, 0x85, 0x6a, - 0x2c, 0x8e, 0xb9, 0xd8, 0x2a, 0xe2, 0x3a, 0xc1, 0x30, 0x7b, 0xa7, 0x8f, 0x89, 0xe7, 0x4e, 0xe3, - 0x2e, 0x38, 0xf7, 0x76, 0x27, 0x1f, 0x4b, 0xb7, 0x2f, 0x86, 0x22, 0x11, 0xa3, 0x2b, 0x4d, 0x74, - 0x55, 0xe6, 0xee, 0xd3, 0xd7, 0x96, 0x29, 0xa5, 0xcf, 0xea, 0xdc, 0x7d, 0xd6, 0xdc, 0x7b, 0xcc, - 0xcc, 0x87, 0xd1, 0x12, 0x9c, 0x72, 0xc3, 0x20, 0x89, 0x42, 0xdf, 0xe7, 0x05, 0x29, 0xb8, 0xe1, - 0xc3, 0xcf, 0x3e, 0x3f, 0x28, 0xba, 0x7d, 0x6a, 0xb6, 0x13, 0x05, 0x77, 0x7b, 0xce, 0x0e, 0xd2, - 0x21, 0x48, 0x62, 0x70, 0x5e, 0x84, 0x11, 0xb2, 0x9d, 0x90, 0x28, 0x70, 0xfc, 0x1b, 0x78, 0x51, - 0x9e, 0xfa, 0xb1, 0x35, 0x70, 0xc9, 0x68, 0xc7, 0x29, 0x2c, 0x64, 0x2b, 0x6b, 0xbf, 0xa0, 0xb3, - 0x95, 0xb8, 0xb5, 0x2f, 0x6d, 0x7b, 0xfb, 0x7f, 0x17, 0x52, 0x0a, 0xd9, 0x5a, 0x44, 0x08, 0x0a, - 0xa1, 0x14, 0x84, 0x35, 0x25, 0xfb, 0xaf, 0xe6, 0x23, 0xfb, 0xaf, 0x87, 0x35, 0x23, 0xc1, 0x9f, - 0xfe, 0x8b, 0x31, 0xe7, 0xc3, 0x32, 0xa0, 0x65, 0xaa, 0x38, 0x03, 0x08, 0x43, 0x23, 0x4f, 0xce, - 0x2a, 0x03, 0x7a, 0xd9, 0x64, 0x84, 0xd3, 0x7c, 0xd1, 0x26, 0x94, 0x36, 0xc2, 0x38, 0x91, 0xe6, - 0xc7, 0x11, 0x2d, 0x9d, 0x2b, 0x61, 0x9c, 0x30, 0x2d, 0x42, 0xbd, 0x36, 0x6d, 0x89, 0x31, 0xe7, - 0x61, 0xff, 0x67, 0x2b, 0x75, 0xc6, 0x7b, 0x8b, 0x85, 0xe3, 0x6d, 0x91, 0x80, 0x2e, 0x6b, 0x33, - 0xb8, 0xe3, 0xff, 0xcf, 0x64, 0xcb, 0x7c, 0xa8, 0x57, 0xb9, 0x95, 0xbb, 0x94, 0xc2, 0x14, 0x23, - 0x61, 0xc4, 0x81, 0x7c, 0xce, 0x4a, 0xe7, 0x2d, 0x15, 0xf2, 0x30, 0x30, 0xcc, 0xbc, 0xbc, 0x7d, - 0x53, 0xa0, 0xec, 0x77, 0x2c, 0x18, 0xaa, 0x3a, 0xee, 0x66, 0x58, 0xaf, 0xa3, 0xe7, 0xa0, 0x5c, - 0x6b, 0x47, 0x66, 0x0a, 0x95, 0xb2, 0x9e, 0xe7, 0x44, 0x3b, 0x56, 0x18, 0x74, 0x0e, 0xd7, 0x1d, - 0x57, 0x66, 0xe7, 0x15, 0xf9, 0x1c, 0xbe, 0xcc, 0x5a, 0xb0, 0x80, 0xa0, 0x97, 0x60, 0xb8, 0xe9, - 0x6c, 0xcb, 0x87, 0xb3, 0x07, 0xcc, 0x4b, 0x1a, 0x84, 0x4d, 0x3c, 0xfb, 0x5f, 0x58, 0x30, 0x51, - 0x75, 0x62, 0xcf, 0x9d, 0x69, 0x27, 0x1b, 0x55, 0x2f, 0x59, 0x6f, 0xbb, 0x9b, 0x24, 0xe1, 0x29, - 0x99, 0xb4, 0x97, 0xed, 0x98, 0x2e, 0x25, 0x65, 0xd7, 0xa9, 0x5e, 0xde, 0x10, 0xed, 0x58, 0x61, - 0xa0, 0xb7, 0x60, 0xb8, 0xe5, 0xc4, 0xf1, 0xdd, 0x30, 0xaa, 0x61, 0x52, 0xcf, 0x27, 0x21, 0x7a, - 0x95, 0xb8, 0x11, 0x49, 0x30, 0xa9, 0x0b, 0x97, 0xa1, 0xa6, 0x8f, 0x4d, 0x66, 0xf6, 0x5f, 0xb7, - 0x60, 0x84, 0x79, 0x5f, 0xe6, 0x48, 0xe2, 0x78, 0x7e, 0x47, 0x55, 0x0f, 0xab, 0xcf, 0xaa, 0x1e, - 0xe7, 0x61, 0x60, 0x23, 0x6c, 0x92, 0xac, 0xe7, 0xf0, 0x4a, 0x48, 0xad, 0x58, 0x0a, 0x41, 0x2f, - 0xd0, 0x71, 0xf6, 0x82, 0xc4, 0xa1, 0x33, 0x4e, 0x1e, 0x21, 0x9e, 0xe0, 0x63, 0xac, 0x9a, 0xb1, - 0x89, 0x63, 0x7f, 0xab, 0x02, 0x43, 0xc2, 0x19, 0xdb, 0x77, 0x16, 0xac, 0x34, 0xa7, 0x0b, 0x3d, - 0xcd, 0xe9, 0x18, 0x06, 0x5d, 0x56, 0x33, 0x48, 0x68, 0x6d, 0xd7, 0x72, 0xf1, 0xde, 0xf3, 0x32, - 0x44, 0xba, 0x5b, 0xfc, 0x3f, 0x16, 0xac, 0xd0, 0xd7, 0x2c, 0x38, 0xe1, 0x86, 0x41, 0x40, 0x5c, - 0xad, 0x52, 0x0c, 0xe4, 0x11, 0x8f, 0x33, 0x9b, 0x26, 0xaa, 0x8f, 0xfe, 0x33, 0x00, 0x9c, 0x65, - 0x8f, 0x5e, 0x86, 0x51, 0x3e, 0x66, 0x37, 0x53, 0xe7, 0x9e, 0xba, 0xd8, 0x83, 0x09, 0xc4, 0x69, - 0x5c, 0x34, 0xc5, 0xcf, 0x8f, 0x45, 0x59, 0x85, 0x41, 0xed, 0x47, 0x32, 0x0a, 0x2a, 0x18, 0x18, - 0x28, 0x02, 0x14, 0x91, 0x7a, 0x44, 0xe2, 0x0d, 0xe1, 0xac, 0x66, 0xea, 0xcc, 0xd0, 0xe1, 0xb2, - 0xea, 0x70, 0x07, 0x25, 0xdc, 0x85, 0x3a, 0xda, 0x14, 0xf6, 0x5c, 0x39, 0x0f, 0x91, 0x25, 0x3e, - 0x73, 0x4f, 0xb3, 0x6e, 0x12, 0x4a, 0xf1, 0x86, 0x13, 0xd5, 0x98, 0x1a, 0x55, 0xe4, 0xc1, 0xe3, - 0xab, 0xb4, 0x01, 0xf3, 0x76, 0x34, 0x07, 0x27, 0x33, 0xa5, 0x2a, 0x62, 0x71, 0x3e, 0xa9, 0x82, - 0xac, 0x33, 0x45, 0x2e, 0x62, 0xdc, 0xf1, 0x84, 0x69, 0xeb, 0x0f, 0xef, 0x63, 0xeb, 0xef, 0xa8, - 0x90, 0xa8, 0x11, 0xb6, 0x1d, 0xbd, 0x9a, 0xcb, 0x00, 0xf4, 0x15, 0xff, 0xf4, 0x95, 0x4c, 0xfc, - 0xd3, 0x28, 0xeb, 0xc0, 0xcd, 0x7c, 0x3a, 0x70, 0xf0, 0x60, 0xa7, 0x87, 0x19, 0xbc, 0xf4, 0xbf, - 0x2c, 0x90, 0xdf, 0x75, 0xd6, 0x71, 0x37, 0x08, 0x9d, 0x32, 0xe8, 0x15, 0x18, 0x53, 0x16, 0xeb, - 0x6c, 0xd8, 0x0e, 0x78, 0xdc, 0x52, 0x51, 0xfb, 0x08, 0x71, 0x0a, 0x8a, 0x33, 0xd8, 0x68, 0x1a, - 0x2a, 0x74, 0x9c, 0xf8, 0xa3, 0x7c, 0x6b, 0x53, 0x56, 0xf1, 0xcc, 0xca, 0x82, 0x78, 0x4a, 0xe3, - 0xa0, 0x10, 0xc6, 0x7d, 0x27, 0x4e, 0x58, 0x0f, 0xa8, 0x01, 0x7b, 0xc8, 0x9c, 0x56, 0x16, 0xc9, - 0xbb, 0x98, 0x25, 0x84, 0x3b, 0x69, 0xdb, 0xdf, 0x1d, 0x80, 0xd1, 0x94, 0x64, 0x3c, 0xe0, 0x9e, - 0xf8, 0x1c, 0x94, 0xe5, 0x36, 0x95, 0xcd, 0xac, 0x57, 0x7b, 0x99, 0xc2, 0xa0, 0x9b, 0xd6, 0x3a, - 0x71, 0x22, 0x12, 0xb1, 0x22, 0x20, 0xd9, 0x3d, 0xbc, 0xaa, 0x41, 0xd8, 0xc4, 0x63, 0x42, 0x39, - 0xf1, 0xe3, 0x59, 0xdf, 0x23, 0x41, 0xc2, 0xbb, 0x99, 0x8f, 0x50, 0x5e, 0x5b, 0x5c, 0x35, 0x89, - 0x6a, 0xa1, 0x9c, 0x01, 0xe0, 0x2c, 0x7b, 0xf4, 0x8b, 0x16, 0x8c, 0x3a, 0x77, 0x63, 0x5d, 0xd8, - 0x4e, 0x44, 0x3a, 0x1d, 0x71, 0x93, 0x4a, 0xd5, 0xca, 0xe3, 0x27, 0xac, 0xa9, 0x26, 0x9c, 0x66, - 0x8a, 0xbe, 0x61, 0x01, 0x22, 0xdb, 0xc4, 0x95, 0xb1, 0x58, 0xa2, 0x2f, 0x83, 0x79, 0x18, 0x76, - 0x97, 0x3a, 0xe8, 0x72, 0xa9, 0xde, 0xd9, 0x8e, 0xbb, 0xf4, 0xc1, 0xfe, 0x27, 0x45, 0xb5, 0xa0, - 0x74, 0xf8, 0x9f, 0x63, 0x64, 0xe6, 0x58, 0x87, 0xcf, 0xcc, 0xd1, 0x0e, 0xea, 0x8e, 0xec, 0x9c, - 0x74, 0x22, 0x44, 0xe1, 0x21, 0x25, 0x42, 0xfc, 0xbc, 0x95, 0xaa, 0x21, 0x31, 0x7c, 0xe1, 0xb5, - 0x7c, 0x43, 0x0f, 0xa7, 0x78, 0x78, 0x44, 0x46, 0xba, 0xa7, 0x63, 0x26, 0xa8, 0x34, 0x35, 0xd0, - 0x0e, 0x24, 0x0d, 0xff, 0x7d, 0x11, 0x86, 0x8d, 0x9d, 0xb4, 0xab, 0x5a, 0x64, 0x3d, 0x62, 0x6a, - 0x51, 0xe1, 0x00, 0x6a, 0xd1, 0xcf, 0x41, 0xc5, 0x95, 0x52, 0x3e, 0x9f, 0x2a, 0x8a, 0xd9, 0xbd, - 0x43, 0x0b, 0x7a, 0xd5, 0x84, 0x35, 0x4f, 0x34, 0x9f, 0xca, 0x4d, 0x10, 0x3b, 0xc4, 0x00, 0xdb, - 0x21, 0xba, 0x25, 0x0f, 0x88, 0x9d, 0xa2, 0xf3, 0x19, 0x56, 0x6a, 0xa4, 0xe5, 0x89, 0xf7, 0x92, - 0x01, 0xc2, 0xbc, 0xd4, 0xc8, 0xca, 0x82, 0x6c, 0xc6, 0x26, 0x8e, 0xfd, 0x5d, 0x4b, 0x7d, 0xdc, - 0x07, 0x90, 0xeb, 0x7b, 0x3b, 0x9d, 0xeb, 0x7b, 0x29, 0x97, 0x61, 0xee, 0x91, 0xe4, 0x7b, 0x1d, - 0x86, 0x66, 0xc3, 0x66, 0xd3, 0x09, 0x6a, 0xe8, 0x47, 0x61, 0xc8, 0xe5, 0x3f, 0xc5, 0x39, 0x0a, - 0xf3, 0xc6, 0x09, 0x28, 0x96, 0x30, 0xf4, 0x24, 0x0c, 0x38, 0x51, 0x43, 0x9e, 0x9d, 0xb0, 0x80, - 0x8e, 0x99, 0xa8, 0x11, 0x63, 0xd6, 0x6a, 0xbf, 0x5d, 0x04, 0x98, 0x0d, 0x9b, 0x2d, 0x27, 0x22, - 0xb5, 0xb5, 0x90, 0x55, 0x71, 0x3a, 0x56, 0x1f, 0x96, 0x36, 0x96, 0x1e, 0x65, 0x3f, 0x96, 0xe1, - 0xcb, 0x28, 0x3e, 0x68, 0x5f, 0xc6, 0x97, 0x2d, 0x40, 0xf4, 0x8b, 0x84, 0x01, 0x09, 0x12, 0xed, - 0x9c, 0x9d, 0x86, 0x8a, 0x2b, 0x5b, 0x85, 0xd6, 0xa2, 0xd7, 0x9f, 0x04, 0x60, 0x8d, 0xd3, 0x87, - 0xf9, 0xf9, 0xb4, 0x14, 0x8e, 0xc5, 0x74, 0x0c, 0x24, 0x13, 0xa9, 0x42, 0x56, 0xda, 0x7f, 0x50, - 0x80, 0xc7, 0xf8, 0x7e, 0xb7, 0xe4, 0x04, 0x4e, 0x83, 0x34, 0x69, 0xaf, 0xfa, 0x75, 0xb7, 0xbb, - 0xd4, 0xee, 0xf1, 0x64, 0x4c, 0xe3, 0x51, 0x17, 0x06, 0x9f, 0xd0, 0x7c, 0x0a, 0x2f, 0x04, 0x5e, - 0x82, 0x19, 0x71, 0x14, 0x43, 0x59, 0xd6, 0xe4, 0x15, 0x82, 0x2e, 0x27, 0x46, 0x6a, 0xcd, 0x8b, - 0x4d, 0x89, 0x60, 0xc5, 0x88, 0x6a, 0x85, 0x7e, 0xe8, 0x6e, 0x62, 0xd2, 0x0a, 0x99, 0x50, 0x33, - 0x42, 0xca, 0x16, 0x45, 0x3b, 0x56, 0x18, 0xf6, 0x1f, 0x58, 0x90, 0x15, 0xf7, 0x46, 0xbd, 0x1a, - 0xeb, 0xbe, 0xf5, 0x6a, 0x0e, 0x50, 0x30, 0xe6, 0xa7, 0x61, 0xd8, 0x49, 0xe8, 0x0e, 0xcd, 0x6d, - 0xda, 0xe2, 0xe1, 0x8e, 0xe8, 0x97, 0xc2, 0x9a, 0x57, 0xf7, 0x98, 0x2d, 0x6b, 0x92, 0xb3, 0xff, - 0xc7, 0x00, 0x8c, 0x77, 0xc4, 0xa9, 0xa3, 0x8b, 0x30, 0xe2, 0x8a, 0xe9, 0xd1, 0xc2, 0xa4, 0x2e, - 0x5e, 0xc6, 0x88, 0x73, 0xd2, 0x30, 0x9c, 0xc2, 0xec, 0x63, 0x82, 0x2e, 0xc0, 0xa9, 0x88, 0x5a, - 0xd1, 0x6d, 0x32, 0x53, 0x4f, 0x48, 0xb4, 0x4a, 0xdc, 0x30, 0xa8, 0xf1, 0xaa, 0x4a, 0xc5, 0xea, - 0xe3, 0x7b, 0xbb, 0x93, 0xa7, 0x70, 0x27, 0x18, 0x77, 0x7b, 0x06, 0xb5, 0x60, 0xd4, 0x37, 0x15, - 0x2c, 0xa1, 0x5d, 0x1f, 0x4a, 0x37, 0x53, 0x1b, 0x70, 0xaa, 0x19, 0xa7, 0x19, 0xa4, 0xb5, 0xb4, - 0xd2, 0x43, 0xd2, 0xd2, 0x7e, 0x41, 0x6b, 0x69, 0xdc, 0x97, 0xfc, 0x7a, 0xce, 0x79, 0x0a, 0xc7, - 0xad, 0xa6, 0xbd, 0x0a, 0x65, 0x19, 0x67, 0xd3, 0x57, 0x7c, 0x8a, 0x49, 0xa7, 0x87, 0x44, 0xbb, - 0x57, 0x80, 0x2e, 0x1a, 0x3e, 0x5d, 0x67, 0x7a, 0x3b, 0x4d, 0xad, 0xb3, 0x83, 0x6d, 0xa9, 0x68, - 0x9b, 0xc7, 0x18, 0xf1, 0x8d, 0xe3, 0x93, 0x79, 0x5b, 0x28, 0x3a, 0xec, 0x48, 0x05, 0xa4, 0xab, - 0xd0, 0xa3, 0x0b, 0x00, 0x5a, 0x0b, 0x12, 0xe1, 0xc6, 0xca, 0x85, 0xa9, 0x95, 0x25, 0x6c, 0x60, - 0x51, 0x83, 0xd5, 0x0b, 0xe2, 0xc4, 0xf1, 0xfd, 0x2b, 0x5e, 0x90, 0x88, 0x93, 0x37, 0xb5, 0x43, - 0x2e, 0x68, 0x10, 0x36, 0xf1, 0xce, 0x7e, 0xcc, 0xf8, 0x2e, 0x07, 0xf9, 0x9e, 0x1b, 0xf0, 0xc4, - 0xbc, 0x97, 0xa8, 0x20, 0x79, 0x35, 0x8f, 0xa8, 0x92, 0xa3, 0x92, 0x3e, 0xac, 0x9e, 0x49, 0x1f, - 0x46, 0x90, 0x7a, 0x21, 0x1d, 0x53, 0x9f, 0x0d, 0x52, 0xb7, 0x2f, 0xc2, 0xe9, 0x79, 0x2f, 0xb9, - 0xec, 0xf9, 0xe4, 0x80, 0x4c, 0xec, 0xdf, 0x1f, 0x84, 0x11, 0x33, 0x29, 0xe9, 0x20, 0x79, 0x2b, - 0x5f, 0xa5, 0x7a, 0x8c, 0x78, 0x3b, 0x4f, 0x39, 0x80, 0x6e, 0x1d, 0x39, 0x43, 0xaa, 0xfb, 0x88, - 0x19, 0xaa, 0x8c, 0xe6, 0x89, 0xcd, 0x0e, 0xa0, 0xbb, 0x50, 0xaa, 0xb3, 0x20, 0xea, 0x62, 0x1e, - 0x5e, 0xf2, 0x6e, 0x23, 0xaa, 0x97, 0x19, 0x0f, 0xc3, 0xe6, 0xfc, 0xe8, 0x0e, 0x19, 0xa5, 0x33, - 0x73, 0x8c, 0xe8, 0x42, 0x91, 0x93, 0xa3, 0x30, 0x7a, 0x89, 0xfa, 0xd2, 0x21, 0x44, 0x7d, 0x4a, - 0xf0, 0x0e, 0x3e, 0x24, 0xc1, 0xcb, 0x02, 0xe2, 0x93, 0x0d, 0xa6, 0xbf, 0x89, 0x70, 0xe8, 0x21, - 0x36, 0x08, 0x46, 0x40, 0x7c, 0x0a, 0x8c, 0xb3, 0xf8, 0xe8, 0xb3, 0x4a, 0x74, 0x97, 0xf3, 0x38, - 0xb4, 0x34, 0x67, 0xf4, 0x71, 0x4b, 0xed, 0x2f, 0x17, 0x60, 0x6c, 0x3e, 0x68, 0xaf, 0xcc, 0xaf, - 0xb4, 0xd7, 0x7d, 0xcf, 0xbd, 0x46, 0x76, 0xa8, 0x68, 0xde, 0x24, 0x3b, 0x0b, 0x73, 0x62, 0x05, - 0xa9, 0x39, 0x73, 0x8d, 0x36, 0x62, 0x0e, 0xa3, 0xc2, 0xa8, 0xee, 0x05, 0x0d, 0x12, 0xb5, 0x22, - 0x4f, 0x9c, 0x27, 0x1a, 0xc2, 0xe8, 0xb2, 0x06, 0x61, 0x13, 0x8f, 0xd2, 0x0e, 0xef, 0x06, 0x24, - 0xca, 0x2a, 0xb2, 0xcb, 0xb4, 0x11, 0x73, 0x18, 0x45, 0x4a, 0xa2, 0x76, 0x9c, 0x88, 0xc9, 0xa8, - 0x90, 0xd6, 0x68, 0x23, 0xe6, 0x30, 0xba, 0xd2, 0xe3, 0xf6, 0x3a, 0x0b, 0x42, 0xc8, 0xc4, 0x5e, - 0xaf, 0xf2, 0x66, 0x2c, 0xe1, 0x14, 0x75, 0x93, 0xec, 0xcc, 0x51, 0x93, 0x32, 0x93, 0x1d, 0x71, - 0x8d, 0x37, 0x63, 0x09, 0x67, 0x15, 0xa8, 0xd2, 0xc3, 0xf1, 0x03, 0x57, 0x81, 0x2a, 0xdd, 0xfd, - 0x1e, 0xc6, 0xe9, 0x6f, 0x58, 0x30, 0x62, 0x86, 0x0e, 0xa1, 0x46, 0x46, 0xc7, 0x5d, 0xee, 0xa8, - 0x26, 0xf8, 0x93, 0xdd, 0xae, 0x4e, 0x69, 0x78, 0x49, 0xd8, 0x8a, 0x9f, 0x27, 0x41, 0xc3, 0x0b, - 0x08, 0xf3, 0x08, 0xf3, 0x90, 0xa3, 0x54, 0x5c, 0xd2, 0x6c, 0x58, 0x23, 0x87, 0x50, 0x92, 0xed, - 0x5b, 0x30, 0xde, 0x91, 0x12, 0xd3, 0x87, 0x6a, 0xb1, 0x6f, 0x42, 0xa2, 0x8d, 0x61, 0x98, 0x12, - 0x16, 0x15, 0x24, 0xd0, 0x2c, 0x8c, 0xf3, 0x85, 0x44, 0x39, 0xad, 0xba, 0x1b, 0xa4, 0xa9, 0xd2, - 0x9c, 0xd8, 0xe1, 0xf5, 0xcd, 0x2c, 0x10, 0x77, 0xe2, 0xdb, 0x5f, 0xb1, 0x60, 0x34, 0x95, 0xa5, - 0x94, 0x93, 0x12, 0xc4, 0x56, 0x5a, 0xc8, 0x22, 0xd9, 0x58, 0x38, 0x6f, 0x91, 0x6d, 0xa6, 0x7a, - 0xa5, 0x69, 0x10, 0x36, 0xf1, 0xec, 0x77, 0x0a, 0x50, 0x96, 0xd1, 0x00, 0x7d, 0x74, 0xe5, 0x4b, - 0x16, 0x8c, 0x2a, 0x87, 0x01, 0x3b, 0x89, 0x2a, 0xe4, 0x11, 0xb7, 0x4e, 0x7b, 0xa0, 0x42, 0x2d, - 0x83, 0x7a, 0xa8, 0x35, 0x72, 0x6c, 0x32, 0xc3, 0x69, 0xde, 0xe8, 0x26, 0x40, 0xbc, 0x13, 0x27, - 0xa4, 0x69, 0x9c, 0x89, 0xd9, 0xc6, 0x8a, 0x9b, 0x72, 0xc3, 0x88, 0xd0, 0xf5, 0x75, 0x3d, 0xac, - 0x91, 0x55, 0x85, 0xa9, 0x55, 0x28, 0xdd, 0x86, 0x0d, 0x4a, 0xf6, 0xdf, 0x2f, 0xc0, 0xc9, 0x6c, - 0x97, 0xd0, 0xeb, 0x30, 0x22, 0xb9, 0x1b, 0xd7, 0xc0, 0xc8, 0x10, 0x88, 0x11, 0x6c, 0xc0, 0xee, - 0xed, 0x4e, 0x4e, 0x76, 0x5e, 0xc3, 0x33, 0x65, 0xa2, 0xe0, 0x14, 0x31, 0xee, 0xb5, 0x11, 0xee, - 0xc5, 0xea, 0xce, 0x4c, 0xab, 0x25, 0x5c, 0x2f, 0x86, 0xd7, 0xc6, 0x84, 0xe2, 0x0c, 0x36, 0x5a, - 0x81, 0xd3, 0x46, 0xcb, 0x75, 0xe2, 0x35, 0x36, 0xd6, 0xc3, 0x48, 0x5a, 0x56, 0x4f, 0xea, 0x20, - 0xa5, 0x4e, 0x1c, 0xdc, 0xf5, 0x49, 0xba, 0xdb, 0xbb, 0x4e, 0xcb, 0x71, 0xbd, 0x64, 0x47, 0x1c, - 0xf2, 0x29, 0xd9, 0x34, 0x2b, 0xda, 0xb1, 0xc2, 0xb0, 0x97, 0x60, 0xa0, 0xcf, 0x19, 0xd4, 0x97, - 0x46, 0xff, 0x2a, 0x94, 0x29, 0x39, 0xa9, 0xde, 0xe5, 0x41, 0x32, 0x84, 0xb2, 0xac, 0xe4, 0x8e, - 0x6c, 0x28, 0x7a, 0x8e, 0x74, 0x8c, 0xa9, 0xd7, 0x5a, 0x88, 0xe3, 0x36, 0x33, 0x92, 0x29, 0x10, - 0x3d, 0x0d, 0x45, 0xb2, 0xdd, 0xca, 0x7a, 0xc0, 0x2e, 0x6d, 0xb7, 0xbc, 0x88, 0xc4, 0x14, 0x89, - 0x6c, 0xb7, 0xd0, 0x59, 0x28, 0x78, 0x35, 0xb1, 0x49, 0x81, 0xc0, 0x29, 0x2c, 0xcc, 0xe1, 0x82, - 0x57, 0xb3, 0xb7, 0xa1, 0xa2, 0x4a, 0xc7, 0xa3, 0x4d, 0x29, 0xbb, 0xad, 0x3c, 0xc2, 0x77, 0x24, - 0xdd, 0x1e, 0x52, 0xbb, 0x0d, 0xa0, 0x73, 0xc2, 0xf2, 0x92, 0x2f, 0xe7, 0x61, 0xc0, 0x0d, 0x45, - 0x2a, 0x69, 0x59, 0x93, 0x61, 0x42, 0x9b, 0x41, 0xec, 0x5b, 0x30, 0x76, 0x2d, 0x08, 0xef, 0xb2, - 0xda, 0xb8, 0xac, 0x72, 0x0f, 0x25, 0x5c, 0xa7, 0x3f, 0xb2, 0x2a, 0x02, 0x83, 0x62, 0x0e, 0x53, - 0xf5, 0x62, 0x0a, 0xbd, 0xea, 0xc5, 0xd8, 0x9f, 0xb3, 0xe0, 0xa4, 0xca, 0x6c, 0x91, 0xd2, 0xf8, - 0x22, 0x8c, 0xac, 0xb7, 0x3d, 0xbf, 0x26, 0xeb, 0x01, 0x65, 0x8e, 0x29, 0xaa, 0x06, 0x0c, 0xa7, - 0x30, 0xa9, 0x51, 0xb5, 0xee, 0x05, 0x4e, 0xb4, 0xb3, 0xa2, 0xc5, 0xbf, 0x92, 0x08, 0x55, 0x05, - 0xc1, 0x06, 0x96, 0xfd, 0x25, 0xb3, 0x0b, 0x22, 0x97, 0xa6, 0x8f, 0x91, 0xbd, 0x01, 0x25, 0x57, - 0x39, 0x52, 0x0f, 0x55, 0xb3, 0x4c, 0xa5, 0x31, 0xb3, 0xc3, 0x74, 0x4e, 0xcd, 0xfe, 0x67, 0x05, - 0x18, 0x4d, 0x15, 0x92, 0x40, 0x3e, 0x94, 0x89, 0xcf, 0x8e, 0xf2, 0xe4, 0x14, 0x3b, 0x6a, 0x89, - 0x3a, 0xb5, 0x2c, 0x2e, 0x09, 0xba, 0x58, 0x71, 0x78, 0x34, 0xfc, 0x55, 0x17, 0x61, 0x44, 0x76, - 0xe8, 0x93, 0x4e, 0xd3, 0x17, 0xab, 0x50, 0x4d, 0x80, 0x4b, 0x06, 0x0c, 0xa7, 0x30, 0xed, 0x3f, - 0x2c, 0xc2, 0x04, 0x3f, 0xfb, 0xac, 0xa9, 0x90, 0x92, 0x25, 0xa9, 0x65, 0xfd, 0x15, 0x5d, 0xee, - 0x85, 0x0f, 0xe4, 0xfa, 0x51, 0xcb, 0xb3, 0x76, 0x67, 0xd4, 0x57, 0xb0, 0xc3, 0xaf, 0x67, 0x82, - 0x1d, 0xf8, 0x66, 0xdb, 0x38, 0xa6, 0x1e, 0xfd, 0x60, 0x45, 0x3f, 0xfc, 0x9d, 0x02, 0x9c, 0xc8, - 0xd4, 0xbe, 0x45, 0x6f, 0xa7, 0xab, 0xdb, 0x59, 0x79, 0x9c, 0x90, 0xdd, 0xb7, 0x02, 0xeb, 0xc1, - 0x6a, 0xdc, 0x3d, 0xa4, 0xa5, 0x62, 0xff, 0x51, 0x01, 0xc6, 0xd2, 0x45, 0x7b, 0x1f, 0xc1, 0x91, - 0xfa, 0x08, 0x54, 0x58, 0x29, 0x4c, 0x76, 0xd1, 0x10, 0x3f, 0x88, 0xe3, 0x15, 0x1b, 0x65, 0x23, - 0xd6, 0xf0, 0x47, 0xa2, 0x74, 0xa0, 0xfd, 0x77, 0x2d, 0x38, 0xc3, 0xdf, 0x32, 0x3b, 0x0f, 0xff, - 0x6a, 0xb7, 0xd1, 0x7d, 0x23, 0xdf, 0x0e, 0x66, 0xca, 0x14, 0xed, 0x37, 0xbe, 0xec, 0x82, 0x13, - 0xd1, 0xdb, 0xf4, 0x54, 0x78, 0x04, 0x3b, 0x7b, 0xa0, 0xc9, 0x60, 0xff, 0x51, 0x11, 0xf4, 0x9d, - 0x2e, 0xc8, 0x13, 0x59, 0x3a, 0xb9, 0x94, 0x6b, 0x5a, 0xdd, 0x09, 0x5c, 0x7d, 0x7b, 0x4c, 0x39, - 0x93, 0xa4, 0xf3, 0xcb, 0x16, 0x0c, 0x7b, 0x81, 0x97, 0x78, 0x0e, 0x53, 0x9e, 0xf3, 0xb9, 0x93, - 0x42, 0xb1, 0x5b, 0xe0, 0x94, 0xc3, 0xc8, 0x3c, 0xbd, 0x55, 0xcc, 0xb0, 0xc9, 0x19, 0x7d, 0x5a, - 0xc4, 0x23, 0x16, 0x73, 0xcb, 0x2f, 0x2b, 0x67, 0x82, 0x10, 0x5b, 0x50, 0x8a, 0x48, 0x12, 0xe5, - 0x94, 0x96, 0x89, 0x29, 0x29, 0x55, 0x9d, 0x4f, 0xdf, 0xae, 0x47, 0x9b, 0x31, 0x67, 0x64, 0xc7, - 0x80, 0x3a, 0xc7, 0xe2, 0x80, 0xb1, 0x5e, 0xd3, 0x50, 0x71, 0xda, 0x49, 0xd8, 0xa4, 0xc3, 0x24, - 0x0e, 0x98, 0x75, 0x34, 0x9b, 0x04, 0x60, 0x8d, 0x63, 0xbf, 0x5d, 0x82, 0x4c, 0xda, 0x0c, 0xda, - 0x36, 0xef, 0x23, 0xb2, 0xf2, 0xbd, 0x8f, 0x48, 0x75, 0xa6, 0xdb, 0x9d, 0x44, 0xa8, 0x01, 0xa5, - 0xd6, 0x86, 0x13, 0x4b, 0xdd, 0xf8, 0x55, 0x39, 0x4c, 0x2b, 0xb4, 0xf1, 0xde, 0xee, 0xe4, 0x4f, - 0xf5, 0x77, 0xd6, 0x42, 0xe7, 0xea, 0x34, 0xcf, 0x42, 0xd7, 0xac, 0x19, 0x0d, 0xcc, 0xe9, 0x1f, - 0xe4, 0x56, 0x8e, 0xcf, 0x8b, 0x7a, 0xa9, 0x98, 0xc4, 0x6d, 0x3f, 0x11, 0xb3, 0xe1, 0xd5, 0x1c, - 0x57, 0x19, 0x27, 0xac, 0x13, 0x3e, 0xf9, 0x7f, 0x6c, 0x30, 0x45, 0xaf, 0x43, 0x25, 0x4e, 0x9c, - 0x28, 0x39, 0x64, 0x8a, 0x96, 0x1a, 0xf4, 0x55, 0x49, 0x04, 0x6b, 0x7a, 0xe8, 0x35, 0x56, 0xbd, - 0xce, 0x8b, 0x37, 0x0e, 0x19, 0x46, 0x2c, 0x2b, 0xdd, 0x09, 0x0a, 0xd8, 0xa0, 0x46, 0x4d, 0x0f, - 0x36, 0xb7, 0x79, 0xec, 0x4c, 0x99, 0xd9, 0x96, 0x4a, 0x14, 0x62, 0x05, 0xc1, 0x06, 0x96, 0xfd, - 0x63, 0x90, 0xce, 0x58, 0x46, 0x93, 0x32, 0x41, 0x9a, 0x9f, 0x3d, 0xb1, 0x70, 0xe0, 0x54, 0x2e, - 0xf3, 0xef, 0x59, 0x60, 0xa6, 0x55, 0xa3, 0x3b, 0x3c, 0x7f, 0xdb, 0xca, 0xc3, 0x5f, 0x60, 0xd0, - 0x9d, 0x5a, 0x72, 0x5a, 0x19, 0xc7, 0x95, 0x4c, 0xe2, 0x3e, 0xfb, 0x31, 0x28, 0x4b, 0xe8, 0x81, - 0x94, 0xba, 0xcf, 0xc2, 0xa9, 0xec, 0x6d, 0x8d, 0xe2, 0xac, 0xb9, 0x11, 0x85, 0xed, 0x56, 0xd6, - 0x90, 0x64, 0xb7, 0xf9, 0x61, 0x0e, 0xa3, 0xe6, 0xd8, 0xa6, 0x17, 0xd4, 0xb2, 0x86, 0xe4, 0x35, - 0x2f, 0xa8, 0x61, 0x06, 0xe9, 0xe3, 0x56, 0xaa, 0x7f, 0x6a, 0xc1, 0xf9, 0xfd, 0x2e, 0x95, 0x44, - 0x4f, 0xc2, 0xc0, 0x5d, 0x27, 0x92, 0xa5, 0x3f, 0x99, 0xa0, 0xbc, 0xe5, 0x44, 0x01, 0x66, 0xad, - 0x68, 0x07, 0x06, 0x79, 0xfe, 0xaf, 0xd0, 0xd6, 0x5f, 0xcd, 0xf7, 0x8a, 0xcb, 0x6b, 0xc4, 0x30, - 0x17, 0x78, 0xee, 0x31, 0x16, 0x0c, 0xed, 0xef, 0x59, 0x80, 0x96, 0xb7, 0x48, 0x14, 0x79, 0x35, - 0x23, 0x63, 0x19, 0xbd, 0x08, 0x23, 0xb7, 0x57, 0x97, 0xaf, 0xaf, 0x84, 0x5e, 0xc0, 0x2a, 0x18, - 0x18, 0x49, 0x5a, 0x57, 0x8d, 0x76, 0x9c, 0xc2, 0x42, 0xb3, 0x30, 0x7e, 0xfb, 0x0e, 0x35, 0x7e, - 0xcd, 0xa2, 0xe0, 0x05, 0x7d, 0xdc, 0x79, 0xf5, 0xd5, 0x0c, 0x10, 0x77, 0xe2, 0xa3, 0x65, 0x38, - 0xd3, 0xe4, 0xe6, 0x06, 0xaf, 0xe5, 0xcb, 0x6d, 0x0f, 0x95, 0xa3, 0xf1, 0xc4, 0xde, 0xee, 0xe4, - 0x99, 0xa5, 0x6e, 0x08, 0xb8, 0xfb, 0x73, 0xf6, 0xbb, 0x05, 0x18, 0x36, 0x2e, 0x66, 0xed, 0xc3, - 0x06, 0xcf, 0x64, 0x9d, 0x14, 0xfa, 0xcc, 0x3a, 0x79, 0x16, 0xca, 0xad, 0xd0, 0xf7, 0x5c, 0x4f, - 0xd5, 0xa4, 0x61, 0xa5, 0x13, 0x57, 0x44, 0x1b, 0x56, 0x50, 0x74, 0x17, 0x2a, 0xea, 0xb2, 0x42, - 0x91, 0x38, 0x9b, 0xd7, 0xf9, 0x8e, 0x92, 0x54, 0xfa, 0x12, 0x42, 0xcd, 0x0b, 0xd9, 0x30, 0xc8, - 0x66, 0xbe, 0x0c, 0xa1, 0x63, 0x29, 0x48, 0x6c, 0x49, 0xc4, 0x58, 0x40, 0xec, 0x2f, 0x0c, 0xc1, - 0xe9, 0x6e, 0xe5, 0xfe, 0xd0, 0x67, 0x60, 0x90, 0xf7, 0x31, 0x9f, 0x8a, 0xb2, 0xdd, 0x78, 0xcc, - 0x33, 0x82, 0xa2, 0x5b, 0xec, 0x37, 0x16, 0x3c, 0x05, 0x77, 0xdf, 0x59, 0x17, 0x3a, 0xd3, 0xf1, - 0x70, 0x5f, 0x74, 0x34, 0xf7, 0x45, 0x87, 0x73, 0xf7, 0x9d, 0x75, 0xb4, 0x0d, 0xa5, 0x86, 0x97, - 0x10, 0x47, 0x58, 0x0e, 0xb7, 0x8e, 0x85, 0x39, 0x71, 0xb8, 0x68, 0x66, 0x3f, 0x31, 0x67, 0x88, - 0xbe, 0x69, 0xc1, 0x89, 0xf5, 0x74, 0x46, 0x97, 0xd8, 0x42, 0x9d, 0x63, 0x28, 0xe9, 0x98, 0x66, - 0xc4, 0xab, 0x6d, 0x67, 0x1a, 0x71, 0xb6, 0x3b, 0xe8, 0x17, 0x2c, 0x18, 0xaa, 0x7b, 0xbe, 0x51, - 0xaf, 0xec, 0x18, 0x3e, 0xce, 0x65, 0xc6, 0x40, 0xab, 0x19, 0xfc, 0x7f, 0x8c, 0x25, 0xe7, 0x5e, - 0xee, 0xe3, 0xc1, 0xa3, 0xba, 0x8f, 0x87, 0x1e, 0x92, 0xad, 0xf8, 0x2b, 0x05, 0x78, 0xba, 0x8f, - 0x6f, 0x64, 0x26, 0xe1, 0x58, 0xfb, 0x24, 0xe1, 0x9c, 0x87, 0x81, 0x88, 0xb4, 0xc2, 0xec, 0x7e, - 0xc7, 0x22, 0xd5, 0x18, 0x04, 0x3d, 0x05, 0x45, 0xa7, 0xe5, 0x89, 0xed, 0x4e, 0x6d, 0xd2, 0x33, - 0x2b, 0x0b, 0x98, 0xb6, 0xd3, 0x2f, 0x5d, 0x59, 0x97, 0x79, 0x86, 0xf9, 0x54, 0xbe, 0xef, 0x95, - 0xb6, 0xc8, 0xad, 0x37, 0x05, 0xc5, 0x9a, 0xaf, 0xfd, 0xd7, 0x2c, 0x38, 0xdb, 0x7b, 0x8a, 0xa0, - 0x17, 0x60, 0x78, 0x3d, 0x72, 0x02, 0x77, 0x83, 0x5d, 0x13, 0x21, 0x07, 0x85, 0xe5, 0x5e, 0xe8, - 0x66, 0x6c, 0xe2, 0xd0, 0x9d, 0x8b, 0x97, 0x06, 0x35, 0x30, 0x64, 0xa8, 0x35, 0xdd, 0xb9, 0xd6, - 0xb2, 0x40, 0xdc, 0x89, 0x6f, 0xff, 0x61, 0xa1, 0x7b, 0xb7, 0xb8, 0x28, 0x39, 0xc8, 0x77, 0x12, - 0x5f, 0xa1, 0xd0, 0xe3, 0x2b, 0xdc, 0x81, 0x72, 0xc2, 0xf2, 0x47, 0x48, 0x5d, 0xc8, 0xa3, 0xdc, - 0xf2, 0x33, 0xd9, 0x8e, 0xb5, 0x26, 0x88, 0x63, 0xc5, 0x86, 0x6e, 0x1c, 0xbe, 0x2e, 0x98, 0x26, - 0x36, 0x8e, 0xcc, 0xd1, 0xe3, 0x1c, 0x9c, 0x34, 0xea, 0xbf, 0xf2, 0xf0, 0x79, 0xee, 0x41, 0x57, - 0x39, 0x65, 0x2b, 0x19, 0x38, 0xee, 0x78, 0xc2, 0xfe, 0x8d, 0x02, 0x3c, 0xd1, 0x53, 0x3e, 0x6a, - 0x37, 0xbf, 0x75, 0x1f, 0x37, 0xff, 0x91, 0xa7, 0xb9, 0x39, 0xc0, 0x03, 0x0f, 0x66, 0x80, 0x9f, - 0x83, 0xb2, 0x17, 0xc4, 0xc4, 0x6d, 0x47, 0x7c, 0xd0, 0x8c, 0x60, 0xd2, 0x05, 0xd1, 0x8e, 0x15, - 0x86, 0xfd, 0xc7, 0xbd, 0xa7, 0x1a, 0xdd, 0x2b, 0x7f, 0x68, 0x47, 0xe9, 0x65, 0x18, 0x75, 0x5a, - 0x2d, 0x8e, 0xc7, 0x5c, 0xaa, 0x99, 0x2c, 0xd1, 0x19, 0x13, 0x88, 0xd3, 0xb8, 0xc6, 0x1c, 0x1e, - 0xec, 0x35, 0x87, 0xed, 0x3f, 0xb3, 0xa0, 0x82, 0x49, 0x9d, 0xaf, 0x77, 0x74, 0x5b, 0x0c, 0x91, - 0x95, 0x47, 0xf9, 0x16, 0x3a, 0xb0, 0xb1, 0xc7, 0xca, 0x9a, 0x74, 0x1b, 0xec, 0xce, 0x5a, 0xc6, - 0x85, 0x03, 0xd5, 0x32, 0x56, 0xd5, 0x6c, 0x8b, 0xbd, 0xab, 0xd9, 0xda, 0xef, 0x0e, 0xd1, 0xd7, - 0x6b, 0x85, 0xb3, 0x11, 0xa9, 0xc5, 0xf4, 0xfb, 0xb6, 0x23, 0x3f, 0x7b, 0x9f, 0xec, 0x0d, 0xbc, - 0x88, 0x69, 0x7b, 0xea, 0xdc, 0xa4, 0x70, 0xa0, 0x1c, 0xb9, 0xe2, 0xbe, 0x39, 0x72, 0x2f, 0xc3, - 0x68, 0x1c, 0x6f, 0xac, 0x44, 0xde, 0x96, 0x93, 0x50, 0x03, 0x45, 0x44, 0xe4, 0xe8, 0xbc, 0x96, - 0xd5, 0x2b, 0x1a, 0x88, 0xd3, 0xb8, 0x68, 0x1e, 0xc6, 0x75, 0xa6, 0x1a, 0x89, 0x12, 0x16, 0x80, - 0xc3, 0x67, 0x82, 0x4a, 0x2b, 0xd1, 0xb9, 0x6d, 0x02, 0x01, 0x77, 0x3e, 0x43, 0x25, 0x56, 0xaa, - 0x91, 0x76, 0x64, 0x30, 0x2d, 0xb1, 0x52, 0x74, 0x68, 0x5f, 0x3a, 0x9e, 0x40, 0x4b, 0x70, 0x8a, - 0x4f, 0x0c, 0x76, 0x81, 0xb9, 0x7a, 0xa3, 0xa1, 0x74, 0xd9, 0x8c, 0xf9, 0x4e, 0x14, 0xdc, 0xed, - 0x39, 0x6a, 0x7d, 0xa8, 0xe6, 0x85, 0x39, 0x61, 0xf2, 0x2b, 0xeb, 0x43, 0x91, 0x59, 0xa8, 0x61, - 0x13, 0x0f, 0x7d, 0x12, 0x1e, 0xd7, 0x7f, 0x79, 0x94, 0x26, 0x3f, 0x07, 0x9b, 0x13, 0x49, 0xc0, - 0xaa, 0x76, 0xea, 0x7c, 0x57, 0xb4, 0x1a, 0xee, 0xf5, 0x3c, 0x5a, 0x87, 0xb3, 0x0a, 0x74, 0x89, - 0x9a, 0x7a, 0xad, 0xc8, 0x8b, 0x49, 0xd5, 0x89, 0xc9, 0x8d, 0xc8, 0x67, 0x69, 0xc3, 0x15, 0x7d, - 0x09, 0xc4, 0xbc, 0x97, 0x5c, 0xe9, 0x86, 0x89, 0x17, 0xf1, 0x7d, 0xa8, 0xa0, 0x69, 0xa8, 0x90, - 0xc0, 0x59, 0xf7, 0xc9, 0xf2, 0xec, 0x02, 0x4b, 0x26, 0x36, 0x8e, 0xdd, 0x2e, 0x49, 0x00, 0xd6, - 0x38, 0xca, 0x09, 0x3c, 0xd2, 0xf3, 0xd2, 0x90, 0x15, 0x38, 0xdd, 0x70, 0x5b, 0x54, 0x9b, 0xf0, - 0x5c, 0x32, 0xe3, 0x32, 0x47, 0x28, 0xfd, 0x30, 0xbc, 0x9e, 0x89, 0x8a, 0x70, 0x98, 0x9f, 0x5d, - 0xe9, 0xc0, 0xc1, 0x5d, 0x9f, 0xa4, 0x6b, 0xac, 0x15, 0x85, 0xdb, 0x3b, 0x13, 0xa7, 0xd2, 0x6b, - 0x6c, 0x85, 0x36, 0x62, 0x0e, 0x43, 0x57, 0x01, 0xb1, 0x70, 0x99, 0x2b, 0x49, 0xd2, 0x52, 0xea, - 0xcb, 0xc4, 0x69, 0xf6, 0x4a, 0x67, 0xc5, 0x13, 0xe8, 0x72, 0x07, 0x06, 0xee, 0xf2, 0x94, 0xfd, - 0xa7, 0x16, 0x8c, 0xaa, 0xf5, 0xfa, 0x00, 0x02, 0xc6, 0xfc, 0x74, 0xc0, 0xd8, 0xfc, 0xd1, 0x25, - 0x1e, 0xeb, 0x79, 0x8f, 0xa8, 0x83, 0x2f, 0x0c, 0x03, 0x68, 0xa9, 0xa8, 0x36, 0x24, 0xab, 0xe7, - 0x86, 0xf4, 0xc8, 0x4a, 0xa4, 0x6e, 0x99, 0x83, 0xa5, 0x87, 0x9b, 0x39, 0xb8, 0x0a, 0x67, 0xa4, - 0xba, 0xc0, 0x0f, 0x76, 0xae, 0x84, 0xb1, 0x12, 0x70, 0xe5, 0xea, 0x53, 0x82, 0xd0, 0x99, 0x85, - 0x6e, 0x48, 0xb8, 0xfb, 0xb3, 0x29, 0x2d, 0x65, 0x68, 0x3f, 0x2d, 0x45, 0xaf, 0xe9, 0xc5, 0xba, - 0xac, 0xc4, 0x9a, 0x59, 0xd3, 0x8b, 0x97, 0x57, 0xb1, 0xc6, 0xe9, 0x2e, 0xd8, 0x2b, 0x39, 0x09, - 0x76, 0x38, 0xb0, 0x60, 0x97, 0x22, 0x66, 0xb8, 0xa7, 0x88, 0x91, 0x67, 0x49, 0x23, 0x3d, 0xcf, - 0x92, 0x5e, 0x81, 0x31, 0x2f, 0xd8, 0x20, 0x91, 0x97, 0x90, 0x1a, 0x5b, 0x0b, 0x4c, 0xfc, 0x94, - 0xf5, 0xb6, 0xbe, 0x90, 0x82, 0xe2, 0x0c, 0x76, 0x5a, 0x2e, 0x8e, 0xf5, 0x21, 0x17, 0x7b, 0xec, - 0x46, 0x27, 0xf2, 0xd9, 0x8d, 0x4e, 0x1e, 0x7d, 0x37, 0x1a, 0x3f, 0xd6, 0xdd, 0x08, 0xe5, 0xb2, - 0x1b, 0xf5, 0x25, 0xe8, 0x0d, 0x83, 0xee, 0xf4, 0x3e, 0x06, 0x5d, 0xaf, 0xad, 0xe8, 0xcc, 0xa1, - 0xb7, 0xa2, 0xee, 0xbb, 0xcc, 0x63, 0x87, 0xda, 0x65, 0xbe, 0x58, 0x80, 0x33, 0x5a, 0x0e, 0xd3, - 0xd9, 0xef, 0xd5, 0xa9, 0x24, 0x62, 0xc5, 0xbc, 0x79, 0xec, 0x8f, 0x11, 0xbf, 0xa8, 0x43, 0x21, - 0x15, 0x04, 0x1b, 0x58, 0x2c, 0x0c, 0x90, 0x44, 0xac, 0x6a, 0x53, 0x56, 0x48, 0xcf, 0x8a, 0x76, - 0xac, 0x30, 0xe8, 0xfc, 0xa2, 0xbf, 0x45, 0x68, 0x75, 0xb6, 0x58, 0xc2, 0xac, 0x06, 0x61, 0x13, - 0x0f, 0x3d, 0xcb, 0x99, 0x30, 0x01, 0x41, 0x05, 0xf5, 0x88, 0xb8, 0xa6, 0x46, 0xca, 0x04, 0x05, - 0x95, 0xdd, 0x61, 0xf1, 0x9e, 0xa5, 0xce, 0xee, 0x30, 0x7f, 0xa5, 0xc2, 0xb0, 0xff, 0xa7, 0x05, - 0x4f, 0x74, 0x1d, 0x8a, 0x07, 0xb0, 0xf9, 0x6e, 0xa7, 0x37, 0xdf, 0xd5, 0xbc, 0xcc, 0x0d, 0xe3, - 0x2d, 0x7a, 0x6c, 0xc4, 0xff, 0xce, 0x82, 0x31, 0x8d, 0xff, 0x00, 0x5e, 0xd5, 0x4b, 0xbf, 0x6a, - 0x7e, 0x96, 0x55, 0xa5, 0xe3, 0xdd, 0xfe, 0x94, 0xbd, 0x1b, 0xf7, 0x84, 0xcc, 0xb8, 0xb2, 0x3c, - 0xd4, 0x3e, 0x1e, 0x80, 0x1d, 0x18, 0x64, 0x95, 0x93, 0xe3, 0x7c, 0x3c, 0x32, 0x69, 0xfe, 0x2c, - 0x90, 0x5b, 0x7b, 0x64, 0xd8, 0xdf, 0x18, 0x0b, 0x86, 0xac, 0xa6, 0x98, 0x17, 0x53, 0x69, 0x5e, - 0x13, 0x91, 0x93, 0xba, 0xa6, 0x98, 0x68, 0xc7, 0x0a, 0xc3, 0x6e, 0xc2, 0x44, 0x9a, 0xf8, 0x1c, - 0xa9, 0x33, 0x2f, 0x7f, 0x5f, 0xaf, 0x39, 0x0d, 0x15, 0x87, 0x3d, 0xb5, 0xd8, 0x76, 0xb2, 0x37, - 0x9b, 0xcd, 0x48, 0x00, 0xd6, 0x38, 0xf6, 0xef, 0x58, 0x70, 0xaa, 0xcb, 0xcb, 0xe4, 0x18, 0x31, - 0x9a, 0x68, 0x29, 0xd0, 0x6d, 0xc3, 0xfd, 0x30, 0x0c, 0xd5, 0x48, 0xdd, 0x91, 0x7e, 0x64, 0x43, - 0xe6, 0xce, 0xf1, 0x66, 0x2c, 0xe1, 0xf6, 0x7f, 0xb3, 0xe0, 0x44, 0xba, 0xaf, 0x31, 0x95, 0x9a, - 0xfc, 0x65, 0xe6, 0xbc, 0xd8, 0x0d, 0xb7, 0x48, 0xb4, 0x43, 0xdf, 0x9c, 0xf7, 0x5a, 0x49, 0xcd, - 0x99, 0x0e, 0x0c, 0xdc, 0xe5, 0x29, 0x56, 0x56, 0xa8, 0xa6, 0x46, 0x5b, 0xce, 0x94, 0x9b, 0x79, - 0xce, 0x14, 0xfd, 0x31, 0x4d, 0xf7, 0x93, 0x62, 0x89, 0x4d, 0xfe, 0xf6, 0xf7, 0x06, 0x40, 0x85, - 0x94, 0x33, 0x27, 0x5e, 0x4e, 0x2e, 0xd0, 0x54, 0x11, 0xfc, 0x62, 0x1f, 0x45, 0xf0, 0xe5, 0x64, - 0x18, 0xb8, 0x9f, 0x83, 0x8d, 0x9f, 0x5e, 0x98, 0x87, 0x84, 0xea, 0x0d, 0xd7, 0x34, 0x08, 0x9b, - 0x78, 0xb4, 0x27, 0xbe, 0xb7, 0x45, 0xf8, 0x43, 0x83, 0xe9, 0x9e, 0x2c, 0x4a, 0x00, 0xd6, 0x38, - 0xb4, 0x27, 0x35, 0xaf, 0x5e, 0x17, 0xa6, 0xb8, 0xea, 0x09, 0x1d, 0x1d, 0xcc, 0x20, 0xbc, 0x52, - 0x5c, 0xb8, 0x29, 0xb4, 0x53, 0xa3, 0x52, 0x5c, 0xb8, 0x89, 0x19, 0x84, 0xea, 0x53, 0x41, 0x18, - 0x35, 0xd9, 0xcd, 0x73, 0x35, 0xc5, 0x45, 0x68, 0xa5, 0x4a, 0x9f, 0xba, 0xde, 0x89, 0x82, 0xbb, - 0x3d, 0x47, 0x67, 0x60, 0x2b, 0x22, 0x35, 0xcf, 0x4d, 0x4c, 0x6a, 0x90, 0x9e, 0x81, 0x2b, 0x1d, - 0x18, 0xb8, 0xcb, 0x53, 0x68, 0x06, 0x4e, 0xc8, 0x94, 0x00, 0x99, 0xf0, 0x39, 0x9c, 0x4e, 0x30, - 0xc3, 0x69, 0x30, 0xce, 0xe2, 0x53, 0x69, 0xd3, 0x14, 0xb9, 0xde, 0x4c, 0x89, 0x35, 0xa4, 0x8d, - 0xcc, 0x01, 0xc7, 0x0a, 0xc3, 0xfe, 0x7c, 0x91, 0xee, 0x8e, 0x3d, 0xea, 0x5b, 0x3f, 0x30, 0x97, - 0x7b, 0x7a, 0x46, 0x0e, 0xf4, 0x31, 0x23, 0x5f, 0x84, 0x91, 0xdb, 0x71, 0x18, 0x28, 0x77, 0x76, - 0xa9, 0xa7, 0x3b, 0xdb, 0xc0, 0xea, 0xee, 0xce, 0x1e, 0xcc, 0xcb, 0x9d, 0x3d, 0x74, 0x48, 0x77, - 0xf6, 0xb7, 0x4b, 0xa0, 0x2a, 0xc4, 0x5e, 0x27, 0xc9, 0xdd, 0x30, 0xda, 0xf4, 0x82, 0x06, 0x4b, - 0xa5, 0xf8, 0xa6, 0x05, 0x23, 0x7c, 0xbd, 0x2c, 0x9a, 0xe1, 0xc8, 0xf5, 0x9c, 0x4a, 0x8f, 0xa6, - 0x98, 0x4d, 0xad, 0x19, 0x8c, 0x32, 0x17, 0x9b, 0x98, 0x20, 0x9c, 0xea, 0x11, 0xfa, 0x59, 0x00, - 0x79, 0x6e, 0x59, 0x97, 0x22, 0x73, 0x21, 0x9f, 0xfe, 0x61, 0x52, 0xd7, 0xba, 0xe9, 0x9a, 0x62, - 0x82, 0x0d, 0x86, 0xe8, 0x8b, 0xd9, 0x9b, 0x39, 0x3f, 0x7d, 0x2c, 0x63, 0xd3, 0x4f, 0xa0, 0x36, - 0x86, 0x21, 0x2f, 0x68, 0xd0, 0x79, 0x22, 0x22, 0x00, 0x3e, 0xd4, 0x2d, 0x0d, 0x69, 0x31, 0x74, - 0x6a, 0x55, 0xc7, 0x77, 0x02, 0x97, 0x44, 0x0b, 0x1c, 0xdd, 0xbc, 0x69, 0x8b, 0x35, 0x60, 0x49, - 0xa8, 0xa3, 0xb6, 0x6e, 0xa9, 0x9f, 0xda, 0xba, 0x67, 0x3f, 0x0e, 0xe3, 0x1d, 0x1f, 0xf3, 0x40, - 0x71, 0xd9, 0x87, 0x0f, 0xe9, 0xb6, 0xff, 0xf9, 0xa0, 0xde, 0xb4, 0xae, 0x87, 0x35, 0x5e, 0xe1, - 0x35, 0xd2, 0x5f, 0x54, 0xe8, 0x9e, 0x39, 0x4e, 0x11, 0xe3, 0xb6, 0x2e, 0xd5, 0x88, 0x4d, 0x96, - 0x74, 0x8e, 0xb6, 0x9c, 0x88, 0x04, 0xc7, 0x3d, 0x47, 0x57, 0x14, 0x13, 0x6c, 0x30, 0x44, 0x1b, - 0xa9, 0xc0, 0xcc, 0xcb, 0x47, 0x0f, 0xcc, 0x64, 0x09, 0xda, 0xdd, 0xaa, 0x44, 0x7e, 0xcd, 0x82, - 0xb1, 0x20, 0x35, 0x73, 0x85, 0x1f, 0x67, 0xed, 0x38, 0x56, 0x05, 0x2f, 0x30, 0x9e, 0x6e, 0xc3, - 0x19, 0xfe, 0xdd, 0xb6, 0xb4, 0xd2, 0x01, 0xb7, 0x34, 0x5d, 0x2a, 0x7a, 0xb0, 0x57, 0xa9, 0x68, - 0x14, 0xa8, 0x5a, 0xf9, 0x43, 0xb9, 0xd7, 0xca, 0x87, 0x2e, 0x75, 0xf2, 0x6f, 0x41, 0xc5, 0x8d, - 0x88, 0x93, 0x1c, 0xb2, 0x6c, 0x3a, 0x73, 0x85, 0xcf, 0x4a, 0x02, 0x58, 0xd3, 0xb2, 0xff, 0x6d, - 0x11, 0x4e, 0xca, 0x11, 0x91, 0x71, 0x5c, 0x74, 0x7f, 0xe4, 0x7c, 0xb5, 0x72, 0xab, 0xf6, 0xc7, - 0x2b, 0x12, 0x80, 0x35, 0x0e, 0xd5, 0xc7, 0xda, 0x31, 0x59, 0x6e, 0x91, 0x60, 0xd1, 0x5b, 0x8f, - 0x85, 0xff, 0x51, 0x2d, 0x94, 0x1b, 0x1a, 0x84, 0x4d, 0x3c, 0xaa, 0x8c, 0x73, 0xbd, 0x38, 0xce, - 0xc6, 0x80, 0x0a, 0x7d, 0x1b, 0x4b, 0x38, 0xfa, 0xd5, 0xae, 0x17, 0x6e, 0xe4, 0x13, 0xfd, 0xdc, - 0x11, 0xbe, 0x76, 0xc0, 0x9b, 0x36, 0xde, 0xb6, 0xe0, 0xc4, 0x66, 0x2a, 0x0d, 0x4d, 0x8a, 0xe4, - 0x23, 0x26, 0x4c, 0xa7, 0x73, 0xdb, 0xf4, 0x14, 0x4e, 0xb7, 0xc7, 0x38, 0xcb, 0xdd, 0xfe, 0xef, - 0x16, 0x98, 0xe2, 0xa9, 0x3f, 0xcd, 0xca, 0xb8, 0x33, 0xac, 0xb0, 0xcf, 0x9d, 0x61, 0x52, 0x09, - 0x2b, 0xf6, 0xa7, 0xf4, 0x0f, 0x1c, 0x40, 0xe9, 0x2f, 0xf5, 0xd4, 0xda, 0x9e, 0x82, 0x62, 0xdb, - 0xab, 0x09, 0xbd, 0x5d, 0x7b, 0x1b, 0x17, 0xe6, 0x30, 0x6d, 0xb7, 0xff, 0x71, 0x49, 0xdb, 0xe9, - 0x22, 0x68, 0xf7, 0x87, 0xe2, 0xb5, 0xeb, 0x2a, 0xff, 0x9d, 0xbf, 0xf9, 0xf5, 0x8e, 0xfc, 0xf7, - 0x9f, 0x38, 0x78, 0x4c, 0x36, 0x1f, 0xa0, 0x5e, 0xe9, 0xef, 0x43, 0xfb, 0x04, 0x64, 0xdf, 0x86, - 0x32, 0x35, 0x6d, 0xd8, 0x81, 0x5b, 0x39, 0xd5, 0xa9, 0xf2, 0x15, 0xd1, 0x7e, 0x6f, 0x77, 0xf2, - 0xc7, 0x0f, 0xde, 0x2d, 0xf9, 0x34, 0x56, 0xf4, 0x51, 0x0c, 0x15, 0xfa, 0x9b, 0xc5, 0x8e, 0x0b, - 0xa3, 0xe9, 0x86, 0x92, 0x45, 0x12, 0x90, 0x4b, 0x60, 0xba, 0xe6, 0x83, 0x02, 0xa8, 0xb0, 0xcb, - 0x7e, 0x18, 0x53, 0x6e, 0x5b, 0xad, 0xa8, 0x08, 0x6e, 0x09, 0xb8, 0xb7, 0x3b, 0xf9, 0xf2, 0xc1, - 0x99, 0xaa, 0xc7, 0xb1, 0x66, 0x61, 0xbf, 0x33, 0xa0, 0xe7, 0xae, 0x28, 0x7b, 0xf0, 0x43, 0x31, - 0x77, 0x2f, 0x66, 0xe6, 0xee, 0xf9, 0x8e, 0xb9, 0x3b, 0xa6, 0x2f, 0xa5, 0x49, 0xcd, 0xc6, 0x07, - 0xbd, 0xc1, 0xee, 0x6f, 0xc7, 0x33, 0xcd, 0xe2, 0x4e, 0xdb, 0x8b, 0x48, 0xbc, 0x12, 0xb5, 0x03, - 0x2f, 0x68, 0x88, 0x7b, 0x40, 0x0d, 0xcd, 0x22, 0x05, 0xc6, 0x59, 0x7c, 0x76, 0x87, 0xe8, 0x4e, - 0xe0, 0xde, 0x72, 0xb6, 0xf8, 0xac, 0x32, 0x32, 0xc1, 0x57, 0x45, 0x3b, 0x56, 0x18, 0xf6, 0xbb, - 0xcc, 0x77, 0x6b, 0x24, 0xad, 0xd0, 0x39, 0xe1, 0xb3, 0xdb, 0x95, 0x78, 0x1a, 0xb9, 0x9a, 0x13, - 0xfc, 0x4a, 0x25, 0x0e, 0x43, 0x77, 0x61, 0x68, 0x9d, 0x5f, 0x2f, 0x90, 0x4f, 0xc9, 0x3c, 0x71, - 0x57, 0x01, 0xab, 0x6a, 0x2b, 0x2f, 0x2e, 0xb8, 0xa7, 0x7f, 0x62, 0xc9, 0xcd, 0x7e, 0x6f, 0x00, - 0x4e, 0x64, 0xee, 0xdf, 0x49, 0x15, 0xf0, 0x29, 0xec, 0x5b, 0xc0, 0xe7, 0x53, 0x00, 0x35, 0xd2, - 0xf2, 0xc3, 0x1d, 0xa6, 0xe6, 0x0c, 0x1c, 0x58, 0xcd, 0x51, 0x9a, 0xf1, 0x9c, 0xa2, 0x82, 0x0d, - 0x8a, 0x22, 0x77, 0x9e, 0xd7, 0x03, 0xca, 0xe4, 0xce, 0x1b, 0x55, 0x2b, 0x07, 0x1f, 0x6c, 0xd5, - 0x4a, 0x0f, 0x4e, 0xf0, 0x2e, 0xaa, 0xd4, 0x90, 0x43, 0x64, 0x80, 0xb0, 0x38, 0xdb, 0xb9, 0x34, - 0x19, 0x9c, 0xa5, 0xfb, 0x30, 0xaf, 0xd7, 0x42, 0x1f, 0x81, 0x8a, 0xfc, 0xce, 0xf1, 0x44, 0x45, - 0xa7, 0xd7, 0xc9, 0x69, 0xc0, 0xae, 0xbd, 0x12, 0x3f, 0xed, 0xaf, 0x16, 0xa8, 0x56, 0xca, 0xff, - 0xa9, 0x34, 0xe9, 0x67, 0x60, 0xd0, 0x69, 0x27, 0x1b, 0x61, 0xc7, 0x9d, 0x09, 0x33, 0xac, 0x15, - 0x0b, 0x28, 0x5a, 0x84, 0x81, 0x9a, 0x4e, 0x7d, 0x3d, 0xc8, 0x28, 0xea, 0x03, 0x3e, 0x27, 0x21, - 0x98, 0x51, 0x41, 0x4f, 0xc2, 0x40, 0xe2, 0x34, 0x52, 0x77, 0xd9, 0xae, 0x39, 0x8d, 0x18, 0xb3, - 0x56, 0x73, 0xd3, 0x1c, 0xd8, 0x67, 0xd3, 0x7c, 0x19, 0x46, 0x63, 0xaf, 0x11, 0x38, 0x49, 0x3b, - 0x22, 0x86, 0x33, 0x49, 0xc7, 0x07, 0x98, 0x40, 0x9c, 0xc6, 0xb5, 0x7f, 0x7f, 0x04, 0x4e, 0xaf, - 0xce, 0x2e, 0xc9, 0x32, 0x6e, 0xc7, 0x16, 0x53, 0xdf, 0x8d, 0xc7, 0x83, 0x8b, 0xa9, 0xef, 0xc1, - 0xdd, 0x37, 0x62, 0xea, 0x7d, 0x23, 0xa6, 0xfe, 0x8b, 0x16, 0x54, 0x54, 0x28, 0xb9, 0x08, 0x64, - 0x7d, 0x3d, 0xff, 0x1e, 0xa8, 0xb8, 0x62, 0x11, 0x51, 0x2c, 0xff, 0x62, 0xcd, 0xfc, 0xf8, 0x82, - 0xec, 0xef, 0xdb, 0xa1, 0x03, 0x05, 0xd9, 0xab, 0x0c, 0x84, 0x52, 0x1e, 0x19, 0x08, 0x3d, 0x3e, - 0x55, 0xd7, 0x0c, 0x84, 0xaf, 0x59, 0x30, 0xec, 0xbc, 0xd5, 0x8e, 0xc8, 0x1c, 0xd9, 0x5a, 0x6e, - 0xc5, 0x42, 0xc0, 0xbe, 0x91, 0x7f, 0x07, 0x66, 0x34, 0x13, 0x51, 0xdc, 0x59, 0x37, 0x60, 0xb3, - 0x0b, 0xa9, 0x8c, 0x83, 0xa1, 0x3c, 0x32, 0x0e, 0xba, 0x75, 0x67, 0xdf, 0x8c, 0x83, 0x97, 0x61, - 0xd4, 0xf5, 0xc3, 0x80, 0xac, 0x44, 0x61, 0x12, 0xba, 0xa1, 0x2f, 0x94, 0x69, 0x25, 0x12, 0x66, - 0x4d, 0x20, 0x4e, 0xe3, 0xf6, 0x4a, 0x57, 0xa8, 0x1c, 0x35, 0x5d, 0x01, 0x1e, 0x52, 0x71, 0x8d, - 0x5f, 0xd2, 0x65, 0x46, 0x87, 0xf3, 0xb8, 0xef, 0xb6, 0xdb, 0x17, 0xe9, 0xa7, 0x66, 0x1d, 0xfa, - 0x06, 0xbf, 0xb4, 0x80, 0xaa, 0xa3, 0xb3, 0x61, 0x93, 0xaa, 0x5b, 0x23, 0x6c, 0x48, 0xde, 0x3c, - 0x86, 0x09, 0x7b, 0x6b, 0x55, 0xb3, 0x51, 0x17, 0x19, 0xe8, 0x26, 0x9c, 0xee, 0xc8, 0x51, 0xca, - 0xe9, 0xfd, 0x5a, 0x01, 0x7e, 0x64, 0xdf, 0x2e, 0xa0, 0xbb, 0x00, 0x89, 0xd3, 0x10, 0x13, 0x55, - 0x1c, 0xff, 0x1f, 0x31, 0x88, 0x6f, 0x4d, 0xd2, 0xe3, 0x69, 0xaa, 0xea, 0x2f, 0x3b, 0x58, 0x97, - 0xbf, 0x59, 0xec, 0x5e, 0xe8, 0x77, 0x94, 0xe4, 0xc1, 0xa1, 0x4f, 0x30, 0x83, 0xd0, 0xed, 0x3f, - 0x22, 0x0d, 0x7d, 0xa9, 0x95, 0xfa, 0x7c, 0x98, 0xb5, 0x62, 0x01, 0x45, 0x2f, 0xc1, 0xb0, 0xe3, - 0xfb, 0x3c, 0xaf, 0x82, 0xc4, 0xa2, 0xb0, 0xb2, 0x2e, 0x2b, 0xa2, 0x41, 0xd8, 0xc4, 0xb3, 0xff, - 0xa2, 0x00, 0x93, 0xfb, 0xc8, 0x14, 0x74, 0x11, 0x46, 0xc2, 0xa8, 0xe1, 0x04, 0xde, 0x5b, 0x3c, - 0x33, 0xbb, 0x94, 0xae, 0xff, 0xb2, 0x6c, 0xc0, 0x70, 0x0a, 0x53, 0x46, 0xc2, 0x0f, 0xf6, 0x88, - 0x84, 0x7f, 0x09, 0x86, 0x13, 0xe2, 0x34, 0x45, 0xd8, 0x8f, 0xb0, 0xbf, 0xb5, 0x3f, 0x53, 0x83, - 0xb0, 0x89, 0x47, 0xa5, 0xd8, 0x98, 0xe3, 0xba, 0x24, 0x8e, 0x65, 0xa8, 0xbb, 0x38, 0x1b, 0xcc, - 0x2d, 0x8e, 0x9e, 0x1d, 0xb9, 0xce, 0xa4, 0x58, 0xe0, 0x0c, 0xcb, 0xec, 0x80, 0x57, 0xfa, 0x1c, - 0xf0, 0xdf, 0x2c, 0xc0, 0x53, 0xf7, 0xdd, 0xdd, 0xfa, 0xce, 0x42, 0x68, 0xc7, 0x24, 0xca, 0x4e, - 0x9c, 0x1b, 0x31, 0x89, 0x30, 0x83, 0xf0, 0x51, 0x6a, 0xb5, 0x8c, 0x4b, 0xc3, 0xf2, 0x4e, 0x7a, - 0xe1, 0xa3, 0x94, 0x62, 0x81, 0x33, 0x2c, 0x0f, 0x3b, 0x2d, 0xff, 0x5e, 0x01, 0x9e, 0xee, 0x43, - 0x07, 0xc8, 0x31, 0x39, 0x28, 0x9d, 0xa2, 0x55, 0x7c, 0x38, 0x29, 0x5a, 0x87, 0x1d, 0xae, 0x77, - 0x0b, 0x70, 0xb6, 0xf7, 0x56, 0x8c, 0x7e, 0x92, 0xda, 0xf0, 0x32, 0xd6, 0xc7, 0xcc, 0xee, 0x3a, - 0xc5, 0xed, 0xf7, 0x14, 0x08, 0x67, 0x71, 0xd1, 0x14, 0x40, 0xcb, 0x49, 0x36, 0xe2, 0x4b, 0xdb, - 0x5e, 0x9c, 0x88, 0xc4, 0xe4, 0x31, 0xee, 0x89, 0x91, 0xad, 0xd8, 0xc0, 0xa0, 0xec, 0xd8, 0xbf, - 0xb9, 0xf0, 0x7a, 0x98, 0xf0, 0x87, 0xb8, 0x19, 0x71, 0x4a, 0x16, 0x6f, 0x35, 0x40, 0x38, 0x8b, - 0x4b, 0xd9, 0x31, 0x5f, 0x1f, 0xef, 0x28, 0xb7, 0x2f, 0x18, 0xbb, 0x45, 0xd5, 0x8a, 0x0d, 0x8c, - 0x6c, 0xde, 0x5a, 0x69, 0xff, 0xbc, 0x35, 0xfb, 0x1f, 0x15, 0xe0, 0x89, 0x9e, 0xaa, 0x5c, 0x7f, - 0x0b, 0xf0, 0xd1, 0xcb, 0x35, 0x3b, 0xdc, 0xdc, 0x39, 0x60, 0x06, 0xd5, 0x9f, 0xf5, 0x98, 0x69, - 0x22, 0x83, 0x2a, 0xbb, 0x55, 0x58, 0x07, 0xdd, 0x2a, 0x1e, 0xa1, 0xf1, 0xec, 0x48, 0x9a, 0x1a, - 0x38, 0x40, 0xd2, 0x54, 0xe6, 0x63, 0x94, 0xfa, 0x5c, 0xc8, 0xdf, 0xe9, 0x3d, 0xbc, 0xd4, 0xf4, - 0xeb, 0xeb, 0x74, 0x74, 0x0e, 0x4e, 0x7a, 0x01, 0x2b, 0xe4, 0xbd, 0xda, 0x5e, 0x17, 0x69, 0xeb, - 0x85, 0xf4, 0x1d, 0x75, 0x0b, 0x19, 0x38, 0xee, 0x78, 0xe2, 0x11, 0x4c, 0x62, 0x3b, 0xe4, 0x90, - 0x7e, 0x0a, 0x2a, 0x8a, 0x36, 0x0f, 0xcc, 0x55, 0x1f, 0xb4, 0x23, 0x30, 0x57, 0x7d, 0x4d, 0x03, - 0x8b, 0x8e, 0x04, 0x55, 0x37, 0x33, 0x33, 0xf3, 0x1a, 0xd9, 0x61, 0xba, 0xa7, 0xfd, 0x51, 0x18, - 0x51, 0x67, 0x18, 0xfd, 0x56, 0x6b, 0xb6, 0xdf, 0x19, 0x84, 0xd1, 0x54, 0x2d, 0x96, 0xd4, 0x91, - 0xa1, 0xb5, 0xef, 0x91, 0x21, 0x0b, 0xb4, 0x6e, 0x07, 0xb2, 0x94, 0xbb, 0x11, 0x68, 0xdd, 0x0e, - 0x08, 0xe6, 0x30, 0xaa, 0x3a, 0xd6, 0xa2, 0x1d, 0xdc, 0x0e, 0x44, 0x40, 0xa4, 0x52, 0x1d, 0xe7, - 0x58, 0x2b, 0x16, 0x50, 0xf4, 0x39, 0x0b, 0x46, 0x62, 0x76, 0x1e, 0xcd, 0x0f, 0x5c, 0xc5, 0x07, - 0xbd, 0x9a, 0xc7, 0xb5, 0xeb, 0xa2, 0xee, 0x10, 0x8b, 0xa5, 0x30, 0x5b, 0x70, 0x8a, 0x23, 0xfa, - 0x45, 0xcb, 0xbc, 0x70, 0x7e, 0x30, 0x8f, 0x40, 0xde, 0x6c, 0xa9, 0x1b, 0x7e, 0x52, 0x77, 0xff, - 0x7b, 0xe7, 0x63, 0x75, 0x1a, 0x3a, 0x74, 0x3c, 0xa7, 0xa1, 0xd0, 0xe5, 0x24, 0xf4, 0x23, 0x50, - 0x69, 0x3a, 0x81, 0x57, 0x27, 0x71, 0xc2, 0x0f, 0x28, 0x65, 0x05, 0x2e, 0xd9, 0x88, 0x35, 0x9c, - 0x6e, 0x76, 0x31, 0x7b, 0xb1, 0xc4, 0x38, 0x51, 0x64, 0x9b, 0xdd, 0xaa, 0x6e, 0xc6, 0x26, 0x8e, - 0x79, 0xfc, 0x09, 0x0f, 0xf5, 0xf8, 0x73, 0x78, 0x9f, 0xe3, 0xcf, 0x7f, 0x60, 0xc1, 0x99, 0xae, - 0x5f, 0xed, 0xd1, 0x0d, 0x91, 0xb3, 0xbf, 0x5e, 0x82, 0x53, 0x5d, 0x8a, 0x2a, 0xa1, 0x1d, 0x73, - 0x3e, 0x5b, 0x79, 0x78, 0xc5, 0xd3, 0x4e, 0x5e, 0x39, 0x8c, 0x5d, 0x26, 0xf1, 0xc1, 0x9c, 0x0f, - 0xda, 0x01, 0x50, 0x7c, 0xb0, 0x0e, 0x00, 0x63, 0x5a, 0x0e, 0x3c, 0xd4, 0x69, 0x59, 0xba, 0xff, - 0xb4, 0x44, 0xbf, 0x6b, 0xc1, 0x44, 0xb3, 0x47, 0x25, 0x4f, 0x71, 0xa8, 0x77, 0xf3, 0x78, 0xea, - 0x84, 0x56, 0x9f, 0xdc, 0xdb, 0x9d, 0xec, 0x59, 0x40, 0x15, 0xf7, 0xec, 0x95, 0xfd, 0xbd, 0x22, - 0xb0, 0x8a, 0x5e, 0xac, 0x86, 0xce, 0x0e, 0xfa, 0xac, 0x59, 0x9b, 0xcd, 0xca, 0xab, 0x8e, 0x18, - 0x27, 0xae, 0x6a, 0xbb, 0xf1, 0x11, 0xec, 0x56, 0xea, 0x2d, 0x2b, 0xb4, 0x0a, 0x7d, 0x08, 0x2d, - 0x5f, 0x16, 0xc1, 0x2b, 0xe6, 0x5f, 0x04, 0xaf, 0x92, 0x2d, 0x80, 0x77, 0xff, 0x4f, 0x3c, 0xf0, - 0x48, 0x7e, 0xe2, 0xbf, 0x69, 0x71, 0xc1, 0x93, 0xf9, 0x0a, 0x5a, 0x33, 0xb0, 0xee, 0xa3, 0x19, - 0x3c, 0xc7, 0x6e, 0xda, 0xac, 0x5f, 0x21, 0x8e, 0x2f, 0x34, 0x08, 0xf3, 0xd2, 0x4c, 0xd6, 0x8e, - 0x15, 0x06, 0xbb, 0x1b, 0xc7, 0xf7, 0xc3, 0xbb, 0x97, 0x9a, 0xad, 0x64, 0x47, 0xe8, 0x12, 0xfa, - 0x6e, 0x1c, 0x05, 0xc1, 0x06, 0x96, 0xfd, 0xb7, 0x0a, 0x7c, 0x06, 0x0a, 0xb7, 0xfe, 0xc5, 0xcc, - 0x6d, 0x06, 0xfd, 0x7b, 0xc4, 0x3f, 0x03, 0xe0, 0xaa, 0x4b, 0xf6, 0x84, 0xbf, 0xe5, 0xca, 0x91, - 0x2f, 0x29, 0x13, 0xf4, 0xf4, 0x6b, 0xe8, 0x36, 0x6c, 0xf0, 0x4b, 0xc9, 0xd2, 0xe2, 0xbe, 0xb2, - 0x34, 0x25, 0x56, 0x06, 0xf6, 0xd9, 0xed, 0xfe, 0xc2, 0x82, 0x94, 0x46, 0x84, 0x5a, 0x50, 0xa2, - 0xdd, 0xdd, 0xc9, 0xe7, 0xfe, 0x40, 0x93, 0x34, 0x15, 0x8d, 0x62, 0xda, 0xb3, 0x9f, 0x98, 0x33, - 0x42, 0xbe, 0xf0, 0xfe, 0x17, 0xf2, 0xb8, 0xe3, 0xd2, 0x64, 0x78, 0x25, 0x0c, 0x37, 0xb9, 0xd3, - 0x50, 0x47, 0x12, 0xd8, 0x17, 0x61, 0xbc, 0xa3, 0x53, 0xac, 0x70, 0x79, 0x28, 0x2f, 0x4d, 0x34, - 0xa6, 0x2b, 0x4b, 0xc1, 0xc3, 0x1c, 0x66, 0xbf, 0x6b, 0xc1, 0xc9, 0x2c, 0x79, 0xf4, 0x0d, 0x0b, - 0xc6, 0xe3, 0x2c, 0xbd, 0xe3, 0x1a, 0x3b, 0x15, 0x19, 0xd7, 0x01, 0xc2, 0x9d, 0x9d, 0xb0, 0xff, - 0x8f, 0x98, 0xfc, 0xb7, 0xbc, 0xa0, 0x16, 0xde, 0x55, 0x8a, 0x89, 0xd5, 0x53, 0x31, 0xa1, 0xeb, - 0xd1, 0xdd, 0x20, 0xb5, 0xb6, 0xdf, 0x91, 0xfb, 0xb7, 0x2a, 0xda, 0xb1, 0xc2, 0x60, 0xa9, 0x4e, - 0x6d, 0x51, 0x25, 0x33, 0x33, 0x29, 0xe7, 0x44, 0x3b, 0x56, 0x18, 0xe8, 0x45, 0x18, 0x31, 0x2f, - 0x06, 0x15, 0xf3, 0x92, 0x29, 0xe4, 0xe6, 0x1d, 0xa2, 0x38, 0x85, 0x95, 0xb9, 0x1a, 0xbe, 0xb4, - 0xef, 0xd5, 0xf0, 0xcf, 0x42, 0x59, 0x5c, 0x73, 0x2e, 0xe3, 0x47, 0x79, 0x62, 0xa1, 0x68, 0xc3, - 0x0a, 0x4a, 0xa5, 0x49, 0xd3, 0x09, 0xda, 0x8e, 0x4f, 0x47, 0x48, 0x64, 0x43, 0xab, 0x65, 0xb8, - 0xa4, 0x20, 0xd8, 0xc0, 0xa2, 0x6f, 0x9c, 0x78, 0x4d, 0xf2, 0x5a, 0x18, 0xc8, 0xc8, 0x2b, 0xed, - 0x52, 0x11, 0xed, 0x58, 0x61, 0xd8, 0xff, 0xc5, 0x82, 0xec, 0x1d, 0xcd, 0xa9, 0x53, 0x0e, 0x6b, - 0xdf, 0x0c, 0xec, 0x74, 0xfe, 0x66, 0xa1, 0xaf, 0xfc, 0x4d, 0x33, 0xb5, 0xb2, 0x78, 0xdf, 0xd4, - 0xca, 0x1f, 0xd5, 0xd7, 0xdf, 0xf0, 0x1c, 0xcc, 0xe1, 0x6e, 0x57, 0xdf, 0x20, 0x1b, 0x06, 0x5d, - 0x47, 0xd5, 0xe8, 0x18, 0xe1, 0xb6, 0xc3, 0xec, 0x0c, 0x43, 0x12, 0x10, 0x7b, 0x19, 0x2a, 0xca, - 0xb3, 0x20, 0x0d, 0x55, 0xab, 0xbb, 0xa1, 0xda, 0x57, 0x2a, 0x59, 0x75, 0xfd, 0xbd, 0xef, 0x9f, - 0xfb, 0xc0, 0x77, 0xbe, 0x7f, 0xee, 0x03, 0x7f, 0xf2, 0xfd, 0x73, 0x1f, 0xf8, 0xdc, 0xde, 0x39, - 0xeb, 0xbd, 0xbd, 0x73, 0xd6, 0x77, 0xf6, 0xce, 0x59, 0x7f, 0xb2, 0x77, 0xce, 0xfa, 0xde, 0xde, - 0x39, 0xeb, 0x6b, 0xff, 0xf1, 0xdc, 0x07, 0x5e, 0xeb, 0x1a, 0x7a, 0x47, 0x7f, 0x3c, 0xef, 0xd6, - 0xa6, 0xb7, 0x2e, 0xb0, 0xe8, 0x2f, 0xba, 0xbc, 0xa6, 0x8d, 0x39, 0x35, 0x2d, 0x97, 0xd7, 0xff, - 0x0b, 0x00, 0x00, 0xff, 0xff, 0xe7, 0xad, 0xd9, 0x73, 0xf4, 0xcb, 0x00, 0x00, + // 10312 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x1c, 0xc9, + 0x75, 0x98, 0x66, 0x17, 0x0b, 0xec, 0x3e, 0x7c, 0x90, 0x68, 0x92, 0x77, 0x38, 0xea, 0xee, 0x40, + 0xcf, 0x95, 0x4f, 0xa7, 0xe8, 0x04, 0xf8, 0xa8, 0x93, 0x72, 0xf1, 0xd9, 0x92, 0xf1, 0x41, 0x82, + 0x20, 0x01, 0x02, 0xd7, 0x00, 0x49, 0x7d, 0xf8, 0x74, 0x1a, 0xcc, 0xf6, 0x2e, 0x86, 0x98, 0x9d, + 0x19, 0xce, 0xcc, 0x82, 0xc0, 0x59, 0x92, 0x25, 0xdb, 0xb2, 0x95, 0xe8, 0xe3, 0x14, 0x29, 0x55, + 0x96, 0x92, 0xc8, 0x91, 0x3f, 0x2a, 0x15, 0x57, 0x72, 0x15, 0xa5, 0xf2, 0x23, 0x4e, 0x9c, 0x94, + 0x4b, 0x76, 0x7e, 0x28, 0xa5, 0xa4, 0xa2, 0x4a, 0x5c, 0x96, 0x13, 0x3b, 0x88, 0x84, 0x54, 0x2a, + 0xa9, 0x54, 0xc5, 0x55, 0xf9, 0xf8, 0x13, 0x56, 0xaa, 0x92, 0xea, 0xef, 0x9e, 0xd9, 0x5d, 0x62, + 0x01, 0x0c, 0x48, 0x4a, 0xbe, 0x7f, 0xbb, 0xfd, 0xde, 0xbc, 0xd7, 0xd3, 0xd3, 0xfd, 0xfa, 0xbd, + 0xd7, 0xef, 0xbd, 0x86, 0xa5, 0xa6, 0x97, 0x6e, 0xb6, 0x37, 0xa6, 0xdc, 0xb0, 0x35, 0xed, 0xc4, + 0xcd, 0x30, 0x8a, 0xc3, 0xdb, 0xec, 0xc7, 0xbb, 0xdd, 0xfa, 0xf4, 0xf6, 0xc5, 0xe9, 0x68, 0xab, + 0x39, 0xed, 0x44, 0x5e, 0x32, 0xed, 0x44, 0x91, 0xef, 0xb9, 0x4e, 0xea, 0x85, 0xc1, 0xf4, 0xf6, + 0x0b, 0x8e, 0x1f, 0x6d, 0x3a, 0x2f, 0x4c, 0x37, 0x49, 0x40, 0x62, 0x27, 0x25, 0xf5, 0xa9, 0x28, + 0x0e, 0xd3, 0x10, 0xfd, 0x94, 0xa6, 0x36, 0x25, 0xa9, 0xb1, 0x1f, 0xaf, 0xb9, 0xf5, 0xa9, 0xed, + 0x8b, 0x53, 0xd1, 0x56, 0x73, 0x8a, 0x52, 0x9b, 0x32, 0xa8, 0x4d, 0x49, 0x6a, 0xe7, 0xdf, 0x6d, + 0xf4, 0xa5, 0x19, 0x36, 0xc3, 0x69, 0x46, 0x74, 0xa3, 0xdd, 0x60, 0xff, 0xd8, 0x1f, 0xf6, 0x8b, + 0x33, 0x3b, 0x6f, 0x6f, 0xbd, 0x94, 0x4c, 0x79, 0x21, 0xed, 0xde, 0xb4, 0x1b, 0xc6, 0x64, 0x7a, + 0xbb, 0xa3, 0x43, 0xe7, 0xaf, 0x68, 0x1c, 0xb2, 0x93, 0x92, 0x20, 0xf1, 0xc2, 0x20, 0x79, 0x37, + 0xed, 0x02, 0x89, 0xb7, 0x49, 0x6c, 0xbe, 0x9e, 0x81, 0xd0, 0x8d, 0xd2, 0x8b, 0x9a, 0x52, 0xcb, + 0x71, 0x37, 0xbd, 0x80, 0xc4, 0xbb, 0xfa, 0xf1, 0x16, 0x49, 0x9d, 0x6e, 0x4f, 0x4d, 0xf7, 0x7a, + 0x2a, 0x6e, 0x07, 0xa9, 0xd7, 0x22, 0x1d, 0x0f, 0xbc, 0xef, 0xa0, 0x07, 0x12, 0x77, 0x93, 0xb4, + 0x9c, 0x8e, 0xe7, 0xde, 0xd3, 0xeb, 0xb9, 0x76, 0xea, 0xf9, 0xd3, 0x5e, 0x90, 0x26, 0x69, 0x9c, + 0x7f, 0xc8, 0xbe, 0x03, 0xa3, 0x33, 0xb7, 0xd6, 0x66, 0xda, 0xe9, 0xe6, 0x5c, 0x18, 0x34, 0xbc, + 0x26, 0x7a, 0x2f, 0x0c, 0xbb, 0x7e, 0x3b, 0x49, 0x49, 0x7c, 0xdd, 0x69, 0x91, 0x09, 0xeb, 0x82, + 0xf5, 0x5c, 0x6d, 0xf6, 0xcc, 0xb7, 0xf7, 0x26, 0xdf, 0xb6, 0xbf, 0x37, 0x39, 0x3c, 0xa7, 0x41, + 0xd8, 0xc4, 0x43, 0xef, 0x84, 0xa1, 0x38, 0xf4, 0xc9, 0x0c, 0xbe, 0x3e, 0x51, 0x62, 0x8f, 0x9c, + 0x12, 0x8f, 0x0c, 0x61, 0xde, 0x8c, 0x25, 0xdc, 0xfe, 0xa3, 0x12, 0xc0, 0x4c, 0x14, 0xad, 0xc6, + 0xe1, 0x6d, 0xe2, 0xa6, 0xe8, 0x63, 0x50, 0xa5, 0x43, 0x57, 0x77, 0x52, 0x87, 0x71, 0x1b, 0xbe, + 0xf8, 0x13, 0x53, 0xfc, 0x4d, 0xa6, 0xcc, 0x37, 0xd1, 0x13, 0x87, 0x62, 0x4f, 0x6d, 0xbf, 0x30, + 0xb5, 0xb2, 0x41, 0x9f, 0x5f, 0x26, 0xa9, 0x33, 0x8b, 0x04, 0x33, 0xd0, 0x6d, 0x58, 0x51, 0x45, + 0x01, 0x0c, 0x24, 0x11, 0x71, 0x59, 0xc7, 0x86, 0x2f, 0x2e, 0x4d, 0x1d, 0x67, 0x86, 0x4e, 0xe9, + 0x9e, 0xaf, 0x45, 0xc4, 0x9d, 0x1d, 0x11, 0x9c, 0x07, 0xe8, 0x3f, 0xcc, 0xf8, 0xa0, 0x6d, 0x18, + 0x4c, 0x52, 0x27, 0x6d, 0x27, 0x13, 0x65, 0xc6, 0xf1, 0x7a, 0x61, 0x1c, 0x19, 0xd5, 0xd9, 0x31, + 0xc1, 0x73, 0x90, 0xff, 0xc7, 0x82, 0x9b, 0xfd, 0x1f, 0x2c, 0x18, 0xd3, 0xc8, 0x4b, 0x5e, 0x92, + 0xa2, 0x9f, 0xed, 0x18, 0xdc, 0xa9, 0xfe, 0x06, 0x97, 0x3e, 0xcd, 0x86, 0xf6, 0xb4, 0x60, 0x56, + 0x95, 0x2d, 0xc6, 0xc0, 0xb6, 0xa0, 0xe2, 0xa5, 0xa4, 0x95, 0x4c, 0x94, 0x2e, 0x94, 0x9f, 0x1b, + 0xbe, 0x78, 0xa5, 0xa8, 0xf7, 0x9c, 0x1d, 0x15, 0x4c, 0x2b, 0x8b, 0x94, 0x3c, 0xe6, 0x5c, 0xec, + 0xdf, 0x1e, 0x31, 0xdf, 0x8f, 0x0e, 0x38, 0x7a, 0x01, 0x86, 0x93, 0xb0, 0x1d, 0xbb, 0x04, 0x93, + 0x28, 0x4c, 0x26, 0xac, 0x0b, 0x65, 0x3a, 0xf5, 0xe8, 0x4c, 0x5d, 0xd3, 0xcd, 0xd8, 0xc4, 0x41, + 0x5f, 0xb4, 0x60, 0xa4, 0x4e, 0x92, 0xd4, 0x0b, 0x18, 0x7f, 0xd9, 0xf9, 0xf5, 0x63, 0x77, 0x5e, + 0x36, 0xce, 0x6b, 0xe2, 0xb3, 0x67, 0xc5, 0x8b, 0x8c, 0x18, 0x8d, 0x09, 0xce, 0xf0, 0xa7, 0x2b, + 0xae, 0x4e, 0x12, 0x37, 0xf6, 0x22, 0xfa, 0x9f, 0xcd, 0x19, 0x63, 0xc5, 0xcd, 0x6b, 0x10, 0x36, + 0xf1, 0x50, 0x00, 0x15, 0xba, 0xa2, 0x92, 0x89, 0x01, 0xd6, 0xff, 0xc5, 0xe3, 0xf5, 0x5f, 0x0c, + 0x2a, 0x5d, 0xac, 0x7a, 0xf4, 0xe9, 0xbf, 0x04, 0x73, 0x36, 0xe8, 0x0b, 0x16, 0x4c, 0x88, 0x15, + 0x8f, 0x09, 0x1f, 0xd0, 0x5b, 0x9b, 0x5e, 0x4a, 0x7c, 0x2f, 0x49, 0x27, 0x2a, 0xac, 0x0f, 0xd3, + 0xfd, 0xcd, 0xad, 0x85, 0x38, 0x6c, 0x47, 0xd7, 0xbc, 0xa0, 0x3e, 0x7b, 0x41, 0x70, 0x9a, 0x98, + 0xeb, 0x41, 0x18, 0xf7, 0x64, 0x89, 0xbe, 0x62, 0xc1, 0xf9, 0xc0, 0x69, 0x91, 0x24, 0x72, 0xe8, + 0xa7, 0xe5, 0xe0, 0x59, 0xdf, 0x71, 0xb7, 0x58, 0x8f, 0x06, 0x8f, 0xd6, 0x23, 0x5b, 0xf4, 0xe8, + 0xfc, 0xf5, 0x9e, 0xa4, 0xf1, 0x7d, 0xd8, 0xa2, 0xdf, 0xb4, 0x60, 0x3c, 0x8c, 0xa3, 0x4d, 0x27, + 0x20, 0x75, 0x09, 0x4d, 0x26, 0x86, 0xd8, 0xd2, 0xfb, 0xe8, 0xf1, 0x3e, 0xd1, 0x4a, 0x9e, 0xec, + 0x72, 0x18, 0x78, 0x69, 0x18, 0xaf, 0x91, 0x34, 0xf5, 0x82, 0x66, 0x32, 0x7b, 0x6e, 0x7f, 0x6f, + 0x72, 0xbc, 0x03, 0x0b, 0x77, 0xf6, 0x07, 0xfd, 0x1c, 0x0c, 0x27, 0xbb, 0x81, 0x7b, 0xcb, 0x0b, + 0xea, 0xe1, 0xdd, 0x64, 0xa2, 0x5a, 0xc4, 0xf2, 0x5d, 0x53, 0x04, 0xc5, 0x02, 0xd4, 0x0c, 0xb0, + 0xc9, 0xad, 0xfb, 0x87, 0xd3, 0x53, 0xa9, 0x56, 0xf4, 0x87, 0xd3, 0x93, 0xe9, 0x3e, 0x6c, 0xd1, + 0xaf, 0x58, 0x30, 0x9a, 0x78, 0xcd, 0xc0, 0x49, 0xdb, 0x31, 0xb9, 0x46, 0x76, 0x93, 0x09, 0x60, + 0x1d, 0xb9, 0x7a, 0xcc, 0x51, 0x31, 0x48, 0xce, 0x9e, 0x13, 0x7d, 0x1c, 0x35, 0x5b, 0x13, 0x9c, + 0xe5, 0xdb, 0x6d, 0xa1, 0xe9, 0x69, 0x3d, 0x5c, 0xec, 0x42, 0xd3, 0x93, 0xba, 0x27, 0x4b, 0xf4, + 0x33, 0x70, 0x9a, 0x37, 0xa9, 0x91, 0x4d, 0x26, 0x46, 0x98, 0xa0, 0x3d, 0xbb, 0xbf, 0x37, 0x79, + 0x7a, 0x2d, 0x07, 0xc3, 0x1d, 0xd8, 0xe8, 0x0e, 0x4c, 0x46, 0x24, 0x6e, 0x79, 0xe9, 0x4a, 0xe0, + 0xef, 0x4a, 0xf1, 0xed, 0x86, 0x11, 0xa9, 0x8b, 0xee, 0x24, 0x13, 0xa3, 0x17, 0xac, 0xe7, 0xaa, + 0xb3, 0xef, 0x10, 0xdd, 0x9c, 0x5c, 0xbd, 0x3f, 0x3a, 0x3e, 0x88, 0x9e, 0xfd, 0x2f, 0x4a, 0x70, + 0x3a, 0xbf, 0x71, 0xa2, 0xbf, 0x6d, 0xc1, 0xa9, 0xdb, 0x77, 0xd3, 0xf5, 0x70, 0x8b, 0x04, 0xc9, + 0xec, 0x2e, 0x15, 0x6f, 0x6c, 0xcb, 0x18, 0xbe, 0xe8, 0x16, 0xbb, 0x45, 0x4f, 0x5d, 0xcd, 0x72, + 0xb9, 0x14, 0xa4, 0xf1, 0xee, 0xec, 0xe3, 0xe2, 0xed, 0x4e, 0x5d, 0xbd, 0xb5, 0x6e, 0x42, 0x71, + 0xbe, 0x53, 0xe7, 0x3f, 0x67, 0xc1, 0xd9, 0x6e, 0x24, 0xd0, 0x69, 0x28, 0x6f, 0x91, 0x5d, 0xae, + 0x95, 0x61, 0xfa, 0x13, 0xbd, 0x0a, 0x95, 0x6d, 0xc7, 0x6f, 0x13, 0xa1, 0xdd, 0x2c, 0x1c, 0xef, + 0x45, 0x54, 0xcf, 0x30, 0xa7, 0xfa, 0x93, 0xa5, 0x97, 0x2c, 0xfb, 0x5f, 0x97, 0x61, 0xd8, 0xd8, + 0xdf, 0x1e, 0x80, 0xc6, 0x16, 0x66, 0x34, 0xb6, 0xe5, 0xc2, 0xb6, 0xe6, 0x9e, 0x2a, 0xdb, 0xdd, + 0x9c, 0xca, 0xb6, 0x52, 0x1c, 0xcb, 0xfb, 0xea, 0x6c, 0x28, 0x85, 0x5a, 0x18, 0x51, 0x8d, 0x9c, + 0x6e, 0xfd, 0x03, 0x45, 0x7c, 0xc2, 0x15, 0x49, 0x6e, 0x76, 0x74, 0x7f, 0x6f, 0xb2, 0xa6, 0xfe, + 0x62, 0xcd, 0xc8, 0xfe, 0x9e, 0x05, 0x67, 0x8d, 0x3e, 0xce, 0x85, 0x41, 0xdd, 0x63, 0x9f, 0xf6, + 0x02, 0x0c, 0xa4, 0xbb, 0x91, 0x54, 0xfb, 0xd5, 0x48, 0xad, 0xef, 0x46, 0x04, 0x33, 0x08, 0x55, + 0xf4, 0x5b, 0x24, 0x49, 0x9c, 0x26, 0xc9, 0x2b, 0xfa, 0xcb, 0xbc, 0x19, 0x4b, 0x38, 0x8a, 0x01, + 0xf9, 0x4e, 0x92, 0xae, 0xc7, 0x4e, 0x90, 0x30, 0xf2, 0xeb, 0x5e, 0x8b, 0x88, 0x01, 0xfe, 0x0b, + 0xfd, 0xcd, 0x18, 0xfa, 0xc4, 0xec, 0x63, 0xfb, 0x7b, 0x93, 0x68, 0xa9, 0x83, 0x12, 0xee, 0x42, + 0xdd, 0xfe, 0x8a, 0x05, 0x8f, 0x75, 0xd7, 0xc5, 0xd0, 0xb3, 0x30, 0xc8, 0x4d, 0x3e, 0xf1, 0x76, + 0xfa, 0x93, 0xb0, 0x56, 0x2c, 0xa0, 0x68, 0x1a, 0x6a, 0x6a, 0x9f, 0x10, 0xef, 0x38, 0x2e, 0x50, + 0x6b, 0x7a, 0x73, 0xd1, 0x38, 0x74, 0xd0, 0xe8, 0x1f, 0xa1, 0xb9, 0xa9, 0x41, 0x63, 0x46, 0x12, + 0x83, 0xd8, 0xff, 0xd1, 0x82, 0x53, 0x46, 0xaf, 0x1e, 0x80, 0x6a, 0x1e, 0x64, 0x55, 0xf3, 0xc5, + 0xc2, 0xe6, 0x73, 0x0f, 0xdd, 0xfc, 0x0b, 0x16, 0x9c, 0x37, 0xb0, 0x96, 0x9d, 0xd4, 0xdd, 0xbc, + 0xb4, 0x13, 0xc5, 0x24, 0xa1, 0xe6, 0x34, 0x7a, 0xca, 0x90, 0x5b, 0xb3, 0xc3, 0x82, 0x42, 0xf9, + 0x1a, 0xd9, 0xe5, 0x42, 0xec, 0x79, 0xa8, 0xf2, 0xc9, 0x19, 0xc6, 0x62, 0xc4, 0xd5, 0xbb, 0xad, + 0x88, 0x76, 0xac, 0x30, 0x90, 0x0d, 0x83, 0x4c, 0x38, 0xd1, 0xc5, 0x4a, 0xb7, 0x21, 0xa0, 0x1f, + 0xf1, 0x26, 0x6b, 0xc1, 0x02, 0x62, 0xaf, 0x64, 0xba, 0xb3, 0x1a, 0x13, 0xf6, 0x71, 0xeb, 0x97, + 0x3d, 0xe2, 0xd7, 0x13, 0x6a, 0x36, 0x38, 0x41, 0x10, 0xa6, 0xc2, 0x02, 0x30, 0xcc, 0x86, 0x19, + 0xdd, 0x8c, 0x4d, 0x1c, 0x7b, 0xbf, 0xc4, 0x8c, 0x0f, 0xb5, 0xac, 0xc9, 0x83, 0xb0, 0x5c, 0xe3, + 0x8c, 0x1c, 0x5c, 0x2d, 0x4e, 0x28, 0x91, 0xde, 0xd6, 0xeb, 0xeb, 0x39, 0x51, 0x88, 0x0b, 0xe5, + 0x7a, 0x7f, 0x0b, 0xf6, 0x5b, 0x25, 0x98, 0xcc, 0x3e, 0xd0, 0x21, 0x49, 0xa9, 0xb9, 0x64, 0x30, + 0xca, 0x3b, 0x28, 0x0c, 0x7c, 0x6c, 0xe2, 0xf5, 0x10, 0x46, 0xa5, 0x93, 0x14, 0x46, 0xa6, 0xac, + 0x2c, 0x1f, 0x20, 0x2b, 0x9f, 0x55, 0xa3, 0x3e, 0x90, 0x13, 0x4e, 0xd9, 0xfd, 0xe2, 0x02, 0x0c, + 0x24, 0x29, 0x89, 0x26, 0x2a, 0x59, 0x59, 0xb3, 0x96, 0x92, 0x08, 0x33, 0x88, 0xfd, 0xdf, 0x4a, + 0xf0, 0x78, 0x76, 0x0c, 0xb5, 0x78, 0xff, 0x40, 0x46, 0xbc, 0xbf, 0xcb, 0x14, 0xef, 0xf7, 0xf6, + 0x26, 0xdf, 0xde, 0xe3, 0xb1, 0x1f, 0x1a, 0xe9, 0x8f, 0x16, 0x72, 0xa3, 0x38, 0x9d, 0x1d, 0xc5, + 0x7b, 0x7b, 0x93, 0x4f, 0xf5, 0x78, 0xc7, 0xdc, 0x30, 0x3f, 0x0b, 0x83, 0x31, 0x71, 0x92, 0x30, + 0x10, 0x03, 0xad, 0x3e, 0x07, 0x66, 0xad, 0x58, 0x40, 0xed, 0x7f, 0x53, 0xcb, 0x0f, 0xf6, 0x02, + 0x77, 0xb0, 0x85, 0x31, 0xf2, 0x60, 0x80, 0xa9, 0xec, 0x5c, 0x34, 0x5c, 0x3b, 0xde, 0x32, 0xa2, + 0x22, 0x5e, 0x91, 0x9e, 0xad, 0xd2, 0xaf, 0x46, 0x9b, 0x30, 0x63, 0x81, 0x76, 0xa0, 0xea, 0x4a, + 0x4d, 0xba, 0x54, 0x84, 0xcf, 0x49, 0xe8, 0xd1, 0x9a, 0xe3, 0x08, 0x95, 0xc5, 0x4a, 0xfd, 0x56, + 0xdc, 0x10, 0x81, 0x72, 0xd3, 0x4b, 0xc5, 0x67, 0x3d, 0xa6, 0xad, 0xb4, 0xe0, 0x19, 0xaf, 0x38, + 0x44, 0x37, 0x88, 0x05, 0x2f, 0xc5, 0x94, 0x3e, 0xfa, 0x8c, 0x05, 0xc3, 0x89, 0xdb, 0x5a, 0x8d, + 0xc3, 0x6d, 0xaf, 0x4e, 0x62, 0xa1, 0x29, 0x1d, 0x53, 0x34, 0xad, 0xcd, 0x2d, 0x4b, 0x82, 0x9a, + 0x2f, 0xb7, 0x5d, 0x35, 0x04, 0x9b, 0x7c, 0xa9, 0x05, 0xf1, 0xb8, 0x78, 0xf7, 0x79, 0xe2, 0x7a, + 0x74, 0x6f, 0x93, 0x06, 0x13, 0x9b, 0x29, 0xc7, 0xd6, 0x1c, 0xe7, 0xdb, 0xee, 0x16, 0x5d, 0x6f, + 0xba, 0x43, 0x6f, 0xdf, 0xdf, 0x9b, 0x7c, 0x7c, 0xae, 0x3b, 0x4f, 0xdc, 0xab, 0x33, 0x6c, 0xc0, + 0xa2, 0xb6, 0xef, 0x63, 0x72, 0xa7, 0x4d, 0x98, 0x3b, 0xa4, 0x80, 0x01, 0x5b, 0xd5, 0x04, 0x73, + 0x03, 0x66, 0x40, 0xb0, 0xc9, 0x17, 0xdd, 0x81, 0xc1, 0x96, 0x93, 0xc6, 0xde, 0x8e, 0xf0, 0x81, + 0x1c, 0x53, 0x97, 0x5f, 0x66, 0xb4, 0x34, 0x73, 0xb6, 0xf5, 0xf3, 0x46, 0x2c, 0x18, 0xa1, 0x16, + 0x54, 0x5a, 0x24, 0x6e, 0x92, 0x89, 0x6a, 0x11, 0xfe, 0xde, 0x65, 0x4a, 0x4a, 0x33, 0xac, 0x51, + 0xcd, 0x87, 0xb5, 0x61, 0xce, 0x05, 0xbd, 0x0a, 0xd5, 0x84, 0xf8, 0xc4, 0xa5, 0xba, 0x4b, 0x8d, + 0x71, 0x7c, 0x4f, 0x9f, 0x7a, 0x9c, 0xb3, 0x41, 0xfc, 0x35, 0xf1, 0x28, 0x5f, 0x60, 0xf2, 0x1f, + 0x56, 0x24, 0xe9, 0x00, 0x46, 0x7e, 0xbb, 0xe9, 0x05, 0x13, 0x50, 0xc4, 0x00, 0xae, 0x32, 0x5a, + 0xb9, 0x01, 0xe4, 0x8d, 0x58, 0x30, 0xb2, 0xff, 0xb3, 0x05, 0x28, 0x2b, 0xd4, 0x1e, 0x80, 0xc2, + 0x7a, 0x27, 0xab, 0xb0, 0x2e, 0x15, 0xa9, 0x75, 0xf4, 0xd0, 0x59, 0x7f, 0xb7, 0x06, 0xb9, 0xed, + 0xe0, 0x3a, 0x49, 0x52, 0x52, 0x7f, 0x4b, 0x84, 0xbf, 0x25, 0xc2, 0xdf, 0x12, 0xe1, 0x4a, 0x84, + 0x6f, 0xe4, 0x44, 0xf8, 0xfb, 0x8d, 0x55, 0xaf, 0x0f, 0x4c, 0x5f, 0x53, 0x27, 0xaa, 0x66, 0x0f, + 0x0c, 0x04, 0x2a, 0x09, 0xae, 0xae, 0xad, 0x5c, 0xef, 0x2a, 0xb3, 0x5f, 0xcb, 0xca, 0xec, 0xe3, + 0xb2, 0xf8, 0xf3, 0x20, 0xa5, 0xff, 0x46, 0x09, 0x9e, 0xc8, 0x4a, 0x2f, 0x1c, 0xfa, 0x7e, 0xd8, + 0x4e, 0xa9, 0x2d, 0x80, 0x7e, 0xcd, 0x82, 0xd3, 0xad, 0xac, 0x11, 0x9e, 0x08, 0x5f, 0xe7, 0x07, + 0x0b, 0x13, 0xad, 0x39, 0x2b, 0x7f, 0x76, 0x42, 0x88, 0xd9, 0xd3, 0x39, 0x40, 0x82, 0x3b, 0xfa, + 0x82, 0x5e, 0x85, 0x5a, 0xcb, 0xd9, 0xb9, 0x11, 0xd5, 0x9d, 0x54, 0x9a, 0x61, 0xbd, 0xad, 0xe7, + 0x76, 0xea, 0xf9, 0x53, 0xfc, 0x04, 0x7b, 0x6a, 0x31, 0x48, 0x57, 0xe2, 0xb5, 0x34, 0xf6, 0x82, + 0x26, 0xf7, 0x70, 0x2d, 0x4b, 0x32, 0x58, 0x53, 0xb4, 0xbf, 0x6e, 0xe5, 0x65, 0xbb, 0x1a, 0x9d, + 0xd8, 0x49, 0x49, 0x73, 0x17, 0x7d, 0x1c, 0x2a, 0xd4, 0x5e, 0x92, 0xa3, 0x72, 0xab, 0xc8, 0x0d, + 0xc7, 0xf8, 0x12, 0x7a, 0xef, 0xa1, 0xff, 0x12, 0xcc, 0x99, 0xda, 0xdf, 0x1a, 0xcc, 0xef, 0xb1, + 0xec, 0x3c, 0xf3, 0x22, 0x40, 0x33, 0x5c, 0x27, 0xad, 0xc8, 0xa7, 0xc3, 0x62, 0x31, 0xa7, 0xb8, + 0x72, 0x11, 0x2c, 0x28, 0x08, 0x36, 0xb0, 0xd0, 0x5f, 0xb6, 0x00, 0x9a, 0x72, 0xaa, 0xc8, 0xfd, + 0xf3, 0x46, 0x91, 0xaf, 0xa3, 0x27, 0xa2, 0xee, 0x8b, 0x62, 0x88, 0x0d, 0xe6, 0xe8, 0x17, 0x2c, + 0xa8, 0xa6, 0xb2, 0xfb, 0x7c, 0x47, 0x59, 0x2f, 0xb2, 0x27, 0xf2, 0xa5, 0xb5, 0x2a, 0xa1, 0x86, + 0x44, 0xf1, 0x45, 0xbf, 0x6c, 0x01, 0x24, 0xbb, 0x81, 0xbb, 0x1a, 0xfa, 0x9e, 0xbb, 0x2b, 0x36, + 0x9a, 0x9b, 0x85, 0xba, 0x31, 0x14, 0xf5, 0xd9, 0x31, 0x3a, 0x1a, 0xfa, 0x3f, 0x36, 0x38, 0xa3, + 0x4f, 0x42, 0x35, 0x11, 0xd3, 0x4d, 0x6c, 0x2d, 0xeb, 0xc5, 0x3a, 0x53, 0x38, 0x6d, 0x21, 0x95, + 0xc4, 0x3f, 0xac, 0x78, 0xa2, 0x5f, 0xb5, 0xe0, 0x54, 0x94, 0x75, 0x7d, 0x89, 0x5d, 0xa4, 0x38, + 0x19, 0x90, 0x73, 0xad, 0xcd, 0x9e, 0xd9, 0xdf, 0x9b, 0x3c, 0x95, 0x6b, 0xc4, 0xf9, 0x5e, 0xa0, + 0x39, 0x18, 0xd7, 0x33, 0x78, 0x25, 0xe2, 0x6e, 0xb8, 0x21, 0xe6, 0x86, 0x63, 0xa7, 0x98, 0x0b, + 0x79, 0x20, 0xee, 0xc4, 0xb7, 0xbf, 0x53, 0xca, 0x78, 0xb1, 0x95, 0x7b, 0x89, 0xad, 0x08, 0x57, + 0x5a, 0xf6, 0x72, 0x81, 0x17, 0xba, 0x22, 0x94, 0xdf, 0x40, 0xaf, 0x08, 0xd5, 0x94, 0x60, 0x83, + 0x39, 0x55, 0x37, 0xc6, 0x9d, 0xbc, 0x13, 0x4b, 0x2c, 0xd2, 0x57, 0x8b, 0xec, 0x52, 0xe7, 0x99, + 0xc3, 0x13, 0xa2, 0x6b, 0xe3, 0x1d, 0x20, 0xdc, 0xd9, 0x25, 0xfb, 0x3b, 0x59, 0xcf, 0xb9, 0x31, + 0xbf, 0xfa, 0x38, 0x15, 0xf8, 0xa2, 0x05, 0xc3, 0x71, 0xe8, 0xfb, 0x5e, 0xd0, 0xa4, 0x6b, 0x41, + 0x08, 0xf4, 0x8f, 0x9c, 0x88, 0x4c, 0x15, 0x93, 0x9e, 0x29, 0x2d, 0x58, 0xf3, 0xc4, 0x66, 0x07, + 0xec, 0x4f, 0x5b, 0x30, 0xd1, 0x6b, 0xcd, 0x22, 0x02, 0x6f, 0x97, 0x13, 0x52, 0x9d, 0x89, 0xaf, + 0x04, 0xf3, 0xc4, 0x27, 0xca, 0xa5, 0x58, 0x9d, 0x7d, 0x46, 0xbc, 0xe6, 0xdb, 0x57, 0x7b, 0xa3, + 0xe2, 0xfb, 0xd1, 0xb1, 0x7f, 0xab, 0x94, 0x1f, 0x51, 0x25, 0xb3, 0xbf, 0x6a, 0x75, 0x18, 0x53, + 0x1f, 0x3c, 0x09, 0x39, 0xc9, 0xcc, 0x2e, 0x75, 0x34, 0xde, 0x1b, 0xe7, 0x21, 0x9e, 0xbd, 0xd9, + 0xff, 0x72, 0x00, 0xee, 0xd3, 0x33, 0x75, 0xba, 0x62, 0xf5, 0x3a, 0x5d, 0x39, 0xfc, 0x81, 0xcd, + 0xe7, 0x2d, 0x18, 0xf4, 0xa9, 0x5e, 0xc7, 0x4f, 0x10, 0x86, 0x2f, 0xd6, 0x4f, 0x6a, 0xec, 0xb9, + 0xfa, 0x98, 0xf0, 0xf3, 0x5f, 0xe5, 0x44, 0xe4, 0x8d, 0x58, 0xf4, 0x01, 0x7d, 0xc3, 0xca, 0x1e, + 0x47, 0xf0, 0x80, 0x1e, 0xef, 0xc4, 0xfa, 0x64, 0x9c, 0x71, 0xf0, 0x8e, 0x69, 0xef, 0x79, 0x8f, + 0xd3, 0x0f, 0x34, 0x05, 0xd0, 0xf0, 0x02, 0xc7, 0xf7, 0x5e, 0xa7, 0xf6, 0x69, 0x85, 0x09, 0x6a, + 0xb6, 0xf3, 0x5d, 0x56, 0xad, 0xd8, 0xc0, 0x38, 0xff, 0x97, 0x60, 0xd8, 0x78, 0xf3, 0x2e, 0xc7, + 0xd6, 0x67, 0xcd, 0x63, 0xeb, 0x9a, 0x71, 0xda, 0x7c, 0xfe, 0xfd, 0x70, 0x3a, 0xdf, 0xc1, 0xc3, + 0x3c, 0x6f, 0x7f, 0x6d, 0x28, 0x7f, 0x86, 0xb0, 0x4e, 0xe2, 0x16, 0xed, 0xda, 0x5b, 0x76, 0xfd, + 0x5b, 0x76, 0xfd, 0x5b, 0x76, 0xbd, 0xe9, 0x9a, 0x15, 0x36, 0xeb, 0xd0, 0x83, 0xb2, 0x59, 0xf7, + 0x2b, 0x90, 0x51, 0x46, 0xf8, 0x80, 0xbc, 0x13, 0x86, 0x62, 0x12, 0x85, 0x37, 0xf0, 0x92, 0x10, + 0xf2, 0x3a, 0x76, 0x98, 0x37, 0x63, 0x09, 0xa7, 0x9b, 0x41, 0xe4, 0xa4, 0x9b, 0x42, 0xca, 0xab, + 0xcd, 0x60, 0xd5, 0x49, 0x37, 0x31, 0x83, 0xa0, 0xf7, 0xc3, 0x58, 0xea, 0xc4, 0x4d, 0x92, 0x62, + 0xb2, 0xcd, 0xc6, 0x5d, 0x1c, 0x05, 0x3d, 0x26, 0x70, 0xc7, 0xd6, 0x33, 0x50, 0x9c, 0xc3, 0x46, + 0x77, 0x60, 0x60, 0x93, 0xf8, 0x2d, 0x31, 0x26, 0x6b, 0xc5, 0x09, 0x61, 0xf6, 0xae, 0x57, 0x88, + 0xdf, 0xe2, 0x22, 0x82, 0xfe, 0xc2, 0x8c, 0x15, 0x9d, 0x10, 0xb5, 0xad, 0x76, 0x92, 0x86, 0x2d, + 0xef, 0x75, 0xe9, 0x01, 0xf9, 0x60, 0xc1, 0x8c, 0xaf, 0x49, 0xfa, 0xdc, 0x66, 0x56, 0x7f, 0xb1, + 0xe6, 0xcc, 0xfa, 0x51, 0xf7, 0x62, 0xe6, 0xd1, 0xd8, 0x15, 0x8e, 0x8c, 0xa2, 0xfb, 0x31, 0x2f, + 0xe9, 0xf3, 0x7e, 0xa8, 0xbf, 0x58, 0x73, 0x46, 0xbb, 0x6a, 0x62, 0x0e, 0xb3, 0x3e, 0xdc, 0x28, + 0xb8, 0x0f, 0x7c, 0x52, 0x76, 0x9b, 0xa0, 0xe8, 0x19, 0xa8, 0xb8, 0x9b, 0x4e, 0x9c, 0x4e, 0x8c, + 0xb0, 0x49, 0xa3, 0x6c, 0xf7, 0x39, 0xda, 0x88, 0x39, 0x0c, 0x3d, 0x05, 0xe5, 0x98, 0x34, 0x58, + 0xc8, 0x9a, 0x11, 0xcc, 0x80, 0x49, 0x03, 0xd3, 0x76, 0xfb, 0xd7, 0x4b, 0x59, 0x7d, 0x26, 0xfb, + 0xde, 0x7c, 0xb6, 0xbb, 0xed, 0x38, 0x91, 0xf6, 0xbd, 0x31, 0xdb, 0x59, 0x33, 0x96, 0x70, 0xf4, + 0x69, 0x0b, 0x86, 0x6e, 0x27, 0x61, 0x10, 0x90, 0x54, 0xec, 0x1d, 0x37, 0x0b, 0x1e, 0x8a, 0xab, + 0x9c, 0xba, 0xee, 0x83, 0x68, 0xc0, 0x92, 0x2f, 0xed, 0x2e, 0xd9, 0x71, 0xfd, 0x76, 0xbd, 0xe3, + 0x0c, 0xfb, 0x12, 0x6f, 0xc6, 0x12, 0x4e, 0x51, 0xbd, 0x80, 0xa3, 0x0e, 0x64, 0x51, 0x17, 0x03, + 0x81, 0x2a, 0xe0, 0xf6, 0x37, 0x2b, 0x70, 0xae, 0xeb, 0xe2, 0xa0, 0x9a, 0x06, 0xdb, 0xcb, 0x2f, + 0x7b, 0x3e, 0x91, 0x91, 0x19, 0x4c, 0xd3, 0xb8, 0xa9, 0x5a, 0xb1, 0x81, 0x81, 0x7e, 0x1e, 0x20, + 0x72, 0x62, 0xa7, 0x45, 0xc4, 0x0e, 0x5b, 0x3e, 0xfe, 0x86, 0x4e, 0xfb, 0xb1, 0x2a, 0x69, 0x6a, + 0x03, 0x4f, 0x35, 0x25, 0xd8, 0x60, 0x89, 0xde, 0x0b, 0xc3, 0x31, 0xf1, 0x89, 0x93, 0xb0, 0x88, + 0xc7, 0x7c, 0xf8, 0x36, 0xd6, 0x20, 0x6c, 0xe2, 0xa1, 0x67, 0x55, 0x10, 0x4b, 0xee, 0xc0, 0x3f, + 0x1b, 0xc8, 0x82, 0xde, 0xb0, 0x60, 0xac, 0xe1, 0xf9, 0x44, 0x73, 0x17, 0xc1, 0xd6, 0x2b, 0xc7, + 0x7f, 0xc9, 0xcb, 0x26, 0x5d, 0x2d, 0x21, 0x33, 0xcd, 0x09, 0xce, 0xb1, 0xa7, 0x9f, 0x79, 0x9b, + 0xc4, 0x4c, 0xb4, 0x0e, 0x66, 0x3f, 0xf3, 0x4d, 0xde, 0x8c, 0x25, 0x1c, 0xcd, 0xc0, 0xa9, 0xc8, + 0x49, 0x92, 0xb9, 0x98, 0xd4, 0x49, 0x90, 0x7a, 0x8e, 0xcf, 0x43, 0xa1, 0xab, 0x3a, 0x14, 0x72, + 0x35, 0x0b, 0xc6, 0x79, 0x7c, 0xf4, 0x21, 0x78, 0xdc, 0x6b, 0x06, 0x61, 0x4c, 0x96, 0xbd, 0x24, + 0xf1, 0x82, 0xa6, 0x9e, 0x06, 0x4c, 0x52, 0x56, 0x67, 0x27, 0x05, 0xa9, 0xc7, 0x17, 0xbb, 0xa3, + 0xe1, 0x5e, 0xcf, 0xa3, 0xe7, 0xa1, 0x9a, 0x6c, 0x79, 0xd1, 0x5c, 0x5c, 0x4f, 0x98, 0x4f, 0xb8, + 0xaa, 0xbd, 0x4a, 0x6b, 0xa2, 0x1d, 0x2b, 0x0c, 0xfb, 0x6b, 0xa5, 0xac, 0x45, 0x69, 0xae, 0x1f, + 0x94, 0xd0, 0x55, 0x92, 0xde, 0x74, 0x62, 0xe9, 0x6d, 0x38, 0x66, 0x30, 0xb5, 0xa0, 0x7b, 0xd3, + 0x89, 0xcd, 0xf5, 0xc6, 0x18, 0x60, 0xc9, 0x09, 0xdd, 0x86, 0x81, 0xd4, 0x77, 0x0a, 0xca, 0xbe, + 0x30, 0x38, 0x6a, 0x03, 0x7f, 0x69, 0x26, 0xc1, 0x8c, 0x07, 0x7a, 0x92, 0x6a, 0xcc, 0x1b, 0x32, + 0xe2, 0x4a, 0x28, 0xb9, 0x1b, 0x09, 0x66, 0xad, 0xf6, 0xff, 0xab, 0x76, 0x11, 0x79, 0x6a, 0x8f, + 0x41, 0x17, 0x01, 0xa8, 0xf1, 0xb5, 0x1a, 0x93, 0x86, 0xb7, 0x23, 0xf6, 0x78, 0xb5, 0xac, 0xae, + 0x2b, 0x08, 0x36, 0xb0, 0xe4, 0x33, 0x6b, 0xed, 0x06, 0x7d, 0xa6, 0xd4, 0xf9, 0x0c, 0x87, 0x60, + 0x03, 0x0b, 0xbd, 0x08, 0x83, 0x5e, 0xcb, 0x69, 0xaa, 0xc0, 0xb0, 0x27, 0xe9, 0x7a, 0x5a, 0x64, + 0x2d, 0xf7, 0xf6, 0x26, 0xc7, 0x54, 0x87, 0x58, 0x13, 0x16, 0xb8, 0xe8, 0xb7, 0x2c, 0x18, 0x71, + 0xc3, 0x56, 0x2b, 0x0c, 0xb8, 0xc9, 0x22, 0xec, 0xaf, 0xdb, 0x27, 0xb5, 0x03, 0x4f, 0xcd, 0x19, + 0xcc, 0xb8, 0x01, 0xa6, 0xd2, 0x44, 0x4c, 0x10, 0xce, 0xf4, 0xca, 0x5c, 0x76, 0x95, 0x03, 0x96, + 0xdd, 0xef, 0x58, 0x30, 0xce, 0x9f, 0x35, 0x2c, 0x29, 0x91, 0x11, 0x11, 0x9e, 0xf0, 0x6b, 0x75, + 0x18, 0x97, 0xca, 0x0b, 0xd5, 0x01, 0xc7, 0x9d, 0x9d, 0x44, 0x0b, 0x30, 0xde, 0x08, 0x63, 0x97, + 0x98, 0x03, 0x21, 0x64, 0x86, 0x22, 0x74, 0x39, 0x8f, 0x80, 0x3b, 0x9f, 0x41, 0x37, 0xe1, 0x31, + 0xa3, 0xd1, 0x1c, 0x07, 0x2e, 0x36, 0x9e, 0x16, 0xd4, 0x1e, 0xbb, 0xdc, 0x15, 0x0b, 0xf7, 0x78, + 0x3a, 0xeb, 0x6c, 0xa8, 0xf5, 0xe1, 0x6c, 0x78, 0x0d, 0x9e, 0x70, 0x3b, 0x47, 0x66, 0x3b, 0x69, + 0x6f, 0x24, 0x29, 0x53, 0xb2, 0xaa, 0xb3, 0x3f, 0x26, 0x08, 0x3c, 0x31, 0xd7, 0x0b, 0x11, 0xf7, + 0xa6, 0x81, 0x3e, 0x0e, 0xd5, 0x98, 0xb0, 0xaf, 0x92, 0x88, 0xf4, 0x80, 0x63, 0x5a, 0x98, 0x5a, + 0x39, 0xe4, 0x64, 0xb5, 0x58, 0x14, 0x0d, 0x09, 0x56, 0x1c, 0xcf, 0x7f, 0x00, 0xc6, 0x3b, 0xe6, + 0xf3, 0xa1, 0xec, 0xfd, 0x79, 0x78, 0xac, 0xfb, 0xcc, 0x39, 0x94, 0xd5, 0xff, 0x0f, 0x73, 0x51, + 0x6f, 0x86, 0xa2, 0xd7, 0x87, 0x07, 0xc9, 0x81, 0x32, 0x09, 0xb6, 0x85, 0x20, 0xbd, 0x7c, 0xbc, + 0xd1, 0xbb, 0x14, 0x6c, 0xf3, 0x89, 0xcf, 0xcc, 0xe4, 0x4b, 0xc1, 0x36, 0xa6, 0xb4, 0xd1, 0x97, + 0xad, 0x8c, 0xa2, 0xc2, 0xfd, 0x4e, 0x1f, 0x3d, 0x11, 0xcd, 0xb6, 0x6f, 0xdd, 0xc5, 0xfe, 0x57, + 0x25, 0xb8, 0x70, 0x10, 0x91, 0x3e, 0x86, 0xef, 0x19, 0x18, 0x4c, 0xd8, 0x81, 0x9c, 0x90, 0x4c, + 0xc3, 0x54, 0x2a, 0xf1, 0x23, 0xba, 0xd7, 0xb0, 0x00, 0x21, 0x1f, 0xca, 0x2d, 0x27, 0x12, 0xee, + 0x88, 0xc5, 0xe3, 0xc6, 0xb8, 0xd3, 0xff, 0x8e, 0xbf, 0xec, 0x44, 0xdc, 0xc8, 0x35, 0x1a, 0x30, + 0x65, 0x83, 0x52, 0xa8, 0x38, 0x71, 0xec, 0xc8, 0xd3, 0x9f, 0x6b, 0xc5, 0xf0, 0x9b, 0xa1, 0x24, + 0x67, 0xc7, 0xf7, 0xf7, 0x26, 0x47, 0x33, 0x4d, 0x98, 0x33, 0xb3, 0x3f, 0x3f, 0x94, 0x89, 0xf3, + 0x66, 0x47, 0x7a, 0x09, 0x0c, 0x0a, 0x2f, 0x84, 0x55, 0x74, 0x6a, 0x01, 0x4f, 0xd4, 0x61, 0x76, + 0x8c, 0x48, 0x77, 0x14, 0xac, 0xd0, 0xe7, 0x2c, 0x96, 0x54, 0x28, 0x63, 0xdf, 0x85, 0xf5, 0x70, + 0x32, 0x39, 0x8e, 0x66, 0xaa, 0xa2, 0x6c, 0xc4, 0x26, 0x77, 0xba, 0x75, 0x45, 0x3c, 0x3d, 0x26, + 0x6f, 0x43, 0xc8, 0xb4, 0x43, 0x09, 0x47, 0x3b, 0x5d, 0x8e, 0xee, 0x0a, 0x48, 0x4c, 0xeb, 0xe3, + 0xb0, 0xee, 0x1b, 0x16, 0x8c, 0x73, 0x4d, 0x71, 0xde, 0x6b, 0x34, 0x48, 0x4c, 0x02, 0x97, 0x48, + 0x5d, 0xfb, 0x98, 0x87, 0xc3, 0xd2, 0xf5, 0xb3, 0x98, 0x27, 0xaf, 0xf7, 0xb4, 0x0e, 0x10, 0xee, + 0xec, 0x0c, 0xaa, 0xc3, 0x80, 0x17, 0x34, 0x42, 0xb1, 0x93, 0xcf, 0x1e, 0xaf, 0x53, 0x8b, 0x41, + 0x23, 0xd4, 0xab, 0x99, 0xfe, 0xc3, 0x8c, 0x3a, 0x5a, 0x82, 0xb3, 0xb1, 0xf0, 0x86, 0x5c, 0xf1, + 0x12, 0x6a, 0xb3, 0x2e, 0x79, 0x2d, 0x2f, 0x65, 0xbb, 0x70, 0x79, 0x76, 0x62, 0x7f, 0x6f, 0xf2, + 0x2c, 0xee, 0x02, 0xc7, 0x5d, 0x9f, 0x42, 0xaf, 0xc3, 0x90, 0xcc, 0x82, 0xac, 0x16, 0x61, 0xb7, + 0x74, 0xce, 0x7f, 0x35, 0x99, 0xd6, 0x44, 0xc2, 0xa3, 0x64, 0x68, 0xbf, 0x31, 0x0c, 0x9d, 0x67, + 0x5f, 0xe8, 0x13, 0x50, 0x8b, 0x55, 0x66, 0xa6, 0x55, 0x44, 0xb4, 0x99, 0xfc, 0xbe, 0xe2, 0xdc, + 0x4d, 0xe9, 0x03, 0x3a, 0x07, 0x53, 0x73, 0xa4, 0x5a, 0x7b, 0xa2, 0x8f, 0xc8, 0x0a, 0x98, 0xdb, + 0x82, 0xab, 0x3e, 0x5a, 0xd9, 0x0d, 0x5c, 0xcc, 0x78, 0xa0, 0x18, 0x06, 0x37, 0x89, 0xe3, 0xa7, + 0x9b, 0xc5, 0x78, 0x81, 0xaf, 0x30, 0x5a, 0xf9, 0x18, 0x7e, 0xde, 0x8a, 0x05, 0x27, 0xb4, 0x03, + 0x43, 0x9b, 0x7c, 0x02, 0x08, 0x45, 0x7a, 0xf9, 0xb8, 0x83, 0x9b, 0x99, 0x55, 0xfa, 0x73, 0x8b, + 0x06, 0x2c, 0xd9, 0xb1, 0x73, 0x7f, 0xe3, 0xd8, 0x97, 0x2f, 0xdd, 0xe2, 0xd2, 0x17, 0xfa, 0x3f, + 0xf3, 0xfd, 0x18, 0x8c, 0xc4, 0xc4, 0x0d, 0x03, 0xd7, 0xf3, 0x49, 0x7d, 0x46, 0x7a, 0x78, 0x0f, + 0x13, 0xf4, 0x7e, 0x9a, 0x1a, 0x03, 0xd8, 0xa0, 0x81, 0x33, 0x14, 0xd1, 0x67, 0x2d, 0x18, 0x53, + 0xe9, 0x5c, 0xf4, 0x83, 0x10, 0xe1, 0xb0, 0x5c, 0x2a, 0x28, 0x79, 0x8c, 0xd1, 0x9c, 0x45, 0xfb, + 0x7b, 0x93, 0x63, 0xd9, 0x36, 0x9c, 0xe3, 0x8b, 0x3e, 0x0c, 0x10, 0x6e, 0xf0, 0xc3, 0xfd, 0x99, + 0x54, 0x78, 0x2f, 0x0f, 0xf3, 0xaa, 0x63, 0x3c, 0xfb, 0x45, 0x52, 0xc0, 0x06, 0x35, 0x74, 0x0d, + 0x80, 0x2f, 0x9b, 0xf5, 0xdd, 0x48, 0x6a, 0xdb, 0x32, 0x6b, 0x01, 0xd6, 0x14, 0xe4, 0xde, 0xde, + 0x64, 0xa7, 0x37, 0x89, 0x9d, 0x4e, 0x1b, 0x8f, 0xa3, 0x9f, 0x83, 0xa1, 0xa4, 0xdd, 0x6a, 0x39, + 0xca, 0xb7, 0x59, 0x60, 0x3e, 0x0d, 0xa7, 0x6b, 0x88, 0x22, 0xde, 0x80, 0x25, 0x47, 0x74, 0x9b, + 0x0a, 0xd5, 0x44, 0xb8, 0xb9, 0xd8, 0x2a, 0xe2, 0x3a, 0xc1, 0x30, 0x7b, 0xa7, 0xf7, 0x89, 0xe7, + 0xce, 0xe2, 0x2e, 0x38, 0xf7, 0xf6, 0x26, 0x1f, 0xcb, 0xb6, 0x2f, 0x85, 0x22, 0xc3, 0xa5, 0x2b, + 0x4d, 0x74, 0x55, 0x16, 0x45, 0xa0, 0xaf, 0x2d, 0x73, 0x75, 0x9f, 0xd3, 0x45, 0x11, 0x58, 0x73, + 0xef, 0x31, 0x33, 0x1f, 0x46, 0xcb, 0x70, 0xc6, 0x0d, 0x83, 0x34, 0x0e, 0x7d, 0x9f, 0x57, 0xfa, + 0xe0, 0x86, 0x0f, 0xf7, 0x7d, 0xbe, 0x5d, 0x74, 0xfb, 0xcc, 0x5c, 0x27, 0x0a, 0xee, 0xf6, 0x9c, + 0x1d, 0x64, 0xa3, 0x9e, 0xc4, 0xe0, 0xbc, 0x08, 0x23, 0x64, 0x27, 0x25, 0x71, 0xe0, 0xf8, 0x37, + 0xf0, 0x92, 0xf4, 0xfa, 0xb1, 0x35, 0x70, 0xc9, 0x68, 0xc7, 0x19, 0x2c, 0x64, 0x2b, 0x6b, 0xbf, + 0xa4, 0xd3, 0xc0, 0xb8, 0xb5, 0x2f, 0x6d, 0x7b, 0xfb, 0xff, 0x94, 0x32, 0x0a, 0xd9, 0x7a, 0x4c, + 0x08, 0x0a, 0xa1, 0x12, 0x84, 0x75, 0x25, 0xfb, 0xaf, 0x16, 0x23, 0xfb, 0xaf, 0x87, 0x75, 0xa3, + 0x72, 0x02, 0xfd, 0x97, 0x60, 0xce, 0x87, 0xa5, 0x96, 0xcb, 0x1c, 0x7c, 0x06, 0x10, 0x86, 0x46, + 0x91, 0x9c, 0x55, 0x6a, 0xf9, 0x8a, 0xc9, 0x08, 0x67, 0xf9, 0xa2, 0x2d, 0xa8, 0x6c, 0x86, 0x49, + 0x2a, 0xcd, 0x8f, 0x63, 0x5a, 0x3a, 0x57, 0xc2, 0x24, 0x65, 0x5a, 0x84, 0x7a, 0x6d, 0xda, 0x92, + 0x60, 0xce, 0xc3, 0xfe, 0x2f, 0x56, 0xc6, 0xc7, 0x7b, 0x8b, 0x45, 0x00, 0x6e, 0x93, 0x80, 0x2e, + 0x6b, 0x33, 0x9e, 0xe4, 0x2f, 0xe6, 0xd2, 0x90, 0xde, 0xd1, 0xab, 0x8e, 0xcd, 0x5d, 0x4a, 0x61, + 0x8a, 0x91, 0x30, 0x42, 0x4f, 0x3e, 0x65, 0x65, 0x13, 0xc2, 0x4a, 0x45, 0x18, 0x18, 0x66, 0xc2, + 0xe3, 0x81, 0xb9, 0x65, 0xf6, 0x97, 0x2d, 0x18, 0x9a, 0x75, 0xdc, 0xad, 0xb0, 0xd1, 0x40, 0xcf, + 0x43, 0xb5, 0xde, 0x8e, 0xcd, 0xdc, 0x34, 0x65, 0x3d, 0xcf, 0x8b, 0x76, 0xac, 0x30, 0xe8, 0x1c, + 0x6e, 0x38, 0xae, 0x4c, 0x7b, 0x2c, 0xf3, 0x39, 0x7c, 0x99, 0xb5, 0x60, 0x01, 0x41, 0xef, 0x85, + 0xe1, 0x96, 0xb3, 0x23, 0x1f, 0xce, 0x3b, 0x98, 0x97, 0x35, 0x08, 0x9b, 0x78, 0xf6, 0x3f, 0xb7, + 0x60, 0x62, 0xd6, 0x49, 0x3c, 0x77, 0xa6, 0x9d, 0x6e, 0xce, 0x7a, 0xe9, 0x46, 0xdb, 0xdd, 0x22, + 0x29, 0xcf, 0x75, 0xa5, 0xbd, 0x6c, 0x27, 0x74, 0x29, 0x29, 0xbb, 0x4e, 0xf5, 0xf2, 0x86, 0x68, + 0xc7, 0x0a, 0x03, 0xbd, 0x0e, 0xc3, 0x91, 0x93, 0x24, 0x77, 0xc3, 0xb8, 0x8e, 0x49, 0xa3, 0x98, + 0x4c, 0xf3, 0x35, 0xe2, 0xc6, 0x24, 0xc5, 0xa4, 0x21, 0x4e, 0x29, 0x35, 0x7d, 0x6c, 0x32, 0xb3, + 0xff, 0xba, 0x05, 0x23, 0xec, 0xf4, 0x65, 0x9e, 0xa4, 0x8e, 0xe7, 0x77, 0x94, 0x4b, 0xb1, 0xfa, + 0x2c, 0x97, 0x72, 0x01, 0x06, 0x36, 0xc3, 0x16, 0xc9, 0x9f, 0x1c, 0x5e, 0x09, 0xa9, 0x15, 0x4b, + 0x21, 0xe8, 0x05, 0x3a, 0xce, 0x5e, 0x90, 0x3a, 0x74, 0xc6, 0x49, 0x17, 0xe2, 0x29, 0x3e, 0xc6, + 0xaa, 0x19, 0x9b, 0x38, 0xf6, 0xb7, 0x6a, 0x30, 0x24, 0xce, 0x7f, 0xfb, 0x4e, 0x2f, 0x96, 0xe6, + 0x74, 0xa9, 0xa7, 0x39, 0x9d, 0xc0, 0xa0, 0xcb, 0x8a, 0x31, 0x09, 0xad, 0xed, 0x5a, 0x21, 0x01, + 0x03, 0xbc, 0xbe, 0x93, 0xee, 0x16, 0xff, 0x8f, 0x05, 0x2b, 0xf4, 0x25, 0x0b, 0x4e, 0xb9, 0x61, + 0x10, 0x10, 0x57, 0xab, 0x14, 0x03, 0x45, 0x9c, 0x0b, 0xcf, 0x65, 0x89, 0x6a, 0xd7, 0x7f, 0x0e, + 0x80, 0xf3, 0xec, 0xd1, 0xcb, 0x30, 0xca, 0xc7, 0xec, 0x66, 0xc6, 0xef, 0xa9, 0xab, 0x68, 0x98, + 0x40, 0x9c, 0xc5, 0x45, 0x53, 0xdc, 0x7f, 0x2c, 0xea, 0x55, 0x0c, 0xea, 0x73, 0x24, 0xa3, 0x52, + 0x85, 0x81, 0x81, 0x62, 0x40, 0x31, 0x69, 0xc4, 0x24, 0xd9, 0x14, 0xe7, 0xe3, 0x4c, 0x9d, 0x19, + 0x3a, 0x5a, 0xba, 0x22, 0xee, 0xa0, 0x84, 0xbb, 0x50, 0x47, 0x5b, 0xc2, 0x9e, 0xab, 0x16, 0x21, + 0xb2, 0xc4, 0x67, 0xee, 0x69, 0xd6, 0x4d, 0x42, 0x25, 0xd9, 0x74, 0xe2, 0x3a, 0x53, 0xa3, 0xca, + 0x3c, 0x44, 0x7e, 0x8d, 0x36, 0x60, 0xde, 0x8e, 0xe6, 0xe1, 0x74, 0xae, 0x06, 0x48, 0x22, 0xfc, + 0x93, 0x2a, 0xae, 0x3b, 0x57, 0x3d, 0x24, 0xc1, 0x1d, 0x4f, 0x98, 0xb6, 0xfe, 0xf0, 0x01, 0xb6, + 0xfe, 0xae, 0x8a, 0xc2, 0x1a, 0x61, 0xdb, 0xd1, 0x2b, 0x85, 0x0c, 0x40, 0x5f, 0x21, 0x57, 0x5f, + 0xc8, 0x85, 0x5c, 0x8d, 0xb2, 0x0e, 0xdc, 0x2c, 0xa6, 0x03, 0x87, 0x8f, 0xaf, 0x7a, 0x98, 0xf1, + 0x52, 0xff, 0xdb, 0x02, 0xf9, 0x5d, 0xe7, 0x1c, 0x77, 0x93, 0xd0, 0x29, 0x83, 0xde, 0x0f, 0x63, + 0xca, 0x62, 0x9d, 0x0b, 0xdb, 0x01, 0x0f, 0x95, 0x2a, 0xeb, 0x33, 0x42, 0x9c, 0x81, 0xe2, 0x1c, + 0x36, 0x9a, 0x86, 0x1a, 0x1d, 0x27, 0xfe, 0x28, 0xdf, 0xda, 0x94, 0x55, 0x3c, 0xb3, 0xba, 0x28, + 0x9e, 0xd2, 0x38, 0x28, 0x84, 0x71, 0xdf, 0x49, 0x52, 0xd6, 0x03, 0x6a, 0xc0, 0x1e, 0x31, 0x59, + 0x98, 0x05, 0x0f, 0x2f, 0xe5, 0x09, 0xe1, 0x4e, 0xda, 0xf6, 0xf7, 0x06, 0x60, 0x34, 0x23, 0x19, + 0x0f, 0xb9, 0x27, 0x3e, 0x0f, 0x55, 0xb9, 0x4d, 0xe5, 0x4b, 0x16, 0xa8, 0xbd, 0x4c, 0x61, 0xd0, + 0x4d, 0x6b, 0x83, 0x38, 0x31, 0x89, 0x59, 0x75, 0x95, 0xfc, 0x1e, 0x3e, 0xab, 0x41, 0xd8, 0xc4, + 0x63, 0x42, 0x39, 0xf5, 0x93, 0x39, 0xdf, 0x23, 0x41, 0xca, 0xbb, 0x59, 0x8c, 0x50, 0x5e, 0x5f, + 0x5a, 0x33, 0x89, 0x6a, 0xa1, 0x9c, 0x03, 0xe0, 0x3c, 0x7b, 0xf4, 0x4b, 0x16, 0x8c, 0x3a, 0x77, + 0x13, 0x5d, 0x31, 0x50, 0x04, 0x57, 0x1d, 0x73, 0x93, 0xca, 0x14, 0x21, 0xe4, 0x1e, 0xd6, 0x4c, + 0x13, 0xce, 0x32, 0x45, 0x5f, 0xb5, 0x00, 0x91, 0x1d, 0xe2, 0xca, 0xf0, 0x2f, 0xd1, 0x97, 0xc1, + 0x22, 0x0c, 0xbb, 0x4b, 0x1d, 0x74, 0xb9, 0x54, 0xef, 0x6c, 0xc7, 0x5d, 0xfa, 0x60, 0xff, 0x93, + 0xb2, 0x5a, 0x50, 0x3a, 0xe2, 0xd0, 0x31, 0xf2, 0x8f, 0xac, 0xa3, 0xe7, 0x1f, 0xe9, 0x03, 0xea, + 0xce, 0x1c, 0xa4, 0x4c, 0xee, 0x45, 0xe9, 0x21, 0xe5, 0x5e, 0xfc, 0x82, 0x95, 0x29, 0xce, 0x31, + 0x7c, 0xf1, 0xc3, 0xc5, 0x46, 0x3b, 0x4e, 0xf1, 0xf0, 0x88, 0x9c, 0x74, 0xcf, 0xc6, 0x4c, 0x50, + 0x69, 0x6a, 0xa0, 0x1d, 0x4a, 0x1a, 0xfe, 0xfb, 0x32, 0x0c, 0x1b, 0x3b, 0x69, 0x57, 0xb5, 0xc8, + 0x7a, 0xc4, 0xd4, 0xa2, 0xd2, 0x21, 0xd4, 0xa2, 0x9f, 0x87, 0x9a, 0x2b, 0xa5, 0x7c, 0x31, 0xe5, + 0x29, 0xf3, 0x7b, 0x87, 0x16, 0xf4, 0xaa, 0x09, 0x6b, 0x9e, 0x68, 0x21, 0x93, 0x0e, 0x21, 0x76, + 0x88, 0x01, 0xb6, 0x43, 0x74, 0xcb, 0x57, 0x10, 0x3b, 0x45, 0xe7, 0x33, 0xac, 0x86, 0x4b, 0xe4, + 0x89, 0xf7, 0x92, 0x31, 0xc9, 0xbc, 0x86, 0xcb, 0xea, 0xa2, 0x6c, 0xc6, 0x26, 0x8e, 0xfd, 0x3d, + 0x4b, 0x7d, 0xdc, 0x07, 0x90, 0xd1, 0x7c, 0x3b, 0x9b, 0xd1, 0x7c, 0xa9, 0x90, 0x61, 0xee, 0x91, + 0xca, 0x7c, 0x1d, 0x86, 0xe6, 0xc2, 0x56, 0xcb, 0x09, 0xea, 0xe8, 0xc7, 0x61, 0xc8, 0xe5, 0x3f, + 0x85, 0x1f, 0x85, 0x9d, 0xc6, 0x09, 0x28, 0x96, 0x30, 0xf4, 0x24, 0x0c, 0x38, 0x71, 0x53, 0xfa, + 0x4e, 0x58, 0x40, 0xc7, 0x4c, 0xdc, 0x4c, 0x30, 0x6b, 0xb5, 0xdf, 0x28, 0x03, 0xcc, 0x85, 0xad, + 0xc8, 0x89, 0x49, 0x7d, 0x3d, 0x64, 0xe5, 0xb1, 0x4e, 0xf4, 0x0c, 0x4b, 0x1b, 0x4b, 0x8f, 0xf2, + 0x39, 0x96, 0x71, 0x96, 0x51, 0x7e, 0xd0, 0x67, 0x19, 0x9f, 0xb7, 0x00, 0xd1, 0x2f, 0x12, 0x06, + 0x24, 0x48, 0xf5, 0xe1, 0xec, 0x34, 0xd4, 0x5c, 0xd9, 0x2a, 0xb4, 0x16, 0xbd, 0xfe, 0x24, 0x00, + 0x6b, 0x9c, 0x3e, 0xcc, 0xcf, 0x67, 0xa4, 0x70, 0x2c, 0x67, 0x63, 0x20, 0x99, 0x48, 0x15, 0xb2, + 0xd2, 0xfe, 0xfd, 0x12, 0x3c, 0xc6, 0xf7, 0xbb, 0x65, 0x27, 0x70, 0x9a, 0xa4, 0x45, 0x7b, 0xd5, + 0xef, 0x71, 0xbb, 0x4b, 0xed, 0x1e, 0x4f, 0xc6, 0x34, 0x1e, 0x77, 0x61, 0xf0, 0x09, 0xcd, 0xa7, + 0xf0, 0x62, 0xe0, 0xa5, 0x98, 0x11, 0x47, 0x09, 0x54, 0x65, 0xb1, 0x63, 0x21, 0xe8, 0x0a, 0x62, + 0xa4, 0xd6, 0xbc, 0xd8, 0x94, 0x08, 0x56, 0x8c, 0xa8, 0x56, 0xe8, 0x87, 0xee, 0x16, 0x26, 0x51, + 0xc8, 0x84, 0x9a, 0x11, 0x52, 0xb6, 0x24, 0xda, 0xb1, 0xc2, 0xb0, 0x7f, 0xdf, 0x82, 0xbc, 0xb8, + 0x37, 0x0a, 0x01, 0x59, 0xf7, 0x2d, 0x04, 0x74, 0x88, 0x4a, 0x3c, 0x3f, 0x0b, 0xc3, 0x4e, 0x4a, + 0x77, 0x68, 0x6e, 0xd3, 0x96, 0x8f, 0xe6, 0xa2, 0x5f, 0x0e, 0xeb, 0x5e, 0xc3, 0x63, 0xb6, 0xac, + 0x49, 0xce, 0xfe, 0x9f, 0x03, 0x30, 0xde, 0x11, 0x1a, 0x8f, 0x5e, 0x82, 0x11, 0x57, 0x4c, 0x8f, + 0x08, 0x93, 0x86, 0x78, 0x19, 0x23, 0xce, 0x49, 0xc3, 0x70, 0x06, 0xb3, 0x8f, 0x09, 0xba, 0x08, + 0x67, 0x62, 0x6a, 0x45, 0xb7, 0xc9, 0x4c, 0x23, 0x25, 0xf1, 0x1a, 0x71, 0xc3, 0xa0, 0xce, 0xcb, + 0x55, 0x95, 0x67, 0x1f, 0xdf, 0xdf, 0x9b, 0x3c, 0x83, 0x3b, 0xc1, 0xb8, 0xdb, 0x33, 0x28, 0x82, + 0x51, 0xdf, 0x54, 0xb0, 0x84, 0x76, 0x7d, 0x24, 0xdd, 0x4c, 0x6d, 0xc0, 0x99, 0x66, 0x9c, 0x65, + 0x90, 0xd5, 0xd2, 0x2a, 0x0f, 0x49, 0x4b, 0xfb, 0x45, 0xad, 0xa5, 0xf1, 0xb3, 0xe4, 0x8f, 0x14, + 0x9c, 0x1a, 0x71, 0xd2, 0x6a, 0xda, 0x2b, 0x50, 0x95, 0x71, 0x36, 0x7d, 0xc5, 0xa7, 0x98, 0x74, + 0x7a, 0x48, 0xb4, 0x7b, 0x25, 0xe8, 0xa2, 0xe1, 0xd3, 0x75, 0xa6, 0xb7, 0xd3, 0xcc, 0x3a, 0x3b, + 0xdc, 0x96, 0x8a, 0x76, 0x78, 0x8c, 0x11, 0xdf, 0x38, 0x3e, 0x54, 0xb4, 0x85, 0xa2, 0xc3, 0x8e, + 0x54, 0x40, 0xba, 0x0a, 0x3d, 0xba, 0x08, 0xa0, 0xb5, 0x20, 0x11, 0x6e, 0xac, 0x8e, 0x30, 0xb5, + 0xb2, 0x84, 0x0d, 0x2c, 0x6a, 0xb0, 0x7a, 0x41, 0x92, 0x3a, 0xbe, 0x7f, 0xc5, 0x0b, 0x52, 0xe1, + 0x79, 0x53, 0x3b, 0xe4, 0xa2, 0x06, 0x61, 0x13, 0xef, 0xfc, 0xfb, 0x8c, 0xef, 0x72, 0x98, 0xef, + 0xb9, 0x09, 0x4f, 0x2c, 0x78, 0xa9, 0x0a, 0x92, 0x57, 0xf3, 0x88, 0x2a, 0x39, 0x2a, 0xe9, 0xc3, + 0xea, 0x99, 0xf4, 0x61, 0x04, 0xa9, 0x97, 0xb2, 0x31, 0xf5, 0xf9, 0x20, 0x75, 0xfb, 0x25, 0x38, + 0xbb, 0xe0, 0xa5, 0x97, 0x3d, 0x9f, 0x1c, 0x92, 0x89, 0xfd, 0x7b, 0x83, 0x30, 0x62, 0xe6, 0x41, + 0x1d, 0x26, 0x6f, 0xe5, 0x8b, 0x54, 0x8f, 0x11, 0x6f, 0xe7, 0xa9, 0x03, 0xa0, 0x5b, 0xc7, 0x4e, + 0xca, 0xea, 0x3e, 0x62, 0x86, 0x2a, 0xa3, 0x79, 0x62, 0xb3, 0x03, 0xe8, 0x2e, 0x54, 0x1a, 0x2c, + 0x88, 0xba, 0x5c, 0xc4, 0x29, 0x79, 0xb7, 0x11, 0xd5, 0xcb, 0x8c, 0x87, 0x61, 0x73, 0x7e, 0x74, + 0x87, 0x8c, 0xb3, 0x99, 0x39, 0x46, 0x74, 0xa1, 0xc8, 0xc9, 0x51, 0x18, 0xbd, 0x44, 0x7d, 0xe5, + 0x08, 0xa2, 0x3e, 0x23, 0x78, 0x07, 0x1f, 0x92, 0xe0, 0x65, 0x01, 0xf1, 0xe9, 0x26, 0xd3, 0xdf, + 0x44, 0x38, 0xf4, 0x10, 0x1b, 0x04, 0x23, 0x20, 0x3e, 0x03, 0xc6, 0x79, 0x7c, 0xf4, 0x49, 0x25, + 0xba, 0xab, 0x45, 0x38, 0x2d, 0xcd, 0x19, 0x7d, 0xd2, 0x52, 0xfb, 0xf3, 0x25, 0x18, 0x5b, 0x08, + 0xda, 0xab, 0x0b, 0xab, 0xed, 0x0d, 0xdf, 0x73, 0xaf, 0x91, 0x5d, 0x2a, 0x9a, 0xb7, 0xc8, 0xee, + 0xe2, 0xbc, 0x58, 0x41, 0x6a, 0xce, 0x5c, 0xa3, 0x8d, 0x98, 0xc3, 0xa8, 0x30, 0x6a, 0x78, 0x41, + 0x93, 0xc4, 0x51, 0xec, 0x09, 0x7f, 0xa2, 0x21, 0x8c, 0x2e, 0x6b, 0x10, 0x36, 0xf1, 0x28, 0xed, + 0xf0, 0x6e, 0x40, 0xe2, 0xbc, 0x22, 0xbb, 0x42, 0x1b, 0x31, 0x87, 0x51, 0xa4, 0x34, 0x6e, 0x27, + 0xa9, 0x98, 0x8c, 0x0a, 0x69, 0x9d, 0x36, 0x62, 0x0e, 0xa3, 0x2b, 0x3d, 0x69, 0x6f, 0xb0, 0x20, + 0x84, 0x5c, 0xec, 0xf5, 0x1a, 0x6f, 0xc6, 0x12, 0x4e, 0x51, 0xb7, 0xc8, 0xee, 0x3c, 0x35, 0x29, + 0x73, 0xd9, 0x11, 0xd7, 0x78, 0x33, 0x96, 0x70, 0x56, 0x67, 0x2b, 0x3b, 0x1c, 0x3f, 0x74, 0x75, + 0xb6, 0xb2, 0xdd, 0xef, 0x61, 0x9c, 0xfe, 0x86, 0x05, 0x23, 0x66, 0xe8, 0x10, 0x6a, 0xe6, 0x74, + 0xdc, 0x95, 0x8e, 0x32, 0x8d, 0x3f, 0xdd, 0xed, 0x4e, 0x9a, 0xa6, 0x97, 0x86, 0x51, 0xf2, 0x6e, + 0x12, 0x34, 0xbd, 0x80, 0xb0, 0x13, 0x61, 0x1e, 0x72, 0x94, 0x89, 0x4b, 0x9a, 0x0b, 0xeb, 0xe4, + 0x08, 0x4a, 0xb2, 0x7d, 0x0b, 0xc6, 0x3b, 0x52, 0x62, 0xfa, 0x50, 0x2d, 0x0e, 0x4c, 0x48, 0xb4, + 0x31, 0x0c, 0x53, 0xc2, 0xa2, 0x68, 0x05, 0x9a, 0x83, 0x71, 0xbe, 0x90, 0x28, 0xa7, 0x35, 0x77, + 0x93, 0xb4, 0x54, 0x9a, 0x13, 0x73, 0x5e, 0xdf, 0xcc, 0x03, 0x71, 0x27, 0xbe, 0xfd, 0x05, 0x0b, + 0x46, 0x33, 0x59, 0x4a, 0x05, 0x29, 0x41, 0x6c, 0xa5, 0x85, 0x2c, 0x92, 0x8d, 0x85, 0xf3, 0x96, + 0xd9, 0x66, 0xaa, 0x57, 0x9a, 0x06, 0x61, 0x13, 0xcf, 0xfe, 0x72, 0x09, 0xaa, 0x32, 0x1a, 0xa0, + 0x8f, 0xae, 0x7c, 0xce, 0x82, 0x51, 0x75, 0x60, 0xc0, 0x3c, 0x51, 0xa5, 0x22, 0xe2, 0xd6, 0x69, + 0x0f, 0x54, 0xa8, 0x65, 0xd0, 0x08, 0xb5, 0x46, 0x8e, 0x4d, 0x66, 0x38, 0xcb, 0x1b, 0xdd, 0x04, + 0x48, 0x76, 0x93, 0x94, 0xb4, 0x0c, 0x9f, 0x98, 0x6d, 0xac, 0xb8, 0x29, 0x37, 0x8c, 0x09, 0x5d, + 0x5f, 0xd7, 0xc3, 0x3a, 0x59, 0x53, 0x98, 0x5a, 0x85, 0xd2, 0x6d, 0xd8, 0xa0, 0x64, 0xff, 0xfd, + 0x12, 0x9c, 0xce, 0x77, 0x09, 0x7d, 0x04, 0x46, 0x24, 0x77, 0xe3, 0x7e, 0x1d, 0x19, 0x02, 0x31, + 0x82, 0x0d, 0xd8, 0xbd, 0xbd, 0xc9, 0xc9, 0xce, 0xfb, 0x8d, 0xa6, 0x4c, 0x14, 0x9c, 0x21, 0xc6, + 0x4f, 0x6d, 0xc4, 0xf1, 0xe2, 0xec, 0xee, 0x4c, 0x14, 0x89, 0xa3, 0x17, 0xe3, 0xd4, 0xc6, 0x84, + 0xe2, 0x1c, 0x36, 0x5a, 0x85, 0xb3, 0x46, 0xcb, 0x75, 0xe2, 0x35, 0x37, 0x37, 0xc2, 0x58, 0x5a, + 0x56, 0x4f, 0xea, 0x20, 0xa5, 0x4e, 0x1c, 0xdc, 0xf5, 0x49, 0xba, 0xdb, 0xbb, 0x4e, 0xe4, 0xb8, + 0x5e, 0xba, 0x2b, 0x9c, 0x7c, 0x4a, 0x36, 0xcd, 0x89, 0x76, 0xac, 0x30, 0xec, 0x65, 0x18, 0xe8, + 0x73, 0x06, 0xf5, 0xa5, 0xd1, 0xbf, 0x02, 0x55, 0x4a, 0x4e, 0xaa, 0x77, 0x45, 0x90, 0x0c, 0xa1, + 0x2a, 0x4b, 0xe4, 0x23, 0x1b, 0xca, 0x9e, 0x23, 0x0f, 0xc6, 0xd4, 0x6b, 0x2d, 0x26, 0x49, 0x9b, + 0x19, 0xc9, 0x14, 0x88, 0x9e, 0x81, 0x32, 0xd9, 0x89, 0xf2, 0x27, 0x60, 0x97, 0x76, 0x22, 0x2f, + 0x26, 0x09, 0x45, 0x22, 0x3b, 0x11, 0x3a, 0x0f, 0x25, 0xaf, 0x2e, 0x36, 0x29, 0x10, 0x38, 0xa5, + 0xc5, 0x79, 0x5c, 0xf2, 0xea, 0xf6, 0x0e, 0xd4, 0x54, 0x4d, 0x7e, 0xb4, 0x25, 0x65, 0xb7, 0x55, + 0x44, 0xf8, 0x8e, 0xa4, 0xdb, 0x43, 0x6a, 0xb7, 0x01, 0x74, 0x4e, 0x58, 0x51, 0xf2, 0xe5, 0x02, + 0x0c, 0xb8, 0xa1, 0x48, 0x25, 0xad, 0x6a, 0x32, 0x4c, 0x68, 0x33, 0x88, 0x7d, 0x0b, 0xc6, 0xae, + 0x05, 0xe1, 0x5d, 0x56, 0x74, 0x98, 0x15, 0x0b, 0xa2, 0x84, 0x1b, 0xf4, 0x47, 0x5e, 0x45, 0x60, + 0x50, 0xcc, 0x61, 0xaa, 0x44, 0x4d, 0xa9, 0x57, 0x89, 0x1a, 0xfb, 0x53, 0x16, 0x9c, 0x56, 0x99, + 0x2d, 0x52, 0x1a, 0xbf, 0x04, 0x23, 0x1b, 0x6d, 0xcf, 0xaf, 0xcb, 0x12, 0x44, 0x39, 0x37, 0xc5, + 0xac, 0x01, 0xc3, 0x19, 0x4c, 0x6a, 0x54, 0x6d, 0x78, 0x81, 0x13, 0xef, 0xae, 0x6a, 0xf1, 0xaf, + 0x24, 0xc2, 0xac, 0x82, 0x60, 0x03, 0xcb, 0xfe, 0x9c, 0xd9, 0x05, 0x91, 0x4b, 0xd3, 0xc7, 0xc8, + 0xde, 0x80, 0x8a, 0xab, 0x0e, 0x52, 0x8f, 0x54, 0x26, 0x4d, 0xa5, 0x31, 0x33, 0x67, 0x3a, 0xa7, + 0x66, 0xff, 0xd3, 0x12, 0x8c, 0x66, 0x6a, 0x57, 0x20, 0x1f, 0xaa, 0xc4, 0x67, 0xae, 0x3c, 0x39, + 0xc5, 0x8e, 0x5b, 0x88, 0x4f, 0x2d, 0x8b, 0x4b, 0x82, 0x2e, 0x56, 0x1c, 0x1e, 0x8d, 0xf3, 0xaa, + 0x97, 0x60, 0x44, 0x76, 0xe8, 0x43, 0x4e, 0xcb, 0x17, 0xab, 0x50, 0x4d, 0x80, 0x4b, 0x06, 0x0c, + 0x67, 0x30, 0xed, 0x3f, 0x28, 0xc3, 0x04, 0xf7, 0x7d, 0xd6, 0x55, 0x48, 0xc9, 0xb2, 0xd4, 0xb2, + 0xfe, 0x8a, 0xae, 0x30, 0xc3, 0x07, 0x72, 0xe3, 0xb8, 0x75, 0x6f, 0xbb, 0x33, 0xea, 0x2b, 0xd8, + 0xe1, 0xd7, 0x72, 0xc1, 0x0e, 0x7c, 0xb3, 0x6d, 0x9e, 0x50, 0x8f, 0x7e, 0xb8, 0xa2, 0x1f, 0xfe, + 0x4e, 0x09, 0x4e, 0xe5, 0x8a, 0x0a, 0xa3, 0x37, 0xb2, 0x05, 0xf5, 0xac, 0x22, 0x3c, 0x64, 0xf7, + 0xad, 0x33, 0x7b, 0xb8, 0xb2, 0x7a, 0x0f, 0x69, 0xa9, 0xd8, 0x7f, 0x58, 0x82, 0xb1, 0x6c, 0x35, + 0xe4, 0x47, 0x70, 0xa4, 0xde, 0x05, 0x35, 0x56, 0xf0, 0x93, 0xdd, 0xe0, 0xc4, 0x1d, 0x71, 0xbc, + 0x48, 0xa4, 0x6c, 0xc4, 0x1a, 0xfe, 0x48, 0x54, 0x2b, 0xb4, 0xff, 0xae, 0x05, 0xe7, 0xf8, 0x5b, + 0xe6, 0xe7, 0xe1, 0x5f, 0xed, 0x36, 0xba, 0xaf, 0x16, 0xdb, 0xc1, 0x5c, 0x65, 0xa4, 0x83, 0xc6, + 0x97, 0xdd, 0x1c, 0x23, 0x7a, 0x9b, 0x9d, 0x0a, 0x8f, 0x60, 0x67, 0x0f, 0x35, 0x19, 0xec, 0x3f, + 0x2c, 0x83, 0xbe, 0x2c, 0x07, 0x79, 0x22, 0x4b, 0xa7, 0x90, 0x0a, 0x51, 0x6b, 0xbb, 0x81, 0xab, + 0xaf, 0xe5, 0xa9, 0xe6, 0x92, 0x74, 0x7e, 0xc5, 0x82, 0x61, 0x2f, 0xf0, 0x52, 0xcf, 0x61, 0xca, + 0x73, 0x31, 0x97, 0x7d, 0x28, 0x76, 0x8b, 0x9c, 0x72, 0x18, 0x9b, 0xde, 0x5b, 0xc5, 0x0c, 0x9b, + 0x9c, 0xd1, 0xc7, 0x44, 0x3c, 0x62, 0xb9, 0xb0, 0xfc, 0xb2, 0x6a, 0x2e, 0x08, 0x31, 0x82, 0x4a, + 0x4c, 0xd2, 0xb8, 0xa0, 0xb4, 0x4c, 0x4c, 0x49, 0xa9, 0x82, 0x80, 0xfa, 0xda, 0x42, 0xda, 0x8c, + 0x39, 0x23, 0x3b, 0x01, 0xd4, 0x39, 0x16, 0x87, 0x8c, 0xf5, 0x9a, 0x86, 0x9a, 0xd3, 0x4e, 0xc3, + 0x16, 0x1d, 0x26, 0xe1, 0x60, 0xd6, 0xd1, 0x6c, 0x12, 0x80, 0x35, 0x8e, 0xfd, 0x46, 0x05, 0x72, + 0x69, 0x33, 0x68, 0xc7, 0xbc, 0xe8, 0xc9, 0x2a, 0xf6, 0xa2, 0x27, 0xd5, 0x99, 0x6e, 0x97, 0x3d, + 0xa1, 0x26, 0x54, 0xa2, 0x4d, 0x27, 0x91, 0xba, 0xf1, 0x2b, 0x72, 0x98, 0x56, 0x69, 0xe3, 0xbd, + 0xbd, 0xc9, 0x9f, 0xe9, 0xcf, 0xd7, 0x42, 0xe7, 0xea, 0x34, 0xcf, 0x42, 0xd7, 0xac, 0x19, 0x0d, + 0xcc, 0xe9, 0x1f, 0xe6, 0xba, 0x93, 0x4f, 0x8b, 0x12, 0xad, 0x98, 0x24, 0x6d, 0x3f, 0x15, 0xb3, + 0xe1, 0x95, 0x02, 0x57, 0x19, 0x27, 0xac, 0x13, 0x3e, 0xf9, 0x7f, 0x6c, 0x30, 0x45, 0x1f, 0x81, + 0x5a, 0x92, 0x3a, 0x71, 0x7a, 0xc4, 0x14, 0x2d, 0x35, 0xe8, 0x6b, 0x92, 0x08, 0xd6, 0xf4, 0xd0, + 0x87, 0x59, 0xc1, 0x3c, 0x2f, 0xd9, 0x3c, 0x62, 0x18, 0xb1, 0x2c, 0xae, 0x27, 0x28, 0x60, 0x83, + 0x1a, 0x35, 0x3d, 0xd8, 0xdc, 0xe6, 0xb1, 0x33, 0x55, 0x66, 0x5b, 0x2a, 0x51, 0x88, 0x15, 0x04, + 0x1b, 0x58, 0xf6, 0x4f, 0x40, 0x36, 0x63, 0x19, 0x4d, 0xca, 0x04, 0x69, 0xee, 0x7b, 0x62, 0xe1, + 0xc0, 0x99, 0x5c, 0xe6, 0xdf, 0xb1, 0xc0, 0x4c, 0xab, 0x46, 0x77, 0x78, 0xfe, 0xb6, 0x55, 0xc4, + 0x79, 0x81, 0x41, 0x77, 0x6a, 0xd9, 0x89, 0x72, 0x07, 0x57, 0x32, 0x89, 0xfb, 0xfc, 0xfb, 0xa0, + 0x2a, 0xa1, 0x87, 0x52, 0xea, 0x3e, 0x09, 0x67, 0xf2, 0xd7, 0x60, 0x0a, 0x5f, 0x73, 0x33, 0x0e, + 0xdb, 0x51, 0xde, 0x90, 0x64, 0xd7, 0x24, 0x62, 0x0e, 0xa3, 0xe6, 0xd8, 0x96, 0x17, 0xd4, 0xf3, + 0x86, 0xe4, 0x35, 0x2f, 0xa8, 0x63, 0x06, 0xe9, 0xe3, 0xba, 0xaf, 0xdf, 0xb5, 0xe0, 0xc2, 0x41, + 0xb7, 0x75, 0xa2, 0x27, 0x61, 0xe0, 0xae, 0x13, 0xcb, 0x6a, 0xa3, 0x4c, 0x50, 0xde, 0x72, 0xe2, + 0x00, 0xb3, 0x56, 0xb4, 0x0b, 0x83, 0x3c, 0xff, 0x57, 0x68, 0xeb, 0xaf, 0x14, 0x7b, 0x77, 0xe8, + 0x35, 0x62, 0x98, 0x0b, 0x3c, 0xf7, 0x18, 0x0b, 0x86, 0xf6, 0xf7, 0x2d, 0x40, 0x2b, 0xdb, 0x24, + 0x8e, 0xbd, 0xba, 0x91, 0xb1, 0x8c, 0x5e, 0x84, 0x91, 0xdb, 0x6b, 0x2b, 0xd7, 0x57, 0x43, 0x2f, + 0x60, 0x15, 0x0c, 0x8c, 0x24, 0xad, 0xab, 0x46, 0x3b, 0xce, 0x60, 0xa1, 0x39, 0x18, 0xbf, 0x7d, + 0x87, 0x1a, 0xbf, 0x66, 0x1d, 0xf2, 0x92, 0x76, 0x77, 0x5e, 0x7d, 0x25, 0x07, 0xc4, 0x9d, 0xf8, + 0x68, 0x05, 0xce, 0xb5, 0xb8, 0xb9, 0xc1, 0xcb, 0x07, 0x73, 0xdb, 0x43, 0xe5, 0x68, 0x3c, 0xb1, + 0xbf, 0x37, 0x79, 0x6e, 0xb9, 0x1b, 0x02, 0xee, 0xfe, 0x9c, 0xfd, 0x3e, 0x40, 0x3c, 0x58, 0x65, + 0xae, 0x5b, 0xe4, 0x41, 0x4f, 0x4b, 0xdc, 0xfe, 0x7a, 0x05, 0x4e, 0xe5, 0xea, 0xdc, 0x51, 0x53, + 0xaf, 0x33, 0xd4, 0xe1, 0xd8, 0xfb, 0x77, 0x67, 0xf7, 0xfa, 0x0a, 0x9e, 0x08, 0xa0, 0xe2, 0x05, + 0x51, 0x3b, 0x2d, 0x26, 0x0b, 0x8a, 0x77, 0x62, 0x91, 0x12, 0x34, 0x9c, 0x44, 0xf4, 0x2f, 0xe6, + 0x6c, 0x8a, 0x0c, 0xc5, 0xc8, 0x28, 0xe3, 0x03, 0x0f, 0xc9, 0x1d, 0xf0, 0x69, 0x1d, 0x18, 0x51, + 0x29, 0xe2, 0xa0, 0x3e, 0x37, 0x59, 0x4e, 0xfa, 0x80, 0xed, 0x9b, 0x25, 0x18, 0x36, 0x3e, 0x1a, + 0xfa, 0xf5, 0x6c, 0xd1, 0x11, 0xab, 0xb8, 0x57, 0x62, 0xf4, 0xa7, 0x74, 0x59, 0x11, 0xfe, 0x4a, + 0xcf, 0x76, 0xd6, 0x1b, 0xb9, 0xb7, 0x37, 0x79, 0x3a, 0x57, 0x51, 0x24, 0x53, 0x83, 0xe4, 0xfc, + 0x27, 0xe0, 0x54, 0x8e, 0x4c, 0x97, 0x57, 0x5e, 0xcf, 0xde, 0x72, 0x7a, 0x4c, 0xb7, 0x94, 0x39, + 0x64, 0x6f, 0xd2, 0x21, 0xd3, 0x97, 0x5f, 0xf7, 0xe1, 0x8e, 0xcb, 0x25, 0xa0, 0x95, 0xfa, 0x4c, + 0x40, 0x7b, 0x0e, 0xaa, 0x51, 0xe8, 0x7b, 0xae, 0xa7, 0xca, 0x53, 0xb1, 0xc2, 0xad, 0xab, 0xa2, + 0x0d, 0x2b, 0x28, 0xba, 0x0b, 0x35, 0x75, 0x21, 0xac, 0xc8, 0xa1, 0x2f, 0xca, 0xd5, 0xab, 0x94, + 0x16, 0x7d, 0xd1, 0xab, 0xe6, 0x85, 0x6c, 0x18, 0x64, 0x9b, 0xa0, 0x8c, 0xa6, 0x65, 0xd9, 0x88, + 0x6c, 0x77, 0x4c, 0xb0, 0x80, 0xd8, 0x9f, 0x19, 0x82, 0xb3, 0xdd, 0x8a, 0x8d, 0xa2, 0x8f, 0xc3, + 0x20, 0xef, 0x63, 0x31, 0xf5, 0xac, 0xbb, 0xf1, 0x58, 0x60, 0x04, 0x45, 0xb7, 0xd8, 0x6f, 0x2c, + 0x78, 0x0a, 0xee, 0xbe, 0xb3, 0x21, 0x66, 0xc8, 0xc9, 0x70, 0x5f, 0x72, 0x34, 0xf7, 0x25, 0x87, + 0x73, 0xf7, 0x9d, 0x0d, 0xb4, 0x03, 0x95, 0xa6, 0x97, 0x12, 0x47, 0x38, 0x11, 0x6e, 0x9d, 0x08, + 0x73, 0xe2, 0x70, 0x2d, 0x8d, 0xfd, 0xc4, 0x9c, 0x21, 0xfa, 0x86, 0x05, 0xa7, 0x36, 0xb2, 0xc9, + 0x9d, 0x42, 0x78, 0x3a, 0x27, 0x50, 0x50, 0x36, 0xcb, 0x88, 0xd7, 0xfa, 0xcf, 0x35, 0xe2, 0x7c, + 0x77, 0xd0, 0x2f, 0x5a, 0x30, 0xd4, 0xf0, 0x7c, 0xa3, 0x74, 0xe1, 0x09, 0x7c, 0x9c, 0xcb, 0x8c, + 0x81, 0xb6, 0x38, 0xf8, 0xff, 0x04, 0x4b, 0xce, 0xbd, 0x76, 0xaa, 0xc1, 0xe3, 0xee, 0x54, 0x43, + 0x0f, 0xc9, 0x6d, 0xf4, 0xab, 0x25, 0x78, 0xa6, 0x8f, 0x6f, 0x64, 0xe6, 0xe3, 0x59, 0x07, 0xe4, + 0xe3, 0x5d, 0x80, 0x81, 0x98, 0x44, 0x61, 0x5e, 0xf5, 0x65, 0x41, 0xab, 0x0c, 0x82, 0x9e, 0x82, + 0xb2, 0x13, 0x79, 0x42, 0xf3, 0x55, 0xfa, 0xfa, 0xcc, 0xea, 0x22, 0xa6, 0xed, 0xf4, 0x4b, 0xd7, + 0x36, 0x64, 0xca, 0x71, 0x31, 0xf7, 0x6e, 0xf4, 0xca, 0x60, 0xe6, 0x8e, 0x1c, 0x05, 0xc5, 0x9a, + 0xaf, 0xfd, 0xd7, 0x2c, 0x38, 0xdf, 0x7b, 0x8a, 0xa0, 0x17, 0x60, 0x78, 0x23, 0x76, 0x02, 0x77, + 0x93, 0x5d, 0x52, 0x23, 0x07, 0x85, 0xa5, 0x61, 0xe9, 0x66, 0x6c, 0xe2, 0x50, 0x25, 0x96, 0x57, + 0x09, 0x36, 0x30, 0x64, 0xd6, 0x05, 0x55, 0x62, 0xd7, 0xf3, 0x40, 0xdc, 0x89, 0x6f, 0xff, 0x41, + 0xa9, 0x7b, 0xb7, 0xb8, 0x28, 0x39, 0xcc, 0x77, 0x12, 0x5f, 0xa1, 0xd4, 0xe3, 0x2b, 0xdc, 0x81, + 0x6a, 0xca, 0x52, 0xc9, 0x48, 0x43, 0xc8, 0xa3, 0xc2, 0x52, 0xb5, 0xd9, 0x8e, 0xb5, 0x2e, 0x88, + 0x63, 0xc5, 0x86, 0x6e, 0x1c, 0xbe, 0xae, 0x9d, 0x28, 0x36, 0x8e, 0xdc, 0x29, 0xc4, 0x3c, 0x9c, + 0x36, 0xaa, 0x4f, 0xf3, 0x4c, 0x1a, 0x1e, 0x4c, 0xa3, 0xd2, 0x4b, 0x57, 0x73, 0x70, 0xdc, 0xf1, + 0x84, 0xfd, 0x1b, 0x25, 0x78, 0xa2, 0xa7, 0x7c, 0xd4, 0x11, 0x3f, 0xd6, 0x7d, 0x22, 0x7e, 0x8e, + 0x3d, 0xcd, 0xcd, 0x01, 0x1e, 0x78, 0x30, 0x03, 0xfc, 0x3c, 0x54, 0xbd, 0x20, 0x21, 0x6e, 0x3b, + 0xe6, 0x83, 0x66, 0xc4, 0x95, 0x2f, 0x8a, 0x76, 0xac, 0x30, 0xec, 0x3f, 0xea, 0x3d, 0xd5, 0xe8, + 0x5e, 0xf9, 0x23, 0x3b, 0x4a, 0x2f, 0xc3, 0xa8, 0x13, 0x45, 0x1c, 0x8f, 0x45, 0x57, 0xe4, 0x12, + 0xc6, 0x67, 0x4c, 0x20, 0xce, 0xe2, 0x1a, 0x73, 0x78, 0xb0, 0xd7, 0x1c, 0xb6, 0xff, 0xd4, 0x82, + 0x1a, 0x26, 0x0d, 0xbe, 0xde, 0xd1, 0x6d, 0x31, 0x44, 0x56, 0x11, 0x95, 0x9c, 0xe8, 0xc0, 0x26, + 0x1e, 0xab, 0x70, 0xd4, 0x6d, 0xb0, 0x3b, 0xcb, 0x9a, 0x97, 0x0e, 0x55, 0xd6, 0x5c, 0x15, 0xb6, + 0x2e, 0xf7, 0x2e, 0x6c, 0x6d, 0xbf, 0x39, 0x44, 0x5f, 0x2f, 0x0a, 0xe7, 0x62, 0x52, 0x4f, 0xe8, + 0xf7, 0x6d, 0xc7, 0x7e, 0xfe, 0xce, 0xee, 0x1b, 0x78, 0x09, 0xd3, 0xf6, 0x8c, 0x0b, 0xb5, 0x74, + 0xa8, 0x74, 0xd9, 0xf2, 0x81, 0xe9, 0xb2, 0x2f, 0xc3, 0x68, 0x92, 0x6c, 0xae, 0xc6, 0xde, 0xb6, + 0x93, 0x92, 0x6b, 0x64, 0x57, 0x04, 0xe7, 0xe9, 0x14, 0xb7, 0xb5, 0x2b, 0x1a, 0x88, 0xb3, 0xb8, + 0x68, 0x01, 0xc6, 0x75, 0xd2, 0x2a, 0x89, 0x53, 0x16, 0x8b, 0xc7, 0x67, 0x82, 0xca, 0x30, 0xd3, + 0x69, 0xae, 0x02, 0x01, 0x77, 0x3e, 0x43, 0x25, 0x56, 0xa6, 0x91, 0x76, 0x64, 0x30, 0x2b, 0xb1, + 0x32, 0x74, 0x68, 0x5f, 0x3a, 0x9e, 0x40, 0xcb, 0x70, 0x86, 0x4f, 0x8c, 0x99, 0x28, 0x32, 0xde, + 0x68, 0x28, 0x5b, 0x41, 0x67, 0xa1, 0x13, 0x05, 0x77, 0x7b, 0x8e, 0x5a, 0x1f, 0xaa, 0x79, 0x71, + 0x5e, 0x78, 0xff, 0x94, 0xf5, 0xa1, 0xc8, 0x2c, 0xd6, 0xb1, 0x89, 0x87, 0x3e, 0x04, 0x8f, 0xeb, + 0xbf, 0x3c, 0x60, 0x9b, 0xbb, 0xc4, 0xe7, 0x45, 0x3d, 0x00, 0x55, 0x46, 0x79, 0xa1, 0x2b, 0x5a, + 0x1d, 0xf7, 0x7a, 0x1e, 0x6d, 0xc0, 0x79, 0x05, 0xba, 0x14, 0xa4, 0x2c, 0xfa, 0x32, 0x21, 0xb3, + 0x4e, 0x42, 0x6e, 0xc4, 0x3e, 0xab, 0x20, 0x50, 0xd3, 0x57, 0xd0, 0x2c, 0x78, 0xe9, 0x95, 0x6e, + 0x98, 0x78, 0x09, 0xdf, 0x87, 0x0a, 0x9a, 0x86, 0x1a, 0x09, 0x9c, 0x0d, 0x9f, 0xac, 0xcc, 0x2d, + 0xb2, 0xba, 0x02, 0x86, 0x07, 0xfe, 0x92, 0x04, 0x60, 0x8d, 0xa3, 0xe2, 0x41, 0x46, 0x7a, 0x5e, + 0x59, 0xb4, 0x0a, 0x67, 0x9b, 0x6e, 0x44, 0xb5, 0x09, 0xcf, 0x25, 0x33, 0x2e, 0x8b, 0x89, 0xa0, + 0x1f, 0x86, 0x97, 0x36, 0x52, 0xc1, 0x4e, 0x0b, 0x73, 0xab, 0x1d, 0x38, 0xb8, 0xeb, 0x93, 0x74, + 0x8d, 0x45, 0x71, 0xb8, 0xb3, 0x3b, 0x71, 0x26, 0xbb, 0xc6, 0x56, 0x69, 0x23, 0xe6, 0x30, 0x74, + 0x15, 0x10, 0x8b, 0x9c, 0xbb, 0x92, 0xa6, 0x91, 0x52, 0x5f, 0x26, 0xce, 0xb2, 0x57, 0x3a, 0x2f, + 0x9e, 0x40, 0x97, 0x3b, 0x30, 0x70, 0x97, 0xa7, 0xec, 0x3f, 0xb1, 0x60, 0x54, 0xad, 0xd7, 0x07, + 0x10, 0x3b, 0xea, 0x67, 0x63, 0x47, 0x17, 0x8e, 0x2f, 0xf1, 0x58, 0xcf, 0x7b, 0x04, 0x20, 0x7d, + 0x66, 0x18, 0x40, 0x4b, 0x45, 0xb5, 0x21, 0x59, 0x3d, 0x37, 0xa4, 0x47, 0x56, 0x22, 0x75, 0x4b, + 0x22, 0xae, 0x3c, 0xdc, 0x24, 0xe2, 0x35, 0x38, 0x27, 0xd5, 0x05, 0xee, 0xe3, 0xbd, 0x12, 0x26, + 0x4a, 0xc0, 0x55, 0x67, 0x9f, 0x12, 0x84, 0xce, 0x2d, 0x76, 0x43, 0xc2, 0xdd, 0x9f, 0xcd, 0x68, + 0x29, 0x43, 0x07, 0x69, 0x29, 0x7a, 0x4d, 0x2f, 0x35, 0x64, 0x51, 0xe6, 0xdc, 0x9a, 0x5e, 0xba, + 0xbc, 0x86, 0x35, 0x4e, 0x77, 0xc1, 0x5e, 0x2b, 0x48, 0xb0, 0xc3, 0xa1, 0x05, 0xbb, 0x14, 0x31, + 0xc3, 0x3d, 0x45, 0x8c, 0xf4, 0x25, 0x8d, 0xf4, 0xf4, 0x25, 0xbd, 0x1f, 0xc6, 0xbc, 0x60, 0x93, + 0xc4, 0x5e, 0x4a, 0xea, 0x6c, 0x2d, 0x30, 0xf1, 0x53, 0xd5, 0xdb, 0xfa, 0x62, 0x06, 0x8a, 0x73, + 0xd8, 0x59, 0xb9, 0x38, 0xd6, 0x87, 0x5c, 0xec, 0xb1, 0x1b, 0x9d, 0x2a, 0x66, 0x37, 0x3a, 0x7d, + 0xfc, 0xdd, 0x68, 0xfc, 0x44, 0x77, 0x23, 0x54, 0xc8, 0x6e, 0xd4, 0x97, 0xa0, 0x37, 0x0c, 0xba, + 0xb3, 0x07, 0x18, 0x74, 0xbd, 0xb6, 0xa2, 0x73, 0x47, 0xde, 0x8a, 0xba, 0xef, 0x32, 0x8f, 0x1d, + 0x69, 0x97, 0xf9, 0x6c, 0x09, 0xce, 0x69, 0x39, 0x4c, 0x67, 0xbf, 0xd7, 0xa0, 0x92, 0x88, 0xd5, + 0xf5, 0xe7, 0xfe, 0x56, 0x23, 0x94, 0x59, 0x47, 0x45, 0x2b, 0x08, 0x36, 0xb0, 0x58, 0x44, 0x30, + 0x89, 0x59, 0x01, 0xb7, 0xbc, 0x90, 0x9e, 0x13, 0xed, 0x58, 0x61, 0xd0, 0xf9, 0x45, 0x7f, 0x8b, + 0x2c, 0x8b, 0x7c, 0xdd, 0x94, 0x39, 0x0d, 0xc2, 0x26, 0x1e, 0x7a, 0x8e, 0x33, 0x61, 0x02, 0x82, + 0x0a, 0xea, 0x11, 0x71, 0x49, 0x96, 0x94, 0x09, 0x0a, 0x2a, 0xbb, 0xc3, 0x42, 0xbf, 0x2b, 0x9d, + 0xdd, 0x61, 0xa1, 0x0b, 0x0a, 0xc3, 0xfe, 0x5f, 0x16, 0x3c, 0xd1, 0x75, 0x28, 0x1e, 0xc0, 0xe6, + 0xbb, 0x93, 0xdd, 0x7c, 0xd7, 0x8a, 0x32, 0x37, 0x8c, 0xb7, 0xe8, 0xb1, 0x11, 0xff, 0x3b, 0x0b, + 0xc6, 0x34, 0xfe, 0x03, 0x78, 0x55, 0x2f, 0xfb, 0xaa, 0xc5, 0x59, 0x56, 0xb5, 0x8e, 0x77, 0xfb, + 0x13, 0xf6, 0x6e, 0xfc, 0x50, 0x74, 0xc6, 0x95, 0x95, 0xe2, 0x0e, 0x38, 0x01, 0xd8, 0x85, 0x41, + 0x76, 0x80, 0x91, 0x14, 0x73, 0x38, 0x9b, 0xe5, 0xcf, 0x0e, 0x43, 0xf4, 0xe1, 0x10, 0xfb, 0x9b, + 0x60, 0xc1, 0x90, 0x95, 0x17, 0xf4, 0x12, 0x2a, 0xcd, 0xeb, 0x22, 0x88, 0x5a, 0x97, 0x17, 0x14, + 0xed, 0x58, 0x61, 0xd8, 0x2d, 0x98, 0xc8, 0x12, 0x9f, 0x27, 0x0d, 0x16, 0xf0, 0xd3, 0xd7, 0x6b, + 0x4e, 0x43, 0xcd, 0x61, 0x4f, 0x2d, 0xb5, 0x9d, 0xfc, 0xbd, 0x8a, 0x33, 0x12, 0x80, 0x35, 0x8e, + 0xfd, 0xdb, 0x16, 0x9c, 0xe9, 0xf2, 0x32, 0x05, 0x06, 0x8f, 0xa7, 0x5a, 0x0a, 0x74, 0xdb, 0x70, + 0xdf, 0x09, 0x43, 0x75, 0xd2, 0x70, 0x64, 0x48, 0x89, 0x21, 0x73, 0xe7, 0x79, 0x33, 0x96, 0x70, + 0xfb, 0xbf, 0x5b, 0x70, 0x2a, 0xdb, 0xd7, 0x84, 0x4a, 0x4d, 0xfe, 0x32, 0xf3, 0x5e, 0xe2, 0x86, + 0xdb, 0x24, 0xde, 0xa5, 0x6f, 0xce, 0x7b, 0xad, 0xa4, 0xe6, 0x4c, 0x07, 0x06, 0xee, 0xf2, 0x14, + 0xab, 0x30, 0x56, 0x57, 0xa3, 0x2d, 0x67, 0xca, 0xcd, 0x22, 0x67, 0x8a, 0xfe, 0x98, 0xe6, 0xf1, + 0x93, 0x62, 0x89, 0x4d, 0xfe, 0xf6, 0xf7, 0x07, 0x40, 0x65, 0x97, 0xb0, 0xf3, 0xfc, 0x82, 0xa2, + 0x21, 0x32, 0xf7, 0x61, 0x94, 0xfb, 0xb8, 0x0f, 0x43, 0x4e, 0x86, 0x81, 0xfb, 0x1d, 0xb0, 0x71, + 0xef, 0x85, 0xe9, 0x24, 0x54, 0x6f, 0xb8, 0xae, 0x41, 0xd8, 0xc4, 0xa3, 0x3d, 0xf1, 0xbd, 0x6d, + 0xc2, 0x1f, 0x1a, 0xcc, 0xf6, 0x64, 0x49, 0x02, 0xb0, 0xc6, 0xa1, 0x3d, 0xa9, 0x7b, 0x8d, 0x86, + 0x30, 0xc5, 0x55, 0x4f, 0xe8, 0xe8, 0x60, 0x06, 0xe1, 0x45, 0x23, 0xc3, 0x2d, 0xa1, 0x9d, 0x1a, + 0x45, 0x23, 0xc3, 0x2d, 0xcc, 0x20, 0x54, 0x9f, 0x0a, 0xc2, 0xb8, 0xc5, 0xee, 0xbd, 0xac, 0x2b, + 0x2e, 0x42, 0x2b, 0x55, 0xfa, 0xd4, 0xf5, 0x4e, 0x14, 0xdc, 0xed, 0x39, 0x3a, 0x03, 0xa3, 0x98, + 0xd4, 0x3d, 0x37, 0x35, 0xa9, 0x41, 0x76, 0x06, 0xae, 0x76, 0x60, 0xe0, 0x2e, 0x4f, 0xa1, 0x19, + 0x38, 0x25, 0xb3, 0x83, 0x64, 0xee, 0xf7, 0x70, 0x36, 0xd7, 0x14, 0x67, 0xc1, 0x38, 0x8f, 0x4f, + 0xa5, 0x4d, 0x4b, 0x94, 0x7d, 0x60, 0x4a, 0xac, 0x21, 0x6d, 0x64, 0x39, 0x08, 0xac, 0x30, 0xec, + 0x4f, 0x97, 0xe9, 0xee, 0xd8, 0xa3, 0xd4, 0xfd, 0x03, 0x8b, 0xbe, 0xc9, 0xce, 0xc8, 0x81, 0x3e, + 0x66, 0xe4, 0x8b, 0x30, 0x72, 0x3b, 0x09, 0x03, 0x15, 0xd9, 0x52, 0xe9, 0x19, 0xd9, 0x62, 0x60, + 0x75, 0x8f, 0x6c, 0x19, 0x2c, 0x2a, 0xb2, 0x65, 0xe8, 0x88, 0x91, 0x2d, 0xdf, 0xa9, 0x80, 0x2a, + 0x16, 0x7d, 0x9d, 0xa4, 0x77, 0xc3, 0x78, 0xcb, 0x0b, 0x9a, 0x2c, 0xab, 0xea, 0x1b, 0x16, 0x8c, + 0xf0, 0xf5, 0xb2, 0x64, 0x66, 0x26, 0x34, 0x0a, 0xaa, 0x42, 0x9c, 0x61, 0x36, 0xb5, 0x6e, 0x30, + 0xca, 0xdd, 0x71, 0x64, 0x82, 0x70, 0xa6, 0x47, 0xe8, 0x13, 0x00, 0xd2, 0x6f, 0xd9, 0x90, 0x22, + 0x73, 0xb1, 0x98, 0xfe, 0x61, 0xd2, 0xd0, 0xba, 0xe9, 0xba, 0x62, 0x82, 0x0d, 0x86, 0xe8, 0xb3, + 0xf9, 0x7b, 0x81, 0x3f, 0x76, 0x22, 0x63, 0xd3, 0x4f, 0xce, 0x06, 0x86, 0x21, 0x2f, 0x68, 0xd2, + 0x79, 0x22, 0x22, 0x00, 0xde, 0xd1, 0x2d, 0x23, 0x71, 0x29, 0x74, 0xea, 0xb3, 0x8e, 0xef, 0x04, + 0x2e, 0x89, 0x17, 0x39, 0xba, 0x79, 0xe9, 0x1e, 0x6b, 0xc0, 0x92, 0x50, 0x47, 0x99, 0xed, 0x4a, + 0x3f, 0x65, 0xb6, 0xcf, 0x7f, 0x00, 0xc6, 0x3b, 0x3e, 0xe6, 0xa1, 0x52, 0x34, 0x8e, 0x9e, 0xdd, + 0x61, 0xff, 0xb3, 0x41, 0xbd, 0x69, 0x5d, 0x0f, 0xeb, 0xbc, 0xd8, 0x73, 0xac, 0xbf, 0xa8, 0xd0, + 0x3d, 0x0b, 0x9c, 0x22, 0xc6, 0xc5, 0x7d, 0xaa, 0x11, 0x9b, 0x2c, 0xe9, 0x1c, 0x8d, 0x9c, 0x98, + 0x04, 0x27, 0x3d, 0x47, 0x57, 0x15, 0x13, 0x6c, 0x30, 0x44, 0x9b, 0x99, 0x18, 0xed, 0xcb, 0xc7, + 0x8f, 0xd1, 0x66, 0xb5, 0x1a, 0xba, 0x15, 0x8c, 0xfd, 0x92, 0x05, 0x63, 0x41, 0x66, 0xe6, 0x16, + 0x13, 0x96, 0xd5, 0x7d, 0x55, 0xf0, 0xbb, 0x06, 0xb2, 0x6d, 0x38, 0xc7, 0xbf, 0xdb, 0x96, 0x56, + 0x39, 0xe4, 0x96, 0xa6, 0xab, 0xc6, 0x0f, 0xf6, 0xaa, 0x1a, 0x8f, 0x02, 0x75, 0x6d, 0xc6, 0x50, + 0xe1, 0xd7, 0x66, 0x40, 0x97, 0x2b, 0x33, 0x6e, 0x41, 0xcd, 0x8d, 0x89, 0x93, 0x1e, 0xf1, 0x06, + 0x05, 0x76, 0x14, 0x3e, 0x27, 0x09, 0x60, 0x4d, 0xcb, 0xfe, 0xb7, 0x65, 0x38, 0x2d, 0x47, 0x44, + 0x86, 0x74, 0xd2, 0xfd, 0x91, 0xf3, 0xd5, 0xca, 0xad, 0xda, 0x1f, 0xaf, 0x48, 0x00, 0xd6, 0x38, + 0x54, 0x1f, 0x6b, 0x27, 0x64, 0x25, 0x22, 0xc1, 0x92, 0xb7, 0x91, 0x88, 0xf3, 0x47, 0xb5, 0x50, + 0x6e, 0x68, 0x10, 0x36, 0xf1, 0xa8, 0x32, 0xce, 0xf5, 0xe2, 0x24, 0x1f, 0x0e, 0x2e, 0xf4, 0x6d, + 0x2c, 0xe1, 0xe8, 0x6b, 0x5d, 0xef, 0xde, 0x29, 0x26, 0x11, 0xa2, 0x23, 0x92, 0xf5, 0x90, 0x97, + 0xee, 0xbc, 0x61, 0xc1, 0xa9, 0xad, 0x4c, 0x46, 0xaa, 0x14, 0xc9, 0xc7, 0xac, 0x9d, 0x90, 0x4d, + 0x73, 0xd5, 0x53, 0x38, 0xdb, 0x9e, 0xe0, 0x3c, 0x77, 0xfb, 0x7f, 0x58, 0x60, 0x8a, 0xa7, 0xfe, + 0x34, 0x2b, 0xe3, 0xfa, 0xc0, 0xd2, 0x01, 0xd7, 0x07, 0x4a, 0x25, 0xac, 0xdc, 0x9f, 0xd2, 0x3f, + 0x70, 0x08, 0xa5, 0xbf, 0xd2, 0x53, 0x6b, 0x7b, 0x0a, 0xca, 0x6d, 0xaf, 0x2e, 0xf4, 0x76, 0x7d, + 0xda, 0xb8, 0x38, 0x8f, 0x69, 0xbb, 0xfd, 0x8f, 0x2b, 0xda, 0x4e, 0x17, 0xf1, 0xfb, 0x3f, 0x12, + 0xaf, 0xdd, 0x50, 0xa5, 0x30, 0xf8, 0x9b, 0x5f, 0xef, 0x28, 0x85, 0xf1, 0x53, 0x87, 0x4f, 0xcf, + 0xe0, 0x03, 0xd4, 0xab, 0x12, 0xc6, 0xd0, 0x01, 0xb9, 0x19, 0xb7, 0xa1, 0x4a, 0x4d, 0x1b, 0xe6, + 0x70, 0xab, 0x66, 0x3a, 0x55, 0xbd, 0x22, 0xda, 0xef, 0xed, 0x4d, 0xfe, 0xe4, 0xe1, 0xbb, 0x25, + 0x9f, 0xc6, 0x8a, 0x3e, 0x4a, 0xa0, 0x46, 0x7f, 0xb3, 0x34, 0x12, 0x61, 0x34, 0xdd, 0x50, 0xb2, + 0x48, 0x02, 0x0a, 0xc9, 0x51, 0xd1, 0x7c, 0x50, 0x00, 0x35, 0x76, 0xef, 0x17, 0x63, 0xca, 0x6d, + 0xab, 0x55, 0x95, 0xcc, 0x21, 0x01, 0xf7, 0xf6, 0x26, 0x5f, 0x3e, 0x3c, 0x53, 0xf5, 0x38, 0xd6, + 0x2c, 0xec, 0x2f, 0x0f, 0xe8, 0xb9, 0x2b, 0x2a, 0xa0, 0xfc, 0x48, 0xcc, 0xdd, 0x97, 0x72, 0x73, + 0xf7, 0x42, 0xc7, 0xdc, 0x1d, 0xd3, 0xf7, 0x53, 0x65, 0x66, 0xe3, 0x83, 0xde, 0x60, 0x0f, 0xb6, + 0xe3, 0x99, 0x66, 0x71, 0xa7, 0xed, 0xc5, 0x24, 0x59, 0x8d, 0xdb, 0x81, 0x17, 0x34, 0xc5, 0x95, + 0xc0, 0x86, 0x66, 0x91, 0x01, 0xe3, 0x3c, 0x3e, 0xbb, 0x4e, 0x78, 0x37, 0x70, 0x6f, 0x39, 0xdb, + 0x7c, 0x56, 0x19, 0x45, 0x21, 0xd6, 0x44, 0x3b, 0x56, 0x18, 0xf6, 0x9b, 0xec, 0xec, 0xd6, 0xc8, + 0x5f, 0xa3, 0x73, 0xc2, 0x67, 0x17, 0xad, 0xf1, 0x8a, 0x12, 0x6a, 0x4e, 0xf0, 0xdb, 0xd5, 0x38, + 0x0c, 0xdd, 0x85, 0xa1, 0x0d, 0x7e, 0xd3, 0x48, 0x31, 0xd5, 0x33, 0xc5, 0xb5, 0x25, 0xac, 0xc0, + 0xb5, 0xbc, 0xc3, 0xe4, 0x9e, 0xfe, 0x89, 0x25, 0x37, 0xfb, 0xdb, 0x03, 0x70, 0x2a, 0x77, 0x15, + 0x57, 0xa6, 0x96, 0x57, 0xe9, 0xc0, 0x5a, 0x5e, 0x1f, 0x05, 0xa8, 0x93, 0xc8, 0x0f, 0x77, 0x99, + 0x9a, 0x33, 0x70, 0x68, 0x35, 0x47, 0x69, 0xc6, 0xf3, 0x8a, 0x0a, 0x36, 0x28, 0x8a, 0x32, 0x1a, + 0xbc, 0x34, 0x58, 0xae, 0x8c, 0x86, 0x51, 0xc0, 0x76, 0xf0, 0xc1, 0x16, 0xb0, 0xf5, 0xe0, 0x14, + 0xef, 0xa2, 0xca, 0x12, 0x3b, 0x42, 0x32, 0x18, 0x8b, 0xb3, 0x9d, 0xcf, 0x92, 0xc1, 0x79, 0xba, + 0x0f, 0xf3, 0xa6, 0x3d, 0xf4, 0x2e, 0xa8, 0xc9, 0xef, 0x9c, 0x4c, 0xd4, 0x74, 0xa6, 0xad, 0x9c, + 0x06, 0xec, 0x06, 0x3c, 0xf1, 0xd3, 0xfe, 0x62, 0x89, 0x6a, 0xa5, 0xfc, 0x9f, 0xaa, 0x98, 0xf0, + 0x2c, 0x0c, 0x3a, 0xed, 0x74, 0x33, 0xec, 0xb8, 0x3e, 0x65, 0x86, 0xb5, 0x62, 0x01, 0x45, 0x4b, + 0x30, 0x50, 0xd7, 0x59, 0xf0, 0x87, 0x19, 0x45, 0xed, 0xe0, 0x73, 0x52, 0x82, 0x19, 0x15, 0xf4, + 0x24, 0x0c, 0xa4, 0x4e, 0x33, 0x73, 0xad, 0xf5, 0xba, 0xd3, 0x4c, 0x30, 0x6b, 0x35, 0x37, 0xcd, + 0x81, 0x03, 0x36, 0xcd, 0x97, 0x61, 0x34, 0xf1, 0x9a, 0x81, 0x93, 0xb6, 0x63, 0x62, 0x1c, 0x26, + 0xe9, 0xf8, 0x00, 0x13, 0x88, 0xb3, 0xb8, 0xf6, 0xef, 0x8d, 0xc0, 0xd9, 0xb5, 0xb9, 0x65, 0x59, + 0xd1, 0xf1, 0xc4, 0x62, 0xea, 0xbb, 0xf1, 0x78, 0x70, 0x31, 0xf5, 0x3d, 0xb8, 0xfb, 0x46, 0x4c, + 0xbd, 0x6f, 0xc4, 0xd4, 0x7f, 0xd6, 0x82, 0x9a, 0x0a, 0x25, 0x17, 0x81, 0xac, 0x1f, 0x29, 0xbe, + 0x07, 0x2a, 0xae, 0x58, 0x44, 0x14, 0xcb, 0xbf, 0x58, 0x33, 0x3f, 0xb9, 0x20, 0xfb, 0xfb, 0x76, + 0xe8, 0x50, 0x41, 0xf6, 0x2a, 0x03, 0xa1, 0x52, 0x44, 0x06, 0x42, 0x8f, 0x4f, 0xd5, 0x35, 0x03, + 0xe1, 0x4b, 0x16, 0x0c, 0x3b, 0xaf, 0xb7, 0x63, 0x32, 0x4f, 0xb6, 0x57, 0xa2, 0x44, 0x08, 0xd8, + 0x57, 0x8b, 0xef, 0xc0, 0x8c, 0x66, 0x22, 0xea, 0xbc, 0xeb, 0x06, 0x6c, 0x76, 0x21, 0x93, 0x71, + 0x30, 0x54, 0x44, 0xc6, 0x41, 0xb7, 0xee, 0x1c, 0x98, 0x71, 0xf0, 0x32, 0x8c, 0xba, 0x7e, 0x18, + 0x90, 0xd5, 0x38, 0x4c, 0x43, 0x37, 0xf4, 0x85, 0x32, 0xad, 0x44, 0xc2, 0x9c, 0x09, 0xc4, 0x59, + 0xdc, 0x5e, 0xe9, 0x0a, 0xb5, 0xe3, 0xa6, 0x2b, 0xc0, 0x43, 0x4a, 0xac, 0xfb, 0x65, 0x9d, 0x58, + 0x37, 0x5c, 0xc4, 0xd5, 0xd7, 0xdd, 0xbe, 0x48, 0x3f, 0xd9, 0x75, 0xe8, 0xab, 0xfc, 0xfe, 0x12, + 0xaa, 0x8e, 0xce, 0x85, 0x2d, 0xaa, 0x6e, 0x8d, 0xb0, 0x21, 0x79, 0xed, 0x04, 0x26, 0xec, 0xad, + 0x35, 0xcd, 0x46, 0xdd, 0x69, 0xa2, 0x9b, 0x70, 0xb6, 0x23, 0xc7, 0x49, 0xfc, 0xfb, 0x7a, 0x09, + 0x7e, 0xec, 0xc0, 0x2e, 0xa0, 0xbb, 0x00, 0xa9, 0xd3, 0x14, 0x13, 0x55, 0xb8, 0xff, 0x8f, 0x19, + 0xc4, 0xb7, 0x2e, 0xe9, 0xf1, 0x8c, 0x75, 0xf5, 0x97, 0x39, 0xd6, 0xe5, 0x6f, 0x16, 0xbb, 0x17, + 0xfa, 0x1d, 0xd5, 0xb9, 0x70, 0xe8, 0x13, 0xcc, 0x20, 0x74, 0xfb, 0x8f, 0x49, 0x53, 0xdf, 0x6f, + 0xa7, 0x3e, 0x1f, 0x66, 0xad, 0x58, 0x40, 0xd1, 0x7b, 0x61, 0xd8, 0xf1, 0x7d, 0x9e, 0x57, 0x41, + 0x12, 0x51, 0x63, 0x5d, 0x57, 0x18, 0xd2, 0x20, 0x6c, 0xe2, 0xd9, 0x7f, 0x56, 0x82, 0xc9, 0x03, + 0x64, 0x0a, 0x7a, 0x09, 0x46, 0xc2, 0xb8, 0xe9, 0x04, 0xde, 0xeb, 0xbc, 0x48, 0x43, 0x25, 0x5b, + 0x0a, 0x6a, 0xc5, 0x80, 0xe1, 0x0c, 0xa6, 0x8c, 0x84, 0x1f, 0xec, 0x11, 0x09, 0xff, 0x5e, 0x18, + 0x4e, 0x89, 0xd3, 0x12, 0x61, 0x3f, 0xc2, 0xfe, 0xd6, 0xe7, 0x99, 0x1a, 0x84, 0x4d, 0x3c, 0x2a, + 0xc5, 0xc6, 0x1c, 0xd7, 0x25, 0x49, 0x22, 0x43, 0xdd, 0x85, 0x6f, 0xb0, 0xb0, 0x38, 0x7a, 0xe6, + 0x72, 0x9d, 0xc9, 0xb0, 0xc0, 0x39, 0x96, 0xf9, 0x01, 0xaf, 0xf5, 0x39, 0xe0, 0xbf, 0x59, 0x82, + 0xa7, 0xee, 0xbb, 0xbb, 0xf5, 0x9d, 0x85, 0xd0, 0x4e, 0x48, 0x9c, 0x9f, 0x38, 0x37, 0x12, 0x12, + 0x63, 0x06, 0xe1, 0xa3, 0x14, 0x45, 0xc6, 0xfd, 0x81, 0x45, 0x27, 0xbd, 0xf0, 0x51, 0xca, 0xb0, + 0xc0, 0x39, 0x96, 0x47, 0x9d, 0x96, 0x7f, 0xaf, 0x04, 0xcf, 0xf4, 0xa1, 0x03, 0x14, 0x98, 0x1c, + 0x94, 0x4d, 0xd1, 0x2a, 0x3f, 0x9c, 0x14, 0xad, 0xa3, 0x0e, 0xd7, 0x9b, 0x25, 0x38, 0xdf, 0x7b, + 0x2b, 0x46, 0x3f, 0x4d, 0x6d, 0x78, 0x19, 0xeb, 0x63, 0x66, 0x77, 0x9d, 0xe1, 0xf6, 0x7b, 0x06, + 0x84, 0xf3, 0xb8, 0x68, 0x0a, 0x20, 0x72, 0xd2, 0xcd, 0xe4, 0xd2, 0x8e, 0x97, 0xa4, 0xa2, 0x46, + 0xc1, 0x18, 0x3f, 0x89, 0x91, 0xad, 0xd8, 0xc0, 0xa0, 0xec, 0xd8, 0xbf, 0xf9, 0xf0, 0x7a, 0x98, + 0xf2, 0x87, 0xb8, 0x19, 0x71, 0x46, 0xd6, 0x71, 0x36, 0x40, 0x38, 0x8f, 0x4b, 0xd9, 0xb1, 0xb3, + 0x3e, 0xde, 0x51, 0x6e, 0x5f, 0x30, 0x76, 0x4b, 0xaa, 0x15, 0x1b, 0x18, 0xf9, 0xbc, 0xb5, 0xca, + 0xc1, 0x79, 0x6b, 0xf6, 0x3f, 0x2a, 0xc1, 0x13, 0x3d, 0x55, 0xb9, 0xfe, 0x16, 0xe0, 0xa3, 0x97, + 0x6b, 0x76, 0xb4, 0xb9, 0x73, 0xc8, 0x0c, 0xaa, 0x3f, 0xed, 0x31, 0xd3, 0x44, 0x06, 0x55, 0x7e, + 0xab, 0xb0, 0x0e, 0xbb, 0x55, 0x3c, 0x42, 0xe3, 0xd9, 0x91, 0x34, 0x35, 0x70, 0x88, 0xa4, 0xa9, + 0xdc, 0xc7, 0xa8, 0xf4, 0xb9, 0x90, 0xbf, 0xdb, 0x7b, 0x78, 0xa9, 0xe9, 0xd7, 0x97, 0x77, 0x74, + 0x1e, 0x4e, 0x7b, 0x01, 0xab, 0xe9, 0xbf, 0xd6, 0xde, 0x10, 0x69, 0xeb, 0xa5, 0xec, 0x75, 0x95, + 0x8b, 0x39, 0x38, 0xee, 0x78, 0xe2, 0x11, 0x4c, 0x62, 0x3b, 0xe2, 0x90, 0x7e, 0x14, 0x6a, 0x8a, + 0x36, 0x0f, 0xcc, 0x55, 0x1f, 0xb4, 0x23, 0x30, 0x57, 0x7d, 0x4d, 0x03, 0x8b, 0x8e, 0x04, 0x55, + 0x37, 0x73, 0x33, 0xf3, 0x1a, 0xd9, 0x65, 0xba, 0xa7, 0xfd, 0x1e, 0x18, 0x51, 0x3e, 0x8c, 0x7e, + 0x0b, 0xb7, 0xdb, 0x5f, 0x1e, 0x84, 0xd1, 0x4c, 0x59, 0xa6, 0x8c, 0xcb, 0xd0, 0x3a, 0xd0, 0x65, + 0xc8, 0x02, 0xad, 0xdb, 0x81, 0xbc, 0xd5, 0xc1, 0x08, 0xb4, 0x6e, 0x07, 0x04, 0x73, 0x18, 0x55, + 0x1d, 0xeb, 0xf1, 0x2e, 0x6e, 0x07, 0x22, 0x20, 0x52, 0xa9, 0x8e, 0xf3, 0xac, 0x15, 0x0b, 0x28, + 0xfa, 0x94, 0x05, 0x23, 0x09, 0xf3, 0x47, 0x73, 0x87, 0xab, 0xf8, 0xa0, 0x57, 0x8f, 0x5f, 0x75, + 0x4a, 0x95, 0x20, 0x63, 0xb1, 0x14, 0x66, 0x0b, 0xce, 0x70, 0x44, 0xbf, 0x64, 0x41, 0x4d, 0x15, + 0x9f, 0x16, 0x57, 0xaf, 0xac, 0x15, 0x5b, 0xf5, 0x8a, 0x7b, 0xea, 0x94, 0x6b, 0x5f, 0x5f, 0xd5, + 0xaa, 0x19, 0xa3, 0x44, 0x79, 0x43, 0x87, 0x4e, 0xc6, 0x1b, 0x0a, 0x5d, 0x3c, 0xa1, 0xef, 0x82, + 0x5a, 0xcb, 0x09, 0xbc, 0x06, 0x49, 0x52, 0xee, 0xa0, 0x94, 0xc5, 0xf8, 0x64, 0x23, 0xd6, 0x70, + 0xba, 0xd9, 0x25, 0xec, 0xc5, 0x52, 0xc3, 0xa3, 0xc8, 0x36, 0xbb, 0x35, 0xdd, 0x8c, 0x4d, 0x1c, + 0xd3, 0xfd, 0x09, 0x0f, 0xd5, 0xfd, 0x39, 0x7c, 0x80, 0xfb, 0xf3, 0x1f, 0x58, 0x70, 0xae, 0xeb, + 0x57, 0x7b, 0x74, 0x43, 0xe4, 0xec, 0xaf, 0x54, 0xe0, 0x4c, 0x97, 0xfa, 0x6a, 0x68, 0xd7, 0x9c, + 0xcf, 0x56, 0x11, 0xa7, 0xe2, 0xd9, 0x43, 0x5e, 0x39, 0x8c, 0x5d, 0x26, 0xf1, 0xe1, 0x0e, 0x1f, + 0xf4, 0x01, 0x40, 0xf9, 0xc1, 0x1e, 0x00, 0x18, 0xd3, 0x72, 0xe0, 0xa1, 0x4e, 0xcb, 0xca, 0xfd, + 0xa7, 0x25, 0xfa, 0xa6, 0x05, 0x13, 0xad, 0x1e, 0x45, 0x7d, 0x85, 0x53, 0xef, 0xe6, 0xc9, 0x94, + 0x0c, 0x9e, 0x7d, 0x72, 0x7f, 0x6f, 0xb2, 0x67, 0x2d, 0x65, 0xdc, 0xb3, 0x57, 0xf6, 0xf7, 0xcb, + 0xc0, 0x8a, 0xfb, 0xb1, 0x1a, 0x3a, 0xbb, 0xe8, 0x93, 0x66, 0x99, 0x46, 0xab, 0xa8, 0x92, 0x82, + 0x9c, 0xb8, 0x2a, 0xf3, 0xc8, 0x47, 0xb0, 0x5b, 0xd5, 0xc7, 0xbc, 0xd0, 0x2a, 0xf5, 0x21, 0xb4, + 0x7c, 0x59, 0x0f, 0xb3, 0x5c, 0x7c, 0x3d, 0xcc, 0x5a, 0xbe, 0x16, 0xe6, 0xfd, 0x3f, 0xf1, 0xc0, + 0x23, 0xf9, 0x89, 0xff, 0xa6, 0xc5, 0x05, 0x4f, 0xee, 0x2b, 0x68, 0xcd, 0xc0, 0xba, 0x8f, 0x66, + 0xf0, 0x3c, 0xbb, 0x74, 0xb7, 0x71, 0x85, 0x38, 0xbe, 0xd0, 0x20, 0xcc, 0xfb, 0x73, 0x59, 0x3b, + 0x56, 0x18, 0xec, 0x9a, 0x2c, 0xdf, 0x0f, 0xef, 0x5e, 0x6a, 0x45, 0xe9, 0xae, 0xd0, 0x25, 0xf4, + 0x35, 0x59, 0x0a, 0x82, 0x0d, 0x2c, 0xfb, 0x6f, 0x95, 0xf8, 0x0c, 0x14, 0xc7, 0xfa, 0x2f, 0xe5, + 0x2e, 0x36, 0xe9, 0xff, 0x44, 0xfc, 0xe3, 0x00, 0xae, 0xba, 0x6f, 0x53, 0x9c, 0xb7, 0x5c, 0x39, + 0xf6, 0x7d, 0x85, 0x82, 0x9e, 0x7e, 0x0d, 0xdd, 0x86, 0x0d, 0x7e, 0x19, 0x59, 0x5a, 0x3e, 0x50, + 0x96, 0x66, 0xc4, 0xca, 0xc0, 0x01, 0xbb, 0xdd, 0x9f, 0x59, 0x90, 0xd1, 0x88, 0x50, 0x04, 0x15, + 0xda, 0xdd, 0xdd, 0x62, 0xae, 0x12, 0x35, 0x49, 0x53, 0xd1, 0x28, 0xa6, 0x3d, 0xfb, 0x89, 0x39, + 0x23, 0xe4, 0x8b, 0xd3, 0xff, 0x52, 0x11, 0xd7, 0xdd, 0x9a, 0x0c, 0xaf, 0x84, 0xe1, 0x16, 0x3f, + 0x34, 0xd4, 0x91, 0x04, 0xf6, 0x4b, 0x30, 0xde, 0xd1, 0x29, 0x76, 0x87, 0x41, 0x28, 0xef, 0x4f, + 0x35, 0xa6, 0x2b, 0x4b, 0xc1, 0xc3, 0x1c, 0x66, 0xbf, 0x69, 0xc1, 0xe9, 0x3c, 0x79, 0xf4, 0x55, + 0x0b, 0xc6, 0x93, 0x3c, 0xbd, 0x93, 0x1a, 0x3b, 0x15, 0x19, 0xd7, 0x01, 0xc2, 0x9d, 0x9d, 0xb0, + 0xff, 0xaf, 0x98, 0xfc, 0xb7, 0xbc, 0xa0, 0x1e, 0xde, 0x55, 0x8a, 0x89, 0xd5, 0x53, 0x31, 0xa1, + 0xeb, 0xd1, 0xdd, 0x24, 0xf5, 0xb6, 0xdf, 0x91, 0xfb, 0xb7, 0x26, 0xda, 0xb1, 0xc2, 0x60, 0xa9, + 0x4e, 0x6d, 0x51, 0x30, 0x37, 0x37, 0x29, 0xe7, 0x45, 0x3b, 0x56, 0x18, 0xe8, 0x45, 0x18, 0x31, + 0xef, 0x08, 0x16, 0xf3, 0x92, 0x29, 0xe4, 0xe6, 0x75, 0xc2, 0x38, 0x83, 0x85, 0xa6, 0x00, 0x94, + 0x92, 0x23, 0xb7, 0x48, 0xe6, 0x84, 0x51, 0x92, 0x28, 0xc1, 0x06, 0x06, 0x4b, 0x2c, 0xe4, 0x17, + 0xf1, 0xca, 0xf8, 0x51, 0x9e, 0x58, 0x28, 0xda, 0xb0, 0x82, 0x52, 0x69, 0xd2, 0x72, 0x82, 0xb6, + 0xe3, 0xd3, 0x11, 0x12, 0xd9, 0xd0, 0x6a, 0x19, 0x2e, 0x2b, 0x08, 0x36, 0xb0, 0xe8, 0x1b, 0xa7, + 0x5e, 0x8b, 0x7c, 0x38, 0x0c, 0x64, 0xe4, 0x95, 0x3e, 0x52, 0x11, 0xed, 0x58, 0x61, 0xd8, 0xff, + 0xd5, 0x82, 0xfc, 0x75, 0xed, 0x19, 0x2f, 0x87, 0x75, 0x60, 0x06, 0x76, 0x36, 0x7f, 0xb3, 0xd4, + 0x57, 0xfe, 0xa6, 0x99, 0x5a, 0x59, 0xbe, 0x6f, 0x6a, 0xe5, 0x8f, 0xeb, 0x9b, 0xb0, 0x78, 0x0e, + 0xe6, 0x70, 0xb7, 0x5b, 0xb0, 0x90, 0x0d, 0x83, 0xae, 0xa3, 0x6a, 0x74, 0x8c, 0x70, 0xdb, 0x61, + 0x6e, 0x86, 0x21, 0x09, 0x88, 0xbd, 0x02, 0x35, 0x75, 0xb2, 0x20, 0x0d, 0x55, 0xab, 0xbb, 0xa1, + 0xda, 0x57, 0x2a, 0xd9, 0xec, 0xc6, 0xb7, 0x7f, 0xf0, 0xf4, 0xdb, 0xbe, 0xfb, 0x83, 0xa7, 0xdf, + 0xf6, 0xc7, 0x3f, 0x78, 0xfa, 0x6d, 0x9f, 0xda, 0x7f, 0xda, 0xfa, 0xf6, 0xfe, 0xd3, 0xd6, 0x77, + 0xf7, 0x9f, 0xb6, 0xfe, 0x78, 0xff, 0x69, 0xeb, 0xfb, 0xfb, 0x4f, 0x5b, 0x5f, 0xfa, 0x4f, 0x4f, + 0xbf, 0xed, 0xc3, 0x5d, 0x43, 0xef, 0xe8, 0x8f, 0x77, 0xbb, 0xf5, 0xe9, 0xed, 0x8b, 0x2c, 0xfa, + 0x8b, 0x2e, 0xaf, 0x69, 0x63, 0x4e, 0x4d, 0xcb, 0xe5, 0xf5, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, + 0x51, 0xda, 0xe1, 0xf8, 0x58, 0xd1, 0x00, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -5575,6 +5675,18 @@ func (m *ApplicationSetGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l + if m.Plugin != nil { + { + size, err := m.Plugin.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } if m.Selector != nil { { size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) @@ -5753,6 +5865,18 @@ func (m *ApplicationSetNestedGenerator) MarshalToSizedBuffer(dAtA []byte) (int, _ = i var l int _ = l + if m.Plugin != nil { + { + size, err := m.Plugin.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } if m.Selector != nil { { size, err := m.Selector.MarshalToSizedBuffer(dAtA[:i]) @@ -6325,6 +6449,18 @@ func (m *ApplicationSetTerminalGenerator) MarshalToSizedBuffer(dAtA []byte) (int _ = i var l int _ = l + if m.Plugin != nil { + { + size, err := m.Plugin.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } if m.PullRequest != nil { { size, err := m.PullRequest.MarshalToSizedBuffer(dAtA[:i]) @@ -9841,7 +9977,7 @@ func (m *OverrideIgnoreDiff) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *ProjectRole) Marshal() (dAtA []byte, err error) { +func (m *PluginConfigMapRef) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -9851,53 +9987,16 @@ func (m *ProjectRole) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *ProjectRole) MarshalTo(dAtA []byte) (int, error) { +func (m *PluginConfigMapRef) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ProjectRole) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *PluginConfigMapRef) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Groups) > 0 { - for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Groups[iNdEx]) - copy(dAtA[i:], m.Groups[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Groups[iNdEx]))) - i-- - dAtA[i] = 0x2a - } - } - if len(m.JWTTokens) > 0 { - for iNdEx := len(m.JWTTokens) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.JWTTokens[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - if len(m.Policies) > 0 { - for iNdEx := len(m.Policies) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Policies[iNdEx]) - copy(dAtA[i:], m.Policies[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Policies[iNdEx]))) - i-- - dAtA[i] = 0x1a - } - } - i -= len(m.Description) - copy(dAtA[i:], m.Description) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Description))) - i-- - dAtA[i] = 0x12 i -= len(m.Name) copy(dAtA[i:], m.Name) i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) @@ -9906,7 +10005,7 @@ func (m *ProjectRole) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *PullRequestGenerator) Marshal() (dAtA []byte, err error) { +func (m *PluginGenerator) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -9916,16 +10015,40 @@ func (m *PullRequestGenerator) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *PullRequestGenerator) MarshalTo(dAtA []byte) (int, error) { +func (m *PluginGenerator) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *PullRequestGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *PluginGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l + if len(m.Values) > 0 { + keysForValues := make([]string, 0, len(m.Values)) + for k := range m.Values { + keysForValues = append(keysForValues, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForValues) + for iNdEx := len(keysForValues) - 1; iNdEx >= 0; iNdEx-- { + v := m.Values[string(keysForValues[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForValues[iNdEx]) + copy(dAtA[i:], keysForValues[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForValues[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x2a + } + } { size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -9935,7 +10058,182 @@ func (m *PullRequestGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x3a + dAtA[i] = 0x22 + if m.RequeueAfterSeconds != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.RequeueAfterSeconds)) + i-- + dAtA[i] = 0x18 + } + { + size, err := m.Input.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.ConfigMapRef.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 *PluginInput) 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 *PluginInput) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PluginInput) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Parameters) > 0 { + keysForParameters := make([]string, 0, len(m.Parameters)) + for k := range m.Parameters { + keysForParameters = append(keysForParameters, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForParameters) + for iNdEx := len(keysForParameters) - 1; iNdEx >= 0; iNdEx-- { + v := m.Parameters[string(keysForParameters[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForParameters[iNdEx]) + copy(dAtA[i:], keysForParameters[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForParameters[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *ProjectRole) 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 *ProjectRole) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ProjectRole) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Groups) > 0 { + for iNdEx := len(m.Groups) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Groups[iNdEx]) + copy(dAtA[i:], m.Groups[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Groups[iNdEx]))) + i-- + dAtA[i] = 0x2a + } + } + if len(m.JWTTokens) > 0 { + for iNdEx := len(m.JWTTokens) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.JWTTokens[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if len(m.Policies) > 0 { + for iNdEx := len(m.Policies) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Policies[iNdEx]) + copy(dAtA[i:], m.Policies[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Policies[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x12 + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *PullRequestGenerator) 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 *PullRequestGenerator) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PullRequestGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a if m.RequeueAfterSeconds != nil { i = encodeVarintGenerated(dAtA, i, uint64(*m.RequeueAfterSeconds)) i-- @@ -13517,6 +13815,10 @@ func (m *ApplicationSetGenerator) Size() (n int) { l = m.Selector.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Plugin != nil { + l = m.Plugin.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -13579,6 +13881,10 @@ func (m *ApplicationSetNestedGenerator) Size() (n int) { l = m.Selector.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Plugin != nil { + l = m.Plugin.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -13776,6 +14082,10 @@ func (m *ApplicationSetTerminalGenerator) Size() (n int) { l = m.PullRequest.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Plugin != nil { + l = m.Plugin.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -15079,6 +15389,61 @@ func (m *OverrideIgnoreDiff) Size() (n int) { return n } +func (m *PluginConfigMapRef) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PluginGenerator) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ConfigMapRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Input.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.RequeueAfterSeconds != nil { + n += 1 + sovGenerated(uint64(*m.RequeueAfterSeconds)) + } + l = m.Template.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Values) > 0 { + for k, v := range m.Values { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *PluginInput) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Parameters) > 0 { + for k, v := range m.Parameters { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + func (m *ProjectRole) Size() (n int) { if m == nil { return 0 @@ -16586,6 +16951,7 @@ func (this *ApplicationSetGenerator) String() string { `Matrix:` + strings.Replace(this.Matrix.String(), "MatrixGenerator", "MatrixGenerator", 1) + `,`, `Merge:` + strings.Replace(this.Merge.String(), "MergeGenerator", "MergeGenerator", 1) + `,`, `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `Plugin:` + strings.Replace(this.Plugin.String(), "PluginGenerator", "PluginGenerator", 1) + `,`, `}`, }, "") return s @@ -16620,6 +16986,7 @@ func (this *ApplicationSetNestedGenerator) String() string { `Matrix:` + strings.Replace(fmt.Sprintf("%v", this.Matrix), "JSON", "v11.JSON", 1) + `,`, `Merge:` + strings.Replace(fmt.Sprintf("%v", this.Merge), "JSON", "v11.JSON", 1) + `,`, `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "v1.LabelSelector", 1) + `,`, + `Plugin:` + strings.Replace(this.Plugin.String(), "PluginGenerator", "PluginGenerator", 1) + `,`, `}`, }, "") return s @@ -16774,6 +17141,7 @@ func (this *ApplicationSetTerminalGenerator) String() string { `SCMProvider:` + strings.Replace(this.SCMProvider.String(), "SCMProviderGenerator", "SCMProviderGenerator", 1) + `,`, `ClusterDecisionResource:` + strings.Replace(this.ClusterDecisionResource.String(), "DuckTypeGenerator", "DuckTypeGenerator", 1) + `,`, `PullRequest:` + strings.Replace(this.PullRequest.String(), "PullRequestGenerator", "PullRequestGenerator", 1) + `,`, + `Plugin:` + strings.Replace(this.Plugin.String(), "PluginGenerator", "PluginGenerator", 1) + `,`, `}`, }, "") return s @@ -17822,47 +18190,101 @@ func (this *OverrideIgnoreDiff) String() string { }, "") return s } -func (this *ProjectRole) String() string { +func (this *PluginConfigMapRef) String() string { if this == nil { return "nil" } - repeatedStringForJWTTokens := "[]JWTToken{" - for _, f := range this.JWTTokens { - repeatedStringForJWTTokens += strings.Replace(strings.Replace(f.String(), "JWTToken", "JWTToken", 1), `&`, ``, 1) + "," - } - repeatedStringForJWTTokens += "}" - s := strings.Join([]string{`&ProjectRole{`, + s := strings.Join([]string{`&PluginConfigMapRef{`, `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Description:` + fmt.Sprintf("%v", this.Description) + `,`, - `Policies:` + fmt.Sprintf("%v", this.Policies) + `,`, - `JWTTokens:` + repeatedStringForJWTTokens + `,`, - `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, `}`, }, "") return s } -func (this *PullRequestGenerator) String() string { +func (this *PluginGenerator) String() string { if this == nil { return "nil" } - repeatedStringForFilters := "[]PullRequestGeneratorFilter{" - for _, f := range this.Filters { - repeatedStringForFilters += strings.Replace(strings.Replace(f.String(), "PullRequestGeneratorFilter", "PullRequestGeneratorFilter", 1), `&`, ``, 1) + "," + keysForValues := make([]string, 0, len(this.Values)) + for k := range this.Values { + keysForValues = append(keysForValues, k) } - repeatedStringForFilters += "}" - s := strings.Join([]string{`&PullRequestGenerator{`, - `Github:` + strings.Replace(this.Github.String(), "PullRequestGeneratorGithub", "PullRequestGeneratorGithub", 1) + `,`, - `GitLab:` + strings.Replace(this.GitLab.String(), "PullRequestGeneratorGitLab", "PullRequestGeneratorGitLab", 1) + `,`, - `Gitea:` + strings.Replace(this.Gitea.String(), "PullRequestGeneratorGitea", "PullRequestGeneratorGitea", 1) + `,`, - `BitbucketServer:` + strings.Replace(this.BitbucketServer.String(), "PullRequestGeneratorBitbucketServer", "PullRequestGeneratorBitbucketServer", 1) + `,`, - `Filters:` + repeatedStringForFilters + `,`, + github_com_gogo_protobuf_sortkeys.Strings(keysForValues) + mapStringForValues := "map[string]string{" + for _, k := range keysForValues { + mapStringForValues += fmt.Sprintf("%v: %v,", k, this.Values[k]) + } + mapStringForValues += "}" + s := strings.Join([]string{`&PluginGenerator{`, + `ConfigMapRef:` + strings.Replace(strings.Replace(this.ConfigMapRef.String(), "PluginConfigMapRef", "PluginConfigMapRef", 1), `&`, ``, 1) + `,`, + `Input:` + strings.Replace(strings.Replace(this.Input.String(), "PluginInput", "PluginInput", 1), `&`, ``, 1) + `,`, `RequeueAfterSeconds:` + valueToStringGenerated(this.RequeueAfterSeconds) + `,`, `Template:` + strings.Replace(strings.Replace(this.Template.String(), "ApplicationSetTemplate", "ApplicationSetTemplate", 1), `&`, ``, 1) + `,`, + `Values:` + mapStringForValues + `,`, `}`, }, "") return s } -func (this *PullRequestGeneratorBitbucketServer) String() string { +func (this *PluginInput) String() string { + if this == nil { + return "nil" + } + keysForParameters := make([]string, 0, len(this.Parameters)) + for k := range this.Parameters { + keysForParameters = append(keysForParameters, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForParameters) + mapStringForParameters := "PluginParameters{" + for _, k := range keysForParameters { + mapStringForParameters += fmt.Sprintf("%v: %v,", k, this.Parameters[k]) + } + mapStringForParameters += "}" + s := strings.Join([]string{`&PluginInput{`, + `Parameters:` + mapStringForParameters + `,`, + `}`, + }, "") + return s +} +func (this *ProjectRole) String() string { + if this == nil { + return "nil" + } + repeatedStringForJWTTokens := "[]JWTToken{" + for _, f := range this.JWTTokens { + repeatedStringForJWTTokens += strings.Replace(strings.Replace(f.String(), "JWTToken", "JWTToken", 1), `&`, ``, 1) + "," + } + repeatedStringForJWTTokens += "}" + s := strings.Join([]string{`&ProjectRole{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Description:` + fmt.Sprintf("%v", this.Description) + `,`, + `Policies:` + fmt.Sprintf("%v", this.Policies) + `,`, + `JWTTokens:` + repeatedStringForJWTTokens + `,`, + `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, + `}`, + }, "") + return s +} +func (this *PullRequestGenerator) String() string { + if this == nil { + return "nil" + } + repeatedStringForFilters := "[]PullRequestGeneratorFilter{" + for _, f := range this.Filters { + repeatedStringForFilters += strings.Replace(strings.Replace(f.String(), "PullRequestGeneratorFilter", "PullRequestGeneratorFilter", 1), `&`, ``, 1) + "," + } + repeatedStringForFilters += "}" + s := strings.Join([]string{`&PullRequestGenerator{`, + `Github:` + strings.Replace(this.Github.String(), "PullRequestGeneratorGithub", "PullRequestGeneratorGithub", 1) + `,`, + `GitLab:` + strings.Replace(this.GitLab.String(), "PullRequestGeneratorGitLab", "PullRequestGeneratorGitLab", 1) + `,`, + `Gitea:` + strings.Replace(this.Gitea.String(), "PullRequestGeneratorGitea", "PullRequestGeneratorGitea", 1) + `,`, + `BitbucketServer:` + strings.Replace(this.BitbucketServer.String(), "PullRequestGeneratorBitbucketServer", "PullRequestGeneratorBitbucketServer", 1) + `,`, + `Filters:` + repeatedStringForFilters + `,`, + `RequeueAfterSeconds:` + valueToStringGenerated(this.RequeueAfterSeconds) + `,`, + `Template:` + strings.Replace(strings.Replace(this.Template.String(), "ApplicationSetTemplate", "ApplicationSetTemplate", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PullRequestGeneratorBitbucketServer) String() string { if this == nil { return "nil" } @@ -21487,6 +21909,42 @@ func (m *ApplicationSetGenerator) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Plugin", 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.Plugin == nil { + m.Plugin = &PluginGenerator{} + } + if err := m.Plugin.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -21978,6 +22436,42 @@ func (m *ApplicationSetNestedGenerator) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Plugin", 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.Plugin == nil { + m.Plugin = &PluginGenerator{} + } + if err := m.Plugin.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -23547,6 +24041,42 @@ func (m *ApplicationSetTerminalGenerator) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Plugin", 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.Plugin == nil { + m.Plugin = &PluginGenerator{} + } + if err := m.Plugin.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -34777,6 +35307,563 @@ func (m *OverrideIgnoreDiff) Unmarshal(dAtA []byte) error { } return nil } +func (m *PluginConfigMapRef) 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: PluginConfigMapRef: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PluginConfigMapRef: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", 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 + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + 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 *PluginGenerator) 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: PluginGenerator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PluginGenerator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConfigMapRef", 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 err := m.ConfigMapRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Input", 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 err := m.Input.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RequeueAfterSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.RequeueAfterSeconds = &v + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Template", 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 err := m.Template.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Values", 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.Values == nil { + m.Values = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := 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) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Values[mapkey] = mapvalue + iNdEx = postIndex + 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 *PluginInput) 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: PluginInput: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PluginInput: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Parameters", 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.Parameters == nil { + m.Parameters = make(PluginParameters) + } + var mapkey string + mapvalue := &v11.JSON{} + for iNdEx < postIndex { + entryPreIndex := 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) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &v11.JSON{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Parameters[mapkey] = *mapvalue + iNdEx = postIndex + 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 *ProjectRole) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index 6f29b2b4393e7..17802a88d2ddc 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -231,6 +231,8 @@ message ApplicationSetGenerator { // Selector allows to post-filter all generator. optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 9; + + optional PluginGenerator plugin = 10; } // ApplicationSetList contains a list of ApplicationSet @@ -265,6 +267,8 @@ message ApplicationSetNestedGenerator { // Selector allows to post-filter all generator. optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 9; + + optional PluginGenerator plugin = 10; } message ApplicationSetRolloutStep { @@ -354,6 +358,8 @@ message ApplicationSetTerminalGenerator { optional DuckTypeGenerator clusterDecisionResource = 5; optional PullRequestGenerator pullRequest = 6; + + optional PluginGenerator plugin = 7; } // ApplicationSource contains all required information about the source of an application @@ -1196,6 +1202,33 @@ message OverrideIgnoreDiff { repeated string managedFieldsManagers = 3; } +message PluginConfigMapRef { + // Name of the ConfigMap + optional string name = 1; +} + +// PluginGenerator defines connection info specific to Plugin. +message PluginGenerator { + optional PluginConfigMapRef configMapRef = 1; + + optional PluginInput input = 2; + + // RequeueAfterSeconds determines how long the ApplicationSet controller will wait before reconciling the ApplicationSet again. + optional int64 requeueAfterSeconds = 3; + + optional ApplicationSetTemplate template = 4; + + // Values contains key/value pairs which are passed directly as parameters to the template. These values will not be + // sent as parameters to the plugin. + map values = 5; +} + +message PluginInput { + // Parameters contains the information to pass to the plugin. It is a map. The keys must be strings, and the + // values can be any type. + map parameters = 1; +} + // ProjectRole represents a role that has access to a project message ProjectRole { // Name is a name for this role diff --git a/pkg/apis/application/v1alpha1/openapi_generated.go b/pkg/apis/application/v1alpha1/openapi_generated.go index 0001735fb5e54..d2254caf0214d 100644 --- a/pkg/apis/application/v1alpha1/openapi_generated.go +++ b/pkg/apis/application/v1alpha1/openapi_generated.go @@ -102,6 +102,9 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.OrphanedResourceKey": schema_pkg_apis_application_v1alpha1_OrphanedResourceKey(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.OrphanedResourcesMonitorSettings": schema_pkg_apis_application_v1alpha1_OrphanedResourcesMonitorSettings(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.OverrideIgnoreDiff": schema_pkg_apis_application_v1alpha1_OverrideIgnoreDiff(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PluginConfigMapRef": schema_pkg_apis_application_v1alpha1_PluginConfigMapRef(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PluginGenerator": schema_pkg_apis_application_v1alpha1_PluginGenerator(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PluginInput": schema_pkg_apis_application_v1alpha1_PluginInput(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ProjectRole": schema_pkg_apis_application_v1alpha1_ProjectRole(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PullRequestGenerator": schema_pkg_apis_application_v1alpha1_PullRequestGenerator(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PullRequestGeneratorBitbucketServer": schema_pkg_apis_application_v1alpha1_PullRequestGeneratorBitbucketServer(ref), @@ -936,11 +939,16 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSetGenerator(ref common.Ref Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), }, }, + "plugin": { + SchemaProps: spec.SchemaProps{ + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PluginGenerator"), + }, + }, }, }, }, Dependencies: []string{ - "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ClusterGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.DuckTypeGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.GitGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ListGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.MatrixGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.MergeGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PullRequestGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SCMProviderGenerator", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ClusterGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.DuckTypeGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.GitGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ListGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.MatrixGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.MergeGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PluginGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PullRequestGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SCMProviderGenerator", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, } } @@ -1048,11 +1056,16 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSetNestedGenerator(ref comm Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), }, }, + "plugin": { + SchemaProps: spec.SchemaProps{ + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PluginGenerator"), + }, + }, }, }, }, Dependencies: []string{ - "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ClusterGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.DuckTypeGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.GitGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ListGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PullRequestGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SCMProviderGenerator", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSON", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ClusterGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.DuckTypeGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.GitGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ListGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PluginGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PullRequestGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SCMProviderGenerator", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSON", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, } } @@ -1407,11 +1420,16 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSetTerminalGenerator(ref co Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PullRequestGenerator"), }, }, + "plugin": { + SchemaProps: spec.SchemaProps{ + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PluginGenerator"), + }, + }, }, }, }, Dependencies: []string{ - "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ClusterGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.DuckTypeGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.GitGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ListGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PullRequestGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SCMProviderGenerator"}, + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ClusterGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.DuckTypeGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.GitGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ListGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PluginGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PullRequestGenerator", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SCMProviderGenerator"}, } } @@ -4279,6 +4297,113 @@ func schema_pkg_apis_application_v1alpha1_OverrideIgnoreDiff(ref common.Referenc } } +func schema_pkg_apis_application_v1alpha1_PluginConfigMapRef(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the ConfigMap", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name"}, + }, + }, + } +} + +func schema_pkg_apis_application_v1alpha1_PluginGenerator(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PluginGenerator defines connection info specific to Plugin.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "configMapRef": { + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PluginConfigMapRef"), + }, + }, + "input": { + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PluginInput"), + }, + }, + "requeueAfterSeconds": { + SchemaProps: spec.SchemaProps{ + Description: "RequeueAfterSeconds determines how long the ApplicationSet controller will wait before reconciling the ApplicationSet again.", + Type: []string{"integer"}, + Format: "int64", + }, + }, + "template": { + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetTemplate"), + }, + }, + "values": { + SchemaProps: spec.SchemaProps{ + Description: "Values contains key/value pairs which are passed directly as parameters to the template. These values will not be sent as parameters to the plugin.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + Required: []string{"configMapRef"}, + }, + }, + Dependencies: []string{ + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSetTemplate", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PluginConfigMapRef", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.PluginInput"}, + } +} + +func schema_pkg_apis_application_v1alpha1_PluginInput(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "parameters": { + SchemaProps: spec.SchemaProps{ + Description: "Parameters contains the information to pass to the plugin. It is a map. The keys must be strings, and the values can be any type.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSON"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1.JSON"}, + } +} + func schema_pkg_apis_application_v1alpha1_ProjectRole(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go index 34b7bf06cb783..4d7438d6d2677 100644 --- a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go @@ -452,6 +452,11 @@ func (in *ApplicationSetGenerator) DeepCopyInto(out *ApplicationSetGenerator) { *out = new(v1.LabelSelector) (*in).DeepCopyInto(*out) } + if in.Plugin != nil { + in, out := &in.Plugin, &out.Plugin + *out = new(PluginGenerator) + (*in).DeepCopyInto(*out) + } return } @@ -546,6 +551,11 @@ func (in *ApplicationSetNestedGenerator) DeepCopyInto(out *ApplicationSetNestedG *out = new(v1.LabelSelector) (*in).DeepCopyInto(*out) } + if in.Plugin != nil { + in, out := &in.Plugin, &out.Plugin + *out = new(PluginGenerator) + (*in).DeepCopyInto(*out) + } return } @@ -829,6 +839,11 @@ func (in *ApplicationSetTerminalGenerator) DeepCopyInto(out *ApplicationSetTermi *out = new(PullRequestGenerator) (*in).DeepCopyInto(*out) } + if in.Plugin != nil { + in, out := &in.Plugin, &out.Plugin + *out = new(PluginGenerator) + (*in).DeepCopyInto(*out) + } return } @@ -2497,6 +2512,98 @@ func (in *OverrideIgnoreDiff) DeepCopy() *OverrideIgnoreDiff { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PluginConfigMapRef) DeepCopyInto(out *PluginConfigMapRef) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PluginConfigMapRef. +func (in *PluginConfigMapRef) DeepCopy() *PluginConfigMapRef { + if in == nil { + return nil + } + out := new(PluginConfigMapRef) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PluginGenerator) DeepCopyInto(out *PluginGenerator) { + *out = *in + out.ConfigMapRef = in.ConfigMapRef + in.Input.DeepCopyInto(&out.Input) + if in.RequeueAfterSeconds != nil { + in, out := &in.RequeueAfterSeconds, &out.RequeueAfterSeconds + *out = new(int64) + **out = **in + } + in.Template.DeepCopyInto(&out.Template) + if in.Values != nil { + in, out := &in.Values, &out.Values + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PluginGenerator. +func (in *PluginGenerator) DeepCopy() *PluginGenerator { + if in == nil { + return nil + } + out := new(PluginGenerator) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PluginInput) DeepCopyInto(out *PluginInput) { + *out = *in + if in.Parameters != nil { + in, out := &in.Parameters, &out.Parameters + *out = make(PluginParameters, len(*in)) + for key, val := range *in { + (*out)[key] = *val.DeepCopy() + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PluginInput. +func (in *PluginInput) DeepCopy() *PluginInput { + if in == nil { + return nil + } + out := new(PluginInput) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in PluginParameters) DeepCopyInto(out *PluginParameters) { + { + in := &in + *out = make(PluginParameters, len(*in)) + for key, val := range *in { + (*out)[key] = *val.DeepCopy() + } + return + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PluginParameters. +func (in PluginParameters) DeepCopy() PluginParameters { + if in == nil { + return nil + } + out := new(PluginParameters) + in.DeepCopyInto(out) + return *out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ProjectRole) DeepCopyInto(out *ProjectRole) { *out = *in diff --git a/util/settings/settings.go b/util/settings/settings.go index 54d076ea4a3de..f884a3a4906f3 100644 --- a/util/settings/settings.go +++ b/util/settings/settings.go @@ -2001,7 +2001,7 @@ func ReplaceMapSecrets(obj map[string]interface{}, secretValues map[string]strin case []interface{}: newObj[k] = replaceListSecrets(val, secretValues) case string: - newObj[k] = replaceStringSecret(val, secretValues) + newObj[k] = ReplaceStringSecret(val, secretValues) default: newObj[k] = val } @@ -2018,7 +2018,7 @@ func replaceListSecrets(obj []interface{}, secretValues map[string]string) []int case []interface{}: newObj[i] = replaceListSecrets(val, secretValues) case string: - newObj[i] = replaceStringSecret(val, secretValues) + newObj[i] = ReplaceStringSecret(val, secretValues) default: newObj[i] = val } @@ -2026,8 +2026,8 @@ func replaceListSecrets(obj []interface{}, secretValues map[string]string) []int return newObj } -// replaceStringSecret checks if given string is a secret key reference ( starts with $ ) and returns corresponding value from provided map -func replaceStringSecret(val string, secretValues map[string]string) string { +// ReplaceStringSecret checks if given string is a secret key reference ( starts with $ ) and returns corresponding value from provided map +func ReplaceStringSecret(val string, secretValues map[string]string) string { if val == "" || !strings.HasPrefix(val, "$") { return val } diff --git a/util/settings/settings_test.go b/util/settings/settings_test.go index d4adf580434da..afb6cb4891415 100644 --- a/util/settings/settings_test.go +++ b/util/settings/settings_test.go @@ -1446,3 +1446,18 @@ allowedAudiences: ["aud1", "aud2"]`}, }) } } + +func TestReplaceStringSecret(t *testing.T) { + secretValues := map[string]string{"my-secret-key": "my-secret-value"} + result := ReplaceStringSecret("$my-secret-key", secretValues) + assert.Equal(t, "my-secret-value", result) + + result = ReplaceStringSecret("$invalid-secret-key", secretValues) + assert.Equal(t, "$invalid-secret-key", result) + + result = ReplaceStringSecret("", secretValues) + assert.Equal(t, "", result) + + result = ReplaceStringSecret("my-value", secretValues) + assert.Equal(t, "my-value", result) +}