From e61d16e4462b45c295a4f787e99322493ac9a70d Mon Sep 17 00:00:00 2001 From: Gaius Date: Tue, 8 Jul 2025 11:41:12 +0800 Subject: [PATCH] feat: add ListTaskEntries for downloading directory Signed-off-by: Gaius --- Cargo.lock | 2 +- Cargo.toml | 2 +- pkg/apis/dfdaemon/v2/dfdaemon.pb.go | 1279 ++++++++++++------ pkg/apis/dfdaemon/v2/dfdaemon.pb.validate.go | 485 +++++++ pkg/apis/dfdaemon/v2/dfdaemon.proto | 47 + pkg/apis/dfdaemon/v2/dfdaemon_grpc.pb.go | 38 + pkg/apis/dfdaemon/v2/mocks/dfdaemon_mock.go | 35 + proto/dfdaemon.proto | 47 + src/descriptor.bin | Bin 105318 -> 108461 bytes src/dfdaemon.v2.rs | 154 +++ 10 files changed, 1641 insertions(+), 448 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 64e7346..66e601b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -190,7 +190,7 @@ dependencies = [ [[package]] name = "dragonfly-api" -version = "2.1.40" +version = "2.1.41" dependencies = [ "prost 0.13.5", "prost-types 0.14.1", diff --git a/Cargo.toml b/Cargo.toml index fec5ea7..bf2e7b2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dragonfly-api" -version = "2.1.40" +version = "2.1.41" authors = ["Gaius "] edition = "2021" license = "Apache-2.0" diff --git a/pkg/apis/dfdaemon/v2/dfdaemon.pb.go b/pkg/apis/dfdaemon/v2/dfdaemon.pb.go index 8c3ee01..84f96b1 100644 --- a/pkg/apis/dfdaemon/v2/dfdaemon.pb.go +++ b/pkg/apis/dfdaemon/v2/dfdaemon.pb.go @@ -632,6 +632,270 @@ func (x *StatTaskRequest) GetTaskId() string { return "" } +// ListTaskEntriesRequest represents request of ListTaskEntries. +type ListTaskEntriesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Task id. + TaskId string `protobuf:"bytes,1,opt,name=task_id,json=taskId,proto3" json:"task_id,omitempty"` + // URL to be listed the entries. + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` + // HTTP header to be sent with the request. + RequestHeader map[string]string `protobuf:"bytes,3,rep,name=request_header,json=requestHeader,proto3" json:"request_header,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // List timeout. + Timeout *durationpb.Duration `protobuf:"bytes,4,opt,name=timeout,proto3,oneof" json:"timeout,omitempty"` + // certificate_chain is the client certs with DER format for the backend client to list the entries. + CertificateChain [][]byte `protobuf:"bytes,5,rep,name=certificate_chain,json=certificateChain,proto3" json:"certificate_chain,omitempty"` + // Object storage protocol information. + ObjectStorage *v2.ObjectStorage `protobuf:"bytes,6,opt,name=object_storage,json=objectStorage,proto3,oneof" json:"object_storage,omitempty"` + // HDFS protocol information. + Hdfs *v2.HDFS `protobuf:"bytes,7,opt,name=hdfs,proto3,oneof" json:"hdfs,omitempty"` +} + +func (x *ListTaskEntriesRequest) Reset() { + *x = ListTaskEntriesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTaskEntriesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTaskEntriesRequest) ProtoMessage() {} + +func (x *ListTaskEntriesRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[9] + 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 ListTaskEntriesRequest.ProtoReflect.Descriptor instead. +func (*ListTaskEntriesRequest) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{9} +} + +func (x *ListTaskEntriesRequest) GetTaskId() string { + if x != nil { + return x.TaskId + } + return "" +} + +func (x *ListTaskEntriesRequest) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *ListTaskEntriesRequest) GetRequestHeader() map[string]string { + if x != nil { + return x.RequestHeader + } + return nil +} + +func (x *ListTaskEntriesRequest) GetTimeout() *durationpb.Duration { + if x != nil { + return x.Timeout + } + return nil +} + +func (x *ListTaskEntriesRequest) GetCertificateChain() [][]byte { + if x != nil { + return x.CertificateChain + } + return nil +} + +func (x *ListTaskEntriesRequest) GetObjectStorage() *v2.ObjectStorage { + if x != nil { + return x.ObjectStorage + } + return nil +} + +func (x *ListTaskEntriesRequest) GetHdfs() *v2.HDFS { + if x != nil { + return x.Hdfs + } + return nil +} + +// ListTaskEntriesResponse represents response of ListTaskEntries. +type ListTaskEntriesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Success is the success of the response. + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + // Content length is the content length of the response + ContentLength uint64 `protobuf:"varint,2,opt,name=content_length,json=contentLength,proto3" json:"content_length,omitempty"` + // HTTP header to be sent with the request. + ResponseHeader map[string]string `protobuf:"bytes,3,rep,name=response_header,json=responseHeader,proto3" json:"response_header,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Backend HTTP status code. + StatusCode *int32 `protobuf:"varint,4,opt,name=status_code,json=statusCode,proto3,oneof" json:"status_code,omitempty"` + // / Entries is the information of the entries in the directory. + Entries []*Entry `protobuf:"bytes,5,rep,name=entries,proto3" json:"entries,omitempty"` + // / Error message is the error message of the response. + ErrorMessage *string `protobuf:"bytes,6,opt,name=error_message,json=errorMessage,proto3,oneof" json:"error_message,omitempty"` +} + +func (x *ListTaskEntriesResponse) Reset() { + *x = ListTaskEntriesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTaskEntriesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTaskEntriesResponse) ProtoMessage() {} + +func (x *ListTaskEntriesResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[10] + 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 ListTaskEntriesResponse.ProtoReflect.Descriptor instead. +func (*ListTaskEntriesResponse) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{10} +} + +func (x *ListTaskEntriesResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *ListTaskEntriesResponse) GetContentLength() uint64 { + if x != nil { + return x.ContentLength + } + return 0 +} + +func (x *ListTaskEntriesResponse) GetResponseHeader() map[string]string { + if x != nil { + return x.ResponseHeader + } + return nil +} + +func (x *ListTaskEntriesResponse) GetStatusCode() int32 { + if x != nil && x.StatusCode != nil { + return *x.StatusCode + } + return 0 +} + +func (x *ListTaskEntriesResponse) GetEntries() []*Entry { + if x != nil { + return x.Entries + } + return nil +} + +func (x *ListTaskEntriesResponse) GetErrorMessage() string { + if x != nil && x.ErrorMessage != nil { + return *x.ErrorMessage + } + return "" +} + +// Entry represents an entry in a directory. +type Entry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // URL of the entry. + Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` + // Size of the entry. + ContentLength uint64 `protobuf:"varint,2,opt,name=content_length,json=contentLength,proto3" json:"content_length,omitempty"` + // Is directory or not. + IsDir bool `protobuf:"varint,3,opt,name=is_dir,json=isDir,proto3" json:"is_dir,omitempty"` +} + +func (x *Entry) Reset() { + *x = Entry{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Entry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Entry) ProtoMessage() {} + +func (x *Entry) ProtoReflect() protoreflect.Message { + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11] + 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 Entry.ProtoReflect.Descriptor instead. +func (*Entry) Descriptor() ([]byte, []int) { + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{11} +} + +func (x *Entry) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *Entry) GetContentLength() uint64 { + if x != nil { + return x.ContentLength + } + return 0 +} + +func (x *Entry) GetIsDir() bool { + if x != nil { + return x.IsDir + } + return false +} + // DeleteTaskRequest represents request of DeleteTask. type DeleteTaskRequest struct { state protoimpl.MessageState @@ -645,7 +909,7 @@ type DeleteTaskRequest struct { func (x *DeleteTaskRequest) Reset() { *x = DeleteTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[9] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -658,7 +922,7 @@ func (x *DeleteTaskRequest) String() string { func (*DeleteTaskRequest) ProtoMessage() {} func (x *DeleteTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[9] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -671,7 +935,7 @@ func (x *DeleteTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTaskRequest.ProtoReflect.Descriptor instead. func (*DeleteTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{9} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{12} } func (x *DeleteTaskRequest) GetTaskId() string { @@ -721,7 +985,7 @@ type DownloadPersistentCacheTaskRequest struct { func (x *DownloadPersistentCacheTaskRequest) Reset() { *x = DownloadPersistentCacheTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[10] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -734,7 +998,7 @@ func (x *DownloadPersistentCacheTaskRequest) String() string { func (*DownloadPersistentCacheTaskRequest) ProtoMessage() {} func (x *DownloadPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[10] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -747,7 +1011,7 @@ func (x *DownloadPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message // Deprecated: Use DownloadPersistentCacheTaskRequest.ProtoReflect.Descriptor instead. func (*DownloadPersistentCacheTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{10} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{13} } func (x *DownloadPersistentCacheTaskRequest) GetTaskId() string { @@ -826,7 +1090,7 @@ type DownloadPersistentCacheTaskStartedResponse struct { func (x *DownloadPersistentCacheTaskStartedResponse) Reset() { *x = DownloadPersistentCacheTaskStartedResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -839,7 +1103,7 @@ func (x *DownloadPersistentCacheTaskStartedResponse) String() string { func (*DownloadPersistentCacheTaskStartedResponse) ProtoMessage() {} func (x *DownloadPersistentCacheTaskStartedResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -852,7 +1116,7 @@ func (x *DownloadPersistentCacheTaskStartedResponse) ProtoReflect() protoreflect // Deprecated: Use DownloadPersistentCacheTaskStartedResponse.ProtoReflect.Descriptor instead. func (*DownloadPersistentCacheTaskStartedResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{11} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{14} } func (x *DownloadPersistentCacheTaskStartedResponse) GetContentLength() uint64 { @@ -884,7 +1148,7 @@ type DownloadPersistentCacheTaskResponse struct { func (x *DownloadPersistentCacheTaskResponse) Reset() { *x = DownloadPersistentCacheTaskResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -897,7 +1161,7 @@ func (x *DownloadPersistentCacheTaskResponse) String() string { func (*DownloadPersistentCacheTaskResponse) ProtoMessage() {} func (x *DownloadPersistentCacheTaskResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -910,7 +1174,7 @@ func (x *DownloadPersistentCacheTaskResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use DownloadPersistentCacheTaskResponse.ProtoReflect.Descriptor instead. func (*DownloadPersistentCacheTaskResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{12} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{15} } func (x *DownloadPersistentCacheTaskResponse) GetHostId() string { @@ -1002,7 +1266,7 @@ type UploadPersistentCacheTaskRequest struct { func (x *UploadPersistentCacheTaskRequest) Reset() { *x = UploadPersistentCacheTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1015,7 +1279,7 @@ func (x *UploadPersistentCacheTaskRequest) String() string { func (*UploadPersistentCacheTaskRequest) ProtoMessage() {} func (x *UploadPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1028,7 +1292,7 @@ func (x *UploadPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UploadPersistentCacheTaskRequest.ProtoReflect.Descriptor instead. func (*UploadPersistentCacheTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{13} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{16} } func (x *UploadPersistentCacheTaskRequest) GetContentForCalculatingTaskId() string { @@ -1105,7 +1369,7 @@ type UpdatePersistentCacheTaskRequest struct { func (x *UpdatePersistentCacheTaskRequest) Reset() { *x = UpdatePersistentCacheTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[14] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1118,7 +1382,7 @@ func (x *UpdatePersistentCacheTaskRequest) String() string { func (*UpdatePersistentCacheTaskRequest) ProtoMessage() {} func (x *UpdatePersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[14] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1131,7 +1395,7 @@ func (x *UpdatePersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdatePersistentCacheTaskRequest.ProtoReflect.Descriptor instead. func (*UpdatePersistentCacheTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{14} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{17} } func (x *UpdatePersistentCacheTaskRequest) GetTaskId() string { @@ -1161,7 +1425,7 @@ type StatPersistentCacheTaskRequest struct { func (x *StatPersistentCacheTaskRequest) Reset() { *x = StatPersistentCacheTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[15] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1174,7 +1438,7 @@ func (x *StatPersistentCacheTaskRequest) String() string { func (*StatPersistentCacheTaskRequest) ProtoMessage() {} func (x *StatPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[15] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1187,7 +1451,7 @@ func (x *StatPersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatPersistentCacheTaskRequest.ProtoReflect.Descriptor instead. func (*StatPersistentCacheTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{15} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{18} } func (x *StatPersistentCacheTaskRequest) GetTaskId() string { @@ -1210,7 +1474,7 @@ type DeletePersistentCacheTaskRequest struct { func (x *DeletePersistentCacheTaskRequest) Reset() { *x = DeletePersistentCacheTaskRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[16] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1223,7 +1487,7 @@ func (x *DeletePersistentCacheTaskRequest) String() string { func (*DeletePersistentCacheTaskRequest) ProtoMessage() {} func (x *DeletePersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[16] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1236,7 +1500,7 @@ func (x *DeletePersistentCacheTaskRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeletePersistentCacheTaskRequest.ProtoReflect.Descriptor instead. func (*DeletePersistentCacheTaskRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{16} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{19} } func (x *DeletePersistentCacheTaskRequest) GetTaskId() string { @@ -1263,7 +1527,7 @@ type SyncPersistentCachePiecesRequest struct { func (x *SyncPersistentCachePiecesRequest) Reset() { *x = SyncPersistentCachePiecesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[17] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1276,7 +1540,7 @@ func (x *SyncPersistentCachePiecesRequest) String() string { func (*SyncPersistentCachePiecesRequest) ProtoMessage() {} func (x *SyncPersistentCachePiecesRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[17] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1289,7 +1553,7 @@ func (x *SyncPersistentCachePiecesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncPersistentCachePiecesRequest.ProtoReflect.Descriptor instead. func (*SyncPersistentCachePiecesRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{17} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{20} } func (x *SyncPersistentCachePiecesRequest) GetHostId() string { @@ -1330,7 +1594,7 @@ type SyncPersistentCachePiecesResponse struct { func (x *SyncPersistentCachePiecesResponse) Reset() { *x = SyncPersistentCachePiecesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[18] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1343,7 +1607,7 @@ func (x *SyncPersistentCachePiecesResponse) String() string { func (*SyncPersistentCachePiecesResponse) ProtoMessage() {} func (x *SyncPersistentCachePiecesResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[18] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1356,7 +1620,7 @@ func (x *SyncPersistentCachePiecesResponse) ProtoReflect() protoreflect.Message // Deprecated: Use SyncPersistentCachePiecesResponse.ProtoReflect.Descriptor instead. func (*SyncPersistentCachePiecesResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{18} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{21} } func (x *SyncPersistentCachePiecesResponse) GetNumber() uint32 { @@ -1397,7 +1661,7 @@ type DownloadPersistentCachePieceRequest struct { func (x *DownloadPersistentCachePieceRequest) Reset() { *x = DownloadPersistentCachePieceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[19] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1410,7 +1674,7 @@ func (x *DownloadPersistentCachePieceRequest) String() string { func (*DownloadPersistentCachePieceRequest) ProtoMessage() {} func (x *DownloadPersistentCachePieceRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[19] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1423,7 +1687,7 @@ func (x *DownloadPersistentCachePieceRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use DownloadPersistentCachePieceRequest.ProtoReflect.Descriptor instead. func (*DownloadPersistentCachePieceRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{19} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{22} } func (x *DownloadPersistentCachePieceRequest) GetHostId() string { @@ -1462,7 +1726,7 @@ type DownloadPersistentCachePieceResponse struct { func (x *DownloadPersistentCachePieceResponse) Reset() { *x = DownloadPersistentCachePieceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[20] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1475,7 +1739,7 @@ func (x *DownloadPersistentCachePieceResponse) String() string { func (*DownloadPersistentCachePieceResponse) ProtoMessage() {} func (x *DownloadPersistentCachePieceResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[20] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1488,7 +1752,7 @@ func (x *DownloadPersistentCachePieceResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use DownloadPersistentCachePieceResponse.ProtoReflect.Descriptor instead. func (*DownloadPersistentCachePieceResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{20} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{23} } func (x *DownloadPersistentCachePieceResponse) GetPiece() *v2.Piece { @@ -1520,7 +1784,7 @@ type SyncHostRequest struct { func (x *SyncHostRequest) Reset() { *x = SyncHostRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[21] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1533,7 +1797,7 @@ func (x *SyncHostRequest) String() string { func (*SyncHostRequest) ProtoMessage() {} func (x *SyncHostRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[21] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1546,7 +1810,7 @@ func (x *SyncHostRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SyncHostRequest.ProtoReflect.Descriptor instead. func (*SyncHostRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{21} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{24} } func (x *SyncHostRequest) GetHostId() string { @@ -1580,7 +1844,7 @@ type IBVerbsQueuePairEndpoint struct { func (x *IBVerbsQueuePairEndpoint) Reset() { *x = IBVerbsQueuePairEndpoint{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[22] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1593,7 +1857,7 @@ func (x *IBVerbsQueuePairEndpoint) String() string { func (*IBVerbsQueuePairEndpoint) ProtoMessage() {} func (x *IBVerbsQueuePairEndpoint) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[22] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1606,7 +1870,7 @@ func (x *IBVerbsQueuePairEndpoint) ProtoReflect() protoreflect.Message { // Deprecated: Use IBVerbsQueuePairEndpoint.ProtoReflect.Descriptor instead. func (*IBVerbsQueuePairEndpoint) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{22} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{25} } func (x *IBVerbsQueuePairEndpoint) GetNum() uint32 { @@ -1643,7 +1907,7 @@ type ExchangeIBVerbsQueuePairEndpointRequest struct { func (x *ExchangeIBVerbsQueuePairEndpointRequest) Reset() { *x = ExchangeIBVerbsQueuePairEndpointRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[23] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1656,7 +1920,7 @@ func (x *ExchangeIBVerbsQueuePairEndpointRequest) String() string { func (*ExchangeIBVerbsQueuePairEndpointRequest) ProtoMessage() {} func (x *ExchangeIBVerbsQueuePairEndpointRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[23] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1669,7 +1933,7 @@ func (x *ExchangeIBVerbsQueuePairEndpointRequest) ProtoReflect() protoreflect.Me // Deprecated: Use ExchangeIBVerbsQueuePairEndpointRequest.ProtoReflect.Descriptor instead. func (*ExchangeIBVerbsQueuePairEndpointRequest) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{23} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{26} } func (x *ExchangeIBVerbsQueuePairEndpointRequest) GetEndpoint() *IBVerbsQueuePairEndpoint { @@ -1692,7 +1956,7 @@ type ExchangeIBVerbsQueuePairEndpointResponse struct { func (x *ExchangeIBVerbsQueuePairEndpointResponse) Reset() { *x = ExchangeIBVerbsQueuePairEndpointResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[24] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1705,7 +1969,7 @@ func (x *ExchangeIBVerbsQueuePairEndpointResponse) String() string { func (*ExchangeIBVerbsQueuePairEndpointResponse) ProtoMessage() {} func (x *ExchangeIBVerbsQueuePairEndpointResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[24] + mi := &file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1718,7 +1982,7 @@ func (x *ExchangeIBVerbsQueuePairEndpointResponse) ProtoReflect() protoreflect.M // Deprecated: Use ExchangeIBVerbsQueuePairEndpointResponse.ProtoReflect.Descriptor instead. func (*ExchangeIBVerbsQueuePairEndpointResponse) Descriptor() ([]byte, []int) { - return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{24} + return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP(), []int{27} } func (x *ExchangeIBVerbsQueuePairEndpointResponse) GetEndpoint() *IBVerbsQueuePairEndpoint { @@ -1840,315 +2104,385 @@ var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDesc = []byte{ 0x0f, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, - 0x49, 0x64, 0x22, 0x35, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0xc2, 0x03, 0x0a, 0x22, 0x44, 0x6f, - 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, - 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, - 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x03, 0x74, 0x61, 0x67, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, - 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, - 0x12, 0x30, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, - 0x01, 0x48, 0x02, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x88, - 0x01, 0x01, 0x12, 0x38, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x03, - 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x12, - 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x6e, 0x65, 0x65, 0x64, 0x50, 0x69, - 0x65, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x66, 0x6f, - 0x72, 0x63, 0x65, 0x5f, 0x68, 0x61, 0x72, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0d, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x48, 0x61, 0x72, 0x64, 0x4c, 0x69, - 0x6e, 0x6b, 0x12, 0x1b, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x04, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x42, - 0x06, 0x0a, 0x04, 0x5f, 0x74, 0x61, 0x67, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x53, - 0x0a, 0x2a, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x22, 0xb4, 0x03, 0x0a, 0x23, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, - 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x07, 0x68, - 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, - 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0x49, 0x64, 0x22, 0xec, 0x03, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, + 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, - 0x20, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x9e, 0x01, 0x0a, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, - 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, - 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x64, 0x66, - 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, - 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x2a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, - 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x75, 0x0a, 0x20, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, - 0x69, 0x65, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x64, - 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x1d, 0x64, 0x6f, 0x77, 0x6e, - 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0f, 0x0a, 0x08, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x03, 0xf8, 0x42, 0x01, 0x22, 0x95, 0x04, 0x0a, 0x20, 0x55, - 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x49, 0x0a, 0x1f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, - 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1b, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x46, 0x6f, 0x72, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, - 0x67, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x04, 0x70, 0x61, - 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x43, 0x0a, 0x18, 0x70, 0x65, 0x72, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x32, 0x04, - 0x18, 0x05, 0x28, 0x01, 0x52, 0x16, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x03, - 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x03, 0x74, 0x61, 0x67, - 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x0c, 0x70, 0x69, - 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, - 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x32, 0x07, 0x28, 0x80, 0x80, 0x80, 0x02, 0x40, 0x01, 0x48, 0x03, - 0x52, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, - 0x12, 0x3d, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x10, 0xfa, 0x42, 0x0d, 0xaa, 0x01, 0x0a, - 0x22, 0x04, 0x08, 0x80, 0xf5, 0x24, 0x32, 0x02, 0x08, 0x3c, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x12, - 0x38, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x04, 0x52, 0x07, 0x74, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x42, 0x22, 0x0a, 0x20, 0x5f, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, - 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x42, 0x06, 0x0a, - 0x04, 0x5f, 0x74, 0x61, 0x67, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, - 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x22, 0x64, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x42, 0x0a, 0x1e, 0x53, 0x74, 0x61, 0x74, - 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, - 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, - 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, - 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x44, 0x0a, 0x20, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, - 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, + 0x6c, 0x12, 0x5d, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x64, 0x66, 0x64, 0x61, + 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, + 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x12, 0x38, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x07, + 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x65, + 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x44, 0x0a, 0x0e, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x0d, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, + 0x04, 0x68, 0x64, 0x66, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x44, 0x46, 0x53, 0x48, 0x02, 0x52, 0x04, + 0x68, 0x64, 0x66, 0x73, 0x88, 0x01, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 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, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x68, 0x64, 0x66, + 0x73, 0x22, 0xae, 0x03, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x61, + 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x12, 0x32, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x1a, 0x07, 0x10, 0xd7, 0x04, + 0x28, 0x64, 0x40, 0x01, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, + 0x64, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0c, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x1a, 0x41, 0x0a, + 0x13, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 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, + 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, + 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0x57, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x75, + 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x25, 0x0a, + 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x12, 0x15, 0x0a, 0x06, 0x69, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x44, 0x69, 0x72, 0x22, 0x35, 0x0a, 0x11, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, - 0x49, 0x64, 0x22, 0xaa, 0x01, 0x0a, 0x20, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, - 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, - 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x18, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, - 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x08, 0xfa, - 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x16, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, - 0x6b, 0x0a, 0x21, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x8c, 0x01, 0x0a, + 0x49, 0x64, 0x22, 0xc2, 0x03, 0x0a, 0x22, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, + 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, + 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x03, 0x74, + 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x74, 0x61, 0x67, 0x88, + 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x0b, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, + 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x01, 0xd0, 0x01, 0x01, 0x48, 0x02, 0x52, 0x0a, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x07, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x03, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x65, 0x64, 0x5f, 0x70, 0x69, + 0x65, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x10, 0x6e, 0x65, 0x65, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x68, 0x61, 0x72, + 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x66, 0x6f, + 0x72, 0x63, 0x65, 0x48, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x1b, 0x0a, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x04, 0x52, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x74, 0x61, 0x67, + 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x42, 0x09, 0x0a, 0x07, + 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x53, 0x0a, 0x2a, 0x44, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xb4, 0x03, 0x0a, 0x23, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x69, 0x65, 0x63, - 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, - 0x70, 0x69, 0x65, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x96, 0x02, 0x0a, 0x24, - 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x70, 0x69, 0x65, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x05, 0x70, 0x69, 0x65, 0x63, 0x65, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x92, 0x01, 0xfa, 0x42, 0x8e, 0x01, 0x72, 0x8b, - 0x01, 0x32, 0x85, 0x01, 0x5e, 0x28, 0x6d, 0x64, 0x35, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, - 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x33, 0x32, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x31, 0x3a, 0x5b, - 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x30, 0x7d, 0x7c, 0x73, - 0x68, 0x61, 0x32, 0x35, 0x36, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, - 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x35, 0x31, 0x32, 0x3a, 0x5b, 0x61, 0x2d, - 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x32, 0x38, 0x7d, 0x7c, 0x62, 0x6c, - 0x61, 0x6b, 0x65, 0x33, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, - 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x63, 0x72, 0x63, 0x33, 0x32, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, - 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x24, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x06, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x22, 0x55, 0x0a, 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x6f, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x70, 0x65, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, - 0x02, 0x10, 0x01, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x22, 0x59, 0x0a, 0x18, 0x49, - 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6e, 0x75, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6c, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x03, 0x67, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x7a, 0x02, 0x68, - 0x10, 0x52, 0x03, 0x67, 0x69, 0x64, 0x22, 0x76, 0x0a, 0x27, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, - 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x4b, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, - 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x77, - 0x0a, 0x28, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, - 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x65, 0x6e, + 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x12, 0x9e, 0x01, 0x0a, 0x2f, 0x64, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x74, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, + 0x2a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x20, 0x64, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x66, 0x69, + 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, + 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x48, 0x00, 0x52, 0x1d, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, + 0x63, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x0f, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x03, + 0xf8, 0x42, 0x01, 0x22, 0x95, 0x04, 0x0a, 0x20, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, + 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x1f, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, + 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x1b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x46, 0x6f, 0x72, 0x43, + 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x64, + 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x12, 0x43, 0x0a, 0x18, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x42, 0x09, 0xfa, 0x42, 0x06, 0x32, 0x04, 0x18, 0x05, 0x28, 0x01, 0x52, 0x16, 0x70, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x01, 0x52, 0x03, 0x74, 0x61, 0x67, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x02, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x0c, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x42, 0x0c, 0xfa, 0x42, 0x09, 0x32, 0x07, + 0x28, 0x80, 0x80, 0x80, 0x02, 0x40, 0x01, 0x48, 0x03, 0x52, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x3d, 0x0a, 0x03, 0x74, 0x74, 0x6c, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x42, 0x10, 0xfa, 0x42, 0x0d, 0xaa, 0x01, 0x0a, 0x22, 0x04, 0x08, 0x80, 0xf5, 0x24, 0x32, + 0x02, 0x08, 0x3c, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x12, 0x38, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, + 0x6f, 0x75, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x04, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x88, + 0x01, 0x01, 0x42, 0x22, 0x0a, 0x20, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x66, + 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, + 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x74, 0x61, 0x67, 0x42, 0x0e, + 0x0a, 0x0c, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0f, + 0x0a, 0x0d, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, + 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x64, 0x0a, 0x20, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, + 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x74, 0x22, 0x42, 0x0a, 0x1e, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, + 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x44, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, + 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, + 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, + 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0xaa, 0x01, 0x0a, 0x20, + 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, + 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, + 0x73, 0x6b, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x18, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, + 0x52, 0x16, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x69, 0x65, 0x63, + 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x6b, 0x0a, 0x21, 0x53, 0x79, 0x6e, 0x63, + 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, + 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x8c, 0x01, 0x0a, 0x23, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, + 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, + 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, + 0x20, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, + 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x69, 0x65, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x70, 0x69, 0x65, 0x63, 0x65, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x22, 0x96, 0x02, 0x0a, 0x24, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, + 0x05, 0x70, 0x69, 0x65, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x69, 0x65, 0x63, 0x65, 0x42, 0x08, + 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x70, 0x69, 0x65, 0x63, 0x65, 0x12, + 0xb0, 0x01, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x92, 0x01, 0xfa, 0x42, 0x8e, 0x01, 0x72, 0x8b, 0x01, 0x32, 0x85, 0x01, 0x5e, 0x28, 0x6d, + 0x64, 0x35, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x33, + 0x32, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x31, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, + 0x2d, 0x39, 0x5d, 0x7b, 0x34, 0x30, 0x7d, 0x7c, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x3a, 0x5b, + 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x73, + 0x68, 0x61, 0x35, 0x31, 0x32, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, + 0x5d, 0x7b, 0x31, 0x32, 0x38, 0x7d, 0x7c, 0x62, 0x6c, 0x61, 0x6b, 0x65, 0x33, 0x3a, 0x5b, 0x61, + 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x36, 0x34, 0x7d, 0x7c, 0x63, 0x72, + 0x63, 0x33, 0x32, 0x3a, 0x5b, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x30, 0x2d, 0x39, 0x5d, 0x2b, + 0x29, 0x24, 0xd0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, + 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x55, 0x0a, + 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x20, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, + 0x49, 0x64, 0x12, 0x20, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x06, 0x70, 0x65, + 0x65, 0x72, 0x49, 0x64, 0x22, 0x59, 0x0a, 0x18, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, + 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6e, + 0x75, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x03, 0x6c, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x03, 0x67, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0c, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x7a, 0x02, 0x68, 0x10, 0x52, 0x03, 0x67, 0x69, 0x64, 0x22, + 0x76, 0x0a, 0x27, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x42, 0x56, 0x65, 0x72, + 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x65, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x32, 0x99, 0x0a, 0x0a, 0x0e, 0x44, 0x66, 0x64, 0x61, - 0x65, 0x6d, 0x6f, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x55, 0x0a, 0x0c, 0x44, 0x6f, - 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x20, 0x2e, 0x64, 0x66, 0x64, - 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x64, - 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, - 0x01, 0x12, 0x39, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1c, 0x2e, - 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x44, 0x0a, 0x0a, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1e, 0x2e, 0x64, 0x66, 0x64, - 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, - 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x4f, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, - 0x12, 0x1e, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x79, 0x6e, 0x63, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1f, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x79, 0x6e, 0x63, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x0d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, - 0x69, 0x65, 0x63, 0x65, 0x12, 0x21, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, - 0x65, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x1b, - 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2f, 0x2e, 0x64, 0x66, - 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, - 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, - 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, - 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, - 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, - 0x12, 0x62, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2d, 0x2e, - 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x66, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, - 0x2b, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x62, 0x0a, 0x19, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, - 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, - 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x7c, 0x0a, 0x19, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x12, 0x2d, 0x2e, - 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, - 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, - 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x64, - 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, - 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, - 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x83, - 0x01, 0x0a, 0x1c, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x12, - 0x30, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, - 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, - 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x31, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x08, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x6f, 0x73, 0x74, - 0x12, 0x1c, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x79, 0x6e, 0x63, 0x48, 0x6f, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x30, - 0x01, 0x12, 0x8f, 0x01, 0x0a, 0x20, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x42, - 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x34, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x42, 0x56, - 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x64, - 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x77, 0x0a, 0x28, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x32, 0x81, 0x05, 0x0a, 0x10, 0x44, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, - 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x55, 0x0a, 0x0c, 0x44, 0x6f, 0x77, 0x6e, - 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x20, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, - 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x64, 0x66, 0x64, + 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, + 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x32, 0x99, 0x0a, 0x0a, 0x0e, 0x44, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x55, 0x70, 0x6c, + 0x6f, 0x61, 0x64, 0x12, 0x55, 0x0a, 0x0c, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, + 0x61, 0x73, 0x6b, 0x12, 0x20, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x39, 0x0a, 0x08, 0x53, 0x74, + 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1c, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x44, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, + 0x61, 0x73, 0x6b, 0x12, 0x1e, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4f, 0x0a, 0x0a, 0x53, + 0x79, 0x6e, 0x63, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x64, 0x66, 0x64, 0x61, + 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x69, 0x65, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x64, 0x66, 0x64, 0x61, + 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x69, 0x65, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x0d, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x12, 0x21, 0x2e, + 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x22, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, + 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x1b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2f, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x62, 0x0a, 0x19, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x66, 0x0a, + 0x17, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2b, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x62, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, + 0x73, 0x6b, 0x12, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x7c, 0x0a, 0x19, 0x53, 0x79, 0x6e, + 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x1c, 0x44, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x50, 0x69, 0x65, 0x63, 0x65, 0x12, 0x30, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x69, + 0x65, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, - 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, - 0x39, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1c, 0x2e, 0x64, 0x66, - 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, - 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x44, 0x0a, 0x0a, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1e, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x3c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x82, - 0x01, 0x0a, 0x1b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2f, - 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x30, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, - 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, - 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x30, 0x01, 0x12, 0x6a, 0x0a, 0x19, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, + 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x50, 0x69, 0x65, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, + 0x08, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x1c, 0x2e, 0x64, 0x66, 0x64, 0x61, + 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x48, 0x6f, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x30, 0x01, 0x12, 0x8f, 0x01, 0x0a, 0x20, 0x45, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, + 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, + 0x34, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x42, 0x56, 0x65, 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, + 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x42, 0x56, 0x65, + 0x72, 0x62, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x45, 0x6e, 0x64, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xdf, 0x05, 0x0a, + 0x10, 0x44, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, + 0x64, 0x12, 0x55, 0x0a, 0x0c, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, + 0x6b, 0x12, 0x20, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x39, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x74, + 0x54, 0x61, 0x73, 0x6b, 0x12, 0x1c, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, + 0x61, 0x73, 0x6b, 0x12, 0x5c, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x45, 0x6e, 0x74, + 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x66, + 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, + 0x73, 0x6b, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, + 0x1e, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x82, 0x01, 0x0a, 0x1b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, + 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2f, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, - 0x12, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x55, - 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, - 0x66, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2b, 0x2e, 0x64, 0x66, 0x64, - 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x42, 0x2d, 0x5a, 0x2b, 0x64, 0x37, 0x79, 0x2e, 0x69, - 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, - 0x73, 0x2f, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x64, 0x66, - 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x6a, 0x0a, 0x19, 0x55, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x2d, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x66, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, + 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, + 0x6b, 0x12, 0x2b, 0x2e, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x42, 0x2d, + 0x5a, 0x2b, 0x64, 0x37, 0x79, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, + 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, + 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x64, 0x66, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2163,7 +2497,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescGZIP() []byte { return file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDescData } -var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes = make([]protoimpl.MessageInfo, 31) var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_goTypes = []interface{}{ (*DownloadTaskRequest)(nil), // 0: dfdaemon.v2.DownloadTaskRequest (*DownloadTaskStartedResponse)(nil), // 1: dfdaemon.v2.DownloadTaskStartedResponse @@ -2174,94 +2508,109 @@ var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_goTypes = []interface{}{ (*DownloadPieceRequest)(nil), // 6: dfdaemon.v2.DownloadPieceRequest (*DownloadPieceResponse)(nil), // 7: dfdaemon.v2.DownloadPieceResponse (*StatTaskRequest)(nil), // 8: dfdaemon.v2.StatTaskRequest - (*DeleteTaskRequest)(nil), // 9: dfdaemon.v2.DeleteTaskRequest - (*DownloadPersistentCacheTaskRequest)(nil), // 10: dfdaemon.v2.DownloadPersistentCacheTaskRequest - (*DownloadPersistentCacheTaskStartedResponse)(nil), // 11: dfdaemon.v2.DownloadPersistentCacheTaskStartedResponse - (*DownloadPersistentCacheTaskResponse)(nil), // 12: dfdaemon.v2.DownloadPersistentCacheTaskResponse - (*UploadPersistentCacheTaskRequest)(nil), // 13: dfdaemon.v2.UploadPersistentCacheTaskRequest - (*UpdatePersistentCacheTaskRequest)(nil), // 14: dfdaemon.v2.UpdatePersistentCacheTaskRequest - (*StatPersistentCacheTaskRequest)(nil), // 15: dfdaemon.v2.StatPersistentCacheTaskRequest - (*DeletePersistentCacheTaskRequest)(nil), // 16: dfdaemon.v2.DeletePersistentCacheTaskRequest - (*SyncPersistentCachePiecesRequest)(nil), // 17: dfdaemon.v2.SyncPersistentCachePiecesRequest - (*SyncPersistentCachePiecesResponse)(nil), // 18: dfdaemon.v2.SyncPersistentCachePiecesResponse - (*DownloadPersistentCachePieceRequest)(nil), // 19: dfdaemon.v2.DownloadPersistentCachePieceRequest - (*DownloadPersistentCachePieceResponse)(nil), // 20: dfdaemon.v2.DownloadPersistentCachePieceResponse - (*SyncHostRequest)(nil), // 21: dfdaemon.v2.SyncHostRequest - (*IBVerbsQueuePairEndpoint)(nil), // 22: dfdaemon.v2.IBVerbsQueuePairEndpoint - (*ExchangeIBVerbsQueuePairEndpointRequest)(nil), // 23: dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointRequest - (*ExchangeIBVerbsQueuePairEndpointResponse)(nil), // 24: dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointResponse - nil, // 25: dfdaemon.v2.DownloadTaskStartedResponse.ResponseHeaderEntry - (*v2.Download)(nil), // 26: common.v2.Download - (*v2.Range)(nil), // 27: common.v2.Range - (*v2.Piece)(nil), // 28: common.v2.Piece - (*durationpb.Duration)(nil), // 29: google.protobuf.Duration - (*emptypb.Empty)(nil), // 30: google.protobuf.Empty - (*v2.Task)(nil), // 31: common.v2.Task - (*v2.PersistentCacheTask)(nil), // 32: common.v2.PersistentCacheTask - (*v2.Host)(nil), // 33: common.v2.Host + (*ListTaskEntriesRequest)(nil), // 9: dfdaemon.v2.ListTaskEntriesRequest + (*ListTaskEntriesResponse)(nil), // 10: dfdaemon.v2.ListTaskEntriesResponse + (*Entry)(nil), // 11: dfdaemon.v2.Entry + (*DeleteTaskRequest)(nil), // 12: dfdaemon.v2.DeleteTaskRequest + (*DownloadPersistentCacheTaskRequest)(nil), // 13: dfdaemon.v2.DownloadPersistentCacheTaskRequest + (*DownloadPersistentCacheTaskStartedResponse)(nil), // 14: dfdaemon.v2.DownloadPersistentCacheTaskStartedResponse + (*DownloadPersistentCacheTaskResponse)(nil), // 15: dfdaemon.v2.DownloadPersistentCacheTaskResponse + (*UploadPersistentCacheTaskRequest)(nil), // 16: dfdaemon.v2.UploadPersistentCacheTaskRequest + (*UpdatePersistentCacheTaskRequest)(nil), // 17: dfdaemon.v2.UpdatePersistentCacheTaskRequest + (*StatPersistentCacheTaskRequest)(nil), // 18: dfdaemon.v2.StatPersistentCacheTaskRequest + (*DeletePersistentCacheTaskRequest)(nil), // 19: dfdaemon.v2.DeletePersistentCacheTaskRequest + (*SyncPersistentCachePiecesRequest)(nil), // 20: dfdaemon.v2.SyncPersistentCachePiecesRequest + (*SyncPersistentCachePiecesResponse)(nil), // 21: dfdaemon.v2.SyncPersistentCachePiecesResponse + (*DownloadPersistentCachePieceRequest)(nil), // 22: dfdaemon.v2.DownloadPersistentCachePieceRequest + (*DownloadPersistentCachePieceResponse)(nil), // 23: dfdaemon.v2.DownloadPersistentCachePieceResponse + (*SyncHostRequest)(nil), // 24: dfdaemon.v2.SyncHostRequest + (*IBVerbsQueuePairEndpoint)(nil), // 25: dfdaemon.v2.IBVerbsQueuePairEndpoint + (*ExchangeIBVerbsQueuePairEndpointRequest)(nil), // 26: dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointRequest + (*ExchangeIBVerbsQueuePairEndpointResponse)(nil), // 27: dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointResponse + nil, // 28: dfdaemon.v2.DownloadTaskStartedResponse.ResponseHeaderEntry + nil, // 29: dfdaemon.v2.ListTaskEntriesRequest.RequestHeaderEntry + nil, // 30: dfdaemon.v2.ListTaskEntriesResponse.ResponseHeaderEntry + (*v2.Download)(nil), // 31: common.v2.Download + (*v2.Range)(nil), // 32: common.v2.Range + (*v2.Piece)(nil), // 33: common.v2.Piece + (*durationpb.Duration)(nil), // 34: google.protobuf.Duration + (*v2.ObjectStorage)(nil), // 35: common.v2.ObjectStorage + (*v2.HDFS)(nil), // 36: common.v2.HDFS + (*emptypb.Empty)(nil), // 37: google.protobuf.Empty + (*v2.Task)(nil), // 38: common.v2.Task + (*v2.PersistentCacheTask)(nil), // 39: common.v2.PersistentCacheTask + (*v2.Host)(nil), // 40: common.v2.Host } var file_pkg_apis_dfdaemon_v2_dfdaemon_proto_depIdxs = []int32{ - 26, // 0: dfdaemon.v2.DownloadTaskRequest.download:type_name -> common.v2.Download - 27, // 1: dfdaemon.v2.DownloadTaskStartedResponse.range:type_name -> common.v2.Range - 25, // 2: dfdaemon.v2.DownloadTaskStartedResponse.response_header:type_name -> dfdaemon.v2.DownloadTaskStartedResponse.ResponseHeaderEntry - 28, // 3: dfdaemon.v2.DownloadTaskStartedResponse.pieces:type_name -> common.v2.Piece - 28, // 4: dfdaemon.v2.DownloadPieceFinishedResponse.piece:type_name -> common.v2.Piece + 31, // 0: dfdaemon.v2.DownloadTaskRequest.download:type_name -> common.v2.Download + 32, // 1: dfdaemon.v2.DownloadTaskStartedResponse.range:type_name -> common.v2.Range + 28, // 2: dfdaemon.v2.DownloadTaskStartedResponse.response_header:type_name -> dfdaemon.v2.DownloadTaskStartedResponse.ResponseHeaderEntry + 33, // 3: dfdaemon.v2.DownloadTaskStartedResponse.pieces:type_name -> common.v2.Piece + 33, // 4: dfdaemon.v2.DownloadPieceFinishedResponse.piece:type_name -> common.v2.Piece 1, // 5: dfdaemon.v2.DownloadTaskResponse.download_task_started_response:type_name -> dfdaemon.v2.DownloadTaskStartedResponse 2, // 6: dfdaemon.v2.DownloadTaskResponse.download_piece_finished_response:type_name -> dfdaemon.v2.DownloadPieceFinishedResponse - 28, // 7: dfdaemon.v2.DownloadPieceResponse.piece:type_name -> common.v2.Piece - 29, // 8: dfdaemon.v2.DownloadPersistentCacheTaskRequest.timeout:type_name -> google.protobuf.Duration - 11, // 9: dfdaemon.v2.DownloadPersistentCacheTaskResponse.download_persistent_cache_task_started_response:type_name -> dfdaemon.v2.DownloadPersistentCacheTaskStartedResponse - 2, // 10: dfdaemon.v2.DownloadPersistentCacheTaskResponse.download_piece_finished_response:type_name -> dfdaemon.v2.DownloadPieceFinishedResponse - 29, // 11: dfdaemon.v2.UploadPersistentCacheTaskRequest.ttl:type_name -> google.protobuf.Duration - 29, // 12: dfdaemon.v2.UploadPersistentCacheTaskRequest.timeout:type_name -> google.protobuf.Duration - 28, // 13: dfdaemon.v2.DownloadPersistentCachePieceResponse.piece:type_name -> common.v2.Piece - 22, // 14: dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointRequest.endpoint:type_name -> dfdaemon.v2.IBVerbsQueuePairEndpoint - 22, // 15: dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointResponse.endpoint:type_name -> dfdaemon.v2.IBVerbsQueuePairEndpoint - 0, // 16: dfdaemon.v2.DfdaemonUpload.DownloadTask:input_type -> dfdaemon.v2.DownloadTaskRequest - 8, // 17: dfdaemon.v2.DfdaemonUpload.StatTask:input_type -> dfdaemon.v2.StatTaskRequest - 9, // 18: dfdaemon.v2.DfdaemonUpload.DeleteTask:input_type -> dfdaemon.v2.DeleteTaskRequest - 4, // 19: dfdaemon.v2.DfdaemonUpload.SyncPieces:input_type -> dfdaemon.v2.SyncPiecesRequest - 6, // 20: dfdaemon.v2.DfdaemonUpload.DownloadPiece:input_type -> dfdaemon.v2.DownloadPieceRequest - 10, // 21: dfdaemon.v2.DfdaemonUpload.DownloadPersistentCacheTask:input_type -> dfdaemon.v2.DownloadPersistentCacheTaskRequest - 14, // 22: dfdaemon.v2.DfdaemonUpload.UpdatePersistentCacheTask:input_type -> dfdaemon.v2.UpdatePersistentCacheTaskRequest - 15, // 23: dfdaemon.v2.DfdaemonUpload.StatPersistentCacheTask:input_type -> dfdaemon.v2.StatPersistentCacheTaskRequest - 16, // 24: dfdaemon.v2.DfdaemonUpload.DeletePersistentCacheTask:input_type -> dfdaemon.v2.DeletePersistentCacheTaskRequest - 17, // 25: dfdaemon.v2.DfdaemonUpload.SyncPersistentCachePieces:input_type -> dfdaemon.v2.SyncPersistentCachePiecesRequest - 19, // 26: dfdaemon.v2.DfdaemonUpload.DownloadPersistentCachePiece:input_type -> dfdaemon.v2.DownloadPersistentCachePieceRequest - 21, // 27: dfdaemon.v2.DfdaemonUpload.SyncHost:input_type -> dfdaemon.v2.SyncHostRequest - 23, // 28: dfdaemon.v2.DfdaemonUpload.ExchangeIBVerbsQueuePairEndpoint:input_type -> dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointRequest - 0, // 29: dfdaemon.v2.DfdaemonDownload.DownloadTask:input_type -> dfdaemon.v2.DownloadTaskRequest - 8, // 30: dfdaemon.v2.DfdaemonDownload.StatTask:input_type -> dfdaemon.v2.StatTaskRequest - 9, // 31: dfdaemon.v2.DfdaemonDownload.DeleteTask:input_type -> dfdaemon.v2.DeleteTaskRequest - 30, // 32: dfdaemon.v2.DfdaemonDownload.DeleteHost:input_type -> google.protobuf.Empty - 10, // 33: dfdaemon.v2.DfdaemonDownload.DownloadPersistentCacheTask:input_type -> dfdaemon.v2.DownloadPersistentCacheTaskRequest - 13, // 34: dfdaemon.v2.DfdaemonDownload.UploadPersistentCacheTask:input_type -> dfdaemon.v2.UploadPersistentCacheTaskRequest - 15, // 35: dfdaemon.v2.DfdaemonDownload.StatPersistentCacheTask:input_type -> dfdaemon.v2.StatPersistentCacheTaskRequest - 3, // 36: dfdaemon.v2.DfdaemonUpload.DownloadTask:output_type -> dfdaemon.v2.DownloadTaskResponse - 31, // 37: dfdaemon.v2.DfdaemonUpload.StatTask:output_type -> common.v2.Task - 30, // 38: dfdaemon.v2.DfdaemonUpload.DeleteTask:output_type -> google.protobuf.Empty - 5, // 39: dfdaemon.v2.DfdaemonUpload.SyncPieces:output_type -> dfdaemon.v2.SyncPiecesResponse - 7, // 40: dfdaemon.v2.DfdaemonUpload.DownloadPiece:output_type -> dfdaemon.v2.DownloadPieceResponse - 12, // 41: dfdaemon.v2.DfdaemonUpload.DownloadPersistentCacheTask:output_type -> dfdaemon.v2.DownloadPersistentCacheTaskResponse - 30, // 42: dfdaemon.v2.DfdaemonUpload.UpdatePersistentCacheTask:output_type -> google.protobuf.Empty - 32, // 43: dfdaemon.v2.DfdaemonUpload.StatPersistentCacheTask:output_type -> common.v2.PersistentCacheTask - 30, // 44: dfdaemon.v2.DfdaemonUpload.DeletePersistentCacheTask:output_type -> google.protobuf.Empty - 18, // 45: dfdaemon.v2.DfdaemonUpload.SyncPersistentCachePieces:output_type -> dfdaemon.v2.SyncPersistentCachePiecesResponse - 20, // 46: dfdaemon.v2.DfdaemonUpload.DownloadPersistentCachePiece:output_type -> dfdaemon.v2.DownloadPersistentCachePieceResponse - 33, // 47: dfdaemon.v2.DfdaemonUpload.SyncHost:output_type -> common.v2.Host - 24, // 48: dfdaemon.v2.DfdaemonUpload.ExchangeIBVerbsQueuePairEndpoint:output_type -> dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointResponse - 3, // 49: dfdaemon.v2.DfdaemonDownload.DownloadTask:output_type -> dfdaemon.v2.DownloadTaskResponse - 31, // 50: dfdaemon.v2.DfdaemonDownload.StatTask:output_type -> common.v2.Task - 30, // 51: dfdaemon.v2.DfdaemonDownload.DeleteTask:output_type -> google.protobuf.Empty - 30, // 52: dfdaemon.v2.DfdaemonDownload.DeleteHost:output_type -> google.protobuf.Empty - 12, // 53: dfdaemon.v2.DfdaemonDownload.DownloadPersistentCacheTask:output_type -> dfdaemon.v2.DownloadPersistentCacheTaskResponse - 32, // 54: dfdaemon.v2.DfdaemonDownload.UploadPersistentCacheTask:output_type -> common.v2.PersistentCacheTask - 32, // 55: dfdaemon.v2.DfdaemonDownload.StatPersistentCacheTask:output_type -> common.v2.PersistentCacheTask - 36, // [36:56] is the sub-list for method output_type - 16, // [16:36] is the sub-list for method input_type - 16, // [16:16] is the sub-list for extension type_name - 16, // [16:16] is the sub-list for extension extendee - 0, // [0:16] is the sub-list for field type_name + 33, // 7: dfdaemon.v2.DownloadPieceResponse.piece:type_name -> common.v2.Piece + 29, // 8: dfdaemon.v2.ListTaskEntriesRequest.request_header:type_name -> dfdaemon.v2.ListTaskEntriesRequest.RequestHeaderEntry + 34, // 9: dfdaemon.v2.ListTaskEntriesRequest.timeout:type_name -> google.protobuf.Duration + 35, // 10: dfdaemon.v2.ListTaskEntriesRequest.object_storage:type_name -> common.v2.ObjectStorage + 36, // 11: dfdaemon.v2.ListTaskEntriesRequest.hdfs:type_name -> common.v2.HDFS + 30, // 12: dfdaemon.v2.ListTaskEntriesResponse.response_header:type_name -> dfdaemon.v2.ListTaskEntriesResponse.ResponseHeaderEntry + 11, // 13: dfdaemon.v2.ListTaskEntriesResponse.entries:type_name -> dfdaemon.v2.Entry + 34, // 14: dfdaemon.v2.DownloadPersistentCacheTaskRequest.timeout:type_name -> google.protobuf.Duration + 14, // 15: dfdaemon.v2.DownloadPersistentCacheTaskResponse.download_persistent_cache_task_started_response:type_name -> dfdaemon.v2.DownloadPersistentCacheTaskStartedResponse + 2, // 16: dfdaemon.v2.DownloadPersistentCacheTaskResponse.download_piece_finished_response:type_name -> dfdaemon.v2.DownloadPieceFinishedResponse + 34, // 17: dfdaemon.v2.UploadPersistentCacheTaskRequest.ttl:type_name -> google.protobuf.Duration + 34, // 18: dfdaemon.v2.UploadPersistentCacheTaskRequest.timeout:type_name -> google.protobuf.Duration + 33, // 19: dfdaemon.v2.DownloadPersistentCachePieceResponse.piece:type_name -> common.v2.Piece + 25, // 20: dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointRequest.endpoint:type_name -> dfdaemon.v2.IBVerbsQueuePairEndpoint + 25, // 21: dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointResponse.endpoint:type_name -> dfdaemon.v2.IBVerbsQueuePairEndpoint + 0, // 22: dfdaemon.v2.DfdaemonUpload.DownloadTask:input_type -> dfdaemon.v2.DownloadTaskRequest + 8, // 23: dfdaemon.v2.DfdaemonUpload.StatTask:input_type -> dfdaemon.v2.StatTaskRequest + 12, // 24: dfdaemon.v2.DfdaemonUpload.DeleteTask:input_type -> dfdaemon.v2.DeleteTaskRequest + 4, // 25: dfdaemon.v2.DfdaemonUpload.SyncPieces:input_type -> dfdaemon.v2.SyncPiecesRequest + 6, // 26: dfdaemon.v2.DfdaemonUpload.DownloadPiece:input_type -> dfdaemon.v2.DownloadPieceRequest + 13, // 27: dfdaemon.v2.DfdaemonUpload.DownloadPersistentCacheTask:input_type -> dfdaemon.v2.DownloadPersistentCacheTaskRequest + 17, // 28: dfdaemon.v2.DfdaemonUpload.UpdatePersistentCacheTask:input_type -> dfdaemon.v2.UpdatePersistentCacheTaskRequest + 18, // 29: dfdaemon.v2.DfdaemonUpload.StatPersistentCacheTask:input_type -> dfdaemon.v2.StatPersistentCacheTaskRequest + 19, // 30: dfdaemon.v2.DfdaemonUpload.DeletePersistentCacheTask:input_type -> dfdaemon.v2.DeletePersistentCacheTaskRequest + 20, // 31: dfdaemon.v2.DfdaemonUpload.SyncPersistentCachePieces:input_type -> dfdaemon.v2.SyncPersistentCachePiecesRequest + 22, // 32: dfdaemon.v2.DfdaemonUpload.DownloadPersistentCachePiece:input_type -> dfdaemon.v2.DownloadPersistentCachePieceRequest + 24, // 33: dfdaemon.v2.DfdaemonUpload.SyncHost:input_type -> dfdaemon.v2.SyncHostRequest + 26, // 34: dfdaemon.v2.DfdaemonUpload.ExchangeIBVerbsQueuePairEndpoint:input_type -> dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointRequest + 0, // 35: dfdaemon.v2.DfdaemonDownload.DownloadTask:input_type -> dfdaemon.v2.DownloadTaskRequest + 8, // 36: dfdaemon.v2.DfdaemonDownload.StatTask:input_type -> dfdaemon.v2.StatTaskRequest + 9, // 37: dfdaemon.v2.DfdaemonDownload.ListTaskEntries:input_type -> dfdaemon.v2.ListTaskEntriesRequest + 12, // 38: dfdaemon.v2.DfdaemonDownload.DeleteTask:input_type -> dfdaemon.v2.DeleteTaskRequest + 37, // 39: dfdaemon.v2.DfdaemonDownload.DeleteHost:input_type -> google.protobuf.Empty + 13, // 40: dfdaemon.v2.DfdaemonDownload.DownloadPersistentCacheTask:input_type -> dfdaemon.v2.DownloadPersistentCacheTaskRequest + 16, // 41: dfdaemon.v2.DfdaemonDownload.UploadPersistentCacheTask:input_type -> dfdaemon.v2.UploadPersistentCacheTaskRequest + 18, // 42: dfdaemon.v2.DfdaemonDownload.StatPersistentCacheTask:input_type -> dfdaemon.v2.StatPersistentCacheTaskRequest + 3, // 43: dfdaemon.v2.DfdaemonUpload.DownloadTask:output_type -> dfdaemon.v2.DownloadTaskResponse + 38, // 44: dfdaemon.v2.DfdaemonUpload.StatTask:output_type -> common.v2.Task + 37, // 45: dfdaemon.v2.DfdaemonUpload.DeleteTask:output_type -> google.protobuf.Empty + 5, // 46: dfdaemon.v2.DfdaemonUpload.SyncPieces:output_type -> dfdaemon.v2.SyncPiecesResponse + 7, // 47: dfdaemon.v2.DfdaemonUpload.DownloadPiece:output_type -> dfdaemon.v2.DownloadPieceResponse + 15, // 48: dfdaemon.v2.DfdaemonUpload.DownloadPersistentCacheTask:output_type -> dfdaemon.v2.DownloadPersistentCacheTaskResponse + 37, // 49: dfdaemon.v2.DfdaemonUpload.UpdatePersistentCacheTask:output_type -> google.protobuf.Empty + 39, // 50: dfdaemon.v2.DfdaemonUpload.StatPersistentCacheTask:output_type -> common.v2.PersistentCacheTask + 37, // 51: dfdaemon.v2.DfdaemonUpload.DeletePersistentCacheTask:output_type -> google.protobuf.Empty + 21, // 52: dfdaemon.v2.DfdaemonUpload.SyncPersistentCachePieces:output_type -> dfdaemon.v2.SyncPersistentCachePiecesResponse + 23, // 53: dfdaemon.v2.DfdaemonUpload.DownloadPersistentCachePiece:output_type -> dfdaemon.v2.DownloadPersistentCachePieceResponse + 40, // 54: dfdaemon.v2.DfdaemonUpload.SyncHost:output_type -> common.v2.Host + 27, // 55: dfdaemon.v2.DfdaemonUpload.ExchangeIBVerbsQueuePairEndpoint:output_type -> dfdaemon.v2.ExchangeIBVerbsQueuePairEndpointResponse + 3, // 56: dfdaemon.v2.DfdaemonDownload.DownloadTask:output_type -> dfdaemon.v2.DownloadTaskResponse + 38, // 57: dfdaemon.v2.DfdaemonDownload.StatTask:output_type -> common.v2.Task + 10, // 58: dfdaemon.v2.DfdaemonDownload.ListTaskEntries:output_type -> dfdaemon.v2.ListTaskEntriesResponse + 37, // 59: dfdaemon.v2.DfdaemonDownload.DeleteTask:output_type -> google.protobuf.Empty + 37, // 60: dfdaemon.v2.DfdaemonDownload.DeleteHost:output_type -> google.protobuf.Empty + 15, // 61: dfdaemon.v2.DfdaemonDownload.DownloadPersistentCacheTask:output_type -> dfdaemon.v2.DownloadPersistentCacheTaskResponse + 39, // 62: dfdaemon.v2.DfdaemonDownload.UploadPersistentCacheTask:output_type -> common.v2.PersistentCacheTask + 39, // 63: dfdaemon.v2.DfdaemonDownload.StatPersistentCacheTask:output_type -> common.v2.PersistentCacheTask + 43, // [43:64] is the sub-list for method output_type + 22, // [22:43] is the sub-list for method input_type + 22, // [22:22] is the sub-list for extension type_name + 22, // [22:22] is the sub-list for extension extendee + 0, // [0:22] is the sub-list for field type_name } func init() { file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() } @@ -2379,7 +2728,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteTaskRequest); i { + switch v := v.(*ListTaskEntriesRequest); i { case 0: return &v.state case 1: @@ -2391,7 +2740,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadPersistentCacheTaskRequest); i { + switch v := v.(*ListTaskEntriesResponse); i { case 0: return &v.state case 1: @@ -2403,7 +2752,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadPersistentCacheTaskStartedResponse); i { + switch v := v.(*Entry); i { case 0: return &v.state case 1: @@ -2415,7 +2764,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadPersistentCacheTaskResponse); i { + switch v := v.(*DeleteTaskRequest); i { case 0: return &v.state case 1: @@ -2427,7 +2776,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UploadPersistentCacheTaskRequest); i { + switch v := v.(*DownloadPersistentCacheTaskRequest); i { case 0: return &v.state case 1: @@ -2439,7 +2788,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdatePersistentCacheTaskRequest); i { + switch v := v.(*DownloadPersistentCacheTaskStartedResponse); i { case 0: return &v.state case 1: @@ -2451,7 +2800,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatPersistentCacheTaskRequest); i { + switch v := v.(*DownloadPersistentCacheTaskResponse); i { case 0: return &v.state case 1: @@ -2463,7 +2812,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeletePersistentCacheTaskRequest); i { + switch v := v.(*UploadPersistentCacheTaskRequest); i { case 0: return &v.state case 1: @@ -2475,7 +2824,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncPersistentCachePiecesRequest); i { + switch v := v.(*UpdatePersistentCacheTaskRequest); i { case 0: return &v.state case 1: @@ -2487,7 +2836,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncPersistentCachePiecesResponse); i { + switch v := v.(*StatPersistentCacheTaskRequest); i { case 0: return &v.state case 1: @@ -2499,7 +2848,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadPersistentCachePieceRequest); i { + switch v := v.(*DeletePersistentCacheTaskRequest); i { case 0: return &v.state case 1: @@ -2511,7 +2860,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownloadPersistentCachePieceResponse); i { + switch v := v.(*SyncPersistentCachePiecesRequest); i { case 0: return &v.state case 1: @@ -2523,7 +2872,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncHostRequest); i { + switch v := v.(*SyncPersistentCachePiecesResponse); i { case 0: return &v.state case 1: @@ -2535,7 +2884,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IBVerbsQueuePairEndpoint); i { + switch v := v.(*DownloadPersistentCachePieceRequest); i { case 0: return &v.state case 1: @@ -2547,7 +2896,7 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExchangeIBVerbsQueuePairEndpointRequest); i { + switch v := v.(*DownloadPersistentCachePieceResponse); i { case 0: return &v.state case 1: @@ -2559,6 +2908,42 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { } } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SyncHostRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IBVerbsQueuePairEndpoint); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExchangeIBVerbsQueuePairEndpointRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExchangeIBVerbsQueuePairEndpointResponse); i { case 0: return &v.state @@ -2577,20 +2962,22 @@ func file_pkg_apis_dfdaemon_v2_dfdaemon_proto_init() { (*DownloadTaskResponse_DownloadPieceFinishedResponse)(nil), } file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[7].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[9].OneofWrappers = []interface{}{} file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[10].OneofWrappers = []interface{}{} - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[12].OneofWrappers = []interface{}{ + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[15].OneofWrappers = []interface{}{ (*DownloadPersistentCacheTaskResponse_DownloadPersistentCacheTaskStartedResponse)(nil), (*DownloadPersistentCacheTaskResponse_DownloadPieceFinishedResponse)(nil), } - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[13].OneofWrappers = []interface{}{} - file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[20].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[16].OneofWrappers = []interface{}{} + file_pkg_apis_dfdaemon_v2_dfdaemon_proto_msgTypes[23].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pkg_apis_dfdaemon_v2_dfdaemon_proto_rawDesc, NumEnums: 0, - NumMessages: 26, + NumMessages: 31, NumExtensions: 0, NumServices: 2, }, diff --git a/pkg/apis/dfdaemon/v2/dfdaemon.pb.validate.go b/pkg/apis/dfdaemon/v2/dfdaemon.pb.validate.go index b904e64..20a5482 100644 --- a/pkg/apis/dfdaemon/v2/dfdaemon.pb.validate.go +++ b/pkg/apis/dfdaemon/v2/dfdaemon.pb.validate.go @@ -1372,6 +1372,491 @@ var _ interface { ErrorName() string } = StatTaskRequestValidationError{} +// Validate checks the field values on ListTaskEntriesRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ListTaskEntriesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListTaskEntriesRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListTaskEntriesRequestMultiError, or nil if none found. +func (m *ListTaskEntriesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListTaskEntriesRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if utf8.RuneCountInString(m.GetTaskId()) < 1 { + err := ListTaskEntriesRequestValidationError{ + field: "TaskId", + reason: "value length must be at least 1 runes", + } + if !all { + return err + } + errors = append(errors, err) + } + + // no validation rules for Url + + // no validation rules for RequestHeader + + if m.Timeout != nil { + + if all { + switch v := interface{}(m.GetTimeout()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListTaskEntriesRequestValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListTaskEntriesRequestValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTimeout()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListTaskEntriesRequestValidationError{ + field: "Timeout", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if m.ObjectStorage != nil { + + if all { + switch v := interface{}(m.GetObjectStorage()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListTaskEntriesRequestValidationError{ + field: "ObjectStorage", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListTaskEntriesRequestValidationError{ + field: "ObjectStorage", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetObjectStorage()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListTaskEntriesRequestValidationError{ + field: "ObjectStorage", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if m.Hdfs != nil { + + if all { + switch v := interface{}(m.GetHdfs()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListTaskEntriesRequestValidationError{ + field: "Hdfs", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListTaskEntriesRequestValidationError{ + field: "Hdfs", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetHdfs()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListTaskEntriesRequestValidationError{ + field: "Hdfs", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return ListTaskEntriesRequestMultiError(errors) + } + + return nil +} + +// ListTaskEntriesRequestMultiError is an error wrapping multiple validation +// errors returned by ListTaskEntriesRequest.ValidateAll() if the designated +// constraints aren't met. +type ListTaskEntriesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListTaskEntriesRequestMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListTaskEntriesRequestMultiError) AllErrors() []error { return m } + +// ListTaskEntriesRequestValidationError is the validation error returned by +// ListTaskEntriesRequest.Validate if the designated constraints aren't met. +type ListTaskEntriesRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListTaskEntriesRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListTaskEntriesRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListTaskEntriesRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListTaskEntriesRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListTaskEntriesRequestValidationError) ErrorName() string { + return "ListTaskEntriesRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e ListTaskEntriesRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListTaskEntriesRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListTaskEntriesRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListTaskEntriesRequestValidationError{} + +// Validate checks the field values on ListTaskEntriesResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *ListTaskEntriesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListTaskEntriesResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// ListTaskEntriesResponseMultiError, or nil if none found. +func (m *ListTaskEntriesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListTaskEntriesResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Success + + // no validation rules for ContentLength + + // no validation rules for ResponseHeader + + for idx, item := range m.GetEntries() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListTaskEntriesResponseValidationError{ + field: fmt.Sprintf("Entries[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListTaskEntriesResponseValidationError{ + field: fmt.Sprintf("Entries[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListTaskEntriesResponseValidationError{ + field: fmt.Sprintf("Entries[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if m.StatusCode != nil { + + if m.GetStatusCode() != 0 { + + if val := m.GetStatusCode(); val < 100 || val >= 599 { + err := ListTaskEntriesResponseValidationError{ + field: "StatusCode", + reason: "value must be inside range [100, 599)", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + + } + + if m.ErrorMessage != nil { + // no validation rules for ErrorMessage + } + + if len(errors) > 0 { + return ListTaskEntriesResponseMultiError(errors) + } + + return nil +} + +// ListTaskEntriesResponseMultiError is an error wrapping multiple validation +// errors returned by ListTaskEntriesResponse.ValidateAll() if the designated +// constraints aren't met. +type ListTaskEntriesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListTaskEntriesResponseMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ListTaskEntriesResponseMultiError) AllErrors() []error { return m } + +// ListTaskEntriesResponseValidationError is the validation error returned by +// ListTaskEntriesResponse.Validate if the designated constraints aren't met. +type ListTaskEntriesResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ListTaskEntriesResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ListTaskEntriesResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ListTaskEntriesResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ListTaskEntriesResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ListTaskEntriesResponseValidationError) ErrorName() string { + return "ListTaskEntriesResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e ListTaskEntriesResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sListTaskEntriesResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ListTaskEntriesResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ListTaskEntriesResponseValidationError{} + +// Validate checks the field values on Entry with the rules defined in the +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *Entry) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Entry with the rules defined in the +// proto definition for this message. If any rules are violated, the result is +// a list of violation errors wrapped in EntryMultiError, or nil if none found. +func (m *Entry) ValidateAll() error { + return m.validate(true) +} + +func (m *Entry) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Url + + // no validation rules for ContentLength + + // no validation rules for IsDir + + if len(errors) > 0 { + return EntryMultiError(errors) + } + + return nil +} + +// EntryMultiError is an error wrapping multiple validation errors returned by +// Entry.ValidateAll() if the designated constraints aren't met. +type EntryMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m EntryMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m EntryMultiError) AllErrors() []error { return m } + +// EntryValidationError is the validation error returned by Entry.Validate if +// the designated constraints aren't met. +type EntryValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e EntryValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e EntryValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e EntryValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e EntryValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e EntryValidationError) ErrorName() string { return "EntryValidationError" } + +// Error satisfies the builtin error interface +func (e EntryValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sEntry.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = EntryValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = EntryValidationError{} + // Validate checks the field values on DeleteTaskRequest with the rules defined // in the proto definition for this message. If any rules are violated, the // first error encountered is returned, or nil if there are no violations. diff --git a/pkg/apis/dfdaemon/v2/dfdaemon.proto b/pkg/apis/dfdaemon/v2/dfdaemon.proto index 4c91073..2744b88 100644 --- a/pkg/apis/dfdaemon/v2/dfdaemon.proto +++ b/pkg/apis/dfdaemon/v2/dfdaemon.proto @@ -115,6 +115,50 @@ message StatTaskRequest { string task_id = 1 [(validate.rules).string.min_len = 1]; } +// ListTaskEntriesRequest represents request of ListTaskEntries. +message ListTaskEntriesRequest { + // Task id. + string task_id = 1 [(validate.rules).string.min_len = 1]; + // URL to be listed the entries. + string url = 2; + // HTTP header to be sent with the request. + map request_header = 3; + // List timeout. + optional google.protobuf.Duration timeout = 4; + // certificate_chain is the client certs with DER format for the backend client to list the entries. + repeated bytes certificate_chain = 5; + // Object storage protocol information. + optional common.v2.ObjectStorage object_storage = 6; + // HDFS protocol information. + optional common.v2.HDFS hdfs = 7; +} + +// ListTaskEntriesResponse represents response of ListTaskEntries. +message ListTaskEntriesResponse { + // Success is the success of the response. + bool success = 1; + // Content length is the content length of the response + uint64 content_length = 2; + // HTTP header to be sent with the request. + map response_header = 3; + // Backend HTTP status code. + optional int32 status_code = 4 [(validate.rules).int32 = {gte: 100, lt: 599, ignore_empty: true}]; + /// Entries is the information of the entries in the directory. + repeated Entry entries = 5; + /// Error message is the error message of the response. + optional string error_message = 6; +} + +// Entry represents an entry in a directory. +message Entry { + // URL of the entry. + string url = 1; + // Size of the entry. + uint64 content_length = 2; + // Is directory or not. + bool is_dir = 3; +} + // DeleteTaskRequest represents request of DeleteTask. message DeleteTaskRequest { // Task id. @@ -340,6 +384,9 @@ service DfdaemonDownload { // StatTask stats task information. rpc StatTask(StatTaskRequest) returns(common.v2.Task); + // ListTaskEntries lists task entries for downloading directory. + rpc ListTaskEntries(ListTaskEntriesRequest) returns(ListTaskEntriesResponse); + // DeleteTask deletes task from p2p network. rpc DeleteTask(DeleteTaskRequest) returns(google.protobuf.Empty); diff --git a/pkg/apis/dfdaemon/v2/dfdaemon_grpc.pb.go b/pkg/apis/dfdaemon/v2/dfdaemon_grpc.pb.go index 5eb96a0..d9b2574 100644 --- a/pkg/apis/dfdaemon/v2/dfdaemon_grpc.pb.go +++ b/pkg/apis/dfdaemon/v2/dfdaemon_grpc.pb.go @@ -706,6 +706,8 @@ type DfdaemonDownloadClient interface { DownloadTask(ctx context.Context, in *DownloadTaskRequest, opts ...grpc.CallOption) (DfdaemonDownload_DownloadTaskClient, error) // StatTask stats task information. StatTask(ctx context.Context, in *StatTaskRequest, opts ...grpc.CallOption) (*v2.Task, error) + // ListTaskEntries lists task entries for downloading directory. + ListTaskEntries(ctx context.Context, in *ListTaskEntriesRequest, opts ...grpc.CallOption) (*ListTaskEntriesResponse, error) // DeleteTask deletes task from p2p network. DeleteTask(ctx context.Context, in *DeleteTaskRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // DeleteHost releases host in scheduler. @@ -767,6 +769,15 @@ func (c *dfdaemonDownloadClient) StatTask(ctx context.Context, in *StatTaskReque return out, nil } +func (c *dfdaemonDownloadClient) ListTaskEntries(ctx context.Context, in *ListTaskEntriesRequest, opts ...grpc.CallOption) (*ListTaskEntriesResponse, error) { + out := new(ListTaskEntriesResponse) + err := c.cc.Invoke(ctx, "/dfdaemon.v2.DfdaemonDownload/ListTaskEntries", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *dfdaemonDownloadClient) DeleteTask(ctx context.Context, in *DeleteTaskRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { out := new(emptypb.Empty) err := c.cc.Invoke(ctx, "/dfdaemon.v2.DfdaemonDownload/DeleteTask", in, out, opts...) @@ -843,6 +854,8 @@ type DfdaemonDownloadServer interface { DownloadTask(*DownloadTaskRequest, DfdaemonDownload_DownloadTaskServer) error // StatTask stats task information. StatTask(context.Context, *StatTaskRequest) (*v2.Task, error) + // ListTaskEntries lists task entries for downloading directory. + ListTaskEntries(context.Context, *ListTaskEntriesRequest) (*ListTaskEntriesResponse, error) // DeleteTask deletes task from p2p network. DeleteTask(context.Context, *DeleteTaskRequest) (*emptypb.Empty, error) // DeleteHost releases host in scheduler. @@ -865,6 +878,9 @@ func (UnimplementedDfdaemonDownloadServer) DownloadTask(*DownloadTaskRequest, Df func (UnimplementedDfdaemonDownloadServer) StatTask(context.Context, *StatTaskRequest) (*v2.Task, error) { return nil, status.Errorf(codes.Unimplemented, "method StatTask not implemented") } +func (UnimplementedDfdaemonDownloadServer) ListTaskEntries(context.Context, *ListTaskEntriesRequest) (*ListTaskEntriesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListTaskEntries not implemented") +} func (UnimplementedDfdaemonDownloadServer) DeleteTask(context.Context, *DeleteTaskRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method DeleteTask not implemented") } @@ -931,6 +947,24 @@ func _DfdaemonDownload_StatTask_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } +func _DfdaemonDownload_ListTaskEntries_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTaskEntriesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DfdaemonDownloadServer).ListTaskEntries(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/dfdaemon.v2.DfdaemonDownload/ListTaskEntries", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DfdaemonDownloadServer).ListTaskEntries(ctx, req.(*ListTaskEntriesRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _DfdaemonDownload_DeleteTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(DeleteTaskRequest) if err := dec(in); err != nil { @@ -1035,6 +1069,10 @@ var DfdaemonDownload_ServiceDesc = grpc.ServiceDesc{ MethodName: "StatTask", Handler: _DfdaemonDownload_StatTask_Handler, }, + { + MethodName: "ListTaskEntries", + Handler: _DfdaemonDownload_ListTaskEntries_Handler, + }, { MethodName: "DeleteTask", Handler: _DfdaemonDownload_DeleteTask_Handler, diff --git a/pkg/apis/dfdaemon/v2/mocks/dfdaemon_mock.go b/pkg/apis/dfdaemon/v2/mocks/dfdaemon_mock.go index 03ac1ab..65c5caa 100644 --- a/pkg/apis/dfdaemon/v2/mocks/dfdaemon_mock.go +++ b/pkg/apis/dfdaemon/v2/mocks/dfdaemon_mock.go @@ -1879,6 +1879,26 @@ func (mr *MockDfdaemonDownloadClientMockRecorder) DownloadTask(ctx, in any, opts return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownloadTask", reflect.TypeOf((*MockDfdaemonDownloadClient)(nil).DownloadTask), varargs...) } +// ListTaskEntries mocks base method. +func (m *MockDfdaemonDownloadClient) ListTaskEntries(ctx context.Context, in *dfdaemon.ListTaskEntriesRequest, opts ...grpc.CallOption) (*dfdaemon.ListTaskEntriesResponse, error) { + m.ctrl.T.Helper() + varargs := []any{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ListTaskEntries", varargs...) + ret0, _ := ret[0].(*dfdaemon.ListTaskEntriesResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListTaskEntries indicates an expected call of ListTaskEntries. +func (mr *MockDfdaemonDownloadClientMockRecorder) ListTaskEntries(ctx, in any, opts ...any) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]any{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListTaskEntries", reflect.TypeOf((*MockDfdaemonDownloadClient)(nil).ListTaskEntries), varargs...) +} + // StatPersistentCacheTask mocks base method. func (m *MockDfdaemonDownloadClient) StatPersistentCacheTask(ctx context.Context, in *dfdaemon.StatPersistentCacheTaskRequest, opts ...grpc.CallOption) (*common.PersistentCacheTask, error) { m.ctrl.T.Helper() @@ -2269,6 +2289,21 @@ func (mr *MockDfdaemonDownloadServerMockRecorder) DownloadTask(arg0, arg1 any) * return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownloadTask", reflect.TypeOf((*MockDfdaemonDownloadServer)(nil).DownloadTask), arg0, arg1) } +// ListTaskEntries mocks base method. +func (m *MockDfdaemonDownloadServer) ListTaskEntries(arg0 context.Context, arg1 *dfdaemon.ListTaskEntriesRequest) (*dfdaemon.ListTaskEntriesResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListTaskEntries", arg0, arg1) + ret0, _ := ret[0].(*dfdaemon.ListTaskEntriesResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListTaskEntries indicates an expected call of ListTaskEntries. +func (mr *MockDfdaemonDownloadServerMockRecorder) ListTaskEntries(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListTaskEntries", reflect.TypeOf((*MockDfdaemonDownloadServer)(nil).ListTaskEntries), arg0, arg1) +} + // StatPersistentCacheTask mocks base method. func (m *MockDfdaemonDownloadServer) StatPersistentCacheTask(arg0 context.Context, arg1 *dfdaemon.StatPersistentCacheTaskRequest) (*common.PersistentCacheTask, error) { m.ctrl.T.Helper() diff --git a/proto/dfdaemon.proto b/proto/dfdaemon.proto index 7aa6e9b..4048cea 100644 --- a/proto/dfdaemon.proto +++ b/proto/dfdaemon.proto @@ -110,6 +110,50 @@ message StatTaskRequest { string task_id = 1; } +// ListTaskEntriesRequest represents request of ListTaskEntries. +message ListTaskEntriesRequest { + // Task id. + string task_id = 1; + // URL to be listed the entries. + string url = 2; + // HTTP header to be sent with the request. + map request_header = 3; + // List timeout. + optional google.protobuf.Duration timeout = 4; + // certificate_chain is the client certs with DER format for the backend client to list the entries. + repeated bytes certificate_chain = 5; + // Object storage protocol information. + optional common.v2.ObjectStorage object_storage = 6; + // HDFS protocol information. + optional common.v2.HDFS hdfs = 7; +} + +// ListTaskEntriesResponse represents response of ListTaskEntries. +message ListTaskEntriesResponse { + // Success is the success of the response. + bool success = 1; + // Content length is the content length of the response + uint64 content_length = 2; + // HTTP header to be sent with the request. + map response_header = 3; + // Backend HTTP status code. + optional int32 status_code = 4; + /// Entries is the information of the entries in the directory. + repeated Entry entries = 5; + /// Error message is the error message of the response. + optional string error_message = 6; +} + +// Entry represents an entry in a directory. +message Entry { + // URL of the entry. + string url = 1; + // Size of the entry. + uint64 content_length = 2; + // Is directory or not. + bool is_dir = 3; +} + // DeleteTaskRequest represents request of DeleteTask. message DeleteTaskRequest { // Task id. @@ -333,6 +377,9 @@ service DfdaemonDownload { // StatTask stats task information. rpc StatTask(StatTaskRequest) returns(common.v2.Task); + // ListTaskEntries lists task entries for downloading directory. + rpc ListTaskEntries(ListTaskEntriesRequest) returns(ListTaskEntriesResponse); + // DeleteTask deletes task from p2p network. rpc DeleteTask(DeleteTaskRequest) returns(google.protobuf.Empty); diff --git a/src/descriptor.bin b/src/descriptor.bin index 6fa88b9043ca8e4d0fda834cacce58b8f324fa48..ac02befa708f588bee8aec1a3ddb553e34d978a3 100644 GIT binary patch delta 7214 zcmaJ`YjhOHm7b~|wMIR9_6*W!5U3^bMhK8VAP&Ji#KRc#v_l-5Rb**^aX@1q?8?PKNd%WMR?xF+P zwSM*2Ro{1S-MaTy_2|zB^*4^|`-^_gzt`5*`{ysD1uket{)}im@ko9AyOWy|&Cy6) zbR8&}nQLgvo0o*R#Rg=|rAKptk=-0wwmcF~)GdzGH%6L6nxzf!S5{XvE^MriER8i) zJX2Y5pVnNPA^tS3EOWGxo`^1u#Fi&QUNN+yxbHO2T=k}fF>|ny*AQt=L>ERI>JyQ= zhQ;;Krcjz-;|l_{Mt1DUry>oBx_BbiT)!w1(#6#A#bemqEc^XD`!&f7FuaQ!7sf;B zaNS>-Q_&Dx>i9OTcFMeIe6Ac8FHD#s!V~*XFKyL~f`9Nj{&cJ<9x+2kdVG09LnIy# zG06GmDrojKvKwMeiAYnTZb_tRQDSk3i`J@Ob-j_(9I@H=hH3QIg-JZOe@L>A;g2Wk z6U*au4Y9^Z$P0sM2$5mGoP>9@ymBKQMrofyX)^xiJ;JnyE9a^y2u4<9X>DPAhz<*@3^WtBBvunWMA zta~hplD}A~HG`SA@b4<5!oZ*A&0was%-37|?t|K7x#9I@aJ*Q~^TNf}qjP6iiJ0|d z#9D&liZoh@#SzQdH?T8}G@6}8(|rmNIU`dc4Jaqq7$tSNsjc7x!-K48k32HlvdhoW zk3-d3k&Gr5OB+s!-nGGXqV{l9$-x!*eH4O?75xVoMbZYqNL zT!ZRLf0?7BF|$Nl*=MkVq*O7~cv{MWw~F@b%=Q?^` zIK3*bR3WIZ>f6t#lIobanpcbWw+yVcW10q`)pz|&gP*JYikb$Y)n&sSp)?4s9x>7w zD1|UF$;-r;t;OH8g>(od?+WQO?k{wxI)swp-U>k|SyF1uLK+#S{yg(+rh2+Jk0Plp z&$7PBdy~kIBr=%keV+M>LP?*M=nau4l+%2g1&Jmfu%F*jdj843s-* zaG;G$^xSDB?b*m&yueO65I%2YNG=CLYa`1mQc$vsEn|lC8PpdU?-d?5)S~`}rmF%J zZCV&>URs}s#+uZYIOT0co8%5PCZo+bv0}|D@9q(@ob;3{UM%ZH*A?VBU|z^^#S2$n zWIc96PlDA@DLoccfhdgkvu=w8v7ZhrtwObI_U> z{pX0&Jguo!&#-ZUOw9Zd^A#E)Sj(h%>=5@BXp?-Mu9h67pP z{e<}jN%<_2-wFBPNIb&8PGtZP6L%^DfH1I=4E&M7uPj>69wvT&>JOtR?7(2}QR@Yi zIp%Ua{q=X_N4Xq}!{K4iGYXnUi#YklD*jySf1(vzLVmx-d7rTm7gqe15lR|m%spxH}?ACo21DlvYo$;E*CX4~5z9%d7>I2GcXt`N=} zz`G7nA-?GfQ6av`AVkTVMa~}(<1ZFZqEb5Gir}mP#Gz=%ic0AK!=dOvh#X)z6`Q08 z<{o6cw-_oGjmY9UGy&~A0tEFSOD}Y&I;aO(Q7@x~OK!U9eXH#kAA1>?>0rL)GSk6) zi>2o~%ycl{VufL&#SVeb^tQL{ulqimmc@PWzTNfS2cdR11U?A0Gu(e|?|l$zr(U#) zA@#CN{XORSEmH3}nR=}UbHtk8Rg1doIos#4%rNSMiar|}?=fGc+{kRo!XskNS!*;N zVeE*?LO@JBqDm1E#*R=aE`qHbQ$NZ)AHvpSWGmG=hxx?s&yES?fOM4k2Fo1JA@z>b znw2bAg=ffjD0x84>`+M#2>A|5a;m)?O1@)M9N-p5=XrS~zHhx9&?8kS(e zWR6Ve6E2Z7Pq;)%;S)s6CWAhYsh?#0G}B~kfie3e^U-aG{K4c8n76?m6c59KFfG@cs&!O~ z3+@7_wOmjw3X_RQEviO30_r8v_MammLyhHhmt7fZEti?u+X*KwvVgdN4wo|6^(*3&3queL+*-X?7!NxWsjpmN zJr$4o$`#^KU(4laE7#E1dQHM3%wKcOr$gqN>TDQ=%r({703maYIvXWYo~hqto-ah} z#U}!Jn0J#BhYBr^@}`RlZ3G^%o-VaXfSA~&>ID#jT~sgIDB<#G3%lFqU&>`Qcm}gu z^*cZsW6lW#2xd2(KnviCY3jF`=YNpXv#ivFc`T3`wt)G?;XjWIn4sNezJAg(lRUd4 z&qq8$|Bmtu5EJhx&j6u+hdiUD226bo_dL(VtjmuF0+_glJ8KP);@Z@lmsqd{&yZZp zos0y;%(dJ((*Ys5mOGL`Q-6VbUgRi4OR!&CV$fek1%e>FprnH&-IDs=W)@6+@(k05 zv?yhaU}B3>28418DO31^6vYkFr4e|BOB-AwMR9{mq$qA6B7GSJ=^Wq0McQ#|2Au`K zNRCb1DRn?-ZQ{<^2?(uC+#DoR4iH+K_>c;t0TJtA>YKSIh2=d;%j+pNTp1Va0m5eP z8)%flS`S*@RxbW@rS}LtLwc)n6A&}E@{AlQ4G8J2+zc4KBoTw#xTv@qO7@WJ+vXB! zecN0jt#6x4#QL^#9>j<5>}aF`AMEny9OsVLL#_|wc0&P#)^=Bm*0-Is=&Z^&^;hBa zkFmhVQtz%|g<|}_`^BeM#{}}hdX+neRX#29HMxgXc*Y`MQ~H3I`I_1bKs1VWhiGwv&p=^rBR_Q{Zsz%vy0sl@|g<~|iUKq&50ArFyf`*~`3f(2>- zz})XL$(Q{ulYH4v%z5yo(9{ob&pQa)WJ}clG9*@fIy_Ja!U68HWN8(WQwPO6pZ2Z7 zBa{y+Wk5_k$er&UKqw#N_}&?YXcdxAheY6J`8V(g-XWJq9vyOdXO)#qUdH>4PHV4Z_{O20Yc$z?(-`Mg|~TjjuFF}!lr(hd)~#G>Mc=nxK!M} zIVlhZ;V}0NH6DVEFs-Rw%>Ha@4IYsJ?c6zj05P$h_p~p_fKYDd{rVfrpxhHzO78hB zlp9ESK&o&A3yIvW{(+ugy~lmSjMqz0FnL^TzExg@M|$SE{K17rAak7O$g`Fpc*psGYPvB1V(_H6d21wiq;Zn#@*9sv zXo%z2F54Tb#FM;yf-zC@fKH3Lzt)aD?J_hlPP+`cF`nk-m5u;iRZjD&$@m5(!zitf z#QDEY9`X^_1I`pL1U}-y0Sbcg5g$GUhbS?S9cRRx&+EpX;kvv=(K|5C@X}g`L0>*+ z_{>KXguog8=(FgFB!Izl;`-;&A?LU*e^{V*5ID!J@eYG-BIo$@I@)85;wI85&VD&V z9Q$v5NGI3j7ahF^tCRO0>#*qJ(aEPY7>`L7K5i}w*8Oy|Xq-6L_?+vl1} z7m`)Ls0zAK1vO&kEq!dassy};ShuPKKzP%wDghAQbgN2Wl*PAD36;rPYB_iZfm>=h zfMDFB8h9A~GfMP3oX@)d2Y39$M!yo{M^F4mO8sPR;m0 zNe&*|;rbwXh7p$f`Q8*VF0v^np0JPpl#IJX5A^+@xPC5;Vu9G delta 4674 zcmYjVdvH|M8Q<^QyLWHS=6QGXV0oAXL`1?X0mO;5gqPwAs*bhTQbeRGqgCjre`u7_ zOq$_gJ;7z-6eBn&4o-xf6ljJ7s!W|!Y#8jeI4Pzb%P3YRL!m=sto?mw@A3A(^SkH! z{l3Tf&SUrOKf33B1&W;l-+3akQ8#`vKcQ6ADIh=kgf~W~{<5g}K};(@_EcmC zQTkq8HZ)Ez?~P|>zDiZP?qpo2hbn#`90kr(-c(ho97l1)k3PfYX;ppq>J5)pKm6cy zr3zI{CSo$$iTLZc!Hjx*EJ}1p$g~*wl1h` z6dz+DsBJWEylQ2`jr-2l?52M>1ZEt}tsyfG=2nVV1k5;?TWL&MwdRZ9`A&QGomHFZ zX2l+&Zx5sQAk-cf!Glmc`Bj0C2cdQvJ5FsOlrQ1CJ1O!Cn(;Z)jN5xk^s$q3(T7R> z;^$r(ot8j5CZMsCyxC?c6X-{$L*MyebpwWQ)cqE>9J}Zd=>ic zE{eRRfBN|Y$wJueBJVm?g*p_9U}vWE1xnRp48=~X2nfqgLRX6eKqz(++B#3f`9g<`ynRzDDMv5aq$vox4>zy++a z5ZpJZw#h z0Yu&hY@+~zd4T*`#seTc9H53d>IS2O$*ivUa&CQ*sdU!X3s9!0peW!;rL$C8rj{5U zD&4J{zia|e>f9ajq|V(`kWUb^;C0iatJQ6W2XsjP>XDlfwwxA+!m#DEI248*h0Gzs zp(70fV<8ewo%u!v)Fb-23v(bNXT_0FM$U>Op^TgrN9b`NGD< zMdqyN31wn370Sq2(L?@(AetCtdZ?yW%`!4r(xb!^b?^GAsE3<}>A+Ubila2vQe9Aw z3RO<4BF0hCC#Tgy43S7*7(pB|efG4%EM)rZX$1(GJ~^$VQHp){U5flcKRSGWvKV&n zN~6e5DwaMuVRjORNa=)KCqNjUu=@cJf+u7@v`d2(%PRI~f4;Jm=3@+IzdgeMWsY#K z$kG6U*-yAweuz*?eD_0&oWjX-XLaVahbXCsKdIH77bhf3!1|E9$tJK832Z z9uV?5D_`cjA5-LSq)+{8WwH#0A6vyTQ5?)4W*9?q&`JWra?nZwLUK?fWeLipl4s2l zUEY8C_#Izv=9 zU9CaIeBb?)B440Z_f+d&_tog5r^oB3FON<6Abm>SwQ3@~`I6o_(r;Xz(2OzU&)F~m zVR?=UN{l=p!=>vaCHA-oK;qy{R7THTwkU#M-3-Tp7@g6}oDc`+9k*~3e_v@M~<27Gd zluE(=3VG91E!0zz%?RlgxiR|KlTHIL&W{n|{4NEA^$7X-D;yB&BXWiR*pM+fN_toB z-lY;+iV6KTYWockk&fDa12pEr+XE0Lope+Dlxru{o9T19}IM_kuQkcz|n(dUDk1>dwL!yMTIV4Ibn}v86 zLaFfGR*r0EN-sw1AFt9)BeRkfAhfbqZ8lkj#MGu+My{^M5Xx;<84!kTTu^BG7!b;B zTvDoLqF@yg(iVMoWEyx9(Uy=W5p4;1644gn$yHGyJ+MvR_*Gp4hTv^ujt34zavOUI z3&GpQ#U<)-WK!w7FL7jt-u2ZZ$x7J0#NG_^j<1vi+V$AcrPpJK6>n$GUp#;?Z0E80 z=Pn=w+j;Ue>In!|;ep7JS5TTYdg!Yf-7~thstWcy*_)}BBho4n?qHshZqn7GDLwt` z`UZT12Yk$X00g7MdH{rn4)K7ew~GhWE{>egJHB32vWvY6b)$0Jh^TgEh8&vTgfZxy z?D~?iOrbWNoSbYSe0B27xfVjaljq$k^@lO2don9yG)-^+uUof=-QvKGpt6Tc%ylbv zpzYx)bLHIth{?T~xh~DA#~2!W*)>m4nUXm!s||Ey`|agv3sjRK0`1dNzgg6{FJwf) z*cUS7Rk)9*%?WelLwhsr|;8`52ttJXj$Ds zcCQL-T__#o>hD?z>Oo$%N){hfJWIMWw-bG@uA5!+i%mX)(#;bZ1ByIBx_QYOb)TW& zr_15Y2Sh7p9}c~Epd1dp$gh;c;w4YPFX|rVjp9Lvbv1=Q+5DM?{ zHFw|_hO~EK6h{30=Skgy?Lof#KI4CeOq)YXOWtR%%4`sl4bm?g1q_Ylj76riNggvfboPA^!L5SJvPW0xR2A_v*dk##zOAgI_ c+hmME9JDPC2>*k&#Q{Ma, + /// List timeout. + #[prost(message, optional, tag = "4")] + pub timeout: ::core::option::Option<::prost_wkt_types::Duration>, + /// certificate_chain is the client certs with DER format for the backend client to list the entries. + #[prost(bytes = "vec", repeated, tag = "5")] + pub certificate_chain: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec>, + /// Object storage protocol information. + #[prost(message, optional, tag = "6")] + pub object_storage: ::core::option::Option, + /// HDFS protocol information. + #[prost(message, optional, tag = "7")] + pub hdfs: ::core::option::Option, +} +/// ListTaskEntriesResponse represents response of ListTaskEntries. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListTaskEntriesResponse { + /// Success is the success of the response. + #[prost(bool, tag = "1")] + pub success: bool, + /// Content length is the content length of the response + #[prost(uint64, tag = "2")] + pub content_length: u64, + /// HTTP header to be sent with the request. + #[prost(map = "string, string", tag = "3")] + pub response_header: ::std::collections::HashMap< + ::prost::alloc::string::String, + ::prost::alloc::string::String, + >, + /// Backend HTTP status code. + #[prost(int32, optional, tag = "4")] + pub status_code: ::core::option::Option, + /// / Entries is the information of the entries in the directory. + #[prost(message, repeated, tag = "5")] + pub entries: ::prost::alloc::vec::Vec, + /// / Error message is the error message of the response. + #[prost(string, optional, tag = "6")] + pub error_message: ::core::option::Option<::prost::alloc::string::String>, +} +/// Entry represents an entry in a directory. +#[derive(serde::Serialize, serde::Deserialize)] +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Entry { + /// URL of the entry. + #[prost(string, tag = "1")] + pub url: ::prost::alloc::string::String, + /// Size of the entry. + #[prost(uint64, tag = "2")] + pub content_length: u64, + /// Is directory or not. + #[prost(bool, tag = "3")] + pub is_dir: bool, +} /// DeleteTaskRequest represents request of DeleteTask. #[derive(serde::Serialize, serde::Deserialize)] #[allow(clippy::derive_partial_eq_without_eq)] @@ -997,6 +1069,34 @@ pub mod dfdaemon_download_client { .insert(GrpcMethod::new("dfdaemon.v2.DfdaemonDownload", "StatTask")); self.inner.unary(req, path, codec).await } + /// ListTaskEntries lists task entries for downloading directory. + pub async fn list_task_entries( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/dfdaemon.v2.DfdaemonDownload/ListTaskEntries", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new("dfdaemon.v2.DfdaemonDownload", "ListTaskEntries"), + ); + self.inner.unary(req, path, codec).await + } /// DeleteTask deletes task from p2p network. pub async fn delete_task( &mut self, @@ -2060,6 +2160,14 @@ pub mod dfdaemon_download_server { tonic::Response, tonic::Status, >; + /// ListTaskEntries lists task entries for downloading directory. + async fn list_task_entries( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; /// DeleteTask deletes task from p2p network. async fn delete_task( &self, @@ -2273,6 +2381,52 @@ pub mod dfdaemon_download_server { }; Box::pin(fut) } + "/dfdaemon.v2.DfdaemonDownload/ListTaskEntries" => { + #[allow(non_camel_case_types)] + struct ListTaskEntriesSvc(pub Arc); + impl< + T: DfdaemonDownload, + > tonic::server::UnaryService + for ListTaskEntriesSvc { + type Response = super::ListTaskEntriesResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::list_task_entries(&inner, request) + .await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let method = ListTaskEntriesSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } "/dfdaemon.v2.DfdaemonDownload/DeleteTask" => { #[allow(non_camel_case_types)] struct DeleteTaskSvc(pub Arc);