From f9563a892b730f88c7b4cf941e7f6c080cf4cbc6 Mon Sep 17 00:00:00 2001 From: Corban Beaird Date: Thu, 23 May 2024 15:00:34 -0600 Subject: [PATCH] chore: improve concurrency and division between layers --- harness/determined/cli/project.py | 11 +- harness/determined/cli/workspace.py | 3 +- harness/determined/common/api/bindings.py | 57 + .../determined/common/experimental/project.py | 14 + harness/determined/common/streams/wire.py | 2 + master/internal/api_project.go | 117 +- master/internal/api_project_intg_test.go | 108 +- master/internal/project/authz_basic_impl.go | 10 + master/internal/project/authz_iface.go | 1 + master/internal/project/authz_permissive.go | 8 + master/internal/project/authz_rbac.go | 16 + master/internal/project/postgres_project.go | 293 ++- .../project/postgres_project_intg_test.go | 57 + master/internal/stream/projects.go | 1 + ...508154139_add-custom-project-key.tx.up.sql | 45 +- master/static/srv/update_project.sql | 5 +- .../static/views_and_triggers/up/project.sql | 19 +- master/test/streamdata/stream_data.go | 8 +- proto/pkg/apiv1/api.pb.go | 2263 +++++++++-------- proto/pkg/apiv1/api.pb.gw.go | 98 + proto/pkg/apiv1/project.pb.go | 786 +++--- proto/pkg/projectv1/project.pb.go | 27 +- proto/src/determined/api/v1/api.proto | 10 + proto/src/determined/api/v1/project.proto | 20 + proto/src/determined/project/v1/project.proto | 2 + webui/react/src/services/api-ts-sdk/api.ts | 96 + 26 files changed, 2464 insertions(+), 1613 deletions(-) diff --git a/harness/determined/cli/project.py b/harness/determined/cli/project.py index 9d9c02586e19..b95b46a89eaa 100644 --- a/harness/determined/cli/project.py +++ b/harness/determined/cli/project.py @@ -47,12 +47,13 @@ def format_experiment(e: bindings.v1Experiment) -> List[Any]: def render_project(project: bindings.v1Project) -> None: values = [ project.id, + project.key, project.name, project.description, project.numExperiments, project.numActiveExperiments, ] - PROJECT_HEADERS = ["ID", "Name", "Description", "# Experiments", "# Active Experiments"] + PROJECT_HEADERS = ["ID", "Key", "Name", "Description", "# Experiments", "# Active Experiments"] render.tabulate_or_csv(PROJECT_HEADERS, [values], False) @@ -100,7 +101,7 @@ def create_project(args: argparse.Namespace) -> None: sess = cli.setup_session(args) w = api.workspace_by_name(sess, args.workspace_name) content = bindings.v1PostProjectRequest( - name=args.name, description=args.description, workspaceId=w.id + name=args.name, description=args.description, workspaceId=w.id, key=args.key ) p = bindings.post_PostProject(sess, body=content, workspaceId=w.id).project if args.json: @@ -154,7 +155,9 @@ def delete_project(args: argparse.Namespace) -> None: def edit_project(args: argparse.Namespace) -> None: sess = cli.setup_session(args) (w, p) = project_by_name(sess, args.workspace_name, args.project_name) - updated = bindings.v1PatchProject(name=args.new_name, description=args.description) + updated = bindings.v1PatchProject( + name=args.new_name, description=args.description, key=args.key + ) new_p = bindings.patch_PatchProject(sess, body=updated, id=p.id).project if args.json: @@ -247,6 +250,7 @@ def unarchive_project(args: argparse.Namespace) -> None: cli.Arg("workspace_name", type=str, help="name of the workspace"), cli.Arg("name", type=str, help="name of the project"), cli.Arg("--description", type=str, help="description of the project"), + cli.Arg("--key", type=str, help="key of the project"), cli.Arg("--json", action="store_true", help="print as JSON"), ], ), @@ -309,6 +313,7 @@ def unarchive_project(args: argparse.Namespace) -> None: cli.Arg("project_name", type=str, help="name of the project"), cli.Arg("--new_name", type=str, help="new name of the project"), cli.Arg("--description", type=str, help="description of the project"), + cli.Arg("--key", type=str, help="key of the project"), cli.Arg("--json", action="store_true", help="print as JSON"), ], ), diff --git a/harness/determined/cli/workspace.py b/harness/determined/cli/workspace.py index 6207485232ab..1394ac6a2ca7 100644 --- a/harness/determined/cli/workspace.py +++ b/harness/determined/cli/workspace.py @@ -9,7 +9,7 @@ from determined.common.api import bindings, errors from determined.common.experimental import workspace -PROJECT_HEADERS = ["ID", "Name", "Description", "# Experiments", "# Active Experiments"] +PROJECT_HEADERS = ["ID", "Key", "Name", "Description", "# Experiments", "# Active Experiments"] WORKSPACE_HEADERS = [ "ID", "Name", @@ -121,6 +121,7 @@ def list_workspace_projects(args: argparse.Namespace) -> None: values = [ [ p.id, + p.key, p.name, p.description, p.n_experiments, diff --git a/harness/determined/common/api/bindings.py b/harness/determined/common/api/bindings.py index 744acdfd934f..2f66877f5b4f 100644 --- a/harness/determined/common/api/bindings.py +++ b/harness/determined/common/api/bindings.py @@ -5799,6 +5799,29 @@ def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: } return out +class v1GetProjectByKeyResponse(Printable): + """Response to GetProjectByKeyRequest.""" + + def __init__( + self, + *, + project: "v1Project", + ): + self.project = project + + @classmethod + def from_json(cls, obj: Json) -> "v1GetProjectByKeyResponse": + kwargs: "typing.Dict[str, typing.Any]" = { + "project": v1Project.from_json(obj["project"]), + } + return cls(**kwargs) + + def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: + out: "typing.Dict[str, typing.Any]" = { + "project": self.project.to_json(omit_unset), + } + return out + class v1GetProjectColumnsResponse(Printable): def __init__( @@ -9784,16 +9807,20 @@ def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: class v1PatchProject(Printable): """PatchProject is a partial update to a project with all optional fields.""" description: "typing.Optional[str]" = None + key: "typing.Optional[str]" = None name: "typing.Optional[str]" = None def __init__( self, *, description: "typing.Union[str, None, Unset]" = _unset, + key: "typing.Union[str, None, Unset]" = _unset, name: "typing.Union[str, None, Unset]" = _unset, ): if not isinstance(description, Unset): self.description = description + if not isinstance(key, Unset): + self.key = key if not isinstance(name, Unset): self.name = name @@ -9803,6 +9830,8 @@ def from_json(cls, obj: Json) -> "v1PatchProject": } if "description" in obj: kwargs["description"] = obj["description"] + if "key" in obj: + kwargs["key"] = obj["key"] if "name" in obj: kwargs["name"] = obj["name"] return cls(**kwargs) @@ -9812,6 +9841,8 @@ def to_json(self, omit_unset: bool = False) -> typing.Dict[str, typing.Any]: } if not omit_unset or "description" in vars(self): out["description"] = self.description + if not omit_unset or "key" in vars(self): + out["key"] = self.key if not omit_unset or "name" in vars(self): out["name"] = self.name return out @@ -18978,6 +19009,32 @@ def get_GetProject( return v1GetProjectResponse.from_json(_resp.json()) raise APIHttpError("get_GetProject", _resp) +def get_GetProjectByKey( + session: "api.BaseSession", + *, + key: str, +) -> "v1GetProjectByKeyResponse": + """Get the request project by key. + + - key: The key of the project. + """ + _params = None + if type(key) == str: + key = parse.quote(key) + _resp = session._do_request( + method="GET", + path=f"/api/v1/projects/key/{key}", + params=_params, + json=None, + data=None, + headers=None, + timeout=None, + stream=False, + ) + if _resp.status_code == 200: + return v1GetProjectByKeyResponse.from_json(_resp.json()) + raise APIHttpError("get_GetProjectByKey", _resp) + def get_GetProjectColumns( session: "api.BaseSession", *, diff --git a/harness/determined/common/experimental/project.py b/harness/determined/common/experimental/project.py index 9a2ea7a82332..b7c91e1d5017 100644 --- a/harness/determined/common/experimental/project.py +++ b/harness/determined/common/experimental/project.py @@ -11,6 +11,7 @@ class Project: Attributes: id: (int) The ID of the project. + key: (Mutable, str) The key of the project. archived: (Mutable, bool) True if experiment is archived, else false. description: (Mutable, str) The description of the project. n_active_experiments: (int) The number of active experiments in the project. @@ -45,6 +46,7 @@ def __init__( self.notes: Optional[List[Dict[str, str]]] = None self.workspace_id: Optional[int] = None self.username: Optional[str] = None + self.key: Optional[str] = None @classmethod def _from_bindings( @@ -64,6 +66,7 @@ def _hydrate(self, project_bindings: bindings.v1Project) -> None: self.notes = [note.to_json() for note in project_bindings.notes] self.workspace_id = project_bindings.workspaceId self.username = project_bindings.username + self.key = project_bindings.key def reload(self) -> None: resp = bindings.get_GetProject(session=self._session, id=self.id) @@ -93,6 +96,17 @@ def set_description(self, description: str) -> None: self.description = resp.project.description + def set_key(self, key: str) -> None: + """Set the project's key locally and on master. + + Args: + key: The new key to set. + """ + patch_body = bindings.v1PatchProject(key=key) + resp = bindings.patch_PatchProject(session=self._session, id=self.id, body=patch_body) + + self.key = resp.project.key + def set_name(self, name: str) -> None: """Set the project's name locally and on master. diff --git a/harness/determined/common/streams/wire.py b/harness/determined/common/streams/wire.py index b25d2d59b4e4..371dd1c2a4c1 100644 --- a/harness/determined/common/streams/wire.py +++ b/harness/determined/common/streams/wire.py @@ -164,6 +164,7 @@ def __init__( user_id: "int", immutable: "bool", state: "str", + key: "str", seq: "int", ) -> None: self.id = id @@ -176,6 +177,7 @@ def __init__( self.user_id = user_id self.immutable = immutable self.state = state + self.key = key self.seq = seq diff --git a/master/internal/api_project.go b/master/internal/api_project.go index 91e80578cdfa..f96a8b1eb282 100644 --- a/master/internal/api_project.go +++ b/master/internal/api_project.go @@ -3,8 +3,8 @@ package internal import ( "context" "fmt" - "regexp" "sort" + "strings" "github.com/uptrace/bun" @@ -28,10 +28,6 @@ import ( "github.com/determined-ai/determined/proto/pkg/rbacv1" "github.com/determined-ai/determined/proto/pkg/workspacev1" ) -const ( - // ProjectKeyRegex is the regex pattern for a project key. - ProjectKeyRegex = "^[A-Z0-9]{5}$" -) var defaultRunsTableColumns = []*projectv1.ProjectColumn{ { @@ -227,22 +223,44 @@ func getRunSummaryMetrics(ctx context.Context, whereClause string, group []int) return columns, nil } +func (a *apiServer) GetProjectByKey( + ctx context.Context, + req *apiv1.GetProjectByKeyRequest, +) (*apiv1.GetProjectByKeyResponse, error) { + curUser, _, err := grpcutil.GetUser(ctx) + if err != nil { + return nil, err + } + + p, err := project.GetProjectByKey(ctx, req.Key) + if errors.Is(err, db.ErrNotFound) { + return nil, api.NotFoundErrs("project", req.Key, true) + } else if err != nil { + return nil, err + } + + protoProject := p.Proto() + if err := project.AuthZProvider.Get().CanGetProject(ctx, *curUser, protoProject); err != nil { + return nil, err + } + return &apiv1.GetProjectByKeyResponse{Project: protoProject}, nil +} func (a *apiServer) GetProjectByID( ctx context.Context, id int32, curUser model.User, ) (*projectv1.Project, error) { notFoundErr := api.NotFoundErrs("project", fmt.Sprint(id), true) - p := &projectv1.Project{} - if err := a.m.db.QueryProto("get_project", p, id); errors.Is(err, db.ErrNotFound) { + p, err := project.GetProjectByID(ctx, int(id)) + if err != nil && errors.Is(err, db.ErrNotFound) { return nil, notFoundErr } else if err != nil { return nil, errors.Wrapf(err, "error fetching project (%d) from database", id) } - - if err := project.AuthZProvider.Get().CanGetProject(ctx, curUser, p); err != nil { + protoProject := p.Proto() + if err := project.AuthZProvider.Get().CanGetProject(ctx, curUser, protoProject); err != nil { return nil, authz.SubIfUnauthorized(err, notFoundErr) } - return p, nil + return protoProject, nil } func (a *apiServer) getProjectColumnsByID( @@ -716,19 +734,6 @@ func (a *apiServer) getProjectNumericMetricsRange( return metricsValues, searcherMetricsValue, nil } -func validateProjectKey(key string) error { - switch { - case len(key) > project.MaxProjectKeyLength: - return errors.Errorf("project key cannot be longer than %d characters", project.MaxProjectKeyLength) - case len(key) < 1: - return errors.New("project key cannot be empty") - case !regexp.MustCompile(ProjectKeyRegex).MatchString(key): - return errors.Errorf("project key can only contain alphanumeric characters") - default: - return nil - } -} - func (a *apiServer) PostProject( ctx context.Context, req *apiv1.PostProjectRequest, ) (*apiv1.PostProjectResponse, error) { @@ -745,7 +750,9 @@ func (a *apiServer) PostProject( } if req.Key != nil { - if err = validateProjectKey(*req.Key); err != nil { + // allow user to provide a key, but ensure it is uppercase. + *req.Key = strings.ToUpper(*req.Key) + if err = project.ValidateProjectKey(*req.Key); err != nil { return nil, status.Error(codes.InvalidArgument, err.Error()) } } @@ -758,9 +765,8 @@ func (a *apiServer) PostProject( Username: curUser.Username, } - if err = project.InsertProject(ctx, p, req.Key); err != nil { - return nil, err - } + err = project.InsertProject(ctx, p, req.Key) + err = apiutils.MapAndFilterErrors(err, nil, nil) return &apiv1.PostProjectResponse{Project: p.Proto()}, errors.Wrapf(err, "error creating project %s in database", req.Name) } @@ -804,53 +810,24 @@ func (a *apiServer) PutProjectNotes( func (a *apiServer) PatchProject( ctx context.Context, req *apiv1.PatchProjectRequest, ) (*apiv1.PatchProjectResponse, error) { - currProject, currUser, err := a.getProjectAndCheckCanDoActions(ctx, req.Id) + curUser, _, err := grpcutil.GetUser(ctx) if err != nil { - return nil, err - } - if currProject.Archived { - return nil, errors.Errorf("project (%d) is archived and cannot have attributes updated", - currProject.Id) - } - if currProject.Immutable { - return nil, errors.Errorf("project (%v) is immutable and cannot have attributes updated", - currProject.Id) + return nil, fmt.Errorf("failed to get user while updating project") } - madeChanges := false - if req.Project.Name != nil && req.Project.Name.Value != currProject.Name { - if err = project.AuthZProvider.Get().CanSetProjectName(ctx, currUser, currProject); err != nil { - return nil, status.Error(codes.PermissionDenied, err.Error()) - } - - log.Infof("project (%d) name changing from \"%s\" to \"%s\"", - currProject.Id, currProject.Name, req.Project.Name.Value) - madeChanges = true - currProject.Name = req.Project.Name.Value - } - - if req.Project.Description != nil && req.Project.Description.Value != currProject.Description { - if err = project.AuthZProvider.Get(). - CanSetProjectDescription(ctx, currUser, currProject); err != nil { - return nil, status.Error(codes.PermissionDenied, err.Error()) - } - - log.Infof("project (%d) description changing from \"%s\" to \"%s\"", - currProject.Id, currProject.Description, req.Project.Description.Value) - madeChanges = true - currProject.Description = req.Project.Description.Value - } - - if !madeChanges { - return &apiv1.PatchProjectResponse{Project: currProject}, nil + updatedProject, err := project.UpdateProject( + ctx, + req.Id, + *curUser, + req.Project, + ) + if err != nil && errors.Is(err, db.ErrNotFound) { + return nil, api.NotFoundErrs("project", fmt.Sprint(int(req.Id)), true) + } else if err != nil { + log.WithError(err).Errorf("failed to update project %d", req.Id) + return nil, err } - - finalProject := &projectv1.Project{} - err = a.m.db.QueryProto("update_project", - finalProject, currProject.Id, currProject.Name, currProject.Description) - - return &apiv1.PatchProjectResponse{Project: finalProject}, - errors.Wrapf(err, "error updating project (%d) in database", currProject.Id) + return &apiv1.PatchProjectResponse{Project: updatedProject.Proto()}, nil } func (a *apiServer) deleteProject(ctx context.Context, projectID int32, diff --git a/master/internal/api_project_intg_test.go b/master/internal/api_project_intg_test.go index 6abcdcc39a14..9341df3f8083 100644 --- a/master/internal/api_project_intg_test.go +++ b/master/internal/api_project_intg_test.go @@ -302,6 +302,13 @@ func TestAuthZRoutesGetProjectThenAction(t *testing.T) { }) return err }}, + {"CanSetProjectKey", func(id int) error { + _, err := api.PatchProject(ctx, &apiv1.PatchProjectRequest{ + Project: &projectv1.PatchProject{Key: wrapperspb.String("newma")}, + Id: int32(id), + }) + return err + }}, {"CanDeleteProject", func(id int) error { _, err := api.DeleteProject(ctx, &apiv1.DeleteProjectRequest{ Id: int32(id), @@ -327,12 +334,14 @@ func TestAuthZRoutesGetProjectThenAction(t *testing.T) { // Project not found. err := curCase.IDToReqCall(-9999) + require.Error(t, err) require.Equal(t, apiPkg.NotFoundErrs("project", "-9999", true).Error(), err.Error()) // Project can't be viewed. projectAuthZ.On("CanGetProject", mock.Anything, mock.Anything, mock.Anything). Return(authz2.PermissionDeniedError{}).Once() err = curCase.IDToReqCall(projectID) + require.Error(t, err) require.Equal(t, apiPkg.NotFoundErrs("project", fmt.Sprint(projectID), true).Error(), err.Error()) @@ -341,6 +350,7 @@ func TestAuthZRoutesGetProjectThenAction(t *testing.T) { projectAuthZ.On("CanGetProject", mock.Anything, mock.Anything, mock.Anything). Return(expectedErr).Once() err = curCase.IDToReqCall(projectID) + require.Error(t, err) require.Equal(t, expectedErr, err) // Can view but can't perform action. @@ -350,6 +360,7 @@ func TestAuthZRoutesGetProjectThenAction(t *testing.T) { projectAuthZ.On(curCase.DenyFuncName, mock.Anything, mock.Anything, mock.Anything). Return(fmt.Errorf(curCase.DenyFuncName + "Deny")) err = curCase.IDToReqCall(projectID) + require.Error(t, err) require.Equal(t, expectedErr.Error(), err.Error()) } } @@ -485,7 +496,7 @@ func TestCreateProjectWithDuplicateProjectKey(t *testing.T) { Name: projectName + "2", WorkspaceId: wresp.Workspace.Id, Key: &projectKey, }) require.Error(t, err) - require.Equal(t, status.Errorf(codes.AlreadyExists, "project with key %s already exists", projectKey), err) + require.ErrorContains(t, err, fmt.Sprintf("project key %s is already in use", projectKey)) } func TestCreateProjectWithDefaultKeyAndDuplicatePrefix(t *testing.T) { @@ -534,3 +545,98 @@ func TestConcurrentProjectKeyGenerationAttempts(t *testing.T) { }) } } + +func TestPatchProject(t *testing.T) { + api, _, ctx := setupAPITest(t, nil) + wresp, werr := api.PostWorkspace(ctx, &apiv1.PostWorkspaceRequest{Name: uuid.New().String()}) + require.NoError(t, werr) + + projectName := "test-project" + uuid.New().String() + resp, err := api.PostProject(ctx, &apiv1.PostProjectRequest{ + Name: projectName, WorkspaceId: wresp.Workspace.Id, + }) + require.NoError(t, err) + + newName := uuid.New().String() + newDescription := uuid.New().String() + newKey := uuid.New().String()[:project.MaxProjectKeyLength] + _, err = api.PatchProject(ctx, &apiv1.PatchProjectRequest{ + Id: resp.Project.Id, + Project: &projectv1.PatchProject{ + Name: wrapperspb.String(newName), + Description: wrapperspb.String(newDescription), + Key: wrapperspb.String(newKey), + }, + }) + require.NoError(t, err) + + // Check that the project was updated correctly. + var project model.Project + err = db.Bun().NewSelect(). + Model(&project). + Where("id = ?", resp.Project.Id). + Scan(ctx) + require.NoError(t, err) + require.Equal(t, newName, project.Name) + require.Equal(t, newDescription, project.Description) + require.Equal(t, strings.ToUpper(newKey), project.Key) +} + +func TestPatchProjectWithDuplicateProjectKey(t *testing.T) { + api, _, ctx := setupAPITest(t, nil) + wresp, werr := api.PostWorkspace(ctx, &apiv1.PostWorkspaceRequest{Name: uuid.New().String()}) + require.NoError(t, werr) + + projectName := "test-project" + uuid.New().String() + resp1, err := api.PostProject(ctx, &apiv1.PostProjectRequest{ + Name: projectName, WorkspaceId: wresp.Workspace.Id, + }) + require.NoError(t, err) + + projectName = "test-project" + uuid.New().String() + resp2, err := api.PostProject(ctx, &apiv1.PostProjectRequest{ + Name: projectName, WorkspaceId: wresp.Workspace.Id, + }) + require.NoError(t, err) + + _, err = api.PatchProject(ctx, &apiv1.PatchProjectRequest{ + Id: resp2.Project.Id, + Project: &projectv1.PatchProject{ + Key: wrapperspb.String(resp1.Project.Key), + }, + }) + require.Error(t, err) + require.Equal(t, status.Errorf(codes.AlreadyExists, "project key %s is already in use", resp1.Project.Key), err) +} + +func TestPatchProjectWithConcurrent(t *testing.T) { + api, _, ctx := setupAPITest(t, nil) + wresp, werr := api.PostWorkspace(ctx, &apiv1.PostWorkspaceRequest{Name: uuid.New().String()}) + require.NoError(t, werr) + + projectName := "test-project" + uuid.New().String() + resp, err := api.PostProject(ctx, &apiv1.PostProjectRequest{ + Name: projectName, WorkspaceId: wresp.Workspace.Id, + }) + require.NoError(t, err) + + newName := "new-name" + newDescription := "new-description" + errgrp := errgroupx.WithContext(ctx) + for i := 0; i < 20; i++ { + newKey := uuid.New().String()[:project.MaxProjectKeyLength] + errgrp.Go(func(context.Context) error { + _, err := api.PatchProject(ctx, &apiv1.PatchProjectRequest{ + Id: resp.Project.Id, + Project: &projectv1.PatchProject{ + Name: wrapperspb.String(newName), + Description: wrapperspb.String(newDescription), + Key: wrapperspb.String(newKey), + }, + }) + require.NoError(t, err) + return err + }) + } + require.NoError(t, errgrp.Wait()) +} diff --git a/master/internal/project/authz_basic_impl.go b/master/internal/project/authz_basic_impl.go index 6e60e342abcd..ab57559fa942 100644 --- a/master/internal/project/authz_basic_impl.go +++ b/master/internal/project/authz_basic_impl.go @@ -133,6 +133,16 @@ func (a *ProjectAuthZBasic) CanUnarchiveProject( return nil } +// CanSetProjectKey returns an error if the user isn't the owner of the project or workspace. +func (a *ProjectAuthZBasic) CanSetProjectKey( + ctx context.Context, curUser model.User, project *projectv1.Project, +) error { + if err := shouldBeAdminOrOwnWorkspaceOrProject(curUser, project); err != nil { + return fmt.Errorf("can't set project key: %w", err) + } + return nil +} + func init() { AuthZProvider.Register("basic", &ProjectAuthZBasic{}) } diff --git a/master/internal/project/authz_iface.go b/master/internal/project/authz_iface.go index f94c0ef1d9c1..0b59a19df017 100644 --- a/master/internal/project/authz_iface.go +++ b/master/internal/project/authz_iface.go @@ -28,6 +28,7 @@ type ProjectAuthZ interface { CanSetProjectDescription( ctx context.Context, curUser model.User, project *projectv1.Project, ) error + CanSetProjectKey(ctx context.Context, curUser model.User, project *projectv1.Project) error // DELETE /api/v1/projects/:project_id CanDeleteProject( diff --git a/master/internal/project/authz_permissive.go b/master/internal/project/authz_permissive.go index 6868cb9172a5..75588c273eda 100644 --- a/master/internal/project/authz_permissive.go +++ b/master/internal/project/authz_permissive.go @@ -94,6 +94,14 @@ func (p *ProjectAuthZPermissive) CanUnarchiveProject( return (&ProjectAuthZBasic{}).CanUnarchiveProject(ctx, curUser, project) } +// CanSetProjectKey calls RBAC authz but enforces basic authz. +func (p *ProjectAuthZPermissive) CanSetProjectKey( + ctx context.Context, curUser model.User, project *projectv1.Project, +) error { + _ = (&ProjectAuthZRBAC{}).CanSetProjectKey(ctx, curUser, project) + return (&ProjectAuthZBasic{}).CanSetProjectKey(ctx, curUser, project) +} + func init() { AuthZProvider.Register("permissive", &ProjectAuthZPermissive{}) } diff --git a/master/internal/project/authz_rbac.go b/master/internal/project/authz_rbac.go index 7aa82574cd2e..1de15a0941b3 100644 --- a/master/internal/project/authz_rbac.go +++ b/master/internal/project/authz_rbac.go @@ -246,3 +246,19 @@ func (a *ProjectAuthZRBAC) CanUnarchiveProject( return permCheck(ctx, curUser, project.WorkspaceId, rbacv1.PermissionType_PERMISSION_TYPE_UPDATE_PROJECT) } + +// CanSetProjectKey returns an error if a user doesn't have "UPDATE_PROJECT" globally +// or on the target project's workspace. +func (a *ProjectAuthZRBAC) CanSetProjectKey( + ctx context.Context, curUser model.User, project *projectv1.Project, +) (err error) { + fields := audit.ExtractLogFields(ctx) + logEntryWithProjectTarget(fields, curUser, + rbacv1.PermissionType_PERMISSION_TYPE_UPDATE_PROJECT, project.Id) + defer func() { + audit.LogFromErr(fields, err) + }() + + return permCheck(ctx, curUser, project.WorkspaceId, + rbacv1.PermissionType_PERMISSION_TYPE_UPDATE_PROJECT) +} diff --git a/master/internal/project/postgres_project.go b/master/internal/project/postgres_project.go index 2dcc987248d4..e77f4f65e643 100644 --- a/master/internal/project/postgres_project.go +++ b/master/internal/project/postgres_project.go @@ -4,16 +4,21 @@ import ( "context" "database/sql" "fmt" + "regexp" "strings" "github.com/pkg/errors" log "github.com/sirupsen/logrus" "github.com/uptrace/bun" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "github.com/determined-ai/determined/master/internal/authz" "github.com/determined-ai/determined/master/internal/db" "github.com/determined-ai/determined/master/internal/workspace" "github.com/determined-ai/determined/master/pkg/model" "github.com/determined-ai/determined/master/pkg/random" + "github.com/determined-ai/determined/proto/pkg/projectv1" ) const ( @@ -23,8 +28,72 @@ const ( MaxProjectKeyPrefixLength = 3 // MaxRetries is the maximum number of retries for transaction conflicts. MaxRetries = 5 + // ProjectKeyRegex is the regex pattern for a project key. + ProjectKeyRegex = "^[A-Z0-9]{1,5}$" ) +// getProjectColumns returns a query with the columns for a project, not including experiment +// information. +func getProjectColumns(q *bun.SelectQuery) *bun.SelectQuery { + return q. + ColumnExpr("p.id"). + ColumnExpr("p.name"). + ColumnExpr("'WORKSPACE_STATE_' || p.state AS state"). + ColumnExpr("p.error_message"). + ColumnExpr("p.workspace_id"). + ColumnExpr("p.description"). + ColumnExpr("p.archived"). + ColumnExpr("p.immutable"). + ColumnExpr("p.notes"). + ColumnExpr("(SELECT username FROM users WHERE id = p.user_id) AS username"). + ColumnExpr("p.user_id"). + ColumnExpr("p.key") +} + +// getProjectByIDTx returns a project by its ID using the provided transaction. +func getProjectByIDTx(ctx context.Context, tx bun.Tx, projectID int) (*model.Project, error) { + p := model.Project{} + err := tx.NewSelect(). + Model(&p). + ModelTableExpr("projects as p"). + ColumnExpr( + "(SELECT MAX(start_time) FROM experiments WHERE project_id = ?) AS last_experiment_started_at", + projectID, + ). + ColumnExpr( + "(SELECT COUNT(*) FROM experiments WHERE project_id = ?) AS num_experiments", + projectID, + ). + ColumnExpr( + "(SELECT COUNT(*) FROM experiments WHERE project_id = ? AND state = 'ACTIVE') AS num_active_experiments", + projectID, + ). + Apply(getProjectColumns). + Where("p.id = ?", projectID). + Scan(ctx) + if err != nil && errors.Is(err, sql.ErrNoRows) { + return nil, db.ErrNotFound + } else if err != nil { + return nil, err + } + return &p, nil +} + +// GetProjectByID returns a project by its ID. +func GetProjectByID(ctx context.Context, projectID int) (*model.Project, error) { + var p *model.Project + err := db.Bun().RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error { + var err error + p, err = getProjectByIDTx(ctx, tx, projectID) + + return err + }) + if err != nil { + return nil, err + } + return p, nil +} + // ProjectByName returns a project's ID if it exists in the given workspace and is not archived. func ProjectByName(ctx context.Context, workspaceName string, projectName string) (int, error) { workspace, err := workspace.WorkspaceByName(ctx, workspaceName) @@ -67,6 +136,33 @@ func ProjectIDByName(ctx context.Context, workspaceID int, projectName string) ( return &pID, nil } +// GetProjectByKey returns a project using its key to identify it. +func GetProjectByKey(ctx context.Context, key string) (*model.Project, error) { + project := &model.Project{} + err := db.Bun().RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error { + var projectID int + err := tx.NewSelect(). + Column("id"). + Table("projects"). + Where("key = ?", key). + Scan(ctx, &projectID) + if err != nil { + return err + } + + project, err = GetProjectByID(ctx, projectID) + if err != nil { + return err + } + return nil + }) + // GetProjectByID handles the case where the project is not found. + if err != nil { + return nil, err + } + return project, nil +} + // GenerateProjectKey generates a unique project key for a project based on its name. func generateProjectKey(ctx context.Context, tx bun.Tx, projectName string) (string, error) { var key string @@ -105,7 +201,17 @@ RetryLoop: p.Key = *requestedKey } _, err = tx.NewInsert().Model(p).Exec(ctx) - if err != nil { + + if err != nil && strings.Contains(err.Error(), db.CodeUniqueViolation) { + switch errString := err.Error(); { + case strings.Contains(errString, "projects_key_key"): + return errors.Wrapf(db.ErrDuplicateRecord, "project key %s is already in use", p.Key) + case strings.Contains(errString, "projects_name_workspace_id_key"): + return errors.Wrapf(db.ErrDuplicateRecord, "project name %s is already in use", p.Name) + default: + return err + } + } else if err != nil { return err } return nil @@ -115,7 +221,7 @@ RetryLoop: switch { case err == nil: break RetryLoop - case requestedKey == nil && strings.Contains(err.Error(), "duplicate key value violates unique constraint"): + case requestedKey == nil && strings.Contains(err.Error(), fmt.Sprintf("project key %s is already in use", p.Key)): log.Debugf("retrying project (%s) insertion due to generated key conflict (%s)", p.Name, p.Key) continue // retry default: @@ -124,3 +230,186 @@ RetryLoop: } return errors.Wrapf(err, "error inserting project %s into database", p.Name) } + +// UpdateProjectKey updates the key of a project. +func UpdateProjectKey(ctx context.Context, projectID int, key string) error { + if len(key) > MaxProjectKeyLength { + return fmt.Errorf("project key must be at most %d characters", MaxProjectKeyLength) + } + if projectID == 0 { + return fmt.Errorf("invalid project ID") + } + return db.Bun().RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error { + _, err := tx.NewUpdate(). + Model(&model.Project{ID: projectID, Key: key}).WherePK("id").Column("key").Exec(ctx) + if err != nil && strings.Contains(err.Error(), "duplicate key value violates unique constraint") { + return fmt.Errorf("project key %s is already in use", key) + } + return err + }) +} + +// ValidateProjectKey validates a project key. +func ValidateProjectKey(key string) error { + switch { + case len(key) > MaxProjectKeyLength: + return errors.Errorf("project key cannot be longer than %d characters", MaxProjectKeyLength) + case len(key) < 1: + return errors.New("project key cannot be empty") + case !regexp.MustCompile(ProjectKeyRegex).MatchString(key): + log.Errorf("project key %s does not match regex %s", key, ProjectKeyRegex) + return errors.Errorf( + "project key can only contain alphanumeric characters: %s", + key, + ) + default: + return nil + } +} + +// UpdateProject updates a project in the database. +func UpdateProject( + ctx context.Context, + projectID int32, + curUser model.User, + p *projectv1.PatchProject, +) (*model.Project, error) { + finalProject := &model.Project{} + + if p.Key != nil { + // allow user to provide a key, but ensure it is uppercase. + p.Key.Value = strings.ToUpper(p.Key.Value) + } + + err := db.Bun().RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error { + currentProject := model.Project{} + err := tx.NewSelect().Model(¤tProject). + Column("id"). + Column("archived"). + Column("immutable"). + Column("name"). + Column("description"). + Column("key"). + Column("workspace_id"). + Where("id = ?", projectID). + For("UPDATE"). + Scan(ctx) + if errors.Is(err, sql.ErrNoRows) { + return db.ErrNotFound + } else if err != nil { + return errors.Wrapf(err, "error fetching project (%d) from database", projectID) + } + if err = AuthZProvider.Get().CanGetProject(ctx, curUser, currentProject.Proto()); err != nil { + return authz.SubIfUnauthorized(err, db.ErrNotFound) + } + switch { + case currentProject.Archived: + return fmt.Errorf("project (%d) is archived and cannot have attributes updated", projectID) + case currentProject.Immutable: + return fmt.Errorf("project (%d) is immutable and cannot have attributes updated", projectID) + } + + var madeChanges bool + protoProject := currentProject.Proto() + if p.Name != nil && p.Name.Value != currentProject.Name { + if err = AuthZProvider.Get().CanSetProjectName(ctx, curUser, protoProject); err != nil { + return status.Error(codes.PermissionDenied, err.Error()) + } + log.Infof( + "project (%d) name changing from \"%s\" to \"%s\"", + currentProject.ID, + currentProject.Name, + p.Name.Value, + ) + currentProject.Name = p.Name.Value + madeChanges = true + } + + if p.Description != nil && p.Description.Value != currentProject.Description { + if err = AuthZProvider.Get().CanSetProjectDescription(ctx, curUser, protoProject); err != nil { + return status.Error(codes.PermissionDenied, err.Error()) + } + log.Infof( + "project (%d) description changing from \"%s\" to \"%s\"", + currentProject.ID, + currentProject.Description, + p.Description.Value, + ) + currentProject.Description = p.Description.Value + madeChanges = true + } + + if p.Key != nil && p.Key.Value != currentProject.Key { + if err = AuthZProvider.Get().CanSetProjectKey(ctx, curUser, protoProject); err != nil { + return status.Error(codes.PermissionDenied, err.Error()) + } + log.Infof( + "project (%d) key changing from \"%s\" to \"%s\"", + currentProject.ID, + currentProject.Key, + p.Key.Value, + ) + currentProject.Key = p.Key.Value + madeChanges = true + } + + if !madeChanges { + finalProject = ¤tProject + return nil + } + + _, err = tx.NewUpdate().Table("projects"). + Set("name = ?", currentProject.Name). + Set("description = ?", currentProject.Description). + Set("key = ?", currentProject.Key). + Where("id = ?", currentProject.ID). + Exec(ctx) + if err != nil { + if strings.Contains(err.Error(), db.CodeUniqueViolation) { + switch { + case strings.Contains(err.Error(), "projects_name_key"): + return status.Errorf( + codes.AlreadyExists, + "project name %s is already in use", + currentProject.Name, + ) + case strings.Contains(err.Error(), "projects_key_key"): + return status.Errorf( + codes.AlreadyExists, + "project key %s is already in use", + currentProject.Key, + ) + } + } + return errors.Wrapf(db.MatchSentinelError(err), "error updating project %s", currentProject.Name) + } + + // no need to lock the project since it's already been locked above + err = tx.NewSelect().Model(finalProject). + ModelTableExpr("projects as p"). + ColumnExpr( + "(SELECT MAX(start_time) FROM experiments WHERE project_id = ?) AS last_experiment_started_at", + projectID, + ). + ColumnExpr( + "(SELECT COUNT(*) FROM experiments WHERE project_id = ?) AS num_experiments", + projectID, + ). + ColumnExpr( + "(SELECT COUNT(*) FROM experiments WHERE project_id = ? AND state = 'ACTIVE') AS num_active_experiments", + projectID, + ). + Apply(getProjectColumns). + Where("p.id = ?", projectID). + Scan(ctx) + // finalProject, err = GetProjectByID(ctx, currentProject.ID) + if err != nil { + return err + } + return nil + }) + if err != nil { + return nil, err + } + return finalProject, nil +} diff --git a/master/internal/project/postgres_project_intg_test.go b/master/internal/project/postgres_project_intg_test.go index c54c9a2a78b4..07a6a5a77a4a 100644 --- a/master/internal/project/postgres_project_intg_test.go +++ b/master/internal/project/postgres_project_intg_test.go @@ -5,9 +5,11 @@ package project import ( "context" + "strings" "testing" "github.com/stretchr/testify/require" + "gopkg.in/oauth2.v3/utils/uuid" "gotest.tools/assert" internaldb "github.com/determined-ai/determined/master/internal/db" @@ -42,3 +44,58 @@ func TestProjectByName(t *testing.T) { require.Error(t, err) }) } + +func TestGetProjectByKey(t *testing.T) { + require.NoError(t, etc.SetRootPath(internaldb.RootFromDB)) + db, close := internaldb.MustResolveTestPostgres(t) + defer close() + internaldb.MustMigrateTestPostgres(t, db, internaldb.MigrationsFromDB) + + // add a workspace, and project + workspaceID, _ := internaldb.RequireMockWorkspaceID(t, db, "") + projectID, _ := internaldb.RequireMockProjectID(t, db, workspaceID, false) + + t.Run("valid project key", func(t *testing.T) { + key := uuid.Must(uuid.NewRandom()).String()[:MaxProjectKeyLength] + err := UpdateProjectKey(context.Background(), projectID, key) + require.NoError(t, err) + project, err := GetProjectByKey(context.Background(), key) + require.NoError(t, err) + assert.Equal(t, projectID, project.ID) + }) + + t.Run("non-existent project key", func(t *testing.T) { + _, err := GetProjectByKey(context.Background(), "bogus") + require.Error(t, err) + require.True(t, strings.Contains(err.Error(), "not found")) + }) +} + +func TestUpdateProjectKey(t *testing.T) { + require.NoError(t, etc.SetRootPath(internaldb.RootFromDB)) + db, close := internaldb.MustResolveTestPostgres(t) + defer close() + internaldb.MustMigrateTestPostgres(t, db, internaldb.MigrationsFromDB) + + // add a workspace, and project + workspaceID, _ := internaldb.RequireMockWorkspaceID(t, db, "") + projectID, _ := internaldb.RequireMockProjectID(t, db, workspaceID, false) + + t.Run("update project key", func(t *testing.T) { + key := uuid.Must(uuid.NewRandom()).String()[:MaxProjectKeyLength] + err := UpdateProjectKey(context.Background(), projectID, key) + require.NoError(t, err) + }) + + t.Run("update project key with invalid project id", func(t *testing.T) { + key := uuid.Must(uuid.NewRandom()).String()[:MaxProjectKeyLength] + err := UpdateProjectKey(context.Background(), 0, key) + require.Error(t, err) + }) + + t.Run("update project key with invalid key", func(t *testing.T) { + invalidKey := strings.Repeat("a", MaxProjectKeyLength+1) + err := UpdateProjectKey(context.Background(), projectID, invalidKey) + require.Error(t, err) + }) +} diff --git a/master/internal/stream/projects.go b/master/internal/stream/projects.go index 4c4a162fef74..523978dc0636 100644 --- a/master/internal/stream/projects.go +++ b/master/internal/stream/projects.go @@ -47,6 +47,7 @@ type ProjectMsg struct { UserID int `bun:"user_id" json:"user_id"` Immutable bool `bun:"immutable" json:"immutable"` State model.WorkspaceState `bun:"state" json:"state"` + Key string `bun:"key" json:"key"` // metadata Seq int64 `bun:"seq" json:"seq"` diff --git a/master/static/migrations/20240508154139_add-custom-project-key.tx.up.sql b/master/static/migrations/20240508154139_add-custom-project-key.tx.up.sql index e2c54329bcf6..715c8a030e19 100644 --- a/master/static/migrations/20240508154139_add-custom-project-key.tx.up.sql +++ b/master/static/migrations/20240508154139_add-custom-project-key.tx.up.sql @@ -1,33 +1,28 @@ -CREATE OR REPLACE FUNCTION function_generate_project_key( - max_key_length INTEGER, - max_prefix_length INTEGER, - input_string TEXT -) -RETURNS TEXT AS $$ +ALTER TABLE projects ADD COLUMN IF NOT EXISTS key VARCHAR(5) UNIQUE; + +DO $$ DECLARE + project RECORD; prefix TEXT; prefix_length INT; suffix TEXT; + max_key_length INT := 5; + max_prefix_length INT := 3; BEGIN - -- Take the first 3 characters of the input string - prefix := UPPER(LEFT(input_string, max_prefix_length)); - prefix_length := LENGTH(prefix); - -- Generate a random suffix - suffix := UPPER(LEFT(md5(random()::text), max_key_length - prefix_length)); - - -- Check if the key already exists and loop until we find a unique key - WHILE EXISTS(SELECT 1 FROM projects WHERE key = prefix || suffix) LOOP - suffix := UPPER(LEFT(md5(random()::text), max_key_length - prefix_length)); + FOR project IN SELECT * FROM projects WHERE key IS NULL LOOP + -- Take the first 3 characters of the project name + prefix := UPPER(LEFT(project.name, max_prefix_length)); + prefix_length := LENGTH(prefix); + -- Generate a random suffix + suffix := UPPER(LEFT(md5(random()::text), max_key_length - prefix_length)); + + -- Check if the key already exists and loop until we find a unique key + WHILE EXISTS(SELECT 1 FROM projects WHERE key = prefix || suffix) LOOP + suffix := UPPER(LEFT(md5(random()::text), max_key_length - prefix_length)); + END LOOP; + + -- Update the project key + UPDATE projects SET key = prefix || suffix WHERE id = project.id; END LOOP; - - RETURN prefix || suffix; END; $$ LANGUAGE plpgsql; - -ALTER TABLE projects ADD COLUMN IF NOT EXISTS key VARCHAR(5) UNIQUE; - -UPDATE - projects -SET - key = function_generate_project_key(5, 3, name) -WHERE key IS NULL; diff --git a/master/static/srv/update_project.sql b/master/static/srv/update_project.sql index e3430f5ee82b..efbecb8639b5 100644 --- a/master/static/srv/update_project.sql +++ b/master/static/srv/update_project.sql @@ -8,7 +8,7 @@ WITH pe AS ( ), p AS ( - UPDATE projects SET name = $2, description = $3 + UPDATE projects SET name = $2, description = $3, key = $4 WHERE projects.id = $1 RETURNING projects . * ), @@ -32,5 +32,6 @@ SELECT pe.num_experiments, pe.num_active_experiments, u.username, - p.user_id + p.user_id, + p.key FROM p, pe, u; diff --git a/master/static/views_and_triggers/up/project.sql b/master/static/views_and_triggers/up/project.sql index a85f8fb42474..bfd953afe89f 100644 --- a/master/static/views_and_triggers/up/project.sql +++ b/master/static/views_and_triggers/up/project.sql @@ -15,7 +15,7 @@ BEGIN END; $$; CREATE TRIGGER stream_project_trigger_d BEFORE DELETE ON projects FOR EACH ROW EXECUTE PROCEDURE stream_project_change(); -CREATE TRIGGER stream_project_trigger_iu AFTER INSERT OR UPDATE OF name, description, archived, created_at, notes, workspace_id, user_id, immutable, state ON projects FOR EACH ROW EXECUTE PROCEDURE stream_project_change(); +CREATE TRIGGER stream_project_trigger_iu AFTER INSERT OR UPDATE OF name, description, archived, created_at, notes, workspace_id, user_id, immutable, state, key ON projects FOR EACH ROW EXECUTE PROCEDURE stream_project_change(); CREATE FUNCTION stream_project_notify(before jsonb, after jsonb) RETURNS integer LANGUAGE plpgsql @@ -46,4 +46,19 @@ BEGIN RETURN NEW; END; $$; -CREATE TRIGGER stream_project_trigger_seq BEFORE INSERT OR UPDATE OF name, description, archived, created_at, notes, workspace_id, user_id, immutable, state ON projects FOR EACH ROW EXECUTE PROCEDURE stream_project_seq_modify(); +CREATE TRIGGER stream_project_trigger_seq BEFORE +INSERT + OR +UPDATE + of name, + description, + archived, + created_at, + notes, + workspace_id, + user_id, + immutable, + state, + key +ON + projects FOR EACH ROW EXECUTE PROCEDURE stream_project_seq_modify(); diff --git a/master/test/streamdata/stream_data.go b/master/test/streamdata/stream_data.go index 7c69ba1f78e3..d1649d5a7340 100644 --- a/master/test/streamdata/stream_data.go +++ b/master/test/streamdata/stream_data.go @@ -18,13 +18,7 @@ type ExecutableQuery interface { // GetAddProjectQuery constructs a query to create a new project in the db. func GetAddProjectQuery(proj model.Project) ExecutableQuery { - return db.Bun().NewInsert().Model(&proj).ExcludeColumn( - "workspace_name", - "username", - "num_active_experiments", - "num_experiments", - "last_experiment_started_at", - ) + return db.Bun().NewInsert().Model(&proj) } // GetUpdateProjectQuery constructs a query to update a project. diff --git a/proto/pkg/apiv1/api.pb.go b/proto/pkg/apiv1/api.pb.go index 3c83d7093d5a..79fc608f1633 100644 --- a/proto/pkg/apiv1/api.pb.go +++ b/proto/pkg/apiv1/api.pb.go @@ -78,7 +78,7 @@ var file_determined_api_v1_api_proto_rawDesc = []byte{ 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x70, 0x6f, 0x6f, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x93, 0xb8, 0x02, 0x0a, 0x0a, 0x44, 0x65, 0x74, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xaf, 0xb9, 0x02, 0x0a, 0x0a, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x7e, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x1f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, @@ -2079,566 +2079,575 @@ var file_determined_api_v1_api_proto_rawDesc = []byte{ 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xac, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x2b, 0x2e, 0x64, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x99, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x79, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x42, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x2f, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x6b, 0x65, 0x79, 0x2f, 0x7b, 0x6b, 0x65, + 0x79, 0x7d, 0x12, 0xac, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x92, 0x41, 0x14, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x73, 0x12, 0xe2, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x61, + 0x6e, 0x67, 0x65, 0x12, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x92, 0x41, 0x14, 0x0a, 0x08, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x12, 0xe2, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x38, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, - 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x61, 0x6e, - 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x92, 0x41, 0x14, 0x0a, - 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, - 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0xa0, 0x01, 0x0a, 0x0b, 0x50, - 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, + 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x92, 0x41, 0x14, 0x0a, 0x08, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x2d, + 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0xa0, 0x01, 0x0a, 0x0b, 0x50, 0x6f, 0x73, 0x74, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, + 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xa5, 0x01, 0x0a, 0x0e, 0x41, 0x64, + 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x28, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x3e, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x3a, 0x04, 0x6e, 0x6f, 0x74, + 0x65, 0x12, 0xa5, 0x01, 0x0a, 0x0f, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, + 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x92, 0x41, + 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x28, 0x1a, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x0c, 0x50, 0x61, + 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x92, 0x41, 0x0a, 0x0a, 0x08, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x2a, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xa5, 0x01, - 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, - 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, - 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x23, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x3a, - 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0xa5, 0x01, 0x0a, 0x0f, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, - 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x3b, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x1a, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x94, 0x01, - 0x0a, 0x0c, 0x50, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x26, + 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x92, 0x41, 0x0a, + 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, + 0x32, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x8e, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x2a, 0x15, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x12, 0x99, 0x01, 0x0a, 0x0e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x33, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x20, 0x32, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x07, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x8e, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x92, 0x41, 0x0a, 0x0a, 0x08, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x2a, 0x15, + 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, 0x0a, 0x0a, 0x08, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x99, 0x01, 0x0a, 0x0e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, - 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, - 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, - 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1f, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, - 0x65, 0x12, 0xa1, 0x01, 0x0a, 0x10, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, - 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, 0xa1, 0x01, + 0x0a, 0x10, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x34, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x6e, 0x61, 0x72, - 0x63, 0x68, 0x69, 0x76, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x0b, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x01, 0x2a, - 0x12, 0xaa, 0x01, 0x0a, 0x0e, 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, + 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x0a, + 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, + 0x22, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, + 0x65, 0x12, 0x98, 0x01, 0x0a, 0x0b, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, + 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x3a, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xaa, 0x01, 0x0a, + 0x0e, 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, + 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x28, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x2f, 0x7b, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xb3, 0x01, 0x0a, 0x0f, 0x4d, 0x6f, + 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0x45, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, - 0x22, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0xb3, 0x01, - 0x0a, 0x0f, 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, + 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x65, 0x72, + 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x22, 0x2e, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x78, 0x70, 0x65, + 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, + 0x83, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, + 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x65, + 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, + 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, + 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x0b, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x65, + 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x65, + 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x92, 0x41, 0x0d, 0x0a, 0x0b, 0x45, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, - 0x22, 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6d, 0x6f, 0x76, 0x65, - 0x3a, 0x01, 0x2a, 0x12, 0x83, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, - 0x6f, 0x6b, 0x73, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, - 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x25, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, - 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x0b, 0x50, 0x6f, - 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, - 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x57, - 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x10, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x3a, - 0x07, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x8e, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x65, - 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x92, - 0x41, 0x0a, 0x0a, 0x08, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x17, 0x2a, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, 0x68, - 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8d, 0x01, 0x0a, 0x0b, 0x54, 0x65, - 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, - 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x57, - 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x1a, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x12, 0x83, 0x01, 0x0a, 0x08, 0x47, 0x65, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x57, 0x65, 0x62, 0x68, 0x6f, + 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x10, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x3a, 0x07, 0x77, 0x65, 0x62, + 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x8e, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, + 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x92, 0x41, 0x0a, 0x0a, 0x08, + 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x2a, 0x15, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8d, 0x01, 0x0a, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x57, 0x65, + 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x57, 0x65, + 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x54, 0x65, 0x73, 0x74, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x57, 0x65, 0x62, 0x68, 0x6f, + 0x6f, 0x6b, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x22, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x2f, 0x74, 0x65, 0x73, 0x74, 0x12, 0x83, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x12, 0x22, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x2e, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, - 0x85, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x23, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x84, 0x01, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, - 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x8f, - 0x01, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, - 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x92, - 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1e, 0x1a, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, - 0x12, 0x8c, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x2e, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, - 0xa8, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x2f, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0a, + 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, + 0x12, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x85, 0x01, 0x0a, 0x09, + 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x75, 0x6d, 0x6d, - 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x75, 0x6d, - 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x92, 0x41, - 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0xe0, 0x01, 0x0a, 0x24, 0x47, - 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x41, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, - 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x3e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x41, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, - 0x64, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x41, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, - 0x64, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, - 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, - 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x90, 0x01, - 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x12, 0x26, + 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, - 0x6c, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x2f, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, - 0x22, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x62, 0x79, 0x2d, 0x69, 0x64, 0x73, 0x3a, 0x01, 0x2a, - 0x12, 0xb6, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, - 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x64, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, - 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, - 0x65, 0x64, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x3a, 0x01, 0x2a, 0x12, 0x84, 0x01, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x26, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x22, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x8f, 0x01, 0x0a, 0x0b, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x92, 0x41, 0x0a, 0x0a, 0x08, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x1a, 0x19, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x01, 0x0a, + 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x25, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0a, + 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, + 0x2a, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa8, 0x01, 0x0a, 0x15, + 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x2f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, + 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, + 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0xe0, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x41, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x41, 0x73, 0x73, 0x69, + 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x3e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x41, 0x6e, 0x64, + 0x55, 0x73, 0x65, 0x72, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x3f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x41, 0x6e, 0x64, + 0x55, 0x73, 0x65, 0x72, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, - 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x62, 0x79, 0x2d, 0x75, 0x73, 0x65, 0x72, 0x2f, - 0x7b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xbb, 0x01, 0x0a, 0x17, 0x47, 0x65, + 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x90, 0x01, 0x0a, 0x0c, 0x47, 0x65, + 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x12, 0x26, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x42, + 0x79, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x92, 0x41, 0x06, + 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1b, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x2f, 0x62, 0x79, 0x2d, 0x69, 0x64, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xb6, 0x01, 0x0a, + 0x16, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, + 0x64, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, + 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x31, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, - 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, - 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, + 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x92, 0x41, + 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x12, 0x26, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x2f, 0x62, 0x79, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x7b, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x54, 0x6f, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x36, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x54, 0x6f, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x6f, 0x6c, 0x65, 0x73, - 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x53, 0x63, 0x6f, 0x70, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x06, 0x0a, 0x04, - 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x22, 0x25, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x2f, 0x62, 0x79, 0x2d, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x3a, 0x01, 0x2a, 0x12, 0x80, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, - 0x65, 0x73, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x92, - 0x41, 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x3a, 0x01, 0x2a, 0x12, 0x8f, 0x01, 0x0a, 0x0b, 0x41, 0x73, 0x73, 0x69, - 0x67, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x69, - 0x67, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, - 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, - 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x61, 0x64, 0x64, 0x2d, 0x61, 0x73, 0x73, 0x69, 0x67, - 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xa4, 0x01, 0x0a, 0x11, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, - 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x06, 0x0a, - 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x2d, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, - 0x12, 0x98, 0x01, 0x0a, 0x10, 0x50, 0x6f, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, - 0x92, 0x41, 0x07, 0x0a, 0x05, 0x55, 0x73, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, - 0x22, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0xbb, 0x01, 0x0a, 0x19, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, - 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x33, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, - 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, - 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0xac, 0x01, 0x0a, 0x11, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, - 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, + 0x72, 0x63, 0x68, 0x2f, 0x62, 0x79, 0x2d, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x7b, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xbb, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, + 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x12, 0x31, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, + 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x6c, 0x65, + 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, + 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, + 0x62, 0x79, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, + 0x69, 0x64, 0x7d, 0x12, 0xca, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x6f, + 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x53, + 0x63, 0x6f, 0x70, 0x65, 0x12, 0x36, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, + 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, + 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x92, 0x41, 0x17, 0x0a, - 0x0b, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x0a, 0x08, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x2d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0xc6, 0x01, 0x0a, 0x11, 0x42, 0x69, 0x6e, - 0x64, 0x52, 0x50, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2b, + 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x41, 0x73, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x22, 0x25, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2f, 0x62, 0x79, 0x2d, + 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x3a, 0x01, 0x2a, + 0x12, 0x80, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x52, 0x50, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x92, 0x41, 0x06, 0x0a, 0x04, + 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x3a, 0x01, 0x2a, 0x12, 0x8f, 0x01, 0x0a, 0x0b, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x52, 0x6f, + 0x6c, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x52, 0x6f, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x31, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, + 0x65, 0x73, 0x2f, 0x61, 0x64, 0x64, 0x2d, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xa4, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x42, 0x69, 0x6e, 0x64, 0x52, 0x50, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x92, 0x41, 0x0a, 0x0a, 0x08, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x22, 0x3e, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x2d, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, - 0x2a, 0x12, 0xd2, 0x01, 0x0a, 0x15, 0x55, 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x52, 0x50, 0x46, 0x72, - 0x6f, 0x6d, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2f, 0x2e, 0x64, 0x65, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x06, 0x0a, 0x04, 0x52, 0x42, 0x41, + 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x2d, 0x61, 0x73, + 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x98, 0x01, 0x0a, + 0x10, 0x50, 0x6f, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, + 0x79, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, + 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x92, 0x41, 0x07, 0x0a, + 0x05, 0x55, 0x73, 0x65, 0x72, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x69, 0x74, 0x79, 0x3a, 0x01, 0x2a, 0x12, 0xbb, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x33, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x33, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x75, + 0x73, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0xac, 0x01, 0x0a, 0x11, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x52, 0x50, 0x46, 0x72, 0x6f, 0x6d, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x52, 0x50, 0x46, 0x72, 0x6f, 0x6d, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, - 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x43, 0x2a, 0x3e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xe7, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x52, 0x50, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x36, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x76, 0x65, 0x72, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x50, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x50, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x1a, 0x3e, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, - 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, - 0x12, 0xdd, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x50, 0x73, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x50, 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6f, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x32, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x50, 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, - 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x92, 0x41, 0x16, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x2d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x70, 0x6f, 0x6f, 0x6c, 0x73, - 0x12, 0xd5, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x50, 0x12, 0x31, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x50, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x32, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x50, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12, 0x3e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x70, 0x6f, 0x6f, 0x6c, 0x73, - 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, - 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xac, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x2e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, - 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, - 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x33, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x9e, 0x01, 0x0a, 0x0f, 0x4b, 0x69, 0x6c, 0x6c, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x29, 0x2e, 0x64, 0x65, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x92, 0x41, 0x17, 0x0a, 0x0b, 0x45, 0x78, 0x70, + 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2d, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x12, 0xc6, 0x01, 0x0a, 0x11, 0x42, 0x69, 0x6e, 0x64, 0x52, 0x50, 0x54, + 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2b, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, + 0x69, 0x6e, 0x64, 0x52, 0x50, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x69, 0x6e, 0x64, + 0x52, 0x50, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x22, 0x3e, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x70, 0x6f, 0x6f, + 0x6c, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x6f, + 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xd2, 0x01, + 0x0a, 0x15, 0x55, 0x6e, 0x62, 0x69, 0x6e, 0x64, 0x52, 0x50, 0x46, 0x72, 0x6f, 0x6d, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2f, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x62, 0x69, + 0x6e, 0x64, 0x52, 0x50, 0x46, 0x72, 0x6f, 0x6d, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x62, + 0x69, 0x6e, 0x64, 0x52, 0x50, 0x46, 0x72, 0x6f, 0x6d, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x92, 0x41, 0x0a, 0x0a, + 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x2a, + 0x3e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x2d, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x3a, + 0x01, 0x2a, 0x12, 0xe7, 0x01, 0x0a, 0x1c, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x52, 0x50, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x73, 0x12, 0x36, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x52, 0x50, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4b, 0x69, 0x6c, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x6b, 0x69, 0x6c, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x9f, 0x01, 0x0a, 0x10, 0x50, 0x61, 0x75, - 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2a, 0x2e, + 0x4f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x50, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x1a, 0x3e, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x70, 0x6f, 0x6f, 0x6c, + 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2d, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xdd, 0x01, 0x0a, + 0x17, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x50, 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6f, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x50, 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x50, 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6f, 0x57, 0x6f, + 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x5b, 0x92, 0x41, 0x16, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, + 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, + 0x12, 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x12, 0xd5, 0x01, 0x0a, + 0x17, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, + 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x50, 0x12, 0x31, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x54, 0x6f, 0x52, 0x50, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x54, 0x6f, 0x52, 0x50, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x53, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x40, 0x12, 0x3e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2d, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x7b, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2d, 0x62, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x73, 0x12, 0xac, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, - 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, - 0x75, 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1d, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x73, 0x6b, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x61, 0x75, 0x73, 0x65, 0x12, 0xa7, 0x01, 0x0a, 0x12, 0x55, - 0x6e, 0x70, 0x61, 0x75, 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, - 0x6b, 0x12, 0x2c, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x70, 0x61, 0x75, 0x73, 0x65, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2d, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x70, 0x61, 0x75, 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, + 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x73, + 0x6b, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x9e, 0x01, 0x0a, 0x0f, 0x4b, 0x69, 0x6c, 0x6c, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x29, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x21, 0x22, 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x73, - 0x6b, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x6e, 0x70, - 0x61, 0x75, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x0a, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x75, - 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x75, 0x6e, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x21, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x0e, 0x12, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, - 0x6e, 0x73, 0x12, 0x7e, 0x0a, 0x08, 0x4d, 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x22, + 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x73, + 0x6b, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x69, 0x6c, + 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x9f, 0x01, 0x0a, 0x10, 0x50, 0x61, 0x75, 0x73, 0x65, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2a, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, + 0x75, 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x75, 0x73, 0x65, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x32, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2f, 0x7b, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x70, 0x61, 0x75, 0x73, 0x65, 0x12, 0xa7, 0x01, 0x0a, 0x12, 0x55, 0x6e, 0x70, 0x61, 0x75, + 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2c, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x55, 0x6e, 0x70, 0x61, 0x75, 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, + 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x64, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x55, 0x6e, 0x70, 0x61, 0x75, 0x73, 0x65, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x92, 0x41, 0x0a, 0x0a, + 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, + 0x1f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2f, 0x7b, + 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x6e, 0x70, 0x61, 0x75, 0x73, 0x65, + 0x12, 0x7c, 0x0a, 0x0a, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x6d, 0x6f, 0x76, 0x65, 0x3a, - 0x01, 0x2a, 0x12, 0x7e, 0x0a, 0x08, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x22, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, + 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x92, 0x41, 0x0a, + 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, + 0x12, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x12, 0x7e, + 0x0a, 0x08, 0x4d, 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x75, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x6b, 0x69, 0x6c, 0x6c, 0x3a, - 0x01, 0x2a, 0x12, 0x86, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x75, 0x6e, - 0x73, 0x12, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, - 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, - 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x8a, 0x01, 0x0a, 0x0b, - 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x25, 0x2e, 0x64, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, - 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x92, 0x41, 0x0a, 0x0a, - 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, - 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x61, 0x72, - 0x63, 0x68, 0x69, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x92, 0x01, 0x0a, 0x0d, 0x55, 0x6e, 0x61, - 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, - 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, - 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1b, 0x22, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, - 0x2f, 0x75, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x42, 0xda, 0x07, - 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2d, 0x61, 0x69, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, - 0x61, 0x70, 0x69, 0x76, 0x31, 0x92, 0x41, 0xa1, 0x07, 0x12, 0x95, 0x06, 0x0a, 0x15, 0x44, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x41, 0x50, 0x49, 0x20, 0x28, 0x42, 0x65, - 0x74, 0x61, 0x29, 0x12, 0xf5, 0x04, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x20, 0x68, 0x65, 0x6c, 0x70, 0x73, 0x20, 0x64, 0x65, 0x65, 0x70, 0x20, 0x6c, 0x65, 0x61, 0x72, - 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x20, 0x74, 0x72, 0x61, 0x69, 0x6e, - 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x71, 0x75, 0x69, - 0x63, 0x6b, 0x6c, 0x79, 0x2c, 0x20, 0x65, 0x61, 0x73, 0x69, 0x6c, 0x79, 0x20, 0x73, 0x68, 0x61, - 0x72, 0x65, 0x20, 0x47, 0x50, 0x55, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6c, - 0x79, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x2e, 0x20, 0x44, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, - 0x20, 0x64, 0x65, 0x65, 0x70, 0x20, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x65, - 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x63, 0x75, - 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, - 0x64, 0x20, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x73, 0x20, 0x61, 0x74, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, - 0x6f, 0x75, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x77, - 0x6f, 0x72, 0x72, 0x79, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x44, 0x65, 0x76, 0x4f, 0x70, - 0x73, 0x20, 0x6f, 0x72, 0x20, 0x77, 0x72, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x20, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, - 0x72, 0x20, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x72, 0x61, - 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x0a, 0x0a, 0x59, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, - 0x74, 0x68, 0x69, 0x6e, 0x6b, 0x20, 0x6f, 0x66, 0x20, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x67, 0x61, 0x70, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74, - 0x6f, 0x6f, 0x6c, 0x73, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, - 0x46, 0x6c, 0x6f, 0x77, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x50, 0x79, 0x54, 0x6f, 0x72, 0x63, 0x68, - 0x20, 0x2d, 0x2d, 0x2d, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, - 0x67, 0x72, 0x65, 0x61, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x20, 0x72, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x20, 0x77, 0x69, - 0x74, 0x68, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x47, 0x50, 0x55, 0x20, - 0x2d, 0x2d, 0x2d, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x6c, 0x6c, - 0x65, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x69, 0x73, 0x65, - 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x64, 0x6f, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x65, 0x70, - 0x20, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x74, 0x20, 0x73, 0x63, 0x61, - 0x6c, 0x65, 0x2c, 0x20, 0x61, 0x73, 0x20, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x2c, 0x20, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x73, 0x65, 0x74, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, - 0x73, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x22, 0x40, 0x0a, 0x0d, 0x44, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x41, 0x49, 0x12, 0x16, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x61, 0x69, 0x2f, 0x1a, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x40, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x69, 0x2a, 0x3d, 0x0a, - 0x0a, 0x41, 0x70, 0x61, 0x63, 0x68, 0x65, 0x20, 0x32, 0x2e, 0x30, 0x12, 0x2f, 0x68, 0x74, 0x74, - 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, - 0x72, 0x67, 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x2f, 0x4c, 0x49, 0x43, 0x45, - 0x4e, 0x53, 0x45, 0x2d, 0x32, 0x2e, 0x30, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x32, 0x03, 0x30, 0x2e, - 0x31, 0x2a, 0x02, 0x01, 0x02, 0x5a, 0x4a, 0x0a, 0x48, 0x0a, 0x0b, 0x42, 0x65, 0x61, 0x72, 0x65, - 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x39, 0x08, 0x02, 0x12, 0x24, 0x42, 0x65, 0x61, 0x72, - 0x65, 0x72, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, - 0x1a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x02, 0x62, 0x11, 0x0a, 0x0f, 0x0a, 0x0b, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x12, 0x00, 0x72, 0x24, 0x0a, 0x1b, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x20, 0x41, 0x49, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x05, 0x2f, 0x64, 0x6f, 0x63, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x29, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x6d, 0x6f, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x7e, + 0x0a, 0x08, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, + 0x69, 0x6c, 0x6c, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, + 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x4b, 0x69, 0x6c, 0x6c, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x29, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x6b, 0x69, 0x6c, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x86, + 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x24, 0x2e, + 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x75, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x92, 0x41, 0x0a, 0x0a, + 0x08, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, + 0x13, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x8a, 0x01, 0x0a, 0x0b, 0x41, 0x72, 0x63, 0x68, + 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x25, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, + 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, + 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, + 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x92, 0x01, 0x0a, 0x0d, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, + 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, + 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x28, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x75, 0x6e, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41, 0x0a, 0x0a, 0x08, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x22, 0x16, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x75, 0x6e, 0x73, 0x2f, 0x75, 0x6e, 0x61, + 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x3a, 0x01, 0x2a, 0x42, 0xda, 0x07, 0x5a, 0x33, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2d, 0x61, 0x69, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, + 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x76, + 0x31, 0x92, 0x41, 0xa1, 0x07, 0x12, 0x95, 0x06, 0x0a, 0x15, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x69, 0x6e, 0x65, 0x64, 0x20, 0x41, 0x50, 0x49, 0x20, 0x28, 0x42, 0x65, 0x74, 0x61, 0x29, 0x12, + 0xf5, 0x04, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x68, 0x65, 0x6c, + 0x70, 0x73, 0x20, 0x64, 0x65, 0x65, 0x70, 0x20, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, + 0x20, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x20, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x20, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x73, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, 0x6b, 0x6c, 0x79, + 0x2c, 0x20, 0x65, 0x61, 0x73, 0x69, 0x6c, 0x79, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x20, 0x47, + 0x50, 0x55, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2c, 0x20, 0x61, 0x6e, + 0x64, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x20, 0x63, 0x6f, + 0x6c, 0x6c, 0x61, 0x62, 0x6f, 0x72, 0x61, 0x74, 0x65, 0x2e, 0x20, 0x44, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x64, 0x65, 0x65, + 0x70, 0x20, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x6e, 0x67, 0x69, 0x6e, + 0x65, 0x65, 0x72, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x63, 0x75, 0x73, 0x20, 0x6f, 0x6e, + 0x20, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x72, + 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x20, 0x61, 0x74, + 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, + 0x6e, 0x65, 0x65, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x72, 0x79, + 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x44, 0x65, 0x76, 0x4f, 0x70, 0x73, 0x20, 0x6f, 0x72, + 0x20, 0x77, 0x72, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x20, + 0x63, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, + 0x74, 0x61, 0x73, 0x6b, 0x73, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x20, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x78, + 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e, + 0x67, 0x2e, 0x0a, 0x0a, 0x59, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x6e, + 0x6b, 0x20, 0x6f, 0x66, 0x20, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, + 0x61, 0x73, 0x20, 0x61, 0x20, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x68, + 0x61, 0x74, 0x20, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, + 0x61, 0x70, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x6f, 0x6c, 0x73, + 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x46, 0x6c, 0x6f, 0x77, + 0x20, 0x61, 0x6e, 0x64, 0x20, 0x50, 0x79, 0x54, 0x6f, 0x72, 0x63, 0x68, 0x20, 0x2d, 0x2d, 0x2d, + 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x67, 0x72, 0x65, 0x61, + 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x72, + 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, + 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x47, 0x50, 0x55, 0x20, 0x2d, 0x2d, 0x2d, 0x20, + 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, + 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x69, 0x73, 0x65, 0x20, 0x77, 0x68, 0x65, + 0x6e, 0x20, 0x64, 0x6f, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x65, 0x70, 0x20, 0x6c, 0x65, 0x61, + 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x74, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2c, 0x20, + 0x61, 0x73, 0x20, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x2c, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x73, 0x65, 0x74, + 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x20, 0x69, + 0x6e, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x22, 0x40, 0x0a, 0x0d, 0x44, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x41, 0x49, 0x12, 0x16, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, + 0x2f, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x69, 0x2f, + 0x1a, 0x17, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x40, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x69, 0x2a, 0x3d, 0x0a, 0x0a, 0x41, 0x70, 0x61, + 0x63, 0x68, 0x65, 0x20, 0x32, 0x2e, 0x30, 0x12, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, + 0x77, 0x77, 0x77, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, + 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2d, + 0x32, 0x2e, 0x30, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x32, 0x03, 0x30, 0x2e, 0x31, 0x2a, 0x02, 0x01, + 0x02, 0x5a, 0x4a, 0x0a, 0x48, 0x0a, 0x0b, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x39, 0x08, 0x02, 0x12, 0x24, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x20, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x1a, 0x0d, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x02, 0x62, 0x11, 0x0a, + 0x0f, 0x0a, 0x0b, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x00, + 0x72, 0x24, 0x0a, 0x1b, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x41, + 0x49, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x05, 0x2f, 0x64, 0x6f, 0x63, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var file_determined_api_v1_api_proto_goTypes = []interface{}{ @@ -2830,290 +2839,292 @@ var file_determined_api_v1_api_proto_goTypes = []interface{}{ (*PinWorkspaceRequest)(nil), // 185: determined.api.v1.PinWorkspaceRequest (*UnpinWorkspaceRequest)(nil), // 186: determined.api.v1.UnpinWorkspaceRequest (*GetProjectRequest)(nil), // 187: determined.api.v1.GetProjectRequest - (*GetProjectColumnsRequest)(nil), // 188: determined.api.v1.GetProjectColumnsRequest - (*GetProjectNumericMetricsRangeRequest)(nil), // 189: determined.api.v1.GetProjectNumericMetricsRangeRequest - (*PostProjectRequest)(nil), // 190: determined.api.v1.PostProjectRequest - (*AddProjectNoteRequest)(nil), // 191: determined.api.v1.AddProjectNoteRequest - (*PutProjectNotesRequest)(nil), // 192: determined.api.v1.PutProjectNotesRequest - (*PatchProjectRequest)(nil), // 193: determined.api.v1.PatchProjectRequest - (*DeleteProjectRequest)(nil), // 194: determined.api.v1.DeleteProjectRequest - (*ArchiveProjectRequest)(nil), // 195: determined.api.v1.ArchiveProjectRequest - (*UnarchiveProjectRequest)(nil), // 196: determined.api.v1.UnarchiveProjectRequest - (*MoveProjectRequest)(nil), // 197: determined.api.v1.MoveProjectRequest - (*MoveExperimentRequest)(nil), // 198: determined.api.v1.MoveExperimentRequest - (*MoveExperimentsRequest)(nil), // 199: determined.api.v1.MoveExperimentsRequest - (*GetWebhooksRequest)(nil), // 200: determined.api.v1.GetWebhooksRequest - (*PostWebhookRequest)(nil), // 201: determined.api.v1.PostWebhookRequest - (*DeleteWebhookRequest)(nil), // 202: determined.api.v1.DeleteWebhookRequest - (*TestWebhookRequest)(nil), // 203: determined.api.v1.TestWebhookRequest - (*GetGroupRequest)(nil), // 204: determined.api.v1.GetGroupRequest - (*GetGroupsRequest)(nil), // 205: determined.api.v1.GetGroupsRequest - (*CreateGroupRequest)(nil), // 206: determined.api.v1.CreateGroupRequest - (*UpdateGroupRequest)(nil), // 207: determined.api.v1.UpdateGroupRequest - (*DeleteGroupRequest)(nil), // 208: determined.api.v1.DeleteGroupRequest - (*GetPermissionsSummaryRequest)(nil), // 209: determined.api.v1.GetPermissionsSummaryRequest - (*GetGroupsAndUsersAssignedToWorkspaceRequest)(nil), // 210: determined.api.v1.GetGroupsAndUsersAssignedToWorkspaceRequest - (*GetRolesByIDRequest)(nil), // 211: determined.api.v1.GetRolesByIDRequest - (*GetRolesAssignedToUserRequest)(nil), // 212: determined.api.v1.GetRolesAssignedToUserRequest - (*GetRolesAssignedToGroupRequest)(nil), // 213: determined.api.v1.GetRolesAssignedToGroupRequest - (*SearchRolesAssignableToScopeRequest)(nil), // 214: determined.api.v1.SearchRolesAssignableToScopeRequest - (*ListRolesRequest)(nil), // 215: determined.api.v1.ListRolesRequest - (*AssignRolesRequest)(nil), // 216: determined.api.v1.AssignRolesRequest - (*RemoveAssignmentsRequest)(nil), // 217: determined.api.v1.RemoveAssignmentsRequest - (*PostUserActivityRequest)(nil), // 218: determined.api.v1.PostUserActivityRequest - (*GetProjectsByUserActivityRequest)(nil), // 219: determined.api.v1.GetProjectsByUserActivityRequest - (*SearchExperimentsRequest)(nil), // 220: determined.api.v1.SearchExperimentsRequest - (*BindRPToWorkspaceRequest)(nil), // 221: determined.api.v1.BindRPToWorkspaceRequest - (*UnbindRPFromWorkspaceRequest)(nil), // 222: determined.api.v1.UnbindRPFromWorkspaceRequest - (*OverwriteRPWorkspaceBindingsRequest)(nil), // 223: determined.api.v1.OverwriteRPWorkspaceBindingsRequest - (*ListRPsBoundToWorkspaceRequest)(nil), // 224: determined.api.v1.ListRPsBoundToWorkspaceRequest - (*ListWorkspacesBoundToRPRequest)(nil), // 225: determined.api.v1.ListWorkspacesBoundToRPRequest - (*GetGenericTaskConfigRequest)(nil), // 226: determined.api.v1.GetGenericTaskConfigRequest - (*KillGenericTaskRequest)(nil), // 227: determined.api.v1.KillGenericTaskRequest - (*PauseGenericTaskRequest)(nil), // 228: determined.api.v1.PauseGenericTaskRequest - (*UnpauseGenericTaskRequest)(nil), // 229: determined.api.v1.UnpauseGenericTaskRequest - (*SearchRunsRequest)(nil), // 230: determined.api.v1.SearchRunsRequest - (*MoveRunsRequest)(nil), // 231: determined.api.v1.MoveRunsRequest - (*KillRunsRequest)(nil), // 232: determined.api.v1.KillRunsRequest - (*DeleteRunsRequest)(nil), // 233: determined.api.v1.DeleteRunsRequest - (*ArchiveRunsRequest)(nil), // 234: determined.api.v1.ArchiveRunsRequest - (*UnarchiveRunsRequest)(nil), // 235: determined.api.v1.UnarchiveRunsRequest - (*LoginResponse)(nil), // 236: determined.api.v1.LoginResponse - (*CurrentUserResponse)(nil), // 237: determined.api.v1.CurrentUserResponse - (*LogoutResponse)(nil), // 238: determined.api.v1.LogoutResponse - (*GetUsersResponse)(nil), // 239: determined.api.v1.GetUsersResponse - (*GetUserSettingResponse)(nil), // 240: determined.api.v1.GetUserSettingResponse - (*ResetUserSettingResponse)(nil), // 241: determined.api.v1.ResetUserSettingResponse - (*PostUserSettingResponse)(nil), // 242: determined.api.v1.PostUserSettingResponse - (*GetUserResponse)(nil), // 243: determined.api.v1.GetUserResponse - (*GetUserByUsernameResponse)(nil), // 244: determined.api.v1.GetUserByUsernameResponse - (*GetMeResponse)(nil), // 245: determined.api.v1.GetMeResponse - (*PostUserResponse)(nil), // 246: determined.api.v1.PostUserResponse - (*SetUserPasswordResponse)(nil), // 247: determined.api.v1.SetUserPasswordResponse - (*AssignMultipleGroupsResponse)(nil), // 248: determined.api.v1.AssignMultipleGroupsResponse - (*PatchUserResponse)(nil), // 249: determined.api.v1.PatchUserResponse - (*PatchUsersResponse)(nil), // 250: determined.api.v1.PatchUsersResponse - (*GetTelemetryResponse)(nil), // 251: determined.api.v1.GetTelemetryResponse - (*GetMasterResponse)(nil), // 252: determined.api.v1.GetMasterResponse - (*GetMasterConfigResponse)(nil), // 253: determined.api.v1.GetMasterConfigResponse - (*PatchMasterConfigResponse)(nil), // 254: determined.api.v1.PatchMasterConfigResponse - (*MasterLogsResponse)(nil), // 255: determined.api.v1.MasterLogsResponse - (*GetAgentsResponse)(nil), // 256: determined.api.v1.GetAgentsResponse - (*GetAgentResponse)(nil), // 257: determined.api.v1.GetAgentResponse - (*GetSlotsResponse)(nil), // 258: determined.api.v1.GetSlotsResponse - (*GetSlotResponse)(nil), // 259: determined.api.v1.GetSlotResponse - (*EnableAgentResponse)(nil), // 260: determined.api.v1.EnableAgentResponse - (*DisableAgentResponse)(nil), // 261: determined.api.v1.DisableAgentResponse - (*EnableSlotResponse)(nil), // 262: determined.api.v1.EnableSlotResponse - (*DisableSlotResponse)(nil), // 263: determined.api.v1.DisableSlotResponse - (*CreateGenericTaskResponse)(nil), // 264: determined.api.v1.CreateGenericTaskResponse - (*CreateExperimentResponse)(nil), // 265: determined.api.v1.CreateExperimentResponse - (*PutExperimentResponse)(nil), // 266: determined.api.v1.PutExperimentResponse - (*ContinueExperimentResponse)(nil), // 267: determined.api.v1.ContinueExperimentResponse - (*GetExperimentResponse)(nil), // 268: determined.api.v1.GetExperimentResponse - (*GetExperimentsResponse)(nil), // 269: determined.api.v1.GetExperimentsResponse - (*PutExperimentRetainLogsResponse)(nil), // 270: determined.api.v1.PutExperimentRetainLogsResponse - (*PutExperimentsRetainLogsResponse)(nil), // 271: determined.api.v1.PutExperimentsRetainLogsResponse - (*PutTrialRetainLogsResponse)(nil), // 272: determined.api.v1.PutTrialRetainLogsResponse - (*GetModelDefResponse)(nil), // 273: determined.api.v1.GetModelDefResponse - (*GetTaskContextDirectoryResponse)(nil), // 274: determined.api.v1.GetTaskContextDirectoryResponse - (*GetModelDefTreeResponse)(nil), // 275: determined.api.v1.GetModelDefTreeResponse - (*GetModelDefFileResponse)(nil), // 276: determined.api.v1.GetModelDefFileResponse - (*GetExperimentLabelsResponse)(nil), // 277: determined.api.v1.GetExperimentLabelsResponse - (*GetExperimentValidationHistoryResponse)(nil), // 278: determined.api.v1.GetExperimentValidationHistoryResponse - (*ActivateExperimentResponse)(nil), // 279: determined.api.v1.ActivateExperimentResponse - (*ActivateExperimentsResponse)(nil), // 280: determined.api.v1.ActivateExperimentsResponse - (*PauseExperimentResponse)(nil), // 281: determined.api.v1.PauseExperimentResponse - (*PauseExperimentsResponse)(nil), // 282: determined.api.v1.PauseExperimentsResponse - (*CancelExperimentResponse)(nil), // 283: determined.api.v1.CancelExperimentResponse - (*CancelExperimentsResponse)(nil), // 284: determined.api.v1.CancelExperimentsResponse - (*KillExperimentResponse)(nil), // 285: determined.api.v1.KillExperimentResponse - (*KillExperimentsResponse)(nil), // 286: determined.api.v1.KillExperimentsResponse - (*ArchiveExperimentResponse)(nil), // 287: determined.api.v1.ArchiveExperimentResponse - (*ArchiveExperimentsResponse)(nil), // 288: determined.api.v1.ArchiveExperimentsResponse - (*UnarchiveExperimentResponse)(nil), // 289: determined.api.v1.UnarchiveExperimentResponse - (*UnarchiveExperimentsResponse)(nil), // 290: determined.api.v1.UnarchiveExperimentsResponse - (*PatchExperimentResponse)(nil), // 291: determined.api.v1.PatchExperimentResponse - (*DeleteExperimentsResponse)(nil), // 292: determined.api.v1.DeleteExperimentsResponse - (*DeleteExperimentResponse)(nil), // 293: determined.api.v1.DeleteExperimentResponse - (*GetBestSearcherValidationMetricResponse)(nil), // 294: determined.api.v1.GetBestSearcherValidationMetricResponse - (*GetExperimentCheckpointsResponse)(nil), // 295: determined.api.v1.GetExperimentCheckpointsResponse - (*PutExperimentLabelResponse)(nil), // 296: determined.api.v1.PutExperimentLabelResponse - (*DeleteExperimentLabelResponse)(nil), // 297: determined.api.v1.DeleteExperimentLabelResponse - (*PreviewHPSearchResponse)(nil), // 298: determined.api.v1.PreviewHPSearchResponse - (*GetExperimentTrialsResponse)(nil), // 299: determined.api.v1.GetExperimentTrialsResponse - (*GetTrialRemainingLogRetentionDaysResponse)(nil), // 300: determined.api.v1.GetTrialRemainingLogRetentionDaysResponse - (*CompareTrialsResponse)(nil), // 301: determined.api.v1.CompareTrialsResponse - (*ReportTrialSourceInfoResponse)(nil), // 302: determined.api.v1.ReportTrialSourceInfoResponse - (*CreateTrialResponse)(nil), // 303: determined.api.v1.CreateTrialResponse - (*PutTrialResponse)(nil), // 304: determined.api.v1.PutTrialResponse - (*PatchTrialResponse)(nil), // 305: determined.api.v1.PatchTrialResponse - (*StartTrialResponse)(nil), // 306: determined.api.v1.StartTrialResponse - (*RunPrepareForReportingResponse)(nil), // 307: determined.api.v1.RunPrepareForReportingResponse - (*GetTrialResponse)(nil), // 308: determined.api.v1.GetTrialResponse - (*GetTrialByExternalIDResponse)(nil), // 309: determined.api.v1.GetTrialByExternalIDResponse - (*GetTrialWorkloadsResponse)(nil), // 310: determined.api.v1.GetTrialWorkloadsResponse - (*TrialLogsResponse)(nil), // 311: determined.api.v1.TrialLogsResponse - (*TrialLogsFieldsResponse)(nil), // 312: determined.api.v1.TrialLogsFieldsResponse - (*AllocationReadyResponse)(nil), // 313: determined.api.v1.AllocationReadyResponse - (*GetAllocationResponse)(nil), // 314: determined.api.v1.GetAllocationResponse - (*AllocationWaitingResponse)(nil), // 315: determined.api.v1.AllocationWaitingResponse - (*PostTaskLogsResponse)(nil), // 316: determined.api.v1.PostTaskLogsResponse - (*TaskLogsResponse)(nil), // 317: determined.api.v1.TaskLogsResponse - (*TaskLogsFieldsResponse)(nil), // 318: determined.api.v1.TaskLogsFieldsResponse - (*GetTrialProfilerMetricsResponse)(nil), // 319: determined.api.v1.GetTrialProfilerMetricsResponse - (*GetTrialProfilerAvailableSeriesResponse)(nil), // 320: determined.api.v1.GetTrialProfilerAvailableSeriesResponse - (*PostTrialProfilerMetricsBatchResponse)(nil), // 321: determined.api.v1.PostTrialProfilerMetricsBatchResponse - (*GetMetricsResponse)(nil), // 322: determined.api.v1.GetMetricsResponse - (*GetTrainingMetricsResponse)(nil), // 323: determined.api.v1.GetTrainingMetricsResponse - (*GetValidationMetricsResponse)(nil), // 324: determined.api.v1.GetValidationMetricsResponse - (*KillTrialResponse)(nil), // 325: determined.api.v1.KillTrialResponse - (*GetTrialCheckpointsResponse)(nil), // 326: determined.api.v1.GetTrialCheckpointsResponse - (*CleanupLogsResponse)(nil), // 327: determined.api.v1.CleanupLogsResponse - (*AllocationPreemptionSignalResponse)(nil), // 328: determined.api.v1.AllocationPreemptionSignalResponse - (*AllocationPendingPreemptionSignalResponse)(nil), // 329: determined.api.v1.AllocationPendingPreemptionSignalResponse - (*AckAllocationPreemptionSignalResponse)(nil), // 330: determined.api.v1.AckAllocationPreemptionSignalResponse - (*MarkAllocationResourcesDaemonResponse)(nil), // 331: determined.api.v1.MarkAllocationResourcesDaemonResponse - (*AllocationRendezvousInfoResponse)(nil), // 332: determined.api.v1.AllocationRendezvousInfoResponse - (*PostAllocationProxyAddressResponse)(nil), // 333: determined.api.v1.PostAllocationProxyAddressResponse - (*GetTaskAcceleratorDataResponse)(nil), // 334: determined.api.v1.GetTaskAcceleratorDataResponse - (*PostAllocationAcceleratorDataResponse)(nil), // 335: determined.api.v1.PostAllocationAcceleratorDataResponse - (*AllocationAllGatherResponse)(nil), // 336: determined.api.v1.AllocationAllGatherResponse - (*NotifyContainerRunningResponse)(nil), // 337: determined.api.v1.NotifyContainerRunningResponse - (*GetCurrentTrialSearcherOperationResponse)(nil), // 338: determined.api.v1.GetCurrentTrialSearcherOperationResponse - (*CompleteTrialSearcherValidationResponse)(nil), // 339: determined.api.v1.CompleteTrialSearcherValidationResponse - (*ReportTrialSearcherEarlyExitResponse)(nil), // 340: determined.api.v1.ReportTrialSearcherEarlyExitResponse - (*ReportTrialProgressResponse)(nil), // 341: determined.api.v1.ReportTrialProgressResponse - (*PostTrialRunnerMetadataResponse)(nil), // 342: determined.api.v1.PostTrialRunnerMetadataResponse - (*ReportTrialMetricsResponse)(nil), // 343: determined.api.v1.ReportTrialMetricsResponse - (*ReportTrialTrainingMetricsResponse)(nil), // 344: determined.api.v1.ReportTrialTrainingMetricsResponse - (*ReportTrialValidationMetricsResponse)(nil), // 345: determined.api.v1.ReportTrialValidationMetricsResponse - (*ReportCheckpointResponse)(nil), // 346: determined.api.v1.ReportCheckpointResponse - (*GetJobsResponse)(nil), // 347: determined.api.v1.GetJobsResponse - (*GetJobsV2Response)(nil), // 348: determined.api.v1.GetJobsV2Response - (*GetJobQueueStatsResponse)(nil), // 349: determined.api.v1.GetJobQueueStatsResponse - (*UpdateJobQueueResponse)(nil), // 350: determined.api.v1.UpdateJobQueueResponse - (*GetTemplatesResponse)(nil), // 351: determined.api.v1.GetTemplatesResponse - (*GetTemplateResponse)(nil), // 352: determined.api.v1.GetTemplateResponse - (*PutTemplateResponse)(nil), // 353: determined.api.v1.PutTemplateResponse - (*PostTemplateResponse)(nil), // 354: determined.api.v1.PostTemplateResponse - (*PatchTemplateConfigResponse)(nil), // 355: determined.api.v1.PatchTemplateConfigResponse - (*PatchTemplateNameResponse)(nil), // 356: determined.api.v1.PatchTemplateNameResponse - (*DeleteTemplateResponse)(nil), // 357: determined.api.v1.DeleteTemplateResponse - (*GetNotebooksResponse)(nil), // 358: determined.api.v1.GetNotebooksResponse - (*GetNotebookResponse)(nil), // 359: determined.api.v1.GetNotebookResponse - (*IdleNotebookResponse)(nil), // 360: determined.api.v1.IdleNotebookResponse - (*KillNotebookResponse)(nil), // 361: determined.api.v1.KillNotebookResponse - (*SetNotebookPriorityResponse)(nil), // 362: determined.api.v1.SetNotebookPriorityResponse - (*LaunchNotebookResponse)(nil), // 363: determined.api.v1.LaunchNotebookResponse - (*GetShellsResponse)(nil), // 364: determined.api.v1.GetShellsResponse - (*GetShellResponse)(nil), // 365: determined.api.v1.GetShellResponse - (*KillShellResponse)(nil), // 366: determined.api.v1.KillShellResponse - (*SetShellPriorityResponse)(nil), // 367: determined.api.v1.SetShellPriorityResponse - (*LaunchShellResponse)(nil), // 368: determined.api.v1.LaunchShellResponse - (*GetCommandsResponse)(nil), // 369: determined.api.v1.GetCommandsResponse - (*GetCommandResponse)(nil), // 370: determined.api.v1.GetCommandResponse - (*KillCommandResponse)(nil), // 371: determined.api.v1.KillCommandResponse - (*SetCommandPriorityResponse)(nil), // 372: determined.api.v1.SetCommandPriorityResponse - (*LaunchCommandResponse)(nil), // 373: determined.api.v1.LaunchCommandResponse - (*GetTensorboardsResponse)(nil), // 374: determined.api.v1.GetTensorboardsResponse - (*GetTensorboardResponse)(nil), // 375: determined.api.v1.GetTensorboardResponse - (*KillTensorboardResponse)(nil), // 376: determined.api.v1.KillTensorboardResponse - (*SetTensorboardPriorityResponse)(nil), // 377: determined.api.v1.SetTensorboardPriorityResponse - (*LaunchTensorboardResponse)(nil), // 378: determined.api.v1.LaunchTensorboardResponse - (*DeleteTensorboardFilesResponse)(nil), // 379: determined.api.v1.DeleteTensorboardFilesResponse - (*GetActiveTasksCountResponse)(nil), // 380: determined.api.v1.GetActiveTasksCountResponse - (*GetTaskResponse)(nil), // 381: determined.api.v1.GetTaskResponse - (*GetTasksResponse)(nil), // 382: determined.api.v1.GetTasksResponse - (*GetModelResponse)(nil), // 383: determined.api.v1.GetModelResponse - (*PostModelResponse)(nil), // 384: determined.api.v1.PostModelResponse - (*PatchModelResponse)(nil), // 385: determined.api.v1.PatchModelResponse - (*ArchiveModelResponse)(nil), // 386: determined.api.v1.ArchiveModelResponse - (*UnarchiveModelResponse)(nil), // 387: determined.api.v1.UnarchiveModelResponse - (*MoveModelResponse)(nil), // 388: determined.api.v1.MoveModelResponse - (*DeleteModelResponse)(nil), // 389: determined.api.v1.DeleteModelResponse - (*GetModelsResponse)(nil), // 390: determined.api.v1.GetModelsResponse - (*GetModelLabelsResponse)(nil), // 391: determined.api.v1.GetModelLabelsResponse - (*GetModelVersionResponse)(nil), // 392: determined.api.v1.GetModelVersionResponse - (*GetModelVersionsResponse)(nil), // 393: determined.api.v1.GetModelVersionsResponse - (*PostModelVersionResponse)(nil), // 394: determined.api.v1.PostModelVersionResponse - (*PatchModelVersionResponse)(nil), // 395: determined.api.v1.PatchModelVersionResponse - (*DeleteModelVersionResponse)(nil), // 396: determined.api.v1.DeleteModelVersionResponse - (*GetTrialMetricsByModelVersionResponse)(nil), // 397: determined.api.v1.GetTrialMetricsByModelVersionResponse - (*GetCheckpointResponse)(nil), // 398: determined.api.v1.GetCheckpointResponse - (*PostCheckpointMetadataResponse)(nil), // 399: determined.api.v1.PostCheckpointMetadataResponse - (*CheckpointsRemoveFilesResponse)(nil), // 400: determined.api.v1.CheckpointsRemoveFilesResponse - (*PatchCheckpointsResponse)(nil), // 401: determined.api.v1.PatchCheckpointsResponse - (*DeleteCheckpointsResponse)(nil), // 402: determined.api.v1.DeleteCheckpointsResponse - (*GetTrialMetricsByCheckpointResponse)(nil), // 403: determined.api.v1.GetTrialMetricsByCheckpointResponse - (*GetSearcherEventsResponse)(nil), // 404: determined.api.v1.GetSearcherEventsResponse - (*PostSearcherOperationsResponse)(nil), // 405: determined.api.v1.PostSearcherOperationsResponse - (*ExpMetricNamesResponse)(nil), // 406: determined.api.v1.ExpMetricNamesResponse - (*MetricBatchesResponse)(nil), // 407: determined.api.v1.MetricBatchesResponse - (*TrialsSnapshotResponse)(nil), // 408: determined.api.v1.TrialsSnapshotResponse - (*TrialsSampleResponse)(nil), // 409: determined.api.v1.TrialsSampleResponse - (*GetResourcePoolsResponse)(nil), // 410: determined.api.v1.GetResourcePoolsResponse - (*ResourceAllocationRawResponse)(nil), // 411: determined.api.v1.ResourceAllocationRawResponse - (*ResourceAllocationAggregatedResponse)(nil), // 412: determined.api.v1.ResourceAllocationAggregatedResponse - (*GetWorkspaceResponse)(nil), // 413: determined.api.v1.GetWorkspaceResponse - (*GetWorkspaceProjectsResponse)(nil), // 414: determined.api.v1.GetWorkspaceProjectsResponse - (*GetWorkspacesResponse)(nil), // 415: determined.api.v1.GetWorkspacesResponse - (*PostWorkspaceResponse)(nil), // 416: determined.api.v1.PostWorkspaceResponse - (*PatchWorkspaceResponse)(nil), // 417: determined.api.v1.PatchWorkspaceResponse - (*DeleteWorkspaceResponse)(nil), // 418: determined.api.v1.DeleteWorkspaceResponse - (*ArchiveWorkspaceResponse)(nil), // 419: determined.api.v1.ArchiveWorkspaceResponse - (*UnarchiveWorkspaceResponse)(nil), // 420: determined.api.v1.UnarchiveWorkspaceResponse - (*PinWorkspaceResponse)(nil), // 421: determined.api.v1.PinWorkspaceResponse - (*UnpinWorkspaceResponse)(nil), // 422: determined.api.v1.UnpinWorkspaceResponse - (*GetProjectResponse)(nil), // 423: determined.api.v1.GetProjectResponse - (*GetProjectColumnsResponse)(nil), // 424: determined.api.v1.GetProjectColumnsResponse - (*GetProjectNumericMetricsRangeResponse)(nil), // 425: determined.api.v1.GetProjectNumericMetricsRangeResponse - (*PostProjectResponse)(nil), // 426: determined.api.v1.PostProjectResponse - (*AddProjectNoteResponse)(nil), // 427: determined.api.v1.AddProjectNoteResponse - (*PutProjectNotesResponse)(nil), // 428: determined.api.v1.PutProjectNotesResponse - (*PatchProjectResponse)(nil), // 429: determined.api.v1.PatchProjectResponse - (*DeleteProjectResponse)(nil), // 430: determined.api.v1.DeleteProjectResponse - (*ArchiveProjectResponse)(nil), // 431: determined.api.v1.ArchiveProjectResponse - (*UnarchiveProjectResponse)(nil), // 432: determined.api.v1.UnarchiveProjectResponse - (*MoveProjectResponse)(nil), // 433: determined.api.v1.MoveProjectResponse - (*MoveExperimentResponse)(nil), // 434: determined.api.v1.MoveExperimentResponse - (*MoveExperimentsResponse)(nil), // 435: determined.api.v1.MoveExperimentsResponse - (*GetWebhooksResponse)(nil), // 436: determined.api.v1.GetWebhooksResponse - (*PostWebhookResponse)(nil), // 437: determined.api.v1.PostWebhookResponse - (*DeleteWebhookResponse)(nil), // 438: determined.api.v1.DeleteWebhookResponse - (*TestWebhookResponse)(nil), // 439: determined.api.v1.TestWebhookResponse - (*GetGroupResponse)(nil), // 440: determined.api.v1.GetGroupResponse - (*GetGroupsResponse)(nil), // 441: determined.api.v1.GetGroupsResponse - (*CreateGroupResponse)(nil), // 442: determined.api.v1.CreateGroupResponse - (*UpdateGroupResponse)(nil), // 443: determined.api.v1.UpdateGroupResponse - (*DeleteGroupResponse)(nil), // 444: determined.api.v1.DeleteGroupResponse - (*GetPermissionsSummaryResponse)(nil), // 445: determined.api.v1.GetPermissionsSummaryResponse - (*GetGroupsAndUsersAssignedToWorkspaceResponse)(nil), // 446: determined.api.v1.GetGroupsAndUsersAssignedToWorkspaceResponse - (*GetRolesByIDResponse)(nil), // 447: determined.api.v1.GetRolesByIDResponse - (*GetRolesAssignedToUserResponse)(nil), // 448: determined.api.v1.GetRolesAssignedToUserResponse - (*GetRolesAssignedToGroupResponse)(nil), // 449: determined.api.v1.GetRolesAssignedToGroupResponse - (*SearchRolesAssignableToScopeResponse)(nil), // 450: determined.api.v1.SearchRolesAssignableToScopeResponse - (*ListRolesResponse)(nil), // 451: determined.api.v1.ListRolesResponse - (*AssignRolesResponse)(nil), // 452: determined.api.v1.AssignRolesResponse - (*RemoveAssignmentsResponse)(nil), // 453: determined.api.v1.RemoveAssignmentsResponse - (*PostUserActivityResponse)(nil), // 454: determined.api.v1.PostUserActivityResponse - (*GetProjectsByUserActivityResponse)(nil), // 455: determined.api.v1.GetProjectsByUserActivityResponse - (*SearchExperimentsResponse)(nil), // 456: determined.api.v1.SearchExperimentsResponse - (*BindRPToWorkspaceResponse)(nil), // 457: determined.api.v1.BindRPToWorkspaceResponse - (*UnbindRPFromWorkspaceResponse)(nil), // 458: determined.api.v1.UnbindRPFromWorkspaceResponse - (*OverwriteRPWorkspaceBindingsResponse)(nil), // 459: determined.api.v1.OverwriteRPWorkspaceBindingsResponse - (*ListRPsBoundToWorkspaceResponse)(nil), // 460: determined.api.v1.ListRPsBoundToWorkspaceResponse - (*ListWorkspacesBoundToRPResponse)(nil), // 461: determined.api.v1.ListWorkspacesBoundToRPResponse - (*GetGenericTaskConfigResponse)(nil), // 462: determined.api.v1.GetGenericTaskConfigResponse - (*KillGenericTaskResponse)(nil), // 463: determined.api.v1.KillGenericTaskResponse - (*PauseGenericTaskResponse)(nil), // 464: determined.api.v1.PauseGenericTaskResponse - (*UnpauseGenericTaskResponse)(nil), // 465: determined.api.v1.UnpauseGenericTaskResponse - (*SearchRunsResponse)(nil), // 466: determined.api.v1.SearchRunsResponse - (*MoveRunsResponse)(nil), // 467: determined.api.v1.MoveRunsResponse - (*KillRunsResponse)(nil), // 468: determined.api.v1.KillRunsResponse - (*DeleteRunsResponse)(nil), // 469: determined.api.v1.DeleteRunsResponse - (*ArchiveRunsResponse)(nil), // 470: determined.api.v1.ArchiveRunsResponse - (*UnarchiveRunsResponse)(nil), // 471: determined.api.v1.UnarchiveRunsResponse + (*GetProjectByKeyRequest)(nil), // 188: determined.api.v1.GetProjectByKeyRequest + (*GetProjectColumnsRequest)(nil), // 189: determined.api.v1.GetProjectColumnsRequest + (*GetProjectNumericMetricsRangeRequest)(nil), // 190: determined.api.v1.GetProjectNumericMetricsRangeRequest + (*PostProjectRequest)(nil), // 191: determined.api.v1.PostProjectRequest + (*AddProjectNoteRequest)(nil), // 192: determined.api.v1.AddProjectNoteRequest + (*PutProjectNotesRequest)(nil), // 193: determined.api.v1.PutProjectNotesRequest + (*PatchProjectRequest)(nil), // 194: determined.api.v1.PatchProjectRequest + (*DeleteProjectRequest)(nil), // 195: determined.api.v1.DeleteProjectRequest + (*ArchiveProjectRequest)(nil), // 196: determined.api.v1.ArchiveProjectRequest + (*UnarchiveProjectRequest)(nil), // 197: determined.api.v1.UnarchiveProjectRequest + (*MoveProjectRequest)(nil), // 198: determined.api.v1.MoveProjectRequest + (*MoveExperimentRequest)(nil), // 199: determined.api.v1.MoveExperimentRequest + (*MoveExperimentsRequest)(nil), // 200: determined.api.v1.MoveExperimentsRequest + (*GetWebhooksRequest)(nil), // 201: determined.api.v1.GetWebhooksRequest + (*PostWebhookRequest)(nil), // 202: determined.api.v1.PostWebhookRequest + (*DeleteWebhookRequest)(nil), // 203: determined.api.v1.DeleteWebhookRequest + (*TestWebhookRequest)(nil), // 204: determined.api.v1.TestWebhookRequest + (*GetGroupRequest)(nil), // 205: determined.api.v1.GetGroupRequest + (*GetGroupsRequest)(nil), // 206: determined.api.v1.GetGroupsRequest + (*CreateGroupRequest)(nil), // 207: determined.api.v1.CreateGroupRequest + (*UpdateGroupRequest)(nil), // 208: determined.api.v1.UpdateGroupRequest + (*DeleteGroupRequest)(nil), // 209: determined.api.v1.DeleteGroupRequest + (*GetPermissionsSummaryRequest)(nil), // 210: determined.api.v1.GetPermissionsSummaryRequest + (*GetGroupsAndUsersAssignedToWorkspaceRequest)(nil), // 211: determined.api.v1.GetGroupsAndUsersAssignedToWorkspaceRequest + (*GetRolesByIDRequest)(nil), // 212: determined.api.v1.GetRolesByIDRequest + (*GetRolesAssignedToUserRequest)(nil), // 213: determined.api.v1.GetRolesAssignedToUserRequest + (*GetRolesAssignedToGroupRequest)(nil), // 214: determined.api.v1.GetRolesAssignedToGroupRequest + (*SearchRolesAssignableToScopeRequest)(nil), // 215: determined.api.v1.SearchRolesAssignableToScopeRequest + (*ListRolesRequest)(nil), // 216: determined.api.v1.ListRolesRequest + (*AssignRolesRequest)(nil), // 217: determined.api.v1.AssignRolesRequest + (*RemoveAssignmentsRequest)(nil), // 218: determined.api.v1.RemoveAssignmentsRequest + (*PostUserActivityRequest)(nil), // 219: determined.api.v1.PostUserActivityRequest + (*GetProjectsByUserActivityRequest)(nil), // 220: determined.api.v1.GetProjectsByUserActivityRequest + (*SearchExperimentsRequest)(nil), // 221: determined.api.v1.SearchExperimentsRequest + (*BindRPToWorkspaceRequest)(nil), // 222: determined.api.v1.BindRPToWorkspaceRequest + (*UnbindRPFromWorkspaceRequest)(nil), // 223: determined.api.v1.UnbindRPFromWorkspaceRequest + (*OverwriteRPWorkspaceBindingsRequest)(nil), // 224: determined.api.v1.OverwriteRPWorkspaceBindingsRequest + (*ListRPsBoundToWorkspaceRequest)(nil), // 225: determined.api.v1.ListRPsBoundToWorkspaceRequest + (*ListWorkspacesBoundToRPRequest)(nil), // 226: determined.api.v1.ListWorkspacesBoundToRPRequest + (*GetGenericTaskConfigRequest)(nil), // 227: determined.api.v1.GetGenericTaskConfigRequest + (*KillGenericTaskRequest)(nil), // 228: determined.api.v1.KillGenericTaskRequest + (*PauseGenericTaskRequest)(nil), // 229: determined.api.v1.PauseGenericTaskRequest + (*UnpauseGenericTaskRequest)(nil), // 230: determined.api.v1.UnpauseGenericTaskRequest + (*SearchRunsRequest)(nil), // 231: determined.api.v1.SearchRunsRequest + (*MoveRunsRequest)(nil), // 232: determined.api.v1.MoveRunsRequest + (*KillRunsRequest)(nil), // 233: determined.api.v1.KillRunsRequest + (*DeleteRunsRequest)(nil), // 234: determined.api.v1.DeleteRunsRequest + (*ArchiveRunsRequest)(nil), // 235: determined.api.v1.ArchiveRunsRequest + (*UnarchiveRunsRequest)(nil), // 236: determined.api.v1.UnarchiveRunsRequest + (*LoginResponse)(nil), // 237: determined.api.v1.LoginResponse + (*CurrentUserResponse)(nil), // 238: determined.api.v1.CurrentUserResponse + (*LogoutResponse)(nil), // 239: determined.api.v1.LogoutResponse + (*GetUsersResponse)(nil), // 240: determined.api.v1.GetUsersResponse + (*GetUserSettingResponse)(nil), // 241: determined.api.v1.GetUserSettingResponse + (*ResetUserSettingResponse)(nil), // 242: determined.api.v1.ResetUserSettingResponse + (*PostUserSettingResponse)(nil), // 243: determined.api.v1.PostUserSettingResponse + (*GetUserResponse)(nil), // 244: determined.api.v1.GetUserResponse + (*GetUserByUsernameResponse)(nil), // 245: determined.api.v1.GetUserByUsernameResponse + (*GetMeResponse)(nil), // 246: determined.api.v1.GetMeResponse + (*PostUserResponse)(nil), // 247: determined.api.v1.PostUserResponse + (*SetUserPasswordResponse)(nil), // 248: determined.api.v1.SetUserPasswordResponse + (*AssignMultipleGroupsResponse)(nil), // 249: determined.api.v1.AssignMultipleGroupsResponse + (*PatchUserResponse)(nil), // 250: determined.api.v1.PatchUserResponse + (*PatchUsersResponse)(nil), // 251: determined.api.v1.PatchUsersResponse + (*GetTelemetryResponse)(nil), // 252: determined.api.v1.GetTelemetryResponse + (*GetMasterResponse)(nil), // 253: determined.api.v1.GetMasterResponse + (*GetMasterConfigResponse)(nil), // 254: determined.api.v1.GetMasterConfigResponse + (*PatchMasterConfigResponse)(nil), // 255: determined.api.v1.PatchMasterConfigResponse + (*MasterLogsResponse)(nil), // 256: determined.api.v1.MasterLogsResponse + (*GetAgentsResponse)(nil), // 257: determined.api.v1.GetAgentsResponse + (*GetAgentResponse)(nil), // 258: determined.api.v1.GetAgentResponse + (*GetSlotsResponse)(nil), // 259: determined.api.v1.GetSlotsResponse + (*GetSlotResponse)(nil), // 260: determined.api.v1.GetSlotResponse + (*EnableAgentResponse)(nil), // 261: determined.api.v1.EnableAgentResponse + (*DisableAgentResponse)(nil), // 262: determined.api.v1.DisableAgentResponse + (*EnableSlotResponse)(nil), // 263: determined.api.v1.EnableSlotResponse + (*DisableSlotResponse)(nil), // 264: determined.api.v1.DisableSlotResponse + (*CreateGenericTaskResponse)(nil), // 265: determined.api.v1.CreateGenericTaskResponse + (*CreateExperimentResponse)(nil), // 266: determined.api.v1.CreateExperimentResponse + (*PutExperimentResponse)(nil), // 267: determined.api.v1.PutExperimentResponse + (*ContinueExperimentResponse)(nil), // 268: determined.api.v1.ContinueExperimentResponse + (*GetExperimentResponse)(nil), // 269: determined.api.v1.GetExperimentResponse + (*GetExperimentsResponse)(nil), // 270: determined.api.v1.GetExperimentsResponse + (*PutExperimentRetainLogsResponse)(nil), // 271: determined.api.v1.PutExperimentRetainLogsResponse + (*PutExperimentsRetainLogsResponse)(nil), // 272: determined.api.v1.PutExperimentsRetainLogsResponse + (*PutTrialRetainLogsResponse)(nil), // 273: determined.api.v1.PutTrialRetainLogsResponse + (*GetModelDefResponse)(nil), // 274: determined.api.v1.GetModelDefResponse + (*GetTaskContextDirectoryResponse)(nil), // 275: determined.api.v1.GetTaskContextDirectoryResponse + (*GetModelDefTreeResponse)(nil), // 276: determined.api.v1.GetModelDefTreeResponse + (*GetModelDefFileResponse)(nil), // 277: determined.api.v1.GetModelDefFileResponse + (*GetExperimentLabelsResponse)(nil), // 278: determined.api.v1.GetExperimentLabelsResponse + (*GetExperimentValidationHistoryResponse)(nil), // 279: determined.api.v1.GetExperimentValidationHistoryResponse + (*ActivateExperimentResponse)(nil), // 280: determined.api.v1.ActivateExperimentResponse + (*ActivateExperimentsResponse)(nil), // 281: determined.api.v1.ActivateExperimentsResponse + (*PauseExperimentResponse)(nil), // 282: determined.api.v1.PauseExperimentResponse + (*PauseExperimentsResponse)(nil), // 283: determined.api.v1.PauseExperimentsResponse + (*CancelExperimentResponse)(nil), // 284: determined.api.v1.CancelExperimentResponse + (*CancelExperimentsResponse)(nil), // 285: determined.api.v1.CancelExperimentsResponse + (*KillExperimentResponse)(nil), // 286: determined.api.v1.KillExperimentResponse + (*KillExperimentsResponse)(nil), // 287: determined.api.v1.KillExperimentsResponse + (*ArchiveExperimentResponse)(nil), // 288: determined.api.v1.ArchiveExperimentResponse + (*ArchiveExperimentsResponse)(nil), // 289: determined.api.v1.ArchiveExperimentsResponse + (*UnarchiveExperimentResponse)(nil), // 290: determined.api.v1.UnarchiveExperimentResponse + (*UnarchiveExperimentsResponse)(nil), // 291: determined.api.v1.UnarchiveExperimentsResponse + (*PatchExperimentResponse)(nil), // 292: determined.api.v1.PatchExperimentResponse + (*DeleteExperimentsResponse)(nil), // 293: determined.api.v1.DeleteExperimentsResponse + (*DeleteExperimentResponse)(nil), // 294: determined.api.v1.DeleteExperimentResponse + (*GetBestSearcherValidationMetricResponse)(nil), // 295: determined.api.v1.GetBestSearcherValidationMetricResponse + (*GetExperimentCheckpointsResponse)(nil), // 296: determined.api.v1.GetExperimentCheckpointsResponse + (*PutExperimentLabelResponse)(nil), // 297: determined.api.v1.PutExperimentLabelResponse + (*DeleteExperimentLabelResponse)(nil), // 298: determined.api.v1.DeleteExperimentLabelResponse + (*PreviewHPSearchResponse)(nil), // 299: determined.api.v1.PreviewHPSearchResponse + (*GetExperimentTrialsResponse)(nil), // 300: determined.api.v1.GetExperimentTrialsResponse + (*GetTrialRemainingLogRetentionDaysResponse)(nil), // 301: determined.api.v1.GetTrialRemainingLogRetentionDaysResponse + (*CompareTrialsResponse)(nil), // 302: determined.api.v1.CompareTrialsResponse + (*ReportTrialSourceInfoResponse)(nil), // 303: determined.api.v1.ReportTrialSourceInfoResponse + (*CreateTrialResponse)(nil), // 304: determined.api.v1.CreateTrialResponse + (*PutTrialResponse)(nil), // 305: determined.api.v1.PutTrialResponse + (*PatchTrialResponse)(nil), // 306: determined.api.v1.PatchTrialResponse + (*StartTrialResponse)(nil), // 307: determined.api.v1.StartTrialResponse + (*RunPrepareForReportingResponse)(nil), // 308: determined.api.v1.RunPrepareForReportingResponse + (*GetTrialResponse)(nil), // 309: determined.api.v1.GetTrialResponse + (*GetTrialByExternalIDResponse)(nil), // 310: determined.api.v1.GetTrialByExternalIDResponse + (*GetTrialWorkloadsResponse)(nil), // 311: determined.api.v1.GetTrialWorkloadsResponse + (*TrialLogsResponse)(nil), // 312: determined.api.v1.TrialLogsResponse + (*TrialLogsFieldsResponse)(nil), // 313: determined.api.v1.TrialLogsFieldsResponse + (*AllocationReadyResponse)(nil), // 314: determined.api.v1.AllocationReadyResponse + (*GetAllocationResponse)(nil), // 315: determined.api.v1.GetAllocationResponse + (*AllocationWaitingResponse)(nil), // 316: determined.api.v1.AllocationWaitingResponse + (*PostTaskLogsResponse)(nil), // 317: determined.api.v1.PostTaskLogsResponse + (*TaskLogsResponse)(nil), // 318: determined.api.v1.TaskLogsResponse + (*TaskLogsFieldsResponse)(nil), // 319: determined.api.v1.TaskLogsFieldsResponse + (*GetTrialProfilerMetricsResponse)(nil), // 320: determined.api.v1.GetTrialProfilerMetricsResponse + (*GetTrialProfilerAvailableSeriesResponse)(nil), // 321: determined.api.v1.GetTrialProfilerAvailableSeriesResponse + (*PostTrialProfilerMetricsBatchResponse)(nil), // 322: determined.api.v1.PostTrialProfilerMetricsBatchResponse + (*GetMetricsResponse)(nil), // 323: determined.api.v1.GetMetricsResponse + (*GetTrainingMetricsResponse)(nil), // 324: determined.api.v1.GetTrainingMetricsResponse + (*GetValidationMetricsResponse)(nil), // 325: determined.api.v1.GetValidationMetricsResponse + (*KillTrialResponse)(nil), // 326: determined.api.v1.KillTrialResponse + (*GetTrialCheckpointsResponse)(nil), // 327: determined.api.v1.GetTrialCheckpointsResponse + (*CleanupLogsResponse)(nil), // 328: determined.api.v1.CleanupLogsResponse + (*AllocationPreemptionSignalResponse)(nil), // 329: determined.api.v1.AllocationPreemptionSignalResponse + (*AllocationPendingPreemptionSignalResponse)(nil), // 330: determined.api.v1.AllocationPendingPreemptionSignalResponse + (*AckAllocationPreemptionSignalResponse)(nil), // 331: determined.api.v1.AckAllocationPreemptionSignalResponse + (*MarkAllocationResourcesDaemonResponse)(nil), // 332: determined.api.v1.MarkAllocationResourcesDaemonResponse + (*AllocationRendezvousInfoResponse)(nil), // 333: determined.api.v1.AllocationRendezvousInfoResponse + (*PostAllocationProxyAddressResponse)(nil), // 334: determined.api.v1.PostAllocationProxyAddressResponse + (*GetTaskAcceleratorDataResponse)(nil), // 335: determined.api.v1.GetTaskAcceleratorDataResponse + (*PostAllocationAcceleratorDataResponse)(nil), // 336: determined.api.v1.PostAllocationAcceleratorDataResponse + (*AllocationAllGatherResponse)(nil), // 337: determined.api.v1.AllocationAllGatherResponse + (*NotifyContainerRunningResponse)(nil), // 338: determined.api.v1.NotifyContainerRunningResponse + (*GetCurrentTrialSearcherOperationResponse)(nil), // 339: determined.api.v1.GetCurrentTrialSearcherOperationResponse + (*CompleteTrialSearcherValidationResponse)(nil), // 340: determined.api.v1.CompleteTrialSearcherValidationResponse + (*ReportTrialSearcherEarlyExitResponse)(nil), // 341: determined.api.v1.ReportTrialSearcherEarlyExitResponse + (*ReportTrialProgressResponse)(nil), // 342: determined.api.v1.ReportTrialProgressResponse + (*PostTrialRunnerMetadataResponse)(nil), // 343: determined.api.v1.PostTrialRunnerMetadataResponse + (*ReportTrialMetricsResponse)(nil), // 344: determined.api.v1.ReportTrialMetricsResponse + (*ReportTrialTrainingMetricsResponse)(nil), // 345: determined.api.v1.ReportTrialTrainingMetricsResponse + (*ReportTrialValidationMetricsResponse)(nil), // 346: determined.api.v1.ReportTrialValidationMetricsResponse + (*ReportCheckpointResponse)(nil), // 347: determined.api.v1.ReportCheckpointResponse + (*GetJobsResponse)(nil), // 348: determined.api.v1.GetJobsResponse + (*GetJobsV2Response)(nil), // 349: determined.api.v1.GetJobsV2Response + (*GetJobQueueStatsResponse)(nil), // 350: determined.api.v1.GetJobQueueStatsResponse + (*UpdateJobQueueResponse)(nil), // 351: determined.api.v1.UpdateJobQueueResponse + (*GetTemplatesResponse)(nil), // 352: determined.api.v1.GetTemplatesResponse + (*GetTemplateResponse)(nil), // 353: determined.api.v1.GetTemplateResponse + (*PutTemplateResponse)(nil), // 354: determined.api.v1.PutTemplateResponse + (*PostTemplateResponse)(nil), // 355: determined.api.v1.PostTemplateResponse + (*PatchTemplateConfigResponse)(nil), // 356: determined.api.v1.PatchTemplateConfigResponse + (*PatchTemplateNameResponse)(nil), // 357: determined.api.v1.PatchTemplateNameResponse + (*DeleteTemplateResponse)(nil), // 358: determined.api.v1.DeleteTemplateResponse + (*GetNotebooksResponse)(nil), // 359: determined.api.v1.GetNotebooksResponse + (*GetNotebookResponse)(nil), // 360: determined.api.v1.GetNotebookResponse + (*IdleNotebookResponse)(nil), // 361: determined.api.v1.IdleNotebookResponse + (*KillNotebookResponse)(nil), // 362: determined.api.v1.KillNotebookResponse + (*SetNotebookPriorityResponse)(nil), // 363: determined.api.v1.SetNotebookPriorityResponse + (*LaunchNotebookResponse)(nil), // 364: determined.api.v1.LaunchNotebookResponse + (*GetShellsResponse)(nil), // 365: determined.api.v1.GetShellsResponse + (*GetShellResponse)(nil), // 366: determined.api.v1.GetShellResponse + (*KillShellResponse)(nil), // 367: determined.api.v1.KillShellResponse + (*SetShellPriorityResponse)(nil), // 368: determined.api.v1.SetShellPriorityResponse + (*LaunchShellResponse)(nil), // 369: determined.api.v1.LaunchShellResponse + (*GetCommandsResponse)(nil), // 370: determined.api.v1.GetCommandsResponse + (*GetCommandResponse)(nil), // 371: determined.api.v1.GetCommandResponse + (*KillCommandResponse)(nil), // 372: determined.api.v1.KillCommandResponse + (*SetCommandPriorityResponse)(nil), // 373: determined.api.v1.SetCommandPriorityResponse + (*LaunchCommandResponse)(nil), // 374: determined.api.v1.LaunchCommandResponse + (*GetTensorboardsResponse)(nil), // 375: determined.api.v1.GetTensorboardsResponse + (*GetTensorboardResponse)(nil), // 376: determined.api.v1.GetTensorboardResponse + (*KillTensorboardResponse)(nil), // 377: determined.api.v1.KillTensorboardResponse + (*SetTensorboardPriorityResponse)(nil), // 378: determined.api.v1.SetTensorboardPriorityResponse + (*LaunchTensorboardResponse)(nil), // 379: determined.api.v1.LaunchTensorboardResponse + (*DeleteTensorboardFilesResponse)(nil), // 380: determined.api.v1.DeleteTensorboardFilesResponse + (*GetActiveTasksCountResponse)(nil), // 381: determined.api.v1.GetActiveTasksCountResponse + (*GetTaskResponse)(nil), // 382: determined.api.v1.GetTaskResponse + (*GetTasksResponse)(nil), // 383: determined.api.v1.GetTasksResponse + (*GetModelResponse)(nil), // 384: determined.api.v1.GetModelResponse + (*PostModelResponse)(nil), // 385: determined.api.v1.PostModelResponse + (*PatchModelResponse)(nil), // 386: determined.api.v1.PatchModelResponse + (*ArchiveModelResponse)(nil), // 387: determined.api.v1.ArchiveModelResponse + (*UnarchiveModelResponse)(nil), // 388: determined.api.v1.UnarchiveModelResponse + (*MoveModelResponse)(nil), // 389: determined.api.v1.MoveModelResponse + (*DeleteModelResponse)(nil), // 390: determined.api.v1.DeleteModelResponse + (*GetModelsResponse)(nil), // 391: determined.api.v1.GetModelsResponse + (*GetModelLabelsResponse)(nil), // 392: determined.api.v1.GetModelLabelsResponse + (*GetModelVersionResponse)(nil), // 393: determined.api.v1.GetModelVersionResponse + (*GetModelVersionsResponse)(nil), // 394: determined.api.v1.GetModelVersionsResponse + (*PostModelVersionResponse)(nil), // 395: determined.api.v1.PostModelVersionResponse + (*PatchModelVersionResponse)(nil), // 396: determined.api.v1.PatchModelVersionResponse + (*DeleteModelVersionResponse)(nil), // 397: determined.api.v1.DeleteModelVersionResponse + (*GetTrialMetricsByModelVersionResponse)(nil), // 398: determined.api.v1.GetTrialMetricsByModelVersionResponse + (*GetCheckpointResponse)(nil), // 399: determined.api.v1.GetCheckpointResponse + (*PostCheckpointMetadataResponse)(nil), // 400: determined.api.v1.PostCheckpointMetadataResponse + (*CheckpointsRemoveFilesResponse)(nil), // 401: determined.api.v1.CheckpointsRemoveFilesResponse + (*PatchCheckpointsResponse)(nil), // 402: determined.api.v1.PatchCheckpointsResponse + (*DeleteCheckpointsResponse)(nil), // 403: determined.api.v1.DeleteCheckpointsResponse + (*GetTrialMetricsByCheckpointResponse)(nil), // 404: determined.api.v1.GetTrialMetricsByCheckpointResponse + (*GetSearcherEventsResponse)(nil), // 405: determined.api.v1.GetSearcherEventsResponse + (*PostSearcherOperationsResponse)(nil), // 406: determined.api.v1.PostSearcherOperationsResponse + (*ExpMetricNamesResponse)(nil), // 407: determined.api.v1.ExpMetricNamesResponse + (*MetricBatchesResponse)(nil), // 408: determined.api.v1.MetricBatchesResponse + (*TrialsSnapshotResponse)(nil), // 409: determined.api.v1.TrialsSnapshotResponse + (*TrialsSampleResponse)(nil), // 410: determined.api.v1.TrialsSampleResponse + (*GetResourcePoolsResponse)(nil), // 411: determined.api.v1.GetResourcePoolsResponse + (*ResourceAllocationRawResponse)(nil), // 412: determined.api.v1.ResourceAllocationRawResponse + (*ResourceAllocationAggregatedResponse)(nil), // 413: determined.api.v1.ResourceAllocationAggregatedResponse + (*GetWorkspaceResponse)(nil), // 414: determined.api.v1.GetWorkspaceResponse + (*GetWorkspaceProjectsResponse)(nil), // 415: determined.api.v1.GetWorkspaceProjectsResponse + (*GetWorkspacesResponse)(nil), // 416: determined.api.v1.GetWorkspacesResponse + (*PostWorkspaceResponse)(nil), // 417: determined.api.v1.PostWorkspaceResponse + (*PatchWorkspaceResponse)(nil), // 418: determined.api.v1.PatchWorkspaceResponse + (*DeleteWorkspaceResponse)(nil), // 419: determined.api.v1.DeleteWorkspaceResponse + (*ArchiveWorkspaceResponse)(nil), // 420: determined.api.v1.ArchiveWorkspaceResponse + (*UnarchiveWorkspaceResponse)(nil), // 421: determined.api.v1.UnarchiveWorkspaceResponse + (*PinWorkspaceResponse)(nil), // 422: determined.api.v1.PinWorkspaceResponse + (*UnpinWorkspaceResponse)(nil), // 423: determined.api.v1.UnpinWorkspaceResponse + (*GetProjectResponse)(nil), // 424: determined.api.v1.GetProjectResponse + (*GetProjectByKeyResponse)(nil), // 425: determined.api.v1.GetProjectByKeyResponse + (*GetProjectColumnsResponse)(nil), // 426: determined.api.v1.GetProjectColumnsResponse + (*GetProjectNumericMetricsRangeResponse)(nil), // 427: determined.api.v1.GetProjectNumericMetricsRangeResponse + (*PostProjectResponse)(nil), // 428: determined.api.v1.PostProjectResponse + (*AddProjectNoteResponse)(nil), // 429: determined.api.v1.AddProjectNoteResponse + (*PutProjectNotesResponse)(nil), // 430: determined.api.v1.PutProjectNotesResponse + (*PatchProjectResponse)(nil), // 431: determined.api.v1.PatchProjectResponse + (*DeleteProjectResponse)(nil), // 432: determined.api.v1.DeleteProjectResponse + (*ArchiveProjectResponse)(nil), // 433: determined.api.v1.ArchiveProjectResponse + (*UnarchiveProjectResponse)(nil), // 434: determined.api.v1.UnarchiveProjectResponse + (*MoveProjectResponse)(nil), // 435: determined.api.v1.MoveProjectResponse + (*MoveExperimentResponse)(nil), // 436: determined.api.v1.MoveExperimentResponse + (*MoveExperimentsResponse)(nil), // 437: determined.api.v1.MoveExperimentsResponse + (*GetWebhooksResponse)(nil), // 438: determined.api.v1.GetWebhooksResponse + (*PostWebhookResponse)(nil), // 439: determined.api.v1.PostWebhookResponse + (*DeleteWebhookResponse)(nil), // 440: determined.api.v1.DeleteWebhookResponse + (*TestWebhookResponse)(nil), // 441: determined.api.v1.TestWebhookResponse + (*GetGroupResponse)(nil), // 442: determined.api.v1.GetGroupResponse + (*GetGroupsResponse)(nil), // 443: determined.api.v1.GetGroupsResponse + (*CreateGroupResponse)(nil), // 444: determined.api.v1.CreateGroupResponse + (*UpdateGroupResponse)(nil), // 445: determined.api.v1.UpdateGroupResponse + (*DeleteGroupResponse)(nil), // 446: determined.api.v1.DeleteGroupResponse + (*GetPermissionsSummaryResponse)(nil), // 447: determined.api.v1.GetPermissionsSummaryResponse + (*GetGroupsAndUsersAssignedToWorkspaceResponse)(nil), // 448: determined.api.v1.GetGroupsAndUsersAssignedToWorkspaceResponse + (*GetRolesByIDResponse)(nil), // 449: determined.api.v1.GetRolesByIDResponse + (*GetRolesAssignedToUserResponse)(nil), // 450: determined.api.v1.GetRolesAssignedToUserResponse + (*GetRolesAssignedToGroupResponse)(nil), // 451: determined.api.v1.GetRolesAssignedToGroupResponse + (*SearchRolesAssignableToScopeResponse)(nil), // 452: determined.api.v1.SearchRolesAssignableToScopeResponse + (*ListRolesResponse)(nil), // 453: determined.api.v1.ListRolesResponse + (*AssignRolesResponse)(nil), // 454: determined.api.v1.AssignRolesResponse + (*RemoveAssignmentsResponse)(nil), // 455: determined.api.v1.RemoveAssignmentsResponse + (*PostUserActivityResponse)(nil), // 456: determined.api.v1.PostUserActivityResponse + (*GetProjectsByUserActivityResponse)(nil), // 457: determined.api.v1.GetProjectsByUserActivityResponse + (*SearchExperimentsResponse)(nil), // 458: determined.api.v1.SearchExperimentsResponse + (*BindRPToWorkspaceResponse)(nil), // 459: determined.api.v1.BindRPToWorkspaceResponse + (*UnbindRPFromWorkspaceResponse)(nil), // 460: determined.api.v1.UnbindRPFromWorkspaceResponse + (*OverwriteRPWorkspaceBindingsResponse)(nil), // 461: determined.api.v1.OverwriteRPWorkspaceBindingsResponse + (*ListRPsBoundToWorkspaceResponse)(nil), // 462: determined.api.v1.ListRPsBoundToWorkspaceResponse + (*ListWorkspacesBoundToRPResponse)(nil), // 463: determined.api.v1.ListWorkspacesBoundToRPResponse + (*GetGenericTaskConfigResponse)(nil), // 464: determined.api.v1.GetGenericTaskConfigResponse + (*KillGenericTaskResponse)(nil), // 465: determined.api.v1.KillGenericTaskResponse + (*PauseGenericTaskResponse)(nil), // 466: determined.api.v1.PauseGenericTaskResponse + (*UnpauseGenericTaskResponse)(nil), // 467: determined.api.v1.UnpauseGenericTaskResponse + (*SearchRunsResponse)(nil), // 468: determined.api.v1.SearchRunsResponse + (*MoveRunsResponse)(nil), // 469: determined.api.v1.MoveRunsResponse + (*KillRunsResponse)(nil), // 470: determined.api.v1.KillRunsResponse + (*DeleteRunsResponse)(nil), // 471: determined.api.v1.DeleteRunsResponse + (*ArchiveRunsResponse)(nil), // 472: determined.api.v1.ArchiveRunsResponse + (*UnarchiveRunsResponse)(nil), // 473: determined.api.v1.UnarchiveRunsResponse } var file_determined_api_v1_api_proto_depIdxs = []int32{ 0, // 0: determined.api.v1.Determined.Login:input_type -> determined.api.v1.LoginRequest @@ -3304,292 +3315,294 @@ var file_determined_api_v1_api_proto_depIdxs = []int32{ 185, // 185: determined.api.v1.Determined.PinWorkspace:input_type -> determined.api.v1.PinWorkspaceRequest 186, // 186: determined.api.v1.Determined.UnpinWorkspace:input_type -> determined.api.v1.UnpinWorkspaceRequest 187, // 187: determined.api.v1.Determined.GetProject:input_type -> determined.api.v1.GetProjectRequest - 188, // 188: determined.api.v1.Determined.GetProjectColumns:input_type -> determined.api.v1.GetProjectColumnsRequest - 189, // 189: determined.api.v1.Determined.GetProjectNumericMetricsRange:input_type -> determined.api.v1.GetProjectNumericMetricsRangeRequest - 190, // 190: determined.api.v1.Determined.PostProject:input_type -> determined.api.v1.PostProjectRequest - 191, // 191: determined.api.v1.Determined.AddProjectNote:input_type -> determined.api.v1.AddProjectNoteRequest - 192, // 192: determined.api.v1.Determined.PutProjectNotes:input_type -> determined.api.v1.PutProjectNotesRequest - 193, // 193: determined.api.v1.Determined.PatchProject:input_type -> determined.api.v1.PatchProjectRequest - 194, // 194: determined.api.v1.Determined.DeleteProject:input_type -> determined.api.v1.DeleteProjectRequest - 195, // 195: determined.api.v1.Determined.ArchiveProject:input_type -> determined.api.v1.ArchiveProjectRequest - 196, // 196: determined.api.v1.Determined.UnarchiveProject:input_type -> determined.api.v1.UnarchiveProjectRequest - 197, // 197: determined.api.v1.Determined.MoveProject:input_type -> determined.api.v1.MoveProjectRequest - 198, // 198: determined.api.v1.Determined.MoveExperiment:input_type -> determined.api.v1.MoveExperimentRequest - 199, // 199: determined.api.v1.Determined.MoveExperiments:input_type -> determined.api.v1.MoveExperimentsRequest - 200, // 200: determined.api.v1.Determined.GetWebhooks:input_type -> determined.api.v1.GetWebhooksRequest - 201, // 201: determined.api.v1.Determined.PostWebhook:input_type -> determined.api.v1.PostWebhookRequest - 202, // 202: determined.api.v1.Determined.DeleteWebhook:input_type -> determined.api.v1.DeleteWebhookRequest - 203, // 203: determined.api.v1.Determined.TestWebhook:input_type -> determined.api.v1.TestWebhookRequest - 204, // 204: determined.api.v1.Determined.GetGroup:input_type -> determined.api.v1.GetGroupRequest - 205, // 205: determined.api.v1.Determined.GetGroups:input_type -> determined.api.v1.GetGroupsRequest - 206, // 206: determined.api.v1.Determined.CreateGroup:input_type -> determined.api.v1.CreateGroupRequest - 207, // 207: determined.api.v1.Determined.UpdateGroup:input_type -> determined.api.v1.UpdateGroupRequest - 208, // 208: determined.api.v1.Determined.DeleteGroup:input_type -> determined.api.v1.DeleteGroupRequest - 209, // 209: determined.api.v1.Determined.GetPermissionsSummary:input_type -> determined.api.v1.GetPermissionsSummaryRequest - 210, // 210: determined.api.v1.Determined.GetGroupsAndUsersAssignedToWorkspace:input_type -> determined.api.v1.GetGroupsAndUsersAssignedToWorkspaceRequest - 211, // 211: determined.api.v1.Determined.GetRolesByID:input_type -> determined.api.v1.GetRolesByIDRequest - 212, // 212: determined.api.v1.Determined.GetRolesAssignedToUser:input_type -> determined.api.v1.GetRolesAssignedToUserRequest - 213, // 213: determined.api.v1.Determined.GetRolesAssignedToGroup:input_type -> determined.api.v1.GetRolesAssignedToGroupRequest - 214, // 214: determined.api.v1.Determined.SearchRolesAssignableToScope:input_type -> determined.api.v1.SearchRolesAssignableToScopeRequest - 215, // 215: determined.api.v1.Determined.ListRoles:input_type -> determined.api.v1.ListRolesRequest - 216, // 216: determined.api.v1.Determined.AssignRoles:input_type -> determined.api.v1.AssignRolesRequest - 217, // 217: determined.api.v1.Determined.RemoveAssignments:input_type -> determined.api.v1.RemoveAssignmentsRequest - 218, // 218: determined.api.v1.Determined.PostUserActivity:input_type -> determined.api.v1.PostUserActivityRequest - 219, // 219: determined.api.v1.Determined.GetProjectsByUserActivity:input_type -> determined.api.v1.GetProjectsByUserActivityRequest - 220, // 220: determined.api.v1.Determined.SearchExperiments:input_type -> determined.api.v1.SearchExperimentsRequest - 221, // 221: determined.api.v1.Determined.BindRPToWorkspace:input_type -> determined.api.v1.BindRPToWorkspaceRequest - 222, // 222: determined.api.v1.Determined.UnbindRPFromWorkspace:input_type -> determined.api.v1.UnbindRPFromWorkspaceRequest - 223, // 223: determined.api.v1.Determined.OverwriteRPWorkspaceBindings:input_type -> determined.api.v1.OverwriteRPWorkspaceBindingsRequest - 224, // 224: determined.api.v1.Determined.ListRPsBoundToWorkspace:input_type -> determined.api.v1.ListRPsBoundToWorkspaceRequest - 225, // 225: determined.api.v1.Determined.ListWorkspacesBoundToRP:input_type -> determined.api.v1.ListWorkspacesBoundToRPRequest - 226, // 226: determined.api.v1.Determined.GetGenericTaskConfig:input_type -> determined.api.v1.GetGenericTaskConfigRequest - 227, // 227: determined.api.v1.Determined.KillGenericTask:input_type -> determined.api.v1.KillGenericTaskRequest - 228, // 228: determined.api.v1.Determined.PauseGenericTask:input_type -> determined.api.v1.PauseGenericTaskRequest - 229, // 229: determined.api.v1.Determined.UnpauseGenericTask:input_type -> determined.api.v1.UnpauseGenericTaskRequest - 230, // 230: determined.api.v1.Determined.SearchRuns:input_type -> determined.api.v1.SearchRunsRequest - 231, // 231: determined.api.v1.Determined.MoveRuns:input_type -> determined.api.v1.MoveRunsRequest - 232, // 232: determined.api.v1.Determined.KillRuns:input_type -> determined.api.v1.KillRunsRequest - 233, // 233: determined.api.v1.Determined.DeleteRuns:input_type -> determined.api.v1.DeleteRunsRequest - 234, // 234: determined.api.v1.Determined.ArchiveRuns:input_type -> determined.api.v1.ArchiveRunsRequest - 235, // 235: determined.api.v1.Determined.UnarchiveRuns:input_type -> determined.api.v1.UnarchiveRunsRequest - 236, // 236: determined.api.v1.Determined.Login:output_type -> determined.api.v1.LoginResponse - 237, // 237: determined.api.v1.Determined.CurrentUser:output_type -> determined.api.v1.CurrentUserResponse - 238, // 238: determined.api.v1.Determined.Logout:output_type -> determined.api.v1.LogoutResponse - 239, // 239: determined.api.v1.Determined.GetUsers:output_type -> determined.api.v1.GetUsersResponse - 240, // 240: determined.api.v1.Determined.GetUserSetting:output_type -> determined.api.v1.GetUserSettingResponse - 241, // 241: determined.api.v1.Determined.ResetUserSetting:output_type -> determined.api.v1.ResetUserSettingResponse - 242, // 242: determined.api.v1.Determined.PostUserSetting:output_type -> determined.api.v1.PostUserSettingResponse - 243, // 243: determined.api.v1.Determined.GetUser:output_type -> determined.api.v1.GetUserResponse - 244, // 244: determined.api.v1.Determined.GetUserByUsername:output_type -> determined.api.v1.GetUserByUsernameResponse - 245, // 245: determined.api.v1.Determined.GetMe:output_type -> determined.api.v1.GetMeResponse - 246, // 246: determined.api.v1.Determined.PostUser:output_type -> determined.api.v1.PostUserResponse - 247, // 247: determined.api.v1.Determined.SetUserPassword:output_type -> determined.api.v1.SetUserPasswordResponse - 248, // 248: determined.api.v1.Determined.AssignMultipleGroups:output_type -> determined.api.v1.AssignMultipleGroupsResponse - 249, // 249: determined.api.v1.Determined.PatchUser:output_type -> determined.api.v1.PatchUserResponse - 250, // 250: determined.api.v1.Determined.PatchUsers:output_type -> determined.api.v1.PatchUsersResponse - 251, // 251: determined.api.v1.Determined.GetTelemetry:output_type -> determined.api.v1.GetTelemetryResponse - 252, // 252: determined.api.v1.Determined.GetMaster:output_type -> determined.api.v1.GetMasterResponse - 253, // 253: determined.api.v1.Determined.GetMasterConfig:output_type -> determined.api.v1.GetMasterConfigResponse - 254, // 254: determined.api.v1.Determined.PatchMasterConfig:output_type -> determined.api.v1.PatchMasterConfigResponse - 255, // 255: determined.api.v1.Determined.MasterLogs:output_type -> determined.api.v1.MasterLogsResponse - 256, // 256: determined.api.v1.Determined.GetAgents:output_type -> determined.api.v1.GetAgentsResponse - 257, // 257: determined.api.v1.Determined.GetAgent:output_type -> determined.api.v1.GetAgentResponse - 258, // 258: determined.api.v1.Determined.GetSlots:output_type -> determined.api.v1.GetSlotsResponse - 259, // 259: determined.api.v1.Determined.GetSlot:output_type -> determined.api.v1.GetSlotResponse - 260, // 260: determined.api.v1.Determined.EnableAgent:output_type -> determined.api.v1.EnableAgentResponse - 261, // 261: determined.api.v1.Determined.DisableAgent:output_type -> determined.api.v1.DisableAgentResponse - 262, // 262: determined.api.v1.Determined.EnableSlot:output_type -> determined.api.v1.EnableSlotResponse - 263, // 263: determined.api.v1.Determined.DisableSlot:output_type -> determined.api.v1.DisableSlotResponse - 264, // 264: determined.api.v1.Determined.CreateGenericTask:output_type -> determined.api.v1.CreateGenericTaskResponse - 265, // 265: determined.api.v1.Determined.CreateExperiment:output_type -> determined.api.v1.CreateExperimentResponse - 266, // 266: determined.api.v1.Determined.PutExperiment:output_type -> determined.api.v1.PutExperimentResponse - 267, // 267: determined.api.v1.Determined.ContinueExperiment:output_type -> determined.api.v1.ContinueExperimentResponse - 268, // 268: determined.api.v1.Determined.GetExperiment:output_type -> determined.api.v1.GetExperimentResponse - 269, // 269: determined.api.v1.Determined.GetExperiments:output_type -> determined.api.v1.GetExperimentsResponse - 270, // 270: determined.api.v1.Determined.PutExperimentRetainLogs:output_type -> determined.api.v1.PutExperimentRetainLogsResponse - 271, // 271: determined.api.v1.Determined.PutExperimentsRetainLogs:output_type -> determined.api.v1.PutExperimentsRetainLogsResponse - 272, // 272: determined.api.v1.Determined.PutTrialRetainLogs:output_type -> determined.api.v1.PutTrialRetainLogsResponse - 273, // 273: determined.api.v1.Determined.GetModelDef:output_type -> determined.api.v1.GetModelDefResponse - 274, // 274: determined.api.v1.Determined.GetTaskContextDirectory:output_type -> determined.api.v1.GetTaskContextDirectoryResponse - 275, // 275: determined.api.v1.Determined.GetModelDefTree:output_type -> determined.api.v1.GetModelDefTreeResponse - 276, // 276: determined.api.v1.Determined.GetModelDefFile:output_type -> determined.api.v1.GetModelDefFileResponse - 277, // 277: determined.api.v1.Determined.GetExperimentLabels:output_type -> determined.api.v1.GetExperimentLabelsResponse - 278, // 278: determined.api.v1.Determined.GetExperimentValidationHistory:output_type -> determined.api.v1.GetExperimentValidationHistoryResponse - 279, // 279: determined.api.v1.Determined.ActivateExperiment:output_type -> determined.api.v1.ActivateExperimentResponse - 280, // 280: determined.api.v1.Determined.ActivateExperiments:output_type -> determined.api.v1.ActivateExperimentsResponse - 281, // 281: determined.api.v1.Determined.PauseExperiment:output_type -> determined.api.v1.PauseExperimentResponse - 282, // 282: determined.api.v1.Determined.PauseExperiments:output_type -> determined.api.v1.PauseExperimentsResponse - 283, // 283: determined.api.v1.Determined.CancelExperiment:output_type -> determined.api.v1.CancelExperimentResponse - 284, // 284: determined.api.v1.Determined.CancelExperiments:output_type -> determined.api.v1.CancelExperimentsResponse - 285, // 285: determined.api.v1.Determined.KillExperiment:output_type -> determined.api.v1.KillExperimentResponse - 286, // 286: determined.api.v1.Determined.KillExperiments:output_type -> determined.api.v1.KillExperimentsResponse - 287, // 287: determined.api.v1.Determined.ArchiveExperiment:output_type -> determined.api.v1.ArchiveExperimentResponse - 288, // 288: determined.api.v1.Determined.ArchiveExperiments:output_type -> determined.api.v1.ArchiveExperimentsResponse - 289, // 289: determined.api.v1.Determined.UnarchiveExperiment:output_type -> determined.api.v1.UnarchiveExperimentResponse - 290, // 290: determined.api.v1.Determined.UnarchiveExperiments:output_type -> determined.api.v1.UnarchiveExperimentsResponse - 291, // 291: determined.api.v1.Determined.PatchExperiment:output_type -> determined.api.v1.PatchExperimentResponse - 292, // 292: determined.api.v1.Determined.DeleteExperiments:output_type -> determined.api.v1.DeleteExperimentsResponse - 293, // 293: determined.api.v1.Determined.DeleteExperiment:output_type -> determined.api.v1.DeleteExperimentResponse - 294, // 294: determined.api.v1.Determined.GetBestSearcherValidationMetric:output_type -> determined.api.v1.GetBestSearcherValidationMetricResponse - 295, // 295: determined.api.v1.Determined.GetExperimentCheckpoints:output_type -> determined.api.v1.GetExperimentCheckpointsResponse - 296, // 296: determined.api.v1.Determined.PutExperimentLabel:output_type -> determined.api.v1.PutExperimentLabelResponse - 297, // 297: determined.api.v1.Determined.DeleteExperimentLabel:output_type -> determined.api.v1.DeleteExperimentLabelResponse - 298, // 298: determined.api.v1.Determined.PreviewHPSearch:output_type -> determined.api.v1.PreviewHPSearchResponse - 299, // 299: determined.api.v1.Determined.GetExperimentTrials:output_type -> determined.api.v1.GetExperimentTrialsResponse - 300, // 300: determined.api.v1.Determined.GetTrialRemainingLogRetentionDays:output_type -> determined.api.v1.GetTrialRemainingLogRetentionDaysResponse - 301, // 301: determined.api.v1.Determined.CompareTrials:output_type -> determined.api.v1.CompareTrialsResponse - 302, // 302: determined.api.v1.Determined.ReportTrialSourceInfo:output_type -> determined.api.v1.ReportTrialSourceInfoResponse - 303, // 303: determined.api.v1.Determined.CreateTrial:output_type -> determined.api.v1.CreateTrialResponse - 304, // 304: determined.api.v1.Determined.PutTrial:output_type -> determined.api.v1.PutTrialResponse - 305, // 305: determined.api.v1.Determined.PatchTrial:output_type -> determined.api.v1.PatchTrialResponse - 306, // 306: determined.api.v1.Determined.StartTrial:output_type -> determined.api.v1.StartTrialResponse - 307, // 307: determined.api.v1.Determined.RunPrepareForReporting:output_type -> determined.api.v1.RunPrepareForReportingResponse - 308, // 308: determined.api.v1.Determined.GetTrial:output_type -> determined.api.v1.GetTrialResponse - 309, // 309: determined.api.v1.Determined.GetTrialByExternalID:output_type -> determined.api.v1.GetTrialByExternalIDResponse - 310, // 310: determined.api.v1.Determined.GetTrialWorkloads:output_type -> determined.api.v1.GetTrialWorkloadsResponse - 311, // 311: determined.api.v1.Determined.TrialLogs:output_type -> determined.api.v1.TrialLogsResponse - 312, // 312: determined.api.v1.Determined.TrialLogsFields:output_type -> determined.api.v1.TrialLogsFieldsResponse - 313, // 313: determined.api.v1.Determined.AllocationReady:output_type -> determined.api.v1.AllocationReadyResponse - 314, // 314: determined.api.v1.Determined.GetAllocation:output_type -> determined.api.v1.GetAllocationResponse - 315, // 315: determined.api.v1.Determined.AllocationWaiting:output_type -> determined.api.v1.AllocationWaitingResponse - 316, // 316: determined.api.v1.Determined.PostTaskLogs:output_type -> determined.api.v1.PostTaskLogsResponse - 317, // 317: determined.api.v1.Determined.TaskLogs:output_type -> determined.api.v1.TaskLogsResponse - 318, // 318: determined.api.v1.Determined.TaskLogsFields:output_type -> determined.api.v1.TaskLogsFieldsResponse - 319, // 319: determined.api.v1.Determined.GetTrialProfilerMetrics:output_type -> determined.api.v1.GetTrialProfilerMetricsResponse - 320, // 320: determined.api.v1.Determined.GetTrialProfilerAvailableSeries:output_type -> determined.api.v1.GetTrialProfilerAvailableSeriesResponse - 321, // 321: determined.api.v1.Determined.PostTrialProfilerMetricsBatch:output_type -> determined.api.v1.PostTrialProfilerMetricsBatchResponse - 322, // 322: determined.api.v1.Determined.GetMetrics:output_type -> determined.api.v1.GetMetricsResponse - 323, // 323: determined.api.v1.Determined.GetTrainingMetrics:output_type -> determined.api.v1.GetTrainingMetricsResponse - 324, // 324: determined.api.v1.Determined.GetValidationMetrics:output_type -> determined.api.v1.GetValidationMetricsResponse - 325, // 325: determined.api.v1.Determined.KillTrial:output_type -> determined.api.v1.KillTrialResponse - 326, // 326: determined.api.v1.Determined.GetTrialCheckpoints:output_type -> determined.api.v1.GetTrialCheckpointsResponse - 327, // 327: determined.api.v1.Determined.CleanupLogs:output_type -> determined.api.v1.CleanupLogsResponse - 328, // 328: determined.api.v1.Determined.AllocationPreemptionSignal:output_type -> determined.api.v1.AllocationPreemptionSignalResponse - 329, // 329: determined.api.v1.Determined.AllocationPendingPreemptionSignal:output_type -> determined.api.v1.AllocationPendingPreemptionSignalResponse - 330, // 330: determined.api.v1.Determined.AckAllocationPreemptionSignal:output_type -> determined.api.v1.AckAllocationPreemptionSignalResponse - 331, // 331: determined.api.v1.Determined.MarkAllocationResourcesDaemon:output_type -> determined.api.v1.MarkAllocationResourcesDaemonResponse - 332, // 332: determined.api.v1.Determined.AllocationRendezvousInfo:output_type -> determined.api.v1.AllocationRendezvousInfoResponse - 333, // 333: determined.api.v1.Determined.PostAllocationProxyAddress:output_type -> determined.api.v1.PostAllocationProxyAddressResponse - 334, // 334: determined.api.v1.Determined.GetTaskAcceleratorData:output_type -> determined.api.v1.GetTaskAcceleratorDataResponse - 335, // 335: determined.api.v1.Determined.PostAllocationAcceleratorData:output_type -> determined.api.v1.PostAllocationAcceleratorDataResponse - 336, // 336: determined.api.v1.Determined.AllocationAllGather:output_type -> determined.api.v1.AllocationAllGatherResponse - 337, // 337: determined.api.v1.Determined.NotifyContainerRunning:output_type -> determined.api.v1.NotifyContainerRunningResponse - 338, // 338: determined.api.v1.Determined.GetCurrentTrialSearcherOperation:output_type -> determined.api.v1.GetCurrentTrialSearcherOperationResponse - 339, // 339: determined.api.v1.Determined.CompleteTrialSearcherValidation:output_type -> determined.api.v1.CompleteTrialSearcherValidationResponse - 340, // 340: determined.api.v1.Determined.ReportTrialSearcherEarlyExit:output_type -> determined.api.v1.ReportTrialSearcherEarlyExitResponse - 341, // 341: determined.api.v1.Determined.ReportTrialProgress:output_type -> determined.api.v1.ReportTrialProgressResponse - 342, // 342: determined.api.v1.Determined.PostTrialRunnerMetadata:output_type -> determined.api.v1.PostTrialRunnerMetadataResponse - 343, // 343: determined.api.v1.Determined.ReportTrialMetrics:output_type -> determined.api.v1.ReportTrialMetricsResponse - 344, // 344: determined.api.v1.Determined.ReportTrialTrainingMetrics:output_type -> determined.api.v1.ReportTrialTrainingMetricsResponse - 345, // 345: determined.api.v1.Determined.ReportTrialValidationMetrics:output_type -> determined.api.v1.ReportTrialValidationMetricsResponse - 346, // 346: determined.api.v1.Determined.ReportCheckpoint:output_type -> determined.api.v1.ReportCheckpointResponse - 347, // 347: determined.api.v1.Determined.GetJobs:output_type -> determined.api.v1.GetJobsResponse - 348, // 348: determined.api.v1.Determined.GetJobsV2:output_type -> determined.api.v1.GetJobsV2Response - 349, // 349: determined.api.v1.Determined.GetJobQueueStats:output_type -> determined.api.v1.GetJobQueueStatsResponse - 350, // 350: determined.api.v1.Determined.UpdateJobQueue:output_type -> determined.api.v1.UpdateJobQueueResponse - 351, // 351: determined.api.v1.Determined.GetTemplates:output_type -> determined.api.v1.GetTemplatesResponse - 352, // 352: determined.api.v1.Determined.GetTemplate:output_type -> determined.api.v1.GetTemplateResponse - 353, // 353: determined.api.v1.Determined.PutTemplate:output_type -> determined.api.v1.PutTemplateResponse - 354, // 354: determined.api.v1.Determined.PostTemplate:output_type -> determined.api.v1.PostTemplateResponse - 355, // 355: determined.api.v1.Determined.PatchTemplateConfig:output_type -> determined.api.v1.PatchTemplateConfigResponse - 356, // 356: determined.api.v1.Determined.PatchTemplateName:output_type -> determined.api.v1.PatchTemplateNameResponse - 357, // 357: determined.api.v1.Determined.DeleteTemplate:output_type -> determined.api.v1.DeleteTemplateResponse - 358, // 358: determined.api.v1.Determined.GetNotebooks:output_type -> determined.api.v1.GetNotebooksResponse - 359, // 359: determined.api.v1.Determined.GetNotebook:output_type -> determined.api.v1.GetNotebookResponse - 360, // 360: determined.api.v1.Determined.IdleNotebook:output_type -> determined.api.v1.IdleNotebookResponse - 361, // 361: determined.api.v1.Determined.KillNotebook:output_type -> determined.api.v1.KillNotebookResponse - 362, // 362: determined.api.v1.Determined.SetNotebookPriority:output_type -> determined.api.v1.SetNotebookPriorityResponse - 363, // 363: determined.api.v1.Determined.LaunchNotebook:output_type -> determined.api.v1.LaunchNotebookResponse - 364, // 364: determined.api.v1.Determined.GetShells:output_type -> determined.api.v1.GetShellsResponse - 365, // 365: determined.api.v1.Determined.GetShell:output_type -> determined.api.v1.GetShellResponse - 366, // 366: determined.api.v1.Determined.KillShell:output_type -> determined.api.v1.KillShellResponse - 367, // 367: determined.api.v1.Determined.SetShellPriority:output_type -> determined.api.v1.SetShellPriorityResponse - 368, // 368: determined.api.v1.Determined.LaunchShell:output_type -> determined.api.v1.LaunchShellResponse - 369, // 369: determined.api.v1.Determined.GetCommands:output_type -> determined.api.v1.GetCommandsResponse - 370, // 370: determined.api.v1.Determined.GetCommand:output_type -> determined.api.v1.GetCommandResponse - 371, // 371: determined.api.v1.Determined.KillCommand:output_type -> determined.api.v1.KillCommandResponse - 372, // 372: determined.api.v1.Determined.SetCommandPriority:output_type -> determined.api.v1.SetCommandPriorityResponse - 373, // 373: determined.api.v1.Determined.LaunchCommand:output_type -> determined.api.v1.LaunchCommandResponse - 374, // 374: determined.api.v1.Determined.GetTensorboards:output_type -> determined.api.v1.GetTensorboardsResponse - 375, // 375: determined.api.v1.Determined.GetTensorboard:output_type -> determined.api.v1.GetTensorboardResponse - 376, // 376: determined.api.v1.Determined.KillTensorboard:output_type -> determined.api.v1.KillTensorboardResponse - 377, // 377: determined.api.v1.Determined.SetTensorboardPriority:output_type -> determined.api.v1.SetTensorboardPriorityResponse - 378, // 378: determined.api.v1.Determined.LaunchTensorboard:output_type -> determined.api.v1.LaunchTensorboardResponse - 379, // 379: determined.api.v1.Determined.DeleteTensorboardFiles:output_type -> determined.api.v1.DeleteTensorboardFilesResponse - 380, // 380: determined.api.v1.Determined.GetActiveTasksCount:output_type -> determined.api.v1.GetActiveTasksCountResponse - 381, // 381: determined.api.v1.Determined.GetTask:output_type -> determined.api.v1.GetTaskResponse - 382, // 382: determined.api.v1.Determined.GetTasks:output_type -> determined.api.v1.GetTasksResponse - 383, // 383: determined.api.v1.Determined.GetModel:output_type -> determined.api.v1.GetModelResponse - 384, // 384: determined.api.v1.Determined.PostModel:output_type -> determined.api.v1.PostModelResponse - 385, // 385: determined.api.v1.Determined.PatchModel:output_type -> determined.api.v1.PatchModelResponse - 386, // 386: determined.api.v1.Determined.ArchiveModel:output_type -> determined.api.v1.ArchiveModelResponse - 387, // 387: determined.api.v1.Determined.UnarchiveModel:output_type -> determined.api.v1.UnarchiveModelResponse - 388, // 388: determined.api.v1.Determined.MoveModel:output_type -> determined.api.v1.MoveModelResponse - 389, // 389: determined.api.v1.Determined.DeleteModel:output_type -> determined.api.v1.DeleteModelResponse - 390, // 390: determined.api.v1.Determined.GetModels:output_type -> determined.api.v1.GetModelsResponse - 391, // 391: determined.api.v1.Determined.GetModelLabels:output_type -> determined.api.v1.GetModelLabelsResponse - 392, // 392: determined.api.v1.Determined.GetModelVersion:output_type -> determined.api.v1.GetModelVersionResponse - 393, // 393: determined.api.v1.Determined.GetModelVersions:output_type -> determined.api.v1.GetModelVersionsResponse - 394, // 394: determined.api.v1.Determined.PostModelVersion:output_type -> determined.api.v1.PostModelVersionResponse - 395, // 395: determined.api.v1.Determined.PatchModelVersion:output_type -> determined.api.v1.PatchModelVersionResponse - 396, // 396: determined.api.v1.Determined.DeleteModelVersion:output_type -> determined.api.v1.DeleteModelVersionResponse - 397, // 397: determined.api.v1.Determined.GetTrialMetricsByModelVersion:output_type -> determined.api.v1.GetTrialMetricsByModelVersionResponse - 398, // 398: determined.api.v1.Determined.GetCheckpoint:output_type -> determined.api.v1.GetCheckpointResponse - 399, // 399: determined.api.v1.Determined.PostCheckpointMetadata:output_type -> determined.api.v1.PostCheckpointMetadataResponse - 400, // 400: determined.api.v1.Determined.CheckpointsRemoveFiles:output_type -> determined.api.v1.CheckpointsRemoveFilesResponse - 401, // 401: determined.api.v1.Determined.PatchCheckpoints:output_type -> determined.api.v1.PatchCheckpointsResponse - 402, // 402: determined.api.v1.Determined.DeleteCheckpoints:output_type -> determined.api.v1.DeleteCheckpointsResponse - 403, // 403: determined.api.v1.Determined.GetTrialMetricsByCheckpoint:output_type -> determined.api.v1.GetTrialMetricsByCheckpointResponse - 404, // 404: determined.api.v1.Determined.GetSearcherEvents:output_type -> determined.api.v1.GetSearcherEventsResponse - 405, // 405: determined.api.v1.Determined.PostSearcherOperations:output_type -> determined.api.v1.PostSearcherOperationsResponse - 406, // 406: determined.api.v1.Determined.ExpMetricNames:output_type -> determined.api.v1.ExpMetricNamesResponse - 407, // 407: determined.api.v1.Determined.MetricBatches:output_type -> determined.api.v1.MetricBatchesResponse - 408, // 408: determined.api.v1.Determined.TrialsSnapshot:output_type -> determined.api.v1.TrialsSnapshotResponse - 409, // 409: determined.api.v1.Determined.TrialsSample:output_type -> determined.api.v1.TrialsSampleResponse - 410, // 410: determined.api.v1.Determined.GetResourcePools:output_type -> determined.api.v1.GetResourcePoolsResponse - 411, // 411: determined.api.v1.Determined.ResourceAllocationRaw:output_type -> determined.api.v1.ResourceAllocationRawResponse - 412, // 412: determined.api.v1.Determined.ResourceAllocationAggregated:output_type -> determined.api.v1.ResourceAllocationAggregatedResponse - 413, // 413: determined.api.v1.Determined.GetWorkspace:output_type -> determined.api.v1.GetWorkspaceResponse - 414, // 414: determined.api.v1.Determined.GetWorkspaceProjects:output_type -> determined.api.v1.GetWorkspaceProjectsResponse - 415, // 415: determined.api.v1.Determined.GetWorkspaces:output_type -> determined.api.v1.GetWorkspacesResponse - 416, // 416: determined.api.v1.Determined.PostWorkspace:output_type -> determined.api.v1.PostWorkspaceResponse - 417, // 417: determined.api.v1.Determined.PatchWorkspace:output_type -> determined.api.v1.PatchWorkspaceResponse - 418, // 418: determined.api.v1.Determined.DeleteWorkspace:output_type -> determined.api.v1.DeleteWorkspaceResponse - 419, // 419: determined.api.v1.Determined.ArchiveWorkspace:output_type -> determined.api.v1.ArchiveWorkspaceResponse - 420, // 420: determined.api.v1.Determined.UnarchiveWorkspace:output_type -> determined.api.v1.UnarchiveWorkspaceResponse - 421, // 421: determined.api.v1.Determined.PinWorkspace:output_type -> determined.api.v1.PinWorkspaceResponse - 422, // 422: determined.api.v1.Determined.UnpinWorkspace:output_type -> determined.api.v1.UnpinWorkspaceResponse - 423, // 423: determined.api.v1.Determined.GetProject:output_type -> determined.api.v1.GetProjectResponse - 424, // 424: determined.api.v1.Determined.GetProjectColumns:output_type -> determined.api.v1.GetProjectColumnsResponse - 425, // 425: determined.api.v1.Determined.GetProjectNumericMetricsRange:output_type -> determined.api.v1.GetProjectNumericMetricsRangeResponse - 426, // 426: determined.api.v1.Determined.PostProject:output_type -> determined.api.v1.PostProjectResponse - 427, // 427: determined.api.v1.Determined.AddProjectNote:output_type -> determined.api.v1.AddProjectNoteResponse - 428, // 428: determined.api.v1.Determined.PutProjectNotes:output_type -> determined.api.v1.PutProjectNotesResponse - 429, // 429: determined.api.v1.Determined.PatchProject:output_type -> determined.api.v1.PatchProjectResponse - 430, // 430: determined.api.v1.Determined.DeleteProject:output_type -> determined.api.v1.DeleteProjectResponse - 431, // 431: determined.api.v1.Determined.ArchiveProject:output_type -> determined.api.v1.ArchiveProjectResponse - 432, // 432: determined.api.v1.Determined.UnarchiveProject:output_type -> determined.api.v1.UnarchiveProjectResponse - 433, // 433: determined.api.v1.Determined.MoveProject:output_type -> determined.api.v1.MoveProjectResponse - 434, // 434: determined.api.v1.Determined.MoveExperiment:output_type -> determined.api.v1.MoveExperimentResponse - 435, // 435: determined.api.v1.Determined.MoveExperiments:output_type -> determined.api.v1.MoveExperimentsResponse - 436, // 436: determined.api.v1.Determined.GetWebhooks:output_type -> determined.api.v1.GetWebhooksResponse - 437, // 437: determined.api.v1.Determined.PostWebhook:output_type -> determined.api.v1.PostWebhookResponse - 438, // 438: determined.api.v1.Determined.DeleteWebhook:output_type -> determined.api.v1.DeleteWebhookResponse - 439, // 439: determined.api.v1.Determined.TestWebhook:output_type -> determined.api.v1.TestWebhookResponse - 440, // 440: determined.api.v1.Determined.GetGroup:output_type -> determined.api.v1.GetGroupResponse - 441, // 441: determined.api.v1.Determined.GetGroups:output_type -> determined.api.v1.GetGroupsResponse - 442, // 442: determined.api.v1.Determined.CreateGroup:output_type -> determined.api.v1.CreateGroupResponse - 443, // 443: determined.api.v1.Determined.UpdateGroup:output_type -> determined.api.v1.UpdateGroupResponse - 444, // 444: determined.api.v1.Determined.DeleteGroup:output_type -> determined.api.v1.DeleteGroupResponse - 445, // 445: determined.api.v1.Determined.GetPermissionsSummary:output_type -> determined.api.v1.GetPermissionsSummaryResponse - 446, // 446: determined.api.v1.Determined.GetGroupsAndUsersAssignedToWorkspace:output_type -> determined.api.v1.GetGroupsAndUsersAssignedToWorkspaceResponse - 447, // 447: determined.api.v1.Determined.GetRolesByID:output_type -> determined.api.v1.GetRolesByIDResponse - 448, // 448: determined.api.v1.Determined.GetRolesAssignedToUser:output_type -> determined.api.v1.GetRolesAssignedToUserResponse - 449, // 449: determined.api.v1.Determined.GetRolesAssignedToGroup:output_type -> determined.api.v1.GetRolesAssignedToGroupResponse - 450, // 450: determined.api.v1.Determined.SearchRolesAssignableToScope:output_type -> determined.api.v1.SearchRolesAssignableToScopeResponse - 451, // 451: determined.api.v1.Determined.ListRoles:output_type -> determined.api.v1.ListRolesResponse - 452, // 452: determined.api.v1.Determined.AssignRoles:output_type -> determined.api.v1.AssignRolesResponse - 453, // 453: determined.api.v1.Determined.RemoveAssignments:output_type -> determined.api.v1.RemoveAssignmentsResponse - 454, // 454: determined.api.v1.Determined.PostUserActivity:output_type -> determined.api.v1.PostUserActivityResponse - 455, // 455: determined.api.v1.Determined.GetProjectsByUserActivity:output_type -> determined.api.v1.GetProjectsByUserActivityResponse - 456, // 456: determined.api.v1.Determined.SearchExperiments:output_type -> determined.api.v1.SearchExperimentsResponse - 457, // 457: determined.api.v1.Determined.BindRPToWorkspace:output_type -> determined.api.v1.BindRPToWorkspaceResponse - 458, // 458: determined.api.v1.Determined.UnbindRPFromWorkspace:output_type -> determined.api.v1.UnbindRPFromWorkspaceResponse - 459, // 459: determined.api.v1.Determined.OverwriteRPWorkspaceBindings:output_type -> determined.api.v1.OverwriteRPWorkspaceBindingsResponse - 460, // 460: determined.api.v1.Determined.ListRPsBoundToWorkspace:output_type -> determined.api.v1.ListRPsBoundToWorkspaceResponse - 461, // 461: determined.api.v1.Determined.ListWorkspacesBoundToRP:output_type -> determined.api.v1.ListWorkspacesBoundToRPResponse - 462, // 462: determined.api.v1.Determined.GetGenericTaskConfig:output_type -> determined.api.v1.GetGenericTaskConfigResponse - 463, // 463: determined.api.v1.Determined.KillGenericTask:output_type -> determined.api.v1.KillGenericTaskResponse - 464, // 464: determined.api.v1.Determined.PauseGenericTask:output_type -> determined.api.v1.PauseGenericTaskResponse - 465, // 465: determined.api.v1.Determined.UnpauseGenericTask:output_type -> determined.api.v1.UnpauseGenericTaskResponse - 466, // 466: determined.api.v1.Determined.SearchRuns:output_type -> determined.api.v1.SearchRunsResponse - 467, // 467: determined.api.v1.Determined.MoveRuns:output_type -> determined.api.v1.MoveRunsResponse - 468, // 468: determined.api.v1.Determined.KillRuns:output_type -> determined.api.v1.KillRunsResponse - 469, // 469: determined.api.v1.Determined.DeleteRuns:output_type -> determined.api.v1.DeleteRunsResponse - 470, // 470: determined.api.v1.Determined.ArchiveRuns:output_type -> determined.api.v1.ArchiveRunsResponse - 471, // 471: determined.api.v1.Determined.UnarchiveRuns:output_type -> determined.api.v1.UnarchiveRunsResponse - 236, // [236:472] is the sub-list for method output_type - 0, // [0:236] is the sub-list for method input_type + 188, // 188: determined.api.v1.Determined.GetProjectByKey:input_type -> determined.api.v1.GetProjectByKeyRequest + 189, // 189: determined.api.v1.Determined.GetProjectColumns:input_type -> determined.api.v1.GetProjectColumnsRequest + 190, // 190: determined.api.v1.Determined.GetProjectNumericMetricsRange:input_type -> determined.api.v1.GetProjectNumericMetricsRangeRequest + 191, // 191: determined.api.v1.Determined.PostProject:input_type -> determined.api.v1.PostProjectRequest + 192, // 192: determined.api.v1.Determined.AddProjectNote:input_type -> determined.api.v1.AddProjectNoteRequest + 193, // 193: determined.api.v1.Determined.PutProjectNotes:input_type -> determined.api.v1.PutProjectNotesRequest + 194, // 194: determined.api.v1.Determined.PatchProject:input_type -> determined.api.v1.PatchProjectRequest + 195, // 195: determined.api.v1.Determined.DeleteProject:input_type -> determined.api.v1.DeleteProjectRequest + 196, // 196: determined.api.v1.Determined.ArchiveProject:input_type -> determined.api.v1.ArchiveProjectRequest + 197, // 197: determined.api.v1.Determined.UnarchiveProject:input_type -> determined.api.v1.UnarchiveProjectRequest + 198, // 198: determined.api.v1.Determined.MoveProject:input_type -> determined.api.v1.MoveProjectRequest + 199, // 199: determined.api.v1.Determined.MoveExperiment:input_type -> determined.api.v1.MoveExperimentRequest + 200, // 200: determined.api.v1.Determined.MoveExperiments:input_type -> determined.api.v1.MoveExperimentsRequest + 201, // 201: determined.api.v1.Determined.GetWebhooks:input_type -> determined.api.v1.GetWebhooksRequest + 202, // 202: determined.api.v1.Determined.PostWebhook:input_type -> determined.api.v1.PostWebhookRequest + 203, // 203: determined.api.v1.Determined.DeleteWebhook:input_type -> determined.api.v1.DeleteWebhookRequest + 204, // 204: determined.api.v1.Determined.TestWebhook:input_type -> determined.api.v1.TestWebhookRequest + 205, // 205: determined.api.v1.Determined.GetGroup:input_type -> determined.api.v1.GetGroupRequest + 206, // 206: determined.api.v1.Determined.GetGroups:input_type -> determined.api.v1.GetGroupsRequest + 207, // 207: determined.api.v1.Determined.CreateGroup:input_type -> determined.api.v1.CreateGroupRequest + 208, // 208: determined.api.v1.Determined.UpdateGroup:input_type -> determined.api.v1.UpdateGroupRequest + 209, // 209: determined.api.v1.Determined.DeleteGroup:input_type -> determined.api.v1.DeleteGroupRequest + 210, // 210: determined.api.v1.Determined.GetPermissionsSummary:input_type -> determined.api.v1.GetPermissionsSummaryRequest + 211, // 211: determined.api.v1.Determined.GetGroupsAndUsersAssignedToWorkspace:input_type -> determined.api.v1.GetGroupsAndUsersAssignedToWorkspaceRequest + 212, // 212: determined.api.v1.Determined.GetRolesByID:input_type -> determined.api.v1.GetRolesByIDRequest + 213, // 213: determined.api.v1.Determined.GetRolesAssignedToUser:input_type -> determined.api.v1.GetRolesAssignedToUserRequest + 214, // 214: determined.api.v1.Determined.GetRolesAssignedToGroup:input_type -> determined.api.v1.GetRolesAssignedToGroupRequest + 215, // 215: determined.api.v1.Determined.SearchRolesAssignableToScope:input_type -> determined.api.v1.SearchRolesAssignableToScopeRequest + 216, // 216: determined.api.v1.Determined.ListRoles:input_type -> determined.api.v1.ListRolesRequest + 217, // 217: determined.api.v1.Determined.AssignRoles:input_type -> determined.api.v1.AssignRolesRequest + 218, // 218: determined.api.v1.Determined.RemoveAssignments:input_type -> determined.api.v1.RemoveAssignmentsRequest + 219, // 219: determined.api.v1.Determined.PostUserActivity:input_type -> determined.api.v1.PostUserActivityRequest + 220, // 220: determined.api.v1.Determined.GetProjectsByUserActivity:input_type -> determined.api.v1.GetProjectsByUserActivityRequest + 221, // 221: determined.api.v1.Determined.SearchExperiments:input_type -> determined.api.v1.SearchExperimentsRequest + 222, // 222: determined.api.v1.Determined.BindRPToWorkspace:input_type -> determined.api.v1.BindRPToWorkspaceRequest + 223, // 223: determined.api.v1.Determined.UnbindRPFromWorkspace:input_type -> determined.api.v1.UnbindRPFromWorkspaceRequest + 224, // 224: determined.api.v1.Determined.OverwriteRPWorkspaceBindings:input_type -> determined.api.v1.OverwriteRPWorkspaceBindingsRequest + 225, // 225: determined.api.v1.Determined.ListRPsBoundToWorkspace:input_type -> determined.api.v1.ListRPsBoundToWorkspaceRequest + 226, // 226: determined.api.v1.Determined.ListWorkspacesBoundToRP:input_type -> determined.api.v1.ListWorkspacesBoundToRPRequest + 227, // 227: determined.api.v1.Determined.GetGenericTaskConfig:input_type -> determined.api.v1.GetGenericTaskConfigRequest + 228, // 228: determined.api.v1.Determined.KillGenericTask:input_type -> determined.api.v1.KillGenericTaskRequest + 229, // 229: determined.api.v1.Determined.PauseGenericTask:input_type -> determined.api.v1.PauseGenericTaskRequest + 230, // 230: determined.api.v1.Determined.UnpauseGenericTask:input_type -> determined.api.v1.UnpauseGenericTaskRequest + 231, // 231: determined.api.v1.Determined.SearchRuns:input_type -> determined.api.v1.SearchRunsRequest + 232, // 232: determined.api.v1.Determined.MoveRuns:input_type -> determined.api.v1.MoveRunsRequest + 233, // 233: determined.api.v1.Determined.KillRuns:input_type -> determined.api.v1.KillRunsRequest + 234, // 234: determined.api.v1.Determined.DeleteRuns:input_type -> determined.api.v1.DeleteRunsRequest + 235, // 235: determined.api.v1.Determined.ArchiveRuns:input_type -> determined.api.v1.ArchiveRunsRequest + 236, // 236: determined.api.v1.Determined.UnarchiveRuns:input_type -> determined.api.v1.UnarchiveRunsRequest + 237, // 237: determined.api.v1.Determined.Login:output_type -> determined.api.v1.LoginResponse + 238, // 238: determined.api.v1.Determined.CurrentUser:output_type -> determined.api.v1.CurrentUserResponse + 239, // 239: determined.api.v1.Determined.Logout:output_type -> determined.api.v1.LogoutResponse + 240, // 240: determined.api.v1.Determined.GetUsers:output_type -> determined.api.v1.GetUsersResponse + 241, // 241: determined.api.v1.Determined.GetUserSetting:output_type -> determined.api.v1.GetUserSettingResponse + 242, // 242: determined.api.v1.Determined.ResetUserSetting:output_type -> determined.api.v1.ResetUserSettingResponse + 243, // 243: determined.api.v1.Determined.PostUserSetting:output_type -> determined.api.v1.PostUserSettingResponse + 244, // 244: determined.api.v1.Determined.GetUser:output_type -> determined.api.v1.GetUserResponse + 245, // 245: determined.api.v1.Determined.GetUserByUsername:output_type -> determined.api.v1.GetUserByUsernameResponse + 246, // 246: determined.api.v1.Determined.GetMe:output_type -> determined.api.v1.GetMeResponse + 247, // 247: determined.api.v1.Determined.PostUser:output_type -> determined.api.v1.PostUserResponse + 248, // 248: determined.api.v1.Determined.SetUserPassword:output_type -> determined.api.v1.SetUserPasswordResponse + 249, // 249: determined.api.v1.Determined.AssignMultipleGroups:output_type -> determined.api.v1.AssignMultipleGroupsResponse + 250, // 250: determined.api.v1.Determined.PatchUser:output_type -> determined.api.v1.PatchUserResponse + 251, // 251: determined.api.v1.Determined.PatchUsers:output_type -> determined.api.v1.PatchUsersResponse + 252, // 252: determined.api.v1.Determined.GetTelemetry:output_type -> determined.api.v1.GetTelemetryResponse + 253, // 253: determined.api.v1.Determined.GetMaster:output_type -> determined.api.v1.GetMasterResponse + 254, // 254: determined.api.v1.Determined.GetMasterConfig:output_type -> determined.api.v1.GetMasterConfigResponse + 255, // 255: determined.api.v1.Determined.PatchMasterConfig:output_type -> determined.api.v1.PatchMasterConfigResponse + 256, // 256: determined.api.v1.Determined.MasterLogs:output_type -> determined.api.v1.MasterLogsResponse + 257, // 257: determined.api.v1.Determined.GetAgents:output_type -> determined.api.v1.GetAgentsResponse + 258, // 258: determined.api.v1.Determined.GetAgent:output_type -> determined.api.v1.GetAgentResponse + 259, // 259: determined.api.v1.Determined.GetSlots:output_type -> determined.api.v1.GetSlotsResponse + 260, // 260: determined.api.v1.Determined.GetSlot:output_type -> determined.api.v1.GetSlotResponse + 261, // 261: determined.api.v1.Determined.EnableAgent:output_type -> determined.api.v1.EnableAgentResponse + 262, // 262: determined.api.v1.Determined.DisableAgent:output_type -> determined.api.v1.DisableAgentResponse + 263, // 263: determined.api.v1.Determined.EnableSlot:output_type -> determined.api.v1.EnableSlotResponse + 264, // 264: determined.api.v1.Determined.DisableSlot:output_type -> determined.api.v1.DisableSlotResponse + 265, // 265: determined.api.v1.Determined.CreateGenericTask:output_type -> determined.api.v1.CreateGenericTaskResponse + 266, // 266: determined.api.v1.Determined.CreateExperiment:output_type -> determined.api.v1.CreateExperimentResponse + 267, // 267: determined.api.v1.Determined.PutExperiment:output_type -> determined.api.v1.PutExperimentResponse + 268, // 268: determined.api.v1.Determined.ContinueExperiment:output_type -> determined.api.v1.ContinueExperimentResponse + 269, // 269: determined.api.v1.Determined.GetExperiment:output_type -> determined.api.v1.GetExperimentResponse + 270, // 270: determined.api.v1.Determined.GetExperiments:output_type -> determined.api.v1.GetExperimentsResponse + 271, // 271: determined.api.v1.Determined.PutExperimentRetainLogs:output_type -> determined.api.v1.PutExperimentRetainLogsResponse + 272, // 272: determined.api.v1.Determined.PutExperimentsRetainLogs:output_type -> determined.api.v1.PutExperimentsRetainLogsResponse + 273, // 273: determined.api.v1.Determined.PutTrialRetainLogs:output_type -> determined.api.v1.PutTrialRetainLogsResponse + 274, // 274: determined.api.v1.Determined.GetModelDef:output_type -> determined.api.v1.GetModelDefResponse + 275, // 275: determined.api.v1.Determined.GetTaskContextDirectory:output_type -> determined.api.v1.GetTaskContextDirectoryResponse + 276, // 276: determined.api.v1.Determined.GetModelDefTree:output_type -> determined.api.v1.GetModelDefTreeResponse + 277, // 277: determined.api.v1.Determined.GetModelDefFile:output_type -> determined.api.v1.GetModelDefFileResponse + 278, // 278: determined.api.v1.Determined.GetExperimentLabels:output_type -> determined.api.v1.GetExperimentLabelsResponse + 279, // 279: determined.api.v1.Determined.GetExperimentValidationHistory:output_type -> determined.api.v1.GetExperimentValidationHistoryResponse + 280, // 280: determined.api.v1.Determined.ActivateExperiment:output_type -> determined.api.v1.ActivateExperimentResponse + 281, // 281: determined.api.v1.Determined.ActivateExperiments:output_type -> determined.api.v1.ActivateExperimentsResponse + 282, // 282: determined.api.v1.Determined.PauseExperiment:output_type -> determined.api.v1.PauseExperimentResponse + 283, // 283: determined.api.v1.Determined.PauseExperiments:output_type -> determined.api.v1.PauseExperimentsResponse + 284, // 284: determined.api.v1.Determined.CancelExperiment:output_type -> determined.api.v1.CancelExperimentResponse + 285, // 285: determined.api.v1.Determined.CancelExperiments:output_type -> determined.api.v1.CancelExperimentsResponse + 286, // 286: determined.api.v1.Determined.KillExperiment:output_type -> determined.api.v1.KillExperimentResponse + 287, // 287: determined.api.v1.Determined.KillExperiments:output_type -> determined.api.v1.KillExperimentsResponse + 288, // 288: determined.api.v1.Determined.ArchiveExperiment:output_type -> determined.api.v1.ArchiveExperimentResponse + 289, // 289: determined.api.v1.Determined.ArchiveExperiments:output_type -> determined.api.v1.ArchiveExperimentsResponse + 290, // 290: determined.api.v1.Determined.UnarchiveExperiment:output_type -> determined.api.v1.UnarchiveExperimentResponse + 291, // 291: determined.api.v1.Determined.UnarchiveExperiments:output_type -> determined.api.v1.UnarchiveExperimentsResponse + 292, // 292: determined.api.v1.Determined.PatchExperiment:output_type -> determined.api.v1.PatchExperimentResponse + 293, // 293: determined.api.v1.Determined.DeleteExperiments:output_type -> determined.api.v1.DeleteExperimentsResponse + 294, // 294: determined.api.v1.Determined.DeleteExperiment:output_type -> determined.api.v1.DeleteExperimentResponse + 295, // 295: determined.api.v1.Determined.GetBestSearcherValidationMetric:output_type -> determined.api.v1.GetBestSearcherValidationMetricResponse + 296, // 296: determined.api.v1.Determined.GetExperimentCheckpoints:output_type -> determined.api.v1.GetExperimentCheckpointsResponse + 297, // 297: determined.api.v1.Determined.PutExperimentLabel:output_type -> determined.api.v1.PutExperimentLabelResponse + 298, // 298: determined.api.v1.Determined.DeleteExperimentLabel:output_type -> determined.api.v1.DeleteExperimentLabelResponse + 299, // 299: determined.api.v1.Determined.PreviewHPSearch:output_type -> determined.api.v1.PreviewHPSearchResponse + 300, // 300: determined.api.v1.Determined.GetExperimentTrials:output_type -> determined.api.v1.GetExperimentTrialsResponse + 301, // 301: determined.api.v1.Determined.GetTrialRemainingLogRetentionDays:output_type -> determined.api.v1.GetTrialRemainingLogRetentionDaysResponse + 302, // 302: determined.api.v1.Determined.CompareTrials:output_type -> determined.api.v1.CompareTrialsResponse + 303, // 303: determined.api.v1.Determined.ReportTrialSourceInfo:output_type -> determined.api.v1.ReportTrialSourceInfoResponse + 304, // 304: determined.api.v1.Determined.CreateTrial:output_type -> determined.api.v1.CreateTrialResponse + 305, // 305: determined.api.v1.Determined.PutTrial:output_type -> determined.api.v1.PutTrialResponse + 306, // 306: determined.api.v1.Determined.PatchTrial:output_type -> determined.api.v1.PatchTrialResponse + 307, // 307: determined.api.v1.Determined.StartTrial:output_type -> determined.api.v1.StartTrialResponse + 308, // 308: determined.api.v1.Determined.RunPrepareForReporting:output_type -> determined.api.v1.RunPrepareForReportingResponse + 309, // 309: determined.api.v1.Determined.GetTrial:output_type -> determined.api.v1.GetTrialResponse + 310, // 310: determined.api.v1.Determined.GetTrialByExternalID:output_type -> determined.api.v1.GetTrialByExternalIDResponse + 311, // 311: determined.api.v1.Determined.GetTrialWorkloads:output_type -> determined.api.v1.GetTrialWorkloadsResponse + 312, // 312: determined.api.v1.Determined.TrialLogs:output_type -> determined.api.v1.TrialLogsResponse + 313, // 313: determined.api.v1.Determined.TrialLogsFields:output_type -> determined.api.v1.TrialLogsFieldsResponse + 314, // 314: determined.api.v1.Determined.AllocationReady:output_type -> determined.api.v1.AllocationReadyResponse + 315, // 315: determined.api.v1.Determined.GetAllocation:output_type -> determined.api.v1.GetAllocationResponse + 316, // 316: determined.api.v1.Determined.AllocationWaiting:output_type -> determined.api.v1.AllocationWaitingResponse + 317, // 317: determined.api.v1.Determined.PostTaskLogs:output_type -> determined.api.v1.PostTaskLogsResponse + 318, // 318: determined.api.v1.Determined.TaskLogs:output_type -> determined.api.v1.TaskLogsResponse + 319, // 319: determined.api.v1.Determined.TaskLogsFields:output_type -> determined.api.v1.TaskLogsFieldsResponse + 320, // 320: determined.api.v1.Determined.GetTrialProfilerMetrics:output_type -> determined.api.v1.GetTrialProfilerMetricsResponse + 321, // 321: determined.api.v1.Determined.GetTrialProfilerAvailableSeries:output_type -> determined.api.v1.GetTrialProfilerAvailableSeriesResponse + 322, // 322: determined.api.v1.Determined.PostTrialProfilerMetricsBatch:output_type -> determined.api.v1.PostTrialProfilerMetricsBatchResponse + 323, // 323: determined.api.v1.Determined.GetMetrics:output_type -> determined.api.v1.GetMetricsResponse + 324, // 324: determined.api.v1.Determined.GetTrainingMetrics:output_type -> determined.api.v1.GetTrainingMetricsResponse + 325, // 325: determined.api.v1.Determined.GetValidationMetrics:output_type -> determined.api.v1.GetValidationMetricsResponse + 326, // 326: determined.api.v1.Determined.KillTrial:output_type -> determined.api.v1.KillTrialResponse + 327, // 327: determined.api.v1.Determined.GetTrialCheckpoints:output_type -> determined.api.v1.GetTrialCheckpointsResponse + 328, // 328: determined.api.v1.Determined.CleanupLogs:output_type -> determined.api.v1.CleanupLogsResponse + 329, // 329: determined.api.v1.Determined.AllocationPreemptionSignal:output_type -> determined.api.v1.AllocationPreemptionSignalResponse + 330, // 330: determined.api.v1.Determined.AllocationPendingPreemptionSignal:output_type -> determined.api.v1.AllocationPendingPreemptionSignalResponse + 331, // 331: determined.api.v1.Determined.AckAllocationPreemptionSignal:output_type -> determined.api.v1.AckAllocationPreemptionSignalResponse + 332, // 332: determined.api.v1.Determined.MarkAllocationResourcesDaemon:output_type -> determined.api.v1.MarkAllocationResourcesDaemonResponse + 333, // 333: determined.api.v1.Determined.AllocationRendezvousInfo:output_type -> determined.api.v1.AllocationRendezvousInfoResponse + 334, // 334: determined.api.v1.Determined.PostAllocationProxyAddress:output_type -> determined.api.v1.PostAllocationProxyAddressResponse + 335, // 335: determined.api.v1.Determined.GetTaskAcceleratorData:output_type -> determined.api.v1.GetTaskAcceleratorDataResponse + 336, // 336: determined.api.v1.Determined.PostAllocationAcceleratorData:output_type -> determined.api.v1.PostAllocationAcceleratorDataResponse + 337, // 337: determined.api.v1.Determined.AllocationAllGather:output_type -> determined.api.v1.AllocationAllGatherResponse + 338, // 338: determined.api.v1.Determined.NotifyContainerRunning:output_type -> determined.api.v1.NotifyContainerRunningResponse + 339, // 339: determined.api.v1.Determined.GetCurrentTrialSearcherOperation:output_type -> determined.api.v1.GetCurrentTrialSearcherOperationResponse + 340, // 340: determined.api.v1.Determined.CompleteTrialSearcherValidation:output_type -> determined.api.v1.CompleteTrialSearcherValidationResponse + 341, // 341: determined.api.v1.Determined.ReportTrialSearcherEarlyExit:output_type -> determined.api.v1.ReportTrialSearcherEarlyExitResponse + 342, // 342: determined.api.v1.Determined.ReportTrialProgress:output_type -> determined.api.v1.ReportTrialProgressResponse + 343, // 343: determined.api.v1.Determined.PostTrialRunnerMetadata:output_type -> determined.api.v1.PostTrialRunnerMetadataResponse + 344, // 344: determined.api.v1.Determined.ReportTrialMetrics:output_type -> determined.api.v1.ReportTrialMetricsResponse + 345, // 345: determined.api.v1.Determined.ReportTrialTrainingMetrics:output_type -> determined.api.v1.ReportTrialTrainingMetricsResponse + 346, // 346: determined.api.v1.Determined.ReportTrialValidationMetrics:output_type -> determined.api.v1.ReportTrialValidationMetricsResponse + 347, // 347: determined.api.v1.Determined.ReportCheckpoint:output_type -> determined.api.v1.ReportCheckpointResponse + 348, // 348: determined.api.v1.Determined.GetJobs:output_type -> determined.api.v1.GetJobsResponse + 349, // 349: determined.api.v1.Determined.GetJobsV2:output_type -> determined.api.v1.GetJobsV2Response + 350, // 350: determined.api.v1.Determined.GetJobQueueStats:output_type -> determined.api.v1.GetJobQueueStatsResponse + 351, // 351: determined.api.v1.Determined.UpdateJobQueue:output_type -> determined.api.v1.UpdateJobQueueResponse + 352, // 352: determined.api.v1.Determined.GetTemplates:output_type -> determined.api.v1.GetTemplatesResponse + 353, // 353: determined.api.v1.Determined.GetTemplate:output_type -> determined.api.v1.GetTemplateResponse + 354, // 354: determined.api.v1.Determined.PutTemplate:output_type -> determined.api.v1.PutTemplateResponse + 355, // 355: determined.api.v1.Determined.PostTemplate:output_type -> determined.api.v1.PostTemplateResponse + 356, // 356: determined.api.v1.Determined.PatchTemplateConfig:output_type -> determined.api.v1.PatchTemplateConfigResponse + 357, // 357: determined.api.v1.Determined.PatchTemplateName:output_type -> determined.api.v1.PatchTemplateNameResponse + 358, // 358: determined.api.v1.Determined.DeleteTemplate:output_type -> determined.api.v1.DeleteTemplateResponse + 359, // 359: determined.api.v1.Determined.GetNotebooks:output_type -> determined.api.v1.GetNotebooksResponse + 360, // 360: determined.api.v1.Determined.GetNotebook:output_type -> determined.api.v1.GetNotebookResponse + 361, // 361: determined.api.v1.Determined.IdleNotebook:output_type -> determined.api.v1.IdleNotebookResponse + 362, // 362: determined.api.v1.Determined.KillNotebook:output_type -> determined.api.v1.KillNotebookResponse + 363, // 363: determined.api.v1.Determined.SetNotebookPriority:output_type -> determined.api.v1.SetNotebookPriorityResponse + 364, // 364: determined.api.v1.Determined.LaunchNotebook:output_type -> determined.api.v1.LaunchNotebookResponse + 365, // 365: determined.api.v1.Determined.GetShells:output_type -> determined.api.v1.GetShellsResponse + 366, // 366: determined.api.v1.Determined.GetShell:output_type -> determined.api.v1.GetShellResponse + 367, // 367: determined.api.v1.Determined.KillShell:output_type -> determined.api.v1.KillShellResponse + 368, // 368: determined.api.v1.Determined.SetShellPriority:output_type -> determined.api.v1.SetShellPriorityResponse + 369, // 369: determined.api.v1.Determined.LaunchShell:output_type -> determined.api.v1.LaunchShellResponse + 370, // 370: determined.api.v1.Determined.GetCommands:output_type -> determined.api.v1.GetCommandsResponse + 371, // 371: determined.api.v1.Determined.GetCommand:output_type -> determined.api.v1.GetCommandResponse + 372, // 372: determined.api.v1.Determined.KillCommand:output_type -> determined.api.v1.KillCommandResponse + 373, // 373: determined.api.v1.Determined.SetCommandPriority:output_type -> determined.api.v1.SetCommandPriorityResponse + 374, // 374: determined.api.v1.Determined.LaunchCommand:output_type -> determined.api.v1.LaunchCommandResponse + 375, // 375: determined.api.v1.Determined.GetTensorboards:output_type -> determined.api.v1.GetTensorboardsResponse + 376, // 376: determined.api.v1.Determined.GetTensorboard:output_type -> determined.api.v1.GetTensorboardResponse + 377, // 377: determined.api.v1.Determined.KillTensorboard:output_type -> determined.api.v1.KillTensorboardResponse + 378, // 378: determined.api.v1.Determined.SetTensorboardPriority:output_type -> determined.api.v1.SetTensorboardPriorityResponse + 379, // 379: determined.api.v1.Determined.LaunchTensorboard:output_type -> determined.api.v1.LaunchTensorboardResponse + 380, // 380: determined.api.v1.Determined.DeleteTensorboardFiles:output_type -> determined.api.v1.DeleteTensorboardFilesResponse + 381, // 381: determined.api.v1.Determined.GetActiveTasksCount:output_type -> determined.api.v1.GetActiveTasksCountResponse + 382, // 382: determined.api.v1.Determined.GetTask:output_type -> determined.api.v1.GetTaskResponse + 383, // 383: determined.api.v1.Determined.GetTasks:output_type -> determined.api.v1.GetTasksResponse + 384, // 384: determined.api.v1.Determined.GetModel:output_type -> determined.api.v1.GetModelResponse + 385, // 385: determined.api.v1.Determined.PostModel:output_type -> determined.api.v1.PostModelResponse + 386, // 386: determined.api.v1.Determined.PatchModel:output_type -> determined.api.v1.PatchModelResponse + 387, // 387: determined.api.v1.Determined.ArchiveModel:output_type -> determined.api.v1.ArchiveModelResponse + 388, // 388: determined.api.v1.Determined.UnarchiveModel:output_type -> determined.api.v1.UnarchiveModelResponse + 389, // 389: determined.api.v1.Determined.MoveModel:output_type -> determined.api.v1.MoveModelResponse + 390, // 390: determined.api.v1.Determined.DeleteModel:output_type -> determined.api.v1.DeleteModelResponse + 391, // 391: determined.api.v1.Determined.GetModels:output_type -> determined.api.v1.GetModelsResponse + 392, // 392: determined.api.v1.Determined.GetModelLabels:output_type -> determined.api.v1.GetModelLabelsResponse + 393, // 393: determined.api.v1.Determined.GetModelVersion:output_type -> determined.api.v1.GetModelVersionResponse + 394, // 394: determined.api.v1.Determined.GetModelVersions:output_type -> determined.api.v1.GetModelVersionsResponse + 395, // 395: determined.api.v1.Determined.PostModelVersion:output_type -> determined.api.v1.PostModelVersionResponse + 396, // 396: determined.api.v1.Determined.PatchModelVersion:output_type -> determined.api.v1.PatchModelVersionResponse + 397, // 397: determined.api.v1.Determined.DeleteModelVersion:output_type -> determined.api.v1.DeleteModelVersionResponse + 398, // 398: determined.api.v1.Determined.GetTrialMetricsByModelVersion:output_type -> determined.api.v1.GetTrialMetricsByModelVersionResponse + 399, // 399: determined.api.v1.Determined.GetCheckpoint:output_type -> determined.api.v1.GetCheckpointResponse + 400, // 400: determined.api.v1.Determined.PostCheckpointMetadata:output_type -> determined.api.v1.PostCheckpointMetadataResponse + 401, // 401: determined.api.v1.Determined.CheckpointsRemoveFiles:output_type -> determined.api.v1.CheckpointsRemoveFilesResponse + 402, // 402: determined.api.v1.Determined.PatchCheckpoints:output_type -> determined.api.v1.PatchCheckpointsResponse + 403, // 403: determined.api.v1.Determined.DeleteCheckpoints:output_type -> determined.api.v1.DeleteCheckpointsResponse + 404, // 404: determined.api.v1.Determined.GetTrialMetricsByCheckpoint:output_type -> determined.api.v1.GetTrialMetricsByCheckpointResponse + 405, // 405: determined.api.v1.Determined.GetSearcherEvents:output_type -> determined.api.v1.GetSearcherEventsResponse + 406, // 406: determined.api.v1.Determined.PostSearcherOperations:output_type -> determined.api.v1.PostSearcherOperationsResponse + 407, // 407: determined.api.v1.Determined.ExpMetricNames:output_type -> determined.api.v1.ExpMetricNamesResponse + 408, // 408: determined.api.v1.Determined.MetricBatches:output_type -> determined.api.v1.MetricBatchesResponse + 409, // 409: determined.api.v1.Determined.TrialsSnapshot:output_type -> determined.api.v1.TrialsSnapshotResponse + 410, // 410: determined.api.v1.Determined.TrialsSample:output_type -> determined.api.v1.TrialsSampleResponse + 411, // 411: determined.api.v1.Determined.GetResourcePools:output_type -> determined.api.v1.GetResourcePoolsResponse + 412, // 412: determined.api.v1.Determined.ResourceAllocationRaw:output_type -> determined.api.v1.ResourceAllocationRawResponse + 413, // 413: determined.api.v1.Determined.ResourceAllocationAggregated:output_type -> determined.api.v1.ResourceAllocationAggregatedResponse + 414, // 414: determined.api.v1.Determined.GetWorkspace:output_type -> determined.api.v1.GetWorkspaceResponse + 415, // 415: determined.api.v1.Determined.GetWorkspaceProjects:output_type -> determined.api.v1.GetWorkspaceProjectsResponse + 416, // 416: determined.api.v1.Determined.GetWorkspaces:output_type -> determined.api.v1.GetWorkspacesResponse + 417, // 417: determined.api.v1.Determined.PostWorkspace:output_type -> determined.api.v1.PostWorkspaceResponse + 418, // 418: determined.api.v1.Determined.PatchWorkspace:output_type -> determined.api.v1.PatchWorkspaceResponse + 419, // 419: determined.api.v1.Determined.DeleteWorkspace:output_type -> determined.api.v1.DeleteWorkspaceResponse + 420, // 420: determined.api.v1.Determined.ArchiveWorkspace:output_type -> determined.api.v1.ArchiveWorkspaceResponse + 421, // 421: determined.api.v1.Determined.UnarchiveWorkspace:output_type -> determined.api.v1.UnarchiveWorkspaceResponse + 422, // 422: determined.api.v1.Determined.PinWorkspace:output_type -> determined.api.v1.PinWorkspaceResponse + 423, // 423: determined.api.v1.Determined.UnpinWorkspace:output_type -> determined.api.v1.UnpinWorkspaceResponse + 424, // 424: determined.api.v1.Determined.GetProject:output_type -> determined.api.v1.GetProjectResponse + 425, // 425: determined.api.v1.Determined.GetProjectByKey:output_type -> determined.api.v1.GetProjectByKeyResponse + 426, // 426: determined.api.v1.Determined.GetProjectColumns:output_type -> determined.api.v1.GetProjectColumnsResponse + 427, // 427: determined.api.v1.Determined.GetProjectNumericMetricsRange:output_type -> determined.api.v1.GetProjectNumericMetricsRangeResponse + 428, // 428: determined.api.v1.Determined.PostProject:output_type -> determined.api.v1.PostProjectResponse + 429, // 429: determined.api.v1.Determined.AddProjectNote:output_type -> determined.api.v1.AddProjectNoteResponse + 430, // 430: determined.api.v1.Determined.PutProjectNotes:output_type -> determined.api.v1.PutProjectNotesResponse + 431, // 431: determined.api.v1.Determined.PatchProject:output_type -> determined.api.v1.PatchProjectResponse + 432, // 432: determined.api.v1.Determined.DeleteProject:output_type -> determined.api.v1.DeleteProjectResponse + 433, // 433: determined.api.v1.Determined.ArchiveProject:output_type -> determined.api.v1.ArchiveProjectResponse + 434, // 434: determined.api.v1.Determined.UnarchiveProject:output_type -> determined.api.v1.UnarchiveProjectResponse + 435, // 435: determined.api.v1.Determined.MoveProject:output_type -> determined.api.v1.MoveProjectResponse + 436, // 436: determined.api.v1.Determined.MoveExperiment:output_type -> determined.api.v1.MoveExperimentResponse + 437, // 437: determined.api.v1.Determined.MoveExperiments:output_type -> determined.api.v1.MoveExperimentsResponse + 438, // 438: determined.api.v1.Determined.GetWebhooks:output_type -> determined.api.v1.GetWebhooksResponse + 439, // 439: determined.api.v1.Determined.PostWebhook:output_type -> determined.api.v1.PostWebhookResponse + 440, // 440: determined.api.v1.Determined.DeleteWebhook:output_type -> determined.api.v1.DeleteWebhookResponse + 441, // 441: determined.api.v1.Determined.TestWebhook:output_type -> determined.api.v1.TestWebhookResponse + 442, // 442: determined.api.v1.Determined.GetGroup:output_type -> determined.api.v1.GetGroupResponse + 443, // 443: determined.api.v1.Determined.GetGroups:output_type -> determined.api.v1.GetGroupsResponse + 444, // 444: determined.api.v1.Determined.CreateGroup:output_type -> determined.api.v1.CreateGroupResponse + 445, // 445: determined.api.v1.Determined.UpdateGroup:output_type -> determined.api.v1.UpdateGroupResponse + 446, // 446: determined.api.v1.Determined.DeleteGroup:output_type -> determined.api.v1.DeleteGroupResponse + 447, // 447: determined.api.v1.Determined.GetPermissionsSummary:output_type -> determined.api.v1.GetPermissionsSummaryResponse + 448, // 448: determined.api.v1.Determined.GetGroupsAndUsersAssignedToWorkspace:output_type -> determined.api.v1.GetGroupsAndUsersAssignedToWorkspaceResponse + 449, // 449: determined.api.v1.Determined.GetRolesByID:output_type -> determined.api.v1.GetRolesByIDResponse + 450, // 450: determined.api.v1.Determined.GetRolesAssignedToUser:output_type -> determined.api.v1.GetRolesAssignedToUserResponse + 451, // 451: determined.api.v1.Determined.GetRolesAssignedToGroup:output_type -> determined.api.v1.GetRolesAssignedToGroupResponse + 452, // 452: determined.api.v1.Determined.SearchRolesAssignableToScope:output_type -> determined.api.v1.SearchRolesAssignableToScopeResponse + 453, // 453: determined.api.v1.Determined.ListRoles:output_type -> determined.api.v1.ListRolesResponse + 454, // 454: determined.api.v1.Determined.AssignRoles:output_type -> determined.api.v1.AssignRolesResponse + 455, // 455: determined.api.v1.Determined.RemoveAssignments:output_type -> determined.api.v1.RemoveAssignmentsResponse + 456, // 456: determined.api.v1.Determined.PostUserActivity:output_type -> determined.api.v1.PostUserActivityResponse + 457, // 457: determined.api.v1.Determined.GetProjectsByUserActivity:output_type -> determined.api.v1.GetProjectsByUserActivityResponse + 458, // 458: determined.api.v1.Determined.SearchExperiments:output_type -> determined.api.v1.SearchExperimentsResponse + 459, // 459: determined.api.v1.Determined.BindRPToWorkspace:output_type -> determined.api.v1.BindRPToWorkspaceResponse + 460, // 460: determined.api.v1.Determined.UnbindRPFromWorkspace:output_type -> determined.api.v1.UnbindRPFromWorkspaceResponse + 461, // 461: determined.api.v1.Determined.OverwriteRPWorkspaceBindings:output_type -> determined.api.v1.OverwriteRPWorkspaceBindingsResponse + 462, // 462: determined.api.v1.Determined.ListRPsBoundToWorkspace:output_type -> determined.api.v1.ListRPsBoundToWorkspaceResponse + 463, // 463: determined.api.v1.Determined.ListWorkspacesBoundToRP:output_type -> determined.api.v1.ListWorkspacesBoundToRPResponse + 464, // 464: determined.api.v1.Determined.GetGenericTaskConfig:output_type -> determined.api.v1.GetGenericTaskConfigResponse + 465, // 465: determined.api.v1.Determined.KillGenericTask:output_type -> determined.api.v1.KillGenericTaskResponse + 466, // 466: determined.api.v1.Determined.PauseGenericTask:output_type -> determined.api.v1.PauseGenericTaskResponse + 467, // 467: determined.api.v1.Determined.UnpauseGenericTask:output_type -> determined.api.v1.UnpauseGenericTaskResponse + 468, // 468: determined.api.v1.Determined.SearchRuns:output_type -> determined.api.v1.SearchRunsResponse + 469, // 469: determined.api.v1.Determined.MoveRuns:output_type -> determined.api.v1.MoveRunsResponse + 470, // 470: determined.api.v1.Determined.KillRuns:output_type -> determined.api.v1.KillRunsResponse + 471, // 471: determined.api.v1.Determined.DeleteRuns:output_type -> determined.api.v1.DeleteRunsResponse + 472, // 472: determined.api.v1.Determined.ArchiveRuns:output_type -> determined.api.v1.ArchiveRunsResponse + 473, // 473: determined.api.v1.Determined.UnarchiveRuns:output_type -> determined.api.v1.UnarchiveRunsResponse + 237, // [237:474] is the sub-list for method output_type + 0, // [0:237] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name @@ -4069,6 +4082,8 @@ type DeterminedClient interface { UnpinWorkspace(ctx context.Context, in *UnpinWorkspaceRequest, opts ...grpc.CallOption) (*UnpinWorkspaceResponse, error) // Get the requested project. GetProject(ctx context.Context, in *GetProjectRequest, opts ...grpc.CallOption) (*GetProjectResponse, error) + // Get the request project by key. + GetProjectByKey(ctx context.Context, in *GetProjectByKeyRequest, opts ...grpc.CallOption) (*GetProjectByKeyResponse, error) // Get a list of columns for experiment list table. GetProjectColumns(ctx context.Context, in *GetProjectColumnsRequest, opts ...grpc.CallOption) (*GetProjectColumnsResponse, error) // Get metrics range for a project. @@ -6199,6 +6214,15 @@ func (c *determinedClient) GetProject(ctx context.Context, in *GetProjectRequest return out, nil } +func (c *determinedClient) GetProjectByKey(ctx context.Context, in *GetProjectByKeyRequest, opts ...grpc.CallOption) (*GetProjectByKeyResponse, error) { + out := new(GetProjectByKeyResponse) + err := c.cc.Invoke(ctx, "/determined.api.v1.Determined/GetProjectByKey", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *determinedClient) GetProjectColumns(ctx context.Context, in *GetProjectColumnsRequest, opts ...grpc.CallOption) (*GetProjectColumnsResponse, error) { out := new(GetProjectColumnsResponse) err := c.cc.Invoke(ctx, "/determined.api.v1.Determined/GetProjectColumns", in, out, opts...) @@ -7049,6 +7073,8 @@ type DeterminedServer interface { UnpinWorkspace(context.Context, *UnpinWorkspaceRequest) (*UnpinWorkspaceResponse, error) // Get the requested project. GetProject(context.Context, *GetProjectRequest) (*GetProjectResponse, error) + // Get the request project by key. + GetProjectByKey(context.Context, *GetProjectByKeyRequest) (*GetProjectByKeyResponse, error) // Get a list of columns for experiment list table. GetProjectColumns(context.Context, *GetProjectColumnsRequest) (*GetProjectColumnsResponse, error) // Get metrics range for a project. @@ -7718,6 +7744,9 @@ func (*UnimplementedDeterminedServer) UnpinWorkspace(context.Context, *UnpinWork func (*UnimplementedDeterminedServer) GetProject(context.Context, *GetProjectRequest) (*GetProjectResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetProject not implemented") } +func (*UnimplementedDeterminedServer) GetProjectByKey(context.Context, *GetProjectByKeyRequest) (*GetProjectByKeyResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetProjectByKey not implemented") +} func (*UnimplementedDeterminedServer) GetProjectColumns(context.Context, *GetProjectColumnsRequest) (*GetProjectColumnsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetProjectColumns not implemented") } @@ -11293,6 +11322,24 @@ func _Determined_GetProject_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } +func _Determined_GetProjectByKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetProjectByKeyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DeterminedServer).GetProjectByKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/determined.api.v1.Determined/GetProjectByKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DeterminedServer).GetProjectByKey(ctx, req.(*GetProjectByKeyRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Determined_GetProjectColumns_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetProjectColumnsRequest) if err := dec(in); err != nil { @@ -12857,6 +12904,10 @@ var _Determined_serviceDesc = grpc.ServiceDesc{ MethodName: "GetProject", Handler: _Determined_GetProject_Handler, }, + { + MethodName: "GetProjectByKey", + Handler: _Determined_GetProjectByKey_Handler, + }, { MethodName: "GetProjectColumns", Handler: _Determined_GetProjectColumns_Handler, diff --git a/proto/pkg/apiv1/api.pb.gw.go b/proto/pkg/apiv1/api.pb.gw.go index 0b27f8c3e790..5af3e736ea86 100644 --- a/proto/pkg/apiv1/api.pb.gw.go +++ b/proto/pkg/apiv1/api.pb.gw.go @@ -9909,6 +9909,60 @@ func local_request_Determined_GetProject_0(ctx context.Context, marshaler runtim } +func request_Determined_GetProjectByKey_0(ctx context.Context, marshaler runtime.Marshaler, client DeterminedClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetProjectByKeyRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["key"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "key") + } + + protoReq.Key, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "key", err) + } + + msg, err := client.GetProjectByKey(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Determined_GetProjectByKey_0(ctx context.Context, marshaler runtime.Marshaler, server DeterminedServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetProjectByKeyRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["key"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "key") + } + + protoReq.Key, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "key", err) + } + + msg, err := server.GetProjectByKey(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Determined_GetProjectColumns_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) @@ -15942,6 +15996,26 @@ func RegisterDeterminedHandlerServer(ctx context.Context, mux *runtime.ServeMux, }) + mux.Handle("GET", pattern_Determined_GetProjectByKey_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Determined_GetProjectByKey_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Determined_GetProjectByKey_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Determined_GetProjectColumns_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -20703,6 +20777,26 @@ func RegisterDeterminedHandlerClient(ctx context.Context, mux *runtime.ServeMux, }) + mux.Handle("GET", pattern_Determined_GetProjectByKey_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Determined_GetProjectByKey_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Determined_GetProjectByKey_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Determined_GetProjectColumns_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -22043,6 +22137,8 @@ var ( pattern_Determined_GetProject_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"api", "v1", "projects", "id"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Determined_GetProjectByKey_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 3}, []string{"api", "v1", "projects", "key"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Determined_GetProjectColumns_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"api", "v1", "projects", "id", "columns"}, "", runtime.AssumeColonVerbOpt(true))) pattern_Determined_GetProjectNumericMetricsRange_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5}, []string{"api", "v1", "projects", "id", "experiments", "metric-ranges"}, "", runtime.AssumeColonVerbOpt(true))) @@ -22517,6 +22613,8 @@ var ( forward_Determined_GetProject_0 = runtime.ForwardResponseMessage + forward_Determined_GetProjectByKey_0 = runtime.ForwardResponseMessage + forward_Determined_GetProjectColumns_0 = runtime.ForwardResponseMessage forward_Determined_GetProjectNumericMetricsRange_0 = runtime.ForwardResponseMessage diff --git a/proto/pkg/apiv1/project.pb.go b/proto/pkg/apiv1/project.pb.go index e8965682c450..1f68c28166e3 100644 --- a/proto/pkg/apiv1/project.pb.go +++ b/proto/pkg/apiv1/project.pb.go @@ -171,6 +171,104 @@ func (x *GetProjectResponse) GetProject() *projectv1.Project { return nil } +// Get the requested project by key. +type GetProjectByKeyRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The key of the project. + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` +} + +func (x *GetProjectByKeyRequest) Reset() { + *x = GetProjectByKeyRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_determined_api_v1_project_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetProjectByKeyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetProjectByKeyRequest) ProtoMessage() {} + +func (x *GetProjectByKeyRequest) ProtoReflect() protoreflect.Message { + mi := &file_determined_api_v1_project_proto_msgTypes[2] + 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 GetProjectByKeyRequest.ProtoReflect.Descriptor instead. +func (*GetProjectByKeyRequest) Descriptor() ([]byte, []int) { + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{2} +} + +func (x *GetProjectByKeyRequest) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +// Response to GetProjectByKeyRequest. +type GetProjectByKeyResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The project requested. + Project *projectv1.Project `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` +} + +func (x *GetProjectByKeyResponse) Reset() { + *x = GetProjectByKeyResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_determined_api_v1_project_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetProjectByKeyResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetProjectByKeyResponse) ProtoMessage() {} + +func (x *GetProjectByKeyResponse) ProtoReflect() protoreflect.Message { + mi := &file_determined_api_v1_project_proto_msgTypes[3] + 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 GetProjectByKeyResponse.ProtoReflect.Descriptor instead. +func (*GetProjectByKeyResponse) Descriptor() ([]byte, []int) { + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{3} +} + +func (x *GetProjectByKeyResponse) GetProject() *projectv1.Project { + if x != nil { + return x.Project + } + return nil +} + // Request for experiment list columns type GetProjectColumnsRequest struct { state protoimpl.MessageState @@ -186,7 +284,7 @@ type GetProjectColumnsRequest struct { func (x *GetProjectColumnsRequest) Reset() { *x = GetProjectColumnsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[2] + mi := &file_determined_api_v1_project_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -199,7 +297,7 @@ func (x *GetProjectColumnsRequest) String() string { func (*GetProjectColumnsRequest) ProtoMessage() {} func (x *GetProjectColumnsRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[2] + mi := &file_determined_api_v1_project_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -212,7 +310,7 @@ func (x *GetProjectColumnsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetProjectColumnsRequest.ProtoReflect.Descriptor instead. func (*GetProjectColumnsRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{2} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{4} } func (x *GetProjectColumnsRequest) GetId() int32 { @@ -242,7 +340,7 @@ type GetProjectColumnsResponse struct { func (x *GetProjectColumnsResponse) Reset() { *x = GetProjectColumnsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[3] + mi := &file_determined_api_v1_project_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -255,7 +353,7 @@ func (x *GetProjectColumnsResponse) String() string { func (*GetProjectColumnsResponse) ProtoMessage() {} func (x *GetProjectColumnsResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[3] + mi := &file_determined_api_v1_project_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -268,7 +366,7 @@ func (x *GetProjectColumnsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetProjectColumnsResponse.ProtoReflect.Descriptor instead. func (*GetProjectColumnsResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{3} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{5} } func (x *GetProjectColumnsResponse) GetColumns() []*projectv1.ProjectColumn { @@ -291,7 +389,7 @@ type GetProjectNumericMetricsRangeRequest struct { func (x *GetProjectNumericMetricsRangeRequest) Reset() { *x = GetProjectNumericMetricsRangeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[4] + mi := &file_determined_api_v1_project_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -304,7 +402,7 @@ func (x *GetProjectNumericMetricsRangeRequest) String() string { func (*GetProjectNumericMetricsRangeRequest) ProtoMessage() {} func (x *GetProjectNumericMetricsRangeRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[4] + mi := &file_determined_api_v1_project_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -317,7 +415,7 @@ func (x *GetProjectNumericMetricsRangeRequest) ProtoReflect() protoreflect.Messa // Deprecated: Use GetProjectNumericMetricsRangeRequest.ProtoReflect.Descriptor instead. func (*GetProjectNumericMetricsRangeRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{4} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{6} } func (x *GetProjectNumericMetricsRangeRequest) GetId() int32 { @@ -340,7 +438,7 @@ type GetProjectNumericMetricsRangeResponse struct { func (x *GetProjectNumericMetricsRangeResponse) Reset() { *x = GetProjectNumericMetricsRangeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[5] + mi := &file_determined_api_v1_project_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -353,7 +451,7 @@ func (x *GetProjectNumericMetricsRangeResponse) String() string { func (*GetProjectNumericMetricsRangeResponse) ProtoMessage() {} func (x *GetProjectNumericMetricsRangeResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[5] + mi := &file_determined_api_v1_project_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -366,7 +464,7 @@ func (x *GetProjectNumericMetricsRangeResponse) ProtoReflect() protoreflect.Mess // Deprecated: Use GetProjectNumericMetricsRangeResponse.ProtoReflect.Descriptor instead. func (*GetProjectNumericMetricsRangeResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{5} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{7} } func (x *GetProjectNumericMetricsRangeResponse) GetRanges() []*projectv1.MetricsRange { @@ -395,7 +493,7 @@ type PostProjectRequest struct { func (x *PostProjectRequest) Reset() { *x = PostProjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[6] + mi := &file_determined_api_v1_project_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -408,7 +506,7 @@ func (x *PostProjectRequest) String() string { func (*PostProjectRequest) ProtoMessage() {} func (x *PostProjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[6] + mi := &file_determined_api_v1_project_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -421,7 +519,7 @@ func (x *PostProjectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PostProjectRequest.ProtoReflect.Descriptor instead. func (*PostProjectRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{6} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{8} } func (x *PostProjectRequest) GetName() string { @@ -465,7 +563,7 @@ type PostProjectResponse struct { func (x *PostProjectResponse) Reset() { *x = PostProjectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[7] + mi := &file_determined_api_v1_project_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -478,7 +576,7 @@ func (x *PostProjectResponse) String() string { func (*PostProjectResponse) ProtoMessage() {} func (x *PostProjectResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[7] + mi := &file_determined_api_v1_project_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -491,7 +589,7 @@ func (x *PostProjectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PostProjectResponse.ProtoReflect.Descriptor instead. func (*PostProjectResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{7} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{9} } func (x *PostProjectResponse) GetProject() *projectv1.Project { @@ -516,7 +614,7 @@ type AddProjectNoteRequest struct { func (x *AddProjectNoteRequest) Reset() { *x = AddProjectNoteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[8] + mi := &file_determined_api_v1_project_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -529,7 +627,7 @@ func (x *AddProjectNoteRequest) String() string { func (*AddProjectNoteRequest) ProtoMessage() {} func (x *AddProjectNoteRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[8] + mi := &file_determined_api_v1_project_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -542,7 +640,7 @@ func (x *AddProjectNoteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AddProjectNoteRequest.ProtoReflect.Descriptor instead. func (*AddProjectNoteRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{8} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{10} } func (x *AddProjectNoteRequest) GetNote() *projectv1.Note { @@ -572,7 +670,7 @@ type AddProjectNoteResponse struct { func (x *AddProjectNoteResponse) Reset() { *x = AddProjectNoteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[9] + mi := &file_determined_api_v1_project_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -585,7 +683,7 @@ func (x *AddProjectNoteResponse) String() string { func (*AddProjectNoteResponse) ProtoMessage() {} func (x *AddProjectNoteResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[9] + mi := &file_determined_api_v1_project_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -598,7 +696,7 @@ func (x *AddProjectNoteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AddProjectNoteResponse.ProtoReflect.Descriptor instead. func (*AddProjectNoteResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{9} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{11} } func (x *AddProjectNoteResponse) GetNotes() []*projectv1.Note { @@ -623,7 +721,7 @@ type PutProjectNotesRequest struct { func (x *PutProjectNotesRequest) Reset() { *x = PutProjectNotesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[10] + mi := &file_determined_api_v1_project_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -636,7 +734,7 @@ func (x *PutProjectNotesRequest) String() string { func (*PutProjectNotesRequest) ProtoMessage() {} func (x *PutProjectNotesRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[10] + mi := &file_determined_api_v1_project_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -649,7 +747,7 @@ func (x *PutProjectNotesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PutProjectNotesRequest.ProtoReflect.Descriptor instead. func (*PutProjectNotesRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{10} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{12} } func (x *PutProjectNotesRequest) GetNotes() []*projectv1.Note { @@ -679,7 +777,7 @@ type PutProjectNotesResponse struct { func (x *PutProjectNotesResponse) Reset() { *x = PutProjectNotesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[11] + mi := &file_determined_api_v1_project_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -692,7 +790,7 @@ func (x *PutProjectNotesResponse) String() string { func (*PutProjectNotesResponse) ProtoMessage() {} func (x *PutProjectNotesResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[11] + mi := &file_determined_api_v1_project_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -705,7 +803,7 @@ func (x *PutProjectNotesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PutProjectNotesResponse.ProtoReflect.Descriptor instead. func (*PutProjectNotesResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{11} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{13} } func (x *PutProjectNotesResponse) GetNotes() []*projectv1.Note { @@ -730,7 +828,7 @@ type PatchProjectRequest struct { func (x *PatchProjectRequest) Reset() { *x = PatchProjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[12] + mi := &file_determined_api_v1_project_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -743,7 +841,7 @@ func (x *PatchProjectRequest) String() string { func (*PatchProjectRequest) ProtoMessage() {} func (x *PatchProjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[12] + mi := &file_determined_api_v1_project_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -756,7 +854,7 @@ func (x *PatchProjectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PatchProjectRequest.ProtoReflect.Descriptor instead. func (*PatchProjectRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{12} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{14} } func (x *PatchProjectRequest) GetId() int32 { @@ -786,7 +884,7 @@ type PatchProjectResponse struct { func (x *PatchProjectResponse) Reset() { *x = PatchProjectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[13] + mi := &file_determined_api_v1_project_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -799,7 +897,7 @@ func (x *PatchProjectResponse) String() string { func (*PatchProjectResponse) ProtoMessage() {} func (x *PatchProjectResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[13] + mi := &file_determined_api_v1_project_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -812,7 +910,7 @@ func (x *PatchProjectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PatchProjectResponse.ProtoReflect.Descriptor instead. func (*PatchProjectResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{13} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{15} } func (x *PatchProjectResponse) GetProject() *projectv1.Project { @@ -835,7 +933,7 @@ type DeleteProjectRequest struct { func (x *DeleteProjectRequest) Reset() { *x = DeleteProjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[14] + mi := &file_determined_api_v1_project_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -848,7 +946,7 @@ func (x *DeleteProjectRequest) String() string { func (*DeleteProjectRequest) ProtoMessage() {} func (x *DeleteProjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[14] + mi := &file_determined_api_v1_project_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -861,7 +959,7 @@ func (x *DeleteProjectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteProjectRequest.ProtoReflect.Descriptor instead. func (*DeleteProjectRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{14} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{16} } func (x *DeleteProjectRequest) GetId() int32 { @@ -884,7 +982,7 @@ type DeleteProjectResponse struct { func (x *DeleteProjectResponse) Reset() { *x = DeleteProjectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[15] + mi := &file_determined_api_v1_project_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -897,7 +995,7 @@ func (x *DeleteProjectResponse) String() string { func (*DeleteProjectResponse) ProtoMessage() {} func (x *DeleteProjectResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[15] + mi := &file_determined_api_v1_project_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -910,7 +1008,7 @@ func (x *DeleteProjectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteProjectResponse.ProtoReflect.Descriptor instead. func (*DeleteProjectResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{15} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{17} } func (x *DeleteProjectResponse) GetCompleted() bool { @@ -935,7 +1033,7 @@ type MoveProjectRequest struct { func (x *MoveProjectRequest) Reset() { *x = MoveProjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[16] + mi := &file_determined_api_v1_project_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -948,7 +1046,7 @@ func (x *MoveProjectRequest) String() string { func (*MoveProjectRequest) ProtoMessage() {} func (x *MoveProjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[16] + mi := &file_determined_api_v1_project_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -961,7 +1059,7 @@ func (x *MoveProjectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MoveProjectRequest.ProtoReflect.Descriptor instead. func (*MoveProjectRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{16} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{18} } func (x *MoveProjectRequest) GetProjectId() int32 { @@ -988,7 +1086,7 @@ type MoveProjectResponse struct { func (x *MoveProjectResponse) Reset() { *x = MoveProjectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[17] + mi := &file_determined_api_v1_project_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1001,7 +1099,7 @@ func (x *MoveProjectResponse) String() string { func (*MoveProjectResponse) ProtoMessage() {} func (x *MoveProjectResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[17] + mi := &file_determined_api_v1_project_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1014,7 +1112,7 @@ func (x *MoveProjectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MoveProjectResponse.ProtoReflect.Descriptor instead. func (*MoveProjectResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{17} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{19} } // Request for archiving a project. @@ -1030,7 +1128,7 @@ type ArchiveProjectRequest struct { func (x *ArchiveProjectRequest) Reset() { *x = ArchiveProjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[18] + mi := &file_determined_api_v1_project_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1043,7 +1141,7 @@ func (x *ArchiveProjectRequest) String() string { func (*ArchiveProjectRequest) ProtoMessage() {} func (x *ArchiveProjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[18] + mi := &file_determined_api_v1_project_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1056,7 +1154,7 @@ func (x *ArchiveProjectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ArchiveProjectRequest.ProtoReflect.Descriptor instead. func (*ArchiveProjectRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{18} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{20} } func (x *ArchiveProjectRequest) GetId() int32 { @@ -1076,7 +1174,7 @@ type ArchiveProjectResponse struct { func (x *ArchiveProjectResponse) Reset() { *x = ArchiveProjectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[19] + mi := &file_determined_api_v1_project_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1089,7 +1187,7 @@ func (x *ArchiveProjectResponse) String() string { func (*ArchiveProjectResponse) ProtoMessage() {} func (x *ArchiveProjectResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[19] + mi := &file_determined_api_v1_project_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1102,7 +1200,7 @@ func (x *ArchiveProjectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ArchiveProjectResponse.ProtoReflect.Descriptor instead. func (*ArchiveProjectResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{19} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{21} } // Request for un-archiving a project. @@ -1118,7 +1216,7 @@ type UnarchiveProjectRequest struct { func (x *UnarchiveProjectRequest) Reset() { *x = UnarchiveProjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[20] + mi := &file_determined_api_v1_project_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1131,7 +1229,7 @@ func (x *UnarchiveProjectRequest) String() string { func (*UnarchiveProjectRequest) ProtoMessage() {} func (x *UnarchiveProjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[20] + mi := &file_determined_api_v1_project_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1144,7 +1242,7 @@ func (x *UnarchiveProjectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UnarchiveProjectRequest.ProtoReflect.Descriptor instead. func (*UnarchiveProjectRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{20} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{22} } func (x *UnarchiveProjectRequest) GetId() int32 { @@ -1164,7 +1262,7 @@ type UnarchiveProjectResponse struct { func (x *UnarchiveProjectResponse) Reset() { *x = UnarchiveProjectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[21] + mi := &file_determined_api_v1_project_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1177,7 +1275,7 @@ func (x *UnarchiveProjectResponse) String() string { func (*UnarchiveProjectResponse) ProtoMessage() {} func (x *UnarchiveProjectResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[21] + mi := &file_determined_api_v1_project_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1190,7 +1288,7 @@ func (x *UnarchiveProjectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UnarchiveProjectResponse.ProtoReflect.Descriptor instead. func (*UnarchiveProjectResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{21} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{23} } // Get projects based on user activity. @@ -1206,7 +1304,7 @@ type GetProjectsByUserActivityRequest struct { func (x *GetProjectsByUserActivityRequest) Reset() { *x = GetProjectsByUserActivityRequest{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[22] + mi := &file_determined_api_v1_project_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1219,7 +1317,7 @@ func (x *GetProjectsByUserActivityRequest) String() string { func (*GetProjectsByUserActivityRequest) ProtoMessage() {} func (x *GetProjectsByUserActivityRequest) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[22] + mi := &file_determined_api_v1_project_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1232,7 +1330,7 @@ func (x *GetProjectsByUserActivityRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetProjectsByUserActivityRequest.ProtoReflect.Descriptor instead. func (*GetProjectsByUserActivityRequest) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{22} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{24} } func (x *GetProjectsByUserActivityRequest) GetLimit() int32 { @@ -1255,7 +1353,7 @@ type GetProjectsByUserActivityResponse struct { func (x *GetProjectsByUserActivityResponse) Reset() { *x = GetProjectsByUserActivityResponse{} if protoimpl.UnsafeEnabled { - mi := &file_determined_api_v1_project_proto_msgTypes[23] + mi := &file_determined_api_v1_project_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1268,7 +1366,7 @@ func (x *GetProjectsByUserActivityResponse) String() string { func (*GetProjectsByUserActivityResponse) ProtoMessage() {} func (x *GetProjectsByUserActivityResponse) ProtoReflect() protoreflect.Message { - mi := &file_determined_api_v1_project_proto_msgTypes[23] + mi := &file_determined_api_v1_project_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1281,7 +1379,7 @@ func (x *GetProjectsByUserActivityResponse) ProtoReflect() protoreflect.Message // Deprecated: Use GetProjectsByUserActivityResponse.ProtoReflect.Descriptor instead. func (*GetProjectsByUserActivityResponse) Descriptor() ([]byte, []int) { - return file_determined_api_v1_project_proto_rawDescGZIP(), []int{23} + return file_determined_api_v1_project_proto_rawDescGZIP(), []int{25} } func (x *GetProjectsByUserActivityResponse) GetProjects() []*projectv1.Project { @@ -1311,265 +1409,152 @@ var file_determined_api_v1_project_proto_rawDesc = []byte{ 0x1e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, - 0x01, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x87, 0x01, 0x0a, 0x18, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x3a, 0x0a, 0x92, 0x41, 0x07, 0x0a, 0x05, 0xd2, - 0x01, 0x02, 0x69, 0x64, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x22, 0x72, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3e, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, - 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, - 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x04, 0x22, 0x42, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x3a, - 0x0a, 0x92, 0x41, 0x07, 0x0a, 0x05, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x22, 0x73, 0x0a, 0x25, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, - 0x73, 0x3a, 0x0d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0xd2, 0x01, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, - 0x22, 0x8a, 0x01, 0x0a, 0x12, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 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, 0x21, 0x0a, - 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, - 0x3a, 0x1b, 0x92, 0x41, 0x18, 0x0a, 0x16, 0xd2, 0x01, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0xd2, 0x01, - 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x22, 0x60, 0x0a, - 0x13, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x0f, - 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, - 0x82, 0x01, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x6e, 0x6f, 0x74, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x3a, 0x19, 0x92, 0x41, 0x16, 0x0a, 0x14, - 0xd2, 0x01, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x69, 0x64, 0x22, 0x5a, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, - 0x0a, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, - 0x73, 0x3a, 0x0d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0xd2, 0x01, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, - 0x22, 0x86, 0x01, 0x0a, 0x16, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, - 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x6e, - 0x6f, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x1d, - 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x3a, 0x1a, 0x92, - 0x41, 0x17, 0x0a, 0x15, 0xd2, 0x01, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0xd2, 0x01, 0x0a, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x22, 0x5b, 0x0a, 0x17, 0x50, 0x75, 0x74, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, - 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, - 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x3a, 0x0d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0xd2, 0x01, - 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x22, 0x7a, 0x0a, 0x13, 0x50, 0x61, 0x74, 0x63, 0x68, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, - 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x01, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x37, 0x0a, 0x16, 0x47, 0x65, 0x74, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x3a, 0x0b, 0x92, 0x41, 0x08, 0x0a, 0x06, 0xd2, 0x01, 0x03, 0x6b, + 0x65, 0x79, 0x22, 0x64, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x42, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, + 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x14, 0x92, 0x41, - 0x11, 0x0a, 0x0f, 0xd2, 0x01, 0x02, 0x69, 0x64, 0xd2, 0x01, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x22, 0x61, 0x0a, 0x14, 0x50, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x64, 0x65, - 0x01, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x36, 0x0a, 0x18, 0x47, 0x65, 0x74, + 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, + 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x87, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x02, 0x69, 0x64, 0x3a, 0x0a, 0x92, 0x41, 0x07, 0x0a, 0x05, 0xd2, 0x01, 0x02, 0x69, - 0x64, 0x22, 0x72, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, - 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, - 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x3a, 0x0f, - 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x4a, - 0x04, 0x08, 0x01, 0x10, 0x04, 0x22, 0x42, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x3a, 0x0a, 0x92, - 0x41, 0x07, 0x0a, 0x05, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x22, 0x73, 0x0a, 0x25, 0x47, 0x65, 0x74, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x3a, - 0x0d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0xd2, 0x01, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x22, 0xa9, - 0x01, 0x0a, 0x12, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 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, 0x21, 0x0a, 0x0c, 0x77, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x15, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x88, 0x01, 0x01, 0x3a, 0x1b, 0x92, 0x41, 0x18, 0x0a, 0x16, 0xd2, 0x01, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0xd2, 0x01, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x60, 0x0a, 0x13, 0x50, 0x6f, - 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x38, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x0f, 0x92, 0x41, 0x0c, - 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x82, 0x01, 0x0a, - 0x15, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, - 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x74, - 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x3a, 0x19, 0x92, 0x41, 0x16, 0x0a, 0x14, 0xd2, 0x01, 0x04, - 0x6e, 0x6f, 0x74, 0x65, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, - 0x64, 0x22, 0x5a, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, - 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x05, 0x6e, - 0x6f, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x3a, 0x0d, - 0x92, 0x41, 0x0a, 0x0a, 0x08, 0xd2, 0x01, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x22, 0x86, 0x01, - 0x0a, 0x16, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x6e, 0x6f, 0x74, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x3a, 0x1a, 0x92, 0x41, 0x17, 0x0a, - 0x15, 0xd2, 0x01, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x22, 0x5b, 0x0a, 0x17, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x31, 0x0a, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x05, 0x6e, - 0x6f, 0x74, 0x65, 0x73, 0x3a, 0x0d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0xd2, 0x01, 0x05, 0x6e, 0x6f, - 0x74, 0x65, 0x73, 0x22, 0x7a, 0x0a, 0x13, 0x50, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x64, 0x65, + 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x3a, 0x0a, 0x92, 0x41, 0x07, 0x0a, 0x05, 0xd2, 0x01, + 0x02, 0x69, 0x64, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x22, 0x72, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3e, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x3a, + 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, + 0x4a, 0x04, 0x08, 0x01, 0x10, 0x04, 0x22, 0x42, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x3a, 0x0a, + 0x92, 0x41, 0x07, 0x0a, 0x05, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x22, 0x73, 0x0a, 0x25, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x73, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, + 0x3a, 0x0d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0xd2, 0x01, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x22, + 0xa9, 0x01, 0x0a, 0x12, 0x50, 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 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, 0x21, 0x0a, 0x0c, + 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, + 0x15, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x88, 0x01, 0x01, 0x3a, 0x1b, 0x92, 0x41, 0x18, 0x0a, 0x16, 0xd2, 0x01, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0xd2, 0x01, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x60, 0x0a, 0x13, 0x50, + 0x6f, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, + 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x0f, 0x92, 0x41, + 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x82, 0x01, + 0x0a, 0x15, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, + 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x3a, 0x19, 0x92, 0x41, 0x16, 0x0a, 0x14, 0xd2, 0x01, + 0x04, 0x6e, 0x6f, 0x74, 0x65, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x69, 0x64, 0x22, 0x5a, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x05, + 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x32, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x3a, 0x0a, 0x92, - 0x41, 0x07, 0x0a, 0x05, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x22, 0x48, 0x0a, 0x15, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x3a, 0x11, 0x92, 0x41, 0x0e, 0x0a, 0x0c, 0xd2, 0x01, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x64, 0x22, 0x9c, 0x01, 0x0a, 0x12, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x64, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x49, 0x64, 0x3a, 0x2d, 0x92, 0x41, 0x2a, 0x0a, 0x28, 0xd2, 0x01, 0x18, 0x64, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x69, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x0a, 0x15, 0x41, 0x72, 0x63, - 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, - 0x69, 0x64, 0x3a, 0x0a, 0x92, 0x41, 0x07, 0x0a, 0x05, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x22, 0x18, - 0x0a, 0x16, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x0a, 0x17, 0x55, 0x6e, 0x61, 0x72, - 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x02, 0x69, 0x64, 0x3a, 0x0a, 0x92, 0x41, 0x07, 0x0a, 0x05, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x22, - 0x1a, 0x0a, 0x18, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x0a, 0x20, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x5f, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x64, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2a, 0x56, 0x0a, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x19, 0x0a, 0x15, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, - 0x50, 0x45, 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x41, - 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x10, 0x02, 0x42, 0x35, - 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2d, 0x61, 0x69, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, - 0x61, 0x70, 0x69, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x14, 0x92, 0x41, 0x11, 0x0a, 0x0f, - 0xd2, 0x01, 0x02, 0x69, 0x64, 0xd2, 0x01, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, - 0x61, 0x0a, 0x14, 0x50, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x3a, + 0x0d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0xd2, 0x01, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x22, 0x86, + 0x01, 0x0a, 0x16, 0x50, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x6e, 0x6f, 0x74, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x22, 0x32, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x3a, 0x0a, 0x92, 0x41, 0x07, 0x0a, - 0x05, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x22, 0x48, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x3a, 0x11, 0x92, - 0x41, 0x0e, 0x0a, 0x0c, 0xd2, 0x01, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x22, 0x9c, 0x01, 0x0a, 0x12, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, - 0x3a, 0x2d, 0x92, 0x41, 0x2a, 0x0a, 0x28, 0xd2, 0x01, 0x18, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x22, - 0x15, 0x0a, 0x13, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x0a, 0x15, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, - 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x3a, - 0x0a, 0x92, 0x41, 0x07, 0x0a, 0x05, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x41, - 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x0a, 0x17, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, + 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x3a, 0x1a, 0x92, 0x41, 0x17, + 0x0a, 0x15, 0xd2, 0x01, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x22, 0x5b, 0x0a, 0x17, 0x50, 0x75, 0x74, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x31, 0x0a, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x05, + 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x3a, 0x0d, 0x92, 0x41, 0x0a, 0x0a, 0x08, 0xd2, 0x01, 0x05, 0x6e, + 0x6f, 0x74, 0x65, 0x73, 0x22, 0x7a, 0x0a, 0x13, 0x50, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x64, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x14, 0x92, 0x41, 0x11, 0x0a, + 0x0f, 0xd2, 0x01, 0x02, 0x69, 0x64, 0xd2, 0x01, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x22, 0x61, 0x0a, 0x14, 0x50, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x64, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x3a, 0x0f, 0x92, 0x41, 0x0c, 0x0a, 0x0a, 0xd2, 0x01, 0x07, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x22, 0x32, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x3a, 0x0a, 0x92, 0x41, 0x07, + 0x0a, 0x05, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x22, 0x48, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x3a, 0x11, + 0x92, 0x41, 0x0e, 0x0a, 0x0c, 0xd2, 0x01, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, + 0x64, 0x22, 0x9c, 0x01, 0x0a, 0x12, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x64, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, + 0x64, 0x3a, 0x2d, 0x92, 0x41, 0x2a, 0x0a, 0x28, 0xd2, 0x01, 0x18, 0x64, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, + 0x22, 0x15, 0x0a, 0x13, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x0a, 0x15, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, - 0x3a, 0x0a, 0x92, 0x41, 0x07, 0x0a, 0x05, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x22, 0x1a, 0x0a, 0x18, - 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x22, 0x5f, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x64, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2d, 0x61, 0x69, 0x2f, - 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x3a, 0x0a, 0x92, 0x41, 0x07, 0x0a, 0x05, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x22, 0x18, 0x0a, 0x16, + 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x0a, 0x17, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, + 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, + 0x64, 0x3a, 0x0a, 0x92, 0x41, 0x07, 0x0a, 0x05, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x22, 0x1a, 0x0a, + 0x18, 0x55, 0x6e, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x0a, 0x20, 0x47, 0x65, 0x74, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, + 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x22, 0x5f, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x64, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x2a, 0x56, 0x0a, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, + 0x15, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x50, 0x45, + 0x52, 0x49, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x41, 0x42, 0x4c, + 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x55, 0x4e, 0x10, 0x02, 0x42, 0x35, 0x5a, 0x33, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x2d, 0x61, 0x69, 0x2f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, + 0x69, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1585,57 +1570,60 @@ func file_determined_api_v1_project_proto_rawDescGZIP() []byte { } var file_determined_api_v1_project_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_determined_api_v1_project_proto_msgTypes = make([]protoimpl.MessageInfo, 24) +var file_determined_api_v1_project_proto_msgTypes = make([]protoimpl.MessageInfo, 26) var file_determined_api_v1_project_proto_goTypes = []interface{}{ (TableType)(0), // 0: determined.api.v1.TableType (*GetProjectRequest)(nil), // 1: determined.api.v1.GetProjectRequest (*GetProjectResponse)(nil), // 2: determined.api.v1.GetProjectResponse - (*GetProjectColumnsRequest)(nil), // 3: determined.api.v1.GetProjectColumnsRequest - (*GetProjectColumnsResponse)(nil), // 4: determined.api.v1.GetProjectColumnsResponse - (*GetProjectNumericMetricsRangeRequest)(nil), // 5: determined.api.v1.GetProjectNumericMetricsRangeRequest - (*GetProjectNumericMetricsRangeResponse)(nil), // 6: determined.api.v1.GetProjectNumericMetricsRangeResponse - (*PostProjectRequest)(nil), // 7: determined.api.v1.PostProjectRequest - (*PostProjectResponse)(nil), // 8: determined.api.v1.PostProjectResponse - (*AddProjectNoteRequest)(nil), // 9: determined.api.v1.AddProjectNoteRequest - (*AddProjectNoteResponse)(nil), // 10: determined.api.v1.AddProjectNoteResponse - (*PutProjectNotesRequest)(nil), // 11: determined.api.v1.PutProjectNotesRequest - (*PutProjectNotesResponse)(nil), // 12: determined.api.v1.PutProjectNotesResponse - (*PatchProjectRequest)(nil), // 13: determined.api.v1.PatchProjectRequest - (*PatchProjectResponse)(nil), // 14: determined.api.v1.PatchProjectResponse - (*DeleteProjectRequest)(nil), // 15: determined.api.v1.DeleteProjectRequest - (*DeleteProjectResponse)(nil), // 16: determined.api.v1.DeleteProjectResponse - (*MoveProjectRequest)(nil), // 17: determined.api.v1.MoveProjectRequest - (*MoveProjectResponse)(nil), // 18: determined.api.v1.MoveProjectResponse - (*ArchiveProjectRequest)(nil), // 19: determined.api.v1.ArchiveProjectRequest - (*ArchiveProjectResponse)(nil), // 20: determined.api.v1.ArchiveProjectResponse - (*UnarchiveProjectRequest)(nil), // 21: determined.api.v1.UnarchiveProjectRequest - (*UnarchiveProjectResponse)(nil), // 22: determined.api.v1.UnarchiveProjectResponse - (*GetProjectsByUserActivityRequest)(nil), // 23: determined.api.v1.GetProjectsByUserActivityRequest - (*GetProjectsByUserActivityResponse)(nil), // 24: determined.api.v1.GetProjectsByUserActivityResponse - (*projectv1.Project)(nil), // 25: determined.project.v1.Project - (*projectv1.ProjectColumn)(nil), // 26: determined.project.v1.ProjectColumn - (*projectv1.MetricsRange)(nil), // 27: determined.project.v1.MetricsRange - (*projectv1.Note)(nil), // 28: determined.project.v1.Note - (*projectv1.PatchProject)(nil), // 29: determined.project.v1.PatchProject + (*GetProjectByKeyRequest)(nil), // 3: determined.api.v1.GetProjectByKeyRequest + (*GetProjectByKeyResponse)(nil), // 4: determined.api.v1.GetProjectByKeyResponse + (*GetProjectColumnsRequest)(nil), // 5: determined.api.v1.GetProjectColumnsRequest + (*GetProjectColumnsResponse)(nil), // 6: determined.api.v1.GetProjectColumnsResponse + (*GetProjectNumericMetricsRangeRequest)(nil), // 7: determined.api.v1.GetProjectNumericMetricsRangeRequest + (*GetProjectNumericMetricsRangeResponse)(nil), // 8: determined.api.v1.GetProjectNumericMetricsRangeResponse + (*PostProjectRequest)(nil), // 9: determined.api.v1.PostProjectRequest + (*PostProjectResponse)(nil), // 10: determined.api.v1.PostProjectResponse + (*AddProjectNoteRequest)(nil), // 11: determined.api.v1.AddProjectNoteRequest + (*AddProjectNoteResponse)(nil), // 12: determined.api.v1.AddProjectNoteResponse + (*PutProjectNotesRequest)(nil), // 13: determined.api.v1.PutProjectNotesRequest + (*PutProjectNotesResponse)(nil), // 14: determined.api.v1.PutProjectNotesResponse + (*PatchProjectRequest)(nil), // 15: determined.api.v1.PatchProjectRequest + (*PatchProjectResponse)(nil), // 16: determined.api.v1.PatchProjectResponse + (*DeleteProjectRequest)(nil), // 17: determined.api.v1.DeleteProjectRequest + (*DeleteProjectResponse)(nil), // 18: determined.api.v1.DeleteProjectResponse + (*MoveProjectRequest)(nil), // 19: determined.api.v1.MoveProjectRequest + (*MoveProjectResponse)(nil), // 20: determined.api.v1.MoveProjectResponse + (*ArchiveProjectRequest)(nil), // 21: determined.api.v1.ArchiveProjectRequest + (*ArchiveProjectResponse)(nil), // 22: determined.api.v1.ArchiveProjectResponse + (*UnarchiveProjectRequest)(nil), // 23: determined.api.v1.UnarchiveProjectRequest + (*UnarchiveProjectResponse)(nil), // 24: determined.api.v1.UnarchiveProjectResponse + (*GetProjectsByUserActivityRequest)(nil), // 25: determined.api.v1.GetProjectsByUserActivityRequest + (*GetProjectsByUserActivityResponse)(nil), // 26: determined.api.v1.GetProjectsByUserActivityResponse + (*projectv1.Project)(nil), // 27: determined.project.v1.Project + (*projectv1.ProjectColumn)(nil), // 28: determined.project.v1.ProjectColumn + (*projectv1.MetricsRange)(nil), // 29: determined.project.v1.MetricsRange + (*projectv1.Note)(nil), // 30: determined.project.v1.Note + (*projectv1.PatchProject)(nil), // 31: determined.project.v1.PatchProject } var file_determined_api_v1_project_proto_depIdxs = []int32{ - 25, // 0: determined.api.v1.GetProjectResponse.project:type_name -> determined.project.v1.Project - 0, // 1: determined.api.v1.GetProjectColumnsRequest.table_type:type_name -> determined.api.v1.TableType - 26, // 2: determined.api.v1.GetProjectColumnsResponse.columns:type_name -> determined.project.v1.ProjectColumn - 27, // 3: determined.api.v1.GetProjectNumericMetricsRangeResponse.ranges:type_name -> determined.project.v1.MetricsRange - 25, // 4: determined.api.v1.PostProjectResponse.project:type_name -> determined.project.v1.Project - 28, // 5: determined.api.v1.AddProjectNoteRequest.note:type_name -> determined.project.v1.Note - 28, // 6: determined.api.v1.AddProjectNoteResponse.notes:type_name -> determined.project.v1.Note - 28, // 7: determined.api.v1.PutProjectNotesRequest.notes:type_name -> determined.project.v1.Note - 28, // 8: determined.api.v1.PutProjectNotesResponse.notes:type_name -> determined.project.v1.Note - 29, // 9: determined.api.v1.PatchProjectRequest.project:type_name -> determined.project.v1.PatchProject - 25, // 10: determined.api.v1.PatchProjectResponse.project:type_name -> determined.project.v1.Project - 25, // 11: determined.api.v1.GetProjectsByUserActivityResponse.projects:type_name -> determined.project.v1.Project - 12, // [12:12] is the sub-list for method output_type - 12, // [12:12] is the sub-list for method input_type - 12, // [12:12] is the sub-list for extension type_name - 12, // [12:12] is the sub-list for extension extendee - 0, // [0:12] is the sub-list for field type_name + 27, // 0: determined.api.v1.GetProjectResponse.project:type_name -> determined.project.v1.Project + 27, // 1: determined.api.v1.GetProjectByKeyResponse.project:type_name -> determined.project.v1.Project + 0, // 2: determined.api.v1.GetProjectColumnsRequest.table_type:type_name -> determined.api.v1.TableType + 28, // 3: determined.api.v1.GetProjectColumnsResponse.columns:type_name -> determined.project.v1.ProjectColumn + 29, // 4: determined.api.v1.GetProjectNumericMetricsRangeResponse.ranges:type_name -> determined.project.v1.MetricsRange + 27, // 5: determined.api.v1.PostProjectResponse.project:type_name -> determined.project.v1.Project + 30, // 6: determined.api.v1.AddProjectNoteRequest.note:type_name -> determined.project.v1.Note + 30, // 7: determined.api.v1.AddProjectNoteResponse.notes:type_name -> determined.project.v1.Note + 30, // 8: determined.api.v1.PutProjectNotesRequest.notes:type_name -> determined.project.v1.Note + 30, // 9: determined.api.v1.PutProjectNotesResponse.notes:type_name -> determined.project.v1.Note + 31, // 10: determined.api.v1.PatchProjectRequest.project:type_name -> determined.project.v1.PatchProject + 27, // 11: determined.api.v1.PatchProjectResponse.project:type_name -> determined.project.v1.Project + 27, // 12: determined.api.v1.GetProjectsByUserActivityResponse.projects:type_name -> determined.project.v1.Project + 13, // [13:13] is the sub-list for method output_type + 13, // [13:13] is the sub-list for method input_type + 13, // [13:13] is the sub-list for extension type_name + 13, // [13:13] is the sub-list for extension extendee + 0, // [0:13] is the sub-list for field type_name } func init() { file_determined_api_v1_project_proto_init() } @@ -1669,7 +1657,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProjectColumnsRequest); i { + switch v := v.(*GetProjectByKeyRequest); i { case 0: return &v.state case 1: @@ -1681,7 +1669,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProjectColumnsResponse); i { + switch v := v.(*GetProjectByKeyResponse); i { case 0: return &v.state case 1: @@ -1693,7 +1681,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProjectNumericMetricsRangeRequest); i { + switch v := v.(*GetProjectColumnsRequest); i { case 0: return &v.state case 1: @@ -1705,7 +1693,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProjectNumericMetricsRangeResponse); i { + switch v := v.(*GetProjectColumnsResponse); i { case 0: return &v.state case 1: @@ -1717,7 +1705,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostProjectRequest); i { + switch v := v.(*GetProjectNumericMetricsRangeRequest); i { case 0: return &v.state case 1: @@ -1729,7 +1717,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostProjectResponse); i { + switch v := v.(*GetProjectNumericMetricsRangeResponse); i { case 0: return &v.state case 1: @@ -1741,7 +1729,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddProjectNoteRequest); i { + switch v := v.(*PostProjectRequest); i { case 0: return &v.state case 1: @@ -1753,7 +1741,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddProjectNoteResponse); i { + switch v := v.(*PostProjectResponse); i { case 0: return &v.state case 1: @@ -1765,7 +1753,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutProjectNotesRequest); i { + switch v := v.(*AddProjectNoteRequest); i { case 0: return &v.state case 1: @@ -1777,7 +1765,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutProjectNotesResponse); i { + switch v := v.(*AddProjectNoteResponse); i { case 0: return &v.state case 1: @@ -1789,7 +1777,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PatchProjectRequest); i { + switch v := v.(*PutProjectNotesRequest); i { case 0: return &v.state case 1: @@ -1801,7 +1789,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PatchProjectResponse); i { + switch v := v.(*PutProjectNotesResponse); i { case 0: return &v.state case 1: @@ -1813,7 +1801,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteProjectRequest); i { + switch v := v.(*PatchProjectRequest); i { case 0: return &v.state case 1: @@ -1825,7 +1813,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteProjectResponse); i { + switch v := v.(*PatchProjectResponse); i { case 0: return &v.state case 1: @@ -1837,7 +1825,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MoveProjectRequest); i { + switch v := v.(*DeleteProjectRequest); i { case 0: return &v.state case 1: @@ -1849,7 +1837,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MoveProjectResponse); i { + switch v := v.(*DeleteProjectResponse); i { case 0: return &v.state case 1: @@ -1861,7 +1849,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ArchiveProjectRequest); i { + switch v := v.(*MoveProjectRequest); i { case 0: return &v.state case 1: @@ -1873,7 +1861,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ArchiveProjectResponse); i { + switch v := v.(*MoveProjectResponse); i { case 0: return &v.state case 1: @@ -1885,7 +1873,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnarchiveProjectRequest); i { + switch v := v.(*ArchiveProjectRequest); i { case 0: return &v.state case 1: @@ -1897,7 +1885,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnarchiveProjectResponse); i { + switch v := v.(*ArchiveProjectResponse); i { case 0: return &v.state case 1: @@ -1909,7 +1897,7 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProjectsByUserActivityRequest); i { + switch v := v.(*UnarchiveProjectRequest); i { case 0: return &v.state case 1: @@ -1921,6 +1909,30 @@ func file_determined_api_v1_project_proto_init() { } } file_determined_api_v1_project_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UnarchiveProjectResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_determined_api_v1_project_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetProjectsByUserActivityRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_determined_api_v1_project_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetProjectsByUserActivityResponse); i { case 0: return &v.state @@ -1933,15 +1945,15 @@ func file_determined_api_v1_project_proto_init() { } } } - file_determined_api_v1_project_proto_msgTypes[2].OneofWrappers = []interface{}{} - file_determined_api_v1_project_proto_msgTypes[6].OneofWrappers = []interface{}{} + file_determined_api_v1_project_proto_msgTypes[4].OneofWrappers = []interface{}{} + file_determined_api_v1_project_proto_msgTypes[8].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_determined_api_v1_project_proto_rawDesc, NumEnums: 1, - NumMessages: 24, + NumMessages: 26, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/pkg/projectv1/project.pb.go b/proto/pkg/projectv1/project.pb.go index ad5c73918959..c5c6215f3035 100644 --- a/proto/pkg/projectv1/project.pb.go +++ b/proto/pkg/projectv1/project.pb.go @@ -481,6 +481,8 @@ type PatchProject struct { Name *wrappers.StringValue `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // The new description for the project. Description *wrappers.StringValue `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + // The new key for the project. + Key *wrappers.StringValue `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"` } func (x *PatchProject) Reset() { @@ -529,6 +531,13 @@ func (x *PatchProject) GetDescription() *wrappers.StringValue { return nil } +func (x *PatchProject) GetKey() *wrappers.StringValue { + if x != nil { + return x.Key + } + return nil +} + // MetricsRange represents the range of a metrics. Range is a in the format of // [min, max]. type MetricsRange struct { @@ -682,7 +691,7 @@ var file_determined_project_v1_project_proto_rawDesc = []byte{ 0xd2, 0x01, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0xd2, 0x01, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0xd2, 0x01, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x03, 0x6b, - 0x65, 0x79, 0x22, 0x80, 0x01, 0x0a, 0x0c, 0x50, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x79, 0x22, 0xb0, 0x01, 0x0a, 0x0c, 0x50, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, @@ -690,7 +699,10 @@ var file_determined_project_v1_project_proto_rawDesc = []byte{ 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x77, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x77, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, @@ -762,11 +774,12 @@ var file_determined_project_v1_project_proto_depIdxs = []int32{ 8, // 4: determined.project.v1.Project.state:type_name -> determined.workspace.v1.WorkspaceState 9, // 5: determined.project.v1.PatchProject.name:type_name -> google.protobuf.StringValue 9, // 6: determined.project.v1.PatchProject.description:type_name -> google.protobuf.StringValue - 7, // [7:7] is the sub-list for method output_type - 7, // [7:7] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name + 9, // 7: determined.project.v1.PatchProject.key:type_name -> google.protobuf.StringValue + 8, // [8:8] is the sub-list for method output_type + 8, // [8:8] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name } func init() { file_determined_project_v1_project_proto_init() } diff --git a/proto/src/determined/api/v1/api.proto b/proto/src/determined/api/v1/api.proto index 7013f384e30a..43ac1e4d665e 100644 --- a/proto/src/determined/api/v1/api.proto +++ b/proto/src/determined/api/v1/api.proto @@ -2074,6 +2074,16 @@ service Determined { tags: "Projects" }; } + // Get the request project by key. + rpc GetProjectByKey(GetProjectByKeyRequest) + returns (GetProjectByKeyResponse) { + option (google.api.http) = { + get: "/api/v1/projects/key/{key}" + }; + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { + tags: "Projects" + }; + } // Get a list of columns for experiment list table. rpc GetProjectColumns(GetProjectColumnsRequest) returns (GetProjectColumnsResponse) { diff --git a/proto/src/determined/api/v1/project.proto b/proto/src/determined/api/v1/project.proto index 1024b024748e..94e9f9982aab 100644 --- a/proto/src/determined/api/v1/project.proto +++ b/proto/src/determined/api/v1/project.proto @@ -26,6 +26,26 @@ message GetProjectResponse { determined.project.v1.Project project = 1; } +// Get the requested project by key. +message GetProjectByKeyRequest { + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + json_schema: { required: [ "key" ] } + }; + + // The key of the project. + string key = 1; +} + +// Response to GetProjectByKeyRequest. +message GetProjectByKeyResponse { + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + json_schema: { required: [ "project" ] } + }; + + // The project requested. + determined.project.v1.Project project = 1; +} + // Project Table type. enum TableType { // Unspecified table type. diff --git a/proto/src/determined/project/v1/project.proto b/proto/src/determined/project/v1/project.proto index b2cf2acd3c1c..35cb1e821e6d 100644 --- a/proto/src/determined/project/v1/project.proto +++ b/proto/src/determined/project/v1/project.proto @@ -130,6 +130,8 @@ message PatchProject { google.protobuf.StringValue name = 1; // The new description for the project. google.protobuf.StringValue description = 2; + // The new key for the project. + google.protobuf.StringValue key = 3; } // MetricsRange represents the range of a metrics. Range is a in the format of diff --git a/webui/react/src/services/api-ts-sdk/api.ts b/webui/react/src/services/api-ts-sdk/api.ts index 6f790a2fb8c9..27cd082c9783 100644 --- a/webui/react/src/services/api-ts-sdk/api.ts +++ b/webui/react/src/services/api-ts-sdk/api.ts @@ -4446,6 +4446,19 @@ export interface V1GetPermissionsSummaryResponse { */ assignments: Array; } +/** + * Response to GetProjectByKeyRequest. + * @export + * @interface V1GetProjectByKeyResponse + */ +export interface V1GetProjectByKeyResponse { + /** + * The project requested. + * @type {V1Project} + * @memberof V1GetProjectByKeyResponse + */ + project: V1Project; +} /** * * @export @@ -7230,6 +7243,12 @@ export interface V1PatchProject { * @memberof V1PatchProject */ description?: string; + /** + * The new key for the project. + * @type {string} + * @memberof V1PatchProject + */ + key?: string; } /** * Response to PatchProjectRequest. @@ -27666,6 +27685,42 @@ export const ProjectsApiFetchParamCreator = function (configuration?: Configurat options: localVarRequestOptions, }; }, + /** + * + * @summary Get the request project by key. + * @param {string} key The key of the project. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + getProjectByKey(key: string, options: any = {}): FetchArgs { + // verify required parameter 'key' is not null or undefined + if (key === null || key === undefined) { + throw new RequiredError('key','Required parameter key was null or undefined when calling getProjectByKey.'); + } + const localVarPath = `/api/v1/projects/key/{key}` + .replace(`{${"key"}}`, encodeURIComponent(String(key))); + const localVarUrlObj = new URL(localVarPath, BASE_PATH); + const localVarRequestOptions = { method: 'GET', ...options }; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication BearerToken required + if (configuration && configuration.apiKey) { + const localVarApiKeyValue = typeof configuration.apiKey === 'function' + ? configuration.apiKey("Authorization") + : configuration.apiKey; + localVarHeaderParameter["Authorization"] = localVarApiKeyValue; + } + + objToSearchParams(localVarQueryParameter, localVarUrlObj.searchParams); + objToSearchParams(options.query || {}, localVarUrlObj.searchParams); + localVarRequestOptions.headers = { ...localVarHeaderParameter, ...options.headers }; + + return { + url: `${localVarUrlObj.pathname}${localVarUrlObj.search}`, + options: localVarRequestOptions, + }; + }, /** * * @summary Get a list of columns for experiment list table. @@ -28076,6 +28131,25 @@ export const ProjectsApiFp = function (configuration?: Configuration) { }); }; }, + /** + * + * @summary Get the request project by key. + * @param {string} key The key of the project. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + getProjectByKey(key: string, options?: any): (fetch?: FetchAPI, basePath?: string) => Promise { + const localVarFetchArgs = ProjectsApiFetchParamCreator(configuration).getProjectByKey(key, options); + return (fetch: FetchAPI = window.fetch, basePath: string = BASE_PATH) => { + return fetch(basePath + localVarFetchArgs.url, localVarFetchArgs.options).then((response) => { + if (response.status >= 200 && response.status < 300) { + return response.json(); + } else { + throw response; + } + }); + }; + }, /** * * @summary Get a list of columns for experiment list table. @@ -28283,6 +28357,16 @@ export const ProjectsApiFactory = function (configuration?: Configuration, fetch getProject(id: number, options?: any) { return ProjectsApiFp(configuration).getProject(id, options)(fetch, basePath); }, + /** + * + * @summary Get the request project by key. + * @param {string} key The key of the project. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + getProjectByKey(key: string, options?: any) { + return ProjectsApiFp(configuration).getProjectByKey(key, options)(fetch, basePath); + }, /** * * @summary Get a list of columns for experiment list table. @@ -28427,6 +28511,18 @@ export class ProjectsApi extends BaseAPI { return ProjectsApiFp(this.configuration).getProject(id, options)(this.fetch, this.basePath) } + /** + * + * @summary Get the request project by key. + * @param {string} key The key of the project. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ProjectsApi + */ + public getProjectByKey(key: string, options?: any) { + return ProjectsApiFp(this.configuration).getProjectByKey(key, options)(this.fetch, this.basePath) + } + /** * * @summary Get a list of columns for experiment list table.