diff --git a/api/coreg/import.go b/api/coreg/import.go index 699da0b7..2d9af5c7 100644 --- a/api/coreg/import.go +++ b/api/coreg/import.go @@ -39,7 +39,7 @@ func StartCoregImport(triggerUrl string, hctx wsHelpers.HandlerContext) (string, // Start an image coreg import job (this is a Lambda function) // Once it completes, we have the data we need, so we can treat it as a "normal" image importing task - jobStatus, err := job.AddJob("coreg", protos.JobStatus_JT_IMPORT_IMAGE, triggerUrl, uint32(hctx.Svcs.Config.ImportJobMaxTimeSec), hctx.Svcs.MongoDB, hctx.Svcs.IDGen, hctx.Svcs.TimeStamper, hctx.Svcs.Log, i.sendUpdate) + jobStatus, err := job.AddJob("coreg", hctx.SessUser.User.Id, protos.JobStatus_JT_IMPORT_IMAGE, triggerUrl, fmt.Sprintf("Import: %v", path.Base(triggerUrl)), []string{}, uint32(hctx.Svcs.Config.ImportJobMaxTimeSec), hctx.Svcs.MongoDB, hctx.Svcs.IDGen, hctx.Svcs.TimeStamper, hctx.Svcs.Log, i.sendUpdate) jobId := "" if jobStatus != nil { jobId = jobStatus.JobId diff --git a/api/dataimport/for-trigger.go b/api/dataimport/for-trigger.go index bd799981..6551bf90 100644 --- a/api/dataimport/for-trigger.go +++ b/api/dataimport/for-trigger.go @@ -28,6 +28,7 @@ import ( "github.com/pixlise/core/v4/api/dataimport/internal/datasetArchive" "github.com/pixlise/core/v4/api/dbCollections" "github.com/pixlise/core/v4/api/job" + "github.com/pixlise/core/v4/api/specialUserIds" "github.com/pixlise/core/v4/core/fileaccess" "github.com/pixlise/core/v4/core/logger" "github.com/pixlise/core/v4/core/timestamper" @@ -183,6 +184,7 @@ func completeJobState(jobId string, success bool, scanId string, message string, EndUnixTimeSec: now, OutputFilePath: outputFilePath, OtherLogFiles: otherLogFiles, + RequestorUserId: specialUserIds.PIXLISESystemUserId, // We don't have a requestor ID to write, we're an auto import } insertResult, err := coll.InsertOne(ctx, jobStatus, opt) diff --git a/api/dataimport/for-trigger_test.go b/api/dataimport/for-trigger_test.go index fb9eeda7..ab072963 100644 --- a/api/dataimport/for-trigger_test.go +++ b/api/dataimport/for-trigger_test.go @@ -362,7 +362,7 @@ func Example_importForTrigger_OCS_DatasetEdit() { // |{"contentCounts": {"BulkSpectra": 2,"DwellSpectra": 0,"MaxSpectra": 2,"NormalSpectra": 242,"PseudoIntensities": 121},"creatorUserId": "PIXLISEImport","dataTypes": [{"count": 5,"dataType": "SD_IMAGE"},{"count": 1,"dataType": "SD_RGBU"},{"count": 242,"dataType": "SD_XRF"}],"id": "048300551","instrument": "PIXL_FM","instrumentConfig": "PIXL","meta": {"DriveId": "1712","RTT": "048300551","SCLK": "678031418","Site": "","SiteId": "4","Sol": "0125","Target": "","TargetId": "?"},"title": "Naltsos"} } -func printManualOKLogOutput(log *logger.StdOutLoggerForTest, db *mongo.Database, datasetId string, fileCount uint32) { +func printManualOKLogOutput(log *logger.StdOutLoggerForTest, db *mongo.Database, datasetId string, fileCount uint32, beamLocLBLFileName string, beamVersion uint32) { // Ensure these log msgs appeared... requiredLogs := []string{ "Downloading archived zip files...", @@ -380,6 +380,12 @@ func printManualOKLogOutput(log *logger.StdOutLoggerForTest, db *mongo.Database, "No auto-share destination found, so only importing user will be able to access this dataset.", } + if len(beamLocLBLFileName) > 0 { + requiredLogs = append(requiredLogs, fmt.Sprintf("WARNING: Beam location LBL file (%v) could not be read. Beam Version version is assumed to be: %v", beamLocLBLFileName, beamVersion)) + } else if beamVersion > 0 { + requiredLogs = append(requiredLogs, fmt.Sprintf("Saving as beam geometry tool version: %v", beamVersion)) + } + for _, msg := range requiredLogs { fmt.Printf("Logged \"%v\": %v\n", msg, log.LogContains(msg)) } @@ -412,7 +418,7 @@ func Example_importForTrigger_Manual_JPL() { fmt.Printf("Errors: %v, changes: %v, isUpdate: %v\n", err, result.WhatChanged, result.IsUpdate) - printManualOKLogOutput(log, db, "test1234", 3) + printManualOKLogOutput(log, db, "test1234", 3, "", 0) // Output: // Errors: , changes: unknown, isUpdate: false @@ -445,7 +451,7 @@ func Example_importForTrigger_Manual_SBU() { fmt.Printf("Errors: %v, changes: %v, isUpdate: %v\n", err, result.WhatChanged, result.IsUpdate) - printManualOKLogOutput(log, db, "test1234sbu", 4) + printManualOKLogOutput(log, db, "test1234sbu", 4, "", 0) // Output: // Errors: , changes: unknown, isUpdate: false @@ -478,7 +484,7 @@ func Example_ImportForTrigger_Manual_SBU_NoAutoShare() { fmt.Printf("Errors: %v, changes: %v, isUpdate: %v\n", err, result.WhatChanged, result.IsUpdate) - printManualOKLogOutput(log, db, "test1234sbu", 4) + printManualOKLogOutput(log, db, "test1234sbu", 4, "", 0) // Output: // Errors: , changes: unknown, isUpdate: false @@ -529,7 +535,41 @@ func Example_importForTrigger_Manual_EM() { fmt.Printf("Errors: %v, changes: %v, isUpdate: %v\n", err, result.WhatChanged, result.IsUpdate) - printManualOKLogOutput(log, db, "048300551", 3) + printManualOKLogOutput(log, db, "048300551", 3, "PE__0125_0678031418_000RXL_N004171204830055100910__J01.LBL", 2) + + // Output: + // Errors: , changes: unknown, isUpdate: false + // Logged "Downloading archived zip files...": true + // Logged "Downloaded 0 zip files, unzipped 0 files": true + // Logged "No zip files found in archive, dataset may have been manually uploaded. Trying to download...": true + // Logged "Dataset 048300551 downloaded 3 files from manual upload area": true + // Logged "Downloading pseudo-intensity ranges...": true + // Logged "Downloading user customisation files...": true + // Logged "Reading 1261 files from spectrum directory...": false + // Logged "Reading spectrum [1135/1260] 90%": false + // Logged "PMC 1261 has 4 MSA/spectrum entries": false + // Logged "WARNING: No main context image determined": false + // Logged "Diffraction db saved successfully": true + // Logged "Warning: No import.json found, defaults will be used": false + // Logged "No auto-share destination found, so only importing user will be able to access this dataset.": false + // Logged "WARNING: Beam location LBL file (PE__0125_0678031418_000RXL_N004171204830055100910__J01.LBL) could not be read. Beam Version version is assumed to be: 2": true + // |{"id":"048300551","title":"048300551","dataTypes":[{"dataType":"SD_IMAGE","count":4},{"dataType":"SD_XRF","count":242}],"instrument":"PIXL_EM","instrumentConfig":"PIXL-EM-E2E","meta":{"DriveId":"1712","RTT":"048300551","SCLK":"678031418","Site":"","SiteId":"4","Sol":"0125","Target":"","TargetId":"?"},"contentCounts":{"BulkSpectra":2,"DwellSpectra":0,"MaxSpectra":2,"NormalSpectra":242,"PseudoIntensities":121},"creatorUserId":"PIXLISEImport"} +} + +// Import a breadboard dataset from manual uploaded zip file +func Example_importForTrigger_Manual_EM_WithBeamV2() { + remoteFS, log, envName, configBucket, datasetBucket, manualBucket, db := initTest("ManualEM_Beamv2_OK", specialUserIds.PIXLISESystemUserId, "PIXLFMGroupId") + + trigger := `{ + "datasetID": "048300551", + "jobID": "dataimport-unittest048300551" +}` + + result, err := ImportForTrigger([]byte(trigger), envName, configBucket, datasetBucket, manualBucket, db, log, remoteFS) + + fmt.Printf("Errors: %v, changes: %v, isUpdate: %v\n", err, result.WhatChanged, result.IsUpdate) + + printManualOKLogOutput(log, db, "048300551", 3, "", 2) // Output: // Errors: , changes: unknown, isUpdate: false @@ -546,6 +586,7 @@ func Example_importForTrigger_Manual_EM() { // Logged "Diffraction db saved successfully": true // Logged "Warning: No import.json found, defaults will be used": false // Logged "No auto-share destination found, so only importing user will be able to access this dataset.": false + // Logged "Saving as beam geometry tool version: 2": true // |{"id":"048300551","title":"048300551","dataTypes":[{"dataType":"SD_IMAGE","count":4},{"dataType":"SD_XRF","count":242}],"instrument":"PIXL_EM","instrumentConfig":"PIXL-EM-E2E","meta":{"DriveId":"1712","RTT":"048300551","SCLK":"678031418","Site":"","SiteId":"4","Sol":"0125","Target":"","TargetId":"?"},"contentCounts":{"BulkSpectra":2,"DwellSpectra":0,"MaxSpectra":2,"NormalSpectra":242,"PseudoIntensities":121},"creatorUserId":"PIXLISEImport"} } diff --git a/api/dataimport/internal/converters/pixlfm/import.go b/api/dataimport/internal/converters/pixlfm/import.go index 145fcb3f..bddd3308 100644 --- a/api/dataimport/internal/converters/pixlfm/import.go +++ b/api/dataimport/internal/converters/pixlfm/import.go @@ -23,6 +23,7 @@ import ( "path" "path/filepath" "strings" + "unicode/utf8" "github.com/pixlise/core/v4/api/dataimport/internal/dataConvertModels" "github.com/pixlise/core/v4/api/dataimport/internal/importerutils" @@ -118,6 +119,7 @@ func (p PIXLFM) Import(importPath string, pseudoIntensityRangesPath string, data // Allocate everything needed (empty, if we find & load stuff, great, but we still need the data struct for the last step) beamLookup := dataConvertModels.BeamLocationByPMC{} + beamToolVersion := 0 hkData := dataConvertModels.HousekeepingData{} locSpectraLookup := dataConvertModels.DetectorSampleByPMC{} bulkMaxSpectraLookup := dataConvertModels.DetectorSampleByPMC{} @@ -214,10 +216,38 @@ func (p PIXLFM) Import(importPath string, pseudoIntensityRangesPath string, data for file, beamCsvMeta := range latestVersionFoundPaths { if beamCsvMeta.ProdType == "RXL" { // If files don't conform, don't read... - beamLookup, err = importerutils.ReadBeamLocationsFile(filepath.Join(pathToSubdir, file), true, 1, log) + beamFilePath := filepath.Join(pathToSubdir, file) + beamLookup, err = importerutils.ReadBeamLocationsFile(beamFilePath, true, 1, log) if err != nil { return nil, "", err } else { + // Import worked, find out what version of the beam geometry tool generated this by looking in the LBL file + lblPath := beamFilePath[0:len(beamFilePath)-3] + "LBL" + lblFileBytes, err := os.ReadFile(lblPath) + if err != nil { + //return nil, "", fmt.Errorf("Failed to read LBL file: %v. Beam geometry version could not be determined.", lblPath) + beamToolVersion = 2 // If we don't have an LBL file but it's a "recent" copy of the data, it has to be using beam geometry v2... + log.Errorf("WARNING: Beam location LBL file (%v) could not be read. Beam Version version is assumed to be: %v", filepath.Base(lblPath), beamToolVersion) + } else { + // Read each line and find the beam geometry version + lblLines := strings.Split(string(lblFileBytes), "\n") + searchStr := "Beam Geometry Tool Version " + + for _, line := range lblLines { + if pos := strings.Index(line, searchStr); pos > -1 { + verPos := pos + len(searchStr) + + log.Infof("Beam Geometry Tool version text found: %v", line[verPos:]) + + verChar := line[verPos : verPos+1] + r, _ := utf8.DecodeRuneInString(verChar) + beamToolVersion = int(r) - '0' + log.Infof("Saving as beam geometry tool version: %v", beamToolVersion) + break + } + } + } + // Found it, why keep looping? break } @@ -358,7 +388,7 @@ func (p PIXLFM) Import(importPath string, pseudoIntensityRangesPath string, data datasetIDExpected, p.overrideInstrument, p.overrideDetector, - 1, // TODO: Retrieve beam version and set it here! + uint32(beamToolVersion), log, ) diff --git a/api/dataimport/internal/output/output.go b/api/dataimport/internal/output/output.go index 07757757..6a066e9f 100644 --- a/api/dataimport/internal/output/output.go +++ b/api/dataimport/internal/output/output.go @@ -335,11 +335,7 @@ func (s *PIXLISEDataSaver) Save( // as we switched to storing them in DB (to allow import of other images with a corresponding set of beam locations) // Redundant, but this is how it evolved... for idx, imgItem := range exp.AlignedContextImages { - beamVer := data.BeamVersion - if beamVer < 1 { - beamVer = 1 - } - err := beamLocation.ImportBeamLocationToDB(path.Join(data.DatasetID, imgItem.Image), data.Instrument, data.DatasetID, beamVer, idx, &exp, db, jobLog) + err := beamLocation.ImportBeamLocationToDB(path.Join(data.DatasetID, imgItem.Image), data.Instrument, data.DatasetID, data.BeamVersion, idx, &exp, db, jobLog) if err != nil { return fmt.Errorf("Failed to import beam locations for image %v into DB. Error: %v", imgItem.Image, err) } @@ -368,7 +364,7 @@ func (s *PIXLISEDataSaver) Save( prevSavedScan = nil } - summaryData := makeSummaryFileContent(&exp, prevSavedScan, data.DatasetID, data.Instrument, data.Meta /*int(fi.Size()),*/, creationUnixTimeSec, data.CreatorUserId) + summaryData := makeSummaryFileContent(&exp, prevSavedScan, data.DatasetID, data.Instrument, data.Meta /*int(fi.Size()),*/, creationUnixTimeSec, data.CreatorUserId, jobLog) jobLog.Infof("Writing summary to DB for %v...", summaryData.Id) @@ -380,8 +376,8 @@ func (s *PIXLISEDataSaver) Save( if err != nil { jobLog.Errorf("Failed to write summary to DB: %v", err) return err - } else if result.UpsertedCount != 1 { - jobLog.Errorf("Expected summary write to create 1 upsert, got: %v", result.UpsertedCount) + } else if result.UpsertedCount != 1 && result.ModifiedCount != 1 { + jobLog.Errorf("Expected summary write to create 1 upsert, got: %v upsert, %v modified", result.UpsertedCount, result.ModifiedCount) } // Set ownership diff --git a/api/dataimport/internal/output/summary.go b/api/dataimport/internal/output/summary.go index 87dc041f..aca85676 100644 --- a/api/dataimport/internal/output/summary.go +++ b/api/dataimport/internal/output/summary.go @@ -22,6 +22,7 @@ import ( "strings" "github.com/pixlise/core/v4/api/dataimport/internal/dataConvertModels" + "github.com/pixlise/core/v4/core/logger" protos "github.com/pixlise/core/v4/generated-protos" ) @@ -33,7 +34,8 @@ func makeSummaryFileContent( meta dataConvertModels.FileMetaData, //fileSize int, creationUnixTimeSec int64, - creatorUserId string) *protos.ScanItem { + creatorUserId string, + jobLog logger.ILogger) *protos.ScanItem { contextImgCount := len(exp.AlignedContextImages) + len(exp.UnalignedContextImages) + len(exp.MatchedAlignedContextImages) tiffContextImgCount := 0 @@ -117,16 +119,21 @@ func makeSummaryFileContent( // Add new time at the end s.PreviousImportTimesUnixSec = append(s.PreviousImportTimesUnixSec, prevSavedScan.TimestampUnixSec) + jobLog.Infof(" Added new previous time stamp entry: %v, total previous timestamps: %v", prevSavedScan.TimestampUnixSec, len(s.PreviousImportTimesUnixSec)) } // Save a time stamp for completion if isComplete { + jobLog.Infof(" Detected completed dataset...") + // If previous scan was also complete, DON'T update the time stamp, just preserve it if prevSavedScan != nil && prevSavedScan.CompleteTimeStampUnixSec > 0 { s.CompleteTimeStampUnixSec = prevSavedScan.CompleteTimeStampUnixSec + jobLog.Infof(" Preserved previous CompleteTimeStampUnixSec of %v", s.CompleteTimeStampUnixSec) } else { // We must've just completed now, so save the time s.CompleteTimeStampUnixSec = uint32(creationUnixTimeSec) + jobLog.Infof(" Setting CompleteTimeStampUnixSec=%v", creationUnixTimeSec) } } @@ -135,9 +142,16 @@ func makeSummaryFileContent( s.Tags = prevSavedScan.Tags s.Description = prevSavedScan.Description + descSnippet := s.Description + if len(descSnippet) > 30 { + descSnippet = descSnippet[0:30] + "..." + } + jobLog.Infof(" Preserved previous description=\"%v\"...", descSnippet) + if len(prevSavedScan.Description) > 0 { // User has entered a description so perserve the title too s.Title = prevSavedScan.Title + jobLog.Infof(" Preserved previous title=\"%v\"", s.Title) } } diff --git a/api/dataimport/test-data/ManualEM_Beamv2_OK/config-bucket/DatasetConfig/StandardPseudoIntensities.csv b/api/dataimport/test-data/ManualEM_Beamv2_OK/config-bucket/DatasetConfig/StandardPseudoIntensities.csv new file mode 100644 index 00000000..07682b34 --- /dev/null +++ b/api/dataimport/test-data/ManualEM_Beamv2_OK/config-bucket/DatasetConfig/StandardPseudoIntensities.csv @@ -0,0 +1,23 @@ +Name, StartChannel, EndChannel +Na, 122, 142 +Mg, 148, 170 +Al, 176, 200 +Si, 207, 233 +P, 241, 268 +S, 277, 306 +Cl, 315, 346 +K, 400, 435 +Ca, 446, 483 +Ti, 547, 588 +Ce, 588, 630 +Cr, 658, 703 +Mn, 718, 765 +Fe, 780, 829 +Ni, 913, 966 +Ge, 1211, 1271 +As, 1293, 1355 +Zn, 1057, 1113 +Sr, 1742, 1814 +Y, 1840, 1914 +Zr, 1938, 2014 +Ba, 542, 582 \ No newline at end of file diff --git a/api/dataimport/test-data/ManualEM_Beamv2_OK/dataset-bucket/.gitignore b/api/dataimport/test-data/ManualEM_Beamv2_OK/dataset-bucket/.gitignore new file mode 100644 index 00000000..01a386c9 --- /dev/null +++ b/api/dataimport/test-data/ManualEM_Beamv2_OK/dataset-bucket/.gitignore @@ -0,0 +1,2 @@ +Scans/ +Images/ \ No newline at end of file diff --git a/api/dataimport/test-data/ManualEM_Beamv2_OK/manual-bucket/UploadedDatasets/048300551/creator.json b/api/dataimport/test-data/ManualEM_Beamv2_OK/manual-bucket/UploadedDatasets/048300551/creator.json new file mode 100644 index 00000000..b1af02ac --- /dev/null +++ b/api/dataimport/test-data/ManualEM_Beamv2_OK/manual-bucket/UploadedDatasets/048300551/creator.json @@ -0,0 +1,5 @@ +{ + "name": "peternemere", + "user_id": "peter123", + "email": "fake@mail.com" +} \ No newline at end of file diff --git a/api/dataimport/test-data/ManualEM_Beamv2_OK/manual-bucket/UploadedDatasets/048300551/data.zip b/api/dataimport/test-data/ManualEM_Beamv2_OK/manual-bucket/UploadedDatasets/048300551/data.zip new file mode 100644 index 00000000..d29315f9 Binary files /dev/null and b/api/dataimport/test-data/ManualEM_Beamv2_OK/manual-bucket/UploadedDatasets/048300551/data.zip differ diff --git a/api/dataimport/test-data/ManualEM_Beamv2_OK/manual-bucket/UploadedDatasets/048300551/detector.json b/api/dataimport/test-data/ManualEM_Beamv2_OK/manual-bucket/UploadedDatasets/048300551/detector.json new file mode 100644 index 00000000..898e6b75 --- /dev/null +++ b/api/dataimport/test-data/ManualEM_Beamv2_OK/manual-bucket/UploadedDatasets/048300551/detector.json @@ -0,0 +1,3 @@ +{ + "detector": "pixl-em" +} \ No newline at end of file diff --git a/api/job/jobWatcher.go b/api/job/jobWatcher.go index 6c74ebf2..4f6edba1 100644 --- a/api/job/jobWatcher.go +++ b/api/job/jobWatcher.go @@ -22,7 +22,20 @@ var activeJobLock = sync.Mutex{} // Expected to be called by API to create the initial record of a job. It can then trigger it however it needs to // (eg AWS lambda or running PIQUANT nodes) and this sticks around monitoring the DB entry for changes, calling // the sendUpdate callback function on change. Returns the snapshot of the "added" job that was saved -func AddJob(idPrefix string, jobType protos.JobStatus_JobType, jobItemId string, jobTimeoutSec uint32, db *mongo.Database, idgen idgen.IDGenerator, ts timestamper.ITimeStamper, logger logger.ILogger, sendUpdate func(*protos.JobStatus)) (*protos.JobStatus, error) { + +func AddJob( + idPrefix string, + requestorUserId string, + jobType protos.JobStatus_JobType, + jobItemId string, + jobName string, + elementList []string, // optional, only set if it's a quant! + jobTimeoutSec uint32, + db *mongo.Database, + idgen idgen.IDGenerator, + ts timestamper.ITimeStamper, + logger logger.ILogger, + sendUpdate func(*protos.JobStatus)) (*protos.JobStatus, error) { // Generate a new job Id that this job will write to // which we also return to the caller, so they can track what happens // with this async task @@ -40,6 +53,8 @@ func AddJob(idPrefix string, jobType protos.JobStatus_JobType, jobItemId string, OtherLogFiles: []string{}, JobType: jobType, JobItemId: jobItemId, + Name: jobName, + Elements: elementList, } if _, ok := activeJobs[jobId]; ok { diff --git a/api/job/statusChanges.go b/api/job/statusChanges.go index 0200139b..6fd7f927 100644 --- a/api/job/statusChanges.go +++ b/api/job/statusChanges.go @@ -34,6 +34,11 @@ func UpdateJob(jobId string, status protos.JobStatus_Status, message string, log logger.Errorf("Failed to read existing job status when writing UpdateJob %v: %v", jobId, err) } else { jobStatus.StartUnixTimeSec = existingStatus.StartUnixTimeSec + jobStatus.JobType = existingStatus.JobType + jobStatus.JobItemId = existingStatus.JobItemId + jobStatus.RequestorUserId = existingStatus.RequestorUserId + jobStatus.Name = existingStatus.Name + jobStatus.Elements = existingStatus.Elements } replaceResult, err := coll.ReplaceOne(ctx, filter, jobStatus, opt) @@ -86,6 +91,11 @@ func CompleteJob(jobId string, success bool, message string, outputFilePath stri } else { jobStatus.LogId = existingStatus.LogId jobStatus.StartUnixTimeSec = existingStatus.StartUnixTimeSec + jobStatus.JobType = existingStatus.JobType + jobStatus.JobItemId = existingStatus.JobItemId + jobStatus.RequestorUserId = existingStatus.RequestorUserId + jobStatus.Name = existingStatus.Name + jobStatus.Elements = existingStatus.Elements } replaceResult, err := coll.ReplaceOne(ctx, filter, jobStatus, opt) diff --git a/api/notificationSender/notifications.go b/api/notificationSender/notifications.go index 94f46914..8505e288 100644 --- a/api/notificationSender/notifications.go +++ b/api/notificationSender/notifications.go @@ -114,9 +114,11 @@ func (n *NotificationSender) sendNotification(sourceId string, topicId string, n uiNotificationUsers = append(uiNotificationUsers, userId) } + /* Removed because it's really not that helpful but spams logs heaps because lots of users don't have notifications on! if method == protos.NotificationMethod_NOTIF_NONE { - n.log.Infof("Skipping notification of topic: %v to user %v because they have this topic turned off", topicId, userId) + n.log.Debugf("Skipping notification of topic: %v to user %v because they have this topic turned off", topicId, userId) } + */ } } } diff --git a/api/quantification/create.go b/api/quantification/create.go index 57a9d2ee..8e06226b 100644 --- a/api/quantification/create.go +++ b/api/quantification/create.go @@ -64,7 +64,7 @@ func CreateJob(createParams *protos.QuantCreateParams, requestorUserId string, s // Make the name and ID the same, and start with something that stands out jobId = fmt.Sprintf("cmd-%v-%s", createParams.Command, svcs.IDGen.GenObjectID()) } else { - jobStatus, err = job.AddJob("quant", protos.JobStatus_JT_RUN_QUANT, "", uint32(svcs.Config.ImportJobMaxTimeSec), svcs.MongoDB, svcs.IDGen, svcs.TimeStamper, svcs.Log, sendUpdate) + jobStatus, err = job.AddJob("quant", requestorUserId, protos.JobStatus_JT_RUN_QUANT, "", createParams.Name, createParams.Elements, uint32(svcs.Config.ImportJobMaxTimeSec), svcs.MongoDB, svcs.IDGen, svcs.TimeStamper, svcs.Log, sendUpdate) if jobStatus != nil { jobId = jobStatus.JobId } @@ -378,12 +378,17 @@ func (r *quantNodeRunner) triggerPiquantNodes(wg *sync.WaitGroup) { Params: r.quantStartSettings, Elements: elements, Status: &protos.JobStatus{ - JobId: r.jobId, - Status: protos.JobStatus_COMPLETE, - Message: completeMsg, - EndUnixTimeSec: uint32(now), - OutputFilePath: quantOutPath, - OtherLogFiles: piquantLogList, + JobId: r.jobId, + JobItemId: r.jobId, + Status: protos.JobStatus_COMPLETE, + Message: completeMsg, + StartUnixTimeSec: r.quantStartSettings.StartUnixTimeSec, + EndUnixTimeSec: uint32(now), + OutputFilePath: quantOutPath, + OtherLogFiles: piquantLogList, + Name: r.quantStartSettings.UserParams.Name, + Elements: r.quantStartSettings.UserParams.Elements, + RequestorUserId: r.quantStartSettings.RequestorUserId, }, } diff --git a/api/quantification/importCSV.go b/api/quantification/importCSV.go index c9278741..68c410c1 100644 --- a/api/quantification/importCSV.go +++ b/api/quantification/importCSV.go @@ -97,12 +97,16 @@ func ImportQuantCSV( }, Elements: elements, Status: &protos.JobStatus{ - JobId: quantId, - Status: protos.JobStatus_COMPLETE, - Message: csvOrigin + " quantification processed", - OtherLogFiles: []string{}, - EndUnixTimeSec: uint32(ownerItem.CreatedUnixSec), - OutputFilePath: quantOutPath, + JobId: quantId, + JobItemId: quantId, + Status: protos.JobStatus_COMPLETE, + Message: csvOrigin + " quantification processed", + OtherLogFiles: []string{}, + EndUnixTimeSec: uint32(ownerItem.CreatedUnixSec), + OutputFilePath: quantOutPath, + StartUnixTimeSec: uint32(ownerItem.CreatedUnixSec), + Name: quantName, + Elements: elements, }, } diff --git a/api/ws/handlers/image-beam-location.go b/api/ws/handlers/image-beam-location.go index 7b78ad55..8cca6994 100644 --- a/api/ws/handlers/image-beam-location.go +++ b/api/ws/handlers/image-beam-location.go @@ -21,7 +21,10 @@ func HandleImageBeamLocationsReq(req *protos.ImageBeamLocationsReq, hctx wsHelpe // If we have generateForScanId set, we don't want to have an image name! if len(req.GenerateForScanId) > 0 { if len(req.ImageName) > 0 { - return nil, errorwithstatus.MakeBadRequestError(errors.New("Expected empty image name for request with GenerateForScanId set")) + return nil, errorwithstatus.MakeBadRequestError(errors.New("Expected empty imageName for request with GenerateForScanId set")) + } + if len(req.ScanBeamVersions) > 0 { + return nil, errorwithstatus.MakeBadRequestError(errors.New("Expected empty scanBeamVersions for request with GenerateForScanId set")) } // Check user has access to this scan @@ -68,17 +71,70 @@ func HandleImageBeamLocationsReq(req *protos.ImageBeamLocationsReq, hctx wsHelpe return nil, result.Err() } - err := result.Decode(&locs) + var dbLocs *protos.ImageLocations + err := result.Decode(&dbLocs) if err != nil { return nil, err } - if len(locs.LocationPerScan) <= 0 { + if len(dbLocs.LocationPerScan) <= 0 { return nil, fmt.Errorf("No beams defined for image: %v", req.ImageName) } - for _, scanLocs := range locs.LocationPerScan { - _, err := wsHelpers.CheckObjectAccess(false, scanLocs.ScanId, protos.ObjectType_OT_SCAN, hctx) + // Build list of unique scans so we don't run the object access check + dbScanIds := map[string]bool{} + for _, scanLocs := range dbLocs.LocationPerScan { + dbScanIds[scanLocs.ScanId] = true + } + scanBeamVersionsToReturn := req.ScanBeamVersions + if scanBeamVersionsToReturn == nil { + scanBeamVersionsToReturn = map[string]uint32{} + } + + // If they didn't specify versions to return, return the latest version for each scan represented + if len(scanBeamVersionsToReturn) <= 0 { + for _, scanLocs := range dbLocs.LocationPerScan { + // Add to map if it doesn't exist yet + if ver, ok := scanBeamVersionsToReturn[scanLocs.ScanId]; !ok { + scanBeamVersionsToReturn[scanLocs.ScanId] = scanLocs.BeamVersion + } else { + // Check if this beam version is larger + if scanLocs.BeamVersion > ver { + scanBeamVersionsToReturn[scanLocs.ScanId] = scanLocs.BeamVersion + } + } + } + } + + // Run through what we're planning to return and make sure user has access while building the result list + locs = &protos.ImageLocations{ + ImageName: dbLocs.ImageName, + LocationPerScan: []*protos.ImageLocationsForScan{}, + } + + // Return the specified scan/beam versions + for scan, ver := range scanBeamVersionsToReturn { + if !dbScanIds[scan] { + return nil, fmt.Errorf("No beams defined for image: %v and scan: %v", req.ImageName, scan) + } + + // This is a valid scan choice, now make sure the version requested exists + verFound := false + for _, scanLocs := range dbLocs.LocationPerScan { + if scanLocs.ScanId == scan && scanLocs.BeamVersion == ver { + verFound = true + locs.LocationPerScan = append(locs.LocationPerScan, scanLocs) + break + } + } + + if !verFound { + return nil, fmt.Errorf("No beams defined for image: %v and scan: %v with version: %v", req.ImageName, scan, ver) + } + } + + for scanId, _ := range scanBeamVersionsToReturn { + _, err := wsHelpers.CheckObjectAccess(false, scanId, protos.ObjectType_OT_SCAN, hctx) if err != nil { return nil, err } @@ -141,3 +197,46 @@ func generateIJs(imageName string, scanId string, instrument protos.ScanInstrume return &locs, nil } + +func HandleImageBeamLocationVersionsReq(req *protos.ImageBeamLocationVersionsReq, hctx wsHelpers.HandlerContext) (*protos.ImageBeamLocationVersionsResp, error) { + ctx := context.TODO() + + if err := wsHelpers.CheckStringField(&req.ImageName, "ImageName", 1, 255); err != nil { + return nil, err + } + + coll := hctx.Svcs.MongoDB.Collection(dbCollections.ImageBeamLocationsName) + vers := map[string]*protos.ImageBeamLocationVersionsResp_AvailableVersions{} + + // Read the image and check that the user has access to all scans associated with it + result := coll.FindOne(ctx, bson.M{"_id": req.ImageName}) + if result.Err() != nil { + if result.Err() == mongo.ErrNoDocuments { + // If there are no beam locations, don't return an error, just return a message with no items in it + return &protos.ImageBeamLocationVersionsResp{ + BeamVersionPerScan: vers, + }, nil + } + return nil, result.Err() + } + + var locs *protos.ImageLocations + err := result.Decode(&locs) + if err != nil { + return nil, err + } + + for _, locPerScan := range locs.LocationPerScan { + var availVersions *protos.ImageBeamLocationVersionsResp_AvailableVersions = vers[locPerScan.ScanId] + if availVersions == nil { + availVersions = &protos.ImageBeamLocationVersionsResp_AvailableVersions{Versions: []uint32{}} + vers[locPerScan.ScanId] = availVersions + } + + availVersions.Versions = append(availVersions.Versions, locPerScan.BeamVersion) + } + + return &protos.ImageBeamLocationVersionsResp{ + BeamVersionPerScan: vers, + }, nil +} diff --git a/api/ws/handlers/job.go b/api/ws/handlers/job.go new file mode 100644 index 00000000..341118f9 --- /dev/null +++ b/api/ws/handlers/job.go @@ -0,0 +1,53 @@ +package wsHandler + +import ( + "context" + + "github.com/pixlise/core/v4/api/dbCollections" + "github.com/pixlise/core/v4/api/ws/wsHelpers" + protos "github.com/pixlise/core/v4/generated-protos" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo/options" +) + +func HandleJobListReq(req *protos.JobListReq, hctx wsHelpers.HandlerContext) (*protos.JobListResp, error) { + // Work out if requestor is an admin or a normal user + isAdmin := hctx.SessUser.Permissions["PIXLISE_ADMIN"] + + /*filter, _, err := wsHelpers.MakeFilter(req.SearchParams, false, protos.ObjectType_OT_QUANTIFICATION, hctx) + if err != nil { + return nil, err + }*/ + filter := bson.M{} + + ctx := context.TODO() + coll := hctx.Svcs.MongoDB.Collection(dbCollections.JobStatusName) + opts := options.Find() + + cursor, err := coll.Find(ctx, filter, opts) + if err != nil { + return nil, err + } + + items := []*protos.JobStatus{} + err = cursor.All(ctx, &items) + if err != nil { + return nil, err + } + + itemsToSend := []*protos.JobStatus{} + if isAdmin { + itemsToSend = items + } else { + // Find only the jobs that were requested by this user + for _, item := range items { + if item.RequestorUserId == hctx.SessUser.User.Id { + itemsToSend = append(itemsToSend, item) + } + } + } + + return &protos.JobListResp{ + Jobs: itemsToSend, + }, nil +} diff --git a/api/ws/handlers/piquant.go b/api/ws/handlers/piquant.go index 9432a771..775624b9 100644 --- a/api/ws/handlers/piquant.go +++ b/api/ws/handlers/piquant.go @@ -103,7 +103,7 @@ func HandlePiquantWriteCurrentVersionReq(req *protos.PiquantWriteCurrentVersionR return nil, err } - if result.MatchedCount != 1 { + if result.MatchedCount != 1 && result.UpsertedCount != 1 { hctx.Svcs.Log.Errorf("PiquantWriteCurrentVersionReq UpdateByID result had unexpected counts %+v", result) } diff --git a/api/ws/handlers/quantification-retrieval.go b/api/ws/handlers/quantification-retrieval.go index 5af6fb39..2ed32f71 100644 --- a/api/ws/handlers/quantification-retrieval.go +++ b/api/ws/handlers/quantification-retrieval.go @@ -8,6 +8,7 @@ import ( "github.com/pixlise/core/v4/api/filepaths" "github.com/pixlise/core/v4/api/quantification" "github.com/pixlise/core/v4/api/ws/wsHelpers" + "github.com/pixlise/core/v4/core/errorwithstatus" protos "github.com/pixlise/core/v4/generated-protos" ) @@ -31,6 +32,10 @@ func HandleQuantListReq(req *protos.QuantListReq, hctx wsHelpers.HandlerContext) } func HandleQuantGetReq(req *protos.QuantGetReq, hctx wsHelpers.HandlerContext) (*protos.QuantGetResp, error) { + if err := wsHelpers.CheckStringField(&req.QuantId, "QuantId", 1, wsHelpers.IdFieldMaxLength); err != nil { + return nil, err + } + dbItem, ownerItem, err := wsHelpers.GetUserObjectById[protos.QuantificationSummary](false, req.QuantId, protos.ObjectType_OT_QUANTIFICATION, dbCollections.QuantificationsName, hctx) if err != nil { return nil, err @@ -49,6 +54,12 @@ func HandleQuantGetReq(req *protos.QuantGetReq, hctx wsHelpers.HandlerContext) ( } } + // We seem to have some old quants where the status struct says start time was 0, but there is another start time in quant params, so + // substitute a non-zero value in this case + if dbItem.Status.StartUnixTimeSec == 0 && dbItem.Params.StartUnixTimeSec > 0 { + dbItem.Status.StartUnixTimeSec = dbItem.Params.StartUnixTimeSec + } + dbItem.Owner = wsHelpers.MakeOwnerSummary(ownerItem, hctx.SessUser, hctx.Svcs.MongoDB, hctx.Svcs.TimeStamper) return &protos.QuantGetResp{ @@ -93,5 +104,85 @@ func HandleQuantLastOutputGetReq(req *protos.QuantLastOutputGetReq, hctx wsHelpe } return &protos.QuantLastOutputGetResp{Output: string(result)}, nil +} + +func HandleQuantLogListReq(req *protos.QuantLogListReq, hctx wsHelpers.HandlerContext) (*protos.QuantLogListResp, error) { + if err := wsHelpers.CheckStringField(&req.QuantId, "QuantId", 1, wsHelpers.IdFieldMaxLength); err != nil { + return nil, err + } + + // Check that user has access to this quant + dbItem, _, err := wsHelpers.GetUserObjectById[protos.QuantificationSummary](false, req.QuantId, protos.ObjectType_OT_QUANTIFICATION, dbCollections.QuantificationsName, hctx) + if err != nil { + return nil, err + } + + logFilePaths, err := hctx.Svcs.FS.ListObjects(hctx.Svcs.Config.UsersBucket, path.Join(dbItem.Status.OutputFilePath, req.QuantId+"-logs")+"/") + if err != nil { + return nil, err + } + + logFileNames := []string{} + for _, logpath := range logFilePaths { + logFileNames = append(logFileNames, path.Base(logpath)) + } + + return &protos.QuantLogListResp{ + FileNames: logFileNames, + }, nil +} + +func HandleQuantLogGetReq(req *protos.QuantLogGetReq, hctx wsHelpers.HandlerContext) (*protos.QuantLogGetResp, error) { + if err := wsHelpers.CheckStringField(&req.QuantId, "QuantId", 1, wsHelpers.IdFieldMaxLength); err != nil { + return nil, err + } + if err := wsHelpers.CheckStringField(&req.LogName, "LogName", 1, wsHelpers.IdFieldMaxLength); err != nil { + return nil, err + } + // Check that user has access to this quant + dbItem, _, err := wsHelpers.GetUserObjectById[protos.QuantificationSummary](false, req.QuantId, protos.ObjectType_OT_QUANTIFICATION, dbCollections.QuantificationsName, hctx) + if err != nil { + return nil, err + } + + logPath := path.Join(dbItem.Status.OutputFilePath, req.QuantId+"-logs", req.LogName) + logData, err := hctx.Svcs.FS.ReadObject(hctx.Svcs.Config.UsersBucket, logPath) + if err != nil { + if hctx.Svcs.FS.IsNotFoundError(err) { + return nil, errorwithstatus.MakeNotFoundError(req.LogName) + } + return nil, err + } + + return &protos.QuantLogGetResp{ + LogData: string(logData), + }, nil +} + +func HandleQuantRawDataGetReq(req *protos.QuantRawDataGetReq, hctx wsHelpers.HandlerContext) (*protos.QuantRawDataGetResp, error) { + if err := wsHelpers.CheckStringField(&req.QuantId, "QuantId", 1, wsHelpers.IdFieldMaxLength); err != nil { + return nil, err + } + + // Check that user has access to this quant + dbItem, _, err := wsHelpers.GetUserObjectById[protos.QuantificationSummary](false, req.QuantId, protos.ObjectType_OT_QUANTIFICATION, dbCollections.QuantificationsName, hctx) + if err != nil { + return nil, err + } + //UserContent/5df311ed8a0b5d0ebf5fb476/089063943/Quantifications/ + // Read the CSV file from S3 + + csvPath := path.Join(dbItem.Status.OutputFilePath, req.QuantId+".csv") + csvData, err := hctx.Svcs.FS.ReadObject(hctx.Svcs.Config.UsersBucket, csvPath) + if err != nil { + if hctx.Svcs.FS.IsNotFoundError(err) { + return nil, errorwithstatus.MakeNotFoundError(req.QuantId + ".csv") + } + return nil, err + } + + return &protos.QuantRawDataGetResp{ + Data: string(csvData), + }, nil } diff --git a/api/ws/handlers/scan.go b/api/ws/handlers/scan.go index 904e88fd..455be72e 100644 --- a/api/ws/handlers/scan.go +++ b/api/ws/handlers/scan.go @@ -106,6 +106,11 @@ func HandleScanListReq(req *protos.ScanListReq, hctx wsHelpers.HandlerContext) ( return nil, err } + for _, scan := range scans { + owner := idToOwner[scan.Id] + scan.Owner = wsHelpers.MakeOwnerSummary(owner, hctx.SessUser, hctx.Svcs.MongoDB, hctx.Svcs.TimeStamper) + } + return &protos.ScanListResp{ Scans: scans, }, nil @@ -254,7 +259,7 @@ func HandleScanMetaWriteReq(req *protos.ScanMetaWriteReq, hctx wsHelpers.Handler if err := wsHelpers.CheckStringField(&req.Title, "Title", 1, 100); err != nil { return nil, err } - if err := wsHelpers.CheckStringField(&req.Description, "Description", 1, 600); err != nil { + if err := wsHelpers.CheckStringField(&req.Description, "Description", 0, 30000); err != nil { return nil, err } if err := wsHelpers.CheckFieldLength(req.Tags, "Tags", 0, 10); err != nil { @@ -305,7 +310,7 @@ func HandleScanTriggerReImportReq(req *protos.ScanTriggerReImportReq, hctx wsHel hctx.Svcs.MongoDB, } - jobStatus, err := job.AddJob("reimport", protos.JobStatus_JT_REIMPORT_SCAN, req.ScanId, uint32(hctx.Svcs.Config.ImportJobMaxTimeSec), hctx.Svcs.MongoDB, hctx.Svcs.IDGen, hctx.Svcs.TimeStamper, hctx.Svcs.Log, i.sendReimportUpdate) + jobStatus, err := job.AddJob("reimport", hctx.SessUser.User.Id, protos.JobStatus_JT_REIMPORT_SCAN, req.ScanId, fmt.Sprintf("Reimport: %v", req.ScanId), []string{}, uint32(hctx.Svcs.Config.ImportJobMaxTimeSec), hctx.Svcs.MongoDB, hctx.Svcs.IDGen, hctx.Svcs.TimeStamper, hctx.Svcs.Log, i.sendReimportUpdate) jobId := "" if jobStatus != nil { jobId = jobStatus.JobId @@ -544,7 +549,7 @@ func HandleScanUploadReq(req *protos.ScanUploadReq, hctx wsHelpers.HandlerContex } // Add a job watcher for this - jobStatus, err := job.AddJob("import", protos.JobStatus_JT_IMPORT_SCAN, datasetID, uint32(hctx.Svcs.Config.ImportJobMaxTimeSec), hctx.Svcs.MongoDB, hctx.Svcs.IDGen, hctx.Svcs.TimeStamper, hctx.Svcs.Log, i.sendImportUpdate) + jobStatus, err := job.AddJob("import", hctx.SessUser.User.Id, protos.JobStatus_JT_IMPORT_SCAN, datasetID, fmt.Sprintf("Import: %v", datasetID), []string{}, uint32(hctx.Svcs.Config.ImportJobMaxTimeSec), hctx.Svcs.MongoDB, hctx.Svcs.IDGen, hctx.Svcs.TimeStamper, hctx.Svcs.Log, i.sendImportUpdate) jobId := "" if jobStatus != nil { jobId = jobStatus.JobId diff --git a/api/ws/ws.go b/api/ws/ws.go index 78031ec5..18ddff81 100644 --- a/api/ws/ws.go +++ b/api/ws/ws.go @@ -174,9 +174,9 @@ func (ws *WSHandler) HandleMessage(s *melody.Session, msg []byte) { // Set incoming message ID on the outgoing one resp.MsgId = wsmsg.MsgId - // Print out errors - if len(resp.ErrorText) > 0 { - fmt.Printf("Sending Response Error for msg id %v:\n %v\n", resp.MsgId-1, resp.ErrorText) + // Print out errors, except common ones (cache misses) + if len(resp.ErrorText) > 0 && resp.GetMemoiseGetResp() == nil { + fmt.Printf("Sending Response Error: %v\n", resp.String()) } // Send diff --git a/api/ws/wsHelpers/ownership.go b/api/ws/wsHelpers/ownership.go index 7ebe2a4f..7a8835fd 100644 --- a/api/ws/wsHelpers/ownership.go +++ b/api/ws/wsHelpers/ownership.go @@ -324,20 +324,28 @@ func GetUserIdsForGroup(groupIds []string, mongoDB *mongo.Database) ([]string, e userIds := []string{} for _, group := range groups { // Pull in the users - for _, userId := range group.Viewers.UserIds { - userIds = append(userIds, userId) + if group.Viewers != nil { + for _, userId := range group.Viewers.UserIds { + userIds = append(userIds, userId) + } } - for _, userId := range group.Members.UserIds { - userIds = append(userIds, userId) + if group.Members != nil { + for _, userId := range group.Members.UserIds { + userIds = append(userIds, userId) + } } // Recurse into groups groupIds := []string{} - for _, groupId := range group.Viewers.GroupIds { - groupIds = append(groupIds, groupId) + if group.Viewers != nil { + for _, groupId := range group.Viewers.GroupIds { + groupIds = append(groupIds, groupId) + } } - for _, groupId := range group.Members.GroupIds { - groupIds = append(groupIds, groupId) + if group.Members != nil { + for _, groupId := range group.Members.GroupIds { + groupIds = append(groupIds, groupId) + } } usersForGroup, err := GetUserIdsForGroup(groupIds, mongoDB) diff --git a/core/beamLocation/experimentFileToDB.go b/core/beamLocation/experimentFileToDB.go index 7c49fff9..df2f422f 100644 --- a/core/beamLocation/experimentFileToDB.go +++ b/core/beamLocation/experimentFileToDB.go @@ -2,6 +2,7 @@ package beamLocation import ( "context" + "fmt" "github.com/pixlise/core/v4/api/dbCollections" "github.com/pixlise/core/v4/core/logger" @@ -13,32 +14,48 @@ import ( func ImportBeamLocationToDB(imgName string, instrument protos.ScanInstrument, forScanId string, beamVersion uint32, ijIndex int, fromExprPB *protos.Experiment, db *mongo.Database, logger logger.ILogger) error { imagesColl := db.Collection(dbCollections.ImageBeamLocationsName) + ctx := context.TODO() + filter := bson.M{"_id": imgName} beams := &protos.ImageLocations{ ImageName: imgName, LocationPerScan: []*protos.ImageLocationsForScan{}, } - // Find the coordinates for this image - ijs := []*protos.Coordinate2D{} - - for _, loc := range fromExprPB.Locations { - var ij *protos.Coordinate2D + // Try to read an existing one. If there is one, we may only be importing one of the multiple versions of beam geometry into it, we can't just blindly overwrite! + beamReadResult := imagesColl.FindOne(ctx, filter, options.FindOne()) + if beamReadResult.Err() != nil { + if beamReadResult.Err() != mongo.ErrNoDocuments { + // Some notable error, stop here + return fmt.Errorf("Failed to read existing beam location for image: %v. Error: %v", imgName, beamReadResult.Err()) + } else { + // we're happy to use the blank one above + logger.Infof("Image %v had no prior beam locations saved. Writing imported beam version: %v", imgName, beamVersion) + } + } else { + // Use the one we read + if err := beamReadResult.Decode(beams); err != nil { + return fmt.Errorf("Failed to decode existing beam location for image: %v. Error: %v", imgName, err) + } - if loc.Beam != nil { - ij = &protos.Coordinate2D{} - if ijIndex == 0 { - ij.I = loc.Beam.ImageI - ij.J = loc.Beam.ImageJ + // We've read what's already there, ensure that the version we're writing doesn't exist! + locs := []*protos.ImageLocationsForScan{} + for _, beamItem := range beams.LocationPerScan { + if beamItem.ScanId != forScanId || beamItem.BeamVersion != beamVersion { + locs = append(locs, beamItem) + logger.Infof("Existing beam version %v for image %v/scan id %v will be preserved", beamVersion, imgName, beamItem.ScanId) } else { - ij.I = loc.Beam.ContextLocations[ijIndex-1].I - ij.J = loc.Beam.ContextLocations[ijIndex-1].J + logger.Infof("Detected existing beam version %v for image %v/scan id %v. This will be replaced by the newly imported one", beamVersion, beamItem.ScanId, imgName) } } - ijs = append(ijs, ij) + // Set this back in the beam we read, we're ready to append our new version + beams.LocationPerScan = locs } + // Read ij's from the experiment file + ijs := ReadIJs(ijIndex, fromExprPB) + beams.LocationPerScan = append(beams.LocationPerScan, &protos.ImageLocationsForScan{ ScanId: forScanId, Instrument: instrument, @@ -49,7 +66,7 @@ func ImportBeamLocationToDB(imgName string, instrument protos.ScanInstrument, fo opt := options.Replace().SetUpsert(true) logger.Infof("Writing beam location to DB for image: %v, and scan: %v, instrument: %v, beamVersion: %v", imgName, forScanId, instrument, beamVersion) - result, err := imagesColl.ReplaceOne(context.TODO(), bson.M{"_id": imgName}, beams, opt) + result, err := imagesColl.ReplaceOne(ctx, filter, beams, opt) if err != nil { return err } @@ -60,3 +77,27 @@ func ImportBeamLocationToDB(imgName string, instrument protos.ScanInstrument, fo return nil } + +func ReadIJs(ijIndex int, fromExprPB *protos.Experiment) []*protos.Coordinate2D { + // Find the coordinates for this image + ijs := []*protos.Coordinate2D{} + + for _, loc := range fromExprPB.Locations { + var ij *protos.Coordinate2D + + if loc.Beam != nil { + ij = &protos.Coordinate2D{} + if ijIndex == 0 { + ij.I = loc.Beam.ImageI + ij.J = loc.Beam.ImageJ + } else { + ij.I = loc.Beam.ContextLocations[ijIndex-1].I + ij.J = loc.Beam.ContextLocations[ijIndex-1].J + } + } + + ijs = append(ijs, ij) + } + + return ijs +} diff --git a/data-formats b/data-formats index 98cf3f64..88d598d2 160000 --- a/data-formats +++ b/data-formats @@ -1 +1 @@ -Subproject commit 98cf3f64074cf1d3c598d0b5895b70a2e7d98eba +Subproject commit 88d598d28e38c3098109fd9c9d72558933dd13ca diff --git a/generated-protos/image-beam-location-msgs.pb.go b/generated-protos/image-beam-location-msgs.pb.go index 18c3d37d..5acd41c3 100644 --- a/generated-protos/image-beam-location-msgs.pb.go +++ b/generated-protos/image-beam-location-msgs.pb.go @@ -26,9 +26,9 @@ type ImageBeamLocationsReq struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ImageName string `protobuf:"bytes,1,opt,name=imageName,proto3" json:"imageName,omitempty"` - BeamVersion uint32 `protobuf:"varint,2,opt,name=beamVersion,proto3" json:"beamVersion,omitempty"` - GenerateForScanId string `protobuf:"bytes,3,opt,name=generateForScanId,proto3" json:"generateForScanId,omitempty"` + ImageName string `protobuf:"bytes,1,opt,name=imageName,proto3" json:"imageName,omitempty"` + ScanBeamVersions map[string]uint32 `protobuf:"bytes,4,rep,name=scanBeamVersions,proto3" json:"scanBeamVersions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + GenerateForScanId string `protobuf:"bytes,3,opt,name=generateForScanId,proto3" json:"generateForScanId,omitempty"` } func (x *ImageBeamLocationsReq) Reset() { @@ -70,11 +70,11 @@ func (x *ImageBeamLocationsReq) GetImageName() string { return "" } -func (x *ImageBeamLocationsReq) GetBeamVersion() uint32 { +func (x *ImageBeamLocationsReq) GetScanBeamVersions() map[string]uint32 { if x != nil { - return x.BeamVersion + return x.ScanBeamVersions } - return 0 + return nil } func (x *ImageBeamLocationsReq) GetGenerateForScanId() string { @@ -131,27 +131,200 @@ func (x *ImageBeamLocationsResp) GetLocations() *ImageLocations { return nil } +// requires(NONE) +type ImageBeamLocationVersionsReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ImageName string `protobuf:"bytes,1,opt,name=imageName,proto3" json:"imageName,omitempty"` +} + +func (x *ImageBeamLocationVersionsReq) Reset() { + *x = ImageBeamLocationVersionsReq{} + if protoimpl.UnsafeEnabled { + mi := &file_image_beam_location_msgs_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImageBeamLocationVersionsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImageBeamLocationVersionsReq) ProtoMessage() {} + +func (x *ImageBeamLocationVersionsReq) ProtoReflect() protoreflect.Message { + mi := &file_image_beam_location_msgs_proto_msgTypes[2] + 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 ImageBeamLocationVersionsReq.ProtoReflect.Descriptor instead. +func (*ImageBeamLocationVersionsReq) Descriptor() ([]byte, []int) { + return file_image_beam_location_msgs_proto_rawDescGZIP(), []int{2} +} + +func (x *ImageBeamLocationVersionsReq) GetImageName() string { + if x != nil { + return x.ImageName + } + return "" +} + +type ImageBeamLocationVersionsResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BeamVersionPerScan map[string]*ImageBeamLocationVersionsResp_AvailableVersions `protobuf:"bytes,1,rep,name=beamVersionPerScan,proto3" json:"beamVersionPerScan,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ImageBeamLocationVersionsResp) Reset() { + *x = ImageBeamLocationVersionsResp{} + if protoimpl.UnsafeEnabled { + mi := &file_image_beam_location_msgs_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImageBeamLocationVersionsResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImageBeamLocationVersionsResp) ProtoMessage() {} + +func (x *ImageBeamLocationVersionsResp) ProtoReflect() protoreflect.Message { + mi := &file_image_beam_location_msgs_proto_msgTypes[3] + 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 ImageBeamLocationVersionsResp.ProtoReflect.Descriptor instead. +func (*ImageBeamLocationVersionsResp) Descriptor() ([]byte, []int) { + return file_image_beam_location_msgs_proto_rawDescGZIP(), []int{3} +} + +func (x *ImageBeamLocationVersionsResp) GetBeamVersionPerScan() map[string]*ImageBeamLocationVersionsResp_AvailableVersions { + if x != nil { + return x.BeamVersionPerScan + } + return nil +} + +type ImageBeamLocationVersionsResp_AvailableVersions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Versions []uint32 `protobuf:"varint,1,rep,packed,name=versions,proto3" json:"versions,omitempty"` +} + +func (x *ImageBeamLocationVersionsResp_AvailableVersions) Reset() { + *x = ImageBeamLocationVersionsResp_AvailableVersions{} + if protoimpl.UnsafeEnabled { + mi := &file_image_beam_location_msgs_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImageBeamLocationVersionsResp_AvailableVersions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImageBeamLocationVersionsResp_AvailableVersions) ProtoMessage() {} + +func (x *ImageBeamLocationVersionsResp_AvailableVersions) ProtoReflect() protoreflect.Message { + mi := &file_image_beam_location_msgs_proto_msgTypes[5] + 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 ImageBeamLocationVersionsResp_AvailableVersions.ProtoReflect.Descriptor instead. +func (*ImageBeamLocationVersionsResp_AvailableVersions) Descriptor() ([]byte, []int) { + return file_image_beam_location_msgs_proto_rawDescGZIP(), []int{3, 0} +} + +func (x *ImageBeamLocationVersionsResp_AvailableVersions) GetVersions() []uint32 { + if x != nil { + return x.Versions + } + return nil +} + var File_image_beam_location_msgs_proto protoreflect.FileDescriptor var file_image_beam_location_msgs_proto_rawDesc = []byte{ 0x0a, 0x1e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2d, 0x62, 0x65, 0x61, 0x6d, 0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2d, 0x62, 0x65, 0x61, 0x6d, 0x2d, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x85, 0x01, 0x0a, 0x15, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x82, 0x02, 0x0a, 0x15, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x65, 0x61, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x62, 0x65, 0x61, 0x6d, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x11, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x46, 0x6f, 0x72, 0x53, 0x63, 0x61, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x11, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x53, 0x63, 0x61, - 0x6e, 0x49, 0x64, 0x22, 0x47, 0x0a, 0x16, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, 0x61, 0x6d, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, - 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x0a, 0x5a, 0x08, - 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x6d, 0x65, 0x12, 0x58, 0x0a, 0x10, 0x73, 0x63, 0x61, 0x6e, 0x42, 0x65, 0x61, 0x6d, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x71, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x42, 0x65, 0x61, 0x6d, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x73, 0x63, 0x61, + 0x6e, 0x42, 0x65, 0x61, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, + 0x11, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x53, 0x63, 0x61, 0x6e, + 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x46, 0x6f, 0x72, 0x53, 0x63, 0x61, 0x6e, 0x49, 0x64, 0x1a, 0x43, 0x0a, 0x15, 0x53, + 0x63, 0x61, 0x6e, 0x42, 0x65, 0x61, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 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, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0x47, 0x0a, 0x16, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x09, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x09, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x3c, 0x0a, 0x1c, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb1, 0x02, 0x0a, 0x1d, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x66, 0x0a, 0x12, 0x62, 0x65, 0x61, + 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x53, 0x63, 0x61, 0x6e, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, 0x61, + 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x42, 0x65, 0x61, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x50, 0x65, 0x72, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x62, + 0x65, 0x61, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x53, 0x63, 0x61, + 0x6e, 0x1a, 0x2f, 0x0a, 0x11, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x1a, 0x77, 0x0a, 0x17, 0x42, 0x65, 0x61, 0x6d, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x50, 0x65, 0x72, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, + 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x41, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0a, 0x5a, 0x08, 0x2e, + 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -166,19 +339,27 @@ func file_image_beam_location_msgs_proto_rawDescGZIP() []byte { return file_image_beam_location_msgs_proto_rawDescData } -var file_image_beam_location_msgs_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_image_beam_location_msgs_proto_msgTypes = make([]protoimpl.MessageInfo, 7) var file_image_beam_location_msgs_proto_goTypes = []interface{}{ - (*ImageBeamLocationsReq)(nil), // 0: ImageBeamLocationsReq - (*ImageBeamLocationsResp)(nil), // 1: ImageBeamLocationsResp - (*ImageLocations)(nil), // 2: ImageLocations + (*ImageBeamLocationsReq)(nil), // 0: ImageBeamLocationsReq + (*ImageBeamLocationsResp)(nil), // 1: ImageBeamLocationsResp + (*ImageBeamLocationVersionsReq)(nil), // 2: ImageBeamLocationVersionsReq + (*ImageBeamLocationVersionsResp)(nil), // 3: ImageBeamLocationVersionsResp + nil, // 4: ImageBeamLocationsReq.ScanBeamVersionsEntry + (*ImageBeamLocationVersionsResp_AvailableVersions)(nil), // 5: ImageBeamLocationVersionsResp.AvailableVersions + nil, // 6: ImageBeamLocationVersionsResp.BeamVersionPerScanEntry + (*ImageLocations)(nil), // 7: ImageLocations } var file_image_beam_location_msgs_proto_depIdxs = []int32{ - 2, // 0: ImageBeamLocationsResp.locations:type_name -> ImageLocations - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name + 4, // 0: ImageBeamLocationsReq.scanBeamVersions:type_name -> ImageBeamLocationsReq.ScanBeamVersionsEntry + 7, // 1: ImageBeamLocationsResp.locations:type_name -> ImageLocations + 6, // 2: ImageBeamLocationVersionsResp.beamVersionPerScan:type_name -> ImageBeamLocationVersionsResp.BeamVersionPerScanEntry + 5, // 3: ImageBeamLocationVersionsResp.BeamVersionPerScanEntry.value:type_name -> ImageBeamLocationVersionsResp.AvailableVersions + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name } func init() { file_image_beam_location_msgs_proto_init() } @@ -212,6 +393,42 @@ func file_image_beam_location_msgs_proto_init() { return nil } } + file_image_beam_location_msgs_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ImageBeamLocationVersionsReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_image_beam_location_msgs_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ImageBeamLocationVersionsResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_image_beam_location_msgs_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ImageBeamLocationVersionsResp_AvailableVersions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -219,7 +436,7 @@ func file_image_beam_location_msgs_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_image_beam_location_msgs_proto_rawDesc, NumEnums: 0, - NumMessages: 2, + NumMessages: 7, NumExtensions: 0, NumServices: 0, }, diff --git a/generated-protos/job-msgs.pb.go b/generated-protos/job-msgs.pb.go index 63a874bd..deb0406c 100644 --- a/generated-protos/job-msgs.pb.go +++ b/generated-protos/job-msgs.pb.go @@ -10,6 +10,7 @@ import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" + sync "sync" ) const ( @@ -19,21 +20,181 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// requires(QUANTIFY) +type JobListReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *JobListReq) Reset() { + *x = JobListReq{} + if protoimpl.UnsafeEnabled { + mi := &file_job_msgs_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *JobListReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JobListReq) ProtoMessage() {} + +func (x *JobListReq) ProtoReflect() protoreflect.Message { + mi := &file_job_msgs_proto_msgTypes[0] + 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 JobListReq.ProtoReflect.Descriptor instead. +func (*JobListReq) Descriptor() ([]byte, []int) { + return file_job_msgs_proto_rawDescGZIP(), []int{0} +} + +type JobListResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Jobs []*JobStatus `protobuf:"bytes,1,rep,name=jobs,proto3" json:"jobs,omitempty"` +} + +func (x *JobListResp) Reset() { + *x = JobListResp{} + if protoimpl.UnsafeEnabled { + mi := &file_job_msgs_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *JobListResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JobListResp) ProtoMessage() {} + +func (x *JobListResp) ProtoReflect() protoreflect.Message { + mi := &file_job_msgs_proto_msgTypes[1] + 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 JobListResp.ProtoReflect.Descriptor instead. +func (*JobListResp) Descriptor() ([]byte, []int) { + return file_job_msgs_proto_rawDescGZIP(), []int{1} +} + +func (x *JobListResp) GetJobs() []*JobStatus { + if x != nil { + return x.Jobs + } + return nil +} + +type JobListUpd struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Job *JobStatus `protobuf:"bytes,1,opt,name=job,proto3" json:"job,omitempty"` +} + +func (x *JobListUpd) Reset() { + *x = JobListUpd{} + if protoimpl.UnsafeEnabled { + mi := &file_job_msgs_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *JobListUpd) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JobListUpd) ProtoMessage() {} + +func (x *JobListUpd) ProtoReflect() protoreflect.Message { + mi := &file_job_msgs_proto_msgTypes[2] + 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 JobListUpd.ProtoReflect.Descriptor instead. +func (*JobListUpd) Descriptor() ([]byte, []int) { + return file_job_msgs_proto_rawDescGZIP(), []int{2} +} + +func (x *JobListUpd) GetJob() *JobStatus { + if x != nil { + return x.Job + } + return nil +} + var File_job_msgs_proto protoreflect.FileDescriptor var file_job_msgs_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x6a, 0x6f, 0x62, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x1a, 0x09, 0x6a, 0x6f, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x0c, 0x0a, 0x0a, 0x4a, + 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x22, 0x2d, 0x0a, 0x0b, 0x4a, 0x6f, 0x62, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1e, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, 0x2a, 0x0a, 0x0a, 0x4a, 0x6f, 0x62, 0x4c, + 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x12, 0x1c, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x03, 0x6a, 0x6f, 0x62, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } -var file_job_msgs_proto_goTypes = []interface{}{} +var ( + file_job_msgs_proto_rawDescOnce sync.Once + file_job_msgs_proto_rawDescData = file_job_msgs_proto_rawDesc +) + +func file_job_msgs_proto_rawDescGZIP() []byte { + file_job_msgs_proto_rawDescOnce.Do(func() { + file_job_msgs_proto_rawDescData = protoimpl.X.CompressGZIP(file_job_msgs_proto_rawDescData) + }) + return file_job_msgs_proto_rawDescData +} + +var file_job_msgs_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_job_msgs_proto_goTypes = []interface{}{ + (*JobListReq)(nil), // 0: JobListReq + (*JobListResp)(nil), // 1: JobListResp + (*JobListUpd)(nil), // 2: JobListUpd + (*JobStatus)(nil), // 3: JobStatus +} var file_job_msgs_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name + 3, // 0: JobListResp.jobs:type_name -> JobStatus + 3, // 1: JobListUpd.job:type_name -> JobStatus + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name } func init() { file_job_msgs_proto_init() } @@ -41,18 +202,58 @@ func file_job_msgs_proto_init() { if File_job_msgs_proto != nil { return } + file_job_proto_init() + if !protoimpl.UnsafeEnabled { + file_job_msgs_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*JobListReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_job_msgs_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*JobListResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_job_msgs_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*JobListUpd); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_job_msgs_proto_rawDesc, NumEnums: 0, - NumMessages: 0, + NumMessages: 3, NumExtensions: 0, NumServices: 0, }, GoTypes: file_job_msgs_proto_goTypes, DependencyIndexes: file_job_msgs_proto_depIdxs, + MessageInfos: file_job_msgs_proto_msgTypes, }.Build() File_job_msgs_proto = out.File file_job_msgs_proto_rawDesc = nil diff --git a/generated-protos/job.pb.go b/generated-protos/job.pb.go index 91edb26c..f135b3d6 100644 --- a/generated-protos/job.pb.go +++ b/generated-protos/job.pb.go @@ -157,6 +157,11 @@ type JobStatus struct { EndUnixTimeSec uint32 `protobuf:"varint,7,opt,name=endUnixTimeSec,proto3" json:"endUnixTimeSec,omitempty"` // Job completion time OutputFilePath string `protobuf:"bytes,8,opt,name=outputFilePath,proto3" json:"outputFilePath,omitempty"` // Where the job output its final result(s) OtherLogFiles []string `protobuf:"bytes,9,rep,name=otherLogFiles,proto3" json:"otherLogFiles,omitempty"` // Any other logs (eg PIQUANT log files) generated by the job + // Job requestor + RequestorUserId string `protobuf:"bytes,12,opt,name=requestorUserId,proto3" json:"requestorUserId,omitempty"` // Where the job output its final result(s) + // Some more info about the job itself + Name string `protobuf:"bytes,13,opt,name=name,proto3" json:"name,omitempty"` // Eg the quant, scan or image name + Elements []string `protobuf:"bytes,14,rep,name=elements,proto3" json:"elements,omitempty"` // If it's a quant, the list of elements being quantified } func (x *JobStatus) Reset() { @@ -268,6 +273,27 @@ func (x *JobStatus) GetOtherLogFiles() []string { return nil } +func (x *JobStatus) GetRequestorUserId() string { + if x != nil { + return x.RequestorUserId + } + return "" +} + +func (x *JobStatus) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *JobStatus) GetElements() []string { + if x != nil { + return x.Elements + } + return nil +} + // Which API instance wants to handle this job? This is only used // when it's an external request and APIs realise that an unknown // job got completed. Now one will have to handle things like @@ -348,7 +374,7 @@ func (x *JobHandlerDBItem) GetTimeStampUnixSec() uint32 { var File_job_proto protoreflect.FileDescriptor var file_job_proto_rawDesc = []byte{ - 0x0a, 0x09, 0x6a, 0x6f, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x83, 0x05, 0x0a, 0x09, + 0x0a, 0x09, 0x6a, 0x6f, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xdd, 0x05, 0x0a, 0x09, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, @@ -374,32 +400,38 @@ var file_job_proto_rawDesc = []byte{ 0x74, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0d, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x22, 0x75, - 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, - 0x47, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, - 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x53, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, - 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x47, 0x41, 0x54, 0x48, 0x45, 0x52, 0x49, - 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, - 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, - 0x52, 0x4f, 0x52, 0x10, 0x06, 0x22, 0x6a, 0x0a, 0x07, 0x4a, 0x6f, 0x62, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x0e, 0x0a, 0x0a, 0x4a, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, - 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x54, 0x5f, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x43, - 0x41, 0x4e, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x4a, 0x54, 0x5f, 0x52, 0x45, 0x49, 0x4d, 0x50, - 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x43, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x4a, 0x54, - 0x5f, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12, - 0x10, 0x0a, 0x0c, 0x4a, 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x51, 0x55, 0x41, 0x4e, 0x54, 0x10, - 0x04, 0x22, 0x92, 0x01, 0x0a, 0x10, 0x4a, 0x6f, 0x62, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, - 0x44, 0x42, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, - 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x69, - 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x55, 0x6e, 0x69, 0x78, 0x53, 0x65, 0x63, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x55, - 0x6e, 0x69, 0x78, 0x53, 0x65, 0x63, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x0d, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x28, + 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x6f, 0x72, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x75, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x13, 0x0a, + 0x0f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x53, + 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, + 0x15, 0x0a, 0x11, 0x47, 0x41, 0x54, 0x48, 0x45, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x53, + 0x55, 0x4c, 0x54, 0x53, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, + 0x54, 0x45, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x06, 0x22, + 0x6a, 0x0a, 0x07, 0x4a, 0x6f, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x4a, 0x54, + 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x54, + 0x5f, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x43, 0x41, 0x4e, 0x10, 0x01, 0x12, 0x14, + 0x0a, 0x10, 0x4a, 0x54, 0x5f, 0x52, 0x45, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x53, 0x43, + 0x41, 0x4e, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x4a, 0x54, 0x5f, 0x49, 0x4d, 0x50, 0x4f, 0x52, + 0x54, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x4a, 0x54, 0x5f, + 0x52, 0x55, 0x4e, 0x5f, 0x51, 0x55, 0x41, 0x4e, 0x54, 0x10, 0x04, 0x22, 0x92, 0x01, 0x0a, 0x10, + 0x4a, 0x6f, 0x62, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x44, 0x42, 0x49, 0x74, 0x65, 0x6d, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, + 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x11, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, + 0x70, 0x55, 0x6e, 0x69, 0x78, 0x53, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, + 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x55, 0x6e, 0x69, 0x78, 0x53, 0x65, 0x63, + 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/generated-protos/quantification-retrieval-msgs.pb.go b/generated-protos/quantification-retrieval-msgs.pb.go index 2effc136..92d4519c 100644 --- a/generated-protos/quantification-retrieval-msgs.pb.go +++ b/generated-protos/quantification-retrieval-msgs.pb.go @@ -275,6 +275,299 @@ func (x *QuantGetResp) GetData() *Quantification { return nil } +// requires(NONE) +type QuantLogListReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + QuantId string `protobuf:"bytes,1,opt,name=quantId,proto3" json:"quantId,omitempty"` +} + +func (x *QuantLogListReq) Reset() { + *x = QuantLogListReq{} + if protoimpl.UnsafeEnabled { + mi := &file_quantification_retrieval_msgs_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QuantLogListReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QuantLogListReq) ProtoMessage() {} + +func (x *QuantLogListReq) ProtoReflect() protoreflect.Message { + mi := &file_quantification_retrieval_msgs_proto_msgTypes[4] + 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 QuantLogListReq.ProtoReflect.Descriptor instead. +func (*QuantLogListReq) Descriptor() ([]byte, []int) { + return file_quantification_retrieval_msgs_proto_rawDescGZIP(), []int{4} +} + +func (x *QuantLogListReq) GetQuantId() string { + if x != nil { + return x.QuantId + } + return "" +} + +type QuantLogListResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FileNames []string `protobuf:"bytes,1,rep,name=fileNames,proto3" json:"fileNames,omitempty"` +} + +func (x *QuantLogListResp) Reset() { + *x = QuantLogListResp{} + if protoimpl.UnsafeEnabled { + mi := &file_quantification_retrieval_msgs_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QuantLogListResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QuantLogListResp) ProtoMessage() {} + +func (x *QuantLogListResp) ProtoReflect() protoreflect.Message { + mi := &file_quantification_retrieval_msgs_proto_msgTypes[5] + 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 QuantLogListResp.ProtoReflect.Descriptor instead. +func (*QuantLogListResp) Descriptor() ([]byte, []int) { + return file_quantification_retrieval_msgs_proto_rawDescGZIP(), []int{5} +} + +func (x *QuantLogListResp) GetFileNames() []string { + if x != nil { + return x.FileNames + } + return nil +} + +// requires(NONE) +type QuantLogGetReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + QuantId string `protobuf:"bytes,1,opt,name=quantId,proto3" json:"quantId,omitempty"` + LogName string `protobuf:"bytes,2,opt,name=logName,proto3" json:"logName,omitempty"` +} + +func (x *QuantLogGetReq) Reset() { + *x = QuantLogGetReq{} + if protoimpl.UnsafeEnabled { + mi := &file_quantification_retrieval_msgs_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QuantLogGetReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QuantLogGetReq) ProtoMessage() {} + +func (x *QuantLogGetReq) ProtoReflect() protoreflect.Message { + mi := &file_quantification_retrieval_msgs_proto_msgTypes[6] + 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 QuantLogGetReq.ProtoReflect.Descriptor instead. +func (*QuantLogGetReq) Descriptor() ([]byte, []int) { + return file_quantification_retrieval_msgs_proto_rawDescGZIP(), []int{6} +} + +func (x *QuantLogGetReq) GetQuantId() string { + if x != nil { + return x.QuantId + } + return "" +} + +func (x *QuantLogGetReq) GetLogName() string { + if x != nil { + return x.LogName + } + return "" +} + +type QuantLogGetResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LogData string `protobuf:"bytes,1,opt,name=logData,proto3" json:"logData,omitempty"` +} + +func (x *QuantLogGetResp) Reset() { + *x = QuantLogGetResp{} + if protoimpl.UnsafeEnabled { + mi := &file_quantification_retrieval_msgs_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QuantLogGetResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QuantLogGetResp) ProtoMessage() {} + +func (x *QuantLogGetResp) ProtoReflect() protoreflect.Message { + mi := &file_quantification_retrieval_msgs_proto_msgTypes[7] + 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 QuantLogGetResp.ProtoReflect.Descriptor instead. +func (*QuantLogGetResp) Descriptor() ([]byte, []int) { + return file_quantification_retrieval_msgs_proto_rawDescGZIP(), []int{7} +} + +func (x *QuantLogGetResp) GetLogData() string { + if x != nil { + return x.LogData + } + return "" +} + +// requires(NONE) +type QuantRawDataGetReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + QuantId string `protobuf:"bytes,1,opt,name=quantId,proto3" json:"quantId,omitempty"` +} + +func (x *QuantRawDataGetReq) Reset() { + *x = QuantRawDataGetReq{} + if protoimpl.UnsafeEnabled { + mi := &file_quantification_retrieval_msgs_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QuantRawDataGetReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QuantRawDataGetReq) ProtoMessage() {} + +func (x *QuantRawDataGetReq) ProtoReflect() protoreflect.Message { + mi := &file_quantification_retrieval_msgs_proto_msgTypes[8] + 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 QuantRawDataGetReq.ProtoReflect.Descriptor instead. +func (*QuantRawDataGetReq) Descriptor() ([]byte, []int) { + return file_quantification_retrieval_msgs_proto_rawDescGZIP(), []int{8} +} + +func (x *QuantRawDataGetReq) GetQuantId() string { + if x != nil { + return x.QuantId + } + return "" +} + +type QuantRawDataGetResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data string `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *QuantRawDataGetResp) Reset() { + *x = QuantRawDataGetResp{} + if protoimpl.UnsafeEnabled { + mi := &file_quantification_retrieval_msgs_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QuantRawDataGetResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QuantRawDataGetResp) ProtoMessage() {} + +func (x *QuantRawDataGetResp) ProtoReflect() protoreflect.Message { + mi := &file_quantification_retrieval_msgs_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QuantRawDataGetResp.ProtoReflect.Descriptor instead. +func (*QuantRawDataGetResp) Descriptor() ([]byte, []int) { + return file_quantification_retrieval_msgs_proto_rawDescGZIP(), []int{9} +} + +func (x *QuantRawDataGetResp) GetData() string { + if x != nil { + return x.Data + } + return "" +} + // requires(NONE) type QuantLastOutputGetReq struct { state protoimpl.MessageState @@ -289,7 +582,7 @@ type QuantLastOutputGetReq struct { func (x *QuantLastOutputGetReq) Reset() { *x = QuantLastOutputGetReq{} if protoimpl.UnsafeEnabled { - mi := &file_quantification_retrieval_msgs_proto_msgTypes[4] + mi := &file_quantification_retrieval_msgs_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -302,7 +595,7 @@ func (x *QuantLastOutputGetReq) String() string { func (*QuantLastOutputGetReq) ProtoMessage() {} func (x *QuantLastOutputGetReq) ProtoReflect() protoreflect.Message { - mi := &file_quantification_retrieval_msgs_proto_msgTypes[4] + mi := &file_quantification_retrieval_msgs_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -315,7 +608,7 @@ func (x *QuantLastOutputGetReq) ProtoReflect() protoreflect.Message { // Deprecated: Use QuantLastOutputGetReq.ProtoReflect.Descriptor instead. func (*QuantLastOutputGetReq) Descriptor() ([]byte, []int) { - return file_quantification_retrieval_msgs_proto_rawDescGZIP(), []int{4} + return file_quantification_retrieval_msgs_proto_rawDescGZIP(), []int{10} } func (x *QuantLastOutputGetReq) GetOutputType() QuantOutputType { @@ -350,7 +643,7 @@ type QuantLastOutputGetResp struct { func (x *QuantLastOutputGetResp) Reset() { *x = QuantLastOutputGetResp{} if protoimpl.UnsafeEnabled { - mi := &file_quantification_retrieval_msgs_proto_msgTypes[5] + mi := &file_quantification_retrieval_msgs_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -363,7 +656,7 @@ func (x *QuantLastOutputGetResp) String() string { func (*QuantLastOutputGetResp) ProtoMessage() {} func (x *QuantLastOutputGetResp) ProtoReflect() protoreflect.Message { - mi := &file_quantification_retrieval_msgs_proto_msgTypes[5] + mi := &file_quantification_retrieval_msgs_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -376,7 +669,7 @@ func (x *QuantLastOutputGetResp) ProtoReflect() protoreflect.Message { // Deprecated: Use QuantLastOutputGetResp.ProtoReflect.Descriptor instead. func (*QuantLastOutputGetResp) Descriptor() ([]byte, []int) { - return file_quantification_retrieval_msgs_proto_rawDescGZIP(), []int{5} + return file_quantification_retrieval_msgs_proto_rawDescGZIP(), []int{11} } func (x *QuantLastOutputGetResp) GetOutput() string { @@ -415,23 +708,42 @@ var file_quantification_retrieval_msgs_proto_rawDesc = []byte{ 0x61, 0x72, 0x79, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x89, 0x01, 0x0a, 0x15, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x30, 0x0a, 0x0a, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x10, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x63, 0x61, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x63, 0x61, 0x6e, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, - 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x30, 0x0a, - 0x16, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2a, - 0x3a, 0x0a, 0x0f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x51, 0x4f, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x51, 0x4f, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x10, 0x01, 0x12, - 0x0a, 0x0a, 0x06, 0x51, 0x4f, 0x5f, 0x4c, 0x4f, 0x47, 0x10, 0x02, 0x42, 0x0a, 0x5a, 0x08, 0x2e, - 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x22, 0x2b, 0x0a, 0x0f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x30, + 0x0a, 0x10, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x22, 0x44, 0x0a, 0x0e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x6c, 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, + 0x6f, 0x67, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x2b, 0x0a, 0x0f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x4c, + 0x6f, 0x67, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x6f, 0x67, + 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x6f, 0x67, 0x44, + 0x61, 0x74, 0x61, 0x22, 0x2e, 0x0a, 0x12, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x61, 0x77, 0x44, + 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x71, 0x75, 0x61, + 0x6e, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x71, 0x75, 0x61, 0x6e, + 0x74, 0x49, 0x64, 0x22, 0x29, 0x0a, 0x13, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x61, 0x77, 0x44, + 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x89, + 0x01, 0x0a, 0x15, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x30, 0x0a, 0x0a, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x51, + 0x75, 0x61, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, + 0x61, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x61, 0x6e, + 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x69, 0x71, 0x75, + 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x22, 0x30, 0x0a, 0x16, 0x51, 0x75, + 0x61, 0x6e, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2a, 0x3a, 0x0a, 0x0f, + 0x51, 0x75, 0x61, 0x6e, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x0e, 0x0a, 0x0a, 0x51, 0x4f, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x0b, 0x0a, 0x07, 0x51, 0x4f, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, + 0x51, 0x4f, 0x5f, 0x4c, 0x4f, 0x47, 0x10, 0x02, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -447,30 +759,36 @@ func file_quantification_retrieval_msgs_proto_rawDescGZIP() []byte { } var file_quantification_retrieval_msgs_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_quantification_retrieval_msgs_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_quantification_retrieval_msgs_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_quantification_retrieval_msgs_proto_goTypes = []interface{}{ (QuantOutputType)(0), // 0: QuantOutputType (*QuantListReq)(nil), // 1: QuantListReq (*QuantListResp)(nil), // 2: QuantListResp (*QuantGetReq)(nil), // 3: QuantGetReq (*QuantGetResp)(nil), // 4: QuantGetResp - (*QuantLastOutputGetReq)(nil), // 5: QuantLastOutputGetReq - (*QuantLastOutputGetResp)(nil), // 6: QuantLastOutputGetResp - (*SearchParams)(nil), // 7: SearchParams - (*QuantificationSummary)(nil), // 8: QuantificationSummary - (*Quantification)(nil), // 9: Quantification + (*QuantLogListReq)(nil), // 5: QuantLogListReq + (*QuantLogListResp)(nil), // 6: QuantLogListResp + (*QuantLogGetReq)(nil), // 7: QuantLogGetReq + (*QuantLogGetResp)(nil), // 8: QuantLogGetResp + (*QuantRawDataGetReq)(nil), // 9: QuantRawDataGetReq + (*QuantRawDataGetResp)(nil), // 10: QuantRawDataGetResp + (*QuantLastOutputGetReq)(nil), // 11: QuantLastOutputGetReq + (*QuantLastOutputGetResp)(nil), // 12: QuantLastOutputGetResp + (*SearchParams)(nil), // 13: SearchParams + (*QuantificationSummary)(nil), // 14: QuantificationSummary + (*Quantification)(nil), // 15: Quantification } var file_quantification_retrieval_msgs_proto_depIdxs = []int32{ - 7, // 0: QuantListReq.searchParams:type_name -> SearchParams - 8, // 1: QuantListResp.quants:type_name -> QuantificationSummary - 8, // 2: QuantGetResp.summary:type_name -> QuantificationSummary - 9, // 3: QuantGetResp.data:type_name -> Quantification - 0, // 4: QuantLastOutputGetReq.outputType:type_name -> QuantOutputType - 5, // [5:5] is the sub-list for method output_type - 5, // [5:5] is the sub-list for method input_type - 5, // [5:5] is the sub-list for extension type_name - 5, // [5:5] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name + 13, // 0: QuantListReq.searchParams:type_name -> SearchParams + 14, // 1: QuantListResp.quants:type_name -> QuantificationSummary + 14, // 2: QuantGetResp.summary:type_name -> QuantificationSummary + 15, // 3: QuantGetResp.data:type_name -> Quantification + 0, // 4: QuantLastOutputGetReq.outputType:type_name -> QuantOutputType + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name } func init() { file_quantification_retrieval_msgs_proto_init() } @@ -531,7 +849,7 @@ func file_quantification_retrieval_msgs_proto_init() { } } file_quantification_retrieval_msgs_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*QuantLastOutputGetReq); i { + switch v := v.(*QuantLogListReq); i { case 0: return &v.state case 1: @@ -543,6 +861,78 @@ func file_quantification_retrieval_msgs_proto_init() { } } file_quantification_retrieval_msgs_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QuantLogListResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_quantification_retrieval_msgs_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QuantLogGetReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_quantification_retrieval_msgs_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QuantLogGetResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_quantification_retrieval_msgs_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QuantRawDataGetReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_quantification_retrieval_msgs_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QuantRawDataGetResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_quantification_retrieval_msgs_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QuantLastOutputGetReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_quantification_retrieval_msgs_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QuantLastOutputGetResp); i { case 0: return &v.state @@ -561,7 +951,7 @@ func file_quantification_retrieval_msgs_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_quantification_retrieval_msgs_proto_rawDesc, NumEnums: 1, - NumMessages: 6, + NumMessages: 12, NumExtensions: 0, NumServices: 0, }, diff --git a/generated-protos/websocket.pb.go b/generated-protos/websocket.pb.go index 0c45eed9..29f13f03 100644 --- a/generated-protos/websocket.pb.go +++ b/generated-protos/websocket.pb.go @@ -164,6 +164,8 @@ type WSMessage struct { // *WSMessage_ExpressionWriteResp // *WSMessage_GetOwnershipReq // *WSMessage_GetOwnershipResp + // *WSMessage_ImageBeamLocationVersionsReq + // *WSMessage_ImageBeamLocationVersionsResp // *WSMessage_ImageBeamLocationsReq // *WSMessage_ImageBeamLocationsResp // *WSMessage_ImageDeleteReq @@ -184,6 +186,9 @@ type WSMessage struct { // *WSMessage_ImportMarsViewerImageReq // *WSMessage_ImportMarsViewerImageResp // *WSMessage_ImportMarsViewerImageUpd + // *WSMessage_JobListReq + // *WSMessage_JobListResp + // *WSMessage_JobListUpd // *WSMessage_LogGetLevelReq // *WSMessage_LogGetLevelResp // *WSMessage_LogReadReq @@ -238,8 +243,14 @@ type WSMessage struct { // *WSMessage_QuantLastOutputGetResp // *WSMessage_QuantListReq // *WSMessage_QuantListResp + // *WSMessage_QuantLogGetReq + // *WSMessage_QuantLogGetResp + // *WSMessage_QuantLogListReq + // *WSMessage_QuantLogListResp // *WSMessage_QuantPublishReq // *WSMessage_QuantPublishResp + // *WSMessage_QuantRawDataGetReq + // *WSMessage_QuantRawDataGetResp // *WSMessage_QuantUploadReq // *WSMessage_QuantUploadResp // *WSMessage_RegionOfInterestBulkDuplicateReq @@ -855,6 +866,20 @@ func (x *WSMessage) GetGetOwnershipResp() *GetOwnershipResp { return nil } +func (x *WSMessage) GetImageBeamLocationVersionsReq() *ImageBeamLocationVersionsReq { + if x, ok := x.GetContents().(*WSMessage_ImageBeamLocationVersionsReq); ok { + return x.ImageBeamLocationVersionsReq + } + return nil +} + +func (x *WSMessage) GetImageBeamLocationVersionsResp() *ImageBeamLocationVersionsResp { + if x, ok := x.GetContents().(*WSMessage_ImageBeamLocationVersionsResp); ok { + return x.ImageBeamLocationVersionsResp + } + return nil +} + func (x *WSMessage) GetImageBeamLocationsReq() *ImageBeamLocationsReq { if x, ok := x.GetContents().(*WSMessage_ImageBeamLocationsReq); ok { return x.ImageBeamLocationsReq @@ -995,6 +1020,27 @@ func (x *WSMessage) GetImportMarsViewerImageUpd() *ImportMarsViewerImageUpd { return nil } +func (x *WSMessage) GetJobListReq() *JobListReq { + if x, ok := x.GetContents().(*WSMessage_JobListReq); ok { + return x.JobListReq + } + return nil +} + +func (x *WSMessage) GetJobListResp() *JobListResp { + if x, ok := x.GetContents().(*WSMessage_JobListResp); ok { + return x.JobListResp + } + return nil +} + +func (x *WSMessage) GetJobListUpd() *JobListUpd { + if x, ok := x.GetContents().(*WSMessage_JobListUpd); ok { + return x.JobListUpd + } + return nil +} + func (x *WSMessage) GetLogGetLevelReq() *LogGetLevelReq { if x, ok := x.GetContents().(*WSMessage_LogGetLevelReq); ok { return x.LogGetLevelReq @@ -1373,6 +1419,34 @@ func (x *WSMessage) GetQuantListResp() *QuantListResp { return nil } +func (x *WSMessage) GetQuantLogGetReq() *QuantLogGetReq { + if x, ok := x.GetContents().(*WSMessage_QuantLogGetReq); ok { + return x.QuantLogGetReq + } + return nil +} + +func (x *WSMessage) GetQuantLogGetResp() *QuantLogGetResp { + if x, ok := x.GetContents().(*WSMessage_QuantLogGetResp); ok { + return x.QuantLogGetResp + } + return nil +} + +func (x *WSMessage) GetQuantLogListReq() *QuantLogListReq { + if x, ok := x.GetContents().(*WSMessage_QuantLogListReq); ok { + return x.QuantLogListReq + } + return nil +} + +func (x *WSMessage) GetQuantLogListResp() *QuantLogListResp { + if x, ok := x.GetContents().(*WSMessage_QuantLogListResp); ok { + return x.QuantLogListResp + } + return nil +} + func (x *WSMessage) GetQuantPublishReq() *QuantPublishReq { if x, ok := x.GetContents().(*WSMessage_QuantPublishReq); ok { return x.QuantPublishReq @@ -1387,6 +1461,20 @@ func (x *WSMessage) GetQuantPublishResp() *QuantPublishResp { return nil } +func (x *WSMessage) GetQuantRawDataGetReq() *QuantRawDataGetReq { + if x, ok := x.GetContents().(*WSMessage_QuantRawDataGetReq); ok { + return x.QuantRawDataGetReq + } + return nil +} + +func (x *WSMessage) GetQuantRawDataGetResp() *QuantRawDataGetResp { + if x, ok := x.GetContents().(*WSMessage_QuantRawDataGetResp); ok { + return x.QuantRawDataGetResp + } + return nil +} + func (x *WSMessage) GetQuantUploadReq() *QuantUploadReq { if x, ok := x.GetContents().(*WSMessage_QuantUploadReq); ok { return x.QuantUploadReq @@ -2555,6 +2643,14 @@ type WSMessage_GetOwnershipResp struct { GetOwnershipResp *GetOwnershipResp `protobuf:"bytes,173,opt,name=getOwnershipResp,proto3,oneof"` } +type WSMessage_ImageBeamLocationVersionsReq struct { + ImageBeamLocationVersionsReq *ImageBeamLocationVersionsReq `protobuf:"bytes,299,opt,name=imageBeamLocationVersionsReq,proto3,oneof"` +} + +type WSMessage_ImageBeamLocationVersionsResp struct { + ImageBeamLocationVersionsResp *ImageBeamLocationVersionsResp `protobuf:"bytes,300,opt,name=imageBeamLocationVersionsResp,proto3,oneof"` +} + type WSMessage_ImageBeamLocationsReq struct { ImageBeamLocationsReq *ImageBeamLocationsReq `protobuf:"bytes,190,opt,name=imageBeamLocationsReq,proto3,oneof"` } @@ -2635,6 +2731,18 @@ type WSMessage_ImportMarsViewerImageUpd struct { ImportMarsViewerImageUpd *ImportMarsViewerImageUpd `protobuf:"bytes,275,opt,name=importMarsViewerImageUpd,proto3,oneof"` } +type WSMessage_JobListReq struct { + JobListReq *JobListReq `protobuf:"bytes,296,opt,name=jobListReq,proto3,oneof"` +} + +type WSMessage_JobListResp struct { + JobListResp *JobListResp `protobuf:"bytes,297,opt,name=jobListResp,proto3,oneof"` +} + +type WSMessage_JobListUpd struct { + JobListUpd *JobListUpd `protobuf:"bytes,298,opt,name=jobListUpd,proto3,oneof"` +} + type WSMessage_LogGetLevelReq struct { LogGetLevelReq *LogGetLevelReq `protobuf:"bytes,67,opt,name=logGetLevelReq,proto3,oneof"` } @@ -2851,6 +2959,22 @@ type WSMessage_QuantListResp struct { QuantListResp *QuantListResp `protobuf:"bytes,217,opt,name=quantListResp,proto3,oneof"` } +type WSMessage_QuantLogGetReq struct { + QuantLogGetReq *QuantLogGetReq `protobuf:"bytes,301,opt,name=quantLogGetReq,proto3,oneof"` +} + +type WSMessage_QuantLogGetResp struct { + QuantLogGetResp *QuantLogGetResp `protobuf:"bytes,302,opt,name=quantLogGetResp,proto3,oneof"` +} + +type WSMessage_QuantLogListReq struct { + QuantLogListReq *QuantLogListReq `protobuf:"bytes,303,opt,name=quantLogListReq,proto3,oneof"` +} + +type WSMessage_QuantLogListResp struct { + QuantLogListResp *QuantLogListResp `protobuf:"bytes,304,opt,name=quantLogListResp,proto3,oneof"` +} + type WSMessage_QuantPublishReq struct { QuantPublishReq *QuantPublishReq `protobuf:"bytes,218,opt,name=quantPublishReq,proto3,oneof"` } @@ -2859,6 +2983,14 @@ type WSMessage_QuantPublishResp struct { QuantPublishResp *QuantPublishResp `protobuf:"bytes,219,opt,name=quantPublishResp,proto3,oneof"` } +type WSMessage_QuantRawDataGetReq struct { + QuantRawDataGetReq *QuantRawDataGetReq `protobuf:"bytes,305,opt,name=quantRawDataGetReq,proto3,oneof"` +} + +type WSMessage_QuantRawDataGetResp struct { + QuantRawDataGetResp *QuantRawDataGetResp `protobuf:"bytes,306,opt,name=quantRawDataGetResp,proto3,oneof"` +} + type WSMessage_QuantUploadReq struct { QuantUploadReq *QuantUploadReq `protobuf:"bytes,220,opt,name=quantUploadReq,proto3,oneof"` } @@ -3507,6 +3639,10 @@ func (*WSMessage_GetOwnershipReq) isWSMessage_Contents() {} func (*WSMessage_GetOwnershipResp) isWSMessage_Contents() {} +func (*WSMessage_ImageBeamLocationVersionsReq) isWSMessage_Contents() {} + +func (*WSMessage_ImageBeamLocationVersionsResp) isWSMessage_Contents() {} + func (*WSMessage_ImageBeamLocationsReq) isWSMessage_Contents() {} func (*WSMessage_ImageBeamLocationsResp) isWSMessage_Contents() {} @@ -3547,6 +3683,12 @@ func (*WSMessage_ImportMarsViewerImageResp) isWSMessage_Contents() {} func (*WSMessage_ImportMarsViewerImageUpd) isWSMessage_Contents() {} +func (*WSMessage_JobListReq) isWSMessage_Contents() {} + +func (*WSMessage_JobListResp) isWSMessage_Contents() {} + +func (*WSMessage_JobListUpd) isWSMessage_Contents() {} + func (*WSMessage_LogGetLevelReq) isWSMessage_Contents() {} func (*WSMessage_LogGetLevelResp) isWSMessage_Contents() {} @@ -3655,10 +3797,22 @@ func (*WSMessage_QuantListReq) isWSMessage_Contents() {} func (*WSMessage_QuantListResp) isWSMessage_Contents() {} +func (*WSMessage_QuantLogGetReq) isWSMessage_Contents() {} + +func (*WSMessage_QuantLogGetResp) isWSMessage_Contents() {} + +func (*WSMessage_QuantLogListReq) isWSMessage_Contents() {} + +func (*WSMessage_QuantLogListResp) isWSMessage_Contents() {} + func (*WSMessage_QuantPublishReq) isWSMessage_Contents() {} func (*WSMessage_QuantPublishResp) isWSMessage_Contents() {} +func (*WSMessage_QuantRawDataGetReq) isWSMessage_Contents() {} + +func (*WSMessage_QuantRawDataGetResp) isWSMessage_Contents() {} + func (*WSMessage_QuantUploadReq) isWSMessage_Contents() {} func (*WSMessage_QuantUploadResp) isWSMessage_Contents() {} @@ -3945,6 +4099,7 @@ var file_websocket_proto_rawDesc = []byte{ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x10, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x67, 0x2d, + 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x6a, 0x6f, 0x62, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x6c, 0x6f, 0x67, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x6d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, @@ -4000,7 +4155,7 @@ var file_websocket_proto_rawDesc = []byte{ 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x2d, 0x64, 0x61, 0x74, - 0x61, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa4, 0xa5, 0x01, + 0x61, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x95, 0xab, 0x01, 0x0a, 0x09, 0x57, 0x53, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, @@ -4326,1014 +4481,1061 @@ var file_websocket_proto_rawDesc = []byte{ 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x73, 0x70, 0x18, 0xad, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x10, 0x67, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, - 0x69, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x15, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, - 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x18, - 0xbe, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, - 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, - 0x52, 0x15, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x52, 0x0a, 0x16, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x18, 0xbf, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x48, 0x00, 0x52, 0x16, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, 0x0e, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x3a, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x3b, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x12, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x18, 0x86, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x12, 0x49, 0x0a, 0x13, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x18, 0x87, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x48, 0x00, 0x52, 0x13, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x0b, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0x88, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x34, 0x0a, 0x0c, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x89, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x33, 0x0a, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, - 0x18, 0x3c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x36, 0x0a, 0x0d, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0d, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, - 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x18, 0x96, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x55, 0x70, 0x64, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x55, 0x70, 0x64, 0x12, 0x45, 0x0a, 0x12, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x44, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x12, 0x48, 0x0a, 0x13, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x18, 0x40, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, - 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, - 0x13, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x5b, 0x0a, 0x19, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, + 0x69, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x64, 0x0a, 0x1c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, + 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x18, 0xab, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1c, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x67, 0x0a, 0x1d, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, 0xac, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, 0x61, 0x6d, + 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1d, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, 0x61, + 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x15, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, + 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x18, 0xbe, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, 0x61, + 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, + 0x15, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x52, 0x0a, 0x16, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, + 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x18, 0xbf, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x42, + 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x48, 0x00, 0x52, 0x16, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, 0x0e, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x3a, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x3b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x48, 0x00, 0x52, 0x0f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x12, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x18, 0x86, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x12, 0x49, 0x0a, 0x13, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x18, 0x87, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, + 0x00, 0x52, 0x13, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x47, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x0b, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0x88, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x34, 0x0a, 0x0c, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x89, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, + 0x00, 0x52, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x33, 0x0a, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, + 0x3c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x12, 0x36, 0x0a, 0x0d, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x0c, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x18, 0x96, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x55, + 0x70, 0x64, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x55, + 0x70, 0x64, 0x12, 0x45, 0x0a, 0x12, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x44, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x12, 0x48, 0x0a, 0x13, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x18, 0x40, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, + 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x13, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x5b, 0x0a, 0x19, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x71, + 0x18, 0x8a, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, + 0x65, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x19, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x71, + 0x12, 0x5e, 0x0a, 0x1a, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x18, 0x8b, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, - 0x71, 0x18, 0x8a, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x53, 0x65, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, - 0x6d, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x19, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, - 0x71, 0x12, 0x5e, 0x0a, 0x1a, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x18, - 0x8b, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, - 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, - 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1a, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x39, 0x0a, 0x0e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, - 0x52, 0x65, 0x71, 0x18, 0x41, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0f, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x18, - 0x42, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x70, 0x6c, - 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, 0x0a, 0x18, 0x69, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x72, 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x18, 0x91, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x72, 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, 0x69, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x4d, 0x61, 0x72, 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x71, 0x12, 0x5b, 0x0a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x61, - 0x72, 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x18, 0x92, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, + 0x73, 0x70, 0x48, 0x00, 0x52, 0x1a, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x39, 0x0a, 0x0e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, + 0x65, 0x71, 0x18, 0x41, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0f, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x18, 0x42, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x55, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, 0x0a, 0x18, 0x69, 0x6d, 0x70, + 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x72, 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x18, 0x91, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x49, + 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x72, 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x72, 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x61, - 0x72, 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x58, 0x0a, 0x18, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x72, 0x73, 0x56, - 0x69, 0x65, 0x77, 0x65, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x18, 0x93, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x72, - 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x48, - 0x00, 0x52, 0x18, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x72, 0x73, 0x56, 0x69, 0x65, - 0x77, 0x65, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x12, 0x39, 0x0a, 0x0e, 0x6c, - 0x6f, 0x67, 0x47, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x18, 0x43, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x4c, 0x6f, 0x67, 0x47, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, 0x6c, 0x6f, 0x67, 0x47, 0x65, 0x74, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0f, 0x6c, 0x6f, 0x67, 0x47, 0x65, 0x74, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x18, 0x44, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x4c, 0x6f, 0x67, 0x47, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x73, - 0x70, 0x48, 0x00, 0x52, 0x0f, 0x6c, 0x6f, 0x67, 0x47, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x61, 0x64, 0x52, - 0x65, 0x71, 0x18, 0x45, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x65, - 0x61, 0x64, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0a, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x61, 0x64, - 0x52, 0x65, 0x71, 0x12, 0x30, 0x0a, 0x0b, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x18, 0x46, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x65, - 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x61, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x53, 0x65, 0x74, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x18, 0x47, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, - 0x4c, 0x6f, 0x67, 0x53, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x48, 0x00, - 0x52, 0x0e, 0x6c, 0x6f, 0x67, 0x53, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, - 0x12, 0x3c, 0x0a, 0x0f, 0x6c, 0x6f, 0x67, 0x53, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x18, 0x48, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x4c, 0x6f, 0x67, 0x53, - 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0f, 0x6c, - 0x6f, 0x67, 0x53, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, - 0x0a, 0x0d, 0x6d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, - 0x9b, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0d, 0x6d, 0x65, 0x6d, 0x6f, 0x69, 0x73, - 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x3a, 0x0a, 0x0e, 0x6d, 0x65, 0x6d, 0x6f, 0x69, - 0x73, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x9c, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x48, 0x00, 0x52, 0x0e, 0x6d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x3c, 0x0a, 0x0f, 0x6d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x38, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x4d, - 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, - 0x52, 0x0f, 0x6d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x12, 0x3f, 0x0a, 0x10, 0x6d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x39, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x4d, 0x65, - 0x6d, 0x6f, 0x69, 0x73, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, - 0x52, 0x10, 0x6d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x4c, 0x0a, 0x14, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x51, 0x75, 0x61, 0x6e, 0x74, - 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x14, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, - 0x12, 0x4f, 0x0a, 0x15, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xc9, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x15, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x52, 0x0a, 0x16, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x44, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x52, 0x65, 0x71, 0x18, 0x9e, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x44, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x16, 0x6e, - 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x6d, 0x69, - 0x73, 0x73, 0x52, 0x65, 0x71, 0x12, 0x55, 0x0a, 0x17, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x18, 0x9f, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x48, 0x00, 0x52, 0x17, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x44, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x0f, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x18, - 0x8c, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0f, 0x6e, 0x6f, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x40, 0x0a, 0x10, 0x6e, - 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, - 0x8d, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x10, 0x6e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, - 0x0f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, - 0x18, 0x93, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x6e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x12, 0x49, 0x0a, 0x13, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x64, 0x69, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x52, 0x65, 0x71, 0x18, 0xae, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x45, 0x64, 0x69, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, - 0x48, 0x00, 0x52, 0x13, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x64, 0x69, 0x74, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x12, 0x4c, 0x0a, 0x14, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x45, 0x64, 0x69, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, - 0xaf, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, - 0x64, 0x69, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, - 0x14, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x64, 0x69, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4b, 0x0a, 0x14, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x49, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x14, 0x70, 0x69, - 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x12, 0x4e, 0x0a, 0x15, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x4a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x15, 0x70, 0x69, 0x71, - 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x54, 0x0a, 0x17, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x18, 0x4b, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, - 0x17, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x57, 0x0a, 0x18, 0x70, 0x69, 0x71, 0x75, + 0x52, 0x65, 0x71, 0x12, 0x5b, 0x0a, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x72, + 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x18, 0x92, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x4d, 0x61, 0x72, 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x19, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x72, + 0x73, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x58, 0x0a, 0x18, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x72, 0x73, 0x56, 0x69, + 0x65, 0x77, 0x65, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x18, 0x93, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x72, 0x73, + 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x48, 0x00, + 0x52, 0x18, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x61, 0x72, 0x73, 0x56, 0x69, 0x65, 0x77, + 0x65, 0x72, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x12, 0x2e, 0x0a, 0x0a, 0x6a, 0x6f, + 0x62, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0xa8, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0b, 0x2e, 0x4a, 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0a, + 0x6a, 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x31, 0x0a, 0x0b, 0x6a, 0x6f, + 0x62, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xa9, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x4a, 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, + 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2e, 0x0a, + 0x0a, 0x6a, 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x18, 0xaa, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x4a, 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x48, + 0x00, 0x52, 0x0a, 0x6a, 0x6f, 0x62, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x12, 0x39, 0x0a, + 0x0e, 0x6c, 0x6f, 0x67, 0x47, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x18, + 0x43, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x4c, 0x6f, 0x67, 0x47, 0x65, 0x74, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, 0x6c, 0x6f, 0x67, 0x47, 0x65, 0x74, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0f, 0x6c, 0x6f, 0x67, 0x47, + 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x18, 0x44, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x4c, 0x6f, 0x67, 0x47, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, + 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0f, 0x6c, 0x6f, 0x67, 0x47, 0x65, 0x74, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x61, + 0x64, 0x52, 0x65, 0x71, 0x18, 0x45, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x4c, 0x6f, 0x67, + 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0a, 0x6c, 0x6f, 0x67, 0x52, 0x65, + 0x61, 0x64, 0x52, 0x65, 0x71, 0x12, 0x30, 0x0a, 0x0b, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x61, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x18, 0x46, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x4c, 0x6f, 0x67, + 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x6c, 0x6f, 0x67, 0x52, + 0x65, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x53, 0x65, + 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x18, 0x47, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0f, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, + 0x48, 0x00, 0x52, 0x0e, 0x6c, 0x6f, 0x67, 0x53, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, + 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0f, 0x6c, 0x6f, 0x67, 0x53, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x52, 0x65, 0x73, 0x70, 0x18, 0x48, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x4c, 0x6f, + 0x67, 0x53, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, + 0x0f, 0x6c, 0x6f, 0x67, 0x53, 0x65, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x37, 0x0a, 0x0d, 0x6d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x18, 0x9b, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x69, + 0x73, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0d, 0x6d, 0x65, 0x6d, 0x6f, + 0x69, 0x73, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x3a, 0x0a, 0x0e, 0x6d, 0x65, 0x6d, + 0x6f, 0x69, 0x73, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x9c, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0e, 0x6d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3c, 0x0a, 0x0f, 0x6d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x38, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x48, 0x00, 0x52, 0x0f, 0x6d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x12, 0x3f, 0x0a, 0x10, 0x6d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x39, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x4d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x48, 0x00, 0x52, 0x10, 0x6d, 0x65, 0x6d, 0x6f, 0x69, 0x73, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x4c, 0x0a, 0x14, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x51, 0x75, 0x61, + 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x18, 0xc8, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x51, 0x75, 0x61, 0x6e, 0x74, + 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x14, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x52, + 0x65, 0x71, 0x12, 0x4f, 0x0a, 0x15, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x51, 0x75, 0x61, 0x6e, 0x74, + 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xc9, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x43, + 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x15, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, 0x16, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x52, 0x65, 0x71, 0x18, 0x9e, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, + 0x16, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, + 0x6d, 0x69, 0x73, 0x73, 0x52, 0x65, 0x71, 0x12, 0x55, 0x0a, 0x17, 0x6e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x18, 0x9f, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x17, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, + 0x0a, 0x0f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x18, 0x8c, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0f, 0x6e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x40, 0x0a, + 0x10, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x18, 0x8d, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x10, 0x6e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x3d, 0x0a, 0x0f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, + 0x70, 0x64, 0x18, 0x93, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x6e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x12, 0x49, + 0x0a, 0x13, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x64, 0x69, 0x74, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x52, 0x65, 0x71, 0x18, 0xae, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x64, 0x69, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, + 0x65, 0x71, 0x48, 0x00, 0x52, 0x13, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x64, 0x69, 0x74, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x12, 0x4c, 0x0a, 0x14, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x45, 0x64, 0x69, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x18, 0xaf, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x45, 0x64, 0x69, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, + 0x00, 0x52, 0x14, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x64, 0x69, 0x74, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4b, 0x0a, 0x14, 0x70, 0x69, 0x71, 0x75, 0x61, + 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, + 0x49, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x14, + 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x12, 0x4e, 0x0a, 0x15, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x4a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x15, 0x70, + 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x54, 0x0a, 0x17, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x18, + 0x4b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x48, + 0x00, 0x52, 0x17, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x57, 0x0a, 0x18, 0x70, 0x69, + 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x50, + 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x18, 0x70, 0x69, 0x71, 0x75, 0x61, + 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x63, 0x0a, 0x1c, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x18, 0x4d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x50, 0x69, 0x71, - 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x18, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x63, 0x0a, 0x1c, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x71, 0x18, 0x4d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1c, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x66, 0x0a, 0x1d, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x4e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, - 0x1d, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x57, - 0x0a, 0x18, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x18, 0x4f, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, 0x70, - 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x5a, 0x0a, 0x19, 0x70, 0x69, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x18, 0x50, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x50, 0x69, 0x71, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1c, 0x70, 0x69, 0x71, 0x75, + 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x66, 0x0a, 0x1d, 0x70, 0x69, 0x71, 0x75, + 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x4e, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, + 0x00, 0x52, 0x1d, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x57, 0x0a, 0x18, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x18, 0x4f, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, + 0x18, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x5a, 0x0a, 0x19, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x19, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, - 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x4e, 0x0a, 0x15, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x51, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x15, 0x70, 0x69, - 0x71, 0x75, 0x61, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x12, 0x51, 0x0a, 0x16, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x52, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x16, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x50, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x50, + 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x19, 0x70, 0x69, 0x71, 0x75, + 0x61, 0x6e, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4e, 0x0a, 0x15, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x51, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x15, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x66, 0x0a, 0x1d, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, - 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x18, 0x53, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, - 0x1d, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x69, - 0x0a, 0x1e, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x18, 0x54, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1e, 0x70, 0x69, 0x71, 0x75, 0x61, + 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x51, 0x0a, 0x16, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, + 0x52, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, + 0x52, 0x16, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x66, 0x0a, 0x1d, 0x70, 0x69, 0x71, 0x75, + 0x61, 0x6e, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x18, 0x53, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x48, + 0x00, 0x52, 0x1d, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x12, 0x69, 0x0a, 0x1e, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x18, 0x54, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x50, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x45, 0x0a, 0x12, 0x70, 0x73, 0x65, - 0x75, 0x64, 0x6f, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x18, - 0x55, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x50, 0x73, 0x65, 0x75, 0x64, 0x6f, 0x49, 0x6e, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x70, 0x73, - 0x65, 0x75, 0x64, 0x6f, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, - 0x12, 0x48, 0x0a, 0x13, 0x70, 0x73, 0x65, 0x75, 0x64, 0x6f, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x18, 0x56, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x50, 0x73, 0x65, 0x75, 0x64, 0x6f, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x13, 0x70, 0x73, 0x65, 0x75, 0x64, 0x6f, 0x49, 0x6e, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x12, 0x64, 0x0a, 0x1c, 0x70, 0x75, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1e, 0x70, 0x69, 0x71, + 0x75, 0x61, 0x6e, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x45, 0x0a, 0x12, 0x70, + 0x73, 0x65, 0x75, 0x64, 0x6f, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x79, 0x52, 0x65, + 0x71, 0x18, 0x55, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x50, 0x73, 0x65, 0x75, 0x64, 0x6f, + 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, + 0x70, 0x73, 0x65, 0x75, 0x64, 0x6f, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x71, 0x12, 0x48, 0x0a, 0x13, 0x70, 0x73, 0x65, 0x75, 0x64, 0x6f, 0x49, 0x6e, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x18, 0x56, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x50, 0x73, 0x65, 0x75, 0x64, 0x6f, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x74, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x13, 0x70, 0x73, 0x65, 0x75, 0x64, 0x6f, 0x49, + 0x6e, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x12, 0x64, 0x0a, 0x1c, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x54, 0x6f, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x52, 0x65, 0x71, 0x18, 0xf2, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x52, + 0x65, 0x71, 0x48, 0x00, 0x52, 0x1c, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x52, + 0x65, 0x71, 0x12, 0x67, 0x0a, 0x1d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x52, + 0x65, 0x73, 0x70, 0x18, 0xf3, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, + 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, - 0x6f, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x52, 0x65, 0x71, 0x18, 0xf2, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x52, 0x65, 0x71, - 0x48, 0x00, 0x52, 0x1c, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x52, 0x65, 0x71, - 0x12, 0x67, 0x0a, 0x1d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x18, 0xf3, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x5a, 0x65, - 0x6e, 0x6f, 0x64, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1d, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x5a, - 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x0d, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x42, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x18, 0xca, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x42, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, - 0x71, 0x48, 0x00, 0x52, 0x0d, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x42, 0x6c, 0x65, 0x73, 0x73, 0x52, - 0x65, 0x71, 0x12, 0x3a, 0x0a, 0x0e, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x42, 0x6c, 0x65, 0x73, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x18, 0xcb, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x51, 0x75, - 0x61, 0x6e, 0x74, 0x42, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0e, - 0x71, 0x75, 0x61, 0x6e, 0x74, 0x42, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, - 0x0a, 0x16, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0xcc, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x16, 0x71, 0x75, 0x61, 0x6e, - 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x12, 0x55, 0x0a, 0x17, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, - 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xcd, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, - 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, - 0x52, 0x17, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, 0x0a, 0x18, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xce, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x51, + 0x6f, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x0d, 0x71, + 0x75, 0x61, 0x6e, 0x74, 0x42, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x18, 0xca, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x42, 0x6c, 0x65, 0x73, 0x73, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0d, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x42, 0x6c, 0x65, 0x73, + 0x73, 0x52, 0x65, 0x71, 0x12, 0x3a, 0x0a, 0x0e, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x42, 0x6c, 0x65, + 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, 0xcb, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x51, 0x75, 0x61, 0x6e, 0x74, 0x42, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, + 0x52, 0x0e, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x42, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x52, 0x0a, 0x16, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0xcc, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x16, 0x71, 0x75, + 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x12, 0x55, 0x0a, 0x17, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, + 0x62, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, + 0xcd, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, + 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x48, 0x00, 0x52, 0x17, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, 0x0a, 0x18, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, 0x71, 0x75, 0x61, 0x6e, 0x74, - 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x12, 0x5b, 0x0a, 0x19, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, - 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x18, 0xcf, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x43, - 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x19, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, - 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x3d, 0x0a, 0x0f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, - 0x52, 0x65, 0x71, 0x18, 0xd0, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x51, 0x75, 0x61, - 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0f, - 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x12, - 0x40, 0x0a, 0x10, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x18, 0xd1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x51, 0x75, 0x61, - 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, - 0x10, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x3a, 0x0a, 0x0e, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x18, 0x8e, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x51, 0x75, 0x61, - 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, 0x71, - 0x75, 0x61, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3d, 0x0a, - 0x0f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x18, 0x8f, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0f, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0e, - 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x70, 0x64, 0x18, 0x90, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x55, 0x70, 0x64, 0x48, 0x00, 0x52, 0x0e, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x70, 0x64, 0x12, 0x3a, 0x0a, 0x0e, 0x71, 0x75, 0x61, 0x6e, - 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xd2, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x12, 0x3d, 0x0a, 0x0f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xd3, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x48, 0x00, 0x52, 0x0f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x0b, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x18, 0xd4, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x51, 0x75, 0x61, 0x6e, - 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x71, 0x75, 0x61, 0x6e, 0x74, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x34, 0x0a, 0x0c, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xd5, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, - 0x51, 0x75, 0x61, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0c, - 0x71, 0x75, 0x61, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x15, - 0x71, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0xd6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x51, - 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x15, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x61, 0x73, - 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x52, 0x0a, - 0x16, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xd7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xce, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, 0x71, 0x75, 0x61, + 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x72, 0x69, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x5b, 0x0a, 0x19, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, + 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x18, 0xcf, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x51, 0x75, 0x61, 0x6e, + 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x19, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, + 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x0f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, + 0x6e, 0x65, 0x52, 0x65, 0x71, 0x18, 0xd0, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x51, + 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, + 0x52, 0x0f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x52, 0x65, + 0x71, 0x12, 0x40, 0x0a, 0x10, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xd1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x51, + 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, + 0x00, 0x52, 0x10, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0e, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x8e, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x51, + 0x75, 0x61, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, + 0x0e, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, + 0x3d, 0x0a, 0x0f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x18, 0x8f, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x51, 0x75, 0x61, 0x6e, + 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0f, 0x71, + 0x75, 0x61, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3a, + 0x0a, 0x0e, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x70, 0x64, + 0x18, 0x90, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x70, 0x64, 0x48, 0x00, 0x52, 0x0e, 0x71, 0x75, 0x61, 0x6e, + 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x70, 0x64, 0x12, 0x3a, 0x0a, 0x0e, 0x71, 0x75, + 0x61, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xd2, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3d, 0x0a, 0x0f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xd3, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x48, 0x00, 0x52, 0x0f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x0b, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x18, 0xd4, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x51, 0x75, + 0x61, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x71, 0x75, 0x61, + 0x6e, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x34, 0x0a, 0x0c, 0x71, 0x75, 0x61, 0x6e, + 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xd5, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, + 0x52, 0x0c, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, + 0x0a, 0x15, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0xd6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x16, 0x71, 0x75, 0x61, 0x6e, 0x74, - 0x4c, 0x61, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x34, 0x0a, 0x0c, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x71, 0x18, 0xd8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0c, 0x71, 0x75, 0x61, 0x6e, 0x74, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x37, 0x0a, 0x0d, 0x71, 0x75, 0x61, 0x6e, 0x74, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xd9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, - 0x00, 0x52, 0x0d, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x3d, 0x0a, 0x0f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x52, 0x65, 0x71, 0x18, 0xda, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x51, 0x75, 0x61, - 0x6e, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0f, - 0x71, 0x75, 0x61, 0x6e, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x12, - 0x40, 0x0a, 0x10, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x18, 0xdb, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x51, 0x75, 0x61, - 0x6e, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x15, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x4c, + 0x61, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, + 0x52, 0x0a, 0x16, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xd7, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x16, 0x71, 0x75, 0x61, + 0x6e, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x0c, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x18, 0xd8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x51, 0x75, 0x61, + 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0c, 0x71, 0x75, 0x61, + 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x37, 0x0a, 0x0d, 0x71, 0x75, 0x61, + 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xd9, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x48, 0x00, 0x52, 0x0d, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0e, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x18, 0xad, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x51, 0x75, + 0x61, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, + 0x71, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x3d, + 0x0a, 0x0f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x18, 0xae, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, + 0x4c, 0x6f, 0x67, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0f, 0x71, 0x75, + 0x61, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, + 0x0f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x18, 0xaf, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x4c, + 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0f, 0x71, 0x75, 0x61, + 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x40, 0x0a, 0x10, + 0x71, 0x75, 0x61, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x18, 0xb0, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x4c, + 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x10, 0x71, 0x75, + 0x61, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, + 0x0a, 0x0f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, + 0x71, 0x18, 0xda, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0f, 0x71, 0x75, + 0x61, 0x6e, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x12, 0x40, 0x0a, 0x10, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x3a, 0x0a, 0x0e, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, - 0x52, 0x65, 0x71, 0x18, 0xdc, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x51, 0x75, 0x61, - 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, 0x71, - 0x75, 0x61, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x12, 0x3d, 0x0a, - 0x0f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x18, 0xdd, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x55, - 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0f, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x70, 0x0a, 0x20, - 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, - 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x18, 0xee, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x75, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x20, 0x72, 0x65, + 0x70, 0x18, 0xdb, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x10, 0x71, + 0x75, 0x61, 0x6e, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x46, 0x0a, 0x12, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0xb1, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x51, + 0x75, 0x61, 0x6e, 0x74, 0x52, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x48, 0x00, 0x52, 0x12, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x61, 0x77, 0x44, 0x61, 0x74, + 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x49, 0x0a, 0x13, 0x71, 0x75, 0x61, 0x6e, 0x74, + 0x52, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xb2, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x61, 0x77, + 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x13, 0x71, + 0x75, 0x61, 0x6e, 0x74, 0x52, 0x61, 0x77, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x3a, 0x0a, 0x0e, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, + 0x64, 0x52, 0x65, 0x71, 0x18, 0xdc, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x51, 0x75, + 0x61, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, + 0x71, 0x75, 0x61, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x12, 0x3d, + 0x0a, 0x0f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x18, 0xdd, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, + 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0f, 0x71, 0x75, + 0x61, 0x6e, 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x70, 0x0a, + 0x20, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, + 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x18, 0xee, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, + 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x44, + 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x20, 0x72, + 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, + 0x75, 0x6c, 0x6b, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, + 0x73, 0x0a, 0x21, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x18, 0xef, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, - 0x6c, 0x6b, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x73, - 0x0a, 0x21, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, - 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x18, 0xef, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x52, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, - 0x6b, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, - 0x52, 0x21, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, - 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x64, 0x0a, 0x1c, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x18, 0xec, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x52, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, - 0x6b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1c, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, - 0x6b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x67, 0x0a, 0x1d, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, - 0x6b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xed, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x48, 0x00, 0x52, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, + 0x6c, 0x6b, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, + 0x00, 0x52, 0x21, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x64, 0x0a, 0x1c, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x18, 0xec, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x52, 0x65, + 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, + 0x6c, 0x6b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1c, 0x72, 0x65, + 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, + 0x6c, 0x6b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x67, 0x0a, 0x1d, 0x72, 0x65, + 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, + 0x6c, 0x6b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xed, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x5a, 0x0a, 0x19, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, - 0x57, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x48, 0x00, 0x52, 0x19, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x5d, - 0x0a, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, - 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x58, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, - 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x7f, 0x0a, - 0x25, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, + 0x73, 0x70, 0x48, 0x00, 0x52, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x5a, 0x0a, 0x19, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x18, 0x57, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, + 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x48, 0x00, 0x52, 0x19, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, + 0x5d, 0x0a, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x58, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x7f, + 0x0a, 0x25, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, + 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0xf6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0xf6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, - 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, - 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x25, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, - 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x82, - 0x01, 0x0a, 0x26, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xf7, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x27, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x26, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x85, 0x01, 0x0a, 0x27, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, - 0xf4, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, - 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x48, 0x00, 0x52, 0x27, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x25, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, + 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, + 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, + 0x82, 0x01, 0x0a, 0x26, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x88, 0x01, 0x0a, 0x28, - 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, - 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xf5, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, - 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x28, 0x72, 0x65, + 0x6e, 0x67, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xf7, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x27, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x26, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x51, 0x0a, 0x16, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x85, 0x01, 0x0a, 0x27, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, + 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x18, 0xf4, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, + 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, + 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x48, 0x00, 0x52, 0x27, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x88, 0x01, 0x0a, + 0x28, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, + 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xf5, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x29, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x28, 0x72, + 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, + 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x51, 0x0a, 0x16, 0x72, 0x65, 0x67, 0x69, 0x6f, + 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x18, 0x5b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x18, 0x5b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, - 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, - 0x00, 0x52, 0x16, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x65, 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x54, 0x0a, 0x17, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x18, 0x5c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x52, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x17, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x54, 0x0a, 0x17, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x59, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x57, 0x0a, 0x18, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, - 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x18, 0x5a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x16, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x65, 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x54, 0x0a, 0x17, 0x72, 0x65, + 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x5c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x52, 0x65, + 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x17, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, + 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x54, 0x0a, 0x17, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x59, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x72, + 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x57, 0x0a, 0x18, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x48, 0x00, 0x52, 0x18, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x57, - 0x0a, 0x18, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, - 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x5d, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x65, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, 0x72, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x5a, 0x0a, 0x19, 0x72, 0x65, 0x67, 0x69, 0x6f, + 0x73, 0x70, 0x18, 0x5a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, + 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x18, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x57, 0x0a, 0x18, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x65, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x5d, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x65, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, + 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x5a, 0x0a, 0x19, 0x72, 0x65, 0x67, 0x69, + 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x5e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x52, 0x65, + 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x19, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x18, 0x5e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x52, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x19, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x0a, 0x72, 0x75, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, - 0x71, 0x18, 0x5f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x52, 0x75, 0x6e, 0x54, 0x65, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x75, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x12, 0x30, 0x0a, 0x0b, 0x72, 0x75, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x18, 0x60, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x52, 0x75, 0x6e, 0x54, 0x65, 0x73, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x75, 0x6e, 0x54, 0x65, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, 0x10, 0x73, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x6f, - 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x18, 0x97, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, - 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x73, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x11, 0x73, 0x63, 0x61, 0x6e, 0x41, 0x75, - 0x74, 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x98, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x73, 0x63, 0x61, 0x6e, 0x41, 0x75, - 0x74, 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x15, 0x73, - 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x18, 0x99, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x53, 0x63, - 0x61, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x15, 0x73, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x52, 0x0a, 0x16, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x0a, 0x72, 0x75, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, + 0x65, 0x71, 0x18, 0x5f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x52, 0x75, 0x6e, 0x54, 0x65, + 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x75, 0x6e, 0x54, 0x65, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x12, 0x30, 0x0a, 0x0b, 0x72, 0x75, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x18, 0x60, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x52, 0x75, 0x6e, 0x54, 0x65, + 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x75, 0x6e, 0x54, 0x65, 0x73, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, 0x10, 0x73, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, + 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x18, 0x97, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x73, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x11, 0x73, 0x63, 0x61, 0x6e, 0x41, + 0x75, 0x74, 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x98, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x73, 0x63, 0x61, 0x6e, 0x41, + 0x75, 0x74, 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x15, 0x73, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x9a, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x53, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x16, 0x73, 0x63, 0x61, 0x6e, 0x41, 0x75, - 0x74, 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x4c, 0x0a, 0x14, 0x73, 0x63, 0x61, 0x6e, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x18, 0xc0, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x14, 0x73, 0x63, 0x61, 0x6e, 0x42, 0x65, - 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, 0x4f, - 0x0a, 0x15, 0x73, 0x63, 0x61, 0x6e, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, 0xc1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x15, 0x73, 0x63, 0x61, 0x6e, 0x42, 0x65, - 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x37, 0x0a, 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x18, 0x94, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3a, 0x0a, 0x0e, 0x73, 0x63, 0x61, 0x6e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x95, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x63, 0x61, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x4c, 0x0a, 0x14, 0x73, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x18, 0xc2, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x14, 0x73, 0x63, - 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x71, 0x12, 0x4f, 0x0a, 0x15, 0x73, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x18, 0xc3, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x15, 0x73, 0x63, - 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x0c, 0x73, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x65, 0x71, 0x18, 0xc4, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x53, 0x63, 0x61, - 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x63, 0x61, - 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x12, 0x37, 0x0a, 0x0d, 0x73, 0x63, 0x61, - 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x18, 0xc5, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x2e, 0x0a, 0x0a, 0x73, 0x63, 0x61, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x18, 0xa4, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x63, 0x61, 0x6e, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x12, 0x31, 0x0a, 0x0b, 0x73, 0x63, 0x61, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x18, 0xa5, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x63, 0x61, 0x6e, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0b, 0x73, 0x63, 0x61, 0x6e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x53, 0x63, 0x61, - 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x63, 0x61, 0x6e, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x33, 0x0a, 0x0c, 0x73, 0x63, 0x61, 0x6e, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, - 0x53, 0x63, 0x61, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0c, - 0x73, 0x63, 0x61, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0b, - 0x73, 0x63, 0x61, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x18, 0x65, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x48, - 0x00, 0x52, 0x0b, 0x73, 0x63, 0x61, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x12, 0x5a, - 0x0a, 0x19, 0x73, 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x41, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x18, 0x68, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x41, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, - 0x19, 0x73, 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x41, - 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x5d, 0x0a, 0x1a, 0x73, 0x63, - 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x41, 0x6e, 0x64, 0x54, - 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, 0x69, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x41, - 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1a, 0x73, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x99, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x53, + 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x15, 0x73, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x6f, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x52, 0x0a, + 0x16, 0x73, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x9a, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x16, 0x73, 0x63, 0x61, 0x6e, 0x41, + 0x75, 0x74, 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x4c, 0x0a, 0x14, 0x73, 0x63, 0x61, 0x6e, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x18, 0xc0, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x14, 0x73, 0x63, 0x61, 0x6e, 0x42, + 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x12, + 0x4f, 0x0a, 0x15, 0x73, 0x63, 0x61, 0x6e, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, 0xc1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x42, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x15, 0x73, 0x63, 0x61, 0x6e, 0x42, + 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x37, 0x0a, 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x18, 0x94, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x63, 0x61, 0x6e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3a, 0x0a, 0x0e, 0x73, 0x63, 0x61, + 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x95, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x63, 0x61, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4c, 0x0a, 0x14, 0x73, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x18, 0xc2, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x14, 0x73, + 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x65, 0x71, 0x12, 0x4f, 0x0a, 0x15, 0x73, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x18, 0xc3, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x15, 0x73, + 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x0c, 0x73, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x65, 0x71, 0x18, 0xc4, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x53, 0x63, + 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x63, + 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x12, 0x37, 0x0a, 0x0d, 0x73, 0x63, + 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x18, 0xc5, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x2e, 0x0a, 0x0a, 0x73, 0x63, 0x61, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x18, 0xa4, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x63, 0x61, 0x6e, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x12, 0x31, 0x0a, 0x0b, 0x73, 0x63, 0x61, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x18, 0xa5, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x53, 0x63, 0x61, 0x6e, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x63, 0x61, 0x6e, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0b, 0x73, 0x63, 0x61, 0x6e, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x53, 0x63, + 0x61, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x63, 0x61, + 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x33, 0x0a, 0x0c, 0x73, 0x63, 0x61, 0x6e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, + 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, + 0x0c, 0x73, 0x63, 0x61, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, + 0x0b, 0x73, 0x63, 0x61, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x18, 0x65, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, + 0x48, 0x00, 0x52, 0x0b, 0x73, 0x63, 0x61, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x12, + 0x5a, 0x0a, 0x19, 0x73, 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x41, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x18, 0x68, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x41, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, + 0x52, 0x19, 0x73, 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x41, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x5d, 0x0a, 0x1a, 0x73, 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x41, 0x6e, 0x64, - 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3f, 0x0a, 0x10, 0x73, 0x63, 0x61, - 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x6a, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x73, 0x63, 0x61, 0x6e, 0x4d, 0x65, - 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x42, 0x0a, 0x11, 0x73, 0x63, - 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, - 0x6b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x73, 0x63, 0x61, - 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x55, - 0x0a, 0x17, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x41, 0x75, 0x74, - 0x6f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x18, 0xa6, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x41, 0x75, - 0x74, 0x6f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x73, 0x63, - 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x51, 0x75, 0x61, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x58, 0x0a, 0x18, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, - 0x67, 0x67, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x18, 0xa7, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x54, - 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x18, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, - 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x51, 0x0a, 0x16, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, - 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x18, 0x6c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x16, 0x73, 0x63, 0x61, 0x6e, - 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, - 0x65, 0x71, 0x12, 0x54, 0x0a, 0x17, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, - 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x6d, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, - 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, - 0x17, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, 0x16, 0x73, 0x63, 0x61, 0x6e, - 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x55, - 0x70, 0x64, 0x18, 0x8d, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x53, 0x63, 0x61, 0x6e, - 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x55, - 0x70, 0x64, 0x48, 0x00, 0x52, 0x16, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, - 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x70, 0x64, 0x12, 0x36, 0x0a, 0x0d, - 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x18, 0x6e, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, - 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, - 0x64, 0x52, 0x65, 0x71, 0x12, 0x39, 0x0a, 0x0e, 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, - 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x18, 0x6f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x53, - 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, - 0x0e, 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x37, 0x0a, 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x70, 0x64, - 0x18, 0x8c, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x55, 0x70, - 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x70, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x55, - 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x70, 0x64, 0x12, 0x64, 0x0a, 0x1c, 0x73, 0x63, 0x72, 0x65, - 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x84, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, - 0x52, 0x1c, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x67, - 0x0a, 0x1d, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, - 0x85, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1d, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, + 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, 0x69, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x41, 0x6e, 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1a, + 0x73, 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x41, 0x6e, + 0x64, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3f, 0x0a, 0x10, 0x73, 0x63, + 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x6a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x57, + 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x73, 0x63, 0x61, 0x6e, 0x4d, + 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x42, 0x0a, 0x11, 0x73, + 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x18, 0x6b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, + 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x73, 0x63, + 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x55, 0x0a, 0x17, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x41, 0x75, + 0x74, 0x6f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x18, 0xa6, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x41, + 0x75, 0x74, 0x6f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x73, + 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x51, 0x75, + 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x58, 0x0a, 0x18, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, + 0x69, 0x67, 0x67, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x18, 0xa7, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x53, 0x63, 0x61, 0x6e, + 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x51, 0x75, 0x61, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x18, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, + 0x67, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x51, 0x0a, 0x16, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, + 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x18, 0x6c, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, + 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x16, 0x73, 0x63, 0x61, + 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x52, 0x65, 0x71, 0x12, 0x54, 0x0a, 0x17, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x6d, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, + 0x52, 0x17, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, + 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, 0x16, 0x73, 0x63, 0x61, + 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x55, 0x70, 0x64, 0x18, 0x8d, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x53, 0x63, 0x61, + 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x55, 0x70, 0x64, 0x48, 0x00, 0x52, 0x16, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x70, 0x64, 0x12, 0x36, 0x0a, + 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x18, 0x6e, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, + 0x64, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x52, 0x65, 0x71, 0x12, 0x39, 0x0a, 0x0e, 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, + 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x18, 0x6f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x53, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, + 0x52, 0x0e, 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x37, 0x0a, 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x70, + 0x64, 0x18, 0x8c, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x55, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x70, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x63, 0x61, 0x6e, + 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x70, 0x64, 0x12, 0x64, 0x0a, 0x1c, 0x73, 0x63, 0x72, + 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x84, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, + 0x00, 0x52, 0x1c, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, + 0x67, 0x0a, 0x1d, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x18, 0x85, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5b, 0x0a, 0x19, 0x73, 0x63, 0x72, 0x65, 0x65, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1d, 0x73, 0x63, 0x72, 0x65, 0x65, + 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5b, 0x0a, 0x19, 0x73, 0x63, 0x72, 0x65, + 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0xf8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x53, + 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x19, 0x73, 0x63, 0x72, 0x65, + 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x5e, 0x0a, 0x1a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x18, 0xf9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53, 0x63, 0x72, + 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x18, 0xf8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x53, 0x63, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5e, 0x0a, 0x1a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x18, 0xfa, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53, 0x63, 0x72, + 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1a, 0x73, 0x63, 0x72, 0x65, 0x65, + 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x61, 0x0a, 0x1b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x18, 0xfb, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x19, 0x73, 0x63, 0x72, 0x65, 0x65, - 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x12, 0x5e, 0x0a, 0x1a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x18, 0xf9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53, 0x63, 0x72, 0x65, - 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x5e, 0x0a, 0x1a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x18, 0xfa, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53, 0x63, 0x72, 0x65, - 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x12, 0x61, 0x0a, 0x1b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x18, 0xfb, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x53, 0x63, 0x72, + 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1b, 0x73, 0x63, 0x72, 0x65, - 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x1b, 0x73, 0x63, 0x72, 0x65, 0x65, - 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xfc, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1b, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x1b, 0x73, 0x63, 0x72, 0x65, + 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, + 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xfc, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1b, + 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x64, 0x0a, 0x1c, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x64, 0x0a, 0x1c, 0x73, 0x63, - 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xfd, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x48, 0x00, 0x52, 0x1c, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x52, 0x0a, 0x16, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x18, 0xe2, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x16, 0x73, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, - 0x73, 0x52, 0x65, 0x71, 0x12, 0x55, 0x0a, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, - 0xe3, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x48, 0x00, 0x52, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x1b, 0x73, + 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xfd, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x48, 0x00, 0x52, 0x1c, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x52, 0x0a, 0x16, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x18, 0xe2, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x16, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, - 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xe4, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, - 0x00, 0x52, 0x1b, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x64, - 0x0a, 0x1c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, - 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xe5, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, 0x16, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x18, 0xe6, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, - 0x52, 0x16, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, - 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x55, 0x0a, 0x17, 0x73, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x18, 0xe7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x65, 0x6c, + 0x6c, 0x73, 0x52, 0x65, 0x71, 0x12, 0x55, 0x0a, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x18, 0xe3, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x48, 0x00, 0x52, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x1b, + 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, + 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xe4, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x48, 0x00, 0x52, 0x1b, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, + 0x64, 0x0a, 0x1c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, + 0xe5, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, 0x16, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x18, + 0xe6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x48, + 0x00, 0x52, 0x16, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x55, 0x0a, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x61, 0x0a, 0x1b, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xe8, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x18, 0xe7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x61, 0x0a, 0x1b, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, + 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, + 0xe8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1b, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1b, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, + 0x52, 0x65, 0x71, 0x12, 0x64, 0x0a, 0x1c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x12, 0x64, 0x0a, 0x1c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, - 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x18, 0xe9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1c, 0x73, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x54, 0x0a, 0x17, 0x73, 0x65, 0x6e, 0x64, - 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x18, 0x70, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x65, 0x6e, 0x64, - 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x73, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x57, - 0x0a, 0x18, 0x73, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x71, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x18, 0x73, - 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0b, 0x73, 0x70, 0x65, 0x63, 0x74, - 0x72, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x18, 0x72, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x53, - 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x70, - 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x33, 0x0a, 0x0c, 0x73, 0x70, 0x65, - 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x18, 0x73, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0d, 0x2e, 0x53, 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, - 0x52, 0x0c, 0x73, 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, 0x33, - 0x0a, 0x0c, 0x74, 0x61, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x74, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x12, 0x36, 0x0a, 0x0d, 0x74, 0x61, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x18, 0x75, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x54, 0x61, 0x67, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x74, 0x61, - 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x33, 0x0a, 0x0c, 0x74, - 0x61, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x76, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x54, 0x61, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x12, 0x36, 0x0a, 0x0d, 0x74, 0x61, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x18, 0x77, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x54, 0x61, 0x67, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x74, 0x61, 0x67, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x0a, 0x74, 0x61, 0x67, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x78, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x54, - 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x61, 0x67, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x30, 0x0a, 0x0b, 0x74, 0x61, 0x67, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x79, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x54, - 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x74, 0x61, - 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, 0x0e, 0x75, 0x73, 0x65, - 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x18, 0x7a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, - 0x65, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, - 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x7b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, - 0x00, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x42, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x18, 0x7c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, - 0x71, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x45, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x7d, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x12, 0x75, 0x73, 0x65, 0x72, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, - 0x0e, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x18, - 0x7e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, 0x7f, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x49, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x81, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x13, 0x75, 0x73, - 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x12, 0x4c, 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x82, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x14, 0x75, 0x73, 0x65, 0x72, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x4c, 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x18, 0x9c, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x65, 0x73, 0x70, 0x18, 0xe9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1c, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x54, 0x0a, 0x17, 0x73, 0x65, 0x6e, + 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x18, 0x70, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x65, 0x6e, + 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x73, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, + 0x57, 0x0a, 0x18, 0x73, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x71, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x18, + 0x73, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0b, 0x73, 0x70, 0x65, 0x63, + 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x18, 0x72, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, + 0x53, 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x73, + 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x33, 0x0a, 0x0c, 0x73, 0x70, + 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x18, 0x73, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x53, 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x48, + 0x00, 0x52, 0x0c, 0x73, 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x33, 0x0a, 0x0c, 0x74, 0x61, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, + 0x74, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x12, 0x36, 0x0a, 0x0d, 0x74, 0x61, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x75, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x54, 0x61, + 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x74, + 0x61, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x33, 0x0a, 0x0c, + 0x74, 0x61, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x76, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x54, 0x61, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x12, 0x36, 0x0a, 0x0d, 0x74, 0x61, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x18, 0x77, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x54, 0x61, 0x67, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x74, 0x61, 0x67, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x0a, 0x74, 0x61, 0x67, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x78, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, + 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x61, + 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x30, 0x0a, 0x0b, 0x74, 0x61, 0x67, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x79, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, + 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x74, + 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, 0x0e, 0x75, 0x73, + 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x18, 0x7a, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, + 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, + 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x7b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x48, 0x00, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x42, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x18, 0x7c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, + 0x65, 0x71, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x45, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x7d, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x12, 0x75, 0x73, 0x65, 0x72, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, + 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, + 0x18, 0x7e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0f, 0x75, 0x73, 0x65, + 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, 0x7f, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x49, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x81, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x13, 0x75, + 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x12, 0x4c, 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x82, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x57, + 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x14, 0x75, 0x73, 0x65, 0x72, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x4c, 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, + 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x18, 0x9c, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, + 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x4f, + 0x0a, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, + 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x9d, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x4f, 0x0a, - 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x9d, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, - 0x0a, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x18, 0x9e, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, - 0x52, 0x0a, 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x18, 0x9f, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x16, 0x75, 0x73, 0x65, - 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x41, 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x71, 0x18, 0xb4, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, - 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x15, 0x75, - 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x12, 0x52, 0x0a, 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x41, 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x18, 0xb5, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x41, 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, - 0x52, 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x56, 0x69, - 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xa0, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x75, 0x73, - 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x12, 0x49, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xa1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x55, 0x0a, 0x17, 0x75, - 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x18, 0xa2, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x75, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, - 0x65, 0x71, 0x12, 0x58, 0x0a, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0xa3, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x48, 0x00, 0x52, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, 0x0a, 0x18, - 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x18, 0xa4, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, 0x75, 0x73, + 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x4f, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x18, 0x9e, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x12, 0x52, 0x0a, 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x18, 0x9f, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x16, 0x75, 0x73, + 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x41, 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x71, 0x18, 0xb4, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x41, 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x15, + 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x52, 0x0a, 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x41, 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x18, + 0xb5, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x41, 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x48, + 0x00, 0x52, 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x56, + 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x12, 0x75, 0x73, 0x65, + 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, + 0xa0, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x75, + 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x12, 0x49, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xa1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x55, 0x0a, 0x17, + 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, + 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x18, 0xa2, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x75, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, + 0x52, 0x65, 0x71, 0x12, 0x58, 0x0a, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, + 0xa3, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x48, 0x00, 0x52, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, 0x0a, + 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x18, 0xa4, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, 0x75, + 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x5b, 0x0a, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x18, 0xa5, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x5b, 0x0a, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x18, 0xa5, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xa6, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x49, 0x0a, 0x13, 0x75, - 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x18, 0xa7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, - 0x00, 0x52, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, 0x0a, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x18, 0xb2, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x12, 0x5b, 0x0a, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x18, 0xb3, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x48, 0x00, 0x52, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, - 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, - 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x18, 0xb6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, - 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, - 0x71, 0x12, 0x55, 0x0a, 0x17, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, - 0x6e, 0x6f, 0x72, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0xb7, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, - 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, - 0x17, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, - 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4c, 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, - 0x18, 0xb8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, - 0x52, 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x4f, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, - 0xb9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, - 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x18, 0xba, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, - 0x69, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x11, 0x75, 0x73, 0x65, - 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0xbb, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, - 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, - 0x0a, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, - 0x6f, 0x69, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x18, 0xea, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, - 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, - 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x69, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x5b, 0x0a, 0x19, 0x75, 0x73, 0x65, 0x72, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xeb, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x69, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x19, 0x75, 0x73, 0x65, 0x72, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0xa8, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xa9, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x0c, - 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x18, 0xbc, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, - 0x65, 0x71, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, - 0x65, 0x71, 0x12, 0x37, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, - 0x65, 0x73, 0x70, 0x18, 0xbd, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x75, 0x73, - 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x49, 0x0a, 0x13, 0x75, - 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, - 0x65, 0x71, 0x18, 0xaa, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x48, - 0x00, 0x52, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x4c, 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xab, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x14, + 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xa6, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x49, 0x0a, 0x13, + 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x18, 0xa7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x48, 0x00, 0x52, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, 0x0a, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x18, 0xb2, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x12, 0x5b, 0x0a, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x18, 0xb3, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x48, 0x00, 0x52, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, + 0x0a, 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, 0x6e, 0x6f, 0x72, + 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x18, 0xb6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, 0x6e, 0x6f, 0x72, + 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x16, 0x75, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, + 0x65, 0x71, 0x12, 0x55, 0x0a, 0x17, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, + 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0xb7, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, + 0x52, 0x17, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, 0x6e, 0x6f, 0x72, + 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4c, 0x0a, 0x14, 0x75, 0x73, 0x65, + 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x18, 0xb8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, + 0x00, 0x52, 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x4f, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x18, 0xb9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, + 0x00, 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x18, 0xba, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, + 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x11, 0x75, 0x73, + 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, + 0xbb, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, + 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x58, 0x0a, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, + 0x4a, 0x6f, 0x69, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x18, 0xea, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, + 0x73, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, + 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, + 0x69, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x5b, 0x0a, 0x19, 0x75, 0x73, 0x65, + 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xeb, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x69, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x19, 0x75, 0x73, 0x65, + 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0xa8, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xa9, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, + 0x0c, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x18, 0xbc, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x52, 0x65, 0x71, 0x12, 0x37, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x52, 0x65, 0x73, 0x70, 0x18, 0xbd, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x55, 0x73, + 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x75, + 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x49, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x18, 0x8a, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x34, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x8b, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, - 0x0c, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, - 0x1b, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x18, 0x8e, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x52, 0x65, 0x71, 0x18, 0xaa, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, + 0x48, 0x00, 0x52, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x4c, 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, + 0xab, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, + 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x18, 0x8a, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x55, 0x73, + 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x75, 0x73, 0x65, + 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x34, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x8b, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, + 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, + 0x0a, 0x1b, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x18, 0x8e, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, + 0x65, 0x71, 0x48, 0x00, 0x52, 0x1b, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, - 0x71, 0x48, 0x00, 0x52, 0x1b, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, - 0x12, 0x64, 0x0a, 0x1c, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x18, 0x8f, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x1b, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x55, 0x70, 0x64, 0x18, 0x90, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x55, + 0x71, 0x12, 0x64, 0x0a, 0x1c, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x18, 0x8f, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x73, 0x65, 0x72, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x1b, 0x75, 0x73, 0x65, 0x72, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x55, 0x70, 0x64, 0x18, 0x90, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x55, 0x70, 0x64, 0x48, 0x00, 0x52, 0x1b, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x55, 0x70, 0x64, 0x48, 0x00, 0x52, 0x1b, 0x75, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x55, 0x70, 0x64, 0x12, 0x70, 0x0a, 0x20, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x55, 0x70, 0x64, 0x12, 0x70, 0x0a, 0x20, 0x75, 0x73, 0x65, - 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x91, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x20, 0x75, 0x73, 0x65, 0x72, 0x4e, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x91, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x20, 0x75, 0x73, 0x65, 0x72, + 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x73, 0x0a, 0x21, + 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x18, 0x92, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x73, 0x0a, 0x21, 0x75, - 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x18, 0x92, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x21, 0x75, - 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x3d, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x18, 0x94, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0f, - 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, - 0x40, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x18, 0x95, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, - 0x10, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x40, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x96, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, - 0x00, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x97, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x18, 0xde, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, - 0x48, 0x00, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, - 0x71, 0x12, 0x3a, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x18, 0xdf, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x55, 0x73, 0x65, - 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0e, 0x75, - 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, - 0x10, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x18, 0xfe, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, - 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x77, - 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, - 0x43, 0x0a, 0x11, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x18, 0xff, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x57, 0x69, - 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, - 0x00, 0x52, 0x11, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x12, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, - 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x80, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, - 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x49, 0x0a, 0x13, - 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x18, 0x81, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x57, 0x69, 0x64, - 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x48, 0x00, 0x52, 0x13, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x0f, 0x7a, 0x65, 0x6e, 0x6f, 0x64, - 0x6f, 0x44, 0x4f, 0x49, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0xf0, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, 0x4f, 0x49, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0f, 0x7a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, 0x4f, 0x49, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x40, 0x0a, 0x10, 0x7a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, - 0x44, 0x4f, 0x49, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xf1, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, 0x4f, 0x49, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x10, 0x7a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, 0x4f, - 0x49, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0a, 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x73, 0x2a, 0x8e, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x0c, 0x57, 0x53, 0x5f, 0x55, 0x4e, - 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x53, 0x5f, - 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x57, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, - 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x57, 0x53, 0x5f, 0x42, 0x41, 0x44, - 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x57, 0x53, - 0x5f, 0x4e, 0x4f, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x04, - 0x12, 0x13, 0x0a, 0x0f, 0x57, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x45, 0x52, - 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x57, 0x53, 0x5f, 0x54, 0x49, 0x4d, 0x45, - 0x4f, 0x55, 0x54, 0x10, 0x06, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x21, + 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x3d, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x18, 0x94, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, + 0x0f, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x12, 0x40, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x18, 0x95, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, + 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x40, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x96, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x48, 0x00, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x97, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x0d, 0x75, 0x73, 0x65, + 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x18, 0xde, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, + 0x71, 0x48, 0x00, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, + 0x65, 0x71, 0x12, 0x3a, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x18, 0xdf, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x55, 0x73, + 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0e, + 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, + 0x0a, 0x10, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x18, 0xfe, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x57, 0x69, 0x64, 0x67, + 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, + 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x12, 0x43, 0x0a, 0x11, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xff, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x57, + 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x48, 0x00, 0x52, 0x11, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x12, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x80, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x57, + 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x77, 0x69, 0x64, 0x67, 0x65, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x49, 0x0a, + 0x13, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x18, 0x81, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x57, 0x69, + 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x48, 0x00, 0x52, 0x13, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x57, + 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x0f, 0x7a, 0x65, 0x6e, 0x6f, + 0x64, 0x6f, 0x44, 0x4f, 0x49, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0xf0, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, 0x4f, 0x49, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0f, 0x7a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, 0x4f, + 0x49, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x40, 0x0a, 0x10, 0x7a, 0x65, 0x6e, 0x6f, 0x64, + 0x6f, 0x44, 0x4f, 0x49, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xf1, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, 0x4f, 0x49, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x10, 0x7a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, + 0x4f, 0x49, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0a, 0x0a, 0x08, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2a, 0x8e, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x0c, 0x57, 0x53, 0x5f, 0x55, + 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x53, + 0x5f, 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x57, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, + 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x57, 0x53, 0x5f, 0x42, 0x41, + 0x44, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x57, + 0x53, 0x5f, 0x4e, 0x4f, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, + 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x57, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x45, + 0x52, 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x57, 0x53, 0x5f, 0x54, 0x49, 0x4d, + 0x45, 0x4f, 0x55, 0x54, 0x10, 0x06, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -5413,214 +5615,225 @@ var file_websocket_proto_goTypes = []interface{}{ (*ExpressionWriteResp)(nil), // 59: ExpressionWriteResp (*GetOwnershipReq)(nil), // 60: GetOwnershipReq (*GetOwnershipResp)(nil), // 61: GetOwnershipResp - (*ImageBeamLocationsReq)(nil), // 62: ImageBeamLocationsReq - (*ImageBeamLocationsResp)(nil), // 63: ImageBeamLocationsResp - (*ImageDeleteReq)(nil), // 64: ImageDeleteReq - (*ImageDeleteResp)(nil), // 65: ImageDeleteResp - (*ImageGetDefaultReq)(nil), // 66: ImageGetDefaultReq - (*ImageGetDefaultResp)(nil), // 67: ImageGetDefaultResp - (*ImageGetReq)(nil), // 68: ImageGetReq - (*ImageGetResp)(nil), // 69: ImageGetResp - (*ImageListReq)(nil), // 70: ImageListReq - (*ImageListResp)(nil), // 71: ImageListResp - (*ImageListUpd)(nil), // 72: ImageListUpd - (*ImageSetDefaultReq)(nil), // 73: ImageSetDefaultReq - (*ImageSetDefaultResp)(nil), // 74: ImageSetDefaultResp - (*ImageSetMatchTransformReq)(nil), // 75: ImageSetMatchTransformReq - (*ImageSetMatchTransformResp)(nil), // 76: ImageSetMatchTransformResp - (*ImageUploadReq)(nil), // 77: ImageUploadReq - (*ImageUploadResp)(nil), // 78: ImageUploadResp - (*ImportMarsViewerImageReq)(nil), // 79: ImportMarsViewerImageReq - (*ImportMarsViewerImageResp)(nil), // 80: ImportMarsViewerImageResp - (*ImportMarsViewerImageUpd)(nil), // 81: ImportMarsViewerImageUpd - (*LogGetLevelReq)(nil), // 82: LogGetLevelReq - (*LogGetLevelResp)(nil), // 83: LogGetLevelResp - (*LogReadReq)(nil), // 84: LogReadReq - (*LogReadResp)(nil), // 85: LogReadResp - (*LogSetLevelReq)(nil), // 86: LogSetLevelReq - (*LogSetLevelResp)(nil), // 87: LogSetLevelResp - (*MemoiseGetReq)(nil), // 88: MemoiseGetReq - (*MemoiseGetResp)(nil), // 89: MemoiseGetResp - (*MemoiseWriteReq)(nil), // 90: MemoiseWriteReq - (*MemoiseWriteResp)(nil), // 91: MemoiseWriteResp - (*MultiQuantCompareReq)(nil), // 92: MultiQuantCompareReq - (*MultiQuantCompareResp)(nil), // 93: MultiQuantCompareResp - (*NotificationDismissReq)(nil), // 94: NotificationDismissReq - (*NotificationDismissResp)(nil), // 95: NotificationDismissResp - (*NotificationReq)(nil), // 96: NotificationReq - (*NotificationResp)(nil), // 97: NotificationResp - (*NotificationUpd)(nil), // 98: NotificationUpd - (*ObjectEditAccessReq)(nil), // 99: ObjectEditAccessReq - (*ObjectEditAccessResp)(nil), // 100: ObjectEditAccessResp - (*PiquantConfigListReq)(nil), // 101: PiquantConfigListReq - (*PiquantConfigListResp)(nil), // 102: PiquantConfigListResp - (*PiquantConfigVersionReq)(nil), // 103: PiquantConfigVersionReq - (*PiquantConfigVersionResp)(nil), // 104: PiquantConfigVersionResp - (*PiquantConfigVersionsListReq)(nil), // 105: PiquantConfigVersionsListReq - (*PiquantConfigVersionsListResp)(nil), // 106: PiquantConfigVersionsListResp - (*PiquantCurrentVersionReq)(nil), // 107: PiquantCurrentVersionReq - (*PiquantCurrentVersionResp)(nil), // 108: PiquantCurrentVersionResp - (*PiquantVersionListReq)(nil), // 109: PiquantVersionListReq - (*PiquantVersionListResp)(nil), // 110: PiquantVersionListResp - (*PiquantWriteCurrentVersionReq)(nil), // 111: PiquantWriteCurrentVersionReq - (*PiquantWriteCurrentVersionResp)(nil), // 112: PiquantWriteCurrentVersionResp - (*PseudoIntensityReq)(nil), // 113: PseudoIntensityReq - (*PseudoIntensityResp)(nil), // 114: PseudoIntensityResp - (*PublishExpressionToZenodoReq)(nil), // 115: PublishExpressionToZenodoReq - (*PublishExpressionToZenodoResp)(nil), // 116: PublishExpressionToZenodoResp - (*QuantBlessReq)(nil), // 117: QuantBlessReq - (*QuantBlessResp)(nil), // 118: QuantBlessResp - (*QuantCombineListGetReq)(nil), // 119: QuantCombineListGetReq - (*QuantCombineListGetResp)(nil), // 120: QuantCombineListGetResp - (*QuantCombineListWriteReq)(nil), // 121: QuantCombineListWriteReq - (*QuantCombineListWriteResp)(nil), // 122: QuantCombineListWriteResp - (*QuantCombineReq)(nil), // 123: QuantCombineReq - (*QuantCombineResp)(nil), // 124: QuantCombineResp - (*QuantCreateReq)(nil), // 125: QuantCreateReq - (*QuantCreateResp)(nil), // 126: QuantCreateResp - (*QuantCreateUpd)(nil), // 127: QuantCreateUpd - (*QuantDeleteReq)(nil), // 128: QuantDeleteReq - (*QuantDeleteResp)(nil), // 129: QuantDeleteResp - (*QuantGetReq)(nil), // 130: QuantGetReq - (*QuantGetResp)(nil), // 131: QuantGetResp - (*QuantLastOutputGetReq)(nil), // 132: QuantLastOutputGetReq - (*QuantLastOutputGetResp)(nil), // 133: QuantLastOutputGetResp - (*QuantListReq)(nil), // 134: QuantListReq - (*QuantListResp)(nil), // 135: QuantListResp - (*QuantPublishReq)(nil), // 136: QuantPublishReq - (*QuantPublishResp)(nil), // 137: QuantPublishResp - (*QuantUploadReq)(nil), // 138: QuantUploadReq - (*QuantUploadResp)(nil), // 139: QuantUploadResp - (*RegionOfInterestBulkDuplicateReq)(nil), // 140: RegionOfInterestBulkDuplicateReq - (*RegionOfInterestBulkDuplicateResp)(nil), // 141: RegionOfInterestBulkDuplicateResp - (*RegionOfInterestBulkWriteReq)(nil), // 142: RegionOfInterestBulkWriteReq - (*RegionOfInterestBulkWriteResp)(nil), // 143: RegionOfInterestBulkWriteResp - (*RegionOfInterestDeleteReq)(nil), // 144: RegionOfInterestDeleteReq - (*RegionOfInterestDeleteResp)(nil), // 145: RegionOfInterestDeleteResp - (*RegionOfInterestDisplaySettingsGetReq)(nil), // 146: RegionOfInterestDisplaySettingsGetReq - (*RegionOfInterestDisplaySettingsGetResp)(nil), // 147: RegionOfInterestDisplaySettingsGetResp - (*RegionOfInterestDisplaySettingsWriteReq)(nil), // 148: RegionOfInterestDisplaySettingsWriteReq - (*RegionOfInterestDisplaySettingsWriteResp)(nil), // 149: RegionOfInterestDisplaySettingsWriteResp - (*RegionOfInterestGetReq)(nil), // 150: RegionOfInterestGetReq - (*RegionOfInterestGetResp)(nil), // 151: RegionOfInterestGetResp - (*RegionOfInterestListReq)(nil), // 152: RegionOfInterestListReq - (*RegionOfInterestListResp)(nil), // 153: RegionOfInterestListResp - (*RegionOfInterestWriteReq)(nil), // 154: RegionOfInterestWriteReq - (*RegionOfInterestWriteResp)(nil), // 155: RegionOfInterestWriteResp - (*RunTestReq)(nil), // 156: RunTestReq - (*RunTestResp)(nil), // 157: RunTestResp - (*ScanAutoShareReq)(nil), // 158: ScanAutoShareReq - (*ScanAutoShareResp)(nil), // 159: ScanAutoShareResp - (*ScanAutoShareWriteReq)(nil), // 160: ScanAutoShareWriteReq - (*ScanAutoShareWriteResp)(nil), // 161: ScanAutoShareWriteResp - (*ScanBeamLocationsReq)(nil), // 162: ScanBeamLocationsReq - (*ScanBeamLocationsResp)(nil), // 163: ScanBeamLocationsResp - (*ScanDeleteReq)(nil), // 164: ScanDeleteReq - (*ScanDeleteResp)(nil), // 165: ScanDeleteResp - (*ScanEntryMetadataReq)(nil), // 166: ScanEntryMetadataReq - (*ScanEntryMetadataResp)(nil), // 167: ScanEntryMetadataResp - (*ScanEntryReq)(nil), // 168: ScanEntryReq - (*ScanEntryResp)(nil), // 169: ScanEntryResp - (*ScanGetReq)(nil), // 170: ScanGetReq - (*ScanGetResp)(nil), // 171: ScanGetResp - (*ScanListReq)(nil), // 172: ScanListReq - (*ScanListResp)(nil), // 173: ScanListResp - (*ScanListUpd)(nil), // 174: ScanListUpd - (*ScanMetaLabelsAndTypesReq)(nil), // 175: ScanMetaLabelsAndTypesReq - (*ScanMetaLabelsAndTypesResp)(nil), // 176: ScanMetaLabelsAndTypesResp - (*ScanMetaWriteReq)(nil), // 177: ScanMetaWriteReq - (*ScanMetaWriteResp)(nil), // 178: ScanMetaWriteResp - (*ScanTriggerAutoQuantReq)(nil), // 179: ScanTriggerAutoQuantReq - (*ScanTriggerAutoQuantResp)(nil), // 180: ScanTriggerAutoQuantResp - (*ScanTriggerReImportReq)(nil), // 181: ScanTriggerReImportReq - (*ScanTriggerReImportResp)(nil), // 182: ScanTriggerReImportResp - (*ScanTriggerReImportUpd)(nil), // 183: ScanTriggerReImportUpd - (*ScanUploadReq)(nil), // 184: ScanUploadReq - (*ScanUploadResp)(nil), // 185: ScanUploadResp - (*ScanUploadUpd)(nil), // 186: ScanUploadUpd - (*ScreenConfigurationDeleteReq)(nil), // 187: ScreenConfigurationDeleteReq - (*ScreenConfigurationDeleteResp)(nil), // 188: ScreenConfigurationDeleteResp - (*ScreenConfigurationGetReq)(nil), // 189: ScreenConfigurationGetReq - (*ScreenConfigurationGetResp)(nil), // 190: ScreenConfigurationGetResp - (*ScreenConfigurationListReq)(nil), // 191: ScreenConfigurationListReq - (*ScreenConfigurationListResp)(nil), // 192: ScreenConfigurationListResp - (*ScreenConfigurationWriteReq)(nil), // 193: ScreenConfigurationWriteReq - (*ScreenConfigurationWriteResp)(nil), // 194: ScreenConfigurationWriteResp - (*SelectedImagePixelsReq)(nil), // 195: SelectedImagePixelsReq - (*SelectedImagePixelsResp)(nil), // 196: SelectedImagePixelsResp - (*SelectedImagePixelsWriteReq)(nil), // 197: SelectedImagePixelsWriteReq - (*SelectedImagePixelsWriteResp)(nil), // 198: SelectedImagePixelsWriteResp - (*SelectedScanEntriesReq)(nil), // 199: SelectedScanEntriesReq - (*SelectedScanEntriesResp)(nil), // 200: SelectedScanEntriesResp - (*SelectedScanEntriesWriteReq)(nil), // 201: SelectedScanEntriesWriteReq - (*SelectedScanEntriesWriteResp)(nil), // 202: SelectedScanEntriesWriteResp - (*SendUserNotificationReq)(nil), // 203: SendUserNotificationReq - (*SendUserNotificationResp)(nil), // 204: SendUserNotificationResp - (*SpectrumReq)(nil), // 205: SpectrumReq - (*SpectrumResp)(nil), // 206: SpectrumResp - (*TagCreateReq)(nil), // 207: TagCreateReq - (*TagCreateResp)(nil), // 208: TagCreateResp - (*TagDeleteReq)(nil), // 209: TagDeleteReq - (*TagDeleteResp)(nil), // 210: TagDeleteResp - (*TagListReq)(nil), // 211: TagListReq - (*TagListResp)(nil), // 212: TagListResp - (*UserAddRoleReq)(nil), // 213: UserAddRoleReq - (*UserAddRoleResp)(nil), // 214: UserAddRoleResp - (*UserDeleteRoleReq)(nil), // 215: UserDeleteRoleReq - (*UserDeleteRoleResp)(nil), // 216: UserDeleteRoleResp - (*UserDetailsReq)(nil), // 217: UserDetailsReq - (*UserDetailsResp)(nil), // 218: UserDetailsResp - (*UserDetailsWriteReq)(nil), // 219: UserDetailsWriteReq - (*UserDetailsWriteResp)(nil), // 220: UserDetailsWriteResp - (*UserGroupAddAdminReq)(nil), // 221: UserGroupAddAdminReq - (*UserGroupAddAdminResp)(nil), // 222: UserGroupAddAdminResp - (*UserGroupAddMemberReq)(nil), // 223: UserGroupAddMemberReq - (*UserGroupAddMemberResp)(nil), // 224: UserGroupAddMemberResp - (*UserGroupAddViewerReq)(nil), // 225: UserGroupAddViewerReq - (*UserGroupAddViewerResp)(nil), // 226: UserGroupAddViewerResp - (*UserGroupCreateReq)(nil), // 227: UserGroupCreateReq - (*UserGroupCreateResp)(nil), // 228: UserGroupCreateResp - (*UserGroupDeleteAdminReq)(nil), // 229: UserGroupDeleteAdminReq - (*UserGroupDeleteAdminResp)(nil), // 230: UserGroupDeleteAdminResp - (*UserGroupDeleteMemberReq)(nil), // 231: UserGroupDeleteMemberReq - (*UserGroupDeleteMemberResp)(nil), // 232: UserGroupDeleteMemberResp - (*UserGroupDeleteReq)(nil), // 233: UserGroupDeleteReq - (*UserGroupDeleteResp)(nil), // 234: UserGroupDeleteResp - (*UserGroupDeleteViewerReq)(nil), // 235: UserGroupDeleteViewerReq - (*UserGroupDeleteViewerResp)(nil), // 236: UserGroupDeleteViewerResp - (*UserGroupIgnoreJoinReq)(nil), // 237: UserGroupIgnoreJoinReq - (*UserGroupIgnoreJoinResp)(nil), // 238: UserGroupIgnoreJoinResp - (*UserGroupJoinListReq)(nil), // 239: UserGroupJoinListReq - (*UserGroupJoinListResp)(nil), // 240: UserGroupJoinListResp - (*UserGroupJoinReq)(nil), // 241: UserGroupJoinReq - (*UserGroupJoinResp)(nil), // 242: UserGroupJoinResp - (*UserGroupListJoinableReq)(nil), // 243: UserGroupListJoinableReq - (*UserGroupListJoinableResp)(nil), // 244: UserGroupListJoinableResp - (*UserGroupListReq)(nil), // 245: UserGroupListReq - (*UserGroupListResp)(nil), // 246: UserGroupListResp - (*UserGroupReq)(nil), // 247: UserGroupReq - (*UserGroupResp)(nil), // 248: UserGroupResp - (*UserGroupSetNameReq)(nil), // 249: UserGroupSetNameReq - (*UserGroupSetNameResp)(nil), // 250: UserGroupSetNameResp - (*UserListReq)(nil), // 251: UserListReq - (*UserListResp)(nil), // 252: UserListResp - (*UserNotificationSettingsReq)(nil), // 253: UserNotificationSettingsReq - (*UserNotificationSettingsResp)(nil), // 254: UserNotificationSettingsResp - (*UserNotificationSettingsUpd)(nil), // 255: UserNotificationSettingsUpd - (*UserNotificationSettingsWriteReq)(nil), // 256: UserNotificationSettingsWriteReq - (*UserNotificationSettingsWriteResp)(nil), // 257: UserNotificationSettingsWriteResp - (*UserRoleListReq)(nil), // 258: UserRoleListReq - (*UserRoleListResp)(nil), // 259: UserRoleListResp - (*UserRolesListReq)(nil), // 260: UserRolesListReq - (*UserRolesListResp)(nil), // 261: UserRolesListResp - (*UserSearchReq)(nil), // 262: UserSearchReq - (*UserSearchResp)(nil), // 263: UserSearchResp - (*WidgetDataGetReq)(nil), // 264: WidgetDataGetReq - (*WidgetDataGetResp)(nil), // 265: WidgetDataGetResp - (*WidgetDataWriteReq)(nil), // 266: WidgetDataWriteReq - (*WidgetDataWriteResp)(nil), // 267: WidgetDataWriteResp - (*ZenodoDOIGetReq)(nil), // 268: ZenodoDOIGetReq - (*ZenodoDOIGetResp)(nil), // 269: ZenodoDOIGetResp + (*ImageBeamLocationVersionsReq)(nil), // 62: ImageBeamLocationVersionsReq + (*ImageBeamLocationVersionsResp)(nil), // 63: ImageBeamLocationVersionsResp + (*ImageBeamLocationsReq)(nil), // 64: ImageBeamLocationsReq + (*ImageBeamLocationsResp)(nil), // 65: ImageBeamLocationsResp + (*ImageDeleteReq)(nil), // 66: ImageDeleteReq + (*ImageDeleteResp)(nil), // 67: ImageDeleteResp + (*ImageGetDefaultReq)(nil), // 68: ImageGetDefaultReq + (*ImageGetDefaultResp)(nil), // 69: ImageGetDefaultResp + (*ImageGetReq)(nil), // 70: ImageGetReq + (*ImageGetResp)(nil), // 71: ImageGetResp + (*ImageListReq)(nil), // 72: ImageListReq + (*ImageListResp)(nil), // 73: ImageListResp + (*ImageListUpd)(nil), // 74: ImageListUpd + (*ImageSetDefaultReq)(nil), // 75: ImageSetDefaultReq + (*ImageSetDefaultResp)(nil), // 76: ImageSetDefaultResp + (*ImageSetMatchTransformReq)(nil), // 77: ImageSetMatchTransformReq + (*ImageSetMatchTransformResp)(nil), // 78: ImageSetMatchTransformResp + (*ImageUploadReq)(nil), // 79: ImageUploadReq + (*ImageUploadResp)(nil), // 80: ImageUploadResp + (*ImportMarsViewerImageReq)(nil), // 81: ImportMarsViewerImageReq + (*ImportMarsViewerImageResp)(nil), // 82: ImportMarsViewerImageResp + (*ImportMarsViewerImageUpd)(nil), // 83: ImportMarsViewerImageUpd + (*JobListReq)(nil), // 84: JobListReq + (*JobListResp)(nil), // 85: JobListResp + (*JobListUpd)(nil), // 86: JobListUpd + (*LogGetLevelReq)(nil), // 87: LogGetLevelReq + (*LogGetLevelResp)(nil), // 88: LogGetLevelResp + (*LogReadReq)(nil), // 89: LogReadReq + (*LogReadResp)(nil), // 90: LogReadResp + (*LogSetLevelReq)(nil), // 91: LogSetLevelReq + (*LogSetLevelResp)(nil), // 92: LogSetLevelResp + (*MemoiseGetReq)(nil), // 93: MemoiseGetReq + (*MemoiseGetResp)(nil), // 94: MemoiseGetResp + (*MemoiseWriteReq)(nil), // 95: MemoiseWriteReq + (*MemoiseWriteResp)(nil), // 96: MemoiseWriteResp + (*MultiQuantCompareReq)(nil), // 97: MultiQuantCompareReq + (*MultiQuantCompareResp)(nil), // 98: MultiQuantCompareResp + (*NotificationDismissReq)(nil), // 99: NotificationDismissReq + (*NotificationDismissResp)(nil), // 100: NotificationDismissResp + (*NotificationReq)(nil), // 101: NotificationReq + (*NotificationResp)(nil), // 102: NotificationResp + (*NotificationUpd)(nil), // 103: NotificationUpd + (*ObjectEditAccessReq)(nil), // 104: ObjectEditAccessReq + (*ObjectEditAccessResp)(nil), // 105: ObjectEditAccessResp + (*PiquantConfigListReq)(nil), // 106: PiquantConfigListReq + (*PiquantConfigListResp)(nil), // 107: PiquantConfigListResp + (*PiquantConfigVersionReq)(nil), // 108: PiquantConfigVersionReq + (*PiquantConfigVersionResp)(nil), // 109: PiquantConfigVersionResp + (*PiquantConfigVersionsListReq)(nil), // 110: PiquantConfigVersionsListReq + (*PiquantConfigVersionsListResp)(nil), // 111: PiquantConfigVersionsListResp + (*PiquantCurrentVersionReq)(nil), // 112: PiquantCurrentVersionReq + (*PiquantCurrentVersionResp)(nil), // 113: PiquantCurrentVersionResp + (*PiquantVersionListReq)(nil), // 114: PiquantVersionListReq + (*PiquantVersionListResp)(nil), // 115: PiquantVersionListResp + (*PiquantWriteCurrentVersionReq)(nil), // 116: PiquantWriteCurrentVersionReq + (*PiquantWriteCurrentVersionResp)(nil), // 117: PiquantWriteCurrentVersionResp + (*PseudoIntensityReq)(nil), // 118: PseudoIntensityReq + (*PseudoIntensityResp)(nil), // 119: PseudoIntensityResp + (*PublishExpressionToZenodoReq)(nil), // 120: PublishExpressionToZenodoReq + (*PublishExpressionToZenodoResp)(nil), // 121: PublishExpressionToZenodoResp + (*QuantBlessReq)(nil), // 122: QuantBlessReq + (*QuantBlessResp)(nil), // 123: QuantBlessResp + (*QuantCombineListGetReq)(nil), // 124: QuantCombineListGetReq + (*QuantCombineListGetResp)(nil), // 125: QuantCombineListGetResp + (*QuantCombineListWriteReq)(nil), // 126: QuantCombineListWriteReq + (*QuantCombineListWriteResp)(nil), // 127: QuantCombineListWriteResp + (*QuantCombineReq)(nil), // 128: QuantCombineReq + (*QuantCombineResp)(nil), // 129: QuantCombineResp + (*QuantCreateReq)(nil), // 130: QuantCreateReq + (*QuantCreateResp)(nil), // 131: QuantCreateResp + (*QuantCreateUpd)(nil), // 132: QuantCreateUpd + (*QuantDeleteReq)(nil), // 133: QuantDeleteReq + (*QuantDeleteResp)(nil), // 134: QuantDeleteResp + (*QuantGetReq)(nil), // 135: QuantGetReq + (*QuantGetResp)(nil), // 136: QuantGetResp + (*QuantLastOutputGetReq)(nil), // 137: QuantLastOutputGetReq + (*QuantLastOutputGetResp)(nil), // 138: QuantLastOutputGetResp + (*QuantListReq)(nil), // 139: QuantListReq + (*QuantListResp)(nil), // 140: QuantListResp + (*QuantLogGetReq)(nil), // 141: QuantLogGetReq + (*QuantLogGetResp)(nil), // 142: QuantLogGetResp + (*QuantLogListReq)(nil), // 143: QuantLogListReq + (*QuantLogListResp)(nil), // 144: QuantLogListResp + (*QuantPublishReq)(nil), // 145: QuantPublishReq + (*QuantPublishResp)(nil), // 146: QuantPublishResp + (*QuantRawDataGetReq)(nil), // 147: QuantRawDataGetReq + (*QuantRawDataGetResp)(nil), // 148: QuantRawDataGetResp + (*QuantUploadReq)(nil), // 149: QuantUploadReq + (*QuantUploadResp)(nil), // 150: QuantUploadResp + (*RegionOfInterestBulkDuplicateReq)(nil), // 151: RegionOfInterestBulkDuplicateReq + (*RegionOfInterestBulkDuplicateResp)(nil), // 152: RegionOfInterestBulkDuplicateResp + (*RegionOfInterestBulkWriteReq)(nil), // 153: RegionOfInterestBulkWriteReq + (*RegionOfInterestBulkWriteResp)(nil), // 154: RegionOfInterestBulkWriteResp + (*RegionOfInterestDeleteReq)(nil), // 155: RegionOfInterestDeleteReq + (*RegionOfInterestDeleteResp)(nil), // 156: RegionOfInterestDeleteResp + (*RegionOfInterestDisplaySettingsGetReq)(nil), // 157: RegionOfInterestDisplaySettingsGetReq + (*RegionOfInterestDisplaySettingsGetResp)(nil), // 158: RegionOfInterestDisplaySettingsGetResp + (*RegionOfInterestDisplaySettingsWriteReq)(nil), // 159: RegionOfInterestDisplaySettingsWriteReq + (*RegionOfInterestDisplaySettingsWriteResp)(nil), // 160: RegionOfInterestDisplaySettingsWriteResp + (*RegionOfInterestGetReq)(nil), // 161: RegionOfInterestGetReq + (*RegionOfInterestGetResp)(nil), // 162: RegionOfInterestGetResp + (*RegionOfInterestListReq)(nil), // 163: RegionOfInterestListReq + (*RegionOfInterestListResp)(nil), // 164: RegionOfInterestListResp + (*RegionOfInterestWriteReq)(nil), // 165: RegionOfInterestWriteReq + (*RegionOfInterestWriteResp)(nil), // 166: RegionOfInterestWriteResp + (*RunTestReq)(nil), // 167: RunTestReq + (*RunTestResp)(nil), // 168: RunTestResp + (*ScanAutoShareReq)(nil), // 169: ScanAutoShareReq + (*ScanAutoShareResp)(nil), // 170: ScanAutoShareResp + (*ScanAutoShareWriteReq)(nil), // 171: ScanAutoShareWriteReq + (*ScanAutoShareWriteResp)(nil), // 172: ScanAutoShareWriteResp + (*ScanBeamLocationsReq)(nil), // 173: ScanBeamLocationsReq + (*ScanBeamLocationsResp)(nil), // 174: ScanBeamLocationsResp + (*ScanDeleteReq)(nil), // 175: ScanDeleteReq + (*ScanDeleteResp)(nil), // 176: ScanDeleteResp + (*ScanEntryMetadataReq)(nil), // 177: ScanEntryMetadataReq + (*ScanEntryMetadataResp)(nil), // 178: ScanEntryMetadataResp + (*ScanEntryReq)(nil), // 179: ScanEntryReq + (*ScanEntryResp)(nil), // 180: ScanEntryResp + (*ScanGetReq)(nil), // 181: ScanGetReq + (*ScanGetResp)(nil), // 182: ScanGetResp + (*ScanListReq)(nil), // 183: ScanListReq + (*ScanListResp)(nil), // 184: ScanListResp + (*ScanListUpd)(nil), // 185: ScanListUpd + (*ScanMetaLabelsAndTypesReq)(nil), // 186: ScanMetaLabelsAndTypesReq + (*ScanMetaLabelsAndTypesResp)(nil), // 187: ScanMetaLabelsAndTypesResp + (*ScanMetaWriteReq)(nil), // 188: ScanMetaWriteReq + (*ScanMetaWriteResp)(nil), // 189: ScanMetaWriteResp + (*ScanTriggerAutoQuantReq)(nil), // 190: ScanTriggerAutoQuantReq + (*ScanTriggerAutoQuantResp)(nil), // 191: ScanTriggerAutoQuantResp + (*ScanTriggerReImportReq)(nil), // 192: ScanTriggerReImportReq + (*ScanTriggerReImportResp)(nil), // 193: ScanTriggerReImportResp + (*ScanTriggerReImportUpd)(nil), // 194: ScanTriggerReImportUpd + (*ScanUploadReq)(nil), // 195: ScanUploadReq + (*ScanUploadResp)(nil), // 196: ScanUploadResp + (*ScanUploadUpd)(nil), // 197: ScanUploadUpd + (*ScreenConfigurationDeleteReq)(nil), // 198: ScreenConfigurationDeleteReq + (*ScreenConfigurationDeleteResp)(nil), // 199: ScreenConfigurationDeleteResp + (*ScreenConfigurationGetReq)(nil), // 200: ScreenConfigurationGetReq + (*ScreenConfigurationGetResp)(nil), // 201: ScreenConfigurationGetResp + (*ScreenConfigurationListReq)(nil), // 202: ScreenConfigurationListReq + (*ScreenConfigurationListResp)(nil), // 203: ScreenConfigurationListResp + (*ScreenConfigurationWriteReq)(nil), // 204: ScreenConfigurationWriteReq + (*ScreenConfigurationWriteResp)(nil), // 205: ScreenConfigurationWriteResp + (*SelectedImagePixelsReq)(nil), // 206: SelectedImagePixelsReq + (*SelectedImagePixelsResp)(nil), // 207: SelectedImagePixelsResp + (*SelectedImagePixelsWriteReq)(nil), // 208: SelectedImagePixelsWriteReq + (*SelectedImagePixelsWriteResp)(nil), // 209: SelectedImagePixelsWriteResp + (*SelectedScanEntriesReq)(nil), // 210: SelectedScanEntriesReq + (*SelectedScanEntriesResp)(nil), // 211: SelectedScanEntriesResp + (*SelectedScanEntriesWriteReq)(nil), // 212: SelectedScanEntriesWriteReq + (*SelectedScanEntriesWriteResp)(nil), // 213: SelectedScanEntriesWriteResp + (*SendUserNotificationReq)(nil), // 214: SendUserNotificationReq + (*SendUserNotificationResp)(nil), // 215: SendUserNotificationResp + (*SpectrumReq)(nil), // 216: SpectrumReq + (*SpectrumResp)(nil), // 217: SpectrumResp + (*TagCreateReq)(nil), // 218: TagCreateReq + (*TagCreateResp)(nil), // 219: TagCreateResp + (*TagDeleteReq)(nil), // 220: TagDeleteReq + (*TagDeleteResp)(nil), // 221: TagDeleteResp + (*TagListReq)(nil), // 222: TagListReq + (*TagListResp)(nil), // 223: TagListResp + (*UserAddRoleReq)(nil), // 224: UserAddRoleReq + (*UserAddRoleResp)(nil), // 225: UserAddRoleResp + (*UserDeleteRoleReq)(nil), // 226: UserDeleteRoleReq + (*UserDeleteRoleResp)(nil), // 227: UserDeleteRoleResp + (*UserDetailsReq)(nil), // 228: UserDetailsReq + (*UserDetailsResp)(nil), // 229: UserDetailsResp + (*UserDetailsWriteReq)(nil), // 230: UserDetailsWriteReq + (*UserDetailsWriteResp)(nil), // 231: UserDetailsWriteResp + (*UserGroupAddAdminReq)(nil), // 232: UserGroupAddAdminReq + (*UserGroupAddAdminResp)(nil), // 233: UserGroupAddAdminResp + (*UserGroupAddMemberReq)(nil), // 234: UserGroupAddMemberReq + (*UserGroupAddMemberResp)(nil), // 235: UserGroupAddMemberResp + (*UserGroupAddViewerReq)(nil), // 236: UserGroupAddViewerReq + (*UserGroupAddViewerResp)(nil), // 237: UserGroupAddViewerResp + (*UserGroupCreateReq)(nil), // 238: UserGroupCreateReq + (*UserGroupCreateResp)(nil), // 239: UserGroupCreateResp + (*UserGroupDeleteAdminReq)(nil), // 240: UserGroupDeleteAdminReq + (*UserGroupDeleteAdminResp)(nil), // 241: UserGroupDeleteAdminResp + (*UserGroupDeleteMemberReq)(nil), // 242: UserGroupDeleteMemberReq + (*UserGroupDeleteMemberResp)(nil), // 243: UserGroupDeleteMemberResp + (*UserGroupDeleteReq)(nil), // 244: UserGroupDeleteReq + (*UserGroupDeleteResp)(nil), // 245: UserGroupDeleteResp + (*UserGroupDeleteViewerReq)(nil), // 246: UserGroupDeleteViewerReq + (*UserGroupDeleteViewerResp)(nil), // 247: UserGroupDeleteViewerResp + (*UserGroupIgnoreJoinReq)(nil), // 248: UserGroupIgnoreJoinReq + (*UserGroupIgnoreJoinResp)(nil), // 249: UserGroupIgnoreJoinResp + (*UserGroupJoinListReq)(nil), // 250: UserGroupJoinListReq + (*UserGroupJoinListResp)(nil), // 251: UserGroupJoinListResp + (*UserGroupJoinReq)(nil), // 252: UserGroupJoinReq + (*UserGroupJoinResp)(nil), // 253: UserGroupJoinResp + (*UserGroupListJoinableReq)(nil), // 254: UserGroupListJoinableReq + (*UserGroupListJoinableResp)(nil), // 255: UserGroupListJoinableResp + (*UserGroupListReq)(nil), // 256: UserGroupListReq + (*UserGroupListResp)(nil), // 257: UserGroupListResp + (*UserGroupReq)(nil), // 258: UserGroupReq + (*UserGroupResp)(nil), // 259: UserGroupResp + (*UserGroupSetNameReq)(nil), // 260: UserGroupSetNameReq + (*UserGroupSetNameResp)(nil), // 261: UserGroupSetNameResp + (*UserListReq)(nil), // 262: UserListReq + (*UserListResp)(nil), // 263: UserListResp + (*UserNotificationSettingsReq)(nil), // 264: UserNotificationSettingsReq + (*UserNotificationSettingsResp)(nil), // 265: UserNotificationSettingsResp + (*UserNotificationSettingsUpd)(nil), // 266: UserNotificationSettingsUpd + (*UserNotificationSettingsWriteReq)(nil), // 267: UserNotificationSettingsWriteReq + (*UserNotificationSettingsWriteResp)(nil), // 268: UserNotificationSettingsWriteResp + (*UserRoleListReq)(nil), // 269: UserRoleListReq + (*UserRoleListResp)(nil), // 270: UserRoleListResp + (*UserRolesListReq)(nil), // 271: UserRolesListReq + (*UserRolesListResp)(nil), // 272: UserRolesListResp + (*UserSearchReq)(nil), // 273: UserSearchReq + (*UserSearchResp)(nil), // 274: UserSearchResp + (*WidgetDataGetReq)(nil), // 275: WidgetDataGetReq + (*WidgetDataGetResp)(nil), // 276: WidgetDataGetResp + (*WidgetDataWriteReq)(nil), // 277: WidgetDataWriteReq + (*WidgetDataWriteResp)(nil), // 278: WidgetDataWriteResp + (*ZenodoDOIGetReq)(nil), // 279: ZenodoDOIGetReq + (*ZenodoDOIGetResp)(nil), // 280: ZenodoDOIGetResp } var file_websocket_proto_depIdxs = []int32{ 0, // 0: WSMessage.status:type_name -> ResponseStatus @@ -5684,219 +5897,230 @@ var file_websocket_proto_depIdxs = []int32{ 59, // 58: WSMessage.expressionWriteResp:type_name -> ExpressionWriteResp 60, // 59: WSMessage.getOwnershipReq:type_name -> GetOwnershipReq 61, // 60: WSMessage.getOwnershipResp:type_name -> GetOwnershipResp - 62, // 61: WSMessage.imageBeamLocationsReq:type_name -> ImageBeamLocationsReq - 63, // 62: WSMessage.imageBeamLocationsResp:type_name -> ImageBeamLocationsResp - 64, // 63: WSMessage.imageDeleteReq:type_name -> ImageDeleteReq - 65, // 64: WSMessage.imageDeleteResp:type_name -> ImageDeleteResp - 66, // 65: WSMessage.imageGetDefaultReq:type_name -> ImageGetDefaultReq - 67, // 66: WSMessage.imageGetDefaultResp:type_name -> ImageGetDefaultResp - 68, // 67: WSMessage.imageGetReq:type_name -> ImageGetReq - 69, // 68: WSMessage.imageGetResp:type_name -> ImageGetResp - 70, // 69: WSMessage.imageListReq:type_name -> ImageListReq - 71, // 70: WSMessage.imageListResp:type_name -> ImageListResp - 72, // 71: WSMessage.imageListUpd:type_name -> ImageListUpd - 73, // 72: WSMessage.imageSetDefaultReq:type_name -> ImageSetDefaultReq - 74, // 73: WSMessage.imageSetDefaultResp:type_name -> ImageSetDefaultResp - 75, // 74: WSMessage.imageSetMatchTransformReq:type_name -> ImageSetMatchTransformReq - 76, // 75: WSMessage.imageSetMatchTransformResp:type_name -> ImageSetMatchTransformResp - 77, // 76: WSMessage.imageUploadReq:type_name -> ImageUploadReq - 78, // 77: WSMessage.imageUploadResp:type_name -> ImageUploadResp - 79, // 78: WSMessage.importMarsViewerImageReq:type_name -> ImportMarsViewerImageReq - 80, // 79: WSMessage.importMarsViewerImageResp:type_name -> ImportMarsViewerImageResp - 81, // 80: WSMessage.importMarsViewerImageUpd:type_name -> ImportMarsViewerImageUpd - 82, // 81: WSMessage.logGetLevelReq:type_name -> LogGetLevelReq - 83, // 82: WSMessage.logGetLevelResp:type_name -> LogGetLevelResp - 84, // 83: WSMessage.logReadReq:type_name -> LogReadReq - 85, // 84: WSMessage.logReadResp:type_name -> LogReadResp - 86, // 85: WSMessage.logSetLevelReq:type_name -> LogSetLevelReq - 87, // 86: WSMessage.logSetLevelResp:type_name -> LogSetLevelResp - 88, // 87: WSMessage.memoiseGetReq:type_name -> MemoiseGetReq - 89, // 88: WSMessage.memoiseGetResp:type_name -> MemoiseGetResp - 90, // 89: WSMessage.memoiseWriteReq:type_name -> MemoiseWriteReq - 91, // 90: WSMessage.memoiseWriteResp:type_name -> MemoiseWriteResp - 92, // 91: WSMessage.multiQuantCompareReq:type_name -> MultiQuantCompareReq - 93, // 92: WSMessage.multiQuantCompareResp:type_name -> MultiQuantCompareResp - 94, // 93: WSMessage.notificationDismissReq:type_name -> NotificationDismissReq - 95, // 94: WSMessage.notificationDismissResp:type_name -> NotificationDismissResp - 96, // 95: WSMessage.notificationReq:type_name -> NotificationReq - 97, // 96: WSMessage.notificationResp:type_name -> NotificationResp - 98, // 97: WSMessage.notificationUpd:type_name -> NotificationUpd - 99, // 98: WSMessage.objectEditAccessReq:type_name -> ObjectEditAccessReq - 100, // 99: WSMessage.objectEditAccessResp:type_name -> ObjectEditAccessResp - 101, // 100: WSMessage.piquantConfigListReq:type_name -> PiquantConfigListReq - 102, // 101: WSMessage.piquantConfigListResp:type_name -> PiquantConfigListResp - 103, // 102: WSMessage.piquantConfigVersionReq:type_name -> PiquantConfigVersionReq - 104, // 103: WSMessage.piquantConfigVersionResp:type_name -> PiquantConfigVersionResp - 105, // 104: WSMessage.piquantConfigVersionsListReq:type_name -> PiquantConfigVersionsListReq - 106, // 105: WSMessage.piquantConfigVersionsListResp:type_name -> PiquantConfigVersionsListResp - 107, // 106: WSMessage.piquantCurrentVersionReq:type_name -> PiquantCurrentVersionReq - 108, // 107: WSMessage.piquantCurrentVersionResp:type_name -> PiquantCurrentVersionResp - 109, // 108: WSMessage.piquantVersionListReq:type_name -> PiquantVersionListReq - 110, // 109: WSMessage.piquantVersionListResp:type_name -> PiquantVersionListResp - 111, // 110: WSMessage.piquantWriteCurrentVersionReq:type_name -> PiquantWriteCurrentVersionReq - 112, // 111: WSMessage.piquantWriteCurrentVersionResp:type_name -> PiquantWriteCurrentVersionResp - 113, // 112: WSMessage.pseudoIntensityReq:type_name -> PseudoIntensityReq - 114, // 113: WSMessage.pseudoIntensityResp:type_name -> PseudoIntensityResp - 115, // 114: WSMessage.publishExpressionToZenodoReq:type_name -> PublishExpressionToZenodoReq - 116, // 115: WSMessage.publishExpressionToZenodoResp:type_name -> PublishExpressionToZenodoResp - 117, // 116: WSMessage.quantBlessReq:type_name -> QuantBlessReq - 118, // 117: WSMessage.quantBlessResp:type_name -> QuantBlessResp - 119, // 118: WSMessage.quantCombineListGetReq:type_name -> QuantCombineListGetReq - 120, // 119: WSMessage.quantCombineListGetResp:type_name -> QuantCombineListGetResp - 121, // 120: WSMessage.quantCombineListWriteReq:type_name -> QuantCombineListWriteReq - 122, // 121: WSMessage.quantCombineListWriteResp:type_name -> QuantCombineListWriteResp - 123, // 122: WSMessage.quantCombineReq:type_name -> QuantCombineReq - 124, // 123: WSMessage.quantCombineResp:type_name -> QuantCombineResp - 125, // 124: WSMessage.quantCreateReq:type_name -> QuantCreateReq - 126, // 125: WSMessage.quantCreateResp:type_name -> QuantCreateResp - 127, // 126: WSMessage.quantCreateUpd:type_name -> QuantCreateUpd - 128, // 127: WSMessage.quantDeleteReq:type_name -> QuantDeleteReq - 129, // 128: WSMessage.quantDeleteResp:type_name -> QuantDeleteResp - 130, // 129: WSMessage.quantGetReq:type_name -> QuantGetReq - 131, // 130: WSMessage.quantGetResp:type_name -> QuantGetResp - 132, // 131: WSMessage.quantLastOutputGetReq:type_name -> QuantLastOutputGetReq - 133, // 132: WSMessage.quantLastOutputGetResp:type_name -> QuantLastOutputGetResp - 134, // 133: WSMessage.quantListReq:type_name -> QuantListReq - 135, // 134: WSMessage.quantListResp:type_name -> QuantListResp - 136, // 135: WSMessage.quantPublishReq:type_name -> QuantPublishReq - 137, // 136: WSMessage.quantPublishResp:type_name -> QuantPublishResp - 138, // 137: WSMessage.quantUploadReq:type_name -> QuantUploadReq - 139, // 138: WSMessage.quantUploadResp:type_name -> QuantUploadResp - 140, // 139: WSMessage.regionOfInterestBulkDuplicateReq:type_name -> RegionOfInterestBulkDuplicateReq - 141, // 140: WSMessage.regionOfInterestBulkDuplicateResp:type_name -> RegionOfInterestBulkDuplicateResp - 142, // 141: WSMessage.regionOfInterestBulkWriteReq:type_name -> RegionOfInterestBulkWriteReq - 143, // 142: WSMessage.regionOfInterestBulkWriteResp:type_name -> RegionOfInterestBulkWriteResp - 144, // 143: WSMessage.regionOfInterestDeleteReq:type_name -> RegionOfInterestDeleteReq - 145, // 144: WSMessage.regionOfInterestDeleteResp:type_name -> RegionOfInterestDeleteResp - 146, // 145: WSMessage.regionOfInterestDisplaySettingsGetReq:type_name -> RegionOfInterestDisplaySettingsGetReq - 147, // 146: WSMessage.regionOfInterestDisplaySettingsGetResp:type_name -> RegionOfInterestDisplaySettingsGetResp - 148, // 147: WSMessage.regionOfInterestDisplaySettingsWriteReq:type_name -> RegionOfInterestDisplaySettingsWriteReq - 149, // 148: WSMessage.regionOfInterestDisplaySettingsWriteResp:type_name -> RegionOfInterestDisplaySettingsWriteResp - 150, // 149: WSMessage.regionOfInterestGetReq:type_name -> RegionOfInterestGetReq - 151, // 150: WSMessage.regionOfInterestGetResp:type_name -> RegionOfInterestGetResp - 152, // 151: WSMessage.regionOfInterestListReq:type_name -> RegionOfInterestListReq - 153, // 152: WSMessage.regionOfInterestListResp:type_name -> RegionOfInterestListResp - 154, // 153: WSMessage.regionOfInterestWriteReq:type_name -> RegionOfInterestWriteReq - 155, // 154: WSMessage.regionOfInterestWriteResp:type_name -> RegionOfInterestWriteResp - 156, // 155: WSMessage.runTestReq:type_name -> RunTestReq - 157, // 156: WSMessage.runTestResp:type_name -> RunTestResp - 158, // 157: WSMessage.scanAutoShareReq:type_name -> ScanAutoShareReq - 159, // 158: WSMessage.scanAutoShareResp:type_name -> ScanAutoShareResp - 160, // 159: WSMessage.scanAutoShareWriteReq:type_name -> ScanAutoShareWriteReq - 161, // 160: WSMessage.scanAutoShareWriteResp:type_name -> ScanAutoShareWriteResp - 162, // 161: WSMessage.scanBeamLocationsReq:type_name -> ScanBeamLocationsReq - 163, // 162: WSMessage.scanBeamLocationsResp:type_name -> ScanBeamLocationsResp - 164, // 163: WSMessage.scanDeleteReq:type_name -> ScanDeleteReq - 165, // 164: WSMessage.scanDeleteResp:type_name -> ScanDeleteResp - 166, // 165: WSMessage.scanEntryMetadataReq:type_name -> ScanEntryMetadataReq - 167, // 166: WSMessage.scanEntryMetadataResp:type_name -> ScanEntryMetadataResp - 168, // 167: WSMessage.scanEntryReq:type_name -> ScanEntryReq - 169, // 168: WSMessage.scanEntryResp:type_name -> ScanEntryResp - 170, // 169: WSMessage.scanGetReq:type_name -> ScanGetReq - 171, // 170: WSMessage.scanGetResp:type_name -> ScanGetResp - 172, // 171: WSMessage.scanListReq:type_name -> ScanListReq - 173, // 172: WSMessage.scanListResp:type_name -> ScanListResp - 174, // 173: WSMessage.scanListUpd:type_name -> ScanListUpd - 175, // 174: WSMessage.scanMetaLabelsAndTypesReq:type_name -> ScanMetaLabelsAndTypesReq - 176, // 175: WSMessage.scanMetaLabelsAndTypesResp:type_name -> ScanMetaLabelsAndTypesResp - 177, // 176: WSMessage.scanMetaWriteReq:type_name -> ScanMetaWriteReq - 178, // 177: WSMessage.scanMetaWriteResp:type_name -> ScanMetaWriteResp - 179, // 178: WSMessage.scanTriggerAutoQuantReq:type_name -> ScanTriggerAutoQuantReq - 180, // 179: WSMessage.scanTriggerAutoQuantResp:type_name -> ScanTriggerAutoQuantResp - 181, // 180: WSMessage.scanTriggerReImportReq:type_name -> ScanTriggerReImportReq - 182, // 181: WSMessage.scanTriggerReImportResp:type_name -> ScanTriggerReImportResp - 183, // 182: WSMessage.scanTriggerReImportUpd:type_name -> ScanTriggerReImportUpd - 184, // 183: WSMessage.scanUploadReq:type_name -> ScanUploadReq - 185, // 184: WSMessage.scanUploadResp:type_name -> ScanUploadResp - 186, // 185: WSMessage.scanUploadUpd:type_name -> ScanUploadUpd - 187, // 186: WSMessage.screenConfigurationDeleteReq:type_name -> ScreenConfigurationDeleteReq - 188, // 187: WSMessage.screenConfigurationDeleteResp:type_name -> ScreenConfigurationDeleteResp - 189, // 188: WSMessage.screenConfigurationGetReq:type_name -> ScreenConfigurationGetReq - 190, // 189: WSMessage.screenConfigurationGetResp:type_name -> ScreenConfigurationGetResp - 191, // 190: WSMessage.screenConfigurationListReq:type_name -> ScreenConfigurationListReq - 192, // 191: WSMessage.screenConfigurationListResp:type_name -> ScreenConfigurationListResp - 193, // 192: WSMessage.screenConfigurationWriteReq:type_name -> ScreenConfigurationWriteReq - 194, // 193: WSMessage.screenConfigurationWriteResp:type_name -> ScreenConfigurationWriteResp - 195, // 194: WSMessage.selectedImagePixelsReq:type_name -> SelectedImagePixelsReq - 196, // 195: WSMessage.selectedImagePixelsResp:type_name -> SelectedImagePixelsResp - 197, // 196: WSMessage.selectedImagePixelsWriteReq:type_name -> SelectedImagePixelsWriteReq - 198, // 197: WSMessage.selectedImagePixelsWriteResp:type_name -> SelectedImagePixelsWriteResp - 199, // 198: WSMessage.selectedScanEntriesReq:type_name -> SelectedScanEntriesReq - 200, // 199: WSMessage.selectedScanEntriesResp:type_name -> SelectedScanEntriesResp - 201, // 200: WSMessage.selectedScanEntriesWriteReq:type_name -> SelectedScanEntriesWriteReq - 202, // 201: WSMessage.selectedScanEntriesWriteResp:type_name -> SelectedScanEntriesWriteResp - 203, // 202: WSMessage.sendUserNotificationReq:type_name -> SendUserNotificationReq - 204, // 203: WSMessage.sendUserNotificationResp:type_name -> SendUserNotificationResp - 205, // 204: WSMessage.spectrumReq:type_name -> SpectrumReq - 206, // 205: WSMessage.spectrumResp:type_name -> SpectrumResp - 207, // 206: WSMessage.tagCreateReq:type_name -> TagCreateReq - 208, // 207: WSMessage.tagCreateResp:type_name -> TagCreateResp - 209, // 208: WSMessage.tagDeleteReq:type_name -> TagDeleteReq - 210, // 209: WSMessage.tagDeleteResp:type_name -> TagDeleteResp - 211, // 210: WSMessage.tagListReq:type_name -> TagListReq - 212, // 211: WSMessage.tagListResp:type_name -> TagListResp - 213, // 212: WSMessage.userAddRoleReq:type_name -> UserAddRoleReq - 214, // 213: WSMessage.userAddRoleResp:type_name -> UserAddRoleResp - 215, // 214: WSMessage.userDeleteRoleReq:type_name -> UserDeleteRoleReq - 216, // 215: WSMessage.userDeleteRoleResp:type_name -> UserDeleteRoleResp - 217, // 216: WSMessage.userDetailsReq:type_name -> UserDetailsReq - 218, // 217: WSMessage.userDetailsResp:type_name -> UserDetailsResp - 219, // 218: WSMessage.userDetailsWriteReq:type_name -> UserDetailsWriteReq - 220, // 219: WSMessage.userDetailsWriteResp:type_name -> UserDetailsWriteResp - 221, // 220: WSMessage.userGroupAddAdminReq:type_name -> UserGroupAddAdminReq - 222, // 221: WSMessage.userGroupAddAdminResp:type_name -> UserGroupAddAdminResp - 223, // 222: WSMessage.userGroupAddMemberReq:type_name -> UserGroupAddMemberReq - 224, // 223: WSMessage.userGroupAddMemberResp:type_name -> UserGroupAddMemberResp - 225, // 224: WSMessage.userGroupAddViewerReq:type_name -> UserGroupAddViewerReq - 226, // 225: WSMessage.userGroupAddViewerResp:type_name -> UserGroupAddViewerResp - 227, // 226: WSMessage.userGroupCreateReq:type_name -> UserGroupCreateReq - 228, // 227: WSMessage.userGroupCreateResp:type_name -> UserGroupCreateResp - 229, // 228: WSMessage.userGroupDeleteAdminReq:type_name -> UserGroupDeleteAdminReq - 230, // 229: WSMessage.userGroupDeleteAdminResp:type_name -> UserGroupDeleteAdminResp - 231, // 230: WSMessage.userGroupDeleteMemberReq:type_name -> UserGroupDeleteMemberReq - 232, // 231: WSMessage.userGroupDeleteMemberResp:type_name -> UserGroupDeleteMemberResp - 233, // 232: WSMessage.userGroupDeleteReq:type_name -> UserGroupDeleteReq - 234, // 233: WSMessage.userGroupDeleteResp:type_name -> UserGroupDeleteResp - 235, // 234: WSMessage.userGroupDeleteViewerReq:type_name -> UserGroupDeleteViewerReq - 236, // 235: WSMessage.userGroupDeleteViewerResp:type_name -> UserGroupDeleteViewerResp - 237, // 236: WSMessage.userGroupIgnoreJoinReq:type_name -> UserGroupIgnoreJoinReq - 238, // 237: WSMessage.userGroupIgnoreJoinResp:type_name -> UserGroupIgnoreJoinResp - 239, // 238: WSMessage.userGroupJoinListReq:type_name -> UserGroupJoinListReq - 240, // 239: WSMessage.userGroupJoinListResp:type_name -> UserGroupJoinListResp - 241, // 240: WSMessage.userGroupJoinReq:type_name -> UserGroupJoinReq - 242, // 241: WSMessage.userGroupJoinResp:type_name -> UserGroupJoinResp - 243, // 242: WSMessage.userGroupListJoinableReq:type_name -> UserGroupListJoinableReq - 244, // 243: WSMessage.userGroupListJoinableResp:type_name -> UserGroupListJoinableResp - 245, // 244: WSMessage.userGroupListReq:type_name -> UserGroupListReq - 246, // 245: WSMessage.userGroupListResp:type_name -> UserGroupListResp - 247, // 246: WSMessage.userGroupReq:type_name -> UserGroupReq - 248, // 247: WSMessage.userGroupResp:type_name -> UserGroupResp - 249, // 248: WSMessage.userGroupSetNameReq:type_name -> UserGroupSetNameReq - 250, // 249: WSMessage.userGroupSetNameResp:type_name -> UserGroupSetNameResp - 251, // 250: WSMessage.userListReq:type_name -> UserListReq - 252, // 251: WSMessage.userListResp:type_name -> UserListResp - 253, // 252: WSMessage.userNotificationSettingsReq:type_name -> UserNotificationSettingsReq - 254, // 253: WSMessage.userNotificationSettingsResp:type_name -> UserNotificationSettingsResp - 255, // 254: WSMessage.userNotificationSettingsUpd:type_name -> UserNotificationSettingsUpd - 256, // 255: WSMessage.userNotificationSettingsWriteReq:type_name -> UserNotificationSettingsWriteReq - 257, // 256: WSMessage.userNotificationSettingsWriteResp:type_name -> UserNotificationSettingsWriteResp - 258, // 257: WSMessage.userRoleListReq:type_name -> UserRoleListReq - 259, // 258: WSMessage.userRoleListResp:type_name -> UserRoleListResp - 260, // 259: WSMessage.userRolesListReq:type_name -> UserRolesListReq - 261, // 260: WSMessage.userRolesListResp:type_name -> UserRolesListResp - 262, // 261: WSMessage.userSearchReq:type_name -> UserSearchReq - 263, // 262: WSMessage.userSearchResp:type_name -> UserSearchResp - 264, // 263: WSMessage.widgetDataGetReq:type_name -> WidgetDataGetReq - 265, // 264: WSMessage.widgetDataGetResp:type_name -> WidgetDataGetResp - 266, // 265: WSMessage.widgetDataWriteReq:type_name -> WidgetDataWriteReq - 267, // 266: WSMessage.widgetDataWriteResp:type_name -> WidgetDataWriteResp - 268, // 267: WSMessage.zenodoDOIGetReq:type_name -> ZenodoDOIGetReq - 269, // 268: WSMessage.zenodoDOIGetResp:type_name -> ZenodoDOIGetResp - 269, // [269:269] is the sub-list for method output_type - 269, // [269:269] is the sub-list for method input_type - 269, // [269:269] is the sub-list for extension type_name - 269, // [269:269] is the sub-list for extension extendee - 0, // [0:269] is the sub-list for field type_name + 62, // 61: WSMessage.imageBeamLocationVersionsReq:type_name -> ImageBeamLocationVersionsReq + 63, // 62: WSMessage.imageBeamLocationVersionsResp:type_name -> ImageBeamLocationVersionsResp + 64, // 63: WSMessage.imageBeamLocationsReq:type_name -> ImageBeamLocationsReq + 65, // 64: WSMessage.imageBeamLocationsResp:type_name -> ImageBeamLocationsResp + 66, // 65: WSMessage.imageDeleteReq:type_name -> ImageDeleteReq + 67, // 66: WSMessage.imageDeleteResp:type_name -> ImageDeleteResp + 68, // 67: WSMessage.imageGetDefaultReq:type_name -> ImageGetDefaultReq + 69, // 68: WSMessage.imageGetDefaultResp:type_name -> ImageGetDefaultResp + 70, // 69: WSMessage.imageGetReq:type_name -> ImageGetReq + 71, // 70: WSMessage.imageGetResp:type_name -> ImageGetResp + 72, // 71: WSMessage.imageListReq:type_name -> ImageListReq + 73, // 72: WSMessage.imageListResp:type_name -> ImageListResp + 74, // 73: WSMessage.imageListUpd:type_name -> ImageListUpd + 75, // 74: WSMessage.imageSetDefaultReq:type_name -> ImageSetDefaultReq + 76, // 75: WSMessage.imageSetDefaultResp:type_name -> ImageSetDefaultResp + 77, // 76: WSMessage.imageSetMatchTransformReq:type_name -> ImageSetMatchTransformReq + 78, // 77: WSMessage.imageSetMatchTransformResp:type_name -> ImageSetMatchTransformResp + 79, // 78: WSMessage.imageUploadReq:type_name -> ImageUploadReq + 80, // 79: WSMessage.imageUploadResp:type_name -> ImageUploadResp + 81, // 80: WSMessage.importMarsViewerImageReq:type_name -> ImportMarsViewerImageReq + 82, // 81: WSMessage.importMarsViewerImageResp:type_name -> ImportMarsViewerImageResp + 83, // 82: WSMessage.importMarsViewerImageUpd:type_name -> ImportMarsViewerImageUpd + 84, // 83: WSMessage.jobListReq:type_name -> JobListReq + 85, // 84: WSMessage.jobListResp:type_name -> JobListResp + 86, // 85: WSMessage.jobListUpd:type_name -> JobListUpd + 87, // 86: WSMessage.logGetLevelReq:type_name -> LogGetLevelReq + 88, // 87: WSMessage.logGetLevelResp:type_name -> LogGetLevelResp + 89, // 88: WSMessage.logReadReq:type_name -> LogReadReq + 90, // 89: WSMessage.logReadResp:type_name -> LogReadResp + 91, // 90: WSMessage.logSetLevelReq:type_name -> LogSetLevelReq + 92, // 91: WSMessage.logSetLevelResp:type_name -> LogSetLevelResp + 93, // 92: WSMessage.memoiseGetReq:type_name -> MemoiseGetReq + 94, // 93: WSMessage.memoiseGetResp:type_name -> MemoiseGetResp + 95, // 94: WSMessage.memoiseWriteReq:type_name -> MemoiseWriteReq + 96, // 95: WSMessage.memoiseWriteResp:type_name -> MemoiseWriteResp + 97, // 96: WSMessage.multiQuantCompareReq:type_name -> MultiQuantCompareReq + 98, // 97: WSMessage.multiQuantCompareResp:type_name -> MultiQuantCompareResp + 99, // 98: WSMessage.notificationDismissReq:type_name -> NotificationDismissReq + 100, // 99: WSMessage.notificationDismissResp:type_name -> NotificationDismissResp + 101, // 100: WSMessage.notificationReq:type_name -> NotificationReq + 102, // 101: WSMessage.notificationResp:type_name -> NotificationResp + 103, // 102: WSMessage.notificationUpd:type_name -> NotificationUpd + 104, // 103: WSMessage.objectEditAccessReq:type_name -> ObjectEditAccessReq + 105, // 104: WSMessage.objectEditAccessResp:type_name -> ObjectEditAccessResp + 106, // 105: WSMessage.piquantConfigListReq:type_name -> PiquantConfigListReq + 107, // 106: WSMessage.piquantConfigListResp:type_name -> PiquantConfigListResp + 108, // 107: WSMessage.piquantConfigVersionReq:type_name -> PiquantConfigVersionReq + 109, // 108: WSMessage.piquantConfigVersionResp:type_name -> PiquantConfigVersionResp + 110, // 109: WSMessage.piquantConfigVersionsListReq:type_name -> PiquantConfigVersionsListReq + 111, // 110: WSMessage.piquantConfigVersionsListResp:type_name -> PiquantConfigVersionsListResp + 112, // 111: WSMessage.piquantCurrentVersionReq:type_name -> PiquantCurrentVersionReq + 113, // 112: WSMessage.piquantCurrentVersionResp:type_name -> PiquantCurrentVersionResp + 114, // 113: WSMessage.piquantVersionListReq:type_name -> PiquantVersionListReq + 115, // 114: WSMessage.piquantVersionListResp:type_name -> PiquantVersionListResp + 116, // 115: WSMessage.piquantWriteCurrentVersionReq:type_name -> PiquantWriteCurrentVersionReq + 117, // 116: WSMessage.piquantWriteCurrentVersionResp:type_name -> PiquantWriteCurrentVersionResp + 118, // 117: WSMessage.pseudoIntensityReq:type_name -> PseudoIntensityReq + 119, // 118: WSMessage.pseudoIntensityResp:type_name -> PseudoIntensityResp + 120, // 119: WSMessage.publishExpressionToZenodoReq:type_name -> PublishExpressionToZenodoReq + 121, // 120: WSMessage.publishExpressionToZenodoResp:type_name -> PublishExpressionToZenodoResp + 122, // 121: WSMessage.quantBlessReq:type_name -> QuantBlessReq + 123, // 122: WSMessage.quantBlessResp:type_name -> QuantBlessResp + 124, // 123: WSMessage.quantCombineListGetReq:type_name -> QuantCombineListGetReq + 125, // 124: WSMessage.quantCombineListGetResp:type_name -> QuantCombineListGetResp + 126, // 125: WSMessage.quantCombineListWriteReq:type_name -> QuantCombineListWriteReq + 127, // 126: WSMessage.quantCombineListWriteResp:type_name -> QuantCombineListWriteResp + 128, // 127: WSMessage.quantCombineReq:type_name -> QuantCombineReq + 129, // 128: WSMessage.quantCombineResp:type_name -> QuantCombineResp + 130, // 129: WSMessage.quantCreateReq:type_name -> QuantCreateReq + 131, // 130: WSMessage.quantCreateResp:type_name -> QuantCreateResp + 132, // 131: WSMessage.quantCreateUpd:type_name -> QuantCreateUpd + 133, // 132: WSMessage.quantDeleteReq:type_name -> QuantDeleteReq + 134, // 133: WSMessage.quantDeleteResp:type_name -> QuantDeleteResp + 135, // 134: WSMessage.quantGetReq:type_name -> QuantGetReq + 136, // 135: WSMessage.quantGetResp:type_name -> QuantGetResp + 137, // 136: WSMessage.quantLastOutputGetReq:type_name -> QuantLastOutputGetReq + 138, // 137: WSMessage.quantLastOutputGetResp:type_name -> QuantLastOutputGetResp + 139, // 138: WSMessage.quantListReq:type_name -> QuantListReq + 140, // 139: WSMessage.quantListResp:type_name -> QuantListResp + 141, // 140: WSMessage.quantLogGetReq:type_name -> QuantLogGetReq + 142, // 141: WSMessage.quantLogGetResp:type_name -> QuantLogGetResp + 143, // 142: WSMessage.quantLogListReq:type_name -> QuantLogListReq + 144, // 143: WSMessage.quantLogListResp:type_name -> QuantLogListResp + 145, // 144: WSMessage.quantPublishReq:type_name -> QuantPublishReq + 146, // 145: WSMessage.quantPublishResp:type_name -> QuantPublishResp + 147, // 146: WSMessage.quantRawDataGetReq:type_name -> QuantRawDataGetReq + 148, // 147: WSMessage.quantRawDataGetResp:type_name -> QuantRawDataGetResp + 149, // 148: WSMessage.quantUploadReq:type_name -> QuantUploadReq + 150, // 149: WSMessage.quantUploadResp:type_name -> QuantUploadResp + 151, // 150: WSMessage.regionOfInterestBulkDuplicateReq:type_name -> RegionOfInterestBulkDuplicateReq + 152, // 151: WSMessage.regionOfInterestBulkDuplicateResp:type_name -> RegionOfInterestBulkDuplicateResp + 153, // 152: WSMessage.regionOfInterestBulkWriteReq:type_name -> RegionOfInterestBulkWriteReq + 154, // 153: WSMessage.regionOfInterestBulkWriteResp:type_name -> RegionOfInterestBulkWriteResp + 155, // 154: WSMessage.regionOfInterestDeleteReq:type_name -> RegionOfInterestDeleteReq + 156, // 155: WSMessage.regionOfInterestDeleteResp:type_name -> RegionOfInterestDeleteResp + 157, // 156: WSMessage.regionOfInterestDisplaySettingsGetReq:type_name -> RegionOfInterestDisplaySettingsGetReq + 158, // 157: WSMessage.regionOfInterestDisplaySettingsGetResp:type_name -> RegionOfInterestDisplaySettingsGetResp + 159, // 158: WSMessage.regionOfInterestDisplaySettingsWriteReq:type_name -> RegionOfInterestDisplaySettingsWriteReq + 160, // 159: WSMessage.regionOfInterestDisplaySettingsWriteResp:type_name -> RegionOfInterestDisplaySettingsWriteResp + 161, // 160: WSMessage.regionOfInterestGetReq:type_name -> RegionOfInterestGetReq + 162, // 161: WSMessage.regionOfInterestGetResp:type_name -> RegionOfInterestGetResp + 163, // 162: WSMessage.regionOfInterestListReq:type_name -> RegionOfInterestListReq + 164, // 163: WSMessage.regionOfInterestListResp:type_name -> RegionOfInterestListResp + 165, // 164: WSMessage.regionOfInterestWriteReq:type_name -> RegionOfInterestWriteReq + 166, // 165: WSMessage.regionOfInterestWriteResp:type_name -> RegionOfInterestWriteResp + 167, // 166: WSMessage.runTestReq:type_name -> RunTestReq + 168, // 167: WSMessage.runTestResp:type_name -> RunTestResp + 169, // 168: WSMessage.scanAutoShareReq:type_name -> ScanAutoShareReq + 170, // 169: WSMessage.scanAutoShareResp:type_name -> ScanAutoShareResp + 171, // 170: WSMessage.scanAutoShareWriteReq:type_name -> ScanAutoShareWriteReq + 172, // 171: WSMessage.scanAutoShareWriteResp:type_name -> ScanAutoShareWriteResp + 173, // 172: WSMessage.scanBeamLocationsReq:type_name -> ScanBeamLocationsReq + 174, // 173: WSMessage.scanBeamLocationsResp:type_name -> ScanBeamLocationsResp + 175, // 174: WSMessage.scanDeleteReq:type_name -> ScanDeleteReq + 176, // 175: WSMessage.scanDeleteResp:type_name -> ScanDeleteResp + 177, // 176: WSMessage.scanEntryMetadataReq:type_name -> ScanEntryMetadataReq + 178, // 177: WSMessage.scanEntryMetadataResp:type_name -> ScanEntryMetadataResp + 179, // 178: WSMessage.scanEntryReq:type_name -> ScanEntryReq + 180, // 179: WSMessage.scanEntryResp:type_name -> ScanEntryResp + 181, // 180: WSMessage.scanGetReq:type_name -> ScanGetReq + 182, // 181: WSMessage.scanGetResp:type_name -> ScanGetResp + 183, // 182: WSMessage.scanListReq:type_name -> ScanListReq + 184, // 183: WSMessage.scanListResp:type_name -> ScanListResp + 185, // 184: WSMessage.scanListUpd:type_name -> ScanListUpd + 186, // 185: WSMessage.scanMetaLabelsAndTypesReq:type_name -> ScanMetaLabelsAndTypesReq + 187, // 186: WSMessage.scanMetaLabelsAndTypesResp:type_name -> ScanMetaLabelsAndTypesResp + 188, // 187: WSMessage.scanMetaWriteReq:type_name -> ScanMetaWriteReq + 189, // 188: WSMessage.scanMetaWriteResp:type_name -> ScanMetaWriteResp + 190, // 189: WSMessage.scanTriggerAutoQuantReq:type_name -> ScanTriggerAutoQuantReq + 191, // 190: WSMessage.scanTriggerAutoQuantResp:type_name -> ScanTriggerAutoQuantResp + 192, // 191: WSMessage.scanTriggerReImportReq:type_name -> ScanTriggerReImportReq + 193, // 192: WSMessage.scanTriggerReImportResp:type_name -> ScanTriggerReImportResp + 194, // 193: WSMessage.scanTriggerReImportUpd:type_name -> ScanTriggerReImportUpd + 195, // 194: WSMessage.scanUploadReq:type_name -> ScanUploadReq + 196, // 195: WSMessage.scanUploadResp:type_name -> ScanUploadResp + 197, // 196: WSMessage.scanUploadUpd:type_name -> ScanUploadUpd + 198, // 197: WSMessage.screenConfigurationDeleteReq:type_name -> ScreenConfigurationDeleteReq + 199, // 198: WSMessage.screenConfigurationDeleteResp:type_name -> ScreenConfigurationDeleteResp + 200, // 199: WSMessage.screenConfigurationGetReq:type_name -> ScreenConfigurationGetReq + 201, // 200: WSMessage.screenConfigurationGetResp:type_name -> ScreenConfigurationGetResp + 202, // 201: WSMessage.screenConfigurationListReq:type_name -> ScreenConfigurationListReq + 203, // 202: WSMessage.screenConfigurationListResp:type_name -> ScreenConfigurationListResp + 204, // 203: WSMessage.screenConfigurationWriteReq:type_name -> ScreenConfigurationWriteReq + 205, // 204: WSMessage.screenConfigurationWriteResp:type_name -> ScreenConfigurationWriteResp + 206, // 205: WSMessage.selectedImagePixelsReq:type_name -> SelectedImagePixelsReq + 207, // 206: WSMessage.selectedImagePixelsResp:type_name -> SelectedImagePixelsResp + 208, // 207: WSMessage.selectedImagePixelsWriteReq:type_name -> SelectedImagePixelsWriteReq + 209, // 208: WSMessage.selectedImagePixelsWriteResp:type_name -> SelectedImagePixelsWriteResp + 210, // 209: WSMessage.selectedScanEntriesReq:type_name -> SelectedScanEntriesReq + 211, // 210: WSMessage.selectedScanEntriesResp:type_name -> SelectedScanEntriesResp + 212, // 211: WSMessage.selectedScanEntriesWriteReq:type_name -> SelectedScanEntriesWriteReq + 213, // 212: WSMessage.selectedScanEntriesWriteResp:type_name -> SelectedScanEntriesWriteResp + 214, // 213: WSMessage.sendUserNotificationReq:type_name -> SendUserNotificationReq + 215, // 214: WSMessage.sendUserNotificationResp:type_name -> SendUserNotificationResp + 216, // 215: WSMessage.spectrumReq:type_name -> SpectrumReq + 217, // 216: WSMessage.spectrumResp:type_name -> SpectrumResp + 218, // 217: WSMessage.tagCreateReq:type_name -> TagCreateReq + 219, // 218: WSMessage.tagCreateResp:type_name -> TagCreateResp + 220, // 219: WSMessage.tagDeleteReq:type_name -> TagDeleteReq + 221, // 220: WSMessage.tagDeleteResp:type_name -> TagDeleteResp + 222, // 221: WSMessage.tagListReq:type_name -> TagListReq + 223, // 222: WSMessage.tagListResp:type_name -> TagListResp + 224, // 223: WSMessage.userAddRoleReq:type_name -> UserAddRoleReq + 225, // 224: WSMessage.userAddRoleResp:type_name -> UserAddRoleResp + 226, // 225: WSMessage.userDeleteRoleReq:type_name -> UserDeleteRoleReq + 227, // 226: WSMessage.userDeleteRoleResp:type_name -> UserDeleteRoleResp + 228, // 227: WSMessage.userDetailsReq:type_name -> UserDetailsReq + 229, // 228: WSMessage.userDetailsResp:type_name -> UserDetailsResp + 230, // 229: WSMessage.userDetailsWriteReq:type_name -> UserDetailsWriteReq + 231, // 230: WSMessage.userDetailsWriteResp:type_name -> UserDetailsWriteResp + 232, // 231: WSMessage.userGroupAddAdminReq:type_name -> UserGroupAddAdminReq + 233, // 232: WSMessage.userGroupAddAdminResp:type_name -> UserGroupAddAdminResp + 234, // 233: WSMessage.userGroupAddMemberReq:type_name -> UserGroupAddMemberReq + 235, // 234: WSMessage.userGroupAddMemberResp:type_name -> UserGroupAddMemberResp + 236, // 235: WSMessage.userGroupAddViewerReq:type_name -> UserGroupAddViewerReq + 237, // 236: WSMessage.userGroupAddViewerResp:type_name -> UserGroupAddViewerResp + 238, // 237: WSMessage.userGroupCreateReq:type_name -> UserGroupCreateReq + 239, // 238: WSMessage.userGroupCreateResp:type_name -> UserGroupCreateResp + 240, // 239: WSMessage.userGroupDeleteAdminReq:type_name -> UserGroupDeleteAdminReq + 241, // 240: WSMessage.userGroupDeleteAdminResp:type_name -> UserGroupDeleteAdminResp + 242, // 241: WSMessage.userGroupDeleteMemberReq:type_name -> UserGroupDeleteMemberReq + 243, // 242: WSMessage.userGroupDeleteMemberResp:type_name -> UserGroupDeleteMemberResp + 244, // 243: WSMessage.userGroupDeleteReq:type_name -> UserGroupDeleteReq + 245, // 244: WSMessage.userGroupDeleteResp:type_name -> UserGroupDeleteResp + 246, // 245: WSMessage.userGroupDeleteViewerReq:type_name -> UserGroupDeleteViewerReq + 247, // 246: WSMessage.userGroupDeleteViewerResp:type_name -> UserGroupDeleteViewerResp + 248, // 247: WSMessage.userGroupIgnoreJoinReq:type_name -> UserGroupIgnoreJoinReq + 249, // 248: WSMessage.userGroupIgnoreJoinResp:type_name -> UserGroupIgnoreJoinResp + 250, // 249: WSMessage.userGroupJoinListReq:type_name -> UserGroupJoinListReq + 251, // 250: WSMessage.userGroupJoinListResp:type_name -> UserGroupJoinListResp + 252, // 251: WSMessage.userGroupJoinReq:type_name -> UserGroupJoinReq + 253, // 252: WSMessage.userGroupJoinResp:type_name -> UserGroupJoinResp + 254, // 253: WSMessage.userGroupListJoinableReq:type_name -> UserGroupListJoinableReq + 255, // 254: WSMessage.userGroupListJoinableResp:type_name -> UserGroupListJoinableResp + 256, // 255: WSMessage.userGroupListReq:type_name -> UserGroupListReq + 257, // 256: WSMessage.userGroupListResp:type_name -> UserGroupListResp + 258, // 257: WSMessage.userGroupReq:type_name -> UserGroupReq + 259, // 258: WSMessage.userGroupResp:type_name -> UserGroupResp + 260, // 259: WSMessage.userGroupSetNameReq:type_name -> UserGroupSetNameReq + 261, // 260: WSMessage.userGroupSetNameResp:type_name -> UserGroupSetNameResp + 262, // 261: WSMessage.userListReq:type_name -> UserListReq + 263, // 262: WSMessage.userListResp:type_name -> UserListResp + 264, // 263: WSMessage.userNotificationSettingsReq:type_name -> UserNotificationSettingsReq + 265, // 264: WSMessage.userNotificationSettingsResp:type_name -> UserNotificationSettingsResp + 266, // 265: WSMessage.userNotificationSettingsUpd:type_name -> UserNotificationSettingsUpd + 267, // 266: WSMessage.userNotificationSettingsWriteReq:type_name -> UserNotificationSettingsWriteReq + 268, // 267: WSMessage.userNotificationSettingsWriteResp:type_name -> UserNotificationSettingsWriteResp + 269, // 268: WSMessage.userRoleListReq:type_name -> UserRoleListReq + 270, // 269: WSMessage.userRoleListResp:type_name -> UserRoleListResp + 271, // 270: WSMessage.userRolesListReq:type_name -> UserRolesListReq + 272, // 271: WSMessage.userRolesListResp:type_name -> UserRolesListResp + 273, // 272: WSMessage.userSearchReq:type_name -> UserSearchReq + 274, // 273: WSMessage.userSearchResp:type_name -> UserSearchResp + 275, // 274: WSMessage.widgetDataGetReq:type_name -> WidgetDataGetReq + 276, // 275: WSMessage.widgetDataGetResp:type_name -> WidgetDataGetResp + 277, // 276: WSMessage.widgetDataWriteReq:type_name -> WidgetDataWriteReq + 278, // 277: WSMessage.widgetDataWriteResp:type_name -> WidgetDataWriteResp + 279, // 278: WSMessage.zenodoDOIGetReq:type_name -> ZenodoDOIGetReq + 280, // 279: WSMessage.zenodoDOIGetResp:type_name -> ZenodoDOIGetResp + 280, // [280:280] is the sub-list for method output_type + 280, // [280:280] is the sub-list for method input_type + 280, // [280:280] is the sub-list for extension type_name + 280, // [280:280] is the sub-list for extension extendee + 0, // [0:280] is the sub-list for field type_name } func init() { file_websocket_proto_init() } @@ -5915,6 +6139,7 @@ func file_websocket_proto_init() { file_image_beam_location_msgs_proto_init() file_image_msgs_proto_init() file_image_coreg_msgs_proto_init() + file_job_msgs_proto_init() file_log_msgs_proto_init() file_memoisation_msgs_proto_init() file_module_msgs_proto_init() @@ -6023,6 +6248,8 @@ func file_websocket_proto_init() { (*WSMessage_ExpressionWriteResp)(nil), (*WSMessage_GetOwnershipReq)(nil), (*WSMessage_GetOwnershipResp)(nil), + (*WSMessage_ImageBeamLocationVersionsReq)(nil), + (*WSMessage_ImageBeamLocationVersionsResp)(nil), (*WSMessage_ImageBeamLocationsReq)(nil), (*WSMessage_ImageBeamLocationsResp)(nil), (*WSMessage_ImageDeleteReq)(nil), @@ -6043,6 +6270,9 @@ func file_websocket_proto_init() { (*WSMessage_ImportMarsViewerImageReq)(nil), (*WSMessage_ImportMarsViewerImageResp)(nil), (*WSMessage_ImportMarsViewerImageUpd)(nil), + (*WSMessage_JobListReq)(nil), + (*WSMessage_JobListResp)(nil), + (*WSMessage_JobListUpd)(nil), (*WSMessage_LogGetLevelReq)(nil), (*WSMessage_LogGetLevelResp)(nil), (*WSMessage_LogReadReq)(nil), @@ -6097,8 +6327,14 @@ func file_websocket_proto_init() { (*WSMessage_QuantLastOutputGetResp)(nil), (*WSMessage_QuantListReq)(nil), (*WSMessage_QuantListResp)(nil), + (*WSMessage_QuantLogGetReq)(nil), + (*WSMessage_QuantLogGetResp)(nil), + (*WSMessage_QuantLogListReq)(nil), + (*WSMessage_QuantLogListResp)(nil), (*WSMessage_QuantPublishReq)(nil), (*WSMessage_QuantPublishResp)(nil), + (*WSMessage_QuantRawDataGetReq)(nil), + (*WSMessage_QuantRawDataGetResp)(nil), (*WSMessage_QuantUploadReq)(nil), (*WSMessage_QuantUploadResp)(nil), (*WSMessage_RegionOfInterestBulkDuplicateReq)(nil), diff --git a/internal/cmd-line-tools/api-integration-test/testQuantCreate.go b/internal/cmd-line-tools/api-integration-test/testQuantCreate.go index 33b6cf69..bbeefad5 100644 --- a/internal/cmd-line-tools/api-integration-test/testQuantCreate.go +++ b/internal/cmd-line-tools/api-integration-test/testQuantCreate.go @@ -179,20 +179,26 @@ func runQuantificationTest(idx int, apiHost string, user string, pass string, "status": "STARTING", "startUnixTimeSec": "${SECAGO=%v}", "jobItemId": "${IGNORE}", - "jobType": "JT_RUN_QUANT" + "jobType": "JT_RUN_QUANT", + "name": "%v", + "elements": [%v] } - }}`, idx+1, maxAgeSec), + }}`, idx+1, maxAgeSec, quantName, elemListStr), ) finalMsg := fmt.Sprintf(`{"quantCreateUpd":{ "status": { "jobId": "${IDCHK=quantCreate%v}", "logId": "${IDCHK=quantCreate%v}", + "jobItemId": "${IDCHK=quantCreate%v}", + "jobType": "JT_RUN_QUANT", "message": "${IGNORE}", "status": "%v", "startUnixTimeSec": "${SECAGO=%v}", "lastUpdateUnixTimeSec": "${SECAGO=%v}", - "endUnixTimeSec": "${SECAGO=%v}"`, idx+1, idx+1, expectedFinalState, maxAgeSec, maxAgeSec, maxAgeSec) + "endUnixTimeSec": "${SECAGO=%v}", + "name": "%v", + "elements": [%v]`, idx+1, idx+1, idx+1, expectedFinalState, maxAgeSec, maxAgeSec, maxAgeSec, quantName, elemListStr) if expectedFinalState != "ERROR" { finalMsg += `, "outputFilePath": "${IGNORE}", @@ -207,32 +213,44 @@ func runQuantificationTest(idx int, apiHost string, user string, pass string, "status": { "jobId": "${IDCHK=quantCreate%v}", "logId": "${IDCHK=quantCreate%v}", + "jobItemId": "${IDCHK=quantCreate%v}", + "jobType": "JT_RUN_QUANT", "message": "Cores/Node: 4", "status": "PREPARING_NODES", "startUnixTimeSec": "${SECAGO=%v}", - "lastUpdateUnixTimeSec": "${SECAGO=%v}" + "lastUpdateUnixTimeSec": "${SECAGO=%v}", + "name": "%v", + "elements": [%v] } - }}`, idx+1, idx+1, maxAgeSec, maxAgeSec), + }}`, idx+1, idx+1, idx+1, maxAgeSec, maxAgeSec, quantName, elemListStr), fmt.Sprintf(`{"quantCreateUpd":{ "status": { "jobId": "${IDCHK=quantCreate%v}", "logId": "${IDCHK=quantCreate%v}", + "jobItemId": "${IDCHK=quantCreate%v}", + "jobType": "JT_RUN_QUANT", "message": "${IGNORE}", "status": "RUNNING", "startUnixTimeSec": "${SECAGO=%v}", - "lastUpdateUnixTimeSec": "${SECAGO=%v}" + "lastUpdateUnixTimeSec": "${SECAGO=%v}", + "name": "%v", + "elements": [%v] } - }}`, idx+1, idx+1, maxAgeSec, maxAgeSec), + }}`, idx+1, idx+1, idx+1, maxAgeSec, maxAgeSec, quantName, elemListStr), fmt.Sprintf(`{"quantCreateUpd":{ "status": { "jobId": "${IDCHK=quantCreate%v}", "logId": "${IDCHK=quantCreate%v}", + "jobItemId": "${IDCHK=quantCreate%v}", + "jobType": "JT_RUN_QUANT", "message": "${IGNORE}", "status": "GATHERING_RESULTS", "startUnixTimeSec": "${SECAGO=%v}", - "lastUpdateUnixTimeSec": "${SECAGO=%v}" + "lastUpdateUnixTimeSec": "${SECAGO=%v}", + "name": "%v", + "elements": [%v] } - }}`, idx+1, idx+1, maxAgeSec, maxAgeSec), + }}`, idx+1, idx+1, idx+1, maxAgeSec, maxAgeSec, quantName, elemListStr), } /*if expectedFinalState != "ERROR" { diff --git a/internal/cmd-line-tools/api-integration-test/testQuantGetListDelete.go b/internal/cmd-line-tools/api-integration-test/testQuantGetListDelete.go index 1708ed04..2bf718a2 100644 --- a/internal/cmd-line-tools/api-integration-test/testQuantGetListDelete.go +++ b/internal/cmd-line-tools/api-integration-test/testQuantGetListDelete.go @@ -3,6 +3,7 @@ package main import ( "fmt" "log" + "strings" "github.com/pixlise/core/v4/core/wstestlib" protos "github.com/pixlise/core/v4/generated-protos" @@ -115,21 +116,72 @@ func testQuantGetListDelete(apiHost string) { u1.AddSendReqAction("Get with missing ID", `{"quantGetReq":{}}`, - `{"msgId":2,"status":"WS_NOT_FOUND","errorText": " not found", "quantGetResp":{}}`, + `{"msgId":2,"status":"WS_BAD_REQUEST","errorText": "QuantId is too short", "quantGetResp":{}}`, + ) + + u1.AddSendReqAction("Get raw with missing ID", + `{"quantRawDataGetReq":{}}`, + `{"msgId":3,"status":"WS_BAD_REQUEST","errorText": "QuantId is too short", "quantRawDataGetResp":{}}`, + ) + + u1.AddSendReqAction("Get quant log with missing ID", + `{"quantLogGetReq":{}}`, + `{"msgId":4,"status":"WS_BAD_REQUEST","errorText": "QuantId is too short", "quantLogGetResp":{}}`, + ) + + u1.AddSendReqAction("Get quant log with missing log name", + `{"quantLogGetReq":{"quantId": "abc123"}}`, + `{"msgId":5,"status":"WS_BAD_REQUEST","errorText": "LogName is too short", "quantLogGetResp":{}}`, + ) + + u1.AddSendReqAction("Get quant log list with missing ID", + `{"quantLogListReq":{}}`, + `{"msgId":6,"status":"WS_BAD_REQUEST","errorText": "QuantId is too short", "quantLogListResp":{}}`, ) u1.AddSendReqAction("Get non-existant quant", `{"quantGetReq":{"quantId": "non-existant-id"}}`, - `{"msgId":3,"status":"WS_NOT_FOUND","errorText": "non-existant-id not found", "quantGetResp":{}}`, + `{"msgId":7,"status":"WS_NOT_FOUND","errorText": "non-existant-id not found", "quantGetResp":{}}`, + ) + + u1.AddSendReqAction("Get raw non-existant quant", + `{"quantRawDataGetReq":{"quantId": "non-existant-id"}}`, + `{"msgId":8,"status":"WS_NOT_FOUND","errorText": "non-existant-id not found", "quantRawDataGetResp":{}}`, + ) + + u1.AddSendReqAction("Get quant log list for non-existant quant", + `{"quantLogListReq":{"quantId": "non-existant-id"}}`, + `{"msgId":9,"status":"WS_NOT_FOUND","errorText": "non-existant-id not found", "quantLogListResp":{}}`, + ) + + u1.AddSendReqAction("Get quant log list (should fail, permissions dont allow)", + fmt.Sprintf(`{"quantLogListReq":{"quantId": "%v"}}`, quantId), + fmt.Sprintf(`{ + "msgId":10,"status":"WS_NO_PERMISSION", + "errorText": "View access denied for: OT_QUANTIFICATION (%v)", "quantLogListResp":{}}`, quantId), ) u1.AddSendReqAction("Get quant from db (should fail, permissions dont allow)", fmt.Sprintf(`{"quantGetReq":{"quantId": "%v"}}`, quantId), fmt.Sprintf(`{ - "msgId":4,"status":"WS_NO_PERMISSION", + "msgId":11,"status":"WS_NO_PERMISSION", "errorText": "View access denied for: OT_QUANTIFICATION (%v)", "quantGetResp":{}}`, quantId), ) + u1.AddSendReqAction("Get quant CSV from db (should fail, permissions dont allow)", + fmt.Sprintf(`{"quantRawDataGetReq":{"quantId": "%v"}}`, quantId), + fmt.Sprintf(`{ + "msgId":12,"status":"WS_NO_PERMISSION", + "errorText": "View access denied for: OT_QUANTIFICATION (%v)", "quantRawDataGetResp":{}}`, quantId), + ) + + u1.AddSendReqAction("Get quant log (should fail, permissions dont allow)", + fmt.Sprintf(`{"quantLogGetReq":{"quantId": "%v", "logName": "bad-name.log"}}`, quantId), + fmt.Sprintf(`{ + "msgId":13,"status":"WS_NO_PERMISSION", + "errorText": "View access denied for: OT_QUANTIFICATION (%v)", "quantLogGetResp":{}}`, quantId), + ) + u1.CloseActionGroup([]string{}, 5000) wstestlib.ExecQueuedActions(&u1) @@ -147,13 +199,24 @@ func testQuantGetListDelete(apiHost string) { if err != nil { log.Fatalln(err) } + err = apiStorageFileAccess.DeleteObject(apiUsersBucket, thisQuantRootPath+quantId+".csv") + if err != nil { + log.Fatalln(err) + } + + for _, logFile := range quantLogs { + err = apiStorageFileAccess.DeleteObject(apiUsersBucket, thisQuantRootPath+quantId+"-logs/"+logFile) + if err != nil { + log.Fatalln(err) + } + } // Now add u1 as a viewer seedDBOwnership(quantId, protos.ObjectType_OT_QUANTIFICATION, &protos.UserGroupList{UserIds: []string{u1.GetUserId()}}, nil) u1.AddSendReqAction("List quants", `{"quantListReq":{}}`, - fmt.Sprintf(`{"msgId": 5, "status": "WS_OK", "quantListResp": { + fmt.Sprintf(`{"msgId": 14, "status": "WS_OK", "quantListResp": { "quants": [{ "id": "%v", "scanId": "the-scan-id", @@ -196,7 +259,7 @@ func testQuantGetListDelete(apiHost string) { u1.AddSendReqAction("Get quant summary only (should work)", fmt.Sprintf(`{"quantGetReq":{"quantId": "%v", "summaryOnly": true }}`, quantId), - fmt.Sprintf(`{"msgId":6,"status":"WS_OK", "quantGetResp":{ + fmt.Sprintf(`{"msgId":15,"status":"WS_OK", "quantGetResp":{ "summary": { "id": "%v", "scanId": "the-scan-id", @@ -223,6 +286,7 @@ func testQuantGetListDelete(apiHost string) { "jobId": "%v", "status": "COMPLETE", "message": "Nodes ran: 7", + "startUnixTimeSec": 1652813392, "endUnixTimeSec": 1652813627, "outputFilePath": "UserContent/5df311ed8a0b5d0ebf5fb476/089063943/Quantifications", "otherLogFiles": ["node00001_piquant.log","node00001_stdout.log","node00002_piquant.log","node00002_stdout.log","node00003_piquant.log","node00003_stdout.log","node00004_piquant.log","node00004_stdout.log","node00005_piquant.log","node00005_stdout.log","node00006_piquant.log","node00006_stdout.log","node00007_piquant.log","node00007_stdout.log"] @@ -239,7 +303,22 @@ func testQuantGetListDelete(apiHost string) { u1.AddSendReqAction("Get quant summary+data (should fail, no file in S3)", fmt.Sprintf(`{"quantGetReq":{"quantId": "%v" }}`, quantId), - fmt.Sprintf(`{"msgId":7,"status":"WS_NOT_FOUND", "errorText": "%v not found", "quantGetResp":{}}`, quantId), + fmt.Sprintf(`{"msgId":16,"status":"WS_NOT_FOUND", "errorText": "%v not found", "quantGetResp":{}}`, quantId), + ) + + u1.AddSendReqAction("Get quant CSV (should fail, no file in S3)", + fmt.Sprintf(`{"quantRawDataGetReq":{"quantId": "%v" }}`, quantId), + fmt.Sprintf(`{"msgId":17,"status":"WS_NOT_FOUND", "errorText": "%v.csv not found", "quantRawDataGetResp":{}}`, quantId), + ) + + u1.AddSendReqAction("Get quant log with non-existant log name", + fmt.Sprintf(`{"quantLogGetReq":{"quantId": "%v", "logName": "bad-name.log"}}`, quantId), + `{"msgId":18,"status":"WS_NOT_FOUND","errorText": "bad-name.log not found", "quantLogGetResp":{}}`, + ) + + u1.AddSendReqAction("Get quant log list (success, empty)", + fmt.Sprintf(`{"quantLogListReq":{"quantId": "%v"}}`, quantId), + `{ "msgId":19, "status": "WS_OK", "quantLogListResp": {}}`, ) u1.CloseActionGroup([]string{}, 5000) @@ -254,7 +333,7 @@ func testQuantGetListDelete(apiHost string) { u1.AddSendReqAction("Get quant summary+data (should work)", fmt.Sprintf(`{"quantGetReq":{"quantId": "%v" }}`, quantId), - fmt.Sprintf(`{"msgId":8,"status":"WS_OK", "quantGetResp":{ + fmt.Sprintf(`{"msgId":20,"status":"WS_OK", "quantGetResp":{ "summary": { "id": "%v", "scanId": "the-scan-id", @@ -281,6 +360,7 @@ func testQuantGetListDelete(apiHost string) { "jobId": "%v", "status": "COMPLETE", "message": "Nodes ran: 7", + "startUnixTimeSec": 1652813392, "endUnixTimeSec": 1652813627, "outputFilePath": "UserContent/5df311ed8a0b5d0ebf5fb476/089063943/Quantifications", "otherLogFiles": ["node00001_piquant.log","node00001_stdout.log","node00002_piquant.log","node00002_stdout.log","node00003_piquant.log","node00003_stdout.log","node00004_piquant.log","node00004_stdout.log","node00005_piquant.log","node00005_stdout.log","node00006_piquant.log","node00006_stdout.log","node00007_piquant.log","node00007_stdout.log"] @@ -544,14 +624,36 @@ func testQuantGetListDelete(apiHost string) { }}`, quantId, quantId), ) + u1.CloseActionGroup([]string{}, 5000) + wstestlib.ExecQueuedActions(&u1) + + u1.AddSendReqAction("Get quant CSV (success)", + fmt.Sprintf(`{"quantRawDataGetReq":{"quantId": "%v" }}`, quantId), + `{"msgId":21,"status":"WS_OK", "quantRawDataGetResp":{ + "data": "${REGEXMATCH=PIQUANT version: registry.gitlab.com/pixlise/piquant/runner:3.2.8 DetectorConfig: PIXL/PiquantConfigs/v7\nPMC.+}" + }}`, + ) + + u1.AddSendReqAction("Get quant log list (success)", + fmt.Sprintf(`{"quantLogListReq":{"quantId": "%v"}}`, quantId), + fmt.Sprintf(`{ "msgId":22, "status": "WS_OK", "quantLogListResp": { + "fileNames": ["%v"] + }}`, strings.Join(quantLogs, "\",\"")), + ) + + u1.AddSendReqAction("Get quant log (success)", + fmt.Sprintf(`{"quantLogGetReq":{"quantId": "%v", "logName": "%v"}}`, quantId, quantLogs[0]), + `{"msgId":23,"status":"WS_OK", "quantLogGetResp":{"logData": "${REGEXMATCH=.+ /tmp/3vjoovnrhkhv8ecd/dataset.bin.+runtime: 9.52sec\n.+\n.+86|Normal|A\n.+Normal_A\n.*\n.*successfully\n.+1 detector\n.+total counts . 109490}"}}`, + ) + u1.AddSendReqAction("Delete non-existant quant (should fail)", `{"quantDeleteReq":{"quantId": "non-existant-quant" }}`, - `{"msgId":9,"status":"WS_NOT_FOUND", "errorText": "non-existant-quant not found", "quantDeleteResp":{}}`, + `{"msgId":24,"status":"WS_NOT_FOUND", "errorText": "non-existant-quant not found", "quantDeleteResp":{}}`, ) u1.AddSendReqAction("Delete quant (should fail, we're viewers!)", fmt.Sprintf(`{"quantDeleteReq":{"quantId": "%v" }}`, quantId), - fmt.Sprintf(`{"msgId":10,"status":"WS_NO_PERMISSION", "errorText": "Edit access denied for: OT_QUANTIFICATION (%v)", "quantDeleteResp":{}}`, quantId), + fmt.Sprintf(`{"msgId":25,"status":"WS_NO_PERMISSION", "errorText": "Edit access denied for: OT_QUANTIFICATION (%v)", "quantDeleteResp":{}}`, quantId), ) u1.CloseActionGroup([]string{}, 5000) @@ -585,12 +687,12 @@ func testQuantGetListDelete(apiHost string) { u1.AddSendReqAction("Delete quant (should work)", fmt.Sprintf(`{"quantDeleteReq":{"quantId": "%v" }}`, quantId), - `{"msgId":11,"status":"WS_OK", "quantDeleteResp":{}}`, + `{"msgId":26,"status":"WS_OK", "quantDeleteResp":{}}`, ) u1.AddSendReqAction("Get quant (should fail, not in db)", fmt.Sprintf(`{"quantGetReq":{"quantId": "%v" }}`, quantId), - fmt.Sprintf(`{"msgId":12,"status":"WS_NOT_FOUND", "errorText": "%v not found", "quantGetResp":{}}`, quantId), + fmt.Sprintf(`{"msgId":27,"status":"WS_NOT_FOUND", "errorText": "%v not found", "quantGetResp":{}}`, quantId), ) u1.CloseActionGroup([]string{ diff --git a/internal/cmd-line-tools/api-integration-test/testQuantUpload.go b/internal/cmd-line-tools/api-integration-test/testQuantUpload.go index f4c53b37..40e8d142 100644 --- a/internal/cmd-line-tools/api-integration-test/testQuantUpload.go +++ b/internal/cmd-line-tools/api-integration-test/testQuantUpload.go @@ -170,10 +170,16 @@ func testQuantUpload(apiHost string) { ], "status": { "jobId": "${IDCHK=uploadedQuantId}", + "jobItemId": "${IDCHK=uploadedQuantId}", "status": "COMPLETE", "message": "user-supplied quantification processed", + "startUnixTimeSec": "${SECAGO=3}", "endUnixTimeSec": "${SECAGO=3}", - "outputFilePath": "Quantifications/the-scan-id/auth0|649e54491154cac52ec21718" + "outputFilePath": "Quantifications/the-scan-id/auth0|649e54491154cac52ec21718", + "name": "uploaded Quant", + "elements": [ + "Ca" + ] }, "owner": { "creatorUser": { diff --git a/internal/cmd-line-tools/beam-geom-v1-importer/main.go b/internal/cmd-line-tools/beam-geom-v1-importer/main.go new file mode 100644 index 00000000..96c8d8ea --- /dev/null +++ b/internal/cmd-line-tools/beam-geom-v1-importer/main.go @@ -0,0 +1,244 @@ +package main + +import ( + "context" + "flag" + "fmt" + "log" + "time" + + "github.com/pixlise/core/v4/api/dbCollections" + "github.com/pixlise/core/v4/core/awsutil" + "github.com/pixlise/core/v4/core/beamLocation" + "github.com/pixlise/core/v4/core/fileaccess" + "github.com/pixlise/core/v4/core/logger" + "github.com/pixlise/core/v4/core/mongoDBConnection" + protos "github.com/pixlise/core/v4/generated-protos" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" + "google.golang.org/protobuf/proto" +) + +var t0 = time.Now().UnixMilli() + +func main() { + fmt.Printf("Started: %v\n", time.Now().String()) + + var destMongoSecret string + var sourceDataBucket string + var destEnvName string + + flag.StringVar(&destMongoSecret, "destMongoSecret", "", "Destination mongo DB secret") + flag.StringVar(&sourceDataBucket, "sourceDataBucket", "", "Data bucket") + flag.StringVar(&destEnvName, "destEnvName", "", "Destination Environment Name") + + flag.Parse() + + // Check they're not empty + checkNotEmpty := []string{ + sourceDataBucket, + destEnvName, + } + checkNotEmptyName := []string{ + "sourceDataBucket", + "destEnvName", + } + for c, s := range checkNotEmpty { + if len(s) <= 0 { + log.Fatalf("Parameter: %v was empty", checkNotEmptyName[c]) + } + } + + // Get a session for the bucket region + sess, err := awsutil.GetSession() + if err != nil { + log.Fatalf("Failed to create AWS session. Error: %v", err) + } + + s3svc, err := awsutil.GetS3(sess) + if err != nil { + log.Fatalf("Failed to create AWS S3 service. Error: %v", err) + } + + fs := fileaccess.MakeS3Access(s3svc) + + // Init logger - this used to be local=stdout, cloud env=cloudwatch, but we now write all logs to stdout + iLog := &logger.StdOutLogger{} + iLog.SetLogLevel(logger.LogInfo) + + // Connect to mongo + destMongoClient, err := mongoDBConnection.Connect(sess, destMongoSecret, iLog) + if err != nil { + fatalError(err) + } + + // Destination DB is the new pixlise one + destDB := destMongoClient.Database("prodCopy") //mongoDBConnection.GetDatabaseName("pixlise", destEnvName)) + + // Read the dataset ids that we want to find v1 geometry for + ctx := context.TODO() + coll := destDB.Collection(dbCollections.ScansName) + + cursor, err := coll.Find(ctx, bson.D{}, options.Find()) + if err != nil { + log.Fatalln(err) + } + + scans := []*protos.ScanItem{} + err = cursor.All(ctx, &scans) + if err != nil { + return + } + + for _, scanItem := range scans { + if scanItem.Instrument == protos.ScanInstrument_PIXL_FM && scanItem.ContentCounts["NormalSpectra"] > 0 { + log.Printf("Reading: %v [Sol %v - %v]", scanItem.Id, scanItem.Meta["Sol"], scanItem.Title) + + if sol, ok := scanItem.Meta["Sol"]; !ok || len(sol) <= 0 { + log.Printf(" SKIPPING scan %v: doesn't contain a sol in its meta data", scanItem.Id) + continue + } else { + if sol[0] < '0' || sol[0] > '9' { + log.Printf(" SKIPPING scan %v: sol %v is not valid", scanItem.Id, scanItem.Meta["Sol"]) + continue + } + } + + s3Path := fmt.Sprintf("Datasets/%v/dataset.bin", scanItem.Id) + exprBytes, err := fs.ReadObject(sourceDataBucket, s3Path) + if err != nil { + if fs.IsNotFoundError((err)) { + log.Printf(" SKIPPING scan %v: no data for this with v1 coordinates, maybe it's newer", scanItem.Id) + continue + } + + log.Fatalln(err) + } + + exprPB := &protos.Experiment{} + err = proto.Unmarshal(exprBytes, exprPB) + if err != nil { + log.Fatalf("Failed to decode experiment: %v", err) + } + + // Also read all images we have for this scan id + beamColl := destDB.Collection(dbCollections.ImageBeamLocationsName) + beamFilter := bson.D{{Key: "locationperscan.0.scanid", Value: scanItem.Id}} + + imgBeamItemResult, err := beamColl.Find(ctx, beamFilter, options.Find()) + + if err != nil { + if err == mongo.ErrNoDocuments { + log.Printf(" SKIPPING scan %v: No image beam locations found", scanItem.Id) + continue + } else { + log.Fatalf("Error when reading scan %v beam locations: %v", scanItem.Id, err) + } + } + + imageBeamLocations := []*protos.ImageLocations{} + err = imgBeamItemResult.All(ctx, &imageBeamLocations) + if err != nil { + log.Fatalf("Failed to read beam locations for scan: %v. Error: %v", scanItem.Id, err) + } + + for alignedIdx, img := range exprPB.AlignedContextImages { + imgId := fmt.Sprintf("%v/%v", scanItem.Id, img.Image) + + // Make sure we have an entry for this already. NOTE: we're comparing by ignoring the version number! + imgIdSansVersion := getWithoutVersion(imgId) + + var matchedBeamLocation *protos.ImageLocations + for _, loc := range imageBeamLocations { + thisLocWithoutVersion := getWithoutVersion(loc.ImageName) + if thisLocWithoutVersion == imgIdSansVersion { + matchedBeamLocation = loc + } + } + + if matchedBeamLocation == nil { + log.Printf(" SKIPPING %v: No beam locations found", imgId) + continue + } + + // Make sure there are no v1's already stored + if len(matchedBeamLocation.LocationPerScan) != 1 { + log.Printf(" SKIPPING %v: Beam Location had wrong count: %v", imgId, len(matchedBeamLocation.LocationPerScan)) + continue + } + + if matchedBeamLocation.LocationPerScan[0].BeamVersion != 2 { + log.Fatalf("Beam Location for %v did not contain expected version 2", imgId) + } + + // Double check some more stuff + if matchedBeamLocation.LocationPerScan[0].Instrument != scanItem.Instrument { + log.Fatalf("Beam Location for %v did not contain expected instrument", imgId) + } + if matchedBeamLocation.LocationPerScan[0].ScanId != scanItem.Id { + log.Fatalf("Beam Location for %v did not contain expected scanId", imgId) + } + + ijs := beamLocation.ReadIJs(alignedIdx, exprPB) + + // Check that they differ + if len(ijs) != len(matchedBeamLocation.LocationPerScan[0].Locations) { + log.Fatalf("Beam count from DB (%v) doesn't match beam count from experiment file (%v) for image: %v", len(matchedBeamLocation.LocationPerScan[0].Locations), len(ijs), imgId) + } + + equalCount := 0 + for c := 0; c < len(ijs); c++ { + if (ijs[c] == nil && matchedBeamLocation.LocationPerScan[0].Locations[c] == nil) || + (ijs[c].I == matchedBeamLocation.LocationPerScan[0].Locations[c].I && ijs[c].J == matchedBeamLocation.LocationPerScan[0].Locations[c].J) { + equalCount++ + } + } + + if equalCount > len(ijs)/2 { + log.Printf(" SKIPPING %v: Beam v2 is too similar to v1", imgId) + continue + } + + // Set up an update for this so we just add to the existing array of beam locations in the DB + matchedBeamLocation.LocationPerScan = append(matchedBeamLocation.LocationPerScan, &protos.ImageLocationsForScan{ + ScanId: scanItem.Id, + BeamVersion: 1, + Instrument: scanItem.Instrument, + Locations: ijs, + }) + + // Write it back + beamFilter = bson.D{{Key: "_id", Value: matchedBeamLocation.ImageName}} + updResult, err := beamColl.ReplaceOne(ctx, beamFilter, matchedBeamLocation, options.Replace()) + + if err != nil { + log.Fatalf("Failed to import beam for: %v. Error: %v", imgId, err) + } + + if updResult.ModifiedCount != 1 || updResult.MatchedCount != 1 { + log.Fatalf("Got unexpected replace result for: %v. %+v", imgId, updResult) + } + + log.Printf("SUCCESS importing v1 for: %v", imgId) + } + } + } + + printFinishStats() +} + +func getWithoutVersion(fileName string) string { + return fileName[0:len(fileName)-6] + "__" + fileName[len(fileName)-4:] +} + +func fatalError(err error) { + printFinishStats() + log.Fatal(err) +} + +func printFinishStats() { + t1 := time.Now().UnixMilli() + sec := (t1 - t0) / 1000 + fmt.Printf("Runtime %v seconds\n", sec) +}