diff --git a/api/service/v1alpha1/service.proto b/api/service/v1alpha1/service.proto index b1e471960..98e140d96 100644 --- a/api/service/v1alpha1/service.proto +++ b/api/service/v1alpha1/service.proto @@ -85,6 +85,13 @@ service KargoService { rpc ListCredentials(ListCredentialsRequest) returns (ListCredentialsResponse); rpc UpdateCredentials(UpdateCredentialsRequest) returns (UpdateCredentialsResponse); + /* Project Secrets APIs */ + + rpc ListProjectSecrets(ListProjectSecretsRequest) returns (ListProjectSecretsResponse); + rpc CreateProjectSecret(CreateProjectSecretRequest) returns (CreateProjectSecretResponse); + rpc UpdateProjectSecret(UpdateProjectSecretRequest) returns (UpdateProjectSecretResponse); + rpc DeleteProjectSecret(DeleteProjectSecretRequest) returns (DeleteProjectSecretResponse); + /* Analysis APIs */ rpc ListAnalysisTemplates(ListAnalysisTemplatesRequest) returns (ListAnalysisTemplatesResponse); @@ -532,10 +539,50 @@ message RefreshWarehouseResponse { github.com.akuity.kargo.api.v1alpha1.Warehouse warehouse = 1; } +message ListProjectSecretsRequest { + string project = 1; +} + +message ListProjectSecretsResponse { + repeated k8s.io.api.core.v1.Secret secrets = 1; +} + +message CreateProjectSecretRequest { + string project = 1; + string name = 2; + string description = 3; + map data = 4; +} + +message CreateProjectSecretResponse { + k8s.io.api.core.v1.Secret secret = 1; +} + +message UpdateProjectSecretRequest { + string project = 1; + string name = 2; + string description = 3; + map data = 4; +} + +message UpdateProjectSecretResponse { + k8s.io.api.core.v1.Secret secret = 1; +} + +message DeleteProjectSecretRequest { + string project = 1; + string name = 2; +} + +message DeleteProjectSecretResponse { + /* explicitly empty */ +} + message CreateCredentialsRequest { string project = 1; string name = 2; string description = 8; + // type is git, helm, image string type = 3; string repo_url = 4 [json_name = "repoURL"]; bool repo_url_is_regex = 5 [json_name = "repoURLIsRegex"]; diff --git a/api/v1alpha1/labels.go b/api/v1alpha1/labels.go index 21e271821..cec8350fc 100644 --- a/api/v1alpha1/labels.go +++ b/api/v1alpha1/labels.go @@ -9,6 +9,9 @@ const ( CredentialTypeLabelValueHelm = "helm" CredentialTypeLabelValueImage = "image" + // Project Secrets + ProjectSecretLabelKey = "kargo.akuity.io/project-secret" // nolint: gosec + // Kargo core API FreightCollectionLabelKey = "kargo.akuity.io/freight-collection" ProjectLabelKey = "kargo.akuity.io/project" diff --git a/internal/api/create_credentials_v1alpha1.go b/internal/api/create_credentials_v1alpha1.go index a58e8bc3f..005c0d698 100644 --- a/internal/api/create_credentials_v1alpha1.go +++ b/internal/api/create_credentials_v1alpha1.go @@ -49,7 +49,7 @@ func (s *server) CreateCredentials( return nil, err } - secret := credentialsToSecret(creds) + secret := credentialsToK8sSecret(creds) if err := s.client.Create(ctx, secret); err != nil { return nil, fmt.Errorf("create secret: %w", err) } @@ -93,7 +93,7 @@ func (s *server) validateCredentials(creds credentials) error { return validateFieldNotEmpty("password", creds.password) } -func credentialsToSecret(creds credentials) *corev1.Secret { +func credentialsToK8sSecret(creds credentials) *corev1.Secret { s := &corev1.Secret{ ObjectMeta: metav1.ObjectMeta{ Namespace: creds.project, diff --git a/internal/api/create_credentials_v1alpha1_test.go b/internal/api/create_credentials_v1alpha1_test.go new file mode 100644 index 000000000..c05a47403 --- /dev/null +++ b/internal/api/create_credentials_v1alpha1_test.go @@ -0,0 +1,189 @@ +package api + +import ( + "context" + "testing" + + "connectrpc.com/connect" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/rest" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" + + kargoapi "github.com/akuity/kargo/api/v1alpha1" + "github.com/akuity/kargo/internal/api/config" + "github.com/akuity/kargo/internal/api/kubernetes" + libCreds "github.com/akuity/kargo/internal/credentials" + svcv1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" +) + +func TestCreateCredentials(t *testing.T) { + ctx := context.Background() + + cl, err := kubernetes.NewClient( + ctx, + &rest.Config{}, + kubernetes.ClientOptions{ + SkipAuthorization: true, + NewInternalClient: func(_ context.Context, _ *rest.Config, s *runtime.Scheme) (client.Client, error) { + return fake.NewClientBuilder(). + WithScheme(s). + WithObjects(mustNewObject[corev1.Namespace]("testdata/namespace.yaml")). + Build(), nil + }, + }, + ) + require.NoError(t, err) + + s := &server{ + client: cl, + cfg: config.ServerConfig{SecretManagementEnabled: true}, + } + + resp, err := s.CreateCredentials( + ctx, + connect.NewRequest( + &svcv1alpha1.CreateCredentialsRequest{ + Project: "kargo-demo", + Name: "creds", + Description: "my credentials", + Type: "git", + RepoUrl: "https://github.com/example/repo", + Username: "username", + Password: "password", + }, + ), + ) + require.NoError(t, err) + + creds := resp.Msg.GetCredentials() + assert.Equal(t, "kargo-demo", creds.Namespace) + assert.Equal(t, "creds", creds.ObjectMeta.Name) + assert.Equal(t, "my credentials", creds.ObjectMeta.Annotations[kargoapi.AnnotationKeyDescription]) + assert.Equal(t, "https://github.com/example/repo", creds.StringData[libCreds.FieldRepoURL]) + assert.Equal(t, "username", creds.StringData[libCreds.FieldUsername]) + assert.Equal(t, redacted, creds.StringData[libCreds.FieldPassword]) + + secret := corev1.Secret{} + err = cl.Get( + ctx, + types.NamespacedName{ + Namespace: "kargo-demo", + Name: "creds", + }, + &secret, + ) + require.NoError(t, err) + + data := secret.Data + assert.Equal(t, "kargo-demo", secret.Namespace) + assert.Equal(t, "creds", secret.ObjectMeta.Name) + assert.Equal(t, "my credentials", secret.ObjectMeta.Annotations[kargoapi.AnnotationKeyDescription]) + assert.Equal(t, "https://github.com/example/repo", string(data[libCreds.FieldRepoURL])) + assert.Equal(t, "username", string(data[libCreds.FieldUsername])) + assert.Equal(t, "password", string(data[libCreds.FieldPassword])) +} + +func TestValidateCredentials(t *testing.T) { + s := &server{} + + err := s.validateCredentials( + credentials{ + project: "", + name: "test", + credType: "git", + repoURL: "abc", + username: "test", + password: "test", + }, + ) + require.Error(t, err) + + err = s.validateCredentials( + credentials{ + project: "kargo-demo", + name: "", + credType: "git", + repoURL: "abc", + username: "test", + password: "test", + }, + ) + require.Error(t, err) + + err = s.validateCredentials( + credentials{ + project: "kargo-demo", + name: "test", + credType: "", + repoURL: "abc", + username: "test", + password: "test", + }, + ) + require.Error(t, err) + + err = s.validateCredentials( + credentials{ + project: "kargo-demo", + name: "test", + credType: "invalid", + repoURL: "abc", + username: "test", + password: "test", + }, + ) + require.Error(t, err) + + err = s.validateCredentials( + credentials{ + project: "kargo-demo", + name: "test", + credType: "git", + repoURL: "", + username: "test", + password: "test", + }, + ) + require.Error(t, err) + + err = s.validateCredentials( + credentials{ + project: "kargo-demo", + name: "test", + credType: "git", + repoURL: "https://github.com/akuity/kargo", + username: "", + password: "test", + }, + ) + require.Error(t, err) + + err = s.validateCredentials( + credentials{ + project: "kargo-demo", + name: "test", + credType: "git", + repoURL: "https://github.com/akuity/kargo", + username: "test", + password: "", + }, + ) + require.Error(t, err) + + err = s.validateCredentials( + credentials{ + project: "kargo-demo", + name: "test", + credType: "git", + repoURL: "https://github.com/akuity/kargo", + username: "test", + password: "test", + }, + ) + require.NoError(t, err) +} diff --git a/internal/api/create_project_secret_v1alpha1.go b/internal/api/create_project_secret_v1alpha1.go new file mode 100644 index 000000000..e9505c73e --- /dev/null +++ b/internal/api/create_project_secret_v1alpha1.go @@ -0,0 +1,97 @@ +package api + +import ( + "context" + "errors" + "fmt" + + "connectrpc.com/connect" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + kargoapi "github.com/akuity/kargo/api/v1alpha1" + svcv1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" +) + +type projectSecret struct { + project string + name string + description string + data map[string]string +} + +func (s *server) CreateProjectSecret( + ctx context.Context, + req *connect.Request[svcv1alpha1.CreateProjectSecretRequest], +) (*connect.Response[svcv1alpha1.CreateProjectSecretResponse], error) { + // Check if secret management is enabled + if !s.cfg.SecretManagementEnabled { + return nil, connect.NewError(connect.CodeUnimplemented, errSecretManagementDisabled) + } + + projSecret := projectSecret{ + project: req.Msg.GetProject(), + name: req.Msg.GetName(), + data: req.Msg.GetData(), + description: req.Msg.GetDescription(), + } + + if err := s.validateProjectSecret(projSecret); err != nil { + return nil, err + } + + secret := s.projectSecretToK8sSecret(projSecret) + if err := s.client.Create(ctx, secret); err != nil { + return nil, fmt.Errorf("create secret: %w", err) + } + + return connect.NewResponse( + &svcv1alpha1.CreateProjectSecretResponse{ + Secret: sanitizeProjectSecret(*secret), + }, + ), nil +} + +func (s *server) validateProjectSecret(projSecret projectSecret) error { + if err := validateFieldNotEmpty("project", projSecret.project); err != nil { + return err + } + + if err := validateFieldNotEmpty("name", projSecret.name); err != nil { + return err + } + + if len(projSecret.data) == 0 { + return connect.NewError(connect.CodeInvalidArgument, + errors.New("cannot create empty secret")) + } + + return nil +} + +func (s *server) projectSecretToK8sSecret(projSecret projectSecret) *corev1.Secret { + secretsData := map[string][]byte{} + + for key, value := range projSecret.data { + secretsData[key] = []byte(value) + } + + secret := &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: projSecret.project, + Name: projSecret.name, + Labels: map[string]string{ + kargoapi.ProjectSecretLabelKey: kargoapi.LabelTrueValue, + }, + }, + Data: secretsData, + } + + if projSecret.description != "" { + secret.Annotations = map[string]string{ + kargoapi.AnnotationKeyDescription: projSecret.description, + } + } + + return secret +} diff --git a/internal/api/create_project_secret_v1alpha1_test.go b/internal/api/create_project_secret_v1alpha1_test.go new file mode 100644 index 000000000..5ebcbb981 --- /dev/null +++ b/internal/api/create_project_secret_v1alpha1_test.go @@ -0,0 +1,79 @@ +package api + +import ( + "context" + "testing" + + "connectrpc.com/connect" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/rest" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" + + kargoapi "github.com/akuity/kargo/api/v1alpha1" + "github.com/akuity/kargo/internal/api/config" + "github.com/akuity/kargo/internal/api/kubernetes" + svcv1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" +) + +func TestCreateProjectSecret(t *testing.T) { + ctx := context.Background() + + cl, err := kubernetes.NewClient( + ctx, + &rest.Config{}, + kubernetes.ClientOptions{ + SkipAuthorization: true, + NewInternalClient: func(_ context.Context, _ *rest.Config, s *runtime.Scheme) (client.Client, error) { + return fake.NewClientBuilder(). + WithScheme(s). + WithObjects(mustNewObject[corev1.Namespace]("testdata/namespace.yaml")). + Build(), nil + }, + }, + ) + require.NoError(t, err) + + s := &server{ + client: cl, + cfg: config.ServerConfig{SecretManagementEnabled: true}, + } + + resp, err := s.CreateProjectSecret(ctx, connect.NewRequest(&svcv1alpha1.CreateProjectSecretRequest{ + Project: "kargo-demo", + Name: "secret", + Description: "my secret", + Data: map[string]string{ + "TOKEN_1": "foo", + "TOKEN_2": "bar", + }, + })) + require.NoError(t, err) + + projSecret := resp.Msg.GetSecret() + assert.Equal(t, "kargo-demo", projSecret.Namespace) + assert.Equal(t, "secret", projSecret.ObjectMeta.Name) + assert.Equal(t, "my secret", projSecret.ObjectMeta.Annotations[kargoapi.AnnotationKeyDescription]) + assert.Equal(t, redacted, projSecret.StringData["TOKEN_1"]) + assert.Equal(t, redacted, projSecret.StringData["TOKEN_2"]) + + secret := corev1.Secret{} + err = cl.Get(ctx, types.NamespacedName{ + Namespace: "kargo-demo", + Name: "secret", + }, + &secret, + ) + require.NoError(t, err) + + data := secret.Data + assert.Equal(t, "kargo-demo", secret.Namespace) + assert.Equal(t, "secret", secret.ObjectMeta.Name) + assert.Equal(t, "my secret", secret.ObjectMeta.Annotations[kargoapi.AnnotationKeyDescription]) + assert.Equal(t, "foo", string(data["TOKEN_1"])) + assert.Equal(t, "bar", string(data["TOKEN_2"])) +} diff --git a/internal/api/delete_credentials_v1alpha1.go b/internal/api/delete_credentials_v1alpha1.go index cb207dd40..60b0ce4f9 100644 --- a/internal/api/delete_credentials_v1alpha1.go +++ b/internal/api/delete_credentials_v1alpha1.go @@ -6,8 +6,9 @@ import ( "connectrpc.com/connect" corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + kargoapi "github.com/akuity/kargo/api/v1alpha1" svcv1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" ) @@ -34,13 +35,32 @@ func (s *server) DeleteCredentials( return nil, err } - secret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ + secret := corev1.Secret{} + if err := s.client.Get( + ctx, + types.NamespacedName{ Namespace: project, Name: name, }, + &secret, + ); err != nil { + return nil, fmt.Errorf("get secret: %w", err) } - if err := s.client.Delete(ctx, secret); err != nil { + + // If this isn't labeled as repository credentials, return not found. + if _, isCredentials := secret.Labels[kargoapi.CredentialTypeLabelKey]; !isCredentials { + return nil, connect.NewError( + connect.CodeNotFound, + fmt.Errorf( + "secret %s/%s exists, but is not labeled with %s", + secret.Namespace, + secret.Name, + kargoapi.CredentialTypeLabelKey, + ), + ) + } + + if err := s.client.Delete(ctx, &secret); err != nil { return nil, fmt.Errorf("delete secret: %w", err) } diff --git a/internal/api/delete_project_secret_v1alpha1.go b/internal/api/delete_project_secret_v1alpha1.go new file mode 100644 index 000000000..5da919cc8 --- /dev/null +++ b/internal/api/delete_project_secret_v1alpha1.go @@ -0,0 +1,67 @@ +package api + +import ( + "context" + "fmt" + + "connectrpc.com/connect" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/types" + + kargoapi "github.com/akuity/kargo/api/v1alpha1" + svcv1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" +) + +func (s *server) DeleteProjectSecret( + ctx context.Context, + req *connect.Request[svcv1alpha1.DeleteProjectSecretRequest], +) (*connect.Response[svcv1alpha1.DeleteProjectSecretResponse], error) { + // Check if secret management is enabled + if !s.cfg.SecretManagementEnabled { + return nil, connect.NewError(connect.CodeUnimplemented, errSecretManagementDisabled) + } + + project := req.Msg.GetProject() + if err := validateFieldNotEmpty("project", project); err != nil { + return nil, err + } + + name := req.Msg.GetName() + if err := validateFieldNotEmpty("name", name); err != nil { + return nil, err + } + + if err := s.validateProjectExists(ctx, project); err != nil { + return nil, err + } + + secret := &corev1.Secret{} + if err := s.client.Get( + ctx, + types.NamespacedName{ + Namespace: project, + Name: name, + }, + secret, + ); err != nil { + return nil, fmt.Errorf("get secret: %w", err) + } + if secret.Labels[kargoapi.ProjectSecretLabelKey] != kargoapi.LabelTrueValue { + return nil, connect.NewError( + connect.CodeNotFound, + fmt.Errorf( + "secret %s/%s exists, but is not labeled with %s=%s", + secret.Namespace, + secret.Name, + kargoapi.ProjectSecretLabelKey, + kargoapi.LabelTrueValue, + ), + ) + } + + if err := s.client.Delete(ctx, secret); err != nil { + return nil, fmt.Errorf("delete secret: %w", err) + } + + return connect.NewResponse(&svcv1alpha1.DeleteProjectSecretResponse{}), nil +} diff --git a/internal/api/delete_project_secret_v1alpha1_test.go b/internal/api/delete_project_secret_v1alpha1_test.go new file mode 100644 index 000000000..7a7867834 --- /dev/null +++ b/internal/api/delete_project_secret_v1alpha1_test.go @@ -0,0 +1,83 @@ +package api + +import ( + "context" + "testing" + + "connectrpc.com/connect" + "github.com/stretchr/testify/require" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/rest" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" + + kargoapi "github.com/akuity/kargo/api/v1alpha1" + "github.com/akuity/kargo/internal/api/config" + "github.com/akuity/kargo/internal/api/kubernetes" + "github.com/akuity/kargo/internal/api/validation" + svcv1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" +) + +func TestDeleteProjectSecret(t *testing.T) { + ctx := context.Background() + + cl, err := kubernetes.NewClient( + ctx, + &rest.Config{}, + kubernetes.ClientOptions{ + SkipAuthorization: true, + NewInternalClient: func(_ context.Context, _ *rest.Config, s *runtime.Scheme) (client.Client, error) { + return fake.NewClientBuilder(). + WithScheme(s). + WithObjects(mustNewObject[corev1.Namespace]("testdata/namespace.yaml")). + Build(), nil + }, + }, + ) + require.NoError(t, err) + + s := &server{ + client: cl, + cfg: config.ServerConfig{SecretManagementEnabled: true}, + externalValidateProjectFn: validation.ValidateProject, + } + + err = s.client.Create( + ctx, + &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "kargo-demo", + Name: "secret", + Labels: map[string]string{ + kargoapi.ProjectSecretLabelKey: kargoapi.LabelTrueValue, + }, + }, + }, + ) + require.NoError(t, err) + + secret := corev1.Secret{} + _, err = s.DeleteProjectSecret( + ctx, + connect.NewRequest( + &svcv1alpha1.DeleteProjectSecretRequest{ + Project: "kargo-demo", + Name: "secret", + }, + ), + ) + require.NoError(t, err) + + err = s.client.Get( + ctx, + types.NamespacedName{ + Namespace: "kargo-demo", + Name: "secret", + }, + &secret, + ) + require.Error(t, err) +} diff --git a/internal/api/get_credentials_v1alpha1.go b/internal/api/get_credentials_v1alpha1.go index 1eb9b9600..ff740e5b8 100644 --- a/internal/api/get_credentials_v1alpha1.go +++ b/internal/api/get_credentials_v1alpha1.go @@ -51,15 +51,12 @@ func (s *server) GetCredentials( } // If this isn't labeled as repository credentials, return not found. - var isCredentials bool - if secret.Labels != nil { - _, isCredentials = secret.Labels[kargoapi.CredentialTypeLabelKey] - } - if !isCredentials { + if _, isCredentials := secret.Labels[kargoapi.CredentialTypeLabelKey]; !isCredentials { return nil, connect.NewError( connect.CodeNotFound, fmt.Errorf( - "secret %q exists, but is not labeled with %q", + "secret %s/%s exists, but is not labeled with %s", + secret.Namespace, secret.Name, kargoapi.CredentialTypeLabelKey, ), diff --git a/internal/api/list_project_secrets_v1alpha1.go b/internal/api/list_project_secrets_v1alpha1.go new file mode 100644 index 000000000..af80e1e6e --- /dev/null +++ b/internal/api/list_project_secrets_v1alpha1.go @@ -0,0 +1,85 @@ +package api + +import ( + "context" + "fmt" + "slices" + "strings" + + "connectrpc.com/connect" + corev1 "k8s.io/api/core/v1" + "sigs.k8s.io/controller-runtime/pkg/client" + + kargoapi "github.com/akuity/kargo/api/v1alpha1" + svcv1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" +) + +func (s *server) ListProjectSecrets( + ctx context.Context, + req *connect.Request[svcv1alpha1.ListProjectSecretsRequest], +) (*connect.Response[svcv1alpha1.ListProjectSecretsResponse], error) { + // Check if secret management is enabled + if !s.cfg.SecretManagementEnabled { + return nil, connect.NewError(connect.CodeUnimplemented, errSecretManagementDisabled) + } + + project := req.Msg.GetProject() + if err := validateFieldNotEmpty("project", project); err != nil { + return nil, err + } + + if err := s.validateProjectExists(ctx, project); err != nil { + return nil, err + } + + var secretsList corev1.SecretList + if err := s.client.List( + ctx, + &secretsList, + client.InNamespace(req.Msg.GetProject()), + client.MatchingLabels{ + kargoapi.ProjectSecretLabelKey: kargoapi.LabelTrueValue, + }, + ); err != nil { + return nil, fmt.Errorf("list secrets: %w", err) + } + + // Sort ascending by name + slices.SortFunc(secretsList.Items, func(lhs, rhs corev1.Secret) int { + return strings.Compare(lhs.Name, rhs.Name) + }) + + secrets := make([]*corev1.Secret, len(secretsList.Items)) + for i, secret := range secretsList.Items { + secrets[i] = sanitizeProjectSecret(secret) + } + + return connect.NewResponse(&svcv1alpha1.ListProjectSecretsResponse{ + Secrets: secrets, + }), nil +} + +// sanitizeProjectSecret returns a copy of the secret with all values in the +// stringData map redacted. All annotations are also redacted because AT LEAST +// "last-applied-configuration" is a known vector for leaking sensitive +// information and unknown configuration management tools may use other +// annotations in a manner similar to "last-applied-configuration". There is no +// concern over labels because the constraints on label values rule out use in a +// manner similar to that of the "last-applied-configuration" annotation. +func sanitizeProjectSecret(secret corev1.Secret) *corev1.Secret { + s := secret.DeepCopy() + s.StringData = make(map[string]string, len(s.Data)) + for k, v := range s.Annotations { + switch k { + case kargoapi.AnnotationKeyDescription: + s.Annotations[k] = v + default: + s.Annotations[k] = redacted + } + } + for k := range s.Data { + s.StringData[k] = redacted + } + s.Data = nil + return s +} diff --git a/internal/api/list_project_secrets_v1alpha1_test.go b/internal/api/list_project_secrets_v1alpha1_test.go new file mode 100644 index 000000000..d527b32b8 --- /dev/null +++ b/internal/api/list_project_secrets_v1alpha1_test.go @@ -0,0 +1,90 @@ +package api + +import ( + "context" + "testing" + + "connectrpc.com/connect" + "github.com/stretchr/testify/require" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/rest" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" + + kargoapi "github.com/akuity/kargo/api/v1alpha1" + "github.com/akuity/kargo/internal/api/config" + "github.com/akuity/kargo/internal/api/kubernetes" + "github.com/akuity/kargo/internal/api/validation" + svcv1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" +) + +func TestListProjectSecrets(t *testing.T) { + ctx := context.Background() + + cl, err := kubernetes.NewClient( + ctx, + &rest.Config{}, + kubernetes.ClientOptions{ + SkipAuthorization: true, + NewInternalClient: func(_ context.Context, _ *rest.Config, s *runtime.Scheme) (client.Client, error) { + return fake.NewClientBuilder(). + WithScheme(s). + WithObjects(mustNewObject[corev1.Namespace]("testdata/namespace.yaml")). + Build(), nil + }, + }, + ) + require.NoError(t, err) + + s := &server{ + client: cl, + cfg: config.ServerConfig{SecretManagementEnabled: true}, + externalValidateProjectFn: validation.ValidateProject, + } + + // not labeled as a project secret + // this shouldn't be in the list + err = s.client.Create( + ctx, + &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "kargo-demo", + Name: "secret-1", + }, + }, + ) + require.NoError(t, err) + + // project secret + // this should be in the list + err = s.client.Create( + ctx, + &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "kargo-demo", + Name: "secret-2", + Labels: map[string]string{ + kargoapi.ProjectSecretLabelKey: kargoapi.LabelTrueValue, + }, + }, + Data: map[string][]byte{ + "PROJECT_SECRET": []byte("PROJECT_SECRET_VALUE"), + }, + }, + ) + require.NoError(t, err) + + resp, err := s.ListProjectSecrets( + ctx, + connect.NewRequest(&svcv1alpha1.ListProjectSecretsRequest{Project: "kargo-demo"}), + ) + require.NoError(t, err) + + secrets := resp.Msg.GetSecrets() + require.Len(t, secrets, 1) + require.Equal(t, "secret-2", secrets[0].GetName()) + require.Empty(t, secrets[0].Data) + require.Equal(t, redacted, secrets[0].StringData["PROJECT_SECRET"]) +} diff --git a/internal/api/update_credentials_v1alpha1.go b/internal/api/update_credentials_v1alpha1.go index 7b66d923e..69a0a38ce 100644 --- a/internal/api/update_credentials_v1alpha1.go +++ b/internal/api/update_credentials_v1alpha1.go @@ -65,22 +65,19 @@ func (s *server) UpdateCredentials( } // If this isn't labeled as repository credentials, return not found. - var isCredentials bool - if secret.Labels != nil { - _, isCredentials = secret.Labels[kargoapi.CredentialTypeLabelKey] - } - if !isCredentials { + if _, isCredentials := secret.Labels[kargoapi.CredentialTypeLabelKey]; !isCredentials { return nil, connect.NewError( connect.CodeNotFound, fmt.Errorf( - "secret %q exists, but is not labeled with %q", + "secret %s/%s exists, but is not labeled with %s", + secret.Namespace, secret.Name, kargoapi.CredentialTypeLabelKey, ), ) } - applyCredentialsUpdateToSecret(&secret, credsUpdate) + applyCredentialsUpdateToK8sSecret(&secret, credsUpdate) if err := s.client.Update(ctx, &secret); err != nil { return nil, fmt.Errorf("update secret: %w", err) @@ -93,7 +90,7 @@ func (s *server) UpdateCredentials( ), nil } -func applyCredentialsUpdateToSecret( +func applyCredentialsUpdateToK8sSecret( secret *corev1.Secret, credsUpdate credentialsUpdate, ) { diff --git a/internal/api/update_credentials_v1alpha1_test.go b/internal/api/update_credentials_v1alpha1_test.go index a1e7adba5..0362ceb13 100644 --- a/internal/api/update_credentials_v1alpha1_test.go +++ b/internal/api/update_credentials_v1alpha1_test.go @@ -11,7 +11,7 @@ import ( libCreds "github.com/akuity/kargo/internal/credentials" ) -func TestApplyCredentialsUpdateToSecret(t *testing.T) { +func TestApplyCredentialsUpdateToK8sSecret(t *testing.T) { baseSecret := &corev1.Secret{ ObjectMeta: metav1.ObjectMeta{ Labels: map[string]string{ @@ -29,7 +29,7 @@ func TestApplyCredentialsUpdateToSecret(t *testing.T) { expectedSecret := baseSecret.DeepCopy() expectedSecret.Data[libCreds.FieldRepoURL] = []byte("new-fake-url") secret := baseSecret.DeepCopy() - applyCredentialsUpdateToSecret( + applyCredentialsUpdateToK8sSecret( secret, credentialsUpdate{ repoURL: "new-fake-url", @@ -43,7 +43,7 @@ func TestApplyCredentialsUpdateToSecret(t *testing.T) { expectedSecret.Data[libCreds.FieldRepoURL] = []byte("new-fake-url") expectedSecret.Data[libCreds.FieldRepoURLIsRegex] = []byte("true") secret := baseSecret.DeepCopy() - applyCredentialsUpdateToSecret( + applyCredentialsUpdateToK8sSecret( secret, credentialsUpdate{ repoURL: "new-fake-url", @@ -57,7 +57,7 @@ func TestApplyCredentialsUpdateToSecret(t *testing.T) { expectedSecret := baseSecret.DeepCopy() expectedSecret.Data["username"] = []byte("new-fake-username") secret := baseSecret.DeepCopy() - applyCredentialsUpdateToSecret( + applyCredentialsUpdateToK8sSecret( secret, credentialsUpdate{ username: "new-fake-username", @@ -70,7 +70,7 @@ func TestApplyCredentialsUpdateToSecret(t *testing.T) { expectedSecret := baseSecret.DeepCopy() expectedSecret.Data["password"] = []byte("new-fake-password") secret := baseSecret.DeepCopy() - applyCredentialsUpdateToSecret( + applyCredentialsUpdateToK8sSecret( secret, credentialsUpdate{ password: "new-fake-password", @@ -85,7 +85,7 @@ func TestApplyCredentialsUpdateToSecret(t *testing.T) { kargoapi.AnnotationKeyDescription: "new description", } secret := baseSecret.DeepCopy() - applyCredentialsUpdateToSecret( + applyCredentialsUpdateToK8sSecret( secret, credentialsUpdate{ description: "new description", diff --git a/internal/api/update_project_secret_v1alpha1.go b/internal/api/update_project_secret_v1alpha1.go new file mode 100644 index 000000000..29a2938c6 --- /dev/null +++ b/internal/api/update_project_secret_v1alpha1.go @@ -0,0 +1,111 @@ +package api + +import ( + "context" + "errors" + "fmt" + + "connectrpc.com/connect" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/types" + + kargoapi "github.com/akuity/kargo/api/v1alpha1" + svcv1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" +) + +func (s *server) UpdateProjectSecret( + ctx context.Context, + req *connect.Request[svcv1alpha1.UpdateProjectSecretRequest], +) (*connect.Response[svcv1alpha1.UpdateProjectSecretResponse], error) { + // Check if secret management is enabled + if !s.cfg.SecretManagementEnabled { + return nil, connect.NewError(connect.CodeUnimplemented, errSecretManagementDisabled) + } + + project := req.Msg.GetProject() + + if err := validateFieldNotEmpty("project", project); err != nil { + return nil, err + } + + name := req.Msg.GetName() + + if err := validateFieldNotEmpty("name", name); err != nil { + return nil, err + } + + secret := corev1.Secret{} + if err := s.client.Get( + ctx, + types.NamespacedName{ + Namespace: project, + Name: name, + }, + &secret, + ); err != nil { + return nil, fmt.Errorf("get secret: %w", err) + } + + // If this isn't labeled as a project secret, return not found. + if secret.Labels[kargoapi.ProjectSecretLabelKey] != kargoapi.LabelTrueValue { + return nil, connect.NewError( + connect.CodeNotFound, + fmt.Errorf( + "secret %s/%s exists, but is not labeled with %s=%s", + secret.Namespace, + secret.Name, + kargoapi.ProjectSecretLabelKey, + kargoapi.LabelTrueValue, + ), + ) + } + + projectSecretUpdate := projectSecret{ + data: req.Msg.GetData(), + description: req.Msg.GetDescription(), + } + + if len(projectSecretUpdate.data) == 0 { + return nil, connect.NewError(connect.CodeInvalidArgument, errors.New("cannot create empty secret")) + } + + applyProjectSecretUpdateToK8sSecret(&secret, projectSecretUpdate) + + if err := s.client.Update(ctx, &secret); err != nil { + return nil, fmt.Errorf("update secret: %w", err) + } + + return connect.NewResponse( + &svcv1alpha1.UpdateProjectSecretResponse{ + Secret: sanitizeProjectSecret(secret), + }, + ), nil +} + +func applyProjectSecretUpdateToK8sSecret(secret *corev1.Secret, projectSecretUpdate projectSecret) { + if projectSecretUpdate.description != "" { + if secret.Annotations == nil { + secret.Annotations = make(map[string]string, 1) + } + secret.Annotations[kargoapi.AnnotationKeyDescription] = projectSecretUpdate.description + } else { + delete(secret.Annotations, kargoapi.AnnotationKeyDescription) + } + + // delete the keys that exist in secret but not in the update + for key := range secret.Data { + if _, exist := projectSecretUpdate.data[key]; !exist { + delete(secret.Data, key) + } + } + + // upsert + if secret.Data == nil { + secret.Data = make(map[string][]byte, len(projectSecretUpdate.data)) + } + for key, value := range projectSecretUpdate.data { + if value != "" { + secret.Data[key] = []byte(value) + } + } +} diff --git a/internal/api/update_project_secret_v1alpha1_test.go b/internal/api/update_project_secret_v1alpha1_test.go new file mode 100644 index 000000000..e73d69356 --- /dev/null +++ b/internal/api/update_project_secret_v1alpha1_test.go @@ -0,0 +1,147 @@ +package api + +import ( + "context" + "testing" + + "connectrpc.com/connect" + "github.com/stretchr/testify/require" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/rest" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" + + kargoapi "github.com/akuity/kargo/api/v1alpha1" + "github.com/akuity/kargo/internal/api/config" + "github.com/akuity/kargo/internal/api/kubernetes" + "github.com/akuity/kargo/internal/api/validation" + svcv1alpha1 "github.com/akuity/kargo/pkg/api/service/v1alpha1" +) + +func TestUpdateProjectSecret(t *testing.T) { + ctx := context.Background() + + cl, err := kubernetes.NewClient( + ctx, + &rest.Config{}, + kubernetes.ClientOptions{ + SkipAuthorization: true, + NewInternalClient: func(_ context.Context, _ *rest.Config, s *runtime.Scheme) (client.Client, error) { + return fake.NewClientBuilder(). + WithScheme(s). + WithObjects(mustNewObject[corev1.Namespace]("testdata/namespace.yaml")). + Build(), nil + }, + }, + ) + require.NoError(t, err) + + s := &server{ + client: cl, + cfg: config.ServerConfig{SecretManagementEnabled: true}, + externalValidateProjectFn: validation.ValidateProject, + } + + err = s.client.Create( + ctx, + &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "kargo-demo", + Name: "secret", + Labels: map[string]string{ + kargoapi.ProjectSecretLabelKey: kargoapi.LabelTrueValue, + }, + }, + StringData: map[string]string{ + "TOKEN_1": "foo", + "TOKEN_2": "baz", + }, + }, + ) + require.NoError(t, err) + + _, err = s.UpdateProjectSecret(ctx, connect.NewRequest(&svcv1alpha1.UpdateProjectSecretRequest{ + Project: "kargo-demo", + Name: "secret", + Data: map[string]string{ + "TOKEN_1": "bar", + }, + })) + + require.NoError(t, err) + + secret := corev1.Secret{} + + require.NoError(t, s.client.Get(ctx, types.NamespacedName{ + Namespace: "kargo-demo", + Name: "secret", + }, &secret)) + + secret1, ok := secret.Data["TOKEN_1"] + require.True(t, ok) + require.Equal(t, "bar", string(secret1)) + + _, ok = secret.Data["TOKEN_2"] + require.False(t, ok) +} + +func TestApplyProjectSecretUpdateToK8sSecret(t *testing.T) { + baseSecret := &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "kargo-demo", + Name: "secret", + Labels: map[string]string{ + kargoapi.ProjectSecretLabelKey: kargoapi.LabelTrueValue, + }, + }, + Data: map[string][]byte{ + "TOKEN_1": []byte("foo"), + "TOKEN_2": []byte("bar"), + }, + } + + t.Run("remove key from project secret", func(t *testing.T) { + expectedSecret := baseSecret.DeepCopy() + delete(expectedSecret.Data, "TOKEN_1") + secret := baseSecret.DeepCopy() + applyProjectSecretUpdateToK8sSecret( + secret, + projectSecret{ + data: map[string]string{ + "TOKEN_2": "bar", + }, + }, + ) + require.Equal(t, expectedSecret, secret) + }) + + t.Run("add key in project secret", func(t *testing.T) { + expectedSecret := baseSecret.DeepCopy() + expectedSecret.Data["TOKEN_3"] = []byte("baz") + secret := baseSecret.DeepCopy() + applyProjectSecretUpdateToK8sSecret(secret, projectSecret{ + data: map[string]string{ + "TOKEN_1": "", + "TOKEN_2": "", + "TOKEN_3": "baz", + }, + }) + require.Equal(t, expectedSecret, secret) + }) + + t.Run("edit key in project secret", func(t *testing.T) { + expectedSecret := baseSecret.DeepCopy() + expectedSecret.Data["TOKEN_2"] = []byte("baz") + secret := baseSecret.DeepCopy() + applyProjectSecretUpdateToK8sSecret(secret, projectSecret{ + data: map[string]string{ + "TOKEN_1": "", + "TOKEN_2": "baz", + }, + }) + require.Equal(t, expectedSecret, secret) + }) +} diff --git a/pkg/api/service/v1alpha1/service.pb.go b/pkg/api/service/v1alpha1/service.pb.go index 365ce61e3..3f7d2115e 100644 --- a/pkg/api/service/v1alpha1/service.pb.go +++ b/pkg/api/service/v1alpha1/service.pb.go @@ -4696,23 +4696,16 @@ func (x *RefreshWarehouseResponse) GetWarehouse() *v1alpha1.Warehouse { return nil } -type CreateCredentialsRequest struct { +type ListProjectSecretsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,8,opt,name=description,proto3" json:"description,omitempty"` - Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` - RepoUrl string `protobuf:"bytes,4,opt,name=repo_url,json=repoURL,proto3" json:"repo_url,omitempty"` - RepoUrlIsRegex bool `protobuf:"varint,5,opt,name=repo_url_is_regex,json=repoURLIsRegex,proto3" json:"repo_url_is_regex,omitempty"` - Username string `protobuf:"bytes,6,opt,name=username,proto3" json:"username,omitempty"` - Password string `protobuf:"bytes,7,opt,name=password,proto3" json:"password,omitempty"` + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` } -func (x *CreateCredentialsRequest) Reset() { - *x = CreateCredentialsRequest{} +func (x *ListProjectSecretsRequest) Reset() { + *x = ListProjectSecretsRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -4720,13 +4713,13 @@ func (x *CreateCredentialsRequest) Reset() { } } -func (x *CreateCredentialsRequest) String() string { +func (x *ListProjectSecretsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CreateCredentialsRequest) ProtoMessage() {} +func (*ListProjectSecretsRequest) ProtoMessage() {} -func (x *CreateCredentialsRequest) ProtoReflect() protoreflect.Message { +func (x *ListProjectSecretsRequest) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -4738,77 +4731,28 @@ func (x *CreateCredentialsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CreateCredentialsRequest.ProtoReflect.Descriptor instead. -func (*CreateCredentialsRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ListProjectSecretsRequest.ProtoReflect.Descriptor instead. +func (*ListProjectSecretsRequest) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{83} } -func (x *CreateCredentialsRequest) GetProject() string { +func (x *ListProjectSecretsRequest) GetProject() string { if x != nil { return x.Project } return "" } -func (x *CreateCredentialsRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *CreateCredentialsRequest) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *CreateCredentialsRequest) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *CreateCredentialsRequest) GetRepoUrl() string { - if x != nil { - return x.RepoUrl - } - return "" -} - -func (x *CreateCredentialsRequest) GetRepoUrlIsRegex() bool { - if x != nil { - return x.RepoUrlIsRegex - } - return false -} - -func (x *CreateCredentialsRequest) GetUsername() string { - if x != nil { - return x.Username - } - return "" -} - -func (x *CreateCredentialsRequest) GetPassword() string { - if x != nil { - return x.Password - } - return "" -} - -type CreateCredentialsResponse struct { +type ListProjectSecretsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Credentials *v1.Secret `protobuf:"bytes,1,opt,name=credentials,proto3" json:"credentials,omitempty"` + Secrets []*v1.Secret `protobuf:"bytes,1,rep,name=secrets,proto3" json:"secrets,omitempty"` } -func (x *CreateCredentialsResponse) Reset() { - *x = CreateCredentialsResponse{} +func (x *ListProjectSecretsResponse) Reset() { + *x = ListProjectSecretsResponse{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -4816,13 +4760,13 @@ func (x *CreateCredentialsResponse) Reset() { } } -func (x *CreateCredentialsResponse) String() string { +func (x *ListProjectSecretsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CreateCredentialsResponse) ProtoMessage() {} +func (*ListProjectSecretsResponse) ProtoMessage() {} -func (x *CreateCredentialsResponse) ProtoReflect() protoreflect.Message { +func (x *ListProjectSecretsResponse) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[84] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -4834,29 +4778,31 @@ func (x *CreateCredentialsResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CreateCredentialsResponse.ProtoReflect.Descriptor instead. -func (*CreateCredentialsResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use ListProjectSecretsResponse.ProtoReflect.Descriptor instead. +func (*ListProjectSecretsResponse) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{84} } -func (x *CreateCredentialsResponse) GetCredentials() *v1.Secret { +func (x *ListProjectSecretsResponse) GetSecrets() []*v1.Secret { if x != nil { - return x.Credentials + return x.Secrets } return nil } -type DeleteCredentialsRequest struct { +type CreateProjectSecretRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + Data map[string]string `protobuf:"bytes,4,rep,name=data,proto3" json:"data,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (x *DeleteCredentialsRequest) Reset() { - *x = DeleteCredentialsRequest{} +func (x *CreateProjectSecretRequest) Reset() { + *x = CreateProjectSecretRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -4864,13 +4810,13 @@ func (x *DeleteCredentialsRequest) Reset() { } } -func (x *DeleteCredentialsRequest) String() string { +func (x *CreateProjectSecretRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DeleteCredentialsRequest) ProtoMessage() {} +func (*CreateProjectSecretRequest) ProtoMessage() {} -func (x *DeleteCredentialsRequest) ProtoReflect() protoreflect.Message { +func (x *CreateProjectSecretRequest) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -4882,33 +4828,49 @@ func (x *DeleteCredentialsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DeleteCredentialsRequest.ProtoReflect.Descriptor instead. -func (*DeleteCredentialsRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use CreateProjectSecretRequest.ProtoReflect.Descriptor instead. +func (*CreateProjectSecretRequest) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{85} } -func (x *DeleteCredentialsRequest) GetProject() string { +func (x *CreateProjectSecretRequest) GetProject() string { if x != nil { return x.Project } return "" } -func (x *DeleteCredentialsRequest) GetName() string { +func (x *CreateProjectSecretRequest) GetName() string { if x != nil { return x.Name } return "" } -type DeleteCredentialsResponse struct { +func (x *CreateProjectSecretRequest) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *CreateProjectSecretRequest) GetData() map[string]string { + if x != nil { + return x.Data + } + return nil +} + +type CreateProjectSecretResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Secret *v1.Secret `protobuf:"bytes,1,opt,name=secret,proto3" json:"secret,omitempty"` } -func (x *DeleteCredentialsResponse) Reset() { - *x = DeleteCredentialsResponse{} +func (x *CreateProjectSecretResponse) Reset() { + *x = CreateProjectSecretResponse{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -4916,13 +4878,13 @@ func (x *DeleteCredentialsResponse) Reset() { } } -func (x *DeleteCredentialsResponse) String() string { +func (x *CreateProjectSecretResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DeleteCredentialsResponse) ProtoMessage() {} +func (*CreateProjectSecretResponse) ProtoMessage() {} -func (x *DeleteCredentialsResponse) ProtoReflect() protoreflect.Message { +func (x *CreateProjectSecretResponse) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -4934,23 +4896,31 @@ func (x *DeleteCredentialsResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DeleteCredentialsResponse.ProtoReflect.Descriptor instead. -func (*DeleteCredentialsResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use CreateProjectSecretResponse.ProtoReflect.Descriptor instead. +func (*CreateProjectSecretResponse) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{86} } -type GetCredentialsRequest struct { +func (x *CreateProjectSecretResponse) GetSecret() *v1.Secret { + if x != nil { + return x.Secret + } + return nil +} + +type UpdateProjectSecretRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Format RawFormat `protobuf:"varint,3,opt,name=format,proto3,enum=akuity.io.kargo.service.v1alpha1.RawFormat" json:"format,omitempty"` + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + Data map[string]string `protobuf:"bytes,4,rep,name=data,proto3" json:"data,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (x *GetCredentialsRequest) Reset() { - *x = GetCredentialsRequest{} +func (x *UpdateProjectSecretRequest) Reset() { + *x = UpdateProjectSecretRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -4958,13 +4928,13 @@ func (x *GetCredentialsRequest) Reset() { } } -func (x *GetCredentialsRequest) String() string { +func (x *UpdateProjectSecretRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetCredentialsRequest) ProtoMessage() {} +func (*UpdateProjectSecretRequest) ProtoMessage() {} -func (x *GetCredentialsRequest) ProtoReflect() protoreflect.Message { +func (x *UpdateProjectSecretRequest) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -4976,46 +4946,49 @@ func (x *GetCredentialsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetCredentialsRequest.ProtoReflect.Descriptor instead. -func (*GetCredentialsRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use UpdateProjectSecretRequest.ProtoReflect.Descriptor instead. +func (*UpdateProjectSecretRequest) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{87} } -func (x *GetCredentialsRequest) GetProject() string { +func (x *UpdateProjectSecretRequest) GetProject() string { if x != nil { return x.Project } return "" } -func (x *GetCredentialsRequest) GetName() string { +func (x *UpdateProjectSecretRequest) GetName() string { if x != nil { return x.Name } return "" } -func (x *GetCredentialsRequest) GetFormat() RawFormat { +func (x *UpdateProjectSecretRequest) GetDescription() string { if x != nil { - return x.Format + return x.Description } - return RawFormat_RAW_FORMAT_UNSPECIFIED + return "" } -type GetCredentialsResponse struct { +func (x *UpdateProjectSecretRequest) GetData() map[string]string { + if x != nil { + return x.Data + } + return nil +} + +type UpdateProjectSecretResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Types that are assignable to Result: - // - // *GetCredentialsResponse_Credentials - // *GetCredentialsResponse_Raw - Result isGetCredentialsResponse_Result `protobuf_oneof:"result"` + Secret *v1.Secret `protobuf:"bytes,1,opt,name=secret,proto3" json:"secret,omitempty"` } -func (x *GetCredentialsResponse) Reset() { - *x = GetCredentialsResponse{} +func (x *UpdateProjectSecretResponse) Reset() { + *x = UpdateProjectSecretResponse{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5023,13 +4996,13 @@ func (x *GetCredentialsResponse) Reset() { } } -func (x *GetCredentialsResponse) String() string { +func (x *UpdateProjectSecretResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetCredentialsResponse) ProtoMessage() {} +func (*UpdateProjectSecretResponse) ProtoMessage() {} -func (x *GetCredentialsResponse) ProtoReflect() protoreflect.Message { +func (x *UpdateProjectSecretResponse) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5041,58 +5014,29 @@ func (x *GetCredentialsResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetCredentialsResponse.ProtoReflect.Descriptor instead. -func (*GetCredentialsResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use UpdateProjectSecretResponse.ProtoReflect.Descriptor instead. +func (*UpdateProjectSecretResponse) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{88} } -func (m *GetCredentialsResponse) GetResult() isGetCredentialsResponse_Result { - if m != nil { - return m.Result - } - return nil -} - -func (x *GetCredentialsResponse) GetCredentials() *v1.Secret { - if x, ok := x.GetResult().(*GetCredentialsResponse_Credentials); ok { - return x.Credentials - } - return nil -} - -func (x *GetCredentialsResponse) GetRaw() []byte { - if x, ok := x.GetResult().(*GetCredentialsResponse_Raw); ok { - return x.Raw +func (x *UpdateProjectSecretResponse) GetSecret() *v1.Secret { + if x != nil { + return x.Secret } return nil } -type isGetCredentialsResponse_Result interface { - isGetCredentialsResponse_Result() -} - -type GetCredentialsResponse_Credentials struct { - Credentials *v1.Secret `protobuf:"bytes,1,opt,name=credentials,proto3,oneof"` -} - -type GetCredentialsResponse_Raw struct { - Raw []byte `protobuf:"bytes,2,opt,name=raw,proto3,oneof"` -} - -func (*GetCredentialsResponse_Credentials) isGetCredentialsResponse_Result() {} - -func (*GetCredentialsResponse_Raw) isGetCredentialsResponse_Result() {} - -type ListCredentialsRequest struct { +type DeleteProjectSecretRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` } -func (x *ListCredentialsRequest) Reset() { - *x = ListCredentialsRequest{} +func (x *DeleteProjectSecretRequest) Reset() { + *x = DeleteProjectSecretRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5100,13 +5044,13 @@ func (x *ListCredentialsRequest) Reset() { } } -func (x *ListCredentialsRequest) String() string { +func (x *DeleteProjectSecretRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListCredentialsRequest) ProtoMessage() {} +func (*DeleteProjectSecretRequest) ProtoMessage() {} -func (x *ListCredentialsRequest) ProtoReflect() protoreflect.Message { +func (x *DeleteProjectSecretRequest) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5118,28 +5062,33 @@ func (x *ListCredentialsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListCredentialsRequest.ProtoReflect.Descriptor instead. -func (*ListCredentialsRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use DeleteProjectSecretRequest.ProtoReflect.Descriptor instead. +func (*DeleteProjectSecretRequest) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{89} } -func (x *ListCredentialsRequest) GetProject() string { +func (x *DeleteProjectSecretRequest) GetProject() string { if x != nil { return x.Project } return "" } -type ListCredentialsResponse struct { +func (x *DeleteProjectSecretRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type DeleteProjectSecretResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - Credentials []*v1.Secret `protobuf:"bytes,1,rep,name=credentials,proto3" json:"credentials,omitempty"` } -func (x *ListCredentialsResponse) Reset() { - *x = ListCredentialsResponse{} +func (x *DeleteProjectSecretResponse) Reset() { + *x = DeleteProjectSecretResponse{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5147,13 +5096,13 @@ func (x *ListCredentialsResponse) Reset() { } } -func (x *ListCredentialsResponse) String() string { +func (x *DeleteProjectSecretResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListCredentialsResponse) ProtoMessage() {} +func (*DeleteProjectSecretResponse) ProtoMessage() {} -func (x *ListCredentialsResponse) ProtoReflect() protoreflect.Message { +func (x *DeleteProjectSecretResponse) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5165,26 +5114,20 @@ func (x *ListCredentialsResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListCredentialsResponse.ProtoReflect.Descriptor instead. -func (*ListCredentialsResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use DeleteProjectSecretResponse.ProtoReflect.Descriptor instead. +func (*DeleteProjectSecretResponse) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{90} } -func (x *ListCredentialsResponse) GetCredentials() []*v1.Secret { - if x != nil { - return x.Credentials - } - return nil -} - -type UpdateCredentialsRequest struct { +type CreateCredentialsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,8,opt,name=description,proto3" json:"description,omitempty"` + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,8,opt,name=description,proto3" json:"description,omitempty"` + // type is git, helm, image Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` RepoUrl string `protobuf:"bytes,4,opt,name=repo_url,json=repoURL,proto3" json:"repo_url,omitempty"` RepoUrlIsRegex bool `protobuf:"varint,5,opt,name=repo_url_is_regex,json=repoURLIsRegex,proto3" json:"repo_url_is_regex,omitempty"` @@ -5192,8 +5135,8 @@ type UpdateCredentialsRequest struct { Password string `protobuf:"bytes,7,opt,name=password,proto3" json:"password,omitempty"` } -func (x *UpdateCredentialsRequest) Reset() { - *x = UpdateCredentialsRequest{} +func (x *CreateCredentialsRequest) Reset() { + *x = CreateCredentialsRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5201,13 +5144,13 @@ func (x *UpdateCredentialsRequest) Reset() { } } -func (x *UpdateCredentialsRequest) String() string { +func (x *CreateCredentialsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateCredentialsRequest) ProtoMessage() {} +func (*CreateCredentialsRequest) ProtoMessage() {} -func (x *UpdateCredentialsRequest) ProtoReflect() protoreflect.Message { +func (x *CreateCredentialsRequest) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5219,68 +5162,68 @@ func (x *UpdateCredentialsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateCredentialsRequest.ProtoReflect.Descriptor instead. -func (*UpdateCredentialsRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use CreateCredentialsRequest.ProtoReflect.Descriptor instead. +func (*CreateCredentialsRequest) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{91} } -func (x *UpdateCredentialsRequest) GetProject() string { +func (x *CreateCredentialsRequest) GetProject() string { if x != nil { return x.Project } return "" } -func (x *UpdateCredentialsRequest) GetName() string { +func (x *CreateCredentialsRequest) GetName() string { if x != nil { return x.Name } return "" } -func (x *UpdateCredentialsRequest) GetDescription() string { +func (x *CreateCredentialsRequest) GetDescription() string { if x != nil { return x.Description } return "" } -func (x *UpdateCredentialsRequest) GetType() string { +func (x *CreateCredentialsRequest) GetType() string { if x != nil { return x.Type } return "" } -func (x *UpdateCredentialsRequest) GetRepoUrl() string { +func (x *CreateCredentialsRequest) GetRepoUrl() string { if x != nil { return x.RepoUrl } return "" } -func (x *UpdateCredentialsRequest) GetRepoUrlIsRegex() bool { +func (x *CreateCredentialsRequest) GetRepoUrlIsRegex() bool { if x != nil { return x.RepoUrlIsRegex } return false } -func (x *UpdateCredentialsRequest) GetUsername() string { +func (x *CreateCredentialsRequest) GetUsername() string { if x != nil { return x.Username } return "" } -func (x *UpdateCredentialsRequest) GetPassword() string { +func (x *CreateCredentialsRequest) GetPassword() string { if x != nil { return x.Password } return "" } -type UpdateCredentialsResponse struct { +type CreateCredentialsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -5288,8 +5231,8 @@ type UpdateCredentialsResponse struct { Credentials *v1.Secret `protobuf:"bytes,1,opt,name=credentials,proto3" json:"credentials,omitempty"` } -func (x *UpdateCredentialsResponse) Reset() { - *x = UpdateCredentialsResponse{} +func (x *CreateCredentialsResponse) Reset() { + *x = CreateCredentialsResponse{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5297,13 +5240,13 @@ func (x *UpdateCredentialsResponse) Reset() { } } -func (x *UpdateCredentialsResponse) String() string { +func (x *CreateCredentialsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateCredentialsResponse) ProtoMessage() {} +func (*CreateCredentialsResponse) ProtoMessage() {} -func (x *UpdateCredentialsResponse) ProtoReflect() protoreflect.Message { +func (x *CreateCredentialsResponse) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[92] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5315,28 +5258,29 @@ func (x *UpdateCredentialsResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateCredentialsResponse.ProtoReflect.Descriptor instead. -func (*UpdateCredentialsResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use CreateCredentialsResponse.ProtoReflect.Descriptor instead. +func (*CreateCredentialsResponse) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{92} } -func (x *UpdateCredentialsResponse) GetCredentials() *v1.Secret { +func (x *CreateCredentialsResponse) GetCredentials() *v1.Secret { if x != nil { return x.Credentials } return nil } -type ListAnalysisTemplatesRequest struct { +type DeleteCredentialsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` } -func (x *ListAnalysisTemplatesRequest) Reset() { - *x = ListAnalysisTemplatesRequest{} +func (x *DeleteCredentialsRequest) Reset() { + *x = DeleteCredentialsRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5344,13 +5288,13 @@ func (x *ListAnalysisTemplatesRequest) Reset() { } } -func (x *ListAnalysisTemplatesRequest) String() string { +func (x *DeleteCredentialsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListAnalysisTemplatesRequest) ProtoMessage() {} +func (*DeleteCredentialsRequest) ProtoMessage() {} -func (x *ListAnalysisTemplatesRequest) ProtoReflect() protoreflect.Message { +func (x *DeleteCredentialsRequest) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[93] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5362,28 +5306,33 @@ func (x *ListAnalysisTemplatesRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListAnalysisTemplatesRequest.ProtoReflect.Descriptor instead. -func (*ListAnalysisTemplatesRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use DeleteCredentialsRequest.ProtoReflect.Descriptor instead. +func (*DeleteCredentialsRequest) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{93} } -func (x *ListAnalysisTemplatesRequest) GetProject() string { +func (x *DeleteCredentialsRequest) GetProject() string { if x != nil { return x.Project } return "" } -type ListAnalysisTemplatesResponse struct { +func (x *DeleteCredentialsRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type DeleteCredentialsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - AnalysisTemplates []*v1alpha11.AnalysisTemplate `protobuf:"bytes,1,rep,name=analysis_templates,json=analysisTemplates,proto3" json:"analysis_templates,omitempty"` } -func (x *ListAnalysisTemplatesResponse) Reset() { - *x = ListAnalysisTemplatesResponse{} +func (x *DeleteCredentialsResponse) Reset() { + *x = DeleteCredentialsResponse{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5391,13 +5340,13 @@ func (x *ListAnalysisTemplatesResponse) Reset() { } } -func (x *ListAnalysisTemplatesResponse) String() string { +func (x *DeleteCredentialsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListAnalysisTemplatesResponse) ProtoMessage() {} +func (*DeleteCredentialsResponse) ProtoMessage() {} -func (x *ListAnalysisTemplatesResponse) ProtoReflect() protoreflect.Message { +func (x *DeleteCredentialsResponse) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[94] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5409,19 +5358,12 @@ func (x *ListAnalysisTemplatesResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListAnalysisTemplatesResponse.ProtoReflect.Descriptor instead. -func (*ListAnalysisTemplatesResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use DeleteCredentialsResponse.ProtoReflect.Descriptor instead. +func (*DeleteCredentialsResponse) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{94} } -func (x *ListAnalysisTemplatesResponse) GetAnalysisTemplates() []*v1alpha11.AnalysisTemplate { - if x != nil { - return x.AnalysisTemplates - } - return nil -} - -type GetAnalysisTemplateRequest struct { +type GetCredentialsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -5431,8 +5373,8 @@ type GetAnalysisTemplateRequest struct { Format RawFormat `protobuf:"varint,3,opt,name=format,proto3,enum=akuity.io.kargo.service.v1alpha1.RawFormat" json:"format,omitempty"` } -func (x *GetAnalysisTemplateRequest) Reset() { - *x = GetAnalysisTemplateRequest{} +func (x *GetCredentialsRequest) Reset() { + *x = GetCredentialsRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5440,13 +5382,13 @@ func (x *GetAnalysisTemplateRequest) Reset() { } } -func (x *GetAnalysisTemplateRequest) String() string { +func (x *GetCredentialsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetAnalysisTemplateRequest) ProtoMessage() {} +func (*GetCredentialsRequest) ProtoMessage() {} -func (x *GetAnalysisTemplateRequest) ProtoReflect() protoreflect.Message { +func (x *GetCredentialsRequest) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[95] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5458,46 +5400,46 @@ func (x *GetAnalysisTemplateRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetAnalysisTemplateRequest.ProtoReflect.Descriptor instead. -func (*GetAnalysisTemplateRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use GetCredentialsRequest.ProtoReflect.Descriptor instead. +func (*GetCredentialsRequest) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{95} } -func (x *GetAnalysisTemplateRequest) GetProject() string { +func (x *GetCredentialsRequest) GetProject() string { if x != nil { return x.Project } return "" } -func (x *GetAnalysisTemplateRequest) GetName() string { +func (x *GetCredentialsRequest) GetName() string { if x != nil { return x.Name } return "" } -func (x *GetAnalysisTemplateRequest) GetFormat() RawFormat { +func (x *GetCredentialsRequest) GetFormat() RawFormat { if x != nil { return x.Format } return RawFormat_RAW_FORMAT_UNSPECIFIED } -type GetAnalysisTemplateResponse struct { +type GetCredentialsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Types that are assignable to Result: // - // *GetAnalysisTemplateResponse_AnalysisTemplate - // *GetAnalysisTemplateResponse_Raw - Result isGetAnalysisTemplateResponse_Result `protobuf_oneof:"result"` + // *GetCredentialsResponse_Credentials + // *GetCredentialsResponse_Raw + Result isGetCredentialsResponse_Result `protobuf_oneof:"result"` } -func (x *GetAnalysisTemplateResponse) Reset() { - *x = GetAnalysisTemplateResponse{} +func (x *GetCredentialsResponse) Reset() { + *x = GetCredentialsResponse{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5505,13 +5447,13 @@ func (x *GetAnalysisTemplateResponse) Reset() { } } -func (x *GetAnalysisTemplateResponse) String() string { +func (x *GetCredentialsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetAnalysisTemplateResponse) ProtoMessage() {} +func (*GetCredentialsResponse) ProtoMessage() {} -func (x *GetAnalysisTemplateResponse) ProtoReflect() protoreflect.Message { +func (x *GetCredentialsResponse) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[96] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5523,60 +5465,58 @@ func (x *GetAnalysisTemplateResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetAnalysisTemplateResponse.ProtoReflect.Descriptor instead. -func (*GetAnalysisTemplateResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use GetCredentialsResponse.ProtoReflect.Descriptor instead. +func (*GetCredentialsResponse) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{96} } -func (m *GetAnalysisTemplateResponse) GetResult() isGetAnalysisTemplateResponse_Result { +func (m *GetCredentialsResponse) GetResult() isGetCredentialsResponse_Result { if m != nil { return m.Result } return nil } -func (x *GetAnalysisTemplateResponse) GetAnalysisTemplate() *v1alpha11.AnalysisTemplate { - if x, ok := x.GetResult().(*GetAnalysisTemplateResponse_AnalysisTemplate); ok { - return x.AnalysisTemplate +func (x *GetCredentialsResponse) GetCredentials() *v1.Secret { + if x, ok := x.GetResult().(*GetCredentialsResponse_Credentials); ok { + return x.Credentials } return nil } -func (x *GetAnalysisTemplateResponse) GetRaw() []byte { - if x, ok := x.GetResult().(*GetAnalysisTemplateResponse_Raw); ok { +func (x *GetCredentialsResponse) GetRaw() []byte { + if x, ok := x.GetResult().(*GetCredentialsResponse_Raw); ok { return x.Raw } return nil } -type isGetAnalysisTemplateResponse_Result interface { - isGetAnalysisTemplateResponse_Result() +type isGetCredentialsResponse_Result interface { + isGetCredentialsResponse_Result() } -type GetAnalysisTemplateResponse_AnalysisTemplate struct { - AnalysisTemplate *v1alpha11.AnalysisTemplate `protobuf:"bytes,1,opt,name=analysis_template,json=analysisTemplate,proto3,oneof"` +type GetCredentialsResponse_Credentials struct { + Credentials *v1.Secret `protobuf:"bytes,1,opt,name=credentials,proto3,oneof"` } -type GetAnalysisTemplateResponse_Raw struct { +type GetCredentialsResponse_Raw struct { Raw []byte `protobuf:"bytes,2,opt,name=raw,proto3,oneof"` } -func (*GetAnalysisTemplateResponse_AnalysisTemplate) isGetAnalysisTemplateResponse_Result() {} +func (*GetCredentialsResponse_Credentials) isGetCredentialsResponse_Result() {} -func (*GetAnalysisTemplateResponse_Raw) isGetAnalysisTemplateResponse_Result() {} +func (*GetCredentialsResponse_Raw) isGetCredentialsResponse_Result() {} -type GetAnalysisRunRequest struct { +type ListCredentialsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Format RawFormat `protobuf:"varint,3,opt,name=format,proto3,enum=akuity.io.kargo.service.v1alpha1.RawFormat" json:"format,omitempty"` + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` } -func (x *GetAnalysisRunRequest) Reset() { - *x = GetAnalysisRunRequest{} +func (x *ListCredentialsRequest) Reset() { + *x = ListCredentialsRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5584,13 +5524,13 @@ func (x *GetAnalysisRunRequest) Reset() { } } -func (x *GetAnalysisRunRequest) String() string { +func (x *ListCredentialsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetAnalysisRunRequest) ProtoMessage() {} +func (*ListCredentialsRequest) ProtoMessage() {} -func (x *GetAnalysisRunRequest) ProtoReflect() protoreflect.Message { +func (x *ListCredentialsRequest) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[97] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5602,46 +5542,28 @@ func (x *GetAnalysisRunRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetAnalysisRunRequest.ProtoReflect.Descriptor instead. -func (*GetAnalysisRunRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ListCredentialsRequest.ProtoReflect.Descriptor instead. +func (*ListCredentialsRequest) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{97} } -func (x *GetAnalysisRunRequest) GetNamespace() string { - if x != nil { - return x.Namespace - } - return "" -} - -func (x *GetAnalysisRunRequest) GetName() string { +func (x *ListCredentialsRequest) GetProject() string { if x != nil { - return x.Name + return x.Project } return "" } -func (x *GetAnalysisRunRequest) GetFormat() RawFormat { - if x != nil { - return x.Format - } - return RawFormat_RAW_FORMAT_UNSPECIFIED -} - -type GetAnalysisRunResponse struct { +type ListCredentialsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Types that are assignable to Result: - // - // *GetAnalysisRunResponse_AnalysisRun - // *GetAnalysisRunResponse_Raw - Result isGetAnalysisRunResponse_Result `protobuf_oneof:"result"` + Credentials []*v1.Secret `protobuf:"bytes,1,rep,name=credentials,proto3" json:"credentials,omitempty"` } -func (x *GetAnalysisRunResponse) Reset() { - *x = GetAnalysisRunResponse{} +func (x *ListCredentialsResponse) Reset() { + *x = ListCredentialsResponse{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5649,13 +5571,13 @@ func (x *GetAnalysisRunResponse) Reset() { } } -func (x *GetAnalysisRunResponse) String() string { +func (x *ListCredentialsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetAnalysisRunResponse) ProtoMessage() {} +func (*ListCredentialsResponse) ProtoMessage() {} -func (x *GetAnalysisRunResponse) ProtoReflect() protoreflect.Message { +func (x *ListCredentialsResponse) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[98] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5667,59 +5589,35 @@ func (x *GetAnalysisRunResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetAnalysisRunResponse.ProtoReflect.Descriptor instead. -func (*GetAnalysisRunResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use ListCredentialsResponse.ProtoReflect.Descriptor instead. +func (*ListCredentialsResponse) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{98} } -func (m *GetAnalysisRunResponse) GetResult() isGetAnalysisRunResponse_Result { - if m != nil { - return m.Result - } - return nil -} - -func (x *GetAnalysisRunResponse) GetAnalysisRun() *v1alpha11.AnalysisRun { - if x, ok := x.GetResult().(*GetAnalysisRunResponse_AnalysisRun); ok { - return x.AnalysisRun - } - return nil -} - -func (x *GetAnalysisRunResponse) GetRaw() []byte { - if x, ok := x.GetResult().(*GetAnalysisRunResponse_Raw); ok { - return x.Raw +func (x *ListCredentialsResponse) GetCredentials() []*v1.Secret { + if x != nil { + return x.Credentials } return nil } -type isGetAnalysisRunResponse_Result interface { - isGetAnalysisRunResponse_Result() -} - -type GetAnalysisRunResponse_AnalysisRun struct { - AnalysisRun *v1alpha11.AnalysisRun `protobuf:"bytes,1,opt,name=analysis_run,json=analysisRun,proto3,oneof"` -} - -type GetAnalysisRunResponse_Raw struct { - Raw []byte `protobuf:"bytes,2,opt,name=raw,proto3,oneof"` -} - -func (*GetAnalysisRunResponse_AnalysisRun) isGetAnalysisRunResponse_Result() {} - -func (*GetAnalysisRunResponse_Raw) isGetAnalysisRunResponse_Result() {} - -type DeleteAnalysisTemplateRequest struct { +type UpdateCredentialsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,8,opt,name=description,proto3" json:"description,omitempty"` + Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` + RepoUrl string `protobuf:"bytes,4,opt,name=repo_url,json=repoURL,proto3" json:"repo_url,omitempty"` + RepoUrlIsRegex bool `protobuf:"varint,5,opt,name=repo_url_is_regex,json=repoURLIsRegex,proto3" json:"repo_url_is_regex,omitempty"` + Username string `protobuf:"bytes,6,opt,name=username,proto3" json:"username,omitempty"` + Password string `protobuf:"bytes,7,opt,name=password,proto3" json:"password,omitempty"` } -func (x *DeleteAnalysisTemplateRequest) Reset() { - *x = DeleteAnalysisTemplateRequest{} +func (x *UpdateCredentialsRequest) Reset() { + *x = UpdateCredentialsRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5727,13 +5625,13 @@ func (x *DeleteAnalysisTemplateRequest) Reset() { } } -func (x *DeleteAnalysisTemplateRequest) String() string { +func (x *UpdateCredentialsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DeleteAnalysisTemplateRequest) ProtoMessage() {} +func (*UpdateCredentialsRequest) ProtoMessage() {} -func (x *DeleteAnalysisTemplateRequest) ProtoReflect() protoreflect.Message { +func (x *UpdateCredentialsRequest) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[99] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5745,33 +5643,77 @@ func (x *DeleteAnalysisTemplateRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DeleteAnalysisTemplateRequest.ProtoReflect.Descriptor instead. -func (*DeleteAnalysisTemplateRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use UpdateCredentialsRequest.ProtoReflect.Descriptor instead. +func (*UpdateCredentialsRequest) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{99} } -func (x *DeleteAnalysisTemplateRequest) GetProject() string { +func (x *UpdateCredentialsRequest) GetProject() string { if x != nil { return x.Project } return "" } -func (x *DeleteAnalysisTemplateRequest) GetName() string { +func (x *UpdateCredentialsRequest) GetName() string { if x != nil { return x.Name } return "" } -type DeleteAnalysisTemplateResponse struct { +func (x *UpdateCredentialsRequest) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *UpdateCredentialsRequest) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *UpdateCredentialsRequest) GetRepoUrl() string { + if x != nil { + return x.RepoUrl + } + return "" +} + +func (x *UpdateCredentialsRequest) GetRepoUrlIsRegex() bool { + if x != nil { + return x.RepoUrlIsRegex + } + return false +} + +func (x *UpdateCredentialsRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *UpdateCredentialsRequest) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +type UpdateCredentialsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + Credentials *v1.Secret `protobuf:"bytes,1,opt,name=credentials,proto3" json:"credentials,omitempty"` } -func (x *DeleteAnalysisTemplateResponse) Reset() { - *x = DeleteAnalysisTemplateResponse{} +func (x *UpdateCredentialsResponse) Reset() { + *x = UpdateCredentialsResponse{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5779,13 +5721,13 @@ func (x *DeleteAnalysisTemplateResponse) Reset() { } } -func (x *DeleteAnalysisTemplateResponse) String() string { +func (x *UpdateCredentialsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DeleteAnalysisTemplateResponse) ProtoMessage() {} +func (*UpdateCredentialsResponse) ProtoMessage() {} -func (x *DeleteAnalysisTemplateResponse) ProtoReflect() protoreflect.Message { +func (x *UpdateCredentialsResponse) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[100] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5797,12 +5739,19 @@ func (x *DeleteAnalysisTemplateResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DeleteAnalysisTemplateResponse.ProtoReflect.Descriptor instead. -func (*DeleteAnalysisTemplateResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use UpdateCredentialsResponse.ProtoReflect.Descriptor instead. +func (*UpdateCredentialsResponse) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{100} } -type ListProjectEventsRequest struct { +func (x *UpdateCredentialsResponse) GetCredentials() *v1.Secret { + if x != nil { + return x.Credentials + } + return nil +} + +type ListAnalysisTemplatesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -5810,8 +5759,8 @@ type ListProjectEventsRequest struct { Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` } -func (x *ListProjectEventsRequest) Reset() { - *x = ListProjectEventsRequest{} +func (x *ListAnalysisTemplatesRequest) Reset() { + *x = ListAnalysisTemplatesRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5819,13 +5768,13 @@ func (x *ListProjectEventsRequest) Reset() { } } -func (x *ListProjectEventsRequest) String() string { +func (x *ListAnalysisTemplatesRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListProjectEventsRequest) ProtoMessage() {} +func (*ListAnalysisTemplatesRequest) ProtoMessage() {} -func (x *ListProjectEventsRequest) ProtoReflect() protoreflect.Message { +func (x *ListAnalysisTemplatesRequest) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[101] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5837,28 +5786,28 @@ func (x *ListProjectEventsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListProjectEventsRequest.ProtoReflect.Descriptor instead. -func (*ListProjectEventsRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ListAnalysisTemplatesRequest.ProtoReflect.Descriptor instead. +func (*ListAnalysisTemplatesRequest) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{101} } -func (x *ListProjectEventsRequest) GetProject() string { +func (x *ListAnalysisTemplatesRequest) GetProject() string { if x != nil { return x.Project } return "" } -type ListProjectEventsResponse struct { +type ListAnalysisTemplatesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Events []*v1.Event `protobuf:"bytes,1,rep,name=events,proto3" json:"events,omitempty"` + AnalysisTemplates []*v1alpha11.AnalysisTemplate `protobuf:"bytes,1,rep,name=analysis_templates,json=analysisTemplates,proto3" json:"analysis_templates,omitempty"` } -func (x *ListProjectEventsResponse) Reset() { - *x = ListProjectEventsResponse{} +func (x *ListAnalysisTemplatesResponse) Reset() { + *x = ListAnalysisTemplatesResponse{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5866,13 +5815,13 @@ func (x *ListProjectEventsResponse) Reset() { } } -func (x *ListProjectEventsResponse) String() string { +func (x *ListAnalysisTemplatesResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListProjectEventsResponse) ProtoMessage() {} +func (*ListAnalysisTemplatesResponse) ProtoMessage() {} -func (x *ListProjectEventsResponse) ProtoReflect() protoreflect.Message { +func (x *ListAnalysisTemplatesResponse) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[102] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5884,28 +5833,30 @@ func (x *ListProjectEventsResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListProjectEventsResponse.ProtoReflect.Descriptor instead. -func (*ListProjectEventsResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use ListAnalysisTemplatesResponse.ProtoReflect.Descriptor instead. +func (*ListAnalysisTemplatesResponse) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{102} } -func (x *ListProjectEventsResponse) GetEvents() []*v1.Event { +func (x *ListAnalysisTemplatesResponse) GetAnalysisTemplates() []*v1alpha11.AnalysisTemplate { if x != nil { - return x.Events + return x.AnalysisTemplates } return nil } -type CreateRoleRequest struct { +type GetAnalysisTemplateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Role *v1alpha12.Role `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Format RawFormat `protobuf:"varint,3,opt,name=format,proto3,enum=akuity.io.kargo.service.v1alpha1.RawFormat" json:"format,omitempty"` } -func (x *CreateRoleRequest) Reset() { - *x = CreateRoleRequest{} +func (x *GetAnalysisTemplateRequest) Reset() { + *x = GetAnalysisTemplateRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5913,13 +5864,13 @@ func (x *CreateRoleRequest) Reset() { } } -func (x *CreateRoleRequest) String() string { +func (x *GetAnalysisTemplateRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CreateRoleRequest) ProtoMessage() {} +func (*GetAnalysisTemplateRequest) ProtoMessage() {} -func (x *CreateRoleRequest) ProtoReflect() protoreflect.Message { +func (x *GetAnalysisTemplateRequest) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[103] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5931,28 +5882,46 @@ func (x *CreateRoleRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CreateRoleRequest.ProtoReflect.Descriptor instead. -func (*CreateRoleRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use GetAnalysisTemplateRequest.ProtoReflect.Descriptor instead. +func (*GetAnalysisTemplateRequest) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{103} } -func (x *CreateRoleRequest) GetRole() *v1alpha12.Role { +func (x *GetAnalysisTemplateRequest) GetProject() string { if x != nil { - return x.Role + return x.Project } - return nil + return "" } -type CreateRoleResponse struct { +func (x *GetAnalysisTemplateRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GetAnalysisTemplateRequest) GetFormat() RawFormat { + if x != nil { + return x.Format + } + return RawFormat_RAW_FORMAT_UNSPECIFIED +} + +type GetAnalysisTemplateResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Role *v1alpha12.Role `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` + // Types that are assignable to Result: + // + // *GetAnalysisTemplateResponse_AnalysisTemplate + // *GetAnalysisTemplateResponse_Raw + Result isGetAnalysisTemplateResponse_Result `protobuf_oneof:"result"` } -func (x *CreateRoleResponse) Reset() { - *x = CreateRoleResponse{} +func (x *GetAnalysisTemplateResponse) Reset() { + *x = GetAnalysisTemplateResponse{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5960,13 +5929,13 @@ func (x *CreateRoleResponse) Reset() { } } -func (x *CreateRoleResponse) String() string { +func (x *GetAnalysisTemplateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CreateRoleResponse) ProtoMessage() {} +func (*GetAnalysisTemplateResponse) ProtoMessage() {} -func (x *CreateRoleResponse) ProtoReflect() protoreflect.Message { +func (x *GetAnalysisTemplateResponse) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[104] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -5978,29 +5947,60 @@ func (x *CreateRoleResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CreateRoleResponse.ProtoReflect.Descriptor instead. -func (*CreateRoleResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use GetAnalysisTemplateResponse.ProtoReflect.Descriptor instead. +func (*GetAnalysisTemplateResponse) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{104} } -func (x *CreateRoleResponse) GetRole() *v1alpha12.Role { - if x != nil { - return x.Role +func (m *GetAnalysisTemplateResponse) GetResult() isGetAnalysisTemplateResponse_Result { + if m != nil { + return m.Result } return nil } -type DeleteRoleRequest struct { +func (x *GetAnalysisTemplateResponse) GetAnalysisTemplate() *v1alpha11.AnalysisTemplate { + if x, ok := x.GetResult().(*GetAnalysisTemplateResponse_AnalysisTemplate); ok { + return x.AnalysisTemplate + } + return nil +} + +func (x *GetAnalysisTemplateResponse) GetRaw() []byte { + if x, ok := x.GetResult().(*GetAnalysisTemplateResponse_Raw); ok { + return x.Raw + } + return nil +} + +type isGetAnalysisTemplateResponse_Result interface { + isGetAnalysisTemplateResponse_Result() +} + +type GetAnalysisTemplateResponse_AnalysisTemplate struct { + AnalysisTemplate *v1alpha11.AnalysisTemplate `protobuf:"bytes,1,opt,name=analysis_template,json=analysisTemplate,proto3,oneof"` +} + +type GetAnalysisTemplateResponse_Raw struct { + Raw []byte `protobuf:"bytes,2,opt,name=raw,proto3,oneof"` +} + +func (*GetAnalysisTemplateResponse_AnalysisTemplate) isGetAnalysisTemplateResponse_Result() {} + +func (*GetAnalysisTemplateResponse_Raw) isGetAnalysisTemplateResponse_Result() {} + +type GetAnalysisRunRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Format RawFormat `protobuf:"varint,3,opt,name=format,proto3,enum=akuity.io.kargo.service.v1alpha1.RawFormat" json:"format,omitempty"` } -func (x *DeleteRoleRequest) Reset() { - *x = DeleteRoleRequest{} +func (x *GetAnalysisRunRequest) Reset() { + *x = GetAnalysisRunRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6008,13 +6008,13 @@ func (x *DeleteRoleRequest) Reset() { } } -func (x *DeleteRoleRequest) String() string { +func (x *GetAnalysisRunRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DeleteRoleRequest) ProtoMessage() {} +func (*GetAnalysisRunRequest) ProtoMessage() {} -func (x *DeleteRoleRequest) ProtoReflect() protoreflect.Message { +func (x *GetAnalysisRunRequest) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[105] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6026,47 +6026,60 @@ func (x *DeleteRoleRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DeleteRoleRequest.ProtoReflect.Descriptor instead. -func (*DeleteRoleRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use GetAnalysisRunRequest.ProtoReflect.Descriptor instead. +func (*GetAnalysisRunRequest) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{105} } -func (x *DeleteRoleRequest) GetProject() string { +func (x *GetAnalysisRunRequest) GetNamespace() string { if x != nil { - return x.Project + return x.Namespace } return "" } -func (x *DeleteRoleRequest) GetName() string { +func (x *GetAnalysisRunRequest) GetName() string { if x != nil { return x.Name } return "" } -type DeleteRoleResponse struct { +func (x *GetAnalysisRunRequest) GetFormat() RawFormat { + if x != nil { + return x.Format + } + return RawFormat_RAW_FORMAT_UNSPECIFIED +} + +type GetAnalysisRunResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields -} -func (x *DeleteRoleResponse) Reset() { - *x = DeleteRoleResponse{} - if protoimpl.UnsafeEnabled { + // Types that are assignable to Result: + // + // *GetAnalysisRunResponse_AnalysisRun + // *GetAnalysisRunResponse_Raw + Result isGetAnalysisRunResponse_Result `protobuf_oneof:"result"` +} + +func (x *GetAnalysisRunResponse) Reset() { + *x = GetAnalysisRunResponse{} + if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *DeleteRoleResponse) String() string { +func (x *GetAnalysisRunResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DeleteRoleResponse) ProtoMessage() {} +func (*GetAnalysisRunResponse) ProtoMessage() {} -func (x *DeleteRoleResponse) ProtoReflect() protoreflect.Message { +func (x *GetAnalysisRunResponse) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[106] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6078,24 +6091,59 @@ func (x *DeleteRoleResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DeleteRoleResponse.ProtoReflect.Descriptor instead. -func (*DeleteRoleResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use GetAnalysisRunResponse.ProtoReflect.Descriptor instead. +func (*GetAnalysisRunResponse) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{106} } -type GetRoleRequest struct { +func (m *GetAnalysisRunResponse) GetResult() isGetAnalysisRunResponse_Result { + if m != nil { + return m.Result + } + return nil +} + +func (x *GetAnalysisRunResponse) GetAnalysisRun() *v1alpha11.AnalysisRun { + if x, ok := x.GetResult().(*GetAnalysisRunResponse_AnalysisRun); ok { + return x.AnalysisRun + } + return nil +} + +func (x *GetAnalysisRunResponse) GetRaw() []byte { + if x, ok := x.GetResult().(*GetAnalysisRunResponse_Raw); ok { + return x.Raw + } + return nil +} + +type isGetAnalysisRunResponse_Result interface { + isGetAnalysisRunResponse_Result() +} + +type GetAnalysisRunResponse_AnalysisRun struct { + AnalysisRun *v1alpha11.AnalysisRun `protobuf:"bytes,1,opt,name=analysis_run,json=analysisRun,proto3,oneof"` +} + +type GetAnalysisRunResponse_Raw struct { + Raw []byte `protobuf:"bytes,2,opt,name=raw,proto3,oneof"` +} + +func (*GetAnalysisRunResponse_AnalysisRun) isGetAnalysisRunResponse_Result() {} + +func (*GetAnalysisRunResponse_Raw) isGetAnalysisRunResponse_Result() {} + +type DeleteAnalysisTemplateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - AsResources bool `protobuf:"varint,3,opt,name=as_resources,json=asResources,proto3" json:"as_resources,omitempty"` - Format RawFormat `protobuf:"varint,4,opt,name=format,proto3,enum=akuity.io.kargo.service.v1alpha1.RawFormat" json:"format,omitempty"` + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` } -func (x *GetRoleRequest) Reset() { - *x = GetRoleRequest{} +func (x *DeleteAnalysisTemplateRequest) Reset() { + *x = DeleteAnalysisTemplateRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6103,13 +6151,13 @@ func (x *GetRoleRequest) Reset() { } } -func (x *GetRoleRequest) String() string { +func (x *DeleteAnalysisTemplateRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetRoleRequest) ProtoMessage() {} +func (*DeleteAnalysisTemplateRequest) ProtoMessage() {} -func (x *GetRoleRequest) ProtoReflect() protoreflect.Message { +func (x *DeleteAnalysisTemplateRequest) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[107] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6121,54 +6169,33 @@ func (x *GetRoleRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetRoleRequest.ProtoReflect.Descriptor instead. -func (*GetRoleRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use DeleteAnalysisTemplateRequest.ProtoReflect.Descriptor instead. +func (*DeleteAnalysisTemplateRequest) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{107} } -func (x *GetRoleRequest) GetProject() string { +func (x *DeleteAnalysisTemplateRequest) GetProject() string { if x != nil { return x.Project } return "" } -func (x *GetRoleRequest) GetName() string { +func (x *DeleteAnalysisTemplateRequest) GetName() string { if x != nil { return x.Name } return "" } -func (x *GetRoleRequest) GetAsResources() bool { - if x != nil { - return x.AsResources - } - return false -} - -func (x *GetRoleRequest) GetFormat() RawFormat { - if x != nil { - return x.Format - } - return RawFormat_RAW_FORMAT_UNSPECIFIED -} - -type GetRoleResponse struct { +type DeleteAnalysisTemplateResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - // Types that are assignable to Result: - // - // *GetRoleResponse_Role - // *GetRoleResponse_Resources - // *GetRoleResponse_Raw - Result isGetRoleResponse_Result `protobuf_oneof:"result"` } -func (x *GetRoleResponse) Reset() { - *x = GetRoleResponse{} +func (x *DeleteAnalysisTemplateResponse) Reset() { + *x = DeleteAnalysisTemplateResponse{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6176,13 +6203,13 @@ func (x *GetRoleResponse) Reset() { } } -func (x *GetRoleResponse) String() string { +func (x *DeleteAnalysisTemplateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetRoleResponse) ProtoMessage() {} +func (*DeleteAnalysisTemplateResponse) ProtoMessage() {} -func (x *GetRoleResponse) ProtoReflect() protoreflect.Message { +func (x *DeleteAnalysisTemplateResponse) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[108] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6194,87 +6221,83 @@ func (x *GetRoleResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetRoleResponse.ProtoReflect.Descriptor instead. -func (*GetRoleResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use DeleteAnalysisTemplateResponse.ProtoReflect.Descriptor instead. +func (*DeleteAnalysisTemplateResponse) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{108} } -func (m *GetRoleResponse) GetResult() isGetRoleResponse_Result { - if m != nil { - return m.Result - } - return nil -} +type ListProjectEventsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (x *GetRoleResponse) GetRole() *v1alpha12.Role { - if x, ok := x.GetResult().(*GetRoleResponse_Role); ok { - return x.Role - } - return nil + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` } -func (x *GetRoleResponse) GetResources() *v1alpha12.RoleResources { - if x, ok := x.GetResult().(*GetRoleResponse_Resources); ok { - return x.Resources +func (x *ListProjectEventsRequest) Reset() { + *x = ListProjectEventsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_v1alpha1_service_proto_msgTypes[109] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (x *GetRoleResponse) GetRaw() []byte { - if x, ok := x.GetResult().(*GetRoleResponse_Raw); ok { - return x.Raw - } - return nil +func (x *ListProjectEventsRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -type isGetRoleResponse_Result interface { - isGetRoleResponse_Result() -} +func (*ListProjectEventsRequest) ProtoMessage() {} -type GetRoleResponse_Role struct { - Role *v1alpha12.Role `protobuf:"bytes,1,opt,name=role,proto3,oneof"` +func (x *ListProjectEventsRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[109] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -type GetRoleResponse_Resources struct { - Resources *v1alpha12.RoleResources `protobuf:"bytes,2,opt,name=resources,proto3,oneof"` +// Deprecated: Use ListProjectEventsRequest.ProtoReflect.Descriptor instead. +func (*ListProjectEventsRequest) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{109} } -type GetRoleResponse_Raw struct { - Raw []byte `protobuf:"bytes,3,opt,name=raw,proto3,oneof"` +func (x *ListProjectEventsRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" } -func (*GetRoleResponse_Role) isGetRoleResponse_Result() {} - -func (*GetRoleResponse_Resources) isGetRoleResponse_Result() {} - -func (*GetRoleResponse_Raw) isGetRoleResponse_Result() {} - -type Claims struct { +type ListProjectEventsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Note: oneof and repeated do not work together - Claims []*v1alpha12.Claim `protobuf:"bytes,1,rep,name=claims,proto3" json:"claims,omitempty"` + Events []*v1.Event `protobuf:"bytes,1,rep,name=events,proto3" json:"events,omitempty"` } -func (x *Claims) Reset() { - *x = Claims{} +func (x *ListProjectEventsResponse) Reset() { + *x = ListProjectEventsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[109] + mi := &file_service_v1alpha1_service_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Claims) String() string { +func (x *ListProjectEventsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Claims) ProtoMessage() {} +func (*ListProjectEventsResponse) ProtoMessage() {} -func (x *Claims) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[109] +func (x *ListProjectEventsResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[110] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6285,49 +6308,43 @@ func (x *Claims) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Claims.ProtoReflect.Descriptor instead. -func (*Claims) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{109} +// Deprecated: Use ListProjectEventsResponse.ProtoReflect.Descriptor instead. +func (*ListProjectEventsResponse) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{110} } -func (x *Claims) GetClaims() []*v1alpha12.Claim { +func (x *ListProjectEventsResponse) GetEvents() []*v1.Event { if x != nil { - return x.Claims + return x.Events } return nil } -type GrantRequest struct { +type CreateRoleRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` - // Types that are assignable to Request: - // - // *GrantRequest_UserClaims - // *GrantRequest_ResourceDetails - Request isGrantRequest_Request `protobuf_oneof:"request"` + Role *v1alpha12.Role `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` } -func (x *GrantRequest) Reset() { - *x = GrantRequest{} +func (x *CreateRoleRequest) Reset() { + *x = CreateRoleRequest{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[110] + mi := &file_service_v1alpha1_service_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GrantRequest) String() string { +func (x *CreateRoleRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GrantRequest) ProtoMessage() {} +func (*CreateRoleRequest) ProtoMessage() {} -func (x *GrantRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[110] +func (x *CreateRoleRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[111] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6338,63 +6355,19 @@ func (x *GrantRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GrantRequest.ProtoReflect.Descriptor instead. -func (*GrantRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{110} +// Deprecated: Use CreateRoleRequest.ProtoReflect.Descriptor instead. +func (*CreateRoleRequest) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{111} } -func (x *GrantRequest) GetProject() string { +func (x *CreateRoleRequest) GetRole() *v1alpha12.Role { if x != nil { - return x.Project + return x.Role } - return "" + return nil } -func (x *GrantRequest) GetRole() string { - if x != nil { - return x.Role - } - return "" -} - -func (m *GrantRequest) GetRequest() isGrantRequest_Request { - if m != nil { - return m.Request - } - return nil -} - -func (x *GrantRequest) GetUserClaims() *Claims { - if x, ok := x.GetRequest().(*GrantRequest_UserClaims); ok { - return x.UserClaims - } - return nil -} - -func (x *GrantRequest) GetResourceDetails() *v1alpha12.ResourceDetails { - if x, ok := x.GetRequest().(*GrantRequest_ResourceDetails); ok { - return x.ResourceDetails - } - return nil -} - -type isGrantRequest_Request interface { - isGrantRequest_Request() -} - -type GrantRequest_UserClaims struct { - UserClaims *Claims `protobuf:"bytes,3,opt,name=user_claims,json=userClaims,proto3,oneof"` -} - -type GrantRequest_ResourceDetails struct { - ResourceDetails *v1alpha12.ResourceDetails `protobuf:"bytes,4,opt,name=resource_details,json=resourceDetails,proto3,oneof"` -} - -func (*GrantRequest_UserClaims) isGrantRequest_Request() {} - -func (*GrantRequest_ResourceDetails) isGrantRequest_Request() {} - -type GrantResponse struct { +type CreateRoleResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -6402,23 +6375,23 @@ type GrantResponse struct { Role *v1alpha12.Role `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` } -func (x *GrantResponse) Reset() { - *x = GrantResponse{} +func (x *CreateRoleResponse) Reset() { + *x = CreateRoleResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[111] + mi := &file_service_v1alpha1_service_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GrantResponse) String() string { +func (x *CreateRoleResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GrantResponse) ProtoMessage() {} +func (*CreateRoleResponse) ProtoMessage() {} -func (x *GrantResponse) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[111] +func (x *CreateRoleResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[112] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6429,44 +6402,44 @@ func (x *GrantResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GrantResponse.ProtoReflect.Descriptor instead. -func (*GrantResponse) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{111} +// Deprecated: Use CreateRoleResponse.ProtoReflect.Descriptor instead. +func (*CreateRoleResponse) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{112} } -func (x *GrantResponse) GetRole() *v1alpha12.Role { +func (x *CreateRoleResponse) GetRole() *v1alpha12.Role { if x != nil { return x.Role } return nil } -type ListRolesRequest struct { +type DeleteRoleRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - AsResources bool `protobuf:"varint,2,opt,name=as_resources,json=asResources,proto3" json:"as_resources,omitempty"` + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` } -func (x *ListRolesRequest) Reset() { - *x = ListRolesRequest{} +func (x *DeleteRoleRequest) Reset() { + *x = DeleteRoleRequest{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[112] + mi := &file_service_v1alpha1_service_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ListRolesRequest) String() string { +func (x *DeleteRoleRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListRolesRequest) ProtoMessage() {} +func (*DeleteRoleRequest) ProtoMessage() {} -func (x *ListRolesRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[112] +func (x *DeleteRoleRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[113] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6477,52 +6450,48 @@ func (x *ListRolesRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListRolesRequest.ProtoReflect.Descriptor instead. -func (*ListRolesRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{112} +// Deprecated: Use DeleteRoleRequest.ProtoReflect.Descriptor instead. +func (*DeleteRoleRequest) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{113} } -func (x *ListRolesRequest) GetProject() string { +func (x *DeleteRoleRequest) GetProject() string { if x != nil { return x.Project } return "" } -func (x *ListRolesRequest) GetAsResources() bool { +func (x *DeleteRoleRequest) GetName() string { if x != nil { - return x.AsResources + return x.Name } - return false + return "" } -type ListRolesResponse struct { +type DeleteRoleResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - // Note: oneof and repeated do not work together - Roles []*v1alpha12.Role `protobuf:"bytes,1,rep,name=roles,proto3" json:"roles,omitempty"` - Resources []*v1alpha12.RoleResources `protobuf:"bytes,2,rep,name=resources,proto3" json:"resources,omitempty"` } -func (x *ListRolesResponse) Reset() { - *x = ListRolesResponse{} +func (x *DeleteRoleResponse) Reset() { + *x = DeleteRoleResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[113] + mi := &file_service_v1alpha1_service_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ListRolesResponse) String() string { +func (x *DeleteRoleResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListRolesResponse) ProtoMessage() {} +func (*DeleteRoleResponse) ProtoMessage() {} -func (x *ListRolesResponse) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[113] +func (x *DeleteRoleResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[114] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6533,56 +6502,39 @@ func (x *ListRolesResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListRolesResponse.ProtoReflect.Descriptor instead. -func (*ListRolesResponse) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{113} -} - -func (x *ListRolesResponse) GetRoles() []*v1alpha12.Role { - if x != nil { - return x.Roles - } - return nil -} - -func (x *ListRolesResponse) GetResources() []*v1alpha12.RoleResources { - if x != nil { - return x.Resources - } - return nil +// Deprecated: Use DeleteRoleResponse.ProtoReflect.Descriptor instead. +func (*DeleteRoleResponse) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{114} } -type RevokeRequest struct { +type GetRoleRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` - // Types that are assignable to Request: - // - // *RevokeRequest_UserClaims - // *RevokeRequest_ResourceDetails - Request isRevokeRequest_Request `protobuf_oneof:"request"` + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + AsResources bool `protobuf:"varint,3,opt,name=as_resources,json=asResources,proto3" json:"as_resources,omitempty"` + Format RawFormat `protobuf:"varint,4,opt,name=format,proto3,enum=akuity.io.kargo.service.v1alpha1.RawFormat" json:"format,omitempty"` } -func (x *RevokeRequest) Reset() { - *x = RevokeRequest{} +func (x *GetRoleRequest) Reset() { + *x = GetRoleRequest{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[114] + mi := &file_service_v1alpha1_service_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *RevokeRequest) String() string { +func (x *GetRoleRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RevokeRequest) ProtoMessage() {} +func (*GetRoleRequest) ProtoMessage() {} -func (x *RevokeRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[114] +func (x *GetRoleRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[115] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6593,87 +6545,69 @@ func (x *RevokeRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RevokeRequest.ProtoReflect.Descriptor instead. -func (*RevokeRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{114} +// Deprecated: Use GetRoleRequest.ProtoReflect.Descriptor instead. +func (*GetRoleRequest) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{115} } -func (x *RevokeRequest) GetProject() string { +func (x *GetRoleRequest) GetProject() string { if x != nil { return x.Project } return "" } -func (x *RevokeRequest) GetRole() string { +func (x *GetRoleRequest) GetName() string { if x != nil { - return x.Role + return x.Name } return "" } -func (m *RevokeRequest) GetRequest() isRevokeRequest_Request { - if m != nil { - return m.Request - } - return nil -} - -func (x *RevokeRequest) GetUserClaims() *Claims { - if x, ok := x.GetRequest().(*RevokeRequest_UserClaims); ok { - return x.UserClaims +func (x *GetRoleRequest) GetAsResources() bool { + if x != nil { + return x.AsResources } - return nil + return false } -func (x *RevokeRequest) GetResourceDetails() *v1alpha12.ResourceDetails { - if x, ok := x.GetRequest().(*RevokeRequest_ResourceDetails); ok { - return x.ResourceDetails +func (x *GetRoleRequest) GetFormat() RawFormat { + if x != nil { + return x.Format } - return nil -} - -type isRevokeRequest_Request interface { - isRevokeRequest_Request() -} - -type RevokeRequest_UserClaims struct { - UserClaims *Claims `protobuf:"bytes,3,opt,name=user_claims,json=userClaims,proto3,oneof"` -} - -type RevokeRequest_ResourceDetails struct { - ResourceDetails *v1alpha12.ResourceDetails `protobuf:"bytes,4,opt,name=resource_details,json=resourceDetails,proto3,oneof"` + return RawFormat_RAW_FORMAT_UNSPECIFIED } -func (*RevokeRequest_UserClaims) isRevokeRequest_Request() {} - -func (*RevokeRequest_ResourceDetails) isRevokeRequest_Request() {} - -type RevokeResponse struct { +type GetRoleResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Role *v1alpha12.Role `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` + // Types that are assignable to Result: + // + // *GetRoleResponse_Role + // *GetRoleResponse_Resources + // *GetRoleResponse_Raw + Result isGetRoleResponse_Result `protobuf_oneof:"result"` } -func (x *RevokeResponse) Reset() { - *x = RevokeResponse{} +func (x *GetRoleResponse) Reset() { + *x = GetRoleResponse{} if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[115] + mi := &file_service_v1alpha1_service_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *RevokeResponse) String() string { +func (x *GetRoleResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RevokeResponse) ProtoMessage() {} +func (*GetRoleResponse) ProtoMessage() {} -func (x *RevokeResponse) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[115] +func (x *GetRoleResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[116] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6684,75 +6618,72 @@ func (x *RevokeResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RevokeResponse.ProtoReflect.Descriptor instead. -func (*RevokeResponse) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{115} +// Deprecated: Use GetRoleResponse.ProtoReflect.Descriptor instead. +func (*GetRoleResponse) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{116} } -func (x *RevokeResponse) GetRole() *v1alpha12.Role { - if x != nil { +func (m *GetRoleResponse) GetResult() isGetRoleResponse_Result { + if m != nil { + return m.Result + } + return nil +} + +func (x *GetRoleResponse) GetRole() *v1alpha12.Role { + if x, ok := x.GetResult().(*GetRoleResponse_Role); ok { return x.Role } return nil } -type UpdateRoleRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Role *v1alpha12.Role `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` +func (x *GetRoleResponse) GetResources() *v1alpha12.RoleResources { + if x, ok := x.GetResult().(*GetRoleResponse_Resources); ok { + return x.Resources + } + return nil } -func (x *UpdateRoleRequest) Reset() { - *x = UpdateRoleRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_service_v1alpha1_service_proto_msgTypes[116] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *GetRoleResponse) GetRaw() []byte { + if x, ok := x.GetResult().(*GetRoleResponse_Raw); ok { + return x.Raw } + return nil } -func (x *UpdateRoleRequest) String() string { - return protoimpl.X.MessageStringOf(x) +type isGetRoleResponse_Result interface { + isGetRoleResponse_Result() } -func (*UpdateRoleRequest) ProtoMessage() {} - -func (x *UpdateRoleRequest) ProtoReflect() protoreflect.Message { - mi := &file_service_v1alpha1_service_proto_msgTypes[116] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) +type GetRoleResponse_Role struct { + Role *v1alpha12.Role `protobuf:"bytes,1,opt,name=role,proto3,oneof"` } -// Deprecated: Use UpdateRoleRequest.ProtoReflect.Descriptor instead. -func (*UpdateRoleRequest) Descriptor() ([]byte, []int) { - return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{116} +type GetRoleResponse_Resources struct { + Resources *v1alpha12.RoleResources `protobuf:"bytes,2,opt,name=resources,proto3,oneof"` } -func (x *UpdateRoleRequest) GetRole() *v1alpha12.Role { - if x != nil { - return x.Role - } - return nil +type GetRoleResponse_Raw struct { + Raw []byte `protobuf:"bytes,3,opt,name=raw,proto3,oneof"` } -type UpdateRoleResponse struct { +func (*GetRoleResponse_Role) isGetRoleResponse_Result() {} + +func (*GetRoleResponse_Resources) isGetRoleResponse_Result() {} + +func (*GetRoleResponse_Raw) isGetRoleResponse_Result() {} + +type Claims struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Role *v1alpha12.Role `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` + // Note: oneof and repeated do not work together + Claims []*v1alpha12.Claim `protobuf:"bytes,1,rep,name=claims,proto3" json:"claims,omitempty"` } -func (x *UpdateRoleResponse) Reset() { - *x = UpdateRoleResponse{} +func (x *Claims) Reset() { + *x = Claims{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[117] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6760,13 +6691,13 @@ func (x *UpdateRoleResponse) Reset() { } } -func (x *UpdateRoleResponse) String() string { +func (x *Claims) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateRoleResponse) ProtoMessage() {} +func (*Claims) ProtoMessage() {} -func (x *UpdateRoleResponse) ProtoReflect() protoreflect.Message { +func (x *Claims) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[117] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6778,28 +6709,34 @@ func (x *UpdateRoleResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateRoleResponse.ProtoReflect.Descriptor instead. -func (*UpdateRoleResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use Claims.ProtoReflect.Descriptor instead. +func (*Claims) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{117} } -func (x *UpdateRoleResponse) GetRole() *v1alpha12.Role { +func (x *Claims) GetClaims() []*v1alpha12.Claim { if x != nil { - return x.Role + return x.Claims } return nil } -type ListAnalysisTemplateConfigMapsRequest struct { +type GrantRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` + // Types that are assignable to Request: + // + // *GrantRequest_UserClaims + // *GrantRequest_ResourceDetails + Request isGrantRequest_Request `protobuf_oneof:"request"` } -func (x *ListAnalysisTemplateConfigMapsRequest) Reset() { - *x = ListAnalysisTemplateConfigMapsRequest{} +func (x *GrantRequest) Reset() { + *x = GrantRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[118] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6807,13 +6744,13 @@ func (x *ListAnalysisTemplateConfigMapsRequest) Reset() { } } -func (x *ListAnalysisTemplateConfigMapsRequest) String() string { +func (x *GrantRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListAnalysisTemplateConfigMapsRequest) ProtoMessage() {} +func (*GrantRequest) ProtoMessage() {} -func (x *ListAnalysisTemplateConfigMapsRequest) ProtoReflect() protoreflect.Message { +func (x *GrantRequest) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[118] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6825,28 +6762,72 @@ func (x *ListAnalysisTemplateConfigMapsRequest) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use ListAnalysisTemplateConfigMapsRequest.ProtoReflect.Descriptor instead. -func (*ListAnalysisTemplateConfigMapsRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use GrantRequest.ProtoReflect.Descriptor instead. +func (*GrantRequest) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{118} } -func (x *ListAnalysisTemplateConfigMapsRequest) GetProject() string { +func (x *GrantRequest) GetProject() string { if x != nil { return x.Project } return "" } -type ListAnalysisTemplateConfigMapsResponse struct { +func (x *GrantRequest) GetRole() string { + if x != nil { + return x.Role + } + return "" +} + +func (m *GrantRequest) GetRequest() isGrantRequest_Request { + if m != nil { + return m.Request + } + return nil +} + +func (x *GrantRequest) GetUserClaims() *Claims { + if x, ok := x.GetRequest().(*GrantRequest_UserClaims); ok { + return x.UserClaims + } + return nil +} + +func (x *GrantRequest) GetResourceDetails() *v1alpha12.ResourceDetails { + if x, ok := x.GetRequest().(*GrantRequest_ResourceDetails); ok { + return x.ResourceDetails + } + return nil +} + +type isGrantRequest_Request interface { + isGrantRequest_Request() +} + +type GrantRequest_UserClaims struct { + UserClaims *Claims `protobuf:"bytes,3,opt,name=user_claims,json=userClaims,proto3,oneof"` +} + +type GrantRequest_ResourceDetails struct { + ResourceDetails *v1alpha12.ResourceDetails `protobuf:"bytes,4,opt,name=resource_details,json=resourceDetails,proto3,oneof"` +} + +func (*GrantRequest_UserClaims) isGrantRequest_Request() {} + +func (*GrantRequest_ResourceDetails) isGrantRequest_Request() {} + +type GrantResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ConfigMaps []*v1.ConfigMap `protobuf:"bytes,1,rep,name=config_maps,json=configMaps,proto3" json:"config_maps,omitempty"` + Role *v1alpha12.Role `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` } -func (x *ListAnalysisTemplateConfigMapsResponse) Reset() { - *x = ListAnalysisTemplateConfigMapsResponse{} +func (x *GrantResponse) Reset() { + *x = GrantResponse{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[119] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6854,13 +6835,13 @@ func (x *ListAnalysisTemplateConfigMapsResponse) Reset() { } } -func (x *ListAnalysisTemplateConfigMapsResponse) String() string { +func (x *GrantResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListAnalysisTemplateConfigMapsResponse) ProtoMessage() {} +func (*GrantResponse) ProtoMessage() {} -func (x *ListAnalysisTemplateConfigMapsResponse) ProtoReflect() protoreflect.Message { +func (x *GrantResponse) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[119] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6872,30 +6853,29 @@ func (x *ListAnalysisTemplateConfigMapsResponse) ProtoReflect() protoreflect.Mes return mi.MessageOf(x) } -// Deprecated: Use ListAnalysisTemplateConfigMapsResponse.ProtoReflect.Descriptor instead. -func (*ListAnalysisTemplateConfigMapsResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use GrantResponse.ProtoReflect.Descriptor instead. +func (*GrantResponse) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{119} } -func (x *ListAnalysisTemplateConfigMapsResponse) GetConfigMaps() []*v1.ConfigMap { +func (x *GrantResponse) GetRole() *v1alpha12.Role { if x != nil { - return x.ConfigMaps + return x.Role } return nil } -type GetAnalysisTemplateConfigMapRequest struct { +type ListRolesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Format RawFormat `protobuf:"varint,3,opt,name=format,proto3,enum=akuity.io.kargo.service.v1alpha1.RawFormat" json:"format,omitempty"` + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + AsResources bool `protobuf:"varint,2,opt,name=as_resources,json=asResources,proto3" json:"as_resources,omitempty"` } -func (x *GetAnalysisTemplateConfigMapRequest) Reset() { - *x = GetAnalysisTemplateConfigMapRequest{} +func (x *ListRolesRequest) Reset() { + *x = ListRolesRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[120] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6903,13 +6883,13 @@ func (x *GetAnalysisTemplateConfigMapRequest) Reset() { } } -func (x *GetAnalysisTemplateConfigMapRequest) String() string { +func (x *ListRolesRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetAnalysisTemplateConfigMapRequest) ProtoMessage() {} +func (*ListRolesRequest) ProtoMessage() {} -func (x *GetAnalysisTemplateConfigMapRequest) ProtoReflect() protoreflect.Message { +func (x *ListRolesRequest) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[120] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6921,46 +6901,37 @@ func (x *GetAnalysisTemplateConfigMapRequest) ProtoReflect() protoreflect.Messag return mi.MessageOf(x) } -// Deprecated: Use GetAnalysisTemplateConfigMapRequest.ProtoReflect.Descriptor instead. -func (*GetAnalysisTemplateConfigMapRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ListRolesRequest.ProtoReflect.Descriptor instead. +func (*ListRolesRequest) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{120} } -func (x *GetAnalysisTemplateConfigMapRequest) GetProject() string { +func (x *ListRolesRequest) GetProject() string { if x != nil { return x.Project } return "" } -func (x *GetAnalysisTemplateConfigMapRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *GetAnalysisTemplateConfigMapRequest) GetFormat() RawFormat { +func (x *ListRolesRequest) GetAsResources() bool { if x != nil { - return x.Format + return x.AsResources } - return RawFormat_RAW_FORMAT_UNSPECIFIED + return false } -type GetAnalysisTemplateConfigMapResponse struct { +type ListRolesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Types that are assignable to Result: - // - // *GetAnalysisTemplateConfigMapResponse_ConfigMap - // *GetAnalysisTemplateConfigMapResponse_Raw - Result isGetAnalysisTemplateConfigMapResponse_Result `protobuf_oneof:"result"` + // Note: oneof and repeated do not work together + Roles []*v1alpha12.Role `protobuf:"bytes,1,rep,name=roles,proto3" json:"roles,omitempty"` + Resources []*v1alpha12.RoleResources `protobuf:"bytes,2,rep,name=resources,proto3" json:"resources,omitempty"` } -func (x *GetAnalysisTemplateConfigMapResponse) Reset() { - *x = GetAnalysisTemplateConfigMapResponse{} +func (x *ListRolesResponse) Reset() { + *x = ListRolesResponse{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6968,13 +6939,13 @@ func (x *GetAnalysisTemplateConfigMapResponse) Reset() { } } -func (x *GetAnalysisTemplateConfigMapResponse) String() string { +func (x *ListRolesResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetAnalysisTemplateConfigMapResponse) ProtoMessage() {} +func (*ListRolesResponse) ProtoMessage() {} -func (x *GetAnalysisTemplateConfigMapResponse) ProtoReflect() protoreflect.Message { +func (x *ListRolesResponse) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[121] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6986,59 +6957,41 @@ func (x *GetAnalysisTemplateConfigMapResponse) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use GetAnalysisTemplateConfigMapResponse.ProtoReflect.Descriptor instead. -func (*GetAnalysisTemplateConfigMapResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use ListRolesResponse.ProtoReflect.Descriptor instead. +func (*ListRolesResponse) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{121} } -func (m *GetAnalysisTemplateConfigMapResponse) GetResult() isGetAnalysisTemplateConfigMapResponse_Result { - if m != nil { - return m.Result - } - return nil -} - -func (x *GetAnalysisTemplateConfigMapResponse) GetConfigMap() *v1.ConfigMap { - if x, ok := x.GetResult().(*GetAnalysisTemplateConfigMapResponse_ConfigMap); ok { - return x.ConfigMap +func (x *ListRolesResponse) GetRoles() []*v1alpha12.Role { + if x != nil { + return x.Roles } return nil } -func (x *GetAnalysisTemplateConfigMapResponse) GetRaw() []byte { - if x, ok := x.GetResult().(*GetAnalysisTemplateConfigMapResponse_Raw); ok { - return x.Raw +func (x *ListRolesResponse) GetResources() []*v1alpha12.RoleResources { + if x != nil { + return x.Resources } return nil } -type isGetAnalysisTemplateConfigMapResponse_Result interface { - isGetAnalysisTemplateConfigMapResponse_Result() -} - -type GetAnalysisTemplateConfigMapResponse_ConfigMap struct { - ConfigMap *v1.ConfigMap `protobuf:"bytes,1,opt,name=config_map,json=configMap,proto3,oneof"` -} - -type GetAnalysisTemplateConfigMapResponse_Raw struct { - Raw []byte `protobuf:"bytes,2,opt,name=raw,proto3,oneof"` -} - -func (*GetAnalysisTemplateConfigMapResponse_ConfigMap) isGetAnalysisTemplateConfigMapResponse_Result() { -} - -func (*GetAnalysisTemplateConfigMapResponse_Raw) isGetAnalysisTemplateConfigMapResponse_Result() {} - -type ListAnalysisTemplateSecretsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type RevokeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` + // Types that are assignable to Request: + // + // *RevokeRequest_UserClaims + // *RevokeRequest_ResourceDetails + Request isRevokeRequest_Request `protobuf_oneof:"request"` } -func (x *ListAnalysisTemplateSecretsRequest) Reset() { - *x = ListAnalysisTemplateSecretsRequest{} +func (x *RevokeRequest) Reset() { + *x = RevokeRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[122] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7046,13 +6999,13 @@ func (x *ListAnalysisTemplateSecretsRequest) Reset() { } } -func (x *ListAnalysisTemplateSecretsRequest) String() string { +func (x *RevokeRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListAnalysisTemplateSecretsRequest) ProtoMessage() {} +func (*RevokeRequest) ProtoMessage() {} -func (x *ListAnalysisTemplateSecretsRequest) ProtoReflect() protoreflect.Message { +func (x *RevokeRequest) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[122] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7064,28 +7017,72 @@ func (x *ListAnalysisTemplateSecretsRequest) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use ListAnalysisTemplateSecretsRequest.ProtoReflect.Descriptor instead. -func (*ListAnalysisTemplateSecretsRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use RevokeRequest.ProtoReflect.Descriptor instead. +func (*RevokeRequest) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{122} } -func (x *ListAnalysisTemplateSecretsRequest) GetProject() string { +func (x *RevokeRequest) GetProject() string { if x != nil { return x.Project } return "" } -type ListAnalysisTemplateSecretsResponse struct { +func (x *RevokeRequest) GetRole() string { + if x != nil { + return x.Role + } + return "" +} + +func (m *RevokeRequest) GetRequest() isRevokeRequest_Request { + if m != nil { + return m.Request + } + return nil +} + +func (x *RevokeRequest) GetUserClaims() *Claims { + if x, ok := x.GetRequest().(*RevokeRequest_UserClaims); ok { + return x.UserClaims + } + return nil +} + +func (x *RevokeRequest) GetResourceDetails() *v1alpha12.ResourceDetails { + if x, ok := x.GetRequest().(*RevokeRequest_ResourceDetails); ok { + return x.ResourceDetails + } + return nil +} + +type isRevokeRequest_Request interface { + isRevokeRequest_Request() +} + +type RevokeRequest_UserClaims struct { + UserClaims *Claims `protobuf:"bytes,3,opt,name=user_claims,json=userClaims,proto3,oneof"` +} + +type RevokeRequest_ResourceDetails struct { + ResourceDetails *v1alpha12.ResourceDetails `protobuf:"bytes,4,opt,name=resource_details,json=resourceDetails,proto3,oneof"` +} + +func (*RevokeRequest_UserClaims) isRevokeRequest_Request() {} + +func (*RevokeRequest_ResourceDetails) isRevokeRequest_Request() {} + +type RevokeResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Secrets []*v1.Secret `protobuf:"bytes,1,rep,name=secrets,proto3" json:"secrets,omitempty"` + Role *v1alpha12.Role `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` } -func (x *ListAnalysisTemplateSecretsResponse) Reset() { - *x = ListAnalysisTemplateSecretsResponse{} +func (x *RevokeResponse) Reset() { + *x = RevokeResponse{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[123] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7093,13 +7090,13 @@ func (x *ListAnalysisTemplateSecretsResponse) Reset() { } } -func (x *ListAnalysisTemplateSecretsResponse) String() string { +func (x *RevokeResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListAnalysisTemplateSecretsResponse) ProtoMessage() {} +func (*RevokeResponse) ProtoMessage() {} -func (x *ListAnalysisTemplateSecretsResponse) ProtoReflect() protoreflect.Message { +func (x *RevokeResponse) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[123] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7111,30 +7108,28 @@ func (x *ListAnalysisTemplateSecretsResponse) ProtoReflect() protoreflect.Messag return mi.MessageOf(x) } -// Deprecated: Use ListAnalysisTemplateSecretsResponse.ProtoReflect.Descriptor instead. -func (*ListAnalysisTemplateSecretsResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use RevokeResponse.ProtoReflect.Descriptor instead. +func (*RevokeResponse) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{123} } -func (x *ListAnalysisTemplateSecretsResponse) GetSecrets() []*v1.Secret { +func (x *RevokeResponse) GetRole() *v1alpha12.Role { if x != nil { - return x.Secrets + return x.Role } return nil } -type GetAnalysisTemplateSecretRequest struct { +type UpdateRoleRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Format RawFormat `protobuf:"varint,3,opt,name=format,proto3,enum=akuity.io.kargo.service.v1alpha1.RawFormat" json:"format,omitempty"` + Role *v1alpha12.Role `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` } -func (x *GetAnalysisTemplateSecretRequest) Reset() { - *x = GetAnalysisTemplateSecretRequest{} +func (x *UpdateRoleRequest) Reset() { + *x = UpdateRoleRequest{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[124] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7142,13 +7137,13 @@ func (x *GetAnalysisTemplateSecretRequest) Reset() { } } -func (x *GetAnalysisTemplateSecretRequest) String() string { +func (x *UpdateRoleRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetAnalysisTemplateSecretRequest) ProtoMessage() {} +func (*UpdateRoleRequest) ProtoMessage() {} -func (x *GetAnalysisTemplateSecretRequest) ProtoReflect() protoreflect.Message { +func (x *UpdateRoleRequest) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[124] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7160,46 +7155,28 @@ func (x *GetAnalysisTemplateSecretRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetAnalysisTemplateSecretRequest.ProtoReflect.Descriptor instead. -func (*GetAnalysisTemplateSecretRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use UpdateRoleRequest.ProtoReflect.Descriptor instead. +func (*UpdateRoleRequest) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{124} } -func (x *GetAnalysisTemplateSecretRequest) GetProject() string { - if x != nil { - return x.Project - } - return "" -} - -func (x *GetAnalysisTemplateSecretRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *GetAnalysisTemplateSecretRequest) GetFormat() RawFormat { +func (x *UpdateRoleRequest) GetRole() *v1alpha12.Role { if x != nil { - return x.Format + return x.Role } - return RawFormat_RAW_FORMAT_UNSPECIFIED + return nil } -type GetAnalysisTemplateSecretResponse struct { +type UpdateRoleResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Types that are assignable to Result: - // - // *GetAnalysisTemplateSecretResponse_Secret - // *GetAnalysisTemplateSecretResponse_Raw - Result isGetAnalysisTemplateSecretResponse_Result `protobuf_oneof:"result"` + Role *v1alpha12.Role `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` } -func (x *GetAnalysisTemplateSecretResponse) Reset() { - *x = GetAnalysisTemplateSecretResponse{} +func (x *UpdateRoleResponse) Reset() { + *x = UpdateRoleResponse{} if protoimpl.UnsafeEnabled { mi := &file_service_v1alpha1_service_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7207,13 +7184,13 @@ func (x *GetAnalysisTemplateSecretResponse) Reset() { } } -func (x *GetAnalysisTemplateSecretResponse) String() string { +func (x *UpdateRoleResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetAnalysisTemplateSecretResponse) ProtoMessage() {} +func (*UpdateRoleResponse) ProtoMessage() {} -func (x *GetAnalysisTemplateSecretResponse) ProtoReflect() protoreflect.Message { +func (x *UpdateRoleResponse) ProtoReflect() protoreflect.Message { mi := &file_service_v1alpha1_service_proto_msgTypes[125] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -7225,64 +7202,511 @@ func (x *GetAnalysisTemplateSecretResponse) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use GetAnalysisTemplateSecretResponse.ProtoReflect.Descriptor instead. -func (*GetAnalysisTemplateSecretResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use UpdateRoleResponse.ProtoReflect.Descriptor instead. +func (*UpdateRoleResponse) Descriptor() ([]byte, []int) { return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{125} } -func (m *GetAnalysisTemplateSecretResponse) GetResult() isGetAnalysisTemplateSecretResponse_Result { - if m != nil { - return m.Result +func (x *UpdateRoleResponse) GetRole() *v1alpha12.Role { + if x != nil { + return x.Role } return nil } -func (x *GetAnalysisTemplateSecretResponse) GetSecret() *v1.Secret { - if x, ok := x.GetResult().(*GetAnalysisTemplateSecretResponse_Secret); ok { - return x.Secret +type ListAnalysisTemplateConfigMapsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` +} + +func (x *ListAnalysisTemplateConfigMapsRequest) Reset() { + *x = ListAnalysisTemplateConfigMapsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_v1alpha1_service_proto_msgTypes[126] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (x *GetAnalysisTemplateSecretResponse) GetRaw() []byte { - if x, ok := x.GetResult().(*GetAnalysisTemplateSecretResponse_Raw); ok { - return x.Raw +func (x *ListAnalysisTemplateConfigMapsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListAnalysisTemplateConfigMapsRequest) ProtoMessage() {} + +func (x *ListAnalysisTemplateConfigMapsRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[126] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -type isGetAnalysisTemplateSecretResponse_Result interface { - isGetAnalysisTemplateSecretResponse_Result() +// Deprecated: Use ListAnalysisTemplateConfigMapsRequest.ProtoReflect.Descriptor instead. +func (*ListAnalysisTemplateConfigMapsRequest) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{126} } -type GetAnalysisTemplateSecretResponse_Secret struct { - Secret *v1.Secret `protobuf:"bytes,1,opt,name=secret,proto3,oneof"` +func (x *ListAnalysisTemplateConfigMapsRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" } -type GetAnalysisTemplateSecretResponse_Raw struct { - Raw []byte `protobuf:"bytes,2,opt,name=raw,proto3,oneof"` +type ListAnalysisTemplateConfigMapsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ConfigMaps []*v1.ConfigMap `protobuf:"bytes,1,rep,name=config_maps,json=configMaps,proto3" json:"config_maps,omitempty"` } -func (*GetAnalysisTemplateSecretResponse_Secret) isGetAnalysisTemplateSecretResponse_Result() {} +func (x *ListAnalysisTemplateConfigMapsResponse) Reset() { + *x = ListAnalysisTemplateConfigMapsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_service_v1alpha1_service_proto_msgTypes[127] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} -func (*GetAnalysisTemplateSecretResponse_Raw) isGetAnalysisTemplateSecretResponse_Result() {} +func (x *ListAnalysisTemplateConfigMapsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} -var File_service_v1alpha1_service_proto protoreflect.FileDescriptor +func (*ListAnalysisTemplateConfigMapsResponse) ProtoMessage() {} -var file_service_v1alpha1_service_proto_rawDesc = []byte{ - 0x0a, 0x1e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x20, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, - 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x22, 0x6b, - 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, - 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x25, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x72, 0x62, 0x61, 0x63, 0x2f, 0x76, +func (x *ListAnalysisTemplateConfigMapsResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[127] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListAnalysisTemplateConfigMapsResponse.ProtoReflect.Descriptor instead. +func (*ListAnalysisTemplateConfigMapsResponse) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{127} +} + +func (x *ListAnalysisTemplateConfigMapsResponse) GetConfigMaps() []*v1.ConfigMap { + if x != nil { + return x.ConfigMaps + } + return nil +} + +type GetAnalysisTemplateConfigMapRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Format RawFormat `protobuf:"varint,3,opt,name=format,proto3,enum=akuity.io.kargo.service.v1alpha1.RawFormat" json:"format,omitempty"` +} + +func (x *GetAnalysisTemplateConfigMapRequest) Reset() { + *x = GetAnalysisTemplateConfigMapRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_v1alpha1_service_proto_msgTypes[128] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAnalysisTemplateConfigMapRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAnalysisTemplateConfigMapRequest) ProtoMessage() {} + +func (x *GetAnalysisTemplateConfigMapRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[128] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetAnalysisTemplateConfigMapRequest.ProtoReflect.Descriptor instead. +func (*GetAnalysisTemplateConfigMapRequest) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{128} +} + +func (x *GetAnalysisTemplateConfigMapRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *GetAnalysisTemplateConfigMapRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GetAnalysisTemplateConfigMapRequest) GetFormat() RawFormat { + if x != nil { + return x.Format + } + return RawFormat_RAW_FORMAT_UNSPECIFIED +} + +type GetAnalysisTemplateConfigMapResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Result: + // + // *GetAnalysisTemplateConfigMapResponse_ConfigMap + // *GetAnalysisTemplateConfigMapResponse_Raw + Result isGetAnalysisTemplateConfigMapResponse_Result `protobuf_oneof:"result"` +} + +func (x *GetAnalysisTemplateConfigMapResponse) Reset() { + *x = GetAnalysisTemplateConfigMapResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_service_v1alpha1_service_proto_msgTypes[129] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAnalysisTemplateConfigMapResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAnalysisTemplateConfigMapResponse) ProtoMessage() {} + +func (x *GetAnalysisTemplateConfigMapResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[129] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetAnalysisTemplateConfigMapResponse.ProtoReflect.Descriptor instead. +func (*GetAnalysisTemplateConfigMapResponse) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{129} +} + +func (m *GetAnalysisTemplateConfigMapResponse) GetResult() isGetAnalysisTemplateConfigMapResponse_Result { + if m != nil { + return m.Result + } + return nil +} + +func (x *GetAnalysisTemplateConfigMapResponse) GetConfigMap() *v1.ConfigMap { + if x, ok := x.GetResult().(*GetAnalysisTemplateConfigMapResponse_ConfigMap); ok { + return x.ConfigMap + } + return nil +} + +func (x *GetAnalysisTemplateConfigMapResponse) GetRaw() []byte { + if x, ok := x.GetResult().(*GetAnalysisTemplateConfigMapResponse_Raw); ok { + return x.Raw + } + return nil +} + +type isGetAnalysisTemplateConfigMapResponse_Result interface { + isGetAnalysisTemplateConfigMapResponse_Result() +} + +type GetAnalysisTemplateConfigMapResponse_ConfigMap struct { + ConfigMap *v1.ConfigMap `protobuf:"bytes,1,opt,name=config_map,json=configMap,proto3,oneof"` +} + +type GetAnalysisTemplateConfigMapResponse_Raw struct { + Raw []byte `protobuf:"bytes,2,opt,name=raw,proto3,oneof"` +} + +func (*GetAnalysisTemplateConfigMapResponse_ConfigMap) isGetAnalysisTemplateConfigMapResponse_Result() { +} + +func (*GetAnalysisTemplateConfigMapResponse_Raw) isGetAnalysisTemplateConfigMapResponse_Result() {} + +type ListAnalysisTemplateSecretsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` +} + +func (x *ListAnalysisTemplateSecretsRequest) Reset() { + *x = ListAnalysisTemplateSecretsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_v1alpha1_service_proto_msgTypes[130] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListAnalysisTemplateSecretsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListAnalysisTemplateSecretsRequest) ProtoMessage() {} + +func (x *ListAnalysisTemplateSecretsRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[130] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListAnalysisTemplateSecretsRequest.ProtoReflect.Descriptor instead. +func (*ListAnalysisTemplateSecretsRequest) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{130} +} + +func (x *ListAnalysisTemplateSecretsRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +type ListAnalysisTemplateSecretsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Secrets []*v1.Secret `protobuf:"bytes,1,rep,name=secrets,proto3" json:"secrets,omitempty"` +} + +func (x *ListAnalysisTemplateSecretsResponse) Reset() { + *x = ListAnalysisTemplateSecretsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_service_v1alpha1_service_proto_msgTypes[131] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListAnalysisTemplateSecretsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListAnalysisTemplateSecretsResponse) ProtoMessage() {} + +func (x *ListAnalysisTemplateSecretsResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[131] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListAnalysisTemplateSecretsResponse.ProtoReflect.Descriptor instead. +func (*ListAnalysisTemplateSecretsResponse) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{131} +} + +func (x *ListAnalysisTemplateSecretsResponse) GetSecrets() []*v1.Secret { + if x != nil { + return x.Secrets + } + return nil +} + +type GetAnalysisTemplateSecretRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Format RawFormat `protobuf:"varint,3,opt,name=format,proto3,enum=akuity.io.kargo.service.v1alpha1.RawFormat" json:"format,omitempty"` +} + +func (x *GetAnalysisTemplateSecretRequest) Reset() { + *x = GetAnalysisTemplateSecretRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_service_v1alpha1_service_proto_msgTypes[132] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAnalysisTemplateSecretRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAnalysisTemplateSecretRequest) ProtoMessage() {} + +func (x *GetAnalysisTemplateSecretRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[132] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetAnalysisTemplateSecretRequest.ProtoReflect.Descriptor instead. +func (*GetAnalysisTemplateSecretRequest) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{132} +} + +func (x *GetAnalysisTemplateSecretRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *GetAnalysisTemplateSecretRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GetAnalysisTemplateSecretRequest) GetFormat() RawFormat { + if x != nil { + return x.Format + } + return RawFormat_RAW_FORMAT_UNSPECIFIED +} + +type GetAnalysisTemplateSecretResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Result: + // + // *GetAnalysisTemplateSecretResponse_Secret + // *GetAnalysisTemplateSecretResponse_Raw + Result isGetAnalysisTemplateSecretResponse_Result `protobuf_oneof:"result"` +} + +func (x *GetAnalysisTemplateSecretResponse) Reset() { + *x = GetAnalysisTemplateSecretResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_service_v1alpha1_service_proto_msgTypes[133] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAnalysisTemplateSecretResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAnalysisTemplateSecretResponse) ProtoMessage() {} + +func (x *GetAnalysisTemplateSecretResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_v1alpha1_service_proto_msgTypes[133] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetAnalysisTemplateSecretResponse.ProtoReflect.Descriptor instead. +func (*GetAnalysisTemplateSecretResponse) Descriptor() ([]byte, []int) { + return file_service_v1alpha1_service_proto_rawDescGZIP(), []int{133} +} + +func (m *GetAnalysisTemplateSecretResponse) GetResult() isGetAnalysisTemplateSecretResponse_Result { + if m != nil { + return m.Result + } + return nil +} + +func (x *GetAnalysisTemplateSecretResponse) GetSecret() *v1.Secret { + if x, ok := x.GetResult().(*GetAnalysisTemplateSecretResponse_Secret); ok { + return x.Secret + } + return nil +} + +func (x *GetAnalysisTemplateSecretResponse) GetRaw() []byte { + if x, ok := x.GetResult().(*GetAnalysisTemplateSecretResponse_Raw); ok { + return x.Raw + } + return nil +} + +type isGetAnalysisTemplateSecretResponse_Result interface { + isGetAnalysisTemplateSecretResponse_Result() +} + +type GetAnalysisTemplateSecretResponse_Secret struct { + Secret *v1.Secret `protobuf:"bytes,1,opt,name=secret,proto3,oneof"` +} + +type GetAnalysisTemplateSecretResponse_Raw struct { + Raw []byte `protobuf:"bytes,2,opt,name=raw,proto3,oneof"` +} + +func (*GetAnalysisTemplateSecretResponse_Secret) isGetAnalysisTemplateSecretResponse_Result() {} + +func (*GetAnalysisTemplateSecretResponse_Raw) isGetAnalysisTemplateSecretResponse_Result() {} + +var File_service_v1alpha1_service_proto protoreflect.FileDescriptor + +var file_service_v1alpha1_service_proto_rawDesc = []byte{ + 0x0a, 0x1e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x20, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x22, 0x6b, + 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, + 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x25, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x72, 0x62, 0x61, 0x63, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb8, 0x01, 0x0a, 0x11, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4a, 0x0a, @@ -7811,281 +8235,367 @@ var file_service_v1alpha1_service_proto_rawDesc = []byte{ 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x52, 0x09, 0x77, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, - 0x22, 0xfc, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, + 0x22, 0x35, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x12, 0x29, 0x0a, 0x11, - 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x5f, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x67, 0x65, - 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, - 0x49, 0x73, 0x52, 0x65, 0x67, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, - 0x59, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x52, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x81, 0x02, 0x0a, 0x1a, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, + 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x51, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, + 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x22, 0x81, 0x02, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x5a, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x46, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x61, + 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x37, 0x0a, + 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x51, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x4a, 0x0a, 0x1a, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1d, 0x0a, 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, + 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, + 0x12, 0x29, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x5f, 0x69, 0x73, 0x5f, + 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x72, 0x65, 0x70, + 0x6f, 0x55, 0x52, 0x4c, 0x49, 0x73, 0x52, 0x65, 0x67, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x75, + 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, + 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x22, 0x59, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3c, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x48, + 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1b, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, + 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, + 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x52, 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x22, 0x76, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x0b, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x48, 0x0a, 0x18, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1b, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x77, - 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x76, - 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x32, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x57, 0x0a, 0x17, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6b, 0x38, 0x73, - 0x2e, 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x73, 0x22, 0xfc, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x12, - 0x29, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x5f, 0x69, 0x73, 0x5f, 0x72, - 0x65, 0x67, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x6f, - 0x55, 0x52, 0x4c, 0x49, 0x73, 0x52, 0x65, 0x67, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, - 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, - 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x22, 0x59, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3c, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x38, 0x0a, - 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0xa4, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x12, 0x61, 0x6e, - 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x53, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, - 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x11, 0x61, 0x6e, 0x61, - 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x22, 0x8f, - 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, - 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x22, 0xc0, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x82, 0x01, 0x0a, 0x11, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x5f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x53, 0x2e, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, - 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, - 0x75, 0x74, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x48, 0x00, 0x52, 0x10, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x22, 0x8e, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, - 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x48, 0x00, 0x52, + 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x12, 0x0a, 0x03, + 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x77, + 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x32, 0x0a, 0x16, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x57, + 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x63, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x22, 0xfc, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, + 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, + 0x55, 0x52, 0x4c, 0x12, 0x29, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x5f, + 0x69, 0x73, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, + 0x72, 0x65, 0x70, 0x6f, 0x55, 0x52, 0x4c, 0x49, 0x73, 0x52, 0x65, 0x67, 0x65, 0x78, 0x12, 0x1a, + 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x59, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, + 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x73, 0x22, 0x38, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, + 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0xa4, 0x01, 0x0a, 0x1d, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, + 0x0a, 0x12, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x53, 0x2e, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, + 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, + 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x11, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x22, 0x8f, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, + 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x22, 0xab, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, - 0x79, 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x73, 0x0a, 0x0c, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x5f, 0x72, 0x75, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, - 0x69, 0x73, 0x52, 0x75, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, - 0x73, 0x52, 0x75, 0x6e, 0x12, 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x22, 0x4d, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, - 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x20, 0x0a, 0x1e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, - 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x34, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x4e, 0x0a, 0x19, 0x4c, 0x69, 0x73, - 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x58, 0x0a, 0x11, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, - 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, - 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, - 0x6f, 0x6c, 0x65, 0x22, 0x59, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x04, 0x72, 0x6f, 0x6c, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x72, 0x6d, 0x61, 0x74, 0x22, 0xc0, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, + 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x11, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, + 0x73, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x53, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, + 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x72, + 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x10, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, + 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x8e, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, + 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, + 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0xab, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, + 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x0c, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x5f, + 0x72, 0x75, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4e, 0x2e, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x73, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6e, + 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x6e, 0x61, + 0x6c, 0x79, 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x12, 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x4d, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x20, 0x0a, 0x1e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, + 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x4e, 0x0a, + 0x19, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6b, 0x38, 0x73, + 0x2e, 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x58, 0x0a, + 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x43, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, + 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, + 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, + 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x59, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, + 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, + 0x6c, 0x65, 0x22, 0x41, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa6, 0x01, 0x0a, 0x0e, + 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, + 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x61, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0b, 0x61, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, + 0x43, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x52, 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x22, 0xd0, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, + 0x58, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, + 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, + 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x48, 0x00, 0x52, 0x09, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x52, 0x0a, 0x06, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x73, 0x12, 0x48, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, + 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x22, 0xfd, 0x01, 0x0a, 0x0c, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x0b, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x73, 0x65, + 0x72, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x67, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, + 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, + 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x42, 0x09, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x54, 0x0a, 0x0d, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x04, + 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, + 0x65, 0x22, 0x4f, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x21, 0x0a, 0x0c, 0x61, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x61, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x22, 0xb2, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x41, - 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa6, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x52, - 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x73, 0x5f, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x61, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x06, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, - 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x22, 0xd0, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, + 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, + 0x56, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, - 0x6f, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x58, 0x0a, 0x09, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, + 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0xfe, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x76, 0x6f, + 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x61, + 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x73, 0x12, 0x67, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, - 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x48, 0x00, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0c, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x22, 0x52, 0x0a, 0x06, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x48, 0x0a, - 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, - 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, - 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x22, 0xfd, 0x01, 0x0a, 0x0c, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x73, 0x12, 0x67, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, + 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x09, 0x0a, + 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x55, 0x0a, 0x0e, 0x52, 0x65, 0x76, 0x6f, + 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x04, 0x72, 0x6f, + 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, + 0x58, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, + 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, + 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x59, 0x0a, 0x12, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x43, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x09, 0x0a, 0x07, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x54, 0x0a, 0x0d, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x4f, 0x0a, - 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x61, - 0x73, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0b, 0x61, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0xb2, - 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x09, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, - 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, - 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x22, 0xfe, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, - 0x6f, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, - 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, - 0x6d, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, - 0x12, 0x67, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, - 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x55, 0x0a, 0x0e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x58, 0x0a, 0x11, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x43, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, - 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, - 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, - 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x59, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x04, 0x72, - 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x62, 0x61, 0x63, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, - 0x22, 0x41, 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, - 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, + 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x41, 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, + 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x4d, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x68, 0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x61, 0x70, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x4d, 0x61, 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, + 0x73, 0x22, 0x98, 0x01, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, + 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, + 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x77, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x84, 0x01, 0x0a, + 0x24, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, + 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6b, 0x38, 0x73, 0x2e, + 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x4d, 0x61, 0x70, 0x12, 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x22, 0x3e, 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, + 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x22, 0x68, 0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, - 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x4d, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, - 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x61, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, - 0x70, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x73, 0x22, 0x98, 0x01, - 0x0a, 0x23, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x52, 0x65, + 0x65, 0x63, 0x74, 0x22, 0x5b, 0x0a, 0x23, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, + 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6b, 0x38, + 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, + 0x22, 0x95, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, @@ -8093,546 +8603,555 @@ var file_service_v1alpha1_service_proto_rawDesc = []byte{ 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, - 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x61, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x4d, 0x61, 0x70, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, - 0x70, 0x12, 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, - 0x52, 0x03, 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, - 0x3e, 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, - 0x5b, 0x0a, 0x23, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x95, 0x01, 0x0a, - 0x20, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x43, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x77, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x41, + 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, + 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x6b, 0x38, 0x73, 0x2e, 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x48, 0x00, 0x52, 0x03, 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x2a, 0x51, 0x0a, 0x09, 0x52, 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1a, + 0x0a, 0x16, 0x52, 0x41, 0x57, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x41, + 0x57, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x01, 0x12, + 0x13, 0x0a, 0x0f, 0x52, 0x41, 0x57, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x59, 0x41, + 0x4d, 0x4c, 0x10, 0x02, 0x32, 0xd4, 0x40, 0x0a, 0x0c, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, + 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x09, 0x47, + 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x32, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, + 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x61, + 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x86, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, + 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x39, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x52, 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x06, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x22, 0x77, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, - 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6b, 0x38, 0x73, 0x2e, - 0x69, 0x6f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, - 0x12, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x03, - 0x72, 0x61, 0x77, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x51, 0x0a, - 0x09, 0x52, 0x61, 0x77, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1a, 0x0a, 0x16, 0x52, 0x41, - 0x57, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x41, 0x57, 0x5f, 0x46, 0x4f, - 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x52, - 0x41, 0x57, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x59, 0x41, 0x4d, 0x4c, 0x10, 0x02, - 0x32, 0x83, 0x3c, 0x0a, 0x0c, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, - 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x41, 0x64, + 0x6d, 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, + 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, + 0x6e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x32, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, - 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, - 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, 0x01, - 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, - 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, - 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x6f, 0x67, - 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x83, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, - 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x3f, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, - 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x40, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x37, 0x2e, 0x61, - 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, + 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x16, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x3f, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, + 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x72, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x77, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x12, 0x33, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, - 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, - 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x71, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x31, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x32, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, - 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x0b, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, - 0x67, 0x65, 0x73, 0x12, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, + 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, + 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x67, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, - 0x63, 0x68, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x12, 0x7a, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x61, 0x67, - 0x65, 0x12, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, - 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, - 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x35, - 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, - 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, - 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, - 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, + 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x0f, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, - 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, + 0x73, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, + 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, + 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, + 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x67, + 0x65, 0x12, 0x31, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, + 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x0b, 0x57, 0x61, 0x74, 0x63, + 0x68, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x12, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, - 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7d, - 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, - 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, + 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, + 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7a, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6d, - 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x85, 0x01, - 0x0a, 0x0e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, - 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, + 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x61, 0x6b, + 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, + 0x67, 0x65, 0x12, 0x35, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, - 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x50, - 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, - 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x62, 0x6f, 0x72, - 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x0d, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x36, 0x2e, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x66, + 0x72, 0x65, 0x73, 0x68, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, + 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, + 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x0f, 0x57, 0x61, 0x74, 0x63, + 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x2e, 0x61, 0x6b, + 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, + 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, - 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x33, 0x2e, 0x61, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, + 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x30, 0x01, 0x12, 0x7d, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x35, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x85, 0x01, 0x0a, 0x0e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, + 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, + 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, + 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x41, 0x62, + 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x41, 0x62, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, + 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x50, 0x72, + 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x80, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x35, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, - 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, - 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x41, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, - 0x72, 0x6f, 0x76, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, + 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x0c, 0x4c, + 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x35, 0x2e, 0x61, 0x6b, + 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x46, 0x72, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, - 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x36, - 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, - 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x77, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x33, 0x2e, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x41, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x80, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x12, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x50, 0x72, 0x6f, - 0x6d, 0x6f, 0x74, 0x65, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x37, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, - 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x54, - 0x6f, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, - 0x01, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x72, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x61, 0x6b, 0x75, + 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x72, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, + 0x0e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, + 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, + 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, + 0x6f, 0x74, 0x65, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x44, 0x6f, + 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, + 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, + 0x6f, 0x74, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x44, - 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, - 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, - 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x35, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, - 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x72, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, 0x01, 0x0a, - 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x12, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, - 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x72, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x3c, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, - 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, - 0x0a, 0x08, 0x52, 0x65, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x31, 0x2e, 0x61, 0x6b, 0x75, - 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x52, 0x65, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x7d, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x12, 0x35, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, + 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x8f, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, - 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, - 0x73, 0x65, 0x73, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, - 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, - 0x6f, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, - 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x57, 0x61, 0x72, - 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x12, 0x35, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, - 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x72, - 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x0f, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, - 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x12, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, - 0x63, 0x68, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, - 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x61, 0x72, 0x65, - 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, - 0x12, 0x86, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x61, 0x72, 0x65, 0x68, - 0x6f, 0x75, 0x73, 0x65, 0x12, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x46, 0x72, 0x65, 0x69, 0x67, 0x68, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x61, - 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, - 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x89, 0x01, 0x0a, 0x10, 0x52, 0x65, - 0x66, 0x72, 0x65, 0x73, 0x68, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x12, 0x39, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x72, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x71, 0x0a, 0x08, 0x52, 0x65, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x31, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, - 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x66, - 0x72, 0x65, 0x73, 0x68, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x3a, 0x2e, 0x61, 0x6b, + 0x31, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x56, + 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, + 0x62, 0x6f, 0x72, 0x74, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x72, + 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, + 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x0c, 0x47, 0x65, + 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x12, 0x35, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, - 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, - 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, - 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x0f, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x38, 0x2e, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x36, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x0f, 0x57, 0x61, + 0x74, 0x63, 0x68, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x12, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, + 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, + 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x30, 0x01, 0x12, 0x86, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, + 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x12, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, - 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x98, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, - 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x3e, 0x2e, 0x61, 0x6b, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x61, 0x72, 0x65, + 0x68, 0x6f, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x89, 0x01, + 0x0a, 0x10, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, + 0x73, 0x65, 0x12, 0x39, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x57, 0x61, 0x72, + 0x65, 0x68, 0x6f, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, + 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x57, 0x61, 0x72, 0x65, 0x68, 0x6f, 0x75, 0x73, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, + 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x61, 0x6b, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x3a, + 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, + 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, + 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, + 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, 0x01, + 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x73, 0x12, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x92, 0x01, 0x0a, - 0x13, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, - 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, - 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, - 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, - 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, - 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x2e, 0x61, + 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x3a, 0x2e, 0x61, + 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, + 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x92, 0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, + 0x3c, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x83, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x52, - 0x75, 0x6e, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x92, 0x01, 0x0a, + 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x12, 0x3c, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, + 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, - 0x73, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xb3, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, - 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x73, 0x12, 0x47, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, - 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x92, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x3c, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x12, 0x3e, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x3f, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x92, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, + 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x2e, 0x61, 0x6b, 0x75, 0x69, + 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x48, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, + 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x12, 0x3f, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, - 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, - 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xad, 0x01, 0x0a, 0x1c, - 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x12, 0x45, 0x2e, 0x61, - 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x46, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, - 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, - 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x4d, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x1b, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x44, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, 0x79, + 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6e, 0x61, 0x6c, + 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, + 0x79, 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x12, 0x37, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, + 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, + 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x38, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x52, + 0x75, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xb3, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x45, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x73, 0x12, 0x47, 0x2e, + 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x48, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, + 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0xad, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, + 0x70, 0x12, 0x45, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, + 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x46, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, + 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, + 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0xaa, 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa4, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, - 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x42, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x12, 0x44, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, - 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x61, 0x6b, 0x75, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6e, + 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa4, 0x01, + 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x42, 0x2e, 0x61, 0x6b, + 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x43, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x8c, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3a, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, - 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, - 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, - 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x33, 0x2e, 0x61, - 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, + 0x65, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, - 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, + 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x6e, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x30, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, - 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x68, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x2e, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x09, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, - 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x6b, 0x0a, 0x06, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0x2f, 0x2e, 0x61, 0x6b, 0x75, - 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, - 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, - 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, - 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x33, 0x2e, 0x61, 0x6b, - 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, + 0x12, 0x30, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x97, 0x02, 0x0a, 0x24, 0x63, 0x6f, 0x6d, 0x2e, 0x61, + 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, + 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x2e, + 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, + 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x74, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, - 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x2f, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x3b, 0x73, 0x76, 0x63, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, - 0x41, 0x49, 0x4b, 0x53, 0xaa, 0x02, 0x20, 0x41, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x49, 0x6f, - 0x2e, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x56, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x20, 0x41, 0x6b, 0x75, 0x69, 0x74, 0x79, - 0x5c, 0x49, 0x6f, 0x5c, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x5c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x2c, 0x41, 0x6b, 0x75, - 0x69, 0x74, 0x79, 0x5c, 0x49, 0x6f, 0x5c, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x5c, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, - 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x24, 0x41, 0x6b, 0x75, 0x69, - 0x74, 0x79, 0x3a, 0x3a, 0x49, 0x6f, 0x3a, 0x3a, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x3a, 0x3a, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x06, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x12, + 0x2f, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, + 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x30, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x77, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, + 0x12, 0x33, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, 0x72, + 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, + 0x6f, 0x2e, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x97, 0x02, 0x0a, 0x24, + 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2e, 0x69, 0x6f, 0x2e, 0x6b, 0x61, + 0x72, 0x67, 0x6f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x42, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x61, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x2f, 0x6b, 0x61, 0x72, 0x67, 0x6f, 0x2f, 0x70, 0x6b, + 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x73, 0x76, 0x63, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0xa2, 0x02, 0x04, 0x41, 0x49, 0x4b, 0x53, 0xaa, 0x02, 0x20, 0x41, 0x6b, 0x75, 0x69, + 0x74, 0x79, 0x2e, 0x49, 0x6f, 0x2e, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x20, 0x41, + 0x6b, 0x75, 0x69, 0x74, 0x79, 0x5c, 0x49, 0x6f, 0x5c, 0x4b, 0x61, 0x72, 0x67, 0x6f, 0x5c, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, + 0x02, 0x2c, 0x41, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x5c, 0x49, 0x6f, 0x5c, 0x4b, 0x61, 0x72, 0x67, + 0x6f, 0x5c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x24, 0x41, 0x6b, 0x75, 0x69, 0x74, 0x79, 0x3a, 0x3a, 0x49, 0x6f, 0x3a, 0x3a, 0x4b, 0x61, 0x72, + 0x67, 0x6f, 0x3a, 0x3a, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -8648,7 +9167,7 @@ func file_service_v1alpha1_service_proto_rawDescGZIP() []byte { } var file_service_v1alpha1_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_service_v1alpha1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 131) +var file_service_v1alpha1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 141) var file_service_v1alpha1_service_proto_goTypes = []interface{}{ (RawFormat)(0), // 0: akuity.io.kargo.service.v1alpha1.RawFormat (*ComponentVersions)(nil), // 1: akuity.io.kargo.service.v1alpha1.ComponentVersions @@ -8734,264 +9253,287 @@ var file_service_v1alpha1_service_proto_goTypes = []interface{}{ (*DeleteWarehouseResponse)(nil), // 81: akuity.io.kargo.service.v1alpha1.DeleteWarehouseResponse (*RefreshWarehouseRequest)(nil), // 82: akuity.io.kargo.service.v1alpha1.RefreshWarehouseRequest (*RefreshWarehouseResponse)(nil), // 83: akuity.io.kargo.service.v1alpha1.RefreshWarehouseResponse - (*CreateCredentialsRequest)(nil), // 84: akuity.io.kargo.service.v1alpha1.CreateCredentialsRequest - (*CreateCredentialsResponse)(nil), // 85: akuity.io.kargo.service.v1alpha1.CreateCredentialsResponse - (*DeleteCredentialsRequest)(nil), // 86: akuity.io.kargo.service.v1alpha1.DeleteCredentialsRequest - (*DeleteCredentialsResponse)(nil), // 87: akuity.io.kargo.service.v1alpha1.DeleteCredentialsResponse - (*GetCredentialsRequest)(nil), // 88: akuity.io.kargo.service.v1alpha1.GetCredentialsRequest - (*GetCredentialsResponse)(nil), // 89: akuity.io.kargo.service.v1alpha1.GetCredentialsResponse - (*ListCredentialsRequest)(nil), // 90: akuity.io.kargo.service.v1alpha1.ListCredentialsRequest - (*ListCredentialsResponse)(nil), // 91: akuity.io.kargo.service.v1alpha1.ListCredentialsResponse - (*UpdateCredentialsRequest)(nil), // 92: akuity.io.kargo.service.v1alpha1.UpdateCredentialsRequest - (*UpdateCredentialsResponse)(nil), // 93: akuity.io.kargo.service.v1alpha1.UpdateCredentialsResponse - (*ListAnalysisTemplatesRequest)(nil), // 94: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplatesRequest - (*ListAnalysisTemplatesResponse)(nil), // 95: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplatesResponse - (*GetAnalysisTemplateRequest)(nil), // 96: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateRequest - (*GetAnalysisTemplateResponse)(nil), // 97: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateResponse - (*GetAnalysisRunRequest)(nil), // 98: akuity.io.kargo.service.v1alpha1.GetAnalysisRunRequest - (*GetAnalysisRunResponse)(nil), // 99: akuity.io.kargo.service.v1alpha1.GetAnalysisRunResponse - (*DeleteAnalysisTemplateRequest)(nil), // 100: akuity.io.kargo.service.v1alpha1.DeleteAnalysisTemplateRequest - (*DeleteAnalysisTemplateResponse)(nil), // 101: akuity.io.kargo.service.v1alpha1.DeleteAnalysisTemplateResponse - (*ListProjectEventsRequest)(nil), // 102: akuity.io.kargo.service.v1alpha1.ListProjectEventsRequest - (*ListProjectEventsResponse)(nil), // 103: akuity.io.kargo.service.v1alpha1.ListProjectEventsResponse - (*CreateRoleRequest)(nil), // 104: akuity.io.kargo.service.v1alpha1.CreateRoleRequest - (*CreateRoleResponse)(nil), // 105: akuity.io.kargo.service.v1alpha1.CreateRoleResponse - (*DeleteRoleRequest)(nil), // 106: akuity.io.kargo.service.v1alpha1.DeleteRoleRequest - (*DeleteRoleResponse)(nil), // 107: akuity.io.kargo.service.v1alpha1.DeleteRoleResponse - (*GetRoleRequest)(nil), // 108: akuity.io.kargo.service.v1alpha1.GetRoleRequest - (*GetRoleResponse)(nil), // 109: akuity.io.kargo.service.v1alpha1.GetRoleResponse - (*Claims)(nil), // 110: akuity.io.kargo.service.v1alpha1.Claims - (*GrantRequest)(nil), // 111: akuity.io.kargo.service.v1alpha1.GrantRequest - (*GrantResponse)(nil), // 112: akuity.io.kargo.service.v1alpha1.GrantResponse - (*ListRolesRequest)(nil), // 113: akuity.io.kargo.service.v1alpha1.ListRolesRequest - (*ListRolesResponse)(nil), // 114: akuity.io.kargo.service.v1alpha1.ListRolesResponse - (*RevokeRequest)(nil), // 115: akuity.io.kargo.service.v1alpha1.RevokeRequest - (*RevokeResponse)(nil), // 116: akuity.io.kargo.service.v1alpha1.RevokeResponse - (*UpdateRoleRequest)(nil), // 117: akuity.io.kargo.service.v1alpha1.UpdateRoleRequest - (*UpdateRoleResponse)(nil), // 118: akuity.io.kargo.service.v1alpha1.UpdateRoleResponse - (*ListAnalysisTemplateConfigMapsRequest)(nil), // 119: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsRequest - (*ListAnalysisTemplateConfigMapsResponse)(nil), // 120: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsResponse - (*GetAnalysisTemplateConfigMapRequest)(nil), // 121: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapRequest - (*GetAnalysisTemplateConfigMapResponse)(nil), // 122: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapResponse - (*ListAnalysisTemplateSecretsRequest)(nil), // 123: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsRequest - (*ListAnalysisTemplateSecretsResponse)(nil), // 124: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsResponse - (*GetAnalysisTemplateSecretRequest)(nil), // 125: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretRequest - (*GetAnalysisTemplateSecretResponse)(nil), // 126: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretResponse - nil, // 127: akuity.io.kargo.service.v1alpha1.GetConfigResponse.ArgocdShardsEntry - nil, // 128: akuity.io.kargo.service.v1alpha1.ListImagesResponse.ImagesEntry - nil, // 129: akuity.io.kargo.service.v1alpha1.TagMap.TagsEntry - nil, // 130: akuity.io.kargo.service.v1alpha1.ImageStageMap.StagesEntry - nil, // 131: akuity.io.kargo.service.v1alpha1.QueryFreightResponse.GroupsEntry - (*timestamppb.Timestamp)(nil), // 132: google.protobuf.Timestamp - (*v1alpha1.Stage)(nil), // 133: github.com.akuity.kargo.api.v1alpha1.Stage - (*v1alpha1.Promotion)(nil), // 134: github.com.akuity.kargo.api.v1alpha1.Promotion - (*v1alpha1.Project)(nil), // 135: github.com.akuity.kargo.api.v1alpha1.Project - (*v1alpha1.Freight)(nil), // 136: github.com.akuity.kargo.api.v1alpha1.Freight - (*v1alpha1.Warehouse)(nil), // 137: github.com.akuity.kargo.api.v1alpha1.Warehouse - (*v1.Secret)(nil), // 138: k8s.io.api.core.v1.Secret - (*v1alpha11.AnalysisTemplate)(nil), // 139: github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisTemplate - (*v1alpha11.AnalysisRun)(nil), // 140: github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisRun - (*v1.Event)(nil), // 141: k8s.io.api.core.v1.Event - (*v1alpha12.Role)(nil), // 142: github.com.akuity.kargo.api.rbac.v1alpha1.Role - (*v1alpha12.RoleResources)(nil), // 143: github.com.akuity.kargo.api.rbac.v1alpha1.RoleResources - (*v1alpha12.Claim)(nil), // 144: github.com.akuity.kargo.api.rbac.v1alpha1.Claim - (*v1alpha12.ResourceDetails)(nil), // 145: github.com.akuity.kargo.api.rbac.v1alpha1.ResourceDetails - (*v1.ConfigMap)(nil), // 146: k8s.io.api.core.v1.ConfigMap + (*ListProjectSecretsRequest)(nil), // 84: akuity.io.kargo.service.v1alpha1.ListProjectSecretsRequest + (*ListProjectSecretsResponse)(nil), // 85: akuity.io.kargo.service.v1alpha1.ListProjectSecretsResponse + (*CreateProjectSecretRequest)(nil), // 86: akuity.io.kargo.service.v1alpha1.CreateProjectSecretRequest + (*CreateProjectSecretResponse)(nil), // 87: akuity.io.kargo.service.v1alpha1.CreateProjectSecretResponse + (*UpdateProjectSecretRequest)(nil), // 88: akuity.io.kargo.service.v1alpha1.UpdateProjectSecretRequest + (*UpdateProjectSecretResponse)(nil), // 89: akuity.io.kargo.service.v1alpha1.UpdateProjectSecretResponse + (*DeleteProjectSecretRequest)(nil), // 90: akuity.io.kargo.service.v1alpha1.DeleteProjectSecretRequest + (*DeleteProjectSecretResponse)(nil), // 91: akuity.io.kargo.service.v1alpha1.DeleteProjectSecretResponse + (*CreateCredentialsRequest)(nil), // 92: akuity.io.kargo.service.v1alpha1.CreateCredentialsRequest + (*CreateCredentialsResponse)(nil), // 93: akuity.io.kargo.service.v1alpha1.CreateCredentialsResponse + (*DeleteCredentialsRequest)(nil), // 94: akuity.io.kargo.service.v1alpha1.DeleteCredentialsRequest + (*DeleteCredentialsResponse)(nil), // 95: akuity.io.kargo.service.v1alpha1.DeleteCredentialsResponse + (*GetCredentialsRequest)(nil), // 96: akuity.io.kargo.service.v1alpha1.GetCredentialsRequest + (*GetCredentialsResponse)(nil), // 97: akuity.io.kargo.service.v1alpha1.GetCredentialsResponse + (*ListCredentialsRequest)(nil), // 98: akuity.io.kargo.service.v1alpha1.ListCredentialsRequest + (*ListCredentialsResponse)(nil), // 99: akuity.io.kargo.service.v1alpha1.ListCredentialsResponse + (*UpdateCredentialsRequest)(nil), // 100: akuity.io.kargo.service.v1alpha1.UpdateCredentialsRequest + (*UpdateCredentialsResponse)(nil), // 101: akuity.io.kargo.service.v1alpha1.UpdateCredentialsResponse + (*ListAnalysisTemplatesRequest)(nil), // 102: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplatesRequest + (*ListAnalysisTemplatesResponse)(nil), // 103: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplatesResponse + (*GetAnalysisTemplateRequest)(nil), // 104: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateRequest + (*GetAnalysisTemplateResponse)(nil), // 105: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateResponse + (*GetAnalysisRunRequest)(nil), // 106: akuity.io.kargo.service.v1alpha1.GetAnalysisRunRequest + (*GetAnalysisRunResponse)(nil), // 107: akuity.io.kargo.service.v1alpha1.GetAnalysisRunResponse + (*DeleteAnalysisTemplateRequest)(nil), // 108: akuity.io.kargo.service.v1alpha1.DeleteAnalysisTemplateRequest + (*DeleteAnalysisTemplateResponse)(nil), // 109: akuity.io.kargo.service.v1alpha1.DeleteAnalysisTemplateResponse + (*ListProjectEventsRequest)(nil), // 110: akuity.io.kargo.service.v1alpha1.ListProjectEventsRequest + (*ListProjectEventsResponse)(nil), // 111: akuity.io.kargo.service.v1alpha1.ListProjectEventsResponse + (*CreateRoleRequest)(nil), // 112: akuity.io.kargo.service.v1alpha1.CreateRoleRequest + (*CreateRoleResponse)(nil), // 113: akuity.io.kargo.service.v1alpha1.CreateRoleResponse + (*DeleteRoleRequest)(nil), // 114: akuity.io.kargo.service.v1alpha1.DeleteRoleRequest + (*DeleteRoleResponse)(nil), // 115: akuity.io.kargo.service.v1alpha1.DeleteRoleResponse + (*GetRoleRequest)(nil), // 116: akuity.io.kargo.service.v1alpha1.GetRoleRequest + (*GetRoleResponse)(nil), // 117: akuity.io.kargo.service.v1alpha1.GetRoleResponse + (*Claims)(nil), // 118: akuity.io.kargo.service.v1alpha1.Claims + (*GrantRequest)(nil), // 119: akuity.io.kargo.service.v1alpha1.GrantRequest + (*GrantResponse)(nil), // 120: akuity.io.kargo.service.v1alpha1.GrantResponse + (*ListRolesRequest)(nil), // 121: akuity.io.kargo.service.v1alpha1.ListRolesRequest + (*ListRolesResponse)(nil), // 122: akuity.io.kargo.service.v1alpha1.ListRolesResponse + (*RevokeRequest)(nil), // 123: akuity.io.kargo.service.v1alpha1.RevokeRequest + (*RevokeResponse)(nil), // 124: akuity.io.kargo.service.v1alpha1.RevokeResponse + (*UpdateRoleRequest)(nil), // 125: akuity.io.kargo.service.v1alpha1.UpdateRoleRequest + (*UpdateRoleResponse)(nil), // 126: akuity.io.kargo.service.v1alpha1.UpdateRoleResponse + (*ListAnalysisTemplateConfigMapsRequest)(nil), // 127: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsRequest + (*ListAnalysisTemplateConfigMapsResponse)(nil), // 128: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsResponse + (*GetAnalysisTemplateConfigMapRequest)(nil), // 129: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapRequest + (*GetAnalysisTemplateConfigMapResponse)(nil), // 130: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapResponse + (*ListAnalysisTemplateSecretsRequest)(nil), // 131: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsRequest + (*ListAnalysisTemplateSecretsResponse)(nil), // 132: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsResponse + (*GetAnalysisTemplateSecretRequest)(nil), // 133: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretRequest + (*GetAnalysisTemplateSecretResponse)(nil), // 134: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretResponse + nil, // 135: akuity.io.kargo.service.v1alpha1.GetConfigResponse.ArgocdShardsEntry + nil, // 136: akuity.io.kargo.service.v1alpha1.ListImagesResponse.ImagesEntry + nil, // 137: akuity.io.kargo.service.v1alpha1.TagMap.TagsEntry + nil, // 138: akuity.io.kargo.service.v1alpha1.ImageStageMap.StagesEntry + nil, // 139: akuity.io.kargo.service.v1alpha1.QueryFreightResponse.GroupsEntry + nil, // 140: akuity.io.kargo.service.v1alpha1.CreateProjectSecretRequest.DataEntry + nil, // 141: akuity.io.kargo.service.v1alpha1.UpdateProjectSecretRequest.DataEntry + (*timestamppb.Timestamp)(nil), // 142: google.protobuf.Timestamp + (*v1alpha1.Stage)(nil), // 143: github.com.akuity.kargo.api.v1alpha1.Stage + (*v1alpha1.Promotion)(nil), // 144: github.com.akuity.kargo.api.v1alpha1.Promotion + (*v1alpha1.Project)(nil), // 145: github.com.akuity.kargo.api.v1alpha1.Project + (*v1alpha1.Freight)(nil), // 146: github.com.akuity.kargo.api.v1alpha1.Freight + (*v1alpha1.Warehouse)(nil), // 147: github.com.akuity.kargo.api.v1alpha1.Warehouse + (*v1.Secret)(nil), // 148: k8s.io.api.core.v1.Secret + (*v1alpha11.AnalysisTemplate)(nil), // 149: github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisTemplate + (*v1alpha11.AnalysisRun)(nil), // 150: github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisRun + (*v1.Event)(nil), // 151: k8s.io.api.core.v1.Event + (*v1alpha12.Role)(nil), // 152: github.com.akuity.kargo.api.rbac.v1alpha1.Role + (*v1alpha12.RoleResources)(nil), // 153: github.com.akuity.kargo.api.rbac.v1alpha1.RoleResources + (*v1alpha12.Claim)(nil), // 154: github.com.akuity.kargo.api.rbac.v1alpha1.Claim + (*v1alpha12.ResourceDetails)(nil), // 155: github.com.akuity.kargo.api.rbac.v1alpha1.ResourceDetails + (*v1.ConfigMap)(nil), // 156: k8s.io.api.core.v1.ConfigMap } var file_service_v1alpha1_service_proto_depIdxs = []int32{ 2, // 0: akuity.io.kargo.service.v1alpha1.ComponentVersions.server:type_name -> akuity.io.kargo.service.v1alpha1.VersionInfo 2, // 1: akuity.io.kargo.service.v1alpha1.ComponentVersions.cli:type_name -> akuity.io.kargo.service.v1alpha1.VersionInfo - 132, // 2: akuity.io.kargo.service.v1alpha1.VersionInfo.build_time:type_name -> google.protobuf.Timestamp + 142, // 2: akuity.io.kargo.service.v1alpha1.VersionInfo.build_time:type_name -> google.protobuf.Timestamp 2, // 3: akuity.io.kargo.service.v1alpha1.GetVersionInfoResponse.version_info:type_name -> akuity.io.kargo.service.v1alpha1.VersionInfo - 127, // 4: akuity.io.kargo.service.v1alpha1.GetConfigResponse.argocd_shards:type_name -> akuity.io.kargo.service.v1alpha1.GetConfigResponse.ArgocdShardsEntry + 135, // 4: akuity.io.kargo.service.v1alpha1.GetConfigResponse.argocd_shards:type_name -> akuity.io.kargo.service.v1alpha1.GetConfigResponse.ArgocdShardsEntry 10, // 5: akuity.io.kargo.service.v1alpha1.GetPublicConfigResponse.oidc_config:type_name -> akuity.io.kargo.service.v1alpha1.OIDCConfig 14, // 6: akuity.io.kargo.service.v1alpha1.CreateResourceResponse.results:type_name -> akuity.io.kargo.service.v1alpha1.CreateResourceResult 17, // 7: akuity.io.kargo.service.v1alpha1.CreateOrUpdateResourceResponse.results:type_name -> akuity.io.kargo.service.v1alpha1.CreateOrUpdateResourceResult 20, // 8: akuity.io.kargo.service.v1alpha1.UpdateResourceResponse.results:type_name -> akuity.io.kargo.service.v1alpha1.UpdateResourceResult 23, // 9: akuity.io.kargo.service.v1alpha1.DeleteResourceResponse.results:type_name -> akuity.io.kargo.service.v1alpha1.DeleteResourceResult - 133, // 10: akuity.io.kargo.service.v1alpha1.ListStagesResponse.stages:type_name -> github.com.akuity.kargo.api.v1alpha1.Stage - 128, // 11: akuity.io.kargo.service.v1alpha1.ListImagesResponse.images:type_name -> akuity.io.kargo.service.v1alpha1.ListImagesResponse.ImagesEntry - 129, // 12: akuity.io.kargo.service.v1alpha1.TagMap.tags:type_name -> akuity.io.kargo.service.v1alpha1.TagMap.TagsEntry - 130, // 13: akuity.io.kargo.service.v1alpha1.ImageStageMap.stages:type_name -> akuity.io.kargo.service.v1alpha1.ImageStageMap.StagesEntry + 143, // 10: akuity.io.kargo.service.v1alpha1.ListStagesResponse.stages:type_name -> github.com.akuity.kargo.api.v1alpha1.Stage + 136, // 11: akuity.io.kargo.service.v1alpha1.ListImagesResponse.images:type_name -> akuity.io.kargo.service.v1alpha1.ListImagesResponse.ImagesEntry + 137, // 12: akuity.io.kargo.service.v1alpha1.TagMap.tags:type_name -> akuity.io.kargo.service.v1alpha1.TagMap.TagsEntry + 138, // 13: akuity.io.kargo.service.v1alpha1.ImageStageMap.stages:type_name -> akuity.io.kargo.service.v1alpha1.ImageStageMap.StagesEntry 0, // 14: akuity.io.kargo.service.v1alpha1.GetStageRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 133, // 15: akuity.io.kargo.service.v1alpha1.GetStageResponse.stage:type_name -> github.com.akuity.kargo.api.v1alpha1.Stage - 133, // 16: akuity.io.kargo.service.v1alpha1.WatchStagesResponse.stage:type_name -> github.com.akuity.kargo.api.v1alpha1.Stage - 133, // 17: akuity.io.kargo.service.v1alpha1.RefreshStageResponse.stage:type_name -> github.com.akuity.kargo.api.v1alpha1.Stage - 134, // 18: akuity.io.kargo.service.v1alpha1.ListPromotionsResponse.promotions:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion - 134, // 19: akuity.io.kargo.service.v1alpha1.WatchPromotionsResponse.promotion:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion + 143, // 15: akuity.io.kargo.service.v1alpha1.GetStageResponse.stage:type_name -> github.com.akuity.kargo.api.v1alpha1.Stage + 143, // 16: akuity.io.kargo.service.v1alpha1.WatchStagesResponse.stage:type_name -> github.com.akuity.kargo.api.v1alpha1.Stage + 143, // 17: akuity.io.kargo.service.v1alpha1.RefreshStageResponse.stage:type_name -> github.com.akuity.kargo.api.v1alpha1.Stage + 144, // 18: akuity.io.kargo.service.v1alpha1.ListPromotionsResponse.promotions:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion + 144, // 19: akuity.io.kargo.service.v1alpha1.WatchPromotionsResponse.promotion:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion 0, // 20: akuity.io.kargo.service.v1alpha1.GetPromotionRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 134, // 21: akuity.io.kargo.service.v1alpha1.GetPromotionResponse.promotion:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion - 134, // 22: akuity.io.kargo.service.v1alpha1.WatchPromotionResponse.promotion:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion + 144, // 21: akuity.io.kargo.service.v1alpha1.GetPromotionResponse.promotion:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion + 144, // 22: akuity.io.kargo.service.v1alpha1.WatchPromotionResponse.promotion:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion 0, // 23: akuity.io.kargo.service.v1alpha1.GetProjectRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 135, // 24: akuity.io.kargo.service.v1alpha1.GetProjectResponse.project:type_name -> github.com.akuity.kargo.api.v1alpha1.Project - 135, // 25: akuity.io.kargo.service.v1alpha1.ListProjectsResponse.projects:type_name -> github.com.akuity.kargo.api.v1alpha1.Project + 145, // 24: akuity.io.kargo.service.v1alpha1.GetProjectResponse.project:type_name -> github.com.akuity.kargo.api.v1alpha1.Project + 145, // 25: akuity.io.kargo.service.v1alpha1.ListProjectsResponse.projects:type_name -> github.com.akuity.kargo.api.v1alpha1.Project 0, // 26: akuity.io.kargo.service.v1alpha1.GetFreightRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 136, // 27: akuity.io.kargo.service.v1alpha1.GetFreightResponse.freight:type_name -> github.com.akuity.kargo.api.v1alpha1.Freight - 134, // 28: akuity.io.kargo.service.v1alpha1.PromoteToStageResponse.promotion:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion - 134, // 29: akuity.io.kargo.service.v1alpha1.PromoteDownstreamResponse.promotions:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion - 131, // 30: akuity.io.kargo.service.v1alpha1.QueryFreightResponse.groups:type_name -> akuity.io.kargo.service.v1alpha1.QueryFreightResponse.GroupsEntry - 136, // 31: akuity.io.kargo.service.v1alpha1.FreightList.freight:type_name -> github.com.akuity.kargo.api.v1alpha1.Freight - 137, // 32: akuity.io.kargo.service.v1alpha1.ListWarehousesResponse.warehouses:type_name -> github.com.akuity.kargo.api.v1alpha1.Warehouse + 146, // 27: akuity.io.kargo.service.v1alpha1.GetFreightResponse.freight:type_name -> github.com.akuity.kargo.api.v1alpha1.Freight + 144, // 28: akuity.io.kargo.service.v1alpha1.PromoteToStageResponse.promotion:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion + 144, // 29: akuity.io.kargo.service.v1alpha1.PromoteDownstreamResponse.promotions:type_name -> github.com.akuity.kargo.api.v1alpha1.Promotion + 139, // 30: akuity.io.kargo.service.v1alpha1.QueryFreightResponse.groups:type_name -> akuity.io.kargo.service.v1alpha1.QueryFreightResponse.GroupsEntry + 146, // 31: akuity.io.kargo.service.v1alpha1.FreightList.freight:type_name -> github.com.akuity.kargo.api.v1alpha1.Freight + 147, // 32: akuity.io.kargo.service.v1alpha1.ListWarehousesResponse.warehouses:type_name -> github.com.akuity.kargo.api.v1alpha1.Warehouse 0, // 33: akuity.io.kargo.service.v1alpha1.GetWarehouseRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 137, // 34: akuity.io.kargo.service.v1alpha1.GetWarehouseResponse.warehouse:type_name -> github.com.akuity.kargo.api.v1alpha1.Warehouse - 137, // 35: akuity.io.kargo.service.v1alpha1.WatchWarehousesResponse.warehouse:type_name -> github.com.akuity.kargo.api.v1alpha1.Warehouse - 137, // 36: akuity.io.kargo.service.v1alpha1.RefreshWarehouseResponse.warehouse:type_name -> github.com.akuity.kargo.api.v1alpha1.Warehouse - 138, // 37: akuity.io.kargo.service.v1alpha1.CreateCredentialsResponse.credentials:type_name -> k8s.io.api.core.v1.Secret - 0, // 38: akuity.io.kargo.service.v1alpha1.GetCredentialsRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 138, // 39: akuity.io.kargo.service.v1alpha1.GetCredentialsResponse.credentials:type_name -> k8s.io.api.core.v1.Secret - 138, // 40: akuity.io.kargo.service.v1alpha1.ListCredentialsResponse.credentials:type_name -> k8s.io.api.core.v1.Secret - 138, // 41: akuity.io.kargo.service.v1alpha1.UpdateCredentialsResponse.credentials:type_name -> k8s.io.api.core.v1.Secret - 139, // 42: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplatesResponse.analysis_templates:type_name -> github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisTemplate - 0, // 43: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 139, // 44: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateResponse.analysis_template:type_name -> github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisTemplate - 0, // 45: akuity.io.kargo.service.v1alpha1.GetAnalysisRunRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 140, // 46: akuity.io.kargo.service.v1alpha1.GetAnalysisRunResponse.analysis_run:type_name -> github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisRun - 141, // 47: akuity.io.kargo.service.v1alpha1.ListProjectEventsResponse.events:type_name -> k8s.io.api.core.v1.Event - 142, // 48: akuity.io.kargo.service.v1alpha1.CreateRoleRequest.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role - 142, // 49: akuity.io.kargo.service.v1alpha1.CreateRoleResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role - 0, // 50: akuity.io.kargo.service.v1alpha1.GetRoleRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 142, // 51: akuity.io.kargo.service.v1alpha1.GetRoleResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role - 143, // 52: akuity.io.kargo.service.v1alpha1.GetRoleResponse.resources:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.RoleResources - 144, // 53: akuity.io.kargo.service.v1alpha1.Claims.claims:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Claim - 110, // 54: akuity.io.kargo.service.v1alpha1.GrantRequest.user_claims:type_name -> akuity.io.kargo.service.v1alpha1.Claims - 145, // 55: akuity.io.kargo.service.v1alpha1.GrantRequest.resource_details:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.ResourceDetails - 142, // 56: akuity.io.kargo.service.v1alpha1.GrantResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role - 142, // 57: akuity.io.kargo.service.v1alpha1.ListRolesResponse.roles:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role - 143, // 58: akuity.io.kargo.service.v1alpha1.ListRolesResponse.resources:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.RoleResources - 110, // 59: akuity.io.kargo.service.v1alpha1.RevokeRequest.user_claims:type_name -> akuity.io.kargo.service.v1alpha1.Claims - 145, // 60: akuity.io.kargo.service.v1alpha1.RevokeRequest.resource_details:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.ResourceDetails - 142, // 61: akuity.io.kargo.service.v1alpha1.RevokeResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role - 142, // 62: akuity.io.kargo.service.v1alpha1.UpdateRoleRequest.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role - 142, // 63: akuity.io.kargo.service.v1alpha1.UpdateRoleResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role - 146, // 64: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsResponse.config_maps:type_name -> k8s.io.api.core.v1.ConfigMap - 0, // 65: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 146, // 66: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapResponse.config_map:type_name -> k8s.io.api.core.v1.ConfigMap - 138, // 67: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsResponse.secrets:type_name -> k8s.io.api.core.v1.Secret - 0, // 68: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat - 138, // 69: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretResponse.secret:type_name -> k8s.io.api.core.v1.Secret - 6, // 70: akuity.io.kargo.service.v1alpha1.GetConfigResponse.ArgocdShardsEntry.value:type_name -> akuity.io.kargo.service.v1alpha1.ArgoCDShard - 29, // 71: akuity.io.kargo.service.v1alpha1.ListImagesResponse.ImagesEntry.value:type_name -> akuity.io.kargo.service.v1alpha1.TagMap - 30, // 72: akuity.io.kargo.service.v1alpha1.TagMap.TagsEntry.value:type_name -> akuity.io.kargo.service.v1alpha1.ImageStageMap - 67, // 73: akuity.io.kargo.service.v1alpha1.QueryFreightResponse.GroupsEntry.value:type_name -> akuity.io.kargo.service.v1alpha1.FreightList - 3, // 74: akuity.io.kargo.service.v1alpha1.KargoService.GetVersionInfo:input_type -> akuity.io.kargo.service.v1alpha1.GetVersionInfoRequest - 5, // 75: akuity.io.kargo.service.v1alpha1.KargoService.GetConfig:input_type -> akuity.io.kargo.service.v1alpha1.GetConfigRequest - 8, // 76: akuity.io.kargo.service.v1alpha1.KargoService.GetPublicConfig:input_type -> akuity.io.kargo.service.v1alpha1.GetPublicConfigRequest - 11, // 77: akuity.io.kargo.service.v1alpha1.KargoService.AdminLogin:input_type -> akuity.io.kargo.service.v1alpha1.AdminLoginRequest - 13, // 78: akuity.io.kargo.service.v1alpha1.KargoService.CreateResource:input_type -> akuity.io.kargo.service.v1alpha1.CreateResourceRequest - 16, // 79: akuity.io.kargo.service.v1alpha1.KargoService.CreateOrUpdateResource:input_type -> akuity.io.kargo.service.v1alpha1.CreateOrUpdateResourceRequest - 19, // 80: akuity.io.kargo.service.v1alpha1.KargoService.UpdateResource:input_type -> akuity.io.kargo.service.v1alpha1.UpdateResourceRequest - 22, // 81: akuity.io.kargo.service.v1alpha1.KargoService.DeleteResource:input_type -> akuity.io.kargo.service.v1alpha1.DeleteResourceRequest - 25, // 82: akuity.io.kargo.service.v1alpha1.KargoService.ListStages:input_type -> akuity.io.kargo.service.v1alpha1.ListStagesRequest - 27, // 83: akuity.io.kargo.service.v1alpha1.KargoService.ListImages:input_type -> akuity.io.kargo.service.v1alpha1.ListImagesRequest - 31, // 84: akuity.io.kargo.service.v1alpha1.KargoService.GetStage:input_type -> akuity.io.kargo.service.v1alpha1.GetStageRequest - 33, // 85: akuity.io.kargo.service.v1alpha1.KargoService.WatchStages:input_type -> akuity.io.kargo.service.v1alpha1.WatchStagesRequest - 35, // 86: akuity.io.kargo.service.v1alpha1.KargoService.DeleteStage:input_type -> akuity.io.kargo.service.v1alpha1.DeleteStageRequest - 37, // 87: akuity.io.kargo.service.v1alpha1.KargoService.RefreshStage:input_type -> akuity.io.kargo.service.v1alpha1.RefreshStageRequest - 39, // 88: akuity.io.kargo.service.v1alpha1.KargoService.ListPromotions:input_type -> akuity.io.kargo.service.v1alpha1.ListPromotionsRequest - 41, // 89: akuity.io.kargo.service.v1alpha1.KargoService.WatchPromotions:input_type -> akuity.io.kargo.service.v1alpha1.WatchPromotionsRequest - 43, // 90: akuity.io.kargo.service.v1alpha1.KargoService.GetPromotion:input_type -> akuity.io.kargo.service.v1alpha1.GetPromotionRequest - 45, // 91: akuity.io.kargo.service.v1alpha1.KargoService.WatchPromotion:input_type -> akuity.io.kargo.service.v1alpha1.WatchPromotionRequest - 47, // 92: akuity.io.kargo.service.v1alpha1.KargoService.AbortPromotion:input_type -> akuity.io.kargo.service.v1alpha1.AbortPromotionRequest - 49, // 93: akuity.io.kargo.service.v1alpha1.KargoService.DeleteProject:input_type -> akuity.io.kargo.service.v1alpha1.DeleteProjectRequest - 51, // 94: akuity.io.kargo.service.v1alpha1.KargoService.GetProject:input_type -> akuity.io.kargo.service.v1alpha1.GetProjectRequest - 53, // 95: akuity.io.kargo.service.v1alpha1.KargoService.ListProjects:input_type -> akuity.io.kargo.service.v1alpha1.ListProjectsRequest - 55, // 96: akuity.io.kargo.service.v1alpha1.KargoService.ApproveFreight:input_type -> akuity.io.kargo.service.v1alpha1.ApproveFreightRequest - 57, // 97: akuity.io.kargo.service.v1alpha1.KargoService.DeleteFreight:input_type -> akuity.io.kargo.service.v1alpha1.DeleteFreightRequest - 59, // 98: akuity.io.kargo.service.v1alpha1.KargoService.GetFreight:input_type -> akuity.io.kargo.service.v1alpha1.GetFreightRequest - 61, // 99: akuity.io.kargo.service.v1alpha1.KargoService.PromoteToStage:input_type -> akuity.io.kargo.service.v1alpha1.PromoteToStageRequest - 63, // 100: akuity.io.kargo.service.v1alpha1.KargoService.PromoteDownstream:input_type -> akuity.io.kargo.service.v1alpha1.PromoteDownstreamRequest - 65, // 101: akuity.io.kargo.service.v1alpha1.KargoService.QueryFreight:input_type -> akuity.io.kargo.service.v1alpha1.QueryFreightRequest - 68, // 102: akuity.io.kargo.service.v1alpha1.KargoService.UpdateFreightAlias:input_type -> akuity.io.kargo.service.v1alpha1.UpdateFreightAliasRequest - 70, // 103: akuity.io.kargo.service.v1alpha1.KargoService.Reverify:input_type -> akuity.io.kargo.service.v1alpha1.ReverifyRequest - 72, // 104: akuity.io.kargo.service.v1alpha1.KargoService.AbortVerification:input_type -> akuity.io.kargo.service.v1alpha1.AbortVerificationRequest - 74, // 105: akuity.io.kargo.service.v1alpha1.KargoService.ListWarehouses:input_type -> akuity.io.kargo.service.v1alpha1.ListWarehousesRequest - 76, // 106: akuity.io.kargo.service.v1alpha1.KargoService.GetWarehouse:input_type -> akuity.io.kargo.service.v1alpha1.GetWarehouseRequest - 78, // 107: akuity.io.kargo.service.v1alpha1.KargoService.WatchWarehouses:input_type -> akuity.io.kargo.service.v1alpha1.WatchWarehousesRequest - 80, // 108: akuity.io.kargo.service.v1alpha1.KargoService.DeleteWarehouse:input_type -> akuity.io.kargo.service.v1alpha1.DeleteWarehouseRequest - 82, // 109: akuity.io.kargo.service.v1alpha1.KargoService.RefreshWarehouse:input_type -> akuity.io.kargo.service.v1alpha1.RefreshWarehouseRequest - 84, // 110: akuity.io.kargo.service.v1alpha1.KargoService.CreateCredentials:input_type -> akuity.io.kargo.service.v1alpha1.CreateCredentialsRequest - 86, // 111: akuity.io.kargo.service.v1alpha1.KargoService.DeleteCredentials:input_type -> akuity.io.kargo.service.v1alpha1.DeleteCredentialsRequest - 88, // 112: akuity.io.kargo.service.v1alpha1.KargoService.GetCredentials:input_type -> akuity.io.kargo.service.v1alpha1.GetCredentialsRequest - 90, // 113: akuity.io.kargo.service.v1alpha1.KargoService.ListCredentials:input_type -> akuity.io.kargo.service.v1alpha1.ListCredentialsRequest - 92, // 114: akuity.io.kargo.service.v1alpha1.KargoService.UpdateCredentials:input_type -> akuity.io.kargo.service.v1alpha1.UpdateCredentialsRequest - 94, // 115: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplates:input_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplatesRequest - 96, // 116: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplate:input_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateRequest - 100, // 117: akuity.io.kargo.service.v1alpha1.KargoService.DeleteAnalysisTemplate:input_type -> akuity.io.kargo.service.v1alpha1.DeleteAnalysisTemplateRequest - 98, // 118: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisRun:input_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisRunRequest - 119, // 119: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplateConfigMaps:input_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsRequest - 121, // 120: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplateConfigMap:input_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapRequest - 123, // 121: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplateSecrets:input_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsRequest - 125, // 122: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplateSecret:input_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretRequest - 102, // 123: akuity.io.kargo.service.v1alpha1.KargoService.ListProjectEvents:input_type -> akuity.io.kargo.service.v1alpha1.ListProjectEventsRequest - 104, // 124: akuity.io.kargo.service.v1alpha1.KargoService.CreateRole:input_type -> akuity.io.kargo.service.v1alpha1.CreateRoleRequest - 106, // 125: akuity.io.kargo.service.v1alpha1.KargoService.DeleteRole:input_type -> akuity.io.kargo.service.v1alpha1.DeleteRoleRequest - 108, // 126: akuity.io.kargo.service.v1alpha1.KargoService.GetRole:input_type -> akuity.io.kargo.service.v1alpha1.GetRoleRequest - 111, // 127: akuity.io.kargo.service.v1alpha1.KargoService.Grant:input_type -> akuity.io.kargo.service.v1alpha1.GrantRequest - 113, // 128: akuity.io.kargo.service.v1alpha1.KargoService.ListRoles:input_type -> akuity.io.kargo.service.v1alpha1.ListRolesRequest - 115, // 129: akuity.io.kargo.service.v1alpha1.KargoService.Revoke:input_type -> akuity.io.kargo.service.v1alpha1.RevokeRequest - 117, // 130: akuity.io.kargo.service.v1alpha1.KargoService.UpdateRole:input_type -> akuity.io.kargo.service.v1alpha1.UpdateRoleRequest - 4, // 131: akuity.io.kargo.service.v1alpha1.KargoService.GetVersionInfo:output_type -> akuity.io.kargo.service.v1alpha1.GetVersionInfoResponse - 7, // 132: akuity.io.kargo.service.v1alpha1.KargoService.GetConfig:output_type -> akuity.io.kargo.service.v1alpha1.GetConfigResponse - 9, // 133: akuity.io.kargo.service.v1alpha1.KargoService.GetPublicConfig:output_type -> akuity.io.kargo.service.v1alpha1.GetPublicConfigResponse - 12, // 134: akuity.io.kargo.service.v1alpha1.KargoService.AdminLogin:output_type -> akuity.io.kargo.service.v1alpha1.AdminLoginResponse - 15, // 135: akuity.io.kargo.service.v1alpha1.KargoService.CreateResource:output_type -> akuity.io.kargo.service.v1alpha1.CreateResourceResponse - 18, // 136: akuity.io.kargo.service.v1alpha1.KargoService.CreateOrUpdateResource:output_type -> akuity.io.kargo.service.v1alpha1.CreateOrUpdateResourceResponse - 21, // 137: akuity.io.kargo.service.v1alpha1.KargoService.UpdateResource:output_type -> akuity.io.kargo.service.v1alpha1.UpdateResourceResponse - 24, // 138: akuity.io.kargo.service.v1alpha1.KargoService.DeleteResource:output_type -> akuity.io.kargo.service.v1alpha1.DeleteResourceResponse - 26, // 139: akuity.io.kargo.service.v1alpha1.KargoService.ListStages:output_type -> akuity.io.kargo.service.v1alpha1.ListStagesResponse - 28, // 140: akuity.io.kargo.service.v1alpha1.KargoService.ListImages:output_type -> akuity.io.kargo.service.v1alpha1.ListImagesResponse - 32, // 141: akuity.io.kargo.service.v1alpha1.KargoService.GetStage:output_type -> akuity.io.kargo.service.v1alpha1.GetStageResponse - 34, // 142: akuity.io.kargo.service.v1alpha1.KargoService.WatchStages:output_type -> akuity.io.kargo.service.v1alpha1.WatchStagesResponse - 36, // 143: akuity.io.kargo.service.v1alpha1.KargoService.DeleteStage:output_type -> akuity.io.kargo.service.v1alpha1.DeleteStageResponse - 38, // 144: akuity.io.kargo.service.v1alpha1.KargoService.RefreshStage:output_type -> akuity.io.kargo.service.v1alpha1.RefreshStageResponse - 40, // 145: akuity.io.kargo.service.v1alpha1.KargoService.ListPromotions:output_type -> akuity.io.kargo.service.v1alpha1.ListPromotionsResponse - 42, // 146: akuity.io.kargo.service.v1alpha1.KargoService.WatchPromotions:output_type -> akuity.io.kargo.service.v1alpha1.WatchPromotionsResponse - 44, // 147: akuity.io.kargo.service.v1alpha1.KargoService.GetPromotion:output_type -> akuity.io.kargo.service.v1alpha1.GetPromotionResponse - 46, // 148: akuity.io.kargo.service.v1alpha1.KargoService.WatchPromotion:output_type -> akuity.io.kargo.service.v1alpha1.WatchPromotionResponse - 48, // 149: akuity.io.kargo.service.v1alpha1.KargoService.AbortPromotion:output_type -> akuity.io.kargo.service.v1alpha1.AbortPromotionResponse - 50, // 150: akuity.io.kargo.service.v1alpha1.KargoService.DeleteProject:output_type -> akuity.io.kargo.service.v1alpha1.DeleteProjectResponse - 52, // 151: akuity.io.kargo.service.v1alpha1.KargoService.GetProject:output_type -> akuity.io.kargo.service.v1alpha1.GetProjectResponse - 54, // 152: akuity.io.kargo.service.v1alpha1.KargoService.ListProjects:output_type -> akuity.io.kargo.service.v1alpha1.ListProjectsResponse - 56, // 153: akuity.io.kargo.service.v1alpha1.KargoService.ApproveFreight:output_type -> akuity.io.kargo.service.v1alpha1.ApproveFreightResponse - 58, // 154: akuity.io.kargo.service.v1alpha1.KargoService.DeleteFreight:output_type -> akuity.io.kargo.service.v1alpha1.DeleteFreightResponse - 60, // 155: akuity.io.kargo.service.v1alpha1.KargoService.GetFreight:output_type -> akuity.io.kargo.service.v1alpha1.GetFreightResponse - 62, // 156: akuity.io.kargo.service.v1alpha1.KargoService.PromoteToStage:output_type -> akuity.io.kargo.service.v1alpha1.PromoteToStageResponse - 64, // 157: akuity.io.kargo.service.v1alpha1.KargoService.PromoteDownstream:output_type -> akuity.io.kargo.service.v1alpha1.PromoteDownstreamResponse - 66, // 158: akuity.io.kargo.service.v1alpha1.KargoService.QueryFreight:output_type -> akuity.io.kargo.service.v1alpha1.QueryFreightResponse - 69, // 159: akuity.io.kargo.service.v1alpha1.KargoService.UpdateFreightAlias:output_type -> akuity.io.kargo.service.v1alpha1.UpdateFreightAliasResponse - 71, // 160: akuity.io.kargo.service.v1alpha1.KargoService.Reverify:output_type -> akuity.io.kargo.service.v1alpha1.ReverifyResponse - 73, // 161: akuity.io.kargo.service.v1alpha1.KargoService.AbortVerification:output_type -> akuity.io.kargo.service.v1alpha1.AbortVerificationResponse - 75, // 162: akuity.io.kargo.service.v1alpha1.KargoService.ListWarehouses:output_type -> akuity.io.kargo.service.v1alpha1.ListWarehousesResponse - 77, // 163: akuity.io.kargo.service.v1alpha1.KargoService.GetWarehouse:output_type -> akuity.io.kargo.service.v1alpha1.GetWarehouseResponse - 79, // 164: akuity.io.kargo.service.v1alpha1.KargoService.WatchWarehouses:output_type -> akuity.io.kargo.service.v1alpha1.WatchWarehousesResponse - 81, // 165: akuity.io.kargo.service.v1alpha1.KargoService.DeleteWarehouse:output_type -> akuity.io.kargo.service.v1alpha1.DeleteWarehouseResponse - 83, // 166: akuity.io.kargo.service.v1alpha1.KargoService.RefreshWarehouse:output_type -> akuity.io.kargo.service.v1alpha1.RefreshWarehouseResponse - 85, // 167: akuity.io.kargo.service.v1alpha1.KargoService.CreateCredentials:output_type -> akuity.io.kargo.service.v1alpha1.CreateCredentialsResponse - 87, // 168: akuity.io.kargo.service.v1alpha1.KargoService.DeleteCredentials:output_type -> akuity.io.kargo.service.v1alpha1.DeleteCredentialsResponse - 89, // 169: akuity.io.kargo.service.v1alpha1.KargoService.GetCredentials:output_type -> akuity.io.kargo.service.v1alpha1.GetCredentialsResponse - 91, // 170: akuity.io.kargo.service.v1alpha1.KargoService.ListCredentials:output_type -> akuity.io.kargo.service.v1alpha1.ListCredentialsResponse - 93, // 171: akuity.io.kargo.service.v1alpha1.KargoService.UpdateCredentials:output_type -> akuity.io.kargo.service.v1alpha1.UpdateCredentialsResponse - 95, // 172: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplates:output_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplatesResponse - 97, // 173: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplate:output_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateResponse - 101, // 174: akuity.io.kargo.service.v1alpha1.KargoService.DeleteAnalysisTemplate:output_type -> akuity.io.kargo.service.v1alpha1.DeleteAnalysisTemplateResponse - 99, // 175: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisRun:output_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisRunResponse - 120, // 176: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplateConfigMaps:output_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsResponse - 122, // 177: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplateConfigMap:output_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapResponse - 124, // 178: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplateSecrets:output_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsResponse - 126, // 179: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplateSecret:output_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretResponse - 103, // 180: akuity.io.kargo.service.v1alpha1.KargoService.ListProjectEvents:output_type -> akuity.io.kargo.service.v1alpha1.ListProjectEventsResponse - 105, // 181: akuity.io.kargo.service.v1alpha1.KargoService.CreateRole:output_type -> akuity.io.kargo.service.v1alpha1.CreateRoleResponse - 107, // 182: akuity.io.kargo.service.v1alpha1.KargoService.DeleteRole:output_type -> akuity.io.kargo.service.v1alpha1.DeleteRoleResponse - 109, // 183: akuity.io.kargo.service.v1alpha1.KargoService.GetRole:output_type -> akuity.io.kargo.service.v1alpha1.GetRoleResponse - 112, // 184: akuity.io.kargo.service.v1alpha1.KargoService.Grant:output_type -> akuity.io.kargo.service.v1alpha1.GrantResponse - 114, // 185: akuity.io.kargo.service.v1alpha1.KargoService.ListRoles:output_type -> akuity.io.kargo.service.v1alpha1.ListRolesResponse - 116, // 186: akuity.io.kargo.service.v1alpha1.KargoService.Revoke:output_type -> akuity.io.kargo.service.v1alpha1.RevokeResponse - 118, // 187: akuity.io.kargo.service.v1alpha1.KargoService.UpdateRole:output_type -> akuity.io.kargo.service.v1alpha1.UpdateRoleResponse - 131, // [131:188] is the sub-list for method output_type - 74, // [74:131] is the sub-list for method input_type - 74, // [74:74] is the sub-list for extension type_name - 74, // [74:74] is the sub-list for extension extendee - 0, // [0:74] is the sub-list for field type_name + 147, // 34: akuity.io.kargo.service.v1alpha1.GetWarehouseResponse.warehouse:type_name -> github.com.akuity.kargo.api.v1alpha1.Warehouse + 147, // 35: akuity.io.kargo.service.v1alpha1.WatchWarehousesResponse.warehouse:type_name -> github.com.akuity.kargo.api.v1alpha1.Warehouse + 147, // 36: akuity.io.kargo.service.v1alpha1.RefreshWarehouseResponse.warehouse:type_name -> github.com.akuity.kargo.api.v1alpha1.Warehouse + 148, // 37: akuity.io.kargo.service.v1alpha1.ListProjectSecretsResponse.secrets:type_name -> k8s.io.api.core.v1.Secret + 140, // 38: akuity.io.kargo.service.v1alpha1.CreateProjectSecretRequest.data:type_name -> akuity.io.kargo.service.v1alpha1.CreateProjectSecretRequest.DataEntry + 148, // 39: akuity.io.kargo.service.v1alpha1.CreateProjectSecretResponse.secret:type_name -> k8s.io.api.core.v1.Secret + 141, // 40: akuity.io.kargo.service.v1alpha1.UpdateProjectSecretRequest.data:type_name -> akuity.io.kargo.service.v1alpha1.UpdateProjectSecretRequest.DataEntry + 148, // 41: akuity.io.kargo.service.v1alpha1.UpdateProjectSecretResponse.secret:type_name -> k8s.io.api.core.v1.Secret + 148, // 42: akuity.io.kargo.service.v1alpha1.CreateCredentialsResponse.credentials:type_name -> k8s.io.api.core.v1.Secret + 0, // 43: akuity.io.kargo.service.v1alpha1.GetCredentialsRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat + 148, // 44: akuity.io.kargo.service.v1alpha1.GetCredentialsResponse.credentials:type_name -> k8s.io.api.core.v1.Secret + 148, // 45: akuity.io.kargo.service.v1alpha1.ListCredentialsResponse.credentials:type_name -> k8s.io.api.core.v1.Secret + 148, // 46: akuity.io.kargo.service.v1alpha1.UpdateCredentialsResponse.credentials:type_name -> k8s.io.api.core.v1.Secret + 149, // 47: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplatesResponse.analysis_templates:type_name -> github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisTemplate + 0, // 48: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat + 149, // 49: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateResponse.analysis_template:type_name -> github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisTemplate + 0, // 50: akuity.io.kargo.service.v1alpha1.GetAnalysisRunRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat + 150, // 51: akuity.io.kargo.service.v1alpha1.GetAnalysisRunResponse.analysis_run:type_name -> github.com.akuity.kargo.internal.controller.rollouts.api.v1alpha1.AnalysisRun + 151, // 52: akuity.io.kargo.service.v1alpha1.ListProjectEventsResponse.events:type_name -> k8s.io.api.core.v1.Event + 152, // 53: akuity.io.kargo.service.v1alpha1.CreateRoleRequest.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role + 152, // 54: akuity.io.kargo.service.v1alpha1.CreateRoleResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role + 0, // 55: akuity.io.kargo.service.v1alpha1.GetRoleRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat + 152, // 56: akuity.io.kargo.service.v1alpha1.GetRoleResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role + 153, // 57: akuity.io.kargo.service.v1alpha1.GetRoleResponse.resources:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.RoleResources + 154, // 58: akuity.io.kargo.service.v1alpha1.Claims.claims:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Claim + 118, // 59: akuity.io.kargo.service.v1alpha1.GrantRequest.user_claims:type_name -> akuity.io.kargo.service.v1alpha1.Claims + 155, // 60: akuity.io.kargo.service.v1alpha1.GrantRequest.resource_details:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.ResourceDetails + 152, // 61: akuity.io.kargo.service.v1alpha1.GrantResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role + 152, // 62: akuity.io.kargo.service.v1alpha1.ListRolesResponse.roles:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role + 153, // 63: akuity.io.kargo.service.v1alpha1.ListRolesResponse.resources:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.RoleResources + 118, // 64: akuity.io.kargo.service.v1alpha1.RevokeRequest.user_claims:type_name -> akuity.io.kargo.service.v1alpha1.Claims + 155, // 65: akuity.io.kargo.service.v1alpha1.RevokeRequest.resource_details:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.ResourceDetails + 152, // 66: akuity.io.kargo.service.v1alpha1.RevokeResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role + 152, // 67: akuity.io.kargo.service.v1alpha1.UpdateRoleRequest.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role + 152, // 68: akuity.io.kargo.service.v1alpha1.UpdateRoleResponse.role:type_name -> github.com.akuity.kargo.api.rbac.v1alpha1.Role + 156, // 69: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsResponse.config_maps:type_name -> k8s.io.api.core.v1.ConfigMap + 0, // 70: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat + 156, // 71: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapResponse.config_map:type_name -> k8s.io.api.core.v1.ConfigMap + 148, // 72: akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsResponse.secrets:type_name -> k8s.io.api.core.v1.Secret + 0, // 73: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretRequest.format:type_name -> akuity.io.kargo.service.v1alpha1.RawFormat + 148, // 74: akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretResponse.secret:type_name -> k8s.io.api.core.v1.Secret + 6, // 75: akuity.io.kargo.service.v1alpha1.GetConfigResponse.ArgocdShardsEntry.value:type_name -> akuity.io.kargo.service.v1alpha1.ArgoCDShard + 29, // 76: akuity.io.kargo.service.v1alpha1.ListImagesResponse.ImagesEntry.value:type_name -> akuity.io.kargo.service.v1alpha1.TagMap + 30, // 77: akuity.io.kargo.service.v1alpha1.TagMap.TagsEntry.value:type_name -> akuity.io.kargo.service.v1alpha1.ImageStageMap + 67, // 78: akuity.io.kargo.service.v1alpha1.QueryFreightResponse.GroupsEntry.value:type_name -> akuity.io.kargo.service.v1alpha1.FreightList + 3, // 79: akuity.io.kargo.service.v1alpha1.KargoService.GetVersionInfo:input_type -> akuity.io.kargo.service.v1alpha1.GetVersionInfoRequest + 5, // 80: akuity.io.kargo.service.v1alpha1.KargoService.GetConfig:input_type -> akuity.io.kargo.service.v1alpha1.GetConfigRequest + 8, // 81: akuity.io.kargo.service.v1alpha1.KargoService.GetPublicConfig:input_type -> akuity.io.kargo.service.v1alpha1.GetPublicConfigRequest + 11, // 82: akuity.io.kargo.service.v1alpha1.KargoService.AdminLogin:input_type -> akuity.io.kargo.service.v1alpha1.AdminLoginRequest + 13, // 83: akuity.io.kargo.service.v1alpha1.KargoService.CreateResource:input_type -> akuity.io.kargo.service.v1alpha1.CreateResourceRequest + 16, // 84: akuity.io.kargo.service.v1alpha1.KargoService.CreateOrUpdateResource:input_type -> akuity.io.kargo.service.v1alpha1.CreateOrUpdateResourceRequest + 19, // 85: akuity.io.kargo.service.v1alpha1.KargoService.UpdateResource:input_type -> akuity.io.kargo.service.v1alpha1.UpdateResourceRequest + 22, // 86: akuity.io.kargo.service.v1alpha1.KargoService.DeleteResource:input_type -> akuity.io.kargo.service.v1alpha1.DeleteResourceRequest + 25, // 87: akuity.io.kargo.service.v1alpha1.KargoService.ListStages:input_type -> akuity.io.kargo.service.v1alpha1.ListStagesRequest + 27, // 88: akuity.io.kargo.service.v1alpha1.KargoService.ListImages:input_type -> akuity.io.kargo.service.v1alpha1.ListImagesRequest + 31, // 89: akuity.io.kargo.service.v1alpha1.KargoService.GetStage:input_type -> akuity.io.kargo.service.v1alpha1.GetStageRequest + 33, // 90: akuity.io.kargo.service.v1alpha1.KargoService.WatchStages:input_type -> akuity.io.kargo.service.v1alpha1.WatchStagesRequest + 35, // 91: akuity.io.kargo.service.v1alpha1.KargoService.DeleteStage:input_type -> akuity.io.kargo.service.v1alpha1.DeleteStageRequest + 37, // 92: akuity.io.kargo.service.v1alpha1.KargoService.RefreshStage:input_type -> akuity.io.kargo.service.v1alpha1.RefreshStageRequest + 39, // 93: akuity.io.kargo.service.v1alpha1.KargoService.ListPromotions:input_type -> akuity.io.kargo.service.v1alpha1.ListPromotionsRequest + 41, // 94: akuity.io.kargo.service.v1alpha1.KargoService.WatchPromotions:input_type -> akuity.io.kargo.service.v1alpha1.WatchPromotionsRequest + 43, // 95: akuity.io.kargo.service.v1alpha1.KargoService.GetPromotion:input_type -> akuity.io.kargo.service.v1alpha1.GetPromotionRequest + 45, // 96: akuity.io.kargo.service.v1alpha1.KargoService.WatchPromotion:input_type -> akuity.io.kargo.service.v1alpha1.WatchPromotionRequest + 47, // 97: akuity.io.kargo.service.v1alpha1.KargoService.AbortPromotion:input_type -> akuity.io.kargo.service.v1alpha1.AbortPromotionRequest + 49, // 98: akuity.io.kargo.service.v1alpha1.KargoService.DeleteProject:input_type -> akuity.io.kargo.service.v1alpha1.DeleteProjectRequest + 51, // 99: akuity.io.kargo.service.v1alpha1.KargoService.GetProject:input_type -> akuity.io.kargo.service.v1alpha1.GetProjectRequest + 53, // 100: akuity.io.kargo.service.v1alpha1.KargoService.ListProjects:input_type -> akuity.io.kargo.service.v1alpha1.ListProjectsRequest + 55, // 101: akuity.io.kargo.service.v1alpha1.KargoService.ApproveFreight:input_type -> akuity.io.kargo.service.v1alpha1.ApproveFreightRequest + 57, // 102: akuity.io.kargo.service.v1alpha1.KargoService.DeleteFreight:input_type -> akuity.io.kargo.service.v1alpha1.DeleteFreightRequest + 59, // 103: akuity.io.kargo.service.v1alpha1.KargoService.GetFreight:input_type -> akuity.io.kargo.service.v1alpha1.GetFreightRequest + 61, // 104: akuity.io.kargo.service.v1alpha1.KargoService.PromoteToStage:input_type -> akuity.io.kargo.service.v1alpha1.PromoteToStageRequest + 63, // 105: akuity.io.kargo.service.v1alpha1.KargoService.PromoteDownstream:input_type -> akuity.io.kargo.service.v1alpha1.PromoteDownstreamRequest + 65, // 106: akuity.io.kargo.service.v1alpha1.KargoService.QueryFreight:input_type -> akuity.io.kargo.service.v1alpha1.QueryFreightRequest + 68, // 107: akuity.io.kargo.service.v1alpha1.KargoService.UpdateFreightAlias:input_type -> akuity.io.kargo.service.v1alpha1.UpdateFreightAliasRequest + 70, // 108: akuity.io.kargo.service.v1alpha1.KargoService.Reverify:input_type -> akuity.io.kargo.service.v1alpha1.ReverifyRequest + 72, // 109: akuity.io.kargo.service.v1alpha1.KargoService.AbortVerification:input_type -> akuity.io.kargo.service.v1alpha1.AbortVerificationRequest + 74, // 110: akuity.io.kargo.service.v1alpha1.KargoService.ListWarehouses:input_type -> akuity.io.kargo.service.v1alpha1.ListWarehousesRequest + 76, // 111: akuity.io.kargo.service.v1alpha1.KargoService.GetWarehouse:input_type -> akuity.io.kargo.service.v1alpha1.GetWarehouseRequest + 78, // 112: akuity.io.kargo.service.v1alpha1.KargoService.WatchWarehouses:input_type -> akuity.io.kargo.service.v1alpha1.WatchWarehousesRequest + 80, // 113: akuity.io.kargo.service.v1alpha1.KargoService.DeleteWarehouse:input_type -> akuity.io.kargo.service.v1alpha1.DeleteWarehouseRequest + 82, // 114: akuity.io.kargo.service.v1alpha1.KargoService.RefreshWarehouse:input_type -> akuity.io.kargo.service.v1alpha1.RefreshWarehouseRequest + 92, // 115: akuity.io.kargo.service.v1alpha1.KargoService.CreateCredentials:input_type -> akuity.io.kargo.service.v1alpha1.CreateCredentialsRequest + 94, // 116: akuity.io.kargo.service.v1alpha1.KargoService.DeleteCredentials:input_type -> akuity.io.kargo.service.v1alpha1.DeleteCredentialsRequest + 96, // 117: akuity.io.kargo.service.v1alpha1.KargoService.GetCredentials:input_type -> akuity.io.kargo.service.v1alpha1.GetCredentialsRequest + 98, // 118: akuity.io.kargo.service.v1alpha1.KargoService.ListCredentials:input_type -> akuity.io.kargo.service.v1alpha1.ListCredentialsRequest + 100, // 119: akuity.io.kargo.service.v1alpha1.KargoService.UpdateCredentials:input_type -> akuity.io.kargo.service.v1alpha1.UpdateCredentialsRequest + 84, // 120: akuity.io.kargo.service.v1alpha1.KargoService.ListProjectSecrets:input_type -> akuity.io.kargo.service.v1alpha1.ListProjectSecretsRequest + 86, // 121: akuity.io.kargo.service.v1alpha1.KargoService.CreateProjectSecret:input_type -> akuity.io.kargo.service.v1alpha1.CreateProjectSecretRequest + 88, // 122: akuity.io.kargo.service.v1alpha1.KargoService.UpdateProjectSecret:input_type -> akuity.io.kargo.service.v1alpha1.UpdateProjectSecretRequest + 90, // 123: akuity.io.kargo.service.v1alpha1.KargoService.DeleteProjectSecret:input_type -> akuity.io.kargo.service.v1alpha1.DeleteProjectSecretRequest + 102, // 124: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplates:input_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplatesRequest + 104, // 125: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplate:input_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateRequest + 108, // 126: akuity.io.kargo.service.v1alpha1.KargoService.DeleteAnalysisTemplate:input_type -> akuity.io.kargo.service.v1alpha1.DeleteAnalysisTemplateRequest + 106, // 127: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisRun:input_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisRunRequest + 127, // 128: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplateConfigMaps:input_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsRequest + 129, // 129: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplateConfigMap:input_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapRequest + 131, // 130: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplateSecrets:input_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsRequest + 133, // 131: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplateSecret:input_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretRequest + 110, // 132: akuity.io.kargo.service.v1alpha1.KargoService.ListProjectEvents:input_type -> akuity.io.kargo.service.v1alpha1.ListProjectEventsRequest + 112, // 133: akuity.io.kargo.service.v1alpha1.KargoService.CreateRole:input_type -> akuity.io.kargo.service.v1alpha1.CreateRoleRequest + 114, // 134: akuity.io.kargo.service.v1alpha1.KargoService.DeleteRole:input_type -> akuity.io.kargo.service.v1alpha1.DeleteRoleRequest + 116, // 135: akuity.io.kargo.service.v1alpha1.KargoService.GetRole:input_type -> akuity.io.kargo.service.v1alpha1.GetRoleRequest + 119, // 136: akuity.io.kargo.service.v1alpha1.KargoService.Grant:input_type -> akuity.io.kargo.service.v1alpha1.GrantRequest + 121, // 137: akuity.io.kargo.service.v1alpha1.KargoService.ListRoles:input_type -> akuity.io.kargo.service.v1alpha1.ListRolesRequest + 123, // 138: akuity.io.kargo.service.v1alpha1.KargoService.Revoke:input_type -> akuity.io.kargo.service.v1alpha1.RevokeRequest + 125, // 139: akuity.io.kargo.service.v1alpha1.KargoService.UpdateRole:input_type -> akuity.io.kargo.service.v1alpha1.UpdateRoleRequest + 4, // 140: akuity.io.kargo.service.v1alpha1.KargoService.GetVersionInfo:output_type -> akuity.io.kargo.service.v1alpha1.GetVersionInfoResponse + 7, // 141: akuity.io.kargo.service.v1alpha1.KargoService.GetConfig:output_type -> akuity.io.kargo.service.v1alpha1.GetConfigResponse + 9, // 142: akuity.io.kargo.service.v1alpha1.KargoService.GetPublicConfig:output_type -> akuity.io.kargo.service.v1alpha1.GetPublicConfigResponse + 12, // 143: akuity.io.kargo.service.v1alpha1.KargoService.AdminLogin:output_type -> akuity.io.kargo.service.v1alpha1.AdminLoginResponse + 15, // 144: akuity.io.kargo.service.v1alpha1.KargoService.CreateResource:output_type -> akuity.io.kargo.service.v1alpha1.CreateResourceResponse + 18, // 145: akuity.io.kargo.service.v1alpha1.KargoService.CreateOrUpdateResource:output_type -> akuity.io.kargo.service.v1alpha1.CreateOrUpdateResourceResponse + 21, // 146: akuity.io.kargo.service.v1alpha1.KargoService.UpdateResource:output_type -> akuity.io.kargo.service.v1alpha1.UpdateResourceResponse + 24, // 147: akuity.io.kargo.service.v1alpha1.KargoService.DeleteResource:output_type -> akuity.io.kargo.service.v1alpha1.DeleteResourceResponse + 26, // 148: akuity.io.kargo.service.v1alpha1.KargoService.ListStages:output_type -> akuity.io.kargo.service.v1alpha1.ListStagesResponse + 28, // 149: akuity.io.kargo.service.v1alpha1.KargoService.ListImages:output_type -> akuity.io.kargo.service.v1alpha1.ListImagesResponse + 32, // 150: akuity.io.kargo.service.v1alpha1.KargoService.GetStage:output_type -> akuity.io.kargo.service.v1alpha1.GetStageResponse + 34, // 151: akuity.io.kargo.service.v1alpha1.KargoService.WatchStages:output_type -> akuity.io.kargo.service.v1alpha1.WatchStagesResponse + 36, // 152: akuity.io.kargo.service.v1alpha1.KargoService.DeleteStage:output_type -> akuity.io.kargo.service.v1alpha1.DeleteStageResponse + 38, // 153: akuity.io.kargo.service.v1alpha1.KargoService.RefreshStage:output_type -> akuity.io.kargo.service.v1alpha1.RefreshStageResponse + 40, // 154: akuity.io.kargo.service.v1alpha1.KargoService.ListPromotions:output_type -> akuity.io.kargo.service.v1alpha1.ListPromotionsResponse + 42, // 155: akuity.io.kargo.service.v1alpha1.KargoService.WatchPromotions:output_type -> akuity.io.kargo.service.v1alpha1.WatchPromotionsResponse + 44, // 156: akuity.io.kargo.service.v1alpha1.KargoService.GetPromotion:output_type -> akuity.io.kargo.service.v1alpha1.GetPromotionResponse + 46, // 157: akuity.io.kargo.service.v1alpha1.KargoService.WatchPromotion:output_type -> akuity.io.kargo.service.v1alpha1.WatchPromotionResponse + 48, // 158: akuity.io.kargo.service.v1alpha1.KargoService.AbortPromotion:output_type -> akuity.io.kargo.service.v1alpha1.AbortPromotionResponse + 50, // 159: akuity.io.kargo.service.v1alpha1.KargoService.DeleteProject:output_type -> akuity.io.kargo.service.v1alpha1.DeleteProjectResponse + 52, // 160: akuity.io.kargo.service.v1alpha1.KargoService.GetProject:output_type -> akuity.io.kargo.service.v1alpha1.GetProjectResponse + 54, // 161: akuity.io.kargo.service.v1alpha1.KargoService.ListProjects:output_type -> akuity.io.kargo.service.v1alpha1.ListProjectsResponse + 56, // 162: akuity.io.kargo.service.v1alpha1.KargoService.ApproveFreight:output_type -> akuity.io.kargo.service.v1alpha1.ApproveFreightResponse + 58, // 163: akuity.io.kargo.service.v1alpha1.KargoService.DeleteFreight:output_type -> akuity.io.kargo.service.v1alpha1.DeleteFreightResponse + 60, // 164: akuity.io.kargo.service.v1alpha1.KargoService.GetFreight:output_type -> akuity.io.kargo.service.v1alpha1.GetFreightResponse + 62, // 165: akuity.io.kargo.service.v1alpha1.KargoService.PromoteToStage:output_type -> akuity.io.kargo.service.v1alpha1.PromoteToStageResponse + 64, // 166: akuity.io.kargo.service.v1alpha1.KargoService.PromoteDownstream:output_type -> akuity.io.kargo.service.v1alpha1.PromoteDownstreamResponse + 66, // 167: akuity.io.kargo.service.v1alpha1.KargoService.QueryFreight:output_type -> akuity.io.kargo.service.v1alpha1.QueryFreightResponse + 69, // 168: akuity.io.kargo.service.v1alpha1.KargoService.UpdateFreightAlias:output_type -> akuity.io.kargo.service.v1alpha1.UpdateFreightAliasResponse + 71, // 169: akuity.io.kargo.service.v1alpha1.KargoService.Reverify:output_type -> akuity.io.kargo.service.v1alpha1.ReverifyResponse + 73, // 170: akuity.io.kargo.service.v1alpha1.KargoService.AbortVerification:output_type -> akuity.io.kargo.service.v1alpha1.AbortVerificationResponse + 75, // 171: akuity.io.kargo.service.v1alpha1.KargoService.ListWarehouses:output_type -> akuity.io.kargo.service.v1alpha1.ListWarehousesResponse + 77, // 172: akuity.io.kargo.service.v1alpha1.KargoService.GetWarehouse:output_type -> akuity.io.kargo.service.v1alpha1.GetWarehouseResponse + 79, // 173: akuity.io.kargo.service.v1alpha1.KargoService.WatchWarehouses:output_type -> akuity.io.kargo.service.v1alpha1.WatchWarehousesResponse + 81, // 174: akuity.io.kargo.service.v1alpha1.KargoService.DeleteWarehouse:output_type -> akuity.io.kargo.service.v1alpha1.DeleteWarehouseResponse + 83, // 175: akuity.io.kargo.service.v1alpha1.KargoService.RefreshWarehouse:output_type -> akuity.io.kargo.service.v1alpha1.RefreshWarehouseResponse + 93, // 176: akuity.io.kargo.service.v1alpha1.KargoService.CreateCredentials:output_type -> akuity.io.kargo.service.v1alpha1.CreateCredentialsResponse + 95, // 177: akuity.io.kargo.service.v1alpha1.KargoService.DeleteCredentials:output_type -> akuity.io.kargo.service.v1alpha1.DeleteCredentialsResponse + 97, // 178: akuity.io.kargo.service.v1alpha1.KargoService.GetCredentials:output_type -> akuity.io.kargo.service.v1alpha1.GetCredentialsResponse + 99, // 179: akuity.io.kargo.service.v1alpha1.KargoService.ListCredentials:output_type -> akuity.io.kargo.service.v1alpha1.ListCredentialsResponse + 101, // 180: akuity.io.kargo.service.v1alpha1.KargoService.UpdateCredentials:output_type -> akuity.io.kargo.service.v1alpha1.UpdateCredentialsResponse + 85, // 181: akuity.io.kargo.service.v1alpha1.KargoService.ListProjectSecrets:output_type -> akuity.io.kargo.service.v1alpha1.ListProjectSecretsResponse + 87, // 182: akuity.io.kargo.service.v1alpha1.KargoService.CreateProjectSecret:output_type -> akuity.io.kargo.service.v1alpha1.CreateProjectSecretResponse + 89, // 183: akuity.io.kargo.service.v1alpha1.KargoService.UpdateProjectSecret:output_type -> akuity.io.kargo.service.v1alpha1.UpdateProjectSecretResponse + 91, // 184: akuity.io.kargo.service.v1alpha1.KargoService.DeleteProjectSecret:output_type -> akuity.io.kargo.service.v1alpha1.DeleteProjectSecretResponse + 103, // 185: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplates:output_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplatesResponse + 105, // 186: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplate:output_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateResponse + 109, // 187: akuity.io.kargo.service.v1alpha1.KargoService.DeleteAnalysisTemplate:output_type -> akuity.io.kargo.service.v1alpha1.DeleteAnalysisTemplateResponse + 107, // 188: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisRun:output_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisRunResponse + 128, // 189: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplateConfigMaps:output_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateConfigMapsResponse + 130, // 190: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplateConfigMap:output_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateConfigMapResponse + 132, // 191: akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplateSecrets:output_type -> akuity.io.kargo.service.v1alpha1.ListAnalysisTemplateSecretsResponse + 134, // 192: akuity.io.kargo.service.v1alpha1.KargoService.GetAnalysisTemplateSecret:output_type -> akuity.io.kargo.service.v1alpha1.GetAnalysisTemplateSecretResponse + 111, // 193: akuity.io.kargo.service.v1alpha1.KargoService.ListProjectEvents:output_type -> akuity.io.kargo.service.v1alpha1.ListProjectEventsResponse + 113, // 194: akuity.io.kargo.service.v1alpha1.KargoService.CreateRole:output_type -> akuity.io.kargo.service.v1alpha1.CreateRoleResponse + 115, // 195: akuity.io.kargo.service.v1alpha1.KargoService.DeleteRole:output_type -> akuity.io.kargo.service.v1alpha1.DeleteRoleResponse + 117, // 196: akuity.io.kargo.service.v1alpha1.KargoService.GetRole:output_type -> akuity.io.kargo.service.v1alpha1.GetRoleResponse + 120, // 197: akuity.io.kargo.service.v1alpha1.KargoService.Grant:output_type -> akuity.io.kargo.service.v1alpha1.GrantResponse + 122, // 198: akuity.io.kargo.service.v1alpha1.KargoService.ListRoles:output_type -> akuity.io.kargo.service.v1alpha1.ListRolesResponse + 124, // 199: akuity.io.kargo.service.v1alpha1.KargoService.Revoke:output_type -> akuity.io.kargo.service.v1alpha1.RevokeResponse + 126, // 200: akuity.io.kargo.service.v1alpha1.KargoService.UpdateRole:output_type -> akuity.io.kargo.service.v1alpha1.UpdateRoleResponse + 140, // [140:201] is the sub-list for method output_type + 79, // [79:140] is the sub-list for method input_type + 79, // [79:79] is the sub-list for extension type_name + 79, // [79:79] is the sub-list for extension extendee + 0, // [0:79] is the sub-list for field type_name } func init() { file_service_v1alpha1_service_proto_init() } @@ -9997,7 +10539,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateCredentialsRequest); i { + switch v := v.(*ListProjectSecretsRequest); i { case 0: return &v.state case 1: @@ -10009,7 +10551,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateCredentialsResponse); i { + switch v := v.(*ListProjectSecretsResponse); i { case 0: return &v.state case 1: @@ -10021,7 +10563,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteCredentialsRequest); i { + switch v := v.(*CreateProjectSecretRequest); i { case 0: return &v.state case 1: @@ -10033,7 +10575,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteCredentialsResponse); i { + switch v := v.(*CreateProjectSecretResponse); i { case 0: return &v.state case 1: @@ -10045,7 +10587,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCredentialsRequest); i { + switch v := v.(*UpdateProjectSecretRequest); i { case 0: return &v.state case 1: @@ -10057,7 +10599,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCredentialsResponse); i { + switch v := v.(*UpdateProjectSecretResponse); i { case 0: return &v.state case 1: @@ -10069,7 +10611,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCredentialsRequest); i { + switch v := v.(*DeleteProjectSecretRequest); i { case 0: return &v.state case 1: @@ -10081,7 +10623,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCredentialsResponse); i { + switch v := v.(*DeleteProjectSecretResponse); i { case 0: return &v.state case 1: @@ -10093,7 +10635,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateCredentialsRequest); i { + switch v := v.(*CreateCredentialsRequest); i { case 0: return &v.state case 1: @@ -10105,7 +10647,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateCredentialsResponse); i { + switch v := v.(*CreateCredentialsResponse); i { case 0: return &v.state case 1: @@ -10117,7 +10659,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAnalysisTemplatesRequest); i { + switch v := v.(*DeleteCredentialsRequest); i { case 0: return &v.state case 1: @@ -10129,7 +10671,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAnalysisTemplatesResponse); i { + switch v := v.(*DeleteCredentialsResponse); i { case 0: return &v.state case 1: @@ -10141,7 +10683,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAnalysisTemplateRequest); i { + switch v := v.(*GetCredentialsRequest); i { case 0: return &v.state case 1: @@ -10153,7 +10695,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAnalysisTemplateResponse); i { + switch v := v.(*GetCredentialsResponse); i { case 0: return &v.state case 1: @@ -10165,7 +10707,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAnalysisRunRequest); i { + switch v := v.(*ListCredentialsRequest); i { case 0: return &v.state case 1: @@ -10177,7 +10719,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAnalysisRunResponse); i { + switch v := v.(*ListCredentialsResponse); i { case 0: return &v.state case 1: @@ -10189,7 +10731,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteAnalysisTemplateRequest); i { + switch v := v.(*UpdateCredentialsRequest); i { case 0: return &v.state case 1: @@ -10201,7 +10743,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteAnalysisTemplateResponse); i { + switch v := v.(*UpdateCredentialsResponse); i { case 0: return &v.state case 1: @@ -10213,7 +10755,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListProjectEventsRequest); i { + switch v := v.(*ListAnalysisTemplatesRequest); i { case 0: return &v.state case 1: @@ -10225,7 +10767,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListProjectEventsResponse); i { + switch v := v.(*ListAnalysisTemplatesResponse); i { case 0: return &v.state case 1: @@ -10237,7 +10779,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateRoleRequest); i { + switch v := v.(*GetAnalysisTemplateRequest); i { case 0: return &v.state case 1: @@ -10249,7 +10791,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateRoleResponse); i { + switch v := v.(*GetAnalysisTemplateResponse); i { case 0: return &v.state case 1: @@ -10261,7 +10803,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteRoleRequest); i { + switch v := v.(*GetAnalysisRunRequest); i { case 0: return &v.state case 1: @@ -10273,7 +10815,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteRoleResponse); i { + switch v := v.(*GetAnalysisRunResponse); i { case 0: return &v.state case 1: @@ -10285,7 +10827,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetRoleRequest); i { + switch v := v.(*DeleteAnalysisTemplateRequest); i { case 0: return &v.state case 1: @@ -10297,7 +10839,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetRoleResponse); i { + switch v := v.(*DeleteAnalysisTemplateResponse); i { case 0: return &v.state case 1: @@ -10309,7 +10851,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Claims); i { + switch v := v.(*ListProjectEventsRequest); i { case 0: return &v.state case 1: @@ -10321,7 +10863,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GrantRequest); i { + switch v := v.(*ListProjectEventsResponse); i { case 0: return &v.state case 1: @@ -10333,7 +10875,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GrantResponse); i { + switch v := v.(*CreateRoleRequest); i { case 0: return &v.state case 1: @@ -10345,7 +10887,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListRolesRequest); i { + switch v := v.(*CreateRoleResponse); i { case 0: return &v.state case 1: @@ -10357,7 +10899,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListRolesResponse); i { + switch v := v.(*DeleteRoleRequest); i { case 0: return &v.state case 1: @@ -10369,7 +10911,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RevokeRequest); i { + switch v := v.(*DeleteRoleResponse); i { case 0: return &v.state case 1: @@ -10381,7 +10923,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RevokeResponse); i { + switch v := v.(*GetRoleRequest); i { case 0: return &v.state case 1: @@ -10393,7 +10935,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateRoleRequest); i { + switch v := v.(*GetRoleResponse); i { case 0: return &v.state case 1: @@ -10405,7 +10947,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[117].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateRoleResponse); i { + switch v := v.(*Claims); i { case 0: return &v.state case 1: @@ -10417,7 +10959,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[118].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAnalysisTemplateConfigMapsRequest); i { + switch v := v.(*GrantRequest); i { case 0: return &v.state case 1: @@ -10429,7 +10971,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[119].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAnalysisTemplateConfigMapsResponse); i { + switch v := v.(*GrantResponse); i { case 0: return &v.state case 1: @@ -10441,7 +10983,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[120].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAnalysisTemplateConfigMapRequest); i { + switch v := v.(*ListRolesRequest); i { case 0: return &v.state case 1: @@ -10453,7 +10995,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[121].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAnalysisTemplateConfigMapResponse); i { + switch v := v.(*ListRolesResponse); i { case 0: return &v.state case 1: @@ -10465,7 +11007,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[122].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAnalysisTemplateSecretsRequest); i { + switch v := v.(*RevokeRequest); i { case 0: return &v.state case 1: @@ -10477,7 +11019,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[123].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAnalysisTemplateSecretsResponse); i { + switch v := v.(*RevokeResponse); i { case 0: return &v.state case 1: @@ -10489,7 +11031,7 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[124].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAnalysisTemplateSecretRequest); i { + switch v := v.(*UpdateRoleRequest); i { case 0: return &v.state case 1: @@ -10501,6 +11043,102 @@ func file_service_v1alpha1_service_proto_init() { } } file_service_v1alpha1_service_proto_msgTypes[125].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateRoleResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_v1alpha1_service_proto_msgTypes[126].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListAnalysisTemplateConfigMapsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_v1alpha1_service_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListAnalysisTemplateConfigMapsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_v1alpha1_service_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAnalysisTemplateConfigMapRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_v1alpha1_service_proto_msgTypes[129].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAnalysisTemplateConfigMapResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_v1alpha1_service_proto_msgTypes[130].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListAnalysisTemplateSecretsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_v1alpha1_service_proto_msgTypes[131].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListAnalysisTemplateSecretsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_v1alpha1_service_proto_msgTypes[132].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAnalysisTemplateSecretRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_service_v1alpha1_service_proto_msgTypes[133].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetAnalysisTemplateSecretResponse); i { case 0: return &v.state @@ -10554,36 +11192,36 @@ func file_service_v1alpha1_service_proto_init() { (*GetWarehouseResponse_Warehouse)(nil), (*GetWarehouseResponse_Raw)(nil), } - file_service_v1alpha1_service_proto_msgTypes[88].OneofWrappers = []interface{}{ + file_service_v1alpha1_service_proto_msgTypes[96].OneofWrappers = []interface{}{ (*GetCredentialsResponse_Credentials)(nil), (*GetCredentialsResponse_Raw)(nil), } - file_service_v1alpha1_service_proto_msgTypes[96].OneofWrappers = []interface{}{ + file_service_v1alpha1_service_proto_msgTypes[104].OneofWrappers = []interface{}{ (*GetAnalysisTemplateResponse_AnalysisTemplate)(nil), (*GetAnalysisTemplateResponse_Raw)(nil), } - file_service_v1alpha1_service_proto_msgTypes[98].OneofWrappers = []interface{}{ + file_service_v1alpha1_service_proto_msgTypes[106].OneofWrappers = []interface{}{ (*GetAnalysisRunResponse_AnalysisRun)(nil), (*GetAnalysisRunResponse_Raw)(nil), } - file_service_v1alpha1_service_proto_msgTypes[108].OneofWrappers = []interface{}{ + file_service_v1alpha1_service_proto_msgTypes[116].OneofWrappers = []interface{}{ (*GetRoleResponse_Role)(nil), (*GetRoleResponse_Resources)(nil), (*GetRoleResponse_Raw)(nil), } - file_service_v1alpha1_service_proto_msgTypes[110].OneofWrappers = []interface{}{ + file_service_v1alpha1_service_proto_msgTypes[118].OneofWrappers = []interface{}{ (*GrantRequest_UserClaims)(nil), (*GrantRequest_ResourceDetails)(nil), } - file_service_v1alpha1_service_proto_msgTypes[114].OneofWrappers = []interface{}{ + file_service_v1alpha1_service_proto_msgTypes[122].OneofWrappers = []interface{}{ (*RevokeRequest_UserClaims)(nil), (*RevokeRequest_ResourceDetails)(nil), } - file_service_v1alpha1_service_proto_msgTypes[121].OneofWrappers = []interface{}{ + file_service_v1alpha1_service_proto_msgTypes[129].OneofWrappers = []interface{}{ (*GetAnalysisTemplateConfigMapResponse_ConfigMap)(nil), (*GetAnalysisTemplateConfigMapResponse_Raw)(nil), } - file_service_v1alpha1_service_proto_msgTypes[125].OneofWrappers = []interface{}{ + file_service_v1alpha1_service_proto_msgTypes[133].OneofWrappers = []interface{}{ (*GetAnalysisTemplateSecretResponse_Secret)(nil), (*GetAnalysisTemplateSecretResponse_Raw)(nil), } @@ -10593,7 +11231,7 @@ func file_service_v1alpha1_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_service_v1alpha1_service_proto_rawDesc, NumEnums: 1, - NumMessages: 131, + NumMessages: 141, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/api/service/v1alpha1/svcv1alpha1connect/service.connect.go b/pkg/api/service/v1alpha1/svcv1alpha1connect/service.connect.go index 018a809a5..2c09a62d8 100644 --- a/pkg/api/service/v1alpha1/svcv1alpha1connect/service.connect.go +++ b/pkg/api/service/v1alpha1/svcv1alpha1connect/service.connect.go @@ -148,6 +148,18 @@ const ( // KargoServiceUpdateCredentialsProcedure is the fully-qualified name of the KargoService's // UpdateCredentials RPC. KargoServiceUpdateCredentialsProcedure = "/akuity.io.kargo.service.v1alpha1.KargoService/UpdateCredentials" + // KargoServiceListProjectSecretsProcedure is the fully-qualified name of the KargoService's + // ListProjectSecrets RPC. + KargoServiceListProjectSecretsProcedure = "/akuity.io.kargo.service.v1alpha1.KargoService/ListProjectSecrets" + // KargoServiceCreateProjectSecretProcedure is the fully-qualified name of the KargoService's + // CreateProjectSecret RPC. + KargoServiceCreateProjectSecretProcedure = "/akuity.io.kargo.service.v1alpha1.KargoService/CreateProjectSecret" + // KargoServiceUpdateProjectSecretProcedure is the fully-qualified name of the KargoService's + // UpdateProjectSecret RPC. + KargoServiceUpdateProjectSecretProcedure = "/akuity.io.kargo.service.v1alpha1.KargoService/UpdateProjectSecret" + // KargoServiceDeleteProjectSecretProcedure is the fully-qualified name of the KargoService's + // DeleteProjectSecret RPC. + KargoServiceDeleteProjectSecretProcedure = "/akuity.io.kargo.service.v1alpha1.KargoService/DeleteProjectSecret" // KargoServiceListAnalysisTemplatesProcedure is the fully-qualified name of the KargoService's // ListAnalysisTemplates RPC. KargoServiceListAnalysisTemplatesProcedure = "/akuity.io.kargo.service.v1alpha1.KargoService/ListAnalysisTemplates" @@ -235,6 +247,10 @@ var ( kargoServiceGetCredentialsMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("GetCredentials") kargoServiceListCredentialsMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("ListCredentials") kargoServiceUpdateCredentialsMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("UpdateCredentials") + kargoServiceListProjectSecretsMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("ListProjectSecrets") + kargoServiceCreateProjectSecretMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("CreateProjectSecret") + kargoServiceUpdateProjectSecretMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("UpdateProjectSecret") + kargoServiceDeleteProjectSecretMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("DeleteProjectSecret") kargoServiceListAnalysisTemplatesMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("ListAnalysisTemplates") kargoServiceGetAnalysisTemplateMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("GetAnalysisTemplate") kargoServiceDeleteAnalysisTemplateMethodDescriptor = kargoServiceServiceDescriptor.Methods().ByName("DeleteAnalysisTemplate") @@ -298,6 +314,10 @@ type KargoServiceClient interface { GetCredentials(context.Context, *connect.Request[v1alpha1.GetCredentialsRequest]) (*connect.Response[v1alpha1.GetCredentialsResponse], error) ListCredentials(context.Context, *connect.Request[v1alpha1.ListCredentialsRequest]) (*connect.Response[v1alpha1.ListCredentialsResponse], error) UpdateCredentials(context.Context, *connect.Request[v1alpha1.UpdateCredentialsRequest]) (*connect.Response[v1alpha1.UpdateCredentialsResponse], error) + ListProjectSecrets(context.Context, *connect.Request[v1alpha1.ListProjectSecretsRequest]) (*connect.Response[v1alpha1.ListProjectSecretsResponse], error) + CreateProjectSecret(context.Context, *connect.Request[v1alpha1.CreateProjectSecretRequest]) (*connect.Response[v1alpha1.CreateProjectSecretResponse], error) + UpdateProjectSecret(context.Context, *connect.Request[v1alpha1.UpdateProjectSecretRequest]) (*connect.Response[v1alpha1.UpdateProjectSecretResponse], error) + DeleteProjectSecret(context.Context, *connect.Request[v1alpha1.DeleteProjectSecretRequest]) (*connect.Response[v1alpha1.DeleteProjectSecretResponse], error) ListAnalysisTemplates(context.Context, *connect.Request[v1alpha1.ListAnalysisTemplatesRequest]) (*connect.Response[v1alpha1.ListAnalysisTemplatesResponse], error) GetAnalysisTemplate(context.Context, *connect.Request[v1alpha1.GetAnalysisTemplateRequest]) (*connect.Response[v1alpha1.GetAnalysisTemplateResponse], error) DeleteAnalysisTemplate(context.Context, *connect.Request[v1alpha1.DeleteAnalysisTemplateRequest]) (*connect.Response[v1alpha1.DeleteAnalysisTemplateResponse], error) @@ -572,6 +592,30 @@ func NewKargoServiceClient(httpClient connect.HTTPClient, baseURL string, opts . connect.WithSchema(kargoServiceUpdateCredentialsMethodDescriptor), connect.WithClientOptions(opts...), ), + listProjectSecrets: connect.NewClient[v1alpha1.ListProjectSecretsRequest, v1alpha1.ListProjectSecretsResponse]( + httpClient, + baseURL+KargoServiceListProjectSecretsProcedure, + connect.WithSchema(kargoServiceListProjectSecretsMethodDescriptor), + connect.WithClientOptions(opts...), + ), + createProjectSecret: connect.NewClient[v1alpha1.CreateProjectSecretRequest, v1alpha1.CreateProjectSecretResponse]( + httpClient, + baseURL+KargoServiceCreateProjectSecretProcedure, + connect.WithSchema(kargoServiceCreateProjectSecretMethodDescriptor), + connect.WithClientOptions(opts...), + ), + updateProjectSecret: connect.NewClient[v1alpha1.UpdateProjectSecretRequest, v1alpha1.UpdateProjectSecretResponse]( + httpClient, + baseURL+KargoServiceUpdateProjectSecretProcedure, + connect.WithSchema(kargoServiceUpdateProjectSecretMethodDescriptor), + connect.WithClientOptions(opts...), + ), + deleteProjectSecret: connect.NewClient[v1alpha1.DeleteProjectSecretRequest, v1alpha1.DeleteProjectSecretResponse]( + httpClient, + baseURL+KargoServiceDeleteProjectSecretProcedure, + connect.WithSchema(kargoServiceDeleteProjectSecretMethodDescriptor), + connect.WithClientOptions(opts...), + ), listAnalysisTemplates: connect.NewClient[v1alpha1.ListAnalysisTemplatesRequest, v1alpha1.ListAnalysisTemplatesResponse]( httpClient, baseURL+KargoServiceListAnalysisTemplatesProcedure, @@ -714,6 +758,10 @@ type kargoServiceClient struct { getCredentials *connect.Client[v1alpha1.GetCredentialsRequest, v1alpha1.GetCredentialsResponse] listCredentials *connect.Client[v1alpha1.ListCredentialsRequest, v1alpha1.ListCredentialsResponse] updateCredentials *connect.Client[v1alpha1.UpdateCredentialsRequest, v1alpha1.UpdateCredentialsResponse] + listProjectSecrets *connect.Client[v1alpha1.ListProjectSecretsRequest, v1alpha1.ListProjectSecretsResponse] + createProjectSecret *connect.Client[v1alpha1.CreateProjectSecretRequest, v1alpha1.CreateProjectSecretResponse] + updateProjectSecret *connect.Client[v1alpha1.UpdateProjectSecretRequest, v1alpha1.UpdateProjectSecretResponse] + deleteProjectSecret *connect.Client[v1alpha1.DeleteProjectSecretRequest, v1alpha1.DeleteProjectSecretResponse] listAnalysisTemplates *connect.Client[v1alpha1.ListAnalysisTemplatesRequest, v1alpha1.ListAnalysisTemplatesResponse] getAnalysisTemplate *connect.Client[v1alpha1.GetAnalysisTemplateRequest, v1alpha1.GetAnalysisTemplateResponse] deleteAnalysisTemplate *connect.Client[v1alpha1.DeleteAnalysisTemplateRequest, v1alpha1.DeleteAnalysisTemplateResponse] @@ -938,6 +986,26 @@ func (c *kargoServiceClient) UpdateCredentials(ctx context.Context, req *connect return c.updateCredentials.CallUnary(ctx, req) } +// ListProjectSecrets calls akuity.io.kargo.service.v1alpha1.KargoService.ListProjectSecrets. +func (c *kargoServiceClient) ListProjectSecrets(ctx context.Context, req *connect.Request[v1alpha1.ListProjectSecretsRequest]) (*connect.Response[v1alpha1.ListProjectSecretsResponse], error) { + return c.listProjectSecrets.CallUnary(ctx, req) +} + +// CreateProjectSecret calls akuity.io.kargo.service.v1alpha1.KargoService.CreateProjectSecret. +func (c *kargoServiceClient) CreateProjectSecret(ctx context.Context, req *connect.Request[v1alpha1.CreateProjectSecretRequest]) (*connect.Response[v1alpha1.CreateProjectSecretResponse], error) { + return c.createProjectSecret.CallUnary(ctx, req) +} + +// UpdateProjectSecret calls akuity.io.kargo.service.v1alpha1.KargoService.UpdateProjectSecret. +func (c *kargoServiceClient) UpdateProjectSecret(ctx context.Context, req *connect.Request[v1alpha1.UpdateProjectSecretRequest]) (*connect.Response[v1alpha1.UpdateProjectSecretResponse], error) { + return c.updateProjectSecret.CallUnary(ctx, req) +} + +// DeleteProjectSecret calls akuity.io.kargo.service.v1alpha1.KargoService.DeleteProjectSecret. +func (c *kargoServiceClient) DeleteProjectSecret(ctx context.Context, req *connect.Request[v1alpha1.DeleteProjectSecretRequest]) (*connect.Response[v1alpha1.DeleteProjectSecretResponse], error) { + return c.deleteProjectSecret.CallUnary(ctx, req) +} + // ListAnalysisTemplates calls akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplates. func (c *kargoServiceClient) ListAnalysisTemplates(ctx context.Context, req *connect.Request[v1alpha1.ListAnalysisTemplatesRequest]) (*connect.Response[v1alpha1.ListAnalysisTemplatesResponse], error) { return c.listAnalysisTemplates.CallUnary(ctx, req) @@ -1069,6 +1137,10 @@ type KargoServiceHandler interface { GetCredentials(context.Context, *connect.Request[v1alpha1.GetCredentialsRequest]) (*connect.Response[v1alpha1.GetCredentialsResponse], error) ListCredentials(context.Context, *connect.Request[v1alpha1.ListCredentialsRequest]) (*connect.Response[v1alpha1.ListCredentialsResponse], error) UpdateCredentials(context.Context, *connect.Request[v1alpha1.UpdateCredentialsRequest]) (*connect.Response[v1alpha1.UpdateCredentialsResponse], error) + ListProjectSecrets(context.Context, *connect.Request[v1alpha1.ListProjectSecretsRequest]) (*connect.Response[v1alpha1.ListProjectSecretsResponse], error) + CreateProjectSecret(context.Context, *connect.Request[v1alpha1.CreateProjectSecretRequest]) (*connect.Response[v1alpha1.CreateProjectSecretResponse], error) + UpdateProjectSecret(context.Context, *connect.Request[v1alpha1.UpdateProjectSecretRequest]) (*connect.Response[v1alpha1.UpdateProjectSecretResponse], error) + DeleteProjectSecret(context.Context, *connect.Request[v1alpha1.DeleteProjectSecretRequest]) (*connect.Response[v1alpha1.DeleteProjectSecretResponse], error) ListAnalysisTemplates(context.Context, *connect.Request[v1alpha1.ListAnalysisTemplatesRequest]) (*connect.Response[v1alpha1.ListAnalysisTemplatesResponse], error) GetAnalysisTemplate(context.Context, *connect.Request[v1alpha1.GetAnalysisTemplateRequest]) (*connect.Response[v1alpha1.GetAnalysisTemplateResponse], error) DeleteAnalysisTemplate(context.Context, *connect.Request[v1alpha1.DeleteAnalysisTemplateRequest]) (*connect.Response[v1alpha1.DeleteAnalysisTemplateResponse], error) @@ -1339,6 +1411,30 @@ func NewKargoServiceHandler(svc KargoServiceHandler, opts ...connect.HandlerOpti connect.WithSchema(kargoServiceUpdateCredentialsMethodDescriptor), connect.WithHandlerOptions(opts...), ) + kargoServiceListProjectSecretsHandler := connect.NewUnaryHandler( + KargoServiceListProjectSecretsProcedure, + svc.ListProjectSecrets, + connect.WithSchema(kargoServiceListProjectSecretsMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) + kargoServiceCreateProjectSecretHandler := connect.NewUnaryHandler( + KargoServiceCreateProjectSecretProcedure, + svc.CreateProjectSecret, + connect.WithSchema(kargoServiceCreateProjectSecretMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) + kargoServiceUpdateProjectSecretHandler := connect.NewUnaryHandler( + KargoServiceUpdateProjectSecretProcedure, + svc.UpdateProjectSecret, + connect.WithSchema(kargoServiceUpdateProjectSecretMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) + kargoServiceDeleteProjectSecretHandler := connect.NewUnaryHandler( + KargoServiceDeleteProjectSecretProcedure, + svc.DeleteProjectSecret, + connect.WithSchema(kargoServiceDeleteProjectSecretMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) kargoServiceListAnalysisTemplatesHandler := connect.NewUnaryHandler( KargoServiceListAnalysisTemplatesProcedure, svc.ListAnalysisTemplates, @@ -1519,6 +1615,14 @@ func NewKargoServiceHandler(svc KargoServiceHandler, opts ...connect.HandlerOpti kargoServiceListCredentialsHandler.ServeHTTP(w, r) case KargoServiceUpdateCredentialsProcedure: kargoServiceUpdateCredentialsHandler.ServeHTTP(w, r) + case KargoServiceListProjectSecretsProcedure: + kargoServiceListProjectSecretsHandler.ServeHTTP(w, r) + case KargoServiceCreateProjectSecretProcedure: + kargoServiceCreateProjectSecretHandler.ServeHTTP(w, r) + case KargoServiceUpdateProjectSecretProcedure: + kargoServiceUpdateProjectSecretHandler.ServeHTTP(w, r) + case KargoServiceDeleteProjectSecretProcedure: + kargoServiceDeleteProjectSecretHandler.ServeHTTP(w, r) case KargoServiceListAnalysisTemplatesProcedure: kargoServiceListAnalysisTemplatesHandler.ServeHTTP(w, r) case KargoServiceGetAnalysisTemplateProcedure: @@ -1724,6 +1828,22 @@ func (UnimplementedKargoServiceHandler) UpdateCredentials(context.Context, *conn return nil, connect.NewError(connect.CodeUnimplemented, errors.New("akuity.io.kargo.service.v1alpha1.KargoService.UpdateCredentials is not implemented")) } +func (UnimplementedKargoServiceHandler) ListProjectSecrets(context.Context, *connect.Request[v1alpha1.ListProjectSecretsRequest]) (*connect.Response[v1alpha1.ListProjectSecretsResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("akuity.io.kargo.service.v1alpha1.KargoService.ListProjectSecrets is not implemented")) +} + +func (UnimplementedKargoServiceHandler) CreateProjectSecret(context.Context, *connect.Request[v1alpha1.CreateProjectSecretRequest]) (*connect.Response[v1alpha1.CreateProjectSecretResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("akuity.io.kargo.service.v1alpha1.KargoService.CreateProjectSecret is not implemented")) +} + +func (UnimplementedKargoServiceHandler) UpdateProjectSecret(context.Context, *connect.Request[v1alpha1.UpdateProjectSecretRequest]) (*connect.Response[v1alpha1.UpdateProjectSecretResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("akuity.io.kargo.service.v1alpha1.KargoService.UpdateProjectSecret is not implemented")) +} + +func (UnimplementedKargoServiceHandler) DeleteProjectSecret(context.Context, *connect.Request[v1alpha1.DeleteProjectSecretRequest]) (*connect.Response[v1alpha1.DeleteProjectSecretResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("akuity.io.kargo.service.v1alpha1.KargoService.DeleteProjectSecret is not implemented")) +} + func (UnimplementedKargoServiceHandler) ListAnalysisTemplates(context.Context, *connect.Request[v1alpha1.ListAnalysisTemplatesRequest]) (*connect.Response[v1alpha1.ListAnalysisTemplatesResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("akuity.io.kargo.service.v1alpha1.KargoService.ListAnalysisTemplates is not implemented")) } diff --git a/ui/src/config/paths.ts b/ui/src/config/paths.ts index 04dcbb84a..cf8cecc69 100644 --- a/ui/src/config/paths.ts +++ b/ui/src/config/paths.ts @@ -2,7 +2,7 @@ export const paths = { home: '/', projects: '/', project: '/project/:name', - projectCredentials: '/project/:name/credentials', + projectCredentials: '/project/:name/secrets', projectAnalysisTemplates: '/project/:name/analysis-templates', projectEvents: '/project/:name/events', projectRoles: '/project/:name/roles', diff --git a/ui/src/features/project/credentials/create-credentials-modal.tsx b/ui/src/features/project/credentials/create-credentials-modal.tsx index ea88abb17..e7f91afdc 100644 --- a/ui/src/features/project/credentials/create-credentials-modal.tsx +++ b/ui/src/features/project/credentials/create-credentials-modal.tsx @@ -1,5 +1,5 @@ import { useMutation } from '@connectrpc/connect-query'; -import { faCode, faExternalLink, faIdBadge } from '@fortawesome/free-solid-svg-icons'; +import { faAsterisk, faCode, faExternalLink } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { zodResolver } from '@hookform/resolvers/zod'; import { Input, Modal, Segmented } from 'antd'; @@ -13,10 +13,14 @@ import { dnsRegex } from '@ui/features/common/utils'; import { Secret } from '@ui/gen/k8s.io/api/core/v1/generated_pb'; import { createCredentials, - updateCredentials + createProjectSecret, + updateCredentials, + updateProjectSecret } from '@ui/gen/service/v1alpha1/service-KargoService_connectquery'; import { zodValidators } from '@ui/utils/validators'; +import { SecretEditor } from './secret-editor'; +import { CredentialsType } from './types'; import { constructDefaults, labelForKey, typeLabel } from './utils'; const createFormSchema = (editing?: boolean) => @@ -33,8 +37,19 @@ const createFormSchema = (editing?: boolean) => username: zodValidators.requiredString, password: editing ? z.string().optional() : zodValidators.requiredString }) - .refine((data) => ['git', 'helm', 'image'].includes(data.type), { - message: "Type must be one of 'git', 'helm', or 'image'." + .or( + z.object({ + name: zodValidators.requiredString.regex( + dnsRegex, + 'Credentials name must be a valid DNS subdomain.' + ), + description: z.string().optional(), + type: zodValidators.requiredString, + data: z.array(z.array(z.string())) + }) + ) + .refine((data) => ['git', 'helm', 'image', 'generic'].includes(data.type), { + message: "Type must be one of 'git', 'helm', 'image' or 'generic'." }); const placeholders = { @@ -45,6 +60,11 @@ const placeholders = { password: '********' }; +const genericCredentialPlaceholders = { + name: 'My Secret', + description: placeholders.description +}; + const repoUrlPatternPlaceholder = '(?:https?://)?(?:www.)?github.com/[w.-]+/[w.-]+(?:.git)?'; type Props = ModalComponentProps & { @@ -52,22 +72,37 @@ type Props = ModalComponentProps & { onSuccess: () => void; init?: Secret; editing?: boolean; + type: 'repo' | 'generic'; }; export const CreateCredentialsModal = ({ project, onSuccess, editing, init, ...props }: Props) => { const { control, handleSubmit, watch } = useForm({ - defaultValues: constructDefaults(init), + defaultValues: { ...constructDefaults(init, props.type === 'generic' ? props.type : 'git') }, resolver: zodResolver(createFormSchema(editing)) }); - const { mutate } = useMutation(createCredentials, { + const createCredentialsMutation = useMutation(createCredentials, { onSuccess: () => { props.hide(); onSuccess(); } }); - const { mutate: update } = useMutation(updateCredentials, { + const updateCredentialsMutation = useMutation(updateCredentials, { + onSuccess: () => { + props.hide(); + onSuccess(); + } + }); + + const createSecretsMutation = useMutation(createProjectSecret, { + onSuccess: () => { + props.hide(); + onSuccess(); + } + }); + + const updateSecretsMutation = useMutation(updateProjectSecret, { onSuccess: () => { props.hide(); onSuccess(); @@ -76,96 +111,141 @@ export const CreateCredentialsModal = ({ project, onSuccess, editing, init, ...p const repoUrlIsRegex = watch('repoUrlIsRegex'); + const credentialType = (props.type === 'repo' ? watch('type') : 'generic') as CredentialsType; + + const onSubmit = handleSubmit((values) => { + if (credentialType === 'generic') { + const data: Record = {}; + + if (values?.data?.length > 0) { + for (const [k, v] of values.data) { + data[k] = v; + } + } + + if (editing) { + return updateSecretsMutation.mutate({ + ...values, + project, + name: init?.metadata?.name || '', + data + }); + } + + return createSecretsMutation.mutate({ ...values, project, data }); + } + + if (editing) { + return updateCredentialsMutation.mutate({ + ...values, + project, + name: init?.metadata?.name || '' + }); + } + + return createCredentialsMutation.mutate({ ...values, project }); + }); + return ( { - if (editing) { - return update({ ...values, project, name: init?.metadata?.name || '' }); - } else { - mutate({ ...values, project }); - } - })} + okButtonProps={{ + loading: createCredentialsMutation.isPending || updateCredentialsMutation.isPending + }} + okText={editing ? 'Update' : 'Create'} + onOk={onSubmit} title={ <> - - {editing ? 'Edit' : 'Create'} Credentials + + {editing ? 'Edit' : 'Create'} {props.type === 'repo' ? 'Credentials' : 'Secret'} } {...props} + width='612px' > -
- - ( - field.onChange(newValue)} - value={field.value} - /> - )} - /> -
- {Object.keys(placeholders).map((key) => ( -
- {key === 'repoUrl' && ( - <> - - ( - URL, - value: 'url' - }, - { - label: Regex Pattern, - value: 'regex' - } - ]} - onChange={(newValue) => field.onChange(newValue === 'regex')} - value={field.value ? 'regex' : 'url'} - /> - )} - /> - - )} - + + - {({ field }) => ( - // @ts-expect-error repoUrlInRegex won't be here so no boolean only strings - ( + field.onChange(newValue)} + value={field.value} /> )} - + />
- ))} + )} + {Object.keys(credentialType === 'generic' ? genericCredentialPlaceholders : placeholders).map( + (key) => ( +
+ {key === 'repoUrl' && ( + <> + + ( + URL, + value: 'url' + }, + { + label: Regex Pattern, + value: 'regex' + } + ]} + onChange={(newValue) => field.onChange(newValue === 'regex')} + value={field.value ? 'regex' : 'url'} + /> + )} + /> + + )} + + {({ field }) => ( + // @ts-expect-error repoUrlInRegex won't be here so no boolean only strings + + )} + +
+ ) + )} + {credentialType === 'generic' && ( + + {({ field }) => ( + + )} + + )}
); }; diff --git a/ui/src/features/project/credentials/credentials-list.tsx b/ui/src/features/project/credentials/credentials-list.tsx index 5eb9394ad..61f402d09 100644 --- a/ui/src/features/project/credentials/credentials-list.tsx +++ b/ui/src/features/project/credentials/credentials-list.tsx @@ -7,7 +7,7 @@ import { faTrash } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { Button, Table } from 'antd'; +import { Button, Card, Flex, Table, Tag } from 'antd'; import { useParams } from 'react-router-dom'; import { useConfirmModal } from '@ui/features/common/confirm-modal/use-confirm-modal'; @@ -16,7 +16,9 @@ import { useModal } from '@ui/features/common/modal/use-modal'; import { Secret } from '@ui/gen/k8s.io/api/core/v1/generated_pb'; import { deleteCredentials, - listCredentials + deleteProjectSecret, + listCredentials, + listProjectSecrets } from '@ui/gen/service/v1alpha1/service-KargoService_connectquery'; import { CreateCredentialsModal } from './create-credentials-modal'; @@ -28,134 +30,274 @@ export const CredentialsList = () => { const { show: showCreate } = useModal(); const confirm = useConfirmModal(); - const { data, isLoading, refetch } = useQuery(listCredentials, { project: name }); - const { mutate } = useMutation(deleteCredentials, { + const listCredentialsQuery = useQuery(listCredentials, { project: name }); + + const listSecretsQuery = useQuery(listProjectSecrets, { project: name }); + + const deleteCredentialsMutation = useMutation(deleteCredentials, { onSuccess: () => { - refetch(); + listCredentialsQuery.refetch(); } }); + const deleteSecretsMutation = useMutation(deleteProjectSecret, { + onSuccess: () => listSecretsQuery.refetch() + }); + + const specificCredentials: Secret[] = listCredentialsQuery.data?.credentials || []; + const genericCredentials: Secret[] = listSecretsQuery.data?.secrets || []; + return (
- record?.metadata?.name || ''} - loading={isLoading} - columns={[ - { - title: 'Name', - key: 'name', - render: (record) => { - return
{record?.metadata?.name}
; - } - }, - { - title: 'Type', - key: 'type', - render: (record) => ( -
- - {record?.metadata?.labels[CredentialTypeLabelKey].toUpperCase()} -
- ) - }, - { - title: 'Repo URL / Pattern', - key: 'createdAt', - render: (record) => ( -
- - {record?.stringData[CredentialsDataKey.RepoUrl]} -
- ) - }, - { - title: 'Username', - key: 'username', - render: (record) =>
{record?.stringData[CredentialsDataKey.Username]}
- }, - { - key: 'actions', - title: ( -
- -
- ), - render: (record) => ( -
- - -
- ) + + + Repo Credentials + + } - ]} - expandable={descriptionExpandable()} - /> + className='w-1/2' + > +
record?.metadata?.name || ''} + loading={listCredentialsQuery.isLoading} + columns={[ + { + title: 'Name', + key: 'name', + render: (record) => { + return
{record?.metadata?.name}
; + } + }, + { + title: 'Type', + key: 'type', + render: (record) => ( +
+ + {record?.metadata?.labels[CredentialTypeLabelKey].toUpperCase()} +
+ ) + }, + { + title: 'Repo URL / Pattern', + key: 'createdAt', + render: (record) => ( +
+ + {record?.stringData[CredentialsDataKey.RepoUrl]} +
+ ) + }, + { + title: 'Username', + key: 'username', + render: (record) =>
{record?.stringData[CredentialsDataKey.Username]}
+ }, + { + key: 'actions', + render: (record) => ( +
+ + +
+ ) + } + ]} + expandable={descriptionExpandable()} + /> + + + + Generic Project Secrets + + + } + className='w-1/2' + > +
record?.metadata?.name || ''} + columns={[ + { + title: 'Name', + key: 'name', + render: (record) => record?.metadata?.name + }, + { + title: 'Keys', + key: 'secrets', + render: (_, record) => { + const secretsKeys = Object.keys(record?.stringData) || []; + + if (!secretsKeys.length) { + return It looks like this secret is empty.; + } + + return secretsKeys.map((secretKey) => ( + + {secretKey} + + )); + } + }, + { + key: 'actions', + render: (record) => ( +
+ + +
+ ) + } + ]} + expandable={descriptionExpandable()} + loading={listSecretsQuery.isLoading} + /> + + ); }; diff --git a/ui/src/features/project/credentials/secret-editor.tsx b/ui/src/features/project/credentials/secret-editor.tsx new file mode 100644 index 000000000..7c6ce1dee --- /dev/null +++ b/ui/src/features/project/credentials/secret-editor.tsx @@ -0,0 +1,100 @@ +import { faPencil, faTrash } from '@fortawesome/free-solid-svg-icons'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { Button, Flex, Input, Tooltip } from 'antd'; +import TextArea from 'antd/es/input/TextArea'; +import { useEffect, useState } from 'react'; + +type SecretEditorProps = { + secret: [string, string][]; + onChange: (newSecret: [string, string][]) => void; +}; + +export const SecretEditor = (props: SecretEditorProps) => { + const secretEntries = props.secret; + + const [lockedSecrets, setLockedSecrets] = useState([]); + + // if first render of this component has redacted secrets then it is edit mode + // lock the existing secrets + useEffect(() => { + setLockedSecrets(props.secret.map((secret) => secret[0])); + }, []); + + return ( + <> + {secretEntries.map(([key, value], idx) => ( + + { + const newKey = e.target.value; + + props.onChange( + secretEntries.map((entry, origIdx) => { + if (idx === origIdx) { + return [newKey, value]; + } + + return entry; + }) + ); + }} + placeholder='key' + /> + {lockedSecrets.includes(key) && ( + <> + + +