From 5aeae4753661850ca8d3ccb48cc5af57b96fc19b Mon Sep 17 00:00:00 2001 From: Rahmat Hidayat Date: Wed, 8 May 2024 15:29:09 +0700 Subject: [PATCH] feat(comment): introduce appeal comments (#127) * feat(comment): introduce appeal comments * fix: check appeal existance on list comments * test: add repository and service tests * test: add test for comment handler * chore: update proton * chore: update ctx with cancel * chore: update dependancy to appeal service * chore: use appeal service struct and update tests * refactor: use centralized interface and mocks * refactor: put default order by in a constant * feat: introduce parent type * chore: update proton commit * chore: update proton commit * chore: update proton commit * chore: update proton commit --------- Co-authored-by: Muhammad Idil Haq Amir --- Makefile | 2 +- api/handler/v1beta1/adapter.go | 22 + api/handler/v1beta1/comment.go | 68 + api/handler/v1beta1/comment_test.go | 249 ++ api/handler/v1beta1/grpc.go | 4 + api/handler/v1beta1/mocks/appealService.go | 98 + .../guardian/v1beta1/guardian.pb.go | 3491 +++++++++-------- .../guardian/v1beta1/guardian.pb.gw.go | 240 ++ .../guardian/v1beta1/guardian_grpc.pb.go | 72 + core/appeal/comment.go | 99 + core/appeal/comment_test.go | 142 + core/appeal/service.go | 4 + core/appeal/service_test.go | 17 +- core/comment/mocks/repository.go | 135 + core/comment/service.go | 84 + core/comment/service_test.go | 95 + domain/comment.go | 19 + domain/notifier.go | 2 + internal/server/services.go | 10 + internal/store/postgres/comment_repository.go | 57 + .../store/postgres/comment_repository_test.go | 145 + .../000019_create_comments_table.down.sql | 1 + .../000019_create_comments_table.up.sql | 21 + internal/store/postgres/model/comment.go | 55 + internal/store/postgres/utils.go | 20 + mocks/Notifier.go | 67 +- mocks/auditLogger.go | 80 + pkg/audit/audit.go | 7 + plugins/notifiers/slack/client.go | 1 + .../notifiers/slack/templates/NewComment.json | 9 + .../guardian/v1beta1/guardian.swagger.json | 126 + 31 files changed, 3899 insertions(+), 1543 deletions(-) create mode 100644 api/handler/v1beta1/comment.go create mode 100644 api/handler/v1beta1/comment_test.go create mode 100644 core/appeal/comment.go create mode 100644 core/appeal/comment_test.go create mode 100644 core/comment/mocks/repository.go create mode 100644 core/comment/service.go create mode 100644 core/comment/service_test.go create mode 100644 domain/comment.go create mode 100644 internal/store/postgres/comment_repository.go create mode 100644 internal/store/postgres/comment_repository_test.go create mode 100644 internal/store/postgres/migrations/000019_create_comments_table.down.sql create mode 100644 internal/store/postgres/migrations/000019_create_comments_table.up.sql create mode 100644 internal/store/postgres/model/comment.go create mode 100644 mocks/auditLogger.go create mode 100644 pkg/audit/audit.go create mode 100644 plugins/notifiers/slack/templates/NewComment.json diff --git a/Makefile b/Makefile index 8527efe6c..d493a92b7 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ COMMIT := $(shell git rev-parse --short HEAD) TAG := "$(shell git rev-list --tags --max-count=1)" VERSION := "$(shell git describe --tags ${TAG})-next" BUILD_DIR=dist -PROTON_COMMIT := "8ded420b43b3498b3b0801959df841a8fd82ff0b" +PROTON_COMMIT := "6fdca7f234f339540c675cc6db64f2483a6f4db5" .PHONY: all build clean test tidy vet proto setup format generate diff --git a/api/handler/v1beta1/adapter.go b/api/handler/v1beta1/adapter.go index 14d9c2bed..b79ae4a57 100644 --- a/api/handler/v1beta1/adapter.go +++ b/api/handler/v1beta1/adapter.go @@ -902,6 +902,28 @@ func (a *adapter) ToActivityProto(activity *domain.Activity) (*guardianv1beta1.P return activityProto, nil } +func (a *adapter) ToCommentProto(c *domain.Comment) *guardianv1beta1.AppealComment { + if c == nil { + return nil + } + + commentProto := &guardianv1beta1.AppealComment{ + Id: c.ID, + AppealId: c.ParentID, + CreatedBy: c.CreatedBy, + Body: c.Body, + } + + if !c.CreatedAt.IsZero() { + commentProto.CreatedAt = timestamppb.New(c.CreatedAt) + } + if !c.UpdatedAt.IsZero() { + commentProto.UpdatedAt = timestamppb.New(c.UpdatedAt) + } + + return commentProto +} + func (a *adapter) fromConditionProto(c *guardianv1beta1.Condition) *domain.Condition { if c == nil { return nil diff --git a/api/handler/v1beta1/comment.go b/api/handler/v1beta1/comment.go new file mode 100644 index 000000000..efdaef621 --- /dev/null +++ b/api/handler/v1beta1/comment.go @@ -0,0 +1,68 @@ +package v1beta1 + +import ( + "context" + "errors" + + guardianv1beta1 "github.com/goto/guardian/api/proto/gotocompany/guardian/v1beta1" + "github.com/goto/guardian/core/appeal" + "github.com/goto/guardian/core/comment" + "github.com/goto/guardian/domain" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func (s *GRPCServer) ListAppealComments(ctx context.Context, req *guardianv1beta1.ListAppealCommentsRequest) (*guardianv1beta1.ListAppealCommentsResponse, error) { + comments, err := s.appealService.ListComments(ctx, domain.ListCommentsFilter{ + ParentID: req.GetAppealId(), + OrderBy: req.GetOrderBy(), + }) + if err != nil { + switch { + case errors.Is(err, appeal.ErrAppealNotFound): + return nil, status.Errorf(codes.NotFound, err.Error()) + default: + return nil, s.internalError(ctx, "failed to list comments: %s", err) + } + } + + commentProtos := []*guardianv1beta1.AppealComment{} + for _, c := range comments { + commentProtos = append(commentProtos, s.adapter.ToCommentProto(c)) + } + + return &guardianv1beta1.ListAppealCommentsResponse{ + Comments: commentProtos, + }, nil +} + +func (s *GRPCServer) CreateAppealComment(ctx context.Context, req *guardianv1beta1.CreateAppealCommentRequest) (*guardianv1beta1.CreateAppealCommentResponse, error) { + actor, err := s.getUser(ctx) + if err != nil { + return nil, status.Error(codes.Unauthenticated, err.Error()) + } + + c := &domain.Comment{ + ParentID: req.GetAppealId(), + Body: req.GetBody(), + CreatedBy: actor, + } + if err := s.appealService.CreateComment(ctx, c); err != nil { + switch { + case + errors.Is(err, comment.ErrEmptyCommentParentType), + errors.Is(err, comment.ErrEmptyCommentParentID), + errors.Is(err, comment.ErrEmptyCommentCreator), + errors.Is(err, comment.ErrEmptyCommentBody): + return nil, s.invalidArgument(ctx, err.Error()) + case errors.Is(err, appeal.ErrAppealNotFound): + return nil, status.Errorf(codes.NotFound, err.Error()) + default: + return nil, s.internalError(ctx, "failed to create comment: %s", err) + } + } + + return &guardianv1beta1.CreateAppealCommentResponse{ + Comment: s.adapter.ToCommentProto(c), + }, nil +} diff --git a/api/handler/v1beta1/comment_test.go b/api/handler/v1beta1/comment_test.go new file mode 100644 index 000000000..4a994496d --- /dev/null +++ b/api/handler/v1beta1/comment_test.go @@ -0,0 +1,249 @@ +package v1beta1_test + +import ( + "context" + "errors" + "time" + + "github.com/google/uuid" + guardianv1beta1 "github.com/goto/guardian/api/proto/gotocompany/guardian/v1beta1" + "github.com/goto/guardian/core/appeal" + "github.com/goto/guardian/core/comment" + "github.com/goto/guardian/domain" + "github.com/stretchr/testify/mock" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/timestamppb" +) + +func (s *GrpcHandlersSuite) TestListComments() { + s.Run("should return list of comments on success", func() { + s.setup() + timeNow := time.Now() + + appealID := uuid.New().String() + dummyComments := []*domain.Comment{ + { + ID: uuid.New().String(), + ParentID: appealID, + CreatedBy: "user1@example.com", + Body: "comment 1", + CreatedAt: timeNow, + UpdatedAt: timeNow, + }, + { + ID: uuid.New().String(), + ParentID: appealID, + CreatedBy: "user2@example.com", + Body: "comment 2", + CreatedAt: timeNow, + UpdatedAt: timeNow, + }, + } + expectedResponse := &guardianv1beta1.ListAppealCommentsResponse{ + Comments: []*guardianv1beta1.AppealComment{ + { + Id: dummyComments[0].ID, + AppealId: appealID, + CreatedBy: "user1@example.com", + Body: "comment 1", + CreatedAt: timestamppb.New(timeNow), + UpdatedAt: timestamppb.New(timeNow), + }, + { + Id: dummyComments[1].ID, + AppealId: appealID, + CreatedBy: "user2@example.com", + Body: "comment 2", + CreatedAt: timestamppb.New(timeNow), + UpdatedAt: timestamppb.New(timeNow), + }, + }, + } + expectedOrderBy := []string{"created_at:desc"} + + s.appealService.EXPECT(). + ListComments(mock.MatchedBy(func(ctx context.Context) bool { return true }), mock.AnythingOfType("domain.ListCommentsFilter")). + Return(dummyComments, nil). + Run(func(_a0 context.Context, filter domain.ListCommentsFilter) { + s.Equal(appealID, filter.ParentID) + s.Equal(expectedOrderBy, filter.OrderBy) + }) + defer s.appealService.AssertExpectations(s.T()) + + req := &guardianv1beta1.ListAppealCommentsRequest{ + AppealId: appealID, + OrderBy: expectedOrderBy, + } + res, err := s.grpcServer.ListAppealComments(context.Background(), req) + + s.NoError(err) + s.Equal(expectedResponse, res) + }) + + s.Run("should return error codes according to the service error", func() { + testCases := []struct { + name string + expecedError error + expectedGRPCCode codes.Code + }{ + { + name: "should return not found error when appeal not found", + expecedError: appeal.ErrAppealNotFound, + expectedGRPCCode: codes.NotFound, + }, + { + name: "should return internal error when service fails", + expecedError: errors.New("unexpected error"), + expectedGRPCCode: codes.Internal, + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + s.setup() + + appealID := uuid.New().String() + s.appealService.EXPECT(). + ListComments(mock.MatchedBy(func(ctx context.Context) bool { return true }), mock.AnythingOfType("domain.ListCommentsFilter")). + Return(nil, tc.expecedError) + defer s.appealService.AssertExpectations(s.T()) + + req := &guardianv1beta1.ListAppealCommentsRequest{ + AppealId: appealID, + } + res, err := s.grpcServer.ListAppealComments(context.Background(), req) + + s.Equal(tc.expectedGRPCCode, status.Code(err)) + s.Nil(res) + }) + } + }) +} + +func (s *GrpcHandlersSuite) TestCreateComment() { + s.Run("should return comment on success", func() { + s.setup() + timeNow := time.Now() + + appealID := uuid.New().String() + actor := "user@example.com" + commentBody := "test comment" + expectedNewComment := &domain.Comment{ + ID: uuid.New().String(), + ParentID: appealID, + CreatedBy: actor, + Body: commentBody, + CreatedAt: timeNow, + UpdatedAt: timeNow, + } + expectedResponse := &guardianv1beta1.CreateAppealCommentResponse{ + Comment: &guardianv1beta1.AppealComment{ + Id: expectedNewComment.ID, + AppealId: appealID, + CreatedBy: actor, + Body: commentBody, + CreatedAt: timestamppb.New(timeNow), + UpdatedAt: timestamppb.New(timeNow), + }, + } + + s.appealService.EXPECT(). + CreateComment(mock.MatchedBy(func(ctx context.Context) bool { return true }), mock.AnythingOfType("*domain.Comment")). + Return(nil). + Run(func(_a0 context.Context, c *domain.Comment) { + s.Equal(appealID, c.ParentID) + s.Equal(actor, c.CreatedBy) + s.Equal(commentBody, c.Body) + + // updated values + c.ID = expectedNewComment.ID + c.CreatedAt = expectedNewComment.CreatedAt + c.UpdatedAt = expectedNewComment.UpdatedAt + }) + defer s.appealService.AssertExpectations(s.T()) + + req := &guardianv1beta1.CreateAppealCommentRequest{ + AppealId: appealID, + Body: commentBody, + } + ctx := context.WithValue(context.Background(), authEmailTestContextKey{}, actor) + res, err := s.grpcServer.CreateAppealComment(ctx, req) + + s.NoError(err) + s.Equal(expectedResponse, res) + }) + + s.Run("should return unauthenticated error when user is not authenticated", func() { + s.setup() + req := &guardianv1beta1.CreateAppealCommentRequest{ + AppealId: uuid.New().String(), + Body: "test comment content", + } + ctx := context.Background() // no authenticated user in context + res, err := s.grpcServer.CreateAppealComment(ctx, req) + + s.Equal(codes.Unauthenticated, status.Code(err)) + s.Nil(res) + }) + + s.Run("should return error codes according to the service error", func() { + testCases := []struct { + name string + expecedError error + expectedGRPCCode codes.Code + }{ + { + name: "should return invalid argument error when parent type is empty", + expecedError: comment.ErrEmptyCommentParentType, + expectedGRPCCode: codes.InvalidArgument, + }, + { + name: "should return invalid argument error when parent id is empty", + expecedError: comment.ErrEmptyCommentParentID, + expectedGRPCCode: codes.InvalidArgument, + }, + { + name: "should return invalid argument error when comment creator is empty", + expecedError: comment.ErrEmptyCommentCreator, + expectedGRPCCode: codes.InvalidArgument, + }, + { + name: "should return invalid argument error when comment body is empty", + expecedError: comment.ErrEmptyCommentBody, + expectedGRPCCode: codes.InvalidArgument, + }, + { + name: "should return not found error when appeal not found", + expecedError: appeal.ErrAppealNotFound, + expectedGRPCCode: codes.NotFound, + }, + { + name: "should return internal error when service fails", + expecedError: errors.New("unexpected error"), + expectedGRPCCode: codes.Internal, + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + s.setup() + + s.appealService.EXPECT(). + CreateComment(mock.MatchedBy(func(ctx context.Context) bool { return true }), mock.AnythingOfType("*domain.Comment")). + Return(tc.expecedError) + defer s.appealService.AssertExpectations(s.T()) + + req := &guardianv1beta1.CreateAppealCommentRequest{ + AppealId: uuid.New().String(), + Body: "test comment content", + } + ctx := context.WithValue(context.Background(), authEmailTestContextKey{}, "user@example.com") + res, err := s.grpcServer.CreateAppealComment(ctx, req) + + s.Equal(tc.expectedGRPCCode, status.Code(err)) + s.Nil(res) + }) + } + }) +} diff --git a/api/handler/v1beta1/grpc.go b/api/handler/v1beta1/grpc.go index 1ae90844b..a0f230027 100644 --- a/api/handler/v1beta1/grpc.go +++ b/api/handler/v1beta1/grpc.go @@ -40,6 +40,8 @@ type ProtoAdapter interface { FromGrantProto(*guardianv1beta1.Grant) *domain.Grant ToActivityProto(*domain.Activity) (*guardianv1beta1.ProviderActivity, error) + + ToCommentProto(*domain.Comment) *guardianv1beta1.AppealComment } //go:generate mockery --name=resourceService --exported --with-expecter @@ -95,6 +97,8 @@ type appealService interface { AddApprover(ctx context.Context, appealID, approvalID, email string) (*domain.Appeal, error) DeleteApprover(ctx context.Context, appealID, approvalID, email string) (*domain.Appeal, error) UpdateApproval(ctx context.Context, approvalAction domain.ApprovalAction) (*domain.Appeal, error) + ListComments(context.Context, domain.ListCommentsFilter) ([]*domain.Comment, error) + CreateComment(context.Context, *domain.Comment) error } //go:generate mockery --name=approvalService --exported --with-expecter diff --git a/api/handler/v1beta1/mocks/appealService.go b/api/handler/v1beta1/mocks/appealService.go index 6ea290b81..638cf5f0d 100644 --- a/api/handler/v1beta1/mocks/appealService.go +++ b/api/handler/v1beta1/mocks/appealService.go @@ -195,6 +195,49 @@ func (_c *AppealService_Create_Call) RunAndReturn(run func(context.Context, []*d return _c } +// CreateComment provides a mock function with given fields: _a0, _a1 +func (_m *AppealService) CreateComment(_a0 context.Context, _a1 *domain.Comment) error { + ret := _m.Called(_a0, _a1) + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, *domain.Comment) error); ok { + r0 = rf(_a0, _a1) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// AppealService_CreateComment_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CreateComment' +type AppealService_CreateComment_Call struct { + *mock.Call +} + +// CreateComment is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *domain.Comment +func (_e *AppealService_Expecter) CreateComment(_a0 interface{}, _a1 interface{}) *AppealService_CreateComment_Call { + return &AppealService_CreateComment_Call{Call: _e.mock.On("CreateComment", _a0, _a1)} +} + +func (_c *AppealService_CreateComment_Call) Run(run func(_a0 context.Context, _a1 *domain.Comment)) *AppealService_CreateComment_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*domain.Comment)) + }) + return _c +} + +func (_c *AppealService_CreateComment_Call) Return(_a0 error) *AppealService_CreateComment_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *AppealService_CreateComment_Call) RunAndReturn(run func(context.Context, *domain.Comment) error) *AppealService_CreateComment_Call { + _c.Call.Return(run) + return _c +} + // DeleteApprover provides a mock function with given fields: ctx, appealID, approvalID, email func (_m *AppealService) DeleteApprover(ctx context.Context, appealID string, approvalID string, email string) (*domain.Appeal, error) { ret := _m.Called(ctx, appealID, approvalID, email) @@ -415,6 +458,61 @@ func (_c *AppealService_GetByID_Call) RunAndReturn(run func(context.Context, str return _c } +// ListComments provides a mock function with given fields: _a0, _a1 +func (_m *AppealService) ListComments(_a0 context.Context, _a1 domain.ListCommentsFilter) ([]*domain.Comment, error) { + ret := _m.Called(_a0, _a1) + + var r0 []*domain.Comment + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, domain.ListCommentsFilter) ([]*domain.Comment, error)); ok { + return rf(_a0, _a1) + } + if rf, ok := ret.Get(0).(func(context.Context, domain.ListCommentsFilter) []*domain.Comment); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]*domain.Comment) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, domain.ListCommentsFilter) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// AppealService_ListComments_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListComments' +type AppealService_ListComments_Call struct { + *mock.Call +} + +// ListComments is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 domain.ListCommentsFilter +func (_e *AppealService_Expecter) ListComments(_a0 interface{}, _a1 interface{}) *AppealService_ListComments_Call { + return &AppealService_ListComments_Call{Call: _e.mock.On("ListComments", _a0, _a1)} +} + +func (_c *AppealService_ListComments_Call) Run(run func(_a0 context.Context, _a1 domain.ListCommentsFilter)) *AppealService_ListComments_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(domain.ListCommentsFilter)) + }) + return _c +} + +func (_c *AppealService_ListComments_Call) Return(_a0 []*domain.Comment, _a1 error) *AppealService_ListComments_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *AppealService_ListComments_Call) RunAndReturn(run func(context.Context, domain.ListCommentsFilter) ([]*domain.Comment, error)) *AppealService_ListComments_Call { + _c.Call.Return(run) + return _c +} + // UpdateApproval provides a mock function with given fields: ctx, approvalAction func (_m *AppealService) UpdateApproval(ctx context.Context, approvalAction domain.ApprovalAction) (*domain.Appeal, error) { ret := _m.Called(ctx, approvalAction) diff --git a/api/proto/gotocompany/guardian/v1beta1/guardian.pb.go b/api/proto/gotocompany/guardian/v1beta1/guardian.pb.go index dd9350d00..9a38aa15c 100644 --- a/api/proto/gotocompany/guardian/v1beta1/guardian.pb.go +++ b/api/proto/gotocompany/guardian/v1beta1/guardian.pb.go @@ -3046,6 +3046,210 @@ func (x *CreateAppealResponse) GetAppeals() []*Appeal { return nil } +type ListAppealCommentsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AppealId string `protobuf:"bytes,1,opt,name=appeal_id,json=appealId,proto3" json:"appeal_id,omitempty"` + OrderBy []string `protobuf:"bytes,2,rep,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"` +} + +func (x *ListAppealCommentsRequest) Reset() { + *x = ListAppealCommentsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListAppealCommentsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListAppealCommentsRequest) ProtoMessage() {} + +func (x *ListAppealCommentsRequest) ProtoReflect() protoreflect.Message { + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[54] + 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 ListAppealCommentsRequest.ProtoReflect.Descriptor instead. +func (*ListAppealCommentsRequest) Descriptor() ([]byte, []int) { + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{54} +} + +func (x *ListAppealCommentsRequest) GetAppealId() string { + if x != nil { + return x.AppealId + } + return "" +} + +func (x *ListAppealCommentsRequest) GetOrderBy() []string { + if x != nil { + return x.OrderBy + } + return nil +} + +type ListAppealCommentsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Comments []*AppealComment `protobuf:"bytes,1,rep,name=comments,proto3" json:"comments,omitempty"` +} + +func (x *ListAppealCommentsResponse) Reset() { + *x = ListAppealCommentsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListAppealCommentsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListAppealCommentsResponse) ProtoMessage() {} + +func (x *ListAppealCommentsResponse) ProtoReflect() protoreflect.Message { + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[55] + 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 ListAppealCommentsResponse.ProtoReflect.Descriptor instead. +func (*ListAppealCommentsResponse) Descriptor() ([]byte, []int) { + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{55} +} + +func (x *ListAppealCommentsResponse) GetComments() []*AppealComment { + if x != nil { + return x.Comments + } + return nil +} + +type CreateAppealCommentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AppealId string `protobuf:"bytes,1,opt,name=appeal_id,json=appealId,proto3" json:"appeal_id,omitempty"` + Body string `protobuf:"bytes,2,opt,name=body,proto3" json:"body,omitempty"` +} + +func (x *CreateAppealCommentRequest) Reset() { + *x = CreateAppealCommentRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateAppealCommentRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateAppealCommentRequest) ProtoMessage() {} + +func (x *CreateAppealCommentRequest) ProtoReflect() protoreflect.Message { + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[56] + 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 CreateAppealCommentRequest.ProtoReflect.Descriptor instead. +func (*CreateAppealCommentRequest) Descriptor() ([]byte, []int) { + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{56} +} + +func (x *CreateAppealCommentRequest) GetAppealId() string { + if x != nil { + return x.AppealId + } + return "" +} + +func (x *CreateAppealCommentRequest) GetBody() string { + if x != nil { + return x.Body + } + return "" +} + +type CreateAppealCommentResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Comment *AppealComment `protobuf:"bytes,1,opt,name=comment,proto3" json:"comment,omitempty"` +} + +func (x *CreateAppealCommentResponse) Reset() { + *x = CreateAppealCommentResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateAppealCommentResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateAppealCommentResponse) ProtoMessage() {} + +func (x *CreateAppealCommentResponse) ProtoReflect() protoreflect.Message { + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[57] + 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 CreateAppealCommentResponse.ProtoReflect.Descriptor instead. +func (*CreateAppealCommentResponse) Descriptor() ([]byte, []int) { + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{57} +} + +func (x *CreateAppealCommentResponse) GetComment() *AppealComment { + if x != nil { + return x.Comment + } + return nil +} + type ListUserApprovalsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3065,7 +3269,7 @@ type ListUserApprovalsRequest struct { func (x *ListUserApprovalsRequest) Reset() { *x = ListUserApprovalsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[54] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3078,7 +3282,7 @@ func (x *ListUserApprovalsRequest) String() string { func (*ListUserApprovalsRequest) ProtoMessage() {} func (x *ListUserApprovalsRequest) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[54] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3091,7 +3295,7 @@ func (x *ListUserApprovalsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListUserApprovalsRequest.ProtoReflect.Descriptor instead. func (*ListUserApprovalsRequest) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{54} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{58} } func (x *ListUserApprovalsRequest) GetStatuses() []string { @@ -3169,7 +3373,7 @@ type ListUserApprovalsResponse struct { func (x *ListUserApprovalsResponse) Reset() { *x = ListUserApprovalsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[55] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3182,7 +3386,7 @@ func (x *ListUserApprovalsResponse) String() string { func (*ListUserApprovalsResponse) ProtoMessage() {} func (x *ListUserApprovalsResponse) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[55] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3195,7 +3399,7 @@ func (x *ListUserApprovalsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListUserApprovalsResponse.ProtoReflect.Descriptor instead. func (*ListUserApprovalsResponse) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{55} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{59} } func (x *ListUserApprovalsResponse) GetApprovals() []*Approval { @@ -3232,7 +3436,7 @@ type ListApprovalsRequest struct { func (x *ListApprovalsRequest) Reset() { *x = ListApprovalsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[56] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3245,7 +3449,7 @@ func (x *ListApprovalsRequest) String() string { func (*ListApprovalsRequest) ProtoMessage() {} func (x *ListApprovalsRequest) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[56] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3258,7 +3462,7 @@ func (x *ListApprovalsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListApprovalsRequest.ProtoReflect.Descriptor instead. func (*ListApprovalsRequest) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{56} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{60} } func (x *ListApprovalsRequest) GetAccountId() string { @@ -3343,7 +3547,7 @@ type ListApprovalsResponse struct { func (x *ListApprovalsResponse) Reset() { *x = ListApprovalsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[57] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3356,7 +3560,7 @@ func (x *ListApprovalsResponse) String() string { func (*ListApprovalsResponse) ProtoMessage() {} func (x *ListApprovalsResponse) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[57] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3369,7 +3573,7 @@ func (x *ListApprovalsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListApprovalsResponse.ProtoReflect.Descriptor instead. func (*ListApprovalsResponse) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{57} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{61} } func (x *ListApprovalsResponse) GetApprovals() []*Approval { @@ -3399,7 +3603,7 @@ type UpdateApprovalRequest struct { func (x *UpdateApprovalRequest) Reset() { *x = UpdateApprovalRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[58] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3412,7 +3616,7 @@ func (x *UpdateApprovalRequest) String() string { func (*UpdateApprovalRequest) ProtoMessage() {} func (x *UpdateApprovalRequest) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[58] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3425,7 +3629,7 @@ func (x *UpdateApprovalRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateApprovalRequest.ProtoReflect.Descriptor instead. func (*UpdateApprovalRequest) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{58} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{62} } func (x *UpdateApprovalRequest) GetId() string { @@ -3460,7 +3664,7 @@ type UpdateApprovalResponse struct { func (x *UpdateApprovalResponse) Reset() { *x = UpdateApprovalResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[59] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3473,7 +3677,7 @@ func (x *UpdateApprovalResponse) String() string { func (*UpdateApprovalResponse) ProtoMessage() {} func (x *UpdateApprovalResponse) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[59] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3486,7 +3690,7 @@ func (x *UpdateApprovalResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateApprovalResponse.ProtoReflect.Descriptor instead. func (*UpdateApprovalResponse) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{59} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{63} } func (x *UpdateApprovalResponse) GetAppeal() *Appeal { @@ -3509,7 +3713,7 @@ type AddApproverRequest struct { func (x *AddApproverRequest) Reset() { *x = AddApproverRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[60] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3522,7 +3726,7 @@ func (x *AddApproverRequest) String() string { func (*AddApproverRequest) ProtoMessage() {} func (x *AddApproverRequest) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[60] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3535,7 +3739,7 @@ func (x *AddApproverRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AddApproverRequest.ProtoReflect.Descriptor instead. func (*AddApproverRequest) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{60} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{64} } func (x *AddApproverRequest) GetAppealId() string { @@ -3570,7 +3774,7 @@ type AddApproverResponse struct { func (x *AddApproverResponse) Reset() { *x = AddApproverResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[61] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3583,7 +3787,7 @@ func (x *AddApproverResponse) String() string { func (*AddApproverResponse) ProtoMessage() {} func (x *AddApproverResponse) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[61] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3596,7 +3800,7 @@ func (x *AddApproverResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AddApproverResponse.ProtoReflect.Descriptor instead. func (*AddApproverResponse) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{61} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{65} } func (x *AddApproverResponse) GetAppeal() *Appeal { @@ -3619,7 +3823,7 @@ type DeleteApproverRequest struct { func (x *DeleteApproverRequest) Reset() { *x = DeleteApproverRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[62] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3632,7 +3836,7 @@ func (x *DeleteApproverRequest) String() string { func (*DeleteApproverRequest) ProtoMessage() {} func (x *DeleteApproverRequest) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[62] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3645,7 +3849,7 @@ func (x *DeleteApproverRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteApproverRequest.ProtoReflect.Descriptor instead. func (*DeleteApproverRequest) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{62} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{66} } func (x *DeleteApproverRequest) GetAppealId() string { @@ -3680,7 +3884,7 @@ type DeleteApproverResponse struct { func (x *DeleteApproverResponse) Reset() { *x = DeleteApproverResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[63] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3693,7 +3897,7 @@ func (x *DeleteApproverResponse) String() string { func (*DeleteApproverResponse) ProtoMessage() {} func (x *DeleteApproverResponse) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[63] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3706,7 +3910,7 @@ func (x *DeleteApproverResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteApproverResponse.ProtoReflect.Descriptor instead. func (*DeleteApproverResponse) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{63} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{67} } func (x *DeleteApproverResponse) GetAppeal() *Appeal { @@ -3741,7 +3945,7 @@ type ListGrantsRequest struct { func (x *ListGrantsRequest) Reset() { *x = ListGrantsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[64] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3754,7 +3958,7 @@ func (x *ListGrantsRequest) String() string { func (*ListGrantsRequest) ProtoMessage() {} func (x *ListGrantsRequest) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[64] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3767,7 +3971,7 @@ func (x *ListGrantsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListGrantsRequest.ProtoReflect.Descriptor instead. func (*ListGrantsRequest) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{64} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{68} } func (x *ListGrantsRequest) GetStatuses() []string { @@ -3887,7 +4091,7 @@ type ListGrantsResponse struct { func (x *ListGrantsResponse) Reset() { *x = ListGrantsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[65] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3900,7 +4104,7 @@ func (x *ListGrantsResponse) String() string { func (*ListGrantsResponse) ProtoMessage() {} func (x *ListGrantsResponse) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[65] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3913,7 +4117,7 @@ func (x *ListGrantsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListGrantsResponse.ProtoReflect.Descriptor instead. func (*ListGrantsResponse) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{65} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{69} } func (x *ListGrantsResponse) GetGrants() []*Grant { @@ -3953,7 +4157,7 @@ type ListUserGrantsRequest struct { func (x *ListUserGrantsRequest) Reset() { *x = ListUserGrantsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[66] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3966,7 +4170,7 @@ func (x *ListUserGrantsRequest) String() string { func (*ListUserGrantsRequest) ProtoMessage() {} func (x *ListUserGrantsRequest) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[66] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3979,7 +4183,7 @@ func (x *ListUserGrantsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListUserGrantsRequest.ProtoReflect.Descriptor instead. func (*ListUserGrantsRequest) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{66} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{70} } func (x *ListUserGrantsRequest) GetStatuses() []string { @@ -4085,7 +4289,7 @@ type ListUserGrantsResponse struct { func (x *ListUserGrantsResponse) Reset() { *x = ListUserGrantsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[67] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4098,7 +4302,7 @@ func (x *ListUserGrantsResponse) String() string { func (*ListUserGrantsResponse) ProtoMessage() {} func (x *ListUserGrantsResponse) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[67] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4111,7 +4315,7 @@ func (x *ListUserGrantsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListUserGrantsResponse.ProtoReflect.Descriptor instead. func (*ListUserGrantsResponse) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{67} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{71} } func (x *ListUserGrantsResponse) GetGrants() []*Grant { @@ -4137,7 +4341,7 @@ type ListUserRolesRequest struct { func (x *ListUserRolesRequest) Reset() { *x = ListUserRolesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[68] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4150,7 +4354,7 @@ func (x *ListUserRolesRequest) String() string { func (*ListUserRolesRequest) ProtoMessage() {} func (x *ListUserRolesRequest) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[68] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4163,7 +4367,7 @@ func (x *ListUserRolesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListUserRolesRequest.ProtoReflect.Descriptor instead. func (*ListUserRolesRequest) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{68} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{72} } type ListUserRolesResponse struct { @@ -4177,7 +4381,7 @@ type ListUserRolesResponse struct { func (x *ListUserRolesResponse) Reset() { *x = ListUserRolesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[69] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4190,7 +4394,7 @@ func (x *ListUserRolesResponse) String() string { func (*ListUserRolesResponse) ProtoMessage() {} func (x *ListUserRolesResponse) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[69] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4203,7 +4407,7 @@ func (x *ListUserRolesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListUserRolesResponse.ProtoReflect.Descriptor instead. func (*ListUserRolesResponse) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{69} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{73} } func (x *ListUserRolesResponse) GetRoles() []string { @@ -4224,7 +4428,7 @@ type GetGrantRequest struct { func (x *GetGrantRequest) Reset() { *x = GetGrantRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[70] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4237,7 +4441,7 @@ func (x *GetGrantRequest) String() string { func (*GetGrantRequest) ProtoMessage() {} func (x *GetGrantRequest) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[70] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4250,7 +4454,7 @@ func (x *GetGrantRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGrantRequest.ProtoReflect.Descriptor instead. func (*GetGrantRequest) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{70} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{74} } func (x *GetGrantRequest) GetId() string { @@ -4271,7 +4475,7 @@ type GetGrantResponse struct { func (x *GetGrantResponse) Reset() { *x = GetGrantResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[71] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4284,7 +4488,7 @@ func (x *GetGrantResponse) String() string { func (*GetGrantResponse) ProtoMessage() {} func (x *GetGrantResponse) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[71] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4297,7 +4501,7 @@ func (x *GetGrantResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGrantResponse.ProtoReflect.Descriptor instead. func (*GetGrantResponse) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{71} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{75} } func (x *GetGrantResponse) GetGrant() *Grant { @@ -4319,7 +4523,7 @@ type UpdateGrantRequest struct { func (x *UpdateGrantRequest) Reset() { *x = UpdateGrantRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[72] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4332,7 +4536,7 @@ func (x *UpdateGrantRequest) String() string { func (*UpdateGrantRequest) ProtoMessage() {} func (x *UpdateGrantRequest) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[72] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4345,7 +4549,7 @@ func (x *UpdateGrantRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGrantRequest.ProtoReflect.Descriptor instead. func (*UpdateGrantRequest) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{72} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{76} } func (x *UpdateGrantRequest) GetId() string { @@ -4373,7 +4577,7 @@ type UpdateGrantResponse struct { func (x *UpdateGrantResponse) Reset() { *x = UpdateGrantResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[73] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4386,7 +4590,7 @@ func (x *UpdateGrantResponse) String() string { func (*UpdateGrantResponse) ProtoMessage() {} func (x *UpdateGrantResponse) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[73] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4399,7 +4603,7 @@ func (x *UpdateGrantResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGrantResponse.ProtoReflect.Descriptor instead. func (*UpdateGrantResponse) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{73} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{77} } func (x *UpdateGrantResponse) GetGrant() *Grant { @@ -4421,7 +4625,7 @@ type RevokeGrantRequest struct { func (x *RevokeGrantRequest) Reset() { *x = RevokeGrantRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[74] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4434,7 +4638,7 @@ func (x *RevokeGrantRequest) String() string { func (*RevokeGrantRequest) ProtoMessage() {} func (x *RevokeGrantRequest) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[74] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4447,7 +4651,7 @@ func (x *RevokeGrantRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeGrantRequest.ProtoReflect.Descriptor instead. func (*RevokeGrantRequest) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{74} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{78} } func (x *RevokeGrantRequest) GetId() string { @@ -4475,7 +4679,7 @@ type RevokeGrantResponse struct { func (x *RevokeGrantResponse) Reset() { *x = RevokeGrantResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[75] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4488,7 +4692,7 @@ func (x *RevokeGrantResponse) String() string { func (*RevokeGrantResponse) ProtoMessage() {} func (x *RevokeGrantResponse) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[75] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4501,7 +4705,7 @@ func (x *RevokeGrantResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeGrantResponse.ProtoReflect.Descriptor instead. func (*RevokeGrantResponse) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{75} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{79} } func (x *RevokeGrantResponse) GetGrant() *Grant { @@ -4527,7 +4731,7 @@ type RevokeGrantsRequest struct { func (x *RevokeGrantsRequest) Reset() { *x = RevokeGrantsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[76] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4540,7 +4744,7 @@ func (x *RevokeGrantsRequest) String() string { func (*RevokeGrantsRequest) ProtoMessage() {} func (x *RevokeGrantsRequest) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[76] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4553,7 +4757,7 @@ func (x *RevokeGrantsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeGrantsRequest.ProtoReflect.Descriptor instead. func (*RevokeGrantsRequest) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{76} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{80} } func (x *RevokeGrantsRequest) GetAccountIds() []string { @@ -4609,7 +4813,7 @@ type RevokeGrantsResponse struct { func (x *RevokeGrantsResponse) Reset() { *x = RevokeGrantsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[77] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4622,7 +4826,7 @@ func (x *RevokeGrantsResponse) String() string { func (*RevokeGrantsResponse) ProtoMessage() {} func (x *RevokeGrantsResponse) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[77] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4635,7 +4839,7 @@ func (x *RevokeGrantsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeGrantsResponse.ProtoReflect.Descriptor instead. func (*RevokeGrantsResponse) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{77} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{81} } func (x *RevokeGrantsResponse) GetGrants() []*Grant { @@ -4659,7 +4863,7 @@ type Role struct { func (x *Role) Reset() { *x = Role{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[78] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4672,7 +4876,7 @@ func (x *Role) String() string { func (*Role) ProtoMessage() {} func (x *Role) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[78] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4685,7 +4889,7 @@ func (x *Role) ProtoReflect() protoreflect.Message { // Deprecated: Use Role.ProtoReflect.Descriptor instead. func (*Role) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{78} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{82} } func (x *Role) GetId() string { @@ -4728,7 +4932,7 @@ type PolicyConfig struct { func (x *PolicyConfig) Reset() { *x = PolicyConfig{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[79] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4741,7 +4945,7 @@ func (x *PolicyConfig) String() string { func (*PolicyConfig) ProtoMessage() {} func (x *PolicyConfig) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[79] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4754,7 +4958,7 @@ func (x *PolicyConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use PolicyConfig.ProtoReflect.Descriptor instead. func (*PolicyConfig) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{79} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{83} } func (x *PolicyConfig) GetId() string { @@ -4789,7 +4993,7 @@ type ProviderConfig struct { func (x *ProviderConfig) Reset() { *x = ProviderConfig{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[80] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4802,7 +5006,7 @@ func (x *ProviderConfig) String() string { func (*ProviderConfig) ProtoMessage() {} func (x *ProviderConfig) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[80] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[84] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4815,7 +5019,7 @@ func (x *ProviderConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ProviderConfig.ProtoReflect.Descriptor instead. func (*ProviderConfig) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{80} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{84} } func (x *ProviderConfig) GetType() string { @@ -4891,7 +5095,7 @@ type Provider struct { func (x *Provider) Reset() { *x = Provider{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[81] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4904,7 +5108,7 @@ func (x *Provider) String() string { func (*Provider) ProtoMessage() {} func (x *Provider) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[81] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4917,7 +5121,7 @@ func (x *Provider) ProtoReflect() protoreflect.Message { // Deprecated: Use Provider.ProtoReflect.Descriptor instead. func (*Provider) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{81} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{85} } func (x *Provider) GetId() string { @@ -4974,7 +5178,7 @@ type ProviderType struct { func (x *ProviderType) Reset() { *x = ProviderType{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[82] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4987,7 +5191,7 @@ func (x *ProviderType) String() string { func (*ProviderType) ProtoMessage() {} func (x *ProviderType) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[82] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5000,7 +5204,7 @@ func (x *ProviderType) ProtoReflect() protoreflect.Message { // Deprecated: Use ProviderType.ProtoReflect.Descriptor instead. func (*ProviderType) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{82} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{86} } func (x *ProviderType) GetName() string { @@ -5029,7 +5233,7 @@ type Condition struct { func (x *Condition) Reset() { *x = Condition{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[83] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5042,7 +5246,7 @@ func (x *Condition) String() string { func (*Condition) ProtoMessage() {} func (x *Condition) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[83] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5055,7 +5259,7 @@ func (x *Condition) ProtoReflect() protoreflect.Message { // Deprecated: Use Condition.ProtoReflect.Descriptor instead. func (*Condition) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{83} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{87} } func (x *Condition) GetField() string { @@ -5089,7 +5293,7 @@ type PolicyAppealConfig struct { func (x *PolicyAppealConfig) Reset() { *x = PolicyAppealConfig{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[84] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5102,7 +5306,7 @@ func (x *PolicyAppealConfig) String() string { func (*PolicyAppealConfig) ProtoMessage() {} func (x *PolicyAppealConfig) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[84] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5115,7 +5319,7 @@ func (x *PolicyAppealConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use PolicyAppealConfig.ProtoReflect.Descriptor instead. func (*PolicyAppealConfig) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{84} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{88} } func (x *PolicyAppealConfig) GetDurationOptions() []*PolicyAppealConfig_DurationOptions { @@ -5188,7 +5392,7 @@ type Policy struct { func (x *Policy) Reset() { *x = Policy{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[85] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5201,7 +5405,7 @@ func (x *Policy) String() string { func (*Policy) ProtoMessage() {} func (x *Policy) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[85] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5214,7 +5418,7 @@ func (x *Policy) ProtoReflect() protoreflect.Message { // Deprecated: Use Policy.ProtoReflect.Descriptor instead. func (*Policy) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{85} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{89} } func (x *Policy) GetId() string { @@ -5299,7 +5503,7 @@ type AppealOptions struct { func (x *AppealOptions) Reset() { *x = AppealOptions{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[86] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5312,7 +5516,7 @@ func (x *AppealOptions) String() string { func (*AppealOptions) ProtoMessage() {} func (x *AppealOptions) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[86] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5325,7 +5529,7 @@ func (x *AppealOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use AppealOptions.ProtoReflect.Descriptor instead. func (*AppealOptions) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{86} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{90} } func (x *AppealOptions) GetExpirationDate() *timestamppb.Timestamp { @@ -5373,7 +5577,7 @@ type Appeal struct { func (x *Appeal) Reset() { *x = Appeal{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[87] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5386,7 +5590,7 @@ func (x *Appeal) String() string { func (*Appeal) ProtoMessage() {} func (x *Appeal) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[87] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5399,7 +5603,7 @@ func (x *Appeal) ProtoReflect() protoreflect.Message { // Deprecated: Use Appeal.ProtoReflect.Descriptor instead. func (*Appeal) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{87} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{91} } func (x *Appeal) GetId() string { @@ -5565,7 +5769,7 @@ type Approval struct { func (x *Approval) Reset() { *x = Approval{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[88] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5578,7 +5782,7 @@ func (x *Approval) String() string { func (*Approval) ProtoMessage() {} func (x *Approval) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[88] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[92] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5591,7 +5795,7 @@ func (x *Approval) ProtoReflect() protoreflect.Message { // Deprecated: Use Approval.ProtoReflect.Descriptor instead. func (*Approval) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{88} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{92} } func (x *Approval) GetId() string { @@ -5678,6 +5882,93 @@ func (x *Approval) GetReason() string { return "" } +type AppealComment struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + AppealId string `protobuf:"bytes,2,opt,name=appeal_id,json=appealId,proto3" json:"appeal_id,omitempty"` + CreatedBy string `protobuf:"bytes,3,opt,name=created_by,json=createdBy,proto3" json:"created_by,omitempty"` + Body string `protobuf:"bytes,4,opt,name=body,proto3" json:"body,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` +} + +func (x *AppealComment) Reset() { + *x = AppealComment{} + if protoimpl.UnsafeEnabled { + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[93] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AppealComment) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AppealComment) ProtoMessage() {} + +func (x *AppealComment) ProtoReflect() protoreflect.Message { + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[93] + 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 AppealComment.ProtoReflect.Descriptor instead. +func (*AppealComment) Descriptor() ([]byte, []int) { + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{93} +} + +func (x *AppealComment) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *AppealComment) GetAppealId() string { + if x != nil { + return x.AppealId + } + return "" +} + +func (x *AppealComment) GetCreatedBy() string { + if x != nil { + return x.CreatedBy + } + return "" +} + +func (x *AppealComment) GetBody() string { + if x != nil { + return x.Body + } + return "" +} + +func (x *AppealComment) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *AppealComment) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + // Resource contains information of resource from providers type Resource struct { state protoimpl.MessageState @@ -5703,7 +5994,7 @@ type Resource struct { func (x *Resource) Reset() { *x = Resource{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[89] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5716,7 +6007,7 @@ func (x *Resource) String() string { func (*Resource) ProtoMessage() {} func (x *Resource) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[89] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[94] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5729,7 +6020,7 @@ func (x *Resource) ProtoReflect() protoreflect.Message { // Deprecated: Use Resource.ProtoReflect.Descriptor instead. func (*Resource) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{89} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{94} } func (x *Resource) GetId() string { @@ -5861,7 +6152,7 @@ type Grant struct { func (x *Grant) Reset() { *x = Grant{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[90] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5874,7 +6165,7 @@ func (x *Grant) String() string { func (*Grant) ProtoMessage() {} func (x *Grant) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[90] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[95] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5887,7 +6178,7 @@ func (x *Grant) ProtoReflect() protoreflect.Message { // Deprecated: Use Grant.ProtoReflect.Descriptor instead. func (*Grant) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{90} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{95} } func (x *Grant) GetId() string { @@ -6061,7 +6352,7 @@ type ProviderActivity struct { func (x *ProviderActivity) Reset() { *x = ProviderActivity{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[91] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6074,7 +6365,7 @@ func (x *ProviderActivity) String() string { func (*ProviderActivity) ProtoMessage() {} func (x *ProviderActivity) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[91] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[96] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6087,7 +6378,7 @@ func (x *ProviderActivity) ProtoReflect() protoreflect.Message { // Deprecated: Use ProviderActivity.ProtoReflect.Descriptor instead. func (*ProviderActivity) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{91} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{96} } func (x *ProviderActivity) GetId() string { @@ -6199,7 +6490,7 @@ type RevokeAppealRequest_Reason struct { func (x *RevokeAppealRequest_Reason) Reset() { *x = RevokeAppealRequest_Reason{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[92] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6212,7 +6503,7 @@ func (x *RevokeAppealRequest_Reason) String() string { func (*RevokeAppealRequest_Reason) ProtoMessage() {} func (x *RevokeAppealRequest_Reason) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[92] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[97] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6249,7 +6540,7 @@ type CreateAppealRequest_Resource struct { func (x *CreateAppealRequest_Resource) Reset() { *x = CreateAppealRequest_Resource{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[93] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6262,7 +6553,7 @@ func (x *CreateAppealRequest_Resource) String() string { func (*CreateAppealRequest_Resource) ProtoMessage() {} func (x *CreateAppealRequest_Resource) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[93] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[98] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6318,7 +6609,7 @@ type UpdateApprovalRequest_Action struct { func (x *UpdateApprovalRequest_Action) Reset() { *x = UpdateApprovalRequest_Action{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[94] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6331,7 +6622,7 @@ func (x *UpdateApprovalRequest_Action) String() string { func (*UpdateApprovalRequest_Action) ProtoMessage() {} func (x *UpdateApprovalRequest_Action) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[94] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[99] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6344,7 +6635,7 @@ func (x *UpdateApprovalRequest_Action) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateApprovalRequest_Action.ProtoReflect.Descriptor instead. func (*UpdateApprovalRequest_Action) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{58, 0} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{62, 0} } func (x *UpdateApprovalRequest_Action) GetAction() string { @@ -6373,7 +6664,7 @@ type ProviderConfig_AppealConfig struct { func (x *ProviderConfig_AppealConfig) Reset() { *x = ProviderConfig_AppealConfig{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[96] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6386,7 +6677,7 @@ func (x *ProviderConfig_AppealConfig) String() string { func (*ProviderConfig_AppealConfig) ProtoMessage() {} func (x *ProviderConfig_AppealConfig) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[96] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[101] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6399,7 +6690,7 @@ func (x *ProviderConfig_AppealConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ProviderConfig_AppealConfig.ProtoReflect.Descriptor instead. func (*ProviderConfig_AppealConfig) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{80, 1} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{84, 1} } func (x *ProviderConfig_AppealConfig) GetAllowPermanentAccess() bool { @@ -6430,7 +6721,7 @@ type ProviderConfig_ResourceConfig struct { func (x *ProviderConfig_ResourceConfig) Reset() { *x = ProviderConfig_ResourceConfig{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[97] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6443,7 +6734,7 @@ func (x *ProviderConfig_ResourceConfig) String() string { func (*ProviderConfig_ResourceConfig) ProtoMessage() {} func (x *ProviderConfig_ResourceConfig) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[97] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[102] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6456,7 +6747,7 @@ func (x *ProviderConfig_ResourceConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ProviderConfig_ResourceConfig.ProtoReflect.Descriptor instead. func (*ProviderConfig_ResourceConfig) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{80, 2} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{84, 2} } func (x *ProviderConfig_ResourceConfig) GetType() string { @@ -6501,7 +6792,7 @@ type ProviderConfig_ProviderParameter struct { func (x *ProviderConfig_ProviderParameter) Reset() { *x = ProviderConfig_ProviderParameter{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[98] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6514,7 +6805,7 @@ func (x *ProviderConfig_ProviderParameter) String() string { func (*ProviderConfig_ProviderParameter) ProtoMessage() {} func (x *ProviderConfig_ProviderParameter) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[98] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[103] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6527,7 +6818,7 @@ func (x *ProviderConfig_ProviderParameter) ProtoReflect() protoreflect.Message { // Deprecated: Use ProviderConfig_ProviderParameter.ProtoReflect.Descriptor instead. func (*ProviderConfig_ProviderParameter) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{80, 3} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{84, 3} } func (x *ProviderConfig_ProviderParameter) GetKey() string { @@ -6569,7 +6860,7 @@ type Condition_MatchCondition struct { func (x *Condition_MatchCondition) Reset() { *x = Condition_MatchCondition{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[99] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6582,7 +6873,7 @@ func (x *Condition_MatchCondition) String() string { func (*Condition_MatchCondition) ProtoMessage() {} func (x *Condition_MatchCondition) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[99] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[104] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6595,7 +6886,7 @@ func (x *Condition_MatchCondition) ProtoReflect() protoreflect.Message { // Deprecated: Use Condition_MatchCondition.ProtoReflect.Descriptor instead. func (*Condition_MatchCondition) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{83, 0} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{87, 0} } func (x *Condition_MatchCondition) GetEq() *structpb.Value { @@ -6617,7 +6908,7 @@ type PolicyAppealConfig_DurationOptions struct { func (x *PolicyAppealConfig_DurationOptions) Reset() { *x = PolicyAppealConfig_DurationOptions{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[100] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6630,7 +6921,7 @@ func (x *PolicyAppealConfig_DurationOptions) String() string { func (*PolicyAppealConfig_DurationOptions) ProtoMessage() {} func (x *PolicyAppealConfig_DurationOptions) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[100] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[105] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6643,7 +6934,7 @@ func (x *PolicyAppealConfig_DurationOptions) ProtoReflect() protoreflect.Message // Deprecated: Use PolicyAppealConfig_DurationOptions.ProtoReflect.Descriptor instead. func (*PolicyAppealConfig_DurationOptions) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{84, 0} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{88, 0} } func (x *PolicyAppealConfig_DurationOptions) GetName() string { @@ -6674,7 +6965,7 @@ type PolicyAppealConfig_Question struct { func (x *PolicyAppealConfig_Question) Reset() { *x = PolicyAppealConfig_Question{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[101] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6687,7 +6978,7 @@ func (x *PolicyAppealConfig_Question) String() string { func (*PolicyAppealConfig_Question) ProtoMessage() {} func (x *PolicyAppealConfig_Question) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[101] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[106] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6700,7 +6991,7 @@ func (x *PolicyAppealConfig_Question) ProtoReflect() protoreflect.Message { // Deprecated: Use PolicyAppealConfig_Question.ProtoReflect.Descriptor instead. func (*PolicyAppealConfig_Question) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{84, 1} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{88, 1} } func (x *PolicyAppealConfig_Question) GetKey() string { @@ -6746,7 +7037,7 @@ type PolicyAppealConfig_MetadataSource struct { func (x *PolicyAppealConfig_MetadataSource) Reset() { *x = PolicyAppealConfig_MetadataSource{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[102] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6759,7 +7050,7 @@ func (x *PolicyAppealConfig_MetadataSource) String() string { func (*PolicyAppealConfig_MetadataSource) ProtoMessage() {} func (x *PolicyAppealConfig_MetadataSource) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[102] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[107] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6772,7 +7063,7 @@ func (x *PolicyAppealConfig_MetadataSource) ProtoReflect() protoreflect.Message // Deprecated: Use PolicyAppealConfig_MetadataSource.ProtoReflect.Descriptor instead. func (*PolicyAppealConfig_MetadataSource) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{84, 2} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{88, 2} } func (x *PolicyAppealConfig_MetadataSource) GetName() string { @@ -6828,7 +7119,7 @@ type Policy_ApprovalStep struct { func (x *Policy_ApprovalStep) Reset() { *x = Policy_ApprovalStep{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[104] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6841,7 +7132,7 @@ func (x *Policy_ApprovalStep) String() string { func (*Policy_ApprovalStep) ProtoMessage() {} func (x *Policy_ApprovalStep) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[104] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[109] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6854,7 +7145,7 @@ func (x *Policy_ApprovalStep) ProtoReflect() protoreflect.Message { // Deprecated: Use Policy_ApprovalStep.ProtoReflect.Descriptor instead. func (*Policy_ApprovalStep) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{85, 0} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{89, 0} } func (x *Policy_ApprovalStep) GetName() string { @@ -6925,7 +7216,7 @@ type Policy_Requirement struct { func (x *Policy_Requirement) Reset() { *x = Policy_Requirement{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[106] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6938,7 +7229,7 @@ func (x *Policy_Requirement) String() string { func (*Policy_Requirement) ProtoMessage() {} func (x *Policy_Requirement) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[106] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[111] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6951,7 +7242,7 @@ func (x *Policy_Requirement) ProtoReflect() protoreflect.Message { // Deprecated: Use Policy_Requirement.ProtoReflect.Descriptor instead. func (*Policy_Requirement) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{85, 2} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{89, 2} } func (x *Policy_Requirement) GetOn() *Policy_Requirement_RequirementTrigger { @@ -6981,7 +7272,7 @@ type Policy_IAM struct { func (x *Policy_IAM) Reset() { *x = Policy_IAM{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[107] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6994,7 +7285,7 @@ func (x *Policy_IAM) String() string { func (*Policy_IAM) ProtoMessage() {} func (x *Policy_IAM) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[107] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[112] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7007,7 +7298,7 @@ func (x *Policy_IAM) ProtoReflect() protoreflect.Message { // Deprecated: Use Policy_IAM.ProtoReflect.Descriptor instead. func (*Policy_IAM) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{85, 3} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{89, 3} } func (x *Policy_IAM) GetProvider() string { @@ -7048,7 +7339,7 @@ type Policy_Requirement_RequirementTrigger struct { func (x *Policy_Requirement_RequirementTrigger) Reset() { *x = Policy_Requirement_RequirementTrigger{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[108] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7061,7 +7352,7 @@ func (x *Policy_Requirement_RequirementTrigger) String() string { func (*Policy_Requirement_RequirementTrigger) ProtoMessage() {} func (x *Policy_Requirement_RequirementTrigger) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[108] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[113] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7074,7 +7365,7 @@ func (x *Policy_Requirement_RequirementTrigger) ProtoReflect() protoreflect.Mess // Deprecated: Use Policy_Requirement_RequirementTrigger.ProtoReflect.Descriptor instead. func (*Policy_Requirement_RequirementTrigger) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{85, 2, 0} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{89, 2, 0} } func (x *Policy_Requirement_RequirementTrigger) GetProviderType() string { @@ -7140,7 +7431,7 @@ type Policy_Requirement_AdditionalAppeal struct { func (x *Policy_Requirement_AdditionalAppeal) Reset() { *x = Policy_Requirement_AdditionalAppeal{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[109] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7153,7 +7444,7 @@ func (x *Policy_Requirement_AdditionalAppeal) String() string { func (*Policy_Requirement_AdditionalAppeal) ProtoMessage() {} func (x *Policy_Requirement_AdditionalAppeal) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[109] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[114] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7166,7 +7457,7 @@ func (x *Policy_Requirement_AdditionalAppeal) ProtoReflect() protoreflect.Messag // Deprecated: Use Policy_Requirement_AdditionalAppeal.ProtoReflect.Descriptor instead. func (*Policy_Requirement_AdditionalAppeal) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{85, 2, 1} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{89, 2, 1} } func (x *Policy_Requirement_AdditionalAppeal) GetResource() *Policy_Requirement_AdditionalAppeal_ResourceIdentifier { @@ -7212,7 +7503,7 @@ type Policy_Requirement_AdditionalAppeal_ResourceIdentifier struct { func (x *Policy_Requirement_AdditionalAppeal_ResourceIdentifier) Reset() { *x = Policy_Requirement_AdditionalAppeal_ResourceIdentifier{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[110] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7225,7 +7516,7 @@ func (x *Policy_Requirement_AdditionalAppeal_ResourceIdentifier) String() string func (*Policy_Requirement_AdditionalAppeal_ResourceIdentifier) ProtoMessage() {} func (x *Policy_Requirement_AdditionalAppeal_ResourceIdentifier) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[110] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[115] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7238,7 +7529,7 @@ func (x *Policy_Requirement_AdditionalAppeal_ResourceIdentifier) ProtoReflect() // Deprecated: Use Policy_Requirement_AdditionalAppeal_ResourceIdentifier.ProtoReflect.Descriptor instead. func (*Policy_Requirement_AdditionalAppeal_ResourceIdentifier) Descriptor() ([]byte, []int) { - return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{85, 2, 1, 0} + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{89, 2, 1, 0} } func (x *Policy_Requirement_AdditionalAppeal_ResourceIdentifier) GetProviderType() string { @@ -7680,1137 +7971,1198 @@ var file_gotocompany_guardian_v1beta1_guardian_proto_rawDesc = []byte{ 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x07, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x22, 0xb5, 0x02, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, - 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x04, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, - 0x00, 0x40, 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x21, 0x0a, 0x06, 0x6f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, - 0x28, 0x00, 0x40, 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x0f, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, - 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x65, 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x71, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x01, 0x71, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, - 0x77, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x09, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, - 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, - 0x6c, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xd0, 0x02, 0x0a, 0x14, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x12, 0x1d, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, - 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x21, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, - 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x70, 0x70, 0x65, - 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, - 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x71, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x71, 0x12, - 0x23, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x73, 0x0a, 0x15, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, - 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x22, 0xda, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x52, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x1a, 0x38, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, - 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x56, 0x0a, - 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, + 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x22, 0x53, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x70, 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x49, + 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x22, 0x65, 0x0a, 0x1a, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x08, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, + 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x22, 0x4d, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, + 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, + 0x64, 0x79, 0x22, 0x64, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x65, + 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x45, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xb5, 0x02, 0x0a, 0x18, 0x4c, 0x69, 0x73, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, + 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x1d, 0x0a, 0x0a, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x04, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, + 0x28, 0x00, 0x40, 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x21, 0x0a, 0x06, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, + 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x27, 0x0a, + 0x0f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x71, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x01, 0x71, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, + 0x22, 0x77, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, + 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x61, 0x6c, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xd0, 0x02, 0x0a, 0x14, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x12, 0x19, 0x0a, + 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x12, 0x1d, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, + 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x21, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, + 0x01, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x70, 0x70, + 0x65, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x65, 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x71, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x71, + 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x73, 0x0a, 0x15, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, + 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x52, 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x22, 0xda, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x52, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x38, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, + 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x56, + 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x65, + 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x06, + 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x22, 0x68, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, + 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x22, 0x53, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x06, 0x61, - 0x70, 0x70, 0x65, 0x61, 0x6c, 0x22, 0x68, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x72, - 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x61, - 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x72, - 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, - 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, - 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, - 0x53, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x06, 0x61, 0x70, - 0x70, 0x65, 0x61, 0x6c, 0x22, 0x6b, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, - 0x09, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, - 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, - 0x6c, 0x22, 0x56, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x61, - 0x70, 0x70, 0x65, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, - 0x6c, 0x52, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x22, 0xe6, 0x03, 0x0a, 0x11, 0x4c, 0x69, - 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x55, 0x72, 0x6e, 0x73, - 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x72, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, - 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, - 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, - 0x79, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x0b, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, - 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x04, 0x73, 0x69, 0x7a, - 0x65, 0x12, 0x21, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x06, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x12, 0x0c, 0x0a, 0x01, 0x71, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x01, 0x71, 0x22, 0x67, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x06, 0x67, - 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xb5, 0x03, 0x0a, 0x15, - 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, - 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, - 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, - 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x72, - 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x55, 0x72, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x23, 0x0a, - 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x73, 0x18, 0x08, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x72, - 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x5f, 0x62, 0x79, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x42, 0x79, 0x12, 0x1d, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x70, 0x70, 0x65, 0x61, 0x6c, 0x22, 0x6b, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, + 0x0a, 0x09, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, + 0x69, 0x6c, 0x22, 0x56, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, + 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, + 0x61, 0x6c, 0x52, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x22, 0xe6, 0x03, 0x0a, 0x11, 0x4c, + 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x23, 0x0a, + 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6e, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x55, 0x72, 0x6e, + 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x72, 0x6e, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, + 0x6c, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, + 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x42, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x0b, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x04, 0x73, 0x69, - 0x7a, 0x65, 0x12, 0x21, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x0c, 0x20, 0x01, + 0x7a, 0x65, 0x12, 0x21, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x06, 0x6f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x0c, 0x0a, 0x01, 0x71, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x01, 0x71, 0x22, 0x6b, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, - 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x52, 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x22, 0x16, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2d, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x21, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x47, 0x72, - 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4d, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, - 0x0a, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x52, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x0a, 0x12, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x0c, 0x0a, 0x01, 0x71, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x01, 0x71, 0x22, 0x67, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x67, 0x72, 0x61, + 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x06, + 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xb5, 0x03, 0x0a, + 0x15, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, + 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x75, + 0x72, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x55, 0x72, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x23, + 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x73, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, + 0x72, 0x6e, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x42, 0x79, 0x12, 0x1d, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x04, 0x73, + 0x69, 0x7a, 0x65, 0x12, 0x21, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x0d, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x2a, 0x04, 0x28, 0x00, 0x40, 0x01, 0x52, 0x06, + 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x0c, 0x0a, 0x01, 0x71, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x01, 0x71, 0x22, 0x6b, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, + 0x0a, 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x72, + 0x61, 0x6e, 0x74, 0x52, 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x22, 0x16, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2d, 0x0a, 0x15, 0x4c, 0x69, 0x73, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x21, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4d, 0x0a, 0x10, 0x47, + 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x39, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x72, + 0x61, 0x6e, 0x74, 0x52, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x22, 0x3a, 0x0a, 0x12, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x22, 0x50, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, + 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x52, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x22, 0x3c, 0x0a, 0x12, 0x52, 0x65, 0x76, 0x6f, + 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x13, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, + 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x52, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x22, 0xe6, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x76, + 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, + 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x55, 0x72, 0x6e, 0x73, 0x12, 0x25, 0x0a, + 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x75, 0x72, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x72, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, + 0x6e, 0x22, 0x53, 0x0a, 0x14, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x67, 0x72, 0x61, + 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x06, + 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x22, 0x50, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x05, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x52, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x22, 0x3c, 0x0a, 0x12, 0x52, 0x65, 0x76, 0x6f, 0x6b, - 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x13, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x05, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x52, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x22, 0xe6, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x76, 0x6f, - 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x73, - 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x55, 0x72, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x75, 0x72, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x55, 0x72, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x22, 0x53, 0x0a, 0x14, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x06, 0x67, - 0x72, 0x61, 0x6e, 0x74, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x38, - 0x0a, 0x0c, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x86, 0x08, 0x0a, 0x0e, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, - 0x6e, 0x12, 0x50, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x51, 0x0a, - 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x70, 0x70, 0x65, - 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, - 0x12, 0x59, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x61, - 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, - 0x5e, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x1a, - 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x8c, 0x01, 0x0a, 0x0c, 0x41, - 0x70, 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x34, 0x0a, 0x16, 0x61, - 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x50, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x12, 0x46, 0x0a, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x45, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x1a, 0xba, 0x01, 0x0a, 0x0e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, + 0x38, 0x0a, 0x0c, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x86, 0x08, 0x0a, 0x0e, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x42, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x12, 0x38, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x79, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, - 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0xfc, 0x01, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x75, 0x72, 0x6e, 0x12, 0x44, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, + 0x72, 0x6e, 0x12, 0x50, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x51, + 0x0a, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x70, 0x70, + 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, + 0x6c, 0x12, 0x59, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x22, 0x49, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0xa9, 0x01, 0x0a, 0x09, - 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, - 0x4c, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, - 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x1a, 0x38, 0x0a, - 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x26, 0x0a, 0x02, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x02, 0x65, 0x71, 0x22, 0xab, 0x08, 0x0a, 0x12, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6b, - 0x0a, 0x10, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x70, - 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0f, 0x64, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x61, - 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x6e, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x6c, 0x66, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x6e, 0x42, 0x65, 0x68, - 0x61, 0x6c, 0x66, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x65, 0x72, - 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x65, 0x72, 0x6d, 0x61, 0x6e, - 0x65, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x46, 0x0a, 0x20, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x1c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x12, 0x57, 0x0a, 0x09, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x69, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x65, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, + 0x12, 0x5e, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x08, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x09, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x1a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x12, 0x70, 0x0a, - 0x10, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x70, 0x70, - 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, - 0x3b, 0x0a, 0x0f, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x76, 0x0a, 0x08, - 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xb8, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 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, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, - 0x83, 0x01, 0x0a, 0x14, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x55, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x74, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x8c, 0x01, 0x0a, 0x0c, + 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x34, 0x0a, 0x16, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x5f, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x50, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x12, 0x46, 0x0a, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x1a, 0xba, 0x01, 0x0a, 0x0e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x42, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x38, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, + 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x79, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0xfc, 0x01, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x44, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x39, 0x0a, 0x0a, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x22, 0x49, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0xa9, 0x01, 0x0a, + 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x12, 0x4c, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x36, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x1a, 0x38, + 0x0a, 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x26, 0x0a, 0x02, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x02, 0x65, 0x71, 0x22, 0xab, 0x08, 0x0a, 0x12, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x6b, 0x0a, 0x10, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, - 0x70, 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf4, 0x0f, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 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, 0x47, 0x0a, 0x05, - 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x53, 0x74, 0x65, 0x70, 0x52, 0x05, - 0x73, 0x74, 0x65, 0x70, 0x73, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x70, 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0f, 0x64, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x6e, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x6c, 0x66, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x6e, 0x42, 0x65, + 0x68, 0x61, 0x6c, 0x66, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x70, 0x65, + 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x50, 0x65, 0x72, 0x6d, 0x61, + 0x6e, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x46, 0x0a, 0x20, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x49, 0x6e, 0x12, 0x57, 0x0a, 0x09, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, - 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x54, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x03, 0x69, - 0x61, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x70, 0x70, 0x65, 0x61, + 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x09, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x1a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x12, 0x70, + 0x0a, 0x10, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x49, - 0x41, 0x4d, 0x52, 0x03, 0x69, 0x61, 0x6d, 0x12, 0x48, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, - 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x70, 0x70, - 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, - 0x6c, 0x1a, 0xff, 0x01, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x53, 0x74, - 0x65, 0x70, 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, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x77, - 0x68, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x77, 0x68, 0x65, 0x6e, 0x12, - 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x61, - 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x5f, 0x69, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x49, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, - 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x6a, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x9e, - 0x07, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x53, - 0x0a, 0x02, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x6f, 0x74, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x70, + 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x1a, 0x3b, 0x0a, 0x0f, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x76, 0x0a, + 0x08, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xb8, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 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, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x1a, 0x83, 0x01, 0x0a, 0x14, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x55, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, - 0x02, 0x6f, 0x6e, 0x12, 0x5b, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x07, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, - 0x1a, 0xa1, 0x02, 0x0a, 0x12, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x55, 0x72, 0x6e, 0x12, - 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x55, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x27, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0xb8, 0x03, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x70, 0x0a, 0x08, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x54, 0x2e, 0x67, 0x6f, + 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf4, 0x0f, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 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, 0x47, 0x0a, + 0x05, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x53, 0x74, 0x65, 0x70, 0x52, + 0x05, 0x73, 0x74, 0x65, 0x70, 0x73, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x54, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0c, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x03, + 0x69, 0x61, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x49, 0x41, 0x4d, 0x52, 0x03, 0x69, 0x61, 0x6d, 0x12, 0x48, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x65, + 0x61, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x70, + 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x61, 0x70, 0x70, 0x65, + 0x61, 0x6c, 0x1a, 0xff, 0x01, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x53, + 0x74, 0x65, 0x70, 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, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x77, 0x68, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x77, 0x68, 0x65, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x1d, 0x0a, 0x0a, + 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x5f, 0x69, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x49, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, + 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x6a, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x9e, 0x07, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x53, 0x0a, 0x02, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, - 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, - 0x45, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, + 0x52, 0x02, 0x6f, 0x6e, 0x12, 0x5b, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x07, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, + 0x73, 0x1a, 0xa1, 0x02, 0x0a, 0x12, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, + 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x55, 0x72, 0x6e, + 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x47, 0x0a, 0x0a, + 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x92, 0x01, 0x0a, 0x12, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x55, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, - 0x03, 0x75, 0x72, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x1a, - 0xda, 0x01, 0x0a, 0x03, 0x49, 0x41, 0x4d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x4c, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0xb8, 0x03, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x70, 0x0a, 0x08, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x54, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x2e, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, + 0x12, 0x45, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x92, 0x01, 0x0a, 0x12, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x55, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x1a, 0xda, 0x01, 0x0a, 0x03, 0x49, 0x41, 0x4d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4c, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x49, 0x41, 0x4d, 0x2e, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x1a, 0x39, 0x0a, 0x0b, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x70, 0x0a, + 0x0d, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x43, + 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, + 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0xcc, 0x07, 0x0a, 0x06, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x45, 0x0a, 0x07, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, + 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, + 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x42, 0x0a, 0x08, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x44, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x09, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x31, 0x0a, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x21, + 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, + 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, + 0x12, 0x30, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x14, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x6f, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x39, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x18, 0x16, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x49, 0x41, 0x4d, 0x2e, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x1a, 0x39, 0x0a, 0x0b, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x61, 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x17, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x70, 0x0a, 0x0d, - 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x43, 0x0a, - 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xcc, - 0x07, 0x0a, 0x06, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x0e, + 0x10, 0x0f, 0x4a, 0x04, 0x08, 0x0f, 0x10, 0x10, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, 0x22, 0xa7, + 0x03, 0x0a, 0x08, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x45, 0x0a, 0x07, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x42, 0x0a, 0x08, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, + 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, + 0x0a, 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x06, + 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x44, - 0x0a, 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x61, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, - 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x31, 0x0a, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x21, 0x0a, - 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x12, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x13, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x12, - 0x30, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, - 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x15, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x39, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x18, 0x16, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, + 0x61, 0x6c, 0x52, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0xe5, 0x01, 0x0a, 0x0d, 0x41, 0x70, 0x70, + 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, + 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, + 0x70, 0x70, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x22, 0xeb, 0x04, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, + 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x75, + 0x72, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x55, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x31, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x12, 0x4a, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x17, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x0e, 0x10, - 0x0f, 0x4a, 0x04, 0x08, 0x0f, 0x10, 0x10, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, 0x22, 0xa7, 0x03, - 0x0a, 0x08, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, - 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x06, 0x61, - 0x70, 0x70, 0x65, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, - 0x6c, 0x52, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, + 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, + 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x12, 0x42, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x0d, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, + 0x64, 0x72, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x75, + 0x72, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, + 0x55, 0x72, 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbf, + 0x06, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x65, + 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x43, 0x0a, 0x0f, 0x65, 0x78, 0x70, + 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, + 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1b, + 0x0a, 0x09, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, + 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x42, 0x79, 0x12, 0x39, 0x0a, 0x0a, 0x72, 0x65, + 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x72, 0x65, 0x76, 0x6f, + 0x6b, 0x65, 0x64, 0x41, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x5f, + 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, + 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x61, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, - 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0xeb, 0x04, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x55, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, - 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x4a, 0x0a, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x69, - 0x73, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x09, 0x69, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, - 0x72, 0x65, 0x6e, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x67, - 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x55, 0x72, 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbf, 0x06, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, + 0x42, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x18, 0x11, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, + 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, + 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x61, + 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x13, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x12, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x22, 0xf7, 0x04, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, - 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x20, - 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x43, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, - 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, - 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, - 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x5f, 0x62, 0x79, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x42, - 0x79, 0x12, 0x39, 0x0a, 0x0a, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x09, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x41, 0x74, 0x12, 0x23, 0x0a, 0x0d, - 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, - 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x42, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x61, 0x70, - 0x70, 0x65, 0x61, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, - 0x52, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x70, - 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x69, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x69, 0x6e, - 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x10, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x22, 0xf7, 0x04, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, - 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, - 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x0a, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x42, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x08, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x30, - 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x49, 0x64, - 0x12, 0x2f, 0x0a, 0x13, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x32, 0x97, 0x2f, 0x0a, 0x0f, 0x47, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x94, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x93, 0x01, 0x0a, - 0x0b, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x67, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, - 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x42, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x41, + 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x13, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x50, + 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0x8f, 0x32, 0x0a, 0x0f, 0x47, + 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x94, + 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, + 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x93, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, - 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x10, + 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, + 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0xdd, 0x01, 0x0a, 0x0e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x33, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x60, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5a, - 0x3a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5a, 0x37, 0x3a, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x1a, 0x2d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x74, - 0x79, 0x70, 0x65, 0x7d, 0x2f, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x75, 0x72, 0x6e, - 0x7d, 0x1a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9c, 0x01, 0x0a, 0x0e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x33, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, - 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xad, 0x01, 0x0a, 0x09, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, - 0x12, 0x37, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0xa8, 0x01, 0x0a, 0x10, 0x49, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x35, - 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x49, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x69, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x12, 0x94, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, + 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x73, 0x12, 0xdd, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x98, 0x01, 0x0a, 0x0e, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x33, - 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x90, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x09, 0x47, 0x65, - 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, - 0x12, 0x29, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x7b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0x98, 0x01, 0x0a, 0x0c, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x31, 0x2e, 0x67, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x06, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x9d, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, + 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x60, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5a, 0x3a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x5a, 0x37, 0x3a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x2d, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, + 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x2f, 0x7b, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x75, 0x72, 0x6e, 0x7d, 0x1a, 0x17, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x12, 0x9c, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, + 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x12, 0xad, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, + 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, + 0x65, 0x73, 0x12, 0xa8, 0x01, 0x0a, 0x10, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x16, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xcc, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, - 0x39, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x49, 0x6d, + 0x70, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, + 0x2a, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x94, 0x01, + 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x30, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x67, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x12, 0x35, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x7b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x94, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, + 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x98, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x93, 0x01, 0x0a, - 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x30, 0x2e, 0x67, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, - 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x7d, 0x12, 0xa6, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, + 0x90, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, + 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, + 0x11, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, + 0x65, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x12, 0x29, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0x98, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x1a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9c, 0x01, 0x0a, 0x0e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x33, - 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x11, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, + 0x9d, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x19, 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x0f, 0x4c, - 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x12, 0x34, - 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x65, - 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, - 0x2f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, + 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, + 0xcc, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x72, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x39, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x65, - 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, - 0x70, 0x65, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x12, 0x8b, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x41, - 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x0c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, - 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x70, 0x70, 0x65, - 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, - 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x1a, 0x1c, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x12, 0x92, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, - 0x70, 0x65, 0x61, 0x6c, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, - 0x65, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x12, 0xa3, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x36, - 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x94, - 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x12, 0x35, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x7d, 0x2f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x94, + 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x72, - 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x12, 0xbc, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x3a, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x2f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, - 0x70, 0x65, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xbd, 0x01, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x72, - 0x6f, 0x76, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x43, 0x3a, 0x01, 0x2a, 0x22, 0x3e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, - 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x65, 0x72, 0x73, 0x12, 0xcb, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, - 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x93, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa6, 0x01, 0x0a, 0x0e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x33, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x23, 0x3a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0x17, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, + 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9c, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, - 0x72, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x2a, 0x46, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, - 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, - 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x65, 0x6d, 0x61, 0x69, - 0x6c, 0x7d, 0x12, 0x88, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x73, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, + 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, + 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, + 0x73, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, + 0x12, 0x8b, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x2e, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9b, + 0x01, 0x0a, 0x0c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, + 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, + 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x97, 0x01, - 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, - 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x1a, 0x1c, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x92, 0x01, 0x0a, + 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x31, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, + 0x10, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, + 0x73, 0x12, 0xb6, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, + 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x37, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x65, + 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x38, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, + 0x70, 0x65, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0xbc, 0x01, 0x0a, 0x13, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x38, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x3a, + 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, + 0x65, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0xa3, 0x01, 0x0a, 0x11, 0x4c, 0x69, + 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x12, + 0x36, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x12, + 0x94, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x73, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, - 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, + 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x12, 0xbc, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x72, - 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x93, - 0x01, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x30, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x32, 0x14, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9a, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x3a, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, + 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xbd, 0x01, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x43, 0x3a, 0x01, 0x2a, 0x22, 0x3e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x65, 0x72, 0x73, 0x12, 0xcb, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x2a, 0x46, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, + 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x65, 0x6d, 0x61, + 0x69, 0x6c, 0x7d, 0x12, 0x88, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x73, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x97, + 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x73, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x20, 0x3a, 0x01, 0x2a, 0x1a, 0x1b, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, - 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x76, 0x6f, 0x6b, - 0x65, 0x12, 0x98, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, + 0x65, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, + 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, + 0x93, 0x01, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, + 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x32, + 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9a, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1b, 0x3a, 0x01, 0x2a, 0x1a, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, - 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0xbc, 0x01, 0x0a, - 0x18, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x46, 0x72, 0x6f, - 0x6d, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x3d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x1a, 0x1b, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x76, 0x6f, + 0x6b, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x1a, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0xbc, 0x01, + 0x0a, 0x18, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x46, 0x72, + 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x3d, 0x2e, 0x67, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x72, - 0x61, 0x6e, 0x74, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, - 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, - 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x48, 0x5a, 0x37, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x74, 0x6f, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x92, 0x41, 0x0c, 0x12, 0x07, 0x32, 0x05, 0x30, 0x2e, 0x31, - 0x2e, 0x30, 0x2a, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, + 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x48, 0x5a, 0x37, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x74, 0x6f, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x92, 0x41, 0x0c, 0x12, 0x07, 0x32, 0x05, 0x30, 0x2e, + 0x31, 0x2e, 0x30, 0x2a, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -8825,7 +9177,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP() []byte { return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescData } -var file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes = make([]protoimpl.MessageInfo, 114) +var file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes = make([]protoimpl.MessageInfo, 119) var file_gotocompany_guardian_v1beta1_guardian_proto_goTypes = []interface{}{ (*ListProvidersRequest)(nil), // 0: gotocompany.guardian.v1beta1.ListProvidersRequest (*ListProvidersResponse)(nil), // 1: gotocompany.guardian.v1beta1.ListProvidersResponse @@ -8881,263 +9233,276 @@ var file_gotocompany_guardian_v1beta1_guardian_proto_goTypes = []interface{}{ (*RevokeAppealsResponse)(nil), // 51: gotocompany.guardian.v1beta1.RevokeAppealsResponse (*CreateAppealRequest)(nil), // 52: gotocompany.guardian.v1beta1.CreateAppealRequest (*CreateAppealResponse)(nil), // 53: gotocompany.guardian.v1beta1.CreateAppealResponse - (*ListUserApprovalsRequest)(nil), // 54: gotocompany.guardian.v1beta1.ListUserApprovalsRequest - (*ListUserApprovalsResponse)(nil), // 55: gotocompany.guardian.v1beta1.ListUserApprovalsResponse - (*ListApprovalsRequest)(nil), // 56: gotocompany.guardian.v1beta1.ListApprovalsRequest - (*ListApprovalsResponse)(nil), // 57: gotocompany.guardian.v1beta1.ListApprovalsResponse - (*UpdateApprovalRequest)(nil), // 58: gotocompany.guardian.v1beta1.UpdateApprovalRequest - (*UpdateApprovalResponse)(nil), // 59: gotocompany.guardian.v1beta1.UpdateApprovalResponse - (*AddApproverRequest)(nil), // 60: gotocompany.guardian.v1beta1.AddApproverRequest - (*AddApproverResponse)(nil), // 61: gotocompany.guardian.v1beta1.AddApproverResponse - (*DeleteApproverRequest)(nil), // 62: gotocompany.guardian.v1beta1.DeleteApproverRequest - (*DeleteApproverResponse)(nil), // 63: gotocompany.guardian.v1beta1.DeleteApproverResponse - (*ListGrantsRequest)(nil), // 64: gotocompany.guardian.v1beta1.ListGrantsRequest - (*ListGrantsResponse)(nil), // 65: gotocompany.guardian.v1beta1.ListGrantsResponse - (*ListUserGrantsRequest)(nil), // 66: gotocompany.guardian.v1beta1.ListUserGrantsRequest - (*ListUserGrantsResponse)(nil), // 67: gotocompany.guardian.v1beta1.ListUserGrantsResponse - (*ListUserRolesRequest)(nil), // 68: gotocompany.guardian.v1beta1.ListUserRolesRequest - (*ListUserRolesResponse)(nil), // 69: gotocompany.guardian.v1beta1.ListUserRolesResponse - (*GetGrantRequest)(nil), // 70: gotocompany.guardian.v1beta1.GetGrantRequest - (*GetGrantResponse)(nil), // 71: gotocompany.guardian.v1beta1.GetGrantResponse - (*UpdateGrantRequest)(nil), // 72: gotocompany.guardian.v1beta1.UpdateGrantRequest - (*UpdateGrantResponse)(nil), // 73: gotocompany.guardian.v1beta1.UpdateGrantResponse - (*RevokeGrantRequest)(nil), // 74: gotocompany.guardian.v1beta1.RevokeGrantRequest - (*RevokeGrantResponse)(nil), // 75: gotocompany.guardian.v1beta1.RevokeGrantResponse - (*RevokeGrantsRequest)(nil), // 76: gotocompany.guardian.v1beta1.RevokeGrantsRequest - (*RevokeGrantsResponse)(nil), // 77: gotocompany.guardian.v1beta1.RevokeGrantsResponse - (*Role)(nil), // 78: gotocompany.guardian.v1beta1.Role - (*PolicyConfig)(nil), // 79: gotocompany.guardian.v1beta1.PolicyConfig - (*ProviderConfig)(nil), // 80: gotocompany.guardian.v1beta1.ProviderConfig - (*Provider)(nil), // 81: gotocompany.guardian.v1beta1.Provider - (*ProviderType)(nil), // 82: gotocompany.guardian.v1beta1.ProviderType - (*Condition)(nil), // 83: gotocompany.guardian.v1beta1.Condition - (*PolicyAppealConfig)(nil), // 84: gotocompany.guardian.v1beta1.PolicyAppealConfig - (*Policy)(nil), // 85: gotocompany.guardian.v1beta1.Policy - (*AppealOptions)(nil), // 86: gotocompany.guardian.v1beta1.AppealOptions - (*Appeal)(nil), // 87: gotocompany.guardian.v1beta1.Appeal - (*Approval)(nil), // 88: gotocompany.guardian.v1beta1.Approval - (*Resource)(nil), // 89: gotocompany.guardian.v1beta1.Resource - (*Grant)(nil), // 90: gotocompany.guardian.v1beta1.Grant - (*ProviderActivity)(nil), // 91: gotocompany.guardian.v1beta1.ProviderActivity - (*RevokeAppealRequest_Reason)(nil), // 92: gotocompany.guardian.v1beta1.RevokeAppealRequest.Reason - (*CreateAppealRequest_Resource)(nil), // 93: gotocompany.guardian.v1beta1.CreateAppealRequest.Resource - (*UpdateApprovalRequest_Action)(nil), // 94: gotocompany.guardian.v1beta1.UpdateApprovalRequest.Action - nil, // 95: gotocompany.guardian.v1beta1.ProviderConfig.LabelsEntry - (*ProviderConfig_AppealConfig)(nil), // 96: gotocompany.guardian.v1beta1.ProviderConfig.AppealConfig - (*ProviderConfig_ResourceConfig)(nil), // 97: gotocompany.guardian.v1beta1.ProviderConfig.ResourceConfig - (*ProviderConfig_ProviderParameter)(nil), // 98: gotocompany.guardian.v1beta1.ProviderConfig.ProviderParameter - (*Condition_MatchCondition)(nil), // 99: gotocompany.guardian.v1beta1.Condition.MatchCondition - (*PolicyAppealConfig_DurationOptions)(nil), // 100: gotocompany.guardian.v1beta1.PolicyAppealConfig.DurationOptions - (*PolicyAppealConfig_Question)(nil), // 101: gotocompany.guardian.v1beta1.PolicyAppealConfig.Question - (*PolicyAppealConfig_MetadataSource)(nil), // 102: gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSource - nil, // 103: gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSourcesEntry - (*Policy_ApprovalStep)(nil), // 104: gotocompany.guardian.v1beta1.Policy.ApprovalStep - nil, // 105: gotocompany.guardian.v1beta1.Policy.LabelsEntry - (*Policy_Requirement)(nil), // 106: gotocompany.guardian.v1beta1.Policy.Requirement - (*Policy_IAM)(nil), // 107: gotocompany.guardian.v1beta1.Policy.IAM - (*Policy_Requirement_RequirementTrigger)(nil), // 108: gotocompany.guardian.v1beta1.Policy.Requirement.RequirementTrigger - (*Policy_Requirement_AdditionalAppeal)(nil), // 109: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal - (*Policy_Requirement_AdditionalAppeal_ResourceIdentifier)(nil), // 110: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.ResourceIdentifier - nil, // 111: gotocompany.guardian.v1beta1.Policy.IAM.SchemaEntry - nil, // 112: gotocompany.guardian.v1beta1.Appeal.LabelsEntry - nil, // 113: gotocompany.guardian.v1beta1.Resource.LabelsEntry - (*timestamppb.Timestamp)(nil), // 114: google.protobuf.Timestamp - (*structpb.Value)(nil), // 115: google.protobuf.Value - (*structpb.Struct)(nil), // 116: google.protobuf.Struct + (*ListAppealCommentsRequest)(nil), // 54: gotocompany.guardian.v1beta1.ListAppealCommentsRequest + (*ListAppealCommentsResponse)(nil), // 55: gotocompany.guardian.v1beta1.ListAppealCommentsResponse + (*CreateAppealCommentRequest)(nil), // 56: gotocompany.guardian.v1beta1.CreateAppealCommentRequest + (*CreateAppealCommentResponse)(nil), // 57: gotocompany.guardian.v1beta1.CreateAppealCommentResponse + (*ListUserApprovalsRequest)(nil), // 58: gotocompany.guardian.v1beta1.ListUserApprovalsRequest + (*ListUserApprovalsResponse)(nil), // 59: gotocompany.guardian.v1beta1.ListUserApprovalsResponse + (*ListApprovalsRequest)(nil), // 60: gotocompany.guardian.v1beta1.ListApprovalsRequest + (*ListApprovalsResponse)(nil), // 61: gotocompany.guardian.v1beta1.ListApprovalsResponse + (*UpdateApprovalRequest)(nil), // 62: gotocompany.guardian.v1beta1.UpdateApprovalRequest + (*UpdateApprovalResponse)(nil), // 63: gotocompany.guardian.v1beta1.UpdateApprovalResponse + (*AddApproverRequest)(nil), // 64: gotocompany.guardian.v1beta1.AddApproverRequest + (*AddApproverResponse)(nil), // 65: gotocompany.guardian.v1beta1.AddApproverResponse + (*DeleteApproverRequest)(nil), // 66: gotocompany.guardian.v1beta1.DeleteApproverRequest + (*DeleteApproverResponse)(nil), // 67: gotocompany.guardian.v1beta1.DeleteApproverResponse + (*ListGrantsRequest)(nil), // 68: gotocompany.guardian.v1beta1.ListGrantsRequest + (*ListGrantsResponse)(nil), // 69: gotocompany.guardian.v1beta1.ListGrantsResponse + (*ListUserGrantsRequest)(nil), // 70: gotocompany.guardian.v1beta1.ListUserGrantsRequest + (*ListUserGrantsResponse)(nil), // 71: gotocompany.guardian.v1beta1.ListUserGrantsResponse + (*ListUserRolesRequest)(nil), // 72: gotocompany.guardian.v1beta1.ListUserRolesRequest + (*ListUserRolesResponse)(nil), // 73: gotocompany.guardian.v1beta1.ListUserRolesResponse + (*GetGrantRequest)(nil), // 74: gotocompany.guardian.v1beta1.GetGrantRequest + (*GetGrantResponse)(nil), // 75: gotocompany.guardian.v1beta1.GetGrantResponse + (*UpdateGrantRequest)(nil), // 76: gotocompany.guardian.v1beta1.UpdateGrantRequest + (*UpdateGrantResponse)(nil), // 77: gotocompany.guardian.v1beta1.UpdateGrantResponse + (*RevokeGrantRequest)(nil), // 78: gotocompany.guardian.v1beta1.RevokeGrantRequest + (*RevokeGrantResponse)(nil), // 79: gotocompany.guardian.v1beta1.RevokeGrantResponse + (*RevokeGrantsRequest)(nil), // 80: gotocompany.guardian.v1beta1.RevokeGrantsRequest + (*RevokeGrantsResponse)(nil), // 81: gotocompany.guardian.v1beta1.RevokeGrantsResponse + (*Role)(nil), // 82: gotocompany.guardian.v1beta1.Role + (*PolicyConfig)(nil), // 83: gotocompany.guardian.v1beta1.PolicyConfig + (*ProviderConfig)(nil), // 84: gotocompany.guardian.v1beta1.ProviderConfig + (*Provider)(nil), // 85: gotocompany.guardian.v1beta1.Provider + (*ProviderType)(nil), // 86: gotocompany.guardian.v1beta1.ProviderType + (*Condition)(nil), // 87: gotocompany.guardian.v1beta1.Condition + (*PolicyAppealConfig)(nil), // 88: gotocompany.guardian.v1beta1.PolicyAppealConfig + (*Policy)(nil), // 89: gotocompany.guardian.v1beta1.Policy + (*AppealOptions)(nil), // 90: gotocompany.guardian.v1beta1.AppealOptions + (*Appeal)(nil), // 91: gotocompany.guardian.v1beta1.Appeal + (*Approval)(nil), // 92: gotocompany.guardian.v1beta1.Approval + (*AppealComment)(nil), // 93: gotocompany.guardian.v1beta1.AppealComment + (*Resource)(nil), // 94: gotocompany.guardian.v1beta1.Resource + (*Grant)(nil), // 95: gotocompany.guardian.v1beta1.Grant + (*ProviderActivity)(nil), // 96: gotocompany.guardian.v1beta1.ProviderActivity + (*RevokeAppealRequest_Reason)(nil), // 97: gotocompany.guardian.v1beta1.RevokeAppealRequest.Reason + (*CreateAppealRequest_Resource)(nil), // 98: gotocompany.guardian.v1beta1.CreateAppealRequest.Resource + (*UpdateApprovalRequest_Action)(nil), // 99: gotocompany.guardian.v1beta1.UpdateApprovalRequest.Action + nil, // 100: gotocompany.guardian.v1beta1.ProviderConfig.LabelsEntry + (*ProviderConfig_AppealConfig)(nil), // 101: gotocompany.guardian.v1beta1.ProviderConfig.AppealConfig + (*ProviderConfig_ResourceConfig)(nil), // 102: gotocompany.guardian.v1beta1.ProviderConfig.ResourceConfig + (*ProviderConfig_ProviderParameter)(nil), // 103: gotocompany.guardian.v1beta1.ProviderConfig.ProviderParameter + (*Condition_MatchCondition)(nil), // 104: gotocompany.guardian.v1beta1.Condition.MatchCondition + (*PolicyAppealConfig_DurationOptions)(nil), // 105: gotocompany.guardian.v1beta1.PolicyAppealConfig.DurationOptions + (*PolicyAppealConfig_Question)(nil), // 106: gotocompany.guardian.v1beta1.PolicyAppealConfig.Question + (*PolicyAppealConfig_MetadataSource)(nil), // 107: gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSource + nil, // 108: gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSourcesEntry + (*Policy_ApprovalStep)(nil), // 109: gotocompany.guardian.v1beta1.Policy.ApprovalStep + nil, // 110: gotocompany.guardian.v1beta1.Policy.LabelsEntry + (*Policy_Requirement)(nil), // 111: gotocompany.guardian.v1beta1.Policy.Requirement + (*Policy_IAM)(nil), // 112: gotocompany.guardian.v1beta1.Policy.IAM + (*Policy_Requirement_RequirementTrigger)(nil), // 113: gotocompany.guardian.v1beta1.Policy.Requirement.RequirementTrigger + (*Policy_Requirement_AdditionalAppeal)(nil), // 114: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal + (*Policy_Requirement_AdditionalAppeal_ResourceIdentifier)(nil), // 115: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.ResourceIdentifier + nil, // 116: gotocompany.guardian.v1beta1.Policy.IAM.SchemaEntry + nil, // 117: gotocompany.guardian.v1beta1.Appeal.LabelsEntry + nil, // 118: gotocompany.guardian.v1beta1.Resource.LabelsEntry + (*timestamppb.Timestamp)(nil), // 119: google.protobuf.Timestamp + (*structpb.Value)(nil), // 120: google.protobuf.Value + (*structpb.Struct)(nil), // 121: google.protobuf.Struct } var file_gotocompany_guardian_v1beta1_guardian_proto_depIdxs = []int32{ - 81, // 0: gotocompany.guardian.v1beta1.ListProvidersResponse.providers:type_name -> gotocompany.guardian.v1beta1.Provider - 81, // 1: gotocompany.guardian.v1beta1.GetProviderResponse.provider:type_name -> gotocompany.guardian.v1beta1.Provider - 82, // 2: gotocompany.guardian.v1beta1.GetProviderTypesResponse.provider_types:type_name -> gotocompany.guardian.v1beta1.ProviderType - 80, // 3: gotocompany.guardian.v1beta1.CreateProviderRequest.config:type_name -> gotocompany.guardian.v1beta1.ProviderConfig - 81, // 4: gotocompany.guardian.v1beta1.CreateProviderResponse.provider:type_name -> gotocompany.guardian.v1beta1.Provider - 80, // 5: gotocompany.guardian.v1beta1.UpdateProviderRequest.config:type_name -> gotocompany.guardian.v1beta1.ProviderConfig - 81, // 6: gotocompany.guardian.v1beta1.UpdateProviderResponse.provider:type_name -> gotocompany.guardian.v1beta1.Provider - 90, // 7: gotocompany.guardian.v1beta1.ImportGrantsFromProviderResponse.grants:type_name -> gotocompany.guardian.v1beta1.Grant - 78, // 8: gotocompany.guardian.v1beta1.ListRolesResponse.roles:type_name -> gotocompany.guardian.v1beta1.Role - 114, // 9: gotocompany.guardian.v1beta1.ImportActivitiesRequest.timestamp_gte:type_name -> google.protobuf.Timestamp - 114, // 10: gotocompany.guardian.v1beta1.ImportActivitiesRequest.timestamp_lte:type_name -> google.protobuf.Timestamp - 91, // 11: gotocompany.guardian.v1beta1.ImportActivitiesResponse.activities:type_name -> gotocompany.guardian.v1beta1.ProviderActivity - 91, // 12: gotocompany.guardian.v1beta1.GetActivityResponse.activity:type_name -> gotocompany.guardian.v1beta1.ProviderActivity - 114, // 13: gotocompany.guardian.v1beta1.ListActivitiesRequest.timestamp_gte:type_name -> google.protobuf.Timestamp - 114, // 14: gotocompany.guardian.v1beta1.ListActivitiesRequest.timestamp_lte:type_name -> google.protobuf.Timestamp - 91, // 15: gotocompany.guardian.v1beta1.ListActivitiesResponse.activities:type_name -> gotocompany.guardian.v1beta1.ProviderActivity - 85, // 16: gotocompany.guardian.v1beta1.ListPoliciesResponse.policies:type_name -> gotocompany.guardian.v1beta1.Policy - 84, // 17: gotocompany.guardian.v1beta1.GetPolicyPreferencesResponse.appeal:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig - 85, // 18: gotocompany.guardian.v1beta1.GetPolicyResponse.policy:type_name -> gotocompany.guardian.v1beta1.Policy - 85, // 19: gotocompany.guardian.v1beta1.CreatePolicyRequest.policy:type_name -> gotocompany.guardian.v1beta1.Policy - 85, // 20: gotocompany.guardian.v1beta1.CreatePolicyResponse.policy:type_name -> gotocompany.guardian.v1beta1.Policy - 85, // 21: gotocompany.guardian.v1beta1.UpdatePolicyRequest.policy:type_name -> gotocompany.guardian.v1beta1.Policy - 85, // 22: gotocompany.guardian.v1beta1.UpdatePolicyResponse.policy:type_name -> gotocompany.guardian.v1beta1.Policy - 89, // 23: gotocompany.guardian.v1beta1.ListResourcesResponse.resources:type_name -> gotocompany.guardian.v1beta1.Resource - 89, // 24: gotocompany.guardian.v1beta1.GetResourceResponse.resource:type_name -> gotocompany.guardian.v1beta1.Resource - 89, // 25: gotocompany.guardian.v1beta1.UpdateResourceRequest.resource:type_name -> gotocompany.guardian.v1beta1.Resource - 89, // 26: gotocompany.guardian.v1beta1.UpdateResourceResponse.resource:type_name -> gotocompany.guardian.v1beta1.Resource - 87, // 27: gotocompany.guardian.v1beta1.ListUserAppealsResponse.appeals:type_name -> gotocompany.guardian.v1beta1.Appeal - 87, // 28: gotocompany.guardian.v1beta1.ListAppealsResponse.appeals:type_name -> gotocompany.guardian.v1beta1.Appeal - 87, // 29: gotocompany.guardian.v1beta1.GetAppealResponse.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal - 87, // 30: gotocompany.guardian.v1beta1.CancelAppealResponse.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal - 92, // 31: gotocompany.guardian.v1beta1.RevokeAppealRequest.reason:type_name -> gotocompany.guardian.v1beta1.RevokeAppealRequest.Reason - 87, // 32: gotocompany.guardian.v1beta1.RevokeAppealResponse.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal - 87, // 33: gotocompany.guardian.v1beta1.RevokeAppealsResponse.appeals:type_name -> gotocompany.guardian.v1beta1.Appeal - 93, // 34: gotocompany.guardian.v1beta1.CreateAppealRequest.resources:type_name -> gotocompany.guardian.v1beta1.CreateAppealRequest.Resource - 87, // 35: gotocompany.guardian.v1beta1.CreateAppealResponse.appeals:type_name -> gotocompany.guardian.v1beta1.Appeal - 88, // 36: gotocompany.guardian.v1beta1.ListUserApprovalsResponse.approvals:type_name -> gotocompany.guardian.v1beta1.Approval - 88, // 37: gotocompany.guardian.v1beta1.ListApprovalsResponse.approvals:type_name -> gotocompany.guardian.v1beta1.Approval - 94, // 38: gotocompany.guardian.v1beta1.UpdateApprovalRequest.action:type_name -> gotocompany.guardian.v1beta1.UpdateApprovalRequest.Action - 87, // 39: gotocompany.guardian.v1beta1.UpdateApprovalResponse.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal - 87, // 40: gotocompany.guardian.v1beta1.AddApproverResponse.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal - 87, // 41: gotocompany.guardian.v1beta1.DeleteApproverResponse.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal - 90, // 42: gotocompany.guardian.v1beta1.ListGrantsResponse.grants:type_name -> gotocompany.guardian.v1beta1.Grant - 90, // 43: gotocompany.guardian.v1beta1.ListUserGrantsResponse.grants:type_name -> gotocompany.guardian.v1beta1.Grant - 90, // 44: gotocompany.guardian.v1beta1.GetGrantResponse.grant:type_name -> gotocompany.guardian.v1beta1.Grant - 90, // 45: gotocompany.guardian.v1beta1.UpdateGrantResponse.grant:type_name -> gotocompany.guardian.v1beta1.Grant - 90, // 46: gotocompany.guardian.v1beta1.RevokeGrantResponse.grant:type_name -> gotocompany.guardian.v1beta1.Grant - 90, // 47: gotocompany.guardian.v1beta1.RevokeGrantsResponse.grants:type_name -> gotocompany.guardian.v1beta1.Grant - 115, // 48: gotocompany.guardian.v1beta1.Role.permissions:type_name -> google.protobuf.Value - 95, // 49: gotocompany.guardian.v1beta1.ProviderConfig.labels:type_name -> gotocompany.guardian.v1beta1.ProviderConfig.LabelsEntry - 115, // 50: gotocompany.guardian.v1beta1.ProviderConfig.credentials:type_name -> google.protobuf.Value - 96, // 51: gotocompany.guardian.v1beta1.ProviderConfig.appeal:type_name -> gotocompany.guardian.v1beta1.ProviderConfig.AppealConfig - 97, // 52: gotocompany.guardian.v1beta1.ProviderConfig.resources:type_name -> gotocompany.guardian.v1beta1.ProviderConfig.ResourceConfig - 98, // 53: gotocompany.guardian.v1beta1.ProviderConfig.parameters:type_name -> gotocompany.guardian.v1beta1.ProviderConfig.ProviderParameter - 80, // 54: gotocompany.guardian.v1beta1.Provider.config:type_name -> gotocompany.guardian.v1beta1.ProviderConfig - 114, // 55: gotocompany.guardian.v1beta1.Provider.created_at:type_name -> google.protobuf.Timestamp - 114, // 56: gotocompany.guardian.v1beta1.Provider.updated_at:type_name -> google.protobuf.Timestamp - 99, // 57: gotocompany.guardian.v1beta1.Condition.match:type_name -> gotocompany.guardian.v1beta1.Condition.MatchCondition - 100, // 58: gotocompany.guardian.v1beta1.PolicyAppealConfig.duration_options:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig.DurationOptions - 101, // 59: gotocompany.guardian.v1beta1.PolicyAppealConfig.questions:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig.Question - 103, // 60: gotocompany.guardian.v1beta1.PolicyAppealConfig.metadata_sources:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSourcesEntry - 104, // 61: gotocompany.guardian.v1beta1.Policy.steps:type_name -> gotocompany.guardian.v1beta1.Policy.ApprovalStep - 105, // 62: gotocompany.guardian.v1beta1.Policy.labels:type_name -> gotocompany.guardian.v1beta1.Policy.LabelsEntry - 114, // 63: gotocompany.guardian.v1beta1.Policy.created_at:type_name -> google.protobuf.Timestamp - 114, // 64: gotocompany.guardian.v1beta1.Policy.updated_at:type_name -> google.protobuf.Timestamp - 106, // 65: gotocompany.guardian.v1beta1.Policy.requirements:type_name -> gotocompany.guardian.v1beta1.Policy.Requirement - 107, // 66: gotocompany.guardian.v1beta1.Policy.iam:type_name -> gotocompany.guardian.v1beta1.Policy.IAM - 84, // 67: gotocompany.guardian.v1beta1.Policy.appeal:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig - 114, // 68: gotocompany.guardian.v1beta1.AppealOptions.expiration_date:type_name -> google.protobuf.Timestamp - 86, // 69: gotocompany.guardian.v1beta1.Appeal.options:type_name -> gotocompany.guardian.v1beta1.AppealOptions - 112, // 70: gotocompany.guardian.v1beta1.Appeal.labels:type_name -> gotocompany.guardian.v1beta1.Appeal.LabelsEntry - 89, // 71: gotocompany.guardian.v1beta1.Appeal.resource:type_name -> gotocompany.guardian.v1beta1.Resource - 88, // 72: gotocompany.guardian.v1beta1.Appeal.approvals:type_name -> gotocompany.guardian.v1beta1.Approval - 114, // 73: gotocompany.guardian.v1beta1.Appeal.created_at:type_name -> google.protobuf.Timestamp - 114, // 74: gotocompany.guardian.v1beta1.Appeal.updated_at:type_name -> google.protobuf.Timestamp - 116, // 75: gotocompany.guardian.v1beta1.Appeal.details:type_name -> google.protobuf.Struct - 115, // 76: gotocompany.guardian.v1beta1.Appeal.creator:type_name -> google.protobuf.Value - 90, // 77: gotocompany.guardian.v1beta1.Appeal.grant:type_name -> gotocompany.guardian.v1beta1.Grant - 87, // 78: gotocompany.guardian.v1beta1.Approval.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal - 114, // 79: gotocompany.guardian.v1beta1.Approval.created_at:type_name -> google.protobuf.Timestamp - 114, // 80: gotocompany.guardian.v1beta1.Approval.updated_at:type_name -> google.protobuf.Timestamp - 116, // 81: gotocompany.guardian.v1beta1.Resource.details:type_name -> google.protobuf.Struct - 113, // 82: gotocompany.guardian.v1beta1.Resource.labels:type_name -> gotocompany.guardian.v1beta1.Resource.LabelsEntry - 114, // 83: gotocompany.guardian.v1beta1.Resource.created_at:type_name -> google.protobuf.Timestamp - 114, // 84: gotocompany.guardian.v1beta1.Resource.updated_at:type_name -> google.protobuf.Timestamp - 89, // 85: gotocompany.guardian.v1beta1.Resource.children:type_name -> gotocompany.guardian.v1beta1.Resource - 114, // 86: gotocompany.guardian.v1beta1.Grant.expiration_date:type_name -> google.protobuf.Timestamp - 114, // 87: gotocompany.guardian.v1beta1.Grant.revoked_at:type_name -> google.protobuf.Timestamp - 114, // 88: gotocompany.guardian.v1beta1.Grant.created_at:type_name -> google.protobuf.Timestamp - 114, // 89: gotocompany.guardian.v1beta1.Grant.updated_at:type_name -> google.protobuf.Timestamp - 89, // 90: gotocompany.guardian.v1beta1.Grant.resource:type_name -> gotocompany.guardian.v1beta1.Resource - 87, // 91: gotocompany.guardian.v1beta1.Grant.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal - 114, // 92: gotocompany.guardian.v1beta1.ProviderActivity.timestamp:type_name -> google.protobuf.Timestamp - 116, // 93: gotocompany.guardian.v1beta1.ProviderActivity.metadata:type_name -> google.protobuf.Struct - 114, // 94: gotocompany.guardian.v1beta1.ProviderActivity.created_at:type_name -> google.protobuf.Timestamp - 81, // 95: gotocompany.guardian.v1beta1.ProviderActivity.provider:type_name -> gotocompany.guardian.v1beta1.Provider - 89, // 96: gotocompany.guardian.v1beta1.ProviderActivity.resource:type_name -> gotocompany.guardian.v1beta1.Resource - 116, // 97: gotocompany.guardian.v1beta1.CreateAppealRequest.Resource.options:type_name -> google.protobuf.Struct - 116, // 98: gotocompany.guardian.v1beta1.CreateAppealRequest.Resource.details:type_name -> google.protobuf.Struct - 79, // 99: gotocompany.guardian.v1beta1.ProviderConfig.ResourceConfig.policy:type_name -> gotocompany.guardian.v1beta1.PolicyConfig - 78, // 100: gotocompany.guardian.v1beta1.ProviderConfig.ResourceConfig.roles:type_name -> gotocompany.guardian.v1beta1.Role - 115, // 101: gotocompany.guardian.v1beta1.Condition.MatchCondition.eq:type_name -> google.protobuf.Value - 115, // 102: gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSource.config:type_name -> google.protobuf.Value - 115, // 103: gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSource.value:type_name -> google.protobuf.Value - 102, // 104: gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSourcesEntry.value:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSource - 108, // 105: gotocompany.guardian.v1beta1.Policy.Requirement.on:type_name -> gotocompany.guardian.v1beta1.Policy.Requirement.RequirementTrigger - 109, // 106: gotocompany.guardian.v1beta1.Policy.Requirement.appeals:type_name -> gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal - 115, // 107: gotocompany.guardian.v1beta1.Policy.IAM.config:type_name -> google.protobuf.Value - 111, // 108: gotocompany.guardian.v1beta1.Policy.IAM.schema:type_name -> gotocompany.guardian.v1beta1.Policy.IAM.SchemaEntry - 83, // 109: gotocompany.guardian.v1beta1.Policy.Requirement.RequirementTrigger.conditions:type_name -> gotocompany.guardian.v1beta1.Condition - 110, // 110: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.resource:type_name -> gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.ResourceIdentifier - 86, // 111: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.options:type_name -> gotocompany.guardian.v1beta1.AppealOptions - 79, // 112: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.policy:type_name -> gotocompany.guardian.v1beta1.PolicyConfig - 0, // 113: gotocompany.guardian.v1beta1.GuardianService.ListProviders:input_type -> gotocompany.guardian.v1beta1.ListProvidersRequest - 2, // 114: gotocompany.guardian.v1beta1.GuardianService.GetProvider:input_type -> gotocompany.guardian.v1beta1.GetProviderRequest - 4, // 115: gotocompany.guardian.v1beta1.GuardianService.GetProviderTypes:input_type -> gotocompany.guardian.v1beta1.GetProviderTypesRequest - 6, // 116: gotocompany.guardian.v1beta1.GuardianService.CreateProvider:input_type -> gotocompany.guardian.v1beta1.CreateProviderRequest - 8, // 117: gotocompany.guardian.v1beta1.GuardianService.UpdateProvider:input_type -> gotocompany.guardian.v1beta1.UpdateProviderRequest - 10, // 118: gotocompany.guardian.v1beta1.GuardianService.DeleteProvider:input_type -> gotocompany.guardian.v1beta1.DeleteProviderRequest - 14, // 119: gotocompany.guardian.v1beta1.GuardianService.ListRoles:input_type -> gotocompany.guardian.v1beta1.ListRolesRequest - 16, // 120: gotocompany.guardian.v1beta1.GuardianService.ImportActivities:input_type -> gotocompany.guardian.v1beta1.ImportActivitiesRequest - 18, // 121: gotocompany.guardian.v1beta1.GuardianService.GetActivity:input_type -> gotocompany.guardian.v1beta1.GetActivityRequest - 20, // 122: gotocompany.guardian.v1beta1.GuardianService.ListActivities:input_type -> gotocompany.guardian.v1beta1.ListActivitiesRequest - 22, // 123: gotocompany.guardian.v1beta1.GuardianService.ListPolicies:input_type -> gotocompany.guardian.v1beta1.ListPoliciesRequest - 24, // 124: gotocompany.guardian.v1beta1.GuardianService.GetPolicy:input_type -> gotocompany.guardian.v1beta1.GetPolicyRequest - 28, // 125: gotocompany.guardian.v1beta1.GuardianService.CreatePolicy:input_type -> gotocompany.guardian.v1beta1.CreatePolicyRequest - 30, // 126: gotocompany.guardian.v1beta1.GuardianService.UpdatePolicy:input_type -> gotocompany.guardian.v1beta1.UpdatePolicyRequest - 25, // 127: gotocompany.guardian.v1beta1.GuardianService.GetPolicyPreferences:input_type -> gotocompany.guardian.v1beta1.GetPolicyPreferencesRequest - 32, // 128: gotocompany.guardian.v1beta1.GuardianService.ListResources:input_type -> gotocompany.guardian.v1beta1.ListResourcesRequest - 34, // 129: gotocompany.guardian.v1beta1.GuardianService.GetResource:input_type -> gotocompany.guardian.v1beta1.GetResourceRequest - 36, // 130: gotocompany.guardian.v1beta1.GuardianService.UpdateResource:input_type -> gotocompany.guardian.v1beta1.UpdateResourceRequest - 38, // 131: gotocompany.guardian.v1beta1.GuardianService.DeleteResource:input_type -> gotocompany.guardian.v1beta1.DeleteResourceRequest - 40, // 132: gotocompany.guardian.v1beta1.GuardianService.ListUserAppeals:input_type -> gotocompany.guardian.v1beta1.ListUserAppealsRequest - 42, // 133: gotocompany.guardian.v1beta1.GuardianService.ListAppeals:input_type -> gotocompany.guardian.v1beta1.ListAppealsRequest - 44, // 134: gotocompany.guardian.v1beta1.GuardianService.GetAppeal:input_type -> gotocompany.guardian.v1beta1.GetAppealRequest - 46, // 135: gotocompany.guardian.v1beta1.GuardianService.CancelAppeal:input_type -> gotocompany.guardian.v1beta1.CancelAppealRequest - 52, // 136: gotocompany.guardian.v1beta1.GuardianService.CreateAppeal:input_type -> gotocompany.guardian.v1beta1.CreateAppealRequest - 54, // 137: gotocompany.guardian.v1beta1.GuardianService.ListUserApprovals:input_type -> gotocompany.guardian.v1beta1.ListUserApprovalsRequest - 56, // 138: gotocompany.guardian.v1beta1.GuardianService.ListApprovals:input_type -> gotocompany.guardian.v1beta1.ListApprovalsRequest - 58, // 139: gotocompany.guardian.v1beta1.GuardianService.UpdateApproval:input_type -> gotocompany.guardian.v1beta1.UpdateApprovalRequest - 60, // 140: gotocompany.guardian.v1beta1.GuardianService.AddApprover:input_type -> gotocompany.guardian.v1beta1.AddApproverRequest - 62, // 141: gotocompany.guardian.v1beta1.GuardianService.DeleteApprover:input_type -> gotocompany.guardian.v1beta1.DeleteApproverRequest - 64, // 142: gotocompany.guardian.v1beta1.GuardianService.ListGrants:input_type -> gotocompany.guardian.v1beta1.ListGrantsRequest - 66, // 143: gotocompany.guardian.v1beta1.GuardianService.ListUserGrants:input_type -> gotocompany.guardian.v1beta1.ListUserGrantsRequest - 68, // 144: gotocompany.guardian.v1beta1.GuardianService.ListUserRoles:input_type -> gotocompany.guardian.v1beta1.ListUserRolesRequest - 70, // 145: gotocompany.guardian.v1beta1.GuardianService.GetGrant:input_type -> gotocompany.guardian.v1beta1.GetGrantRequest - 72, // 146: gotocompany.guardian.v1beta1.GuardianService.UpdateGrant:input_type -> gotocompany.guardian.v1beta1.UpdateGrantRequest - 74, // 147: gotocompany.guardian.v1beta1.GuardianService.RevokeGrant:input_type -> gotocompany.guardian.v1beta1.RevokeGrantRequest - 76, // 148: gotocompany.guardian.v1beta1.GuardianService.RevokeGrants:input_type -> gotocompany.guardian.v1beta1.RevokeGrantsRequest - 12, // 149: gotocompany.guardian.v1beta1.GuardianService.ImportGrantsFromProvider:input_type -> gotocompany.guardian.v1beta1.ImportGrantsFromProviderRequest - 1, // 150: gotocompany.guardian.v1beta1.GuardianService.ListProviders:output_type -> gotocompany.guardian.v1beta1.ListProvidersResponse - 3, // 151: gotocompany.guardian.v1beta1.GuardianService.GetProvider:output_type -> gotocompany.guardian.v1beta1.GetProviderResponse - 5, // 152: gotocompany.guardian.v1beta1.GuardianService.GetProviderTypes:output_type -> gotocompany.guardian.v1beta1.GetProviderTypesResponse - 7, // 153: gotocompany.guardian.v1beta1.GuardianService.CreateProvider:output_type -> gotocompany.guardian.v1beta1.CreateProviderResponse - 9, // 154: gotocompany.guardian.v1beta1.GuardianService.UpdateProvider:output_type -> gotocompany.guardian.v1beta1.UpdateProviderResponse - 11, // 155: gotocompany.guardian.v1beta1.GuardianService.DeleteProvider:output_type -> gotocompany.guardian.v1beta1.DeleteProviderResponse - 15, // 156: gotocompany.guardian.v1beta1.GuardianService.ListRoles:output_type -> gotocompany.guardian.v1beta1.ListRolesResponse - 17, // 157: gotocompany.guardian.v1beta1.GuardianService.ImportActivities:output_type -> gotocompany.guardian.v1beta1.ImportActivitiesResponse - 19, // 158: gotocompany.guardian.v1beta1.GuardianService.GetActivity:output_type -> gotocompany.guardian.v1beta1.GetActivityResponse - 21, // 159: gotocompany.guardian.v1beta1.GuardianService.ListActivities:output_type -> gotocompany.guardian.v1beta1.ListActivitiesResponse - 23, // 160: gotocompany.guardian.v1beta1.GuardianService.ListPolicies:output_type -> gotocompany.guardian.v1beta1.ListPoliciesResponse - 27, // 161: gotocompany.guardian.v1beta1.GuardianService.GetPolicy:output_type -> gotocompany.guardian.v1beta1.GetPolicyResponse - 29, // 162: gotocompany.guardian.v1beta1.GuardianService.CreatePolicy:output_type -> gotocompany.guardian.v1beta1.CreatePolicyResponse - 31, // 163: gotocompany.guardian.v1beta1.GuardianService.UpdatePolicy:output_type -> gotocompany.guardian.v1beta1.UpdatePolicyResponse - 26, // 164: gotocompany.guardian.v1beta1.GuardianService.GetPolicyPreferences:output_type -> gotocompany.guardian.v1beta1.GetPolicyPreferencesResponse - 33, // 165: gotocompany.guardian.v1beta1.GuardianService.ListResources:output_type -> gotocompany.guardian.v1beta1.ListResourcesResponse - 35, // 166: gotocompany.guardian.v1beta1.GuardianService.GetResource:output_type -> gotocompany.guardian.v1beta1.GetResourceResponse - 37, // 167: gotocompany.guardian.v1beta1.GuardianService.UpdateResource:output_type -> gotocompany.guardian.v1beta1.UpdateResourceResponse - 39, // 168: gotocompany.guardian.v1beta1.GuardianService.DeleteResource:output_type -> gotocompany.guardian.v1beta1.DeleteResourceResponse - 41, // 169: gotocompany.guardian.v1beta1.GuardianService.ListUserAppeals:output_type -> gotocompany.guardian.v1beta1.ListUserAppealsResponse - 43, // 170: gotocompany.guardian.v1beta1.GuardianService.ListAppeals:output_type -> gotocompany.guardian.v1beta1.ListAppealsResponse - 45, // 171: gotocompany.guardian.v1beta1.GuardianService.GetAppeal:output_type -> gotocompany.guardian.v1beta1.GetAppealResponse - 47, // 172: gotocompany.guardian.v1beta1.GuardianService.CancelAppeal:output_type -> gotocompany.guardian.v1beta1.CancelAppealResponse - 53, // 173: gotocompany.guardian.v1beta1.GuardianService.CreateAppeal:output_type -> gotocompany.guardian.v1beta1.CreateAppealResponse - 55, // 174: gotocompany.guardian.v1beta1.GuardianService.ListUserApprovals:output_type -> gotocompany.guardian.v1beta1.ListUserApprovalsResponse - 57, // 175: gotocompany.guardian.v1beta1.GuardianService.ListApprovals:output_type -> gotocompany.guardian.v1beta1.ListApprovalsResponse - 59, // 176: gotocompany.guardian.v1beta1.GuardianService.UpdateApproval:output_type -> gotocompany.guardian.v1beta1.UpdateApprovalResponse - 61, // 177: gotocompany.guardian.v1beta1.GuardianService.AddApprover:output_type -> gotocompany.guardian.v1beta1.AddApproverResponse - 63, // 178: gotocompany.guardian.v1beta1.GuardianService.DeleteApprover:output_type -> gotocompany.guardian.v1beta1.DeleteApproverResponse - 65, // 179: gotocompany.guardian.v1beta1.GuardianService.ListGrants:output_type -> gotocompany.guardian.v1beta1.ListGrantsResponse - 67, // 180: gotocompany.guardian.v1beta1.GuardianService.ListUserGrants:output_type -> gotocompany.guardian.v1beta1.ListUserGrantsResponse - 69, // 181: gotocompany.guardian.v1beta1.GuardianService.ListUserRoles:output_type -> gotocompany.guardian.v1beta1.ListUserRolesResponse - 71, // 182: gotocompany.guardian.v1beta1.GuardianService.GetGrant:output_type -> gotocompany.guardian.v1beta1.GetGrantResponse - 73, // 183: gotocompany.guardian.v1beta1.GuardianService.UpdateGrant:output_type -> gotocompany.guardian.v1beta1.UpdateGrantResponse - 75, // 184: gotocompany.guardian.v1beta1.GuardianService.RevokeGrant:output_type -> gotocompany.guardian.v1beta1.RevokeGrantResponse - 77, // 185: gotocompany.guardian.v1beta1.GuardianService.RevokeGrants:output_type -> gotocompany.guardian.v1beta1.RevokeGrantsResponse - 13, // 186: gotocompany.guardian.v1beta1.GuardianService.ImportGrantsFromProvider:output_type -> gotocompany.guardian.v1beta1.ImportGrantsFromProviderResponse - 150, // [150:187] is the sub-list for method output_type - 113, // [113:150] is the sub-list for method input_type - 113, // [113:113] is the sub-list for extension type_name - 113, // [113:113] is the sub-list for extension extendee - 0, // [0:113] is the sub-list for field type_name + 85, // 0: gotocompany.guardian.v1beta1.ListProvidersResponse.providers:type_name -> gotocompany.guardian.v1beta1.Provider + 85, // 1: gotocompany.guardian.v1beta1.GetProviderResponse.provider:type_name -> gotocompany.guardian.v1beta1.Provider + 86, // 2: gotocompany.guardian.v1beta1.GetProviderTypesResponse.provider_types:type_name -> gotocompany.guardian.v1beta1.ProviderType + 84, // 3: gotocompany.guardian.v1beta1.CreateProviderRequest.config:type_name -> gotocompany.guardian.v1beta1.ProviderConfig + 85, // 4: gotocompany.guardian.v1beta1.CreateProviderResponse.provider:type_name -> gotocompany.guardian.v1beta1.Provider + 84, // 5: gotocompany.guardian.v1beta1.UpdateProviderRequest.config:type_name -> gotocompany.guardian.v1beta1.ProviderConfig + 85, // 6: gotocompany.guardian.v1beta1.UpdateProviderResponse.provider:type_name -> gotocompany.guardian.v1beta1.Provider + 95, // 7: gotocompany.guardian.v1beta1.ImportGrantsFromProviderResponse.grants:type_name -> gotocompany.guardian.v1beta1.Grant + 82, // 8: gotocompany.guardian.v1beta1.ListRolesResponse.roles:type_name -> gotocompany.guardian.v1beta1.Role + 119, // 9: gotocompany.guardian.v1beta1.ImportActivitiesRequest.timestamp_gte:type_name -> google.protobuf.Timestamp + 119, // 10: gotocompany.guardian.v1beta1.ImportActivitiesRequest.timestamp_lte:type_name -> google.protobuf.Timestamp + 96, // 11: gotocompany.guardian.v1beta1.ImportActivitiesResponse.activities:type_name -> gotocompany.guardian.v1beta1.ProviderActivity + 96, // 12: gotocompany.guardian.v1beta1.GetActivityResponse.activity:type_name -> gotocompany.guardian.v1beta1.ProviderActivity + 119, // 13: gotocompany.guardian.v1beta1.ListActivitiesRequest.timestamp_gte:type_name -> google.protobuf.Timestamp + 119, // 14: gotocompany.guardian.v1beta1.ListActivitiesRequest.timestamp_lte:type_name -> google.protobuf.Timestamp + 96, // 15: gotocompany.guardian.v1beta1.ListActivitiesResponse.activities:type_name -> gotocompany.guardian.v1beta1.ProviderActivity + 89, // 16: gotocompany.guardian.v1beta1.ListPoliciesResponse.policies:type_name -> gotocompany.guardian.v1beta1.Policy + 88, // 17: gotocompany.guardian.v1beta1.GetPolicyPreferencesResponse.appeal:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig + 89, // 18: gotocompany.guardian.v1beta1.GetPolicyResponse.policy:type_name -> gotocompany.guardian.v1beta1.Policy + 89, // 19: gotocompany.guardian.v1beta1.CreatePolicyRequest.policy:type_name -> gotocompany.guardian.v1beta1.Policy + 89, // 20: gotocompany.guardian.v1beta1.CreatePolicyResponse.policy:type_name -> gotocompany.guardian.v1beta1.Policy + 89, // 21: gotocompany.guardian.v1beta1.UpdatePolicyRequest.policy:type_name -> gotocompany.guardian.v1beta1.Policy + 89, // 22: gotocompany.guardian.v1beta1.UpdatePolicyResponse.policy:type_name -> gotocompany.guardian.v1beta1.Policy + 94, // 23: gotocompany.guardian.v1beta1.ListResourcesResponse.resources:type_name -> gotocompany.guardian.v1beta1.Resource + 94, // 24: gotocompany.guardian.v1beta1.GetResourceResponse.resource:type_name -> gotocompany.guardian.v1beta1.Resource + 94, // 25: gotocompany.guardian.v1beta1.UpdateResourceRequest.resource:type_name -> gotocompany.guardian.v1beta1.Resource + 94, // 26: gotocompany.guardian.v1beta1.UpdateResourceResponse.resource:type_name -> gotocompany.guardian.v1beta1.Resource + 91, // 27: gotocompany.guardian.v1beta1.ListUserAppealsResponse.appeals:type_name -> gotocompany.guardian.v1beta1.Appeal + 91, // 28: gotocompany.guardian.v1beta1.ListAppealsResponse.appeals:type_name -> gotocompany.guardian.v1beta1.Appeal + 91, // 29: gotocompany.guardian.v1beta1.GetAppealResponse.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal + 91, // 30: gotocompany.guardian.v1beta1.CancelAppealResponse.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal + 97, // 31: gotocompany.guardian.v1beta1.RevokeAppealRequest.reason:type_name -> gotocompany.guardian.v1beta1.RevokeAppealRequest.Reason + 91, // 32: gotocompany.guardian.v1beta1.RevokeAppealResponse.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal + 91, // 33: gotocompany.guardian.v1beta1.RevokeAppealsResponse.appeals:type_name -> gotocompany.guardian.v1beta1.Appeal + 98, // 34: gotocompany.guardian.v1beta1.CreateAppealRequest.resources:type_name -> gotocompany.guardian.v1beta1.CreateAppealRequest.Resource + 91, // 35: gotocompany.guardian.v1beta1.CreateAppealResponse.appeals:type_name -> gotocompany.guardian.v1beta1.Appeal + 93, // 36: gotocompany.guardian.v1beta1.ListAppealCommentsResponse.comments:type_name -> gotocompany.guardian.v1beta1.AppealComment + 93, // 37: gotocompany.guardian.v1beta1.CreateAppealCommentResponse.comment:type_name -> gotocompany.guardian.v1beta1.AppealComment + 92, // 38: gotocompany.guardian.v1beta1.ListUserApprovalsResponse.approvals:type_name -> gotocompany.guardian.v1beta1.Approval + 92, // 39: gotocompany.guardian.v1beta1.ListApprovalsResponse.approvals:type_name -> gotocompany.guardian.v1beta1.Approval + 99, // 40: gotocompany.guardian.v1beta1.UpdateApprovalRequest.action:type_name -> gotocompany.guardian.v1beta1.UpdateApprovalRequest.Action + 91, // 41: gotocompany.guardian.v1beta1.UpdateApprovalResponse.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal + 91, // 42: gotocompany.guardian.v1beta1.AddApproverResponse.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal + 91, // 43: gotocompany.guardian.v1beta1.DeleteApproverResponse.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal + 95, // 44: gotocompany.guardian.v1beta1.ListGrantsResponse.grants:type_name -> gotocompany.guardian.v1beta1.Grant + 95, // 45: gotocompany.guardian.v1beta1.ListUserGrantsResponse.grants:type_name -> gotocompany.guardian.v1beta1.Grant + 95, // 46: gotocompany.guardian.v1beta1.GetGrantResponse.grant:type_name -> gotocompany.guardian.v1beta1.Grant + 95, // 47: gotocompany.guardian.v1beta1.UpdateGrantResponse.grant:type_name -> gotocompany.guardian.v1beta1.Grant + 95, // 48: gotocompany.guardian.v1beta1.RevokeGrantResponse.grant:type_name -> gotocompany.guardian.v1beta1.Grant + 95, // 49: gotocompany.guardian.v1beta1.RevokeGrantsResponse.grants:type_name -> gotocompany.guardian.v1beta1.Grant + 120, // 50: gotocompany.guardian.v1beta1.Role.permissions:type_name -> google.protobuf.Value + 100, // 51: gotocompany.guardian.v1beta1.ProviderConfig.labels:type_name -> gotocompany.guardian.v1beta1.ProviderConfig.LabelsEntry + 120, // 52: gotocompany.guardian.v1beta1.ProviderConfig.credentials:type_name -> google.protobuf.Value + 101, // 53: gotocompany.guardian.v1beta1.ProviderConfig.appeal:type_name -> gotocompany.guardian.v1beta1.ProviderConfig.AppealConfig + 102, // 54: gotocompany.guardian.v1beta1.ProviderConfig.resources:type_name -> gotocompany.guardian.v1beta1.ProviderConfig.ResourceConfig + 103, // 55: gotocompany.guardian.v1beta1.ProviderConfig.parameters:type_name -> gotocompany.guardian.v1beta1.ProviderConfig.ProviderParameter + 84, // 56: gotocompany.guardian.v1beta1.Provider.config:type_name -> gotocompany.guardian.v1beta1.ProviderConfig + 119, // 57: gotocompany.guardian.v1beta1.Provider.created_at:type_name -> google.protobuf.Timestamp + 119, // 58: gotocompany.guardian.v1beta1.Provider.updated_at:type_name -> google.protobuf.Timestamp + 104, // 59: gotocompany.guardian.v1beta1.Condition.match:type_name -> gotocompany.guardian.v1beta1.Condition.MatchCondition + 105, // 60: gotocompany.guardian.v1beta1.PolicyAppealConfig.duration_options:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig.DurationOptions + 106, // 61: gotocompany.guardian.v1beta1.PolicyAppealConfig.questions:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig.Question + 108, // 62: gotocompany.guardian.v1beta1.PolicyAppealConfig.metadata_sources:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSourcesEntry + 109, // 63: gotocompany.guardian.v1beta1.Policy.steps:type_name -> gotocompany.guardian.v1beta1.Policy.ApprovalStep + 110, // 64: gotocompany.guardian.v1beta1.Policy.labels:type_name -> gotocompany.guardian.v1beta1.Policy.LabelsEntry + 119, // 65: gotocompany.guardian.v1beta1.Policy.created_at:type_name -> google.protobuf.Timestamp + 119, // 66: gotocompany.guardian.v1beta1.Policy.updated_at:type_name -> google.protobuf.Timestamp + 111, // 67: gotocompany.guardian.v1beta1.Policy.requirements:type_name -> gotocompany.guardian.v1beta1.Policy.Requirement + 112, // 68: gotocompany.guardian.v1beta1.Policy.iam:type_name -> gotocompany.guardian.v1beta1.Policy.IAM + 88, // 69: gotocompany.guardian.v1beta1.Policy.appeal:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig + 119, // 70: gotocompany.guardian.v1beta1.AppealOptions.expiration_date:type_name -> google.protobuf.Timestamp + 90, // 71: gotocompany.guardian.v1beta1.Appeal.options:type_name -> gotocompany.guardian.v1beta1.AppealOptions + 117, // 72: gotocompany.guardian.v1beta1.Appeal.labels:type_name -> gotocompany.guardian.v1beta1.Appeal.LabelsEntry + 94, // 73: gotocompany.guardian.v1beta1.Appeal.resource:type_name -> gotocompany.guardian.v1beta1.Resource + 92, // 74: gotocompany.guardian.v1beta1.Appeal.approvals:type_name -> gotocompany.guardian.v1beta1.Approval + 119, // 75: gotocompany.guardian.v1beta1.Appeal.created_at:type_name -> google.protobuf.Timestamp + 119, // 76: gotocompany.guardian.v1beta1.Appeal.updated_at:type_name -> google.protobuf.Timestamp + 121, // 77: gotocompany.guardian.v1beta1.Appeal.details:type_name -> google.protobuf.Struct + 120, // 78: gotocompany.guardian.v1beta1.Appeal.creator:type_name -> google.protobuf.Value + 95, // 79: gotocompany.guardian.v1beta1.Appeal.grant:type_name -> gotocompany.guardian.v1beta1.Grant + 91, // 80: gotocompany.guardian.v1beta1.Approval.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal + 119, // 81: gotocompany.guardian.v1beta1.Approval.created_at:type_name -> google.protobuf.Timestamp + 119, // 82: gotocompany.guardian.v1beta1.Approval.updated_at:type_name -> google.protobuf.Timestamp + 119, // 83: gotocompany.guardian.v1beta1.AppealComment.created_at:type_name -> google.protobuf.Timestamp + 119, // 84: gotocompany.guardian.v1beta1.AppealComment.updated_at:type_name -> google.protobuf.Timestamp + 121, // 85: gotocompany.guardian.v1beta1.Resource.details:type_name -> google.protobuf.Struct + 118, // 86: gotocompany.guardian.v1beta1.Resource.labels:type_name -> gotocompany.guardian.v1beta1.Resource.LabelsEntry + 119, // 87: gotocompany.guardian.v1beta1.Resource.created_at:type_name -> google.protobuf.Timestamp + 119, // 88: gotocompany.guardian.v1beta1.Resource.updated_at:type_name -> google.protobuf.Timestamp + 94, // 89: gotocompany.guardian.v1beta1.Resource.children:type_name -> gotocompany.guardian.v1beta1.Resource + 119, // 90: gotocompany.guardian.v1beta1.Grant.expiration_date:type_name -> google.protobuf.Timestamp + 119, // 91: gotocompany.guardian.v1beta1.Grant.revoked_at:type_name -> google.protobuf.Timestamp + 119, // 92: gotocompany.guardian.v1beta1.Grant.created_at:type_name -> google.protobuf.Timestamp + 119, // 93: gotocompany.guardian.v1beta1.Grant.updated_at:type_name -> google.protobuf.Timestamp + 94, // 94: gotocompany.guardian.v1beta1.Grant.resource:type_name -> gotocompany.guardian.v1beta1.Resource + 91, // 95: gotocompany.guardian.v1beta1.Grant.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal + 119, // 96: gotocompany.guardian.v1beta1.ProviderActivity.timestamp:type_name -> google.protobuf.Timestamp + 121, // 97: gotocompany.guardian.v1beta1.ProviderActivity.metadata:type_name -> google.protobuf.Struct + 119, // 98: gotocompany.guardian.v1beta1.ProviderActivity.created_at:type_name -> google.protobuf.Timestamp + 85, // 99: gotocompany.guardian.v1beta1.ProviderActivity.provider:type_name -> gotocompany.guardian.v1beta1.Provider + 94, // 100: gotocompany.guardian.v1beta1.ProviderActivity.resource:type_name -> gotocompany.guardian.v1beta1.Resource + 121, // 101: gotocompany.guardian.v1beta1.CreateAppealRequest.Resource.options:type_name -> google.protobuf.Struct + 121, // 102: gotocompany.guardian.v1beta1.CreateAppealRequest.Resource.details:type_name -> google.protobuf.Struct + 83, // 103: gotocompany.guardian.v1beta1.ProviderConfig.ResourceConfig.policy:type_name -> gotocompany.guardian.v1beta1.PolicyConfig + 82, // 104: gotocompany.guardian.v1beta1.ProviderConfig.ResourceConfig.roles:type_name -> gotocompany.guardian.v1beta1.Role + 120, // 105: gotocompany.guardian.v1beta1.Condition.MatchCondition.eq:type_name -> google.protobuf.Value + 120, // 106: gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSource.config:type_name -> google.protobuf.Value + 120, // 107: gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSource.value:type_name -> google.protobuf.Value + 107, // 108: gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSourcesEntry.value:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSource + 113, // 109: gotocompany.guardian.v1beta1.Policy.Requirement.on:type_name -> gotocompany.guardian.v1beta1.Policy.Requirement.RequirementTrigger + 114, // 110: gotocompany.guardian.v1beta1.Policy.Requirement.appeals:type_name -> gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal + 120, // 111: gotocompany.guardian.v1beta1.Policy.IAM.config:type_name -> google.protobuf.Value + 116, // 112: gotocompany.guardian.v1beta1.Policy.IAM.schema:type_name -> gotocompany.guardian.v1beta1.Policy.IAM.SchemaEntry + 87, // 113: gotocompany.guardian.v1beta1.Policy.Requirement.RequirementTrigger.conditions:type_name -> gotocompany.guardian.v1beta1.Condition + 115, // 114: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.resource:type_name -> gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.ResourceIdentifier + 90, // 115: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.options:type_name -> gotocompany.guardian.v1beta1.AppealOptions + 83, // 116: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.policy:type_name -> gotocompany.guardian.v1beta1.PolicyConfig + 0, // 117: gotocompany.guardian.v1beta1.GuardianService.ListProviders:input_type -> gotocompany.guardian.v1beta1.ListProvidersRequest + 2, // 118: gotocompany.guardian.v1beta1.GuardianService.GetProvider:input_type -> gotocompany.guardian.v1beta1.GetProviderRequest + 4, // 119: gotocompany.guardian.v1beta1.GuardianService.GetProviderTypes:input_type -> gotocompany.guardian.v1beta1.GetProviderTypesRequest + 6, // 120: gotocompany.guardian.v1beta1.GuardianService.CreateProvider:input_type -> gotocompany.guardian.v1beta1.CreateProviderRequest + 8, // 121: gotocompany.guardian.v1beta1.GuardianService.UpdateProvider:input_type -> gotocompany.guardian.v1beta1.UpdateProviderRequest + 10, // 122: gotocompany.guardian.v1beta1.GuardianService.DeleteProvider:input_type -> gotocompany.guardian.v1beta1.DeleteProviderRequest + 14, // 123: gotocompany.guardian.v1beta1.GuardianService.ListRoles:input_type -> gotocompany.guardian.v1beta1.ListRolesRequest + 16, // 124: gotocompany.guardian.v1beta1.GuardianService.ImportActivities:input_type -> gotocompany.guardian.v1beta1.ImportActivitiesRequest + 18, // 125: gotocompany.guardian.v1beta1.GuardianService.GetActivity:input_type -> gotocompany.guardian.v1beta1.GetActivityRequest + 20, // 126: gotocompany.guardian.v1beta1.GuardianService.ListActivities:input_type -> gotocompany.guardian.v1beta1.ListActivitiesRequest + 22, // 127: gotocompany.guardian.v1beta1.GuardianService.ListPolicies:input_type -> gotocompany.guardian.v1beta1.ListPoliciesRequest + 24, // 128: gotocompany.guardian.v1beta1.GuardianService.GetPolicy:input_type -> gotocompany.guardian.v1beta1.GetPolicyRequest + 28, // 129: gotocompany.guardian.v1beta1.GuardianService.CreatePolicy:input_type -> gotocompany.guardian.v1beta1.CreatePolicyRequest + 30, // 130: gotocompany.guardian.v1beta1.GuardianService.UpdatePolicy:input_type -> gotocompany.guardian.v1beta1.UpdatePolicyRequest + 25, // 131: gotocompany.guardian.v1beta1.GuardianService.GetPolicyPreferences:input_type -> gotocompany.guardian.v1beta1.GetPolicyPreferencesRequest + 32, // 132: gotocompany.guardian.v1beta1.GuardianService.ListResources:input_type -> gotocompany.guardian.v1beta1.ListResourcesRequest + 34, // 133: gotocompany.guardian.v1beta1.GuardianService.GetResource:input_type -> gotocompany.guardian.v1beta1.GetResourceRequest + 36, // 134: gotocompany.guardian.v1beta1.GuardianService.UpdateResource:input_type -> gotocompany.guardian.v1beta1.UpdateResourceRequest + 38, // 135: gotocompany.guardian.v1beta1.GuardianService.DeleteResource:input_type -> gotocompany.guardian.v1beta1.DeleteResourceRequest + 40, // 136: gotocompany.guardian.v1beta1.GuardianService.ListUserAppeals:input_type -> gotocompany.guardian.v1beta1.ListUserAppealsRequest + 42, // 137: gotocompany.guardian.v1beta1.GuardianService.ListAppeals:input_type -> gotocompany.guardian.v1beta1.ListAppealsRequest + 44, // 138: gotocompany.guardian.v1beta1.GuardianService.GetAppeal:input_type -> gotocompany.guardian.v1beta1.GetAppealRequest + 46, // 139: gotocompany.guardian.v1beta1.GuardianService.CancelAppeal:input_type -> gotocompany.guardian.v1beta1.CancelAppealRequest + 52, // 140: gotocompany.guardian.v1beta1.GuardianService.CreateAppeal:input_type -> gotocompany.guardian.v1beta1.CreateAppealRequest + 54, // 141: gotocompany.guardian.v1beta1.GuardianService.ListAppealComments:input_type -> gotocompany.guardian.v1beta1.ListAppealCommentsRequest + 56, // 142: gotocompany.guardian.v1beta1.GuardianService.CreateAppealComment:input_type -> gotocompany.guardian.v1beta1.CreateAppealCommentRequest + 58, // 143: gotocompany.guardian.v1beta1.GuardianService.ListUserApprovals:input_type -> gotocompany.guardian.v1beta1.ListUserApprovalsRequest + 60, // 144: gotocompany.guardian.v1beta1.GuardianService.ListApprovals:input_type -> gotocompany.guardian.v1beta1.ListApprovalsRequest + 62, // 145: gotocompany.guardian.v1beta1.GuardianService.UpdateApproval:input_type -> gotocompany.guardian.v1beta1.UpdateApprovalRequest + 64, // 146: gotocompany.guardian.v1beta1.GuardianService.AddApprover:input_type -> gotocompany.guardian.v1beta1.AddApproverRequest + 66, // 147: gotocompany.guardian.v1beta1.GuardianService.DeleteApprover:input_type -> gotocompany.guardian.v1beta1.DeleteApproverRequest + 68, // 148: gotocompany.guardian.v1beta1.GuardianService.ListGrants:input_type -> gotocompany.guardian.v1beta1.ListGrantsRequest + 70, // 149: gotocompany.guardian.v1beta1.GuardianService.ListUserGrants:input_type -> gotocompany.guardian.v1beta1.ListUserGrantsRequest + 72, // 150: gotocompany.guardian.v1beta1.GuardianService.ListUserRoles:input_type -> gotocompany.guardian.v1beta1.ListUserRolesRequest + 74, // 151: gotocompany.guardian.v1beta1.GuardianService.GetGrant:input_type -> gotocompany.guardian.v1beta1.GetGrantRequest + 76, // 152: gotocompany.guardian.v1beta1.GuardianService.UpdateGrant:input_type -> gotocompany.guardian.v1beta1.UpdateGrantRequest + 78, // 153: gotocompany.guardian.v1beta1.GuardianService.RevokeGrant:input_type -> gotocompany.guardian.v1beta1.RevokeGrantRequest + 80, // 154: gotocompany.guardian.v1beta1.GuardianService.RevokeGrants:input_type -> gotocompany.guardian.v1beta1.RevokeGrantsRequest + 12, // 155: gotocompany.guardian.v1beta1.GuardianService.ImportGrantsFromProvider:input_type -> gotocompany.guardian.v1beta1.ImportGrantsFromProviderRequest + 1, // 156: gotocompany.guardian.v1beta1.GuardianService.ListProviders:output_type -> gotocompany.guardian.v1beta1.ListProvidersResponse + 3, // 157: gotocompany.guardian.v1beta1.GuardianService.GetProvider:output_type -> gotocompany.guardian.v1beta1.GetProviderResponse + 5, // 158: gotocompany.guardian.v1beta1.GuardianService.GetProviderTypes:output_type -> gotocompany.guardian.v1beta1.GetProviderTypesResponse + 7, // 159: gotocompany.guardian.v1beta1.GuardianService.CreateProvider:output_type -> gotocompany.guardian.v1beta1.CreateProviderResponse + 9, // 160: gotocompany.guardian.v1beta1.GuardianService.UpdateProvider:output_type -> gotocompany.guardian.v1beta1.UpdateProviderResponse + 11, // 161: gotocompany.guardian.v1beta1.GuardianService.DeleteProvider:output_type -> gotocompany.guardian.v1beta1.DeleteProviderResponse + 15, // 162: gotocompany.guardian.v1beta1.GuardianService.ListRoles:output_type -> gotocompany.guardian.v1beta1.ListRolesResponse + 17, // 163: gotocompany.guardian.v1beta1.GuardianService.ImportActivities:output_type -> gotocompany.guardian.v1beta1.ImportActivitiesResponse + 19, // 164: gotocompany.guardian.v1beta1.GuardianService.GetActivity:output_type -> gotocompany.guardian.v1beta1.GetActivityResponse + 21, // 165: gotocompany.guardian.v1beta1.GuardianService.ListActivities:output_type -> gotocompany.guardian.v1beta1.ListActivitiesResponse + 23, // 166: gotocompany.guardian.v1beta1.GuardianService.ListPolicies:output_type -> gotocompany.guardian.v1beta1.ListPoliciesResponse + 27, // 167: gotocompany.guardian.v1beta1.GuardianService.GetPolicy:output_type -> gotocompany.guardian.v1beta1.GetPolicyResponse + 29, // 168: gotocompany.guardian.v1beta1.GuardianService.CreatePolicy:output_type -> gotocompany.guardian.v1beta1.CreatePolicyResponse + 31, // 169: gotocompany.guardian.v1beta1.GuardianService.UpdatePolicy:output_type -> gotocompany.guardian.v1beta1.UpdatePolicyResponse + 26, // 170: gotocompany.guardian.v1beta1.GuardianService.GetPolicyPreferences:output_type -> gotocompany.guardian.v1beta1.GetPolicyPreferencesResponse + 33, // 171: gotocompany.guardian.v1beta1.GuardianService.ListResources:output_type -> gotocompany.guardian.v1beta1.ListResourcesResponse + 35, // 172: gotocompany.guardian.v1beta1.GuardianService.GetResource:output_type -> gotocompany.guardian.v1beta1.GetResourceResponse + 37, // 173: gotocompany.guardian.v1beta1.GuardianService.UpdateResource:output_type -> gotocompany.guardian.v1beta1.UpdateResourceResponse + 39, // 174: gotocompany.guardian.v1beta1.GuardianService.DeleteResource:output_type -> gotocompany.guardian.v1beta1.DeleteResourceResponse + 41, // 175: gotocompany.guardian.v1beta1.GuardianService.ListUserAppeals:output_type -> gotocompany.guardian.v1beta1.ListUserAppealsResponse + 43, // 176: gotocompany.guardian.v1beta1.GuardianService.ListAppeals:output_type -> gotocompany.guardian.v1beta1.ListAppealsResponse + 45, // 177: gotocompany.guardian.v1beta1.GuardianService.GetAppeal:output_type -> gotocompany.guardian.v1beta1.GetAppealResponse + 47, // 178: gotocompany.guardian.v1beta1.GuardianService.CancelAppeal:output_type -> gotocompany.guardian.v1beta1.CancelAppealResponse + 53, // 179: gotocompany.guardian.v1beta1.GuardianService.CreateAppeal:output_type -> gotocompany.guardian.v1beta1.CreateAppealResponse + 55, // 180: gotocompany.guardian.v1beta1.GuardianService.ListAppealComments:output_type -> gotocompany.guardian.v1beta1.ListAppealCommentsResponse + 57, // 181: gotocompany.guardian.v1beta1.GuardianService.CreateAppealComment:output_type -> gotocompany.guardian.v1beta1.CreateAppealCommentResponse + 59, // 182: gotocompany.guardian.v1beta1.GuardianService.ListUserApprovals:output_type -> gotocompany.guardian.v1beta1.ListUserApprovalsResponse + 61, // 183: gotocompany.guardian.v1beta1.GuardianService.ListApprovals:output_type -> gotocompany.guardian.v1beta1.ListApprovalsResponse + 63, // 184: gotocompany.guardian.v1beta1.GuardianService.UpdateApproval:output_type -> gotocompany.guardian.v1beta1.UpdateApprovalResponse + 65, // 185: gotocompany.guardian.v1beta1.GuardianService.AddApprover:output_type -> gotocompany.guardian.v1beta1.AddApproverResponse + 67, // 186: gotocompany.guardian.v1beta1.GuardianService.DeleteApprover:output_type -> gotocompany.guardian.v1beta1.DeleteApproverResponse + 69, // 187: gotocompany.guardian.v1beta1.GuardianService.ListGrants:output_type -> gotocompany.guardian.v1beta1.ListGrantsResponse + 71, // 188: gotocompany.guardian.v1beta1.GuardianService.ListUserGrants:output_type -> gotocompany.guardian.v1beta1.ListUserGrantsResponse + 73, // 189: gotocompany.guardian.v1beta1.GuardianService.ListUserRoles:output_type -> gotocompany.guardian.v1beta1.ListUserRolesResponse + 75, // 190: gotocompany.guardian.v1beta1.GuardianService.GetGrant:output_type -> gotocompany.guardian.v1beta1.GetGrantResponse + 77, // 191: gotocompany.guardian.v1beta1.GuardianService.UpdateGrant:output_type -> gotocompany.guardian.v1beta1.UpdateGrantResponse + 79, // 192: gotocompany.guardian.v1beta1.GuardianService.RevokeGrant:output_type -> gotocompany.guardian.v1beta1.RevokeGrantResponse + 81, // 193: gotocompany.guardian.v1beta1.GuardianService.RevokeGrants:output_type -> gotocompany.guardian.v1beta1.RevokeGrantsResponse + 13, // 194: gotocompany.guardian.v1beta1.GuardianService.ImportGrantsFromProvider:output_type -> gotocompany.guardian.v1beta1.ImportGrantsFromProviderResponse + 156, // [156:195] is the sub-list for method output_type + 117, // [117:156] is the sub-list for method input_type + 117, // [117:117] is the sub-list for extension type_name + 117, // [117:117] is the sub-list for extension extendee + 0, // [0:117] is the sub-list for field type_name } func init() { file_gotocompany_guardian_v1beta1_guardian_proto_init() } @@ -9795,7 +10160,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListUserApprovalsRequest); i { + switch v := v.(*ListAppealCommentsRequest); i { case 0: return &v.state case 1: @@ -9807,7 +10172,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListUserApprovalsResponse); i { + switch v := v.(*ListAppealCommentsResponse); i { case 0: return &v.state case 1: @@ -9819,7 +10184,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListApprovalsRequest); i { + switch v := v.(*CreateAppealCommentRequest); i { case 0: return &v.state case 1: @@ -9831,7 +10196,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListApprovalsResponse); i { + switch v := v.(*CreateAppealCommentResponse); i { case 0: return &v.state case 1: @@ -9843,7 +10208,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateApprovalRequest); i { + switch v := v.(*ListUserApprovalsRequest); i { case 0: return &v.state case 1: @@ -9855,7 +10220,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateApprovalResponse); i { + switch v := v.(*ListUserApprovalsResponse); i { case 0: return &v.state case 1: @@ -9867,7 +10232,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddApproverRequest); i { + switch v := v.(*ListApprovalsRequest); i { case 0: return &v.state case 1: @@ -9879,7 +10244,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddApproverResponse); i { + switch v := v.(*ListApprovalsResponse); i { case 0: return &v.state case 1: @@ -9891,7 +10256,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteApproverRequest); i { + switch v := v.(*UpdateApprovalRequest); i { case 0: return &v.state case 1: @@ -9903,7 +10268,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteApproverResponse); i { + switch v := v.(*UpdateApprovalResponse); i { case 0: return &v.state case 1: @@ -9915,7 +10280,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListGrantsRequest); i { + switch v := v.(*AddApproverRequest); i { case 0: return &v.state case 1: @@ -9927,7 +10292,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListGrantsResponse); i { + switch v := v.(*AddApproverResponse); i { case 0: return &v.state case 1: @@ -9939,7 +10304,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListUserGrantsRequest); i { + switch v := v.(*DeleteApproverRequest); i { case 0: return &v.state case 1: @@ -9951,7 +10316,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListUserGrantsResponse); i { + switch v := v.(*DeleteApproverResponse); i { case 0: return &v.state case 1: @@ -9963,7 +10328,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListUserRolesRequest); i { + switch v := v.(*ListGrantsRequest); i { case 0: return &v.state case 1: @@ -9975,7 +10340,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListUserRolesResponse); i { + switch v := v.(*ListGrantsResponse); i { case 0: return &v.state case 1: @@ -9987,7 +10352,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGrantRequest); i { + switch v := v.(*ListUserGrantsRequest); i { case 0: return &v.state case 1: @@ -9999,7 +10364,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGrantResponse); i { + switch v := v.(*ListUserGrantsResponse); i { case 0: return &v.state case 1: @@ -10011,7 +10376,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateGrantRequest); i { + switch v := v.(*ListUserRolesRequest); i { case 0: return &v.state case 1: @@ -10023,7 +10388,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateGrantResponse); i { + switch v := v.(*ListUserRolesResponse); i { case 0: return &v.state case 1: @@ -10035,7 +10400,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RevokeGrantRequest); i { + switch v := v.(*GetGrantRequest); i { case 0: return &v.state case 1: @@ -10047,7 +10412,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RevokeGrantResponse); i { + switch v := v.(*GetGrantResponse); i { case 0: return &v.state case 1: @@ -10059,7 +10424,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RevokeGrantsRequest); i { + switch v := v.(*UpdateGrantRequest); i { case 0: return &v.state case 1: @@ -10071,7 +10436,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RevokeGrantsResponse); i { + switch v := v.(*UpdateGrantResponse); i { case 0: return &v.state case 1: @@ -10083,7 +10448,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Role); i { + switch v := v.(*RevokeGrantRequest); i { case 0: return &v.state case 1: @@ -10095,7 +10460,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PolicyConfig); i { + switch v := v.(*RevokeGrantResponse); i { case 0: return &v.state case 1: @@ -10107,7 +10472,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProviderConfig); i { + switch v := v.(*RevokeGrantsRequest); i { case 0: return &v.state case 1: @@ -10119,7 +10484,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Provider); i { + switch v := v.(*RevokeGrantsResponse); i { case 0: return &v.state case 1: @@ -10131,7 +10496,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProviderType); i { + switch v := v.(*Role); i { case 0: return &v.state case 1: @@ -10143,7 +10508,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Condition); i { + switch v := v.(*PolicyConfig); i { case 0: return &v.state case 1: @@ -10155,7 +10520,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PolicyAppealConfig); i { + switch v := v.(*ProviderConfig); i { case 0: return &v.state case 1: @@ -10167,7 +10532,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Policy); i { + switch v := v.(*Provider); i { case 0: return &v.state case 1: @@ -10179,7 +10544,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AppealOptions); i { + switch v := v.(*ProviderType); i { case 0: return &v.state case 1: @@ -10191,7 +10556,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Appeal); i { + switch v := v.(*Condition); i { case 0: return &v.state case 1: @@ -10203,7 +10568,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Approval); i { + switch v := v.(*PolicyAppealConfig); i { case 0: return &v.state case 1: @@ -10215,7 +10580,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Resource); i { + switch v := v.(*Policy); i { case 0: return &v.state case 1: @@ -10227,7 +10592,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Grant); i { + switch v := v.(*AppealOptions); i { case 0: return &v.state case 1: @@ -10239,7 +10604,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProviderActivity); i { + switch v := v.(*Appeal); i { case 0: return &v.state case 1: @@ -10251,7 +10616,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RevokeAppealRequest_Reason); i { + switch v := v.(*Approval); i { case 0: return &v.state case 1: @@ -10263,7 +10628,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateAppealRequest_Resource); i { + switch v := v.(*AppealComment); i { case 0: return &v.state case 1: @@ -10275,7 +10640,19 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateApprovalRequest_Action); i { + switch v := v.(*Resource); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Grant); i { case 0: return &v.state case 1: @@ -10287,7 +10664,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProviderConfig_AppealConfig); i { + switch v := v.(*ProviderActivity); i { case 0: return &v.state case 1: @@ -10299,7 +10676,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProviderConfig_ResourceConfig); i { + switch v := v.(*RevokeAppealRequest_Reason); i { case 0: return &v.state case 1: @@ -10311,7 +10688,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProviderConfig_ProviderParameter); i { + switch v := v.(*CreateAppealRequest_Resource); i { case 0: return &v.state case 1: @@ -10323,6 +10700,54 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateApprovalRequest_Action); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProviderConfig_AppealConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProviderConfig_ResourceConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProviderConfig_ProviderParameter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Condition_MatchCondition); i { case 0: return &v.state @@ -10334,7 +10759,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { return nil } } - file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PolicyAppealConfig_DurationOptions); i { case 0: return &v.state @@ -10346,7 +10771,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { return nil } } - file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PolicyAppealConfig_Question); i { case 0: return &v.state @@ -10358,7 +10783,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { return nil } } - file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PolicyAppealConfig_MetadataSource); i { case 0: return &v.state @@ -10370,7 +10795,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { return nil } } - file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Policy_ApprovalStep); i { case 0: return &v.state @@ -10382,7 +10807,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { return nil } } - file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Policy_Requirement); i { case 0: return &v.state @@ -10394,7 +10819,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { return nil } } - file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Policy_IAM); i { case 0: return &v.state @@ -10406,7 +10831,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { return nil } } - file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Policy_Requirement_RequirementTrigger); i { case 0: return &v.state @@ -10418,7 +10843,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { return nil } } - file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Policy_Requirement_AdditionalAppeal); i { case 0: return &v.state @@ -10430,7 +10855,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { return nil } } - file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Policy_Requirement_AdditionalAppeal_ResourceIdentifier); i { case 0: return &v.state @@ -10449,7 +10874,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_gotocompany_guardian_v1beta1_guardian_proto_rawDesc, NumEnums: 0, - NumMessages: 114, + NumMessages: 119, NumExtensions: 0, NumServices: 1, }, diff --git a/api/proto/gotocompany/guardian/v1beta1/guardian.pb.gw.go b/api/proto/gotocompany/guardian/v1beta1/guardian.pb.gw.go index 2807bba7b..cec2f04f0 100644 --- a/api/proto/gotocompany/guardian/v1beta1/guardian.pb.gw.go +++ b/api/proto/gotocompany/guardian/v1beta1/guardian.pb.gw.go @@ -1327,6 +1327,144 @@ func local_request_GuardianService_CreateAppeal_0(ctx context.Context, marshaler } +var ( + filter_GuardianService_ListAppealComments_0 = &utilities.DoubleArray{Encoding: map[string]int{"appeal_id": 0, "appealId": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) + +func request_GuardianService_ListAppealComments_0(ctx context.Context, marshaler runtime.Marshaler, client GuardianServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListAppealCommentsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["appeal_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "appeal_id") + } + + protoReq.AppealId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "appeal_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_GuardianService_ListAppealComments_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListAppealComments(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_GuardianService_ListAppealComments_0(ctx context.Context, marshaler runtime.Marshaler, server GuardianServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListAppealCommentsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["appeal_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "appeal_id") + } + + protoReq.AppealId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "appeal_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_GuardianService_ListAppealComments_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListAppealComments(ctx, &protoReq) + return msg, metadata, err + +} + +func request_GuardianService_CreateAppealComment_0(ctx context.Context, marshaler runtime.Marshaler, client GuardianServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateAppealCommentRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["appeal_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "appeal_id") + } + + protoReq.AppealId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "appeal_id", err) + } + + msg, err := client.CreateAppealComment(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_GuardianService_CreateAppealComment_0(ctx context.Context, marshaler runtime.Marshaler, server GuardianServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateAppealCommentRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["appeal_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "appeal_id") + } + + protoReq.AppealId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "appeal_id", err) + } + + msg, err := server.CreateAppealComment(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_GuardianService_ListUserApprovals_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) @@ -2644,6 +2782,56 @@ func RegisterGuardianServiceHandlerServer(ctx context.Context, mux *runtime.Serv }) + mux.Handle("GET", pattern_GuardianService_ListAppealComments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gotocompany.guardian.v1beta1.GuardianService/ListAppealComments", runtime.WithHTTPPathPattern("/v1beta1/appeals/{appeal_id}/comments")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_GuardianService_ListAppealComments_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_GuardianService_ListAppealComments_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_GuardianService_CreateAppealComment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/gotocompany.guardian.v1beta1.GuardianService/CreateAppealComment", runtime.WithHTTPPathPattern("/v1beta1/appeals/{appeal_id}/comments")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_GuardianService_CreateAppealComment_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_GuardianService_CreateAppealComment_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_GuardianService_ListUserApprovals_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3560,6 +3748,50 @@ func RegisterGuardianServiceHandlerClient(ctx context.Context, mux *runtime.Serv }) + mux.Handle("GET", pattern_GuardianService_ListAppealComments_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) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gotocompany.guardian.v1beta1.GuardianService/ListAppealComments", runtime.WithHTTPPathPattern("/v1beta1/appeals/{appeal_id}/comments")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GuardianService_ListAppealComments_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_GuardianService_ListAppealComments_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_GuardianService_CreateAppealComment_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) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/gotocompany.guardian.v1beta1.GuardianService/CreateAppealComment", runtime.WithHTTPPathPattern("/v1beta1/appeals/{appeal_id}/comments")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GuardianService_CreateAppealComment_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_GuardianService_CreateAppealComment_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_GuardianService_ListUserApprovals_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3900,6 +4132,10 @@ var ( pattern_GuardianService_CreateAppeal_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "appeals"}, "")) + pattern_GuardianService_ListAppealComments_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1beta1", "appeals", "appeal_id", "comments"}, "")) + + pattern_GuardianService_CreateAppealComment_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1beta1", "appeals", "appeal_id", "comments"}, "")) + pattern_GuardianService_ListUserApprovals_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1beta1", "me", "approvals"}, "")) pattern_GuardianService_ListApprovals_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1beta1", "approvals"}, "")) @@ -3978,6 +4214,10 @@ var ( forward_GuardianService_CreateAppeal_0 = runtime.ForwardResponseMessage + forward_GuardianService_ListAppealComments_0 = runtime.ForwardResponseMessage + + forward_GuardianService_CreateAppealComment_0 = runtime.ForwardResponseMessage + forward_GuardianService_ListUserApprovals_0 = runtime.ForwardResponseMessage forward_GuardianService_ListApprovals_0 = runtime.ForwardResponseMessage diff --git a/api/proto/gotocompany/guardian/v1beta1/guardian_grpc.pb.go b/api/proto/gotocompany/guardian/v1beta1/guardian_grpc.pb.go index 2b5ef00be..534a7baef 100644 --- a/api/proto/gotocompany/guardian/v1beta1/guardian_grpc.pb.go +++ b/api/proto/gotocompany/guardian/v1beta1/guardian_grpc.pb.go @@ -46,6 +46,8 @@ type GuardianServiceClient interface { GetAppeal(ctx context.Context, in *GetAppealRequest, opts ...grpc.CallOption) (*GetAppealResponse, error) CancelAppeal(ctx context.Context, in *CancelAppealRequest, opts ...grpc.CallOption) (*CancelAppealResponse, error) CreateAppeal(ctx context.Context, in *CreateAppealRequest, opts ...grpc.CallOption) (*CreateAppealResponse, error) + ListAppealComments(ctx context.Context, in *ListAppealCommentsRequest, opts ...grpc.CallOption) (*ListAppealCommentsResponse, error) + CreateAppealComment(ctx context.Context, in *CreateAppealCommentRequest, opts ...grpc.CallOption) (*CreateAppealCommentResponse, error) ListUserApprovals(ctx context.Context, in *ListUserApprovalsRequest, opts ...grpc.CallOption) (*ListUserApprovalsResponse, error) ListApprovals(ctx context.Context, in *ListApprovalsRequest, opts ...grpc.CallOption) (*ListApprovalsResponse, error) UpdateApproval(ctx context.Context, in *UpdateApprovalRequest, opts ...grpc.CallOption) (*UpdateApprovalResponse, error) @@ -285,6 +287,24 @@ func (c *guardianServiceClient) CreateAppeal(ctx context.Context, in *CreateAppe return out, nil } +func (c *guardianServiceClient) ListAppealComments(ctx context.Context, in *ListAppealCommentsRequest, opts ...grpc.CallOption) (*ListAppealCommentsResponse, error) { + out := new(ListAppealCommentsResponse) + err := c.cc.Invoke(ctx, "/gotocompany.guardian.v1beta1.GuardianService/ListAppealComments", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *guardianServiceClient) CreateAppealComment(ctx context.Context, in *CreateAppealCommentRequest, opts ...grpc.CallOption) (*CreateAppealCommentResponse, error) { + out := new(CreateAppealCommentResponse) + err := c.cc.Invoke(ctx, "/gotocompany.guardian.v1beta1.GuardianService/CreateAppealComment", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *guardianServiceClient) ListUserApprovals(ctx context.Context, in *ListUserApprovalsRequest, opts ...grpc.CallOption) (*ListUserApprovalsResponse, error) { out := new(ListUserApprovalsResponse) err := c.cc.Invoke(ctx, "/gotocompany.guardian.v1beta1.GuardianService/ListUserApprovals", in, out, opts...) @@ -430,6 +450,8 @@ type GuardianServiceServer interface { GetAppeal(context.Context, *GetAppealRequest) (*GetAppealResponse, error) CancelAppeal(context.Context, *CancelAppealRequest) (*CancelAppealResponse, error) CreateAppeal(context.Context, *CreateAppealRequest) (*CreateAppealResponse, error) + ListAppealComments(context.Context, *ListAppealCommentsRequest) (*ListAppealCommentsResponse, error) + CreateAppealComment(context.Context, *CreateAppealCommentRequest) (*CreateAppealCommentResponse, error) ListUserApprovals(context.Context, *ListUserApprovalsRequest) (*ListUserApprovalsResponse, error) ListApprovals(context.Context, *ListApprovalsRequest) (*ListApprovalsResponse, error) UpdateApproval(context.Context, *UpdateApprovalRequest) (*UpdateApprovalResponse, error) @@ -522,6 +544,12 @@ func (UnimplementedGuardianServiceServer) CancelAppeal(context.Context, *CancelA func (UnimplementedGuardianServiceServer) CreateAppeal(context.Context, *CreateAppealRequest) (*CreateAppealResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateAppeal not implemented") } +func (UnimplementedGuardianServiceServer) ListAppealComments(context.Context, *ListAppealCommentsRequest) (*ListAppealCommentsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListAppealComments not implemented") +} +func (UnimplementedGuardianServiceServer) CreateAppealComment(context.Context, *CreateAppealCommentRequest) (*CreateAppealCommentResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateAppealComment not implemented") +} func (UnimplementedGuardianServiceServer) ListUserApprovals(context.Context, *ListUserApprovalsRequest) (*ListUserApprovalsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListUserApprovals not implemented") } @@ -1006,6 +1034,42 @@ func _GuardianService_CreateAppeal_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _GuardianService_ListAppealComments_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListAppealCommentsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GuardianServiceServer).ListAppealComments(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gotocompany.guardian.v1beta1.GuardianService/ListAppealComments", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GuardianServiceServer).ListAppealComments(ctx, req.(*ListAppealCommentsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _GuardianService_CreateAppealComment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateAppealCommentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GuardianServiceServer).CreateAppealComment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gotocompany.guardian.v1beta1.GuardianService/CreateAppealComment", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GuardianServiceServer).CreateAppealComment(ctx, req.(*CreateAppealCommentRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _GuardianService_ListUserApprovals_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ListUserApprovalsRequest) if err := dec(in); err != nil { @@ -1343,6 +1407,14 @@ var GuardianService_ServiceDesc = grpc.ServiceDesc{ MethodName: "CreateAppeal", Handler: _GuardianService_CreateAppeal_Handler, }, + { + MethodName: "ListAppealComments", + Handler: _GuardianService_ListAppealComments_Handler, + }, + { + MethodName: "CreateAppealComment", + Handler: _GuardianService_CreateAppealComment_Handler, + }, { MethodName: "ListUserApprovals", Handler: _GuardianService_ListUserApprovals_Handler, diff --git a/core/appeal/comment.go b/core/appeal/comment.go new file mode 100644 index 000000000..ce29aab3c --- /dev/null +++ b/core/appeal/comment.go @@ -0,0 +1,99 @@ +package appeal + +import ( + "context" + "fmt" + + "github.com/goto/guardian/domain" +) + +const CommentParentTypeAppeal = "appeal" + +func (s *Service) CreateComment(ctx context.Context, c *domain.Comment) error { + appealID := c.ParentID + appeal, err := s.GetByID(ctx, appealID) + if err != nil { + return fmt.Errorf("failed to get appeal details: %w", err) + } + c.ParentType = CommentParentTypeAppeal + + if err := s.commentService.Create(ctx, c); err != nil { + return err + } + + go func() { + ctx := context.WithoutCancel(ctx) + if err := s.notifyParticipants(ctx, appeal, c); err != nil { + s.logger.Error(ctx, "failed to notify participants", "error", err, "appeal_id", c.ParentID, "comment_id", c.ID) + } + }() + + return nil +} + +func (s *Service) ListComments(ctx context.Context, filter domain.ListCommentsFilter) ([]*domain.Comment, error) { + appealID := filter.ParentID + _, err := s.GetByID(ctx, appealID) + if err != nil { + return nil, fmt.Errorf("failed to get appeal details: %w", err) + } + filter.ParentType = CommentParentTypeAppeal + return s.commentService.List(ctx, filter) +} + +func (s *Service) notifyParticipants(ctx context.Context, appeal *domain.Appeal, comment *domain.Comment) error { + notifRecipients := map[string]bool{} + + // add appeal creator + notifRecipients[appeal.CreatedBy] = true + + // add approvers from the current pending approval + if pendingApproval := appeal.GetNextPendingApproval(); pendingApproval != nil { + for _, approver := range pendingApproval.Approvers { + notifRecipients[approver] = true + } + } + + // add anyone who has commented before + comments, err := s.commentService.List(ctx, domain.ListCommentsFilter{ + ParentType: CommentParentTypeAppeal, + ParentID: appeal.ID, + }) + if err != nil { + return fmt.Errorf("failed to get comments of appeal %q: %w", comment.ParentID, err) + } + for _, c := range comments { + notifRecipients[c.CreatedBy] = true + } + + // remove current comment creator + delete(notifRecipients, comment.CreatedBy) + + // send notifications + var notifications []domain.Notification + for recipient := range notifRecipients { + notifications = append(notifications, domain.Notification{ + User: recipient, + Message: domain.NotificationMessage{ + Type: domain.NotificationTypeNewComment, + Variables: map[string]interface{}{ + "appeal_id": appeal.ID, + "appeal_created_by": appeal.CreatedBy, + "resource_name": fmt.Sprintf("%s (%s: %s)", appeal.Resource.Name, appeal.Resource.ProviderType, appeal.Resource.URN), + "comment_id": comment.ID, + "comment_created_by": comment.CreatedBy, + "body": comment.Body, + }, + }, + }) + } + if len(notifications) > 0 { + if errs := s.notifier.Notify(ctx, notifications); errs != nil { + for _, err := range errs { + s.logger.Error(ctx, "failed to send notifications", "error", err.Error()) + } + } + } + + return nil +} diff --git a/core/appeal/comment_test.go b/core/appeal/comment_test.go new file mode 100644 index 000000000..bf11d7b0b --- /dev/null +++ b/core/appeal/comment_test.go @@ -0,0 +1,142 @@ +package appeal_test + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/google/uuid" + "github.com/goto/guardian/core/appeal" + "github.com/goto/guardian/domain" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" +) + +func TestCreateComment(t *testing.T) { + t.Run("should return list of comments on success", func(t *testing.T) { + h := newServiceTestHelper() + + appealID := uuid.New().String() + appealRequestor := "requestor@example.com" + approvers := []string{"approver1@example.com", "approver2@example.com"} + commentParticipant := "participant@example.com" + dummyAppeal := &domain.Appeal{ + ID: appealID, + CreatedBy: appealRequestor, + Approvals: []*domain.Approval{ + { + Status: domain.ApprovalStatusApproved, + Approvers: []string{"approver.x@example.com"}, + }, + { + Status: domain.ApprovalStatusPending, + Approvers: approvers, + }, + { + Status: domain.ApprovalStatusBlocked, + Approvers: []string{"approver.x@example.com"}, + }, + }, + Resource: &domain.Resource{}, + } + h.mockRepository.EXPECT(). + GetByID(h.ctxMatcher, appealID). + Return(dummyAppeal, nil) + + h.mockCommentRepo.EXPECT(). + Create(h.ctxMatcher, mock.AnythingOfType("*domain.Comment")). + Return(nil). + Run(func(_a0 context.Context, _a1 *domain.Comment) { + assert.Equal(t, appeal.CommentParentTypeAppeal, _a1.ParentType) + assert.Equal(t, appealID, _a1.ParentID) + assert.NotEmpty(t, _a1.CreatedBy) + assert.NotEmpty(t, _a1.Body) + }) + + newComment := &domain.Comment{ + ParentID: appealID, + CreatedBy: "comment.creator@example.com", + Body: "test comment content", + } + appealComments := []*domain.Comment{ + {CreatedBy: commentParticipant}, + newComment, + } + h.mockCommentRepo.EXPECT(). + List(h.ctxMatcher, mock.MatchedBy(func(filter domain.ListCommentsFilter) bool { + return filter.ParentType == appeal.CommentParentTypeAppeal && filter.ParentID == appealID + })). + Return(appealComments, nil) + + h.mockNotifier.EXPECT(). + Notify(h.ctxMatcher, mock.AnythingOfType("[]domain.Notification")). + Return(nil). + Run(func(_a0 context.Context, notifications []domain.Notification) { + // verify recipients + expectedRecipients := map[string]bool{ + appealRequestor: true, + approvers[0]: true, + approvers[1]: true, + commentParticipant: true, + } + actualRecipients := map[string]bool{} + for _, n := range notifications { + actualRecipients[n.User] = true + } + assert.Equal(t, expectedRecipients, actualRecipients) + + // verify notification message/variables + expectedNotifMsg := domain.NotificationMessage{ + Type: domain.NotificationTypeNewComment, + Variables: map[string]interface{}{ + "appeal_id": appealID, + "appeal_created_by": appealRequestor, + "resource_name": fmt.Sprintf("%s (%s: %s)", dummyAppeal.Resource.Name, dummyAppeal.Resource.ProviderType, dummyAppeal.Resource.URN), + "comment_id": newComment.ID, + "comment_created_by": newComment.CreatedBy, + "body": newComment.Body, + }, + } + for _, n := range notifications { + assert.Equal(t, expectedNotifMsg, n.Message) + } + }) + h.mockAuditLogger.EXPECT(). + Log(h.ctxMatcher, mock.Anything, mock.Anything). + Return(nil) + + actualErr := h.service.CreateComment(context.Background(), newComment) + assert.NoError(t, actualErr) + + time.Sleep(2 * time.Second) // wait for async actions to complete + h.assertExpectations(t) + }) +} + +func TestListComments(t *testing.T) { + t.Run("should return list of comments on success", func(t *testing.T) { + h := newServiceTestHelper() + defer h.assertExpectations(t) + appealID := uuid.New().String() + h.mockRepository.EXPECT(). + GetByID(h.ctxMatcher, appealID). + Return(&domain.Appeal{}, nil) + + expectedComments := []*domain.Comment{ + {ID: uuid.New().String(), ParentType: appeal.CommentParentTypeAppeal, ParentID: appealID, CreatedBy: "user1@example.com", Body: "comment 1"}, + {ID: uuid.New().String(), ParentType: appeal.CommentParentTypeAppeal, ParentID: appealID, CreatedBy: "user2@example.com", Body: "comment 2"}, + } + h.mockCommentRepo.EXPECT(). + List(h.ctxMatcher, mock.AnythingOfType("domain.ListCommentsFilter")). + Return(expectedComments, nil). + Run(func(_a0 context.Context, filter domain.ListCommentsFilter) { + assert.Equal(t, appeal.CommentParentTypeAppeal, filter.ParentType) + assert.Equal(t, appealID, filter.ParentID) + }) + + actualComments, actualErr := h.service.ListComments(context.Background(), domain.ListCommentsFilter{ParentID: appealID}) + assert.NoError(t, actualErr) + assert.Equal(t, expectedComments, actualComments) + }) +} diff --git a/core/appeal/service.go b/core/appeal/service.go index 947d79ce9..f6b317c46 100644 --- a/core/appeal/service.go +++ b/core/appeal/service.go @@ -11,6 +11,7 @@ import ( "time" "github.com/go-playground/validator/v10" + "github.com/goto/guardian/core/comment" "github.com/goto/guardian/core/grant" "github.com/goto/guardian/core/policy" "github.com/goto/guardian/domain" @@ -119,6 +120,7 @@ type ServiceDeps struct { ProviderService providerService PolicyService policyService GrantService grantService + CommentService *comment.Service IAMManager iamManager Notifier notifier @@ -135,6 +137,7 @@ type Service struct { providerService providerService policyService policyService grantService grantService + commentService *comment.Service iam domain.IAMManager notifier notifier @@ -154,6 +157,7 @@ func NewService(deps ServiceDeps) *Service { deps.ProviderService, deps.PolicyService, deps.GrantService, + deps.CommentService, deps.IAMManager, deps.Notifier, diff --git a/core/appeal/service_test.go b/core/appeal/service_test.go index b3f3e4336..42974e216 100644 --- a/core/appeal/service_test.go +++ b/core/appeal/service_test.go @@ -14,6 +14,8 @@ import ( "github.com/google/uuid" "github.com/goto/guardian/core/appeal" appealmocks "github.com/goto/guardian/core/appeal/mocks" + "github.com/goto/guardian/core/comment" + commentmocks "github.com/goto/guardian/core/comment/mocks" "github.com/goto/guardian/core/provider" "github.com/goto/guardian/domain" "github.com/goto/guardian/mocks" @@ -29,6 +31,7 @@ var ( type serviceTestHelper struct { mockRepository *appealmocks.Repository + mockCommentRepo *commentmocks.Repository mockApprovalService *appealmocks.ApprovalService mockResourceService *appealmocks.ResourceService mockProviderService *appealmocks.ProviderService @@ -47,6 +50,7 @@ type serviceTestHelper struct { func (h *serviceTestHelper) assertExpectations(t *testing.T) { t.Helper() h.mockRepository.AssertExpectations(t) + h.mockCommentRepo.AssertExpectations(t) h.mockApprovalService.AssertExpectations(t) h.mockResourceService.AssertExpectations(t) h.mockProviderService.AssertExpectations(t) @@ -59,17 +63,25 @@ func (h *serviceTestHelper) assertExpectations(t *testing.T) { } func newServiceTestHelper() *serviceTestHelper { + logger := log.NewNoop() + h := &serviceTestHelper{} + h.mockAuditLogger = new(appealmocks.AuditLogger) h.mockRepository = new(appealmocks.Repository) + h.mockCommentRepo = new(commentmocks.Repository) h.mockApprovalService = new(appealmocks.ApprovalService) h.mockResourceService = new(appealmocks.ResourceService) h.mockProviderService = new(appealmocks.ProviderService) h.mockPolicyService = new(appealmocks.PolicyService) h.mockGrantService = new(appealmocks.GrantService) + commentService := comment.NewService(comment.ServiceDeps{ + Repository: h.mockCommentRepo, + Logger: logger, + AuditLogger: h.mockAuditLogger, + }) h.mockIAMManager = new(appealmocks.IamManager) h.mockIAMClient = new(mocks.IAMClient) h.mockNotifier = new(appealmocks.Notifier) - h.mockAuditLogger = new(appealmocks.AuditLogger) h.now = time.Now() h.ctxMatcher = mock.MatchedBy(func(ctx context.Context) bool { return true }) @@ -80,10 +92,11 @@ func newServiceTestHelper() *serviceTestHelper { h.mockProviderService, h.mockPolicyService, h.mockGrantService, + commentService, h.mockIAMManager, h.mockNotifier, validator.New(), - log.NewNoop(), + logger, h.mockAuditLogger, }) service.TimeNow = func() time.Time { diff --git a/core/comment/mocks/repository.go b/core/comment/mocks/repository.go new file mode 100644 index 000000000..25b7be802 --- /dev/null +++ b/core/comment/mocks/repository.go @@ -0,0 +1,135 @@ +// Code generated by mockery v2.33.0. DO NOT EDIT. + +package mocks + +import ( + context "context" + + domain "github.com/goto/guardian/domain" + mock "github.com/stretchr/testify/mock" +) + +// Repository is an autogenerated mock type for the repository type +type Repository struct { + mock.Mock +} + +type Repository_Expecter struct { + mock *mock.Mock +} + +func (_m *Repository) EXPECT() *Repository_Expecter { + return &Repository_Expecter{mock: &_m.Mock} +} + +// Create provides a mock function with given fields: _a0, _a1 +func (_m *Repository) Create(_a0 context.Context, _a1 *domain.Comment) error { + ret := _m.Called(_a0, _a1) + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, *domain.Comment) error); ok { + r0 = rf(_a0, _a1) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// Repository_Create_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Create' +type Repository_Create_Call struct { + *mock.Call +} + +// Create is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *domain.Comment +func (_e *Repository_Expecter) Create(_a0 interface{}, _a1 interface{}) *Repository_Create_Call { + return &Repository_Create_Call{Call: _e.mock.On("Create", _a0, _a1)} +} + +func (_c *Repository_Create_Call) Run(run func(_a0 context.Context, _a1 *domain.Comment)) *Repository_Create_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*domain.Comment)) + }) + return _c +} + +func (_c *Repository_Create_Call) Return(_a0 error) *Repository_Create_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *Repository_Create_Call) RunAndReturn(run func(context.Context, *domain.Comment) error) *Repository_Create_Call { + _c.Call.Return(run) + return _c +} + +// List provides a mock function with given fields: _a0, _a1 +func (_m *Repository) List(_a0 context.Context, _a1 domain.ListCommentsFilter) ([]*domain.Comment, error) { + ret := _m.Called(_a0, _a1) + + var r0 []*domain.Comment + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, domain.ListCommentsFilter) ([]*domain.Comment, error)); ok { + return rf(_a0, _a1) + } + if rf, ok := ret.Get(0).(func(context.Context, domain.ListCommentsFilter) []*domain.Comment); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]*domain.Comment) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, domain.ListCommentsFilter) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// Repository_List_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'List' +type Repository_List_Call struct { + *mock.Call +} + +// List is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 domain.ListCommentsFilter +func (_e *Repository_Expecter) List(_a0 interface{}, _a1 interface{}) *Repository_List_Call { + return &Repository_List_Call{Call: _e.mock.On("List", _a0, _a1)} +} + +func (_c *Repository_List_Call) Run(run func(_a0 context.Context, _a1 domain.ListCommentsFilter)) *Repository_List_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(domain.ListCommentsFilter)) + }) + return _c +} + +func (_c *Repository_List_Call) Return(_a0 []*domain.Comment, _a1 error) *Repository_List_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *Repository_List_Call) RunAndReturn(run func(context.Context, domain.ListCommentsFilter) ([]*domain.Comment, error)) *Repository_List_Call { + _c.Call.Return(run) + return _c +} + +// NewRepository creates a new instance of Repository. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewRepository(t interface { + mock.TestingT + Cleanup(func()) +}) *Repository { + mock := &Repository{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/core/comment/service.go b/core/comment/service.go new file mode 100644 index 000000000..a3e59e4fe --- /dev/null +++ b/core/comment/service.go @@ -0,0 +1,84 @@ +package comment + +import ( + "context" + "errors" + + "github.com/goto/guardian/domain" + "github.com/goto/guardian/pkg/audit" + "github.com/goto/guardian/pkg/log" +) + +const ( + AuditKeyCreate = "comment.create" + + DefaultCommentsOrderBy = "created_at" +) + +var ( + ErrEmptyCommentParentType = errors.New("parent type can't be empty") + ErrEmptyCommentParentID = errors.New("parent ID can't be empty") + ErrEmptyCommentCreator = errors.New("comment creator (\"created_by\") can't be empty") + ErrEmptyCommentBody = errors.New("comment can't be empty") +) + +//go:generate mockery --name=repository --exported --with-expecter +type repository interface { + Create(context.Context, *domain.Comment) error + List(context.Context, domain.ListCommentsFilter) ([]*domain.Comment, error) +} + +type Service struct { + repo repository + + logger log.Logger + auditLogger audit.AuditLogger +} + +type ServiceDeps struct { + Repository repository + + Logger log.Logger + AuditLogger audit.AuditLogger +} + +func NewService(deps ServiceDeps) *Service { + return &Service{ + repo: deps.Repository, + logger: deps.Logger, + auditLogger: deps.AuditLogger, + } +} + +func (s *Service) Create(ctx context.Context, c *domain.Comment) error { + switch { + case c.ParentType == "": + return ErrEmptyCommentParentType + case c.ParentID == "": + return ErrEmptyCommentParentID + case c.CreatedBy == "": + return ErrEmptyCommentCreator + case c.Body == "": + return ErrEmptyCommentBody + } + + if err := s.repo.Create(ctx, c); err != nil { + return err + } + + go func() { + if err := s.auditLogger.Log(ctx, AuditKeyCreate, c); err != nil { + s.logger.Error(ctx, "failed to record audit log", "error", err, "appeal_id", c.ParentID, "comment_id", c.ID) + } + }() + + return nil +} + +func (s *Service) List(ctx context.Context, filter domain.ListCommentsFilter) ([]*domain.Comment, error) { + if filter.OrderBy == nil { + filter.OrderBy = []string{DefaultCommentsOrderBy} + } + + return s.repo.List(ctx, filter) +} diff --git a/core/comment/service_test.go b/core/comment/service_test.go new file mode 100644 index 000000000..4b928f733 --- /dev/null +++ b/core/comment/service_test.go @@ -0,0 +1,95 @@ +package comment_test + +import ( + "context" + "testing" + "time" + + "github.com/google/uuid" + "github.com/goto/guardian/core/comment" + "github.com/goto/guardian/core/comment/mocks" + "github.com/goto/guardian/domain" + guardianmocks "github.com/goto/guardian/mocks" + "github.com/goto/guardian/pkg/log" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/suite" +) + +type ServiceTestSuite struct { + suite.Suite + mockCommentRepo *mocks.Repository + mockAuditLogger *guardianmocks.AuditLogger + service *comment.Service +} + +func (s *ServiceTestSuite) SetupTest() { + s.mockCommentRepo = &mocks.Repository{} + s.mockAuditLogger = new(guardianmocks.AuditLogger) + + s.service = comment.NewService(comment.ServiceDeps{ + Repository: s.mockCommentRepo, + AuditLogger: s.mockAuditLogger, + Logger: log.NewNoop(), + }) +} + +func TestService(t *testing.T) { + suite.Run(t, new(ServiceTestSuite)) +} + +func (s *ServiceTestSuite) TestCreate() { + s.Run("should return list of comments on success", func() { + parentType := "test-parent-type" + parentID := uuid.New().String() + + s.mockCommentRepo.EXPECT(). + Create(mock.MatchedBy(func(ctx context.Context) bool { return true }), mock.MatchedBy(func(comment *domain.Comment) bool { + return comment.ParentType == parentType && + comment.ParentID == parentID && + comment.CreatedBy != "" && + comment.Body != "" + })). + Return(nil) + + newComment := &domain.Comment{ + ParentType: parentType, + ParentID: parentID, + CreatedBy: "comment.creator@example.com", + Body: "test comment content", + } + + s.mockAuditLogger.EXPECT(). + Log(mock.MatchedBy(func(ctx context.Context) bool { return true }), comment.AuditKeyCreate, newComment). + Return(nil) + + actualErr := s.service.Create(context.Background(), newComment) + s.NoError(actualErr) + + time.Sleep(2 * time.Second) // wait for async actions to complete + s.mockCommentRepo.AssertExpectations(s.T()) + s.mockAuditLogger.AssertExpectations(s.T()) + }) +} + +func (s *ServiceTestSuite) TestList() { + s.Run("should return list of comments on success", func() { + parentID := uuid.New().String() + + expectedComments := []*domain.Comment{ + {ID: uuid.New().String(), ParentType: "test-parent-type", ParentID: parentID, CreatedBy: "user1@example.com", Body: "comment 1"}, + {ID: uuid.New().String(), ParentType: "test-parent-type", ParentID: parentID, CreatedBy: "user2@example.com", Body: "comment 2"}, + } + s.mockCommentRepo.EXPECT(). + List(mock.MatchedBy(func(ctx context.Context) bool { return true }), mock.AnythingOfType("domain.ListCommentsFilter")). + Return(expectedComments, nil). + Run(func(_a0 context.Context, filter domain.ListCommentsFilter) { + s.Equal(parentID, filter.ParentID) + defaultSort := []string{"created_at"} + s.Equal(defaultSort, filter.OrderBy) + }) + + actualComments, actualErr := s.service.List(context.Background(), domain.ListCommentsFilter{ParentID: parentID}) + s.NoError(actualErr) + s.Equal(expectedComments, actualComments) + }) +} diff --git a/domain/comment.go b/domain/comment.go new file mode 100644 index 000000000..9409e4c2e --- /dev/null +++ b/domain/comment.go @@ -0,0 +1,19 @@ +package domain + +import "time" + +type Comment struct { + ID string `json:"id" yaml:"id"` + ParentType string `json:"parent_type" yaml:"parent_type"` + ParentID string `json:"parent_id" yaml:"parent_id"` + CreatedBy string `json:"created_by" yaml:"created_by"` + Body string `json:"body" yaml:"body"` + CreatedAt time.Time `json:"created_at,omitempty" yaml:"created_at,omitempty"` + UpdatedAt time.Time `json:"updated_at,omitempty" yaml:"updated_at,omitempty"` +} + +type ListCommentsFilter struct { + ParentType string + ParentID string + OrderBy []string +} diff --git a/domain/notifier.go b/domain/notifier.go index 1aec9efbc..214fd0858 100644 --- a/domain/notifier.go +++ b/domain/notifier.go @@ -9,6 +9,7 @@ type NotificationMessages struct { OthersAppealApproved string `mapstructure:"others_appeal_approved"` GrantOwnerChanged string `mapstructure:"grant_owner_changed"` UnusedGrant string `mapstructure:"unused_grant"` + NewComment string `mapstructure:"new_comment"` } const ( @@ -20,6 +21,7 @@ const ( NotificationTypeApproverNotification = "ApproverNotification" NotificationTypeGrantOwnerChanged = "GrantOwnerChanged" NotificationTypeUnusedGrant = "UnusedGrant" + NotificationTypeNewComment = "NewComment" ) type NotificationMessage struct { diff --git a/internal/server/services.go b/internal/server/services.go index 8b4c349ec..5b263526b 100644 --- a/internal/server/services.go +++ b/internal/server/services.go @@ -12,6 +12,7 @@ import ( "github.com/goto/guardian/core/activity" "github.com/goto/guardian/core/appeal" "github.com/goto/guardian/core/approval" + "github.com/goto/guardian/core/comment" "github.com/goto/guardian/core/grant" "github.com/goto/guardian/core/policy" "github.com/goto/guardian/core/provider" @@ -43,6 +44,7 @@ type Services struct { ApprovalService *approval.Service AppealService *appeal.Service GrantService *grant.Service + CommentService *comment.Service } type ServiceDeps struct { @@ -102,6 +104,7 @@ func InitServices(deps ServiceDeps) (*Services, error) { appealRepository := postgres.NewAppealRepository(store.DB()) approvalRepository := postgres.NewApprovalRepository(store.DB()) grantRepository := postgres.NewGrantRepository(store.DB()) + commentRepository := postgres.NewCommentRepository(store.DB()) providerClients := []provider.Client{ bigquery.NewProvider(domain.ProviderTypeBigQuery, deps.Crypto, deps.Logger), @@ -161,6 +164,11 @@ func InitServices(deps ServiceDeps) (*Services, error) { Repository: approvalRepository, PolicyService: policyService, }) + commentService := comment.NewService(comment.ServiceDeps{ + Repository: commentRepository, + Logger: deps.Logger, + AuditLogger: auditLogger, + }) appealService := appeal.NewService(appeal.ServiceDeps{ Repository: appealRepository, ResourceService: resourceService, @@ -168,6 +176,7 @@ func InitServices(deps ServiceDeps) (*Services, error) { ProviderService: providerService, PolicyService: policyService, GrantService: grantService, + CommentService: commentService, IAMManager: iamManager, Notifier: deps.Notifier, Validator: deps.Validator, @@ -183,6 +192,7 @@ func InitServices(deps ServiceDeps) (*Services, error) { approvalService, appealService, grantService, + commentService, }, nil } diff --git a/internal/store/postgres/comment_repository.go b/internal/store/postgres/comment_repository.go new file mode 100644 index 000000000..7e3f69ed4 --- /dev/null +++ b/internal/store/postgres/comment_repository.go @@ -0,0 +1,57 @@ +package postgres + +import ( + "context" + + "github.com/goto/guardian/domain" + "github.com/goto/guardian/internal/store/postgres/model" + "gorm.io/gorm" +) + +type CommentRepository struct { + db *gorm.DB +} + +func NewCommentRepository(db *gorm.DB) *CommentRepository { + return &CommentRepository{db} +} + +func (r *CommentRepository) Create(ctx context.Context, c *domain.Comment) error { + m := &model.Comment{} + if err := m.FromDomain(c); err != nil { + return err + } + + return r.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { + if err := tx.Create(m).Error; err != nil { + return err + } + + newComment := m.ToDomain() + *c = *newComment + + return nil + }) +} + +func (r *CommentRepository) List(ctx context.Context, filter domain.ListCommentsFilter) ([]*domain.Comment, error) { + db := r.db.WithContext(ctx) + if filter.ParentID != "" { + db = db.Where("parent_id = ?", filter.ParentID) + } + if filter.OrderBy != nil { + for _, o := range filter.OrderBy { + db = addOrderBy(db, o) + } + } + var models []*model.Comment + if err := db.Find(&models).Error; err != nil { + return nil, err + } + + comments := []*domain.Comment{} + for _, m := range models { + comments = append(comments, m.ToDomain()) + } + return comments, nil +} diff --git a/internal/store/postgres/comment_repository_test.go b/internal/store/postgres/comment_repository_test.go new file mode 100644 index 000000000..d9d9ac9ea --- /dev/null +++ b/internal/store/postgres/comment_repository_test.go @@ -0,0 +1,145 @@ +package postgres_test + +import ( + "context" + "testing" + + "github.com/goto/guardian/domain" + "github.com/goto/guardian/internal/store/postgres" + "github.com/goto/guardian/pkg/log" + "github.com/ory/dockertest/v3" + "github.com/stretchr/testify/suite" +) + +type CommentRepositorySuite struct { + suite.Suite + store *postgres.Store + pool *dockertest.Pool + resource *dockertest.Resource + repository *postgres.CommentRepository + appealRepository *postgres.AppealRepository + + dummyProvider *domain.Provider + dummyPolicy *domain.Policy + dummyResource *domain.Resource + dummyAppeal *domain.Appeal +} + +func TestCommentRepository(t *testing.T) { + if testing.Short() { + t.Skip() + } + + suite.Run(t, new(CommentRepositorySuite)) +} + +func (s *CommentRepositorySuite) SetupSuite() { + var err error + logger := log.NewCtxLogger("debug", []string{"test"}) + s.store, s.pool, s.resource, err = newTestStore(logger) + if err != nil { + s.T().Fatal(err) + } + + s.repository = postgres.NewCommentRepository(s.store.DB()) + + ctx := context.Background() + + s.dummyPolicy = &domain.Policy{ + ID: "policy_test", + Version: 1, + } + policyRepository := postgres.NewPolicyRepository(s.store.DB()) + err = policyRepository.Create(ctx, s.dummyPolicy) + s.Require().NoError(err) + + s.dummyProvider = &domain.Provider{ + Type: "provider_test", + URN: "provider_urn_test", + Config: &domain.ProviderConfig{ + Resources: []*domain.ResourceConfig{ + { + Type: "resource_type_test", + Policy: &domain.PolicyConfig{ + ID: s.dummyPolicy.ID, + Version: int(s.dummyPolicy.Version), + }, + }, + }, + }, + } + providerRepository := postgres.NewProviderRepository(s.store.DB()) + err = providerRepository.Create(ctx, s.dummyProvider) + s.Require().NoError(err) + + s.dummyResource = &domain.Resource{ + ProviderType: s.dummyProvider.Type, + ProviderURN: s.dummyProvider.URN, + Type: "resource_type_test", + URN: "resource_urn_test", + Name: "resource_name_test", + } + resourceRepository := postgres.NewResourceRepository(s.store.DB()) + err = resourceRepository.BulkUpsert(ctx, []*domain.Resource{s.dummyResource}) + s.Require().NoError(err) + + s.dummyAppeal = &domain.Appeal{ + ResourceID: s.dummyResource.ID, + PolicyID: s.dummyPolicy.ID, + PolicyVersion: s.dummyPolicy.Version, + Permissions: []string{"test-permission"}, + } + + s.appealRepository = postgres.NewAppealRepository(s.store.DB()) + err = s.appealRepository.BulkUpsert(ctx, []*domain.Appeal{s.dummyAppeal}) + s.Require().NoError(err) +} + +func (s *CommentRepositorySuite) TearDownSuite() { + // Clean tests + db, err := s.store.DB().DB() + if err != nil { + s.T().Fatal(err) + } + err = db.Close() + if err != nil { + s.T().Fatal(err) + } + + err = purgeTestDocker(s.pool, s.resource) + if err != nil { + s.T().Fatal(err) + } +} + +func (s *CommentRepositorySuite) TestCreateAndListComments() { + ctx := context.Background() + + // create comments + comments := []*domain.Comment{ + { + ParentID: s.dummyAppeal.ID, + Body: "comment_test_1", + CreatedBy: "user_1", + }, + { + ParentID: s.dummyAppeal.ID, + Body: "comment_test_2", + CreatedBy: "user_2", + }, + } + for _, c := range comments { + err := s.repository.Create(ctx, c) + s.Require().NoError(err) + } + + // list comments + filter := domain.ListCommentsFilter{ + ParentID: s.dummyAppeal.ID, + OrderBy: []string{"created_by:desc"}, + } + + listedComments, err := s.repository.List(ctx, filter) + s.Require().NoError(err) + s.Require().Len(listedComments, 2) +} diff --git a/internal/store/postgres/migrations/000019_create_comments_table.down.sql b/internal/store/postgres/migrations/000019_create_comments_table.down.sql new file mode 100644 index 000000000..1ba4e5d5a --- /dev/null +++ b/internal/store/postgres/migrations/000019_create_comments_table.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS "comments"; \ No newline at end of file diff --git a/internal/store/postgres/migrations/000019_create_comments_table.up.sql b/internal/store/postgres/migrations/000019_create_comments_table.up.sql new file mode 100644 index 000000000..344c4271e --- /dev/null +++ b/internal/store/postgres/migrations/000019_create_comments_table.up.sql @@ -0,0 +1,21 @@ +CREATE TABLE IF NOT EXISTS "comments" ( + "id" uuid DEFAULT uuid_generate_v4(), + "parent_type" text, + "parent_id" text, + "created_by" text, + "body" text, + "created_at" timestamptz, + "updated_at" timestamptz, + "deleted_at" timestamptz, + PRIMARY KEY ("id") +); + +CREATE INDEX IF NOT EXISTS "idx_comments_deleted_at" ON "comments" ("deleted_at"); + +CREATE INDEX IF NOT EXISTS "idx_comments_parent_id" ON "comments" ("parent_id") +WHERE + "deleted_at" IS NULL; + +CREATE INDEX IF NOT EXISTS "idx_comments_parent_type" ON "comments" ("parent_type") +WHERE + "deleted_at" IS NULL; \ No newline at end of file diff --git a/internal/store/postgres/model/comment.go b/internal/store/postgres/model/comment.go new file mode 100644 index 000000000..86cba9cf5 --- /dev/null +++ b/internal/store/postgres/model/comment.go @@ -0,0 +1,55 @@ +package model + +import ( + "time" + + "github.com/google/uuid" + "github.com/goto/guardian/domain" + "gorm.io/gorm" +) + +type Comment struct { + ID uuid.UUID `gorm:"type:uuid;primaryKey;default:uuid_generate_v4()"` + ParentType string + ParentID string + CreatedBy string + Body string + CreatedAt time.Time `gorm:"autoCreateTime"` + UpdatedAt time.Time `gorm:"autoUpdateTime"` + DeletedAt gorm.DeletedAt `gorm:"index"` +} + +func (Comment) TableName() string { + return "comments" +} + +func (m *Comment) FromDomain(c *domain.Comment) error { + if c.ID != "" { + if uuid, err := uuid.Parse(c.ID); err != nil { + return err + } else { + m.ID = uuid + } + } + + m.ParentType = c.ParentType + m.ParentID = c.ParentID + m.CreatedBy = c.CreatedBy + m.Body = c.Body + m.CreatedAt = c.CreatedAt + m.UpdatedAt = c.UpdatedAt + + return nil +} + +func (m *Comment) ToDomain() *domain.Comment { + return &domain.Comment{ + ID: m.ID.String(), + ParentType: m.ParentType, + ParentID: m.ParentID, + CreatedBy: m.CreatedBy, + Body: m.Body, + CreatedAt: m.CreatedAt, + UpdatedAt: m.UpdatedAt, + } +} diff --git a/internal/store/postgres/utils.go b/internal/store/postgres/utils.go index 58d337e9c..7e3a5fa8a 100644 --- a/internal/store/postgres/utils.go +++ b/internal/store/postgres/utils.go @@ -46,3 +46,23 @@ func addOrderByClause(db *gorm.DB, conditions []string, options addOrderByClause }, }) } + +func addOrderBy(db *gorm.DB, orderBy string) *gorm.DB { + if orderBy != "" { + var column, order string + expression := strings.Split(orderBy, ":") + column = expression[0] + if len(expression) == 2 { + order = expression[1] + } + + if utils.ContainsString([]string{"updated_at", "created_at"}, strings.ToLower(column)) { + if utils.ContainsString([]string{"asc", "desc"}, strings.ToLower(order)) { + return db.Order(fmt.Sprintf(`"%s" %s`, column, order)) + } + return db.Order(column) + } + } + + return db +} diff --git a/mocks/Notifier.go b/mocks/Notifier.go index 66b8a75bd..87126c83b 100644 --- a/mocks/Notifier.go +++ b/mocks/Notifier.go @@ -1,24 +1,34 @@ -// Code generated by mockery v2.9.4. DO NOT EDIT. +// Code generated by mockery v2.33.0. DO NOT EDIT. package mocks import ( + context "context" + domain "github.com/goto/guardian/domain" mock "github.com/stretchr/testify/mock" ) -// Notifier is an autogenerated mock type for the Client type +// Notifier is an autogenerated mock type for the notifier type type Notifier struct { mock.Mock } -// Notify provides a mock function with given fields: _a0 -func (_m *Notifier) Notify(_a0 []domain.Notification) []error { - ret := _m.Called(_a0) +type Notifier_Expecter struct { + mock *mock.Mock +} + +func (_m *Notifier) EXPECT() *Notifier_Expecter { + return &Notifier_Expecter{mock: &_m.Mock} +} + +// Notify provides a mock function with given fields: _a0, _a1 +func (_m *Notifier) Notify(_a0 context.Context, _a1 []domain.Notification) []error { + ret := _m.Called(_a0, _a1) var r0 []error - if rf, ok := ret.Get(0).(func([]domain.Notification) []error); ok { - r0 = rf(_a0) + if rf, ok := ret.Get(0).(func(context.Context, []domain.Notification) []error); ok { + r0 = rf(_a0, _a1) } else { if ret.Get(0) != nil { r0 = ret.Get(0).([]error) @@ -27,3 +37,46 @@ func (_m *Notifier) Notify(_a0 []domain.Notification) []error { return r0 } + +// Notifier_Notify_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Notify' +type Notifier_Notify_Call struct { + *mock.Call +} + +// Notify is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 []domain.Notification +func (_e *Notifier_Expecter) Notify(_a0 interface{}, _a1 interface{}) *Notifier_Notify_Call { + return &Notifier_Notify_Call{Call: _e.mock.On("Notify", _a0, _a1)} +} + +func (_c *Notifier_Notify_Call) Run(run func(_a0 context.Context, _a1 []domain.Notification)) *Notifier_Notify_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].([]domain.Notification)) + }) + return _c +} + +func (_c *Notifier_Notify_Call) Return(_a0 []error) *Notifier_Notify_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *Notifier_Notify_Call) RunAndReturn(run func(context.Context, []domain.Notification) []error) *Notifier_Notify_Call { + _c.Call.Return(run) + return _c +} + +// NewNotifier creates a new instance of Notifier. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewNotifier(t interface { + mock.TestingT + Cleanup(func()) +}) *Notifier { + mock := &Notifier{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/mocks/auditLogger.go b/mocks/auditLogger.go new file mode 100644 index 000000000..d13bf9441 --- /dev/null +++ b/mocks/auditLogger.go @@ -0,0 +1,80 @@ +// Code generated by mockery v2.33.0. DO NOT EDIT. + +package mocks + +import ( + context "context" + + mock "github.com/stretchr/testify/mock" +) + +// AuditLogger is an autogenerated mock type for the auditLogger type +type AuditLogger struct { + mock.Mock +} + +type AuditLogger_Expecter struct { + mock *mock.Mock +} + +func (_m *AuditLogger) EXPECT() *AuditLogger_Expecter { + return &AuditLogger_Expecter{mock: &_m.Mock} +} + +// Log provides a mock function with given fields: ctx, action, data +func (_m *AuditLogger) Log(ctx context.Context, action string, data interface{}) error { + ret := _m.Called(ctx, action, data) + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, string, interface{}) error); ok { + r0 = rf(ctx, action, data) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// AuditLogger_Log_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Log' +type AuditLogger_Log_Call struct { + *mock.Call +} + +// Log is a helper method to define mock.On call +// - ctx context.Context +// - action string +// - data interface{} +func (_e *AuditLogger_Expecter) Log(ctx interface{}, action interface{}, data interface{}) *AuditLogger_Log_Call { + return &AuditLogger_Log_Call{Call: _e.mock.On("Log", ctx, action, data)} +} + +func (_c *AuditLogger_Log_Call) Run(run func(ctx context.Context, action string, data interface{})) *AuditLogger_Log_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string), args[2].(interface{})) + }) + return _c +} + +func (_c *AuditLogger_Log_Call) Return(_a0 error) *AuditLogger_Log_Call { + _c.Call.Return(_a0) + return _c +} + +func (_c *AuditLogger_Log_Call) RunAndReturn(run func(context.Context, string, interface{}) error) *AuditLogger_Log_Call { + _c.Call.Return(run) + return _c +} + +// NewAuditLogger creates a new instance of AuditLogger. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewAuditLogger(t interface { + mock.TestingT + Cleanup(func()) +}) *AuditLogger { + mock := &AuditLogger{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/pkg/audit/audit.go b/pkg/audit/audit.go new file mode 100644 index 000000000..5f27422cf --- /dev/null +++ b/pkg/audit/audit.go @@ -0,0 +1,7 @@ +package audit + +import "context" + +type AuditLogger interface { + Log(ctx context.Context, action string, data interface{}) error +} diff --git a/plugins/notifiers/slack/client.go b/plugins/notifiers/slack/client.go index 37bb4686b..bcce7b25e 100644 --- a/plugins/notifiers/slack/client.go +++ b/plugins/notifiers/slack/client.go @@ -245,6 +245,7 @@ func ParseMessage(message domain.NotificationMessage, templates domain.Notificat domain.NotificationTypeExpirationReminder: templates.ExpirationReminder, domain.NotificationTypeOnBehalfAppealApproved: templates.OthersAppealApproved, domain.NotificationTypeGrantOwnerChanged: templates.GrantOwnerChanged, + domain.NotificationTypeNewComment: templates.NewComment, } messageBlock, ok := messageTypeTemplateMap[message.Type] diff --git a/plugins/notifiers/slack/templates/NewComment.json b/plugins/notifiers/slack/templates/NewComment.json new file mode 100644 index 000000000..cda63a033 --- /dev/null +++ b/plugins/notifiers/slack/templates/NewComment.json @@ -0,0 +1,9 @@ +[ + { + "type":"section", + "text":{ + "type":"mrkdwn", + "text":"`{{.comment_created_by}}` commented on an appeal made by `{{.appeal_created_by}}`\n\n>*Appeal ID*: `{{.appeal_id}}`\n\n>*Requested resource*: `{{.resource_name}}`\n\n>*Comment*: `{{.body}}`" + } + } +] \ No newline at end of file diff --git a/third_party/OpenAPI/gotocompany/guardian/v1beta1/guardian.swagger.json b/third_party/OpenAPI/gotocompany/guardian/v1beta1/guardian.swagger.json index 3aa14dfc2..6c71db92b 100644 --- a/third_party/OpenAPI/gotocompany/guardian/v1beta1/guardian.swagger.json +++ b/third_party/OpenAPI/gotocompany/guardian/v1beta1/guardian.swagger.json @@ -412,6 +412,87 @@ ] } }, + "/v1beta1/appeals/{appealId}/comments": { + "get": { + "operationId": "GuardianService_ListAppealComments", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1ListAppealCommentsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "appealId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "orderBy", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "GuardianService" + ] + }, + "post": { + "operationId": "GuardianService_CreateAppealComment", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/v1beta1CreateAppealCommentResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "appealId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "body": { + "type": "string" + } + } + } + } + ], + "tags": [ + "GuardianService" + ] + } + }, "/v1beta1/appeals/{id}": { "get": { "operationId": "GuardianService_GetAppeal", @@ -2437,6 +2518,31 @@ }, "title": "Appeal is created by user to get access to one or more resources" }, + "v1beta1AppealComment": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "appealId": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "body": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + } + } + }, "v1beta1AppealOptions": { "type": "object", "properties": { @@ -2517,6 +2623,14 @@ } } }, + "v1beta1CreateAppealCommentResponse": { + "type": "object", + "properties": { + "comment": { + "$ref": "#/definitions/v1beta1AppealComment" + } + } + }, "v1beta1CreateAppealRequest": { "type": "object", "properties": { @@ -2830,6 +2944,18 @@ } } }, + "v1beta1ListAppealCommentsResponse": { + "type": "object", + "properties": { + "comments": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v1beta1AppealComment" + } + } + } + }, "v1beta1ListAppealsResponse": { "type": "object", "properties": {