Add GetObject method to Metainfo (#2611)

This commit is contained in:
Michal Niewrzal 2019-07-23 13:09:12 +02:00 committed by GitHub
parent 53d96be44a
commit cba008d7df
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 496 additions and 218 deletions

View File

@ -1879,6 +1879,98 @@ func (m *ObjectCommitResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_ObjectCommitResponse proto.InternalMessageInfo
type ObjectGetRequest struct {
Bucket []byte `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"`
EncryptedPath []byte `protobuf:"bytes,2,opt,name=encrypted_path,json=encryptedPath,proto3" json:"encrypted_path,omitempty"`
Version int32 `protobuf:"varint,3,opt,name=version,proto3" json:"version,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ObjectGetRequest) Reset() { *m = ObjectGetRequest{} }
func (m *ObjectGetRequest) String() string { return proto.CompactTextString(m) }
func (*ObjectGetRequest) ProtoMessage() {}
func (*ObjectGetRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{34}
}
func (m *ObjectGetRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ObjectGetRequest.Unmarshal(m, b)
}
func (m *ObjectGetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ObjectGetRequest.Marshal(b, m, deterministic)
}
func (m *ObjectGetRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_ObjectGetRequest.Merge(m, src)
}
func (m *ObjectGetRequest) XXX_Size() int {
return xxx_messageInfo_ObjectGetRequest.Size(m)
}
func (m *ObjectGetRequest) XXX_DiscardUnknown() {
xxx_messageInfo_ObjectGetRequest.DiscardUnknown(m)
}
var xxx_messageInfo_ObjectGetRequest proto.InternalMessageInfo
func (m *ObjectGetRequest) GetBucket() []byte {
if m != nil {
return m.Bucket
}
return nil
}
func (m *ObjectGetRequest) GetEncryptedPath() []byte {
if m != nil {
return m.EncryptedPath
}
return nil
}
func (m *ObjectGetRequest) GetVersion() int32 {
if m != nil {
return m.Version
}
return 0
}
type ObjectGetResponse struct {
Object *Object `protobuf:"bytes,1,opt,name=object,proto3" json:"object,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ObjectGetResponse) Reset() { *m = ObjectGetResponse{} }
func (m *ObjectGetResponse) String() string { return proto.CompactTextString(m) }
func (*ObjectGetResponse) ProtoMessage() {}
func (*ObjectGetResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{35}
}
func (m *ObjectGetResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ObjectGetResponse.Unmarshal(m, b)
}
func (m *ObjectGetResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ObjectGetResponse.Marshal(b, m, deterministic)
}
func (m *ObjectGetResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_ObjectGetResponse.Merge(m, src)
}
func (m *ObjectGetResponse) XXX_Size() int {
return xxx_messageInfo_ObjectGetResponse.Size(m)
}
func (m *ObjectGetResponse) XXX_DiscardUnknown() {
xxx_messageInfo_ObjectGetResponse.DiscardUnknown(m)
}
var xxx_messageInfo_ObjectGetResponse proto.InternalMessageInfo
func (m *ObjectGetResponse) GetObject() *Object {
if m != nil {
return m.Object
}
return nil
}
type ObjectListRequest struct {
Bucket []byte `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"`
EncryptedPrefix []byte `protobuf:"bytes,2,opt,name=encrypted_prefix,json=encryptedPrefix,proto3" json:"encrypted_prefix,omitempty"`
@ -1894,7 +1986,7 @@ func (m *ObjectListRequest) Reset() { *m = ObjectListRequest{} }
func (m *ObjectListRequest) String() string { return proto.CompactTextString(m) }
func (*ObjectListRequest) ProtoMessage() {}
func (*ObjectListRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{34}
return fileDescriptor_631e2f30a93cd64e, []int{36}
}
func (m *ObjectListRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ObjectListRequest.Unmarshal(m, b)
@ -1961,7 +2053,7 @@ func (m *ObjectListResponse) Reset() { *m = ObjectListResponse{} }
func (m *ObjectListResponse) String() string { return proto.CompactTextString(m) }
func (*ObjectListResponse) ProtoMessage() {}
func (*ObjectListResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{35}
return fileDescriptor_631e2f30a93cd64e, []int{37}
}
func (m *ObjectListResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ObjectListResponse.Unmarshal(m, b)
@ -2013,7 +2105,7 @@ func (m *ObjectListItem) Reset() { *m = ObjectListItem{} }
func (m *ObjectListItem) String() string { return proto.CompactTextString(m) }
func (*ObjectListItem) ProtoMessage() {}
func (*ObjectListItem) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{36}
return fileDescriptor_631e2f30a93cd64e, []int{38}
}
func (m *ObjectListItem) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ObjectListItem.Unmarshal(m, b)
@ -2093,7 +2185,7 @@ func (m *ObjectListItemIncludes) Reset() { *m = ObjectListItemIncludes{}
func (m *ObjectListItemIncludes) String() string { return proto.CompactTextString(m) }
func (*ObjectListItemIncludes) ProtoMessage() {}
func (*ObjectListItemIncludes) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{37}
return fileDescriptor_631e2f30a93cd64e, []int{39}
}
func (m *ObjectListItemIncludes) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ObjectListItemIncludes.Unmarshal(m, b)
@ -2133,7 +2225,7 @@ func (m *ObjectBeginDeleteRequest) Reset() { *m = ObjectBeginDeleteReque
func (m *ObjectBeginDeleteRequest) String() string { return proto.CompactTextString(m) }
func (*ObjectBeginDeleteRequest) ProtoMessage() {}
func (*ObjectBeginDeleteRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{38}
return fileDescriptor_631e2f30a93cd64e, []int{40}
}
func (m *ObjectBeginDeleteRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ObjectBeginDeleteRequest.Unmarshal(m, b)
@ -2185,7 +2277,7 @@ func (m *ObjectBeginDeleteResponse) Reset() { *m = ObjectBeginDeleteResp
func (m *ObjectBeginDeleteResponse) String() string { return proto.CompactTextString(m) }
func (*ObjectBeginDeleteResponse) ProtoMessage() {}
func (*ObjectBeginDeleteResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{39}
return fileDescriptor_631e2f30a93cd64e, []int{41}
}
func (m *ObjectBeginDeleteResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ObjectBeginDeleteResponse.Unmarshal(m, b)
@ -2216,7 +2308,7 @@ func (m *ObjectFinishDeleteRequest) Reset() { *m = ObjectFinishDeleteReq
func (m *ObjectFinishDeleteRequest) String() string { return proto.CompactTextString(m) }
func (*ObjectFinishDeleteRequest) ProtoMessage() {}
func (*ObjectFinishDeleteRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{40}
return fileDescriptor_631e2f30a93cd64e, []int{42}
}
func (m *ObjectFinishDeleteRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ObjectFinishDeleteRequest.Unmarshal(m, b)
@ -2246,7 +2338,7 @@ func (m *ObjectFinishDeleteResponse) Reset() { *m = ObjectFinishDeleteRe
func (m *ObjectFinishDeleteResponse) String() string { return proto.CompactTextString(m) }
func (*ObjectFinishDeleteResponse) ProtoMessage() {}
func (*ObjectFinishDeleteResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{41}
return fileDescriptor_631e2f30a93cd64e, []int{43}
}
func (m *ObjectFinishDeleteResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ObjectFinishDeleteResponse.Unmarshal(m, b)
@ -2284,7 +2376,7 @@ func (m *SatStreamID) Reset() { *m = SatStreamID{} }
func (m *SatStreamID) String() string { return proto.CompactTextString(m) }
func (*SatStreamID) ProtoMessage() {}
func (*SatStreamID) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{42}
return fileDescriptor_631e2f30a93cd64e, []int{44}
}
func (m *SatStreamID) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SatStreamID.Unmarshal(m, b)
@ -2370,7 +2462,7 @@ func (m *Segment) Reset() { *m = Segment{} }
func (m *Segment) String() string { return proto.CompactTextString(m) }
func (*Segment) ProtoMessage() {}
func (*Segment) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{43}
return fileDescriptor_631e2f30a93cd64e, []int{45}
}
func (m *Segment) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Segment.Unmarshal(m, b)
@ -2437,7 +2529,7 @@ func (m *Piece) Reset() { *m = Piece{} }
func (m *Piece) String() string { return proto.CompactTextString(m) }
func (*Piece) ProtoMessage() {}
func (*Piece) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{44}
return fileDescriptor_631e2f30a93cd64e, []int{46}
}
func (m *Piece) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Piece.Unmarshal(m, b)
@ -2476,7 +2568,7 @@ func (m *SegmentPosition) Reset() { *m = SegmentPosition{} }
func (m *SegmentPosition) String() string { return proto.CompactTextString(m) }
func (*SegmentPosition) ProtoMessage() {}
func (*SegmentPosition) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{45}
return fileDescriptor_631e2f30a93cd64e, []int{47}
}
func (m *SegmentPosition) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentPosition.Unmarshal(m, b)
@ -2523,7 +2615,7 @@ func (m *SegmentBeginRequest) Reset() { *m = SegmentBeginRequest{} }
func (m *SegmentBeginRequest) String() string { return proto.CompactTextString(m) }
func (*SegmentBeginRequest) ProtoMessage() {}
func (*SegmentBeginRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{46}
return fileDescriptor_631e2f30a93cd64e, []int{48}
}
func (m *SegmentBeginRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentBeginRequest.Unmarshal(m, b)
@ -2570,7 +2662,7 @@ func (m *SegmentBeginResponse) Reset() { *m = SegmentBeginResponse{} }
func (m *SegmentBeginResponse) String() string { return proto.CompactTextString(m) }
func (*SegmentBeginResponse) ProtoMessage() {}
func (*SegmentBeginResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{47}
return fileDescriptor_631e2f30a93cd64e, []int{49}
}
func (m *SegmentBeginResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentBeginResponse.Unmarshal(m, b)
@ -2612,7 +2704,7 @@ func (m *SegmentCommitRequest) Reset() { *m = SegmentCommitRequest{} }
func (m *SegmentCommitRequest) String() string { return proto.CompactTextString(m) }
func (*SegmentCommitRequest) ProtoMessage() {}
func (*SegmentCommitRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{48}
return fileDescriptor_631e2f30a93cd64e, []int{50}
}
func (m *SegmentCommitRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentCommitRequest.Unmarshal(m, b)
@ -2666,7 +2758,7 @@ func (m *SegmentPieceUploadResult) Reset() { *m = SegmentPieceUploadResu
func (m *SegmentPieceUploadResult) String() string { return proto.CompactTextString(m) }
func (*SegmentPieceUploadResult) ProtoMessage() {}
func (*SegmentPieceUploadResult) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{49}
return fileDescriptor_631e2f30a93cd64e, []int{51}
}
func (m *SegmentPieceUploadResult) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentPieceUploadResult.Unmarshal(m, b)
@ -2720,7 +2812,7 @@ func (m *SatSegmentID) Reset() { *m = SatSegmentID{} }
func (m *SatSegmentID) String() string { return proto.CompactTextString(m) }
func (*SatSegmentID) ProtoMessage() {}
func (*SatSegmentID) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{50}
return fileDescriptor_631e2f30a93cd64e, []int{52}
}
func (m *SatSegmentID) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SatSegmentID.Unmarshal(m, b)
@ -2792,7 +2884,7 @@ func (m *SegmentCommitResponse) Reset() { *m = SegmentCommitResponse{} }
func (m *SegmentCommitResponse) String() string { return proto.CompactTextString(m) }
func (*SegmentCommitResponse) ProtoMessage() {}
func (*SegmentCommitResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{51}
return fileDescriptor_631e2f30a93cd64e, []int{53}
}
func (m *SegmentCommitResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentCommitResponse.Unmarshal(m, b)
@ -2827,7 +2919,7 @@ func (m *SegmentMakeInlineRequest) Reset() { *m = SegmentMakeInlineReque
func (m *SegmentMakeInlineRequest) String() string { return proto.CompactTextString(m) }
func (*SegmentMakeInlineRequest) ProtoMessage() {}
func (*SegmentMakeInlineRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{52}
return fileDescriptor_631e2f30a93cd64e, []int{54}
}
func (m *SegmentMakeInlineRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentMakeInlineRequest.Unmarshal(m, b)
@ -2878,7 +2970,7 @@ func (m *SegmentMakeInlineResponse) Reset() { *m = SegmentMakeInlineResp
func (m *SegmentMakeInlineResponse) String() string { return proto.CompactTextString(m) }
func (*SegmentMakeInlineResponse) ProtoMessage() {}
func (*SegmentMakeInlineResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{53}
return fileDescriptor_631e2f30a93cd64e, []int{55}
}
func (m *SegmentMakeInlineResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentMakeInlineResponse.Unmarshal(m, b)
@ -2910,7 +3002,7 @@ func (m *SegmentBeginDeleteRequest) Reset() { *m = SegmentBeginDeleteReq
func (m *SegmentBeginDeleteRequest) String() string { return proto.CompactTextString(m) }
func (*SegmentBeginDeleteRequest) ProtoMessage() {}
func (*SegmentBeginDeleteRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{54}
return fileDescriptor_631e2f30a93cd64e, []int{56}
}
func (m *SegmentBeginDeleteRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentBeginDeleteRequest.Unmarshal(m, b)
@ -2956,7 +3048,7 @@ func (m *SegmentBeginDeleteResponse) Reset() { *m = SegmentBeginDeleteRe
func (m *SegmentBeginDeleteResponse) String() string { return proto.CompactTextString(m) }
func (*SegmentBeginDeleteResponse) ProtoMessage() {}
func (*SegmentBeginDeleteResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{55}
return fileDescriptor_631e2f30a93cd64e, []int{57}
}
func (m *SegmentBeginDeleteResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentBeginDeleteResponse.Unmarshal(m, b)
@ -2995,7 +3087,7 @@ func (m *SegmentFinishDeleteRequest) Reset() { *m = SegmentFinishDeleteR
func (m *SegmentFinishDeleteRequest) String() string { return proto.CompactTextString(m) }
func (*SegmentFinishDeleteRequest) ProtoMessage() {}
func (*SegmentFinishDeleteRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{56}
return fileDescriptor_631e2f30a93cd64e, []int{58}
}
func (m *SegmentFinishDeleteRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentFinishDeleteRequest.Unmarshal(m, b)
@ -3035,7 +3127,7 @@ func (m *SegmentPieceDeleteResult) Reset() { *m = SegmentPieceDeleteResu
func (m *SegmentPieceDeleteResult) String() string { return proto.CompactTextString(m) }
func (*SegmentPieceDeleteResult) ProtoMessage() {}
func (*SegmentPieceDeleteResult) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{57}
return fileDescriptor_631e2f30a93cd64e, []int{59}
}
func (m *SegmentPieceDeleteResult) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentPieceDeleteResult.Unmarshal(m, b)
@ -3079,7 +3171,7 @@ func (m *SegmentFinishDeleteResponse) Reset() { *m = SegmentFinishDelete
func (m *SegmentFinishDeleteResponse) String() string { return proto.CompactTextString(m) }
func (*SegmentFinishDeleteResponse) ProtoMessage() {}
func (*SegmentFinishDeleteResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{58}
return fileDescriptor_631e2f30a93cd64e, []int{60}
}
func (m *SegmentFinishDeleteResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentFinishDeleteResponse.Unmarshal(m, b)
@ -3112,7 +3204,7 @@ func (m *SegmentListRequest) Reset() { *m = SegmentListRequest{} }
func (m *SegmentListRequest) String() string { return proto.CompactTextString(m) }
func (*SegmentListRequest) ProtoMessage() {}
func (*SegmentListRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{59}
return fileDescriptor_631e2f30a93cd64e, []int{61}
}
func (m *SegmentListRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentListRequest.Unmarshal(m, b)
@ -3165,7 +3257,7 @@ func (m *SegmentListResponse) Reset() { *m = SegmentListResponse{} }
func (m *SegmentListResponse) String() string { return proto.CompactTextString(m) }
func (*SegmentListResponse) ProtoMessage() {}
func (*SegmentListResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{60}
return fileDescriptor_631e2f30a93cd64e, []int{62}
}
func (m *SegmentListResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentListResponse.Unmarshal(m, b)
@ -3210,7 +3302,7 @@ func (m *SegmentListItem) Reset() { *m = SegmentListItem{} }
func (m *SegmentListItem) String() string { return proto.CompactTextString(m) }
func (*SegmentListItem) ProtoMessage() {}
func (*SegmentListItem) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{61}
return fileDescriptor_631e2f30a93cd64e, []int{63}
}
func (m *SegmentListItem) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentListItem.Unmarshal(m, b)
@ -3249,7 +3341,7 @@ func (m *SegmentDownloadRequest) Reset() { *m = SegmentDownloadRequest{}
func (m *SegmentDownloadRequest) String() string { return proto.CompactTextString(m) }
func (*SegmentDownloadRequest) ProtoMessage() {}
func (*SegmentDownloadRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{62}
return fileDescriptor_631e2f30a93cd64e, []int{64}
}
func (m *SegmentDownloadRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentDownloadRequest.Unmarshal(m, b)
@ -3290,7 +3382,7 @@ func (m *SegmentDownloadResponse) Reset() { *m = SegmentDownloadResponse
func (m *SegmentDownloadResponse) String() string { return proto.CompactTextString(m) }
func (*SegmentDownloadResponse) ProtoMessage() {}
func (*SegmentDownloadResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_631e2f30a93cd64e, []int{63}
return fileDescriptor_631e2f30a93cd64e, []int{65}
}
func (m *SegmentDownloadResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SegmentDownloadResponse.Unmarshal(m, b)
@ -3368,6 +3460,8 @@ func init() {
proto.RegisterType((*ObjectBeginResponse)(nil), "metainfo.ObjectBeginResponse")
proto.RegisterType((*ObjectCommitRequest)(nil), "metainfo.ObjectCommitRequest")
proto.RegisterType((*ObjectCommitResponse)(nil), "metainfo.ObjectCommitResponse")
proto.RegisterType((*ObjectGetRequest)(nil), "metainfo.ObjectGetRequest")
proto.RegisterType((*ObjectGetResponse)(nil), "metainfo.ObjectGetResponse")
proto.RegisterType((*ObjectListRequest)(nil), "metainfo.ObjectListRequest")
proto.RegisterType((*ObjectListResponse)(nil), "metainfo.ObjectListResponse")
proto.RegisterType((*ObjectListItem)(nil), "metainfo.ObjectListItem")
@ -3403,191 +3497,194 @@ func init() {
func init() { proto.RegisterFile("metainfo.proto", fileDescriptor_631e2f30a93cd64e) }
var fileDescriptor_631e2f30a93cd64e = []byte{
// 2941 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x49, 0x6f, 0x1c, 0xc7,
0xf5, 0x77, 0xcf, 0xce, 0x37, 0xc3, 0x99, 0x61, 0x91, 0xa2, 0x46, 0x43, 0xd1, 0xa4, 0x5b, 0x96,
0x4c, 0x03, 0xf6, 0xc8, 0xa0, 0xff, 0x7f, 0xc0, 0x80, 0x6d, 0x20, 0x24, 0x47, 0x16, 0xc7, 0x16,
0x17, 0x37, 0xbd, 0xc5, 0x70, 0xd0, 0x68, 0xb2, 0x8b, 0x64, 0x47, 0x33, 0xdd, 0x93, 0xee, 0x1e,
0x85, 0xf2, 0x39, 0x40, 0x10, 0x38, 0x87, 0x1c, 0x7d, 0xf2, 0x25, 0xc8, 0x29, 0xdf, 0x21, 0xd7,
0x04, 0x49, 0x90, 0x43, 0x8e, 0x09, 0xe0, 0x04, 0xf9, 0x00, 0xb9, 0xf8, 0x92, 0x4b, 0x80, 0xa0,
0xb6, 0xee, 0xea, 0x6d, 0x16, 0x69, 0x24, 0xdf, 0xba, 0xea, 0xbd, 0x7a, 0x55, 0xf5, 0x7b, 0x4b,
0xbd, 0x7a, 0x5d, 0x50, 0x1f, 0x60, 0xdf, 0xb0, 0xec, 0x73, 0xa7, 0x33, 0x74, 0x1d, 0xdf, 0x41,
0x15, 0xd1, 0x6e, 0x37, 0xb1, 0x7d, 0xe6, 0x3e, 0x1e, 0xfa, 0x96, 0x63, 0x33, 0x5a, 0x1b, 0x2e,
0x9c, 0x0b, 0xce, 0xd7, 0xde, 0xb8, 0x70, 0x9c, 0x8b, 0x3e, 0xbe, 0x4b, 0x5b, 0xa7, 0xa3, 0xf3,
0xbb, 0xbe, 0x35, 0xc0, 0x9e, 0x6f, 0x0c, 0x86, 0x82, 0xd9, 0x76, 0x4c, 0xcc, 0xbf, 0x1b, 0x43,
0xc7, 0xb2, 0x7d, 0xec, 0x9a, 0xa7, 0xbc, 0xa3, 0xe6, 0xb8, 0x26, 0x76, 0x3d, 0xd6, 0x52, 0x7f,
0x9b, 0x87, 0xd2, 0xee, 0xe8, 0xec, 0x21, 0xf6, 0x11, 0x82, 0x82, 0x6d, 0x0c, 0x70, 0x4b, 0xd9,
0x54, 0xb6, 0x6a, 0x1a, 0xfd, 0x46, 0x6f, 0x41, 0x75, 0x68, 0xf8, 0x97, 0xfa, 0x99, 0x35, 0xbc,
0xc4, 0x6e, 0x2b, 0xb7, 0xa9, 0x6c, 0xd5, 0xb7, 0xaf, 0x77, 0xa4, 0xe5, 0xed, 0x51, 0xca, 0xc9,
0xc8, 0xf2, 0xb1, 0x06, 0x84, 0x97, 0x75, 0xa0, 0x3d, 0x80, 0x33, 0x17, 0x1b, 0x3e, 0x36, 0x75,
0xc3, 0x6f, 0xe5, 0x37, 0x95, 0xad, 0xea, 0x76, 0xbb, 0xc3, 0x56, 0xde, 0x11, 0x2b, 0xef, 0x7c,
0x24, 0x56, 0xbe, 0x5b, 0xf9, 0xc3, 0xb7, 0x1b, 0x2f, 0xfc, 0xea, 0x1f, 0x1b, 0x8a, 0xb6, 0xc0,
0xc7, 0xed, 0xf8, 0xe8, 0x0d, 0x58, 0x31, 0xf1, 0xb9, 0x31, 0xea, 0xfb, 0xba, 0x87, 0x2f, 0x06,
0xd8, 0xf6, 0x75, 0xcf, 0xfa, 0x12, 0xb7, 0x0a, 0x9b, 0xca, 0x56, 0x5e, 0x43, 0x9c, 0x76, 0xc2,
0x48, 0x27, 0xd6, 0x97, 0x18, 0x7d, 0x0a, 0x37, 0xc4, 0x08, 0x17, 0x9b, 0x23, 0xdb, 0x34, 0xec,
0xb3, 0xc7, 0xba, 0x77, 0x76, 0x89, 0x07, 0xb8, 0x55, 0xa4, 0xab, 0x58, 0xeb, 0x84, 0x90, 0x68,
0x01, 0xcf, 0x09, 0x65, 0xd1, 0xae, 0xf3, 0xd1, 0x71, 0x02, 0x32, 0x61, 0x5d, 0x08, 0x0e, 0x77,
0xaf, 0x0f, 0x0d, 0xd7, 0x18, 0x60, 0x1f, 0xbb, 0x5e, 0xab, 0x44, 0x85, 0x6f, 0xca, 0xd8, 0xdc,
0x0b, 0x3e, 0x8f, 0x03, 0x3e, 0x6d, 0x8d, 0x8b, 0x49, 0x23, 0xa2, 0x75, 0x80, 0xa1, 0xe1, 0xfa,
0x36, 0x76, 0x75, 0xcb, 0x6c, 0x95, 0xa9, 0x26, 0x16, 0x78, 0x4f, 0xcf, 0x54, 0x2d, 0xa8, 0x33,
0x65, 0x3d, 0xb0, 0x3c, 0xbf, 0xe7, 0xe3, 0x41, 0xaa, 0xd2, 0xa2, 0xd0, 0xe7, 0x9e, 0x08, 0x7a,
0xf5, 0xbb, 0x1c, 0x2c, 0xb3, 0xb9, 0xf6, 0x68, 0x9f, 0x86, 0x7f, 0x32, 0xc2, 0xde, 0xbc, 0xad,
0x24, 0x4b, 0xc1, 0xf9, 0x27, 0x53, 0x70, 0xe1, 0x59, 0x2a, 0xb8, 0x38, 0x7f, 0x05, 0x97, 0xe2,
0x0a, 0xfe, 0x01, 0xac, 0x44, 0x41, 0xf7, 0x86, 0x8e, 0xed, 0x61, 0xb4, 0x05, 0xa5, 0x53, 0xda,
0x4f, 0x71, 0xaf, 0x6e, 0x37, 0x3b, 0x41, 0xec, 0x60, 0xfc, 0x1a, 0xa7, 0xab, 0x77, 0xa0, 0xc9,
0x7a, 0xee, 0x63, 0x7f, 0x8c, 0xce, 0xd4, 0x77, 0x61, 0x49, 0xe2, 0x9b, 0x79, 0x9a, 0x57, 0x85,
0x75, 0x74, 0x71, 0x1f, 0x8f, 0xb5, 0x0e, 0x75, 0x55, 0xec, 0x49, 0xb0, 0xb2, 0xc9, 0x54, 0x5d,
0xac, 0x80, 0x18, 0xb3, 0x10, 0xb0, 0x0a, 0xa5, 0xb3, 0x91, 0xeb, 0x39, 0x2e, 0x17, 0xc1, 0x5b,
0x68, 0x05, 0x8a, 0x7d, 0x6b, 0x60, 0x31, 0x73, 0x2e, 0x6a, 0xac, 0x81, 0x6e, 0xc2, 0x82, 0x69,
0xb9, 0xf8, 0x8c, 0x80, 0x4c, 0x6d, 0xa6, 0xa8, 0x85, 0x1d, 0xea, 0x67, 0x80, 0xe4, 0x09, 0xf8,
0x1e, 0x3b, 0x50, 0xb4, 0x7c, 0x3c, 0xf0, 0x5a, 0xca, 0x66, 0x7e, 0xab, 0xba, 0xdd, 0x8a, 0x6f,
0x51, 0xb8, 0x96, 0xc6, 0xd8, 0xc8, 0x96, 0x06, 0x8e, 0x8b, 0xe9, 0xc4, 0x15, 0x8d, 0x7e, 0xab,
0x9f, 0xc1, 0x1a, 0x63, 0x3e, 0xc1, 0xfe, 0x8e, 0xef, 0xbb, 0xd6, 0xe9, 0x88, 0xcc, 0x38, 0xce,
0x47, 0x6e, 0x43, 0xdd, 0x08, 0x39, 0x89, 0xf2, 0x73, 0x94, 0xba, 0x28, 0xf5, 0xf6, 0x4c, 0xf5,
0x45, 0xb8, 0x99, 0x2e, 0x99, 0x83, 0xf6, 0x33, 0x05, 0x96, 0x77, 0x4c, 0xd3, 0xc5, 0x9e, 0x87,
0xcd, 0x23, 0x12, 0xc9, 0x1f, 0x50, 0x24, 0xb6, 0x04, 0x3e, 0x4c, 0x71, 0xa8, 0xc3, 0xa3, 0x7c,
0xc8, 0x22, 0x30, 0xdb, 0x83, 0x15, 0xcf, 0x77, 0x5c, 0xe3, 0x02, 0xeb, 0xe4, 0x98, 0xd0, 0x0d,
0x26, 0x8d, 0xc7, 0x89, 0xa5, 0x0e, 0x3d, 0x3b, 0x0e, 0x1d, 0x13, 0xf3, 0x69, 0x34, 0xc4, 0xd9,
0xa5, 0x3e, 0xf5, 0x9b, 0x1c, 0xac, 0x72, 0xaf, 0xfc, 0xd4, 0xb5, 0x02, 0xfd, 0x1f, 0xf5, 0x4d,
0xa2, 0x41, 0xc9, 0x86, 0x6a, 0xc2, 0x62, 0x08, 0x28, 0xc4, 0xf1, 0xf9, 0xb6, 0xe9, 0x37, 0x6a,
0x41, 0x99, 0xbb, 0x3d, 0xf7, 0x78, 0xd1, 0x44, 0x6f, 0x03, 0x84, 0xee, 0x3d, 0x8d, 0x5f, 0x4b,
0xec, 0xe8, 0x6d, 0x68, 0x0f, 0x8c, 0x2b, 0xe1, 0xc6, 0xd8, 0x8c, 0xc6, 0x96, 0x22, 0x9d, 0xe9,
0xfa, 0xc0, 0xb8, 0xba, 0x27, 0x18, 0xe4, 0x00, 0xd3, 0x05, 0xc0, 0x57, 0x43, 0xcb, 0x35, 0xa8,
0x51, 0x95, 0x66, 0x88, 0x9e, 0xd2, 0x38, 0xf5, 0xaf, 0x0a, 0x5c, 0x8f, 0x02, 0xc4, 0x14, 0x48,
0x10, 0xda, 0x87, 0xa6, 0x21, 0x54, 0xa8, 0x53, 0xa5, 0x08, 0x63, 0x5c, 0x0f, 0x8d, 0x31, 0x45,
0xc9, 0x5a, 0x23, 0x18, 0x46, 0xdb, 0x1e, 0x7a, 0x13, 0x16, 0x5d, 0xc7, 0xf1, 0xf5, 0xa1, 0x85,
0xcf, 0x70, 0x60, 0x53, 0xbb, 0x0d, 0xb2, 0xa4, 0xbf, 0x7d, 0xbb, 0x51, 0x3e, 0x26, 0xfd, 0xbd,
0xae, 0x56, 0x25, 0x5c, 0xac, 0x61, 0xd2, 0x68, 0xed, 0x5a, 0x8f, 0x0c, 0x1f, 0xeb, 0x0f, 0xf1,
0x63, 0x0a, 0x7c, 0x6d, 0xf7, 0x3a, 0x1f, 0xd2, 0xa0, 0x5c, 0xc7, 0x8c, 0xfe, 0x01, 0x7e, 0xac,
0xc1, 0x30, 0xf8, 0x56, 0xff, 0x18, 0x6e, 0x6a, 0xcf, 0x19, 0x90, 0x15, 0xcd, 0x5b, 0xed, 0xaf,
0x41, 0x99, 0xeb, 0x98, 0xeb, 0x1c, 0x49, 0x3a, 0x3f, 0x66, 0x5f, 0x9a, 0x60, 0x41, 0x6f, 0x43,
0xc3, 0x71, 0xad, 0x0b, 0xcb, 0x36, 0xfa, 0x02, 0xc7, 0x22, 0xc5, 0x31, 0xcd, 0xfc, 0xeb, 0x82,
0x95, 0x61, 0xa7, 0xee, 0x43, 0x2b, 0xb6, 0x97, 0x50, 0x43, 0xd2, 0x32, 0x94, 0x89, 0xcb, 0x50,
0x0d, 0xb8, 0xc1, 0x25, 0x75, 0x9d, 0x9f, 0xda, 0x7d, 0xc7, 0x30, 0xe7, 0x8d, 0x8b, 0xfa, 0x17,
0x05, 0xda, 0x89, 0x39, 0x9e, 0x85, 0x45, 0x49, 0x3b, 0xcf, 0x4d, 0x56, 0xc0, 0x93, 0x9b, 0xd2,
0x8f, 0xe0, 0x1a, 0xdf, 0x4f, 0xcf, 0x3e, 0x77, 0xe6, 0x8e, 0xd7, 0x7b, 0x41, 0x78, 0x62, 0xe2,
0x53, 0x55, 0x3b, 0x79, 0x83, 0xaa, 0x1e, 0x18, 0x7c, 0xe4, 0x9c, 0x9b, 0xdf, 0x42, 0xbf, 0x51,
0x02, 0x33, 0x8c, 0x1e, 0x8f, 0xf3, 0x55, 0x6b, 0x4c, 0x51, 0xb9, 0xe9, 0x15, 0xf5, 0x77, 0x05,
0x56, 0xc9, 0x91, 0xc8, 0x17, 0xe9, 0x4d, 0x81, 0xc0, 0x2a, 0x94, 0x86, 0x2e, 0x3e, 0xb7, 0xae,
0x38, 0x06, 0xbc, 0x85, 0x36, 0xa0, 0xea, 0xf9, 0x86, 0xeb, 0xeb, 0xc6, 0x39, 0x81, 0x9f, 0x5a,
0x8b, 0x06, 0xb4, 0x6b, 0x87, 0xf4, 0x90, 0xe4, 0x08, 0xdb, 0xa6, 0x7e, 0x8a, 0xcf, 0xc9, 0x81,
0x5b, 0x60, 0xc9, 0x11, 0xb6, 0xcd, 0x5d, 0xda, 0x41, 0x4e, 0x7b, 0x17, 0x93, 0x7c, 0xc0, 0x7a,
0xc4, 0xa2, 0x78, 0x45, 0x0b, 0x3b, 0xc2, 0x0c, 0xa1, 0x24, 0x67, 0x08, 0xeb, 0x00, 0x04, 0x29,
0xfd, 0xbc, 0x6f, 0x5c, 0x78, 0x34, 0xa1, 0x2e, 0x6b, 0x0b, 0xa4, 0xe7, 0x3d, 0xd2, 0x41, 0xc3,
0x74, 0x74, 0x77, 0x21, 0xfa, 0xef, 0x44, 0x13, 0x85, 0x3b, 0x21, 0xe4, 0x19, 0x23, 0x3a, 0x13,
0xd2, 0x86, 0x36, 0x86, 0x82, 0x48, 0xda, 0xa9, 0x89, 0x28, 0x92, 0x89, 0xcc, 0xe6, 0x78, 0x6b,
0xb0, 0x60, 0x79, 0x3a, 0x47, 0x39, 0x4f, 0xa7, 0xa8, 0x58, 0xde, 0x31, 0x6d, 0xab, 0x9f, 0x13,
0x93, 0x4a, 0xc9, 0x4b, 0xc8, 0xa6, 0x36, 0xa0, 0xca, 0xb4, 0xa4, 0x4b, 0x19, 0x0a, 0xb0, 0xae,
0x43, 0x92, 0xa7, 0x44, 0x13, 0xd4, 0x5c, 0x3c, 0x41, 0x5d, 0x23, 0xb1, 0x2e, 0x2d, 0x33, 0x39,
0xea, 0x9b, 0xea, 0x0a, 0xa0, 0x63, 0xd7, 0xf9, 0x31, 0x3e, 0x93, 0x9d, 0x5a, 0x7d, 0x0b, 0x96,
0x23, 0xbd, 0x3c, 0x0f, 0x7b, 0x09, 0x6a, 0x43, 0xd6, 0xad, 0x7b, 0x46, 0x5f, 0xd8, 0x50, 0x95,
0xf7, 0x9d, 0x18, 0x7d, 0x5f, 0xfd, 0x45, 0x19, 0x4a, 0x47, 0xa7, 0xa4, 0x99, 0x69, 0x6b, 0xb7,
0xa1, 0x1e, 0x1e, 0xf3, 0x92, 0xdf, 0x2d, 0x06, 0xbd, 0xc7, 0xdc, 0x01, 0x1f, 0x61, 0xd7, 0x0b,
0xd3, 0x44, 0xd1, 0x44, 0x77, 0xa1, 0xe4, 0xf9, 0x86, 0x3f, 0xf2, 0xa8, 0xbd, 0x91, 0x6b, 0x4b,
0xa0, 0x66, 0x36, 0x75, 0xe7, 0x84, 0x92, 0x35, 0xce, 0x86, 0x5e, 0x87, 0x05, 0xcf, 0x77, 0xb1,
0x31, 0x20, 0xf8, 0x14, 0xa9, 0x23, 0x35, 0xb9, 0x23, 0x55, 0x4e, 0x28, 0xa1, 0xd7, 0xd5, 0x2a,
0x8c, 0xa5, 0x67, 0xc6, 0x2e, 0x63, 0xa5, 0x27, 0xbb, 0x07, 0xef, 0x90, 0x39, 0xc9, 0xec, 0x44,
0x46, 0x79, 0x06, 0x19, 0x15, 0x36, 0x6c, 0x87, 0xa4, 0x7d, 0x2c, 0x3d, 0xc1, 0x54, 0x46, 0x65,
0x96, 0x75, 0xf0, 0x71, 0x3b, 0x3e, 0xba, 0x0f, 0xad, 0x10, 0x6d, 0x82, 0x93, 0x69, 0xf8, 0x86,
0x6e, 0x3b, 0xf6, 0x19, 0x6e, 0x2d, 0x50, 0x28, 0x16, 0x39, 0x14, 0xc5, 0x43, 0xd2, 0xa9, 0xad,
0x06, 0xec, 0x07, 0x9c, 0x9b, 0xf6, 0xa3, 0xd7, 0x01, 0x25, 0x05, 0xb5, 0x80, 0xaa, 0x6e, 0x29,
0x31, 0x06, 0xbd, 0x06, 0xe8, 0xdc, 0xba, 0x8a, 0x27, 0x72, 0x55, 0x1a, 0x4a, 0x9b, 0x94, 0x22,
0x67, 0x70, 0xfb, 0xb0, 0x94, 0xbc, 0x1a, 0xd6, 0x26, 0xa7, 0x90, 0x4d, 0x37, 0x7e, 0x27, 0xfc,
0x18, 0xae, 0xa5, 0xdf, 0x05, 0x17, 0xa7, 0xbc, 0x0b, 0xae, 0xe0, 0x8c, 0x4b, 0xa0, 0xef, 0xf8,
0x46, 0x9f, 0x6d, 0xa3, 0x4e, 0xb7, 0xb1, 0x40, 0x7b, 0xe8, 0xfa, 0x37, 0xa0, 0x6a, 0xd9, 0x7d,
0xcb, 0xc6, 0x8c, 0xde, 0xa0, 0x74, 0x60, 0x5d, 0x82, 0xc1, 0xc5, 0x03, 0xc7, 0xe7, 0x0c, 0x4d,
0xc6, 0xc0, 0xba, 0x08, 0x83, 0xfa, 0x21, 0x94, 0x98, 0xd5, 0xa2, 0x2a, 0x94, 0x7b, 0x87, 0x9f,
0xec, 0x3c, 0xe8, 0x75, 0x9b, 0x2f, 0xa0, 0x45, 0x58, 0xf8, 0xf8, 0xf8, 0xc1, 0xd1, 0x4e, 0xb7,
0x77, 0x78, 0xbf, 0xa9, 0xa0, 0x3a, 0xc0, 0xde, 0xd1, 0xc1, 0x41, 0xef, 0xa3, 0x8f, 0x48, 0x3b,
0x47, 0xc8, 0xbc, 0x7d, 0xaf, 0xdb, 0xcc, 0xa3, 0x1a, 0x54, 0xba, 0xf7, 0x1e, 0xdc, 0xa3, 0xc4,
0x82, 0xfa, 0xa7, 0x3c, 0x20, 0xe6, 0x10, 0xbb, 0xf8, 0xc2, 0xb2, 0xa5, 0xfb, 0xda, 0xb3, 0xf1,
0xcb, 0xa8, 0xbd, 0x16, 0xe6, 0x6f, 0xaf, 0xc5, 0xa7, 0xb7, 0xd7, 0x52, 0x96, 0xbd, 0xa6, 0x5a,
0x60, 0x79, 0xae, 0x16, 0x58, 0x79, 0x1a, 0x0b, 0x54, 0x7f, 0x97, 0x83, 0xe5, 0x88, 0x36, 0x79,
0x50, 0x7e, 0x66, 0xea, 0x8c, 0x44, 0xcd, 0xc2, 0xc4, 0xa8, 0x99, 0x0a, 0x60, 0x71, 0xae, 0x00,
0x96, 0x9e, 0x0a, 0xc0, 0xae, 0xc0, 0x2f, 0x72, 0x11, 0x8a, 0x6e, 0x53, 0x99, 0xb4, 0x4d, 0x75,
0x15, 0x56, 0xa2, 0x52, 0xf8, 0x2d, 0xff, 0x5f, 0x0a, 0x2c, 0x31, 0x42, 0xac, 0x36, 0x92, 0xaa,
0x9c, 0x57, 0xa1, 0x29, 0x29, 0x47, 0xce, 0xbc, 0x1a, 0xa1, 0x7a, 0x58, 0x0a, 0x16, 0x61, 0xe5,
0x85, 0x96, 0x7c, 0x8c, 0x75, 0x2f, 0x56, 0x71, 0x29, 0xc8, 0xf9, 0x54, 0x0f, 0x1a, 0x0e, 0x5d,
0x98, 0x6e, 0xd9, 0x67, 0xfd, 0x91, 0x89, 0xc3, 0xba, 0x58, 0xec, 0xdc, 0x14, 0x75, 0x94, 0x1e,
0xe7, 0xd3, 0xea, 0x6c, 0xa0, 0x68, 0xab, 0x9f, 0x89, 0x80, 0x32, 0x65, 0x79, 0x26, 0x2a, 0x76,
0x5c, 0x79, 0xe6, 0xf7, 0x79, 0xa8, 0x47, 0xb9, 0x53, 0x0c, 0x58, 0x99, 0x60, 0xc0, 0xb9, 0xac,
0x3c, 0x21, 0x3f, 0x5d, 0x9e, 0x10, 0x3d, 0xf8, 0x0b, 0x73, 0x38, 0xf8, 0x8b, 0x73, 0x38, 0xf8,
0x4b, 0xf3, 0x0f, 0xa4, 0xe5, 0xa7, 0x0f, 0xa4, 0x95, 0x8c, 0x40, 0xaa, 0xfe, 0x1f, 0xac, 0xa6,
0x5b, 0x13, 0x6a, 0x43, 0x25, 0x18, 0xae, 0xb0, 0x04, 0x58, 0xb4, 0x55, 0x0f, 0x5a, 0x52, 0x70,
0x8b, 0x56, 0x28, 0x9f, 0x55, 0x84, 0x53, 0xdf, 0x87, 0x1b, 0x29, 0x93, 0x72, 0xab, 0x9e, 0x31,
0x2e, 0x04, 0xb2, 0xde, 0xb3, 0x6c, 0xcb, 0xbb, 0x8c, 0xee, 0x60, 0x46, 0x59, 0x37, 0xa1, 0x9d,
0x26, 0x8b, 0x47, 0x9a, 0x7f, 0xe7, 0xa0, 0x7a, 0x62, 0xf8, 0x62, 0xdc, 0xb3, 0x3b, 0x00, 0x9e,
0xaa, 0xa0, 0xd7, 0x83, 0x45, 0xea, 0x13, 0x24, 0x84, 0x9b, 0x86, 0x8f, 0x67, 0x72, 0x85, 0x9a,
0x18, 0xda, 0x35, 0x7c, 0x8c, 0x0e, 0xa0, 0x11, 0x96, 0xe9, 0x98, 0xb0, 0x59, 0x7c, 0xa2, 0x1e,
0x0e, 0xa6, 0xe2, 0xee, 0xc2, 0xb2, 0x67, 0xf8, 0xb8, 0xdf, 0xb7, 0x68, 0x36, 0x76, 0x61, 0x1b,
0xfe, 0xc8, 0xe5, 0x3e, 0xa1, 0xa1, 0x80, 0x74, 0x22, 0x28, 0xea, 0x3f, 0x73, 0x50, 0xe6, 0xc9,
0xea, 0x8c, 0x9a, 0x44, 0xff, 0x0f, 0x95, 0xa1, 0xe3, 0x59, 0xbe, 0x88, 0x4e, 0xd5, 0xed, 0x1b,
0x61, 0x10, 0xe2, 0x32, 0x8f, 0x39, 0x83, 0x16, 0xb0, 0xa2, 0x77, 0x61, 0x39, 0x54, 0xdd, 0x43,
0xfc, 0x98, 0xbb, 0x6d, 0x3e, 0xcd, 0x6d, 0x43, 0x17, 0xfc, 0x00, 0x3f, 0x66, 0x1e, 0x7b, 0x0b,
0x16, 0x23, 0xc3, 0xf9, 0xbd, 0xbc, 0x26, 0x73, 0xa2, 0x0e, 0x2c, 0x93, 0x54, 0x54, 0x2a, 0xb9,
0x52, 0xc7, 0x64, 0xa5, 0xd6, 0x25, 0x42, 0x0a, 0x6a, 0xad, 0x5d, 0x92, 0x20, 0x6d, 0x07, 0xa7,
0x32, 0x36, 0x75, 0x9e, 0xec, 0x4a, 0x29, 0x55, 0xb8, 0xe0, 0x1e, 0xa5, 0xd1, 0x31, 0xaf, 0x40,
0x89, 0xd6, 0x39, 0xc9, 0x35, 0x9e, 0x1c, 0x0d, 0x8d, 0x70, 0xf3, 0xb4, 0x80, 0xa1, 0x71, 0xb2,
0xba, 0x0f, 0x45, 0xda, 0x41, 0x6e, 0xc9, 0xac, 0x32, 0x6a, 0x8f, 0x06, 0x14, 0xdf, 0xa2, 0x56,
0xa1, 0x1d, 0x87, 0xa3, 0x01, 0x52, 0xa1, 0x60, 0x3b, 0x26, 0xe6, 0xb5, 0x90, 0x3a, 0xc7, 0xa1,
0x74, 0xe8, 0x98, 0xb8, 0xd7, 0xd5, 0x28, 0x4d, 0xdd, 0x87, 0x46, 0x0c, 0x57, 0x92, 0x7b, 0x93,
0xdb, 0x30, 0x11, 0x79, 0xca, 0xcb, 0x83, 0x45, 0x8d, 0x5e, 0x99, 0x0f, 0x69, 0x0f, 0x39, 0x37,
0x2d, 0xdb, 0xc4, 0x57, 0xe2, 0x4f, 0x05, 0x6d, 0xa8, 0xbf, 0x56, 0x60, 0x99, 0x8b, 0x8a, 0xe4,
0xcf, 0xcf, 0xc7, 0x04, 0xee, 0x40, 0x63, 0x60, 0x5c, 0xe9, 0xb4, 0x28, 0xca, 0x0a, 0x49, 0xbc,
0x0e, 0xb5, 0x38, 0x30, 0xae, 0xc2, 0xba, 0x91, 0xfa, 0x67, 0x05, 0x56, 0xa2, 0xab, 0xe4, 0xf1,
0xeb, 0x0d, 0x00, 0x71, 0xf5, 0x0a, 0xd6, 0xb9, 0xc4, 0xd7, 0xb9, 0x20, 0x2a, 0x6d, 0x5d, 0x6d,
0x81, 0x33, 0xf5, 0xd2, 0x6b, 0x57, 0xb9, 0x79, 0xd4, 0xae, 0x66, 0x28, 0x32, 0xfe, 0x26, 0x17,
0x6c, 0x27, 0x9a, 0xa6, 0xcd, 0xbe, 0x9d, 0x0c, 0x27, 0xca, 0x3d, 0xa9, 0x13, 0xe5, 0xa7, 0x77,
0xa2, 0x42, 0x96, 0x13, 0xdd, 0x87, 0xc5, 0xd1, 0xb0, 0xef, 0x18, 0xa6, 0xee, 0x62, 0x6f, 0xd4,
0xf7, 0x79, 0xf1, 0x5b, 0x4d, 0x5a, 0x04, 0xc1, 0xe8, 0xe3, 0x21, 0xaf, 0x1a, 0x8f, 0xfa, 0xbe,
0x56, 0x1b, 0x49, 0x2d, 0xf5, 0xe7, 0x61, 0x11, 0x32, 0xc1, 0x3a, 0xde, 0x89, 0x5e, 0x81, 0x32,
0xfd, 0x89, 0x14, 0xfc, 0x7a, 0x88, 0xfb, 0x51, 0x89, 0x90, 0x7b, 0x26, 0xba, 0x0d, 0x85, 0x4b,
0xc3, 0xbb, 0xe4, 0x0f, 0x01, 0x96, 0x44, 0x7d, 0x9e, 0x4e, 0xb7, 0x6f, 0x78, 0x97, 0x1a, 0x25,
0xab, 0xff, 0xcd, 0x41, 0x8d, 0x1c, 0x47, 0x42, 0x05, 0x68, 0x3b, 0xee, 0x1f, 0xd5, 0xed, 0x6b,
0xd2, 0xfe, 0xc2, 0x93, 0x4b, 0x72, 0x92, 0x98, 0x8b, 0xe6, 0xb2, 0x5d, 0x34, 0x2f, 0xb9, 0x68,
0xf2, 0x67, 0x4a, 0x71, 0x8a, 0x9f, 0x29, 0x1f, 0xc2, 0xb5, 0xe0, 0x17, 0x84, 0xe4, 0x5e, 0xe4,
0x7a, 0x31, 0x85, 0xad, 0x2f, 0x8b, 0xb1, 0x61, 0x9f, 0x97, 0x3c, 0xec, 0xca, 0x4f, 0x7c, 0xd8,
0x65, 0x9c, 0x4e, 0x95, 0xcc, 0xd3, 0xe9, 0x7a, 0x50, 0x96, 0x8f, 0xdd, 0x48, 0xbe, 0xce, 0x05,
0x26, 0x72, 0x60, 0x3c, 0xc4, 0x2c, 0x2c, 0x3f, 0xdf, 0x20, 0xf6, 0x3c, 0xce, 0xb1, 0xcc, 0x73,
0xa9, 0x98, 0x79, 0x2e, 0xb1, 0x92, 0x68, 0x02, 0x19, 0x8e, 0x9b, 0x13, 0x10, 0x53, 0x72, 0xd1,
0xb5, 0x04, 0x6e, 0x4f, 0x8d, 0x92, 0xfa, 0x75, 0xf8, 0xa7, 0x28, 0x2d, 0x11, 0xfd, 0x1e, 0x03,
0xb9, 0xfa, 0xcb, 0x70, 0x69, 0x69, 0x79, 0xed, 0xec, 0x4b, 0x7b, 0x07, 0xca, 0x2c, 0xf2, 0x89,
0x15, 0x65, 0x84, 0xbe, 0x00, 0x03, 0x12, 0xfa, 0xc4, 0x90, 0x44, 0xd4, 0x93, 0xb9, 0x9e, 0x6f,
0xd4, 0x5b, 0x87, 0xb5, 0x54, 0x5c, 0xb8, 0x0d, 0x7d, 0xa5, 0x00, 0xe2, 0x74, 0xb9, 0x1c, 0x30,
0xd6, 0x7a, 0x76, 0xa1, 0xc1, 0xae, 0xf7, 0xfa, 0xf4, 0x46, 0x54, 0x67, 0x23, 0x82, 0x54, 0x27,
0xa8, 0x00, 0xe4, 0xa5, 0x0a, 0x80, 0xfa, 0x79, 0x90, 0xc8, 0x44, 0xee, 0xed, 0x77, 0xa3, 0xf7,
0xf6, 0xe4, 0x34, 0xd3, 0x5c, 0xdc, 0xc3, 0x7c, 0x2b, 0xb8, 0xb8, 0xcb, 0x6e, 0xa0, 0x4c, 0xef,
0x06, 0x5f, 0x29, 0xc1, 0x1f, 0xc0, 0xd8, 0x4f, 0xd9, 0x59, 0xa3, 0xd5, 0x1c, 0x90, 0x54, 0xff,
0x13, 0xfe, 0x38, 0x8f, 0xff, 0xbe, 0xfd, 0x5e, 0x53, 0xab, 0xcc, 0x70, 0x97, 0xcf, 0x4e, 0xc3,
0x5f, 0x87, 0x82, 0x8d, 0xaf, 0x44, 0x45, 0x63, 0x0c, 0x08, 0x94, 0x6d, 0xfb, 0xbb, 0x26, 0x54,
0x0e, 0x38, 0x0b, 0x3a, 0x80, 0x1a, 0x7b, 0xd8, 0xc4, 0x9f, 0x1c, 0xae, 0xc7, 0x1f, 0xdf, 0x44,
0xde, 0x9a, 0xb5, 0x5f, 0xcc, 0x22, 0x73, 0xe8, 0xba, 0xb0, 0x70, 0x1f, 0xfb, 0x5c, 0x56, 0x3b,
0xce, 0x1c, 0x3e, 0x80, 0x6a, 0xaf, 0xa5, 0xd2, 0xb8, 0x94, 0x03, 0xa8, 0x31, 0x87, 0xcb, 0x5a,
0x54, 0x24, 0x4c, 0x25, 0x17, 0x15, 0x8b, 0xb0, 0xfb, 0x50, 0x25, 0xc6, 0xcb, 0x68, 0x1e, 0x5a,
0x4b, 0x7b, 0x5f, 0x24, 0x64, 0xdd, 0x4c, 0x27, 0x72, 0x49, 0x98, 0x64, 0xaf, 0x5c, 0x90, 0xf4,
0xc7, 0x0d, 0xdd, 0x8e, 0x8f, 0x4a, 0xfd, 0xdb, 0xd7, 0xbe, 0x33, 0x89, 0x8d, 0x4f, 0xf3, 0x3e,
0x54, 0xe9, 0x49, 0xc1, 0xff, 0xb4, 0xdd, 0x8c, 0x17, 0xb6, 0xe4, 0xfb, 0x4a, 0x7b, 0x3d, 0x83,
0x1a, 0x62, 0xc9, 0x12, 0x07, 0x2e, 0x2c, 0xc1, 0x1e, 0xc9, 0xc3, 0x65, 0x2c, 0xd3, 0xea, 0xa0,
0x02, 0x4b, 0x46, 0x8b, 0x60, 0x99, 0xa8, 0x8e, 0xb6, 0x6f, 0xa6, 0x13, 0xb9, 0xa4, 0x2f, 0x60,
0x49, 0x3a, 0x0e, 0xf9, 0xea, 0xd4, 0xd4, 0xcd, 0x44, 0xd5, 0x7d, 0x6b, 0x2c, 0x0f, 0x97, 0xae,
0x03, 0x92, 0x23, 0x37, 0x17, 0x9f, 0x18, 0x9a, 0x72, 0xea, 0xb5, 0x5f, 0x1e, 0xcf, 0x14, 0xe2,
0x4a, 0xe7, 0x15, 0x95, 0x83, 0xf5, 0x84, 0xdb, 0x45, 0xb4, 0xf4, 0x62, 0x16, 0x99, 0x8b, 0x3b,
0x86, 0x45, 0x86, 0xb4, 0x90, 0x97, 0x1c, 0x10, 0x55, 0xd4, 0x46, 0x26, 0x3d, 0xc4, 0x37, 0xcc,
0x7e, 0x84, 0xd4, 0xe4, 0x71, 0x9c, 0xc8, 0x1d, 0x65, 0x7c, 0x33, 0xb3, 0x28, 0x82, 0xaf, 0x04,
0xbb, 0x10, 0x7f, 0x2b, 0x7d, 0x97, 0x99, 0xf8, 0x8e, 0x49, 0x8b, 0x4e, 0x61, 0x59, 0xc6, 0x5d,
0xcc, 0x90, 0x1c, 0x9c, 0xa6, 0xc2, 0xdb, 0x13, 0xb8, 0xf8, 0x1c, 0x1f, 0x40, 0x4d, 0x7e, 0x38,
0x20, 0x3b, 0x5a, 0xf2, 0x74, 0x6f, 0xaf, 0x67, 0x50, 0xb9, 0xb0, 0x4f, 0xa0, 0x21, 0x4e, 0x12,
0xb1, 0xd8, 0xcd, 0xc4, 0x88, 0xd8, 0xc9, 0xd7, 0x7e, 0x69, 0x0c, 0x07, 0x97, 0xfb, 0x29, 0x34,
0x59, 0x90, 0xe5, 0x0c, 0x47, 0x7d, 0x33, 0x45, 0x70, 0xec, 0xcd, 0x5f, 0x8a, 0xe0, 0xc4, 0xa3,
0xb7, 0x1f, 0x42, 0x33, 0x62, 0x72, 0xa4, 0xef, 0xa5, 0xf1, 0x56, 0x47, 0x24, 0xab, 0x13, 0x0c,
0x8f, 0x88, 0x39, 0x81, 0xba, 0xf4, 0xd8, 0x87, 0xbe, 0x72, 0x48, 0x8c, 0x8a, 0xbe, 0x32, 0x6a,
0x6f, 0x66, 0x30, 0x84, 0x42, 0x75, 0x40, 0x31, 0x80, 0x49, 0xef, 0xad, 0x49, 0x18, 0x13, 0xe1,
0x2f, 0x4f, 0x84, 0x99, 0x03, 0x12, 0x31, 0xb6, 0x74, 0x40, 0xe2, 0xcf, 0x8e, 0x52, 0x00, 0x49,
0xbe, 0x1b, 0xfa, 0x04, 0x1a, 0xb2, 0xa5, 0xc5, 0x74, 0x98, 0xfe, 0x9a, 0x47, 0xd6, 0x61, 0xd6,
0x8b, 0x98, 0x2f, 0x60, 0x29, 0x7a, 0x86, 0x90, 0xce, 0xc8, 0x82, 0xd2, 0x5f, 0x9d, 0x44, 0x9d,
0x3c, 0xe3, 0xf5, 0x08, 0x39, 0x87, 0xa4, 0x77, 0x22, 0xb2, 0x7b, 0x24, 0x1f, 0x95, 0xc8, 0xee,
0x91, 0xf2, 0xb8, 0x64, 0xb7, 0xf0, 0x79, 0x6e, 0x78, 0x7a, 0x5a, 0xa2, 0x57, 0xe5, 0x37, 0xff,
0x17, 0x00, 0x00, 0xff, 0xff, 0xed, 0xf9, 0xb7, 0x4b, 0x69, 0x31, 0x00, 0x00,
// 2978 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x3a, 0x4b, 0x6f, 0x23, 0xc7,
0xd1, 0x1e, 0xbe, 0x55, 0xa4, 0x48, 0xaa, 0xa5, 0xd5, 0x72, 0xa9, 0x95, 0x25, 0xcf, 0x7a, 0xd7,
0x32, 0x60, 0x73, 0x0d, 0xf9, 0xfb, 0x00, 0x03, 0xb6, 0x81, 0x48, 0xe2, 0x7a, 0x45, 0x7b, 0xf5,
0xf0, 0xc8, 0xaf, 0x18, 0x0e, 0x06, 0x23, 0x4d, 0x4b, 0x9a, 0x2c, 0x39, 0xc3, 0xcc, 0x0c, 0x37,
0x5a, 0x9f, 0x03, 0x04, 0x81, 0x73, 0xc8, 0xd1, 0x27, 0x5f, 0x82, 0x9c, 0xf2, 0x0b, 0x72, 0xc9,
0x35, 0x41, 0x12, 0xe4, 0x90, 0x63, 0x02, 0x38, 0x41, 0x7e, 0x40, 0x2e, 0xb9, 0xe4, 0x12, 0x20,
0xe8, 0xd7, 0x4c, 0xcf, 0x4b, 0x24, 0x57, 0xd4, 0xfa, 0x36, 0x5d, 0x55, 0x5d, 0x5d, 0x5d, 0xaf,
0xae, 0xae, 0x69, 0xa8, 0x0f, 0xb0, 0x6f, 0x58, 0xf6, 0xa9, 0xd3, 0x19, 0xba, 0x8e, 0xef, 0xa0,
0x8a, 0x18, 0xb7, 0x9b, 0xd8, 0x3e, 0x71, 0x9f, 0x0e, 0x7d, 0xcb, 0xb1, 0x19, 0xae, 0x0d, 0x67,
0xce, 0x19, 0xa7, 0x6b, 0xaf, 0x9d, 0x39, 0xce, 0x59, 0x1f, 0xdf, 0xa7, 0xa3, 0xe3, 0xd1, 0xe9,
0x7d, 0xdf, 0x1a, 0x60, 0xcf, 0x37, 0x06, 0x43, 0x41, 0x6c, 0x3b, 0x26, 0xe6, 0xdf, 0x8d, 0xa1,
0x63, 0xd9, 0x3e, 0x76, 0xcd, 0x63, 0x0e, 0xa8, 0x39, 0xae, 0x89, 0x5d, 0x8f, 0x8d, 0xd4, 0x5f,
0xe7, 0xa1, 0xb4, 0x3d, 0x3a, 0x79, 0x8c, 0x7d, 0x84, 0xa0, 0x60, 0x1b, 0x03, 0xdc, 0x52, 0xd6,
0x95, 0x8d, 0x9a, 0x46, 0xbf, 0xd1, 0x5b, 0x50, 0x1d, 0x1a, 0xfe, 0xb9, 0x7e, 0x62, 0x0d, 0xcf,
0xb1, 0xdb, 0xca, 0xad, 0x2b, 0x1b, 0xf5, 0xcd, 0x9b, 0x1d, 0x49, 0xbc, 0x1d, 0x8a, 0x39, 0x1a,
0x59, 0x3e, 0xd6, 0x80, 0xd0, 0x32, 0x00, 0xda, 0x01, 0x38, 0x71, 0xb1, 0xe1, 0x63, 0x53, 0x37,
0xfc, 0x56, 0x7e, 0x5d, 0xd9, 0xa8, 0x6e, 0xb6, 0x3b, 0x4c, 0xf2, 0x8e, 0x90, 0xbc, 0xf3, 0x91,
0x90, 0x7c, 0xbb, 0xf2, 0xfb, 0x6f, 0xd7, 0x5e, 0xf8, 0xc5, 0xdf, 0xd7, 0x14, 0x6d, 0x8e, 0xcf,
0xdb, 0xf2, 0xd1, 0x1b, 0xb0, 0x64, 0xe2, 0x53, 0x63, 0xd4, 0xf7, 0x75, 0x0f, 0x9f, 0x0d, 0xb0,
0xed, 0xeb, 0x9e, 0xf5, 0x25, 0x6e, 0x15, 0xd6, 0x95, 0x8d, 0xbc, 0x86, 0x38, 0xee, 0x88, 0xa1,
0x8e, 0xac, 0x2f, 0x31, 0xfa, 0x14, 0x6e, 0x89, 0x19, 0x2e, 0x36, 0x47, 0xb6, 0x69, 0xd8, 0x27,
0x4f, 0x75, 0xef, 0xe4, 0x1c, 0x0f, 0x70, 0xab, 0x48, 0xa5, 0x58, 0xe9, 0x84, 0x2a, 0xd1, 0x02,
0x9a, 0x23, 0x4a, 0xa2, 0xdd, 0xe4, 0xb3, 0xe3, 0x08, 0x64, 0xc2, 0xaa, 0x60, 0x1c, 0xee, 0x5e,
0x1f, 0x1a, 0xae, 0x31, 0xc0, 0x3e, 0x76, 0xbd, 0x56, 0x89, 0x32, 0x5f, 0x97, 0x75, 0xf3, 0x20,
0xf8, 0x3c, 0x0c, 0xe8, 0xb4, 0x15, 0xce, 0x26, 0x0d, 0x89, 0x56, 0x01, 0x86, 0x86, 0xeb, 0xdb,
0xd8, 0xd5, 0x2d, 0xb3, 0x55, 0xa6, 0x96, 0x98, 0xe3, 0x90, 0x9e, 0xa9, 0x5a, 0x50, 0x67, 0xc6,
0x7a, 0x64, 0x79, 0x7e, 0xcf, 0xc7, 0x83, 0x54, 0xa3, 0x45, 0x55, 0x9f, 0x7b, 0x26, 0xd5, 0xab,
0xff, 0xce, 0xc1, 0x22, 0x5b, 0x6b, 0x87, 0xc2, 0x34, 0xfc, 0xa3, 0x11, 0xf6, 0x66, 0xed, 0x25,
0x59, 0x06, 0xce, 0x3f, 0x9b, 0x81, 0x0b, 0xd7, 0x69, 0xe0, 0xe2, 0xec, 0x0d, 0x5c, 0x8a, 0x1b,
0xf8, 0x7b, 0xb0, 0x14, 0x55, 0xba, 0x37, 0x74, 0x6c, 0x0f, 0xa3, 0x0d, 0x28, 0x1d, 0x53, 0x38,
0xd5, 0x7b, 0x75, 0xb3, 0xd9, 0x09, 0x72, 0x07, 0xa3, 0xd7, 0x38, 0x5e, 0xbd, 0x07, 0x4d, 0x06,
0x79, 0x88, 0xfd, 0x4b, 0x6c, 0xa6, 0xbe, 0x0b, 0x0b, 0x12, 0xdd, 0xd4, 0xcb, 0xbc, 0x2a, 0xbc,
0xa3, 0x8b, 0xfb, 0xf8, 0x52, 0xef, 0x50, 0x97, 0xc5, 0x9e, 0x04, 0x29, 0x5b, 0x4c, 0xd5, 0x85,
0x04, 0xc4, 0x99, 0x05, 0x83, 0x65, 0x28, 0x9d, 0x8c, 0x5c, 0xcf, 0x71, 0x39, 0x0b, 0x3e, 0x42,
0x4b, 0x50, 0xec, 0x5b, 0x03, 0x8b, 0xb9, 0x73, 0x51, 0x63, 0x03, 0x74, 0x1b, 0xe6, 0x4c, 0xcb,
0xc5, 0x27, 0x44, 0xc9, 0xd4, 0x67, 0x8a, 0x5a, 0x08, 0x50, 0x3f, 0x03, 0x24, 0x2f, 0xc0, 0xf7,
0xd8, 0x81, 0xa2, 0xe5, 0xe3, 0x81, 0xd7, 0x52, 0xd6, 0xf3, 0x1b, 0xd5, 0xcd, 0x56, 0x7c, 0x8b,
0x22, 0xb4, 0x34, 0x46, 0x46, 0xb6, 0x34, 0x70, 0x5c, 0x4c, 0x17, 0xae, 0x68, 0xf4, 0x5b, 0xfd,
0x0c, 0x56, 0x18, 0xf1, 0x11, 0xf6, 0xb7, 0x7c, 0xdf, 0xb5, 0x8e, 0x47, 0x64, 0xc5, 0xcb, 0x62,
0xe4, 0x2e, 0xd4, 0x8d, 0x90, 0x92, 0x18, 0x3f, 0x47, 0xb1, 0xf3, 0x12, 0xb4, 0x67, 0xaa, 0x2f,
0xc2, 0xed, 0x74, 0xce, 0x5c, 0x69, 0x3f, 0x51, 0x60, 0x71, 0xcb, 0x34, 0x5d, 0xec, 0x79, 0xd8,
0x3c, 0x20, 0x99, 0xfc, 0x11, 0xd5, 0xc4, 0x86, 0xd0, 0x0f, 0x33, 0x1c, 0xea, 0xf0, 0x2c, 0x1f,
0x92, 0x08, 0x9d, 0xed, 0xc0, 0x92, 0xe7, 0x3b, 0xae, 0x71, 0x86, 0x75, 0x72, 0x4c, 0xe8, 0x06,
0xe3, 0xc6, 0xf3, 0xc4, 0x42, 0x87, 0x9e, 0x1d, 0xfb, 0x8e, 0x89, 0xf9, 0x32, 0x1a, 0xe2, 0xe4,
0x12, 0x4c, 0xfd, 0x26, 0x07, 0xcb, 0x3c, 0x2a, 0x3f, 0x75, 0xad, 0xc0, 0xfe, 0x07, 0x7d, 0x93,
0x58, 0x50, 0xf2, 0xa1, 0x9a, 0xf0, 0x18, 0xa2, 0x14, 0x12, 0xf8, 0x7c, 0xdb, 0xf4, 0x1b, 0xb5,
0xa0, 0xcc, 0xc3, 0x9e, 0x47, 0xbc, 0x18, 0xa2, 0xb7, 0x01, 0xc2, 0xf0, 0x9e, 0x24, 0xae, 0x25,
0x72, 0xf4, 0x36, 0xb4, 0x07, 0xc6, 0x85, 0x08, 0x63, 0x6c, 0x46, 0x73, 0x4b, 0x91, 0xae, 0x74,
0x73, 0x60, 0x5c, 0x3c, 0x10, 0x04, 0x72, 0x82, 0xe9, 0x02, 0xe0, 0x8b, 0xa1, 0xe5, 0x1a, 0xd4,
0xa9, 0x4a, 0x53, 0x64, 0x4f, 0x69, 0x9e, 0xfa, 0x17, 0x05, 0x6e, 0x46, 0x15, 0xc4, 0x0c, 0x48,
0x34, 0xb4, 0x0b, 0x4d, 0x43, 0x98, 0x50, 0xa7, 0x46, 0x11, 0xce, 0xb8, 0x1a, 0x3a, 0x63, 0x8a,
0x91, 0xb5, 0x46, 0x30, 0x8d, 0x8e, 0x3d, 0xf4, 0x26, 0xcc, 0xbb, 0x8e, 0xe3, 0xeb, 0x43, 0x0b,
0x9f, 0xe0, 0xc0, 0xa7, 0xb6, 0x1b, 0x44, 0xa4, 0xbf, 0x7e, 0xbb, 0x56, 0x3e, 0x24, 0xf0, 0x5e,
0x57, 0xab, 0x12, 0x2a, 0x36, 0x30, 0x69, 0xb6, 0x76, 0xad, 0x27, 0x86, 0x8f, 0xf5, 0xc7, 0xf8,
0x29, 0x55, 0x7c, 0x6d, 0xfb, 0x26, 0x9f, 0xd2, 0xa0, 0x54, 0x87, 0x0c, 0xff, 0x01, 0x7e, 0xaa,
0xc1, 0x30, 0xf8, 0x56, 0xff, 0x10, 0x6e, 0x6a, 0xc7, 0x19, 0x10, 0x89, 0x66, 0x6d, 0xf6, 0xd7,
0xa0, 0xcc, 0x6d, 0xcc, 0x6d, 0x8e, 0x24, 0x9b, 0x1f, 0xb2, 0x2f, 0x4d, 0x90, 0xa0, 0xb7, 0xa1,
0xe1, 0xb8, 0xd6, 0x99, 0x65, 0x1b, 0x7d, 0xa1, 0xc7, 0x22, 0xd5, 0x63, 0x9a, 0xfb, 0xd7, 0x05,
0x29, 0xd3, 0x9d, 0xba, 0x0b, 0xad, 0xd8, 0x5e, 0x42, 0x0b, 0x49, 0x62, 0x28, 0x63, 0xc5, 0x50,
0x0d, 0xb8, 0xc5, 0x39, 0x75, 0x9d, 0x1f, 0xdb, 0x7d, 0xc7, 0x30, 0x67, 0xad, 0x17, 0xf5, 0xcf,
0x0a, 0xb4, 0x13, 0x6b, 0x5c, 0x87, 0x47, 0x49, 0x3b, 0xcf, 0x8d, 0x37, 0xc0, 0xb3, 0xbb, 0xd2,
0x0f, 0xe0, 0x06, 0xdf, 0x4f, 0xcf, 0x3e, 0x75, 0x66, 0xae, 0xaf, 0xf7, 0x82, 0xf4, 0xc4, 0xd8,
0xa7, 0x9a, 0x76, 0xfc, 0x06, 0x55, 0x3d, 0x70, 0xf8, 0xc8, 0x39, 0x37, 0x3b, 0x41, 0xbf, 0x51,
0x02, 0x37, 0x8c, 0x1e, 0x8f, 0xb3, 0x35, 0x6b, 0xcc, 0x50, 0xb9, 0xc9, 0x0d, 0xf5, 0x37, 0x05,
0x96, 0xc9, 0x91, 0xc8, 0x85, 0xf4, 0x26, 0xd0, 0xc0, 0x32, 0x94, 0x86, 0x2e, 0x3e, 0xb5, 0x2e,
0xb8, 0x0e, 0xf8, 0x08, 0xad, 0x41, 0xd5, 0xf3, 0x0d, 0xd7, 0xd7, 0x8d, 0x53, 0xa2, 0x7e, 0xea,
0x2d, 0x1a, 0x50, 0xd0, 0x16, 0x81, 0x90, 0xe2, 0x08, 0xdb, 0xa6, 0x7e, 0x8c, 0x4f, 0xc9, 0x81,
0x5b, 0x60, 0xc5, 0x11, 0xb6, 0xcd, 0x6d, 0x0a, 0x20, 0xa7, 0xbd, 0x8b, 0x49, 0x3d, 0x60, 0x3d,
0x61, 0x59, 0xbc, 0xa2, 0x85, 0x80, 0xb0, 0x42, 0x28, 0xc9, 0x15, 0xc2, 0x2a, 0x00, 0xd1, 0x94,
0x7e, 0xda, 0x37, 0xce, 0x3c, 0x5a, 0x50, 0x97, 0xb5, 0x39, 0x02, 0x79, 0x8f, 0x00, 0x68, 0x9a,
0x8e, 0xee, 0x2e, 0xd4, 0xfe, 0x3b, 0xd1, 0x42, 0xe1, 0x5e, 0xa8, 0xf2, 0x8c, 0x19, 0x9d, 0x31,
0x65, 0x43, 0x1b, 0x43, 0x41, 0x14, 0xed, 0xd4, 0x45, 0x14, 0xc9, 0x45, 0xa6, 0x0b, 0xbc, 0x15,
0x98, 0xb3, 0x3c, 0x9d, 0x6b, 0x39, 0x4f, 0x97, 0xa8, 0x58, 0xde, 0x21, 0x1d, 0xab, 0x9f, 0x13,
0x97, 0x4a, 0xa9, 0x4b, 0xc8, 0xa6, 0xd6, 0xa0, 0xca, 0xac, 0xa4, 0x4b, 0x15, 0x0a, 0x30, 0xd0,
0x3e, 0xa9, 0x53, 0xa2, 0x05, 0x6a, 0x2e, 0x5e, 0xa0, 0xae, 0x90, 0x5c, 0x97, 0x56, 0x99, 0x1c,
0xf4, 0x4d, 0x75, 0x09, 0xd0, 0xa1, 0xeb, 0xfc, 0x10, 0x9f, 0xc8, 0x41, 0xad, 0xbe, 0x05, 0x8b,
0x11, 0x28, 0xaf, 0xc3, 0x5e, 0x82, 0xda, 0x90, 0x81, 0x75, 0xcf, 0xe8, 0x0b, 0x1f, 0xaa, 0x72,
0xd8, 0x91, 0xd1, 0xf7, 0xd5, 0x9f, 0x95, 0xa1, 0x74, 0x70, 0x4c, 0x86, 0x99, 0xbe, 0x76, 0x17,
0xea, 0xe1, 0x31, 0x2f, 0xc5, 0xdd, 0x7c, 0x00, 0x3d, 0xe4, 0x01, 0xf8, 0x04, 0xbb, 0x5e, 0x58,
0x26, 0x8a, 0x21, 0xba, 0x0f, 0x25, 0xcf, 0x37, 0xfc, 0x91, 0x47, 0xfd, 0x8d, 0x5c, 0x5b, 0x02,
0x33, 0xb3, 0xa5, 0x3b, 0x47, 0x14, 0xad, 0x71, 0x32, 0xf4, 0x3a, 0xcc, 0x79, 0xbe, 0x8b, 0x8d,
0x01, 0xd1, 0x4f, 0x91, 0x06, 0x52, 0x93, 0x07, 0x52, 0xe5, 0x88, 0x22, 0x7a, 0x5d, 0xad, 0xc2,
0x48, 0x7a, 0x66, 0xec, 0x32, 0x56, 0x7a, 0xb6, 0x7b, 0xf0, 0x16, 0x59, 0x93, 0xac, 0x4e, 0x78,
0x94, 0xa7, 0xe0, 0x51, 0x61, 0xd3, 0xb6, 0x48, 0xd9, 0xc7, 0xca, 0x13, 0x4c, 0x79, 0x54, 0xa6,
0x91, 0x83, 0xcf, 0xdb, 0xf2, 0xd1, 0x43, 0x68, 0x85, 0xda, 0x26, 0x7a, 0x32, 0x0d, 0xdf, 0xd0,
0x6d, 0xc7, 0x3e, 0xc1, 0xad, 0x39, 0xaa, 0x8a, 0x79, 0xae, 0x8a, 0xe2, 0x3e, 0x01, 0x6a, 0xcb,
0x01, 0xf9, 0x1e, 0xa7, 0xa6, 0x70, 0xf4, 0x3a, 0xa0, 0x24, 0xa3, 0x16, 0x50, 0xd3, 0x2d, 0x24,
0xe6, 0xa0, 0xd7, 0x00, 0x9d, 0x5a, 0x17, 0xf1, 0x42, 0xae, 0x4a, 0x53, 0x69, 0x93, 0x62, 0xe4,
0x0a, 0x6e, 0x17, 0x16, 0x92, 0x57, 0xc3, 0xda, 0xf8, 0x12, 0xb2, 0xe9, 0xc6, 0xef, 0x84, 0x1f,
0xc3, 0x8d, 0xf4, 0xbb, 0xe0, 0xfc, 0x84, 0x77, 0xc1, 0x25, 0x9c, 0x71, 0x09, 0xf4, 0x1d, 0xdf,
0xe8, 0xb3, 0x6d, 0xd4, 0xe9, 0x36, 0xe6, 0x28, 0x84, 0xca, 0xbf, 0x06, 0x55, 0xcb, 0xee, 0x5b,
0x36, 0x66, 0xf8, 0x06, 0xc5, 0x03, 0x03, 0x09, 0x02, 0x17, 0x0f, 0x1c, 0x9f, 0x13, 0x34, 0x19,
0x01, 0x03, 0x11, 0x02, 0xf5, 0x43, 0x28, 0x31, 0xaf, 0x45, 0x55, 0x28, 0xf7, 0xf6, 0x3f, 0xd9,
0x7a, 0xd4, 0xeb, 0x36, 0x5f, 0x40, 0xf3, 0x30, 0xf7, 0xf1, 0xe1, 0xa3, 0x83, 0xad, 0x6e, 0x6f,
0xff, 0x61, 0x53, 0x41, 0x75, 0x80, 0x9d, 0x83, 0xbd, 0xbd, 0xde, 0x47, 0x1f, 0x91, 0x71, 0x8e,
0xa0, 0xf9, 0xf8, 0x41, 0xb7, 0x99, 0x47, 0x35, 0xa8, 0x74, 0x1f, 0x3c, 0x7a, 0x40, 0x91, 0x05,
0xf5, 0x8f, 0x79, 0x40, 0x2c, 0x20, 0xb6, 0xf1, 0x99, 0x65, 0x4b, 0xf7, 0xb5, 0xeb, 0x89, 0xcb,
0xa8, 0xbf, 0x16, 0x66, 0xef, 0xaf, 0xc5, 0xab, 0xfb, 0x6b, 0x29, 0xcb, 0x5f, 0x53, 0x3d, 0xb0,
0x3c, 0x53, 0x0f, 0xac, 0x5c, 0xc5, 0x03, 0xd5, 0xdf, 0xe6, 0x60, 0x31, 0x62, 0x4d, 0x9e, 0x94,
0xaf, 0xcd, 0x9c, 0x91, 0xac, 0x59, 0x18, 0x9b, 0x35, 0x53, 0x15, 0x58, 0x9c, 0xa9, 0x02, 0x4b,
0x57, 0x52, 0x60, 0x57, 0xe8, 0x2f, 0x72, 0x11, 0x8a, 0x6e, 0x53, 0x19, 0xb7, 0x4d, 0x75, 0x19,
0x96, 0xa2, 0x5c, 0xf8, 0x2d, 0xff, 0x31, 0x34, 0x19, 0x5c, 0x6a, 0xe2, 0x5c, 0x97, 0x69, 0xd4,
0x77, 0x61, 0x41, 0x5a, 0x2c, 0xec, 0x04, 0x39, 0x14, 0x98, 0xec, 0x04, 0x31, 0x62, 0x8d, 0xe3,
0xd5, 0x7f, 0x2a, 0x62, 0x7e, 0xac, 0x8f, 0x93, 0x2a, 0xed, 0xab, 0xd0, 0x94, 0xa4, 0x95, 0xab,
0xc4, 0x46, 0x28, 0x2f, 0x2b, 0x17, 0x23, 0xa4, 0xbc, 0x29, 0x94, 0x8f, 0x91, 0xee, 0xc4, 0xba,
0x43, 0x05, 0xb9, 0xf6, 0xeb, 0x41, 0x83, 0xc9, 0xa8, 0x5b, 0xf6, 0x49, 0x7f, 0x64, 0xe2, 0xb0,
0x87, 0x17, 0xdb, 0x8c, 0xe8, 0xf9, 0xf4, 0x38, 0x9d, 0x56, 0x67, 0x13, 0xc5, 0x58, 0xfd, 0x4c,
0x24, 0xbf, 0x09, 0x5b, 0x49, 0x51, 0xb6, 0x97, 0xb5, 0x92, 0x7e, 0x97, 0x87, 0x7a, 0x94, 0x3a,
0xc5, 0xa2, 0xca, 0x18, 0x8b, 0xe6, 0xb2, 0x6a, 0x9a, 0xfc, 0x64, 0x35, 0x4d, 0xb4, 0x48, 0x29,
0xcc, 0xa0, 0x48, 0x29, 0xce, 0xa0, 0x48, 0x29, 0xcd, 0x3e, 0xe9, 0x97, 0xaf, 0x9e, 0xf4, 0x2b,
0x19, 0x49, 0x5f, 0xfd, 0x3f, 0x58, 0x4e, 0xf7, 0x26, 0xd4, 0x86, 0x4a, 0x30, 0x5d, 0x61, 0xc5,
0xba, 0x18, 0xab, 0x1e, 0xb4, 0xa4, 0x44, 0x1c, 0xed, 0xa6, 0x5e, 0x5b, 0xc8, 0xbf, 0x0f, 0xb7,
0x52, 0x16, 0xe5, 0x5e, 0x3d, 0x65, 0x0e, 0x0b, 0x78, 0xbd, 0x67, 0xd9, 0x96, 0x77, 0x1e, 0xdd,
0xc1, 0x94, 0xbc, 0x6e, 0x43, 0x3b, 0x8d, 0x17, 0xcf, 0x8a, 0xff, 0xca, 0x41, 0xf5, 0xc8, 0xf0,
0xc5, 0xbc, 0xeb, 0x3b, 0xac, 0xae, 0xd4, 0x7c, 0xec, 0xc1, 0x3c, 0x8d, 0x09, 0x72, 0xdc, 0x98,
0x86, 0x8f, 0xa7, 0x0a, 0x85, 0x9a, 0x98, 0xda, 0x35, 0x7c, 0x8c, 0xf6, 0xa0, 0x11, 0xb6, 0x14,
0x19, 0xb3, 0x69, 0x62, 0xa2, 0x1e, 0x4e, 0xa6, 0xec, 0xee, 0xc3, 0xa2, 0x67, 0xf8, 0xb8, 0xdf,
0xb7, 0x68, 0xe5, 0x78, 0x66, 0x1b, 0xfe, 0xc8, 0xe5, 0x31, 0xa1, 0xa1, 0x00, 0x75, 0x24, 0x30,
0xea, 0x3f, 0x72, 0x50, 0xe6, 0x85, 0xf5, 0x94, 0x96, 0x44, 0xff, 0x0f, 0x95, 0xa1, 0xe3, 0x59,
0xbe, 0xc8, 0x4e, 0xd5, 0xcd, 0x5b, 0x61, 0x12, 0xe2, 0x3c, 0x0f, 0x39, 0x81, 0x16, 0x90, 0xa2,
0x77, 0x61, 0x31, 0x34, 0xdd, 0x63, 0xfc, 0x94, 0x87, 0x6d, 0x3e, 0x2d, 0x6c, 0xc3, 0x10, 0xfc,
0x00, 0x3f, 0x65, 0x11, 0x7b, 0x07, 0xe6, 0x23, 0xd3, 0x79, 0x0f, 0xa1, 0x26, 0x53, 0xa2, 0x0e,
0x2c, 0x92, 0xb2, 0x59, 0x6a, 0x0f, 0xd3, 0xc0, 0x64, 0x6d, 0xe1, 0x05, 0x82, 0x0a, 0xfa, 0xc2,
0x5d, 0x52, 0xcc, 0x6d, 0x06, 0x15, 0x04, 0x36, 0x75, 0x5e, 0x98, 0x4b, 0xe5, 0x5f, 0x28, 0x70,
0x8f, 0xe2, 0xe8, 0x9c, 0x57, 0xa0, 0x44, 0x7b, 0xb2, 0x5e, 0xab, 0x4c, 0x8f, 0x86, 0x46, 0xb8,
0x79, 0xda, 0x6c, 0xd1, 0x38, 0x5a, 0xdd, 0x85, 0x22, 0x05, 0x90, 0x1b, 0x3d, 0xeb, 0xe2, 0xda,
0xa3, 0x01, 0xd5, 0x6f, 0x51, 0xab, 0x50, 0xc0, 0xfe, 0x68, 0x80, 0x54, 0x28, 0xd8, 0x8e, 0x89,
0x79, 0xdf, 0xa6, 0xce, 0xf5, 0x50, 0xda, 0x77, 0x4c, 0xdc, 0xeb, 0x6a, 0x14, 0xa7, 0xee, 0x42,
0x23, 0xa6, 0x57, 0x72, 0x4f, 0x20, 0x37, 0x77, 0xc2, 0xf2, 0x98, 0xb7, 0x32, 0x8b, 0x1a, 0xbd,
0xde, 0xef, 0x53, 0x08, 0x39, 0x37, 0x2d, 0xdb, 0xc4, 0x17, 0xe2, 0xaf, 0x0a, 0x1d, 0xa8, 0xbf,
0x54, 0x60, 0x91, 0xb3, 0x8a, 0xd4, 0xfa, 0xcf, 0xc7, 0x05, 0xee, 0x41, 0x63, 0x60, 0x5c, 0xe8,
0xb4, 0x81, 0xcb, 0x9a, 0x5e, 0xbc, 0x67, 0x36, 0x3f, 0x30, 0x2e, 0xc2, 0x1e, 0x97, 0xfa, 0x27,
0x05, 0x96, 0xa2, 0x52, 0xf2, 0xfc, 0xf5, 0x06, 0x80, 0xb8, 0x26, 0x06, 0x72, 0x2e, 0x70, 0x39,
0xe7, 0x44, 0x57, 0xb0, 0xab, 0xcd, 0x71, 0xa2, 0x5e, 0x7a, 0x9f, 0x2d, 0x37, 0x8b, 0x3e, 0xdb,
0x14, 0x0d, 0xd1, 0x5f, 0xe5, 0x82, 0xed, 0x44, 0x4b, 0xca, 0xe9, 0xb7, 0x93, 0x11, 0x44, 0xb9,
0x67, 0x0d, 0xa2, 0xfc, 0xe4, 0x41, 0x54, 0xc8, 0x0a, 0xa2, 0x87, 0x30, 0x3f, 0x1a, 0xf6, 0x1d,
0xc3, 0xd4, 0x5d, 0xec, 0x8d, 0xfa, 0x3e, 0x6f, 0xd4, 0xab, 0x49, 0x8f, 0x20, 0x3a, 0xfa, 0x78,
0xc8, 0x3b, 0xdc, 0xa3, 0xbe, 0xaf, 0xd5, 0x46, 0xd2, 0x48, 0xfd, 0x69, 0xd8, 0x30, 0x4d, 0x90,
0x5e, 0x1e, 0x44, 0xaf, 0x40, 0x99, 0xfe, 0xf0, 0x0a, 0x7e, 0x93, 0xc4, 0xe3, 0xa8, 0x44, 0xd0,
0x3d, 0x13, 0xdd, 0x85, 0xc2, 0xb9, 0xe1, 0x9d, 0xf3, 0x47, 0x0b, 0x0b, 0xe2, 0x5f, 0x02, 0x5d,
0x6e, 0xd7, 0xf0, 0xce, 0x35, 0x8a, 0x56, 0xff, 0x9b, 0x83, 0x1a, 0x39, 0x8e, 0x84, 0x09, 0xd0,
0x66, 0x3c, 0x3e, 0xaa, 0x9b, 0x37, 0xa4, 0xfd, 0x85, 0x27, 0x97, 0x14, 0x24, 0xb1, 0x10, 0xcd,
0x65, 0x87, 0x68, 0x5e, 0x0a, 0xd1, 0xe4, 0x8f, 0x9f, 0xe2, 0x04, 0x3f, 0x7e, 0x3e, 0x84, 0x1b,
0xc1, 0xef, 0x12, 0x29, 0xbc, 0xc8, 0x55, 0x68, 0x02, 0x5f, 0x5f, 0x14, 0x73, 0x43, 0x98, 0x97,
0x3c, 0xec, 0xca, 0xcf, 0x7c, 0xd8, 0x65, 0x9c, 0x4e, 0x95, 0xcc, 0xd3, 0xe9, 0x66, 0xf0, 0x0b,
0x21, 0x76, 0x7b, 0xfa, 0x3a, 0x17, 0xb8, 0xc8, 0x9e, 0xf1, 0x18, 0xb3, 0xb4, 0xfc, 0x7c, 0x93,
0xd8, 0xf3, 0x38, 0xc7, 0x32, 0xcf, 0xa5, 0x62, 0xe6, 0xb9, 0xc4, 0xda, 0xb7, 0x09, 0xcd, 0x70,
0xbd, 0x39, 0x01, 0x32, 0xa5, 0x16, 0x5d, 0x49, 0xe8, 0xed, 0xca, 0x5a, 0x52, 0xbf, 0x0e, 0xff,
0x6a, 0xa5, 0x15, 0xa2, 0xdf, 0x61, 0x22, 0x57, 0x7f, 0x1e, 0x8a, 0x96, 0x56, 0xd7, 0x4e, 0x2f,
0xda, 0x3b, 0x50, 0x66, 0x99, 0x4f, 0x48, 0x94, 0x91, 0xfa, 0x02, 0x1d, 0x90, 0xd4, 0x27, 0xa6,
0x24, 0xb2, 0x9e, 0x4c, 0xf5, 0x7c, 0xb3, 0xde, 0x2a, 0xac, 0xa4, 0xea, 0x85, 0xfb, 0xd0, 0x57,
0x0a, 0x20, 0x8e, 0x97, 0xdb, 0x01, 0x97, 0x7a, 0xcf, 0x36, 0x34, 0xd8, 0xf5, 0x5e, 0x9f, 0xdc,
0x89, 0xea, 0x6c, 0x46, 0x50, 0xea, 0x04, 0x1d, 0x80, 0xbc, 0xd4, 0x01, 0x50, 0x3f, 0x0f, 0x0a,
0x99, 0xc8, 0xbd, 0xfd, 0x7e, 0xf4, 0xde, 0x9e, 0x5c, 0x66, 0x92, 0x8b, 0x7b, 0x58, 0x6f, 0x05,
0x17, 0x77, 0x39, 0x0c, 0x94, 0xc9, 0xc3, 0xe0, 0x2b, 0x25, 0xf8, 0x5b, 0x19, 0xfb, 0x81, 0x3c,
0x6d, 0xb6, 0x9a, 0x81, 0x26, 0xd5, 0xff, 0x84, 0x3f, 0xf9, 0xe3, 0xbf, 0x9a, 0xbf, 0xd3, 0xd2,
0x2a, 0x33, 0xdd, 0xe5, 0xb3, 0xcb, 0xf0, 0xd7, 0xa1, 0x60, 0xe3, 0x0b, 0xd1, 0xd1, 0xb8, 0x44,
0x09, 0x94, 0x6c, 0xf3, 0x37, 0x0b, 0x50, 0xd9, 0xe3, 0x24, 0x68, 0x0f, 0x6a, 0xec, 0x11, 0x16,
0x7f, 0x1e, 0xb9, 0x1a, 0x7f, 0x28, 0x14, 0x79, 0x17, 0xd7, 0x7e, 0x31, 0x0b, 0xcd, 0x55, 0xd7,
0x85, 0xb9, 0x87, 0xd8, 0xe7, 0xbc, 0xda, 0x71, 0xe2, 0xb0, 0xcf, 0xd7, 0x5e, 0x49, 0xc5, 0x71,
0x2e, 0x7b, 0x50, 0x63, 0x01, 0x97, 0x25, 0x54, 0x24, 0x4d, 0x25, 0x85, 0x8a, 0x65, 0xd8, 0x5d,
0xa8, 0x12, 0xe7, 0x65, 0x38, 0x0f, 0xad, 0xa4, 0xbd, 0x85, 0x12, 0xbc, 0x6e, 0xa7, 0x23, 0x39,
0x27, 0x4c, 0xaa, 0x57, 0xce, 0x48, 0xfa, 0x3b, 0x88, 0xee, 0xc6, 0x67, 0xa5, 0xfe, 0x99, 0x6c,
0xdf, 0x1b, 0x47, 0xc6, 0x97, 0x79, 0x1f, 0xaa, 0xf4, 0xa4, 0xe0, 0x7f, 0x05, 0x6f, 0xc7, 0x1b,
0x5b, 0xf2, 0x7d, 0xa5, 0xbd, 0x9a, 0x81, 0x0d, 0x75, 0xc9, 0x0a, 0x07, 0xce, 0x2c, 0x41, 0x1e,
0xa9, 0xc3, 0x65, 0x5d, 0xa6, 0xf5, 0x6c, 0xb9, 0x81, 0x39, 0xaf, 0x76, 0x9c, 0x38, 0xdd, 0xc0,
0xc9, 0xbe, 0x2b, 0xb7, 0x08, 0x43, 0x44, 0x2c, 0x92, 0xe8, 0xb1, 0xb6, 0x6f, 0xa7, 0x23, 0x39,
0xa7, 0x2f, 0x60, 0x41, 0x3a, 0x54, 0xb9, 0x5c, 0x6a, 0xaa, 0x4a, 0xa2, 0x4e, 0x73, 0xe7, 0x52,
0x1a, 0xce, 0x5d, 0x07, 0x24, 0xe7, 0x7f, 0xce, 0x3e, 0x31, 0x35, 0xe5, 0xec, 0x6c, 0xbf, 0x7c,
0x39, 0x51, 0x68, 0x1d, 0xba, 0xae, 0xe8, 0x3f, 0xac, 0x26, 0x82, 0x37, 0x62, 0xeb, 0x17, 0xb3,
0xd0, 0x9c, 0xdd, 0x21, 0xcc, 0x33, 0x7b, 0x09, 0x7e, 0xc9, 0x09, 0x51, 0x73, 0xaf, 0x65, 0xe2,
0x43, 0xfd, 0x86, 0x35, 0x94, 0xe0, 0x9a, 0x3c, 0xd4, 0x13, 0x15, 0xa8, 0xac, 0xdf, 0xcc, 0x5a,
0x8c, 0xe8, 0x57, 0x52, 0xbb, 0x60, 0x7f, 0x27, 0x7d, 0x97, 0x99, 0xfa, 0xbd, 0xa4, 0xb8, 0x3a,
0x86, 0x45, 0x59, 0xef, 0x62, 0x85, 0xe4, 0xe4, 0x34, 0x13, 0xde, 0x1d, 0x43, 0xc5, 0xd7, 0xf8,
0x00, 0x6a, 0xf2, 0x53, 0x09, 0x39, 0x5c, 0x93, 0x35, 0x42, 0x7b, 0x35, 0x03, 0xcb, 0x99, 0x7d,
0x02, 0x0d, 0x71, 0x1e, 0x09, 0x61, 0xd7, 0x13, 0x33, 0x62, 0xe7, 0x67, 0xfb, 0xa5, 0x4b, 0x28,
0x38, 0xdf, 0x4f, 0xa1, 0xc9, 0x52, 0x35, 0x27, 0x38, 0xe8, 0x9b, 0x29, 0x8c, 0x63, 0xaf, 0x1c,
0x53, 0x18, 0x27, 0x9e, 0xf9, 0x7d, 0x1f, 0x9a, 0x11, 0x97, 0x23, 0xb0, 0x97, 0x2e, 0xf7, 0x3a,
0xc2, 0x59, 0x1d, 0xe3, 0x78, 0x84, 0xcd, 0x11, 0xd4, 0xa5, 0xe7, 0x4d, 0xf4, 0x5d, 0x47, 0x62,
0x56, 0xf4, 0x5d, 0x55, 0x7b, 0x3d, 0x83, 0x20, 0x64, 0xaa, 0x03, 0x8a, 0x29, 0x98, 0x40, 0xef,
0x8c, 0xd3, 0x31, 0x61, 0xfe, 0xf2, 0x58, 0x35, 0x73, 0x85, 0x44, 0x9c, 0x2d, 0x5d, 0x21, 0xf1,
0x87, 0x56, 0x29, 0x0a, 0x49, 0xbe, 0x94, 0xfa, 0x04, 0x1a, 0xb2, 0xa7, 0xc5, 0x6c, 0x98, 0xfe,
0x7e, 0x49, 0xb6, 0x61, 0xd6, 0x1b, 0xa0, 0x2f, 0x60, 0x21, 0x7a, 0x12, 0x11, 0x60, 0x44, 0xa0,
0xf4, 0x77, 0x36, 0xd1, 0x20, 0xcf, 0x78, 0x2f, 0x43, 0x4e, 0x33, 0xe9, 0x65, 0x8c, 0x1c, 0x1e,
0xc9, 0x67, 0x34, 0x72, 0x78, 0xa4, 0x3c, 0xa7, 0xd9, 0x2e, 0x7c, 0x9e, 0x1b, 0x1e, 0x1f, 0x97,
0xe8, 0x85, 0xfb, 0xcd, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x64, 0xa4, 0x88, 0x3f, 0x5b, 0x32,
0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -3611,6 +3708,7 @@ type MetainfoClient interface {
// Object
BeginObject(ctx context.Context, in *ObjectBeginRequest, opts ...grpc.CallOption) (*ObjectBeginResponse, error)
CommitObject(ctx context.Context, in *ObjectCommitRequest, opts ...grpc.CallOption) (*ObjectCommitResponse, error)
GetObject(ctx context.Context, in *ObjectGetRequest, opts ...grpc.CallOption) (*ObjectGetResponse, error)
ListObjects(ctx context.Context, in *ObjectListRequest, opts ...grpc.CallOption) (*ObjectListResponse, error)
BeginDeleteObject(ctx context.Context, in *ObjectBeginDeleteRequest, opts ...grpc.CallOption) (*ObjectBeginDeleteResponse, error)
FinishDeleteObject(ctx context.Context, in *ObjectFinishDeleteRequest, opts ...grpc.CallOption) (*ObjectFinishDeleteResponse, error)
@ -3702,6 +3800,15 @@ func (c *metainfoClient) CommitObject(ctx context.Context, in *ObjectCommitReque
return out, nil
}
func (c *metainfoClient) GetObject(ctx context.Context, in *ObjectGetRequest, opts ...grpc.CallOption) (*ObjectGetResponse, error) {
out := new(ObjectGetResponse)
err := c.cc.Invoke(ctx, "/metainfo.Metainfo/GetObject", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *metainfoClient) ListObjects(ctx context.Context, in *ObjectListRequest, opts ...grpc.CallOption) (*ObjectListResponse, error) {
out := new(ObjectListResponse)
err := c.cc.Invoke(ctx, "/metainfo.Metainfo/ListObjects", in, out, opts...)
@ -3875,6 +3982,7 @@ type MetainfoServer interface {
// Object
BeginObject(context.Context, *ObjectBeginRequest) (*ObjectBeginResponse, error)
CommitObject(context.Context, *ObjectCommitRequest) (*ObjectCommitResponse, error)
GetObject(context.Context, *ObjectGetRequest) (*ObjectGetResponse, error)
ListObjects(context.Context, *ObjectListRequest) (*ObjectListResponse, error)
BeginDeleteObject(context.Context, *ObjectBeginDeleteRequest) (*ObjectBeginDeleteResponse, error)
FinishDeleteObject(context.Context, *ObjectFinishDeleteRequest) (*ObjectFinishDeleteResponse, error)
@ -4025,6 +4133,24 @@ func _Metainfo_CommitObject_Handler(srv interface{}, ctx context.Context, dec fu
return interceptor(ctx, in, info, handler)
}
func _Metainfo_GetObject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ObjectGetRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MetainfoServer).GetObject(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/metainfo.Metainfo/GetObject",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MetainfoServer).GetObject(ctx, req.(*ObjectGetRequest))
}
return interceptor(ctx, in, info, handler)
}
func _Metainfo_ListObjects_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ObjectListRequest)
if err := dec(in); err != nil {
@ -4381,6 +4507,10 @@ var _Metainfo_serviceDesc = grpc.ServiceDesc{
MethodName: "CommitObject",
Handler: _Metainfo_CommitObject_Handler,
},
{
MethodName: "GetObject",
Handler: _Metainfo_GetObject_Handler,
},
{
MethodName: "ListObjects",
Handler: _Metainfo_ListObjects_Handler,

View File

@ -24,6 +24,7 @@ service Metainfo {
// Object
rpc BeginObject(ObjectBeginRequest) returns (ObjectBeginResponse);
rpc CommitObject(ObjectCommitRequest) returns (ObjectCommitResponse);
rpc GetObject(ObjectGetRequest) returns (ObjectGetResponse);
rpc ListObjects(ObjectListRequest) returns (ObjectListResponse);
rpc BeginDeleteObject(ObjectBeginDeleteRequest) returns (ObjectBeginDeleteResponse);
rpc FinishDeleteObject(ObjectFinishDeleteRequest) returns (ObjectFinishDeleteResponse);
@ -282,6 +283,16 @@ message ObjectCommitRequest {
message ObjectCommitResponse {
}
message ObjectGetRequest {
bytes bucket = 1;
bytes encrypted_path = 2;
int32 version = 3;
}
message ObjectGetResponse {
Object object = 1;
}
message ObjectListRequest {
bytes bucket = 1;
bytes encrypted_prefix = 2;

View File

@ -2449,6 +2449,36 @@
{
"name": "ObjectCommitResponse"
},
{
"name": "ObjectGetRequest",
"fields": [
{
"id": 1,
"name": "bucket",
"type": "bytes"
},
{
"id": 2,
"name": "encrypted_path",
"type": "bytes"
},
{
"id": 3,
"name": "version",
"type": "int32"
}
]
},
{
"name": "ObjectGetResponse",
"fields": [
{
"id": 1,
"name": "object",
"type": "Object"
}
]
},
{
"name": "ObjectListRequest",
"fields": [
@ -3330,6 +3360,11 @@
"in_type": "ObjectCommitRequest",
"out_type": "ObjectCommitResponse"
},
{
"name": "GetObject",
"in_type": "ObjectGetRequest",
"out_type": "ObjectGetResponse"
},
{
"name": "ListObjects",
"in_type": "ObjectListRequest",

View File

@ -1032,6 +1032,75 @@ func (endpoint *Endpoint) CommitObject(ctx context.Context, req *pb.ObjectCommit
return &pb.ObjectCommitResponse{}, nil
}
// GetObject gets single object
func (endpoint *Endpoint) GetObject(ctx context.Context, req *pb.ObjectGetRequest) (resp *pb.ObjectGetResponse, err error) {
defer mon.Task()(&ctx)(&err)
keyInfo, err := endpoint.validateAuth(ctx, macaroon.Action{
Op: macaroon.ActionRead,
Bucket: req.Bucket,
EncryptedPath: req.EncryptedPath,
Time: time.Now(),
})
if err != nil {
return nil, status.Errorf(codes.Unauthenticated, err.Error())
}
err = endpoint.validateBucket(ctx, req.Bucket)
if err != nil {
return nil, status.Errorf(codes.InvalidArgument, err.Error())
}
path, err := CreatePath(ctx, keyInfo.ProjectID, -1, req.Bucket, req.EncryptedPath)
if err != nil {
return nil, status.Errorf(codes.InvalidArgument, err.Error())
}
pointer, err := endpoint.metainfo.Get(ctx, path)
if err != nil {
if storage.ErrKeyNotFound.Has(err) {
return nil, status.Errorf(codes.NotFound, err.Error())
}
return nil, status.Errorf(codes.Internal, err.Error())
}
satStreamID := &pb.SatStreamID{
Bucket: req.Bucket,
EncryptedPath: req.EncryptedPath,
Version: req.Version,
CreationDate: time.Now(),
}
satStreamID, err = signing.SignStreamID(ctx, endpoint.satellite, satStreamID)
if err != nil {
return nil, status.Errorf(codes.Internal, err.Error())
}
encodedStreamID, err := proto.Marshal(satStreamID)
if err != nil {
return nil, status.Errorf(codes.Internal, err.Error())
}
streamID, err := storj.StreamIDFromBytes(encodedStreamID)
if err != nil {
return nil, status.Errorf(codes.Internal, err.Error())
}
object := &pb.Object{
Bucket: req.Bucket,
EncryptedPath: req.EncryptedPath,
Version: -1,
StreamId: streamID,
ExpiresAt: pointer.ExpirationDate,
CreatedAt: pointer.CreationDate,
EncryptedMetadata: pointer.Metadata,
}
return &pb.ObjectGetResponse{
Object: object,
}, nil
}
// ListObjects list objects according to specific parameters
func (endpoint *Endpoint) ListObjects(ctx context.Context, req *pb.ObjectListRequest) (resp *pb.ObjectListResponse, err error) {
defer mon.Task()(&ctx)(&err)

View File

@ -889,7 +889,7 @@ func TestBeginFinishDeleteObject(t *testing.T) {
})
}
func TestListObjects(t *testing.T) {
func TestListGetObjects(t *testing.T) {
testplanet.Run(t, testplanet.Config{
SatelliteCount: 1, StorageNodeCount: 0, UplinkCount: 1,
}, func(t *testing.T, ctx *testcontext.Context, planet *testplanet.Planet) {
@ -908,15 +908,22 @@ func TestListObjects(t *testing.T) {
require.NoError(t, err)
defer ctx.Check(metainfo.Close)
items, _, err := metainfo.ListObjects(ctx, []byte("testbucket"), []byte(""), []byte(""), 0)
expectedBucketName := []byte("testbucket")
items, _, err := metainfo.ListObjects(ctx, expectedBucketName, []byte(""), []byte(""), 0)
require.NoError(t, err)
require.Equal(t, len(files), len(items))
for _, item := range items {
require.NotEmpty(t, item.EncryptedPath)
require.True(t, item.CreatedAt.Before(time.Now()))
object, streamID, err := metainfo.GetObject(ctx, expectedBucketName, item.EncryptedPath, -1)
require.NoError(t, err)
require.Equal(t, item.EncryptedPath, []byte(object.Path))
require.NotEmpty(t, streamID)
}
items, _, err = metainfo.ListObjects(ctx, []byte("testbucket"), []byte(""), []byte(""), 3)
items, _, err = metainfo.ListObjects(ctx, expectedBucketName, []byte(""), []byte(""), 3)
require.NoError(t, err)
require.Equal(t, 3, len(items))
})

View File

@ -408,6 +408,32 @@ func (client *Client) CommitObject(ctx context.Context, streamID storj.StreamID)
return Error.Wrap(err)
}
// GetObject gets single object
func (client *Client) GetObject(ctx context.Context, bucket []byte, encryptedPath []byte, version int32) (_ storj.Object, _ storj.StreamID, err error) {
defer mon.Task()(&ctx)(&err)
response, err := client.client.GetObject(ctx, &pb.ObjectGetRequest{
Bucket: bucket,
EncryptedPath: encryptedPath,
Version: version,
})
if err != nil {
return storj.Object{}, storj.StreamID{}, Error.Wrap(err)
}
object := storj.Object{
Bucket: storj.Bucket{
Name: string(response.Object.Bucket),
},
Path: storj.Path(response.Object.EncryptedPath),
Created: response.Object.CreatedAt,
Expires: response.Object.ExpiresAt,
// TODO custom type for response object or modify storj.Object
}
return object, response.Object.StreamId, nil
}
// BeginDeleteObject begins object deletion process
func (client *Client) BeginDeleteObject(ctx context.Context, bucket []byte, encryptedPath []byte, version int32) (_ storj.StreamID, err error) {
defer mon.Task()(&ctx)(&err)