diff --git a/api/sgtm.proto b/api/sgtm.proto index a073da8..9ce6a24 100644 --- a/api/sgtm.proto +++ b/api/sgtm.proto @@ -152,7 +152,7 @@ message Post { /// track - string genre = 40; + string genre = 40 [deprecated = true]; // replaced by 'tags' uint64 duration = 41; string artwork_url = 42 [(go.field) = {name: 'ArtworkURL'}]; double bpm = 43 [(go.field) = {name: 'BPM'}]; @@ -163,6 +163,7 @@ message Post { int64 provider_created_at = 48; int64 provider_updated_at = 49; string provider_metadata = 50; + string tags = 51; // comma separated list of tags // soundcloud post string soundcloud_secret_token = 80 [(go.field) = {name: 'SoundCloudSecretToken'}]; @@ -171,10 +172,10 @@ message Post { // ipfs post string ipfs_cid = 90 [(go.field) = {name: 'IPFSCID'}]; - string mime_type = 51 [(go.field) = {name: 'MIMEType'}]; - int64 size_bytes = 52; - string file_extension = 53; - string attachment_filename = 54; + string mime_type = 91 [(go.field) = {name: 'MIMEType'}]; + int64 size_bytes = 92; + string file_extension = 93; + string attachment_filename = 94; /// tracking activities int64 target_user_id = 101 [(go.field) = {name: 'TargetUserID'}]; diff --git a/gen.sum b/gen.sum index 948b0f7..dd855e5 100644 --- a/gen.sum +++ b/gen.sum @@ -1,2 +1,2 @@ -873204724335abf75ed3c3b0751767b0a99f9ac5 ./api/sgtm.proto +25048065676ed51ac4b42c4d8d56ab1d7e0d9205 ./api/sgtm.proto 034f32b1cbdac6ec6e02c1244eed70c90c127adf Makefile diff --git a/pkg/sgtm/page_home.tmpl.html b/pkg/sgtm/page_home.tmpl.html index 4885a9c..de15997 100644 --- a/pkg/sgtm/page_home.tmpl.html +++ b/pkg/sgtm/page_home.tmpl.html @@ -62,7 +62,7 @@
{{.Title}}
- {{with .Genre}}
📁 Genre: {{.}}
{{end}} + {{with .TagList}}
📁 Tags: {{range .}}{{.}} {{end}}
{{end}} {{if .Duration}}
⏱ Duration: {{.GoDuration | prettyDuration}}
{{end}}
diff --git a/pkg/sgtm/page_new.go b/pkg/sgtm/page_new.go index 03a2826..a6662ec 100644 --- a/pkg/sgtm/page_new.go +++ b/pkg/sgtm/page_new.go @@ -173,18 +173,23 @@ func (svc *Service) newPage(box *packr.Box) func(w http.ResponseWriter, r *http. post.ProviderCreatedAt = createdAt.UnixNano() post.SortDate = createdAt.UnixNano() } - post.Genre = track.Genre + tags := append( + []string{track.Genre}, + strings.Split(track.TagList, " ")..., + ) + post.Tags = strings.Join(tags, ", ") post.Duration = track.Duration post.ArtworkURL = strings.ReplaceAll(track.ArtworkUrl, "-large.jpg", "-t500x500.jpg") post.ISRC = track.ISRC post.BPM = track.Bpm post.KeySignature = track.KeySignature post.ProviderDescription = track.Description - // post.Body = track.Description - /*post.Tags = track.TagList - post.WaveformURL = track.WaveformURL - post.License = track.License - track.User*/ + /* + post.Body = track.Description + post.WaveformURL = track.WaveformURL + post.License = track.License + track.User + */ if track.Downloadable { post.DownloadURL = track.DownloadUrl } diff --git a/pkg/sgtm/page_post.tmpl.html b/pkg/sgtm/page_post.tmpl.html index a372c5c..0b0a3e9 100644 --- a/pkg/sgtm/page_post.tmpl.html +++ b/pkg/sgtm/page_post.tmpl.html @@ -41,7 +41,7 @@

{{.Post.Post.Title}}

{{end}}{{end}} {{with .Post.Post.SafeDescription}}{{. | markdownify}}{{end}} - {{with .Post.Post.Genre}}
📁 Genre: {{.}}
{{end}} + {{with .Post.Post.TagList}}
📁 Tags: {{range .}}{{.}} {{end}}
{{end}} {{if .Post.Post.Duration}}
⏱ Duration: {{.Post.Post.GoDuration | prettyDuration}}
{{end}} {{with .Post.Post.BPM}}
⏩ BPM: {{.}}
diff --git a/pkg/sgtm/page_profile.tmpl.html b/pkg/sgtm/page_profile.tmpl.html index 9f50ec0..1a1aea8 100644 --- a/pkg/sgtm/page_profile.tmpl.html +++ b/pkg/sgtm/page_profile.tmpl.html @@ -40,7 +40,7 @@

🎶 Tracks by {{.Profile.User.DisplayName}}

{{.SortDate | fromUnixNano | prettyAgo}}
{{with .SafeDescription}}

{{.}}

{{end}} - {{with .Genre}}
📁 Genre: {{.}}
{{end}} + {{with .TagList}}
📁 Tags: {{range .}}{{.}} {{end}}
{{end}} {{if .Duration}}
⏱ Duration: {{.GoDuration | prettyDuration}}
{{end}}
diff --git a/pkg/sgtm/processing_worker.go b/pkg/sgtm/processing_worker.go index b72e5a1..13fec11 100644 --- a/pkg/sgtm/processing_worker.go +++ b/pkg/sgtm/processing_worker.go @@ -16,7 +16,7 @@ type processingWorkerDriver struct { started bool wg *sync.WaitGroup - trackMigrations []func(*sgtmpb.Post) error + trackMigrations []func(*sgtmpb.Post, *gorm.DB) error } func (svc *Service) StartProcessingWorker() error { @@ -72,12 +72,12 @@ func (svc *Service) processingLoop(i int) error { return fmt.Errorf("failed to fetch tracks that need to be processed: %w", err) } - err = svc.rwdb().Transaction(func(db *gorm.DB) error { + err = svc.rwdb().Transaction(func(tx *gorm.DB) error { for _, entryPtr := range outdated { entry := entryPtr version := 1 for _, migration := range svc.processingWorker.trackMigrations { - err := migration(entry) + err := migration(entry, tx) if err != nil { entry.ProcessingError = err.Error() break @@ -85,7 +85,7 @@ func (svc *Service) processingLoop(i int) error { entry.ProcessingVersion = int64(version) version++ } - if err := db. + if err := tx. Model(&entry). Updates(map[string]interface{}{ "processing_version": entry.ProcessingVersion, @@ -113,7 +113,19 @@ func (svc *Service) processingLoop(i int) error { } func (svc *Service) setupMigrations() { - svc.processingWorker.trackMigrations = []func(*sgtmpb.Post) error{ + svc.processingWorker.trackMigrations = []func(*sgtmpb.Post, *gorm.DB) error{ + // migrate track.Genre to track.Tags + func(post *sgtmpb.Post, tx *gorm.DB) error { + if post.Tags != "" || post.Genre == "" { // nolint:staticcheck + // nothing to do + return nil + } + + return tx.Model(post).Updates(map[string]interface{}{ + "tags": post.Genre, // nolint:staticcheck + "genre": "", + }).Error + }, /* // FIXME: try downloading the mp3 locally func(post *sgtmpb.Post) error { return fmt.Errorf("not implemented") }, diff --git a/pkg/sgtmpb/helpers.go b/pkg/sgtmpb/helpers.go index 1e06f73..7b27197 100644 --- a/pkg/sgtmpb/helpers.go +++ b/pkg/sgtmpb/helpers.go @@ -50,6 +50,17 @@ func (p *Post) Filter() { func (p *Post) IsSoundCloud() bool { return p.GetProvider() == Provider_SoundCloud } func (p *Post) IsIPFS() bool { return p.GetProvider() == Provider_IPFS } +func (p *Post) TagList() []string { + if strings.TrimSpace(p.Tags) == "" { + return nil + } + tags := strings.Split(p.Tags, ",") + for idx, tag := range tags { + tags[idx] = strings.TrimSpace(tag) + } + return tags +} + // User func (u *User) ApplyDefaults() { diff --git a/pkg/sgtmpb/sgtm.pb.go b/pkg/sgtmpb/sgtm.pb.go index 1aa19e1..d03a24a 100644 --- a/pkg/sgtmpb/sgtm.pb.go +++ b/pkg/sgtmpb/sgtm.pb.go @@ -768,43 +768,45 @@ type Post struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ID int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty" gorm:"primary_key"` - CreatedAt int64 `protobuf:"varint,2,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty" gorm:"autocreatetime:nano"` - UpdatedAt int64 `protobuf:"varint,3,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty" gorm:"autoupdatetime:nano"` - DeletedAt int64 `protobuf:"varint,4,opt,name=deleted_at,json=deletedAt,proto3" json:"deleted_at,omitempty"` - Author *User `protobuf:"bytes,10,opt,name=author,proto3" json:"author,omitempty"` - AuthorID int64 `protobuf:"varint,11,opt,name=author_id,json=authorId,proto3" json:"author_id,omitempty"` - Title string `protobuf:"bytes,12,opt,name=title,proto3" json:"title,omitempty"` - Slug string `protobuf:"bytes,13,opt,name=slug,proto3" json:"slug,omitempty"` - Kind Post_Kind `protobuf:"varint,14,opt,name=kind,proto3,enum=sgtm.Post_Kind" json:"kind,omitempty"` - Visibility Visibility `protobuf:"varint,15,opt,name=visibility,proto3,enum=sgtm.Visibility" json:"visibility,omitempty"` - URL string `protobuf:"bytes,16,opt,name=url,proto3" json:"url,omitempty"` - Provider Provider `protobuf:"varint,17,opt,name=provider,proto3,enum=sgtm.Provider" json:"provider,omitempty"` - Body string `protobuf:"bytes,18,opt,name=body,proto3" json:"body,omitempty"` - SortDate int64 `protobuf:"varint,19,opt,name=sort_date,json=sortDate,proto3" json:"sort_date,omitempty"` - ProcessingVersion int64 `protobuf:"varint,20,opt,name=processing_version,json=processingVersion,proto3" json:"processing_version,omitempty"` - ProcessingError string `protobuf:"bytes,21,opt,name=processing_error,json=processingError,proto3" json:"processing_error,omitempty"` - Genre string `protobuf:"bytes,40,opt,name=genre,proto3" json:"genre,omitempty"` - Duration uint64 `protobuf:"varint,41,opt,name=duration,proto3" json:"duration,omitempty"` - ArtworkURL string `protobuf:"bytes,42,opt,name=artwork_url,json=artworkUrl,proto3" json:"artwork_url,omitempty"` - BPM float64 `protobuf:"fixed64,43,opt,name=bpm,proto3" json:"bpm,omitempty"` - KeySignature string `protobuf:"bytes,44,opt,name=key_signature,json=keySignature,proto3" json:"key_signature,omitempty"` - ISRC string `protobuf:"bytes,45,opt,name=isrc,proto3" json:"isrc,omitempty"` - ProviderDescription string `protobuf:"bytes,46,opt,name=provider_description,json=providerDescription,proto3" json:"provider_description,omitempty"` - DownloadURL string `protobuf:"bytes,47,opt,name=provider_download_url,json=providerDownloadUrl,proto3" json:"provider_download_url,omitempty"` - ProviderCreatedAt int64 `protobuf:"varint,48,opt,name=provider_created_at,json=providerCreatedAt,proto3" json:"provider_created_at,omitempty"` - ProviderUpdatedAt int64 `protobuf:"varint,49,opt,name=provider_updated_at,json=providerUpdatedAt,proto3" json:"provider_updated_at,omitempty"` - ProviderMetadata string `protobuf:"bytes,50,opt,name=provider_metadata,json=providerMetadata,proto3" json:"provider_metadata,omitempty"` + ID int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty" gorm:"primary_key"` + CreatedAt int64 `protobuf:"varint,2,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty" gorm:"autocreatetime:nano"` + UpdatedAt int64 `protobuf:"varint,3,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty" gorm:"autoupdatetime:nano"` + DeletedAt int64 `protobuf:"varint,4,opt,name=deleted_at,json=deletedAt,proto3" json:"deleted_at,omitempty"` + Author *User `protobuf:"bytes,10,opt,name=author,proto3" json:"author,omitempty"` + AuthorID int64 `protobuf:"varint,11,opt,name=author_id,json=authorId,proto3" json:"author_id,omitempty"` + Title string `protobuf:"bytes,12,opt,name=title,proto3" json:"title,omitempty"` + Slug string `protobuf:"bytes,13,opt,name=slug,proto3" json:"slug,omitempty"` + Kind Post_Kind `protobuf:"varint,14,opt,name=kind,proto3,enum=sgtm.Post_Kind" json:"kind,omitempty"` + Visibility Visibility `protobuf:"varint,15,opt,name=visibility,proto3,enum=sgtm.Visibility" json:"visibility,omitempty"` + URL string `protobuf:"bytes,16,opt,name=url,proto3" json:"url,omitempty"` + Provider Provider `protobuf:"varint,17,opt,name=provider,proto3,enum=sgtm.Provider" json:"provider,omitempty"` + Body string `protobuf:"bytes,18,opt,name=body,proto3" json:"body,omitempty"` + SortDate int64 `protobuf:"varint,19,opt,name=sort_date,json=sortDate,proto3" json:"sort_date,omitempty"` + ProcessingVersion int64 `protobuf:"varint,20,opt,name=processing_version,json=processingVersion,proto3" json:"processing_version,omitempty"` + ProcessingError string `protobuf:"bytes,21,opt,name=processing_error,json=processingError,proto3" json:"processing_error,omitempty"` + // Deprecated: Do not use. + Genre string `protobuf:"bytes,40,opt,name=genre,proto3" json:"genre,omitempty"` // replaced by 'tags' + Duration uint64 `protobuf:"varint,41,opt,name=duration,proto3" json:"duration,omitempty"` + ArtworkURL string `protobuf:"bytes,42,opt,name=artwork_url,json=artworkUrl,proto3" json:"artwork_url,omitempty"` + BPM float64 `protobuf:"fixed64,43,opt,name=bpm,proto3" json:"bpm,omitempty"` + KeySignature string `protobuf:"bytes,44,opt,name=key_signature,json=keySignature,proto3" json:"key_signature,omitempty"` + ISRC string `protobuf:"bytes,45,opt,name=isrc,proto3" json:"isrc,omitempty"` + ProviderDescription string `protobuf:"bytes,46,opt,name=provider_description,json=providerDescription,proto3" json:"provider_description,omitempty"` + DownloadURL string `protobuf:"bytes,47,opt,name=provider_download_url,json=providerDownloadUrl,proto3" json:"provider_download_url,omitempty"` + ProviderCreatedAt int64 `protobuf:"varint,48,opt,name=provider_created_at,json=providerCreatedAt,proto3" json:"provider_created_at,omitempty"` + ProviderUpdatedAt int64 `protobuf:"varint,49,opt,name=provider_updated_at,json=providerUpdatedAt,proto3" json:"provider_updated_at,omitempty"` + ProviderMetadata string `protobuf:"bytes,50,opt,name=provider_metadata,json=providerMetadata,proto3" json:"provider_metadata,omitempty"` + Tags string `protobuf:"bytes,51,opt,name=tags,proto3" json:"tags,omitempty"` // comma separated list of tags // soundcloud post SoundCloudSecretToken string `protobuf:"bytes,80,opt,name=soundcloud_secret_token,json=soundcloudSecretToken,proto3" json:"soundcloud_secret_token,omitempty"` SoundCloudID uint64 `protobuf:"varint,81,opt,name=soundcloud_id,json=soundcloudId,proto3" json:"soundcloud_id,omitempty"` SoundCloudKind Post_SoundCloudKind `protobuf:"varint,83,opt,name=soundcloud_kind,json=soundcloudKind,proto3,enum=sgtm.Post_SoundCloudKind" json:"soundcloud_kind,omitempty"` // ipfs post IPFSCID string `protobuf:"bytes,90,opt,name=ipfs_cid,json=ipfsCid,proto3" json:"ipfs_cid,omitempty"` - MIMEType string `protobuf:"bytes,51,opt,name=mime_type,json=mimeType,proto3" json:"mime_type,omitempty"` - SizeBytes int64 `protobuf:"varint,52,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"` - FileExtension string `protobuf:"bytes,53,opt,name=file_extension,json=fileExtension,proto3" json:"file_extension,omitempty"` - AttachmentFilename string `protobuf:"bytes,54,opt,name=attachment_filename,json=attachmentFilename,proto3" json:"attachment_filename,omitempty"` + MIMEType string `protobuf:"bytes,91,opt,name=mime_type,json=mimeType,proto3" json:"mime_type,omitempty"` + SizeBytes int64 `protobuf:"varint,92,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"` + FileExtension string `protobuf:"bytes,93,opt,name=file_extension,json=fileExtension,proto3" json:"file_extension,omitempty"` + AttachmentFilename string `protobuf:"bytes,94,opt,name=attachment_filename,json=attachmentFilename,proto3" json:"attachment_filename,omitempty"` /// tracking activities TargetUserID int64 `protobuf:"varint,101,opt,name=target_user_id,json=targetUserId,proto3" json:"target_user_id,omitempty"` TargetUser *User `protobuf:"bytes,102,opt,name=target_user,json=targetUser,proto3" json:"target_user,omitempty"` @@ -957,6 +959,7 @@ func (x *Post) GetProcessingError() string { return "" } +// Deprecated: Do not use. func (x *Post) GetGenre() string { if x != nil { return x.Genre @@ -1034,6 +1037,13 @@ func (x *Post) GetProviderMetadata() string { return "" } +func (x *Post) GetTags() string { + if x != nil { + return x.Tags + } + return "" +} + func (x *Post) GetSoundCloudSecretToken() string { if x != nil { return x.SoundCloudSecretToken @@ -1942,7 +1952,7 @@ var file_sgtm_proto_rawDesc = []byte{ 0xa2, 0x01, 0x28, 0x67, 0x6f, 0x72, 0x6d, 0x3a, 0x22, 0x66, 0x6f, 0x72, 0x65, 0x69, 0x67, 0x6e, 0x6b, 0x65, 0x79, 0x3a, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x49, 0x44, 0x3b, 0x50, 0x52, 0x45, 0x4c, 0x4f, 0x41, 0x44, 0x3a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x22, 0x52, 0x0b, 0x72, 0x65, 0x63, - 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x22, 0xfd, 0x0f, 0x0a, 0x04, 0x50, 0x6f, 0x73, + 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x73, 0x22, 0x95, 0x10, 0x0a, 0x04, 0x50, 0x6f, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x42, 0x1d, 0xca, 0xb5, 0x03, 0x19, 0x0a, 0x02, 0x49, 0x44, 0xa2, 0x01, 0x12, 0x67, 0x6f, 0x72, 0x6d, 0x3a, 0x22, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x52, 0x02, 0x69, 0x64, @@ -1982,136 +1992,137 @@ var file_sgtm_proto_rawDesc = []byte{ 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x69, 0x6e, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x65, 0x6e, - 0x72, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x65, 0x6e, 0x72, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x29, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x0b, 0x61, - 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x10, 0xca, 0xb5, 0x03, 0x0c, 0x0a, 0x0a, 0x41, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x55, - 0x52, 0x4c, 0x52, 0x0a, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x55, 0x72, 0x6c, 0x12, 0x1b, - 0x0a, 0x03, 0x62, 0x70, 0x6d, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x01, 0x42, 0x09, 0xca, 0xb5, 0x03, - 0x05, 0x0a, 0x03, 0x42, 0x50, 0x4d, 0x52, 0x03, 0x62, 0x70, 0x6d, 0x12, 0x23, 0x0a, 0x0d, 0x6b, - 0x65, 0x79, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x2c, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x12, 0x1e, 0x0a, 0x04, 0x69, 0x73, 0x72, 0x63, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, - 0xca, 0xb5, 0x03, 0x06, 0x0a, 0x04, 0x49, 0x53, 0x52, 0x43, 0x52, 0x04, 0x69, 0x73, 0x72, 0x63, - 0x12, 0x31, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x15, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, - 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x2f, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x11, 0xca, 0xb5, 0x03, 0x0d, 0x0a, 0x0b, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, - 0x61, 0x64, 0x55, 0x52, 0x4c, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x44, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x18, 0x30, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x18, 0x31, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x32, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x53, 0x0a, 0x17, 0x73, 0x6f, 0x75, 0x6e, 0x64, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x50, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1b, 0xca, 0xb5, 0x03, 0x17, 0x0a, 0x15, - 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x15, 0x73, 0x6f, 0x75, 0x6e, 0x64, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x37, 0x0a, 0x0d, - 0x73, 0x6f, 0x75, 0x6e, 0x64, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x51, 0x20, - 0x01, 0x28, 0x04, 0x42, 0x12, 0xca, 0xb5, 0x03, 0x0e, 0x0a, 0x0c, 0x53, 0x6f, 0x75, 0x6e, 0x64, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x44, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x6e, 0x64, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x49, 0x64, 0x12, 0x58, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x6e, 0x64, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x53, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, - 0x2e, 0x73, 0x67, 0x74, 0x6d, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x6e, 0x64, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4b, 0x69, 0x6e, 0x64, 0x42, 0x14, 0xca, 0xb5, 0x03, 0x10, 0x0a, - 0x0e, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4b, 0x69, 0x6e, 0x64, 0x52, - 0x0e, 0x73, 0x6f, 0x75, 0x6e, 0x64, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x4b, 0x69, 0x6e, 0x64, 0x12, - 0x28, 0x0a, 0x08, 0x69, 0x70, 0x66, 0x73, 0x5f, 0x63, 0x69, 0x64, 0x18, 0x5a, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x0d, 0xca, 0xb5, 0x03, 0x09, 0x0a, 0x07, 0x49, 0x50, 0x46, 0x53, 0x43, 0x49, 0x44, - 0x52, 0x07, 0x69, 0x70, 0x66, 0x73, 0x43, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x09, 0x6d, 0x69, 0x6d, - 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x33, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0e, 0xca, 0xb5, - 0x03, 0x0a, 0x0a, 0x08, 0x4d, 0x49, 0x4d, 0x45, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x6d, 0x69, - 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x18, 0x34, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x65, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x35, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, - 0x69, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x13, - 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x36, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, - 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x65, 0x20, 0x01, 0x28, 0x03, 0x42, 0x12, 0xca, 0xb5, 0x03, 0x0e, 0x0a, 0x0c, 0x54, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x66, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x73, - 0x67, 0x74, 0x6d, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, - 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x67, 0x20, 0x01, 0x28, 0x03, 0x42, 0x12, 0xca, 0xb5, - 0x03, 0x0e, 0x0a, 0x0c, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x49, 0x44, - 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x2b, - 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x74, 0x18, 0x68, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x73, 0x67, 0x74, 0x6d, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x52, - 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x69, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x22, 0x40, 0x0a, 0x0e, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, - 0x6e, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4b, 0x69, 0x6e, 0x64, 0x10, - 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x54, - 0x72, 0x61, 0x63, 0x6b, 0x10, 0x01, 0x22, 0xbf, 0x01, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, - 0x0f, 0x0a, 0x0b, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x10, 0x00, - 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x4b, 0x69, 0x6e, 0x64, 0x10, 0x01, 0x12, - 0x0d, 0x0a, 0x09, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x10, 0x02, 0x12, 0x10, - 0x0a, 0x0c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x10, 0x03, - 0x12, 0x1a, 0x0a, 0x16, 0x4c, 0x69, 0x6e, 0x6b, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, - 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x10, - 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x69, 0x65, 0x77, 0x50, 0x6f, 0x73, 0x74, 0x4b, 0x69, 0x6e, - 0x64, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x69, 0x65, 0x77, 0x4f, 0x70, 0x65, 0x6e, 0x4b, - 0x69, 0x6e, 0x64, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x69, 0x65, 0x77, 0x48, 0x6f, 0x6d, - 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x10, 0x08, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x65, - 0x6e, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x10, 0x09, 0x22, 0x62, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x42, 0x0c, 0xca, 0xb5, 0x03, 0x08, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, - 0x49, 0x44, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x69, - 0x73, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x72, - 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x2a, 0x3a, 0x0a, 0x0a, - 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x6e, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x10, - 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x10, 0x01, 0x12, 0x09, 0x0a, - 0x05, 0x44, 0x72, 0x61, 0x66, 0x74, 0x10, 0x02, 0x2a, 0x39, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x6f, 0x75, - 0x6e, 0x64, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x50, 0x46, - 0x53, 0x10, 0x02, 0x32, 0x8b, 0x03, 0x0a, 0x06, 0x57, 0x65, 0x62, 0x41, 0x50, 0x49, 0x12, 0x55, - 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x73, 0x67, 0x74, - 0x6d, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x73, 0x67, 0x74, 0x6d, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, - 0x73, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x55, 0x73, 0x65, - 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x08, 0x50, 0x6f, 0x73, 0x74, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x16, 0x2e, 0x73, 0x67, 0x74, 0x6d, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x4c, 0x69, 0x73, - 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x73, 0x67, 0x74, 0x6d, - 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x50, 0x6f, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x02, - 0x4d, 0x65, 0x12, 0x10, 0x2e, 0x73, 0x67, 0x74, 0x6d, 0x2e, 0x4d, 0x65, 0x2e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, 0x67, 0x74, 0x6d, 0x2e, 0x4d, 0x65, 0x2e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, - 0x0a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x4d, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x50, - 0x69, 0x6e, 0x67, 0x12, 0x12, 0x2e, 0x73, 0x67, 0x74, 0x6d, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x2e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x73, 0x67, 0x74, 0x6d, 0x2e, 0x50, - 0x69, 0x6e, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x0e, 0x12, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x50, 0x69, - 0x6e, 0x67, 0x12, 0x4d, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x2e, 0x73, - 0x67, 0x74, 0x6d, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x73, 0x67, 0x74, 0x6d, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x42, 0x19, 0x5a, 0x17, 0x6d, 0x6f, 0x75, 0x6c, 0x2e, 0x69, 0x6f, 0x2f, 0x73, 0x67, 0x74, - 0x6d, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x73, 0x67, 0x74, 0x6d, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x69, 0x6e, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x05, 0x67, 0x65, 0x6e, + 0x72, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x67, 0x65, + 0x6e, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x29, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x31, 0x0a, 0x0b, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x2a, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x10, 0xca, 0xb5, 0x03, 0x0c, 0x0a, 0x0a, 0x41, 0x72, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x55, 0x52, 0x4c, 0x52, 0x0a, 0x61, 0x72, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x55, + 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x03, 0x62, 0x70, 0x6d, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x01, 0x42, + 0x09, 0xca, 0xb5, 0x03, 0x05, 0x0a, 0x03, 0x42, 0x50, 0x4d, 0x52, 0x03, 0x62, 0x70, 0x6d, 0x12, + 0x23, 0x0a, 0x0d, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x18, 0x2c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x53, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x0a, 0x04, 0x69, 0x73, 0x72, 0x63, 0x18, 0x2d, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0a, 0xca, 0xb5, 0x03, 0x06, 0x0a, 0x04, 0x49, 0x53, 0x52, 0x43, 0x52, 0x04, + 0x69, 0x73, 0x72, 0x63, 0x12, 0x31, 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x2e, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x15, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x75, 0x72, 0x6c, + 0x18, 0x2f, 0x20, 0x01, 0x28, 0x09, 0x42, 0x11, 0xca, 0xb5, 0x03, 0x0d, 0x0a, 0x0b, 0x44, 0x6f, + 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x52, 0x4c, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x72, 0x6c, 0x12, 0x2e, + 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x30, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2e, + 0x0a, 0x13, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x31, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x2b, + 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x32, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x61, 0x67, 0x73, 0x18, 0x33, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, + 0x53, 0x0a, 0x17, 0x73, 0x6f, 0x75, 0x6e, 0x64, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x50, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x1b, 0xca, 0xb5, 0x03, 0x17, 0x0a, 0x15, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6c, 0x6f, + 0x75, 0x64, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x15, 0x73, + 0x6f, 0x75, 0x6e, 0x64, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x37, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x6e, 0x64, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x51, 0x20, 0x01, 0x28, 0x04, 0x42, 0x12, 0xca, 0xb5, 0x03, + 0x0e, 0x0a, 0x0c, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x44, 0x52, + 0x0c, 0x73, 0x6f, 0x75, 0x6e, 0x64, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x49, 0x64, 0x12, 0x58, 0x0a, + 0x0f, 0x73, 0x6f, 0x75, 0x6e, 0x64, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x6b, 0x69, 0x6e, 0x64, + 0x18, 0x53, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x73, 0x67, 0x74, 0x6d, 0x2e, 0x50, 0x6f, + 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4b, 0x69, 0x6e, + 0x64, 0x42, 0x14, 0xca, 0xb5, 0x03, 0x10, 0x0a, 0x0e, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x6e, 0x64, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x28, 0x0a, 0x08, 0x69, 0x70, 0x66, 0x73, 0x5f, + 0x63, 0x69, 0x64, 0x18, 0x5a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xca, 0xb5, 0x03, 0x09, 0x0a, + 0x07, 0x49, 0x50, 0x46, 0x53, 0x43, 0x49, 0x44, 0x52, 0x07, 0x69, 0x70, 0x66, 0x73, 0x43, 0x69, + 0x64, 0x12, 0x2b, 0x0a, 0x09, 0x6d, 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x5b, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x0e, 0xca, 0xb5, 0x03, 0x0a, 0x0a, 0x08, 0x4d, 0x49, 0x4d, 0x45, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x6d, 0x69, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x5c, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, + 0x0e, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x5d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x13, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x5e, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, + 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x65, 0x20, 0x01, 0x28, 0x03, 0x42, 0x12, 0xca, + 0xb5, 0x03, 0x0e, 0x0a, 0x0c, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, + 0x44, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x2b, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x66, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x73, 0x67, 0x74, 0x6d, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x0e, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x67, + 0x20, 0x01, 0x28, 0x03, 0x42, 0x12, 0xca, 0xb5, 0x03, 0x0e, 0x0a, 0x0c, 0x54, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x50, 0x6f, 0x73, 0x74, 0x49, 0x44, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x50, 0x6f, 0x73, 0x74, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x5f, 0x70, 0x6f, 0x73, 0x74, 0x18, 0x68, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x73, 0x67, + 0x74, 0x6d, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, + 0x6f, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x69, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x40, 0x0a, 0x0e, + 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x19, + 0x0a, 0x15, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6c, + 0x6f, 0x75, 0x64, 0x4b, 0x69, 0x6e, 0x64, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x6f, 0x75, + 0x6e, 0x64, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x10, 0x01, 0x22, 0xbf, + 0x01, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, + 0x77, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x72, 0x61, 0x63, + 0x6b, 0x4b, 0x69, 0x6e, 0x64, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x4b, 0x69, 0x6e, 0x64, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x4c, 0x69, 0x6e, 0x6b, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4b, 0x69, + 0x6e, 0x64, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x56, 0x69, 0x65, + 0x77, 0x50, 0x6f, 0x73, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x56, + 0x69, 0x65, 0x77, 0x4f, 0x70, 0x65, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x10, 0x07, 0x12, 0x10, 0x0a, + 0x0c, 0x56, 0x69, 0x65, 0x77, 0x48, 0x6f, 0x6d, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x10, 0x08, 0x12, + 0x0f, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x10, 0x09, + 0x22, 0x62, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x07, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x42, 0x0c, 0xca, 0xb5, + 0x03, 0x08, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x12, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x72, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x2a, 0x3a, 0x0a, 0x0a, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x56, 0x69, 0x73, + 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x72, 0x61, 0x66, 0x74, 0x10, 0x02, + 0x2a, 0x39, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x13, 0x0a, 0x0f, + 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x10, + 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x10, + 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x50, 0x46, 0x53, 0x10, 0x02, 0x32, 0x8b, 0x03, 0x0a, 0x06, + 0x57, 0x65, 0x62, 0x41, 0x50, 0x49, 0x12, 0x55, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x16, 0x2e, 0x73, 0x67, 0x74, 0x6d, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, + 0x73, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x73, 0x67, 0x74, + 0x6d, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x55, 0x0a, + 0x08, 0x50, 0x6f, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x73, 0x67, 0x74, 0x6d, + 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x17, 0x2e, 0x73, 0x67, 0x74, 0x6d, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x4c, 0x69, 0x73, + 0x74, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x12, 0x12, 0x10, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x50, 0x6f, 0x73, 0x74, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x02, 0x4d, 0x65, 0x12, 0x10, 0x2e, 0x73, 0x67, 0x74, + 0x6d, 0x2e, 0x4d, 0x65, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, + 0x67, 0x74, 0x6d, 0x2e, 0x4d, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x4d, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x2e, 0x73, 0x67, + 0x74, 0x6d, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x13, 0x2e, 0x73, 0x67, 0x74, 0x6d, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x12, 0x0c, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x4d, 0x0a, 0x06, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x2e, 0x73, 0x67, 0x74, 0x6d, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x73, 0x67, 0x74, + 0x6d, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x19, 0x5a, 0x17, 0x6d, 0x6f, 0x75, + 0x6c, 0x2e, 0x69, 0x6f, 0x2f, 0x73, 0x67, 0x74, 0x6d, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x73, 0x67, + 0x74, 0x6d, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var (