From 73d023bfbfd1201a4155a7ac3265fdfb5291d06b Mon Sep 17 00:00:00 2001
From: wlwilliamx
Date: Tue, 30 Aug 2022 13:28:50 +0800
Subject: [PATCH 01/19] feat(oss api): support ceph oss
Fit ceph object gateway, so that we can use Layotto to store object into CEPH.
---
.gitignore | 1 +
cmd/layotto/main.go | 3 +
cmd/layotto_multiple_api/main.go | 3 +
cmd/layotto_without_xds/main.go | 3 +
components/oss/ceph/option.go | 43 +
components/oss/ceph/option_test.go | 52 +
components/oss/ceph/oss.go | 649 ++
components/oss/ceph/oss_test.go | 535 ++
components/oss/oss.go | 56 +-
spec/proto/extension/v1/s3/oss.pb.go | 7179 +++++++++++++----------
spec/proto/extension/v1/s3/oss.proto | 138 +
spec/proto/runtime/v1/appcallback.pb.go | 2 +-
spec/proto/runtime/v1/runtime.pb.go | 2 +-
13 files changed, 5510 insertions(+), 3156 deletions(-)
create mode 100644 components/oss/ceph/option.go
create mode 100644 components/oss/ceph/option_test.go
create mode 100644 components/oss/ceph/oss.go
create mode 100644 components/oss/ceph/oss_test.go
diff --git a/.gitignore b/.gitignore
index 1cf3674b3d..3cba1002e3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -54,6 +54,7 @@ cmd/layotto_multiple_api/nohup.out
default.etcd/
demo/configuration/common/client
demo/file/client
+demo/oss/client
demo/flowcontrol/client
demo/lock/redis/client
demo/pubsub/redis/client/publisher
diff --git a/cmd/layotto/main.go b/cmd/layotto/main.go
index cf320b3cd1..9b13036802 100644
--- a/cmd/layotto/main.go
+++ b/cmd/layotto/main.go
@@ -28,6 +28,8 @@ import (
aliyun_oss "mosn.io/layotto/components/oss/aliyun"
+ ceph_oss "mosn.io/layotto/components/oss/ceph"
+
"mosn.io/mosn/pkg/istio"
aliyun_file "mosn.io/layotto/components/file/aliyun"
@@ -287,6 +289,7 @@ func NewRuntimeGrpcServer(data json.RawMessage, opts ...grpc.ServerOption) (mgrp
runtime.WithOssFactory(
oss.NewFactory("aws.oss", aws_oss.NewAwsOss),
oss.NewFactory("aliyun.oss", aliyun_oss.NewAliyunOss),
+ oss.NewFactory("ceph.oss", ceph_oss.NewCephOss),
),
// PubSub
runtime.WithPubSubFactory(
diff --git a/cmd/layotto_multiple_api/main.go b/cmd/layotto_multiple_api/main.go
index 20d02dfa9a..91e0d600df 100644
--- a/cmd/layotto_multiple_api/main.go
+++ b/cmd/layotto_multiple_api/main.go
@@ -28,6 +28,8 @@ import (
aliyun_oss "mosn.io/layotto/components/oss/aliyun"
+ ceph_oss "mosn.io/layotto/components/oss/ceph"
+
aliyun_file "mosn.io/layotto/components/file/aliyun"
"mosn.io/layotto/components/file/local"
@@ -299,6 +301,7 @@ func NewRuntimeGrpcServer(data json.RawMessage, opts ...grpc.ServerOption) (mgrp
runtime.WithOssFactory(
oss.NewFactory("aws.oss", aws_oss.NewAwsOss),
oss.NewFactory("aliyun.oss", aliyun_oss.NewAliyunOss),
+ oss.NewFactory("ceph.oss", ceph_oss.NewCephOss),
),
// PubSub
diff --git a/cmd/layotto_without_xds/main.go b/cmd/layotto_without_xds/main.go
index 243e177fc4..6ae277b287 100644
--- a/cmd/layotto_without_xds/main.go
+++ b/cmd/layotto_without_xds/main.go
@@ -28,6 +28,8 @@ import (
aliyun_oss "mosn.io/layotto/components/oss/aliyun"
+ ceph_oss "mosn.io/layotto/components/oss/ceph"
+
"mosn.io/layotto/components/file/aliyun"
aws_file "mosn.io/layotto/components/file/aws"
"mosn.io/layotto/components/file/minio"
@@ -403,6 +405,7 @@ func NewRuntimeGrpcServer(data json.RawMessage, opts ...grpc.ServerOption) (mgrp
runtime.WithOssFactory(
oss.NewFactory("aws.oss", aws_oss.NewAwsOss),
oss.NewFactory("aliyun.oss", aliyun_oss.NewAliyunOss),
+ oss.NewFactory("ceph.oss", ceph_oss.NewCephOss),
),
// Sequencer
diff --git a/components/oss/ceph/option.go b/components/oss/ceph/option.go
new file mode 100644
index 0000000000..c97cffb309
--- /dev/null
+++ b/components/oss/ceph/option.go
@@ -0,0 +1,43 @@
+/*
+* Copyright 2021 Layotto Authors
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+ */
+
+package ceph
+
+import (
+ "time"
+
+ "github.com/jinzhu/copier"
+)
+
+var (
+ int642time = copier.TypeConverter{
+ SrcType: int64(0),
+ DstType: &time.Time{},
+ Fn: func(src interface{}) (interface{}, error) {
+ s, _ := src.(int64)
+ t := time.Unix(s, 0)
+ return &t, nil
+ },
+ }
+ time2int64 = copier.TypeConverter{
+ SrcType: &time.Time{},
+ DstType: int64(0),
+ Fn: func(src interface{}) (interface{}, error) {
+ s, _ := src.(*time.Time)
+ return s.Unix(), nil
+ },
+ }
+)
diff --git a/components/oss/ceph/option_test.go b/components/oss/ceph/option_test.go
new file mode 100644
index 0000000000..d2a2c39652
--- /dev/null
+++ b/components/oss/ceph/option_test.go
@@ -0,0 +1,52 @@
+/*
+* Copyright 2021 Layotto Authors
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+ */
+
+package ceph
+
+import (
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+
+ "github.com/jinzhu/copier"
+)
+
+func TestCopierOption(t *testing.T) {
+ type ValueWithInt64 struct {
+ TestString string
+ TestInt64toTime int64
+ }
+
+ type ValueWithTimer struct {
+ TestString *string
+ TestInt64toTime *time.Time
+ }
+ timer := time.Now().Unix()
+ srcValue := &ValueWithInt64{TestInt64toTime: timer}
+ destValue := &ValueWithTimer{}
+ err := copier.CopyWithOption(destValue, srcValue, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{int642time}})
+ assert.Nil(t, err)
+ assert.Nil(t, destValue.TestString)
+ assert.Equal(t, timer, destValue.TestInt64toTime.Unix())
+
+ ti := time.Now()
+ src := &ValueWithTimer{TestInt64toTime: &ti}
+ dst := &ValueWithInt64{}
+ err = copier.CopyWithOption(dst, src, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{time2int64}})
+ assert.Nil(t, err)
+ assert.Equal(t, ti.Unix(), dst.TestInt64toTime)
+}
diff --git a/components/oss/ceph/oss.go b/components/oss/ceph/oss.go
new file mode 100644
index 0000000000..da71977100
--- /dev/null
+++ b/components/oss/ceph/oss.go
@@ -0,0 +1,649 @@
+/*
+* Copyright 2021 Layotto Authors
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+ */
+
+package ceph
+
+import (
+ "bytes"
+ "context"
+ "encoding/json"
+ "errors"
+ "fmt"
+ "strings"
+ "time"
+
+ "github.com/aws/aws-sdk-go-v2/aws"
+ v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
+ aws_config "github.com/aws/aws-sdk-go-v2/config"
+ "github.com/aws/aws-sdk-go-v2/credentials"
+ "github.com/aws/aws-sdk-go-v2/feature/s3/manager"
+ "github.com/aws/aws-sdk-go-v2/service/s3"
+ "github.com/aws/aws-sdk-go-v2/service/s3/types"
+ "github.com/jinzhu/copier"
+ "mosn.io/pkg/log"
+
+ "mosn.io/layotto/components/oss"
+ "mosn.io/layotto/components/pkg/utils"
+)
+
+type CephOss struct {
+ client *s3.Client
+ basicConf json.RawMessage
+}
+
+func NewCephOss() oss.Oss {
+ return &CephOss{}
+}
+
+func (c *CephOss) Init(ctx context.Context, config *oss.Config) error {
+ c.basicConf = config.Metadata[oss.BasicConfiguration]
+ m := &utils.OssMetadata{}
+ err := json.Unmarshal(c.basicConf, &m)
+ if err != nil {
+ return oss.ErrInvalid
+ }
+
+ customResolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
+ return aws.Endpoint{
+ URL: m.Endpoint,
+ }, nil
+ })
+ optFunc := []func(options *aws_config.LoadOptions) error{
+ aws_config.WithRegion(m.Region),
+ aws_config.WithCredentialsProvider(credentials.StaticCredentialsProvider{
+ Value: aws.Credentials{
+ AccessKeyID: m.AccessKeyID, SecretAccessKey: m.AccessKeySecret,
+ Source: "provider",
+ },
+ }),
+ aws_config.WithEndpointResolverWithOptions(customResolver),
+ }
+ cfg, err := aws_config.LoadDefaultConfig(context.TODO(), optFunc...)
+ if err != nil {
+ return err
+ }
+ client := s3.NewFromConfig(cfg, func(options *s3.Options) {
+ options.UsePathStyle = true
+ })
+ c.client = client
+ return nil
+}
+
+func (c *CephOss) GetObject(ctx context.Context, req *oss.GetObjectInput) (*oss.GetObjectOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ input := &s3.GetObjectInput{}
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ ob, err := client.GetObject(context.TODO(), input)
+ if err != nil {
+ return nil, err
+ }
+
+ out := &oss.GetObjectOutput{}
+ err = copier.Copy(out, ob)
+ if err != nil {
+ return nil, err
+ }
+ out.DataStream = ob.Body
+ return out, nil
+}
+
+func (c *CephOss) PutObject(ctx context.Context, req *oss.PutObjectInput) (*oss.PutObjectOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ input := &s3.PutObjectInput{}
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ input.Body = req.DataStream
+ uploader := manager.NewUploader(client)
+ resp, err := uploader.Upload(context.TODO(), input)
+ if err != nil {
+ return nil, err
+ }
+
+ out := &oss.PutObjectOutput{}
+ err = copier.Copy(out, resp)
+ if err != nil {
+ return nil, err
+ }
+ return out, err
+}
+
+func (c *CephOss) DeleteObject(ctx context.Context, req *oss.DeleteObjectInput) (*oss.DeleteObjectOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ input := &s3.DeleteObjectInput{
+ Bucket: &req.Bucket,
+ Key: &req.Key,
+ }
+ resp, err := client.DeleteObject(ctx, input)
+ if err != nil {
+ return nil, err
+ }
+
+ versionId := ""
+ if resp.VersionId != nil {
+ versionId = *resp.VersionId
+ }
+ return &oss.DeleteObjectOutput{DeleteMarker: resp.DeleteMarker, RequestCharged: string(resp.RequestCharged), VersionId: versionId}, err
+}
+
+func (c *CephOss) PutObjectTagging(ctx context.Context, req *oss.PutObjectTaggingInput) (*oss.PutObjectTaggingOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ input := &s3.PutObjectTaggingInput{Tagging: &types.Tagging{}}
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ for k, v := range req.Tags {
+ k, v := k, v
+ input.Tagging.TagSet = append(input.Tagging.TagSet, types.Tag{Key: &k, Value: &v})
+ }
+ _, err = client.PutObjectTagging(ctx, input)
+
+ return &oss.PutObjectTaggingOutput{}, err
+}
+
+func (c *CephOss) DeleteObjectTagging(ctx context.Context, req *oss.DeleteObjectTaggingInput) (*oss.DeleteObjectTaggingOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ input := &s3.DeleteObjectTaggingInput{}
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ resp, err := client.DeleteObjectTagging(ctx, input)
+ if err != nil {
+ return nil, err
+ }
+
+ versionId := ""
+ if resp.VersionId != nil {
+ versionId = *resp.VersionId
+ }
+ return &oss.DeleteObjectTaggingOutput{VersionId: versionId}, err
+}
+
+func (c *CephOss) GetObjectTagging(ctx context.Context, req *oss.GetObjectTaggingInput) (*oss.GetObjectTaggingOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ input := &s3.GetObjectTaggingInput{}
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ resp, err := client.GetObjectTagging(ctx, input)
+ if err != nil {
+ return nil, err
+ }
+
+ output := &oss.GetObjectTaggingOutput{Tags: map[string]string{}}
+ for _, tags := range resp.TagSet {
+ output.Tags[*tags.Key] = *tags.Value
+ }
+ return output, err
+}
+
+func (c *CephOss) CopyObject(ctx context.Context, req *oss.CopyObjectInput) (*oss.CopyObjectOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ if req.CopySource == nil {
+ return nil, errors.New("must specific copy_source")
+ }
+
+ input := &s3.CopyObjectInput{}
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{int642time}})
+ if err != nil {
+ return nil, err
+ }
+ copySource := req.CopySource.CopySourceBucket + "/" + req.CopySource.CopySourceKey
+ if req.CopySource.CopySourceVersionId != "" {
+ copySource += "?versionId=" + req.CopySource.CopySourceVersionId
+ }
+ input.CopySource = ©Source
+ resp, err := client.CopyObject(context.TODO(), input)
+ if err != nil {
+ return nil, err
+ }
+
+ out := &oss.CopyObjectOutput{}
+ err = copier.CopyWithOption(out, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ return out, err
+}
+
+func (c *CephOss) DeleteObjects(ctx context.Context, req *oss.DeleteObjectsInput) (*oss.DeleteObjectsOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ input := &s3.DeleteObjectsInput{
+ Bucket: &req.Bucket,
+ Delete: &types.Delete{},
+ }
+ if req.Delete != nil {
+ for _, v := range req.Delete.Objects {
+ object := &types.ObjectIdentifier{}
+ err = copier.CopyWithOption(object, v, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ input.Delete.Objects = append(input.Delete.Objects, *object)
+ }
+ }
+ resp, err := client.DeleteObjects(ctx, input)
+ if err != nil {
+ return nil, err
+ }
+
+ output := &oss.DeleteObjectsOutput{}
+ copier.Copy(output, resp)
+ return output, err
+}
+
+func (c *CephOss) ListObjects(ctx context.Context, req *oss.ListObjectsInput) (*oss.ListObjectsOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ input := &s3.ListObjectsInput{}
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ resp, err := client.ListObjects(ctx, input)
+ if err != nil {
+ return nil, err
+ }
+
+ output := &oss.ListObjectsOutput{}
+ err = copier.CopyWithOption(output, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{time2int64}})
+ // if not return NextMarker, use the value of the last Key in the response as the marker
+ if output.IsTruncated && output.NextMarker == "" {
+ index := len(output.Contents) - 1
+ output.NextMarker = output.Contents[index].Key
+ }
+ return output, err
+}
+
+func (c *CephOss) GetObjectCannedAcl(ctx context.Context, req *oss.GetObjectCannedAclInput) (*oss.GetObjectCannedAclOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ input := &s3.GetObjectAclInput{}
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ resp, err := client.GetObjectAcl(context.TODO(), input)
+ if err != nil {
+ return nil, err
+ }
+
+ out := &oss.GetObjectCannedAclOutput{}
+ err = copier.CopyWithOption(out, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ bs, _ := json.Marshal(resp.Grants)
+ var bf bytes.Buffer
+ err = json.Indent(&bf, bs, "", "\t")
+ if err != nil {
+ return nil, err
+ }
+ out.CannedAcl = bf.String()
+ return out, nil
+}
+
+func (c *CephOss) PutObjectCannedAcl(ctx context.Context, req *oss.PutObjectCannedAclInput) (*oss.PutObjectCannedAclOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+ input := &s3.PutObjectAclInput{Bucket: &req.Bucket, Key: &req.Key, ACL: types.ObjectCannedACL(req.Acl)}
+ resp, err := client.PutObjectAcl(ctx, input)
+ if err != nil {
+ return nil, err
+ }
+ return &oss.PutObjectCannedAclOutput{RequestCharged: string(resp.RequestCharged)}, err
+}
+
+
+func (c *CephOss) CreateMultipartUpload(ctx context.Context, req *oss.CreateMultipartUploadInput) (*oss.CreateMultipartUploadOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ input := &s3.CreateMultipartUploadInput{}
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{int642time}})
+ if err != nil {
+ log.DefaultLogger.Errorf("copy CreateMultipartUploadInput fail, err: %+v", err)
+ return nil, err
+ }
+ resp, err := client.CreateMultipartUpload(ctx, input)
+ if err != nil {
+ return nil, err
+ }
+
+ output := &oss.CreateMultipartUploadOutput{}
+ copier.CopyWithOption(output, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{time2int64}})
+ return output, err
+}
+
+func (c *CephOss) UploadPart(ctx context.Context, req *oss.UploadPartInput) (*oss.UploadPartOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ input := &s3.UploadPartInput{}
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ input.Body = req.DataStream
+ resp, err := client.UploadPart(ctx, input, s3.WithAPIOptions(v4.SwapComputePayloadSHA256ForUnsignedPayloadMiddleware))
+ if err != nil {
+ return nil, err
+ }
+
+ output := &oss.UploadPartOutput{}
+ err = copier.Copy(output, resp)
+ if err != nil {
+ return nil, err
+ }
+ return output, err
+}
+
+func (c *CephOss) UploadPartCopy(ctx context.Context, req *oss.UploadPartCopyInput) (*oss.UploadPartCopyOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ input := &s3.UploadPartCopyInput{}
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ copySource := req.CopySource.CopySourceBucket + "/" + req.CopySource.CopySourceKey
+ if req.CopySource.CopySourceVersionId != "" {
+ copySource += "?versionId=" + req.CopySource.CopySourceVersionId
+ }
+ input.CopySource = ©Source
+ resp, err := client.UploadPartCopy(context.TODO(), input)
+ if err != nil {
+ return nil, err
+ }
+
+ out := &oss.UploadPartCopyOutput{}
+ err = copier.CopyWithOption(out, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ return out, err
+}
+
+func (c *CephOss) CompleteMultipartUpload(ctx context.Context, req *oss.CompleteMultipartUploadInput) (*oss.CompleteMultipartUploadOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ input := &s3.CompleteMultipartUploadInput{MultipartUpload: &types.CompletedMultipartUpload{}}
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ resp, err := client.CompleteMultipartUpload(ctx, input)
+ if err != nil {
+ return nil, err
+ }
+
+ output := &oss.CompleteMultipartUploadOutput{}
+ err = copier.Copy(output, resp)
+ return output, err
+}
+
+func (c *CephOss) AbortMultipartUpload(ctx context.Context, req *oss.AbortMultipartUploadInput) (*oss.AbortMultipartUploadOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ input := &s3.AbortMultipartUploadInput{}
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ resp, err := client.AbortMultipartUpload(ctx, input)
+ if err != nil {
+ return nil, err
+ }
+
+ output := &oss.AbortMultipartUploadOutput{
+ RequestCharged: string(resp.RequestCharged),
+ }
+ return output, err
+}
+
+func (c *CephOss) ListParts(ctx context.Context, req *oss.ListPartsInput) (*oss.ListPartsOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ input := &s3.ListPartsInput{}
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ resp, err := client.ListParts(ctx, input)
+ if err != nil {
+ return nil, err
+ }
+
+ output := &oss.ListPartsOutput{}
+ err = copier.CopyWithOption(output, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ return output, err
+}
+
+func (c *CephOss) ListMultipartUploads(ctx context.Context, req *oss.ListMultipartUploadsInput) (*oss.ListMultipartUploadsOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ input := &s3.ListMultipartUploadsInput{}
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ resp, err := client.ListMultipartUploads(ctx, input)
+ if err != nil {
+ return nil, err
+ }
+
+ output := &oss.ListMultipartUploadsOutput{CommonPrefixes: []string{}, Uploads: []*oss.MultipartUpload{}}
+ err = copier.Copy(output, resp)
+ if err != nil {
+ return nil, err
+ }
+ for _, v := range resp.CommonPrefixes {
+ output.CommonPrefixes = append(output.CommonPrefixes, *v.Prefix)
+ }
+ for _, v := range resp.Uploads {
+ upload := &oss.MultipartUpload{}
+ copier.CopyWithOption(upload, v, copier.Option{IgnoreEmpty: true, DeepCopy: true})
+ output.Uploads = append(output.Uploads, upload)
+ }
+ return output, err
+}
+
+func (c *CephOss) ListObjectVersions(ctx context.Context, req *oss.ListObjectVersionsInput) (*oss.ListObjectVersionsOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+
+ input := &s3.ListObjectVersionsInput{}
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ resp, err := client.ListObjectVersions(ctx, input)
+ if err != nil {
+ return nil, err
+ }
+
+ output := &oss.ListObjectVersionsOutput{}
+ err = copier.Copy(output, resp)
+ if err != nil {
+ return nil, err
+ }
+ for _, v := range resp.CommonPrefixes {
+ output.CommonPrefixes = append(output.CommonPrefixes, *v.Prefix)
+ }
+ for _, v := range resp.DeleteMarkers {
+ entry := &oss.DeleteMarkerEntry{IsLatest: v.IsLatest, Key: *v.Key, Owner: &oss.Owner{DisplayName: *v.Owner.DisplayName, ID: *v.Owner.ID}, VersionId: *v.VersionId}
+ output.DeleteMarkers = append(output.DeleteMarkers, entry)
+ }
+ for _, v := range resp.Versions {
+ version := &oss.ObjectVersion{}
+ copier.CopyWithOption(version, v, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{time2int64}})
+ output.Versions = append(output.Versions, version)
+ }
+ return output, err
+}
+
+func (c *CephOss) HeadObject(ctx context.Context, req *oss.HeadObjectInput) (*oss.HeadObjectOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+ input := &s3.HeadObjectInput{}
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ resp, err := client.HeadObject(ctx, input)
+ if err != nil {
+ return nil, err
+ }
+ return &oss.HeadObjectOutput{ResultMetadata: resp.Metadata}, nil
+}
+
+func (c *CephOss) IsObjectExist(ctx context.Context, req *oss.IsObjectExistInput) (*oss.IsObjectExistOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+ input := &s3.HeadObjectInput{Bucket: &req.Bucket, Key: &req.Key}
+ _, err = client.HeadObject(ctx, input)
+ if err != nil {
+ errorMsg := err.Error()
+ if strings.Contains(errorMsg, "StatusCode: 404") {
+ return &oss.IsObjectExistOutput{FileExist: false}, nil
+ }
+ return nil, err
+ }
+ return &oss.IsObjectExistOutput{FileExist: true}, nil
+}
+
+func (c *CephOss) SignURL(ctx context.Context, req *oss.SignURLInput) (*oss.SignURLOutput, error) {
+ client, err := c.getClient()
+ if err != nil {
+ return nil, err
+ }
+ resignClient := s3.NewPresignClient(client)
+ switch strings.ToUpper(req.Method) {
+ case "GET":
+ input := &s3.GetObjectInput{Bucket: &req.Bucket, Key: &req.Key}
+ resp, err := resignClient.PresignGetObject(ctx, input, s3.WithPresignExpires(time.Duration((req.ExpiredInSec)*int64(time.Second))))
+ if err != nil {
+ return nil, err
+ }
+ return &oss.SignURLOutput{SignedUrl: resp.URL}, nil
+ case "PUT":
+ input := &s3.PutObjectInput{Bucket: &req.Bucket, Key: &req.Key}
+ resp, err := resignClient.PresignPutObject(ctx, input, s3.WithPresignExpires(time.Duration(req.ExpiredInSec*int64(time.Second))))
+ if err != nil {
+ return nil, err
+ }
+ return &oss.SignURLOutput{SignedUrl: resp.URL}, nil
+ default:
+ return nil, fmt.Errorf("not supported method %+v now", req.Method)
+ }
+}
+
+func (c *CephOss) RestoreObject(ctx context.Context, req *oss.RestoreObjectInput) (*oss.RestoreObjectOutput, error) {
+ return nil, errors.New("RestoreObject method not supported on AWS")
+}
+
+func (c *CephOss) UpdateDownloadBandwidthRateLimit(ctx context.Context, req *oss.UpdateBandwidthRateLimitInput) error {
+ return errors.New("UpdateDownloadBandwidthRateLimit method not supported now")
+}
+
+func (c *CephOss) UpdateUploadBandwidthRateLimit(ctx context.Context, req *oss.UpdateBandwidthRateLimitInput) error {
+ return errors.New("UpdateUploadBandwidthRateLimit method not supported now")
+}
+func (c *CephOss) AppendObject(ctx context.Context, req *oss.AppendObjectInput) (*oss.AppendObjectOutput, error) {
+ return nil, errors.New("AppendObject method not supported on AWS")
+}
+
+func (c *CephOss) getClient() (*s3.Client, error) {
+ if c.client == nil {
+ return nil, utils.ErrNotInitClient
+ }
+ return c.client, nil
+}
diff --git a/components/oss/ceph/oss_test.go b/components/oss/ceph/oss_test.go
new file mode 100644
index 0000000000..e660785836
--- /dev/null
+++ b/components/oss/ceph/oss_test.go
@@ -0,0 +1,535 @@
+/*
+* Copyright 2021 Layotto Authors
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+ */
+
+package ceph
+
+import (
+ "bytes"
+ "context"
+ "encoding/json"
+ "errors"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "log"
+ "os"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "mosn.io/pkg/buffer"
+
+ "mosn.io/layotto/components/oss"
+)
+
+const (
+ confWithoutUidAndBucket = `
+ {
+ "endpoint": "http://10.211.55.13:7480",
+ "accessKeyID": "QRF1XGIPZ9TB094ETTWU",
+ "accessKeySecret": "6gF61QLVduFIFDKPBzc6gKkOsQY2HpAt7vM5mRAA"
+ }
+ `
+)
+
+func TestCephDefaultInitFunc(t *testing.T) {
+ a := &CephOss{}
+ err := a.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte("hello")}})
+ assert.Equal(t, err, oss.ErrInvalid)
+ assert.Nil(t, a.client)
+}
+
+func TestCephOss_GetObject(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ req := &oss.GetObjectInput{
+ Bucket: "test.bucket",
+ Key: "TestPut.txt",
+ }
+ out, err := cephOss.GetObject(context.Background(), req)
+ assert.Nil(t, err)
+
+ data, err := ioutil.ReadAll(out.DataStream)
+ assert.Nil(t, err)
+ fmt.Println(string(data))
+}
+
+func TestCephOss_PutObject(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ reader, err := os.Open("/Users/apple/Desktop/untitled 3.txt")
+ assert.Nil(t, err)
+ req := &oss.PutObjectInput{
+ DataStream: reader,
+ Bucket: "test.bucket",
+ Key: "TestPut.txt",
+ }
+
+ out, err := cephOss.PutObject(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+}
+
+func TestCephOss_DeleteObject(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ req := &oss.DeleteObjectInput{
+ Bucket: "test.bucket",
+ Key: "TestPut.txt",
+ }
+
+ out, err := cephOss.DeleteObject(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+}
+
+func TestCephOss_DeleteObjects(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ d := &oss.Delete{
+ Objects: []*oss.ObjectIdentifier{
+ {Key: "TestPut.txt"},
+ {Key: "a.txt"},
+ },
+ }
+ req := &oss.DeleteObjectsInput{
+ Bucket: "test.bucket",
+ Delete: d,
+ }
+ out, err := cephOss.DeleteObjects(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+}
+
+func TestCephOss_ListObjects(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ req := &oss.ListObjectsInput{
+ Bucket: "test.bucket",
+ }
+
+ out, err := cephOss.ListObjects(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+}
+
+func TestCephOss_PutObjectTagging(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ tags := map[string]string{
+ "Test": "True",
+ "HAHA": "haha",
+ }
+ req := &oss.PutObjectTaggingInput{
+ Bucket: "test.bucket",
+ Key: "TestPut.txt",
+ Tags: tags,
+ }
+
+ out, err := cephOss.PutObjectTagging(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+}
+
+func TestCephOss_GetObjectTagging(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ req := &oss.GetObjectTaggingInput{
+ Bucket: "test.bucket",
+ Key: "TestPut.txt",
+ }
+
+ out, err := cephOss.GetObjectTagging(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+}
+
+func TestCephOss_DeleteObjectTagging(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ req := &oss.DeleteObjectTaggingInput{
+ Bucket: "test.bucket",
+ Key: "TestPut.txt",
+ }
+
+ out, err := cephOss.DeleteObjectTagging(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+}
+
+func TestCephOss_CopyObject(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ source := oss.CopySource{
+ CopySourceBucket: "test.bucket",
+ CopySourceKey: "haha.txt",
+ }
+ req := &oss.CopyObjectInput{
+ Bucket: "test.bucket",
+ Key: "b.txt",
+ CopySource: &source,
+ }
+
+ out, err := cephOss.CopyObject(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+}
+
+func TestCephOss_PutObjectCannedAcl(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ req := &oss.PutObjectCannedAclInput{
+ Bucket: "test.bucket",
+ Key: "TestPut.txt",
+ Acl: "private",
+ }
+
+ out, err := cephOss.PutObjectCannedAcl(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+}
+
+func TestCephOss_GetObjectCannedAcl(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ req := &oss.GetObjectCannedAclInput{
+ Bucket: "test.bucket",
+ Key: "TestPut.txt",
+ }
+
+ out, err := cephOss.GetObjectCannedAcl(context.Background(), req)
+ assert.Nil(t, err)
+ fmt.Printf("%+v\n", out)
+}
+
+func TestCephOss_MultipartUploadWithAbort(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ key := "TestMultipartUploadWithAbort"
+ uploadId := createMultipartUpload(t, cephOss, key)
+
+ f, err := os.Open("/Users/apple/Downloads/TestMultipartUpload.zip")
+ assert.Nil(t, err)
+ uploadPart(t, cephOss, key, uploadId, 1, f)
+
+ abortMultipartUpload(t, cephOss, key, uploadId)
+}
+
+func TestCephOss_MultipartUploadWithComplete(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ key := "TestMultipartUploadWithComplete"
+ uploadId := createMultipartUpload(t, cephOss, key)
+ f, err := os.Open("/Users/apple/Downloads/TestMultipartUpload.zip")
+ assert.Nil(t, err)
+ go listMultipartUploads(t, cephOss)
+ eTag := uploadPart(t, cephOss, key, uploadId, 1, f)
+ listParts(t, cephOss, key, uploadId)
+
+ completeMultipartUpload(t, cephOss, key, uploadId, eTag, 1)
+}
+
+func TestCephOss_UploadPartCopy(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ key := "TestUploadPartCopy"
+ uploadId := createMultipartUpload(t, cephOss, key)
+ assert.Nil(t, err)
+ eTag := uploadPartCopy(t, cephOss, uploadId, 1)
+
+ completeMultipartUpload(t, cephOss, key, uploadId, eTag, 1)
+}
+
+func TestCephOss_ListObjectVersions(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ req := &oss.ListObjectVersionsInput{
+ Bucket: "test.bucket",
+ }
+
+ out, err := cephOss.ListObjectVersions(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+}
+
+func TestCephOss_HeadObject(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ req := &oss.HeadObjectInput{
+ Bucket: "test.bucket",
+ Key: "TestPut.txt",
+ }
+
+ out, err := cephOss.HeadObject(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+}
+
+func TestCephOss_IsObjectExist(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ req := &oss.IsObjectExistInput{
+ Bucket: "test.bucket",
+ Key: "a.txt",
+ }
+
+ out, err := cephOss.IsObjectExist(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+}
+
+func TestCephOss_SignURL(t *testing.T) {
+ cephOss := NewCephOss()
+ err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ req := &oss.SignURLInput{
+ Bucket: "test.bucket",
+ Key: "TestPut.txt",
+ Method: "Get",
+ }
+
+ out, err := cephOss.SignURL(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+}
+
+func createMultipartUpload(t *testing.T, cephOss oss.Oss, key string) (uploadId string) {
+ fmt.Println("=====[CreateMultipartUpload]")
+ req := &oss.CreateMultipartUploadInput{
+ Bucket: "test.bucket",
+ Key: key,
+ }
+ out, err := cephOss.CreateMultipartUpload(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+ return out.UploadId
+}
+func uploadPart(t *testing.T, cephOss oss.Oss, key string, uploadId string, partNumber int32, dataStream io.Reader) (etag string) {
+ assert.True(t, (1 <= partNumber) && (partNumber <= 10000))
+ req := &oss.UploadPartInput{
+ Bucket: "test.bucket",
+ Key: key,
+ UploadId: uploadId,
+ PartNumber: partNumber,
+ DataStream: dataStream,
+ }
+ out, err := cephOss.UploadPart(context.Background(), req)
+ assert.Nil(t, err)
+ fmt.Printf("=====[UploadPart %d]\n", partNumber)
+ printOutput(out)
+ return out.ETag
+}
+func uploadPartCopy(t *testing.T, cephOss oss.Oss, uploadId string, partNumber int32) (etag string) {
+ assert.True(t, (1 <= partNumber) && (partNumber <= 10000))
+ copySource := oss.CopySource{
+ CopySourceBucket: "test.bucket",
+ CopySourceKey: "TestMultipartUpload",
+ }
+ req := &oss.UploadPartCopyInput{
+ Bucket: "test.bucket",
+ Key: "TestUploadPartCopy",
+ UploadId: uploadId,
+ PartNumber: partNumber,
+ CopySource: ©Source,
+ }
+ out, err := cephOss.UploadPartCopy(context.Background(), req)
+ assert.Nil(t, err)
+ fmt.Printf("=====[UploadPartCopy %d]\n", partNumber)
+ printOutput(out)
+ return out.CopyPartResult.ETag
+}
+func abortMultipartUpload(t *testing.T, cephOss oss.Oss, key string, uploadId string) {
+ fmt.Println("=====[AbortMultipartUpload]")
+ req := &oss.AbortMultipartUploadInput{
+ Bucket: "test.bucket",
+ Key: key,
+ UploadId: uploadId,
+ }
+ out, err := cephOss.AbortMultipartUpload(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+}
+func completeMultipartUpload(t *testing.T, cephOss oss.Oss, key string, uploadId string, eTag string, partNumber int32) {
+ fmt.Println("=====[CompleteMultipartUpload]")
+ multipartUpload := &oss.CompletedMultipartUpload{
+ Parts: []*oss.CompletedPart{
+ {ETag: eTag, PartNumber: partNumber},
+ },
+ }
+ req := &oss.CompleteMultipartUploadInput{
+ Bucket: "test.bucket",
+ Key: key,
+ UploadId: uploadId,
+ MultipartUpload: multipartUpload,
+ }
+ out, err := cephOss.CompleteMultipartUpload(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+}
+func listMultipartUploads(t *testing.T, cephOss oss.Oss) {
+ time.Sleep(time.Second)
+ fmt.Println("=====[ListMultipartUploads]")
+ req := &oss.ListMultipartUploadsInput{
+ Bucket: "test.bucket",
+ }
+ out, err := cephOss.ListMultipartUploads(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+}
+func listParts(t *testing.T, cephOss oss.Oss, key, uploadId string) {
+ time.Sleep(time.Second)
+ fmt.Println("=====[ListParts]")
+ req := &oss.ListPartsInput{
+ Bucket: "test.bucket",
+ Key: key,
+ UploadId: uploadId,
+ }
+ out, err := cephOss.ListParts(context.Background(), req)
+ assert.Nil(t, err)
+ printOutput(out)
+}
+
+func printOutput(v interface{}) {
+ bs, _ := json.Marshal(v)
+ var bf bytes.Buffer
+ err := json.Indent(&bf, bs, "", "\t")
+ if err != nil {
+ log.Fatalln("ERROR:", err)
+ return
+ }
+ fmt.Println(bf.String())
+}
+
+func TestCephOss(t *testing.T) {
+ instance := &CephOss{}
+ err := instance.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
+ assert.Nil(t, err)
+
+ appendObjectResp, err := instance.AppendObject(context.TODO(), &oss.AppendObjectInput{})
+ assert.Equal(t, errors.New("AppendObject method not supported on AWS"), err)
+ assert.Nil(t, appendObjectResp)
+
+ _, err = instance.AbortMultipartUpload(context.TODO(), &oss.AbortMultipartUploadInput{})
+ assert.NotNil(t, err)
+
+ _, err = instance.CompleteMultipartUpload(context.TODO(), &oss.CompleteMultipartUploadInput{})
+ assert.NotNil(t, err)
+
+ _, err = instance.CopyObject(context.TODO(), &oss.CopyObjectInput{})
+ assert.Equal(t, errors.New("must specific copy_source"), err)
+
+ _, err = instance.CopyObject(context.TODO(), &oss.CopyObjectInput{
+ CopySource: &oss.CopySource{CopySourceBucket: "bucket", CopySourceKey: "key"},
+ })
+ assert.NotEqual(t, errors.New("must specific copy_source"), err)
+ _, err = instance.CreateMultipartUpload(context.TODO(), &oss.CreateMultipartUploadInput{})
+ assert.NotNil(t, err)
+
+ _, err = instance.DeleteObject(context.TODO(), &oss.DeleteObjectInput{})
+ assert.NotNil(t, err)
+ _, err = instance.DeleteObjects(context.TODO(), &oss.DeleteObjectsInput{
+ Delete: &oss.Delete{Objects: []*oss.ObjectIdentifier{{Key: "object", VersionId: "version"}}},
+ })
+ assert.NotNil(t, err)
+ _, err = instance.DeleteObjectTagging(context.TODO(), &oss.DeleteObjectTaggingInput{})
+ assert.NotNil(t, err)
+
+ _, err = instance.GetObject(context.TODO(), &oss.GetObjectInput{})
+ assert.NotNil(t, err)
+ _, err = instance.GetObjectCannedAcl(context.TODO(), &oss.GetObjectCannedAclInput{})
+ assert.NotNil(t, err)
+ _, err = instance.GetObjectTagging(context.TODO(), &oss.GetObjectTaggingInput{})
+ assert.NotNil(t, err)
+
+ _, err = instance.HeadObject(context.TODO(), &oss.HeadObjectInput{})
+ assert.NotNil(t, err)
+
+ _, err = instance.IsObjectExist(context.TODO(), &oss.IsObjectExistInput{})
+ assert.NotNil(t, err)
+
+ _, err = instance.ListParts(context.TODO(), &oss.ListPartsInput{})
+ assert.NotNil(t, err)
+
+ _, err = instance.ListMultipartUploads(context.TODO(), &oss.ListMultipartUploadsInput{})
+ assert.NotNil(t, err)
+ _, err = instance.ListObjects(context.TODO(), &oss.ListObjectsInput{})
+ assert.NotNil(t, err)
+ _, err = instance.ListObjectVersions(context.TODO(), &oss.ListObjectVersionsInput{})
+ assert.NotNil(t, err)
+
+ stream := buffer.NewIoBufferString("hello")
+ _, err = instance.PutObject(context.TODO(), &oss.PutObjectInput{DataStream: stream})
+ assert.NotNil(t, err)
+ _, err = instance.PutObjectCannedAcl(context.TODO(), &oss.PutObjectCannedAclInput{})
+ assert.NotNil(t, err)
+ _, err = instance.PutObjectTagging(context.TODO(), &oss.PutObjectTaggingInput{})
+ assert.NotNil(t, err)
+
+ _, err = instance.RestoreObject(context.TODO(), &oss.RestoreObjectInput{})
+ assert.NotNil(t, err)
+
+ _, err = instance.SignURL(context.TODO(), &oss.SignURLInput{})
+ assert.NotNil(t, err)
+
+ _, err = instance.UploadPartCopy(context.TODO(), &oss.UploadPartCopyInput{
+ CopySource: &oss.CopySource{CopySourceBucket: "bucket", CopySourceKey: "key"},
+ })
+ assert.NotNil(t, err)
+
+ _, err = instance.UploadPart(context.TODO(), &oss.UploadPartInput{})
+ assert.NotNil(t, err)
+
+ err = instance.UpdateDownloadBandwidthRateLimit(context.TODO(), &oss.UpdateBandwidthRateLimitInput{})
+ assert.NotNil(t, err)
+
+ err = instance.UpdateUploadBandwidthRateLimit(context.TODO(), &oss.UpdateBandwidthRateLimitInput{})
+ assert.NotNil(t, err)
+}
diff --git a/components/oss/oss.go b/components/oss/oss.go
index 39c42d35ba..d069be2326 100644
--- a/components/oss/oss.go
+++ b/components/oss/oss.go
@@ -118,6 +118,7 @@ type PutObjectInput struct {
SignedUrl string `json:"signed_url,omitempty"`
Meta map[string]string `json:"meta,omitempty"`
Tagging map[string]string `json:"tagging,omitempty"`
+ StorageClass string `json:"storage_class,omitempty"`
}
type PutObjectOutput struct {
@@ -274,10 +275,59 @@ type PutObjectCannedAclOutput struct {
RequestCharged string `json:"request_charged,omitempty"`
}
+type GlacierJobParameters struct {
+ Tier string `json:"tier,omitempty"`
+}
+type OutputLocation struct {
+ BucketName string `json:"bucket_name,omitempty"`
+ Prefix string `json:"prefix,omitempty"`
+}
+type CSVInput struct {
+ AllowQuotedRecordDelimiter bool `json:"allow_quoted_record_delimiter,omitempty"`
+ Comments string `json:"comments,omitempty"`
+ FieldDelimiter string `json:"field_delimiter,omitempty"`
+ FileHeaderInfo string `json:"file_header_info,omitempty"`
+ QuoteCharacter string `json:"quote_character,omitempty"`
+ QuoteEscapeCharacter string `json:"quote_escape_character,omitempty"`
+ RecordDelimiter string `json:"record_delimiter,omitempty"`
+}
+type InputSerialization struct {
+ CSV CSVInput `json:"csv,omitempty"`
+ CompressionType string `json:"compression_type,omitempty"`
+ JSON string `json:"json,omitempty"`
+}
+type CSVOutput struct {
+ FieldDelimiter string `json:"field_delimiter,omitempty"`
+ QuoteCharacter string `json:"quote_character,omitempty"`
+ QuoteEscapeCharacter string `json:"quote_escape_character,omitempty"`
+ QuoteFields string `json:"quote_fields,omitempty"`
+ RecordDelimiter string `json:"record_delimiter,omitempty"`
+}
+type OutputSerialization struct {
+ Csv CSVOutput `json:"csv,omitempty"`
+ Json string `json:"json,omitempty"`
+}
+type SelectParameters struct {
+ Expression string `json:"expression,omitempty"`
+ ExpressionType string `json:"expression_type,omitempty"`
+ InputSerialization InputSerialization `json:"input_serialization,omitempty"`
+ OutputSerialization OutputSerialization `json:"output_serialization,omitempty"`
+}
+type RestoreRequest struct {
+ Days int32 `json:"days,omitempty"`
+ Description string `json:"description,omitempty"`
+ GlacierJobParameters GlacierJobParameters `json:"glacier_job_parameters,omitempty"`
+ OutputLocation OutputLocation `json:"output_location,omitempty"`
+ SelectParameters SelectParameters `json:"select_parameters,omitempty"`
+ Tier string `json:"tier,omitempty"`
+ Type string `json:"type,omitempty"`
+}
+
type RestoreObjectInput struct {
- Bucket string `json:"bucket,omitempty"`
- Key string `json:"key,omitempty"`
- VersionId string `json:"version_id,omitempty"`
+ Bucket string `json:"bucket,omitempty"`
+ Key string `json:"key,omitempty"`
+ RestoreRequest RestoreRequest `json:"restore_request,omitempty"`
+ VersionId string `json:"version_id,omitempty"`
}
type RestoreObjectOutput struct {
RequestCharged string `json:"request_charged,omitempty"`
diff --git a/spec/proto/extension/v1/s3/oss.pb.go b/spec/proto/extension/v1/s3/oss.pb.go
index f7b95045ef..b37c66a7ee 100644
--- a/spec/proto/extension/v1/s3/oss.pb.go
+++ b/spec/proto/extension/v1/s3/oss.pb.go
@@ -4,7 +4,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.28.0
+// protoc-gen-go v1.28.1
// protoc v3.17.3
// source: oss.proto
@@ -550,6 +550,8 @@ type PutObjectInput struct {
Meta map[string]string `protobuf:"bytes,13,rep,name=meta,proto3" json:"meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
// The tag-set for the object. The tag-set must be encoded as URL Query parameters.
Tagging map[string]string `protobuf:"bytes,14,rep,name=tagging,proto3" json:"tagging,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ // Storage class options.
+ StorageClass string `protobuf:"bytes,15,opt,name=storage_class,json=storageClass,proto3" json:"storage_class,omitempty"`
}
func (x *PutObjectInput) Reset() {
@@ -682,6 +684,13 @@ func (x *PutObjectInput) GetTagging() map[string]string {
return nil
}
+func (x *PutObjectInput) GetStorageClass() string {
+ if x != nil {
+ return x.StorageClass
+ }
+ return ""
+}
+
// PutObjectOutput
type PutObjectOutput struct {
state protoimpl.MessageState
@@ -2720,26 +2729,19 @@ func (x *PutObjectCannedAclOutput) GetRequestCharged() string {
return ""
}
-// RestoreObjectInput
-type RestoreObjectInput struct {
+// GlacierJobParameters
+type GlacierJobParameters struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Required. The name of oss store.
- StoreName string `protobuf:"bytes,1,opt,name=store_name,json=storeName,proto3" json:"store_name,omitempty"`
- // The bucket name containing the object
- // This member is required
- Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
- // Name of the object key.
+ // Retrieval tier at which the restore will be processed.
// This member is required.
- Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
- // VersionId used to reference a specific version of the object.
- VersionId string `protobuf:"bytes,5,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"`
+ Tier string `protobuf:"bytes,1,opt,name=tier,proto3" json:"tier,omitempty"`
}
-func (x *RestoreObjectInput) Reset() {
- *x = RestoreObjectInput{}
+func (x *GlacierJobParameters) Reset() {
+ *x = GlacierJobParameters{}
if protoimpl.UnsafeEnabled {
mi := &file_oss_proto_msgTypes[29]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2747,13 +2749,13 @@ func (x *RestoreObjectInput) Reset() {
}
}
-func (x *RestoreObjectInput) String() string {
+func (x *GlacierJobParameters) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*RestoreObjectInput) ProtoMessage() {}
+func (*GlacierJobParameters) ProtoMessage() {}
-func (x *RestoreObjectInput) ProtoReflect() protoreflect.Message {
+func (x *GlacierJobParameters) ProtoReflect() protoreflect.Message {
mi := &file_oss_proto_msgTypes[29]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2765,55 +2767,34 @@ func (x *RestoreObjectInput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use RestoreObjectInput.ProtoReflect.Descriptor instead.
-func (*RestoreObjectInput) Descriptor() ([]byte, []int) {
+// Deprecated: Use GlacierJobParameters.ProtoReflect.Descriptor instead.
+func (*GlacierJobParameters) Descriptor() ([]byte, []int) {
return file_oss_proto_rawDescGZIP(), []int{29}
}
-func (x *RestoreObjectInput) GetStoreName() string {
- if x != nil {
- return x.StoreName
- }
- return ""
-}
-
-func (x *RestoreObjectInput) GetBucket() string {
- if x != nil {
- return x.Bucket
- }
- return ""
-}
-
-func (x *RestoreObjectInput) GetKey() string {
- if x != nil {
- return x.Key
- }
- return ""
-}
-
-func (x *RestoreObjectInput) GetVersionId() string {
+func (x *GlacierJobParameters) GetTier() string {
if x != nil {
- return x.VersionId
+ return x.Tier
}
return ""
}
-// RestoreObjectOutput
-type RestoreObjectOutput struct {
+// OutPutLocation
+type OutputLocation struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // If present, indicates that the requester was successfully charged for the
- // request.
- RequestCharged string `protobuf:"bytes,1,opt,name=request_charged,json=requestCharged,proto3" json:"request_charged,omitempty"`
- // Indicates the path in the provided S3 output location where Select results will
- // be restored to.
- RestoreOutputPath string `protobuf:"bytes,2,opt,name=restore_output_path,json=restoreOutputPath,proto3" json:"restore_output_path,omitempty"`
+ // The name of the bucket where the restore results will be placed.
+ // This member is required.
+ BucketName string `protobuf:"bytes,1,opt,name=bucket_name,json=bucketName,proto3" json:"bucket_name,omitempty"`
+ // The prefix that is prepended to the restore results for this request.
+ // This member is required.
+ Prefix string `protobuf:"bytes,2,opt,name=prefix,proto3" json:"prefix,omitempty"`
}
-func (x *RestoreObjectOutput) Reset() {
- *x = RestoreObjectOutput{}
+func (x *OutputLocation) Reset() {
+ *x = OutputLocation{}
if protoimpl.UnsafeEnabled {
mi := &file_oss_proto_msgTypes[30]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2821,13 +2802,13 @@ func (x *RestoreObjectOutput) Reset() {
}
}
-func (x *RestoreObjectOutput) String() string {
+func (x *OutputLocation) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*RestoreObjectOutput) ProtoMessage() {}
+func (*OutputLocation) ProtoMessage() {}
-func (x *RestoreObjectOutput) ProtoReflect() protoreflect.Message {
+func (x *OutputLocation) ProtoReflect() protoreflect.Message {
mi := &file_oss_proto_msgTypes[30]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2839,112 +2820,70 @@ func (x *RestoreObjectOutput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use RestoreObjectOutput.ProtoReflect.Descriptor instead.
-func (*RestoreObjectOutput) Descriptor() ([]byte, []int) {
+// Deprecated: Use OutputLocation.ProtoReflect.Descriptor instead.
+func (*OutputLocation) Descriptor() ([]byte, []int) {
return file_oss_proto_rawDescGZIP(), []int{30}
}
-func (x *RestoreObjectOutput) GetRequestCharged() string {
+func (x *OutputLocation) GetBucketName() string {
if x != nil {
- return x.RequestCharged
+ return x.BucketName
}
return ""
}
-func (x *RestoreObjectOutput) GetRestoreOutputPath() string {
+func (x *OutputLocation) GetPrefix() string {
if x != nil {
- return x.RestoreOutputPath
+ return x.Prefix
}
return ""
}
-// CreateMultipartUploadInput
-type CreateMultipartUploadInput struct {
+// CSVInput
+type CSVInput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Required. The name of oss store.
- StoreName string `protobuf:"bytes,1,opt,name=store_name,json=storeName,proto3" json:"store_name,omitempty"`
- // The bucket name containing the object
- // This member is required
- Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
- // Name of the object key.
- // This member is required.
- Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
- // The canned ACL to apply to the object. This action is not supported by Amazon S3
- // on Outposts.
- Acl string `protobuf:"bytes,4,opt,name=acl,proto3" json:"acl,omitempty"`
- // Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption
- // with server-side encryption using AWS KMS (SSE-KMS). Setting this header to true
- // causes Amazon S3 to use an S3 Bucket Key for object encryption with SSE-KMS.
- // Specifying this header with a PUT action doesn’t affect bucket-level settings
- // for S3 Bucket Key.
- BucketKeyEnabled bool `protobuf:"varint,5,opt,name=bucket_key_enabled,json=bucketKeyEnabled,proto3" json:"bucket_key_enabled,omitempty"`
- // Specifies caching behavior along the request/reply chain
- CacheControl string `protobuf:"bytes,6,opt,name=cache_control,json=cacheControl,proto3" json:"cache_control,omitempty"`
- // Specifies presentational information for the object
- ContentDisposition string `protobuf:"bytes,7,opt,name=content_disposition,json=contentDisposition,proto3" json:"content_disposition,omitempty"`
- // Specifies what content encodings have been applied to the object and thus what
- // decoding mechanisms must be applied to obtain the media-type referenced by the
- // Content-Type header field.
- ContentEncoding string `protobuf:"bytes,8,opt,name=content_encoding,json=contentEncoding,proto3" json:"content_encoding,omitempty"`
- // The language the content is in.
- ContentLanguage string `protobuf:"bytes,9,opt,name=content_language,json=contentLanguage,proto3" json:"content_language,omitempty"`
- // A standard MIME type describing the format of the object data.
- ContentType string `protobuf:"bytes,10,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"`
- // The account ID of the expected bucket owner. If the bucket is owned by a
- // different account, the request fails with the HTTP status code 403 Forbidden
- // (access denied).
- ExpectedBucketOwner string `protobuf:"bytes,11,opt,name=expected_bucket_owner,json=expectedBucketOwner,proto3" json:"expected_bucket_owner,omitempty"`
- // The date and time at which the object is no longer cacheable.
- Expires int64 `protobuf:"varint,12,opt,name=expires,proto3" json:"expires,omitempty"`
- // Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object. This
- // action is not supported by Amazon S3 on Outposts.
- GrantFullControl string `protobuf:"bytes,13,opt,name=grant_full_control,json=grantFullControl,proto3" json:"grant_full_control,omitempty"`
- // Allows grantee to read the object data and its metadata. This action is not
- // supported by Amazon S3 on Outposts.
- GrantRead string `protobuf:"bytes,14,opt,name=grant_read,json=grantRead,proto3" json:"grant_read,omitempty"`
- // Allows grantee to read the object ACL. This action is not supported by Amazon S3
- // on Outposts.
- GrantReadAcp string `protobuf:"bytes,15,opt,name=grant_read_acp,json=grantReadAcp,proto3" json:"grant_read_acp,omitempty"`
- // Allows grantee to write the ACL for the applicable object. This action is not
- // supported by Amazon S3 on Outposts.
- GrantWriteAcp string `protobuf:"bytes,16,opt,name=grant_write_acp,json=grantWriteAcp,proto3" json:"grant_write_acp,omitempty"`
- // A map of metadata to store with the object
- MetaData map[string]string `protobuf:"bytes,17,rep,name=meta_data,json=metaData,proto3" json:"meta_data,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
- // Specifies whether you want to apply a legal hold to the uploaded object
- ObjectLockLegalHoldStatus string `protobuf:"bytes,18,opt,name=object_lock_legal_hold_status,json=objectLockLegalHoldStatus,proto3" json:"object_lock_legal_hold_status,omitempty"`
- // Specifies the Object Lock mode that you want to apply to the uploaded object
- ObjectLockMode string `protobuf:"bytes,19,opt,name=object_lock_mode,json=objectLockMode,proto3" json:"object_lock_mode,omitempty"`
- // Specifies the date and time when you want the Object Lock to expire
- ObjectLockRetainUntilDate int64 `protobuf:"varint,20,opt,name=object_lock_retain_until_date,json=objectLockRetainUntilDate,proto3" json:"object_lock_retain_until_date,omitempty"`
- // Confirms that the requester knows that they will be charged for the request
- RequestPayer string `protobuf:"bytes,21,opt,name=request_payer,json=requestPayer,proto3" json:"request_payer,omitempty"`
- // Specifies the algorithm to use to when encrypting the object (for example,
- // AES256).
- SseCustomerAlgorithm string `protobuf:"bytes,22,opt,name=sse_customer_algorithm,json=sseCustomerAlgorithm,proto3" json:"sse_customer_algorithm,omitempty"`
- // Specifies the customer-provided encryption key to use in encrypting data
- SseCustomerKey string `protobuf:"bytes,23,opt,name=sse_customer_key,json=sseCustomerKey,proto3" json:"sse_customer_key,omitempty"`
- // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321
- SseCustomerKeyMd5 string `protobuf:"bytes,24,opt,name=sse_customer_key_md5,json=sseCustomerKeyMd5,proto3" json:"sse_customer_key_md5,omitempty"`
- // Specifies the Amazon Web Services KMS Encryption Context to use for object encryption
- SseKmsEncryptionContext string `protobuf:"bytes,25,opt,name=sse_kms_encryption_context,json=sseKmsEncryptionContext,proto3" json:"sse_kms_encryption_context,omitempty"`
- // Specifies the ID of the symmetric customer managed key to use for object encryption
- SseKmsKeyId string `protobuf:"bytes,26,opt,name=sse_kms_key_id,json=sseKmsKeyId,proto3" json:"sse_kms_key_id,omitempty"`
- // The server-side encryption algorithm used when storing this object
- ServerSideEncryption string `protobuf:"bytes,27,opt,name=server_side_encryption,json=serverSideEncryption,proto3" json:"server_side_encryption,omitempty"`
- // By default, oss store uses the STANDARD Storage Class to store newly created objects
- StorageClass string `protobuf:"bytes,28,opt,name=storage_class,json=storageClass,proto3" json:"storage_class,omitempty"`
- // The tag-set for the object. The tag-set must be encoded as URL Query parameters.
- Tagging map[string]string `protobuf:"bytes,29,rep,name=tagging,proto3" json:"tagging,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
- // If the bucket is configured as a website, redirects requests for this object to
- // another object in the same bucket or to an external URL.
- WebsiteRedirectLocation string `protobuf:"bytes,30,opt,name=website_redirect_location,json=websiteRedirectLocation,proto3" json:"website_redirect_location,omitempty"`
-}
-
-func (x *CreateMultipartUploadInput) Reset() {
- *x = CreateMultipartUploadInput{}
+ // Specifies that CSV field values may contain quoted record delimiters and such
+ // records should be allowed. Default value is FALSE. Setting this value to TRUE
+ // may lower performance.
+ AllowQuotedRecordDelimiter bool `protobuf:"varint,1,opt,name=allow_quoted_record_delimiter,json=allowQuotedRecordDelimiter,proto3" json:"allow_quoted_record_delimiter,omitempty"`
+ // A single character used to indicate that a row should be ignored when the
+ // character is present at the start of that row. You can specify any character to
+ // indicate a comment line.
+ Comments string `protobuf:"bytes,2,opt,name=comments,proto3" json:"comments,omitempty"`
+ // A single character used to separate individual fields in a record. You can
+ // specify an arbitrary delimiter.
+ FieldDelimiter string `protobuf:"bytes,3,opt,name=field_delimiter,json=fieldDelimiter,proto3" json:"field_delimiter,omitempty"`
+ // Describes the first line of input. Valid values are:
+ //
+ // * NONE: First line is not
+ // a header.
+ //
+ // * IGNORE: First line is a header, but you can't use the header values
+ // to indicate the column in an expression. You can use column position (such as
+ // _1, _2, …) to indicate the column (SELECT s._1 FROM OBJECT s).
+ //
+ // * Use: First
+ // line is a header, and you can use the header value to identify a column in an
+ // expression (SELECT "name" FROM OBJECT).
+ FileHeaderInfo string `protobuf:"bytes,4,opt,name=file_header_info,json=fileHeaderInfo,proto3" json:"file_header_info,omitempty"`
+ // A single character used for escaping when the field delimiter is part of the
+ // value. For example, if the value is a, b, Amazon S3 wraps this field value in
+ // quotation marks, as follows: " a , b ". Type: String Default: " Ancestors: CSV
+ QuoteCharacter string `protobuf:"bytes,5,opt,name=quote_character,json=quoteCharacter,proto3" json:"quote_character,omitempty"`
+ // A single character used for escaping the quotation mark character inside an
+ // already escaped value. For example, the value """ a , b """ is parsed as " a , b
+ // ".
+ QuoteEscapeCharacter string `protobuf:"bytes,6,opt,name=quote_escape_character,json=quoteEscapeCharacter,proto3" json:"quote_escape_character,omitempty"`
+ // A single character used to separate individual records in the input. Instead of
+ // the default value, you can specify an arbitrary delimiter.
+ RecordDelimiter string `protobuf:"bytes,7,opt,name=record_delimiter,json=recordDelimiter,proto3" json:"record_delimiter,omitempty"`
+}
+
+func (x *CSVInput) Reset() {
+ *x = CSVInput{}
if protoimpl.UnsafeEnabled {
mi := &file_oss_proto_msgTypes[31]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2952,13 +2891,13 @@ func (x *CreateMultipartUploadInput) Reset() {
}
}
-func (x *CreateMultipartUploadInput) String() string {
+func (x *CSVInput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*CreateMultipartUploadInput) ProtoMessage() {}
+func (*CSVInput) ProtoMessage() {}
-func (x *CreateMultipartUploadInput) ProtoReflect() protoreflect.Message {
+func (x *CSVInput) ProtoReflect() protoreflect.Message {
mi := &file_oss_proto_msgTypes[31]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -2970,285 +2909,319 @@ func (x *CreateMultipartUploadInput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use CreateMultipartUploadInput.ProtoReflect.Descriptor instead.
-func (*CreateMultipartUploadInput) Descriptor() ([]byte, []int) {
+// Deprecated: Use CSVInput.ProtoReflect.Descriptor instead.
+func (*CSVInput) Descriptor() ([]byte, []int) {
return file_oss_proto_rawDescGZIP(), []int{31}
}
-func (x *CreateMultipartUploadInput) GetStoreName() string {
+func (x *CSVInput) GetAllowQuotedRecordDelimiter() bool {
if x != nil {
- return x.StoreName
+ return x.AllowQuotedRecordDelimiter
}
- return ""
+ return false
}
-func (x *CreateMultipartUploadInput) GetBucket() string {
+func (x *CSVInput) GetComments() string {
if x != nil {
- return x.Bucket
+ return x.Comments
}
return ""
}
-func (x *CreateMultipartUploadInput) GetKey() string {
+func (x *CSVInput) GetFieldDelimiter() string {
if x != nil {
- return x.Key
+ return x.FieldDelimiter
}
return ""
}
-func (x *CreateMultipartUploadInput) GetAcl() string {
+func (x *CSVInput) GetFileHeaderInfo() string {
if x != nil {
- return x.Acl
+ return x.FileHeaderInfo
}
return ""
}
-func (x *CreateMultipartUploadInput) GetBucketKeyEnabled() bool {
+func (x *CSVInput) GetQuoteCharacter() string {
if x != nil {
- return x.BucketKeyEnabled
+ return x.QuoteCharacter
}
- return false
+ return ""
}
-func (x *CreateMultipartUploadInput) GetCacheControl() string {
+func (x *CSVInput) GetQuoteEscapeCharacter() string {
if x != nil {
- return x.CacheControl
+ return x.QuoteEscapeCharacter
}
return ""
}
-func (x *CreateMultipartUploadInput) GetContentDisposition() string {
+func (x *CSVInput) GetRecordDelimiter() string {
if x != nil {
- return x.ContentDisposition
+ return x.RecordDelimiter
}
return ""
}
-func (x *CreateMultipartUploadInput) GetContentEncoding() string {
- if x != nil {
- return x.ContentEncoding
+// InputSerialization
+type InputSerialization struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Describes the serialization of a CSV-encoded object.
+ Csv *CSVInput `protobuf:"bytes,1,opt,name=csv,proto3" json:"csv,omitempty"`
+ // Specifies object's compression format. Valid values: NONE, GZIP, BZIP2. Default
+ // Value: NONE.
+ CompressionType string `protobuf:"bytes,2,opt,name=compression_type,json=compressionType,proto3" json:"compression_type,omitempty"`
+ // Specifies JSON as object's input serialization format.
+ Json string `protobuf:"bytes,3,opt,name=json,proto3" json:"json,omitempty"`
+}
+
+func (x *InputSerialization) Reset() {
+ *x = InputSerialization{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_oss_proto_msgTypes[32]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
- return ""
}
-func (x *CreateMultipartUploadInput) GetContentLanguage() string {
+func (x *InputSerialization) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InputSerialization) ProtoMessage() {}
+
+func (x *InputSerialization) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[32]
+ 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 InputSerialization.ProtoReflect.Descriptor instead.
+func (*InputSerialization) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{32}
+}
+
+func (x *InputSerialization) GetCsv() *CSVInput {
if x != nil {
- return x.ContentLanguage
+ return x.Csv
}
- return ""
+ return nil
}
-func (x *CreateMultipartUploadInput) GetContentType() string {
+func (x *InputSerialization) GetCompressionType() string {
if x != nil {
- return x.ContentType
+ return x.CompressionType
}
return ""
}
-func (x *CreateMultipartUploadInput) GetExpectedBucketOwner() string {
+func (x *InputSerialization) GetJson() string {
if x != nil {
- return x.ExpectedBucketOwner
+ return x.Json
}
return ""
}
-func (x *CreateMultipartUploadInput) GetExpires() int64 {
- if x != nil {
- return x.Expires
+// CSVOutput
+type CSVOutput struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The value used to separate individual fields in a record. You can specify an
+ // arbitrary delimiter.
+ FieldDelimiter string `protobuf:"bytes,1,opt,name=field_delimiter,json=fieldDelimiter,proto3" json:"field_delimiter,omitempty"`
+ // A single character used for escaping when the field delimiter is part of the
+ // value. For example, if the value is a, b, Amazon S3 wraps this field value in
+ // quotation marks, as follows: " a , b ".
+ QuoteCharacter string `protobuf:"bytes,2,opt,name=quote_character,json=quoteCharacter,proto3" json:"quote_character,omitempty"`
+ // The single character used for escaping the quote character inside an already
+ // escaped value.
+ QuoteEscapeCharacter string `protobuf:"bytes,3,opt,name=quote_escape_character,json=quoteEscapeCharacter,proto3" json:"quote_escape_character,omitempty"`
+ // Indicates whether to use quotation marks around output fields.
+ //
+ // * ALWAYS: Always
+ // use quotation marks for output fields.
+ //
+ // * ASNEEDED: Use quotation marks for
+ // output fields when needed.
+ QuoteFields string `protobuf:"bytes,4,opt,name=quote_fields,json=quoteFields,proto3" json:"quote_fields,omitempty"`
+ // A single character used to separate individual records in the output. Instead of
+ // the default value, you can specify an arbitrary delimiter.
+ RecordDelimiter string `protobuf:"bytes,5,opt,name=record_delimiter,json=recordDelimiter,proto3" json:"record_delimiter,omitempty"`
+}
+
+func (x *CSVOutput) Reset() {
+ *x = CSVOutput{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_oss_proto_msgTypes[33]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
- return 0
}
-func (x *CreateMultipartUploadInput) GetGrantFullControl() string {
- if x != nil {
- return x.GrantFullControl
+func (x *CSVOutput) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CSVOutput) ProtoMessage() {}
+
+func (x *CSVOutput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[33]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
}
- return ""
+ return mi.MessageOf(x)
}
-func (x *CreateMultipartUploadInput) GetGrantRead() string {
+// Deprecated: Use CSVOutput.ProtoReflect.Descriptor instead.
+func (*CSVOutput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{33}
+}
+
+func (x *CSVOutput) GetFieldDelimiter() string {
if x != nil {
- return x.GrantRead
+ return x.FieldDelimiter
}
return ""
}
-func (x *CreateMultipartUploadInput) GetGrantReadAcp() string {
+func (x *CSVOutput) GetQuoteCharacter() string {
if x != nil {
- return x.GrantReadAcp
+ return x.QuoteCharacter
}
return ""
}
-func (x *CreateMultipartUploadInput) GetGrantWriteAcp() string {
+func (x *CSVOutput) GetQuoteEscapeCharacter() string {
if x != nil {
- return x.GrantWriteAcp
+ return x.QuoteEscapeCharacter
}
return ""
}
-func (x *CreateMultipartUploadInput) GetMetaData() map[string]string {
+func (x *CSVOutput) GetQuoteFields() string {
if x != nil {
- return x.MetaData
+ return x.QuoteFields
}
- return nil
+ return ""
}
-func (x *CreateMultipartUploadInput) GetObjectLockLegalHoldStatus() string {
- if x != nil {
- return x.ObjectLockLegalHoldStatus
- }
- return ""
-}
-
-func (x *CreateMultipartUploadInput) GetObjectLockMode() string {
- if x != nil {
- return x.ObjectLockMode
- }
- return ""
-}
-
-func (x *CreateMultipartUploadInput) GetObjectLockRetainUntilDate() int64 {
- if x != nil {
- return x.ObjectLockRetainUntilDate
- }
- return 0
-}
-
-func (x *CreateMultipartUploadInput) GetRequestPayer() string {
+func (x *CSVOutput) GetRecordDelimiter() string {
if x != nil {
- return x.RequestPayer
+ return x.RecordDelimiter
}
return ""
}
-func (x *CreateMultipartUploadInput) GetSseCustomerAlgorithm() string {
- if x != nil {
- return x.SseCustomerAlgorithm
- }
- return ""
-}
+// OutputSerialization
+type OutputSerialization struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
-func (x *CreateMultipartUploadInput) GetSseCustomerKey() string {
- if x != nil {
- return x.SseCustomerKey
- }
- return ""
+ // Describes the serialization of CSV-encoded Select results.
+ Csv *CSVOutput `protobuf:"bytes,1,opt,name=csv,proto3" json:"csv,omitempty"`
+ // Specifies JSON as request's output serialization format.
+ Json string `protobuf:"bytes,2,opt,name=json,proto3" json:"json,omitempty"`
}
-func (x *CreateMultipartUploadInput) GetSseCustomerKeyMd5() string {
- if x != nil {
- return x.SseCustomerKeyMd5
+func (x *OutputSerialization) Reset() {
+ *x = OutputSerialization{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_oss_proto_msgTypes[34]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
- return ""
}
-func (x *CreateMultipartUploadInput) GetSseKmsEncryptionContext() string {
- if x != nil {
- return x.SseKmsEncryptionContext
- }
- return ""
+func (x *OutputSerialization) String() string {
+ return protoimpl.X.MessageStringOf(x)
}
-func (x *CreateMultipartUploadInput) GetSseKmsKeyId() string {
- if x != nil {
- return x.SseKmsKeyId
- }
- return ""
-}
+func (*OutputSerialization) ProtoMessage() {}
-func (x *CreateMultipartUploadInput) GetServerSideEncryption() string {
- if x != nil {
- return x.ServerSideEncryption
+func (x *OutputSerialization) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[34]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
}
- return ""
+ return mi.MessageOf(x)
}
-func (x *CreateMultipartUploadInput) GetStorageClass() string {
- if x != nil {
- return x.StorageClass
- }
- return ""
+// Deprecated: Use OutputSerialization.ProtoReflect.Descriptor instead.
+func (*OutputSerialization) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{34}
}
-func (x *CreateMultipartUploadInput) GetTagging() map[string]string {
+func (x *OutputSerialization) GetCsv() *CSVOutput {
if x != nil {
- return x.Tagging
+ return x.Csv
}
return nil
}
-func (x *CreateMultipartUploadInput) GetWebsiteRedirectLocation() string {
+func (x *OutputSerialization) GetJson() string {
if x != nil {
- return x.WebsiteRedirectLocation
+ return x.Json
}
return ""
}
-// CreateMultipartUploadOutput
-type CreateMultipartUploadOutput struct {
+// SelectParameters
+type SelectParameters struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // The bucket name containing the object
- // This member is required
- Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"`
- // Name of the object key.
+ // The expression that is used to query the object.
// This member is required.
- Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
- // If the bucket has a lifecycle rule configured with an action to abort incomplete
- // multipart uploads and the prefix in the lifecycle rule matches the object name
- // in the request, the response includes this header
- AbortDate int64 `protobuf:"varint,3,opt,name=abort_date,json=abortDate,proto3" json:"abort_date,omitempty"`
- // It identifies the applicable lifecycle configuration rule that defines the action to abort
- // incomplete multipart uploads.
- AbortRuleId string `protobuf:"bytes,4,opt,name=abort_rule_id,json=abortRuleId,proto3" json:"abort_rule_id,omitempty"`
- // Indicates whether the multipart upload uses an S3 Bucket Key for server-side
- // encryption with Amazon Web Services KMS (SSE-KMS).
- BucketKeyEnabled bool `protobuf:"varint,5,opt,name=bucket_key_enabled,json=bucketKeyEnabled,proto3" json:"bucket_key_enabled,omitempty"`
- // If present, indicates that the requester was successfully charged for the
- // request.
- RequestCharged string `protobuf:"bytes,6,opt,name=request_charged,json=requestCharged,proto3" json:"request_charged,omitempty"`
- // If server-side encryption with a customer-provided encryption key was requested,
- // the response will include this header confirming the encryption algorithm used.
- SseCustomerAlgorithm string `protobuf:"bytes,7,opt,name=sse_customer_algorithm,json=sseCustomerAlgorithm,proto3" json:"sse_customer_algorithm,omitempty"`
- // If server-side encryption with a customer-provided encryption key was requested,
- // the response will include this header to provide round-trip message integrity
- // verification of the customer-provided encryption key.
- SseCustomerKeyMd5 string `protobuf:"bytes,8,opt,name=sse_customer_key_md5,json=sseCustomerKeyMd5,proto3" json:"sse_customer_key_md5,omitempty"`
- // If present, specifies the Amazon Web Services KMS Encryption Context to use for
- // object encryption. The value of this header is a base64-encoded UTF-8 string
- // holding JSON with the encryption context key-value pairs.
- SseKmsEncryptionContext string `protobuf:"bytes,9,opt,name=sse_kms_encryption_context,json=sseKmsEncryptionContext,proto3" json:"sse_kms_encryption_context,omitempty"`
- // If present, specifies the ID of the Amazon Web Services Key Management Service
- // (Amazon Web Services KMS) symmetric customer managed key that was used for the
- // object.
- SseKmsKeyId string `protobuf:"bytes,10,opt,name=sse_kms_key_id,json=sseKmsKeyId,proto3" json:"sse_kms_key_id,omitempty"`
- // The server-side encryption algorithm used when storing this object in Amazon S3
- // (for example, AES256, aws:kms).
- ServerSideEncryption string `protobuf:"bytes,11,opt,name=server_side_encryption,json=serverSideEncryption,proto3" json:"server_side_encryption,omitempty"`
- // ID for the initiated multipart upload.
- UploadId string `protobuf:"bytes,12,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`
+ Expression string `protobuf:"bytes,1,opt,name=expression,proto3" json:"expression,omitempty"`
+ // The type of the provided expression (for example, SQL).
+ // This member is required.
+ ExpressionType string `protobuf:"bytes,2,opt,name=expression_type,json=expressionType,proto3" json:"expression_type,omitempty"`
+ // Describes the serialization format of the object.
+ // This member is required.
+ InputSerialization *InputSerialization `protobuf:"bytes,3,opt,name=input_serialization,json=inputSerialization,proto3" json:"input_serialization,omitempty"`
+ // Describes how the results of the Select job are serialized.
+ // This member is required.
+ OutputSerialization *OutputSerialization `protobuf:"bytes,4,opt,name=output_serialization,json=outputSerialization,proto3" json:"output_serialization,omitempty"`
}
-func (x *CreateMultipartUploadOutput) Reset() {
- *x = CreateMultipartUploadOutput{}
+func (x *SelectParameters) Reset() {
+ *x = SelectParameters{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[32]
+ mi := &file_oss_proto_msgTypes[35]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *CreateMultipartUploadOutput) String() string {
+func (x *SelectParameters) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*CreateMultipartUploadOutput) ProtoMessage() {}
+func (*SelectParameters) ProtoMessage() {}
-func (x *CreateMultipartUploadOutput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[32]
+func (x *SelectParameters) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[35]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3259,97 +3232,144 @@ func (x *CreateMultipartUploadOutput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use CreateMultipartUploadOutput.ProtoReflect.Descriptor instead.
-func (*CreateMultipartUploadOutput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{32}
+// Deprecated: Use SelectParameters.ProtoReflect.Descriptor instead.
+func (*SelectParameters) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{35}
}
-func (x *CreateMultipartUploadOutput) GetBucket() string {
+func (x *SelectParameters) GetExpression() string {
if x != nil {
- return x.Bucket
+ return x.Expression
}
return ""
}
-func (x *CreateMultipartUploadOutput) GetKey() string {
+func (x *SelectParameters) GetExpressionType() string {
if x != nil {
- return x.Key
+ return x.ExpressionType
}
return ""
}
-func (x *CreateMultipartUploadOutput) GetAbortDate() int64 {
+func (x *SelectParameters) GetInputSerialization() *InputSerialization {
if x != nil {
- return x.AbortDate
+ return x.InputSerialization
}
- return 0
+ return nil
}
-func (x *CreateMultipartUploadOutput) GetAbortRuleId() string {
+func (x *SelectParameters) GetOutputSerialization() *OutputSerialization {
if x != nil {
- return x.AbortRuleId
+ return x.OutputSerialization
}
- return ""
+ return nil
}
-func (x *CreateMultipartUploadOutput) GetBucketKeyEnabled() bool {
- if x != nil {
- return x.BucketKeyEnabled
+// RestoreRequest
+type RestoreRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Lifetime of the active copy in days.
+ Days int32 `protobuf:"varint,1,opt,name=days,proto3" json:"days,omitempty"`
+ // The optional description for the job.
+ Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
+ // S3 Glacier related parameters pertaining to this job.
+ GlacierJobParameters *GlacierJobParameters `protobuf:"bytes,3,opt,name=glacier_job_parameters,json=glacierJobParameters,proto3" json:"glacier_job_parameters,omitempty"`
+ // Describes the location where the restore job's output is stored.
+ OutputLocation *OutputLocation `protobuf:"bytes,4,opt,name=output_location,json=outputLocation,proto3" json:"output_location,omitempty"`
+ // Describes the parameters for Select job types.
+ SelectParameters *SelectParameters `protobuf:"bytes,5,opt,name=select_parameters,json=selectParameters,proto3" json:"select_parameters,omitempty"`
+ // Retrieval tier at which the restore will be processed.
+ Tier string `protobuf:"bytes,6,opt,name=tier,proto3" json:"tier,omitempty"`
+ // Type of restore request.
+ Type string `protobuf:"bytes,7,opt,name=type,proto3" json:"type,omitempty"`
+}
+
+func (x *RestoreRequest) Reset() {
+ *x = RestoreRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_oss_proto_msgTypes[36]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
- return false
}
-func (x *CreateMultipartUploadOutput) GetRequestCharged() string {
+func (x *RestoreRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RestoreRequest) ProtoMessage() {}
+
+func (x *RestoreRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[36]
+ 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 RestoreRequest.ProtoReflect.Descriptor instead.
+func (*RestoreRequest) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{36}
+}
+
+func (x *RestoreRequest) GetDays() int32 {
if x != nil {
- return x.RequestCharged
+ return x.Days
}
- return ""
+ return 0
}
-func (x *CreateMultipartUploadOutput) GetSseCustomerAlgorithm() string {
+func (x *RestoreRequest) GetDescription() string {
if x != nil {
- return x.SseCustomerAlgorithm
+ return x.Description
}
return ""
}
-func (x *CreateMultipartUploadOutput) GetSseCustomerKeyMd5() string {
+func (x *RestoreRequest) GetGlacierJobParameters() *GlacierJobParameters {
if x != nil {
- return x.SseCustomerKeyMd5
+ return x.GlacierJobParameters
}
- return ""
+ return nil
}
-func (x *CreateMultipartUploadOutput) GetSseKmsEncryptionContext() string {
+func (x *RestoreRequest) GetOutputLocation() *OutputLocation {
if x != nil {
- return x.SseKmsEncryptionContext
+ return x.OutputLocation
}
- return ""
+ return nil
}
-func (x *CreateMultipartUploadOutput) GetSseKmsKeyId() string {
+func (x *RestoreRequest) GetSelectParameters() *SelectParameters {
if x != nil {
- return x.SseKmsKeyId
+ return x.SelectParameters
}
- return ""
+ return nil
}
-func (x *CreateMultipartUploadOutput) GetServerSideEncryption() string {
+func (x *RestoreRequest) GetTier() string {
if x != nil {
- return x.ServerSideEncryption
+ return x.Tier
}
return ""
}
-func (x *CreateMultipartUploadOutput) GetUploadId() string {
+func (x *RestoreRequest) GetType() string {
if x != nil {
- return x.UploadId
+ return x.Type
}
return ""
}
-// UploadPartInput
-type UploadPartInput struct {
+// RestoreObjectInput
+type RestoreObjectInput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
@@ -3362,50 +3382,29 @@ type UploadPartInput struct {
// Name of the object key.
// This member is required.
Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
- // Object data.
- Body []byte `protobuf:"bytes,4,opt,name=body,proto3" json:"body,omitempty"`
- // Size of the body in bytes. This parameter is useful when the size of the body
- // cannot be determined automatically.
- ContentLength int64 `protobuf:"varint,5,opt,name=content_length,json=contentLength,proto3" json:"content_length,omitempty"`
- // The base64-encoded 128-bit MD5 digest of the part data.
- ContentMd5 string `protobuf:"bytes,6,opt,name=content_md5,json=contentMd5,proto3" json:"content_md5,omitempty"`
- // The account ID of the expected bucket owner
- ExpectedBucketOwner string `protobuf:"bytes,7,opt,name=expected_bucket_owner,json=expectedBucketOwner,proto3" json:"expected_bucket_owner,omitempty"`
- // Part number of part being uploaded. This is a positive integer between 1 and 10,000.
- // This member is required.
- PartNumber int32 `protobuf:"varint,8,opt,name=part_number,json=partNumber,proto3" json:"part_number,omitempty"`
- // Confirms that the requester knows that they will be charged for the request.
- RequestPayer string `protobuf:"bytes,9,opt,name=request_payer,json=requestPayer,proto3" json:"request_payer,omitempty"`
- // Specifies the algorithm to use to when encrypting the object (for example,
- // AES256).
- SseCustomerAlgorithm string `protobuf:"bytes,10,opt,name=sse_customer_algorithm,json=sseCustomerAlgorithm,proto3" json:"sse_customer_algorithm,omitempty"`
- // Specifies the customer-provided encryption key for Amazon S3 to use in
- // encrypting data
- SseCustomerKey string `protobuf:"bytes,11,opt,name=sse_customer_key,json=sseCustomerKey,proto3" json:"sse_customer_key,omitempty"`
- // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
- SseCustomerKeyMd5 string `protobuf:"bytes,12,opt,name=sse_customer_key_md5,json=sseCustomerKeyMd5,proto3" json:"sse_customer_key_md5,omitempty"`
- // Upload ID identifying the multipart upload whose part is being uploaded.
- // This member is required.
- UploadId string `protobuf:"bytes,13,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`
+ // The information of restoring request.
+ RestoreRequest *RestoreRequest `protobuf:"bytes,4,opt,name=restore_request,json=restoreRequest,proto3" json:"restore_request,omitempty"`
+ // VersionId used to reference a specific version of the object.
+ VersionId string `protobuf:"bytes,5,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"`
}
-func (x *UploadPartInput) Reset() {
- *x = UploadPartInput{}
+func (x *RestoreObjectInput) Reset() {
+ *x = RestoreObjectInput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[33]
+ mi := &file_oss_proto_msgTypes[37]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *UploadPartInput) String() string {
+func (x *RestoreObjectInput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*UploadPartInput) ProtoMessage() {}
+func (*RestoreObjectInput) ProtoMessage() {}
-func (x *UploadPartInput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[33]
+func (x *RestoreObjectInput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[37]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3416,145 +3415,208 @@ func (x *UploadPartInput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use UploadPartInput.ProtoReflect.Descriptor instead.
-func (*UploadPartInput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{33}
+// Deprecated: Use RestoreObjectInput.ProtoReflect.Descriptor instead.
+func (*RestoreObjectInput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{37}
}
-func (x *UploadPartInput) GetStoreName() string {
+func (x *RestoreObjectInput) GetStoreName() string {
if x != nil {
return x.StoreName
}
return ""
}
-func (x *UploadPartInput) GetBucket() string {
+func (x *RestoreObjectInput) GetBucket() string {
if x != nil {
return x.Bucket
}
return ""
}
-func (x *UploadPartInput) GetKey() string {
+func (x *RestoreObjectInput) GetKey() string {
if x != nil {
return x.Key
}
return ""
}
-func (x *UploadPartInput) GetBody() []byte {
+func (x *RestoreObjectInput) GetRestoreRequest() *RestoreRequest {
if x != nil {
- return x.Body
+ return x.RestoreRequest
}
return nil
}
-func (x *UploadPartInput) GetContentLength() int64 {
- if x != nil {
- return x.ContentLength
- }
- return 0
-}
-
-func (x *UploadPartInput) GetContentMd5() string {
+func (x *RestoreObjectInput) GetVersionId() string {
if x != nil {
- return x.ContentMd5
+ return x.VersionId
}
return ""
}
-func (x *UploadPartInput) GetExpectedBucketOwner() string {
- if x != nil {
- return x.ExpectedBucketOwner
- }
- return ""
+// RestoreObjectOutput
+type RestoreObjectOutput struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // If present, indicates that the requester was successfully charged for the
+ // request.
+ RequestCharged string `protobuf:"bytes,1,opt,name=request_charged,json=requestCharged,proto3" json:"request_charged,omitempty"`
+ // Indicates the path in the provided S3 output location where Select results will
+ // be restored to.
+ RestoreOutputPath string `protobuf:"bytes,2,opt,name=restore_output_path,json=restoreOutputPath,proto3" json:"restore_output_path,omitempty"`
}
-func (x *UploadPartInput) GetPartNumber() int32 {
- if x != nil {
- return x.PartNumber
+func (x *RestoreObjectOutput) Reset() {
+ *x = RestoreObjectOutput{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_oss_proto_msgTypes[38]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
- return 0
}
-func (x *UploadPartInput) GetRequestPayer() string {
- if x != nil {
- return x.RequestPayer
- }
- return ""
+func (x *RestoreObjectOutput) String() string {
+ return protoimpl.X.MessageStringOf(x)
}
-func (x *UploadPartInput) GetSseCustomerAlgorithm() string {
- if x != nil {
- return x.SseCustomerAlgorithm
+func (*RestoreObjectOutput) ProtoMessage() {}
+
+func (x *RestoreObjectOutput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[38]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
}
- return ""
+ return mi.MessageOf(x)
}
-func (x *UploadPartInput) GetSseCustomerKey() string {
- if x != nil {
- return x.SseCustomerKey
- }
- return ""
+// Deprecated: Use RestoreObjectOutput.ProtoReflect.Descriptor instead.
+func (*RestoreObjectOutput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{38}
}
-func (x *UploadPartInput) GetSseCustomerKeyMd5() string {
+func (x *RestoreObjectOutput) GetRequestCharged() string {
if x != nil {
- return x.SseCustomerKeyMd5
+ return x.RequestCharged
}
return ""
}
-func (x *UploadPartInput) GetUploadId() string {
+func (x *RestoreObjectOutput) GetRestoreOutputPath() string {
if x != nil {
- return x.UploadId
+ return x.RestoreOutputPath
}
return ""
}
-// UploadPartOutput
-type UploadPartOutput struct {
+// CreateMultipartUploadInput
+type CreateMultipartUploadInput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Indicates whether the multipart upload uses an S3 Bucket Key for server-side
- // encryption with Amazon Web Services KMS (SSE-KMS).
- BucketKeyEnabled bool `protobuf:"varint,1,opt,name=bucket_key_enabled,json=bucketKeyEnabled,proto3" json:"bucket_key_enabled,omitempty"`
- // Entity tag for the uploaded object.
- Etag string `protobuf:"bytes,2,opt,name=etag,proto3" json:"etag,omitempty"`
- // If present, indicates that the requester was successfully charged for the
- // request.
- RequestCharged string `protobuf:"bytes,3,opt,name=request_charged,json=requestCharged,proto3" json:"request_charged,omitempty"`
+ // Required. The name of oss store.
+ StoreName string `protobuf:"bytes,1,opt,name=store_name,json=storeName,proto3" json:"store_name,omitempty"`
+ // The bucket name containing the object
+ // This member is required
+ Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
+ // Name of the object key.
+ // This member is required.
+ Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
+ // The canned ACL to apply to the object. This action is not supported by Amazon S3
+ // on Outposts.
+ Acl string `protobuf:"bytes,4,opt,name=acl,proto3" json:"acl,omitempty"`
+ // Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption
+ // with server-side encryption using AWS KMS (SSE-KMS). Setting this header to true
+ // causes Amazon S3 to use an S3 Bucket Key for object encryption with SSE-KMS.
+ // Specifying this header with a PUT action doesn’t affect bucket-level settings
+ // for S3 Bucket Key.
+ BucketKeyEnabled bool `protobuf:"varint,5,opt,name=bucket_key_enabled,json=bucketKeyEnabled,proto3" json:"bucket_key_enabled,omitempty"`
+ // Specifies caching behavior along the request/reply chain
+ CacheControl string `protobuf:"bytes,6,opt,name=cache_control,json=cacheControl,proto3" json:"cache_control,omitempty"`
+ // Specifies presentational information for the object
+ ContentDisposition string `protobuf:"bytes,7,opt,name=content_disposition,json=contentDisposition,proto3" json:"content_disposition,omitempty"`
+ // Specifies what content encodings have been applied to the object and thus what
+ // decoding mechanisms must be applied to obtain the media-type referenced by the
+ // Content-Type header field.
+ ContentEncoding string `protobuf:"bytes,8,opt,name=content_encoding,json=contentEncoding,proto3" json:"content_encoding,omitempty"`
+ // The language the content is in.
+ ContentLanguage string `protobuf:"bytes,9,opt,name=content_language,json=contentLanguage,proto3" json:"content_language,omitempty"`
+ // A standard MIME type describing the format of the object data.
+ ContentType string `protobuf:"bytes,10,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"`
+ // The account ID of the expected bucket owner. If the bucket is owned by a
+ // different account, the request fails with the HTTP status code 403 Forbidden
+ // (access denied).
+ ExpectedBucketOwner string `protobuf:"bytes,11,opt,name=expected_bucket_owner,json=expectedBucketOwner,proto3" json:"expected_bucket_owner,omitempty"`
+ // The date and time at which the object is no longer cacheable.
+ Expires int64 `protobuf:"varint,12,opt,name=expires,proto3" json:"expires,omitempty"`
+ // Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object. This
+ // action is not supported by Amazon S3 on Outposts.
+ GrantFullControl string `protobuf:"bytes,13,opt,name=grant_full_control,json=grantFullControl,proto3" json:"grant_full_control,omitempty"`
+ // Allows grantee to read the object data and its metadata. This action is not
+ // supported by Amazon S3 on Outposts.
+ GrantRead string `protobuf:"bytes,14,opt,name=grant_read,json=grantRead,proto3" json:"grant_read,omitempty"`
+ // Allows grantee to read the object ACL. This action is not supported by Amazon S3
+ // on Outposts.
+ GrantReadAcp string `protobuf:"bytes,15,opt,name=grant_read_acp,json=grantReadAcp,proto3" json:"grant_read_acp,omitempty"`
+ // Allows grantee to write the ACL for the applicable object. This action is not
+ // supported by Amazon S3 on Outposts.
+ GrantWriteAcp string `protobuf:"bytes,16,opt,name=grant_write_acp,json=grantWriteAcp,proto3" json:"grant_write_acp,omitempty"`
+ // A map of metadata to store with the object
+ MetaData map[string]string `protobuf:"bytes,17,rep,name=meta_data,json=metaData,proto3" json:"meta_data,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ // Specifies whether you want to apply a legal hold to the uploaded object
+ ObjectLockLegalHoldStatus string `protobuf:"bytes,18,opt,name=object_lock_legal_hold_status,json=objectLockLegalHoldStatus,proto3" json:"object_lock_legal_hold_status,omitempty"`
+ // Specifies the Object Lock mode that you want to apply to the uploaded object
+ ObjectLockMode string `protobuf:"bytes,19,opt,name=object_lock_mode,json=objectLockMode,proto3" json:"object_lock_mode,omitempty"`
+ // Specifies the date and time when you want the Object Lock to expire
+ ObjectLockRetainUntilDate int64 `protobuf:"varint,20,opt,name=object_lock_retain_until_date,json=objectLockRetainUntilDate,proto3" json:"object_lock_retain_until_date,omitempty"`
+ // Confirms that the requester knows that they will be charged for the request
+ RequestPayer string `protobuf:"bytes,21,opt,name=request_payer,json=requestPayer,proto3" json:"request_payer,omitempty"`
// Specifies the algorithm to use to when encrypting the object (for example,
// AES256).
- SseCustomerAlgorithm string `protobuf:"bytes,4,opt,name=sse_customer_algorithm,json=sseCustomerAlgorithm,proto3" json:"sse_customer_algorithm,omitempty"`
- // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
- SseCustomerKeyMd5 string `protobuf:"bytes,5,opt,name=sse_customer_key_md5,json=sseCustomerKeyMd5,proto3" json:"sse_customer_key_md5,omitempty"`
+ SseCustomerAlgorithm string `protobuf:"bytes,22,opt,name=sse_customer_algorithm,json=sseCustomerAlgorithm,proto3" json:"sse_customer_algorithm,omitempty"`
+ // Specifies the customer-provided encryption key to use in encrypting data
+ SseCustomerKey string `protobuf:"bytes,23,opt,name=sse_customer_key,json=sseCustomerKey,proto3" json:"sse_customer_key,omitempty"`
+ // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321
+ SseCustomerKeyMd5 string `protobuf:"bytes,24,opt,name=sse_customer_key_md5,json=sseCustomerKeyMd5,proto3" json:"sse_customer_key_md5,omitempty"`
+ // Specifies the Amazon Web Services KMS Encryption Context to use for object encryption
+ SseKmsEncryptionContext string `protobuf:"bytes,25,opt,name=sse_kms_encryption_context,json=sseKmsEncryptionContext,proto3" json:"sse_kms_encryption_context,omitempty"`
// Specifies the ID of the symmetric customer managed key to use for object encryption
- SseKmsKeyId string `protobuf:"bytes,6,opt,name=sse_kms_key_id,json=sseKmsKeyId,proto3" json:"sse_kms_key_id,omitempty"`
- // The server-side encryption algorithm used when storing this object in Amazon S3
- // (for example, AES256, aws:kms).
- ServerSideEncryption string `protobuf:"bytes,7,opt,name=server_side_encryption,json=serverSideEncryption,proto3" json:"server_side_encryption,omitempty"`
+ SseKmsKeyId string `protobuf:"bytes,26,opt,name=sse_kms_key_id,json=sseKmsKeyId,proto3" json:"sse_kms_key_id,omitempty"`
+ // The server-side encryption algorithm used when storing this object
+ ServerSideEncryption string `protobuf:"bytes,27,opt,name=server_side_encryption,json=serverSideEncryption,proto3" json:"server_side_encryption,omitempty"`
+ // By default, oss store uses the STANDARD Storage Class to store newly created objects
+ StorageClass string `protobuf:"bytes,28,opt,name=storage_class,json=storageClass,proto3" json:"storage_class,omitempty"`
+ // The tag-set for the object. The tag-set must be encoded as URL Query parameters.
+ Tagging map[string]string `protobuf:"bytes,29,rep,name=tagging,proto3" json:"tagging,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ // If the bucket is configured as a website, redirects requests for this object to
+ // another object in the same bucket or to an external URL.
+ WebsiteRedirectLocation string `protobuf:"bytes,30,opt,name=website_redirect_location,json=websiteRedirectLocation,proto3" json:"website_redirect_location,omitempty"`
}
-func (x *UploadPartOutput) Reset() {
- *x = UploadPartOutput{}
+func (x *CreateMultipartUploadInput) Reset() {
+ *x = CreateMultipartUploadInput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[34]
+ mi := &file_oss_proto_msgTypes[39]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *UploadPartOutput) String() string {
+func (x *CreateMultipartUploadInput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*UploadPartOutput) ProtoMessage() {}
+func (*CreateMultipartUploadInput) ProtoMessage() {}
-func (x *UploadPartOutput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[34]
+func (x *CreateMultipartUploadInput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[39]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3565,284 +3627,285 @@ func (x *UploadPartOutput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use UploadPartOutput.ProtoReflect.Descriptor instead.
-func (*UploadPartOutput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{34}
+// Deprecated: Use CreateMultipartUploadInput.ProtoReflect.Descriptor instead.
+func (*CreateMultipartUploadInput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{39}
}
-func (x *UploadPartOutput) GetBucketKeyEnabled() bool {
+func (x *CreateMultipartUploadInput) GetStoreName() string {
+ if x != nil {
+ return x.StoreName
+ }
+ return ""
+}
+
+func (x *CreateMultipartUploadInput) GetBucket() string {
+ if x != nil {
+ return x.Bucket
+ }
+ return ""
+}
+
+func (x *CreateMultipartUploadInput) GetKey() string {
+ if x != nil {
+ return x.Key
+ }
+ return ""
+}
+
+func (x *CreateMultipartUploadInput) GetAcl() string {
+ if x != nil {
+ return x.Acl
+ }
+ return ""
+}
+
+func (x *CreateMultipartUploadInput) GetBucketKeyEnabled() bool {
if x != nil {
return x.BucketKeyEnabled
}
return false
}
-func (x *UploadPartOutput) GetEtag() string {
+func (x *CreateMultipartUploadInput) GetCacheControl() string {
if x != nil {
- return x.Etag
+ return x.CacheControl
}
return ""
}
-func (x *UploadPartOutput) GetRequestCharged() string {
+func (x *CreateMultipartUploadInput) GetContentDisposition() string {
if x != nil {
- return x.RequestCharged
+ return x.ContentDisposition
}
return ""
}
-func (x *UploadPartOutput) GetSseCustomerAlgorithm() string {
+func (x *CreateMultipartUploadInput) GetContentEncoding() string {
if x != nil {
- return x.SseCustomerAlgorithm
+ return x.ContentEncoding
}
return ""
}
-func (x *UploadPartOutput) GetSseCustomerKeyMd5() string {
+func (x *CreateMultipartUploadInput) GetContentLanguage() string {
if x != nil {
- return x.SseCustomerKeyMd5
+ return x.ContentLanguage
}
return ""
}
-func (x *UploadPartOutput) GetSseKmsKeyId() string {
+func (x *CreateMultipartUploadInput) GetContentType() string {
if x != nil {
- return x.SseKmsKeyId
+ return x.ContentType
}
return ""
}
-func (x *UploadPartOutput) GetServerSideEncryption() string {
+func (x *CreateMultipartUploadInput) GetExpectedBucketOwner() string {
if x != nil {
- return x.ServerSideEncryption
+ return x.ExpectedBucketOwner
}
return ""
}
-// UploadPartCopyInput
-type UploadPartCopyInput struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
+func (x *CreateMultipartUploadInput) GetExpires() int64 {
+ if x != nil {
+ return x.Expires
+ }
+ return 0
+}
- // Required. The name of oss store.
- StoreName string `protobuf:"bytes,1,opt,name=store_name,json=storeName,proto3" json:"store_name,omitempty"`
- // The bucket name containing the object
- // This member is required
- Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
- // Name of the object key.
- // This member is required.
- Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
- // CopySource
- CopySource *CopySource `protobuf:"bytes,4,opt,name=copy_source,json=copySource,proto3" json:"copy_source,omitempty"`
- // Part number of part being copied. This is a positive integer between 1 and 10,000.
- // This member is required.
- PartNumber int32 `protobuf:"varint,5,opt,name=part_number,json=partNumber,proto3" json:"part_number,omitempty"`
- // Upload ID identifying the multipart upload whose part is being copied.
- // This member is required.
- UploadId string `protobuf:"bytes,6,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`
- // The range of bytes to copy from the source object.bytes=start_position-part_size
- StartPosition int64 `protobuf:"varint,7,opt,name=start_position,json=startPosition,proto3" json:"start_position,omitempty"`
- // Part size
- PartSize int64 `protobuf:"varint,8,opt,name=part_size,json=partSize,proto3" json:"part_size,omitempty"`
-}
-
-func (x *UploadPartCopyInput) Reset() {
- *x = UploadPartCopyInput{}
- if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[35]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
+func (x *CreateMultipartUploadInput) GetGrantFullControl() string {
+ if x != nil {
+ return x.GrantFullControl
}
+ return ""
}
-func (x *UploadPartCopyInput) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*UploadPartCopyInput) ProtoMessage() {}
-
-func (x *UploadPartCopyInput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[35]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
+func (x *CreateMultipartUploadInput) GetGrantRead() string {
+ if x != nil {
+ return x.GrantRead
}
- return mi.MessageOf(x)
+ return ""
}
-// Deprecated: Use UploadPartCopyInput.ProtoReflect.Descriptor instead.
-func (*UploadPartCopyInput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{35}
+func (x *CreateMultipartUploadInput) GetGrantReadAcp() string {
+ if x != nil {
+ return x.GrantReadAcp
+ }
+ return ""
}
-func (x *UploadPartCopyInput) GetStoreName() string {
+func (x *CreateMultipartUploadInput) GetGrantWriteAcp() string {
if x != nil {
- return x.StoreName
+ return x.GrantWriteAcp
}
return ""
}
-func (x *UploadPartCopyInput) GetBucket() string {
+func (x *CreateMultipartUploadInput) GetMetaData() map[string]string {
if x != nil {
- return x.Bucket
+ return x.MetaData
}
- return ""
+ return nil
}
-func (x *UploadPartCopyInput) GetKey() string {
+func (x *CreateMultipartUploadInput) GetObjectLockLegalHoldStatus() string {
if x != nil {
- return x.Key
+ return x.ObjectLockLegalHoldStatus
}
return ""
}
-func (x *UploadPartCopyInput) GetCopySource() *CopySource {
+func (x *CreateMultipartUploadInput) GetObjectLockMode() string {
if x != nil {
- return x.CopySource
+ return x.ObjectLockMode
}
- return nil
+ return ""
}
-func (x *UploadPartCopyInput) GetPartNumber() int32 {
+func (x *CreateMultipartUploadInput) GetObjectLockRetainUntilDate() int64 {
if x != nil {
- return x.PartNumber
+ return x.ObjectLockRetainUntilDate
}
return 0
}
-func (x *UploadPartCopyInput) GetUploadId() string {
+func (x *CreateMultipartUploadInput) GetRequestPayer() string {
if x != nil {
- return x.UploadId
+ return x.RequestPayer
}
return ""
}
-func (x *UploadPartCopyInput) GetStartPosition() int64 {
+func (x *CreateMultipartUploadInput) GetSseCustomerAlgorithm() string {
if x != nil {
- return x.StartPosition
+ return x.SseCustomerAlgorithm
}
- return 0
+ return ""
}
-func (x *UploadPartCopyInput) GetPartSize() int64 {
+func (x *CreateMultipartUploadInput) GetSseCustomerKey() string {
if x != nil {
- return x.PartSize
+ return x.SseCustomerKey
}
- return 0
+ return ""
}
-// CopyPartResult
-type CopyPartResult struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Entity tag of the object.
- Etag string `protobuf:"bytes,1,opt,name=etag,proto3" json:"etag,omitempty"`
- // Last modified time
- LastModified int64 `protobuf:"varint,2,opt,name=last_modified,json=lastModified,proto3" json:"last_modified,omitempty"`
+func (x *CreateMultipartUploadInput) GetSseCustomerKeyMd5() string {
+ if x != nil {
+ return x.SseCustomerKeyMd5
+ }
+ return ""
}
-func (x *CopyPartResult) Reset() {
- *x = CopyPartResult{}
- if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[36]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
+func (x *CreateMultipartUploadInput) GetSseKmsEncryptionContext() string {
+ if x != nil {
+ return x.SseKmsEncryptionContext
}
+ return ""
}
-func (x *CopyPartResult) String() string {
- return protoimpl.X.MessageStringOf(x)
+func (x *CreateMultipartUploadInput) GetSseKmsKeyId() string {
+ if x != nil {
+ return x.SseKmsKeyId
+ }
+ return ""
}
-func (*CopyPartResult) ProtoMessage() {}
-
-func (x *CopyPartResult) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[36]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
+func (x *CreateMultipartUploadInput) GetServerSideEncryption() string {
+ if x != nil {
+ return x.ServerSideEncryption
}
- return mi.MessageOf(x)
+ return ""
}
-// Deprecated: Use CopyPartResult.ProtoReflect.Descriptor instead.
-func (*CopyPartResult) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{36}
+func (x *CreateMultipartUploadInput) GetStorageClass() string {
+ if x != nil {
+ return x.StorageClass
+ }
+ return ""
}
-func (x *CopyPartResult) GetEtag() string {
+func (x *CreateMultipartUploadInput) GetTagging() map[string]string {
if x != nil {
- return x.Etag
+ return x.Tagging
}
- return ""
+ return nil
}
-func (x *CopyPartResult) GetLastModified() int64 {
+func (x *CreateMultipartUploadInput) GetWebsiteRedirectLocation() string {
if x != nil {
- return x.LastModified
+ return x.WebsiteRedirectLocation
}
- return 0
+ return ""
}
-// UploadPartCopyOutput
-type UploadPartCopyOutput struct {
+// CreateMultipartUploadOutput
+type CreateMultipartUploadOutput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
+ // The bucket name containing the object
+ // This member is required
+ Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"`
+ // Name of the object key.
+ // This member is required.
+ Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
+ // If the bucket has a lifecycle rule configured with an action to abort incomplete
+ // multipart uploads and the prefix in the lifecycle rule matches the object name
+ // in the request, the response includes this header
+ AbortDate int64 `protobuf:"varint,3,opt,name=abort_date,json=abortDate,proto3" json:"abort_date,omitempty"`
+ // It identifies the applicable lifecycle configuration rule that defines the action to abort
+ // incomplete multipart uploads.
+ AbortRuleId string `protobuf:"bytes,4,opt,name=abort_rule_id,json=abortRuleId,proto3" json:"abort_rule_id,omitempty"`
// Indicates whether the multipart upload uses an S3 Bucket Key for server-side
// encryption with Amazon Web Services KMS (SSE-KMS).
- BucketKeyEnabled bool `protobuf:"varint,1,opt,name=bucket_key_enabled,json=bucketKeyEnabled,proto3" json:"bucket_key_enabled,omitempty"`
- // Container for all response elements.
- CopyPartResult *CopyPartResult `protobuf:"bytes,2,opt,name=copy_part_result,json=copyPartResult,proto3" json:"copy_part_result,omitempty"`
- // The version of the source object that was copied, if you have enabled versioning
- // on the source bucket.
- CopySourceVersionId string `protobuf:"bytes,3,opt,name=copy_source_version_id,json=copySourceVersionId,proto3" json:"copy_source_version_id,omitempty"`
+ BucketKeyEnabled bool `protobuf:"varint,5,opt,name=bucket_key_enabled,json=bucketKeyEnabled,proto3" json:"bucket_key_enabled,omitempty"`
// If present, indicates that the requester was successfully charged for the
// request.
- RequestCharged string `protobuf:"bytes,4,opt,name=request_charged,json=requestCharged,proto3" json:"request_charged,omitempty"`
+ RequestCharged string `protobuf:"bytes,6,opt,name=request_charged,json=requestCharged,proto3" json:"request_charged,omitempty"`
// If server-side encryption with a customer-provided encryption key was requested,
// the response will include this header confirming the encryption algorithm used.
- SseCustomerAlgorithm string `protobuf:"bytes,5,opt,name=sse_customer_algorithm,json=sseCustomerAlgorithm,proto3" json:"sse_customer_algorithm,omitempty"`
+ SseCustomerAlgorithm string `protobuf:"bytes,7,opt,name=sse_customer_algorithm,json=sseCustomerAlgorithm,proto3" json:"sse_customer_algorithm,omitempty"`
// If server-side encryption with a customer-provided encryption key was requested,
// the response will include this header to provide round-trip message integrity
// verification of the customer-provided encryption key.
- SseCustomerKeyMd5 string `protobuf:"bytes,6,opt,name=sse_customer_key_md5,json=sseCustomerKeyMd5,proto3" json:"sse_customer_key_md5,omitempty"`
+ SseCustomerKeyMd5 string `protobuf:"bytes,8,opt,name=sse_customer_key_md5,json=sseCustomerKeyMd5,proto3" json:"sse_customer_key_md5,omitempty"`
+ // If present, specifies the Amazon Web Services KMS Encryption Context to use for
+ // object encryption. The value of this header is a base64-encoded UTF-8 string
+ // holding JSON with the encryption context key-value pairs.
+ SseKmsEncryptionContext string `protobuf:"bytes,9,opt,name=sse_kms_encryption_context,json=sseKmsEncryptionContext,proto3" json:"sse_kms_encryption_context,omitempty"`
// If present, specifies the ID of the Amazon Web Services Key Management Service
// (Amazon Web Services KMS) symmetric customer managed key that was used for the
// object.
- SseKmsKeyId string `protobuf:"bytes,7,opt,name=sse_kms_key_id,json=sseKmsKeyId,proto3" json:"sse_kms_key_id,omitempty"`
+ SseKmsKeyId string `protobuf:"bytes,10,opt,name=sse_kms_key_id,json=sseKmsKeyId,proto3" json:"sse_kms_key_id,omitempty"`
// The server-side encryption algorithm used when storing this object in Amazon S3
// (for example, AES256, aws:kms).
- ServerSideEncryption string `protobuf:"bytes,8,opt,name=server_side_encryption,json=serverSideEncryption,proto3" json:"server_side_encryption,omitempty"`
+ ServerSideEncryption string `protobuf:"bytes,11,opt,name=server_side_encryption,json=serverSideEncryption,proto3" json:"server_side_encryption,omitempty"`
+ // ID for the initiated multipart upload.
+ UploadId string `protobuf:"bytes,12,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`
}
-func (x *UploadPartCopyOutput) Reset() {
- *x = UploadPartCopyOutput{}
+func (x *CreateMultipartUploadOutput) Reset() {
+ *x = CreateMultipartUploadOutput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[37]
+ mi := &file_oss_proto_msgTypes[40]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *UploadPartCopyOutput) String() string {
+func (x *CreateMultipartUploadOutput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*UploadPartCopyOutput) ProtoMessage() {}
+func (*CreateMultipartUploadOutput) ProtoMessage() {}
-func (x *UploadPartCopyOutput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[37]
+func (x *CreateMultipartUploadOutput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[40]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -3853,177 +3916,97 @@ func (x *UploadPartCopyOutput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use UploadPartCopyOutput.ProtoReflect.Descriptor instead.
-func (*UploadPartCopyOutput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{37}
+// Deprecated: Use CreateMultipartUploadOutput.ProtoReflect.Descriptor instead.
+func (*CreateMultipartUploadOutput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{40}
}
-func (x *UploadPartCopyOutput) GetBucketKeyEnabled() bool {
+func (x *CreateMultipartUploadOutput) GetBucket() string {
if x != nil {
- return x.BucketKeyEnabled
+ return x.Bucket
}
- return false
+ return ""
}
-func (x *UploadPartCopyOutput) GetCopyPartResult() *CopyPartResult {
+func (x *CreateMultipartUploadOutput) GetKey() string {
if x != nil {
- return x.CopyPartResult
+ return x.Key
}
- return nil
+ return ""
}
-func (x *UploadPartCopyOutput) GetCopySourceVersionId() string {
+func (x *CreateMultipartUploadOutput) GetAbortDate() int64 {
if x != nil {
- return x.CopySourceVersionId
+ return x.AbortDate
}
- return ""
+ return 0
}
-func (x *UploadPartCopyOutput) GetRequestCharged() string {
+func (x *CreateMultipartUploadOutput) GetAbortRuleId() string {
if x != nil {
- return x.RequestCharged
+ return x.AbortRuleId
}
return ""
}
-func (x *UploadPartCopyOutput) GetSseCustomerAlgorithm() string {
+func (x *CreateMultipartUploadOutput) GetBucketKeyEnabled() bool {
if x != nil {
- return x.SseCustomerAlgorithm
+ return x.BucketKeyEnabled
}
- return ""
+ return false
}
-func (x *UploadPartCopyOutput) GetSseCustomerKeyMd5() string {
+func (x *CreateMultipartUploadOutput) GetRequestCharged() string {
if x != nil {
- return x.SseCustomerKeyMd5
+ return x.RequestCharged
}
return ""
}
-func (x *UploadPartCopyOutput) GetSseKmsKeyId() string {
+func (x *CreateMultipartUploadOutput) GetSseCustomerAlgorithm() string {
if x != nil {
- return x.SseKmsKeyId
+ return x.SseCustomerAlgorithm
}
return ""
}
-func (x *UploadPartCopyOutput) GetServerSideEncryption() string {
+func (x *CreateMultipartUploadOutput) GetSseCustomerKeyMd5() string {
if x != nil {
- return x.ServerSideEncryption
+ return x.SseCustomerKeyMd5
}
return ""
}
-// CompletedPart
-type CompletedPart struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Entity tag returned when the part was uploaded.
- Etag string `protobuf:"bytes,1,opt,name=etag,proto3" json:"etag,omitempty"`
- // Part number that identifies the part. This is a positive integer between 1 and
- // 10,000.
- PartNumber int32 `protobuf:"varint,2,opt,name=part_number,json=partNumber,proto3" json:"part_number,omitempty"`
-}
-
-func (x *CompletedPart) Reset() {
- *x = CompletedPart{}
- if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[38]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *CompletedPart) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*CompletedPart) ProtoMessage() {}
-
-func (x *CompletedPart) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[38]
- 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 CompletedPart.ProtoReflect.Descriptor instead.
-func (*CompletedPart) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{38}
-}
-
-func (x *CompletedPart) GetEtag() string {
+func (x *CreateMultipartUploadOutput) GetSseKmsEncryptionContext() string {
if x != nil {
- return x.Etag
+ return x.SseKmsEncryptionContext
}
return ""
}
-func (x *CompletedPart) GetPartNumber() int32 {
+func (x *CreateMultipartUploadOutput) GetSseKmsKeyId() string {
if x != nil {
- return x.PartNumber
- }
- return 0
-}
-
-// CompletedMultipartUpload
-type CompletedMultipartUpload struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Array of CompletedPart data types.
- Parts []*CompletedPart `protobuf:"bytes,1,rep,name=parts,proto3" json:"parts,omitempty"`
-}
-
-func (x *CompletedMultipartUpload) Reset() {
- *x = CompletedMultipartUpload{}
- if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[39]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
+ return x.SseKmsKeyId
}
+ return ""
}
-func (x *CompletedMultipartUpload) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*CompletedMultipartUpload) ProtoMessage() {}
-
-func (x *CompletedMultipartUpload) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[39]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
+func (x *CreateMultipartUploadOutput) GetServerSideEncryption() string {
+ if x != nil {
+ return x.ServerSideEncryption
}
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use CompletedMultipartUpload.ProtoReflect.Descriptor instead.
-func (*CompletedMultipartUpload) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{39}
+ return ""
}
-func (x *CompletedMultipartUpload) GetParts() []*CompletedPart {
+func (x *CreateMultipartUploadOutput) GetUploadId() string {
if x != nil {
- return x.Parts
+ return x.UploadId
}
- return nil
+ return ""
}
-// CompleteMultipartUploadInput
-type CompleteMultipartUploadInput struct {
+// UploadPartInput
+type UploadPartInput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
@@ -4036,34 +4019,50 @@ type CompleteMultipartUploadInput struct {
// Name of the object key.
// This member is required.
Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
- // ID for the initiated multipart upload.
+ // Object data.
+ Body []byte `protobuf:"bytes,4,opt,name=body,proto3" json:"body,omitempty"`
+ // Size of the body in bytes. This parameter is useful when the size of the body
+ // cannot be determined automatically.
+ ContentLength int64 `protobuf:"varint,5,opt,name=content_length,json=contentLength,proto3" json:"content_length,omitempty"`
+ // The base64-encoded 128-bit MD5 digest of the part data.
+ ContentMd5 string `protobuf:"bytes,6,opt,name=content_md5,json=contentMd5,proto3" json:"content_md5,omitempty"`
+ // The account ID of the expected bucket owner
+ ExpectedBucketOwner string `protobuf:"bytes,7,opt,name=expected_bucket_owner,json=expectedBucketOwner,proto3" json:"expected_bucket_owner,omitempty"`
+ // Part number of part being uploaded. This is a positive integer between 1 and 10,000.
// This member is required.
- UploadId string `protobuf:"bytes,4,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`
+ PartNumber int32 `protobuf:"varint,8,opt,name=part_number,json=partNumber,proto3" json:"part_number,omitempty"`
// Confirms that the requester knows that they will be charged for the request.
- RequestPayer string `protobuf:"bytes,5,opt,name=request_payer,json=requestPayer,proto3" json:"request_payer,omitempty"`
- // Expected bucket owner
- ExpectedBucketOwner string `protobuf:"bytes,6,opt,name=expected_bucket_owner,json=expectedBucketOwner,proto3" json:"expected_bucket_owner,omitempty"`
- // The container for the multipart upload request information.
- MultipartUpload *CompletedMultipartUpload `protobuf:"bytes,7,opt,name=multipart_upload,json=multipartUpload,proto3" json:"multipart_upload,omitempty"`
+ RequestPayer string `protobuf:"bytes,9,opt,name=request_payer,json=requestPayer,proto3" json:"request_payer,omitempty"`
+ // Specifies the algorithm to use to when encrypting the object (for example,
+ // AES256).
+ SseCustomerAlgorithm string `protobuf:"bytes,10,opt,name=sse_customer_algorithm,json=sseCustomerAlgorithm,proto3" json:"sse_customer_algorithm,omitempty"`
+ // Specifies the customer-provided encryption key for Amazon S3 to use in
+ // encrypting data
+ SseCustomerKey string `protobuf:"bytes,11,opt,name=sse_customer_key,json=sseCustomerKey,proto3" json:"sse_customer_key,omitempty"`
+ // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ SseCustomerKeyMd5 string `protobuf:"bytes,12,opt,name=sse_customer_key_md5,json=sseCustomerKeyMd5,proto3" json:"sse_customer_key_md5,omitempty"`
+ // Upload ID identifying the multipart upload whose part is being uploaded.
+ // This member is required.
+ UploadId string `protobuf:"bytes,13,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`
}
-func (x *CompleteMultipartUploadInput) Reset() {
- *x = CompleteMultipartUploadInput{}
+func (x *UploadPartInput) Reset() {
+ *x = UploadPartInput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[40]
+ mi := &file_oss_proto_msgTypes[41]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *CompleteMultipartUploadInput) String() string {
+func (x *UploadPartInput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*CompleteMultipartUploadInput) ProtoMessage() {}
+func (*UploadPartInput) ProtoMessage() {}
-func (x *CompleteMultipartUploadInput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[40]
+func (x *UploadPartInput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[41]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -4074,114 +4073,145 @@ func (x *CompleteMultipartUploadInput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use CompleteMultipartUploadInput.ProtoReflect.Descriptor instead.
-func (*CompleteMultipartUploadInput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{40}
+// Deprecated: Use UploadPartInput.ProtoReflect.Descriptor instead.
+func (*UploadPartInput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{41}
}
-func (x *CompleteMultipartUploadInput) GetStoreName() string {
+func (x *UploadPartInput) GetStoreName() string {
if x != nil {
return x.StoreName
}
return ""
}
-func (x *CompleteMultipartUploadInput) GetBucket() string {
+func (x *UploadPartInput) GetBucket() string {
if x != nil {
return x.Bucket
}
return ""
}
-func (x *CompleteMultipartUploadInput) GetKey() string {
+func (x *UploadPartInput) GetKey() string {
if x != nil {
return x.Key
}
return ""
}
-func (x *CompleteMultipartUploadInput) GetUploadId() string {
+func (x *UploadPartInput) GetBody() []byte {
if x != nil {
- return x.UploadId
+ return x.Body
+ }
+ return nil
+}
+
+func (x *UploadPartInput) GetContentLength() int64 {
+ if x != nil {
+ return x.ContentLength
+ }
+ return 0
+}
+
+func (x *UploadPartInput) GetContentMd5() string {
+ if x != nil {
+ return x.ContentMd5
}
return ""
}
-func (x *CompleteMultipartUploadInput) GetRequestPayer() string {
+func (x *UploadPartInput) GetExpectedBucketOwner() string {
+ if x != nil {
+ return x.ExpectedBucketOwner
+ }
+ return ""
+}
+
+func (x *UploadPartInput) GetPartNumber() int32 {
+ if x != nil {
+ return x.PartNumber
+ }
+ return 0
+}
+
+func (x *UploadPartInput) GetRequestPayer() string {
if x != nil {
return x.RequestPayer
}
return ""
}
-func (x *CompleteMultipartUploadInput) GetExpectedBucketOwner() string {
+func (x *UploadPartInput) GetSseCustomerAlgorithm() string {
if x != nil {
- return x.ExpectedBucketOwner
+ return x.SseCustomerAlgorithm
}
return ""
}
-func (x *CompleteMultipartUploadInput) GetMultipartUpload() *CompletedMultipartUpload {
+func (x *UploadPartInput) GetSseCustomerKey() string {
if x != nil {
- return x.MultipartUpload
+ return x.SseCustomerKey
}
- return nil
+ return ""
}
-// CompleteMultipartUploadOutput
-type CompleteMultipartUploadOutput struct {
+func (x *UploadPartInput) GetSseCustomerKeyMd5() string {
+ if x != nil {
+ return x.SseCustomerKeyMd5
+ }
+ return ""
+}
+
+func (x *UploadPartInput) GetUploadId() string {
+ if x != nil {
+ return x.UploadId
+ }
+ return ""
+}
+
+// UploadPartOutput
+type UploadPartOutput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // The bucket name containing the object
- // This member is required
- Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"`
- // Name of the object key.
- // This member is required.
- Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
// Indicates whether the multipart upload uses an S3 Bucket Key for server-side
// encryption with Amazon Web Services KMS (SSE-KMS).
- BucketKeyEnabled bool `protobuf:"varint,3,opt,name=bucket_key_enabled,json=bucketKeyEnabled,proto3" json:"bucket_key_enabled,omitempty"`
- // Entity tag that identifies the newly created object's data
- Etag string `protobuf:"bytes,4,opt,name=etag,proto3" json:"etag,omitempty"`
- // If the object expiration is configured, this will contain the expiration date
- // (expiry-date) and rule ID (rule-id). The value of rule-id is URL-encoded.
- Expiration string `protobuf:"bytes,5,opt,name=expiration,proto3" json:"expiration,omitempty"`
- // The URI that identifies the newly created object.
- Location string `protobuf:"bytes,6,opt,name=location,proto3" json:"location,omitempty"`
+ BucketKeyEnabled bool `protobuf:"varint,1,opt,name=bucket_key_enabled,json=bucketKeyEnabled,proto3" json:"bucket_key_enabled,omitempty"`
+ // Entity tag for the uploaded object.
+ Etag string `protobuf:"bytes,2,opt,name=etag,proto3" json:"etag,omitempty"`
// If present, indicates that the requester was successfully charged for the
// request.
- RequestCharged string `protobuf:"bytes,7,opt,name=request_charged,json=requestCharged,proto3" json:"request_charged,omitempty"`
- // If present, specifies the ID of the Amazon Web Services Key Management Service
- // (Amazon Web Services KMS) symmetric customer managed key that was used for the
- // object.
- SseKmsKeyId string `protobuf:"bytes,8,opt,name=sse_kms_keyId,json=sseKmsKeyId,proto3" json:"sse_kms_keyId,omitempty"`
+ RequestCharged string `protobuf:"bytes,3,opt,name=request_charged,json=requestCharged,proto3" json:"request_charged,omitempty"`
+ // Specifies the algorithm to use to when encrypting the object (for example,
+ // AES256).
+ SseCustomerAlgorithm string `protobuf:"bytes,4,opt,name=sse_customer_algorithm,json=sseCustomerAlgorithm,proto3" json:"sse_customer_algorithm,omitempty"`
+ // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ SseCustomerKeyMd5 string `protobuf:"bytes,5,opt,name=sse_customer_key_md5,json=sseCustomerKeyMd5,proto3" json:"sse_customer_key_md5,omitempty"`
+ // Specifies the ID of the symmetric customer managed key to use for object encryption
+ SseKmsKeyId string `protobuf:"bytes,6,opt,name=sse_kms_key_id,json=sseKmsKeyId,proto3" json:"sse_kms_key_id,omitempty"`
// The server-side encryption algorithm used when storing this object in Amazon S3
// (for example, AES256, aws:kms).
- ServerSideEncryption string `protobuf:"bytes,9,opt,name=server_side_encryption,json=serverSideEncryption,proto3" json:"server_side_encryption,omitempty"`
- // Version ID of the newly created object, in case the bucket has versioning turned
- // on.
- VersionId string `protobuf:"bytes,10,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"`
+ ServerSideEncryption string `protobuf:"bytes,7,opt,name=server_side_encryption,json=serverSideEncryption,proto3" json:"server_side_encryption,omitempty"`
}
-func (x *CompleteMultipartUploadOutput) Reset() {
- *x = CompleteMultipartUploadOutput{}
+func (x *UploadPartOutput) Reset() {
+ *x = UploadPartOutput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[41]
+ mi := &file_oss_proto_msgTypes[42]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *CompleteMultipartUploadOutput) String() string {
+func (x *UploadPartOutput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*CompleteMultipartUploadOutput) ProtoMessage() {}
+func (*UploadPartOutput) ProtoMessage() {}
-func (x *CompleteMultipartUploadOutput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[41]
+func (x *UploadPartOutput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[42]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -4192,83 +4222,62 @@ func (x *CompleteMultipartUploadOutput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use CompleteMultipartUploadOutput.ProtoReflect.Descriptor instead.
-func (*CompleteMultipartUploadOutput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{41}
-}
-
-func (x *CompleteMultipartUploadOutput) GetBucket() string {
- if x != nil {
- return x.Bucket
- }
- return ""
-}
-
-func (x *CompleteMultipartUploadOutput) GetKey() string {
- if x != nil {
- return x.Key
- }
- return ""
+// Deprecated: Use UploadPartOutput.ProtoReflect.Descriptor instead.
+func (*UploadPartOutput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{42}
}
-func (x *CompleteMultipartUploadOutput) GetBucketKeyEnabled() bool {
+func (x *UploadPartOutput) GetBucketKeyEnabled() bool {
if x != nil {
return x.BucketKeyEnabled
}
return false
}
-func (x *CompleteMultipartUploadOutput) GetEtag() string {
+func (x *UploadPartOutput) GetEtag() string {
if x != nil {
return x.Etag
}
return ""
}
-func (x *CompleteMultipartUploadOutput) GetExpiration() string {
+func (x *UploadPartOutput) GetRequestCharged() string {
if x != nil {
- return x.Expiration
+ return x.RequestCharged
}
return ""
}
-func (x *CompleteMultipartUploadOutput) GetLocation() string {
+func (x *UploadPartOutput) GetSseCustomerAlgorithm() string {
if x != nil {
- return x.Location
+ return x.SseCustomerAlgorithm
}
return ""
}
-func (x *CompleteMultipartUploadOutput) GetRequestCharged() string {
+func (x *UploadPartOutput) GetSseCustomerKeyMd5() string {
if x != nil {
- return x.RequestCharged
+ return x.SseCustomerKeyMd5
}
return ""
}
-func (x *CompleteMultipartUploadOutput) GetSseKmsKeyId() string {
+func (x *UploadPartOutput) GetSseKmsKeyId() string {
if x != nil {
return x.SseKmsKeyId
}
return ""
}
-func (x *CompleteMultipartUploadOutput) GetServerSideEncryption() string {
+func (x *UploadPartOutput) GetServerSideEncryption() string {
if x != nil {
return x.ServerSideEncryption
}
return ""
}
-func (x *CompleteMultipartUploadOutput) GetVersionId() string {
- if x != nil {
- return x.VersionId
- }
- return ""
-}
-
-// AbortMultipartUploadInput
-type AbortMultipartUploadInput struct {
+// UploadPartCopyInput
+type UploadPartCopyInput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
@@ -4281,32 +4290,37 @@ type AbortMultipartUploadInput struct {
// Name of the object key.
// This member is required.
Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
- // The account ID of the expected bucket owner
- ExpectedBucketOwner string `protobuf:"bytes,4,opt,name=expected_bucket_owner,json=expectedBucketOwner,proto3" json:"expected_bucket_owner,omitempty"`
- // Confirms that the requester knows that they will be charged for the request.
- RequestPayer string `protobuf:"bytes,5,opt,name=request_payer,json=requestPayer,proto3" json:"request_payer,omitempty"`
- // Upload ID that identifies the multipart upload.
+ // CopySource
+ CopySource *CopySource `protobuf:"bytes,4,opt,name=copy_source,json=copySource,proto3" json:"copy_source,omitempty"`
+ // Part number of part being copied. This is a positive integer between 1 and 10,000.
+ // This member is required.
+ PartNumber int32 `protobuf:"varint,5,opt,name=part_number,json=partNumber,proto3" json:"part_number,omitempty"`
+ // Upload ID identifying the multipart upload whose part is being copied.
// This member is required.
UploadId string `protobuf:"bytes,6,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`
+ // The range of bytes to copy from the source object.bytes=start_position-part_size
+ StartPosition int64 `protobuf:"varint,7,opt,name=start_position,json=startPosition,proto3" json:"start_position,omitempty"`
+ // Part size
+ PartSize int64 `protobuf:"varint,8,opt,name=part_size,json=partSize,proto3" json:"part_size,omitempty"`
}
-func (x *AbortMultipartUploadInput) Reset() {
- *x = AbortMultipartUploadInput{}
+func (x *UploadPartCopyInput) Reset() {
+ *x = UploadPartCopyInput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[42]
+ mi := &file_oss_proto_msgTypes[43]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *AbortMultipartUploadInput) String() string {
+func (x *UploadPartCopyInput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*AbortMultipartUploadInput) ProtoMessage() {}
+func (*UploadPartCopyInput) ProtoMessage() {}
-func (x *AbortMultipartUploadInput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[42]
+func (x *UploadPartCopyInput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[43]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -4317,151 +4331,81 @@ func (x *AbortMultipartUploadInput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use AbortMultipartUploadInput.ProtoReflect.Descriptor instead.
-func (*AbortMultipartUploadInput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{42}
+// Deprecated: Use UploadPartCopyInput.ProtoReflect.Descriptor instead.
+func (*UploadPartCopyInput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{43}
}
-func (x *AbortMultipartUploadInput) GetStoreName() string {
+func (x *UploadPartCopyInput) GetStoreName() string {
if x != nil {
return x.StoreName
}
return ""
}
-func (x *AbortMultipartUploadInput) GetBucket() string {
+func (x *UploadPartCopyInput) GetBucket() string {
if x != nil {
return x.Bucket
}
return ""
}
-func (x *AbortMultipartUploadInput) GetKey() string {
+func (x *UploadPartCopyInput) GetKey() string {
if x != nil {
return x.Key
}
return ""
}
-func (x *AbortMultipartUploadInput) GetExpectedBucketOwner() string {
+func (x *UploadPartCopyInput) GetCopySource() *CopySource {
if x != nil {
- return x.ExpectedBucketOwner
+ return x.CopySource
}
- return ""
+ return nil
}
-func (x *AbortMultipartUploadInput) GetRequestPayer() string {
+func (x *UploadPartCopyInput) GetPartNumber() int32 {
if x != nil {
- return x.RequestPayer
+ return x.PartNumber
}
- return ""
+ return 0
}
-func (x *AbortMultipartUploadInput) GetUploadId() string {
+func (x *UploadPartCopyInput) GetUploadId() string {
if x != nil {
return x.UploadId
}
return ""
}
-// AbortMultipartUploadOutput
-type AbortMultipartUploadOutput struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // If present, indicates that the requester was successfully charged for the request.
- RequestCharged string `protobuf:"bytes,1,opt,name=request_charged,json=requestCharged,proto3" json:"request_charged,omitempty"`
-}
-
-func (x *AbortMultipartUploadOutput) Reset() {
- *x = AbortMultipartUploadOutput{}
- if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[43]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *AbortMultipartUploadOutput) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*AbortMultipartUploadOutput) ProtoMessage() {}
-
-func (x *AbortMultipartUploadOutput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[43]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
+func (x *UploadPartCopyInput) GetStartPosition() int64 {
+ if x != nil {
+ return x.StartPosition
}
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use AbortMultipartUploadOutput.ProtoReflect.Descriptor instead.
-func (*AbortMultipartUploadOutput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{43}
+ return 0
}
-func (x *AbortMultipartUploadOutput) GetRequestCharged() string {
+func (x *UploadPartCopyInput) GetPartSize() int64 {
if x != nil {
- return x.RequestCharged
+ return x.PartSize
}
- return ""
+ return 0
}
-// ListMultipartUploadsInput
-type ListMultipartUploadsInput struct {
+// CopyPartResult
+type CopyPartResult struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Required. The name of oss store.
- StoreName string `protobuf:"bytes,1,opt,name=store_name,json=storeName,proto3" json:"store_name,omitempty"`
- // The bucket name containing the object
- // This member is required
- Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
- // Character you use to group keys. All keys that contain the same string between
- // the prefix, if specified, and the first occurrence of the delimiter after the
- // prefix are grouped under a single result element, CommonPrefixes. If you don't
- // specify the prefix parameter, then the substring starts at the beginning of the
- // key. The keys that are grouped under CommonPrefixes result element are not
- // returned elsewhere in the response.
- Delimiter string `protobuf:"bytes,3,opt,name=delimiter,proto3" json:"delimiter,omitempty"`
- // Requests Amazon S3 to encode the object keys in the response and specifies the
- // encoding method to use. An object key may contain any Unicode character;
- EncodingType string `protobuf:"bytes,4,opt,name=encoding_type,json=encodingType,proto3" json:"encoding_type,omitempty"`
- // The account ID of the expected bucket owner
- ExpectedBucketOwner string `protobuf:"bytes,5,opt,name=expected_bucket_owner,json=expectedBucketOwner,proto3" json:"expected_bucket_owner,omitempty"`
- // Together with upload-id-marker, this parameter specifies the multipart upload
- // after which listing should begin. If upload-id-marker is not specified, only the
- // keys lexicographically greater than the specified key-marker will be included in
- // the list. If upload-id-marker is specified, any multipart uploads for a key
- // equal to the key-marker might also be included, provided those multipart uploads
- // have upload IDs lexicographically greater than the specified upload-id-marker.
- KeyMarker string `protobuf:"bytes,6,opt,name=key_marker,json=keyMarker,proto3" json:"key_marker,omitempty"`
- // Sets the maximum number of multipart uploads, from 1 to 1,000, to return in the
- // response body. 1,000 is the maximum number of uploads that can be returned in a
- // response.
- MaxUploads int64 `protobuf:"varint,7,opt,name=max_uploads,json=maxUploads,proto3" json:"max_uploads,omitempty"`
- // Lists in-progress uploads only for those keys that begin with the specified
- // prefix. You can use prefixes to separate a bucket into different grouping of
- // keys. (You can think of using prefix to make groups in the same way you'd use a
- // folder in a file system.)
- Prefix string `protobuf:"bytes,8,opt,name=prefix,proto3" json:"prefix,omitempty"`
- // Together with key-marker, specifies the multipart upload after which listing
- // should begin. If key-marker is not specified, the upload-id-marker parameter is
- // ignored. Otherwise, any multipart uploads for a key equal to the key-marker
- // might be included in the list only if they have an upload ID lexicographically
- // greater than the specified upload-id-marker.
- UploadIdMarker string `protobuf:"bytes,9,opt,name=upload_id_marker,json=uploadIdMarker,proto3" json:"upload_id_marker,omitempty"`
+ // Entity tag of the object.
+ Etag string `protobuf:"bytes,1,opt,name=etag,proto3" json:"etag,omitempty"`
+ // Last modified time
+ LastModified int64 `protobuf:"varint,2,opt,name=last_modified,json=lastModified,proto3" json:"last_modified,omitempty"`
}
-func (x *ListMultipartUploadsInput) Reset() {
- *x = ListMultipartUploadsInput{}
+func (x *CopyPartResult) Reset() {
+ *x = CopyPartResult{}
if protoimpl.UnsafeEnabled {
mi := &file_oss_proto_msgTypes[44]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -4469,13 +4413,13 @@ func (x *ListMultipartUploadsInput) Reset() {
}
}
-func (x *ListMultipartUploadsInput) String() string {
+func (x *CopyPartResult) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ListMultipartUploadsInput) ProtoMessage() {}
+func (*CopyPartResult) ProtoMessage() {}
-func (x *ListMultipartUploadsInput) ProtoReflect() protoreflect.Message {
+func (x *CopyPartResult) ProtoReflect() protoreflect.Message {
mi := &file_oss_proto_msgTypes[44]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -4487,103 +4431,176 @@ func (x *ListMultipartUploadsInput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ListMultipartUploadsInput.ProtoReflect.Descriptor instead.
-func (*ListMultipartUploadsInput) Descriptor() ([]byte, []int) {
+// Deprecated: Use CopyPartResult.ProtoReflect.Descriptor instead.
+func (*CopyPartResult) Descriptor() ([]byte, []int) {
return file_oss_proto_rawDescGZIP(), []int{44}
}
-func (x *ListMultipartUploadsInput) GetStoreName() string {
+func (x *CopyPartResult) GetEtag() string {
if x != nil {
- return x.StoreName
+ return x.Etag
}
return ""
}
-func (x *ListMultipartUploadsInput) GetBucket() string {
+func (x *CopyPartResult) GetLastModified() int64 {
if x != nil {
- return x.Bucket
+ return x.LastModified
}
- return ""
+ return 0
}
-func (x *ListMultipartUploadsInput) GetDelimiter() string {
+// UploadPartCopyOutput
+type UploadPartCopyOutput struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Indicates whether the multipart upload uses an S3 Bucket Key for server-side
+ // encryption with Amazon Web Services KMS (SSE-KMS).
+ BucketKeyEnabled bool `protobuf:"varint,1,opt,name=bucket_key_enabled,json=bucketKeyEnabled,proto3" json:"bucket_key_enabled,omitempty"`
+ // Container for all response elements.
+ CopyPartResult *CopyPartResult `protobuf:"bytes,2,opt,name=copy_part_result,json=copyPartResult,proto3" json:"copy_part_result,omitempty"`
+ // The version of the source object that was copied, if you have enabled versioning
+ // on the source bucket.
+ CopySourceVersionId string `protobuf:"bytes,3,opt,name=copy_source_version_id,json=copySourceVersionId,proto3" json:"copy_source_version_id,omitempty"`
+ // If present, indicates that the requester was successfully charged for the
+ // request.
+ RequestCharged string `protobuf:"bytes,4,opt,name=request_charged,json=requestCharged,proto3" json:"request_charged,omitempty"`
+ // If server-side encryption with a customer-provided encryption key was requested,
+ // the response will include this header confirming the encryption algorithm used.
+ SseCustomerAlgorithm string `protobuf:"bytes,5,opt,name=sse_customer_algorithm,json=sseCustomerAlgorithm,proto3" json:"sse_customer_algorithm,omitempty"`
+ // If server-side encryption with a customer-provided encryption key was requested,
+ // the response will include this header to provide round-trip message integrity
+ // verification of the customer-provided encryption key.
+ SseCustomerKeyMd5 string `protobuf:"bytes,6,opt,name=sse_customer_key_md5,json=sseCustomerKeyMd5,proto3" json:"sse_customer_key_md5,omitempty"`
+ // If present, specifies the ID of the Amazon Web Services Key Management Service
+ // (Amazon Web Services KMS) symmetric customer managed key that was used for the
+ // object.
+ SseKmsKeyId string `protobuf:"bytes,7,opt,name=sse_kms_key_id,json=sseKmsKeyId,proto3" json:"sse_kms_key_id,omitempty"`
+ // The server-side encryption algorithm used when storing this object in Amazon S3
+ // (for example, AES256, aws:kms).
+ ServerSideEncryption string `protobuf:"bytes,8,opt,name=server_side_encryption,json=serverSideEncryption,proto3" json:"server_side_encryption,omitempty"`
+}
+
+func (x *UploadPartCopyOutput) Reset() {
+ *x = UploadPartCopyOutput{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_oss_proto_msgTypes[45]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *UploadPartCopyOutput) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UploadPartCopyOutput) ProtoMessage() {}
+
+func (x *UploadPartCopyOutput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[45]
+ 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 UploadPartCopyOutput.ProtoReflect.Descriptor instead.
+func (*UploadPartCopyOutput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{45}
+}
+
+func (x *UploadPartCopyOutput) GetBucketKeyEnabled() bool {
if x != nil {
- return x.Delimiter
+ return x.BucketKeyEnabled
}
- return ""
+ return false
}
-func (x *ListMultipartUploadsInput) GetEncodingType() string {
+func (x *UploadPartCopyOutput) GetCopyPartResult() *CopyPartResult {
if x != nil {
- return x.EncodingType
+ return x.CopyPartResult
+ }
+ return nil
+}
+
+func (x *UploadPartCopyOutput) GetCopySourceVersionId() string {
+ if x != nil {
+ return x.CopySourceVersionId
}
return ""
}
-func (x *ListMultipartUploadsInput) GetExpectedBucketOwner() string {
+func (x *UploadPartCopyOutput) GetRequestCharged() string {
if x != nil {
- return x.ExpectedBucketOwner
+ return x.RequestCharged
}
return ""
}
-func (x *ListMultipartUploadsInput) GetKeyMarker() string {
+func (x *UploadPartCopyOutput) GetSseCustomerAlgorithm() string {
if x != nil {
- return x.KeyMarker
+ return x.SseCustomerAlgorithm
}
return ""
}
-func (x *ListMultipartUploadsInput) GetMaxUploads() int64 {
+func (x *UploadPartCopyOutput) GetSseCustomerKeyMd5() string {
if x != nil {
- return x.MaxUploads
+ return x.SseCustomerKeyMd5
}
- return 0
+ return ""
}
-func (x *ListMultipartUploadsInput) GetPrefix() string {
+func (x *UploadPartCopyOutput) GetSseKmsKeyId() string {
if x != nil {
- return x.Prefix
+ return x.SseKmsKeyId
}
return ""
}
-func (x *ListMultipartUploadsInput) GetUploadIdMarker() string {
+func (x *UploadPartCopyOutput) GetServerSideEncryption() string {
if x != nil {
- return x.UploadIdMarker
+ return x.ServerSideEncryption
}
return ""
}
-// Initiator
-type Initiator struct {
+// CompletedPart
+type CompletedPart struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Initiator name
- DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
- // Initiator id
- Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
+ // Entity tag returned when the part was uploaded.
+ Etag string `protobuf:"bytes,1,opt,name=etag,proto3" json:"etag,omitempty"`
+ // Part number that identifies the part. This is a positive integer between 1 and
+ // 10,000.
+ PartNumber int32 `protobuf:"varint,2,opt,name=part_number,json=partNumber,proto3" json:"part_number,omitempty"`
}
-func (x *Initiator) Reset() {
- *x = Initiator{}
+func (x *CompletedPart) Reset() {
+ *x = CompletedPart{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[45]
+ mi := &file_oss_proto_msgTypes[46]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *Initiator) String() string {
+func (x *CompletedPart) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*Initiator) ProtoMessage() {}
+func (*CompletedPart) ProtoMessage() {}
-func (x *Initiator) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[45]
+func (x *CompletedPart) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[46]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -4594,63 +4611,52 @@ func (x *Initiator) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use Initiator.ProtoReflect.Descriptor instead.
-func (*Initiator) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{45}
+// Deprecated: Use CompletedPart.ProtoReflect.Descriptor instead.
+func (*CompletedPart) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{46}
}
-func (x *Initiator) GetDisplayName() string {
+func (x *CompletedPart) GetEtag() string {
if x != nil {
- return x.DisplayName
+ return x.Etag
}
return ""
}
-func (x *Initiator) GetId() string {
+func (x *CompletedPart) GetPartNumber() int32 {
if x != nil {
- return x.Id
+ return x.PartNumber
}
- return ""
+ return 0
}
-// MultipartUpload
-type MultipartUpload struct {
+// CompletedMultipartUpload
+type CompletedMultipartUpload struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Date and time at which the multipart upload was initiated.
- Initiated int64 `protobuf:"varint,1,opt,name=initiated,proto3" json:"initiated,omitempty"`
- // Identifies who initiated the multipart upload.
- Initiator *Initiator `protobuf:"bytes,2,opt,name=initiator,proto3" json:"initiator,omitempty"`
- // Name of the object key.
- // This member is required.
- Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
- // Specifies the owner of the object that is part of the multipart upload.
- Owner *Owner `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"`
- // The class of storage used to store the object.
- StorageClass string `protobuf:"bytes,5,opt,name=storage_class,json=storageClass,proto3" json:"storage_class,omitempty"`
- // Upload ID that identifies the multipart upload.
- UploadId string `protobuf:"bytes,6,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`
+ // Array of CompletedPart data types.
+ Parts []*CompletedPart `protobuf:"bytes,1,rep,name=parts,proto3" json:"parts,omitempty"`
}
-func (x *MultipartUpload) Reset() {
- *x = MultipartUpload{}
+func (x *CompletedMultipartUpload) Reset() {
+ *x = CompletedMultipartUpload{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[46]
+ mi := &file_oss_proto_msgTypes[47]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *MultipartUpload) String() string {
+func (x *CompletedMultipartUpload) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*MultipartUpload) ProtoMessage() {}
+func (*CompletedMultipartUpload) ProtoMessage() {}
-func (x *MultipartUpload) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[46]
+func (x *CompletedMultipartUpload) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[47]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -4661,55 +4667,126 @@ func (x *MultipartUpload) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use MultipartUpload.ProtoReflect.Descriptor instead.
-func (*MultipartUpload) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{46}
-}
-
-func (x *MultipartUpload) GetInitiated() int64 {
- if x != nil {
- return x.Initiated
- }
- return 0
+// Deprecated: Use CompletedMultipartUpload.ProtoReflect.Descriptor instead.
+func (*CompletedMultipartUpload) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{47}
}
-func (x *MultipartUpload) GetInitiator() *Initiator {
+func (x *CompletedMultipartUpload) GetParts() []*CompletedPart {
if x != nil {
- return x.Initiator
+ return x.Parts
}
return nil
}
-func (x *MultipartUpload) GetKey() string {
- if x != nil {
- return x.Key
- }
- return ""
+// CompleteMultipartUploadInput
+type CompleteMultipartUploadInput struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Required. The name of oss store.
+ StoreName string `protobuf:"bytes,1,opt,name=store_name,json=storeName,proto3" json:"store_name,omitempty"`
+ // The bucket name containing the object
+ // This member is required
+ Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
+ // Name of the object key.
+ // This member is required.
+ Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
+ // ID for the initiated multipart upload.
+ // This member is required.
+ UploadId string `protobuf:"bytes,4,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`
+ // Confirms that the requester knows that they will be charged for the request.
+ RequestPayer string `protobuf:"bytes,5,opt,name=request_payer,json=requestPayer,proto3" json:"request_payer,omitempty"`
+ // Expected bucket owner
+ ExpectedBucketOwner string `protobuf:"bytes,6,opt,name=expected_bucket_owner,json=expectedBucketOwner,proto3" json:"expected_bucket_owner,omitempty"`
+ // The container for the multipart upload request information.
+ MultipartUpload *CompletedMultipartUpload `protobuf:"bytes,7,opt,name=multipart_upload,json=multipartUpload,proto3" json:"multipart_upload,omitempty"`
}
-func (x *MultipartUpload) GetOwner() *Owner {
- if x != nil {
- return x.Owner
+func (x *CompleteMultipartUploadInput) Reset() {
+ *x = CompleteMultipartUploadInput{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_oss_proto_msgTypes[48]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
- return nil
}
-func (x *MultipartUpload) GetStorageClass() string {
- if x != nil {
- return x.StorageClass
- }
- return ""
+func (x *CompleteMultipartUploadInput) String() string {
+ return protoimpl.X.MessageStringOf(x)
}
-func (x *MultipartUpload) GetUploadId() string {
- if x != nil {
- return x.UploadId
+func (*CompleteMultipartUploadInput) ProtoMessage() {}
+
+func (x *CompleteMultipartUploadInput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[48]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
}
- return ""
+ return mi.MessageOf(x)
}
-// ListMultipartUploadsOutput
-type ListMultipartUploadsOutput struct {
+// Deprecated: Use CompleteMultipartUploadInput.ProtoReflect.Descriptor instead.
+func (*CompleteMultipartUploadInput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{48}
+}
+
+func (x *CompleteMultipartUploadInput) GetStoreName() string {
+ if x != nil {
+ return x.StoreName
+ }
+ return ""
+}
+
+func (x *CompleteMultipartUploadInput) GetBucket() string {
+ if x != nil {
+ return x.Bucket
+ }
+ return ""
+}
+
+func (x *CompleteMultipartUploadInput) GetKey() string {
+ if x != nil {
+ return x.Key
+ }
+ return ""
+}
+
+func (x *CompleteMultipartUploadInput) GetUploadId() string {
+ if x != nil {
+ return x.UploadId
+ }
+ return ""
+}
+
+func (x *CompleteMultipartUploadInput) GetRequestPayer() string {
+ if x != nil {
+ return x.RequestPayer
+ }
+ return ""
+}
+
+func (x *CompleteMultipartUploadInput) GetExpectedBucketOwner() string {
+ if x != nil {
+ return x.ExpectedBucketOwner
+ }
+ return ""
+}
+
+func (x *CompleteMultipartUploadInput) GetMultipartUpload() *CompletedMultipartUpload {
+ if x != nil {
+ return x.MultipartUpload
+ }
+ return nil
+}
+
+// CompleteMultipartUploadOutput
+type CompleteMultipartUploadOutput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
@@ -4717,57 +4794,51 @@ type ListMultipartUploadsOutput struct {
// The bucket name containing the object
// This member is required
Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"`
- // If you specify a delimiter in the request, then the result returns each distinct
- // key prefix containing the delimiter in a CommonPrefixes element.
- CommonPrefixes []string `protobuf:"bytes,2,rep,name=common_prefixes,json=commonPrefixes,proto3" json:"common_prefixes,omitempty"`
- // Contains the delimiter you specified in the request. If you don't specify a
- // delimiter in your request, this element is absent from the response.
- Delimiter string `protobuf:"bytes,3,opt,name=delimiter,proto3" json:"delimiter,omitempty"`
- // Encoding type used by Amazon S3 to encode object keys in the response.
- EncodingType string `protobuf:"bytes,4,opt,name=encoding_type,json=encodingType,proto3" json:"encoding_type,omitempty"`
- // Indicates whether the returned list of multipart uploads is truncated. A value
- // of true indicates that the list was truncated. The list can be truncated if the
- // number of multipart uploads exceeds the limit allowed or specified by max
- // uploads.
- IsTruncated bool `protobuf:"varint,5,opt,name=is_truncated,json=isTruncated,proto3" json:"is_truncated,omitempty"`
- // The key at or after which the listing began.
- KeyMarker string `protobuf:"bytes,6,opt,name=key_marker,json=keyMarker,proto3" json:"key_marker,omitempty"`
- // Maximum number of multipart uploads that could have been included in the
- // response.
- MaxUploads int32 `protobuf:"varint,7,opt,name=max_uploads,json=maxUploads,proto3" json:"max_uploads,omitempty"`
- // When a list is truncated, this element specifies the value that should be used
- // for the key-marker request parameter in a subsequent request.
- NextKeyMarker string `protobuf:"bytes,8,opt,name=next_key_marker,json=nextKeyMarker,proto3" json:"next_key_marker,omitempty"`
- // When a list is truncated, this element specifies the value that should be used
- // for the upload-id-marker request parameter in a subsequent request.
- NextUploadIdMarker string `protobuf:"bytes,9,opt,name=next_upload_id_marker,json=nextUploadIdMarker,proto3" json:"next_upload_id_marker,omitempty"`
- // When a prefix is provided in the request, this field contains the specified
- // prefix. The result contains only keys starting with the specified prefix.
- Prefix string `protobuf:"bytes,10,opt,name=prefix,proto3" json:"prefix,omitempty"`
- // Upload ID after which listing began.
- UploadIdMarker string `protobuf:"bytes,11,opt,name=upload_id_marker,json=uploadIdMarker,proto3" json:"upload_id_marker,omitempty"`
- // Container for elements related to a particular multipart upload. A response can
- // contain zero or more Upload elements.
- Uploads []*MultipartUpload `protobuf:"bytes,12,rep,name=uploads,proto3" json:"uploads,omitempty"`
+ // Name of the object key.
+ // This member is required.
+ Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
+ // Indicates whether the multipart upload uses an S3 Bucket Key for server-side
+ // encryption with Amazon Web Services KMS (SSE-KMS).
+ BucketKeyEnabled bool `protobuf:"varint,3,opt,name=bucket_key_enabled,json=bucketKeyEnabled,proto3" json:"bucket_key_enabled,omitempty"`
+ // Entity tag that identifies the newly created object's data
+ Etag string `protobuf:"bytes,4,opt,name=etag,proto3" json:"etag,omitempty"`
+ // If the object expiration is configured, this will contain the expiration date
+ // (expiry-date) and rule ID (rule-id). The value of rule-id is URL-encoded.
+ Expiration string `protobuf:"bytes,5,opt,name=expiration,proto3" json:"expiration,omitempty"`
+ // The URI that identifies the newly created object.
+ Location string `protobuf:"bytes,6,opt,name=location,proto3" json:"location,omitempty"`
+ // If present, indicates that the requester was successfully charged for the
+ // request.
+ RequestCharged string `protobuf:"bytes,7,opt,name=request_charged,json=requestCharged,proto3" json:"request_charged,omitempty"`
+ // If present, specifies the ID of the Amazon Web Services Key Management Service
+ // (Amazon Web Services KMS) symmetric customer managed key that was used for the
+ // object.
+ SseKmsKeyId string `protobuf:"bytes,8,opt,name=sse_kms_keyId,json=sseKmsKeyId,proto3" json:"sse_kms_keyId,omitempty"`
+ // The server-side encryption algorithm used when storing this object in Amazon S3
+ // (for example, AES256, aws:kms).
+ ServerSideEncryption string `protobuf:"bytes,9,opt,name=server_side_encryption,json=serverSideEncryption,proto3" json:"server_side_encryption,omitempty"`
+ // Version ID of the newly created object, in case the bucket has versioning turned
+ // on.
+ VersionId string `protobuf:"bytes,10,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"`
}
-func (x *ListMultipartUploadsOutput) Reset() {
- *x = ListMultipartUploadsOutput{}
+func (x *CompleteMultipartUploadOutput) Reset() {
+ *x = CompleteMultipartUploadOutput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[47]
+ mi := &file_oss_proto_msgTypes[49]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *ListMultipartUploadsOutput) String() string {
+func (x *CompleteMultipartUploadOutput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ListMultipartUploadsOutput) ProtoMessage() {}
+func (*CompleteMultipartUploadOutput) ProtoMessage() {}
-func (x *ListMultipartUploadsOutput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[47]
+func (x *CompleteMultipartUploadOutput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[49]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -4778,97 +4849,83 @@ func (x *ListMultipartUploadsOutput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ListMultipartUploadsOutput.ProtoReflect.Descriptor instead.
-func (*ListMultipartUploadsOutput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{47}
+// Deprecated: Use CompleteMultipartUploadOutput.ProtoReflect.Descriptor instead.
+func (*CompleteMultipartUploadOutput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{49}
}
-func (x *ListMultipartUploadsOutput) GetBucket() string {
+func (x *CompleteMultipartUploadOutput) GetBucket() string {
if x != nil {
return x.Bucket
}
return ""
}
-func (x *ListMultipartUploadsOutput) GetCommonPrefixes() []string {
- if x != nil {
- return x.CommonPrefixes
- }
- return nil
-}
-
-func (x *ListMultipartUploadsOutput) GetDelimiter() string {
- if x != nil {
- return x.Delimiter
- }
- return ""
-}
-
-func (x *ListMultipartUploadsOutput) GetEncodingType() string {
+func (x *CompleteMultipartUploadOutput) GetKey() string {
if x != nil {
- return x.EncodingType
+ return x.Key
}
return ""
}
-func (x *ListMultipartUploadsOutput) GetIsTruncated() bool {
+func (x *CompleteMultipartUploadOutput) GetBucketKeyEnabled() bool {
if x != nil {
- return x.IsTruncated
+ return x.BucketKeyEnabled
}
return false
}
-func (x *ListMultipartUploadsOutput) GetKeyMarker() string {
+func (x *CompleteMultipartUploadOutput) GetEtag() string {
if x != nil {
- return x.KeyMarker
+ return x.Etag
}
return ""
}
-func (x *ListMultipartUploadsOutput) GetMaxUploads() int32 {
+func (x *CompleteMultipartUploadOutput) GetExpiration() string {
if x != nil {
- return x.MaxUploads
+ return x.Expiration
}
- return 0
+ return ""
}
-func (x *ListMultipartUploadsOutput) GetNextKeyMarker() string {
+func (x *CompleteMultipartUploadOutput) GetLocation() string {
if x != nil {
- return x.NextKeyMarker
+ return x.Location
}
return ""
}
-func (x *ListMultipartUploadsOutput) GetNextUploadIdMarker() string {
+func (x *CompleteMultipartUploadOutput) GetRequestCharged() string {
if x != nil {
- return x.NextUploadIdMarker
+ return x.RequestCharged
}
return ""
}
-func (x *ListMultipartUploadsOutput) GetPrefix() string {
+func (x *CompleteMultipartUploadOutput) GetSseKmsKeyId() string {
if x != nil {
- return x.Prefix
+ return x.SseKmsKeyId
}
return ""
}
-func (x *ListMultipartUploadsOutput) GetUploadIdMarker() string {
+func (x *CompleteMultipartUploadOutput) GetServerSideEncryption() string {
if x != nil {
- return x.UploadIdMarker
+ return x.ServerSideEncryption
}
return ""
}
-func (x *ListMultipartUploadsOutput) GetUploads() []*MultipartUpload {
+func (x *CompleteMultipartUploadOutput) GetVersionId() string {
if x != nil {
- return x.Uploads
+ return x.VersionId
}
- return nil
+ return ""
}
-// ListObjectVersionsInput
-type ListObjectVersionsInput struct {
+// AbortMultipartUploadInput
+type AbortMultipartUploadInput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
@@ -4878,52 +4935,35 @@ type ListObjectVersionsInput struct {
// The bucket name containing the object
// This member is required
Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
- // A delimiter is a character that you specify to group keys. All keys that contain
- // the same string between the prefix and the first occurrence of the delimiter are
- // grouped under a single result element in CommonPrefixes. These groups are
- // counted as one result against the max-keys limitation. These keys are not
- // returned elsewhere in the response.
- Delimiter string `protobuf:"bytes,3,opt,name=delimiter,proto3" json:"delimiter,omitempty"`
- // Requests Amazon S3 to encode the object keys in the response and specifies the
- // encoding method to use. An object key may contain any Unicode character;
- EncodingType string `protobuf:"bytes,4,opt,name=encoding_type,json=encodingType,proto3" json:"encoding_type,omitempty"`
+ // Name of the object key.
+ // This member is required.
+ Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
// The account ID of the expected bucket owner
- ExpectedBucketOwner string `protobuf:"bytes,5,opt,name=expected_bucket_owner,json=expectedBucketOwner,proto3" json:"expected_bucket_owner,omitempty"`
- // Specifies the key to start with when listing objects in a bucket.
- KeyMarker string `protobuf:"bytes,6,opt,name=key_marker,json=keyMarker,proto3" json:"key_marker,omitempty"`
- // Sets the maximum number of keys returned in the response. By default the action
- // returns up to 1,000 key names. The response might contain fewer keys but will
- // never contain more. If additional keys satisfy the search criteria, but were not
- // returned because max-keys was exceeded, the response contains true. To return
- // the additional keys, see key-marker and version-id-marker.
- MaxKeys int64 `protobuf:"varint,7,opt,name=max_keys,json=maxKeys,proto3" json:"max_keys,omitempty"`
- // Use this parameter to select only those keys that begin with the specified
- // prefix. You can use prefixes to separate a bucket into different groupings of
- // keys. (You can think of using prefix to make groups in the same way you'd use a
- // folder in a file system.) You can use prefix with delimiter to roll up numerous
- // objects into a single result under CommonPrefixes.
- Prefix string `protobuf:"bytes,8,opt,name=prefix,proto3" json:"prefix,omitempty"`
- // Specifies the object version you want to start listing from.
- VersionIdMarker string `protobuf:"bytes,9,opt,name=version_id_marker,json=versionIdMarker,proto3" json:"version_id_marker,omitempty"`
+ ExpectedBucketOwner string `protobuf:"bytes,4,opt,name=expected_bucket_owner,json=expectedBucketOwner,proto3" json:"expected_bucket_owner,omitempty"`
+ // Confirms that the requester knows that they will be charged for the request.
+ RequestPayer string `protobuf:"bytes,5,opt,name=request_payer,json=requestPayer,proto3" json:"request_payer,omitempty"`
+ // Upload ID that identifies the multipart upload.
+ // This member is required.
+ UploadId string `protobuf:"bytes,6,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`
}
-func (x *ListObjectVersionsInput) Reset() {
- *x = ListObjectVersionsInput{}
+func (x *AbortMultipartUploadInput) Reset() {
+ *x = AbortMultipartUploadInput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[48]
+ mi := &file_oss_proto_msgTypes[50]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *ListObjectVersionsInput) String() string {
+func (x *AbortMultipartUploadInput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ListObjectVersionsInput) ProtoMessage() {}
+func (*AbortMultipartUploadInput) ProtoMessage() {}
-func (x *ListObjectVersionsInput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[48]
+func (x *AbortMultipartUploadInput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[50]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -4934,111 +4974,80 @@ func (x *ListObjectVersionsInput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ListObjectVersionsInput.ProtoReflect.Descriptor instead.
-func (*ListObjectVersionsInput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{48}
+// Deprecated: Use AbortMultipartUploadInput.ProtoReflect.Descriptor instead.
+func (*AbortMultipartUploadInput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{50}
}
-func (x *ListObjectVersionsInput) GetStoreName() string {
+func (x *AbortMultipartUploadInput) GetStoreName() string {
if x != nil {
return x.StoreName
}
return ""
}
-func (x *ListObjectVersionsInput) GetBucket() string {
+func (x *AbortMultipartUploadInput) GetBucket() string {
if x != nil {
return x.Bucket
}
return ""
}
-func (x *ListObjectVersionsInput) GetDelimiter() string {
- if x != nil {
- return x.Delimiter
- }
- return ""
-}
-
-func (x *ListObjectVersionsInput) GetEncodingType() string {
+func (x *AbortMultipartUploadInput) GetKey() string {
if x != nil {
- return x.EncodingType
+ return x.Key
}
return ""
}
-func (x *ListObjectVersionsInput) GetExpectedBucketOwner() string {
+func (x *AbortMultipartUploadInput) GetExpectedBucketOwner() string {
if x != nil {
return x.ExpectedBucketOwner
}
return ""
}
-func (x *ListObjectVersionsInput) GetKeyMarker() string {
- if x != nil {
- return x.KeyMarker
- }
- return ""
-}
-
-func (x *ListObjectVersionsInput) GetMaxKeys() int64 {
- if x != nil {
- return x.MaxKeys
- }
- return 0
-}
-
-func (x *ListObjectVersionsInput) GetPrefix() string {
+func (x *AbortMultipartUploadInput) GetRequestPayer() string {
if x != nil {
- return x.Prefix
+ return x.RequestPayer
}
return ""
}
-func (x *ListObjectVersionsInput) GetVersionIdMarker() string {
+func (x *AbortMultipartUploadInput) GetUploadId() string {
if x != nil {
- return x.VersionIdMarker
+ return x.UploadId
}
return ""
}
-// DeleteMarkerEntry
-type DeleteMarkerEntry struct {
+// AbortMultipartUploadOutput
+type AbortMultipartUploadOutput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Specifies whether the object is (true) or is not (false) the latest version of
- // an object.
- IsLatest bool `protobuf:"varint,1,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"`
- // Name of the object key.
- // This member is required.
- Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
- // Date and time the object was last modified.
- LastModified int64 `protobuf:"varint,3,opt,name=last_modified,json=lastModified,proto3" json:"last_modified,omitempty"`
- // Owner
- Owner *Owner `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"`
- // Version ID of an object.
- VersionId string `protobuf:"bytes,5,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"`
+ // If present, indicates that the requester was successfully charged for the request.
+ RequestCharged string `protobuf:"bytes,1,opt,name=request_charged,json=requestCharged,proto3" json:"request_charged,omitempty"`
}
-func (x *DeleteMarkerEntry) Reset() {
- *x = DeleteMarkerEntry{}
+func (x *AbortMultipartUploadOutput) Reset() {
+ *x = AbortMultipartUploadOutput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[49]
+ mi := &file_oss_proto_msgTypes[51]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *DeleteMarkerEntry) String() string {
+func (x *AbortMultipartUploadOutput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*DeleteMarkerEntry) ProtoMessage() {}
+func (*AbortMultipartUploadOutput) ProtoMessage() {}
-func (x *DeleteMarkerEntry) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[49]
+func (x *AbortMultipartUploadOutput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[51]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -5049,89 +5058,82 @@ func (x *DeleteMarkerEntry) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use DeleteMarkerEntry.ProtoReflect.Descriptor instead.
-func (*DeleteMarkerEntry) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{49}
-}
-
-func (x *DeleteMarkerEntry) GetIsLatest() bool {
- if x != nil {
- return x.IsLatest
- }
- return false
-}
-
-func (x *DeleteMarkerEntry) GetKey() string {
- if x != nil {
- return x.Key
- }
- return ""
-}
-
-func (x *DeleteMarkerEntry) GetLastModified() int64 {
- if x != nil {
- return x.LastModified
- }
- return 0
-}
-
-func (x *DeleteMarkerEntry) GetOwner() *Owner {
- if x != nil {
- return x.Owner
- }
- return nil
+// Deprecated: Use AbortMultipartUploadOutput.ProtoReflect.Descriptor instead.
+func (*AbortMultipartUploadOutput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{51}
}
-func (x *DeleteMarkerEntry) GetVersionId() string {
+func (x *AbortMultipartUploadOutput) GetRequestCharged() string {
if x != nil {
- return x.VersionId
+ return x.RequestCharged
}
return ""
}
-// ObjectVersion
-type ObjectVersion struct {
+// ListMultipartUploadsInput
+type ListMultipartUploadsInput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // The entity tag is an MD5 hash of that version of the object.
- Etag string `protobuf:"bytes,1,opt,name=etag,proto3" json:"etag,omitempty"`
- // Specifies whether the object is (true) or is not (false) the latest version of
- // an object.
- IsLatest bool `protobuf:"varint,2,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"`
- // Name of the object key.
- // This member is required.
- Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
- // Date and time the object was last modified.
- LastModified int64 `protobuf:"varint,4,opt,name=last_modified,json=lastModified,proto3" json:"last_modified,omitempty"`
- // Specifies the owner of the object.
- Owner *Owner `protobuf:"bytes,5,opt,name=owner,proto3" json:"owner,omitempty"`
- // Size in bytes of the object.
- Size int64 `protobuf:"varint,6,opt,name=size,proto3" json:"size,omitempty"`
- // The class of storage used to store the object.
- StorageClass string `protobuf:"bytes,7,opt,name=storage_class,json=storageClass,proto3" json:"storage_class,omitempty"`
- // Version ID of an object.
- VersionId string `protobuf:"bytes,8,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"`
+ // Required. The name of oss store.
+ StoreName string `protobuf:"bytes,1,opt,name=store_name,json=storeName,proto3" json:"store_name,omitempty"`
+ // The bucket name containing the object
+ // This member is required
+ Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
+ // Character you use to group keys. All keys that contain the same string between
+ // the prefix, if specified, and the first occurrence of the delimiter after the
+ // prefix are grouped under a single result element, CommonPrefixes. If you don't
+ // specify the prefix parameter, then the substring starts at the beginning of the
+ // key. The keys that are grouped under CommonPrefixes result element are not
+ // returned elsewhere in the response.
+ Delimiter string `protobuf:"bytes,3,opt,name=delimiter,proto3" json:"delimiter,omitempty"`
+ // Requests Amazon S3 to encode the object keys in the response and specifies the
+ // encoding method to use. An object key may contain any Unicode character;
+ EncodingType string `protobuf:"bytes,4,opt,name=encoding_type,json=encodingType,proto3" json:"encoding_type,omitempty"`
+ // The account ID of the expected bucket owner
+ ExpectedBucketOwner string `protobuf:"bytes,5,opt,name=expected_bucket_owner,json=expectedBucketOwner,proto3" json:"expected_bucket_owner,omitempty"`
+ // Together with upload-id-marker, this parameter specifies the multipart upload
+ // after which listing should begin. If upload-id-marker is not specified, only the
+ // keys lexicographically greater than the specified key-marker will be included in
+ // the list. If upload-id-marker is specified, any multipart uploads for a key
+ // equal to the key-marker might also be included, provided those multipart uploads
+ // have upload IDs lexicographically greater than the specified upload-id-marker.
+ KeyMarker string `protobuf:"bytes,6,opt,name=key_marker,json=keyMarker,proto3" json:"key_marker,omitempty"`
+ // Sets the maximum number of multipart uploads, from 1 to 1,000, to return in the
+ // response body. 1,000 is the maximum number of uploads that can be returned in a
+ // response.
+ MaxUploads int64 `protobuf:"varint,7,opt,name=max_uploads,json=maxUploads,proto3" json:"max_uploads,omitempty"`
+ // Lists in-progress uploads only for those keys that begin with the specified
+ // prefix. You can use prefixes to separate a bucket into different grouping of
+ // keys. (You can think of using prefix to make groups in the same way you'd use a
+ // folder in a file system.)
+ Prefix string `protobuf:"bytes,8,opt,name=prefix,proto3" json:"prefix,omitempty"`
+ // Together with key-marker, specifies the multipart upload after which listing
+ // should begin. If key-marker is not specified, the upload-id-marker parameter is
+ // ignored. Otherwise, any multipart uploads for a key equal to the key-marker
+ // might be included in the list only if they have an upload ID lexicographically
+ // greater than the specified upload-id-marker.
+ UploadIdMarker string `protobuf:"bytes,9,opt,name=upload_id_marker,json=uploadIdMarker,proto3" json:"upload_id_marker,omitempty"`
}
-func (x *ObjectVersion) Reset() {
- *x = ObjectVersion{}
+func (x *ListMultipartUploadsInput) Reset() {
+ *x = ListMultipartUploadsInput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[50]
+ mi := &file_oss_proto_msgTypes[52]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *ObjectVersion) String() string {
+func (x *ListMultipartUploadsInput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ObjectVersion) ProtoMessage() {}
+func (*ListMultipartUploadsInput) ProtoMessage() {}
-func (x *ObjectVersion) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[50]
+func (x *ListMultipartUploadsInput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[52]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -5142,123 +5144,103 @@ func (x *ObjectVersion) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ObjectVersion.ProtoReflect.Descriptor instead.
-func (*ObjectVersion) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{50}
+// Deprecated: Use ListMultipartUploadsInput.ProtoReflect.Descriptor instead.
+func (*ListMultipartUploadsInput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{52}
}
-func (x *ObjectVersion) GetEtag() string {
+func (x *ListMultipartUploadsInput) GetStoreName() string {
if x != nil {
- return x.Etag
+ return x.StoreName
}
return ""
}
-func (x *ObjectVersion) GetIsLatest() bool {
+func (x *ListMultipartUploadsInput) GetBucket() string {
if x != nil {
- return x.IsLatest
+ return x.Bucket
}
- return false
+ return ""
}
-func (x *ObjectVersion) GetKey() string {
+func (x *ListMultipartUploadsInput) GetDelimiter() string {
if x != nil {
- return x.Key
+ return x.Delimiter
}
return ""
}
-func (x *ObjectVersion) GetLastModified() int64 {
+func (x *ListMultipartUploadsInput) GetEncodingType() string {
if x != nil {
- return x.LastModified
+ return x.EncodingType
}
- return 0
+ return ""
}
-func (x *ObjectVersion) GetOwner() *Owner {
+func (x *ListMultipartUploadsInput) GetExpectedBucketOwner() string {
if x != nil {
- return x.Owner
+ return x.ExpectedBucketOwner
}
- return nil
+ return ""
}
-func (x *ObjectVersion) GetSize() int64 {
+func (x *ListMultipartUploadsInput) GetKeyMarker() string {
if x != nil {
- return x.Size
+ return x.KeyMarker
+ }
+ return ""
+}
+
+func (x *ListMultipartUploadsInput) GetMaxUploads() int64 {
+ if x != nil {
+ return x.MaxUploads
}
return 0
}
-func (x *ObjectVersion) GetStorageClass() string {
+func (x *ListMultipartUploadsInput) GetPrefix() string {
if x != nil {
- return x.StorageClass
+ return x.Prefix
}
return ""
}
-func (x *ObjectVersion) GetVersionId() string {
+func (x *ListMultipartUploadsInput) GetUploadIdMarker() string {
if x != nil {
- return x.VersionId
+ return x.UploadIdMarker
}
return ""
}
-// ListObjectVersionsOutput
-type ListObjectVersionsOutput struct {
+// Initiator
+type Initiator struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // All of the keys rolled up into a common prefix count as a single return when
- // calculating the number of returns.
- CommonPrefixes []string `protobuf:"bytes,1,rep,name=common_prefixes,json=commonPrefixes,proto3" json:"common_prefixes,omitempty"`
- // Container for an object that is a delete marker.
- DeleteMarkers []*DeleteMarkerEntry `protobuf:"bytes,2,rep,name=delete_markers,json=deleteMarkers,proto3" json:"delete_markers,omitempty"`
- // The delimiter grouping the included keys.
- Delimiter string `protobuf:"bytes,3,opt,name=delimiter,proto3" json:"delimiter,omitempty"`
- // Encoding type used by Amazon S3 to encode object key names in the XML response.
- EncodingType string `protobuf:"bytes,4,opt,name=encoding_type,json=encodingType,proto3" json:"encoding_type,omitempty"`
- // A flag that indicates whether Amazon S3 returned all of the results that
- // satisfied the search criteria
- IsTruncated bool `protobuf:"varint,5,opt,name=is_truncated,json=isTruncated,proto3" json:"is_truncated,omitempty"`
- // Marks the last key returned in a truncated response.
- KeyMarker string `protobuf:"bytes,6,opt,name=key_marker,json=keyMarker,proto3" json:"key_marker,omitempty"`
- // Specifies the maximum number of objects to return
- MaxKeys int64 `protobuf:"varint,7,opt,name=max_keys,json=maxKeys,proto3" json:"max_keys,omitempty"`
- // The bucket name.
- Name string `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"`
- // When the number of responses exceeds the value of MaxKeys, NextKeyMarker
- // specifies the first key not returned that satisfies the search criteria
- NextKeyMarker string `protobuf:"bytes,9,opt,name=next_key_marker,json=nextKeyMarker,proto3" json:"next_key_marker,omitempty"`
- // When the number of responses exceeds the value of MaxKeys, NextVersionIdMarker
- // specifies the first object version not returned that satisfies the search
- // criteria.
- NextVersionIdMarker string `protobuf:"bytes,10,opt,name=next_version_id_marker,json=nextVersionIdMarker,proto3" json:"next_version_id_marker,omitempty"`
- // Selects objects that start with the value supplied by this parameter.
- Prefix string `protobuf:"bytes,11,opt,name=prefix,proto3" json:"prefix,omitempty"`
- // Marks the last version of the key returned in a truncated response.
- VersionIdMarker string `protobuf:"bytes,12,opt,name=version_id_marker,json=versionIdMarker,proto3" json:"version_id_marker,omitempty"`
- // Container for version information.
- Versions []*ObjectVersion `protobuf:"bytes,13,rep,name=versions,proto3" json:"versions,omitempty"`
+ // Initiator name
+ DisplayName string `protobuf:"bytes,1,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
+ // Initiator id
+ Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
}
-func (x *ListObjectVersionsOutput) Reset() {
- *x = ListObjectVersionsOutput{}
+func (x *Initiator) Reset() {
+ *x = Initiator{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[51]
+ mi := &file_oss_proto_msgTypes[53]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *ListObjectVersionsOutput) String() string {
+func (x *Initiator) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ListObjectVersionsOutput) ProtoMessage() {}
+func (*Initiator) ProtoMessage() {}
-func (x *ListObjectVersionsOutput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[51]
+func (x *Initiator) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[53]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -5269,169 +5251,180 @@ func (x *ListObjectVersionsOutput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ListObjectVersionsOutput.ProtoReflect.Descriptor instead.
-func (*ListObjectVersionsOutput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{51}
+// Deprecated: Use Initiator.ProtoReflect.Descriptor instead.
+func (*Initiator) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{53}
}
-func (x *ListObjectVersionsOutput) GetCommonPrefixes() []string {
+func (x *Initiator) GetDisplayName() string {
if x != nil {
- return x.CommonPrefixes
+ return x.DisplayName
}
- return nil
+ return ""
}
-func (x *ListObjectVersionsOutput) GetDeleteMarkers() []*DeleteMarkerEntry {
+func (x *Initiator) GetId() string {
if x != nil {
- return x.DeleteMarkers
+ return x.Id
}
- return nil
+ return ""
}
-func (x *ListObjectVersionsOutput) GetDelimiter() string {
- if x != nil {
- return x.Delimiter
- }
- return ""
+// MultipartUpload
+type MultipartUpload struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Date and time at which the multipart upload was initiated.
+ Initiated int64 `protobuf:"varint,1,opt,name=initiated,proto3" json:"initiated,omitempty"`
+ // Identifies who initiated the multipart upload.
+ Initiator *Initiator `protobuf:"bytes,2,opt,name=initiator,proto3" json:"initiator,omitempty"`
+ // Name of the object key.
+ // This member is required.
+ Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
+ // Specifies the owner of the object that is part of the multipart upload.
+ Owner *Owner `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"`
+ // The class of storage used to store the object.
+ StorageClass string `protobuf:"bytes,5,opt,name=storage_class,json=storageClass,proto3" json:"storage_class,omitempty"`
+ // Upload ID that identifies the multipart upload.
+ UploadId string `protobuf:"bytes,6,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`
}
-func (x *ListObjectVersionsOutput) GetEncodingType() string {
- if x != nil {
- return x.EncodingType
+func (x *MultipartUpload) Reset() {
+ *x = MultipartUpload{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_oss_proto_msgTypes[54]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
- return ""
}
-func (x *ListObjectVersionsOutput) GetIsTruncated() bool {
- if x != nil {
- return x.IsTruncated
- }
- return false
+func (x *MultipartUpload) String() string {
+ return protoimpl.X.MessageStringOf(x)
}
-func (x *ListObjectVersionsOutput) GetKeyMarker() string {
- if x != nil {
- return x.KeyMarker
+func (*MultipartUpload) ProtoMessage() {}
+
+func (x *MultipartUpload) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[54]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
}
- return ""
+ return mi.MessageOf(x)
}
-func (x *ListObjectVersionsOutput) GetMaxKeys() int64 {
- if x != nil {
- return x.MaxKeys
- }
- return 0
+// Deprecated: Use MultipartUpload.ProtoReflect.Descriptor instead.
+func (*MultipartUpload) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{54}
}
-func (x *ListObjectVersionsOutput) GetName() string {
+func (x *MultipartUpload) GetInitiated() int64 {
if x != nil {
- return x.Name
+ return x.Initiated
}
- return ""
+ return 0
}
-func (x *ListObjectVersionsOutput) GetNextKeyMarker() string {
+func (x *MultipartUpload) GetInitiator() *Initiator {
if x != nil {
- return x.NextKeyMarker
+ return x.Initiator
}
- return ""
+ return nil
}
-func (x *ListObjectVersionsOutput) GetNextVersionIdMarker() string {
+func (x *MultipartUpload) GetKey() string {
if x != nil {
- return x.NextVersionIdMarker
+ return x.Key
}
return ""
}
-func (x *ListObjectVersionsOutput) GetPrefix() string {
+func (x *MultipartUpload) GetOwner() *Owner {
if x != nil {
- return x.Prefix
+ return x.Owner
}
- return ""
+ return nil
}
-func (x *ListObjectVersionsOutput) GetVersionIdMarker() string {
+func (x *MultipartUpload) GetStorageClass() string {
if x != nil {
- return x.VersionIdMarker
+ return x.StorageClass
}
return ""
}
-func (x *ListObjectVersionsOutput) GetVersions() []*ObjectVersion {
+func (x *MultipartUpload) GetUploadId() string {
if x != nil {
- return x.Versions
+ return x.UploadId
}
- return nil
+ return ""
}
-// HeadObjectInput
-type HeadObjectInput struct {
+// ListMultipartUploadsOutput
+type ListMultipartUploadsOutput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Required. The name of oss store.
- StoreName string `protobuf:"bytes,1,opt,name=store_name,json=storeName,proto3" json:"store_name,omitempty"`
// The bucket name containing the object
// This member is required
- Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
- // Name of the object key.
- // This member is required.
- Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
- // To retrieve the checksum, this parameter must be enabled
- ChecksumMode string `protobuf:"bytes,4,opt,name=checksum_mode,json=checksumMode,proto3" json:"checksum_mode,omitempty"`
- // The account ID of the expected bucket owner
- ExpectedBucketOwner string `protobuf:"bytes,5,opt,name=expected_bucket_owner,json=expectedBucketOwner,proto3" json:"expected_bucket_owner,omitempty"`
- // Return the object only if its entity tag (ETag) is the same as the one
- // specified; otherwise, return a 412 (precondition failed) error.
- IfMatch string `protobuf:"bytes,6,opt,name=if_match,json=ifMatch,proto3" json:"if_match,omitempty"`
- // Return the object only if it has been modified since the specified time;
- // otherwise, return a 304 (not modified) error.
- IfModifiedSince int64 `protobuf:"varint,7,opt,name=if_modified_since,json=ifModifiedSince,proto3" json:"if_modified_since,omitempty"`
- // Return the object only if its entity tag (ETag) is different from the one
- // specified
- IfNoneMatch string `protobuf:"bytes,8,opt,name=if_none_match,json=ifNoneMatch,proto3" json:"if_none_match,omitempty"`
- // Return the object only if it has not been modified since the specified time;
- IfUnmodifiedSince int64 `protobuf:"varint,9,opt,name=if_unmodified_since,json=ifUnmodifiedSince,proto3" json:"if_unmodified_since,omitempty"`
- // Part number of the object being read. This is a positive integer between 1 and
- // 10,000. Effectively performs a 'ranged' HEAD request for the part specified.
- // Useful querying about the size of the part and the number of parts in this
- // object.
- PartNumber int32 `protobuf:"varint,10,opt,name=part_number,json=partNumber,proto3" json:"part_number,omitempty"`
- // Confirms that the requester knows that they will be charged for the request.
- RequestPayer string `protobuf:"bytes,11,opt,name=request_payer,json=requestPayer,proto3" json:"request_payer,omitempty"`
- // Specifies the algorithm to use to when encrypting the object (for example,
- // AES256).
- SseCustomerAlgorithm string `protobuf:"bytes,12,opt,name=sse_customer_algorithm,json=sseCustomerAlgorithm,proto3" json:"sse_customer_algorithm,omitempty"`
- // Specifies the customer-provided encryption key for Amazon S3 to use in
- // encrypting data
- SseCustomerKey string `protobuf:"bytes,13,opt,name=sse_customer_key,json=sseCustomerKey,proto3" json:"sse_customer_key,omitempty"`
- // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
- SseCustomerKeyMd5 string `protobuf:"bytes,14,opt,name=sse_customer_key_md5,json=sseCustomerKeyMd5,proto3" json:"sse_customer_key_md5,omitempty"`
- // VersionId used to reference a specific version of the object.
- VersionId string `protobuf:"bytes,15,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"`
- // Return object details meta
- WithDetails bool `protobuf:"varint,16,opt,name=with_details,json=withDetails,proto3" json:"with_details,omitempty"`
+ Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"`
+ // If you specify a delimiter in the request, then the result returns each distinct
+ // key prefix containing the delimiter in a CommonPrefixes element.
+ CommonPrefixes []string `protobuf:"bytes,2,rep,name=common_prefixes,json=commonPrefixes,proto3" json:"common_prefixes,omitempty"`
+ // Contains the delimiter you specified in the request. If you don't specify a
+ // delimiter in your request, this element is absent from the response.
+ Delimiter string `protobuf:"bytes,3,opt,name=delimiter,proto3" json:"delimiter,omitempty"`
+ // Encoding type used by Amazon S3 to encode object keys in the response.
+ EncodingType string `protobuf:"bytes,4,opt,name=encoding_type,json=encodingType,proto3" json:"encoding_type,omitempty"`
+ // Indicates whether the returned list of multipart uploads is truncated. A value
+ // of true indicates that the list was truncated. The list can be truncated if the
+ // number of multipart uploads exceeds the limit allowed or specified by max
+ // uploads.
+ IsTruncated bool `protobuf:"varint,5,opt,name=is_truncated,json=isTruncated,proto3" json:"is_truncated,omitempty"`
+ // The key at or after which the listing began.
+ KeyMarker string `protobuf:"bytes,6,opt,name=key_marker,json=keyMarker,proto3" json:"key_marker,omitempty"`
+ // Maximum number of multipart uploads that could have been included in the
+ // response.
+ MaxUploads int32 `protobuf:"varint,7,opt,name=max_uploads,json=maxUploads,proto3" json:"max_uploads,omitempty"`
+ // When a list is truncated, this element specifies the value that should be used
+ // for the key-marker request parameter in a subsequent request.
+ NextKeyMarker string `protobuf:"bytes,8,opt,name=next_key_marker,json=nextKeyMarker,proto3" json:"next_key_marker,omitempty"`
+ // When a list is truncated, this element specifies the value that should be used
+ // for the upload-id-marker request parameter in a subsequent request.
+ NextUploadIdMarker string `protobuf:"bytes,9,opt,name=next_upload_id_marker,json=nextUploadIdMarker,proto3" json:"next_upload_id_marker,omitempty"`
+ // When a prefix is provided in the request, this field contains the specified
+ // prefix. The result contains only keys starting with the specified prefix.
+ Prefix string `protobuf:"bytes,10,opt,name=prefix,proto3" json:"prefix,omitempty"`
+ // Upload ID after which listing began.
+ UploadIdMarker string `protobuf:"bytes,11,opt,name=upload_id_marker,json=uploadIdMarker,proto3" json:"upload_id_marker,omitempty"`
+ // Container for elements related to a particular multipart upload. A response can
+ // contain zero or more Upload elements.
+ Uploads []*MultipartUpload `protobuf:"bytes,12,rep,name=uploads,proto3" json:"uploads,omitempty"`
}
-func (x *HeadObjectInput) Reset() {
- *x = HeadObjectInput{}
+func (x *ListMultipartUploadsOutput) Reset() {
+ *x = ListMultipartUploadsOutput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[52]
+ mi := &file_oss_proto_msgTypes[55]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *HeadObjectInput) String() string {
+func (x *ListMultipartUploadsOutput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*HeadObjectInput) ProtoMessage() {}
+func (*ListMultipartUploadsOutput) ProtoMessage() {}
-func (x *HeadObjectInput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[52]
+func (x *ListMultipartUploadsOutput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[55]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -5442,150 +5435,152 @@ func (x *HeadObjectInput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use HeadObjectInput.ProtoReflect.Descriptor instead.
-func (*HeadObjectInput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{52}
+// Deprecated: Use ListMultipartUploadsOutput.ProtoReflect.Descriptor instead.
+func (*ListMultipartUploadsOutput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{55}
}
-func (x *HeadObjectInput) GetStoreName() string {
+func (x *ListMultipartUploadsOutput) GetBucket() string {
if x != nil {
- return x.StoreName
+ return x.Bucket
}
return ""
}
-func (x *HeadObjectInput) GetBucket() string {
+func (x *ListMultipartUploadsOutput) GetCommonPrefixes() []string {
if x != nil {
- return x.Bucket
+ return x.CommonPrefixes
}
- return ""
+ return nil
}
-func (x *HeadObjectInput) GetKey() string {
+func (x *ListMultipartUploadsOutput) GetDelimiter() string {
if x != nil {
- return x.Key
+ return x.Delimiter
}
return ""
}
-func (x *HeadObjectInput) GetChecksumMode() string {
+func (x *ListMultipartUploadsOutput) GetEncodingType() string {
if x != nil {
- return x.ChecksumMode
+ return x.EncodingType
}
return ""
}
-func (x *HeadObjectInput) GetExpectedBucketOwner() string {
- if x != nil {
- return x.ExpectedBucketOwner
- }
- return ""
-}
-
-func (x *HeadObjectInput) GetIfMatch() string {
- if x != nil {
- return x.IfMatch
- }
- return ""
-}
-
-func (x *HeadObjectInput) GetIfModifiedSince() int64 {
+func (x *ListMultipartUploadsOutput) GetIsTruncated() bool {
if x != nil {
- return x.IfModifiedSince
+ return x.IsTruncated
}
- return 0
+ return false
}
-func (x *HeadObjectInput) GetIfNoneMatch() string {
+func (x *ListMultipartUploadsOutput) GetKeyMarker() string {
if x != nil {
- return x.IfNoneMatch
+ return x.KeyMarker
}
return ""
}
-func (x *HeadObjectInput) GetIfUnmodifiedSince() int64 {
- if x != nil {
- return x.IfUnmodifiedSince
- }
- return 0
-}
-
-func (x *HeadObjectInput) GetPartNumber() int32 {
+func (x *ListMultipartUploadsOutput) GetMaxUploads() int32 {
if x != nil {
- return x.PartNumber
+ return x.MaxUploads
}
return 0
}
-func (x *HeadObjectInput) GetRequestPayer() string {
- if x != nil {
- return x.RequestPayer
- }
- return ""
-}
-
-func (x *HeadObjectInput) GetSseCustomerAlgorithm() string {
+func (x *ListMultipartUploadsOutput) GetNextKeyMarker() string {
if x != nil {
- return x.SseCustomerAlgorithm
+ return x.NextKeyMarker
}
return ""
}
-func (x *HeadObjectInput) GetSseCustomerKey() string {
+func (x *ListMultipartUploadsOutput) GetNextUploadIdMarker() string {
if x != nil {
- return x.SseCustomerKey
+ return x.NextUploadIdMarker
}
return ""
}
-func (x *HeadObjectInput) GetSseCustomerKeyMd5() string {
+func (x *ListMultipartUploadsOutput) GetPrefix() string {
if x != nil {
- return x.SseCustomerKeyMd5
+ return x.Prefix
}
return ""
}
-func (x *HeadObjectInput) GetVersionId() string {
+func (x *ListMultipartUploadsOutput) GetUploadIdMarker() string {
if x != nil {
- return x.VersionId
+ return x.UploadIdMarker
}
return ""
}
-func (x *HeadObjectInput) GetWithDetails() bool {
+func (x *ListMultipartUploadsOutput) GetUploads() []*MultipartUpload {
if x != nil {
- return x.WithDetails
+ return x.Uploads
}
- return false
+ return nil
}
-// HeadObjectOutput
-type HeadObjectOutput struct {
+// ListObjectVersionsInput
+type ListObjectVersionsInput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Metadata pertaining to the operation's result.
- ResultMetadata map[string]string `protobuf:"bytes,1,rep,name=result_metadata,json=resultMetadata,proto3" json:"result_metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ // Required. The name of oss store.
+ StoreName string `protobuf:"bytes,1,opt,name=store_name,json=storeName,proto3" json:"store_name,omitempty"`
+ // The bucket name containing the object
+ // This member is required
+ Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
+ // A delimiter is a character that you specify to group keys. All keys that contain
+ // the same string between the prefix and the first occurrence of the delimiter are
+ // grouped under a single result element in CommonPrefixes. These groups are
+ // counted as one result against the max-keys limitation. These keys are not
+ // returned elsewhere in the response.
+ Delimiter string `protobuf:"bytes,3,opt,name=delimiter,proto3" json:"delimiter,omitempty"`
+ // Requests Amazon S3 to encode the object keys in the response and specifies the
+ // encoding method to use. An object key may contain any Unicode character;
+ EncodingType string `protobuf:"bytes,4,opt,name=encoding_type,json=encodingType,proto3" json:"encoding_type,omitempty"`
+ // The account ID of the expected bucket owner
+ ExpectedBucketOwner string `protobuf:"bytes,5,opt,name=expected_bucket_owner,json=expectedBucketOwner,proto3" json:"expected_bucket_owner,omitempty"`
+ // Specifies the key to start with when listing objects in a bucket.
+ KeyMarker string `protobuf:"bytes,6,opt,name=key_marker,json=keyMarker,proto3" json:"key_marker,omitempty"`
+ // Sets the maximum number of keys returned in the response. By default the action
+ // returns up to 1,000 key names. The response might contain fewer keys but will
+ // never contain more. If additional keys satisfy the search criteria, but were not
+ // returned because max-keys was exceeded, the response contains true. To return
+ // the additional keys, see key-marker and version-id-marker.
+ MaxKeys int64 `protobuf:"varint,7,opt,name=max_keys,json=maxKeys,proto3" json:"max_keys,omitempty"`
+ // Use this parameter to select only those keys that begin with the specified
+ // prefix. You can use prefixes to separate a bucket into different groupings of
+ // keys. (You can think of using prefix to make groups in the same way you'd use a
+ // folder in a file system.) You can use prefix with delimiter to roll up numerous
+ // objects into a single result under CommonPrefixes.
+ Prefix string `protobuf:"bytes,8,opt,name=prefix,proto3" json:"prefix,omitempty"`
+ // Specifies the object version you want to start listing from.
+ VersionIdMarker string `protobuf:"bytes,9,opt,name=version_id_marker,json=versionIdMarker,proto3" json:"version_id_marker,omitempty"`
}
-func (x *HeadObjectOutput) Reset() {
- *x = HeadObjectOutput{}
+func (x *ListObjectVersionsInput) Reset() {
+ *x = ListObjectVersionsInput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[53]
+ mi := &file_oss_proto_msgTypes[56]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *HeadObjectOutput) String() string {
+func (x *ListObjectVersionsInput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*HeadObjectOutput) ProtoMessage() {}
+func (*ListObjectVersionsInput) ProtoMessage() {}
-func (x *HeadObjectOutput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[53]
+func (x *ListObjectVersionsInput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[56]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -5596,123 +5591,111 @@ func (x *HeadObjectOutput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use HeadObjectOutput.ProtoReflect.Descriptor instead.
-func (*HeadObjectOutput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{53}
+// Deprecated: Use ListObjectVersionsInput.ProtoReflect.Descriptor instead.
+func (*ListObjectVersionsInput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{56}
}
-func (x *HeadObjectOutput) GetResultMetadata() map[string]string {
+func (x *ListObjectVersionsInput) GetStoreName() string {
if x != nil {
- return x.ResultMetadata
+ return x.StoreName
}
- return nil
-}
-
-// IsObjectExistInput
-type IsObjectExistInput struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Required. The name of oss store.
- StoreName string `protobuf:"bytes,1,opt,name=store_name,json=storeName,proto3" json:"store_name,omitempty"`
- // The bucket name containing the object
- // This member is required
- Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
- // Name of the object key.
- // This member is required.
- Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
- // Object version id
- VersionId string `protobuf:"bytes,4,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"`
+ return ""
}
-func (x *IsObjectExistInput) Reset() {
- *x = IsObjectExistInput{}
- if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[54]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
+func (x *ListObjectVersionsInput) GetBucket() string {
+ if x != nil {
+ return x.Bucket
}
+ return ""
}
-func (x *IsObjectExistInput) String() string {
- return protoimpl.X.MessageStringOf(x)
+func (x *ListObjectVersionsInput) GetDelimiter() string {
+ if x != nil {
+ return x.Delimiter
+ }
+ return ""
}
-func (*IsObjectExistInput) ProtoMessage() {}
-
-func (x *IsObjectExistInput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[54]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
+func (x *ListObjectVersionsInput) GetEncodingType() string {
+ if x != nil {
+ return x.EncodingType
}
- return mi.MessageOf(x)
+ return ""
}
-// Deprecated: Use IsObjectExistInput.ProtoReflect.Descriptor instead.
-func (*IsObjectExistInput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{54}
+func (x *ListObjectVersionsInput) GetExpectedBucketOwner() string {
+ if x != nil {
+ return x.ExpectedBucketOwner
+ }
+ return ""
}
-func (x *IsObjectExistInput) GetStoreName() string {
+func (x *ListObjectVersionsInput) GetKeyMarker() string {
if x != nil {
- return x.StoreName
+ return x.KeyMarker
}
return ""
}
-func (x *IsObjectExistInput) GetBucket() string {
+func (x *ListObjectVersionsInput) GetMaxKeys() int64 {
if x != nil {
- return x.Bucket
+ return x.MaxKeys
}
- return ""
+ return 0
}
-func (x *IsObjectExistInput) GetKey() string {
+func (x *ListObjectVersionsInput) GetPrefix() string {
if x != nil {
- return x.Key
+ return x.Prefix
}
return ""
}
-func (x *IsObjectExistInput) GetVersionId() string {
+func (x *ListObjectVersionsInput) GetVersionIdMarker() string {
if x != nil {
- return x.VersionId
+ return x.VersionIdMarker
}
return ""
}
-// IsObjectExistOutput
-type IsObjectExistOutput struct {
+// DeleteMarkerEntry
+type DeleteMarkerEntry struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Object exist or not
- FileExist bool `protobuf:"varint,1,opt,name=file_exist,json=fileExist,proto3" json:"file_exist,omitempty"`
+ // Specifies whether the object is (true) or is not (false) the latest version of
+ // an object.
+ IsLatest bool `protobuf:"varint,1,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"`
+ // Name of the object key.
+ // This member is required.
+ Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
+ // Date and time the object was last modified.
+ LastModified int64 `protobuf:"varint,3,opt,name=last_modified,json=lastModified,proto3" json:"last_modified,omitempty"`
+ // Owner
+ Owner *Owner `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"`
+ // Version ID of an object.
+ VersionId string `protobuf:"bytes,5,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"`
}
-func (x *IsObjectExistOutput) Reset() {
- *x = IsObjectExistOutput{}
+func (x *DeleteMarkerEntry) Reset() {
+ *x = DeleteMarkerEntry{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[55]
+ mi := &file_oss_proto_msgTypes[57]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *IsObjectExistOutput) String() string {
+func (x *DeleteMarkerEntry) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*IsObjectExistOutput) ProtoMessage() {}
+func (*DeleteMarkerEntry) ProtoMessage() {}
-func (x *IsObjectExistOutput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[55]
+func (x *DeleteMarkerEntry) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[57]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -5723,55 +5706,89 @@ func (x *IsObjectExistOutput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use IsObjectExistOutput.ProtoReflect.Descriptor instead.
-func (*IsObjectExistOutput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{55}
+// Deprecated: Use DeleteMarkerEntry.ProtoReflect.Descriptor instead.
+func (*DeleteMarkerEntry) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{57}
}
-func (x *IsObjectExistOutput) GetFileExist() bool {
+func (x *DeleteMarkerEntry) GetIsLatest() bool {
if x != nil {
- return x.FileExist
+ return x.IsLatest
}
return false
}
-// SignURLInput
-type SignURLInput struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Required. The name of oss store.
- StoreName string `protobuf:"bytes,1,opt,name=store_name,json=storeName,proto3" json:"store_name,omitempty"`
- // The bucket name containing the object
- // This member is required
- Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
+func (x *DeleteMarkerEntry) GetKey() string {
+ if x != nil {
+ return x.Key
+ }
+ return ""
+}
+
+func (x *DeleteMarkerEntry) GetLastModified() int64 {
+ if x != nil {
+ return x.LastModified
+ }
+ return 0
+}
+
+func (x *DeleteMarkerEntry) GetOwner() *Owner {
+ if x != nil {
+ return x.Owner
+ }
+ return nil
+}
+
+func (x *DeleteMarkerEntry) GetVersionId() string {
+ if x != nil {
+ return x.VersionId
+ }
+ return ""
+}
+
+// ObjectVersion
+type ObjectVersion struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The entity tag is an MD5 hash of that version of the object.
+ Etag string `protobuf:"bytes,1,opt,name=etag,proto3" json:"etag,omitempty"`
+ // Specifies whether the object is (true) or is not (false) the latest version of
+ // an object.
+ IsLatest bool `protobuf:"varint,2,opt,name=is_latest,json=isLatest,proto3" json:"is_latest,omitempty"`
// Name of the object key.
// This member is required.
Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
- // the method for sign url, eg. GET、POST
- Method string `protobuf:"bytes,4,opt,name=method,proto3" json:"method,omitempty"`
- // expire time of the sign url
- ExpiredInSec int64 `protobuf:"varint,5,opt,name=expired_in_sec,json=expiredInSec,proto3" json:"expired_in_sec,omitempty"`
+ // Date and time the object was last modified.
+ LastModified int64 `protobuf:"varint,4,opt,name=last_modified,json=lastModified,proto3" json:"last_modified,omitempty"`
+ // Specifies the owner of the object.
+ Owner *Owner `protobuf:"bytes,5,opt,name=owner,proto3" json:"owner,omitempty"`
+ // Size in bytes of the object.
+ Size int64 `protobuf:"varint,6,opt,name=size,proto3" json:"size,omitempty"`
+ // The class of storage used to store the object.
+ StorageClass string `protobuf:"bytes,7,opt,name=storage_class,json=storageClass,proto3" json:"storage_class,omitempty"`
+ // Version ID of an object.
+ VersionId string `protobuf:"bytes,8,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"`
}
-func (x *SignURLInput) Reset() {
- *x = SignURLInput{}
+func (x *ObjectVersion) Reset() {
+ *x = ObjectVersion{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[56]
+ mi := &file_oss_proto_msgTypes[58]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *SignURLInput) String() string {
+func (x *ObjectVersion) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*SignURLInput) ProtoMessage() {}
+func (*ObjectVersion) ProtoMessage() {}
-func (x *SignURLInput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[56]
+func (x *ObjectVersion) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[58]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -5782,73 +5799,123 @@ func (x *SignURLInput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use SignURLInput.ProtoReflect.Descriptor instead.
-func (*SignURLInput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{56}
+// Deprecated: Use ObjectVersion.ProtoReflect.Descriptor instead.
+func (*ObjectVersion) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{58}
}
-func (x *SignURLInput) GetStoreName() string {
+func (x *ObjectVersion) GetEtag() string {
if x != nil {
- return x.StoreName
+ return x.Etag
}
return ""
}
-func (x *SignURLInput) GetBucket() string {
+func (x *ObjectVersion) GetIsLatest() bool {
if x != nil {
- return x.Bucket
+ return x.IsLatest
}
- return ""
+ return false
}
-func (x *SignURLInput) GetKey() string {
+func (x *ObjectVersion) GetKey() string {
if x != nil {
return x.Key
}
return ""
}
-func (x *SignURLInput) GetMethod() string {
+func (x *ObjectVersion) GetLastModified() int64 {
if x != nil {
- return x.Method
+ return x.LastModified
}
- return ""
+ return 0
}
-func (x *SignURLInput) GetExpiredInSec() int64 {
+func (x *ObjectVersion) GetOwner() *Owner {
if x != nil {
- return x.ExpiredInSec
+ return x.Owner
+ }
+ return nil
+}
+
+func (x *ObjectVersion) GetSize() int64 {
+ if x != nil {
+ return x.Size
}
return 0
}
-// SignURLOutput
-type SignURLOutput struct {
+func (x *ObjectVersion) GetStorageClass() string {
+ if x != nil {
+ return x.StorageClass
+ }
+ return ""
+}
+
+func (x *ObjectVersion) GetVersionId() string {
+ if x != nil {
+ return x.VersionId
+ }
+ return ""
+}
+
+// ListObjectVersionsOutput
+type ListObjectVersionsOutput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Object signed url
- SignedUrl string `protobuf:"bytes,1,opt,name=signed_url,json=signedUrl,proto3" json:"signed_url,omitempty"`
+ // All of the keys rolled up into a common prefix count as a single return when
+ // calculating the number of returns.
+ CommonPrefixes []string `protobuf:"bytes,1,rep,name=common_prefixes,json=commonPrefixes,proto3" json:"common_prefixes,omitempty"`
+ // Container for an object that is a delete marker.
+ DeleteMarkers []*DeleteMarkerEntry `protobuf:"bytes,2,rep,name=delete_markers,json=deleteMarkers,proto3" json:"delete_markers,omitempty"`
+ // The delimiter grouping the included keys.
+ Delimiter string `protobuf:"bytes,3,opt,name=delimiter,proto3" json:"delimiter,omitempty"`
+ // Encoding type used by Amazon S3 to encode object key names in the XML response.
+ EncodingType string `protobuf:"bytes,4,opt,name=encoding_type,json=encodingType,proto3" json:"encoding_type,omitempty"`
+ // A flag that indicates whether Amazon S3 returned all of the results that
+ // satisfied the search criteria
+ IsTruncated bool `protobuf:"varint,5,opt,name=is_truncated,json=isTruncated,proto3" json:"is_truncated,omitempty"`
+ // Marks the last key returned in a truncated response.
+ KeyMarker string `protobuf:"bytes,6,opt,name=key_marker,json=keyMarker,proto3" json:"key_marker,omitempty"`
+ // Specifies the maximum number of objects to return
+ MaxKeys int64 `protobuf:"varint,7,opt,name=max_keys,json=maxKeys,proto3" json:"max_keys,omitempty"`
+ // The bucket name.
+ Name string `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"`
+ // When the number of responses exceeds the value of MaxKeys, NextKeyMarker
+ // specifies the first key not returned that satisfies the search criteria
+ NextKeyMarker string `protobuf:"bytes,9,opt,name=next_key_marker,json=nextKeyMarker,proto3" json:"next_key_marker,omitempty"`
+ // When the number of responses exceeds the value of MaxKeys, NextVersionIdMarker
+ // specifies the first object version not returned that satisfies the search
+ // criteria.
+ NextVersionIdMarker string `protobuf:"bytes,10,opt,name=next_version_id_marker,json=nextVersionIdMarker,proto3" json:"next_version_id_marker,omitempty"`
+ // Selects objects that start with the value supplied by this parameter.
+ Prefix string `protobuf:"bytes,11,opt,name=prefix,proto3" json:"prefix,omitempty"`
+ // Marks the last version of the key returned in a truncated response.
+ VersionIdMarker string `protobuf:"bytes,12,opt,name=version_id_marker,json=versionIdMarker,proto3" json:"version_id_marker,omitempty"`
+ // Container for version information.
+ Versions []*ObjectVersion `protobuf:"bytes,13,rep,name=versions,proto3" json:"versions,omitempty"`
}
-func (x *SignURLOutput) Reset() {
- *x = SignURLOutput{}
+func (x *ListObjectVersionsOutput) Reset() {
+ *x = ListObjectVersionsOutput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[57]
+ mi := &file_oss_proto_msgTypes[59]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *SignURLOutput) String() string {
+func (x *ListObjectVersionsOutput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*SignURLOutput) ProtoMessage() {}
+func (*ListObjectVersionsOutput) ProtoMessage() {}
-func (x *SignURLOutput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[57]
+func (x *ListObjectVersionsOutput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[59]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -5859,87 +5926,104 @@ func (x *SignURLOutput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use SignURLOutput.ProtoReflect.Descriptor instead.
-func (*SignURLOutput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{57}
+// Deprecated: Use ListObjectVersionsOutput.ProtoReflect.Descriptor instead.
+func (*ListObjectVersionsOutput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{59}
}
-func (x *SignURLOutput) GetSignedUrl() string {
+func (x *ListObjectVersionsOutput) GetCommonPrefixes() []string {
if x != nil {
- return x.SignedUrl
+ return x.CommonPrefixes
}
- return ""
+ return nil
}
-// UpdateBandwidthRateLimitInput
-type UpdateBandwidthRateLimitInput struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- // Required. The name of oss store.
- StoreName string `protobuf:"bytes,1,opt,name=store_name,json=storeName,proto3" json:"store_name,omitempty"`
- // The average upload/download bandwidth rate limit in bits per second.
- AverageRateLimitInBitsPerSec int64 `protobuf:"varint,2,opt,name=average_rate_limit_in_bits_per_sec,json=averageRateLimitInBitsPerSec,proto3" json:"average_rate_limit_in_bits_per_sec,omitempty"`
- // Resource name of gateway
- GatewayResourceName string `protobuf:"bytes,3,opt,name=gateway_resource_name,json=gatewayResourceName,proto3" json:"gateway_resource_name,omitempty"`
+func (x *ListObjectVersionsOutput) GetDeleteMarkers() []*DeleteMarkerEntry {
+ if x != nil {
+ return x.DeleteMarkers
+ }
+ return nil
}
-func (x *UpdateBandwidthRateLimitInput) Reset() {
- *x = UpdateBandwidthRateLimitInput{}
- if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[58]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
+func (x *ListObjectVersionsOutput) GetDelimiter() string {
+ if x != nil {
+ return x.Delimiter
}
+ return ""
}
-func (x *UpdateBandwidthRateLimitInput) String() string {
- return protoimpl.X.MessageStringOf(x)
+func (x *ListObjectVersionsOutput) GetEncodingType() string {
+ if x != nil {
+ return x.EncodingType
+ }
+ return ""
}
-func (*UpdateBandwidthRateLimitInput) ProtoMessage() {}
+func (x *ListObjectVersionsOutput) GetIsTruncated() bool {
+ if x != nil {
+ return x.IsTruncated
+ }
+ return false
+}
-func (x *UpdateBandwidthRateLimitInput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[58]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
+func (x *ListObjectVersionsOutput) GetKeyMarker() string {
+ if x != nil {
+ return x.KeyMarker
}
- return mi.MessageOf(x)
+ return ""
}
-// Deprecated: Use UpdateBandwidthRateLimitInput.ProtoReflect.Descriptor instead.
-func (*UpdateBandwidthRateLimitInput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{58}
+func (x *ListObjectVersionsOutput) GetMaxKeys() int64 {
+ if x != nil {
+ return x.MaxKeys
+ }
+ return 0
}
-func (x *UpdateBandwidthRateLimitInput) GetStoreName() string {
+func (x *ListObjectVersionsOutput) GetName() string {
if x != nil {
- return x.StoreName
+ return x.Name
}
return ""
}
-func (x *UpdateBandwidthRateLimitInput) GetAverageRateLimitInBitsPerSec() int64 {
+func (x *ListObjectVersionsOutput) GetNextKeyMarker() string {
if x != nil {
- return x.AverageRateLimitInBitsPerSec
+ return x.NextKeyMarker
}
- return 0
+ return ""
}
-func (x *UpdateBandwidthRateLimitInput) GetGatewayResourceName() string {
+func (x *ListObjectVersionsOutput) GetNextVersionIdMarker() string {
if x != nil {
- return x.GatewayResourceName
+ return x.NextVersionIdMarker
}
return ""
}
-// AppendObjectInput
-type AppendObjectInput struct {
+func (x *ListObjectVersionsOutput) GetPrefix() string {
+ if x != nil {
+ return x.Prefix
+ }
+ return ""
+}
+
+func (x *ListObjectVersionsOutput) GetVersionIdMarker() string {
+ if x != nil {
+ return x.VersionIdMarker
+ }
+ return ""
+}
+
+func (x *ListObjectVersionsOutput) GetVersions() []*ObjectVersion {
+ if x != nil {
+ return x.Versions
+ }
+ return nil
+}
+
+// HeadObjectInput
+type HeadObjectInput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
@@ -5952,51 +6036,59 @@ type AppendObjectInput struct {
// Name of the object key.
// This member is required.
Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
- // Object content
- Body []byte `protobuf:"bytes,4,opt,name=body,proto3" json:"body,omitempty"`
- // Append start position
- Position int64 `protobuf:"varint,5,opt,name=position,proto3" json:"position,omitempty"`
- // Object ACL
- Acl string `protobuf:"bytes,6,opt,name=acl,proto3" json:"acl,omitempty"`
- // Sets the Cache-Control header of the response.
- CacheControl string `protobuf:"bytes,7,opt,name=cache_control,json=cacheControl,proto3" json:"cache_control,omitempty"`
- // Sets the Content-Disposition header of the response
- ContentDisposition string `protobuf:"bytes,8,opt,name=content_disposition,json=contentDisposition,proto3" json:"content_disposition,omitempty"`
- // Sets the Content-Encoding header of the response
- ContentEncoding string `protobuf:"bytes,9,opt,name=content_encoding,json=contentEncoding,proto3" json:"content_encoding,omitempty"`
- // The base64-encoded 128-bit MD5 digest of the part data.
- ContentMd5 string `protobuf:"bytes,10,opt,name=content_md5,json=contentMd5,proto3" json:"content_md5,omitempty"`
- // Sets the Expires header of the response
- Expires int64 `protobuf:"varint,11,opt,name=expires,proto3" json:"expires,omitempty"`
- // Provides storage class information of the object. Amazon S3 returns this header
- // for all objects except for S3 Standard storage class objects.
- StorageClass string `protobuf:"bytes,12,opt,name=storage_class,json=storageClass,proto3" json:"storage_class,omitempty"`
- // The server-side encryption algorithm used when storing this object in Amazon S3
- // (for example, AES256, aws:kms).
- ServerSideEncryption string `protobuf:"bytes,13,opt,name=server_side_encryption,json=serverSideEncryption,proto3" json:"server_side_encryption,omitempty"`
- // Object metadata
- Meta string `protobuf:"bytes,14,opt,name=meta,proto3" json:"meta,omitempty"`
- // Object tags
- Tags map[string]string `protobuf:"bytes,15,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+ // To retrieve the checksum, this parameter must be enabled
+ ChecksumMode string `protobuf:"bytes,4,opt,name=checksum_mode,json=checksumMode,proto3" json:"checksum_mode,omitempty"`
+ // The account ID of the expected bucket owner
+ ExpectedBucketOwner string `protobuf:"bytes,5,opt,name=expected_bucket_owner,json=expectedBucketOwner,proto3" json:"expected_bucket_owner,omitempty"`
+ // Return the object only if its entity tag (ETag) is the same as the one
+ // specified; otherwise, return a 412 (precondition failed) error.
+ IfMatch string `protobuf:"bytes,6,opt,name=if_match,json=ifMatch,proto3" json:"if_match,omitempty"`
+ // Return the object only if it has been modified since the specified time;
+ // otherwise, return a 304 (not modified) error.
+ IfModifiedSince int64 `protobuf:"varint,7,opt,name=if_modified_since,json=ifModifiedSince,proto3" json:"if_modified_since,omitempty"`
+ // Return the object only if its entity tag (ETag) is different from the one
+ // specified
+ IfNoneMatch string `protobuf:"bytes,8,opt,name=if_none_match,json=ifNoneMatch,proto3" json:"if_none_match,omitempty"`
+ // Return the object only if it has not been modified since the specified time;
+ IfUnmodifiedSince int64 `protobuf:"varint,9,opt,name=if_unmodified_since,json=ifUnmodifiedSince,proto3" json:"if_unmodified_since,omitempty"`
+ // Part number of the object being read. This is a positive integer between 1 and
+ // 10,000. Effectively performs a 'ranged' HEAD request for the part specified.
+ // Useful querying about the size of the part and the number of parts in this
+ // object.
+ PartNumber int32 `protobuf:"varint,10,opt,name=part_number,json=partNumber,proto3" json:"part_number,omitempty"`
+ // Confirms that the requester knows that they will be charged for the request.
+ RequestPayer string `protobuf:"bytes,11,opt,name=request_payer,json=requestPayer,proto3" json:"request_payer,omitempty"`
+ // Specifies the algorithm to use to when encrypting the object (for example,
+ // AES256).
+ SseCustomerAlgorithm string `protobuf:"bytes,12,opt,name=sse_customer_algorithm,json=sseCustomerAlgorithm,proto3" json:"sse_customer_algorithm,omitempty"`
+ // Specifies the customer-provided encryption key for Amazon S3 to use in
+ // encrypting data
+ SseCustomerKey string `protobuf:"bytes,13,opt,name=sse_customer_key,json=sseCustomerKey,proto3" json:"sse_customer_key,omitempty"`
+ // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
+ SseCustomerKeyMd5 string `protobuf:"bytes,14,opt,name=sse_customer_key_md5,json=sseCustomerKeyMd5,proto3" json:"sse_customer_key_md5,omitempty"`
+ // VersionId used to reference a specific version of the object.
+ VersionId string `protobuf:"bytes,15,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"`
+ // Return object details meta
+ WithDetails bool `protobuf:"varint,16,opt,name=with_details,json=withDetails,proto3" json:"with_details,omitempty"`
}
-func (x *AppendObjectInput) Reset() {
- *x = AppendObjectInput{}
+func (x *HeadObjectInput) Reset() {
+ *x = HeadObjectInput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[59]
+ mi := &file_oss_proto_msgTypes[60]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *AppendObjectInput) String() string {
+func (x *HeadObjectInput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*AppendObjectInput) ProtoMessage() {}
+func (*HeadObjectInput) ProtoMessage() {}
-func (x *AppendObjectInput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[59]
+func (x *HeadObjectInput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[60]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -6007,143 +6099,150 @@ func (x *AppendObjectInput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use AppendObjectInput.ProtoReflect.Descriptor instead.
-func (*AppendObjectInput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{59}
+// Deprecated: Use HeadObjectInput.ProtoReflect.Descriptor instead.
+func (*HeadObjectInput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{60}
}
-func (x *AppendObjectInput) GetStoreName() string {
+func (x *HeadObjectInput) GetStoreName() string {
if x != nil {
return x.StoreName
}
return ""
}
-func (x *AppendObjectInput) GetBucket() string {
+func (x *HeadObjectInput) GetBucket() string {
if x != nil {
return x.Bucket
}
return ""
}
-func (x *AppendObjectInput) GetKey() string {
+func (x *HeadObjectInput) GetKey() string {
if x != nil {
return x.Key
}
return ""
}
-func (x *AppendObjectInput) GetBody() []byte {
+func (x *HeadObjectInput) GetChecksumMode() string {
if x != nil {
- return x.Body
+ return x.ChecksumMode
}
- return nil
+ return ""
}
-func (x *AppendObjectInput) GetPosition() int64 {
+func (x *HeadObjectInput) GetExpectedBucketOwner() string {
if x != nil {
- return x.Position
+ return x.ExpectedBucketOwner
}
- return 0
+ return ""
}
-func (x *AppendObjectInput) GetAcl() string {
+func (x *HeadObjectInput) GetIfMatch() string {
if x != nil {
- return x.Acl
+ return x.IfMatch
}
return ""
}
-func (x *AppendObjectInput) GetCacheControl() string {
+func (x *HeadObjectInput) GetIfModifiedSince() int64 {
if x != nil {
- return x.CacheControl
+ return x.IfModifiedSince
}
- return ""
+ return 0
}
-func (x *AppendObjectInput) GetContentDisposition() string {
+func (x *HeadObjectInput) GetIfNoneMatch() string {
if x != nil {
- return x.ContentDisposition
+ return x.IfNoneMatch
}
return ""
}
-func (x *AppendObjectInput) GetContentEncoding() string {
+func (x *HeadObjectInput) GetIfUnmodifiedSince() int64 {
if x != nil {
- return x.ContentEncoding
+ return x.IfUnmodifiedSince
}
- return ""
+ return 0
}
-func (x *AppendObjectInput) GetContentMd5() string {
+func (x *HeadObjectInput) GetPartNumber() int32 {
if x != nil {
- return x.ContentMd5
+ return x.PartNumber
+ }
+ return 0
+}
+
+func (x *HeadObjectInput) GetRequestPayer() string {
+ if x != nil {
+ return x.RequestPayer
}
return ""
}
-func (x *AppendObjectInput) GetExpires() int64 {
+func (x *HeadObjectInput) GetSseCustomerAlgorithm() string {
if x != nil {
- return x.Expires
+ return x.SseCustomerAlgorithm
}
- return 0
+ return ""
}
-func (x *AppendObjectInput) GetStorageClass() string {
+func (x *HeadObjectInput) GetSseCustomerKey() string {
if x != nil {
- return x.StorageClass
+ return x.SseCustomerKey
}
return ""
}
-func (x *AppendObjectInput) GetServerSideEncryption() string {
+func (x *HeadObjectInput) GetSseCustomerKeyMd5() string {
if x != nil {
- return x.ServerSideEncryption
+ return x.SseCustomerKeyMd5
}
return ""
}
-func (x *AppendObjectInput) GetMeta() string {
+func (x *HeadObjectInput) GetVersionId() string {
if x != nil {
- return x.Meta
+ return x.VersionId
}
return ""
}
-func (x *AppendObjectInput) GetTags() map[string]string {
+func (x *HeadObjectInput) GetWithDetails() bool {
if x != nil {
- return x.Tags
+ return x.WithDetails
}
- return nil
+ return false
}
-// AppendObjectOutput
-type AppendObjectOutput struct {
+// HeadObjectOutput
+type HeadObjectOutput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Next append position
- AppendPosition int64 `protobuf:"varint,1,opt,name=append_position,json=appendPosition,proto3" json:"append_position,omitempty"`
+ // Metadata pertaining to the operation's result.
+ ResultMetadata map[string]string `protobuf:"bytes,1,rep,name=result_metadata,json=resultMetadata,proto3" json:"result_metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}
-func (x *AppendObjectOutput) Reset() {
- *x = AppendObjectOutput{}
+func (x *HeadObjectOutput) Reset() {
+ *x = HeadObjectOutput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[60]
+ mi := &file_oss_proto_msgTypes[61]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *AppendObjectOutput) String() string {
+func (x *HeadObjectOutput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*AppendObjectOutput) ProtoMessage() {}
+func (*HeadObjectOutput) ProtoMessage() {}
-func (x *AppendObjectOutput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[60]
+func (x *HeadObjectOutput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[61]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -6154,20 +6253,20 @@ func (x *AppendObjectOutput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use AppendObjectOutput.ProtoReflect.Descriptor instead.
-func (*AppendObjectOutput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{60}
+// Deprecated: Use HeadObjectOutput.ProtoReflect.Descriptor instead.
+func (*HeadObjectOutput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{61}
}
-func (x *AppendObjectOutput) GetAppendPosition() int64 {
+func (x *HeadObjectOutput) GetResultMetadata() map[string]string {
if x != nil {
- return x.AppendPosition
+ return x.ResultMetadata
}
- return 0
+ return nil
}
-// ListPartsInput
-type ListPartsInput struct {
+// IsObjectExistInput
+type IsObjectExistInput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
@@ -6180,36 +6279,27 @@ type ListPartsInput struct {
// Name of the object key.
// This member is required.
Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
- // The account ID of the expected bucket owner
- ExpectedBucketOwner string `protobuf:"bytes,4,opt,name=expected_bucket_owner,json=expectedBucketOwner,proto3" json:"expected_bucket_owner,omitempty"`
- // Sets the maximum number of parts to return
- MaxParts int64 `protobuf:"varint,5,opt,name=max_parts,json=maxParts,proto3" json:"max_parts,omitempty"`
- // Specifies the part after which listing should begin. Only parts with higher part
- // numbers will be listed.
- PartNumberMarker int64 `protobuf:"varint,6,opt,name=part_number_marker,json=partNumberMarker,proto3" json:"part_number_marker,omitempty"`
- // Confirms that the requester knows that they will be charged for the request.
- RequestPayer string `protobuf:"bytes,7,opt,name=request_payer,json=requestPayer,proto3" json:"request_payer,omitempty"`
- // Upload ID identifying the multipart upload whose parts are being listed.
- UploadId string `protobuf:"bytes,8,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`
+ // Object version id
+ VersionId string `protobuf:"bytes,4,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"`
}
-func (x *ListPartsInput) Reset() {
- *x = ListPartsInput{}
+func (x *IsObjectExistInput) Reset() {
+ *x = IsObjectExistInput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[61]
+ mi := &file_oss_proto_msgTypes[62]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *ListPartsInput) String() string {
+func (x *IsObjectExistInput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ListPartsInput) ProtoMessage() {}
+func (*IsObjectExistInput) ProtoMessage() {}
-func (x *ListPartsInput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[61]
+func (x *IsObjectExistInput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[62]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -6220,100 +6310,125 @@ func (x *ListPartsInput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ListPartsInput.ProtoReflect.Descriptor instead.
-func (*ListPartsInput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{61}
+// Deprecated: Use IsObjectExistInput.ProtoReflect.Descriptor instead.
+func (*IsObjectExistInput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{62}
}
-func (x *ListPartsInput) GetStoreName() string {
+func (x *IsObjectExistInput) GetStoreName() string {
if x != nil {
return x.StoreName
}
return ""
}
-func (x *ListPartsInput) GetBucket() string {
+func (x *IsObjectExistInput) GetBucket() string {
if x != nil {
return x.Bucket
}
return ""
}
-func (x *ListPartsInput) GetKey() string {
+func (x *IsObjectExistInput) GetKey() string {
if x != nil {
return x.Key
}
return ""
}
-func (x *ListPartsInput) GetExpectedBucketOwner() string {
+func (x *IsObjectExistInput) GetVersionId() string {
if x != nil {
- return x.ExpectedBucketOwner
+ return x.VersionId
}
return ""
}
-func (x *ListPartsInput) GetMaxParts() int64 {
- if x != nil {
- return x.MaxParts
- }
- return 0
+// IsObjectExistOutput
+type IsObjectExistOutput struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Object exist or not
+ FileExist bool `protobuf:"varint,1,opt,name=file_exist,json=fileExist,proto3" json:"file_exist,omitempty"`
}
-func (x *ListPartsInput) GetPartNumberMarker() int64 {
- if x != nil {
- return x.PartNumberMarker
+func (x *IsObjectExistOutput) Reset() {
+ *x = IsObjectExistOutput{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_oss_proto_msgTypes[63]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
- return 0
}
-func (x *ListPartsInput) GetRequestPayer() string {
- if x != nil {
- return x.RequestPayer
+func (x *IsObjectExistOutput) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IsObjectExistOutput) ProtoMessage() {}
+
+func (x *IsObjectExistOutput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[63]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
}
- return ""
+ return mi.MessageOf(x)
}
-func (x *ListPartsInput) GetUploadId() string {
+// Deprecated: Use IsObjectExistOutput.ProtoReflect.Descriptor instead.
+func (*IsObjectExistOutput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{63}
+}
+
+func (x *IsObjectExistOutput) GetFileExist() bool {
if x != nil {
- return x.UploadId
+ return x.FileExist
}
- return ""
+ return false
}
-// Part
-type Part struct {
+// SignURLInput
+type SignURLInput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Part Etag
- Etag string `protobuf:"bytes,1,opt,name=etag,proto3" json:"etag,omitempty"`
- // Last modified time
- LastModified int64 `protobuf:"varint,2,opt,name=last_modified,json=lastModified,proto3" json:"last_modified,omitempty"`
- // Part number
- PartNumber int64 `protobuf:"varint,3,opt,name=part_number,json=partNumber,proto3" json:"part_number,omitempty"`
- // Part size
- Size int64 `protobuf:"varint,4,opt,name=size,proto3" json:"size,omitempty"`
+ // Required. The name of oss store.
+ StoreName string `protobuf:"bytes,1,opt,name=store_name,json=storeName,proto3" json:"store_name,omitempty"`
+ // The bucket name containing the object
+ // This member is required
+ Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
+ // Name of the object key.
+ // This member is required.
+ Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
+ // the method for sign url, eg. GET、POST
+ Method string `protobuf:"bytes,4,opt,name=method,proto3" json:"method,omitempty"`
+ // expire time of the sign url
+ ExpiredInSec int64 `protobuf:"varint,5,opt,name=expired_in_sec,json=expiredInSec,proto3" json:"expired_in_sec,omitempty"`
}
-func (x *Part) Reset() {
- *x = Part{}
+func (x *SignURLInput) Reset() {
+ *x = SignURLInput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[62]
+ mi := &file_oss_proto_msgTypes[64]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *Part) String() string {
+func (x *SignURLInput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*Part) ProtoMessage() {}
+func (*SignURLInput) ProtoMessage() {}
-func (x *Part) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[62]
+func (x *SignURLInput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[64]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -6324,85 +6439,73 @@ func (x *Part) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use Part.ProtoReflect.Descriptor instead.
-func (*Part) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{62}
+// Deprecated: Use SignURLInput.ProtoReflect.Descriptor instead.
+func (*SignURLInput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{64}
}
-func (x *Part) GetEtag() string {
+func (x *SignURLInput) GetStoreName() string {
if x != nil {
- return x.Etag
+ return x.StoreName
}
return ""
}
-func (x *Part) GetLastModified() int64 {
+func (x *SignURLInput) GetBucket() string {
if x != nil {
- return x.LastModified
+ return x.Bucket
}
- return 0
+ return ""
}
-func (x *Part) GetPartNumber() int64 {
+func (x *SignURLInput) GetKey() string {
if x != nil {
- return x.PartNumber
+ return x.Key
}
- return 0
+ return ""
}
-func (x *Part) GetSize() int64 {
+func (x *SignURLInput) GetMethod() string {
if x != nil {
- return x.Size
+ return x.Method
+ }
+ return ""
+}
+
+func (x *SignURLInput) GetExpiredInSec() int64 {
+ if x != nil {
+ return x.ExpiredInSec
}
return 0
}
-// ListPartsOutput
-type ListPartsOutput struct {
+// SignURLOutput
+type SignURLOutput struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // The bucket name containing the object
- // This member is required
- Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"`
- // Name of the object key.
- // This member is required.
- Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
- // Upload ID identifying the multipart upload whose parts are being listed.
- UploadId string `protobuf:"bytes,3,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`
- // When a list is truncated, this element specifies the last part in the list, as
- // well as the value to use for the part-number-marker request parameter in a
- // subsequent request.
- NextPartNumberMarker string `protobuf:"bytes,4,opt,name=next_part_number_marker,json=nextPartNumberMarker,proto3" json:"next_part_number_marker,omitempty"`
- // Maximum number of parts that were allowed in the response.
- MaxParts int64 `protobuf:"varint,5,opt,name=max_parts,json=maxParts,proto3" json:"max_parts,omitempty"`
- // Indicates whether the returned list of parts is truncated. A true value
- // indicates that the list was truncated. A list can be truncated if the number of
- // parts exceeds the limit returned in the MaxParts element.
- IsTruncated bool `protobuf:"varint,6,opt,name=is_truncated,json=isTruncated,proto3" json:"is_truncated,omitempty"`
- // Container for elements related to a particular part. A response can contain zero
- // or more Part elements.
- Parts []*Part `protobuf:"bytes,7,rep,name=parts,proto3" json:"parts,omitempty"`
+ // Object signed url
+ SignedUrl string `protobuf:"bytes,1,opt,name=signed_url,json=signedUrl,proto3" json:"signed_url,omitempty"`
}
-func (x *ListPartsOutput) Reset() {
- *x = ListPartsOutput{}
+func (x *SignURLOutput) Reset() {
+ *x = SignURLOutput{}
if protoimpl.UnsafeEnabled {
- mi := &file_oss_proto_msgTypes[63]
+ mi := &file_oss_proto_msgTypes[65]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
-func (x *ListPartsOutput) String() string {
+func (x *SignURLOutput) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*ListPartsOutput) ProtoMessage() {}
+func (*SignURLOutput) ProtoMessage() {}
-func (x *ListPartsOutput) ProtoReflect() protoreflect.Message {
- mi := &file_oss_proto_msgTypes[63]
+func (x *SignURLOutput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[65]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -6413,74 +6516,628 @@ func (x *ListPartsOutput) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use ListPartsOutput.ProtoReflect.Descriptor instead.
-func (*ListPartsOutput) Descriptor() ([]byte, []int) {
- return file_oss_proto_rawDescGZIP(), []int{63}
+// Deprecated: Use SignURLOutput.ProtoReflect.Descriptor instead.
+func (*SignURLOutput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{65}
}
-func (x *ListPartsOutput) GetBucket() string {
+func (x *SignURLOutput) GetSignedUrl() string {
if x != nil {
- return x.Bucket
+ return x.SignedUrl
}
return ""
}
-func (x *ListPartsOutput) GetKey() string {
- if x != nil {
- return x.Key
- }
- return ""
+// UpdateBandwidthRateLimitInput
+type UpdateBandwidthRateLimitInput struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Required. The name of oss store.
+ StoreName string `protobuf:"bytes,1,opt,name=store_name,json=storeName,proto3" json:"store_name,omitempty"`
+ // The average upload/download bandwidth rate limit in bits per second.
+ AverageRateLimitInBitsPerSec int64 `protobuf:"varint,2,opt,name=average_rate_limit_in_bits_per_sec,json=averageRateLimitInBitsPerSec,proto3" json:"average_rate_limit_in_bits_per_sec,omitempty"`
+ // Resource name of gateway
+ GatewayResourceName string `protobuf:"bytes,3,opt,name=gateway_resource_name,json=gatewayResourceName,proto3" json:"gateway_resource_name,omitempty"`
}
-func (x *ListPartsOutput) GetUploadId() string {
- if x != nil {
- return x.UploadId
+func (x *UpdateBandwidthRateLimitInput) Reset() {
+ *x = UpdateBandwidthRateLimitInput{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_oss_proto_msgTypes[66]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
}
- return ""
}
-func (x *ListPartsOutput) GetNextPartNumberMarker() string {
- if x != nil {
- return x.NextPartNumberMarker
+func (x *UpdateBandwidthRateLimitInput) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UpdateBandwidthRateLimitInput) ProtoMessage() {}
+
+func (x *UpdateBandwidthRateLimitInput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[66]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
}
- return ""
+ return mi.MessageOf(x)
}
-func (x *ListPartsOutput) GetMaxParts() int64 {
+// Deprecated: Use UpdateBandwidthRateLimitInput.ProtoReflect.Descriptor instead.
+func (*UpdateBandwidthRateLimitInput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{66}
+}
+
+func (x *UpdateBandwidthRateLimitInput) GetStoreName() string {
if x != nil {
- return x.MaxParts
+ return x.StoreName
}
- return 0
+ return ""
}
-func (x *ListPartsOutput) GetIsTruncated() bool {
+func (x *UpdateBandwidthRateLimitInput) GetAverageRateLimitInBitsPerSec() int64 {
if x != nil {
- return x.IsTruncated
+ return x.AverageRateLimitInBitsPerSec
}
- return false
+ return 0
}
-func (x *ListPartsOutput) GetParts() []*Part {
+func (x *UpdateBandwidthRateLimitInput) GetGatewayResourceName() string {
if x != nil {
- return x.Parts
+ return x.GatewayResourceName
}
- return nil
+ return ""
}
-var File_oss_proto protoreflect.FileDescriptor
+// AppendObjectInput
+type AppendObjectInput struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
-var file_oss_proto_rawDesc = []byte{
- 0x0a, 0x09, 0x6f, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x73, 0x70, 0x65,
- 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
- 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xdd, 0x07, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65,
- 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65,
- 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f,
- 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10,
- 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
- 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x75, 0x63,
+ // Required. The name of oss store.
+ StoreName string `protobuf:"bytes,1,opt,name=store_name,json=storeName,proto3" json:"store_name,omitempty"`
+ // The bucket name containing the object
+ // This member is required
+ Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
+ // Name of the object key.
+ // This member is required.
+ Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
+ // Object content
+ Body []byte `protobuf:"bytes,4,opt,name=body,proto3" json:"body,omitempty"`
+ // Append start position
+ Position int64 `protobuf:"varint,5,opt,name=position,proto3" json:"position,omitempty"`
+ // Object ACL
+ Acl string `protobuf:"bytes,6,opt,name=acl,proto3" json:"acl,omitempty"`
+ // Sets the Cache-Control header of the response.
+ CacheControl string `protobuf:"bytes,7,opt,name=cache_control,json=cacheControl,proto3" json:"cache_control,omitempty"`
+ // Sets the Content-Disposition header of the response
+ ContentDisposition string `protobuf:"bytes,8,opt,name=content_disposition,json=contentDisposition,proto3" json:"content_disposition,omitempty"`
+ // Sets the Content-Encoding header of the response
+ ContentEncoding string `protobuf:"bytes,9,opt,name=content_encoding,json=contentEncoding,proto3" json:"content_encoding,omitempty"`
+ // The base64-encoded 128-bit MD5 digest of the part data.
+ ContentMd5 string `protobuf:"bytes,10,opt,name=content_md5,json=contentMd5,proto3" json:"content_md5,omitempty"`
+ // Sets the Expires header of the response
+ Expires int64 `protobuf:"varint,11,opt,name=expires,proto3" json:"expires,omitempty"`
+ // Provides storage class information of the object. Amazon S3 returns this header
+ // for all objects except for S3 Standard storage class objects.
+ StorageClass string `protobuf:"bytes,12,opt,name=storage_class,json=storageClass,proto3" json:"storage_class,omitempty"`
+ // The server-side encryption algorithm used when storing this object in Amazon S3
+ // (for example, AES256, aws:kms).
+ ServerSideEncryption string `protobuf:"bytes,13,opt,name=server_side_encryption,json=serverSideEncryption,proto3" json:"server_side_encryption,omitempty"`
+ // Object metadata
+ Meta string `protobuf:"bytes,14,opt,name=meta,proto3" json:"meta,omitempty"`
+ // Object tags
+ Tags map[string]string `protobuf:"bytes,15,rep,name=tags,proto3" json:"tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+}
+
+func (x *AppendObjectInput) Reset() {
+ *x = AppendObjectInput{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_oss_proto_msgTypes[67]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *AppendObjectInput) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AppendObjectInput) ProtoMessage() {}
+
+func (x *AppendObjectInput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[67]
+ 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 AppendObjectInput.ProtoReflect.Descriptor instead.
+func (*AppendObjectInput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{67}
+}
+
+func (x *AppendObjectInput) GetStoreName() string {
+ if x != nil {
+ return x.StoreName
+ }
+ return ""
+}
+
+func (x *AppendObjectInput) GetBucket() string {
+ if x != nil {
+ return x.Bucket
+ }
+ return ""
+}
+
+func (x *AppendObjectInput) GetKey() string {
+ if x != nil {
+ return x.Key
+ }
+ return ""
+}
+
+func (x *AppendObjectInput) GetBody() []byte {
+ if x != nil {
+ return x.Body
+ }
+ return nil
+}
+
+func (x *AppendObjectInput) GetPosition() int64 {
+ if x != nil {
+ return x.Position
+ }
+ return 0
+}
+
+func (x *AppendObjectInput) GetAcl() string {
+ if x != nil {
+ return x.Acl
+ }
+ return ""
+}
+
+func (x *AppendObjectInput) GetCacheControl() string {
+ if x != nil {
+ return x.CacheControl
+ }
+ return ""
+}
+
+func (x *AppendObjectInput) GetContentDisposition() string {
+ if x != nil {
+ return x.ContentDisposition
+ }
+ return ""
+}
+
+func (x *AppendObjectInput) GetContentEncoding() string {
+ if x != nil {
+ return x.ContentEncoding
+ }
+ return ""
+}
+
+func (x *AppendObjectInput) GetContentMd5() string {
+ if x != nil {
+ return x.ContentMd5
+ }
+ return ""
+}
+
+func (x *AppendObjectInput) GetExpires() int64 {
+ if x != nil {
+ return x.Expires
+ }
+ return 0
+}
+
+func (x *AppendObjectInput) GetStorageClass() string {
+ if x != nil {
+ return x.StorageClass
+ }
+ return ""
+}
+
+func (x *AppendObjectInput) GetServerSideEncryption() string {
+ if x != nil {
+ return x.ServerSideEncryption
+ }
+ return ""
+}
+
+func (x *AppendObjectInput) GetMeta() string {
+ if x != nil {
+ return x.Meta
+ }
+ return ""
+}
+
+func (x *AppendObjectInput) GetTags() map[string]string {
+ if x != nil {
+ return x.Tags
+ }
+ return nil
+}
+
+// AppendObjectOutput
+type AppendObjectOutput struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Next append position
+ AppendPosition int64 `protobuf:"varint,1,opt,name=append_position,json=appendPosition,proto3" json:"append_position,omitempty"`
+}
+
+func (x *AppendObjectOutput) Reset() {
+ *x = AppendObjectOutput{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_oss_proto_msgTypes[68]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *AppendObjectOutput) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AppendObjectOutput) ProtoMessage() {}
+
+func (x *AppendObjectOutput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[68]
+ 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 AppendObjectOutput.ProtoReflect.Descriptor instead.
+func (*AppendObjectOutput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{68}
+}
+
+func (x *AppendObjectOutput) GetAppendPosition() int64 {
+ if x != nil {
+ return x.AppendPosition
+ }
+ return 0
+}
+
+// ListPartsInput
+type ListPartsInput struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Required. The name of oss store.
+ StoreName string `protobuf:"bytes,1,opt,name=store_name,json=storeName,proto3" json:"store_name,omitempty"`
+ // The bucket name containing the object
+ // This member is required
+ Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
+ // Name of the object key.
+ // This member is required.
+ Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
+ // The account ID of the expected bucket owner
+ ExpectedBucketOwner string `protobuf:"bytes,4,opt,name=expected_bucket_owner,json=expectedBucketOwner,proto3" json:"expected_bucket_owner,omitempty"`
+ // Sets the maximum number of parts to return
+ MaxParts int64 `protobuf:"varint,5,opt,name=max_parts,json=maxParts,proto3" json:"max_parts,omitempty"`
+ // Specifies the part after which listing should begin. Only parts with higher part
+ // numbers will be listed.
+ PartNumberMarker int64 `protobuf:"varint,6,opt,name=part_number_marker,json=partNumberMarker,proto3" json:"part_number_marker,omitempty"`
+ // Confirms that the requester knows that they will be charged for the request.
+ RequestPayer string `protobuf:"bytes,7,opt,name=request_payer,json=requestPayer,proto3" json:"request_payer,omitempty"`
+ // Upload ID identifying the multipart upload whose parts are being listed.
+ UploadId string `protobuf:"bytes,8,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`
+}
+
+func (x *ListPartsInput) Reset() {
+ *x = ListPartsInput{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_oss_proto_msgTypes[69]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListPartsInput) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListPartsInput) ProtoMessage() {}
+
+func (x *ListPartsInput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[69]
+ 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 ListPartsInput.ProtoReflect.Descriptor instead.
+func (*ListPartsInput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{69}
+}
+
+func (x *ListPartsInput) GetStoreName() string {
+ if x != nil {
+ return x.StoreName
+ }
+ return ""
+}
+
+func (x *ListPartsInput) GetBucket() string {
+ if x != nil {
+ return x.Bucket
+ }
+ return ""
+}
+
+func (x *ListPartsInput) GetKey() string {
+ if x != nil {
+ return x.Key
+ }
+ return ""
+}
+
+func (x *ListPartsInput) GetExpectedBucketOwner() string {
+ if x != nil {
+ return x.ExpectedBucketOwner
+ }
+ return ""
+}
+
+func (x *ListPartsInput) GetMaxParts() int64 {
+ if x != nil {
+ return x.MaxParts
+ }
+ return 0
+}
+
+func (x *ListPartsInput) GetPartNumberMarker() int64 {
+ if x != nil {
+ return x.PartNumberMarker
+ }
+ return 0
+}
+
+func (x *ListPartsInput) GetRequestPayer() string {
+ if x != nil {
+ return x.RequestPayer
+ }
+ return ""
+}
+
+func (x *ListPartsInput) GetUploadId() string {
+ if x != nil {
+ return x.UploadId
+ }
+ return ""
+}
+
+// Part
+type Part struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Part Etag
+ Etag string `protobuf:"bytes,1,opt,name=etag,proto3" json:"etag,omitempty"`
+ // Last modified time
+ LastModified int64 `protobuf:"varint,2,opt,name=last_modified,json=lastModified,proto3" json:"last_modified,omitempty"`
+ // Part number
+ PartNumber int64 `protobuf:"varint,3,opt,name=part_number,json=partNumber,proto3" json:"part_number,omitempty"`
+ // Part size
+ Size int64 `protobuf:"varint,4,opt,name=size,proto3" json:"size,omitempty"`
+}
+
+func (x *Part) Reset() {
+ *x = Part{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_oss_proto_msgTypes[70]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Part) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Part) ProtoMessage() {}
+
+func (x *Part) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[70]
+ 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 Part.ProtoReflect.Descriptor instead.
+func (*Part) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{70}
+}
+
+func (x *Part) GetEtag() string {
+ if x != nil {
+ return x.Etag
+ }
+ return ""
+}
+
+func (x *Part) GetLastModified() int64 {
+ if x != nil {
+ return x.LastModified
+ }
+ return 0
+}
+
+func (x *Part) GetPartNumber() int64 {
+ if x != nil {
+ return x.PartNumber
+ }
+ return 0
+}
+
+func (x *Part) GetSize() int64 {
+ if x != nil {
+ return x.Size
+ }
+ return 0
+}
+
+// ListPartsOutput
+type ListPartsOutput struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The bucket name containing the object
+ // This member is required
+ Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"`
+ // Name of the object key.
+ // This member is required.
+ Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
+ // Upload ID identifying the multipart upload whose parts are being listed.
+ UploadId string `protobuf:"bytes,3,opt,name=upload_id,json=uploadId,proto3" json:"upload_id,omitempty"`
+ // When a list is truncated, this element specifies the last part in the list, as
+ // well as the value to use for the part-number-marker request parameter in a
+ // subsequent request.
+ NextPartNumberMarker string `protobuf:"bytes,4,opt,name=next_part_number_marker,json=nextPartNumberMarker,proto3" json:"next_part_number_marker,omitempty"`
+ // Maximum number of parts that were allowed in the response.
+ MaxParts int64 `protobuf:"varint,5,opt,name=max_parts,json=maxParts,proto3" json:"max_parts,omitempty"`
+ // Indicates whether the returned list of parts is truncated. A true value
+ // indicates that the list was truncated. A list can be truncated if the number of
+ // parts exceeds the limit returned in the MaxParts element.
+ IsTruncated bool `protobuf:"varint,6,opt,name=is_truncated,json=isTruncated,proto3" json:"is_truncated,omitempty"`
+ // Container for elements related to a particular part. A response can contain zero
+ // or more Part elements.
+ Parts []*Part `protobuf:"bytes,7,rep,name=parts,proto3" json:"parts,omitempty"`
+}
+
+func (x *ListPartsOutput) Reset() {
+ *x = ListPartsOutput{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_oss_proto_msgTypes[71]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ListPartsOutput) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ListPartsOutput) ProtoMessage() {}
+
+func (x *ListPartsOutput) ProtoReflect() protoreflect.Message {
+ mi := &file_oss_proto_msgTypes[71]
+ 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 ListPartsOutput.ProtoReflect.Descriptor instead.
+func (*ListPartsOutput) Descriptor() ([]byte, []int) {
+ return file_oss_proto_rawDescGZIP(), []int{71}
+}
+
+func (x *ListPartsOutput) GetBucket() string {
+ if x != nil {
+ return x.Bucket
+ }
+ return ""
+}
+
+func (x *ListPartsOutput) GetKey() string {
+ if x != nil {
+ return x.Key
+ }
+ return ""
+}
+
+func (x *ListPartsOutput) GetUploadId() string {
+ if x != nil {
+ return x.UploadId
+ }
+ return ""
+}
+
+func (x *ListPartsOutput) GetNextPartNumberMarker() string {
+ if x != nil {
+ return x.NextPartNumberMarker
+ }
+ return ""
+}
+
+func (x *ListPartsOutput) GetMaxParts() int64 {
+ if x != nil {
+ return x.MaxParts
+ }
+ return 0
+}
+
+func (x *ListPartsOutput) GetIsTruncated() bool {
+ if x != nil {
+ return x.IsTruncated
+ }
+ return false
+}
+
+func (x *ListPartsOutput) GetParts() []*Part {
+ if x != nil {
+ return x.Parts
+ }
+ return nil
+}
+
+var File_oss_proto protoreflect.FileDescriptor
+
+var file_oss_proto_rawDesc = []byte{
+ 0x0a, 0x09, 0x6f, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x73, 0x70, 0x65,
+ 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xdd, 0x07, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65,
+ 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f,
+ 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10,
+ 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
+ 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x75, 0x63,
0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
0x13, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f,
0x77, 0x6e, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x66, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68,
@@ -6583,7 +7240,7 @@ var file_oss_proto_rawDesc = []byte{
0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xaf, 0x05, 0x0a, 0x0e, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a,
+ 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd4, 0x05, 0x0a, 0x0e, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a,
0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72,
0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74,
0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18,
@@ -6597,1189 +7254,1297 @@ var file_oss_proto_rawDesc = []byte{
0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x63,
0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61,
0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6f,
- 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
- 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
- 0x44, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x63,
- 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18,
- 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x45, 0x6e,
- 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65,
- 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73,
- 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f,
- 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x69, 0x64, 0x65, 0x45, 0x6e, 0x63, 0x72,
- 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64,
- 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e,
- 0x65, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x48, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x0d, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33,
- 0x2e, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e,
- 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12,
- 0x51, 0x0a, 0x07, 0x74, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b,
- 0x32, 0x37, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,
- 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x50, 0x75,
- 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x54, 0x61, 0x67,
- 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x74, 0x61, 0x67, 0x67, 0x69,
- 0x6e, 0x67, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
- 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
- 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3a, 0x0a, 0x0c, 0x54,
- 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
- 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a,
- 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbb, 0x01, 0x0a, 0x0f, 0x50, 0x75, 0x74, 0x4f,
- 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x62,
- 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65,
- 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4b,
- 0x65, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61,
- 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x1e, 0x0a,
- 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a,
- 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64,
- 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43,
- 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
- 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73,
- 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
- 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73,
- 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75,
- 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b,
- 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f,
- 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72,
- 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76,
- 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x81, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c,
- 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12,
- 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x61,
- 0x72, 0x6b, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f,
- 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x12, 0x1d, 0x0a,
- 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x89, 0x02, 0x0a,
- 0x15, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e,
- 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f,
- 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72,
- 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a,
- 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
- 0x4f, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e,
- 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e,
- 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x50, 0x75, 0x74, 0x4f, 0x62,
- 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74,
- 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73,
- 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x1a,
- 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
- 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
- 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xeb, 0x01, 0x0a, 0x16, 0x50, 0x75, 0x74,
- 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74,
- 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
- 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
- 0x49, 0x64, 0x12, 0x6f, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x6d, 0x65, 0x74,
- 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x73, 0x70,
- 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
- 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65,
- 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e,
- 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e,
- 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64,
- 0x61, 0x74, 0x61, 0x1a, 0x41, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x74,
- 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
- 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb6, 0x01, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74,
- 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x49, 0x6e,
- 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d,
- 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61,
- 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
- 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a,
- 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x65,
- 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f,
- 0x77, 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x78, 0x70, 0x65,
- 0x63, 0x74, 0x65, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x22,
- 0xf1, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
- 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a,
- 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x72, 0x0a, 0x0f,
- 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18,
- 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e,
- 0x73, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54,
- 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73,
- 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79,
- 0x52, 0x0e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x1a, 0x41, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
- 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
- 0x02, 0x38, 0x01, 0x22, 0xd8, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63,
- 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a,
- 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06,
- 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75,
- 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
- 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73,
- 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65,
- 0x64, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x05,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x75,
- 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x65, 0x72, 0x22, 0xf6,
- 0x02, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67,
- 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x50, 0x0a, 0x04, 0x74, 0x61, 0x67,
- 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
- 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61,
- 0x67, 0x67, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x54, 0x61, 0x67, 0x73,
- 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x76,
- 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x6f, 0x0a, 0x0f, 0x72, 0x65,
- 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33,
- 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e,
- 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65,
- 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73,
- 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x54,
- 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65,
- 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
- 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a,
- 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x97, 0x01, 0x0a, 0x0a, 0x43, 0x6f, 0x70, 0x79,
- 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73,
- 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x75,
- 0x63, 0x6b, 0x65, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x6f, 0x75,
- 0x72, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63,
- 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x16,
- 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73,
- 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x63, 0x6f,
- 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49,
- 0x64, 0x22, 0x90, 0x04, 0x0a, 0x0f, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
- 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e,
- 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65,
- 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03,
- 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x47,
- 0x0a, 0x0b, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33,
- 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x70,
- 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x52, 0x0a, 0x07, 0x74, 0x61, 0x67, 0x67, 0x69,
- 0x6e, 0x67, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
- 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
- 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74,
- 0x72, 0x79, 0x52, 0x07, 0x74, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65,
- 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x78,
- 0x70, 0x69, 0x72, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
- 0x61, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x11, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x69, 0x72, 0x65, 0x63,
- 0x74, 0x69, 0x76, 0x65, 0x12, 0x55, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
- 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e,
- 0x70, 0x75, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72,
- 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x3a, 0x0a, 0x0c, 0x54,
- 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
- 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a,
- 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64,
- 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x10, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x62, 0x6a, 0x65,
- 0x63, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x23, 0x0a, 0x0d,
- 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65,
- 0x64, 0x22, 0xad, 0x01, 0x0a, 0x10, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
- 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x5a, 0x0a, 0x12, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x6f,
- 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
- 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e,
- 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
- 0x52, 0x10, 0x63, 0x6f, 0x70, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x75,
- 0x6c, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49,
- 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
- 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x22, 0x66, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x46, 0x0a, 0x07, 0x6f,
- 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73,
- 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
- 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
- 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65,
- 0x63, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x69, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x05, 0x71, 0x75, 0x69, 0x65, 0x74, 0x22, 0x43, 0x0a, 0x10, 0x4f, 0x62, 0x6a,
- 0x65, 0x63, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x10, 0x0a,
- 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
- 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xac,
- 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73,
- 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e,
- 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65,
- 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x3a, 0x0a, 0x06,
- 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73,
- 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
- 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
- 0x52, 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x65, 0x72, 0x22, 0x9e, 0x01,
- 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12,
- 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x61,
- 0x72, 0x6b, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x18, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6d,
- 0x61, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x61,
- 0x72, 0x6b, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a,
- 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
- 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x5a,
- 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x4f,
- 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x43, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64,
- 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
- 0x2e, 0x73, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63,
- 0x74, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0xaf, 0x02, 0x0a, 0x10, 0x4c,
- 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12,
- 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16,
- 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
- 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69,
- 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d,
- 0x69, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67,
- 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x6e, 0x63,
- 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x70,
- 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x77, 0x6e,
- 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74,
- 0x65, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x16, 0x0a,
- 0x06, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d,
- 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x4b, 0x65, 0x79, 0x73,
- 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x4b, 0x65, 0x79, 0x73, 0x12,
- 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
- 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x65, 0x72, 0x22, 0xe2, 0x02, 0x0a,
- 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x4f, 0x75, 0x74, 0x70,
- 0x75, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65,
- 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6d,
- 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x08, 0x63,
- 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e,
- 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e,
- 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63,
- 0x74, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x64,
- 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
- 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x63,
- 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21,
- 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65,
- 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x06, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78,
- 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78,
- 0x4b, 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x65, 0x78, 0x74,
- 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e,
- 0x65, 0x78, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65,
- 0x66, 0x69, 0x78, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69,
- 0x78, 0x22, 0x3a, 0x0a, 0x05, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69,
- 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a,
- 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xc5, 0x01,
- 0x0a, 0x06, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03,
- 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23,
- 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18,
- 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66,
- 0x69, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
- 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e,
- 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04,
- 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65,
- 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73,
- 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
- 0x43, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x81, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a,
- 0x65, 0x63, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x49, 0x6e, 0x70, 0x75,
- 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65,
- 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
- 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65,
- 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
- 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x9b, 0x01, 0x0a, 0x18, 0x47, 0x65,
- 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c,
- 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64,
- 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x61, 0x6e, 0x6e,
- 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x37, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73,
- 0x33, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x27,
- 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65,
- 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x22, 0x93, 0x01, 0x0a, 0x17, 0x50, 0x75, 0x74, 0x4f,
- 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x49, 0x6e,
- 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d,
- 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61,
- 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
- 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03,
- 0x61, 0x63, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x1d,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x44, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18,
+ 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x45, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65,
+ 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73,
+ 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f,
+ 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x69, 0x64, 0x65, 0x45, 0x6e, 0x63, 0x72,
+ 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64,
+ 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e,
+ 0x65, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x48, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x0d, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33,
+ 0x2e, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e,
+ 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12,
+ 0x51, 0x0a, 0x07, 0x74, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x37, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,
+ 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x50, 0x75,
+ 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x54, 0x61, 0x67,
+ 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x74, 0x61, 0x67, 0x67, 0x69,
+ 0x6e, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c,
+ 0x61, 0x73, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61,
+ 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45,
+ 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
+ 0x1a, 0x3a, 0x0a, 0x0c, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79,
+ 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
+ 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbb, 0x01, 0x0a,
+ 0x0f, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74,
+ 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x65,
+ 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x62, 0x75,
+ 0x63, 0x6b, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x12,
+ 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74,
+ 0x61, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x68,
+ 0x61, 0x72, 0x67, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x76,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x11, 0x44,
+ 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74,
+ 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+ 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x65, 0x72, 0x12, 0x1d,
0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x43, 0x0a,
- 0x18, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x65, 0x64,
- 0x41, 0x63, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x81, 0x01,
+ 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75,
+ 0x74, 0x70, 0x75, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6d,
+ 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, 0x67,
- 0x65, 0x64, 0x22, 0x7c, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4f, 0x62, 0x6a,
- 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72,
+ 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49,
+ 0x64, 0x22, 0x89, 0x02, 0x0a, 0x15, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54,
+ 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73,
+ 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75,
+ 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b,
+ 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4f, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+ 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e,
+ 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67,
+ 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
+ 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+ 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x49, 0x64, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72,
+ 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+ 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xeb, 0x01,
+ 0x0a, 0x16, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69,
+ 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x6f, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x75, 0x6c,
+ 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x46, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,
+ 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x50, 0x75,
+ 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x4f, 0x75,
+ 0x74, 0x70, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64,
+ 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
+ 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x41, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x75,
+ 0x6c, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
+ 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
+ 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb6, 0x01, 0x0a, 0x18,
+ 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67,
+ 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72,
0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74,
0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65,
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12,
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64,
- 0x22, 0x6e, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63,
- 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64,
- 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70,
- 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72,
- 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68,
- 0x22, 0xf5, 0x0b, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69,
- 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12,
- 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16,
- 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
- 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x75,
- 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64,
- 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4b, 0x65,
- 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 0x63, 0x68,
- 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x0c, 0x63, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x2f, 0x0a,
- 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69,
- 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74,
- 0x65, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29,
- 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69,
- 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
- 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e,
- 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x09, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x6e, 0x67,
- 0x75, 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f,
- 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74,
- 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63,
- 0x74, 0x65, 0x64, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72,
- 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64,
- 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x65,
- 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x78,
- 0x70, 0x69, 0x72, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x66,
- 0x75, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x10, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74,
- 0x72, 0x6f, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x61,
- 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65,
- 0x61, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x64,
- 0x5f, 0x61, 0x63, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x72, 0x61, 0x6e,
- 0x74, 0x52, 0x65, 0x61, 0x64, 0x41, 0x63, 0x70, 0x12, 0x26, 0x0a, 0x0f, 0x67, 0x72, 0x61, 0x6e,
- 0x74, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x70, 0x18, 0x10, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x0d, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x63, 0x70,
- 0x12, 0x61, 0x0a, 0x09, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x11, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33,
- 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74,
- 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61,
- 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x44,
- 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, 0x1d, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6c, 0x6f,
- 0x63, 0x6b, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x73, 0x74,
- 0x61, 0x74, 0x75, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, 0x6f, 0x62, 0x6a, 0x65,
- 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x4c, 0x65, 0x67, 0x61, 0x6c, 0x48, 0x6f, 0x6c, 0x64, 0x53,
- 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f,
- 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x0e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12,
- 0x40, 0x0a, 0x1d, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72,
- 0x65, 0x74, 0x61, 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65,
- 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x19, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f,
- 0x63, 0x6b, 0x52, 0x65, 0x74, 0x61, 0x69, 0x6e, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x44, 0x61, 0x74,
- 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79,
- 0x65, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x50, 0x61, 0x79, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75,
- 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d,
- 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x73, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f,
- 0x6d, 0x65, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x28, 0x0a, 0x10,
- 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79,
- 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x73, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f,
- 0x6d, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x14, 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75,
- 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x64, 0x35, 0x18, 0x18,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x73, 0x73, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65,
- 0x72, 0x4b, 0x65, 0x79, 0x4d, 0x64, 0x35, 0x12, 0x3b, 0x0a, 0x1a, 0x73, 0x73, 0x65, 0x5f, 0x6b,
- 0x6d, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f,
- 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x73, 0x73, 0x65,
- 0x4b, 0x6d, 0x73, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e,
- 0x74, 0x65, 0x78, 0x74, 0x12, 0x23, 0x0a, 0x0e, 0x73, 0x73, 0x65, 0x5f, 0x6b, 0x6d, 0x73, 0x5f,
- 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x73,
- 0x65, 0x4b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74,
- 0x69, 0x6f, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65,
- 0x72, 0x53, 0x69, 0x64, 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12,
- 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73,
- 0x18, 0x1c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43,
- 0x6c, 0x61, 0x73, 0x73, 0x12, 0x5d, 0x0a, 0x07, 0x74, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x18,
- 0x1d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f,
- 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e,
- 0x73, 0x33, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61,
- 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x54, 0x61,
- 0x67, 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x74, 0x61, 0x67, 0x67,
- 0x69, 0x6e, 0x67, 0x12, 0x3a, 0x0a, 0x19, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x5f, 0x72,
- 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x52,
- 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a,
- 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79,
- 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
- 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3a, 0x0a, 0x0c,
- 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
+ 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64,
+ 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x75, 0x63,
+ 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x13, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f,
+ 0x77, 0x6e, 0x65, 0x72, 0x22, 0xf1, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70,
+ 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49,
+ 0x64, 0x12, 0x72, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61,
+ 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x73, 0x70, 0x65,
+ 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75,
+ 0x74, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x74,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x41, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfd, 0x03, 0x0a, 0x1b, 0x43, 0x72, 0x65,
- 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f,
- 0x61, 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b,
- 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
- 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
- 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x44, 0x61, 0x74,
- 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f,
- 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x52,
- 0x75, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f,
- 0x6b, 0x65, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28,
- 0x08, 0x52, 0x10, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x45, 0x6e, 0x61, 0x62,
- 0x6c, 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63,
- 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x16,
- 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x67,
- 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x73,
- 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74,
- 0x68, 0x6d, 0x12, 0x2f, 0x0a, 0x14, 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d,
- 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x64, 0x35, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x11, 0x73, 0x73, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4b, 0x65, 0x79,
- 0x4d, 0x64, 0x35, 0x12, 0x3b, 0x0a, 0x1a, 0x73, 0x73, 0x65, 0x5f, 0x6b, 0x6d, 0x73, 0x5f, 0x65,
- 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
- 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x73, 0x73, 0x65, 0x4b, 0x6d, 0x73, 0x45,
- 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
- 0x12, 0x23, 0x0a, 0x0e, 0x73, 0x73, 0x65, 0x5f, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f,
- 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x73, 0x65, 0x4b, 0x6d, 0x73,
- 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f,
- 0x73, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18,
- 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x69, 0x64,
- 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x75,
- 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
- 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x22, 0xde, 0x03, 0x0a, 0x0f, 0x55, 0x70, 0x6c,
- 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a,
- 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62,
- 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63,
- 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x04, 0x20,
- 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e,
- 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28,
- 0x03, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68,
- 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x64, 0x35, 0x18,
- 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4d, 0x64,
- 0x35, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x75,
- 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x13, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
- 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x75,
- 0x6d, 0x62, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74,
- 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x5f, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x16, 0x73,
- 0x73, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x67, 0x6f,
- 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x73, 0x65,
- 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68,
- 0x6d, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65,
- 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x73, 0x65,
- 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x14, 0x73,
- 0x73, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x5f,
- 0x6d, 0x64, 0x35, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x73, 0x73, 0x65, 0x43, 0x75,
- 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x4d, 0x64, 0x35, 0x12, 0x1b, 0x0a, 0x09,
- 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x22, 0xbf, 0x02, 0x0a, 0x10, 0x55, 0x70,
- 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x2c,
- 0x0a, 0x12, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x65, 0x6e, 0x61,
- 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x62, 0x75, 0x63, 0x6b,
- 0x65, 0x74, 0x4b, 0x65, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04,
- 0x65, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67,
- 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x72,
- 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x73, 0x65,
- 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69,
- 0x74, 0x68, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x73, 0x65, 0x43, 0x75,
- 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12,
- 0x2f, 0x0a, 0x14, 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f,
- 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x64, 0x35, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x73,
- 0x73, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x4d, 0x64, 0x35,
- 0x12, 0x23, 0x0a, 0x0e, 0x73, 0x73, 0x65, 0x5f, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f,
- 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x73, 0x65, 0x4b, 0x6d, 0x73,
- 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f,
- 0x73, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18,
- 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x69, 0x64,
- 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa9, 0x02, 0x0a, 0x13,
- 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x70, 0x79, 0x49, 0x6e,
- 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d,
- 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61,
- 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
- 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x0b,
- 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,
- 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43,
- 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x70, 0x79, 0x53,
- 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x75,
- 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74,
- 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64,
- 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61,
- 0x64, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73,
- 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x73, 0x74, 0x61,
- 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61,
- 0x72, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70,
- 0x61, 0x72, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x49, 0x0a, 0x0e, 0x43, 0x6f, 0x70, 0x79, 0x50,
- 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61,
- 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x23, 0x0a,
- 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69,
- 0x65, 0x64, 0x22, 0xba, 0x03, 0x0a, 0x14, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72,
- 0x74, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x62,
- 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65,
- 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4b,
- 0x65, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x54, 0x0a, 0x10, 0x63, 0x6f, 0x70,
- 0x79, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33,
- 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x50, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52,
- 0x0e, 0x63, 0x6f, 0x70, 0x79, 0x50, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12,
- 0x33, 0x0a, 0x16, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76,
- 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x13, 0x63, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69,
- 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f,
- 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x12, 0x34, 0x0a,
- 0x16, 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x61, 0x6c,
- 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73,
- 0x73, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69,
- 0x74, 0x68, 0x6d, 0x12, 0x2f, 0x0a, 0x14, 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f,
- 0x6d, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x64, 0x35, 0x18, 0x06, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x11, 0x73, 0x73, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4b, 0x65,
- 0x79, 0x4d, 0x64, 0x35, 0x12, 0x23, 0x0a, 0x0e, 0x73, 0x73, 0x65, 0x5f, 0x6b, 0x6d, 0x73, 0x5f,
- 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x73,
- 0x65, 0x4b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74,
- 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65,
- 0x72, 0x53, 0x69, 0x64, 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22,
- 0x44, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74,
- 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
- 0x65, 0x74, 0x61, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x75, 0x6d,
- 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x4e,
- 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x5b, 0x0a, 0x18, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74,
- 0x65, 0x64, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61,
- 0x64, 0x12, 0x3f, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
- 0x32, 0x29, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,
- 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f,
- 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x52, 0x05, 0x70, 0x61, 0x72,
- 0x74, 0x73, 0x22, 0xbe, 0x02, 0x0a, 0x1c, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4d,
- 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e,
- 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d,
- 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61,
- 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
- 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09,
- 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x65, 0x72, 0x12, 0x32,
+ 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd8, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74,
+ 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x70,
+ 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d,
+ 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x76,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78,
+ 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x77,
+ 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x78, 0x70, 0x65, 0x63,
+ 0x74, 0x65, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x23,
+ 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18,
+ 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61,
+ 0x79, 0x65, 0x72, 0x22, 0xf6, 0x02, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x50,
+ 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x73,
+ 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74,
+ 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73,
+ 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12,
+ 0x6f, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
+ 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54,
+ 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73,
+ 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79,
+ 0x52, 0x0e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
+ 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
+ 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x52, 0x65, 0x73,
+ 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79,
+ 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
+ 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x97, 0x01, 0x0a,
+ 0x0a, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x63,
+ 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65,
+ 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75,
+ 0x72, 0x63, 0x65, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x6f, 0x70,
+ 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x65,
+ 0x79, 0x12, 0x33, 0x0a, 0x16, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x13, 0x63, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72,
+ 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x90, 0x04, 0x0a, 0x0f, 0x43, 0x6f, 0x70, 0x79, 0x4f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74,
+ 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+ 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63,
+ 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65,
+ 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+ 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x0b, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x52, 0x0a, 0x63, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x52, 0x0a, 0x07,
+ 0x74, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e,
+ 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e,
+ 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x4f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x69,
+ 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x74, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67,
+ 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28,
+ 0x03, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x6d, 0x65,
+ 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65,
+ 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x55, 0x0a, 0x08, 0x6d, 0x65, 0x74,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x73, 0x70,
+ 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+ 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x1a, 0x3a, 0x0a, 0x0c, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79,
+ 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
+ 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d,
+ 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
+ 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
+ 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x10, 0x43, 0x6f, 0x70,
+ 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a,
+ 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61,
+ 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69,
+ 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x6f,
+ 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x22, 0xad, 0x01, 0x0a, 0x10, 0x43, 0x6f, 0x70, 0x79, 0x4f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x5a, 0x0a, 0x12, 0x63,
+ 0x6f, 0x70, 0x79, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c,
+ 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
+ 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52,
+ 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x10, 0x63, 0x6f, 0x70, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72,
+ 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x66, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x12, 0x46, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
+ 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,
+ 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52,
+ 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x69, 0x65,
+ 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x71, 0x75, 0x69, 0x65, 0x74, 0x22, 0x43,
+ 0x0a, 0x10, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
+ 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f,
+ 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x49, 0x64, 0x22, 0xac, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x73, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74,
+ 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+ 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63,
+ 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65,
+ 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,
+ 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x44,
+ 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x23, 0x0a,
+ 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79,
+ 0x65, 0x72, 0x22, 0x9e, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6d,
+ 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x18, 0x64, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x64, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+ 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f,
+ 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x49, 0x64, 0x22, 0x5a, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x43, 0x0a, 0x07, 0x64, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x70,
+ 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64,
+ 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22,
+ 0xaf, 0x02, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x49,
+ 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61,
+ 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e,
+ 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x64,
+ 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+ 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x32,
0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65,
- 0x74, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65,
+ 0x74, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65,
0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x77, 0x6e,
- 0x65, 0x72, 0x12, 0x5f, 0x0a, 0x10, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x5f,
- 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x73,
- 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
- 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65,
- 0x74, 0x65, 0x64, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f,
- 0x61, 0x64, 0x52, 0x0f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c,
- 0x6f, 0x61, 0x64, 0x22, 0xe9, 0x02, 0x0a, 0x1d, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65,
- 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4f,
- 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a,
- 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
- 0x2c, 0x0a, 0x12, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x65, 0x6e,
- 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x62, 0x75, 0x63,
- 0x6b, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a,
- 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61,
- 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a,
- 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64,
- 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43,
- 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x73, 0x65, 0x5f, 0x6b, 0x6d,
- 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73,
- 0x73, 0x65, 0x4b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65,
- 0x72, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70,
- 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x53, 0x69, 0x64, 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e,
- 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0a,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22,
- 0xda, 0x01, 0x0a, 0x19, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61,
- 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a,
- 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06,
- 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75,
- 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74,
- 0x65, 0x64, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42,
- 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x65, 0x72, 0x12,
- 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x22, 0x45, 0x0a, 0x1a,
- 0x41, 0x62, 0x6f, 0x72, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70,
- 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72,
- 0x67, 0x65, 0x64, 0x22, 0xcb, 0x02, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74,
- 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x49, 0x6e, 0x70, 0x75,
- 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65,
- 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69,
- 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c,
- 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69,
- 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65,
- 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x65,
- 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f,
- 0x77, 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x78, 0x70, 0x65,
- 0x63, 0x74, 0x65, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12,
- 0x1d, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x06, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x1f,
- 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x07, 0x20,
- 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12,
- 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x28, 0x0a, 0x10, 0x75, 0x70, 0x6c, 0x6f, 0x61,
- 0x64, 0x5f, 0x69, 0x64, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x0e, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x4d, 0x61, 0x72, 0x6b, 0x65,
- 0x72, 0x22, 0x3e, 0x0a, 0x09, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x21,
- 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d,
- 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
- 0x64, 0x22, 0x81, 0x02, 0x0a, 0x0f, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55,
- 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74,
- 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61,
- 0x74, 0x65, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x6f, 0x72,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
- 0x2e, 0x73, 0x33, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x09, 0x69,
- 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
- 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x05, 0x6f, 0x77,
- 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x70, 0x65, 0x63,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
- 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x77,
- 0x6e, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63,
- 0x6c, 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72,
- 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f,
- 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x6c,
- 0x6f, 0x61, 0x64, 0x49, 0x64, 0x22, 0xe7, 0x03, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75,
- 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x4f, 0x75,
- 0x74, 0x70, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x0f,
- 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18,
- 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x65,
- 0x66, 0x69, 0x78, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74,
- 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69,
- 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x5f,
- 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f,
- 0x64, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x74,
- 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b,
- 0x69, 0x73, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6b,
- 0x65, 0x79, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x09, 0x6b, 0x65, 0x79, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61,
- 0x78, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52,
- 0x0a, 0x6d, 0x61, 0x78, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e,
- 0x65, 0x78, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x08,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x72,
- 0x6b, 0x65, 0x72, 0x12, 0x31, 0x0a, 0x15, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f,
- 0x61, 0x64, 0x5f, 0x69, 0x64, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x12, 0x6e, 0x65, 0x78, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64,
- 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
- 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x28,
- 0x0a, 0x10, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x5f, 0x6d, 0x61, 0x72, 0x6b,
- 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64,
- 0x49, 0x64, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x07, 0x75, 0x70, 0x6c, 0x6f,
- 0x61, 0x64, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x70, 0x65, 0x63,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
- 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74,
- 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x07, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x22,
- 0xc5, 0x02, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x56, 0x65,
- 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73,
- 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75,
- 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b,
- 0x65, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18,
- 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72,
- 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70,
- 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e,
- 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65,
- 0x64, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x05,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x75,
- 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x6b, 0x65, 0x79,
- 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6b,
- 0x65, 0x79, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f,
- 0x6b, 0x65, 0x79, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x4b,
- 0x65, 0x79, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x08, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x2a, 0x0a, 0x11, 0x76,
- 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72,
- 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49,
- 0x64, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0xbf, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65,
- 0x74, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1b, 0x0a,
- 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08,
- 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
- 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d,
- 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65,
- 0x64, 0x12, 0x37, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x21, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,
- 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4f, 0x77,
- 0x6e, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65,
- 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
- 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x88, 0x02, 0x0a, 0x0d, 0x4f, 0x62,
- 0x6a, 0x65, 0x63, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x65,
- 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12,
- 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03,
- 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23,
- 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66,
- 0x69, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
- 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e,
- 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04,
- 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65,
- 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73,
- 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
- 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
- 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69,
- 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xb5, 0x04, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a,
- 0x65, 0x63, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75,
- 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66,
- 0x69, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d,
- 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x12, 0x54, 0x0a, 0x0e, 0x64, 0x65,
- 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03,
- 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+ 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x06, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61,
+ 0x78, 0x4b, 0x65, 0x79, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78,
+ 0x4b, 0x65, 0x79, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x08,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x23, 0x0a, 0x0d,
+ 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x09, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x65,
+ 0x72, 0x22, 0xe2, 0x02, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
+ 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09,
+ 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73,
+ 0x12, 0x3e, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e,
- 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72,
- 0x79, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x73,
+ 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73,
0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20,
0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x23,
0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18,
0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x54,
0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61,
0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x54, 0x72, 0x75,
- 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x61,
- 0x72, 0x6b, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4d,
- 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x6b, 0x65, 0x79,
- 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x4b, 0x65, 0x79, 0x73,
- 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
- 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6b, 0x65, 0x79,
- 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e,
- 0x65, 0x78, 0x74, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x33, 0x0a, 0x16,
- 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x5f,
- 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x6e, 0x65,
- 0x78, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x4d, 0x61, 0x72, 0x6b, 0x65,
- 0x72, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x0b, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x65, 0x72,
- 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x0c,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x4d,
- 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
- 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70,
+ 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72,
+ 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x19,
+ 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05,
+ 0x52, 0x07, 0x6d, 0x61, 0x78, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
+ 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a,
+ 0x0b, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x16,
+ 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+ 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x3a, 0x0a, 0x05, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12,
+ 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61,
+ 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
+ 0x69, 0x64, 0x22, 0xc5, 0x01, 0x0a, 0x06, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a,
+ 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61,
+ 0x67, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+ 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x69,
+ 0x66, 0x69, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74,
+ 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65,
+ 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
- 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69,
- 0x6f, 0x6e, 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe7, 0x04, 0x0a,
- 0x0f, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74,
+ 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65,
+ 0x72, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52,
+ 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
+ 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74,
+ 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x81, 0x01, 0x0a, 0x17, 0x47,
+ 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x63,
+ 0x6c, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f,
+ 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72,
+ 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a,
+ 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
+ 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x9b,
+ 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6e, 0x6e,
+ 0x65, 0x64, 0x41, 0x63, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63,
+ 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x09, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x37, 0x0a, 0x05, 0x6f, 0x77,
+ 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x70, 0x65, 0x63,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x77,
+ 0x6e, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63,
+ 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x22, 0x93, 0x01, 0x0a,
+ 0x17, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x65, 0x64,
+ 0x41, 0x63, 0x6c, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72,
+ 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74,
+ 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65,
+ 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12,
+ 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
+ 0x79, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+ 0x61, 0x63, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
+ 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+ 0x49, 0x64, 0x22, 0x43, 0x0a, 0x18, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43,
+ 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x27,
+ 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x22, 0x2a, 0x0a, 0x14, 0x47, 0x6c, 0x61, 0x63, 0x69,
+ 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12,
+ 0x12, 0x0a, 0x04, 0x74, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74,
+ 0x69, 0x65, 0x72, 0x22, 0x49, 0x0a, 0x0e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4c, 0x6f, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f,
+ 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x63, 0x6b,
+ 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0xc6,
+ 0x02, 0x0a, 0x08, 0x43, 0x53, 0x56, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x41, 0x0a, 0x1d, 0x61,
+ 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x63, 0x6f,
+ 0x72, 0x64, 0x5f, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x1a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x64, 0x52,
+ 0x65, 0x63, 0x6f, 0x72, 0x64, 0x44, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x1a,
+ 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x69,
+ 0x65, 0x6c, 0x64, 0x5f, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x0e, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x6c, 0x69, 0x6d, 0x69,
+ 0x74, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64,
+ 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x66,
+ 0x69, 0x6c, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x0a,
+ 0x0f, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x43, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x16, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x5f,
+ 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x45, 0x73, 0x63,
+ 0x61, 0x70, 0x65, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x12, 0x29, 0x0a, 0x10,
+ 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72,
+ 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x44, 0x65,
+ 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x22, 0x8b, 0x01, 0x0a, 0x12, 0x49, 0x6e, 0x70, 0x75,
+ 0x74, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x36,
+ 0x0a, 0x03, 0x63, 0x73, 0x76, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x70,
+ 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x53, 0x56, 0x49, 0x6e, 0x70, 0x75,
+ 0x74, 0x52, 0x03, 0x63, 0x73, 0x76, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65,
+ 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70,
+ 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x22, 0xe1, 0x01, 0x0a, 0x09, 0x43, 0x53, 0x56, 0x4f, 0x75, 0x74,
+ 0x70, 0x75, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x64, 0x65, 0x6c,
+ 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x66, 0x69,
+ 0x65, 0x6c, 0x64, 0x44, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f,
+ 0x71, 0x75, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x43, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x16, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x5f, 0x65,
+ 0x73, 0x63, 0x61, 0x70, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x45, 0x73, 0x63, 0x61,
+ 0x70, 0x65, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x71,
+ 0x75, 0x6f, 0x74, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x0b, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x29,
+ 0x0a, 0x10, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74,
+ 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64,
+ 0x44, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x22, 0x62, 0x0a, 0x13, 0x4f, 0x75, 0x74,
+ 0x70, 0x75, 0x74, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x12, 0x37, 0x0a, 0x03, 0x63, 0x73, 0x76, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e,
+ 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e,
+ 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x53, 0x56, 0x4f, 0x75,
+ 0x74, 0x70, 0x75, 0x74, 0x52, 0x03, 0x63, 0x73, 0x76, 0x12, 0x12, 0x0a, 0x04, 0x6a, 0x73, 0x6f,
+ 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6a, 0x73, 0x6f, 0x6e, 0x22, 0xa0, 0x02,
+ 0x0a, 0x10, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+ 0x72, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69,
+ 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
+ 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x70,
+ 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x5f, 0x0a, 0x13, 0x69,
+ 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x65, 0x72, 0x69, 0x61,
+ 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x53,
+ 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x14,
+ 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x70, 0x65,
+ 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x65,
+ 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x6f, 0x75, 0x74,
+ 0x70, 0x75, 0x74, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x22, 0x86, 0x03, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x05, 0x52, 0x04, 0x64, 0x61, 0x79, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72,
+ 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65,
+ 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x66, 0x0a, 0x16, 0x67, 0x6c, 0x61,
+ 0x63, 0x69, 0x65, 0x72, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
+ 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x73, 0x70, 0x65, 0x63,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x47, 0x6c, 0x61, 0x63, 0x69, 0x65, 0x72, 0x4a, 0x6f,
+ 0x62, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x14, 0x67, 0x6c, 0x61,
+ 0x63, 0x69, 0x65, 0x72, 0x4a, 0x6f, 0x62, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
+ 0x73, 0x12, 0x53, 0x0a, 0x0f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x70, 0x65,
+ 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4c, 0x6f,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x4c, 0x6f,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74,
+ 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,
+ 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x53,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52,
+ 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
+ 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x04, 0x74, 0x69, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xd1, 0x01, 0x0a, 0x12, 0x52, 0x65,
+ 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74,
0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12,
0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x65,
- 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0c, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x32,
- 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65,
- 0x74, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65,
- 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x77, 0x6e,
- 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x66, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x66, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x2a, 0x0a,
- 0x11, 0x69, 0x66, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e,
- 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x69, 0x66, 0x4d, 0x6f, 0x64, 0x69,
- 0x66, 0x69, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x66, 0x5f,
- 0x6e, 0x6f, 0x6e, 0x65, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x0b, 0x69, 0x66, 0x4e, 0x6f, 0x6e, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x2e, 0x0a,
- 0x13, 0x69, 0x66, 0x5f, 0x75, 0x6e, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x73,
- 0x69, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x69, 0x66, 0x55, 0x6e,
- 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x0a,
- 0x0b, 0x70, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01,
- 0x28, 0x05, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x23,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x53, 0x0a, 0x0f, 0x72, 0x65, 0x73,
+ 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+ 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e,
+ 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0e,
+ 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d,
+ 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x6e, 0x0a,
+ 0x13, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75,
+ 0x74, 0x70, 0x75, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f,
+ 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x12, 0x2e, 0x0a,
+ 0x13, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f,
+ 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x65, 0x73, 0x74,
+ 0x6f, 0x72, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0xf5, 0x0b,
+ 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72,
+ 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a,
+ 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62,
+ 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63,
+ 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x75, 0x63, 0x6b, 0x65,
+ 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x10, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x45, 0x6e,
+ 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x63,
+ 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61,
+ 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x44, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18,
+ 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x45, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67,
+ 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70,
+ 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x54, 0x79, 0x70, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64,
+ 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x0b, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x75, 0x63,
+ 0x6b, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69,
+ 0x72, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72,
+ 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x66, 0x75, 0x6c, 0x6c,
+ 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10,
+ 0x67, 0x72, 0x61, 0x6e, 0x74, 0x46, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
+ 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x0e,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x61, 0x64, 0x12,
+ 0x24, 0x0a, 0x0e, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x61, 0x63,
+ 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65,
+ 0x61, 0x64, 0x41, 0x63, 0x70, 0x12, 0x26, 0x0a, 0x0f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x5f, 0x77,
+ 0x72, 0x69, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x70, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d,
+ 0x67, 0x72, 0x61, 0x6e, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x41, 0x63, 0x70, 0x12, 0x61, 0x0a,
+ 0x09, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x44, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,
+ 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c,
+ 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74,
+ 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61,
+ 0x12, 0x40, 0x0a, 0x1d, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f,
+ 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c,
+ 0x6f, 0x63, 0x6b, 0x4c, 0x65, 0x67, 0x61, 0x6c, 0x48, 0x6f, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74,
+ 0x75, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6c, 0x6f, 0x63,
+ 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x40, 0x0a, 0x1d,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x65, 0x74, 0x61,
+ 0x69, 0x6e, 0x5f, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x14, 0x20,
+ 0x01, 0x28, 0x03, 0x52, 0x19, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x6b, 0x52,
+ 0x65, 0x74, 0x61, 0x69, 0x6e, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x23,
0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18,
- 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61,
+ 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61,
0x79, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f,
- 0x6d, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x0c, 0x20,
+ 0x6d, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x16, 0x20,
0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x73, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72,
0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x73, 0x65,
- 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x0d, 0x20,
+ 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x17, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x73, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72,
0x4b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x14, 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f,
- 0x6d, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x64, 0x35, 0x18, 0x0e, 0x20, 0x01, 0x28,
+ 0x6d, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x64, 0x35, 0x18, 0x18, 0x20, 0x01, 0x28,
0x09, 0x52, 0x11, 0x73, 0x73, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4b, 0x65,
- 0x79, 0x4d, 0x64, 0x35, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f,
- 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
- 0x6e, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x64, 0x65, 0x74, 0x61,
- 0x69, 0x6c, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x44,
- 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x10, 0x48, 0x65, 0x61, 0x64, 0x4f,
- 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x69, 0x0a, 0x0f, 0x72,
- 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01,
- 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73,
- 0x33, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70,
- 0x75, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
- 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65,
- 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x41, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
- 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
+ 0x79, 0x4d, 0x64, 0x35, 0x12, 0x3b, 0x0a, 0x1a, 0x73, 0x73, 0x65, 0x5f, 0x6b, 0x6d, 0x73, 0x5f,
+ 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+ 0x78, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x73, 0x73, 0x65, 0x4b, 0x6d, 0x73,
+ 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+ 0x74, 0x12, 0x23, 0x0a, 0x0e, 0x73, 0x73, 0x65, 0x5f, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79,
+ 0x5f, 0x69, 0x64, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x73, 0x65, 0x4b, 0x6d,
+ 0x73, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x69,
+ 0x64, 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d,
+ 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x1c, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73,
+ 0x73, 0x12, 0x5d, 0x0a, 0x07, 0x74, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x1d, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
+ 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e,
+ 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55,
+ 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x69,
+ 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x74, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67,
+ 0x12, 0x3a, 0x0a, 0x19, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x64, 0x69,
+ 0x72, 0x65, 0x63, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x1e, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x17, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x52, 0x65, 0x64, 0x69,
+ 0x72, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3b, 0x0a, 0x0d,
+ 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7c, 0x0a, 0x12, 0x49, 0x73, 0x4f,
- 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12,
- 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16,
- 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
- 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73,
- 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65,
- 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x34, 0x0a, 0x13, 0x49, 0x73, 0x4f, 0x62, 0x6a,
- 0x65, 0x63, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1d,
- 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x08, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x22, 0x95, 0x01,
- 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, 0x55, 0x52, 0x4c, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d,
- 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a,
- 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62,
- 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f,
- 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12,
- 0x24, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x5f, 0x73, 0x65,
- 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64,
- 0x49, 0x6e, 0x53, 0x65, 0x63, 0x22, 0x2e, 0x0a, 0x0d, 0x53, 0x69, 0x67, 0x6e, 0x55, 0x52, 0x4c,
- 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64,
- 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e,
- 0x65, 0x64, 0x55, 0x72, 0x6c, 0x22, 0xbc, 0x01, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
- 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d,
- 0x69, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65,
- 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f,
- 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x22, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67,
- 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x6e, 0x5f,
- 0x62, 0x69, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x03, 0x52, 0x1c, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x4c,
- 0x69, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63,
- 0x12, 0x32, 0x0a, 0x15, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x6f,
- 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x13, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
- 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xcf, 0x04, 0x0a, 0x11, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x4f,
- 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3a, 0x0a, 0x0c, 0x54, 0x61, 0x67,
+ 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfd, 0x03, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4f,
+ 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a,
+ 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
+ 0x1d, 0x0a, 0x0a, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x03, 0x52, 0x09, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x22,
+ 0x0a, 0x0d, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18,
+ 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x52, 0x75, 0x6c, 0x65,
+ 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79,
+ 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10,
+ 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64,
+ 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x72,
+ 0x67, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x73, 0x65,
+ 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69,
+ 0x74, 0x68, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x73, 0x65, 0x43, 0x75,
+ 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12,
+ 0x2f, 0x0a, 0x14, 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f,
+ 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x64, 0x35, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x73,
+ 0x73, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x4d, 0x64, 0x35,
+ 0x12, 0x3b, 0x0a, 0x1a, 0x73, 0x73, 0x65, 0x5f, 0x6b, 0x6d, 0x73, 0x5f, 0x65, 0x6e, 0x63, 0x72,
+ 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x09,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x73, 0x73, 0x65, 0x4b, 0x6d, 0x73, 0x45, 0x6e, 0x63, 0x72,
+ 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x23, 0x0a,
+ 0x0e, 0x73, 0x73, 0x65, 0x5f, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18,
+ 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x73, 0x65, 0x4b, 0x6d, 0x73, 0x4b, 0x65, 0x79,
+ 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x64,
+ 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x69, 0x64, 0x65, 0x45, 0x6e,
+ 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f,
+ 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x6c,
+ 0x6f, 0x61, 0x64, 0x49, 0x64, 0x22, 0xde, 0x03, 0x0a, 0x0f, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64,
+ 0x50, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f,
+ 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73,
+ 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b,
+ 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
+ 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
+ 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c,
+ 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1f, 0x0a,
+ 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x64, 0x35, 0x18, 0x06, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4d, 0x64, 0x35, 0x12, 0x32,
+ 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65,
+ 0x74, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65,
+ 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x77, 0x6e,
+ 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65,
+ 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d,
+ 0x62, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70,
+ 0x61, 0x79, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x73, 0x65, 0x5f,
+ 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74,
+ 0x68, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x73, 0x65, 0x43, 0x75, 0x73,
+ 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x28,
+ 0x0a, 0x10, 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x6b,
+ 0x65, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x73, 0x65, 0x43, 0x75, 0x73,
+ 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x14, 0x73, 0x73, 0x65, 0x5f,
+ 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x64, 0x35,
+ 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x73, 0x73, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f,
+ 0x6d, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x4d, 0x64, 0x35, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c,
+ 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70,
+ 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x22, 0xbf, 0x02, 0x0a, 0x10, 0x55, 0x70, 0x6c, 0x6f, 0x61,
+ 0x64, 0x50, 0x61, 0x72, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x62,
+ 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4b,
+ 0x65, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61,
+ 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x27, 0x0a,
+ 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43,
+ 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75,
+ 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d,
+ 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x73, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f,
+ 0x6d, 0x65, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x2f, 0x0a, 0x14,
+ 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79,
+ 0x5f, 0x6d, 0x64, 0x35, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x73, 0x73, 0x65, 0x43,
+ 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x4d, 0x64, 0x35, 0x12, 0x23, 0x0a,
+ 0x0e, 0x73, 0x73, 0x65, 0x5f, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18,
+ 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x73, 0x65, 0x4b, 0x6d, 0x73, 0x4b, 0x65, 0x79,
+ 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x64,
+ 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x69, 0x64, 0x65, 0x45, 0x6e,
+ 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa9, 0x02, 0x0a, 0x13, 0x55, 0x70, 0x6c,
+ 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x70, 0x79, 0x49, 0x6e, 0x70, 0x75, 0x74,
+ 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+ 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x0b, 0x63, 0x6f, 0x70,
+ 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26,
+ 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65,
+ 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f, 0x70, 0x79,
+ 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65,
+ 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d,
+ 0x62, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64,
+ 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64,
+ 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50,
+ 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x5f,
+ 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x61, 0x72, 0x74,
+ 0x53, 0x69, 0x7a, 0x65, 0x22, 0x49, 0x0a, 0x0e, 0x43, 0x6f, 0x70, 0x79, 0x50, 0x61, 0x72, 0x74,
+ 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x61,
+ 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x22,
+ 0xba, 0x03, 0x0a, 0x14, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x43, 0x6f,
+ 0x70, 0x79, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x62, 0x75, 0x63, 0x6b,
+ 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x45,
+ 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x54, 0x0a, 0x10, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x70,
+ 0x61, 0x72, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x2a, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,
+ 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f,
+ 0x70, 0x79, 0x50, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x0e, 0x63, 0x6f,
+ 0x70, 0x79, 0x50, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x16,
+ 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x63, 0x6f,
+ 0x70, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49,
+ 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61,
+ 0x72, 0x67, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x73,
+ 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72,
+ 0x69, 0x74, 0x68, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x73, 0x65, 0x43,
+ 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d,
+ 0x12, 0x2f, 0x0a, 0x14, 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72,
+ 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x64, 0x35, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11,
+ 0x73, 0x73, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x4d, 0x64,
+ 0x35, 0x12, 0x23, 0x0a, 0x0e, 0x73, 0x73, 0x65, 0x5f, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79,
+ 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x73, 0x65, 0x4b, 0x6d,
+ 0x73, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x69,
+ 0x64, 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x44, 0x0a, 0x0d,
+ 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x12, 0x12, 0x0a,
+ 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61,
+ 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62,
+ 0x65, 0x72, 0x22, 0x5b, 0x0a, 0x18, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4d,
+ 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x3f,
+ 0x0a, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e,
+ 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e,
+ 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c,
+ 0x65, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x52, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 0x22,
+ 0xbe, 0x02, 0x0a, 0x1c, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74,
+ 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74,
+ 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+ 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c,
+ 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70,
+ 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x5f, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x15, 0x65,
+ 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f,
+ 0x77, 0x6e, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x78, 0x70, 0x65,
+ 0x63, 0x74, 0x65, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12,
+ 0x5f, 0x0a, 0x10, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x5f, 0x75, 0x70, 0x6c,
+ 0x6f, 0x61, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x73, 0x70, 0x65, 0x63,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64,
+ 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52,
+ 0x0f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64,
+ 0x22, 0xe9, 0x02, 0x0a, 0x1d, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c,
+ 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x75, 0x74, 0x70,
+ 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
+ 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x12,
+ 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c,
+ 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
+ 0x4b, 0x65, 0x79, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74,
+ 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x1e,
+ 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a,
+ 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x18, 0x07, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72,
+ 0x67, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x73, 0x65, 0x5f, 0x6b, 0x6d, 0x73, 0x5f, 0x6b,
+ 0x65, 0x79, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x73, 0x65, 0x4b,
+ 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53,
+ 0x69, 0x64, 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a,
+ 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xda, 0x01, 0x0a,
+ 0x19, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55,
+ 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74,
0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63,
0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65,
0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
- 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28,
- 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74,
- 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74,
- 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x03, 0x61, 0x63, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x63,
- 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61,
- 0x63, 0x68, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6f,
- 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
- 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
- 0x44, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x63,
- 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18,
- 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x45, 0x6e,
- 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
- 0x74, 0x5f, 0x6d, 0x64, 0x35, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e,
- 0x74, 0x65, 0x6e, 0x74, 0x4d, 0x64, 0x35, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72,
- 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65,
- 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61,
- 0x73, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,
- 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x5f, 0x73, 0x69, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e,
- 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x69,
- 0x64, 0x65, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04,
- 0x6d, 0x65, 0x74, 0x61, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61,
- 0x12, 0x4b, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37,
- 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65,
- 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x41, 0x70, 0x70, 0x65,
- 0x6e, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x54, 0x61,
- 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x1a, 0x37, 0x0a,
- 0x09, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
- 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3d, 0x0a, 0x12, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64,
- 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x27, 0x0a, 0x0f,
- 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x73,
- 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9a, 0x02, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61,
- 0x72, 0x74, 0x73, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72,
+ 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f,
+ 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x13, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x75, 0x63, 0x6b,
+ 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
+ 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09,
+ 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x22, 0x45, 0x0a, 0x1a, 0x41, 0x62, 0x6f,
+ 0x72, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61,
+ 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x64,
+ 0x22, 0xcb, 0x02, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61,
+ 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d,
+ 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a,
+ 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62,
+ 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74,
+ 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69,
+ 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x5f,
+ 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f,
+ 0x64, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65,
+ 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x77, 0x6e, 0x65,
+ 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65,
+ 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a,
+ 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x6d,
+ 0x61, 0x78, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03,
+ 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06,
+ 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72,
+ 0x65, 0x66, 0x69, 0x78, 0x12, 0x28, 0x0a, 0x10, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69,
+ 0x64, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e,
+ 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0x3e,
+ 0x0a, 0x09, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x64,
+ 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e,
+ 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x81,
+ 0x02, 0x0a, 0x0f, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f,
+ 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64,
+ 0x12, 0x43, 0x0a, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33,
+ 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x09, 0x69, 0x6e, 0x69, 0x74,
+ 0x69, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72,
+ 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
+ 0x2e, 0x73, 0x33, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72,
+ 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73,
+ 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65,
+ 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f,
+ 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64,
+ 0x49, 0x64, 0x22, 0xe7, 0x03, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69,
+ 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75,
+ 0x74, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6d,
+ 0x6d, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03,
+ 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78,
+ 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72,
+ 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70,
+ 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e,
+ 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x74, 0x72, 0x75, 0x6e,
+ 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x54,
+ 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f,
+ 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6b, 0x65,
+ 0x79, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x75,
+ 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x61,
+ 0x78, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74,
+ 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72,
+ 0x12, 0x31, 0x0a, 0x15, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f,
+ 0x69, 0x64, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x12, 0x6e, 0x65, 0x78, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x4d, 0x61, 0x72,
+ 0x6b, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x0a, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x28, 0x0a, 0x10, 0x75,
+ 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18,
+ 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x4d,
+ 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x07, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73,
+ 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
+ 0x2e, 0x73, 0x33, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c,
+ 0x6f, 0x61, 0x64, 0x52, 0x07, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x22, 0xc5, 0x02, 0x0a,
+ 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x73, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72,
0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74,
0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65,
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12,
- 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
- 0x79, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x75,
- 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x13, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
- 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x72,
- 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72,
- 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65,
- 0x72, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10,
- 0x70, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72,
- 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x65,
- 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x50, 0x61, 0x79, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f,
- 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64,
- 0x49, 0x64, 0x22, 0x74, 0x0a, 0x04, 0x50, 0x61, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74,
- 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x23,
- 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66,
- 0x69, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62,
- 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x4e, 0x75,
- 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01,
- 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x87, 0x02, 0x0a, 0x0f, 0x4c, 0x69, 0x73,
- 0x74, 0x50, 0x61, 0x72, 0x74, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06,
- 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75,
- 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64,
- 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61,
- 0x64, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x74,
- 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x04,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x72, 0x74, 0x4e, 0x75,
- 0x6d, 0x62, 0x65, 0x72, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61,
- 0x78, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d,
- 0x61, 0x78, 0x50, 0x61, 0x72, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x74, 0x72,
- 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69,
- 0x73, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x70, 0x61,
- 0x72, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x70, 0x65, 0x63,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
- 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x52, 0x05, 0x70, 0x61, 0x72,
- 0x74, 0x73, 0x32, 0xcd, 0x18, 0x0a, 0x14, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f,
- 0x72, 0x61, 0x67, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x68, 0x0a, 0x09, 0x50,
- 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2a, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
- 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49,
- 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73,
- 0x33, 0x2e, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75,
- 0x74, 0x22, 0x00, 0x28, 0x01, 0x12, 0x68, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65,
- 0x63, 0x74, 0x12, 0x2a, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
- 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e,
- 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2b,
- 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65,
- 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x47, 0x65, 0x74, 0x4f,
- 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12,
- 0x6f, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12,
+ 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a,
+ 0x0d, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x79,
+ 0x70, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62,
+ 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x13, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65,
+ 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x61,
+ 0x72, 0x6b, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4d,
+ 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x6b, 0x65, 0x79,
+ 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x4b, 0x65, 0x79, 0x73,
+ 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x65, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x09, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x4d, 0x61,
+ 0x72, 0x6b, 0x65, 0x72, 0x22, 0xbf, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d,
+ 0x61, 0x72, 0x6b, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73,
+ 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69,
+ 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x61, 0x73,
+ 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
+ 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x37,
+ 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e,
+ 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e,
+ 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72,
+ 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72,
+ 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x88, 0x02, 0x0a, 0x0d, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x1b, 0x0a, 0x09,
+ 0x69, 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52,
+ 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x6c,
+ 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64,
+ 0x12, 0x37, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x21, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74,
+ 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4f, 0x77, 0x6e,
+ 0x65, 0x72, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a,
+ 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a,
+ 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x07,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61,
+ 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
+ 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49,
+ 0x64, 0x22, 0xb5, 0x04, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x27,
+ 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65,
+ 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50,
+ 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x12, 0x54, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x2d, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74,
0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x44, 0x65, 0x6c,
- 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2e,
- 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65,
- 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65,
- 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00,
- 0x12, 0x69, 0x0a, 0x0a, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2b,
- 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65,
- 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f, 0x70, 0x79,
- 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2c, 0x2e, 0x73, 0x70,
+ 0x65, 0x74, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d,
+ 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x0a,
+ 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x65,
+ 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65,
+ 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64,
+ 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61,
+ 0x74, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65,
+ 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4d, 0x61, 0x72, 0x6b,
+ 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x07,
+ 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a,
+ 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
+ 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x61,
+ 0x72, 0x6b, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74,
+ 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x33, 0x0a, 0x16, 0x6e, 0x65, 0x78,
+ 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x5f, 0x6d, 0x61, 0x72,
+ 0x6b, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x6e, 0x65, 0x78, 0x74, 0x56,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x16,
+ 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+ 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x5f, 0x69, 0x64, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x0f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x4d, 0x61, 0x72, 0x6b,
+ 0x65, 0x72, 0x12, 0x45, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d,
+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73,
+ 0x33, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52,
+ 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe7, 0x04, 0x0a, 0x0f, 0x48, 0x65,
+ 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a,
+ 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06,
+ 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75,
+ 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73,
+ 0x75, 0x6d, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63,
+ 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x65,
+ 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6f,
+ 0x77, 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x78, 0x70, 0x65,
+ 0x63, 0x74, 0x65, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12,
+ 0x19, 0x0a, 0x08, 0x69, 0x66, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x07, 0x69, 0x66, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x66,
+ 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18,
+ 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x69, 0x66, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65,
+ 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x66, 0x5f, 0x6e, 0x6f, 0x6e,
+ 0x65, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69,
+ 0x66, 0x4e, 0x6f, 0x6e, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x66,
+ 0x5f, 0x75, 0x6e, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63,
+ 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x69, 0x66, 0x55, 0x6e, 0x6d, 0x6f, 0x64,
+ 0x69, 0x66, 0x69, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61,
+ 0x72, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52,
+ 0x0a, 0x70, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x72,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x65, 0x72,
+ 0x12, 0x34, 0x0a, 0x16, 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72,
+ 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x14, 0x73, 0x73, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x41, 0x6c, 0x67,
+ 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75,
+ 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x0e, 0x73, 0x73, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4b, 0x65, 0x79,
+ 0x12, 0x2f, 0x0a, 0x14, 0x73, 0x73, 0x65, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72,
+ 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x64, 0x35, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11,
+ 0x73, 0x73, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x4d, 0x64,
+ 0x35, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18,
+ 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64,
+ 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73,
+ 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61,
+ 0x69, 0x6c, 0x73, 0x22, 0xc0, 0x01, 0x0a, 0x10, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x69, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x75,
+ 0x6c, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28,
+ 0x0b, 0x32, 0x40, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,
+ 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x48,
+ 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e,
+ 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e,
+ 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64,
+ 0x61, 0x74, 0x61, 0x1a, 0x41, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x74,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
+ 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7c, 0x0a, 0x12, 0x49, 0x73, 0x4f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a,
+ 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62,
+ 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63,
+ 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+ 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x34, 0x0a, 0x13, 0x49, 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x45, 0x78, 0x69, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66,
+ 0x69, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
+ 0x09, 0x66, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x22, 0x95, 0x01, 0x0a, 0x0c, 0x53,
+ 0x69, 0x67, 0x6e, 0x55, 0x52, 0x4c, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73,
+ 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75,
+ 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b,
+ 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x04,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x24, 0x0a, 0x0e,
+ 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05,
+ 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x53,
+ 0x65, 0x63, 0x22, 0x2e, 0x0a, 0x0d, 0x53, 0x69, 0x67, 0x6e, 0x55, 0x52, 0x4c, 0x4f, 0x75, 0x74,
+ 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x75, 0x72,
+ 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x55,
+ 0x72, 0x6c, 0x22, 0xbc, 0x01, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x61, 0x6e,
+ 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x49,
+ 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e, 0x61,
+ 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4e,
+ 0x61, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x22, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x72,
+ 0x61, 0x74, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x69, 0x6e, 0x5f, 0x62, 0x69, 0x74,
+ 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
+ 0x1c, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69,
+ 0x74, 0x49, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x12, 0x32, 0x0a,
+ 0x15, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x67, 0x61,
+ 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d,
+ 0x65, 0x22, 0xcf, 0x04, 0x0a, 0x11, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x4f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65,
+ 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f,
+ 0x72, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10,
+ 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
+ 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04,
+ 0x62, 0x6f, 0x64, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61,
+ 0x63, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74,
+ 0x72, 0x6f, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, 0x63, 0x68, 0x65,
+ 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x73,
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64,
+ 0x69, 0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6d,
+ 0x64, 0x35, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x4d, 0x64, 0x35, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x18,
+ 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x12, 0x23,
+ 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18,
+ 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c,
+ 0x61, 0x73, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x69,
+ 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x69, 0x64, 0x65, 0x45,
+ 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x74,
+ 0x61, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x12, 0x4b, 0x0a,
+ 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x73, 0x70,
0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
- 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x62, 0x6a,
- 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x0d, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x2e, 0x2e, 0x73,
- 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
- 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
- 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2f, 0x2e, 0x73,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x4f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x54, 0x61, 0x67, 0x73, 0x45,
+ 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61,
+ 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
+ 0x02, 0x38, 0x01, 0x22, 0x3d, 0x0a, 0x12, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x4f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x70, 0x70,
+ 0x65, 0x6e, 0x64, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x03, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x9a, 0x02, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x73,
+ 0x49, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6e,
+ 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65,
+ 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03,
+ 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32,
+ 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65,
+ 0x74, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65,
+ 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x77, 0x6e,
+ 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x73, 0x18,
+ 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, 0x74, 0x73, 0x12,
+ 0x2c, 0x0a, 0x12, 0x70, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6d,
+ 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x70, 0x61, 0x72,
+ 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x23, 0x0a,
+ 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x65, 0x72, 0x18, 0x07,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79,
+ 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18,
+ 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x22,
+ 0x74, 0x0a, 0x04, 0x50, 0x61, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x6c,
+ 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x03, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64,
+ 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65,
+ 0x72, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52,
+ 0x04, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x87, 0x02, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61,
+ 0x72, 0x74, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63,
+ 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65,
+ 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+ 0x6b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64,
+ 0x12, 0x35, 0x0a, 0x17, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x5f, 0x6e, 0x75,
+ 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x14, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65,
+ 0x72, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x70,
+ 0x61, 0x72, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x50,
+ 0x61, 0x72, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63,
+ 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x54, 0x72,
+ 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73,
+ 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
+ 0x2e, 0x73, 0x33, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x52, 0x05, 0x70, 0x61, 0x72, 0x74, 0x73, 0x32,
+ 0xcd, 0x18, 0x0a, 0x14, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67,
+ 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x68, 0x0a, 0x09, 0x50, 0x75, 0x74, 0x4f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2a, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e,
+ 0x73, 0x33, 0x2e, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75,
+ 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,
+ 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x50,
+ 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00,
+ 0x28, 0x01, 0x12, 0x68, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12,
+ 0x2a, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74,
+ 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x47, 0x65, 0x74,
+ 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x70,
+ 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x6f, 0x0a, 0x0c,
+ 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2d, 0x2e, 0x73,
0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
- 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12,
- 0x6c, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x2c,
- 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65,
- 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74,
- 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2d, 0x2e, 0x73,
- 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
- 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62,
- 0x6a, 0x65, 0x63, 0x74, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x69, 0x0a,
- 0x0a, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2b, 0x2e, 0x73, 0x70,
+ 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2e, 0x2e, 0x73, 0x70,
0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
- 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x69, 0x0a,
+ 0x0a, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2b, 0x2e, 0x73, 0x70,
+ 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x62, 0x6a,
0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2c, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
- 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
- 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x0d, 0x49, 0x73, 0x4f, 0x62,
- 0x6a, 0x65, 0x63, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x2e, 0x2e, 0x73, 0x70, 0x65, 0x63,
+ 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65,
+ 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x2e, 0x2e, 0x73, 0x70, 0x65, 0x63,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
- 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x49, 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45,
- 0x78, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2f, 0x2e, 0x73, 0x70, 0x65, 0x63,
+ 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x73, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2f, 0x2e, 0x73, 0x70, 0x65, 0x63,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
- 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x49, 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45,
- 0x78, 0x69, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x10,
- 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67,
- 0x12, 0x31, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,
+ 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x0b,
+ 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x2c, 0x2e, 0x73, 0x70,
+ 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x73, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2d, 0x2e, 0x73, 0x70, 0x65, 0x63,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x0a, 0x48, 0x65,
+ 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2b, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2c, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e,
+ 0x73, 0x33, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74,
+ 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x0d, 0x49, 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x2e, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
+ 0x2e, 0x73, 0x33, 0x2e, 0x49, 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x78, 0x69, 0x73,
+ 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2f, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
+ 0x2e, 0x73, 0x33, 0x2e, 0x49, 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x78, 0x69, 0x73,
+ 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x10, 0x50, 0x75, 0x74,
+ 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x2e,
+ 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e,
+ 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x50, 0x75, 0x74, 0x4f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74,
+ 0x1a, 0x32, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,
0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x50, 0x75,
- 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x49, 0x6e,
- 0x70, 0x75, 0x74, 0x1a, 0x32, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33,
- 0x2e, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e,
- 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x13, 0x44, 0x65,
- 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e,
- 0x67, 0x12, 0x34, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,
- 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69,
- 0x6e, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x35, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
- 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63,
- 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00,
- 0x12, 0x7b, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67,
- 0x67, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x4f, 0x75,
+ 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x12, 0x34,
+ 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65,
+ 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65,
+ 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x49,
+ 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x35, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73,
+ 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61,
+ 0x67, 0x67, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x7b, 0x0a,
+ 0x10, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e,
+ 0x67, 0x12, 0x31, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,
+ 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x47,
+ 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x49,
+ 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x32, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73,
0x33, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61, 0x67, 0x67, 0x69,
- 0x6e, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x32, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
- 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x61,
- 0x67, 0x67, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x81, 0x01,
- 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x65,
- 0x64, 0x41, 0x63, 0x6c, 0x12, 0x33, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x81, 0x01, 0x0a, 0x12, 0x47,
+ 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x63,
+ 0x6c, 0x12, 0x33, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,
+ 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x47,
+ 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x63,
+ 0x6c, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x34, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
+ 0x2e, 0x73, 0x33, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6e,
+ 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x81,
+ 0x01, 0x0a, 0x12, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6e, 0x6e,
+ 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x33, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e,
+ 0x73, 0x33, 0x2e, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6e, 0x6e,
+ 0x65, 0x64, 0x41, 0x63, 0x6c, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x34, 0x2e, 0x73, 0x70, 0x65,
+ 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74,
+ 0x22, 0x00, 0x12, 0x8a, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c,
+ 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x36, 0x2e, 0x73,
+ 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49,
+ 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x37, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73,
- 0x33, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x65,
- 0x64, 0x41, 0x63, 0x6c, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x34, 0x2e, 0x73, 0x70, 0x65, 0x63,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
- 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
- 0x43, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22,
- 0x00, 0x12, 0x81, 0x01, 0x0a, 0x12, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43,
- 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x12, 0x33, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
- 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x50, 0x75, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43,
- 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x34, 0x2e,
+ 0x33, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72,
+ 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12,
+ 0x6b, 0x0a, 0x0a, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x12, 0x2b, 0x2e,
0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e,
- 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x50, 0x75, 0x74, 0x4f, 0x62,
- 0x6a, 0x65, 0x63, 0x74, 0x43, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x41, 0x63, 0x6c, 0x4f, 0x75, 0x74,
- 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x8a, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61,
+ 0x64, 0x50, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2c, 0x2e, 0x73, 0x70, 0x65,
+ 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61,
+ 0x72, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x28, 0x01, 0x12, 0x75, 0x0a, 0x0e,
+ 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x2f,
+ 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65,
+ 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x55, 0x70, 0x6c, 0x6f,
+ 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x70, 0x79, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a,
+ 0x30, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74,
+ 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x55, 0x70, 0x6c,
+ 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x75, 0x74, 0x70, 0x75,
+ 0x74, 0x22, 0x00, 0x12, 0x90, 0x01, 0x0a, 0x17, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65,
+ 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12,
+ 0x38, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74,
+ 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f, 0x6d,
+ 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70,
+ 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x39, 0x2e, 0x73, 0x70, 0x65, 0x63,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4d,
+ 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x75,
+ 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x87, 0x01, 0x0a, 0x14, 0x41, 0x62, 0x6f, 0x72, 0x74,
0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12,
- 0x36, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74,
- 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x72, 0x65,
- 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f,
- 0x61, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x37, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70,
+ 0x35, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74,
+ 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x41, 0x62, 0x6f,
+ 0x72, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61,
+ 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x36, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
+ 0x2e, 0x73, 0x33, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61,
+ 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00,
+ 0x12, 0x87, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61,
+ 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x35, 0x2e, 0x73, 0x70, 0x65, 0x63,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69,
+ 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x49, 0x6e, 0x70, 0x75, 0x74,
+ 0x1a, 0x36, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,
+ 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4c, 0x69,
+ 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61,
+ 0x64, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x09, 0x4c, 0x69,
+ 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x73, 0x12, 0x2a, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
- 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69,
- 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74,
- 0x22, 0x00, 0x12, 0x6b, 0x0a, 0x0a, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74,
- 0x12, 0x2b, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,
- 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x55, 0x70,
- 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2c, 0x2e,
- 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e,
- 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61,
- 0x64, 0x50, 0x61, 0x72, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x28, 0x01, 0x12,
- 0x75, 0x0a, 0x0e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x70,
- 0x79, 0x12, 0x2f, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,
- 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x55,
- 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x70, 0x79, 0x49, 0x6e, 0x70,
- 0x75, 0x74, 0x1a, 0x30, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
- 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e,
- 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x75,
- 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x90, 0x01, 0x0a, 0x17, 0x43, 0x6f, 0x6d, 0x70, 0x6c,
- 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f,
- 0x61, 0x64, 0x12, 0x38, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
- 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e,
- 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72,
- 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x39, 0x2e, 0x73,
- 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
- 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65,
- 0x74, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61,
- 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x87, 0x01, 0x0a, 0x14, 0x41, 0x62,
- 0x6f, 0x72, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f,
- 0x61, 0x64, 0x12, 0x35, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
- 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e,
- 0x41, 0x62, 0x6f, 0x72, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70,
- 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x36, 0x2e, 0x73, 0x70, 0x65, 0x63,
+ 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x73, 0x49, 0x6e,
+ 0x70, 0x75, 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33,
+ 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74,
+ 0x22, 0x00, 0x12, 0x81, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x2e, 0x73, 0x70, 0x65, 0x63,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
- 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x4d, 0x75, 0x6c, 0x74,
- 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75,
- 0x74, 0x22, 0x00, 0x12, 0x87, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74,
- 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x35, 0x2e, 0x73,
+ 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x34,
+ 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65,
+ 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74,
+ 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x75,
+ 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x07, 0x53, 0x69, 0x67, 0x6e, 0x55, 0x52,
+ 0x4c, 0x12, 0x28, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,
+ 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x53,
+ 0x69, 0x67, 0x6e, 0x55, 0x52, 0x4c, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x29, 0x2e, 0x73, 0x70,
+ 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x55, 0x52, 0x4c,
+ 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x77, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69,
+ 0x64, 0x74, 0x68, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x39, 0x2e, 0x73,
0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
- 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75,
- 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x49, 0x6e,
- 0x70, 0x75, 0x74, 0x1a, 0x36, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d,
+ 0x69, 0x74, 0x49, 0x6e, 0x70, 0x75, 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, 0x22,
+ 0x00, 0x12, 0x75, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61,
+ 0x64, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69,
+ 0x6d, 0x69, 0x74, 0x12, 0x39, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33,
- 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74, 0x55, 0x70,
- 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x66, 0x0a,
- 0x09, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x73, 0x12, 0x2a, 0x2e, 0x73, 0x70, 0x65,
- 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
- 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74,
- 0x73, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
- 0x2e, 0x73, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x73, 0x4f, 0x75, 0x74,
- 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x81, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62,
- 0x6a, 0x65, 0x63, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x2e, 0x73,
+ 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68,
+ 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x70, 0x75, 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, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x65,
+ 0x6e, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2d, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x4f, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2e, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
+ 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x28, 0x01, 0x12, 0x72, 0x0a, 0x0d, 0x52,
+ 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x2e, 0x73,
0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
- 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62,
- 0x6a, 0x65, 0x63, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x49, 0x6e, 0x70, 0x75,
- 0x74, 0x1a, 0x34, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65,
- 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x4c,
- 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
- 0x73, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x07, 0x53, 0x69, 0x67,
- 0x6e, 0x55, 0x52, 0x4c, 0x12, 0x28, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73,
- 0x33, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x55, 0x52, 0x4c, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x29,
- 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65,
- 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x53, 0x69, 0x67, 0x6e,
- 0x55, 0x52, 0x4c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x12, 0x77, 0x0a, 0x20, 0x55,
- 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6e,
- 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12,
- 0x39, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74,
- 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x55, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x52, 0x61, 0x74, 0x65,
- 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x70, 0x75, 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, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x70,
- 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x52, 0x61, 0x74,
- 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x39, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
- 0x2e, 0x73, 0x33, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69,
- 0x64, 0x74, 0x68, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x70, 0x75,
- 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, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x0c, 0x41,
- 0x70, 0x70, 0x65, 0x6e, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2d, 0x2e, 0x73, 0x70,
- 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
- 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x4f,
- 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2e, 0x2e, 0x73, 0x70, 0x65,
- 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
- 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x4f, 0x62,
- 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x28, 0x01, 0x12, 0x72,
- 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12,
- 0x2e, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74,
- 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x52, 0x65, 0x73,
- 0x74, 0x6f, 0x72, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a,
- 0x2f, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74,
- 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x52, 0x65, 0x73,
- 0x74, 0x6f, 0x72, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74,
- 0x22, 0x00, 0x42, 0x2f, 0x5a, 0x2d, 0x6d, 0x6f, 0x73, 0x6e, 0x2e, 0x69, 0x6f, 0x2f, 0x6c, 0x61,
- 0x79, 0x6f, 0x74, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x65, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
- 0x2f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x33,
- 0x3b, 0x73, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72,
+ 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x1a, 0x2f, 0x2e, 0x73,
+ 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+ 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72,
+ 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x42,
+ 0x2f, 0x5a, 0x2d, 0x6d, 0x6f, 0x73, 0x6e, 0x2e, 0x69, 0x6f, 0x2f, 0x6c, 0x61, 0x79, 0x6f, 0x74,
+ 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x65, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78,
+ 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x33, 0x3b, 0x73, 0x33,
+ 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -7794,7 +8559,7 @@ func file_oss_proto_rawDescGZIP() []byte {
return file_oss_proto_rawDescData
}
-var file_oss_proto_msgTypes = make([]protoimpl.MessageInfo, 78)
+var file_oss_proto_msgTypes = make([]protoimpl.MessageInfo, 86)
var file_oss_proto_goTypes = []interface{}{
(*GetObjectInput)(nil), // 0: spec.proto.extension.v1.s3.GetObjectInput
(*GetObjectOutput)(nil), // 1: spec.proto.extension.v1.s3.GetObjectOutput
@@ -7825,69 +8590,77 @@ var file_oss_proto_goTypes = []interface{}{
(*GetObjectCannedAclOutput)(nil), // 26: spec.proto.extension.v1.s3.GetObjectCannedAclOutput
(*PutObjectCannedAclInput)(nil), // 27: spec.proto.extension.v1.s3.PutObjectCannedAclInput
(*PutObjectCannedAclOutput)(nil), // 28: spec.proto.extension.v1.s3.PutObjectCannedAclOutput
- (*RestoreObjectInput)(nil), // 29: spec.proto.extension.v1.s3.RestoreObjectInput
- (*RestoreObjectOutput)(nil), // 30: spec.proto.extension.v1.s3.RestoreObjectOutput
- (*CreateMultipartUploadInput)(nil), // 31: spec.proto.extension.v1.s3.CreateMultipartUploadInput
- (*CreateMultipartUploadOutput)(nil), // 32: spec.proto.extension.v1.s3.CreateMultipartUploadOutput
- (*UploadPartInput)(nil), // 33: spec.proto.extension.v1.s3.UploadPartInput
- (*UploadPartOutput)(nil), // 34: spec.proto.extension.v1.s3.UploadPartOutput
- (*UploadPartCopyInput)(nil), // 35: spec.proto.extension.v1.s3.UploadPartCopyInput
- (*CopyPartResult)(nil), // 36: spec.proto.extension.v1.s3.CopyPartResult
- (*UploadPartCopyOutput)(nil), // 37: spec.proto.extension.v1.s3.UploadPartCopyOutput
- (*CompletedPart)(nil), // 38: spec.proto.extension.v1.s3.CompletedPart
- (*CompletedMultipartUpload)(nil), // 39: spec.proto.extension.v1.s3.CompletedMultipartUpload
- (*CompleteMultipartUploadInput)(nil), // 40: spec.proto.extension.v1.s3.CompleteMultipartUploadInput
- (*CompleteMultipartUploadOutput)(nil), // 41: spec.proto.extension.v1.s3.CompleteMultipartUploadOutput
- (*AbortMultipartUploadInput)(nil), // 42: spec.proto.extension.v1.s3.AbortMultipartUploadInput
- (*AbortMultipartUploadOutput)(nil), // 43: spec.proto.extension.v1.s3.AbortMultipartUploadOutput
- (*ListMultipartUploadsInput)(nil), // 44: spec.proto.extension.v1.s3.ListMultipartUploadsInput
- (*Initiator)(nil), // 45: spec.proto.extension.v1.s3.Initiator
- (*MultipartUpload)(nil), // 46: spec.proto.extension.v1.s3.MultipartUpload
- (*ListMultipartUploadsOutput)(nil), // 47: spec.proto.extension.v1.s3.ListMultipartUploadsOutput
- (*ListObjectVersionsInput)(nil), // 48: spec.proto.extension.v1.s3.ListObjectVersionsInput
- (*DeleteMarkerEntry)(nil), // 49: spec.proto.extension.v1.s3.DeleteMarkerEntry
- (*ObjectVersion)(nil), // 50: spec.proto.extension.v1.s3.ObjectVersion
- (*ListObjectVersionsOutput)(nil), // 51: spec.proto.extension.v1.s3.ListObjectVersionsOutput
- (*HeadObjectInput)(nil), // 52: spec.proto.extension.v1.s3.HeadObjectInput
- (*HeadObjectOutput)(nil), // 53: spec.proto.extension.v1.s3.HeadObjectOutput
- (*IsObjectExistInput)(nil), // 54: spec.proto.extension.v1.s3.IsObjectExistInput
- (*IsObjectExistOutput)(nil), // 55: spec.proto.extension.v1.s3.IsObjectExistOutput
- (*SignURLInput)(nil), // 56: spec.proto.extension.v1.s3.SignURLInput
- (*SignURLOutput)(nil), // 57: spec.proto.extension.v1.s3.SignURLOutput
- (*UpdateBandwidthRateLimitInput)(nil), // 58: spec.proto.extension.v1.s3.UpdateBandwidthRateLimitInput
- (*AppendObjectInput)(nil), // 59: spec.proto.extension.v1.s3.AppendObjectInput
- (*AppendObjectOutput)(nil), // 60: spec.proto.extension.v1.s3.AppendObjectOutput
- (*ListPartsInput)(nil), // 61: spec.proto.extension.v1.s3.ListPartsInput
- (*Part)(nil), // 62: spec.proto.extension.v1.s3.Part
- (*ListPartsOutput)(nil), // 63: spec.proto.extension.v1.s3.ListPartsOutput
- nil, // 64: spec.proto.extension.v1.s3.GetObjectOutput.MetadataEntry
- nil, // 65: spec.proto.extension.v1.s3.PutObjectInput.MetaEntry
- nil, // 66: spec.proto.extension.v1.s3.PutObjectInput.TaggingEntry
- nil, // 67: spec.proto.extension.v1.s3.PutObjectTaggingInput.TagsEntry
- nil, // 68: spec.proto.extension.v1.s3.PutObjectTaggingOutput.ResultMetadataEntry
- nil, // 69: spec.proto.extension.v1.s3.DeleteObjectTaggingOutput.ResultMetadataEntry
- nil, // 70: spec.proto.extension.v1.s3.GetObjectTaggingOutput.TagsEntry
- nil, // 71: spec.proto.extension.v1.s3.GetObjectTaggingOutput.ResultMetadataEntry
- nil, // 72: spec.proto.extension.v1.s3.CopyObjectInput.TaggingEntry
- nil, // 73: spec.proto.extension.v1.s3.CopyObjectInput.MetadataEntry
- nil, // 74: spec.proto.extension.v1.s3.CreateMultipartUploadInput.MetaDataEntry
- nil, // 75: spec.proto.extension.v1.s3.CreateMultipartUploadInput.TaggingEntry
- nil, // 76: spec.proto.extension.v1.s3.HeadObjectOutput.ResultMetadataEntry
- nil, // 77: spec.proto.extension.v1.s3.AppendObjectInput.TagsEntry
- (*emptypb.Empty)(nil), // 78: google.protobuf.Empty
+ (*GlacierJobParameters)(nil), // 29: spec.proto.extension.v1.s3.GlacierJobParameters
+ (*OutputLocation)(nil), // 30: spec.proto.extension.v1.s3.OutputLocation
+ (*CSVInput)(nil), // 31: spec.proto.extension.v1.s3.CSVInput
+ (*InputSerialization)(nil), // 32: spec.proto.extension.v1.s3.InputSerialization
+ (*CSVOutput)(nil), // 33: spec.proto.extension.v1.s3.CSVOutput
+ (*OutputSerialization)(nil), // 34: spec.proto.extension.v1.s3.OutputSerialization
+ (*SelectParameters)(nil), // 35: spec.proto.extension.v1.s3.SelectParameters
+ (*RestoreRequest)(nil), // 36: spec.proto.extension.v1.s3.RestoreRequest
+ (*RestoreObjectInput)(nil), // 37: spec.proto.extension.v1.s3.RestoreObjectInput
+ (*RestoreObjectOutput)(nil), // 38: spec.proto.extension.v1.s3.RestoreObjectOutput
+ (*CreateMultipartUploadInput)(nil), // 39: spec.proto.extension.v1.s3.CreateMultipartUploadInput
+ (*CreateMultipartUploadOutput)(nil), // 40: spec.proto.extension.v1.s3.CreateMultipartUploadOutput
+ (*UploadPartInput)(nil), // 41: spec.proto.extension.v1.s3.UploadPartInput
+ (*UploadPartOutput)(nil), // 42: spec.proto.extension.v1.s3.UploadPartOutput
+ (*UploadPartCopyInput)(nil), // 43: spec.proto.extension.v1.s3.UploadPartCopyInput
+ (*CopyPartResult)(nil), // 44: spec.proto.extension.v1.s3.CopyPartResult
+ (*UploadPartCopyOutput)(nil), // 45: spec.proto.extension.v1.s3.UploadPartCopyOutput
+ (*CompletedPart)(nil), // 46: spec.proto.extension.v1.s3.CompletedPart
+ (*CompletedMultipartUpload)(nil), // 47: spec.proto.extension.v1.s3.CompletedMultipartUpload
+ (*CompleteMultipartUploadInput)(nil), // 48: spec.proto.extension.v1.s3.CompleteMultipartUploadInput
+ (*CompleteMultipartUploadOutput)(nil), // 49: spec.proto.extension.v1.s3.CompleteMultipartUploadOutput
+ (*AbortMultipartUploadInput)(nil), // 50: spec.proto.extension.v1.s3.AbortMultipartUploadInput
+ (*AbortMultipartUploadOutput)(nil), // 51: spec.proto.extension.v1.s3.AbortMultipartUploadOutput
+ (*ListMultipartUploadsInput)(nil), // 52: spec.proto.extension.v1.s3.ListMultipartUploadsInput
+ (*Initiator)(nil), // 53: spec.proto.extension.v1.s3.Initiator
+ (*MultipartUpload)(nil), // 54: spec.proto.extension.v1.s3.MultipartUpload
+ (*ListMultipartUploadsOutput)(nil), // 55: spec.proto.extension.v1.s3.ListMultipartUploadsOutput
+ (*ListObjectVersionsInput)(nil), // 56: spec.proto.extension.v1.s3.ListObjectVersionsInput
+ (*DeleteMarkerEntry)(nil), // 57: spec.proto.extension.v1.s3.DeleteMarkerEntry
+ (*ObjectVersion)(nil), // 58: spec.proto.extension.v1.s3.ObjectVersion
+ (*ListObjectVersionsOutput)(nil), // 59: spec.proto.extension.v1.s3.ListObjectVersionsOutput
+ (*HeadObjectInput)(nil), // 60: spec.proto.extension.v1.s3.HeadObjectInput
+ (*HeadObjectOutput)(nil), // 61: spec.proto.extension.v1.s3.HeadObjectOutput
+ (*IsObjectExistInput)(nil), // 62: spec.proto.extension.v1.s3.IsObjectExistInput
+ (*IsObjectExistOutput)(nil), // 63: spec.proto.extension.v1.s3.IsObjectExistOutput
+ (*SignURLInput)(nil), // 64: spec.proto.extension.v1.s3.SignURLInput
+ (*SignURLOutput)(nil), // 65: spec.proto.extension.v1.s3.SignURLOutput
+ (*UpdateBandwidthRateLimitInput)(nil), // 66: spec.proto.extension.v1.s3.UpdateBandwidthRateLimitInput
+ (*AppendObjectInput)(nil), // 67: spec.proto.extension.v1.s3.AppendObjectInput
+ (*AppendObjectOutput)(nil), // 68: spec.proto.extension.v1.s3.AppendObjectOutput
+ (*ListPartsInput)(nil), // 69: spec.proto.extension.v1.s3.ListPartsInput
+ (*Part)(nil), // 70: spec.proto.extension.v1.s3.Part
+ (*ListPartsOutput)(nil), // 71: spec.proto.extension.v1.s3.ListPartsOutput
+ nil, // 72: spec.proto.extension.v1.s3.GetObjectOutput.MetadataEntry
+ nil, // 73: spec.proto.extension.v1.s3.PutObjectInput.MetaEntry
+ nil, // 74: spec.proto.extension.v1.s3.PutObjectInput.TaggingEntry
+ nil, // 75: spec.proto.extension.v1.s3.PutObjectTaggingInput.TagsEntry
+ nil, // 76: spec.proto.extension.v1.s3.PutObjectTaggingOutput.ResultMetadataEntry
+ nil, // 77: spec.proto.extension.v1.s3.DeleteObjectTaggingOutput.ResultMetadataEntry
+ nil, // 78: spec.proto.extension.v1.s3.GetObjectTaggingOutput.TagsEntry
+ nil, // 79: spec.proto.extension.v1.s3.GetObjectTaggingOutput.ResultMetadataEntry
+ nil, // 80: spec.proto.extension.v1.s3.CopyObjectInput.TaggingEntry
+ nil, // 81: spec.proto.extension.v1.s3.CopyObjectInput.MetadataEntry
+ nil, // 82: spec.proto.extension.v1.s3.CreateMultipartUploadInput.MetaDataEntry
+ nil, // 83: spec.proto.extension.v1.s3.CreateMultipartUploadInput.TaggingEntry
+ nil, // 84: spec.proto.extension.v1.s3.HeadObjectOutput.ResultMetadataEntry
+ nil, // 85: spec.proto.extension.v1.s3.AppendObjectInput.TagsEntry
+ (*emptypb.Empty)(nil), // 86: google.protobuf.Empty
}
var file_oss_proto_depIdxs = []int32{
- 64, // 0: spec.proto.extension.v1.s3.GetObjectOutput.metadata:type_name -> spec.proto.extension.v1.s3.GetObjectOutput.MetadataEntry
- 65, // 1: spec.proto.extension.v1.s3.PutObjectInput.meta:type_name -> spec.proto.extension.v1.s3.PutObjectInput.MetaEntry
- 66, // 2: spec.proto.extension.v1.s3.PutObjectInput.tagging:type_name -> spec.proto.extension.v1.s3.PutObjectInput.TaggingEntry
- 67, // 3: spec.proto.extension.v1.s3.PutObjectTaggingInput.tags:type_name -> spec.proto.extension.v1.s3.PutObjectTaggingInput.TagsEntry
- 68, // 4: spec.proto.extension.v1.s3.PutObjectTaggingOutput.result_metadata:type_name -> spec.proto.extension.v1.s3.PutObjectTaggingOutput.ResultMetadataEntry
- 69, // 5: spec.proto.extension.v1.s3.DeleteObjectTaggingOutput.result_metadata:type_name -> spec.proto.extension.v1.s3.DeleteObjectTaggingOutput.ResultMetadataEntry
- 70, // 6: spec.proto.extension.v1.s3.GetObjectTaggingOutput.tags:type_name -> spec.proto.extension.v1.s3.GetObjectTaggingOutput.TagsEntry
- 71, // 7: spec.proto.extension.v1.s3.GetObjectTaggingOutput.result_metadata:type_name -> spec.proto.extension.v1.s3.GetObjectTaggingOutput.ResultMetadataEntry
+ 72, // 0: spec.proto.extension.v1.s3.GetObjectOutput.metadata:type_name -> spec.proto.extension.v1.s3.GetObjectOutput.MetadataEntry
+ 73, // 1: spec.proto.extension.v1.s3.PutObjectInput.meta:type_name -> spec.proto.extension.v1.s3.PutObjectInput.MetaEntry
+ 74, // 2: spec.proto.extension.v1.s3.PutObjectInput.tagging:type_name -> spec.proto.extension.v1.s3.PutObjectInput.TaggingEntry
+ 75, // 3: spec.proto.extension.v1.s3.PutObjectTaggingInput.tags:type_name -> spec.proto.extension.v1.s3.PutObjectTaggingInput.TagsEntry
+ 76, // 4: spec.proto.extension.v1.s3.PutObjectTaggingOutput.result_metadata:type_name -> spec.proto.extension.v1.s3.PutObjectTaggingOutput.ResultMetadataEntry
+ 77, // 5: spec.proto.extension.v1.s3.DeleteObjectTaggingOutput.result_metadata:type_name -> spec.proto.extension.v1.s3.DeleteObjectTaggingOutput.ResultMetadataEntry
+ 78, // 6: spec.proto.extension.v1.s3.GetObjectTaggingOutput.tags:type_name -> spec.proto.extension.v1.s3.GetObjectTaggingOutput.TagsEntry
+ 79, // 7: spec.proto.extension.v1.s3.GetObjectTaggingOutput.result_metadata:type_name -> spec.proto.extension.v1.s3.GetObjectTaggingOutput.ResultMetadataEntry
12, // 8: spec.proto.extension.v1.s3.CopyObjectInput.copy_source:type_name -> spec.proto.extension.v1.s3.CopySource
- 72, // 9: spec.proto.extension.v1.s3.CopyObjectInput.tagging:type_name -> spec.proto.extension.v1.s3.CopyObjectInput.TaggingEntry
- 73, // 10: spec.proto.extension.v1.s3.CopyObjectInput.metadata:type_name -> spec.proto.extension.v1.s3.CopyObjectInput.MetadataEntry
+ 80, // 9: spec.proto.extension.v1.s3.CopyObjectInput.tagging:type_name -> spec.proto.extension.v1.s3.CopyObjectInput.TaggingEntry
+ 81, // 10: spec.proto.extension.v1.s3.CopyObjectInput.metadata:type_name -> spec.proto.extension.v1.s3.CopyObjectInput.MetadataEntry
14, // 11: spec.proto.extension.v1.s3.CopyObjectOutput.copy_object_result:type_name -> spec.proto.extension.v1.s3.CopyObjectResult
17, // 12: spec.proto.extension.v1.s3.Delete.objects:type_name -> spec.proto.extension.v1.s3.ObjectIdentifier
16, // 13: spec.proto.extension.v1.s3.DeleteObjectsInput.delete:type_name -> spec.proto.extension.v1.s3.Delete
@@ -7895,79 +8668,87 @@ var file_oss_proto_depIdxs = []int32{
24, // 15: spec.proto.extension.v1.s3.ListObjectsOutput.contents:type_name -> spec.proto.extension.v1.s3.Object
23, // 16: spec.proto.extension.v1.s3.Object.owner:type_name -> spec.proto.extension.v1.s3.Owner
23, // 17: spec.proto.extension.v1.s3.GetObjectCannedAclOutput.owner:type_name -> spec.proto.extension.v1.s3.Owner
- 74, // 18: spec.proto.extension.v1.s3.CreateMultipartUploadInput.meta_data:type_name -> spec.proto.extension.v1.s3.CreateMultipartUploadInput.MetaDataEntry
- 75, // 19: spec.proto.extension.v1.s3.CreateMultipartUploadInput.tagging:type_name -> spec.proto.extension.v1.s3.CreateMultipartUploadInput.TaggingEntry
- 12, // 20: spec.proto.extension.v1.s3.UploadPartCopyInput.copy_source:type_name -> spec.proto.extension.v1.s3.CopySource
- 36, // 21: spec.proto.extension.v1.s3.UploadPartCopyOutput.copy_part_result:type_name -> spec.proto.extension.v1.s3.CopyPartResult
- 38, // 22: spec.proto.extension.v1.s3.CompletedMultipartUpload.parts:type_name -> spec.proto.extension.v1.s3.CompletedPart
- 39, // 23: spec.proto.extension.v1.s3.CompleteMultipartUploadInput.multipart_upload:type_name -> spec.proto.extension.v1.s3.CompletedMultipartUpload
- 45, // 24: spec.proto.extension.v1.s3.MultipartUpload.initiator:type_name -> spec.proto.extension.v1.s3.Initiator
- 23, // 25: spec.proto.extension.v1.s3.MultipartUpload.owner:type_name -> spec.proto.extension.v1.s3.Owner
- 46, // 26: spec.proto.extension.v1.s3.ListMultipartUploadsOutput.uploads:type_name -> spec.proto.extension.v1.s3.MultipartUpload
- 23, // 27: spec.proto.extension.v1.s3.DeleteMarkerEntry.owner:type_name -> spec.proto.extension.v1.s3.Owner
- 23, // 28: spec.proto.extension.v1.s3.ObjectVersion.owner:type_name -> spec.proto.extension.v1.s3.Owner
- 49, // 29: spec.proto.extension.v1.s3.ListObjectVersionsOutput.delete_markers:type_name -> spec.proto.extension.v1.s3.DeleteMarkerEntry
- 50, // 30: spec.proto.extension.v1.s3.ListObjectVersionsOutput.versions:type_name -> spec.proto.extension.v1.s3.ObjectVersion
- 76, // 31: spec.proto.extension.v1.s3.HeadObjectOutput.result_metadata:type_name -> spec.proto.extension.v1.s3.HeadObjectOutput.ResultMetadataEntry
- 77, // 32: spec.proto.extension.v1.s3.AppendObjectInput.tags:type_name -> spec.proto.extension.v1.s3.AppendObjectInput.TagsEntry
- 62, // 33: spec.proto.extension.v1.s3.ListPartsOutput.parts:type_name -> spec.proto.extension.v1.s3.Part
- 2, // 34: spec.proto.extension.v1.s3.ObjectStorageService.PutObject:input_type -> spec.proto.extension.v1.s3.PutObjectInput
- 0, // 35: spec.proto.extension.v1.s3.ObjectStorageService.GetObject:input_type -> spec.proto.extension.v1.s3.GetObjectInput
- 4, // 36: spec.proto.extension.v1.s3.ObjectStorageService.DeleteObject:input_type -> spec.proto.extension.v1.s3.DeleteObjectInput
- 13, // 37: spec.proto.extension.v1.s3.ObjectStorageService.CopyObject:input_type -> spec.proto.extension.v1.s3.CopyObjectInput
- 18, // 38: spec.proto.extension.v1.s3.ObjectStorageService.DeleteObjects:input_type -> spec.proto.extension.v1.s3.DeleteObjectsInput
- 21, // 39: spec.proto.extension.v1.s3.ObjectStorageService.ListObjects:input_type -> spec.proto.extension.v1.s3.ListObjectsInput
- 52, // 40: spec.proto.extension.v1.s3.ObjectStorageService.HeadObject:input_type -> spec.proto.extension.v1.s3.HeadObjectInput
- 54, // 41: spec.proto.extension.v1.s3.ObjectStorageService.IsObjectExist:input_type -> spec.proto.extension.v1.s3.IsObjectExistInput
- 6, // 42: spec.proto.extension.v1.s3.ObjectStorageService.PutObjectTagging:input_type -> spec.proto.extension.v1.s3.PutObjectTaggingInput
- 8, // 43: spec.proto.extension.v1.s3.ObjectStorageService.DeleteObjectTagging:input_type -> spec.proto.extension.v1.s3.DeleteObjectTaggingInput
- 10, // 44: spec.proto.extension.v1.s3.ObjectStorageService.GetObjectTagging:input_type -> spec.proto.extension.v1.s3.GetObjectTaggingInput
- 25, // 45: spec.proto.extension.v1.s3.ObjectStorageService.GetObjectCannedAcl:input_type -> spec.proto.extension.v1.s3.GetObjectCannedAclInput
- 27, // 46: spec.proto.extension.v1.s3.ObjectStorageService.PutObjectCannedAcl:input_type -> spec.proto.extension.v1.s3.PutObjectCannedAclInput
- 31, // 47: spec.proto.extension.v1.s3.ObjectStorageService.CreateMultipartUpload:input_type -> spec.proto.extension.v1.s3.CreateMultipartUploadInput
- 33, // 48: spec.proto.extension.v1.s3.ObjectStorageService.UploadPart:input_type -> spec.proto.extension.v1.s3.UploadPartInput
- 35, // 49: spec.proto.extension.v1.s3.ObjectStorageService.UploadPartCopy:input_type -> spec.proto.extension.v1.s3.UploadPartCopyInput
- 40, // 50: spec.proto.extension.v1.s3.ObjectStorageService.CompleteMultipartUpload:input_type -> spec.proto.extension.v1.s3.CompleteMultipartUploadInput
- 42, // 51: spec.proto.extension.v1.s3.ObjectStorageService.AbortMultipartUpload:input_type -> spec.proto.extension.v1.s3.AbortMultipartUploadInput
- 44, // 52: spec.proto.extension.v1.s3.ObjectStorageService.ListMultipartUploads:input_type -> spec.proto.extension.v1.s3.ListMultipartUploadsInput
- 61, // 53: spec.proto.extension.v1.s3.ObjectStorageService.ListParts:input_type -> spec.proto.extension.v1.s3.ListPartsInput
- 48, // 54: spec.proto.extension.v1.s3.ObjectStorageService.ListObjectVersions:input_type -> spec.proto.extension.v1.s3.ListObjectVersionsInput
- 56, // 55: spec.proto.extension.v1.s3.ObjectStorageService.SignURL:input_type -> spec.proto.extension.v1.s3.SignURLInput
- 58, // 56: spec.proto.extension.v1.s3.ObjectStorageService.UpdateDownloadBandwidthRateLimit:input_type -> spec.proto.extension.v1.s3.UpdateBandwidthRateLimitInput
- 58, // 57: spec.proto.extension.v1.s3.ObjectStorageService.UpdateUploadBandwidthRateLimit:input_type -> spec.proto.extension.v1.s3.UpdateBandwidthRateLimitInput
- 59, // 58: spec.proto.extension.v1.s3.ObjectStorageService.AppendObject:input_type -> spec.proto.extension.v1.s3.AppendObjectInput
- 29, // 59: spec.proto.extension.v1.s3.ObjectStorageService.RestoreObject:input_type -> spec.proto.extension.v1.s3.RestoreObjectInput
- 3, // 60: spec.proto.extension.v1.s3.ObjectStorageService.PutObject:output_type -> spec.proto.extension.v1.s3.PutObjectOutput
- 1, // 61: spec.proto.extension.v1.s3.ObjectStorageService.GetObject:output_type -> spec.proto.extension.v1.s3.GetObjectOutput
- 5, // 62: spec.proto.extension.v1.s3.ObjectStorageService.DeleteObject:output_type -> spec.proto.extension.v1.s3.DeleteObjectOutput
- 15, // 63: spec.proto.extension.v1.s3.ObjectStorageService.CopyObject:output_type -> spec.proto.extension.v1.s3.CopyObjectOutput
- 20, // 64: spec.proto.extension.v1.s3.ObjectStorageService.DeleteObjects:output_type -> spec.proto.extension.v1.s3.DeleteObjectsOutput
- 22, // 65: spec.proto.extension.v1.s3.ObjectStorageService.ListObjects:output_type -> spec.proto.extension.v1.s3.ListObjectsOutput
- 53, // 66: spec.proto.extension.v1.s3.ObjectStorageService.HeadObject:output_type -> spec.proto.extension.v1.s3.HeadObjectOutput
- 55, // 67: spec.proto.extension.v1.s3.ObjectStorageService.IsObjectExist:output_type -> spec.proto.extension.v1.s3.IsObjectExistOutput
- 7, // 68: spec.proto.extension.v1.s3.ObjectStorageService.PutObjectTagging:output_type -> spec.proto.extension.v1.s3.PutObjectTaggingOutput
- 9, // 69: spec.proto.extension.v1.s3.ObjectStorageService.DeleteObjectTagging:output_type -> spec.proto.extension.v1.s3.DeleteObjectTaggingOutput
- 11, // 70: spec.proto.extension.v1.s3.ObjectStorageService.GetObjectTagging:output_type -> spec.proto.extension.v1.s3.GetObjectTaggingOutput
- 26, // 71: spec.proto.extension.v1.s3.ObjectStorageService.GetObjectCannedAcl:output_type -> spec.proto.extension.v1.s3.GetObjectCannedAclOutput
- 28, // 72: spec.proto.extension.v1.s3.ObjectStorageService.PutObjectCannedAcl:output_type -> spec.proto.extension.v1.s3.PutObjectCannedAclOutput
- 32, // 73: spec.proto.extension.v1.s3.ObjectStorageService.CreateMultipartUpload:output_type -> spec.proto.extension.v1.s3.CreateMultipartUploadOutput
- 34, // 74: spec.proto.extension.v1.s3.ObjectStorageService.UploadPart:output_type -> spec.proto.extension.v1.s3.UploadPartOutput
- 37, // 75: spec.proto.extension.v1.s3.ObjectStorageService.UploadPartCopy:output_type -> spec.proto.extension.v1.s3.UploadPartCopyOutput
- 41, // 76: spec.proto.extension.v1.s3.ObjectStorageService.CompleteMultipartUpload:output_type -> spec.proto.extension.v1.s3.CompleteMultipartUploadOutput
- 43, // 77: spec.proto.extension.v1.s3.ObjectStorageService.AbortMultipartUpload:output_type -> spec.proto.extension.v1.s3.AbortMultipartUploadOutput
- 47, // 78: spec.proto.extension.v1.s3.ObjectStorageService.ListMultipartUploads:output_type -> spec.proto.extension.v1.s3.ListMultipartUploadsOutput
- 63, // 79: spec.proto.extension.v1.s3.ObjectStorageService.ListParts:output_type -> spec.proto.extension.v1.s3.ListPartsOutput
- 51, // 80: spec.proto.extension.v1.s3.ObjectStorageService.ListObjectVersions:output_type -> spec.proto.extension.v1.s3.ListObjectVersionsOutput
- 57, // 81: spec.proto.extension.v1.s3.ObjectStorageService.SignURL:output_type -> spec.proto.extension.v1.s3.SignURLOutput
- 78, // 82: spec.proto.extension.v1.s3.ObjectStorageService.UpdateDownloadBandwidthRateLimit:output_type -> google.protobuf.Empty
- 78, // 83: spec.proto.extension.v1.s3.ObjectStorageService.UpdateUploadBandwidthRateLimit:output_type -> google.protobuf.Empty
- 60, // 84: spec.proto.extension.v1.s3.ObjectStorageService.AppendObject:output_type -> spec.proto.extension.v1.s3.AppendObjectOutput
- 30, // 85: spec.proto.extension.v1.s3.ObjectStorageService.RestoreObject:output_type -> spec.proto.extension.v1.s3.RestoreObjectOutput
- 60, // [60:86] is the sub-list for method output_type
- 34, // [34:60] is the sub-list for method input_type
- 34, // [34:34] is the sub-list for extension type_name
- 34, // [34:34] is the sub-list for extension extendee
- 0, // [0:34] is the sub-list for field type_name
+ 31, // 18: spec.proto.extension.v1.s3.InputSerialization.csv:type_name -> spec.proto.extension.v1.s3.CSVInput
+ 33, // 19: spec.proto.extension.v1.s3.OutputSerialization.csv:type_name -> spec.proto.extension.v1.s3.CSVOutput
+ 32, // 20: spec.proto.extension.v1.s3.SelectParameters.input_serialization:type_name -> spec.proto.extension.v1.s3.InputSerialization
+ 34, // 21: spec.proto.extension.v1.s3.SelectParameters.output_serialization:type_name -> spec.proto.extension.v1.s3.OutputSerialization
+ 29, // 22: spec.proto.extension.v1.s3.RestoreRequest.glacier_job_parameters:type_name -> spec.proto.extension.v1.s3.GlacierJobParameters
+ 30, // 23: spec.proto.extension.v1.s3.RestoreRequest.output_location:type_name -> spec.proto.extension.v1.s3.OutputLocation
+ 35, // 24: spec.proto.extension.v1.s3.RestoreRequest.select_parameters:type_name -> spec.proto.extension.v1.s3.SelectParameters
+ 36, // 25: spec.proto.extension.v1.s3.RestoreObjectInput.restore_request:type_name -> spec.proto.extension.v1.s3.RestoreRequest
+ 82, // 26: spec.proto.extension.v1.s3.CreateMultipartUploadInput.meta_data:type_name -> spec.proto.extension.v1.s3.CreateMultipartUploadInput.MetaDataEntry
+ 83, // 27: spec.proto.extension.v1.s3.CreateMultipartUploadInput.tagging:type_name -> spec.proto.extension.v1.s3.CreateMultipartUploadInput.TaggingEntry
+ 12, // 28: spec.proto.extension.v1.s3.UploadPartCopyInput.copy_source:type_name -> spec.proto.extension.v1.s3.CopySource
+ 44, // 29: spec.proto.extension.v1.s3.UploadPartCopyOutput.copy_part_result:type_name -> spec.proto.extension.v1.s3.CopyPartResult
+ 46, // 30: spec.proto.extension.v1.s3.CompletedMultipartUpload.parts:type_name -> spec.proto.extension.v1.s3.CompletedPart
+ 47, // 31: spec.proto.extension.v1.s3.CompleteMultipartUploadInput.multipart_upload:type_name -> spec.proto.extension.v1.s3.CompletedMultipartUpload
+ 53, // 32: spec.proto.extension.v1.s3.MultipartUpload.initiator:type_name -> spec.proto.extension.v1.s3.Initiator
+ 23, // 33: spec.proto.extension.v1.s3.MultipartUpload.owner:type_name -> spec.proto.extension.v1.s3.Owner
+ 54, // 34: spec.proto.extension.v1.s3.ListMultipartUploadsOutput.uploads:type_name -> spec.proto.extension.v1.s3.MultipartUpload
+ 23, // 35: spec.proto.extension.v1.s3.DeleteMarkerEntry.owner:type_name -> spec.proto.extension.v1.s3.Owner
+ 23, // 36: spec.proto.extension.v1.s3.ObjectVersion.owner:type_name -> spec.proto.extension.v1.s3.Owner
+ 57, // 37: spec.proto.extension.v1.s3.ListObjectVersionsOutput.delete_markers:type_name -> spec.proto.extension.v1.s3.DeleteMarkerEntry
+ 58, // 38: spec.proto.extension.v1.s3.ListObjectVersionsOutput.versions:type_name -> spec.proto.extension.v1.s3.ObjectVersion
+ 84, // 39: spec.proto.extension.v1.s3.HeadObjectOutput.result_metadata:type_name -> spec.proto.extension.v1.s3.HeadObjectOutput.ResultMetadataEntry
+ 85, // 40: spec.proto.extension.v1.s3.AppendObjectInput.tags:type_name -> spec.proto.extension.v1.s3.AppendObjectInput.TagsEntry
+ 70, // 41: spec.proto.extension.v1.s3.ListPartsOutput.parts:type_name -> spec.proto.extension.v1.s3.Part
+ 2, // 42: spec.proto.extension.v1.s3.ObjectStorageService.PutObject:input_type -> spec.proto.extension.v1.s3.PutObjectInput
+ 0, // 43: spec.proto.extension.v1.s3.ObjectStorageService.GetObject:input_type -> spec.proto.extension.v1.s3.GetObjectInput
+ 4, // 44: spec.proto.extension.v1.s3.ObjectStorageService.DeleteObject:input_type -> spec.proto.extension.v1.s3.DeleteObjectInput
+ 13, // 45: spec.proto.extension.v1.s3.ObjectStorageService.CopyObject:input_type -> spec.proto.extension.v1.s3.CopyObjectInput
+ 18, // 46: spec.proto.extension.v1.s3.ObjectStorageService.DeleteObjects:input_type -> spec.proto.extension.v1.s3.DeleteObjectsInput
+ 21, // 47: spec.proto.extension.v1.s3.ObjectStorageService.ListObjects:input_type -> spec.proto.extension.v1.s3.ListObjectsInput
+ 60, // 48: spec.proto.extension.v1.s3.ObjectStorageService.HeadObject:input_type -> spec.proto.extension.v1.s3.HeadObjectInput
+ 62, // 49: spec.proto.extension.v1.s3.ObjectStorageService.IsObjectExist:input_type -> spec.proto.extension.v1.s3.IsObjectExistInput
+ 6, // 50: spec.proto.extension.v1.s3.ObjectStorageService.PutObjectTagging:input_type -> spec.proto.extension.v1.s3.PutObjectTaggingInput
+ 8, // 51: spec.proto.extension.v1.s3.ObjectStorageService.DeleteObjectTagging:input_type -> spec.proto.extension.v1.s3.DeleteObjectTaggingInput
+ 10, // 52: spec.proto.extension.v1.s3.ObjectStorageService.GetObjectTagging:input_type -> spec.proto.extension.v1.s3.GetObjectTaggingInput
+ 25, // 53: spec.proto.extension.v1.s3.ObjectStorageService.GetObjectCannedAcl:input_type -> spec.proto.extension.v1.s3.GetObjectCannedAclInput
+ 27, // 54: spec.proto.extension.v1.s3.ObjectStorageService.PutObjectCannedAcl:input_type -> spec.proto.extension.v1.s3.PutObjectCannedAclInput
+ 39, // 55: spec.proto.extension.v1.s3.ObjectStorageService.CreateMultipartUpload:input_type -> spec.proto.extension.v1.s3.CreateMultipartUploadInput
+ 41, // 56: spec.proto.extension.v1.s3.ObjectStorageService.UploadPart:input_type -> spec.proto.extension.v1.s3.UploadPartInput
+ 43, // 57: spec.proto.extension.v1.s3.ObjectStorageService.UploadPartCopy:input_type -> spec.proto.extension.v1.s3.UploadPartCopyInput
+ 48, // 58: spec.proto.extension.v1.s3.ObjectStorageService.CompleteMultipartUpload:input_type -> spec.proto.extension.v1.s3.CompleteMultipartUploadInput
+ 50, // 59: spec.proto.extension.v1.s3.ObjectStorageService.AbortMultipartUpload:input_type -> spec.proto.extension.v1.s3.AbortMultipartUploadInput
+ 52, // 60: spec.proto.extension.v1.s3.ObjectStorageService.ListMultipartUploads:input_type -> spec.proto.extension.v1.s3.ListMultipartUploadsInput
+ 69, // 61: spec.proto.extension.v1.s3.ObjectStorageService.ListParts:input_type -> spec.proto.extension.v1.s3.ListPartsInput
+ 56, // 62: spec.proto.extension.v1.s3.ObjectStorageService.ListObjectVersions:input_type -> spec.proto.extension.v1.s3.ListObjectVersionsInput
+ 64, // 63: spec.proto.extension.v1.s3.ObjectStorageService.SignURL:input_type -> spec.proto.extension.v1.s3.SignURLInput
+ 66, // 64: spec.proto.extension.v1.s3.ObjectStorageService.UpdateDownloadBandwidthRateLimit:input_type -> spec.proto.extension.v1.s3.UpdateBandwidthRateLimitInput
+ 66, // 65: spec.proto.extension.v1.s3.ObjectStorageService.UpdateUploadBandwidthRateLimit:input_type -> spec.proto.extension.v1.s3.UpdateBandwidthRateLimitInput
+ 67, // 66: spec.proto.extension.v1.s3.ObjectStorageService.AppendObject:input_type -> spec.proto.extension.v1.s3.AppendObjectInput
+ 37, // 67: spec.proto.extension.v1.s3.ObjectStorageService.RestoreObject:input_type -> spec.proto.extension.v1.s3.RestoreObjectInput
+ 3, // 68: spec.proto.extension.v1.s3.ObjectStorageService.PutObject:output_type -> spec.proto.extension.v1.s3.PutObjectOutput
+ 1, // 69: spec.proto.extension.v1.s3.ObjectStorageService.GetObject:output_type -> spec.proto.extension.v1.s3.GetObjectOutput
+ 5, // 70: spec.proto.extension.v1.s3.ObjectStorageService.DeleteObject:output_type -> spec.proto.extension.v1.s3.DeleteObjectOutput
+ 15, // 71: spec.proto.extension.v1.s3.ObjectStorageService.CopyObject:output_type -> spec.proto.extension.v1.s3.CopyObjectOutput
+ 20, // 72: spec.proto.extension.v1.s3.ObjectStorageService.DeleteObjects:output_type -> spec.proto.extension.v1.s3.DeleteObjectsOutput
+ 22, // 73: spec.proto.extension.v1.s3.ObjectStorageService.ListObjects:output_type -> spec.proto.extension.v1.s3.ListObjectsOutput
+ 61, // 74: spec.proto.extension.v1.s3.ObjectStorageService.HeadObject:output_type -> spec.proto.extension.v1.s3.HeadObjectOutput
+ 63, // 75: spec.proto.extension.v1.s3.ObjectStorageService.IsObjectExist:output_type -> spec.proto.extension.v1.s3.IsObjectExistOutput
+ 7, // 76: spec.proto.extension.v1.s3.ObjectStorageService.PutObjectTagging:output_type -> spec.proto.extension.v1.s3.PutObjectTaggingOutput
+ 9, // 77: spec.proto.extension.v1.s3.ObjectStorageService.DeleteObjectTagging:output_type -> spec.proto.extension.v1.s3.DeleteObjectTaggingOutput
+ 11, // 78: spec.proto.extension.v1.s3.ObjectStorageService.GetObjectTagging:output_type -> spec.proto.extension.v1.s3.GetObjectTaggingOutput
+ 26, // 79: spec.proto.extension.v1.s3.ObjectStorageService.GetObjectCannedAcl:output_type -> spec.proto.extension.v1.s3.GetObjectCannedAclOutput
+ 28, // 80: spec.proto.extension.v1.s3.ObjectStorageService.PutObjectCannedAcl:output_type -> spec.proto.extension.v1.s3.PutObjectCannedAclOutput
+ 40, // 81: spec.proto.extension.v1.s3.ObjectStorageService.CreateMultipartUpload:output_type -> spec.proto.extension.v1.s3.CreateMultipartUploadOutput
+ 42, // 82: spec.proto.extension.v1.s3.ObjectStorageService.UploadPart:output_type -> spec.proto.extension.v1.s3.UploadPartOutput
+ 45, // 83: spec.proto.extension.v1.s3.ObjectStorageService.UploadPartCopy:output_type -> spec.proto.extension.v1.s3.UploadPartCopyOutput
+ 49, // 84: spec.proto.extension.v1.s3.ObjectStorageService.CompleteMultipartUpload:output_type -> spec.proto.extension.v1.s3.CompleteMultipartUploadOutput
+ 51, // 85: spec.proto.extension.v1.s3.ObjectStorageService.AbortMultipartUpload:output_type -> spec.proto.extension.v1.s3.AbortMultipartUploadOutput
+ 55, // 86: spec.proto.extension.v1.s3.ObjectStorageService.ListMultipartUploads:output_type -> spec.proto.extension.v1.s3.ListMultipartUploadsOutput
+ 71, // 87: spec.proto.extension.v1.s3.ObjectStorageService.ListParts:output_type -> spec.proto.extension.v1.s3.ListPartsOutput
+ 59, // 88: spec.proto.extension.v1.s3.ObjectStorageService.ListObjectVersions:output_type -> spec.proto.extension.v1.s3.ListObjectVersionsOutput
+ 65, // 89: spec.proto.extension.v1.s3.ObjectStorageService.SignURL:output_type -> spec.proto.extension.v1.s3.SignURLOutput
+ 86, // 90: spec.proto.extension.v1.s3.ObjectStorageService.UpdateDownloadBandwidthRateLimit:output_type -> google.protobuf.Empty
+ 86, // 91: spec.proto.extension.v1.s3.ObjectStorageService.UpdateUploadBandwidthRateLimit:output_type -> google.protobuf.Empty
+ 68, // 92: spec.proto.extension.v1.s3.ObjectStorageService.AppendObject:output_type -> spec.proto.extension.v1.s3.AppendObjectOutput
+ 38, // 93: spec.proto.extension.v1.s3.ObjectStorageService.RestoreObject:output_type -> spec.proto.extension.v1.s3.RestoreObjectOutput
+ 68, // [68:94] is the sub-list for method output_type
+ 42, // [42:68] is the sub-list for method input_type
+ 42, // [42:42] is the sub-list for extension type_name
+ 42, // [42:42] is the sub-list for extension extendee
+ 0, // [0:42] is the sub-list for field type_name
}
func init() { file_oss_proto_init() }
@@ -8325,7 +9106,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*RestoreObjectInput); i {
+ switch v := v.(*GlacierJobParameters); i {
case 0:
return &v.state
case 1:
@@ -8337,7 +9118,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*RestoreObjectOutput); i {
+ switch v := v.(*OutputLocation); i {
case 0:
return &v.state
case 1:
@@ -8349,7 +9130,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*CreateMultipartUploadInput); i {
+ switch v := v.(*CSVInput); i {
case 0:
return &v.state
case 1:
@@ -8361,7 +9142,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*CreateMultipartUploadOutput); i {
+ switch v := v.(*InputSerialization); i {
case 0:
return &v.state
case 1:
@@ -8373,7 +9154,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UploadPartInput); i {
+ switch v := v.(*CSVOutput); i {
case 0:
return &v.state
case 1:
@@ -8385,7 +9166,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UploadPartOutput); i {
+ switch v := v.(*OutputSerialization); i {
case 0:
return &v.state
case 1:
@@ -8397,7 +9178,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UploadPartCopyInput); i {
+ switch v := v.(*SelectParameters); i {
case 0:
return &v.state
case 1:
@@ -8409,7 +9190,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*CopyPartResult); i {
+ switch v := v.(*RestoreRequest); i {
case 0:
return &v.state
case 1:
@@ -8421,7 +9202,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UploadPartCopyOutput); i {
+ switch v := v.(*RestoreObjectInput); i {
case 0:
return &v.state
case 1:
@@ -8433,7 +9214,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*CompletedPart); i {
+ switch v := v.(*RestoreObjectOutput); i {
case 0:
return &v.state
case 1:
@@ -8445,7 +9226,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*CompletedMultipartUpload); i {
+ switch v := v.(*CreateMultipartUploadInput); i {
case 0:
return &v.state
case 1:
@@ -8457,7 +9238,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*CompleteMultipartUploadInput); i {
+ switch v := v.(*CreateMultipartUploadOutput); i {
case 0:
return &v.state
case 1:
@@ -8469,7 +9250,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*CompleteMultipartUploadOutput); i {
+ switch v := v.(*UploadPartInput); i {
case 0:
return &v.state
case 1:
@@ -8481,7 +9262,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AbortMultipartUploadInput); i {
+ switch v := v.(*UploadPartOutput); i {
case 0:
return &v.state
case 1:
@@ -8493,7 +9274,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AbortMultipartUploadOutput); i {
+ switch v := v.(*UploadPartCopyInput); i {
case 0:
return &v.state
case 1:
@@ -8505,7 +9286,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ListMultipartUploadsInput); i {
+ switch v := v.(*CopyPartResult); i {
case 0:
return &v.state
case 1:
@@ -8517,7 +9298,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*Initiator); i {
+ switch v := v.(*UploadPartCopyOutput); i {
case 0:
return &v.state
case 1:
@@ -8529,7 +9310,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*MultipartUpload); i {
+ switch v := v.(*CompletedPart); i {
case 0:
return &v.state
case 1:
@@ -8541,7 +9322,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ListMultipartUploadsOutput); i {
+ switch v := v.(*CompletedMultipartUpload); i {
case 0:
return &v.state
case 1:
@@ -8553,7 +9334,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ListObjectVersionsInput); i {
+ switch v := v.(*CompleteMultipartUploadInput); i {
case 0:
return &v.state
case 1:
@@ -8565,7 +9346,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*DeleteMarkerEntry); i {
+ switch v := v.(*CompleteMultipartUploadOutput); i {
case 0:
return &v.state
case 1:
@@ -8577,7 +9358,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ObjectVersion); i {
+ switch v := v.(*AbortMultipartUploadInput); i {
case 0:
return &v.state
case 1:
@@ -8589,7 +9370,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ListObjectVersionsOutput); i {
+ switch v := v.(*AbortMultipartUploadOutput); i {
case 0:
return &v.state
case 1:
@@ -8601,7 +9382,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*HeadObjectInput); i {
+ switch v := v.(*ListMultipartUploadsInput); i {
case 0:
return &v.state
case 1:
@@ -8613,7 +9394,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*HeadObjectOutput); i {
+ switch v := v.(*Initiator); i {
case 0:
return &v.state
case 1:
@@ -8625,7 +9406,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*IsObjectExistInput); i {
+ switch v := v.(*MultipartUpload); i {
case 0:
return &v.state
case 1:
@@ -8637,7 +9418,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*IsObjectExistOutput); i {
+ switch v := v.(*ListMultipartUploadsOutput); i {
case 0:
return &v.state
case 1:
@@ -8649,7 +9430,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*SignURLInput); i {
+ switch v := v.(*ListObjectVersionsInput); i {
case 0:
return &v.state
case 1:
@@ -8661,7 +9442,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*SignURLOutput); i {
+ switch v := v.(*DeleteMarkerEntry); i {
case 0:
return &v.state
case 1:
@@ -8673,7 +9454,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*UpdateBandwidthRateLimitInput); i {
+ switch v := v.(*ObjectVersion); i {
case 0:
return &v.state
case 1:
@@ -8685,7 +9466,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AppendObjectInput); i {
+ switch v := v.(*ListObjectVersionsOutput); i {
case 0:
return &v.state
case 1:
@@ -8697,7 +9478,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AppendObjectOutput); i {
+ switch v := v.(*HeadObjectInput); i {
case 0:
return &v.state
case 1:
@@ -8709,7 +9490,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ListPartsInput); i {
+ switch v := v.(*HeadObjectOutput); i {
case 0:
return &v.state
case 1:
@@ -8721,7 +9502,7 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*Part); i {
+ switch v := v.(*IsObjectExistInput); i {
case 0:
return &v.state
case 1:
@@ -8733,6 +9514,102 @@ func file_oss_proto_init() {
}
}
file_oss_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IsObjectExistOutput); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_oss_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SignURLInput); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_oss_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*SignURLOutput); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_oss_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*UpdateBandwidthRateLimitInput); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_oss_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*AppendObjectInput); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_oss_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*AppendObjectOutput); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_oss_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ListPartsInput); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_oss_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Part); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_oss_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListPartsOutput); i {
case 0:
return &v.state
@@ -8751,7 +9628,7 @@ func file_oss_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_oss_proto_rawDesc,
NumEnums: 0,
- NumMessages: 78,
+ NumMessages: 86,
NumExtensions: 0,
NumServices: 1,
},
diff --git a/spec/proto/extension/v1/s3/oss.proto b/spec/proto/extension/v1/s3/oss.proto
index 9d46e2113a..aa630e2f99 100644
--- a/spec/proto/extension/v1/s3/oss.proto
+++ b/spec/proto/extension/v1/s3/oss.proto
@@ -265,6 +265,8 @@ message PutObjectInput{
map meta = 13;
// The tag-set for the object. The tag-set must be encoded as URL Query parameters.
map tagging = 14;
+ // Storage class options.
+ string storage_class = 15;
}
// PutObjectOutput
@@ -634,6 +636,140 @@ message PutObjectCannedAclOutput{
string request_charged = 1;
}
+// GlacierJobParameters
+message GlacierJobParameters{
+ // Retrieval tier at which the restore will be processed.
+ // This member is required.
+ string tier = 1;
+}
+
+// OutPutLocation
+message OutputLocation{
+ // The name of the bucket where the restore results will be placed.
+ // This member is required.
+ string bucket_name = 1;
+ // The prefix that is prepended to the restore results for this request.
+ // This member is required.
+ string prefix = 2;
+}
+
+// CSVInput
+message CSVInput{
+ // Specifies that CSV field values may contain quoted record delimiters and such
+ // records should be allowed. Default value is FALSE. Setting this value to TRUE
+ // may lower performance.
+ bool allow_quoted_record_delimiter = 1;
+ // A single character used to indicate that a row should be ignored when the
+ // character is present at the start of that row. You can specify any character to
+ // indicate a comment line.
+ string comments = 2;
+ // A single character used to separate individual fields in a record. You can
+ // specify an arbitrary delimiter.
+ string field_delimiter = 3;
+ // Describes the first line of input. Valid values are:
+ //
+ // * NONE: First line is not
+ // a header.
+ //
+ // * IGNORE: First line is a header, but you can't use the header values
+ // to indicate the column in an expression. You can use column position (such as
+ // _1, _2, …) to indicate the column (SELECT s._1 FROM OBJECT s).
+ //
+ // * Use: First
+ // line is a header, and you can use the header value to identify a column in an
+ // expression (SELECT "name" FROM OBJECT).
+ string file_header_info = 4;
+ // A single character used for escaping when the field delimiter is part of the
+ // value. For example, if the value is a, b, Amazon S3 wraps this field value in
+ // quotation marks, as follows: " a , b ". Type: String Default: " Ancestors: CSV
+ string quote_character = 5;
+ // A single character used for escaping the quotation mark character inside an
+ // already escaped value. For example, the value """ a , b """ is parsed as " a , b
+ // ".
+ string quote_escape_character = 6;
+ // A single character used to separate individual records in the input. Instead of
+ // the default value, you can specify an arbitrary delimiter.
+ string record_delimiter = 7;
+}
+
+// InputSerialization
+message InputSerialization{
+ // Describes the serialization of a CSV-encoded object.
+ CSVInput csv = 1;
+ // Specifies object's compression format. Valid values: NONE, GZIP, BZIP2. Default
+ // Value: NONE.
+ string compression_type = 2;
+ // Specifies JSON as object's input serialization format.
+ string json = 3;
+}
+
+// CSVOutput
+message CSVOutput{
+ // The value used to separate individual fields in a record. You can specify an
+ // arbitrary delimiter.
+ string field_delimiter = 1;
+ // A single character used for escaping when the field delimiter is part of the
+ // value. For example, if the value is a, b, Amazon S3 wraps this field value in
+ // quotation marks, as follows: " a , b ".
+ string quote_character = 2;
+ // The single character used for escaping the quote character inside an already
+ // escaped value.
+ string quote_escape_character = 3;
+ // Indicates whether to use quotation marks around output fields.
+ //
+ // * ALWAYS: Always
+ // use quotation marks for output fields.
+ //
+ // * ASNEEDED: Use quotation marks for
+ // output fields when needed.
+ string quote_fields = 4;
+ // A single character used to separate individual records in the output. Instead of
+ // the default value, you can specify an arbitrary delimiter.
+ string record_delimiter = 5;
+}
+
+// OutputSerialization
+message OutputSerialization{
+ // Describes the serialization of CSV-encoded Select results.
+ CSVOutput csv = 1;
+ // Specifies JSON as request's output serialization format.
+ string json = 2;
+}
+
+// SelectParameters
+message SelectParameters{
+ // The expression that is used to query the object.
+ // This member is required.
+ string expression = 1;
+ // The type of the provided expression (for example, SQL).
+ // This member is required.
+ string expression_type = 2;
+ // Describes the serialization format of the object.
+ // This member is required.
+ InputSerialization input_serialization = 3;
+ // Describes how the results of the Select job are serialized.
+ // This member is required.
+ OutputSerialization output_serialization = 4;
+}
+
+// RestoreRequest
+message RestoreRequest{
+ // Lifetime of the active copy in days.
+ int32 days = 1;
+ // The optional description for the job.
+ string description = 2;
+ // S3 Glacier related parameters pertaining to this job.
+ GlacierJobParameters glacier_job_parameters = 3;
+ // Describes the location where the restore job's output is stored.
+ OutputLocation output_location = 4;
+ // Describes the parameters for Select job types.
+ SelectParameters select_parameters = 5;
+ // Retrieval tier at which the restore will be processed.
+ string tier = 6;
+ // Type of restore request.
+ string type = 7;
+}
+
// RestoreObjectInput
message RestoreObjectInput{
// Required. The name of oss store.
@@ -644,6 +780,8 @@ message RestoreObjectInput{
// Name of the object key.
// This member is required.
string key = 3;
+ // The information of restoring request.
+ RestoreRequest restore_request = 4;
// VersionId used to reference a specific version of the object.
string version_id = 5;
}
diff --git a/spec/proto/runtime/v1/appcallback.pb.go b/spec/proto/runtime/v1/appcallback.pb.go
index 0575000e72..9e6f1cc462 100644
--- a/spec/proto/runtime/v1/appcallback.pb.go
+++ b/spec/proto/runtime/v1/appcallback.pb.go
@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.28.0
+// protoc-gen-go v1.28.1
// protoc v3.17.3
// source: appcallback.proto
diff --git a/spec/proto/runtime/v1/runtime.pb.go b/spec/proto/runtime/v1/runtime.pb.go
index 60480c17ae..713c22f4fc 100644
--- a/spec/proto/runtime/v1/runtime.pb.go
+++ b/spec/proto/runtime/v1/runtime.pb.go
@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.28.0
+// protoc-gen-go v1.28.1
// protoc v3.17.3
// source: runtime.proto
From 228b28112e5c7408d925aeac04800ad3f6786d01 Mon Sep 17 00:00:00 2001
From: wlwilliamx
Date: Tue, 30 Aug 2022 14:42:12 +0800
Subject: [PATCH 02/19] chore(ceph oss test): update ceph oss test
---
components/oss/ceph/oss_test.go | 412 +-------------------------------
1 file changed, 4 insertions(+), 408 deletions(-)
diff --git a/components/oss/ceph/oss_test.go b/components/oss/ceph/oss_test.go
index e660785836..448e2e2dc5 100644
--- a/components/oss/ceph/oss_test.go
+++ b/components/oss/ceph/oss_test.go
@@ -17,20 +17,12 @@
package ceph
import (
- "bytes"
"context"
"encoding/json"
"errors"
- "fmt"
- "io"
- "io/ioutil"
- "log"
- "os"
- "testing"
- "time"
-
"github.com/stretchr/testify/assert"
"mosn.io/pkg/buffer"
+ "testing"
"mosn.io/layotto/components/oss"
)
@@ -38,9 +30,9 @@ import (
const (
confWithoutUidAndBucket = `
{
- "endpoint": "http://10.211.55.13:7480",
- "accessKeyID": "QRF1XGIPZ9TB094ETTWU",
- "accessKeySecret": "6gF61QLVduFIFDKPBzc6gKkOsQY2HpAt7vM5mRAA"
+ "endpoint": "endpoint_address",
+ "accessKeyID": "accessKey",
+ "accessKeySecret": "secret"
}
`
)
@@ -52,402 +44,6 @@ func TestCephDefaultInitFunc(t *testing.T) {
assert.Nil(t, a.client)
}
-func TestCephOss_GetObject(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- req := &oss.GetObjectInput{
- Bucket: "test.bucket",
- Key: "TestPut.txt",
- }
- out, err := cephOss.GetObject(context.Background(), req)
- assert.Nil(t, err)
-
- data, err := ioutil.ReadAll(out.DataStream)
- assert.Nil(t, err)
- fmt.Println(string(data))
-}
-
-func TestCephOss_PutObject(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- reader, err := os.Open("/Users/apple/Desktop/untitled 3.txt")
- assert.Nil(t, err)
- req := &oss.PutObjectInput{
- DataStream: reader,
- Bucket: "test.bucket",
- Key: "TestPut.txt",
- }
-
- out, err := cephOss.PutObject(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
-}
-
-func TestCephOss_DeleteObject(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- req := &oss.DeleteObjectInput{
- Bucket: "test.bucket",
- Key: "TestPut.txt",
- }
-
- out, err := cephOss.DeleteObject(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
-}
-
-func TestCephOss_DeleteObjects(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- d := &oss.Delete{
- Objects: []*oss.ObjectIdentifier{
- {Key: "TestPut.txt"},
- {Key: "a.txt"},
- },
- }
- req := &oss.DeleteObjectsInput{
- Bucket: "test.bucket",
- Delete: d,
- }
- out, err := cephOss.DeleteObjects(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
-}
-
-func TestCephOss_ListObjects(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- req := &oss.ListObjectsInput{
- Bucket: "test.bucket",
- }
-
- out, err := cephOss.ListObjects(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
-}
-
-func TestCephOss_PutObjectTagging(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- tags := map[string]string{
- "Test": "True",
- "HAHA": "haha",
- }
- req := &oss.PutObjectTaggingInput{
- Bucket: "test.bucket",
- Key: "TestPut.txt",
- Tags: tags,
- }
-
- out, err := cephOss.PutObjectTagging(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
-}
-
-func TestCephOss_GetObjectTagging(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- req := &oss.GetObjectTaggingInput{
- Bucket: "test.bucket",
- Key: "TestPut.txt",
- }
-
- out, err := cephOss.GetObjectTagging(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
-}
-
-func TestCephOss_DeleteObjectTagging(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- req := &oss.DeleteObjectTaggingInput{
- Bucket: "test.bucket",
- Key: "TestPut.txt",
- }
-
- out, err := cephOss.DeleteObjectTagging(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
-}
-
-func TestCephOss_CopyObject(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- source := oss.CopySource{
- CopySourceBucket: "test.bucket",
- CopySourceKey: "haha.txt",
- }
- req := &oss.CopyObjectInput{
- Bucket: "test.bucket",
- Key: "b.txt",
- CopySource: &source,
- }
-
- out, err := cephOss.CopyObject(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
-}
-
-func TestCephOss_PutObjectCannedAcl(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- req := &oss.PutObjectCannedAclInput{
- Bucket: "test.bucket",
- Key: "TestPut.txt",
- Acl: "private",
- }
-
- out, err := cephOss.PutObjectCannedAcl(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
-}
-
-func TestCephOss_GetObjectCannedAcl(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- req := &oss.GetObjectCannedAclInput{
- Bucket: "test.bucket",
- Key: "TestPut.txt",
- }
-
- out, err := cephOss.GetObjectCannedAcl(context.Background(), req)
- assert.Nil(t, err)
- fmt.Printf("%+v\n", out)
-}
-
-func TestCephOss_MultipartUploadWithAbort(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- key := "TestMultipartUploadWithAbort"
- uploadId := createMultipartUpload(t, cephOss, key)
-
- f, err := os.Open("/Users/apple/Downloads/TestMultipartUpload.zip")
- assert.Nil(t, err)
- uploadPart(t, cephOss, key, uploadId, 1, f)
-
- abortMultipartUpload(t, cephOss, key, uploadId)
-}
-
-func TestCephOss_MultipartUploadWithComplete(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- key := "TestMultipartUploadWithComplete"
- uploadId := createMultipartUpload(t, cephOss, key)
- f, err := os.Open("/Users/apple/Downloads/TestMultipartUpload.zip")
- assert.Nil(t, err)
- go listMultipartUploads(t, cephOss)
- eTag := uploadPart(t, cephOss, key, uploadId, 1, f)
- listParts(t, cephOss, key, uploadId)
-
- completeMultipartUpload(t, cephOss, key, uploadId, eTag, 1)
-}
-
-func TestCephOss_UploadPartCopy(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- key := "TestUploadPartCopy"
- uploadId := createMultipartUpload(t, cephOss, key)
- assert.Nil(t, err)
- eTag := uploadPartCopy(t, cephOss, uploadId, 1)
-
- completeMultipartUpload(t, cephOss, key, uploadId, eTag, 1)
-}
-
-func TestCephOss_ListObjectVersions(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- req := &oss.ListObjectVersionsInput{
- Bucket: "test.bucket",
- }
-
- out, err := cephOss.ListObjectVersions(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
-}
-
-func TestCephOss_HeadObject(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- req := &oss.HeadObjectInput{
- Bucket: "test.bucket",
- Key: "TestPut.txt",
- }
-
- out, err := cephOss.HeadObject(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
-}
-
-func TestCephOss_IsObjectExist(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- req := &oss.IsObjectExistInput{
- Bucket: "test.bucket",
- Key: "a.txt",
- }
-
- out, err := cephOss.IsObjectExist(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
-}
-
-func TestCephOss_SignURL(t *testing.T) {
- cephOss := NewCephOss()
- err := cephOss.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
- assert.Nil(t, err)
-
- req := &oss.SignURLInput{
- Bucket: "test.bucket",
- Key: "TestPut.txt",
- Method: "Get",
- }
-
- out, err := cephOss.SignURL(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
-}
-
-func createMultipartUpload(t *testing.T, cephOss oss.Oss, key string) (uploadId string) {
- fmt.Println("=====[CreateMultipartUpload]")
- req := &oss.CreateMultipartUploadInput{
- Bucket: "test.bucket",
- Key: key,
- }
- out, err := cephOss.CreateMultipartUpload(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
- return out.UploadId
-}
-func uploadPart(t *testing.T, cephOss oss.Oss, key string, uploadId string, partNumber int32, dataStream io.Reader) (etag string) {
- assert.True(t, (1 <= partNumber) && (partNumber <= 10000))
- req := &oss.UploadPartInput{
- Bucket: "test.bucket",
- Key: key,
- UploadId: uploadId,
- PartNumber: partNumber,
- DataStream: dataStream,
- }
- out, err := cephOss.UploadPart(context.Background(), req)
- assert.Nil(t, err)
- fmt.Printf("=====[UploadPart %d]\n", partNumber)
- printOutput(out)
- return out.ETag
-}
-func uploadPartCopy(t *testing.T, cephOss oss.Oss, uploadId string, partNumber int32) (etag string) {
- assert.True(t, (1 <= partNumber) && (partNumber <= 10000))
- copySource := oss.CopySource{
- CopySourceBucket: "test.bucket",
- CopySourceKey: "TestMultipartUpload",
- }
- req := &oss.UploadPartCopyInput{
- Bucket: "test.bucket",
- Key: "TestUploadPartCopy",
- UploadId: uploadId,
- PartNumber: partNumber,
- CopySource: ©Source,
- }
- out, err := cephOss.UploadPartCopy(context.Background(), req)
- assert.Nil(t, err)
- fmt.Printf("=====[UploadPartCopy %d]\n", partNumber)
- printOutput(out)
- return out.CopyPartResult.ETag
-}
-func abortMultipartUpload(t *testing.T, cephOss oss.Oss, key string, uploadId string) {
- fmt.Println("=====[AbortMultipartUpload]")
- req := &oss.AbortMultipartUploadInput{
- Bucket: "test.bucket",
- Key: key,
- UploadId: uploadId,
- }
- out, err := cephOss.AbortMultipartUpload(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
-}
-func completeMultipartUpload(t *testing.T, cephOss oss.Oss, key string, uploadId string, eTag string, partNumber int32) {
- fmt.Println("=====[CompleteMultipartUpload]")
- multipartUpload := &oss.CompletedMultipartUpload{
- Parts: []*oss.CompletedPart{
- {ETag: eTag, PartNumber: partNumber},
- },
- }
- req := &oss.CompleteMultipartUploadInput{
- Bucket: "test.bucket",
- Key: key,
- UploadId: uploadId,
- MultipartUpload: multipartUpload,
- }
- out, err := cephOss.CompleteMultipartUpload(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
-}
-func listMultipartUploads(t *testing.T, cephOss oss.Oss) {
- time.Sleep(time.Second)
- fmt.Println("=====[ListMultipartUploads]")
- req := &oss.ListMultipartUploadsInput{
- Bucket: "test.bucket",
- }
- out, err := cephOss.ListMultipartUploads(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
-}
-func listParts(t *testing.T, cephOss oss.Oss, key, uploadId string) {
- time.Sleep(time.Second)
- fmt.Println("=====[ListParts]")
- req := &oss.ListPartsInput{
- Bucket: "test.bucket",
- Key: key,
- UploadId: uploadId,
- }
- out, err := cephOss.ListParts(context.Background(), req)
- assert.Nil(t, err)
- printOutput(out)
-}
-
-func printOutput(v interface{}) {
- bs, _ := json.Marshal(v)
- var bf bytes.Buffer
- err := json.Indent(&bf, bs, "", "\t")
- if err != nil {
- log.Fatalln("ERROR:", err)
- return
- }
- fmt.Println(bf.String())
-}
-
func TestCephOss(t *testing.T) {
instance := &CephOss{}
err := instance.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
From e71cce90936515159fcff0a17ab2c15e8c2d9ab0 Mon Sep 17 00:00:00 2001
From: wlwilliamx
Date: Tue, 30 Aug 2022 22:53:19 +0800
Subject: [PATCH 03/19] chore: update goimports
---
sdk/go-sdk/client/client.go | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sdk/go-sdk/client/client.go b/sdk/go-sdk/client/client.go
index decfb69c25..12a41a8f07 100644
--- a/sdk/go-sdk/client/client.go
+++ b/sdk/go-sdk/client/client.go
@@ -19,11 +19,12 @@ package client
import (
"context"
"log"
- "mosn.io/layotto/spec/proto/extension/v1/s3"
"net"
"os"
"sync"
+ "mosn.io/layotto/spec/proto/extension/v1/s3"
+
"github.com/pkg/errors"
"google.golang.org/grpc"
From 2e2e288576eede69d26e781bb17bd7417b8268b7 Mon Sep 17 00:00:00 2001
From: wlwilliamx
Date: Tue, 30 Aug 2022 23:11:34 +0800
Subject: [PATCH 04/19] style: format code
---
components/oss/ceph/oss.go | 1 -
components/oss/ceph/oss_test.go | 3 ++-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/components/oss/ceph/oss.go b/components/oss/ceph/oss.go
index da71977100..360dc5624a 100644
--- a/components/oss/ceph/oss.go
+++ b/components/oss/ceph/oss.go
@@ -354,7 +354,6 @@ func (c *CephOss) PutObjectCannedAcl(ctx context.Context, req *oss.PutObjectCann
return &oss.PutObjectCannedAclOutput{RequestCharged: string(resp.RequestCharged)}, err
}
-
func (c *CephOss) CreateMultipartUpload(ctx context.Context, req *oss.CreateMultipartUploadInput) (*oss.CreateMultipartUploadOutput, error) {
client, err := c.getClient()
if err != nil {
diff --git a/components/oss/ceph/oss_test.go b/components/oss/ceph/oss_test.go
index 448e2e2dc5..a7a9159033 100644
--- a/components/oss/ceph/oss_test.go
+++ b/components/oss/ceph/oss_test.go
@@ -20,9 +20,10 @@ import (
"context"
"encoding/json"
"errors"
+ "testing"
+
"github.com/stretchr/testify/assert"
"mosn.io/pkg/buffer"
- "testing"
"mosn.io/layotto/components/oss"
)
From 60d0aee5f267818dbdd6c281a8ae832e7f7c6a18 Mon Sep 17 00:00:00 2001
From: wlwilliamx
Date: Fri, 16 Sep 2022 22:12:09 +0800
Subject: [PATCH 05/19] style(ceph): format code
Move components/oss/ceph/option.go, components/oss/ceph/option_test.go, components/oss/aws/option.go and components/oss/aws/option_test.go to components/oss/
---
components/oss/aws/oss.go | 8 +--
components/oss/ceph/option.go | 43 ---------------
components/oss/ceph/option_test.go | 52 ------------------
components/oss/ceph/oss.go | 70 ++++++++++++-------------
components/oss/ceph/oss_test.go | 4 +-
components/oss/{aws => }/option.go | 6 +--
components/oss/{aws => }/option_test.go | 6 +--
7 files changed, 47 insertions(+), 142 deletions(-)
delete mode 100644 components/oss/ceph/option.go
delete mode 100644 components/oss/ceph/option_test.go
rename components/oss/{aws => }/option.go (91%)
rename components/oss/{aws => }/option_test.go (93%)
diff --git a/components/oss/aws/oss.go b/components/oss/aws/oss.go
index 7573e3bd7c..674122733b 100644
--- a/components/oss/aws/oss.go
+++ b/components/oss/aws/oss.go
@@ -260,7 +260,7 @@ func (a *AwsOss) ListObjects(ctx context.Context, req *oss.ListObjectsInput) (*o
return nil, err
}
output := &oss.ListObjectsOutput{}
- err = copier.CopyWithOption(output, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{time2int64}})
+ err = copier.CopyWithOption(output, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{oss.TimeToInt64}})
// if not return NextMarker, use the value of the last Key in the response as the marker
if output.IsTruncated && output.NextMarker == "" {
index := len(output.Contents) - 1
@@ -304,7 +304,7 @@ func (a *AwsOss) CreateMultipartUpload(ctx context.Context, req *oss.CreateMulti
return nil, err
}
input := &s3.CreateMultipartUploadInput{}
- err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{int642time}})
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{oss.Int64ToTime}})
if err != nil {
log.DefaultLogger.Errorf("copy CreateMultipartUploadInput fail, err: %+v", err)
return nil, err
@@ -314,7 +314,7 @@ func (a *AwsOss) CreateMultipartUpload(ctx context.Context, req *oss.CreateMulti
return nil, err
}
output := &oss.CreateMultipartUploadOutput{}
- copier.CopyWithOption(output, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{time2int64}})
+ copier.CopyWithOption(output, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{oss.TimeToInt64}})
return output, err
}
func (a *AwsOss) UploadPart(ctx context.Context, req *oss.UploadPartInput) (*oss.UploadPartOutput, error) {
@@ -460,7 +460,7 @@ func (a *AwsOss) ListObjectVersions(ctx context.Context, req *oss.ListObjectVers
}
for _, v := range resp.Versions {
version := &oss.ObjectVersion{}
- copier.CopyWithOption(version, v, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{time2int64}})
+ copier.CopyWithOption(version, v, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{oss.TimeToInt64}})
output.Versions = append(output.Versions, version)
}
return output, err
diff --git a/components/oss/ceph/option.go b/components/oss/ceph/option.go
deleted file mode 100644
index c97cffb309..0000000000
--- a/components/oss/ceph/option.go
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-* Copyright 2021 Layotto Authors
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
- */
-
-package ceph
-
-import (
- "time"
-
- "github.com/jinzhu/copier"
-)
-
-var (
- int642time = copier.TypeConverter{
- SrcType: int64(0),
- DstType: &time.Time{},
- Fn: func(src interface{}) (interface{}, error) {
- s, _ := src.(int64)
- t := time.Unix(s, 0)
- return &t, nil
- },
- }
- time2int64 = copier.TypeConverter{
- SrcType: &time.Time{},
- DstType: int64(0),
- Fn: func(src interface{}) (interface{}, error) {
- s, _ := src.(*time.Time)
- return s.Unix(), nil
- },
- }
-)
diff --git a/components/oss/ceph/option_test.go b/components/oss/ceph/option_test.go
deleted file mode 100644
index d2a2c39652..0000000000
--- a/components/oss/ceph/option_test.go
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-* Copyright 2021 Layotto Authors
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
- */
-
-package ceph
-
-import (
- "testing"
- "time"
-
- "github.com/stretchr/testify/assert"
-
- "github.com/jinzhu/copier"
-)
-
-func TestCopierOption(t *testing.T) {
- type ValueWithInt64 struct {
- TestString string
- TestInt64toTime int64
- }
-
- type ValueWithTimer struct {
- TestString *string
- TestInt64toTime *time.Time
- }
- timer := time.Now().Unix()
- srcValue := &ValueWithInt64{TestInt64toTime: timer}
- destValue := &ValueWithTimer{}
- err := copier.CopyWithOption(destValue, srcValue, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{int642time}})
- assert.Nil(t, err)
- assert.Nil(t, destValue.TestString)
- assert.Equal(t, timer, destValue.TestInt64toTime.Unix())
-
- ti := time.Now()
- src := &ValueWithTimer{TestInt64toTime: &ti}
- dst := &ValueWithInt64{}
- err = copier.CopyWithOption(dst, src, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{time2int64}})
- assert.Nil(t, err)
- assert.Equal(t, ti.Unix(), dst.TestInt64toTime)
-}
diff --git a/components/oss/ceph/oss.go b/components/oss/ceph/oss.go
index 360dc5624a..fdec8fc6a8 100644
--- a/components/oss/ceph/oss.go
+++ b/components/oss/ceph/oss.go
@@ -39,16 +39,16 @@ import (
"mosn.io/layotto/components/pkg/utils"
)
-type CephOss struct {
+type CephOSS struct {
client *s3.Client
basicConf json.RawMessage
}
func NewCephOss() oss.Oss {
- return &CephOss{}
+ return &CephOSS{}
}
-func (c *CephOss) Init(ctx context.Context, config *oss.Config) error {
+func (c *CephOSS) Init(ctx context.Context, config *oss.Config) error {
c.basicConf = config.Metadata[oss.BasicConfiguration]
m := &utils.OssMetadata{}
err := json.Unmarshal(c.basicConf, &m)
@@ -82,7 +82,7 @@ func (c *CephOss) Init(ctx context.Context, config *oss.Config) error {
return nil
}
-func (c *CephOss) GetObject(ctx context.Context, req *oss.GetObjectInput) (*oss.GetObjectOutput, error) {
+func (c *CephOSS) GetObject(ctx context.Context, req *oss.GetObjectInput) (*oss.GetObjectOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -107,7 +107,7 @@ func (c *CephOss) GetObject(ctx context.Context, req *oss.GetObjectInput) (*oss.
return out, nil
}
-func (c *CephOss) PutObject(ctx context.Context, req *oss.PutObjectInput) (*oss.PutObjectOutput, error) {
+func (c *CephOSS) PutObject(ctx context.Context, req *oss.PutObjectInput) (*oss.PutObjectOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -133,7 +133,7 @@ func (c *CephOss) PutObject(ctx context.Context, req *oss.PutObjectInput) (*oss.
return out, err
}
-func (c *CephOss) DeleteObject(ctx context.Context, req *oss.DeleteObjectInput) (*oss.DeleteObjectOutput, error) {
+func (c *CephOSS) DeleteObject(ctx context.Context, req *oss.DeleteObjectInput) (*oss.DeleteObjectOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -155,7 +155,7 @@ func (c *CephOss) DeleteObject(ctx context.Context, req *oss.DeleteObjectInput)
return &oss.DeleteObjectOutput{DeleteMarker: resp.DeleteMarker, RequestCharged: string(resp.RequestCharged), VersionId: versionId}, err
}
-func (c *CephOss) PutObjectTagging(ctx context.Context, req *oss.PutObjectTaggingInput) (*oss.PutObjectTaggingOutput, error) {
+func (c *CephOSS) PutObjectTagging(ctx context.Context, req *oss.PutObjectTaggingInput) (*oss.PutObjectTaggingOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -175,7 +175,7 @@ func (c *CephOss) PutObjectTagging(ctx context.Context, req *oss.PutObjectTaggin
return &oss.PutObjectTaggingOutput{}, err
}
-func (c *CephOss) DeleteObjectTagging(ctx context.Context, req *oss.DeleteObjectTaggingInput) (*oss.DeleteObjectTaggingOutput, error) {
+func (c *CephOSS) DeleteObjectTagging(ctx context.Context, req *oss.DeleteObjectTaggingInput) (*oss.DeleteObjectTaggingOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -198,7 +198,7 @@ func (c *CephOss) DeleteObjectTagging(ctx context.Context, req *oss.DeleteObject
return &oss.DeleteObjectTaggingOutput{VersionId: versionId}, err
}
-func (c *CephOss) GetObjectTagging(ctx context.Context, req *oss.GetObjectTaggingInput) (*oss.GetObjectTaggingOutput, error) {
+func (c *CephOSS) GetObjectTagging(ctx context.Context, req *oss.GetObjectTaggingInput) (*oss.GetObjectTaggingOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -221,7 +221,7 @@ func (c *CephOss) GetObjectTagging(ctx context.Context, req *oss.GetObjectTaggin
return output, err
}
-func (c *CephOss) CopyObject(ctx context.Context, req *oss.CopyObjectInput) (*oss.CopyObjectOutput, error) {
+func (c *CephOSS) CopyObject(ctx context.Context, req *oss.CopyObjectInput) (*oss.CopyObjectOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -232,7 +232,7 @@ func (c *CephOss) CopyObject(ctx context.Context, req *oss.CopyObjectInput) (*os
}
input := &s3.CopyObjectInput{}
- err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{int642time}})
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{oss.Int64ToTime}})
if err != nil {
return nil, err
}
@@ -254,7 +254,7 @@ func (c *CephOss) CopyObject(ctx context.Context, req *oss.CopyObjectInput) (*os
return out, err
}
-func (c *CephOss) DeleteObjects(ctx context.Context, req *oss.DeleteObjectsInput) (*oss.DeleteObjectsOutput, error) {
+func (c *CephOSS) DeleteObjects(ctx context.Context, req *oss.DeleteObjectsInput) (*oss.DeleteObjectsOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -284,7 +284,7 @@ func (c *CephOss) DeleteObjects(ctx context.Context, req *oss.DeleteObjectsInput
return output, err
}
-func (c *CephOss) ListObjects(ctx context.Context, req *oss.ListObjectsInput) (*oss.ListObjectsOutput, error) {
+func (c *CephOSS) ListObjects(ctx context.Context, req *oss.ListObjectsInput) (*oss.ListObjectsOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -301,7 +301,7 @@ func (c *CephOss) ListObjects(ctx context.Context, req *oss.ListObjectsInput) (*
}
output := &oss.ListObjectsOutput{}
- err = copier.CopyWithOption(output, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{time2int64}})
+ err = copier.CopyWithOption(output, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{oss.TimeToInt64}})
// if not return NextMarker, use the value of the last Key in the response as the marker
if output.IsTruncated && output.NextMarker == "" {
index := len(output.Contents) - 1
@@ -310,7 +310,7 @@ func (c *CephOss) ListObjects(ctx context.Context, req *oss.ListObjectsInput) (*
return output, err
}
-func (c *CephOss) GetObjectCannedAcl(ctx context.Context, req *oss.GetObjectCannedAclInput) (*oss.GetObjectCannedAclOutput, error) {
+func (c *CephOSS) GetObjectCannedAcl(ctx context.Context, req *oss.GetObjectCannedAclInput) (*oss.GetObjectCannedAclOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -341,7 +341,7 @@ func (c *CephOss) GetObjectCannedAcl(ctx context.Context, req *oss.GetObjectCann
return out, nil
}
-func (c *CephOss) PutObjectCannedAcl(ctx context.Context, req *oss.PutObjectCannedAclInput) (*oss.PutObjectCannedAclOutput, error) {
+func (c *CephOSS) PutObjectCannedAcl(ctx context.Context, req *oss.PutObjectCannedAclInput) (*oss.PutObjectCannedAclOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -354,14 +354,14 @@ func (c *CephOss) PutObjectCannedAcl(ctx context.Context, req *oss.PutObjectCann
return &oss.PutObjectCannedAclOutput{RequestCharged: string(resp.RequestCharged)}, err
}
-func (c *CephOss) CreateMultipartUpload(ctx context.Context, req *oss.CreateMultipartUploadInput) (*oss.CreateMultipartUploadOutput, error) {
+func (c *CephOSS) CreateMultipartUpload(ctx context.Context, req *oss.CreateMultipartUploadInput) (*oss.CreateMultipartUploadOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
}
input := &s3.CreateMultipartUploadInput{}
- err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{int642time}})
+ err = copier.CopyWithOption(input, req, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{oss.Int64ToTime}})
if err != nil {
log.DefaultLogger.Errorf("copy CreateMultipartUploadInput fail, err: %+v", err)
return nil, err
@@ -372,11 +372,11 @@ func (c *CephOss) CreateMultipartUpload(ctx context.Context, req *oss.CreateMult
}
output := &oss.CreateMultipartUploadOutput{}
- copier.CopyWithOption(output, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{time2int64}})
+ copier.CopyWithOption(output, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{oss.TimeToInt64}})
return output, err
}
-func (c *CephOss) UploadPart(ctx context.Context, req *oss.UploadPartInput) (*oss.UploadPartOutput, error) {
+func (c *CephOSS) UploadPart(ctx context.Context, req *oss.UploadPartInput) (*oss.UploadPartOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -401,7 +401,7 @@ func (c *CephOss) UploadPart(ctx context.Context, req *oss.UploadPartInput) (*os
return output, err
}
-func (c *CephOss) UploadPartCopy(ctx context.Context, req *oss.UploadPartCopyInput) (*oss.UploadPartCopyOutput, error) {
+func (c *CephOSS) UploadPartCopy(ctx context.Context, req *oss.UploadPartCopyInput) (*oss.UploadPartCopyOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -430,7 +430,7 @@ func (c *CephOss) UploadPartCopy(ctx context.Context, req *oss.UploadPartCopyInp
return out, err
}
-func (c *CephOss) CompleteMultipartUpload(ctx context.Context, req *oss.CompleteMultipartUploadInput) (*oss.CompleteMultipartUploadOutput, error) {
+func (c *CephOSS) CompleteMultipartUpload(ctx context.Context, req *oss.CompleteMultipartUploadInput) (*oss.CompleteMultipartUploadOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -451,7 +451,7 @@ func (c *CephOss) CompleteMultipartUpload(ctx context.Context, req *oss.Complete
return output, err
}
-func (c *CephOss) AbortMultipartUpload(ctx context.Context, req *oss.AbortMultipartUploadInput) (*oss.AbortMultipartUploadOutput, error) {
+func (c *CephOSS) AbortMultipartUpload(ctx context.Context, req *oss.AbortMultipartUploadInput) (*oss.AbortMultipartUploadOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -473,7 +473,7 @@ func (c *CephOss) AbortMultipartUpload(ctx context.Context, req *oss.AbortMultip
return output, err
}
-func (c *CephOss) ListParts(ctx context.Context, req *oss.ListPartsInput) (*oss.ListPartsOutput, error) {
+func (c *CephOSS) ListParts(ctx context.Context, req *oss.ListPartsInput) (*oss.ListPartsOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -497,7 +497,7 @@ func (c *CephOss) ListParts(ctx context.Context, req *oss.ListPartsInput) (*oss.
return output, err
}
-func (c *CephOss) ListMultipartUploads(ctx context.Context, req *oss.ListMultipartUploadsInput) (*oss.ListMultipartUploadsOutput, error) {
+func (c *CephOSS) ListMultipartUploads(ctx context.Context, req *oss.ListMultipartUploadsInput) (*oss.ListMultipartUploadsOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -529,7 +529,7 @@ func (c *CephOss) ListMultipartUploads(ctx context.Context, req *oss.ListMultipa
return output, err
}
-func (c *CephOss) ListObjectVersions(ctx context.Context, req *oss.ListObjectVersionsInput) (*oss.ListObjectVersionsOutput, error) {
+func (c *CephOSS) ListObjectVersions(ctx context.Context, req *oss.ListObjectVersionsInput) (*oss.ListObjectVersionsOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -559,13 +559,13 @@ func (c *CephOss) ListObjectVersions(ctx context.Context, req *oss.ListObjectVer
}
for _, v := range resp.Versions {
version := &oss.ObjectVersion{}
- copier.CopyWithOption(version, v, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{time2int64}})
+ copier.CopyWithOption(version, v, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{oss.TimeToInt64}})
output.Versions = append(output.Versions, version)
}
return output, err
}
-func (c *CephOss) HeadObject(ctx context.Context, req *oss.HeadObjectInput) (*oss.HeadObjectOutput, error) {
+func (c *CephOSS) HeadObject(ctx context.Context, req *oss.HeadObjectInput) (*oss.HeadObjectOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -582,7 +582,7 @@ func (c *CephOss) HeadObject(ctx context.Context, req *oss.HeadObjectInput) (*os
return &oss.HeadObjectOutput{ResultMetadata: resp.Metadata}, nil
}
-func (c *CephOss) IsObjectExist(ctx context.Context, req *oss.IsObjectExistInput) (*oss.IsObjectExistOutput, error) {
+func (c *CephOSS) IsObjectExist(ctx context.Context, req *oss.IsObjectExistInput) (*oss.IsObjectExistOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -599,7 +599,7 @@ func (c *CephOss) IsObjectExist(ctx context.Context, req *oss.IsObjectExistInput
return &oss.IsObjectExistOutput{FileExist: true}, nil
}
-func (c *CephOss) SignURL(ctx context.Context, req *oss.SignURLInput) (*oss.SignURLOutput, error) {
+func (c *CephOSS) SignURL(ctx context.Context, req *oss.SignURLInput) (*oss.SignURLOutput, error) {
client, err := c.getClient()
if err != nil {
return nil, err
@@ -625,22 +625,22 @@ func (c *CephOss) SignURL(ctx context.Context, req *oss.SignURLInput) (*oss.Sign
}
}
-func (c *CephOss) RestoreObject(ctx context.Context, req *oss.RestoreObjectInput) (*oss.RestoreObjectOutput, error) {
+func (c *CephOSS) RestoreObject(ctx context.Context, req *oss.RestoreObjectInput) (*oss.RestoreObjectOutput, error) {
return nil, errors.New("RestoreObject method not supported on AWS")
}
-func (c *CephOss) UpdateDownloadBandwidthRateLimit(ctx context.Context, req *oss.UpdateBandwidthRateLimitInput) error {
+func (c *CephOSS) UpdateDownloadBandwidthRateLimit(ctx context.Context, req *oss.UpdateBandwidthRateLimitInput) error {
return errors.New("UpdateDownloadBandwidthRateLimit method not supported now")
}
-func (c *CephOss) UpdateUploadBandwidthRateLimit(ctx context.Context, req *oss.UpdateBandwidthRateLimitInput) error {
+func (c *CephOSS) UpdateUploadBandwidthRateLimit(ctx context.Context, req *oss.UpdateBandwidthRateLimitInput) error {
return errors.New("UpdateUploadBandwidthRateLimit method not supported now")
}
-func (c *CephOss) AppendObject(ctx context.Context, req *oss.AppendObjectInput) (*oss.AppendObjectOutput, error) {
+func (c *CephOSS) AppendObject(ctx context.Context, req *oss.AppendObjectInput) (*oss.AppendObjectOutput, error) {
return nil, errors.New("AppendObject method not supported on AWS")
}
-func (c *CephOss) getClient() (*s3.Client, error) {
+func (c *CephOSS) getClient() (*s3.Client, error) {
if c.client == nil {
return nil, utils.ErrNotInitClient
}
diff --git a/components/oss/ceph/oss_test.go b/components/oss/ceph/oss_test.go
index a7a9159033..21240a872c 100644
--- a/components/oss/ceph/oss_test.go
+++ b/components/oss/ceph/oss_test.go
@@ -39,14 +39,14 @@ const (
)
func TestCephDefaultInitFunc(t *testing.T) {
- a := &CephOss{}
+ a := &CephOSS{}
err := a.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte("hello")}})
assert.Equal(t, err, oss.ErrInvalid)
assert.Nil(t, a.client)
}
func TestCephOss(t *testing.T) {
- instance := &CephOss{}
+ instance := &CephOSS{}
err := instance.Init(context.TODO(), &oss.Config{Metadata: map[string]json.RawMessage{oss.BasicConfiguration: []byte(confWithoutUidAndBucket)}})
assert.Nil(t, err)
diff --git a/components/oss/aws/option.go b/components/oss/option.go
similarity index 91%
rename from components/oss/aws/option.go
rename to components/oss/option.go
index 7869a46acf..7511451365 100644
--- a/components/oss/aws/option.go
+++ b/components/oss/option.go
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package aws
+package oss
import (
"time"
@@ -23,7 +23,7 @@ import (
)
var (
- int642time = copier.TypeConverter{
+ Int64ToTime = copier.TypeConverter{
SrcType: int64(0),
DstType: &time.Time{},
Fn: func(src interface{}) (interface{}, error) {
@@ -32,7 +32,7 @@ var (
return &t, nil
},
}
- time2int64 = copier.TypeConverter{
+ TimeToInt64 = copier.TypeConverter{
SrcType: &time.Time{},
DstType: int64(0),
Fn: func(src interface{}) (interface{}, error) {
diff --git a/components/oss/aws/option_test.go b/components/oss/option_test.go
similarity index 93%
rename from components/oss/aws/option_test.go
rename to components/oss/option_test.go
index 4ea5f0f766..e05950517d 100644
--- a/components/oss/aws/option_test.go
+++ b/components/oss/option_test.go
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package aws
+package oss
import (
"testing"
@@ -38,7 +38,7 @@ func TestCopierOption(t *testing.T) {
timer := time.Now().Unix()
srcValue := &ValueWithInt64{TestInt64toTime: timer}
destValue := &ValueWithTimer{}
- err := copier.CopyWithOption(destValue, srcValue, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{int642time}})
+ err := copier.CopyWithOption(destValue, srcValue, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{Int64ToTime}})
assert.Nil(t, err)
assert.Nil(t, destValue.TestString)
assert.Equal(t, timer, destValue.TestInt64toTime.Unix())
@@ -46,7 +46,7 @@ func TestCopierOption(t *testing.T) {
ti := time.Now()
src := &ValueWithTimer{TestInt64toTime: &ti}
dst := &ValueWithInt64{}
- err = copier.CopyWithOption(dst, src, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{time2int64}})
+ err = copier.CopyWithOption(dst, src, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{TimeToInt64}})
assert.Nil(t, err)
assert.Equal(t, ti.Unix(), dst.TestInt64toTime)
}
From 8aa327ee68bf4c9f2d6dea06ef2c9bc54c94b6a7 Mon Sep 17 00:00:00 2001
From: wlwilliamx
Date: Fri, 16 Sep 2022 22:31:14 +0800
Subject: [PATCH 06/19] chore(proto): regenerate proto code
---
docs/api/v1/runtime.html | 3 +-
docs/api/v1/s3.html | 439 ++++++++++++++++++++++++++
docs/en/api_reference/README.md | 4 +
docs/zh/api_reference/README.md | 4 +
pkg/grpc/context_generated.go | 38 ++-
pkg/runtime/component_generated.go | 84 ++++-
pkg/runtime/config_generated.go | 14 +
pkg/runtime/context_generated.go | 9 +-
pkg/runtime/options_generated.go | 26 +-
sdk/go-sdk/client/client.go | 2 -
sdk/go-sdk/client/client_generated.go | 56 ++--
spec/proto/extension/v1/s3/oss.pb.go | 5 +-
spec/proto/runtime/v1/lifecycle.pb.go | 2 +-
13 files changed, 639 insertions(+), 47 deletions(-)
diff --git a/docs/api/v1/runtime.html b/docs/api/v1/runtime.html
index c2c75b24fc..b7ac890a07 100644
--- a/docs/api/v1/runtime.html
+++ b/docs/api/v1/runtime.html
@@ -936,7 +936,8 @@ [gRPC Service] Lifecycle
ApplyConfiguration |
DynamicConfiguration |
ApplyConfigurationResponse |
- apply the dynamic configuration |
+ Apply the dynamic configuration.
+The DynamicConfiguration here should be full configuration, not incremental configuration |
diff --git a/docs/api/v1/s3.html b/docs/api/v1/s3.html
index 4b17da38b6..821d8fd420 100644
--- a/docs/api/v1/s3.html
+++ b/docs/api/v1/s3.html
@@ -199,6 +199,14 @@ Table of Contents
MAppendObjectOutput
+
+ MCSVInput
+
+
+
+ MCSVOutput
+
+
MCompleteMultipartUploadInput
@@ -335,6 +343,10 @@ Table of Contents
MGetObjectTaggingOutput.TagsEntry
+
+ MGlacierJobParameters
+
+
MHeadObjectInput
@@ -351,6 +363,10 @@ Table of Contents
MInitiator
+
+ MInputSerialization
+
+
MIsObjectExistInput
@@ -407,6 +423,14 @@ Table of Contents
MObjectVersion
+
+ MOutputLocation
+
+
+
+ MOutputSerialization
+
+
MOwner
@@ -463,6 +487,14 @@ Table of Contents
MRestoreObjectOutput
+
+ MRestoreRequest
+
+
+
+ MSelectParameters
+
+
MSignURLInput
@@ -1005,6 +1037,156 @@ AppendObjectOutput
+
+ CSVInput
+
+
+
+
+ Field | Type | Label | Description |
+
+
+
+
+ allow_quoted_record_delimiter |
+ bool |
+ |
+ Specifies that CSV field values may contain quoted record delimiters and such
+records should be allowed. Default value is FALSE. Setting this value to TRUE
+may lower performance. |
+
+
+
+ comments |
+ string |
+ |
+ A single character used to indicate that a row should be ignored when the
+character is present at the start of that row. You can specify any character to
+indicate a comment line. |
+
+
+
+ field_delimiter |
+ string |
+ |
+ A single character used to separate individual fields in a record. You can
+specify an arbitrary delimiter. |
+
+
+
+ file_header_info |
+ string |
+ |
+ Describes the first line of input. Valid values are:
+
+* NONE: First line is not
+a header.
+
+* IGNORE: First line is a header, but you can't use the header values
+to indicate the column in an expression. You can use column position (such as
+_1, _2, …) to indicate the column (SELECT s._1 FROM OBJECT s).
+
+* Use: First
+line is a header, and you can use the header value to identify a column in an
+expression (SELECT "name" FROM OBJECT). |
+
+
+
+ quote_character |
+ string |
+ |
+ A single character used for escaping when the field delimiter is part of the
+value. For example, if the value is a, b, Amazon S3 wraps this field value in
+quotation marks, as follows: " a , b ". Type: String Default: " Ancestors: CSV |
+
+
+
+ quote_escape_character |
+ string |
+ |
+ A single character used for escaping the quotation mark character inside an
+already escaped value. For example, the value """ a , b """ is parsed as " a , b
+". |
+
+
+
+ record_delimiter |
+ string |
+ |
+ A single character used to separate individual records in the input. Instead of
+the default value, you can specify an arbitrary delimiter. |
+
+
+
+
+
+
+
+
+
+ CSVOutput
+ CSVOutput
+
+
+
+
+ Field | Type | Label | Description |
+
+
+
+
+ field_delimiter |
+ string |
+ |
+ The value used to separate individual fields in a record. You can specify an
+arbitrary delimiter. |
+
+
+
+ quote_character |
+ string |
+ |
+ A single character used for escaping when the field delimiter is part of the
+value. For example, if the value is a, b, Amazon S3 wraps this field value in
+quotation marks, as follows: " a , b ". |
+
+
+
+ quote_escape_character |
+ string |
+ |
+ The single character used for escaping the quote character inside an already
+escaped value. |
+
+
+
+ quote_fields |
+ string |
+ |
+ Indicates whether to use quotation marks around output fields.
+
+* ALWAYS: Always
+use quotation marks for output fields.
+
+* ASNEEDED: Use quotation marks for
+output fields when needed. |
+
+
+
+ record_delimiter |
+ string |
+ |
+ A single character used to separate individual records in the output. Instead of
+the default value, you can specify an arbitrary delimiter. |
+
+
+
+
+
+
+
+
+
CompleteMultipartUploadInput
@@ -2972,6 +3154,31 @@ GetObjectTa
+ GlacierJobParameters
+
GlacierJobParameters
+
+
+
+
+ Field | Type | Label | Description |
+
+
+
+
+ tier |
+ string |
+ |
+ Retrieval tier at which the restore will be processed.
+This member is required. |
+
+
+
+
+
+
+
+
+
HeadObjectInput
@@ -3197,6 +3404,45 @@ Initiator
+
+ InputSerialization
+
+
+
+
+ Field | Type | Label | Description |
+
+
+
+
+ csv |
+ CSVInput |
+ |
+ Describes the serialization of a CSV-encoded object. |
+
+
+
+ compression_type |
+ string |
+ |
+ Specifies object's compression format. Valid values: NONE, GZIP, BZIP2. Default
+Value: NONE. |
+
+
+
+ json |
+ string |
+ |
+ Specifies JSON as object's input serialization format. |
+
+
+
+
+
+
+
+
+
IsObjectExistInput
@@ -4250,6 +4496,70 @@ ObjectVersion
+ OutputLocation
+ OutPutLocation
+
+
+
+
+ Field | Type | Label | Description |
+
+
+
+
+ bucket_name |
+ string |
+ |
+ The name of the bucket where the restore results will be placed.
+This member is required. |
+
+
+
+ prefix |
+ string |
+ |
+ The prefix that is prepended to the restore results for this request.
+This member is required. |
+
+
+
+
+
+
+
+
+
+ OutputSerialization
+ OutputSerialization
+
+
+
+
+ Field | Type | Label | Description |
+
+
+
+
+ csv |
+ CSVOutput |
+ |
+ Describes the serialization of CSV-encoded Select results. |
+
+
+
+ json |
+ string |
+ |
+ Specifies JSON as request's output serialization format. |
+
+
+
+
+
+
+
+
+
Owner
Owner
@@ -4524,6 +4834,13 @@
The tag-set for the object. The tag-set must be encoded as URL Query parameters. |
+
+ storage_class |
+ string |
+ |
+ Storage class options. |
+
+
@@ -4826,6 +5143,13 @@
This member is required.
+
+ restore_request |
+ RestoreRequest |
+ |
+ The information of restoring request. |
+
+
version_id |
string |
@@ -4873,6 +5197,121 @@ RestoreObjectOutput
+ RestoreRequest
+ RestoreRequest
+
+
+
+
+ Field | Type | Label | Description |
+
+
+
+
+ days |
+ int32 |
+ |
+ Lifetime of the active copy in days. |
+
+
+
+ description |
+ string |
+ |
+ The optional description for the job. |
+
+
+
+ glacier_job_parameters |
+ GlacierJobParameters |
+ |
+ S3 Glacier related parameters pertaining to this job. |
+
+
+
+ output_location |
+ OutputLocation |
+ |
+ Describes the location where the restore job's output is stored. |
+
+
+
+ select_parameters |
+ SelectParameters |
+ |
+ Describes the parameters for Select job types. |
+
+
+
+ tier |
+ string |
+ |
+ Retrieval tier at which the restore will be processed. |
+
+
+
+ type |
+ string |
+ |
+ Type of restore request. |
+
+
+
+
+
+
+
+
+
+ SelectParameters
+ SelectParameters
+
+
+
+
+ Field | Type | Label | Description |
+
+
+
+
+ expression |
+ string |
+ |
+ The expression that is used to query the object.
+This member is required. |
+
+
+
+ expression_type |
+ string |
+ |
+ The type of the provided expression (for example, SQL).
+This member is required. |
+
+
+
+ input_serialization |
+ InputSerialization |
+ |
+ Describes the serialization format of the object.
+This member is required. |
+
+
+
+ output_serialization |
+ OutputSerialization |
+ |
+ Describes how the results of the Select job are serialized.
+This member is required. |
+
+
+
+
+
+
+
+
+
SignURLInput
diff --git a/docs/en/api_reference/README.md b/docs/en/api_reference/README.md
index 7d98ef9fcc..dfc9097e5c 100644
--- a/docs/en/api_reference/README.md
+++ b/docs/en/api_reference/README.md
@@ -11,4 +11,8 @@ These protos define Layotto's runtime API, including:
In addition to this, Layotto also provides some extension APIs, including:
+email: [spec/proto/extension/v1/email](https://mosn.io/layotto/api/v1/email.html)
+
+phone: [spec/proto/extension/v1/phone](https://mosn.io/layotto/api/v1/phone.html)
+
s3: [spec/proto/extension/v1/s3](https://mosn.io/layotto/api/v1/s3.html)
diff --git a/docs/zh/api_reference/README.md b/docs/zh/api_reference/README.md
index c5b88649d3..e0a717e23d 100644
--- a/docs/zh/api_reference/README.md
+++ b/docs/zh/api_reference/README.md
@@ -11,4 +11,8 @@ Layotto 有多个 gRPC proto 文件, 对应的接口文档在:
除此之外,Layotto 还提供了一些扩展 API,包括:
+email: [spec/proto/extension/v1/email](https://mosn.io/layotto/api/v1/email.html)
+
+phone: [spec/proto/extension/v1/phone](https://mosn.io/layotto/api/v1/phone.html)
+
s3: [spec/proto/extension/v1/s3](https://mosn.io/layotto/api/v1/s3.html)
diff --git a/pkg/grpc/context_generated.go b/pkg/grpc/context_generated.go
index 28d6d2c71b..2f6b642923 100644
--- a/pkg/grpc/context_generated.go
+++ b/pkg/grpc/context_generated.go
@@ -1,3 +1,5 @@
+// Code generated by github.com/seeflood/protoc-gen-p6 .
+
// Copyright 2021 Layotto Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -14,26 +16,27 @@
package grpc
import (
- "github.com/dapr/components-contrib/bindings"
- "github.com/dapr/components-contrib/pubsub"
- "github.com/dapr/components-contrib/secretstores"
- "github.com/dapr/components-contrib/state"
-
- "mosn.io/layotto/components/pkg/common"
- "mosn.io/layotto/pkg/runtime/lifecycle"
+ bindings "github.com/dapr/components-contrib/bindings"
+ pubsub "github.com/dapr/components-contrib/pubsub"
+ secretstores "github.com/dapr/components-contrib/secretstores"
+ state "github.com/dapr/components-contrib/state"
- "mosn.io/layotto/components/configstores"
- "mosn.io/layotto/components/custom"
- "mosn.io/layotto/components/file"
- "mosn.io/layotto/components/hello"
- "mosn.io/layotto/components/lock"
- "mosn.io/layotto/components/oss"
- "mosn.io/layotto/components/rpc"
- "mosn.io/layotto/components/sequencer"
+ configstores "mosn.io/layotto/components/configstores"
+ custom "mosn.io/layotto/components/custom"
+ email "mosn.io/layotto/components/email"
+ file "mosn.io/layotto/components/file"
+ hello "mosn.io/layotto/components/hello"
+ lock "mosn.io/layotto/components/lock"
+ oss "mosn.io/layotto/components/oss"
+ phone "mosn.io/layotto/components/phone"
+ common "mosn.io/layotto/components/pkg/common"
+ rpc "mosn.io/layotto/components/rpc"
+ sequencer "mosn.io/layotto/components/sequencer"
+ lifecycle "mosn.io/layotto/pkg/runtime/lifecycle"
)
// ApplicationContext contains all you need to construct your GrpcAPI, such as all the components.
-// For example, your `SuperState` GrpcAPI can hold the `StateStores` components and use them to implement your own `Super State API` logic.
+// For example, your "SuperState" GrpcAPI can hold the "StateStores" components and use them to implement your own "Super State API" logic.
type ApplicationContext struct {
AppId string
Hellos map[string]hello.HelloService
@@ -49,4 +52,7 @@ type ApplicationContext struct {
SecretStores map[string]secretstores.SecretStore
DynamicComponents map[lifecycle.ComponentKey]common.DynamicComponent
CustomComponent map[string]map[string]custom.Component
+ EmailService map[string]email.EmailService
+
+ PhoneCallService map[string]phone.PhoneCallService
}
diff --git a/pkg/runtime/component_generated.go b/pkg/runtime/component_generated.go
index 14c8fb770f..eda24a5da9 100644
--- a/pkg/runtime/component_generated.go
+++ b/pkg/runtime/component_generated.go
@@ -1,3 +1,5 @@
+// Code generated by github.com/seeflood/protoc-gen-p6 .
+
// Copyright 2021 Layotto Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -13,13 +15,93 @@
package runtime
+import (
+ "context"
+
+ "mosn.io/pkg/log"
+
+ email "mosn.io/layotto/components/email"
+ phone "mosn.io/layotto/components/phone"
+)
+
type extensionComponents struct {
+ emailService map[string]email.EmailService
+
+ phoneCallService map[string]phone.PhoneCallService
}
func newExtensionComponents() *extensionComponents {
- return &extensionComponents{}
+ return &extensionComponents{
+ emailService: make(map[string]email.EmailService),
+
+ phoneCallService: make(map[string]phone.PhoneCallService),
+ }
+}
+
+func (m *MosnRuntime) initEmailService(factorys ...*email.Factory) error {
+ log.DefaultLogger.Infof("[runtime] init EmailService")
+
+ // 1. register all implementation
+ reg := email.NewRegistry(m.info)
+ reg.Register(factorys...)
+ // 2. loop initializing
+ for name, config := range m.runtimeConfig.EmailService {
+ // 2.1. create the component
+ c, err := reg.Create(config.Type)
+ if err != nil {
+ m.errInt(err, "create the component %s failed", name)
+ return err
+ }
+ //inject secret to component
+ if config.Metadata, err = m.Injector.InjectSecretRef(config.SecretRef, config.Metadata); err != nil {
+ return err
+ }
+ // 2.2. init
+ if err := c.Init(context.TODO(), &config); err != nil {
+ m.errInt(err, "init the component %s failed", name)
+ return err
+ }
+ m.emailService[name] = c
+ }
+ return nil
+}
+
+func (m *MosnRuntime) initPhoneCallService(factorys ...*phone.Factory) error {
+ log.DefaultLogger.Infof("[runtime] init PhoneCallService")
+
+ // 1. register all implementation
+ reg := phone.NewRegistry(m.info)
+ reg.Register(factorys...)
+ // 2. loop initializing
+ for name, config := range m.runtimeConfig.PhoneCallService {
+ // 2.1. create the component
+ c, err := reg.Create(config.Type)
+ if err != nil {
+ m.errInt(err, "create the component %s failed", name)
+ return err
+ }
+ //inject secret to component
+ if config.Metadata, err = m.Injector.InjectSecretRef(config.SecretRef, config.Metadata); err != nil {
+ return err
+ }
+ // 2.2. init
+ if err := c.Init(context.TODO(), &config); err != nil {
+ m.errInt(err, "init the component %s failed", name)
+ return err
+ }
+ m.phoneCallService[name] = c
+ }
+ return nil
}
func (m *MosnRuntime) initExtensionComponent(s services) error {
+ if err := m.initEmailService(s.email...); err != nil {
+ return err
+ }
+
+ if err := m.initPhoneCallService(s.phone...); err != nil {
+ return err
+ }
+
return nil
}
diff --git a/pkg/runtime/config_generated.go b/pkg/runtime/config_generated.go
index 00b1894918..8cff33941f 100644
--- a/pkg/runtime/config_generated.go
+++ b/pkg/runtime/config_generated.go
@@ -1,3 +1,5 @@
+// Code generated by github.com/seeflood/protoc-gen-p6 .
+
// Copyright 2021 Layotto Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -13,5 +15,17 @@
package runtime
+import (
+ email "mosn.io/layotto/components/email"
+ phone "mosn.io/layotto/components/phone"
+)
+
type ExtensionComponentConfig struct {
+ // "mosn.io/layotto/spec/proto/extension/v1/email"
+ // email.
+ EmailService map[string]email.Config `json:"email"`
+
+ // "mosn.io/layotto/spec/proto/extension/v1/phone"
+ // phone.
+ PhoneCallService map[string]phone.Config `json:"phone"`
}
diff --git a/pkg/runtime/context_generated.go b/pkg/runtime/context_generated.go
index 08c61611cc..2d6b797608 100644
--- a/pkg/runtime/context_generated.go
+++ b/pkg/runtime/context_generated.go
@@ -1,3 +1,5 @@
+// Code generated by github.com/seeflood/protoc-gen-p6 .
+
// Copyright 2021 Layotto Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -13,7 +15,9 @@
package runtime
-import "mosn.io/layotto/pkg/grpc"
+import (
+ grpc "mosn.io/layotto/pkg/grpc"
+)
func newApplicationContext(m *MosnRuntime) *grpc.ApplicationContext {
return &grpc.ApplicationContext{
@@ -31,5 +35,8 @@ func newApplicationContext(m *MosnRuntime) *grpc.ApplicationContext {
SecretStores: m.secretStores,
DynamicComponents: m.dynamicComponents,
CustomComponent: m.customComponent,
+ EmailService: m.emailService,
+
+ PhoneCallService: m.phoneCallService,
}
}
diff --git a/pkg/runtime/options_generated.go b/pkg/runtime/options_generated.go
index f7835a2cff..4070d4c1e1 100644
--- a/pkg/runtime/options_generated.go
+++ b/pkg/runtime/options_generated.go
@@ -1,4 +1,4 @@
-// Code generated by github.com/seeflood/protoc-gen-p6.
+// Code generated by github.com/seeflood/protoc-gen-p6 .
// Copyright 2021 Layotto Authors
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,14 +16,28 @@
package runtime
import (
- s3ext "mosn.io/layotto/pkg/grpc/extension/s3"
+ email "mosn.io/layotto/components/email"
+ phone "mosn.io/layotto/components/phone"
)
type extensionComponentFactorys struct {
+ // "mosn.io/layotto/spec/proto/extension/v1/email"
+ // email.
+ email []*email.Factory
+
+ // "mosn.io/layotto/spec/proto/extension/v1/phone"
+ // phone.
+ phone []*phone.Factory
+}
+
+func WithEmailServiceFactory(email ...*email.Factory) Option {
+ return func(o *runtimeOptions) {
+ o.services.email = append(o.services.email, email...)
+ }
}
-func WithExtensionGrpcAPI() Option {
- return WithGrpcAPI(
- s3ext.NewS3Server,
- )
+func WithPhoneCallServiceFactory(phone ...*phone.Factory) Option {
+ return func(o *runtimeOptions) {
+ o.services.phone = append(o.services.phone, phone...)
+ }
}
diff --git a/sdk/go-sdk/client/client.go b/sdk/go-sdk/client/client.go
index c7990f8592..b650053671 100644
--- a/sdk/go-sdk/client/client.go
+++ b/sdk/go-sdk/client/client.go
@@ -23,8 +23,6 @@ import (
"os"
"sync"
- "mosn.io/layotto/spec/proto/extension/v1/s3"
-
"github.com/pkg/errors"
"google.golang.org/grpc"
diff --git a/sdk/go-sdk/client/client_generated.go b/sdk/go-sdk/client/client_generated.go
index 6c061cdd48..0524c93e04 100644
--- a/sdk/go-sdk/client/client_generated.go
+++ b/sdk/go-sdk/client/client_generated.go
@@ -1,34 +1,45 @@
-/*
- * Copyright 2021 Layotto Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+// Code generated by github.com/seeflood/protoc-gen-p6 .
+
+// Copyright 2021 Layotto Authors
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
package client
import (
- "google.golang.org/grpc"
+ context "context"
- v1 "mosn.io/layotto/spec/proto/runtime/v1"
+ grpc "google.golang.org/grpc"
- "mosn.io/layotto/spec/proto/extension/v1/s3"
+ email "mosn.io/layotto/spec/proto/extension/v1/email"
+ phone "mosn.io/layotto/spec/proto/extension/v1/phone"
+ s3 "mosn.io/layotto/spec/proto/extension/v1/s3"
+ v1 "mosn.io/layotto/spec/proto/runtime/v1"
)
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+
// Client is the interface for runtime client implementation.
type Client interface {
runtimeAPI
s3.ObjectStorageServiceClient
+
+ // "mosn.io/layotto/spec/proto/extension/v1/email"
+ email.EmailServiceClient
+
+ // "mosn.io/layotto/spec/proto/extension/v1/phone"
+ phone.PhoneCallServiceClient
}
// NewClientWithConnection instantiates runtime client using specific connection.
@@ -37,6 +48,11 @@ func NewClientWithConnection(conn *grpc.ClientConn) Client {
connection: conn,
protoClient: v1.NewRuntimeClient(conn),
ObjectStorageServiceClient: s3.NewObjectStorageServiceClient(conn),
+ // "mosn.io/layotto/spec/proto/extension/v1/email"
+ EmailServiceClient: email.NewEmailServiceClient(conn),
+
+ // "mosn.io/layotto/spec/proto/extension/v1/phone"
+ PhoneCallServiceClient: phone.NewPhoneCallServiceClient(conn),
}
}
@@ -45,4 +61,8 @@ type GRPCClient struct {
connection *grpc.ClientConn
protoClient v1.RuntimeClient
s3.ObjectStorageServiceClient
+ // "mosn.io/layotto/spec/proto/extension/v1/email"
+ email.EmailServiceClient
+ // "mosn.io/layotto/spec/proto/extension/v1/phone"
+ phone.PhoneCallServiceClient
}
diff --git a/spec/proto/extension/v1/s3/oss.pb.go b/spec/proto/extension/v1/s3/oss.pb.go
index b37c66a7ee..c73c2abeb7 100644
--- a/spec/proto/extension/v1/s3/oss.pb.go
+++ b/spec/proto/extension/v1/s3/oss.pb.go
@@ -8541,7 +8541,10 @@ var file_oss_proto_rawDesc = []byte{
0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72,
0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x00, 0x42,
- 0x2f, 0x5a, 0x2d, 0x6d, 0x6f, 0x73, 0x6e, 0x2e, 0x69, 0x6f, 0x2f, 0x6c, 0x61, 0x79, 0x6f, 0x74,
+ 0x5f, 0x0a, 0x1a, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78,
+ 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x33, 0x42, 0x12, 0x4f,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x74,
+ 0x6f, 0x5a, 0x2d, 0x6d, 0x6f, 0x73, 0x6e, 0x2e, 0x69, 0x6f, 0x2f, 0x6c, 0x61, 0x79, 0x6f, 0x74,
0x74, 0x6f, 0x2f, 0x73, 0x70, 0x65, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78,
0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x33, 0x3b, 0x73, 0x33,
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
diff --git a/spec/proto/runtime/v1/lifecycle.pb.go b/spec/proto/runtime/v1/lifecycle.pb.go
index c27533794e..86dfb9e917 100644
--- a/spec/proto/runtime/v1/lifecycle.pb.go
+++ b/spec/proto/runtime/v1/lifecycle.pb.go
@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
-// protoc-gen-go v1.28.0
+// protoc-gen-go v1.28.1
// protoc v3.17.3
// source: lifecycle.proto
From 1d2be8a771b5bd86e65878bf0d2c1f25dd4ae443 Mon Sep 17 00:00:00 2001
From: wlwilliamx
Date: Sat, 17 Sep 2022 21:08:14 +0800
Subject: [PATCH 07/19] fix(typo): fix a typo
---
components/oss/aws/oss_test.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/components/oss/aws/oss_test.go b/components/oss/aws/oss_test.go
index 78d893e65f..07cb9a21a4 100644
--- a/components/oss/aws/oss_test.go
+++ b/components/oss/aws/oss_test.go
@@ -152,7 +152,7 @@ func TestDeepCopy(t *testing.T) {
VersionId: &value,
}
tovalue := &oss.ObjectVersion{}
- err := copier.CopyWithOption(tovalue, fromValue, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{time2int64}})
+ err := copier.CopyWithOption(tovalue, fromValue, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{oss.TimeToInt64}})
assert.Nil(t, err)
assert.Equal(t, tovalue.Owner.DisplayName, value)
}
From 24356a5febbf9c1171634848311c06da3ef87a19 Mon Sep 17 00:00:00 2001
From: wlwilliamx
Date: Thu, 22 Sep 2022 20:33:30 +0800
Subject: [PATCH 08/19] fix(typo): fix a typo
---
components/oss/ceph/oss.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/components/oss/ceph/oss.go b/components/oss/ceph/oss.go
index fdec8fc6a8..27939e2d19 100644
--- a/components/oss/ceph/oss.go
+++ b/components/oss/ceph/oss.go
@@ -626,7 +626,7 @@ func (c *CephOSS) SignURL(ctx context.Context, req *oss.SignURLInput) (*oss.Sign
}
func (c *CephOSS) RestoreObject(ctx context.Context, req *oss.RestoreObjectInput) (*oss.RestoreObjectOutput, error) {
- return nil, errors.New("RestoreObject method not supported on AWS")
+ return nil, errors.New("RestoreObject method not supported on CEPH")
}
func (c *CephOSS) UpdateDownloadBandwidthRateLimit(ctx context.Context, req *oss.UpdateBandwidthRateLimitInput) error {
@@ -637,7 +637,7 @@ func (c *CephOSS) UpdateUploadBandwidthRateLimit(ctx context.Context, req *oss.U
return errors.New("UpdateUploadBandwidthRateLimit method not supported now")
}
func (c *CephOSS) AppendObject(ctx context.Context, req *oss.AppendObjectInput) (*oss.AppendObjectOutput, error) {
- return nil, errors.New("AppendObject method not supported on AWS")
+ return nil, errors.New("AppendObject method not supported on CEPH")
}
func (c *CephOSS) getClient() (*s3.Client, error) {
From 7b3d8f5e57d2361419ccbab333944f93396abc0a Mon Sep 17 00:00:00 2001
From: wlwilliamx
Date: Thu, 22 Sep 2022 20:42:08 +0800
Subject: [PATCH 09/19] fix(typo): fix a typo
---
components/oss/ceph/oss_test.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/components/oss/ceph/oss_test.go b/components/oss/ceph/oss_test.go
index 21240a872c..52f2536e68 100644
--- a/components/oss/ceph/oss_test.go
+++ b/components/oss/ceph/oss_test.go
@@ -51,7 +51,7 @@ func TestCephOss(t *testing.T) {
assert.Nil(t, err)
appendObjectResp, err := instance.AppendObject(context.TODO(), &oss.AppendObjectInput{})
- assert.Equal(t, errors.New("AppendObject method not supported on AWS"), err)
+ assert.Equal(t, errors.New("AppendObject method not supported on CEPH"), err)
assert.Nil(t, appendObjectResp)
_, err = instance.AbortMultipartUpload(context.TODO(), &oss.AbortMultipartUploadInput{})
From fd653b25a1cbcc9d467ccd0c4f99f87f2c632b7e Mon Sep 17 00:00:00 2001
From: wlwilliamx
Date: Mon, 10 Oct 2022 16:51:42 +0800
Subject: [PATCH 10/19] test(oss): add some UT
---
components/oss/aws/oss.go | 71 ++++-----------------
components/oss/ceph/oss.go | 87 +++-----------------------
components/oss/ceph/oss_test.go | 21 ++++++-
components/oss/option.go | 105 ++++++++++++++++++++++++++++++++
4 files changed, 144 insertions(+), 140 deletions(-)
diff --git a/components/oss/aws/oss.go b/components/oss/aws/oss.go
index 674122733b..40c6768e17 100644
--- a/components/oss/aws/oss.go
+++ b/components/oss/aws/oss.go
@@ -89,13 +89,8 @@ func (a *AwsOss) GetObject(ctx context.Context, req *oss.GetObjectInput) (*oss.G
if err != nil {
return nil, err
}
- out := &oss.GetObjectOutput{}
- err = copier.Copy(out, ob)
- if err != nil {
- return nil, err
- }
- out.DataStream = ob.Body
- return out, nil
+
+ return oss.GetGetObjectOutput(ob)
}
func (a *AwsOss) PutObject(ctx context.Context, req *oss.PutObjectInput) (*oss.PutObjectOutput, error) {
@@ -259,14 +254,8 @@ func (a *AwsOss) ListObjects(ctx context.Context, req *oss.ListObjectsInput) (*o
if err != nil {
return nil, err
}
- output := &oss.ListObjectsOutput{}
- err = copier.CopyWithOption(output, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{oss.TimeToInt64}})
- // if not return NextMarker, use the value of the last Key in the response as the marker
- if output.IsTruncated && output.NextMarker == "" {
- index := len(output.Contents) - 1
- output.NextMarker = output.Contents[index].Key
- }
- return output, err
+
+ return oss.GetListObjectsOutput(resp)
}
func (a *AwsOss) GetObjectCannedAcl(ctx context.Context, req *oss.GetObjectCannedAclInput) (*oss.GetObjectCannedAclOutput, error) {
return nil, errors.New("GetObjectCannedAcl method not supported on AWS")
@@ -332,12 +321,8 @@ func (a *AwsOss) UploadPart(ctx context.Context, req *oss.UploadPartInput) (*oss
if err != nil {
return nil, err
}
- output := &oss.UploadPartOutput{}
- err = copier.Copy(output, resp)
- if err != nil {
- return nil, err
- }
- return output, err
+
+ return oss.GetUploadPartOutput(resp)
}
func (a *AwsOss) UploadPartCopy(ctx context.Context, req *oss.UploadPartCopyInput) (*oss.UploadPartCopyOutput, error) {
client, err := a.getClient()
@@ -357,12 +342,8 @@ func (a *AwsOss) UploadPartCopy(ctx context.Context, req *oss.UploadPartCopyInpu
}
input.CopySource = ©Source
resp, err := client.UploadPartCopy(ctx, input)
- if err != nil {
- return nil, err
- }
- output := &oss.UploadPartCopyOutput{}
- err = copier.Copy(output, resp)
- return output, err
+
+ return oss.GetUploadPartCopyOutput(resp)
}
func (a *AwsOss) CompleteMultipartUpload(ctx context.Context, req *oss.CompleteMultipartUploadInput) (*oss.CompleteMultipartUploadOutput, error) {
client, err := a.getClient()
@@ -417,20 +398,8 @@ func (a *AwsOss) ListMultipartUploads(ctx context.Context, req *oss.ListMultipar
if err != nil {
return nil, err
}
- output := &oss.ListMultipartUploadsOutput{CommonPrefixes: []string{}, Uploads: []*oss.MultipartUpload{}}
- err = copier.Copy(output, resp)
- if err != nil {
- return nil, err
- }
- for _, v := range resp.CommonPrefixes {
- output.CommonPrefixes = append(output.CommonPrefixes, *v.Prefix)
- }
- for _, v := range resp.Uploads {
- upload := &oss.MultipartUpload{}
- copier.CopyWithOption(upload, v, copier.Option{IgnoreEmpty: true, DeepCopy: true})
- output.Uploads = append(output.Uploads, upload)
- }
- return output, err
+
+ return oss.GetListMultipartUploadsOutput(resp)
}
func (a *AwsOss) ListObjectVersions(ctx context.Context, req *oss.ListObjectVersionsInput) (*oss.ListObjectVersionsOutput, error) {
client, err := a.getClient()
@@ -446,24 +415,8 @@ func (a *AwsOss) ListObjectVersions(ctx context.Context, req *oss.ListObjectVers
if err != nil {
return nil, err
}
- output := &oss.ListObjectVersionsOutput{}
- err = copier.Copy(output, resp)
- if err != nil {
- return nil, err
- }
- for _, v := range resp.CommonPrefixes {
- output.CommonPrefixes = append(output.CommonPrefixes, *v.Prefix)
- }
- for _, v := range resp.DeleteMarkers {
- entry := &oss.DeleteMarkerEntry{IsLatest: v.IsLatest, Key: *v.Key, Owner: &oss.Owner{DisplayName: *v.Owner.DisplayName, ID: *v.Owner.ID}, VersionId: *v.VersionId}
- output.DeleteMarkers = append(output.DeleteMarkers, entry)
- }
- for _, v := range resp.Versions {
- version := &oss.ObjectVersion{}
- copier.CopyWithOption(version, v, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{oss.TimeToInt64}})
- output.Versions = append(output.Versions, version)
- }
- return output, err
+
+ return oss.GetListObjectVersionsOutput(resp)
}
func (a *AwsOss) HeadObject(ctx context.Context, req *oss.HeadObjectInput) (*oss.HeadObjectOutput, error) {
diff --git a/components/oss/ceph/oss.go b/components/oss/ceph/oss.go
index 27939e2d19..2f84d54950 100644
--- a/components/oss/ceph/oss.go
+++ b/components/oss/ceph/oss.go
@@ -17,7 +17,6 @@
package ceph
import (
- "bytes"
"context"
"encoding/json"
"errors"
@@ -98,13 +97,7 @@ func (c *CephOSS) GetObject(ctx context.Context, req *oss.GetObjectInput) (*oss.
return nil, err
}
- out := &oss.GetObjectOutput{}
- err = copier.Copy(out, ob)
- if err != nil {
- return nil, err
- }
- out.DataStream = ob.Body
- return out, nil
+ return oss.GetGetObjectOutput(ob)
}
func (c *CephOSS) PutObject(ctx context.Context, req *oss.PutObjectInput) (*oss.PutObjectOutput, error) {
@@ -300,14 +293,7 @@ func (c *CephOSS) ListObjects(ctx context.Context, req *oss.ListObjectsInput) (*
return nil, err
}
- output := &oss.ListObjectsOutput{}
- err = copier.CopyWithOption(output, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{oss.TimeToInt64}})
- // if not return NextMarker, use the value of the last Key in the response as the marker
- if output.IsTruncated && output.NextMarker == "" {
- index := len(output.Contents) - 1
- output.NextMarker = output.Contents[index].Key
- }
- return output, err
+ return oss.GetListObjectsOutput(resp)
}
func (c *CephOSS) GetObjectCannedAcl(ctx context.Context, req *oss.GetObjectCannedAclInput) (*oss.GetObjectCannedAclOutput, error) {
@@ -326,19 +312,7 @@ func (c *CephOSS) GetObjectCannedAcl(ctx context.Context, req *oss.GetObjectCann
return nil, err
}
- out := &oss.GetObjectCannedAclOutput{}
- err = copier.CopyWithOption(out, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
- if err != nil {
- return nil, err
- }
- bs, _ := json.Marshal(resp.Grants)
- var bf bytes.Buffer
- err = json.Indent(&bf, bs, "", "\t")
- if err != nil {
- return nil, err
- }
- out.CannedAcl = bf.String()
- return out, nil
+ return oss.GetGetObjectCannedAclOutput(resp)
}
func (c *CephOSS) PutObjectCannedAcl(ctx context.Context, req *oss.PutObjectCannedAclInput) (*oss.PutObjectCannedAclOutput, error) {
@@ -393,12 +367,7 @@ func (c *CephOSS) UploadPart(ctx context.Context, req *oss.UploadPartInput) (*os
return nil, err
}
- output := &oss.UploadPartOutput{}
- err = copier.Copy(output, resp)
- if err != nil {
- return nil, err
- }
- return output, err
+ return oss.GetUploadPartOutput(resp)
}
func (c *CephOSS) UploadPartCopy(ctx context.Context, req *oss.UploadPartCopyInput) (*oss.UploadPartCopyOutput, error) {
@@ -422,12 +391,7 @@ func (c *CephOSS) UploadPartCopy(ctx context.Context, req *oss.UploadPartCopyInp
return nil, err
}
- out := &oss.UploadPartCopyOutput{}
- err = copier.CopyWithOption(out, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
- if err != nil {
- return nil, err
- }
- return out, err
+ return oss.GetUploadPartCopyOutput(resp)
}
func (c *CephOSS) CompleteMultipartUpload(ctx context.Context, req *oss.CompleteMultipartUploadInput) (*oss.CompleteMultipartUploadOutput, error) {
@@ -489,12 +453,7 @@ func (c *CephOSS) ListParts(ctx context.Context, req *oss.ListPartsInput) (*oss.
return nil, err
}
- output := &oss.ListPartsOutput{}
- err = copier.CopyWithOption(output, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
- if err != nil {
- return nil, err
- }
- return output, err
+ return oss.GetListPartsOutput(resp)
}
func (c *CephOSS) ListMultipartUploads(ctx context.Context, req *oss.ListMultipartUploadsInput) (*oss.ListMultipartUploadsOutput, error) {
@@ -513,20 +472,7 @@ func (c *CephOSS) ListMultipartUploads(ctx context.Context, req *oss.ListMultipa
return nil, err
}
- output := &oss.ListMultipartUploadsOutput{CommonPrefixes: []string{}, Uploads: []*oss.MultipartUpload{}}
- err = copier.Copy(output, resp)
- if err != nil {
- return nil, err
- }
- for _, v := range resp.CommonPrefixes {
- output.CommonPrefixes = append(output.CommonPrefixes, *v.Prefix)
- }
- for _, v := range resp.Uploads {
- upload := &oss.MultipartUpload{}
- copier.CopyWithOption(upload, v, copier.Option{IgnoreEmpty: true, DeepCopy: true})
- output.Uploads = append(output.Uploads, upload)
- }
- return output, err
+ return oss.GetListMultipartUploadsOutput(resp)
}
func (c *CephOSS) ListObjectVersions(ctx context.Context, req *oss.ListObjectVersionsInput) (*oss.ListObjectVersionsOutput, error) {
@@ -545,24 +491,7 @@ func (c *CephOSS) ListObjectVersions(ctx context.Context, req *oss.ListObjectVer
return nil, err
}
- output := &oss.ListObjectVersionsOutput{}
- err = copier.Copy(output, resp)
- if err != nil {
- return nil, err
- }
- for _, v := range resp.CommonPrefixes {
- output.CommonPrefixes = append(output.CommonPrefixes, *v.Prefix)
- }
- for _, v := range resp.DeleteMarkers {
- entry := &oss.DeleteMarkerEntry{IsLatest: v.IsLatest, Key: *v.Key, Owner: &oss.Owner{DisplayName: *v.Owner.DisplayName, ID: *v.Owner.ID}, VersionId: *v.VersionId}
- output.DeleteMarkers = append(output.DeleteMarkers, entry)
- }
- for _, v := range resp.Versions {
- version := &oss.ObjectVersion{}
- copier.CopyWithOption(version, v, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{oss.TimeToInt64}})
- output.Versions = append(output.Versions, version)
- }
- return output, err
+ return oss.GetListObjectVersionsOutput(resp)
}
func (c *CephOSS) HeadObject(ctx context.Context, req *oss.HeadObjectInput) (*oss.HeadObjectOutput, error) {
diff --git a/components/oss/ceph/oss_test.go b/components/oss/ceph/oss_test.go
index 52f2536e68..0781ec7b69 100644
--- a/components/oss/ceph/oss_test.go
+++ b/components/oss/ceph/oss_test.go
@@ -20,10 +20,10 @@ import (
"context"
"encoding/json"
"errors"
- "testing"
-
+ "github.com/aws/aws-sdk-go-v2/service/s3"
"github.com/stretchr/testify/assert"
"mosn.io/pkg/buffer"
+ "testing"
"mosn.io/layotto/components/oss"
)
@@ -129,4 +129,21 @@ func TestCephOss(t *testing.T) {
err = instance.UpdateUploadBandwidthRateLimit(context.TODO(), &oss.UpdateBandwidthRateLimitInput{})
assert.NotNil(t, err)
+
+ _, err = oss.GetGetObjectOutput(&s3.GetObjectOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetListObjectsOutput(&s3.ListObjectsOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetGetObjectCannedAclOutput(&s3.GetObjectAclOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetUploadPartOutput(&s3.UploadPartOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetUploadPartCopyOutput(&s3.UploadPartCopyOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetListPartsOutput(&s3.ListPartsOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetListMultipartUploadsOutput(&s3.ListMultipartUploadsOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetListObjectVersionsOutput(&s3.ListObjectVersionsOutput{})
+ assert.Nil(t, err)
}
diff --git a/components/oss/option.go b/components/oss/option.go
index 7511451365..019e8191e9 100644
--- a/components/oss/option.go
+++ b/components/oss/option.go
@@ -17,6 +17,9 @@
package oss
import (
+ "bytes"
+ "encoding/json"
+ "github.com/aws/aws-sdk-go-v2/service/s3"
"time"
"github.com/jinzhu/copier"
@@ -41,3 +44,105 @@ var (
},
}
)
+
+func GetGetObjectOutput(ob *s3.GetObjectOutput) (*GetObjectOutput, error) {
+ out := &GetObjectOutput{}
+ err := copier.Copy(out, ob)
+ if err != nil {
+ return nil, err
+ }
+ out.DataStream = ob.Body
+ return out, nil
+}
+
+func GetListObjectsOutput(resp *s3.ListObjectsOutput) (*ListObjectsOutput, error) {
+ output := &ListObjectsOutput{}
+ err := copier.CopyWithOption(output, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{TimeToInt64}})
+ // if not return NextMarker, use the value of the last Key in the response as the marker
+ if output.IsTruncated && output.NextMarker == "" {
+ index := len(output.Contents) - 1
+ output.NextMarker = output.Contents[index].Key
+ }
+ return output, err
+}
+
+func GetGetObjectCannedAclOutput(resp *s3.GetObjectAclOutput) (*GetObjectCannedAclOutput, error) {
+ out := &GetObjectCannedAclOutput{}
+ err := copier.CopyWithOption(out, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ bs, _ := json.Marshal(resp.Grants)
+ var bf bytes.Buffer
+ err = json.Indent(&bf, bs, "", "\t")
+ if err != nil {
+ return nil, err
+ }
+ out.CannedAcl = bf.String()
+ return out, nil
+}
+
+func GetUploadPartOutput(resp *s3.UploadPartOutput) (*UploadPartOutput, error) {
+ output := &UploadPartOutput{}
+ err := copier.Copy(output, resp)
+ if err != nil {
+ return nil, err
+ }
+ return output, err
+}
+
+func GetUploadPartCopyOutput(resp *s3.UploadPartCopyOutput) (*UploadPartCopyOutput, error) {
+ out := &UploadPartCopyOutput{}
+ err := copier.CopyWithOption(out, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ return out, err
+}
+
+func GetListPartsOutput(resp *s3.ListPartsOutput) (*ListPartsOutput, error) {
+ output := &ListPartsOutput{}
+ err := copier.CopyWithOption(output, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ return output, err
+}
+
+func GetListMultipartUploadsOutput(resp *s3.ListMultipartUploadsOutput) (*ListMultipartUploadsOutput, error) {
+ output := &ListMultipartUploadsOutput{CommonPrefixes: []string{}, Uploads: []*MultipartUpload{}}
+ err := copier.Copy(output, resp)
+ if err != nil {
+ return nil, err
+ }
+ for _, v := range resp.CommonPrefixes {
+ output.CommonPrefixes = append(output.CommonPrefixes, *v.Prefix)
+ }
+ for _, v := range resp.Uploads {
+ upload := &MultipartUpload{}
+ copier.CopyWithOption(upload, v, copier.Option{IgnoreEmpty: true, DeepCopy: true})
+ output.Uploads = append(output.Uploads, upload)
+ }
+ return output, err
+}
+
+func GetListObjectVersionsOutput(resp *s3.ListObjectVersionsOutput) (*ListObjectVersionsOutput, error) {
+ output := &ListObjectVersionsOutput{}
+ err := copier.Copy(output, resp)
+ if err != nil {
+ return nil, err
+ }
+ for _, v := range resp.CommonPrefixes {
+ output.CommonPrefixes = append(output.CommonPrefixes, *v.Prefix)
+ }
+ for _, v := range resp.DeleteMarkers {
+ entry := &DeleteMarkerEntry{IsLatest: v.IsLatest, Key: *v.Key, Owner: &Owner{DisplayName: *v.Owner.DisplayName, ID: *v.Owner.ID}, VersionId: *v.VersionId}
+ output.DeleteMarkers = append(output.DeleteMarkers, entry)
+ }
+ for _, v := range resp.Versions {
+ version := &ObjectVersion{}
+ copier.CopyWithOption(version, v, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{TimeToInt64}})
+ output.Versions = append(output.Versions, version)
+ }
+ return output, err
+}
From f7b8e60a7082732e16ae5589685ca1d9acfa9e4a Mon Sep 17 00:00:00 2001
From: wlwilliamx
Date: Mon, 10 Oct 2022 17:23:37 +0800
Subject: [PATCH 11/19] fix(typo): fix a typo
---
components/oss/aws/oss.go | 3 +++
1 file changed, 3 insertions(+)
diff --git a/components/oss/aws/oss.go b/components/oss/aws/oss.go
index 40c6768e17..16c25d8fba 100644
--- a/components/oss/aws/oss.go
+++ b/components/oss/aws/oss.go
@@ -342,6 +342,9 @@ func (a *AwsOss) UploadPartCopy(ctx context.Context, req *oss.UploadPartCopyInpu
}
input.CopySource = ©Source
resp, err := client.UploadPartCopy(ctx, input)
+ if err != nil {
+ return nil, err
+ }
return oss.GetUploadPartCopyOutput(resp)
}
From ef7f46958c64b58d637152720d251d17c77837e1 Mon Sep 17 00:00:00 2001
From: wlwilliamx
Date: Thu, 13 Oct 2022 10:34:36 +0800
Subject: [PATCH 12/19] chore(goimports): goimports
---
components/oss/option.go | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/components/oss/option.go b/components/oss/option.go
index 019e8191e9..66a1561632 100644
--- a/components/oss/option.go
+++ b/components/oss/option.go
@@ -19,9 +19,10 @@ package oss
import (
"bytes"
"encoding/json"
- "github.com/aws/aws-sdk-go-v2/service/s3"
"time"
+ "github.com/aws/aws-sdk-go-v2/service/s3"
+
"github.com/jinzhu/copier"
)
From e3c9ac304a37aa5e19014949448fbe7ead45f6bc Mon Sep 17 00:00:00 2001
From: wlwilliamx
Date: Thu, 13 Oct 2022 10:44:10 +0800
Subject: [PATCH 13/19] chore(goimports): goimports
---
components/oss/ceph/oss_test.go | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/components/oss/ceph/oss_test.go b/components/oss/ceph/oss_test.go
index 0781ec7b69..5f718f9c89 100644
--- a/components/oss/ceph/oss_test.go
+++ b/components/oss/ceph/oss_test.go
@@ -20,10 +20,11 @@ import (
"context"
"encoding/json"
"errors"
+ "testing"
+
"github.com/aws/aws-sdk-go-v2/service/s3"
"github.com/stretchr/testify/assert"
"mosn.io/pkg/buffer"
- "testing"
"mosn.io/layotto/components/oss"
)
From 6537c0bd258b47dbb10e51b0fe76c6ad327ba9cc Mon Sep 17 00:00:00 2001
From: wlwilliamx
Date: Thu, 13 Oct 2022 11:10:50 +0800
Subject: [PATCH 14/19] test(oss): add some UT
---
components/oss/aws/oss_test.go | 19 +++++++++++++++++++
components/oss/option_test.go | 20 ++++++++++++++++++++
2 files changed, 39 insertions(+)
diff --git a/components/oss/aws/oss_test.go b/components/oss/aws/oss_test.go
index 07cb9a21a4..5104dbe308 100644
--- a/components/oss/aws/oss_test.go
+++ b/components/oss/aws/oss_test.go
@@ -23,6 +23,8 @@ import (
"testing"
"time"
+ "github.com/aws/aws-sdk-go-v2/service/s3"
+
"github.com/jinzhu/copier"
"github.com/aws/aws-sdk-go-v2/service/s3/types"
@@ -136,6 +138,23 @@ func TestAwsOss(t *testing.T) {
err = instance.UpdateUploadBandwidthRateLimit(context.TODO(), &oss.UpdateBandwidthRateLimitInput{})
assert.NotNil(t, err)
+
+ _, err = oss.GetGetObjectOutput(&s3.GetObjectOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetListObjectsOutput(&s3.ListObjectsOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetGetObjectCannedAclOutput(&s3.GetObjectAclOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetUploadPartOutput(&s3.UploadPartOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetUploadPartCopyOutput(&s3.UploadPartCopyOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetListPartsOutput(&s3.ListPartsOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetListMultipartUploadsOutput(&s3.ListMultipartUploadsOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetListObjectVersionsOutput(&s3.ListObjectVersionsOutput{})
+ assert.Nil(t, err)
}
func TestDeepCopy(t *testing.T) {
diff --git a/components/oss/option_test.go b/components/oss/option_test.go
index e05950517d..e6afbc1986 100644
--- a/components/oss/option_test.go
+++ b/components/oss/option_test.go
@@ -17,6 +17,7 @@
package oss
import (
+ "github.com/aws/aws-sdk-go-v2/service/s3"
"testing"
"time"
@@ -50,3 +51,22 @@ func TestCopierOption(t *testing.T) {
assert.Nil(t, err)
assert.Equal(t, ti.Unix(), dst.TestInt64toTime)
}
+
+func TestGetOutput(t *testing.T) {
+ _, err := GetGetObjectOutput(&s3.GetObjectOutput{})
+ assert.Nil(t, err)
+ _, err = GetListObjectsOutput(&s3.ListObjectsOutput{})
+ assert.Nil(t, err)
+ _, err = GetGetObjectCannedAclOutput(&s3.GetObjectAclOutput{})
+ assert.Nil(t, err)
+ _, err = GetUploadPartOutput(&s3.UploadPartOutput{})
+ assert.Nil(t, err)
+ _, err = GetUploadPartCopyOutput(&s3.UploadPartCopyOutput{})
+ assert.Nil(t, err)
+ _, err = GetListPartsOutput(&s3.ListPartsOutput{})
+ assert.Nil(t, err)
+ _, err = GetListMultipartUploadsOutput(&s3.ListMultipartUploadsOutput{})
+ assert.Nil(t, err)
+ _, err = GetListObjectVersionsOutput(&s3.ListObjectVersionsOutput{})
+ assert.Nil(t, err)
+}
From 98581ed57019f3039fe9fd5ca0c7634c8b64cbd1 Mon Sep 17 00:00:00 2001
From: wlwilliamx
Date: Thu, 13 Oct 2022 11:12:33 +0800
Subject: [PATCH 15/19] chore(goimports): goimports file
---
components/oss/option_test.go | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/components/oss/option_test.go b/components/oss/option_test.go
index e6afbc1986..c0e01efcc8 100644
--- a/components/oss/option_test.go
+++ b/components/oss/option_test.go
@@ -17,10 +17,11 @@
package oss
import (
- "github.com/aws/aws-sdk-go-v2/service/s3"
"testing"
"time"
+ "github.com/aws/aws-sdk-go-v2/service/s3"
+
"github.com/stretchr/testify/assert"
"github.com/jinzhu/copier"
From 754058fd8383b10ba6051b55ca25a93df7a7f9f0 Mon Sep 17 00:00:00 2001
From: wlwilliamx
Date: Thu, 13 Oct 2022 16:12:42 +0800
Subject: [PATCH 16/19] chore(oss): extract output functions and add UT for
these functions
---
components/oss/aws/oss.go | 18 ++++----------
components/oss/aws/oss_test.go | 10 ++++++++
components/oss/ceph/oss.go | 32 ++++--------------------
components/oss/ceph/oss_test.go | 12 +++++++++
components/oss/option.go | 44 +++++++++++++++++++++++++++++++++
components/oss/option_test.go | 12 +++++++++
6 files changed, 88 insertions(+), 40 deletions(-)
diff --git a/components/oss/aws/oss.go b/components/oss/aws/oss.go
index 16c25d8fba..29fc1dd6d8 100644
--- a/components/oss/aws/oss.go
+++ b/components/oss/aws/oss.go
@@ -109,12 +109,8 @@ func (a *AwsOss) PutObject(ctx context.Context, req *oss.PutObjectInput) (*oss.P
if err != nil {
return nil, err
}
- out := &oss.PutObjectOutput{}
- err = copier.Copy(out, resp)
- if err != nil {
- return nil, err
- }
- return out, err
+
+ return oss.GetPutObjectOutput(resp)
}
func (a *AwsOss) DeleteObject(ctx context.Context, req *oss.DeleteObjectInput) (*oss.DeleteObjectOutput, error) {
@@ -130,7 +126,7 @@ func (a *AwsOss) DeleteObject(ctx context.Context, req *oss.DeleteObjectInput) (
if err != nil {
return nil, err
}
- return &oss.DeleteObjectOutput{DeleteMarker: resp.DeleteMarker, RequestCharged: string(resp.RequestCharged), VersionId: *resp.VersionId}, err
+ return oss.GetDeleteObjectOutput(resp)
}
func (a *AwsOss) PutObjectTagging(ctx context.Context, req *oss.PutObjectTaggingInput) (*oss.PutObjectTaggingOutput, error) {
@@ -164,7 +160,7 @@ func (a *AwsOss) DeleteObjectTagging(ctx context.Context, req *oss.DeleteObjectT
if err != nil {
return nil, err
}
- return &oss.DeleteObjectTaggingOutput{VersionId: *resp.VersionId}, err
+ return oss.GetDeleteObjectTaggingOutput(resp)
}
func (a *AwsOss) GetObjectTagging(ctx context.Context, req *oss.GetObjectTaggingInput) (*oss.GetObjectTaggingOutput, error) {
@@ -182,11 +178,7 @@ func (a *AwsOss) GetObjectTagging(ctx context.Context, req *oss.GetObjectTagging
return nil, err
}
- output := &oss.GetObjectTaggingOutput{Tags: map[string]string{}}
- for _, tags := range resp.TagSet {
- output.Tags[*tags.Key] = *tags.Value
- }
- return output, err
+ return oss.GetGetObjectTaggingOutput(resp)
}
func (a *AwsOss) CopyObject(ctx context.Context, req *oss.CopyObjectInput) (*oss.CopyObjectOutput, error) {
diff --git a/components/oss/aws/oss_test.go b/components/oss/aws/oss_test.go
index 5104dbe308..8773a11d4b 100644
--- a/components/oss/aws/oss_test.go
+++ b/components/oss/aws/oss_test.go
@@ -23,6 +23,8 @@ import (
"testing"
"time"
+ "github.com/aws/aws-sdk-go-v2/feature/s3/manager"
+
"github.com/aws/aws-sdk-go-v2/service/s3"
"github.com/jinzhu/copier"
@@ -141,6 +143,14 @@ func TestAwsOss(t *testing.T) {
_, err = oss.GetGetObjectOutput(&s3.GetObjectOutput{})
assert.Nil(t, err)
+ _, err = oss.GetPutObjectOutput(&manager.UploadOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetDeleteObjectOutput(&s3.DeleteObjectOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetDeleteObjectOutput(&s3.DeleteObjectOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetGetObjectTaggingOutput(&s3.GetObjectTaggingOutput{})
+ assert.Nil(t, err)
_, err = oss.GetListObjectsOutput(&s3.ListObjectsOutput{})
assert.Nil(t, err)
_, err = oss.GetGetObjectCannedAclOutput(&s3.GetObjectAclOutput{})
diff --git a/components/oss/ceph/oss.go b/components/oss/ceph/oss.go
index 2f84d54950..561d6c320d 100644
--- a/components/oss/ceph/oss.go
+++ b/components/oss/ceph/oss.go
@@ -118,12 +118,7 @@ func (c *CephOSS) PutObject(ctx context.Context, req *oss.PutObjectInput) (*oss.
return nil, err
}
- out := &oss.PutObjectOutput{}
- err = copier.Copy(out, resp)
- if err != nil {
- return nil, err
- }
- return out, err
+ return oss.GetPutObjectOutput(resp)
}
func (c *CephOSS) DeleteObject(ctx context.Context, req *oss.DeleteObjectInput) (*oss.DeleteObjectOutput, error) {
@@ -141,11 +136,7 @@ func (c *CephOSS) DeleteObject(ctx context.Context, req *oss.DeleteObjectInput)
return nil, err
}
- versionId := ""
- if resp.VersionId != nil {
- versionId = *resp.VersionId
- }
- return &oss.DeleteObjectOutput{DeleteMarker: resp.DeleteMarker, RequestCharged: string(resp.RequestCharged), VersionId: versionId}, err
+ return oss.GetDeleteObjectOutput(resp)
}
func (c *CephOSS) PutObjectTagging(ctx context.Context, req *oss.PutObjectTaggingInput) (*oss.PutObjectTaggingOutput, error) {
@@ -184,11 +175,7 @@ func (c *CephOSS) DeleteObjectTagging(ctx context.Context, req *oss.DeleteObject
return nil, err
}
- versionId := ""
- if resp.VersionId != nil {
- versionId = *resp.VersionId
- }
- return &oss.DeleteObjectTaggingOutput{VersionId: versionId}, err
+ return oss.GetDeleteObjectTaggingOutput(resp)
}
func (c *CephOSS) GetObjectTagging(ctx context.Context, req *oss.GetObjectTaggingInput) (*oss.GetObjectTaggingOutput, error) {
@@ -207,11 +194,7 @@ func (c *CephOSS) GetObjectTagging(ctx context.Context, req *oss.GetObjectTaggin
return nil, err
}
- output := &oss.GetObjectTaggingOutput{Tags: map[string]string{}}
- for _, tags := range resp.TagSet {
- output.Tags[*tags.Key] = *tags.Value
- }
- return output, err
+ return oss.GetGetObjectTaggingOutput(resp)
}
func (c *CephOSS) CopyObject(ctx context.Context, req *oss.CopyObjectInput) (*oss.CopyObjectOutput, error) {
@@ -239,12 +222,7 @@ func (c *CephOSS) CopyObject(ctx context.Context, req *oss.CopyObjectInput) (*os
return nil, err
}
- out := &oss.CopyObjectOutput{}
- err = copier.CopyWithOption(out, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
- if err != nil {
- return nil, err
- }
- return out, err
+ return oss.GetCopyObjectOutput(resp)
}
func (c *CephOSS) DeleteObjects(ctx context.Context, req *oss.DeleteObjectsInput) (*oss.DeleteObjectsOutput, error) {
diff --git a/components/oss/ceph/oss_test.go b/components/oss/ceph/oss_test.go
index 5f718f9c89..9154099658 100644
--- a/components/oss/ceph/oss_test.go
+++ b/components/oss/ceph/oss_test.go
@@ -22,6 +22,8 @@ import (
"errors"
"testing"
+ "github.com/aws/aws-sdk-go-v2/feature/s3/manager"
+
"github.com/aws/aws-sdk-go-v2/service/s3"
"github.com/stretchr/testify/assert"
"mosn.io/pkg/buffer"
@@ -133,6 +135,16 @@ func TestCephOss(t *testing.T) {
_, err = oss.GetGetObjectOutput(&s3.GetObjectOutput{})
assert.Nil(t, err)
+ _, err = oss.GetPutObjectOutput(&manager.UploadOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetDeleteObjectOutput(&s3.DeleteObjectOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetDeleteObjectOutput(&s3.DeleteObjectOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetGetObjectTaggingOutput(&s3.GetObjectTaggingOutput{})
+ assert.Nil(t, err)
+ _, err = oss.GetCopyObjectOutput(&s3.CopyObjectOutput{})
+ assert.Nil(t, err)
_, err = oss.GetListObjectsOutput(&s3.ListObjectsOutput{})
assert.Nil(t, err)
_, err = oss.GetGetObjectCannedAclOutput(&s3.GetObjectAclOutput{})
diff --git a/components/oss/option.go b/components/oss/option.go
index 66a1561632..dadafde6e6 100644
--- a/components/oss/option.go
+++ b/components/oss/option.go
@@ -21,6 +21,8 @@ import (
"encoding/json"
"time"
+ "github.com/aws/aws-sdk-go-v2/feature/s3/manager"
+
"github.com/aws/aws-sdk-go-v2/service/s3"
"github.com/jinzhu/copier"
@@ -56,6 +58,48 @@ func GetGetObjectOutput(ob *s3.GetObjectOutput) (*GetObjectOutput, error) {
return out, nil
}
+func GetPutObjectOutput(resp *manager.UploadOutput) (*PutObjectOutput, error) {
+ out := &PutObjectOutput{}
+ err := copier.Copy(out, resp)
+ if err != nil {
+ return nil, err
+ }
+ return out, err
+}
+
+func GetDeleteObjectOutput(resp *s3.DeleteObjectOutput) (*DeleteObjectOutput, error) {
+ versionId := ""
+ if resp.VersionId != nil {
+ versionId = *resp.VersionId
+ }
+ return &DeleteObjectOutput{DeleteMarker: resp.DeleteMarker, RequestCharged: string(resp.RequestCharged), VersionId: versionId}, nil
+}
+
+func GetDeleteObjectTaggingOutput(resp *s3.DeleteObjectTaggingOutput) (*DeleteObjectTaggingOutput, error) {
+ versionId := ""
+ if resp.VersionId != nil {
+ versionId = *resp.VersionId
+ }
+ return &DeleteObjectTaggingOutput{VersionId: versionId}, nil
+}
+
+func GetGetObjectTaggingOutput(resp *s3.GetObjectTaggingOutput) (*GetObjectTaggingOutput, error) {
+ output := &GetObjectTaggingOutput{Tags: map[string]string{}}
+ for _, tags := range resp.TagSet {
+ output.Tags[*tags.Key] = *tags.Value
+ }
+ return output, nil
+}
+
+func GetCopyObjectOutput(resp *s3.CopyObjectOutput) (*CopyObjectOutput, error) {
+ out := &CopyObjectOutput{}
+ err := copier.CopyWithOption(out, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{}})
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
func GetListObjectsOutput(resp *s3.ListObjectsOutput) (*ListObjectsOutput, error) {
output := &ListObjectsOutput{}
err := copier.CopyWithOption(output, resp, copier.Option{IgnoreEmpty: true, DeepCopy: true, Converters: []copier.TypeConverter{TimeToInt64}})
diff --git a/components/oss/option_test.go b/components/oss/option_test.go
index c0e01efcc8..fc50b159a5 100644
--- a/components/oss/option_test.go
+++ b/components/oss/option_test.go
@@ -20,6 +20,8 @@ import (
"testing"
"time"
+ "github.com/aws/aws-sdk-go-v2/feature/s3/manager"
+
"github.com/aws/aws-sdk-go-v2/service/s3"
"github.com/stretchr/testify/assert"
@@ -56,6 +58,16 @@ func TestCopierOption(t *testing.T) {
func TestGetOutput(t *testing.T) {
_, err := GetGetObjectOutput(&s3.GetObjectOutput{})
assert.Nil(t, err)
+ _, err = GetPutObjectOutput(&manager.UploadOutput{})
+ assert.Nil(t, err)
+ _, err = GetDeleteObjectOutput(&s3.DeleteObjectOutput{})
+ assert.Nil(t, err)
+ _, err = GetDeleteObjectTaggingOutput(&s3.DeleteObjectTaggingOutput{})
+ assert.Nil(t, err)
+ _, err = GetGetObjectTaggingOutput(&s3.GetObjectTaggingOutput{})
+ assert.Nil(t, err)
+ _, err = GetCopyObjectOutput(&s3.CopyObjectOutput{})
+ assert.Nil(t, err)
_, err = GetListObjectsOutput(&s3.ListObjectsOutput{})
assert.Nil(t, err)
_, err = GetGetObjectCannedAclOutput(&s3.GetObjectAclOutput{})
From 0928526f85c254b114cb20acf8045ccd885faff9 Mon Sep 17 00:00:00 2001
From: seeflood
Date: Thu, 13 Oct 2022 16:54:50 +0800
Subject: [PATCH 17/19] Update cmd/layotto/main.go
---
cmd/layotto/main.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cmd/layotto/main.go b/cmd/layotto/main.go
index 749138d3d3..277ff01f15 100644
--- a/cmd/layotto/main.go
+++ b/cmd/layotto/main.go
@@ -291,7 +291,7 @@ func NewRuntimeGrpcServer(data json.RawMessage, opts ...grpc.ServerOption) (mgrp
runtime.WithOssFactory(
oss.NewFactory("aws.oss", aws_oss.NewAwsOss),
oss.NewFactory("aliyun.oss", aliyun_oss.NewAliyunOss),
- oss.NewFactory("ceph.oss", ceph_oss.NewCephOss),
+ oss.NewFactory("ceph", ceph_oss.NewCephOss),
),
// PubSub
runtime.WithPubSubFactory(
From 3818890d04be8379473077b5787a7bfae485e291 Mon Sep 17 00:00:00 2001
From: seeflood
Date: Thu, 13 Oct 2022 16:55:58 +0800
Subject: [PATCH 18/19] Update cmd/layotto_without_xds/main.go
---
cmd/layotto_without_xds/main.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cmd/layotto_without_xds/main.go b/cmd/layotto_without_xds/main.go
index 4d1603ed1a..cbce73d265 100644
--- a/cmd/layotto_without_xds/main.go
+++ b/cmd/layotto_without_xds/main.go
@@ -410,7 +410,7 @@ func NewRuntimeGrpcServer(data json.RawMessage, opts ...grpc.ServerOption) (mgrp
runtime.WithOssFactory(
oss.NewFactory("aws.oss", aws_oss.NewAwsOss),
oss.NewFactory("aliyun.oss", aliyun_oss.NewAliyunOss),
- oss.NewFactory("ceph.oss", ceph_oss.NewCephOss),
+ oss.NewFactory("ceph", ceph_oss.NewCephOss),
),
// Sequencer
From cb4356ae50d66c4c0e739adc16c02a2df89cf0ab Mon Sep 17 00:00:00 2001
From: seeflood
Date: Thu, 13 Oct 2022 16:56:05 +0800
Subject: [PATCH 19/19] Update cmd/layotto_multiple_api/main.go
---
cmd/layotto_multiple_api/main.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cmd/layotto_multiple_api/main.go b/cmd/layotto_multiple_api/main.go
index 3c5ff332e6..bc0d51af5e 100644
--- a/cmd/layotto_multiple_api/main.go
+++ b/cmd/layotto_multiple_api/main.go
@@ -305,7 +305,7 @@ func NewRuntimeGrpcServer(data json.RawMessage, opts ...grpc.ServerOption) (mgrp
runtime.WithOssFactory(
oss.NewFactory("aws.oss", aws_oss.NewAwsOss),
oss.NewFactory("aliyun.oss", aliyun_oss.NewAliyunOss),
- oss.NewFactory("ceph.oss", ceph_oss.NewCephOss),
+ oss.NewFactory("ceph", ceph_oss.NewCephOss),
),
// PubSub