diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f195841a..d56e95ab 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -90,17 +90,18 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - name: Integration Test + # NOTE: integration-test-config.json must have EnvironmentName at the end, so we can append a suffix + # to it, to make DB names unique for builds to not clash! run: | make integrationtest + truncate -s-3 ./integration-test-config.json + UNIX_MS=$(date +%s%N | cut -b1-13) + echo "_${UNIX_MS}\"}" >> ./integration-test-config.json ./api-service -customConfigPath ./integration-test-config.json & sleep 5 - #pwd - #ls cd ./internal/cmd-line-tools/api-integration-test - #pwd - #ls - #echo ./tester -apiHost localhost:8080 -datasetBucket "integration-test-data-pixlise" -usersBucket "integration-test-users-pixlise" -auth0Domain ${{ secrets.PIXLISE_API_TEST_AUTH0_DOMAIN }} -auth0ClientId ${{ secrets.PIXLISE_API_TEST_AUTH0_CLIENT_ID }} -auth0Secret ${{ secrets.PIXLISE_API_TEST_AUTH0_SECRET }} -auth0Audience "pixlise-backend" -testType "ci" -test1Username "test1@pixlise.org" -test1Password ${{ secrets.TEST_USER_1_PASSWORD }} -test2Username "test2@pixlise.org" -test2Password ${{ secrets.TEST_USER_2_PASSWORD }} - ./tester -apiHost localhost:8080 -datasetBucket "integration-test-data-pixlise" -usersBucket "integration-test-users-pixlise" -auth0Domain ${{ secrets.PIXLISE_API_TEST_AUTH0_DOMAIN }} -auth0ClientId ${{ secrets.PIXLISE_API_TEST_AUTH0_CLIENT_ID }} -auth0Secret ${{ secrets.PIXLISE_API_TEST_AUTH0_SECRET }} -auth0Audience "pixlise-backend" -testType "ci" -test1Username "test1@pixlise.org" -test1Password ${{ secrets.TEST_USER_1_PASSWORD }} -test2Username "test2@pixlise.org" -test2Password ${{ secrets.TEST_USER_2_PASSWORD }} + echo "unittest_${UNIX_MS}" + ./tester -apiHost localhost:8080 -envName "unittest_${UNIX_MS}" -datasetBucket "integration-test-data-pixlise" -usersBucket "integration-test-users-pixlise" -auth0Domain ${{ secrets.PIXLISE_API_TEST_AUTH0_DOMAIN }} -auth0ClientId ${{ secrets.PIXLISE_API_TEST_AUTH0_CLIENT_ID }} -auth0Secret ${{ secrets.PIXLISE_API_TEST_AUTH0_SECRET }} -auth0Audience "pixlise-backend" -testType "ci" -test1Username "test1@pixlise.org" -test1Password ${{ secrets.TEST_USER_1_PASSWORD }} -test2Username "test2@pixlise.org" -test2Password ${{ secrets.TEST_USER_2_PASSWORD }} env: AWS_DEFAULT_REGION: us-east-1 AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} diff --git a/api/config/config.go b/api/config/config.go index 6aa9a19c..0a4b533a 100644 --- a/api/config/config.go +++ b/api/config/config.go @@ -104,6 +104,13 @@ type APIConfig struct { // The GroupId of the group a new user is added to by default as a member DefaultUserGroupId string + + // PIXLISE backup & restore settings + DataBackupBucket string + BackupEnabled bool + RestoreEnabled bool + + ImpersonateEnabled bool } func homeDir() string { diff --git a/api/dataimport/for-trigger.go b/api/dataimport/for-trigger.go index 5e3400da..67ca90f0 100644 --- a/api/dataimport/for-trigger.go +++ b/api/dataimport/for-trigger.go @@ -54,7 +54,6 @@ type ImportResult struct { // Error (or nil) func ImportForTrigger( triggerMessage []byte, - envName string, configBucket string, datasetBucket string, manualBucket string, diff --git a/api/dataimport/for-trigger_test.go b/api/dataimport/for-trigger_test.go index f3f48269..b520a594 100644 --- a/api/dataimport/for-trigger_test.go +++ b/api/dataimport/for-trigger_test.go @@ -36,15 +36,14 @@ import ( "google.golang.org/protobuf/encoding/protojson" ) -func initTest(testName string, testDir string, autoShareCreatorId string, autoShareCreatorGroupEditor string) (fileaccess.FileAccess, *logger.StdOutLoggerForTest, string, string, string, string, *mongo.Database) { +func initTest(testName string, testDir string, autoShareCreatorId string, autoShareCreatorGroupEditor string) (fileaccess.FileAccess, *logger.StdOutLoggerForTest, string, string, string, *mongo.Database) { remoteFS := &fileaccess.FSAccess{} log := &logger.StdOutLoggerForTest{} - envName := testName configBucket := "./test-data/" + testDir + "/config-bucket" datasetBucket := "./test-data/" + testDir + "/dataset-bucket" manualBucket := "./test-data/" + testDir + "/manual-bucket" - db := wstestlib.GetDB() + db := wstestlib.GetDBWithEnvironment("unittest_" + testName) ctx := context.TODO() // Clear relevant collections @@ -65,7 +64,7 @@ func initTest(testName string, testDir string, autoShareCreatorId string, autoSh db.Collection(dbCollections.ScanAutoShareName).InsertOne(ctx, &item) } - return remoteFS, log, envName, configBucket, datasetBucket, manualBucket, db + return remoteFS, log, configBucket, datasetBucket, manualBucket, db } /* @@ -78,7 +77,7 @@ func startTestWithMockMongo(name string, t *testing.T, testFunc func(mt *mtest.T */ // Import unknown dataset (simulate trigger by OCS pipeline), file goes to archive, then all files downloaded from archive, dataset create fails due to unknown data type func Example_importForTrigger_OCS_Archive_BadData() { - remoteFS, log, envName, configBucket, datasetBucket, manualBucket, db := initTest("OCS_Archive_BadData", "Archive_BadData", specialUserIds.PIXLISESystemUserId, "PIXLFMGroupId") + remoteFS, log, configBucket, datasetBucket, manualBucket, db := initTest("OCS_Archive_BadData", "Archive_BadData", specialUserIds.PIXLISESystemUserId, "PIXLFMGroupId") // In case it ran before, delete the file from dataset bucket, otherwise we will end for the wrong reason os.Remove(datasetBucket + "/Archive/70000_069-02-09-2021-06-25-13.zip") @@ -122,7 +121,7 @@ func Example_importForTrigger_OCS_Archive_BadData() { ] }` - result, err := ImportForTrigger([]byte(trigger), envName, configBucket, datasetBucket, manualBucket, db, log, remoteFS) + result, err := ImportForTrigger([]byte(trigger), configBucket, datasetBucket, manualBucket, db, log, remoteFS) fmt.Printf("Errors: %v, changes: %v, isUpdate: %v\n", err, result.WhatChanged, result.IsUpdate) @@ -152,7 +151,7 @@ func Example_importForTrigger_OCS_Archive_BadData() { // Import FM-style (simulate trigger by OCS pipeline), file already in archive, so should do nothing func Example_importForTrigger_OCS_Archive_Exists() { - remoteFS, log, envName, configBucket, datasetBucket, manualBucket, db := initTest("OCS_Archive_Exists", "Archive_Exists", specialUserIds.PIXLISESystemUserId, "PIXLFMGroupId") + remoteFS, log, configBucket, datasetBucket, manualBucket, db := initTest("OCS_Archive_Exists", "Archive_Exists", specialUserIds.PIXLISESystemUserId, "PIXLFMGroupId") trigger := `{ "Records": [ { @@ -192,7 +191,7 @@ func Example_importForTrigger_OCS_Archive_Exists() { ] }` - result, err := ImportForTrigger([]byte(trigger), envName, configBucket, datasetBucket, manualBucket, db, log, remoteFS) + result, err := ImportForTrigger([]byte(trigger), configBucket, datasetBucket, manualBucket, db, log, remoteFS) fmt.Printf("Errors: %v, changes: %v, isUpdate: %v\n", err, result.WhatChanged, result.IsUpdate) @@ -245,7 +244,7 @@ func printArchiveOKLogOutput(logger *logger.StdOutLoggerForTest, db *mongo.Datab // Import FM-style (simulate trigger by OCS pipeline), file goes to archive, then all files downloaded from archive and dataset created func Example_importForTrigger_OCS_Archive_OK() { - remoteFS, log, envName, configBucket, datasetBucket, manualBucket, db := initTest("OCS_Archive_OK", "Archive_OK", specialUserIds.PIXLISESystemUserId, "PIXLFMGroupId") + remoteFS, log, configBucket, datasetBucket, manualBucket, db := initTest("OCS_Archive_OK", "Archive_OK", specialUserIds.PIXLISESystemUserId, "PIXLFMGroupId") // In case it ran before, delete the file from dataset bucket, otherwise we will end for the wrong reason os.Remove(datasetBucket + "/Archive/048300551-27-06-2021-09-52-25.zip") @@ -288,7 +287,7 @@ func Example_importForTrigger_OCS_Archive_OK() { ] }` - result, err := ImportForTrigger([]byte(trigger), envName, configBucket, datasetBucket, manualBucket, db, log, remoteFS) + result, err := ImportForTrigger([]byte(trigger), configBucket, datasetBucket, manualBucket, db, log, remoteFS) fmt.Printf("Errors: %v, changes: %v, isUpdate: %v\n", err, result.WhatChanged, result.IsUpdate) @@ -311,7 +310,7 @@ func Example_importForTrigger_OCS_Archive_OK() { // Import FM-style (simulate trigger by dataset edit screen), should create dataset with custom name+image func Example_importForTrigger_OCS_DatasetEdit() { - remoteFS, log, envName, configBucket, datasetBucket, manualBucket, db := initTest("OCS_DatasetEdit", "Archive_OK", specialUserIds.PIXLISESystemUserId, "PIXLFMGroupId") + remoteFS, log, configBucket, datasetBucket, manualBucket, db := initTest("OCS_DatasetEdit", "Archive_OK", specialUserIds.PIXLISESystemUserId, "PIXLFMGroupId") // To save from checking in 2 sets of the same zip files for this and Example_ImportForTrigger_OCS_Archive_OK, here we copy // the archive files from the Archive_OK test to here. @@ -341,7 +340,7 @@ func Example_importForTrigger_OCS_DatasetEdit() { "jobID": "dataimport-unittest123" }` - result, err := ImportForTrigger([]byte(trigger), envName, configBucket, datasetBucket, manualBucket, db, log, remoteFS) + result, err := ImportForTrigger([]byte(trigger), configBucket, datasetBucket, manualBucket, db, log, remoteFS) fmt.Printf("Errors: %v, changes: %v, isUpdate: %v\n", err, result.WhatChanged, result.IsUpdate) @@ -407,14 +406,14 @@ func printManualOKLogOutput(log *logger.StdOutLoggerForTest, db *mongo.Database, // Import a breadboard dataset from manual uploaded zip file func Example_importForTrigger_Manual_JPL() { - remoteFS, log, envName, configBucket, datasetBucket, manualBucket, db := initTest("Manual_JPL", "Manual_OK", specialUserIds.JPLImport, "JPLTestUserGroupId") + remoteFS, log, configBucket, datasetBucket, manualBucket, db := initTest("Manual_JPL", "Manual_OK", specialUserIds.JPLImport, "JPLTestUserGroupId") trigger := `{ "datasetID": "test1234", "jobID": "dataimport-unittest123" }` - result, err := ImportForTrigger([]byte(trigger), envName, configBucket, datasetBucket, manualBucket, db, log, remoteFS) + result, err := ImportForTrigger([]byte(trigger), configBucket, datasetBucket, manualBucket, db, log, remoteFS) fmt.Printf("Errors: %v, changes: %v, isUpdate: %v\n", err, result.WhatChanged, result.IsUpdate) @@ -440,14 +439,14 @@ func Example_importForTrigger_Manual_JPL() { // Import a breadboard dataset from manual uploaded zip file func Example_importForTrigger_Manual_SBU() { - remoteFS, log, envName, configBucket, datasetBucket, manualBucket, db := initTest("Manual_JPL", "Manual_OK2", specialUserIds.SBUImport, "SBUTestUserGroupId") + remoteFS, log, configBucket, datasetBucket, manualBucket, db := initTest("Manual_JPL", "Manual_OK2", specialUserIds.SBUImport, "SBUTestUserGroupId") trigger := `{ "datasetID": "test1234sbu", "jobID": "dataimport-unittest123sbu" }` - result, err := ImportForTrigger([]byte(trigger), envName, configBucket, datasetBucket, manualBucket, db, log, remoteFS) + result, err := ImportForTrigger([]byte(trigger), configBucket, datasetBucket, manualBucket, db, log, remoteFS) fmt.Printf("Errors: %v, changes: %v, isUpdate: %v\n", err, result.WhatChanged, result.IsUpdate) @@ -473,14 +472,14 @@ func Example_importForTrigger_Manual_SBU() { // Import a breadboard dataset from manual uploaded zip file func Example_ImportForTrigger_Manual_SBU_NoAutoShare() { - remoteFS, log, envName, configBucket, datasetBucket, manualBucket, db := initTest("Manual_SBU_NoAutoShare", "Manual_OK2", specialUserIds.JPLImport, "JPLTestUserGroupId") + remoteFS, log, configBucket, datasetBucket, manualBucket, db := initTest("Manual_SBU_NoAutoShare", "Manual_OK2", specialUserIds.JPLImport, "JPLTestUserGroupId") trigger := `{ "datasetID": "test1234sbu", "jobID": "dataimport-unittest123sbu" }` - result, err := ImportForTrigger([]byte(trigger), envName, configBucket, datasetBucket, manualBucket, db, log, remoteFS) + result, err := ImportForTrigger([]byte(trigger), configBucket, datasetBucket, manualBucket, db, log, remoteFS) fmt.Printf("Errors: %v, changes: %v, isUpdate: %v\n", err, result.WhatChanged, result.IsUpdate) @@ -507,14 +506,14 @@ func Example_ImportForTrigger_Manual_SBU_NoAutoShare() { /* Didnt get this working when the above was changed. Problem is this still generates the user name: SBUImport, so the premise of the test fails because it doesn't end up with no user id at that point! func Test_ImportForTrigger_Manual_SBU_NoAutoShare_FailForPipeline(t *testing.T) { - remoteFS, log, envName, configBucket, datasetBucket, manualBucket, db := initTest("Manual_OK2", "", "") + remoteFS, log, configBucket, datasetBucket, manualBucket, db := initTest("Manual_OK2", "", "") trigger := `{ "datasetID": "test1234sbu", "jobID": "dataimport-unittest123sbu" }` - _, err := ImportForTrigger([]byte(trigger), envName, configBucket, datasetBucket, manualBucket, db, log, remoteFS) + _, err := ImportForTrigger([]byte(trigger), configBucket, datasetBucket, manualBucket, db, log, remoteFS) // Make sure we got the error if !strings.HasSuffix(err.Error(), "Cannot work out groups to auto-share imported dataset with") { @@ -524,14 +523,14 @@ func Test_ImportForTrigger_Manual_SBU_NoAutoShare_FailForPipeline(t *testing.T) */ // Import a breadboard dataset from manual uploaded zip file func Example_importForTrigger_Manual_EM() { - remoteFS, log, envName, configBucket, datasetBucket, manualBucket, db := initTest("Manual_EM", "ManualEM_OK", specialUserIds.PIXLISESystemUserId, "PIXLFMGroupId") + remoteFS, log, configBucket, datasetBucket, manualBucket, db := initTest("Manual_EM", "ManualEM_OK", specialUserIds.PIXLISESystemUserId, "PIXLFMGroupId") trigger := `{ "datasetID": "048300551", "jobID": "dataimport-unittest048300551" }` - result, err := ImportForTrigger([]byte(trigger), envName, configBucket, datasetBucket, manualBucket, db, log, remoteFS) + result, err := ImportForTrigger([]byte(trigger), configBucket, datasetBucket, manualBucket, db, log, remoteFS) fmt.Printf("Errors: %v, changes: %v, isUpdate: %v\n", err, result.WhatChanged, result.IsUpdate) @@ -558,14 +557,14 @@ func Example_importForTrigger_Manual_EM() { // Import a breadboard dataset from manual uploaded zip file func Example_importForTrigger_Manual_EM_WithBeamV2() { - remoteFS, log, envName, configBucket, datasetBucket, manualBucket, db := initTest("Manual_EM", "ManualEM_Beamv2_OK", specialUserIds.PIXLISESystemUserId, "PIXLFMGroupId") + remoteFS, log, configBucket, datasetBucket, manualBucket, db := initTest("Manual_EM", "ManualEM_Beamv2_OK", specialUserIds.PIXLISESystemUserId, "PIXLFMGroupId") trigger := `{ "datasetID": "048300551", "jobID": "dataimport-unittest048300551" }` - result, err := ImportForTrigger([]byte(trigger), envName, configBucket, datasetBucket, manualBucket, db, log, remoteFS) + result, err := ImportForTrigger([]byte(trigger), configBucket, datasetBucket, manualBucket, db, log, remoteFS) fmt.Printf("Errors: %v, changes: %v, isUpdate: %v\n", err, result.WhatChanged, result.IsUpdate) @@ -594,14 +593,14 @@ func Example_importForTrigger_Manual_EM_WithBeamV2() { // Import a breadboard dataset from manual uploaded zip file, including custom name+image func Example_importForTrigger_Manual_DatasetEdit() { - remoteFS, log, envName, configBucket, datasetBucket, manualBucket := initTest("Manual_Edit") + remoteFS, log, configBucket, datasetBucket, manualBucket := initTest("Manual_Edit") trigger := `{ "datasetID": "test1234", "logID": "dataimport-unittest123" }` - err := ImportForTrigger([]byte(trigger), envName, configBucket, datasetBucket, manualBucket, log, remoteFS) + err := ImportForTrigger([]byte(trigger), configBucket, datasetBucket, manualBucket, log, remoteFS) fmt.Printf("Errors: %v\n", err) diff --git a/api/dbCollections/collections.go b/api/dbCollections/collections.go index abffd8fa..1a5854fe 100644 --- a/api/dbCollections/collections.go +++ b/api/dbCollections/collections.go @@ -37,8 +37,10 @@ const UserGroupsName = "userGroups" const UserROIDisplaySettings = "userROIDisplaySettings" const UserExpressionDisplaySettings = "userExpressionDisplaySettings" const UsersName = "users" +const UserImpersonatorsName = "userImpersonators" const ViewStatesName = "viewStates" const WidgetDataName = "widgetData" +const ConnectTempTokensName = "connectTempTokens" func GetAllCollections() []string { return []string{ diff --git a/api/services/apiServices.go b/api/services/apiServices.go index 5372f6cb..d4a3f7b4 100644 --- a/api/services/apiServices.go +++ b/api/services/apiServices.go @@ -36,6 +36,7 @@ import ( "github.com/pixlise/core/v4/core/idgen" "github.com/pixlise/core/v4/core/jwtparser" "github.com/pixlise/core/v4/core/logger" + "github.com/pixlise/core/v4/core/mongoDBConnection" "github.com/pixlise/core/v4/core/timestamper" "go.mongodb.org/mongo-driver/mongo" ) @@ -81,5 +82,11 @@ type APIServices struct { // Our mongo db connection MongoDB *mongo.Database + // And how we connected to it (so we can run mongodump later if needed) + MongoDetails mongoDBConnection.MongoConnectionDetails + Notifier INotifier + + // The unique identifier of this API instance (so we can log/debug issues that are cross-instance!) + InstanceId string } diff --git a/api/ws/handlers/screen-configuration.go b/api/ws/handlers/screen-configuration.go index 953879db..892523cd 100644 --- a/api/ws/handlers/screen-configuration.go +++ b/api/ws/handlers/screen-configuration.go @@ -57,6 +57,10 @@ func HandleScreenConfigurationListReq(req *protos.ScreenConfigurationListReq, hc return nil, err } + if req.SnapshotParentId != "" { + filter["snapshotParentId"] = req.SnapshotParentId + } + opts := options.Find() cursor, err := hctx.Svcs.MongoDB.Collection(dbCollections.ScreenConfigurationName).Find(context.TODO(), filter, opts) @@ -162,11 +166,54 @@ func writeScreenConfiguration(screenConfig *protos.ScreenConfiguration, hctx wsH for i, layout := range screenConfig.Layouts { if layout.TabId == "" { layout.TabId = hctx.Svcs.IDGen.GenObjectID() - layout.TabName = "Tab " + fmt.Sprint(i+1) + if layout.TabName == "" { + layout.TabName = "Tab " + fmt.Sprint(i+1) + } } for _, widget := range layout.Widgets { if widget.Id == "" { widget.Id = formWidgetId(widget, screenConfig.Id, i) + if widget.Data != nil { + // We have widget data, but no ID, so write it to the database with a new ID + _, err := hctx.Svcs.MongoDB.Collection(dbCollections.WidgetDataName).UpdateOne(sessCtx, bson.M{ + "_id": widget.Id, + }, bson.M{ + "$set": widget.Data, + }, options.Update().SetUpsert(true)) + if err != nil { + return nil, err + } + } + } else if widget.Id != "" { + // We have a widget ID, but no data, so we'll just copy the respective widget record to a new one + var oldWidgetId = widget.Id + widget.Id = formWidgetId(widget, screenConfig.Id, i) + // Fetch old widget data + result := hctx.Svcs.MongoDB.Collection(dbCollections.WidgetDataName).FindOne(sessCtx, bson.M{ + "_id": oldWidgetId, + }) + if result.Err() != nil { + // We can't get the data, so we'll just continue + continue + } + + widgetData := &protos.WidgetData{} + err = result.Decode(&widgetData) + if err != nil { + continue + } + + widgetData.Id = widget.Id + + // Write the data to the new widget ID + _, err := hctx.Svcs.MongoDB.Collection(dbCollections.WidgetDataName).UpdateOne(sessCtx, bson.M{ + "_id": widget.Id, + }, bson.M{ + "$set": widgetData, + }, options.Update().SetUpsert(true)) + if err != nil { + return nil, err + } } } } diff --git a/api/ws/handlers/system.go b/api/ws/handlers/system.go new file mode 100644 index 00000000..92eaaa70 --- /dev/null +++ b/api/ws/handlers/system.go @@ -0,0 +1,257 @@ +package wsHandler + +import ( + "errors" + "fmt" + "strings" + "sync" + + "github.com/mongodb/mongo-tools/mongodump" + "github.com/pixlise/core/v4/api/services" + "github.com/pixlise/core/v4/api/ws/wsHelpers" + "github.com/pixlise/core/v4/core/mongoDBConnection" + protos "github.com/pixlise/core/v4/generated-protos" +) + +func HandleBackupDBReq(req *protos.BackupDBReq, hctx wsHelpers.HandlerContext) (*protos.BackupDBResp, error) { + if len(hctx.Svcs.Config.DataBackupBucket) <= 0 { + err := "PIXLISE Backup bucket not configured!" + hctx.Svcs.Log.Errorf(err) + return nil, errors.New(err) + } + + if !hctx.Svcs.Config.BackupEnabled { + err := "PIXLISE Backup not enabled!" + hctx.Svcs.Log.Errorf(err) + return nil, errors.New(err) + } + + // Delete any local backups already done so we don't run out of space/have issues with overwriting + err := wsHelpers.ResetLocalMongoBackupDir() + if err != nil { + return nil, err + } + + startTimestamp := hctx.Svcs.TimeStamper.GetTimeNowSec() + + hctx.Svcs.Log.Infof("PIXLISE Backup Requested, will be written to bucket: %v", hctx.Svcs.Config.DataBackupBucket) + + // Run MongoDump, save to a local archive file + dump := wsHelpers.MakeMongoDumpInstance(hctx.Svcs.MongoDetails, mongoDBConnection.GetDatabaseName("pixlise", hctx.Svcs.Config.EnvironmentName)) + + err = dump.Init() + if err != nil { + hctx.Svcs.Log.Errorf("PIXLISE Backup failed to initialise: %v", err) + return nil, err + } + + go runBackup(dump, startTimestamp, hctx.Svcs) + + return &protos.BackupDBResp{}, nil +} + +func runBackup(dump *mongodump.MongoDump, startTimestamp int64, svcs *services.APIServices) { + var wg sync.WaitGroup + var errDBDump error + var errScanSync error + var errImageSync error + var errQuantSync error + + wg.Add(1) + go func() { + defer wg.Done() + + errDBDump = dump.Dump() + + if errDBDump == nil { + svcs.Log.Infof("PIXLISE DB Dump complete") + errDBDump = wsHelpers.UploadArchive(svcs) + } + }() + + wg.Add(1) + go func() { + defer wg.Done() + svcs.Log.Infof("Syncing scans to bucket") + errScanSync = wsHelpers.SyncScans(svcs) + svcs.Log.Infof("Syncing scans to bucket COMPLETE") + }() + + wg.Add(1) + go func() { + defer wg.Done() + svcs.Log.Infof("Syncing quants to bucket") + errQuantSync = wsHelpers.SyncQuants(svcs) + svcs.Log.Infof("Syncing quants to bucket COMPLETE") + }() + + wg.Add(1) + go func() { + defer wg.Done() + svcs.Log.Infof("Syncing images to bucket") + errImageSync = wsHelpers.SyncImages(svcs) + svcs.Log.Infof("Syncing images to bucket COMPLETE") + }() + + // Wait for all sync tasks + wg.Wait() + + var err error + if errDBDump != nil { + err = fmt.Errorf("PIXLISE Backup DB dump failed: %v", errDBDump) + } + + if errScanSync != nil { + err = fmt.Errorf("PIXLISE Backup error syncing scans: %v", errScanSync) + } + + if errImageSync != nil { + err = fmt.Errorf("PIXLISE Backup error syncing images: %v", errImageSync) + } + + if errQuantSync != nil { + err = fmt.Errorf("PIXLISE Backup error syncing quants: %v", errQuantSync) + } + + if err != nil { + return + } + + endTimestamp := svcs.TimeStamper.GetTimeNowSec() + svcs.Log.Infof("PIXLISE Backup complete in %v sec", endTimestamp-startTimestamp) + + // TODO: send an update message to notify anything listening that we're done! +} + +func HandleRestoreDBReq(req *protos.RestoreDBReq, hctx wsHelpers.HandlerContext) (*protos.RestoreDBResp, error) { + // Only allow restore if enabled and we're NOT prod + if !hctx.Svcs.Config.RestoreEnabled { + err := "PIXLISE Restore not enabled!" + hctx.Svcs.Log.Errorf(err) + return nil, errors.New(err) + } + + if strings.Contains(strings.ToLower(hctx.Svcs.Config.EnvironmentName), "prod") { + err := "PIXLISE Restore not allowed on environment: " + hctx.Svcs.Config.EnvironmentName + hctx.Svcs.Log.Errorf(err) + return nil, errors.New(err) + } + + deleteLocal := true + + if deleteLocal { + // Delete any local backups already done so we don't run out of space/have issues with overwriting + err := wsHelpers.ResetLocalMongoBackupDir() + if err != nil { + return nil, err + } + } + + startTimestamp := hctx.Svcs.TimeStamper.GetTimeNowSec() + + go runRestore(startTimestamp, hctx.Svcs, deleteLocal) + + return &protos.RestoreDBResp{}, nil +} + +func runRestore(startTimestamp int64, svcs *services.APIServices, downloadRemoteFiles bool) { + var wg sync.WaitGroup + var errDBRestore error + var errScanSync error + var errImageSync error + var errQuantSync error + + wg.Add(1) + go func() { + defer wg.Done() + + restoreFromDBName := "" + if downloadRemoteFiles { + restoreFromDBName, errDBRestore = wsHelpers.DownloadArchive(svcs) + } + + if errDBRestore == nil { + restore, errDBRestore := wsHelpers.MakeMongoRestoreInstance(svcs.MongoDetails, mongoDBConnection.GetDatabaseName("pixlise", svcs.Config.EnvironmentName), restoreFromDBName) + + if errDBRestore == nil { + result := restore.Restore() + if result.Err != nil { + errDBRestore = result.Err + } else { + svcs.Log.Infof("Mongo Restore complete: %v successes, %v failures", result.Successes, result.Failures) + + if downloadRemoteFiles { + // Delete the local db archive + errDBRestore = wsHelpers.ClearLocalMongoArchive() + } + } + } + } + }() + + wg.Add(1) + go func() { + defer wg.Done() + svcs.Log.Infof("Restoring scans to bucket") + errScanSync = wsHelpers.RestoreScans(svcs) + svcs.Log.Infof("Restoring scans to bucket COMPLETE") + }() + + wg.Add(1) + go func() { + defer wg.Done() + svcs.Log.Infof("Restoring quants to bucket") + errQuantSync = wsHelpers.RestoreQuants(svcs) + svcs.Log.Infof("Restoring quants to bucket COMPLETE") + }() + + wg.Add(1) + go func() { + defer wg.Done() + svcs.Log.Infof("Restoring images to bucket") + errImageSync = wsHelpers.RestoreImages(svcs) + svcs.Log.Infof("Restoring images to bucket COMPLETE") + }() + + // Wait for all sync tasks + wg.Wait() + + var err error + if errDBRestore != nil { + err = fmt.Errorf("PIXLISE Restore DB restore failed: %v", errDBRestore) + } + + if errScanSync != nil { + err = fmt.Errorf("PIXLISE Restore error restoring scans: %v", errScanSync) + } + + if errImageSync != nil { + err = fmt.Errorf("PIXLISE Restore error restoring images: %v", errImageSync) + } + + if errQuantSync != nil { + err = fmt.Errorf("PIXLISE Restore error restoring quants: %v", errQuantSync) + } + + if err != nil { + return + } + + endTimestamp := svcs.TimeStamper.GetTimeNowSec() + svcs.Log.Infof("PIXLISE Restore complete in %v sec", endTimestamp-startTimestamp) + + // TODO: send an update message to notify anything listening that we're done! +} + +func HandleDBAdminConfigGetReq(req *protos.DBAdminConfigGetReq, hctx wsHelpers.HandlerContext) (*protos.DBAdminConfigGetResp, error) { + // Reply depending on how this env is configured + resp := protos.DBAdminConfigGetResp{ + CanBackup: len(hctx.Svcs.Config.DataBackupBucket) > 0 && hctx.Svcs.Config.BackupEnabled, + BackupDestination: hctx.Svcs.Config.DataBackupBucket, + CanRestore: len(hctx.Svcs.Config.DataBackupBucket) > 0 && hctx.Svcs.Config.RestoreEnabled, + RestoreFrom: hctx.Svcs.Config.DataBackupBucket, + ImpersonateEnabled: hctx.Svcs.Config.ImpersonateEnabled, + } + + return &resp, nil +} diff --git a/api/ws/handlers/user-management.go b/api/ws/handlers/user-management.go index adf9c1bb..f4604c13 100644 --- a/api/ws/handlers/user-management.go +++ b/api/ws/handlers/user-management.go @@ -1,13 +1,18 @@ package wsHandler import ( + "context" + "errors" "fmt" "time" + "github.com/pixlise/core/v4/api/dbCollections" "github.com/pixlise/core/v4/api/ws/wsHelpers" "github.com/pixlise/core/v4/core/auth0login" 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" "gopkg.in/auth0.v4/management" ) @@ -218,3 +223,121 @@ func makeUser(from *management.User, db *mongo.Database) *protos.Auth0UserDetail return &user } + +func HandleUserImpersonateReq(req *protos.UserImpersonateReq, hctx wsHelpers.HandlerContext) (*protos.UserImpersonateResp, error) { + if !hctx.Svcs.Config.ImpersonateEnabled { + return nil, fmt.Errorf("Impersonate feature is not enabled on this environment") + } + + // NOTE: we set this up in the DB, page refresh will cause it to be applied + coll := hctx.Svcs.MongoDB.Collection(dbCollections.UserImpersonatorsName) + ctx := context.TODO() + + realUserId, ok := hctx.Session.Get("realUserId") + + // If we're impersonating a user, make sure the one requested isn't ours + if ok && realUserId == req.UserId || req.UserId == hctx.SessUser.User.Id { + return nil, errors.New("User cannot impersonate themself") + } + + if len(req.UserId) <= 0 { + // Delete any impersonation entries + if !ok { + return nil, errors.New("Failed to get real user id so cannot remove impersonation setting") + } + + delResult, err := coll.DeleteOne(ctx, bson.M{"_id": realUserId}, options.Delete()) + if err != nil { + return nil, fmt.Errorf("Failed to delete impersonation setting: %v", err) + } + + if delResult.DeletedCount <= 0 { + return nil, errors.New("No impersonation settings were removed") + } + + return &protos.UserImpersonateResp{}, nil + } + // ELSE... + + // Validate the user id + userToImpersonate, err := wsHelpers.GetDBUser(req.UserId, hctx.Svcs.MongoDB) + + if err != nil { + return nil, fmt.Errorf("Failed to find user to impersonate by id: %v. Error: %v", req.UserId, err) + } + + // Add impersonation entry + // NOTE: we ensure we are not currently impersonating... + userId := hctx.SessUser.User.Id + if ok { + // User is currently impersonating already, so make sure we book their real user name in! + userId = fmt.Sprintf("%v", realUserId) // or could maybe use realUserId.(string) + } + + saveItem := wsHelpers.UserImpersonationItem{ + Id: userId, + ImpersonatedId: req.UserId, + TimeStampUnixSec: uint32(hctx.Svcs.TimeStamper.GetTimeNowSec()), + } + filter := bson.M{"_id": userId} + updResult, err := coll.UpdateOne(ctx, filter, bson.D{{Key: "$set", Value: &saveItem}}, options.Update().SetUpsert(true)) + if err != nil { + return nil, fmt.Errorf("Failed to save impersonation setting: %v", err) + } + + if updResult.UpsertedCount == 0 && updResult.ModifiedCount == 0 { + hctx.Svcs.Log.Errorf("Unexpected update result for user impersonation of %v by %v: %+v", req.UserId, userId, updResult) + } + + /* + // User attached to this session wants to become the user id specified OR stop impersonating if incoming ID is blank + if len(req.UserId) <= 0 { + // Ensure we have a "original" user stored + if orig, ok := hctx.Session.Get("originalUser"); !ok { + return nil, fmt.Errorf("Failed to find original user details, existing session may not be impersonating a user") + } else { + hctx.Session.Set("user", orig) + hctx.Session.UnSet("originalUser") + } + } else { + // They're becoming a user - store original if needed + if _, ok := hctx.Session.Get("originalUser"); !ok { + if u, okReal := hctx.Session.Get("user"); okReal { + hctx.Session.Set("originalUser", u) + } else { + return nil, fmt.Errorf("Failed to backup real user details") + } + } + + // "Become" the new user + newUser, err := wsHelpers.MakeSessionUser(hctx.SessUser.SessionId, req.UserId, hctx.SessUser.Permissions, hctx.Svcs.MongoDB) + if err != nil { + return nil, fmt.Errorf("Failed to impersonate user: %v. Error was: %v", req.UserId, err) + } + + hctx.Session.Set("user", newUser) + hctx.SessUser = *newUser + }*/ + + return &protos.UserImpersonateResp{ + SessionUser: &protos.UserInfo{ + Id: userToImpersonate.Id, + Name: userToImpersonate.Info.Name, + Email: userToImpersonate.Info.Email, + }, + }, nil +} + +func HandleUserImpersonateGetReq(req *protos.UserImpersonateGetReq, hctx wsHelpers.HandlerContext) (*protos.UserImpersonateGetResp, error) { + // If user is not impersonating someone, just return an empty message + _, ok := hctx.Session.Get("realUserId") + if !ok { + // No impersonation... + return &protos.UserImpersonateGetResp{}, nil + } + + // We have the real user id, but what's in our session is the impersonated info, return that + return &protos.UserImpersonateGetResp{ + SessionUser: hctx.SessUser.User, + }, nil +} diff --git a/api/ws/ws.go b/api/ws/ws.go index 41fd92e5..3ea9667f 100644 --- a/api/ws/ws.go +++ b/api/ws/ws.go @@ -1,11 +1,11 @@ package ws import ( + "context" "fmt" - "sync" - "time" "github.com/olahol/melody" + "github.com/pixlise/core/v4/api/dbCollections" apiRouter "github.com/pixlise/core/v4/api/router" "github.com/pixlise/core/v4/api/services" "github.com/pixlise/core/v4/api/ws/wsHelpers" @@ -13,7 +13,9 @@ import ( "github.com/pixlise/core/v4/core/jwtparser" "github.com/pixlise/core/v4/core/utils" 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" ) @@ -23,47 +25,20 @@ type connectToken struct { } type WSHandler struct { - connectTokensMutex sync.Mutex - connectTokens map[string]connectToken - melody *melody.Melody - svcs *services.APIServices + melody *melody.Melody + svcs *services.APIServices } func MakeWSHandler(m *melody.Melody, svcs *services.APIServices) *WSHandler { ws := WSHandler{ - connectTokens: map[string]connectToken{}, - melody: m, - svcs: svcs, + melody: m, + svcs: svcs, } return &ws } -func (ws *WSHandler) clearOldTokens() { - nowSec := ws.svcs.TimeStamper.GetTimeNowSec() - - ws.connectTokensMutex.Lock() - defer ws.connectTokensMutex.Unlock() - - for token, usr := range ws.connectTokens { - if usr.expiryUnixSec < nowSec { - delete(ws.connectTokens, token) - } - } -} - func (ws *WSHandler) HandleBeginWSConnection(params apiRouter.ApiHandlerGenericParams) error { - // Generate a token that is valid for a short time - token := utils.RandStringBytesMaskImpr(32) - - expirySec := ws.svcs.TimeStamper.GetTimeNowSec() + 10 - - // Clear out old ones, now is a good a time as any! - ws.clearOldTokens() - - ws.connectTokensMutex.Lock() - defer ws.connectTokensMutex.Unlock() - - ws.connectTokens[token] = connectToken{expirySec, params.UserInfo} + token := wsHelpers.CreateConnectToken(params.Svcs, params.UserInfo) result := &protos.BeginWSConnectionResponse{} result.ConnToken = token @@ -94,50 +69,75 @@ func (ws *WSHandler) HandleConnect(s *melody.Session) { queryParams := s.Request.URL.Query() if token, ok := queryParams["token"]; !ok { fmt.Println("WS connect failed due to missing token") - s.CloseWithMsg([]byte("Missing token")) + s.CloseWithMsg([]byte("--Missing token")) return } else { // Validate the token if len(token) != 1 { - fmt.Printf("WS connect failed for token: %v\n", token) - s.CloseWithMsg([]byte("Multiple tokens provided")) + fmt.Printf("WS connect failed due to unexpected token count %v\n", len(token)) + s.CloseWithMsg([]byte("--Multiple tokens provided")) return } - ws.connectTokensMutex.Lock() - defer ws.connectTokensMutex.Unlock() - - if conn, ok := ws.connectTokens[token[0]]; !ok { - fmt.Printf("WS connect failed for UNKNOWN token: %v\n", token) - s.CloseWithMsg([]byte("Invalid token")) + if !wsHelpers.IsValidConnectToken(token[0]) { + fmt.Printf("WS connect received invalid token: %v\n", token[0]) + s.CloseWithMsg([]byte("--Invalid token provided")) return - } else { - // Check that it hasn't expired - nowSec := time.Now().Unix() // TODO: use GetTimeNowSec - if conn.expiryUnixSec < nowSec { - fmt.Printf("WS connect failed for EXPIRED token: %v. User: %v (%v)\n", token, conn.userInfo.UserID, conn.userInfo.Name) - s.CloseWithMsg([]byte("Expired token")) - return - } else { - connectingUser = conn.userInfo + } - // We no longer need this item in our connection token map - delete(ws.connectTokens, token[0]) - } + var err error + connectingUser, err = wsHelpers.CheckConnectToken(token[0], ws.svcs) + + if err != nil { + s.CloseWithMsg([]byte("--" + err.Error())) + return } } // Look up user info sessId := utils.RandStringBytesMaskImpr(32) - sessionUser, err := wsHelpers.MakeSessionUser(sessId, connectingUser, ws.svcs.MongoDB) + sessionUserId := connectingUser.UserID + + // Check if we're set to impersonate another user + if ws.svcs.Config.ImpersonateEnabled { + coll := ws.svcs.MongoDB.Collection(dbCollections.UserImpersonatorsName) + ctx := context.TODO() + impersonateResult := coll.FindOne(ctx, bson.M{"_id": connectingUser.UserID}, options.FindOne()) + if impersonateResult.Err() != nil { + if impersonateResult.Err() != mongo.ErrNoDocuments { + msg := fmt.Sprintf("Error checking for user impersonation setting: %v", impersonateResult.Err()) + fmt.Printf(msg) + s.CloseWithMsg([]byte("--" + msg)) + return + } + } else { + // We got impersonation info, find the user id we want to pretend to be + item := wsHelpers.UserImpersonationItem{} + err := impersonateResult.Decode(&item) + + if err != nil { + msg := fmt.Sprintf("Failed to read user impersonation setting: %v", err) + fmt.Printf(msg) + s.CloseWithMsg([]byte("--" + msg)) + return + } + + sessionUserId = item.ImpersonatedId + + // Set the "real" user id so we can know who is impersonating what + s.Set("realUserId", connectingUser.UserID) + } + } + + sessionUser, err := wsHelpers.MakeSessionUser(sessId, sessionUserId, connectingUser.Permissions, ws.svcs.MongoDB) if err != nil { // If we have no record of this user, add it if err == mongo.ErrNoDocuments { sessionUser, err = wsHelpers.CreateDBUser(sessId, connectingUser, ws.svcs.MongoDB, ws.svcs.Config.DefaultUserGroupId, ws.svcs.Log) if err != nil { fmt.Printf("WS connect failed for user: %v (%v) - failed to read/create user in DB\n", connectingUser.UserID, connectingUser.Name) - s.CloseWithMsg([]byte("Failed to validate session user")) + s.CloseWithMsg([]byte("--Failed to validate session user")) return } } @@ -146,7 +146,11 @@ func (ws *WSHandler) HandleConnect(s *melody.Session) { // Store the connection info! s.Set("user", *sessionUser) - fmt.Printf("Connect user: %v (%v), session: %v\n", connectingUser.UserID, connectingUser.Name, sessId) + if sessionUserId == connectingUser.UserID { + fmt.Printf("Connect user: %v (%v), session: %v\n", connectingUser.UserID, connectingUser.Name, sessId) + } else { + fmt.Printf("Connect user: %v (%v), session: %v, impersonating user: %v (%v)\n", connectingUser.UserID, connectingUser.Name, sessId, sessionUserId, sessionUser.User.Name) + } // And we're connected, nothing more to do but wait for requests! } diff --git a/api/ws/wsHelpers/connectTokens.go b/api/ws/wsHelpers/connectTokens.go new file mode 100644 index 00000000..165aed88 --- /dev/null +++ b/api/ws/wsHelpers/connectTokens.go @@ -0,0 +1,122 @@ +package wsHelpers + +import ( + "context" + "errors" + "strings" + + "github.com/pixlise/core/v4/api/dbCollections" + "github.com/pixlise/core/v4/api/services" + "github.com/pixlise/core/v4/core/jwtparser" + "github.com/pixlise/core/v4/core/utils" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" +) + +type ConnectToken struct { + Id string `bson:"_id"` + ExpiryUnixSec int64 + User jwtparser.JWTUserInfo + Permissions []string +} + +func CreateConnectToken(svcs *services.APIServices, user jwtparser.JWTUserInfo) string { + // Generate a new token + perms := []string{} + for k := range user.Permissions { + perms = append(perms, k) + } + + token := ConnectToken{ + Id: utils.RandStringBytesMaskImpr(32), // The actual token + ExpiryUnixSec: svcs.TimeStamper.GetTimeNowSec() + 10, + User: user, + Permissions: perms, + } + + // Save to DB + ctx := context.TODO() + coll := svcs.MongoDB.Collection(dbCollections.ConnectTempTokensName) + + _, err := coll.InsertOne(ctx, token, options.InsertOne()) + if err != nil { + svcs.Log.Errorf("Failed to save new connect token: %v. Error: %v", token.Id, err) + return "" + } + + return token.Id +} + +func IsValidConnectToken(token string) bool { + if len(token) != 32 { + return false + } + + possibleChars := utils.RandomStringChars + for i := range token { + if strings.Index(possibleChars, token[i:i+1]) < 0 { + return false + } + } + + return true +} + +func CheckConnectToken(token string, svcs *services.APIServices) (jwtparser.JWTUserInfo, error) { + // Check to see if token exists in DB + ctx := context.TODO() + coll := svcs.MongoDB.Collection(dbCollections.ConnectTempTokensName) + + result := coll.FindOne(ctx, bson.M{"_id": token}, options.FindOne()) + if result.Err() != nil { + // If not found, return the right error + if result.Err() == mongo.ErrNoDocuments { + return jwtparser.JWTUserInfo{}, errors.New("Provided token is unknown") + } + + // Other error + svcs.Log.Errorf("Failed to read connect token: %v. Error: %v", token, result.Err()) + return jwtparser.JWTUserInfo{}, result.Err() + } + + // Read the item + readToken := ConnectToken{} + if err := result.Decode(&readToken); err != nil { + svcs.Log.Errorf("Failed to decode connect token: %v. Error: %v", token, err) + return jwtparser.JWTUserInfo{}, result.Err() + } + + // Check expiry + nowUnixSec := svcs.TimeStamper.GetTimeNowSec() + + if readToken.ExpiryUnixSec < nowUnixSec { + svcs.Log.Errorf("WS connect failed for EXPIRED token: %v. User: %v (%v)\n", token, readToken.User.UserID, readToken.User.Name) + return jwtparser.JWTUserInfo{}, errors.New("Expired token") + } + + // Delete expired tokens from DB + filter := bson.M{ + "$or": []interface{}{ + bson.M{"_id": readToken.Id}, + bson.M{"expiryunixsec": bson.M{"$lt": nowUnixSec}}, + }, + } + + delResult, err := coll.DeleteMany(ctx, filter, options.Delete()) + if err != nil { + svcs.Log.Errorf("Failed to delete expired/used connect tokens: %v\n", err) + } else { + if delResult.DeletedCount > 0 { + svcs.Log.Infof("Deleted %v expired/used connect tokens", delResult.DeletedCount) + } + } + + // Set the permissions field! + readToken.User.Permissions = map[string]bool{} + for _, perm := range readToken.Permissions { + readToken.User.Permissions[perm] = true + } + + return readToken.User, nil +} diff --git a/api/ws/wsHelpers/connectTokens_test.go b/api/ws/wsHelpers/connectTokens_test.go new file mode 100644 index 00000000..1a901feb --- /dev/null +++ b/api/ws/wsHelpers/connectTokens_test.go @@ -0,0 +1,78 @@ +package wsHelpers + +import ( + "context" + "fmt" + + "github.com/pixlise/core/v4/api/dbCollections" + "github.com/pixlise/core/v4/api/services" + "github.com/pixlise/core/v4/core/jwtparser" + "github.com/pixlise/core/v4/core/logger" + "github.com/pixlise/core/v4/core/timestamper" + "github.com/pixlise/core/v4/core/wstestlib" + "go.mongodb.org/mongo-driver/mongo/options" +) + +func Example_ConnectTokens() { + db := wstestlib.GetDB() + ctx := context.TODO() + coll := db.Collection(dbCollections.ConnectTempTokensName) + + fmt.Printf("drop: %v\n", coll.Drop(ctx)) + + token1 := ConnectToken{ + Id: "abc123", + ExpiryUnixSec: 1234567890, + User: jwtparser.JWTUserInfo{ + Name: "TheUser's Name", + UserID: "u123", + Email: "user@mail.com", + }, + } + + _, err := coll.InsertOne(ctx, token1, options.InsertOne()) + fmt.Printf("insert1: %v\n", err) + + // Insert again + token1.Id = "abc999" + _, err = coll.InsertOne(ctx, token1, options.InsertOne()) + fmt.Printf("insert2: %v\n", err) + + _, err = CheckConnectToken("abcd", &services.APIServices{ + Log: &logger.StdOutLoggerForTest{}, + MongoDB: db, + TimeStamper: ×tamper.MockTimeNowStamper{ + QueuedTimeStamps: []int64{1234567890}, + }, + }) + + fmt.Printf("notfound: %v\n", err) + + usr, err := CheckConnectToken("abc123", &services.APIServices{ + Log: &logger.StdOutLoggerForTest{}, + MongoDB: db, + TimeStamper: ×tamper.MockTimeNowStamper{ + QueuedTimeStamps: []int64{1234567887}, + }, + }) + + fmt.Printf("token ok %v, user: %v\n", err, usr.Name) + + _, err = CheckConnectToken("abc999", &services.APIServices{ + Log: &logger.StdOutLoggerForTest{}, + MongoDB: db, + TimeStamper: ×tamper.MockTimeNowStamper{ + QueuedTimeStamps: []int64{1234567892}, + }, + }) + + fmt.Printf("token expired, err: %v\n", err) + + // Output: + // drop: + // insert1: + // insert2: + // notfound: Provided token is unknown + // token ok , user: TheUser's Name + // token expired, err: Expired token +} diff --git a/api/ws/wsHelpers/sessionSend.go b/api/ws/wsHelpers/sessionSend.go index df76613a..bd16734c 100644 --- a/api/ws/wsHelpers/sessionSend.go +++ b/api/ws/wsHelpers/sessionSend.go @@ -9,7 +9,7 @@ import ( func SendForSession(s *melody.Session, wsmsg *protos.WSMessage) { bytes, err := proto.Marshal(wsmsg) if err != nil { - s.CloseWithMsg([]byte(err.Error())) + s.CloseWithMsg([]byte("--" + err.Error())) return } diff --git a/api/ws/wsHelpers/sessionUser.go b/api/ws/wsHelpers/sessionUser.go index 206bdbab..59304372 100644 --- a/api/ws/wsHelpers/sessionUser.go +++ b/api/ws/wsHelpers/sessionUser.go @@ -45,17 +45,17 @@ var cachedUserGroupViewership = map[string][]string{} // JWT user has the user ID and permissions that we get from Auth0. The rest is handled // within PIXLISE, so lets read our DB to see if this user exists and get their // user name, email, icon, etc -func MakeSessionUser(sessionId string, jwtUser jwtparser.JWTUserInfo, db *mongo.Database) (*SessionUser, error) { +func MakeSessionUser(sessionId string, userId string, permissions map[string]bool, db *mongo.Database) (*SessionUser, error) { // Ensure we have the full user ID, as our system was previously cutting the prefix // off of Auth0 user ids - userId := utils.FixUserId(jwtUser.UserID) + fixedUserId := utils.FixUserId(userId) - userDBItem, err := GetDBUser(userId, db) + userDBItem, err := GetDBUser(fixedUserId, db) if err != nil { return nil, err } - return makeSessionUser(userId, sessionId, jwtUser.Permissions, userDBItem, db) + return makeSessionUser(fixedUserId, sessionId, permissions, userDBItem, db) } // If we have a successful login and the user is not in our DB, we write a default record @@ -193,3 +193,14 @@ func GetCachedUserGroupViewership(userId string) ([]string, bool) { membership, ok := cachedUserGroupViewership[userId] return membership, ok } + +type UserImpersonationItem struct { + // The user id who is doing the impersonating + Id string `bson:"_id"` + + // The id of the user we're pretending to be + ImpersonatedId string + + // For ease of debugging, we don't "time it out" right now or anything... + TimeStampUnixSec uint32 +} diff --git a/api/ws/wsHelpers/sync-mongo-dump.go b/api/ws/wsHelpers/sync-mongo-dump.go new file mode 100644 index 00000000..f0c6399b --- /dev/null +++ b/api/ws/wsHelpers/sync-mongo-dump.go @@ -0,0 +1,96 @@ +package wsHelpers + +import ( + "fmt" + "os" + "path" + "strings" + + "github.com/mongodb/mongo-tools/common/options" + "github.com/mongodb/mongo-tools/mongodump" + "github.com/pixlise/core/v4/api/services" + "github.com/pixlise/core/v4/core/fileaccess" + "github.com/pixlise/core/v4/core/mongoDBConnection" +) + +var dataBackupLocalPath = "./backup" +var dataBackupS3Path = "DB" + +func MakeMongoDumpInstance(mongoDetails mongoDBConnection.MongoConnectionDetails, dbName string) *mongodump.MongoDump { + var toolOptions *options.ToolOptions + + ssl := options.SSL{} + auth := options.Auth{ + Username: mongoDetails.User, + Password: mongoDetails.Password, + } + + connection := &options.Connection{ + Host: mongoDetails.Host, + //Port: db.DefaultTestPort, + } + + // Trim excess + protocolPrefix := "mongodb://" + connection.Host = strings.TrimPrefix(connection.Host, protocolPrefix) + + toolOptions = &options.ToolOptions{ + SSL: &ssl, + Connection: connection, + Auth: &auth, + Verbosity: &options.Verbosity{}, + URI: &options.URI{}, + } + + toolOptions.Namespace = &options.Namespace{DB: dbName} + + outputOptions := &mongodump.OutputOptions{ + Out: dataBackupLocalPath, + Gzip: true, + //Archive: path.Join(dataBackupLocalPath, "archive.gzip"), + NumParallelCollections: 1, + //ExcludeCollections memoisation?? connecTokens?? + } + inputOptions := &mongodump.InputOptions{} + + //log.SetVerbosity(toolOptions.Verbosity) + + return &mongodump.MongoDump{ + ToolOptions: toolOptions, + InputOptions: inputOptions, + OutputOptions: outputOptions, + } +} + +func UploadArchive(svcs *services.APIServices) error { + svcs.Log.Infof("UploadArchive: Reading PIXLISE DB Dump files...") + + localFS := fileaccess.FSAccess{} + dbFiles, err := localFS.ListObjects(dataBackupLocalPath, "") + if err != nil { + return fmt.Errorf("Failed to list local DB dump files: %v", err) + } + + svcs.Log.Infof("Found %v DB Dump files...", len(dbFiles)) + + for _, dbFile := range dbFiles { + svcs.Log.Infof(" Uploading: %v...", dbFile) + + dbFilePath := path.Join(dataBackupLocalPath, dbFile) + dbFileBytes, err := os.ReadFile(dbFilePath) + if err != nil { + return fmt.Errorf("Failed to read local DB dump file: %v. Error: %v", dbFilePath, err) + } + + // Upload to bucket + dbFilePathRemote := path.Join(dataBackupS3Path, dbFile) + err = svcs.FS.WriteObject(svcs.Config.DataBackupBucket, dbFilePathRemote, dbFileBytes) + + if err != nil { + return fmt.Errorf("Failed to upload DB dump file: %v. Error: %v", dbFilePathRemote, err) + } + } + + svcs.Log.Infof("PIXLISE DB Dump write complete") + return nil +} diff --git a/api/ws/wsHelpers/sync-mongo-restore.go b/api/ws/wsHelpers/sync-mongo-restore.go new file mode 100644 index 00000000..355a425f --- /dev/null +++ b/api/ws/wsHelpers/sync-mongo-restore.go @@ -0,0 +1,116 @@ +package wsHelpers + +import ( + "fmt" + "path" + "strings" + + "github.com/mongodb/mongo-tools/common/options" + "github.com/mongodb/mongo-tools/mongorestore" + "github.com/pixlise/core/v4/api/services" + "github.com/pixlise/core/v4/core/fileaccess" + "github.com/pixlise/core/v4/core/mongoDBConnection" +) + +func MakeMongoRestoreInstance(mongoDetails mongoDBConnection.MongoConnectionDetails, restoreToDBName string, restoreFromDBName string) (*mongorestore.MongoRestore, error) { + var toolOptions *options.ToolOptions + + ssl := options.SSL{} + auth := options.Auth{ + Username: mongoDetails.User, + Password: mongoDetails.Password, + } + + connection := &options.Connection{ + Host: mongoDetails.Host, + //Port: db.DefaultTestPort, + } + + // Trim excess + protocolPrefix := "mongodb://" + connection.Host = strings.TrimPrefix(connection.Host, protocolPrefix) + + toolOptions = &options.ToolOptions{ + SSL: &ssl, + Connection: connection, + Auth: &auth, + Verbosity: &options.Verbosity{}, + URI: &options.URI{}, + } + + toolOptions.Namespace = &options.Namespace{DB: restoreToDBName} + + outputOptions := &mongorestore.OutputOptions{ + NumParallelCollections: 1, + NumInsertionWorkers: 1, + Drop: true, + NoIndexRestore: true, + } + + inputOptions := &mongorestore.InputOptions{ + Gzip: true, + //Archive: path.Join(dataBackupLocalPath, "archive.gzip"), + Directory: "./" + path.Join(dataBackupLocalPath, restoreFromDBName), + RestoreDBUsersAndRoles: false, + } + + nsOptions := &mongorestore.NSOptions{ + NSInclude: []string{"*"}, + //NSInclude: []string{"pixlise-prodv4-15-jul-2024.ownership"}, + NSFrom: []string{"pixlise-prodv4-15-jul-2024"}, + NSTo: []string{restoreToDBName}, + } + + //log.SetVerbosity(toolOptions.Verbosity) + + return mongorestore.New(mongorestore.Options{ + ToolOptions: toolOptions, + InputOptions: inputOptions, + OutputOptions: outputOptions, + NSOptions: nsOptions, + TargetDirectory: inputOptions.Directory, + }) +} + +func DownloadArchive(svcs *services.APIServices) (string, error) { + svcs.Log.Infof("Downloading PIXLISE DB Dump files...") + + remoteDBFiles, err := svcs.FS.ListObjects(svcs.Config.DataBackupBucket, dataBackupS3Path) + if err != nil { + return "", fmt.Errorf("Failed to list remote DB dump files: %v", err) + } + + svcs.Log.Infof("Found %v remote DB Dump files...", len(remoteDBFiles)) + + localFS := fileaccess.FSAccess{} + + dbName := "" + for _, dbFile := range remoteDBFiles { + svcs.Log.Infof(" Downloading: %v...", dbFile) + + dbFileBytes, err := svcs.FS.ReadObject(svcs.Config.DataBackupBucket, dbFile) + if err != nil { + return "", fmt.Errorf("Failed to download remote DB dump file: %v. Error: %v", dbFile, err) + } + + // Save locally + // Remove remote root dir + dbFilePathLocal := strings.TrimPrefix(dbFile, dataBackupS3Path+"/") + err = localFS.WriteObject(dataBackupLocalPath, dbFilePathLocal, dbFileBytes) + + if err != nil { + return "", fmt.Errorf("Failed to write local DB dump file: %v. Error: %v", dbFilePathLocal, err) + } + + // Save the first dir as the db name + if len(dbName) <= 0 { + parts := strings.Split(dbFile, "/") + if len(parts) > 1 { + dbName = parts[1] + } + } + } + + svcs.Log.Infof("PIXLISE DB Dump files downloaded") + return dbName, nil +} diff --git a/api/ws/wsHelpers/sync-mongo.go b/api/ws/wsHelpers/sync-mongo.go new file mode 100644 index 00000000..105ed470 --- /dev/null +++ b/api/ws/wsHelpers/sync-mongo.go @@ -0,0 +1,25 @@ +package wsHelpers + +import ( + "fmt" + "os" +) + +func ResetLocalMongoBackupDir() error { + os.RemoveAll("./backup") + err := os.Mkdir("./backup", 0750) + if err != nil { + return fmt.Errorf("PIXLISE Backup failed to create backup directory: %v", err) + } + + return nil +} + +func ClearLocalMongoArchive() error { + err := os.RemoveAll(dataBackupLocalPath) + if err != nil { + return fmt.Errorf("Failed to remove local DB archive files in: %v. Error; %v", dataBackupLocalPath, err) + } + + return nil +} diff --git a/api/ws/wsHelpers/sync-s3.go b/api/ws/wsHelpers/sync-s3.go new file mode 100644 index 00000000..13e5f71c --- /dev/null +++ b/api/ws/wsHelpers/sync-s3.go @@ -0,0 +1,232 @@ +package wsHelpers + +import ( + "context" + "fmt" + "path" + "strings" + + "github.com/pixlise/core/v4/api/dbCollections" + "github.com/pixlise/core/v4/api/filepaths" + "github.com/pixlise/core/v4/api/services" + "github.com/pixlise/core/v4/core/fileaccess" + "github.com/pixlise/core/v4/core/logger" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo/options" +) + +func SyncScans(svcs *services.APIServices) error { + ctx := context.TODO() + coll := svcs.MongoDB.Collection(dbCollections.ScansName) + + filter := bson.D{} + opts := options.Find().SetProjection(bson.M{"_id": true}) + + cursor, err := coll.Find(ctx, filter, opts) + if err != nil { + return err + } + + scanIds := []bson.M{} + err = cursor.All(context.TODO(), &scanIds) + if err != nil { + return err + } + + scanPaths := []string{} + for _, item := range scanIds { + id := item["_id"].(string) + scanPaths = append(scanPaths, path.Join(id, "dataset.bin")) + scanPaths = append(scanPaths, path.Join(id, "diffraction-db.bin")) + } + + return syncFiles(svcs.Config.DatasetsBucket, filepaths.DatasetScansRoot, scanPaths, svcs.Config.DataBackupBucket, filepaths.DatasetScansRoot, svcs.FS, svcs.Log) +} + +func SyncImages(svcs *services.APIServices) error { + ctx := context.TODO() + coll := svcs.MongoDB.Collection(dbCollections.ImagesName) + + filter := bson.D{} + opts := options.Find().SetProjection(bson.M{"_id": true}) + + cursor, err := coll.Find(ctx, filter, opts) + if err != nil { + return err + } + + items := []bson.M{} + err = cursor.All(context.TODO(), &items) + if err != nil { + return err + } + + imagePaths := []string{} + for _, item := range items { + imagePaths = append(imagePaths, item["_id"].(string)) + } + + return syncFiles(svcs.Config.DatasetsBucket, filepaths.DatasetImagesRoot, imagePaths, svcs.Config.DataBackupBucket, filepaths.DatasetImagesRoot, svcs.FS, svcs.Log) +} + +func SyncQuants(svcs *services.APIServices) error { + ctx := context.TODO() + coll := svcs.MongoDB.Collection(dbCollections.QuantificationsName) + + filter := bson.D{} + opts := options.Find().SetProjection(bson.M{"status.outputfilepath": true, "_id": true}) + + cursor, err := coll.Find(ctx, filter, opts) + if err != nil { + return err + } + + quantPaths := []string{} + + for cursor.Next(ctx) { + type QuantStatus struct { + OutputFilePath string + } + type QuantItem struct { + Id string `bson:"_id"` + Status QuantStatus + } + + item := QuantItem{} + err = cursor.Decode(&item) + if err != nil { + return err + } + + // Copying bin and csv files + p := path.Join(item.Status.OutputFilePath, item.Id) + + quantPaths = append(quantPaths, p+".bin") + quantPaths = append(quantPaths, p+".csv") + } + + relativeQuantFiles, err := makeRelativePaths(quantPaths, filepaths.RootQuantificationPath) + if err != nil { + return err + } + + return syncFiles(svcs.Config.UsersBucket, filepaths.RootQuantificationPath, relativeQuantFiles, svcs.Config.DataBackupBucket, filepaths.RootQuantificationPath, svcs.FS, svcs.Log) +} + +func RestoreScans(svcs *services.APIServices) error { + // List source files + scanFiles, err := svcs.FS.ListObjects(svcs.Config.DataBackupBucket, filepaths.DatasetScansRoot) + if err != nil { + return err + } + + // Make scans relative! + relativeScanFiles, err := makeRelativePaths(scanFiles, filepaths.DatasetScansRoot) + if err != nil { + return err + } + + return syncFiles(svcs.Config.DataBackupBucket, filepaths.DatasetScansRoot, relativeScanFiles, svcs.Config.DatasetsBucket, filepaths.DatasetScansRoot, svcs.FS, svcs.Log) +} + +func RestoreQuants(svcs *services.APIServices) error { + // List source files + quantFiles, err := svcs.FS.ListObjects(svcs.Config.DataBackupBucket, filepaths.RootQuantificationPath) + if err != nil { + return err + } + + relativeQuantFiles, err := makeRelativePaths(quantFiles, filepaths.RootQuantificationPath) + if err != nil { + return err + } + + return syncFiles( + svcs.Config.DataBackupBucket, + filepaths.RootQuantificationPath, + relativeQuantFiles, + svcs.Config.UsersBucket, + filepaths.RootQuantificationPath, + svcs.FS, + svcs.Log) +} + +func RestoreImages(svcs *services.APIServices) error { + // List source files + imageFiles, err := svcs.FS.ListObjects(svcs.Config.DataBackupBucket, filepaths.DatasetImagesRoot) + if err != nil { + return err + } + + relativeImageFiles, err := makeRelativePaths(imageFiles, filepaths.DatasetImagesRoot) + if err != nil { + return err + } + + return syncFiles(svcs.Config.DataBackupBucket, filepaths.DatasetImagesRoot, relativeImageFiles, svcs.Config.DatasetsBucket, filepaths.DatasetImagesRoot, svcs.FS, svcs.Log) +} + +func makeRelativePaths(fullPaths []string, root string) ([]string, error) { + relativeFiles := []string{} + for _, fullPath := range fullPaths { + if !strings.HasPrefix(fullPath, root+"/") { + return []string{}, fmt.Errorf("Path: %v is not relative to %v", fullPath, root) + } + + relativeFiles = append(relativeFiles, fullPath[len(root)+1:]) + } + + return relativeFiles, nil +} + +// Requires source bucket, source root with srcRelativePaths which are relative to source root. This way the relative paths +// can be compared to dest paths, and only the ones not already in dest root are copied. +func syncFiles(srcBucket string, srcRoot string, srcRelativePaths []string, destBucket string, destRoot string, fs fileaccess.FileAccess, log logger.ILogger) error { + // Get a listing from the destination + // NOTE: the returned paths contain destRoot at the start! + destFullFiles, err := fs.ListObjects(destBucket, destRoot) + if err != nil { + return err + } + + // Form a map, so we can see what's missing quickly + destFileLookup := map[string]bool{} + for _, f := range destFullFiles { + // Store dest file without root, so we can compare + if strings.HasPrefix(f, destRoot+"/") { + f = f[len(destRoot)+1:] + } + + destFileLookup[f] = true + } + + // Find which files haven't yet been copied across + toCopyRelativePaths := []string{} + for _, srcRelative := range srcRelativePaths { + if !destFileLookup[srcRelative] { + toCopyRelativePaths = append(toCopyRelativePaths, srcRelative) + } + } + + log.Infof(" Sync backup directory to %v: %v skipped (already at destination)...", destRoot, len(srcRelativePaths)-len(toCopyRelativePaths)) + + // Copy all the files + for c, relSrcPath := range toCopyRelativePaths { + if c%100 == 0 { + log.Infof(" Sync backup directory to %v: %v of %v copied...", destRoot, c, len(toCopyRelativePaths)) + } + + srcFullPath := path.Join(srcRoot, relSrcPath) + err = fs.CopyObject(srcBucket, srcFullPath, destBucket, path.Join(destRoot, relSrcPath)) + if err != nil { + if fs.IsNotFoundError(err) { + log.Errorf(" Sync backup source file not found: s3://%v/%v", srcBucket, srcFullPath) + } else { + log.Errorf(" Sync error reading read s3://%v/%v: %v", srcBucket, srcFullPath, err) + } + //return err + } + } + + return nil +} diff --git a/core/jwtparser/user-info.go b/core/jwtparser/user-info.go index fe62532d..6b63f97d 100644 --- a/core/jwtparser/user-info.go +++ b/core/jwtparser/user-info.go @@ -46,6 +46,7 @@ func (j RealJWTReader) GetValidator() JWTInterface { } // GetSimpleUserInfo - Get Simple User Info +// TODO: See note for GetUserInfo about user impersonation func (j RealJWTReader) GetSimpleUserInfo(r *http.Request) (JWTUserInfo, error) { result := JWTUserInfo{} @@ -83,6 +84,13 @@ func (j RealJWTReader) GetSimpleUserInfo(r *http.Request) (JWTUserInfo, error) { } // GetUserInfo - Get User Info +// TODO: When a user is impersonating another, this still returns the real users details +// +// from the JWT. This is unfortunate but seemed more effort than it's worth to fix +// because we'll mainly test with science team members who have similar auth0 +// permissions, similar groups, similar access to datasets. If we do encounter +// issues we can look at adding a map of userid->UserInfo structs containing the +// impersonated users details, and return that from here func (j RealJWTReader) GetUserInfo(r *http.Request) (JWTUserInfo, error) { result := JWTUserInfo{} diff --git a/core/mongoDBConnection/connect.go b/core/mongoDBConnection/connect.go index 3601fe6b..3b95978c 100644 --- a/core/mongoDBConnection/connect.go +++ b/core/mongoDBConnection/connect.go @@ -29,11 +29,17 @@ import ( // Helpers for connecting to Mongo DB // NOTE: we support remote, local and "test" connections as per https://medium.com/@victor.neuret/mocking-the-official-mongo-golang-driver-5aad5b226a78 +type MongoConnectionDetails struct { + Host string + User string + Password string +} + func Connect( sess *session.Session, // Can be nil for local connection mongoSecret string, // empty for local connection iLog logger.ILogger, -) (*mongo.Client, error) { +) (*mongo.Client, MongoConnectionDetails, error) { // If the secret is blank, assume we're connecting to a local DB with no auth if len(mongoSecret) <= 0 { // Connect to local mongo @@ -44,7 +50,7 @@ func Connect( // Get a session for the bucket region mongoConnectionInfo, err := getMongoConnectionInfoFromSecretCache(sess, mongoSecret) if err != nil { - return nil, fmt.Errorf("Failed to read mongo secret \"%v\" info from secrets cache: %v", mongoSecret, err) + return nil, MongoConnectionDetails{}, fmt.Errorf("Failed to read mongo secret \"%v\" info from secrets cache: %v", mongoSecret, err) } return connectToRemoteMongoDB( diff --git a/core/mongoDBConnection/local.go b/core/mongoDBConnection/local.go index acb1eb0e..91ba4762 100644 --- a/core/mongoDBConnection/local.go +++ b/core/mongoDBConnection/local.go @@ -31,7 +31,7 @@ import ( // Assumes local mongo running in docker as per this command: // docker run -d --name mongo-on-docker -p 27888:27017 -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=secret mongo -func connectToLocalMongoDB(log logger.ILogger) (*mongo.Client, error) { +func connectToLocalMongoDB(log logger.ILogger) (*mongo.Client, MongoConnectionDetails, error) { cmdMonitor := makeMongoCommandMonitor(log) log.Infof("Connecting to local mongo db...") @@ -42,18 +42,18 @@ func connectToLocalMongoDB(log logger.ILogger) (*mongo.Client, error) { //ctx := context.Background() client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(mongoUri).SetMonitor(cmdMonitor).SetDirect(true)) if err != nil { - return nil, fmt.Errorf("Failed to create new local mongo DB connection: %v", err) + return nil, MongoConnectionDetails{}, fmt.Errorf("Failed to create new local mongo DB connection: %v", err) } // Try to ping the DB to confirm connection var result bson.M err = client.Database("admin").RunCommand(context.TODO(), bson.D{{Key: "ping", Value: 1}}).Decode(&result) if err != nil { - return nil, err + return nil, MongoConnectionDetails{}, err } log.Infof("Successfully connected to local mongo db!") //defer client.Disconnect(ctx) - return client, nil + return client, MongoConnectionDetails{Host: mongoUri}, nil } diff --git a/core/mongoDBConnection/remote.go b/core/mongoDBConnection/remote.go index 55f244ed..5eaa577f 100644 --- a/core/mongoDBConnection/remote.go +++ b/core/mongoDBConnection/remote.go @@ -39,7 +39,7 @@ func connectToRemoteMongoDB( MongoUsername string, MongoPassword string, iLog logger.ILogger, -) (*mongo.Client, error) { +) (*mongo.Client, MongoConnectionDetails, error) { //ctx := context.Background() var err error var client *mongo.Client @@ -48,7 +48,7 @@ func connectToRemoteMongoDB( tlsConfig, err := getCustomTLSConfig("./global-bundle.pem") if err != nil { - return nil, fmt.Errorf("Failed getting TLS configuration: %v", err) + return nil, MongoConnectionDetails{}, fmt.Errorf("Failed getting TLS configuration: %v", err) } if strings.Contains(MongoEndpoint, "localhost") { @@ -77,20 +77,20 @@ func connectToRemoteMongoDB( })) if err != nil { - return nil, fmt.Errorf("Failed to create new mongo DB connection: %v", err) + return nil, MongoConnectionDetails{}, fmt.Errorf("Failed to create new mongo DB connection: %v", err) } // Try to ping the DB to confirm connection var result bson.M err = client.Database("admin").RunCommand(context.TODO(), bson.D{{Key: "ping", Value: 1}}).Decode(&result) if err != nil { - return nil, err + return nil, MongoConnectionDetails{}, err } iLog.Infof("Successfully connected to remote mongo db!") //defer client.Disconnect(ctx) - return client, nil + return client, MongoConnectionDetails{Host: connectionURI, User: MongoUsername, Password: MongoPassword}, nil } func getCustomTLSConfig(caFile string) (*tls.Config, error) { diff --git a/core/utils/random-string.go b/core/utils/random-string.go index 2ad9d9ad..10d3276c 100644 --- a/core/utils/random-string.go +++ b/core/utils/random-string.go @@ -21,7 +21,7 @@ import "math/rand" // Random string generation // https://stackoverflow.com/questions/22892120/how-to-generate-a-random-string-of-a-fixed-length-in-go -const letterBytes = "abcdefghijklmnopqrstuvwxyz1234567890" +const RandomStringChars = "abcdefghijklmnopqrstuvwxyz1234567890" const ( letterIdxBits = 6 // 6 bits to represent a letter index letterIdxMask = 1<>= letterIdxBits diff --git a/core/wstestlib/db.go b/core/wstestlib/db.go index e5ca4b4c..c32cff68 100644 --- a/core/wstestlib/db.go +++ b/core/wstestlib/db.go @@ -9,19 +9,23 @@ import ( var db *mongo.Database func GetDB() *mongo.Database { + return GetDBWithEnvironment("unittest") +} + +func GetDBWithEnvironment(envName string) *mongo.Database { if db == nil { // Connect to a local one ONLY logger := logger.StdOutLogger{} logger.SetLogLevel(2) - client, err := mongoDBConnection.Connect(nil, "", &logger) + client, _, err := mongoDBConnection.Connect(nil, "", &logger) if err != nil { // This meant it was hard to catch when it was failing because DB not running locally //log.Fatal(err) panic(err) } - dbName := mongoDBConnection.GetDatabaseName("pixlise", "unittest") + dbName := mongoDBConnection.GetDatabaseName("pixlise", envName) db = client.Database(dbName) } diff --git a/data-formats b/data-formats index 5bffd014..46c9eb23 160000 --- a/data-formats +++ b/data-formats @@ -1 +1 @@ -Subproject commit 5bffd014d03b95f99213d23dba9e301b9073f762 +Subproject commit 46c9eb23bfa21a0a10d198a3402cde93304fe3de diff --git a/generated-protos/screen-configuration-msgs.pb.go b/generated-protos/screen-configuration-msgs.pb.go index 0586c064..7582fc6e 100644 --- a/generated-protos/screen-configuration-msgs.pb.go +++ b/generated-protos/screen-configuration-msgs.pb.go @@ -27,6 +27,8 @@ type ScreenConfigurationListReq struct { unknownFields protoimpl.UnknownFields SearchParams *SearchParams `protobuf:"bytes,1,opt,name=searchParams,proto3" json:"searchParams,omitempty"` + // If this is set, only return configurations that are children of this workspace + SnapshotParentId string `protobuf:"bytes,2,opt,name=snapshotParentId,proto3" json:"snapshotParentId,omitempty"` } func (x *ScreenConfigurationListReq) Reset() { @@ -68,6 +70,13 @@ func (x *ScreenConfigurationListReq) GetSearchParams() *SearchParams { return nil } +func (x *ScreenConfigurationListReq) GetSnapshotParentId() string { + if x != nil { + return x.SnapshotParentId + } + return "" +} + type ScreenConfigurationListResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -424,51 +433,53 @@ var file_screen_configuration_msgs_proto_rawDesc = []byte{ 0x6f, 0x1a, 0x13, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2d, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0x4f, 0x0a, 0x1a, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, + 0x74, 0x6f, 0x22, 0x7b, 0x0a, 0x1a, 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, 0x12, 0x31, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x22, 0x67, 0x0a, 0x1b, 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, - 0x73, 0x70, 0x12, 0x48, 0x0a, 0x14, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x43, 0x0a, 0x19, - 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, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x61, - 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x61, 0x6e, 0x49, - 0x64, 0x22, 0x64, 0x0a, 0x1a, 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, 0x12, - 0x46, 0x0a, 0x13, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x53, + 0x61, 0x6d, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x50, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, + 0x67, 0x0a, 0x1b, 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, 0x73, 0x70, 0x12, 0x48, + 0x0a, 0x14, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x13, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7d, 0x0a, 0x1b, 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, 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, 0x46, - 0x0a, 0x13, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x53, 0x63, + 0x6f, 0x6e, 0x52, 0x14, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x43, 0x0a, 0x19, 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, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x61, 0x6e, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x61, 0x6e, 0x49, 0x64, 0x22, 0x64, 0x0a, + 0x1a, 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, 0x12, 0x46, 0x0a, 0x13, 0x73, + 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, + 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, + 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x7d, 0x0a, 0x1b, 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, 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, 0x46, 0x0a, 0x13, 0x73, 0x63, + 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x73, + 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x66, 0x0a, 0x1c, 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, 0x12, 0x46, 0x0a, 0x13, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2e, 0x0a, 0x1c, 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, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2f, 0x0a, 0x1d, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x13, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x66, 0x0a, 0x1c, 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, 0x12, 0x46, 0x0a, 0x13, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x73, 0x63, 0x72, 0x65, 0x65, - 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2e, - 0x0a, 0x1c, 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, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2f, - 0x0a, 0x1d, 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, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x42, - 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 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/screen-configuration.pb.go b/generated-protos/screen-configuration.pb.go index ab41d0f8..9afebe29 100644 --- a/generated-protos/screen-configuration.pb.go +++ b/generated-protos/screen-configuration.pb.go @@ -516,7 +516,8 @@ type ScreenConfiguration struct { Tags []string `protobuf:"bytes,7,rep,name=tags,proto3" json:"tags,omitempty"` ModifiedUnixSec uint32 `protobuf:"varint,8,opt,name=modifiedUnixSec,proto3" json:"modifiedUnixSec,omitempty"` ScanConfigurations map[string]*ScanConfiguration `protobuf:"bytes,9,rep,name=scanConfigurations,proto3" json:"scanConfigurations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Owner *OwnershipSummary `protobuf:"bytes,10,opt,name=owner,proto3" json:"owner,omitempty" bson:"-"` + Owner *OwnershipSummary `protobuf:"bytes,10,opt,name=owner,proto3" json:"owner,omitempty" bson:"-"` + SnapshotParentId string `protobuf:"bytes,14,opt,name=snapshotParentId,proto3" json:"snapshotParentId,omitempty" bson:"snapshotParentId,omitempty"` } func (x *ScreenConfiguration) Reset() { @@ -628,6 +629,13 @@ func (x *ScreenConfiguration) GetOwner() *OwnershipSummary { return nil } +func (x *ScreenConfiguration) GetSnapshotParentId() string { + if x != nil { + return x.SnapshotParentId + } + return "" +} + var File_screen_configuration_proto protoreflect.FileDescriptor var file_screen_configuration_proto_rawDesc = []byte{ @@ -698,7 +706,7 @@ var file_screen_configuration_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x63, 0x61, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x6f, - 0x75, 0x72, 0x22, 0xb8, 0x04, 0x0a, 0x13, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, + 0x75, 0x72, 0x22, 0xe4, 0x04, 0x0a, 0x13, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, @@ -728,14 +736,16 @@ var file_screen_configuration_proto_rawDesc = []byte{ 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x05, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x1a, 0x59, 0x0a, 0x17, 0x53, 0x63, 0x61, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 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, - 0x28, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 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, + 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x10, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x50, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x1a, 0x59, + 0x0a, 0x17, 0x53, 0x63, 0x61, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 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, 0x28, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x53, 0x63, 0x61, + 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 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 ( diff --git a/generated-protos/system.pb.go b/generated-protos/system.pb.go new file mode 100644 index 00000000..50105ad2 --- /dev/null +++ b/generated-protos/system.pb.go @@ -0,0 +1,499 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.30.0 +// protoc v3.19.4 +// source: system.proto + +package protos + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// requires(PIXLISE_ADMIN) +type BackupDBReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *BackupDBReq) Reset() { + *x = BackupDBReq{} + if protoimpl.UnsafeEnabled { + mi := &file_system_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BackupDBReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BackupDBReq) ProtoMessage() {} + +func (x *BackupDBReq) ProtoReflect() protoreflect.Message { + mi := &file_system_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 BackupDBReq.ProtoReflect.Descriptor instead. +func (*BackupDBReq) Descriptor() ([]byte, []int) { + return file_system_proto_rawDescGZIP(), []int{0} +} + +type BackupDBResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *BackupDBResp) Reset() { + *x = BackupDBResp{} + if protoimpl.UnsafeEnabled { + mi := &file_system_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BackupDBResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BackupDBResp) ProtoMessage() {} + +func (x *BackupDBResp) ProtoReflect() protoreflect.Message { + mi := &file_system_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 BackupDBResp.ProtoReflect.Descriptor instead. +func (*BackupDBResp) Descriptor() ([]byte, []int) { + return file_system_proto_rawDescGZIP(), []int{1} +} + +type BackupDBUpd struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *BackupDBUpd) Reset() { + *x = BackupDBUpd{} + if protoimpl.UnsafeEnabled { + mi := &file_system_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BackupDBUpd) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BackupDBUpd) ProtoMessage() {} + +func (x *BackupDBUpd) ProtoReflect() protoreflect.Message { + mi := &file_system_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 BackupDBUpd.ProtoReflect.Descriptor instead. +func (*BackupDBUpd) Descriptor() ([]byte, []int) { + return file_system_proto_rawDescGZIP(), []int{2} +} + +// requires(PIXLISE_ADMIN) +type RestoreDBReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *RestoreDBReq) Reset() { + *x = RestoreDBReq{} + if protoimpl.UnsafeEnabled { + mi := &file_system_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RestoreDBReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RestoreDBReq) ProtoMessage() {} + +func (x *RestoreDBReq) ProtoReflect() protoreflect.Message { + mi := &file_system_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 RestoreDBReq.ProtoReflect.Descriptor instead. +func (*RestoreDBReq) Descriptor() ([]byte, []int) { + return file_system_proto_rawDescGZIP(), []int{3} +} + +type RestoreDBResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *RestoreDBResp) Reset() { + *x = RestoreDBResp{} + if protoimpl.UnsafeEnabled { + mi := &file_system_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RestoreDBResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RestoreDBResp) ProtoMessage() {} + +func (x *RestoreDBResp) ProtoReflect() protoreflect.Message { + mi := &file_system_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 RestoreDBResp.ProtoReflect.Descriptor instead. +func (*RestoreDBResp) Descriptor() ([]byte, []int) { + return file_system_proto_rawDescGZIP(), []int{4} +} + +// requires(PIXLISE_ADMIN) +type DBAdminConfigGetReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *DBAdminConfigGetReq) Reset() { + *x = DBAdminConfigGetReq{} + if protoimpl.UnsafeEnabled { + mi := &file_system_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DBAdminConfigGetReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DBAdminConfigGetReq) ProtoMessage() {} + +func (x *DBAdminConfigGetReq) ProtoReflect() protoreflect.Message { + mi := &file_system_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 DBAdminConfigGetReq.ProtoReflect.Descriptor instead. +func (*DBAdminConfigGetReq) Descriptor() ([]byte, []int) { + return file_system_proto_rawDescGZIP(), []int{5} +} + +type DBAdminConfigGetResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CanBackup bool `protobuf:"varint,1,opt,name=canBackup,proto3" json:"canBackup,omitempty"` + BackupDestination string `protobuf:"bytes,2,opt,name=backupDestination,proto3" json:"backupDestination,omitempty"` + CanRestore bool `protobuf:"varint,3,opt,name=canRestore,proto3" json:"canRestore,omitempty"` + RestoreFrom string `protobuf:"bytes,4,opt,name=restoreFrom,proto3" json:"restoreFrom,omitempty"` + ImpersonateEnabled bool `protobuf:"varint,5,opt,name=impersonateEnabled,proto3" json:"impersonateEnabled,omitempty"` +} + +func (x *DBAdminConfigGetResp) Reset() { + *x = DBAdminConfigGetResp{} + if protoimpl.UnsafeEnabled { + mi := &file_system_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DBAdminConfigGetResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DBAdminConfigGetResp) ProtoMessage() {} + +func (x *DBAdminConfigGetResp) ProtoReflect() protoreflect.Message { + mi := &file_system_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 DBAdminConfigGetResp.ProtoReflect.Descriptor instead. +func (*DBAdminConfigGetResp) Descriptor() ([]byte, []int) { + return file_system_proto_rawDescGZIP(), []int{6} +} + +func (x *DBAdminConfigGetResp) GetCanBackup() bool { + if x != nil { + return x.CanBackup + } + return false +} + +func (x *DBAdminConfigGetResp) GetBackupDestination() string { + if x != nil { + return x.BackupDestination + } + return "" +} + +func (x *DBAdminConfigGetResp) GetCanRestore() bool { + if x != nil { + return x.CanRestore + } + return false +} + +func (x *DBAdminConfigGetResp) GetRestoreFrom() string { + if x != nil { + return x.RestoreFrom + } + return "" +} + +func (x *DBAdminConfigGetResp) GetImpersonateEnabled() bool { + if x != nil { + return x.ImpersonateEnabled + } + return false +} + +var File_system_proto protoreflect.FileDescriptor + +var file_system_proto_rawDesc = []byte{ + 0x0a, 0x0c, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x0d, + 0x0a, 0x0b, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x42, 0x52, 0x65, 0x71, 0x22, 0x0e, 0x0a, + 0x0c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x42, 0x52, 0x65, 0x73, 0x70, 0x22, 0x0d, 0x0a, + 0x0b, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x42, 0x55, 0x70, 0x64, 0x22, 0x0e, 0x0a, 0x0c, + 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x42, 0x52, 0x65, 0x71, 0x22, 0x0f, 0x0a, 0x0d, + 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x42, 0x52, 0x65, 0x73, 0x70, 0x22, 0x15, 0x0a, + 0x13, 0x44, 0x42, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x22, 0xd4, 0x01, 0x0a, 0x14, 0x44, 0x42, 0x41, 0x64, 0x6d, 0x69, 0x6e, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1c, 0x0a, + 0x09, 0x63, 0x61, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x63, 0x61, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x2c, 0x0a, 0x11, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x65, + 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x61, 0x6e, + 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, + 0x61, 0x6e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x2e, 0x0a, 0x12, 0x69, + 0x6d, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x6f, + 0x6e, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x42, 0x0a, 0x5a, 0x08, 0x2e, + 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_system_proto_rawDescOnce sync.Once + file_system_proto_rawDescData = file_system_proto_rawDesc +) + +func file_system_proto_rawDescGZIP() []byte { + file_system_proto_rawDescOnce.Do(func() { + file_system_proto_rawDescData = protoimpl.X.CompressGZIP(file_system_proto_rawDescData) + }) + return file_system_proto_rawDescData +} + +var file_system_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_system_proto_goTypes = []interface{}{ + (*BackupDBReq)(nil), // 0: BackupDBReq + (*BackupDBResp)(nil), // 1: BackupDBResp + (*BackupDBUpd)(nil), // 2: BackupDBUpd + (*RestoreDBReq)(nil), // 3: RestoreDBReq + (*RestoreDBResp)(nil), // 4: RestoreDBResp + (*DBAdminConfigGetReq)(nil), // 5: DBAdminConfigGetReq + (*DBAdminConfigGetResp)(nil), // 6: DBAdminConfigGetResp +} +var file_system_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 +} + +func init() { file_system_proto_init() } +func file_system_proto_init() { + if File_system_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_system_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BackupDBReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_system_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BackupDBResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_system_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BackupDBUpd); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_system_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RestoreDBReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_system_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RestoreDBResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_system_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DBAdminConfigGetReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_system_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DBAdminConfigGetResp); 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_system_proto_rawDesc, + NumEnums: 0, + NumMessages: 7, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_system_proto_goTypes, + DependencyIndexes: file_system_proto_depIdxs, + MessageInfos: file_system_proto_msgTypes, + }.Build() + File_system_proto = out.File + file_system_proto_rawDesc = nil + file_system_proto_goTypes = nil + file_system_proto_depIdxs = nil +} diff --git a/generated-protos/user-management-msgs.pb.go b/generated-protos/user-management-msgs.pb.go index 1d76081d..e7d66159 100644 --- a/generated-protos/user-management-msgs.pb.go +++ b/generated-protos/user-management-msgs.pb.go @@ -542,6 +542,191 @@ func (*UserDeleteRoleResp) Descriptor() ([]byte, []int) { return file_user_management_msgs_proto_rawDescGZIP(), []int{9} } +// requires(PIXLISE_ADMIN) +type UserImpersonateReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // "Become" the user with specified id. If this is blank, this session stops impersonating + UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"` +} + +func (x *UserImpersonateReq) Reset() { + *x = UserImpersonateReq{} + if protoimpl.UnsafeEnabled { + mi := &file_user_management_msgs_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserImpersonateReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserImpersonateReq) ProtoMessage() {} + +func (x *UserImpersonateReq) ProtoReflect() protoreflect.Message { + mi := &file_user_management_msgs_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserImpersonateReq.ProtoReflect.Descriptor instead. +func (*UserImpersonateReq) Descriptor() ([]byte, []int) { + return file_user_management_msgs_proto_rawDescGZIP(), []int{10} +} + +func (x *UserImpersonateReq) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +type UserImpersonateResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Returns the currently set user in this user session + SessionUser *UserInfo `protobuf:"bytes,1,opt,name=sessionUser,proto3" json:"sessionUser,omitempty"` +} + +func (x *UserImpersonateResp) Reset() { + *x = UserImpersonateResp{} + if protoimpl.UnsafeEnabled { + mi := &file_user_management_msgs_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserImpersonateResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserImpersonateResp) ProtoMessage() {} + +func (x *UserImpersonateResp) ProtoReflect() protoreflect.Message { + mi := &file_user_management_msgs_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserImpersonateResp.ProtoReflect.Descriptor instead. +func (*UserImpersonateResp) Descriptor() ([]byte, []int) { + return file_user_management_msgs_proto_rawDescGZIP(), []int{11} +} + +func (x *UserImpersonateResp) GetSessionUser() *UserInfo { + if x != nil { + return x.SessionUser + } + return nil +} + +// Allows querying if we're impersonating anyone +// requires(NONE) +type UserImpersonateGetReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *UserImpersonateGetReq) Reset() { + *x = UserImpersonateGetReq{} + if protoimpl.UnsafeEnabled { + mi := &file_user_management_msgs_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserImpersonateGetReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserImpersonateGetReq) ProtoMessage() {} + +func (x *UserImpersonateGetReq) ProtoReflect() protoreflect.Message { + mi := &file_user_management_msgs_proto_msgTypes[12] + 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 UserImpersonateGetReq.ProtoReflect.Descriptor instead. +func (*UserImpersonateGetReq) Descriptor() ([]byte, []int) { + return file_user_management_msgs_proto_rawDescGZIP(), []int{12} +} + +type UserImpersonateGetResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Returns the currently set user in this user session + SessionUser *UserInfo `protobuf:"bytes,1,opt,name=sessionUser,proto3" json:"sessionUser,omitempty"` +} + +func (x *UserImpersonateGetResp) Reset() { + *x = UserImpersonateGetResp{} + if protoimpl.UnsafeEnabled { + mi := &file_user_management_msgs_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserImpersonateGetResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserImpersonateGetResp) ProtoMessage() {} + +func (x *UserImpersonateGetResp) ProtoReflect() protoreflect.Message { + mi := &file_user_management_msgs_proto_msgTypes[13] + 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 UserImpersonateGetResp.ProtoReflect.Descriptor instead. +func (*UserImpersonateGetResp) Descriptor() ([]byte, []int) { + return file_user_management_msgs_proto_rawDescGZIP(), []int{13} +} + +func (x *UserImpersonateGetResp) GetSessionUser() *UserInfo { + if x != nil { + return x.SessionUser + } + return nil +} + var File_user_management_msgs_proto protoreflect.FileDescriptor var file_user_management_msgs_proto_rawDesc = []byte{ @@ -580,8 +765,22 @@ var file_user_management_msgs_proto_rawDesc = []byte{ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0a, 0x5a, 0x08, 0x2e, - 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x2c, 0x0a, 0x12, 0x55, + 0x73, 0x65, 0x72, 0x49, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x42, 0x0a, 0x13, 0x55, 0x73, 0x65, + 0x72, 0x49, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x2b, 0x0a, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x22, 0x17, 0x0a, + 0x15, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x74, 0x65, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x22, 0x45, 0x0a, 0x16, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6d, + 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x74, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x2b, 0x0a, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x0b, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x42, 0x0a, 0x5a, + 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -596,30 +795,37 @@ func file_user_management_msgs_proto_rawDescGZIP() []byte { return file_user_management_msgs_proto_rawDescData } -var file_user_management_msgs_proto_msgTypes = make([]protoimpl.MessageInfo, 10) +var file_user_management_msgs_proto_msgTypes = make([]protoimpl.MessageInfo, 14) var file_user_management_msgs_proto_goTypes = []interface{}{ - (*UserListReq)(nil), // 0: UserListReq - (*UserListResp)(nil), // 1: UserListResp - (*UserRoleListReq)(nil), // 2: UserRoleListReq - (*UserRoleListResp)(nil), // 3: UserRoleListResp - (*UserRolesListReq)(nil), // 4: UserRolesListReq - (*UserRolesListResp)(nil), // 5: UserRolesListResp - (*UserAddRoleReq)(nil), // 6: UserAddRoleReq - (*UserAddRoleResp)(nil), // 7: UserAddRoleResp - (*UserDeleteRoleReq)(nil), // 8: UserDeleteRoleReq - (*UserDeleteRoleResp)(nil), // 9: UserDeleteRoleResp - (*Auth0UserDetails)(nil), // 10: Auth0UserDetails - (*Auth0UserRole)(nil), // 11: Auth0UserRole + (*UserListReq)(nil), // 0: UserListReq + (*UserListResp)(nil), // 1: UserListResp + (*UserRoleListReq)(nil), // 2: UserRoleListReq + (*UserRoleListResp)(nil), // 3: UserRoleListResp + (*UserRolesListReq)(nil), // 4: UserRolesListReq + (*UserRolesListResp)(nil), // 5: UserRolesListResp + (*UserAddRoleReq)(nil), // 6: UserAddRoleReq + (*UserAddRoleResp)(nil), // 7: UserAddRoleResp + (*UserDeleteRoleReq)(nil), // 8: UserDeleteRoleReq + (*UserDeleteRoleResp)(nil), // 9: UserDeleteRoleResp + (*UserImpersonateReq)(nil), // 10: UserImpersonateReq + (*UserImpersonateResp)(nil), // 11: UserImpersonateResp + (*UserImpersonateGetReq)(nil), // 12: UserImpersonateGetReq + (*UserImpersonateGetResp)(nil), // 13: UserImpersonateGetResp + (*Auth0UserDetails)(nil), // 14: Auth0UserDetails + (*Auth0UserRole)(nil), // 15: Auth0UserRole + (*UserInfo)(nil), // 16: UserInfo } var file_user_management_msgs_proto_depIdxs = []int32{ - 10, // 0: UserListResp.details:type_name -> Auth0UserDetails - 11, // 1: UserRoleListResp.roles:type_name -> Auth0UserRole - 11, // 2: UserRolesListResp.roles:type_name -> Auth0UserRole - 3, // [3:3] is the sub-list for method output_type - 3, // [3:3] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name + 14, // 0: UserListResp.details:type_name -> Auth0UserDetails + 15, // 1: UserRoleListResp.roles:type_name -> Auth0UserRole + 15, // 2: UserRolesListResp.roles:type_name -> Auth0UserRole + 16, // 3: UserImpersonateResp.sessionUser:type_name -> UserInfo + 16, // 4: UserImpersonateGetResp.sessionUser:type_name -> UserInfo + 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_user_management_msgs_proto_init() } @@ -749,6 +955,54 @@ func file_user_management_msgs_proto_init() { return nil } } + file_user_management_msgs_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserImpersonateReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_user_management_msgs_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserImpersonateResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_user_management_msgs_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserImpersonateGetReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_user_management_msgs_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserImpersonateGetResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_user_management_msgs_proto_msgTypes[0].OneofWrappers = []interface{}{ (*UserListReq_RoleId)(nil), @@ -761,7 +1015,7 @@ func file_user_management_msgs_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_user_management_msgs_proto_rawDesc, NumEnums: 0, - NumMessages: 10, + NumMessages: 14, NumExtensions: 0, NumServices: 0, }, diff --git a/generated-protos/websocket.pb.go b/generated-protos/websocket.pb.go index 1d9983f6..4192a90c 100644 --- a/generated-protos/websocket.pb.go +++ b/generated-protos/websocket.pb.go @@ -104,6 +104,11 @@ type WSMessage struct { ErrorText string `protobuf:"bytes,3,opt,name=errorText,proto3" json:"errorText,omitempty"` // Types that are assignable to Contents: // + // *WSMessage_BackupDBReq + // *WSMessage_BackupDBResp + // *WSMessage_BackupDBUpd + // *WSMessage_DBAdminConfigGetReq + // *WSMessage_DBAdminConfigGetResp // *WSMessage_DataModuleAddVersionReq // *WSMessage_DataModuleAddVersionResp // *WSMessage_DataModuleGetReq @@ -267,6 +272,8 @@ type WSMessage struct { // *WSMessage_RegionOfInterestListResp // *WSMessage_RegionOfInterestWriteReq // *WSMessage_RegionOfInterestWriteResp + // *WSMessage_RestoreDBReq + // *WSMessage_RestoreDBResp // *WSMessage_RunTestReq // *WSMessage_RunTestResp // *WSMessage_ScanAutoShareReq @@ -362,6 +369,10 @@ type WSMessage struct { // *WSMessage_UserGroupListResp // *WSMessage_UserGroupReq // *WSMessage_UserGroupResp + // *WSMessage_UserImpersonateGetReq + // *WSMessage_UserImpersonateGetResp + // *WSMessage_UserImpersonateReq + // *WSMessage_UserImpersonateResp // *WSMessage_UserListReq // *WSMessage_UserListResp // *WSMessage_UserNotificationSettingsReq @@ -444,6 +455,41 @@ func (m *WSMessage) GetContents() isWSMessage_Contents { return nil } +func (x *WSMessage) GetBackupDBReq() *BackupDBReq { + if x, ok := x.GetContents().(*WSMessage_BackupDBReq); ok { + return x.BackupDBReq + } + return nil +} + +func (x *WSMessage) GetBackupDBResp() *BackupDBResp { + if x, ok := x.GetContents().(*WSMessage_BackupDBResp); ok { + return x.BackupDBResp + } + return nil +} + +func (x *WSMessage) GetBackupDBUpd() *BackupDBUpd { + if x, ok := x.GetContents().(*WSMessage_BackupDBUpd); ok { + return x.BackupDBUpd + } + return nil +} + +func (x *WSMessage) GetDBAdminConfigGetReq() *DBAdminConfigGetReq { + if x, ok := x.GetContents().(*WSMessage_DBAdminConfigGetReq); ok { + return x.DBAdminConfigGetReq + } + return nil +} + +func (x *WSMessage) GetDBAdminConfigGetResp() *DBAdminConfigGetResp { + if x, ok := x.GetContents().(*WSMessage_DBAdminConfigGetResp); ok { + return x.DBAdminConfigGetResp + } + return nil +} + func (x *WSMessage) GetDataModuleAddVersionReq() *DataModuleAddVersionReq { if x, ok := x.GetContents().(*WSMessage_DataModuleAddVersionReq); ok { return x.DataModuleAddVersionReq @@ -1585,6 +1631,20 @@ func (x *WSMessage) GetRegionOfInterestWriteResp() *RegionOfInterestWriteResp { return nil } +func (x *WSMessage) GetRestoreDBReq() *RestoreDBReq { + if x, ok := x.GetContents().(*WSMessage_RestoreDBReq); ok { + return x.RestoreDBReq + } + return nil +} + +func (x *WSMessage) GetRestoreDBResp() *RestoreDBResp { + if x, ok := x.GetContents().(*WSMessage_RestoreDBResp); ok { + return x.RestoreDBResp + } + return nil +} + func (x *WSMessage) GetRunTestReq() *RunTestReq { if x, ok := x.GetContents().(*WSMessage_RunTestReq); ok { return x.RunTestReq @@ -2250,6 +2310,34 @@ func (x *WSMessage) GetUserGroupResp() *UserGroupResp { return nil } +func (x *WSMessage) GetUserImpersonateGetReq() *UserImpersonateGetReq { + if x, ok := x.GetContents().(*WSMessage_UserImpersonateGetReq); ok { + return x.UserImpersonateGetReq + } + return nil +} + +func (x *WSMessage) GetUserImpersonateGetResp() *UserImpersonateGetResp { + if x, ok := x.GetContents().(*WSMessage_UserImpersonateGetResp); ok { + return x.UserImpersonateGetResp + } + return nil +} + +func (x *WSMessage) GetUserImpersonateReq() *UserImpersonateReq { + if x, ok := x.GetContents().(*WSMessage_UserImpersonateReq); ok { + return x.UserImpersonateReq + } + return nil +} + +func (x *WSMessage) GetUserImpersonateResp() *UserImpersonateResp { + if x, ok := x.GetContents().(*WSMessage_UserImpersonateResp); ok { + return x.UserImpersonateResp + } + return nil +} + func (x *WSMessage) GetUserListReq() *UserListReq { if x, ok := x.GetContents().(*WSMessage_UserListReq); ok { return x.UserListReq @@ -2387,6 +2475,26 @@ type isWSMessage_Contents interface { isWSMessage_Contents() } +type WSMessage_BackupDBReq struct { + BackupDBReq *BackupDBReq `protobuf:"bytes,311,opt,name=backupDBReq,proto3,oneof"` +} + +type WSMessage_BackupDBResp struct { + BackupDBResp *BackupDBResp `protobuf:"bytes,312,opt,name=backupDBResp,proto3,oneof"` +} + +type WSMessage_BackupDBUpd struct { + BackupDBUpd *BackupDBUpd `protobuf:"bytes,313,opt,name=backupDBUpd,proto3,oneof"` +} + +type WSMessage_DBAdminConfigGetReq struct { + DBAdminConfigGetReq *DBAdminConfigGetReq `protobuf:"bytes,314,opt,name=dBAdminConfigGetReq,proto3,oneof"` +} + +type WSMessage_DBAdminConfigGetResp struct { + DBAdminConfigGetResp *DBAdminConfigGetResp `protobuf:"bytes,315,opt,name=dBAdminConfigGetResp,proto3,oneof"` +} + type WSMessage_DataModuleAddVersionReq struct { DataModuleAddVersionReq *DataModuleAddVersionReq `protobuf:"bytes,198,opt,name=dataModuleAddVersionReq,proto3,oneof"` } @@ -3039,6 +3147,14 @@ type WSMessage_RegionOfInterestWriteResp struct { RegionOfInterestWriteResp *RegionOfInterestWriteResp `protobuf:"bytes,94,opt,name=regionOfInterestWriteResp,proto3,oneof"` } +type WSMessage_RestoreDBReq struct { + RestoreDBReq *RestoreDBReq `protobuf:"bytes,316,opt,name=restoreDBReq,proto3,oneof"` +} + +type WSMessage_RestoreDBResp struct { + RestoreDBResp *RestoreDBResp `protobuf:"bytes,317,opt,name=restoreDBResp,proto3,oneof"` +} + type WSMessage_RunTestReq struct { RunTestReq *RunTestReq `protobuf:"bytes,95,opt,name=runTestReq,proto3,oneof"` } @@ -3419,6 +3535,22 @@ type WSMessage_UserGroupResp struct { UserGroupResp *UserGroupResp `protobuf:"bytes,189,opt,name=userGroupResp,proto3,oneof"` } +type WSMessage_UserImpersonateGetReq struct { + UserImpersonateGetReq *UserImpersonateGetReq `protobuf:"bytes,309,opt,name=userImpersonateGetReq,proto3,oneof"` +} + +type WSMessage_UserImpersonateGetResp struct { + UserImpersonateGetResp *UserImpersonateGetResp `protobuf:"bytes,310,opt,name=userImpersonateGetResp,proto3,oneof"` +} + +type WSMessage_UserImpersonateReq struct { + UserImpersonateReq *UserImpersonateReq `protobuf:"bytes,307,opt,name=userImpersonateReq,proto3,oneof"` +} + +type WSMessage_UserImpersonateResp struct { + UserImpersonateResp *UserImpersonateResp `protobuf:"bytes,308,opt,name=userImpersonateResp,proto3,oneof"` +} + type WSMessage_UserListReq struct { UserListReq *UserListReq `protobuf:"bytes,138,opt,name=userListReq,proto3,oneof"` } @@ -3495,6 +3627,16 @@ type WSMessage_ZenodoDOIGetResp struct { ZenodoDOIGetResp *ZenodoDOIGetResp `protobuf:"bytes,241,opt,name=zenodoDOIGetResp,proto3,oneof"` } +func (*WSMessage_BackupDBReq) isWSMessage_Contents() {} + +func (*WSMessage_BackupDBResp) isWSMessage_Contents() {} + +func (*WSMessage_BackupDBUpd) isWSMessage_Contents() {} + +func (*WSMessage_DBAdminConfigGetReq) isWSMessage_Contents() {} + +func (*WSMessage_DBAdminConfigGetResp) isWSMessage_Contents() {} + func (*WSMessage_DataModuleAddVersionReq) isWSMessage_Contents() {} func (*WSMessage_DataModuleAddVersionResp) isWSMessage_Contents() {} @@ -3821,6 +3963,10 @@ func (*WSMessage_RegionOfInterestWriteReq) isWSMessage_Contents() {} func (*WSMessage_RegionOfInterestWriteResp) isWSMessage_Contents() {} +func (*WSMessage_RestoreDBReq) isWSMessage_Contents() {} + +func (*WSMessage_RestoreDBResp) isWSMessage_Contents() {} + func (*WSMessage_RunTestReq) isWSMessage_Contents() {} func (*WSMessage_RunTestResp) isWSMessage_Contents() {} @@ -4011,6 +4157,14 @@ func (*WSMessage_UserGroupReq) isWSMessage_Contents() {} func (*WSMessage_UserGroupResp) isWSMessage_Contents() {} +func (*WSMessage_UserImpersonateGetReq) isWSMessage_Contents() {} + +func (*WSMessage_UserImpersonateGetResp) isWSMessage_Contents() {} + +func (*WSMessage_UserImpersonateReq) isWSMessage_Contents() {} + +func (*WSMessage_UserImpersonateResp) isWSMessage_Contents() {} + func (*WSMessage_UserListReq) isWSMessage_Contents() {} func (*WSMessage_UserListResp) isWSMessage_Contents() {} @@ -4127,1381 +4281,1428 @@ 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, 0xb4, 0xaa, 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, - 0x0e, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x12, 0x55, 0x0a, 0x17, 0x64, 0x61, 0x74, 0x61, - 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x18, 0xc6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, - 0x58, 0x0a, 0x18, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x41, 0x64, 0x64, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0xc7, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x41, - 0x64, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, - 0x18, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3f, 0x0a, 0x10, 0x64, 0x61, 0x74, - 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x42, 0x0a, 0x11, 0x64, 0x61, - 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x64, 0x61, 0x74, - 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x42, - 0x0a, 0x11, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x44, 0x61, 0x74, 0x61, - 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, - 0x11, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x12, 0x45, 0x0a, 0x12, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x12, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x45, 0x0a, 0x12, 0x64, 0x61, 0x74, - 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x64, 0x61, - 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x12, 0x48, 0x0a, 0x13, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x44, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x13, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x1b, 0x64, 0x65, - 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x18, 0xe0, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x69, 0x66, 0x66, 0x72, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, - 0x52, 0x1b, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x12, 0x64, 0x0a, - 0x1c, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, 0xe1, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, - 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1c, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, - 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x15, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x82, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x15, 0x64, - 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x12, 0x52, 0x0a, 0x16, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x83, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, - 0x52, 0x16, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x42, 0x0a, 0x11, 0x64, 0x65, 0x74, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, 0x74, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x12, 0x45, 0x0a, 0x12, - 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, - 0x12, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x69, 0x0a, 0x1e, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x44, 0x69, - 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, - 0x75, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1e, - 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, - 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x6c, - 0x0a, 0x1f, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, - 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, + 0x61, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0c, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x90, 0xb0, 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, 0x0e, 0x32, + 0x0f, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x54, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x12, 0x31, 0x0a, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x44, 0x42, 0x52, 0x65, 0x71, 0x18, 0xb7, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x42, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x62, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x44, 0x42, 0x52, 0x65, 0x71, 0x12, 0x34, 0x0a, 0x0c, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x44, 0x42, 0x52, 0x65, 0x73, 0x70, 0x18, 0xb8, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x42, 0x52, 0x65, 0x73, 0x70, 0x48, + 0x00, 0x52, 0x0c, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x42, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x31, 0x0a, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x42, 0x55, 0x70, 0x64, 0x18, 0xb9, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x42, + 0x55, 0x70, 0x64, 0x48, 0x00, 0x52, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x44, 0x42, 0x55, + 0x70, 0x64, 0x12, 0x49, 0x0a, 0x13, 0x64, 0x42, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0xba, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x44, 0x42, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x13, 0x64, 0x42, 0x41, 0x64, 0x6d, 0x69, + 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x4c, 0x0a, + 0x14, 0x64, 0x42, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xbb, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x44, + 0x42, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x14, 0x64, 0x42, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x55, 0x0a, 0x17, 0x64, + 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x18, 0xc6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x44, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x64, 0x61, 0x74, 0x61, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x12, 0x58, 0x0a, 0x18, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0xc7, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x48, 0x00, 0x52, 0x18, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x41, 0x64, + 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3f, 0x0a, 0x10, + 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x64, 0x61, 0x74, + 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x42, 0x0a, + 0x11, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, + 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x42, 0x0a, 0x11, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x44, + 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x48, 0x00, 0x52, 0x11, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x45, 0x0a, 0x12, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x12, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x45, 0x0a, 0x12, + 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, + 0x12, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x12, 0x48, 0x0a, 0x13, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x57, 0x72, 0x69, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x13, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, + 0x1b, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x18, 0xe0, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x69, + 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x73, 0x52, 0x65, + 0x71, 0x48, 0x00, 0x52, 0x1b, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x69, 0x66, + 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x73, 0x52, 0x65, 0x71, + 0x12, 0x64, 0x0a, 0x1c, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x44, 0x69, 0x66, 0x66, + 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x18, 0xe1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, + 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1c, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, + 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x15, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, + 0x82, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, + 0x52, 0x15, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x52, 0x0a, 0x16, 0x64, 0x65, 0x74, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x18, 0x83, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x48, 0x00, 0x52, 0x16, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x42, 0x0a, 0x11, 0x64, + 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, + 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x12, + 0x45, 0x0a, 0x12, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x44, 0x65, + 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x48, 0x00, 0x52, 0x12, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x69, 0x0a, 0x1e, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1f, 0x64, 0x69, 0x66, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, + 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, + 0x00, 0x52, 0x1e, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, + 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x12, 0x6c, 0x0a, 0x1f, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, - 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x69, 0x0a, 0x1e, + 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1f, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, - 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x18, 0x16, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x65, - 0x72, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1e, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x49, 0x6e, - 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x12, 0x6c, 0x0a, 0x1f, 0x64, 0x69, 0x66, 0x66, 0x72, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, - 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, + 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x69, 0x0a, 0x1e, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x48, 0x00, 0x52, 0x1f, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x65, 0x72, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x63, 0x0a, 0x1c, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x44, 0x69, - 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, - 0x75, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1c, 0x64, 0x69, - 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, - 0x75, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x66, 0x0a, 0x1d, 0x64, 0x69, + 0x71, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x49, + 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1e, 0x64, 0x69, 0x66, 0x66, + 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, + 0x6c, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x71, 0x12, 0x6c, 0x0a, 0x1f, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, - 0x75, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x15, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x48, 0x00, 0x52, 0x1d, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x69, 0x0a, 0x1e, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x44, 0x69, 0x66, - 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1e, 0x64, - 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x6c, 0x0a, - 0x1f, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, + 0x75, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x17, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x65, 0x72, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1f, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x49, 0x6e, + 0x73, 0x65, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x63, 0x0a, 0x1c, 0x64, 0x69, 0x66, 0x66, + 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, + 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, + 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, + 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, + 0x1c, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, + 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x66, 0x0a, + 0x1d, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, + 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x15, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1d, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x69, 0x0a, 0x1e, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1f, 0x64, 0x69, 0x66, 0x66, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, + 0x52, 0x1e, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, + 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x12, 0x6c, 0x0a, 0x1f, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x63, 0x0a, 0x1c, 0x64, + 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1f, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x1a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, - 0x48, 0x00, 0x52, 0x1c, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, - 0x12, 0x66, 0x0a, 0x1d, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1d, 0x64, 0x69, 0x66, 0x66, 0x72, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x66, 0x0a, 0x1d, 0x64, 0x69, 0x66, 0x66, - 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, - 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, - 0x00, 0x52, 0x1d, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, - 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x12, 0x69, 0x0a, 0x1e, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1e, 0x64, 0x69, 0x66, + 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x63, + 0x0a, 0x1c, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, + 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x1a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1c, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x12, 0x66, 0x0a, 0x1d, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x48, 0x0a, 0x13, 0x65, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x53, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, - 0x52, 0x13, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x4b, 0x0a, 0x14, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x53, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x1f, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x14, 0x65, 0x6c, + 0x75, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1d, 0x64, 0x69, + 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x66, 0x0a, 0x1d, 0x64, + 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x1c, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x48, 0x00, 0x52, 0x1d, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x12, 0x69, 0x0a, 0x1e, 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x44, 0x69, + 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1e, + 0x64, 0x69, 0x66, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x61, 0x6b, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x48, + 0x0a, 0x13, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x3f, 0x0a, 0x10, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x45, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, - 0x00, 0x52, 0x10, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x71, 0x12, 0x42, 0x0a, 0x11, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, - 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x42, 0x0a, 0x11, 0x65, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x53, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x22, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x11, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x53, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x45, 0x0a, 0x12, 0x65, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x53, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x12, - 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x45, 0x0a, 0x12, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, - 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x48, 0x0a, 0x13, 0x65, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x13, + 0x71, 0x48, 0x00, 0x52, 0x13, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x4b, 0x0a, 0x14, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x53, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, + 0x14, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3f, 0x0a, 0x10, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x53, 0x65, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x42, 0x0a, 0x11, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x53, 0x65, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x21, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x53, 0x65, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x42, 0x0a, 0x11, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, + 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, + 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x11, 0x65, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x45, + 0x0a, 0x12, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x45, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, + 0x00, 0x52, 0x12, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x45, 0x0a, 0x12, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x24, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x48, 0x0a, 0x13, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x6c, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x45, 0x78, - 0x70, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, - 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x3c, - 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, - 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0f, 0x65, 0x78, 0x70, - 0x6f, 0x72, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x48, 0x0a, 0x13, - 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x45, 0x78, 0x70, 0x72, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, - 0x00, 0x52, 0x13, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x4b, 0x0a, 0x14, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x29, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x14, 0x65, + 0x65, 0x73, 0x70, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x45, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, + 0x00, 0x52, 0x13, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x57, 0x72, 0x69, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, + 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, + 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x48, + 0x00, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x12, 0x3c, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x45, 0x78, 0x70, + 0x6f, 0x72, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0f, + 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x48, 0x0a, 0x13, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x6d, 0x0a, 0x1f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0xa0, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, - 0x00, 0x52, 0x1f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, + 0x65, 0x71, 0x48, 0x00, 0x52, 0x13, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x4b, 0x0a, 0x14, 0x65, 0x78, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, + 0x52, 0x14, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6d, 0x0a, 0x1f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0xa0, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x12, 0x70, 0x0a, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x65, 0x71, 0x48, 0x00, 0x52, 0x1f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xa1, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 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, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x73, 0x0a, 0x21, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xa2, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 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, 0x21, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x76, 0x0a, 0x22, 0x65, 0x78, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 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, - 0xa3, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x70, 0x0a, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 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, 0x22, 0x65, - 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 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, 0x3f, 0x0a, 0x10, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x45, 0x78, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, - 0x52, 0x10, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x12, 0x42, 0x0a, 0x11, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x48, 0x00, 0x52, 0x11, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x57, 0x0a, 0x18, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, + 0x67, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xa1, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 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, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x73, 0x0a, 0x21, 0x65, 0x78, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xa2, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 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, 0x21, 0x65, 0x78, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x76, 0x0a, 0x22, + 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 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, 0xa3, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x45, 0x78, 0x70, 0x72, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 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, 0x22, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 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, 0x3f, 0x0a, 0x10, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x48, 0x00, 0x52, 0x10, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x42, 0x0a, 0x11, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x57, 0x0a, 0x18, 0x65, 0x78, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x45, 0x78, + 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, - 0x5a, 0x0a, 0x19, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x2b, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, - 0x52, 0x19, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x15, 0x65, - 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x18, 0xb0, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x45, 0x78, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x15, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x52, 0x0a, 0x16, - 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xb1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x16, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x51, 0x0a, 0x16, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, + 0x65, 0x71, 0x12, 0x5a, 0x0a, 0x19, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, + 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x48, 0x00, 0x52, 0x19, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, + 0x0a, 0x15, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0xb0, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x15, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, + 0x52, 0x0a, 0x16, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xb1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x16, 0x65, 0x78, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x12, 0x54, 0x0a, 0x17, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x2d, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, - 0x52, 0x17, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x54, 0x0a, 0x17, 0x65, 0x78, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x45, 0x78, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, - 0x57, 0x0a, 0x18, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x2f, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x18, + 0x75, 0x70, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x16, 0x65, 0x78, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x51, 0x0a, 0x16, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x2c, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x16, + 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x54, 0x0a, 0x17, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x48, 0x00, 0x52, 0x17, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x54, 0x0a, 0x17, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x42, 0x0a, 0x11, 0x65, 0x78, 0x70, 0x72, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x30, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x11, 0x65, 0x78, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x45, 0x0a, 0x12, - 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, - 0x12, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x5d, 0x0a, 0x1a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, - 0x71, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x53, 0x74, 0x61, - 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x53, 0x74, 0x61, 0x74, 0x52, - 0x65, 0x71, 0x12, 0x60, 0x0a, 0x1b, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, + 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x57, + 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x65, 0x78, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x12, 0x57, 0x0a, 0x18, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x2f, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, + 0x00, 0x52, 0x18, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x42, 0x0a, 0x11, 0x65, + 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x18, 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x11, 0x65, 0x78, + 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, + 0x45, 0x0a, 0x12, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x31, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x45, 0x78, + 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x48, 0x00, 0x52, 0x12, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5d, 0x0a, 0x1a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x53, 0x74, 0x61, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1b, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x45, 0x78, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, + 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1a, 0x65, 0x78, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x53, 0x74, + 0x61, 0x74, 0x52, 0x65, 0x71, 0x12, 0x60, 0x0a, 0x1b, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x53, 0x74, 0x61, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x45, 0x0a, 0x12, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x48, 0x0a, 0x13, 0x65, - 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x18, 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, - 0x52, 0x13, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x0f, 0x67, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, - 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x18, 0xac, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, - 0x71, 0x48, 0x00, 0x52, 0x0f, 0x67, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, - 0x70, 0x52, 0x65, 0x71, 0x12, 0x40, 0x0a, 0x10, 0x67, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, - 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, 0x64, 0x0a, 0x1c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x42, + 0x52, 0x65, 0x73, 0x70, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x45, 0x78, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, + 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1b, 0x65, 0x78, 0x70, 0x72, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x45, 0x78, 0x65, 0x63, 0x53, + 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x45, 0x0a, 0x12, 0x65, 0x78, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x36, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x65, 0x78, 0x70, 0x72, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x48, + 0x0a, 0x13, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x37, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x45, 0x78, + 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x48, 0x00, 0x52, 0x13, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, + 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x0f, 0x67, 0x65, 0x74, 0x4f, + 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x18, 0xac, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, + 0x70, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0f, 0x67, 0x65, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, + 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x12, 0x40, 0x0a, 0x10, 0x67, 0x65, 0x74, 0x4f, 0x77, + 0x6e, 0x65, 0x72, 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, 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, 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, + 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, 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, + 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, 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, 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, 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, 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, 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, + 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, 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, 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, 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, + 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, 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, 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, + 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, 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, 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, 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, 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, + 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, 0x1e, 0x70, 0x69, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, + 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, 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, + 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, 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, 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, 0x12, 0x64, 0x0a, 0x1c, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x78, + 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, 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, 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, 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, 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, + 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, 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, 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, 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, - 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, + 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, 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, + 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, 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, 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, + 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, 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, + 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, 0x57, 0x72, 0x69, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x12, 0x88, 0x01, 0x0a, 0x28, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, + 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, 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, 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, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, - 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x18, 0x72, 0x65, + 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, 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, 0x73, 0x70, 0x12, 0x57, 0x0a, 0x18, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, + 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, 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, 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, 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, + 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, 0x12, 0x34, + 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x42, 0x52, 0x65, 0x71, 0x18, 0xbc, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, + 0x42, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, + 0x42, 0x52, 0x65, 0x71, 0x12, 0x37, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, + 0x42, 0x52, 0x65, 0x73, 0x70, 0x18, 0xbd, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x52, + 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x42, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0d, + 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x42, 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, - 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, 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, + 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, 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, - 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, + 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, 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, + 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, 0x48, 0x00, 0x52, 0x19, 0x73, 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, + 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, 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, 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, + 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, 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, + 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, - 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, 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, 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, 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, + 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, 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, 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, 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, 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, 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, - 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, 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, + 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, 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, 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, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, - 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x17, + 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, 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, 0x12, 0x64, 0x0a, 0x1c, 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, 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, + 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, 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, + 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, 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, 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, + 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, 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, 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, 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, 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, + 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, 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, 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, + 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, 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, 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, 0x55, 0x0a, 0x17, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x45, 0x64, 0x69, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, - 0x18, 0xaa, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x45, 0x64, 0x69, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, - 0x71, 0x48, 0x00, 0x52, 0x17, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x64, - 0x69, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x12, 0x58, 0x0a, 0x18, + 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, 0x55, 0x0a, 0x17, 0x75, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x45, 0x64, 0x69, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, + 0x65, 0x71, 0x18, 0xaa, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x64, 0x69, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x45, 0x64, 0x69, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x12, 0x58, + 0x0a, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x64, 0x69, 0x74, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, 0xab, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x64, 0x69, + 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x64, 0x69, 0x74, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, 0xab, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x64, 0x69, 0x74, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x18, 0x75, 0x73, - 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x64, 0x69, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 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, + 0x61, 0x69, 0x6c, 0x73, 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, 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, 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, - 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, + 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, 0x4f, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x72, 0x49, 0x6d, + 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x74, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, + 0xb5, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6d, 0x70, + 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x74, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, + 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x49, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x74, + 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x52, 0x0a, 0x16, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x6d, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x74, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x18, 0xb6, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, + 0x6d, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x74, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x48, 0x00, 0x52, 0x16, 0x75, 0x73, 0x65, 0x72, 0x49, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x6f, + 0x6e, 0x61, 0x74, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x12, 0x75, + 0x73, 0x65, 0x72, 0x49, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x18, 0xb3, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, + 0x6d, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, + 0x12, 0x75, 0x73, 0x65, 0x72, 0x49, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x12, 0x49, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x49, 0x6d, 0x70, 0x65, 0x72, + 0x73, 0x6f, 0x6e, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xb4, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x13, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x6d, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x74, 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, 0x55, 0x70, 0x64, 0x48, 0x00, 0x52, 0x1b, 0x75, 0x73, + 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, 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, + 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, 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, 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, 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, + 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, 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 ( @@ -5521,568 +5722,590 @@ var file_websocket_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_websocket_proto_goTypes = []interface{}{ (ResponseStatus)(0), // 0: ResponseStatus (*WSMessage)(nil), // 1: WSMessage - (*DataModuleAddVersionReq)(nil), // 2: DataModuleAddVersionReq - (*DataModuleAddVersionResp)(nil), // 3: DataModuleAddVersionResp - (*DataModuleGetReq)(nil), // 4: DataModuleGetReq - (*DataModuleGetResp)(nil), // 5: DataModuleGetResp - (*DataModuleListReq)(nil), // 6: DataModuleListReq - (*DataModuleListResp)(nil), // 7: DataModuleListResp - (*DataModuleWriteReq)(nil), // 8: DataModuleWriteReq - (*DataModuleWriteResp)(nil), // 9: DataModuleWriteResp - (*DetectedDiffractionPeaksReq)(nil), // 10: DetectedDiffractionPeaksReq - (*DetectedDiffractionPeaksResp)(nil), // 11: DetectedDiffractionPeaksResp - (*DetectorConfigListReq)(nil), // 12: DetectorConfigListReq - (*DetectorConfigListResp)(nil), // 13: DetectorConfigListResp - (*DetectorConfigReq)(nil), // 14: DetectorConfigReq - (*DetectorConfigResp)(nil), // 15: DetectorConfigResp - (*DiffractionPeakManualDeleteReq)(nil), // 16: DiffractionPeakManualDeleteReq - (*DiffractionPeakManualDeleteResp)(nil), // 17: DiffractionPeakManualDeleteResp - (*DiffractionPeakManualInsertReq)(nil), // 18: DiffractionPeakManualInsertReq - (*DiffractionPeakManualInsertResp)(nil), // 19: DiffractionPeakManualInsertResp - (*DiffractionPeakManualListReq)(nil), // 20: DiffractionPeakManualListReq - (*DiffractionPeakManualListResp)(nil), // 21: DiffractionPeakManualListResp - (*DiffractionPeakStatusDeleteReq)(nil), // 22: DiffractionPeakStatusDeleteReq - (*DiffractionPeakStatusDeleteResp)(nil), // 23: DiffractionPeakStatusDeleteResp - (*DiffractionPeakStatusListReq)(nil), // 24: DiffractionPeakStatusListReq - (*DiffractionPeakStatusListResp)(nil), // 25: DiffractionPeakStatusListResp - (*DiffractionPeakStatusWriteReq)(nil), // 26: DiffractionPeakStatusWriteReq - (*DiffractionPeakStatusWriteResp)(nil), // 27: DiffractionPeakStatusWriteResp - (*ElementSetDeleteReq)(nil), // 28: ElementSetDeleteReq - (*ElementSetDeleteResp)(nil), // 29: ElementSetDeleteResp - (*ElementSetGetReq)(nil), // 30: ElementSetGetReq - (*ElementSetGetResp)(nil), // 31: ElementSetGetResp - (*ElementSetListReq)(nil), // 32: ElementSetListReq - (*ElementSetListResp)(nil), // 33: ElementSetListResp - (*ElementSetWriteReq)(nil), // 34: ElementSetWriteReq - (*ElementSetWriteResp)(nil), // 35: ElementSetWriteResp - (*ExportFilesReq)(nil), // 36: ExportFilesReq - (*ExportFilesResp)(nil), // 37: ExportFilesResp - (*ExpressionDeleteReq)(nil), // 38: ExpressionDeleteReq - (*ExpressionDeleteResp)(nil), // 39: ExpressionDeleteResp - (*ExpressionDisplaySettingsGetReq)(nil), // 40: ExpressionDisplaySettingsGetReq - (*ExpressionDisplaySettingsGetResp)(nil), // 41: ExpressionDisplaySettingsGetResp - (*ExpressionDisplaySettingsWriteReq)(nil), // 42: ExpressionDisplaySettingsWriteReq - (*ExpressionDisplaySettingsWriteResp)(nil), // 43: ExpressionDisplaySettingsWriteResp - (*ExpressionGetReq)(nil), // 44: ExpressionGetReq - (*ExpressionGetResp)(nil), // 45: ExpressionGetResp - (*ExpressionGroupDeleteReq)(nil), // 46: ExpressionGroupDeleteReq - (*ExpressionGroupDeleteResp)(nil), // 47: ExpressionGroupDeleteResp - (*ExpressionGroupGetReq)(nil), // 48: ExpressionGroupGetReq - (*ExpressionGroupGetResp)(nil), // 49: ExpressionGroupGetResp - (*ExpressionGroupListReq)(nil), // 50: ExpressionGroupListReq - (*ExpressionGroupListResp)(nil), // 51: ExpressionGroupListResp - (*ExpressionGroupWriteReq)(nil), // 52: ExpressionGroupWriteReq - (*ExpressionGroupWriteResp)(nil), // 53: ExpressionGroupWriteResp - (*ExpressionListReq)(nil), // 54: ExpressionListReq - (*ExpressionListResp)(nil), // 55: ExpressionListResp - (*ExpressionWriteExecStatReq)(nil), // 56: ExpressionWriteExecStatReq - (*ExpressionWriteExecStatResp)(nil), // 57: ExpressionWriteExecStatResp - (*ExpressionWriteReq)(nil), // 58: ExpressionWriteReq - (*ExpressionWriteResp)(nil), // 59: ExpressionWriteResp - (*GetOwnershipReq)(nil), // 60: GetOwnershipReq - (*GetOwnershipResp)(nil), // 61: GetOwnershipResp - (*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 - (*ImportMarsViewerImageReq)(nil), // 79: ImportMarsViewerImageReq - (*ImportMarsViewerImageResp)(nil), // 80: ImportMarsViewerImageResp - (*ImportMarsViewerImageUpd)(nil), // 81: ImportMarsViewerImageUpd - (*JobListReq)(nil), // 82: JobListReq - (*JobListResp)(nil), // 83: JobListResp - (*JobListUpd)(nil), // 84: JobListUpd - (*LogGetLevelReq)(nil), // 85: LogGetLevelReq - (*LogGetLevelResp)(nil), // 86: LogGetLevelResp - (*LogReadReq)(nil), // 87: LogReadReq - (*LogReadResp)(nil), // 88: LogReadResp - (*LogSetLevelReq)(nil), // 89: LogSetLevelReq - (*LogSetLevelResp)(nil), // 90: LogSetLevelResp - (*MemoiseGetReq)(nil), // 91: MemoiseGetReq - (*MemoiseGetResp)(nil), // 92: MemoiseGetResp - (*MemoiseWriteReq)(nil), // 93: MemoiseWriteReq - (*MemoiseWriteResp)(nil), // 94: MemoiseWriteResp - (*MultiQuantCompareReq)(nil), // 95: MultiQuantCompareReq - (*MultiQuantCompareResp)(nil), // 96: MultiQuantCompareResp - (*NotificationDismissReq)(nil), // 97: NotificationDismissReq - (*NotificationDismissResp)(nil), // 98: NotificationDismissResp - (*NotificationReq)(nil), // 99: NotificationReq - (*NotificationResp)(nil), // 100: NotificationResp - (*NotificationUpd)(nil), // 101: NotificationUpd - (*ObjectEditAccessReq)(nil), // 102: ObjectEditAccessReq - (*ObjectEditAccessResp)(nil), // 103: ObjectEditAccessResp - (*PiquantConfigListReq)(nil), // 104: PiquantConfigListReq - (*PiquantConfigListResp)(nil), // 105: PiquantConfigListResp - (*PiquantConfigVersionReq)(nil), // 106: PiquantConfigVersionReq - (*PiquantConfigVersionResp)(nil), // 107: PiquantConfigVersionResp - (*PiquantConfigVersionsListReq)(nil), // 108: PiquantConfigVersionsListReq - (*PiquantConfigVersionsListResp)(nil), // 109: PiquantConfigVersionsListResp - (*PiquantCurrentVersionReq)(nil), // 110: PiquantCurrentVersionReq - (*PiquantCurrentVersionResp)(nil), // 111: PiquantCurrentVersionResp - (*PiquantVersionListReq)(nil), // 112: PiquantVersionListReq - (*PiquantVersionListResp)(nil), // 113: PiquantVersionListResp - (*PiquantWriteCurrentVersionReq)(nil), // 114: PiquantWriteCurrentVersionReq - (*PiquantWriteCurrentVersionResp)(nil), // 115: PiquantWriteCurrentVersionResp - (*PseudoIntensityReq)(nil), // 116: PseudoIntensityReq - (*PseudoIntensityResp)(nil), // 117: PseudoIntensityResp - (*PublishExpressionToZenodoReq)(nil), // 118: PublishExpressionToZenodoReq - (*PublishExpressionToZenodoResp)(nil), // 119: PublishExpressionToZenodoResp - (*QuantBlessReq)(nil), // 120: QuantBlessReq - (*QuantBlessResp)(nil), // 121: QuantBlessResp - (*QuantCombineListGetReq)(nil), // 122: QuantCombineListGetReq - (*QuantCombineListGetResp)(nil), // 123: QuantCombineListGetResp - (*QuantCombineListWriteReq)(nil), // 124: QuantCombineListWriteReq - (*QuantCombineListWriteResp)(nil), // 125: QuantCombineListWriteResp - (*QuantCombineReq)(nil), // 126: QuantCombineReq - (*QuantCombineResp)(nil), // 127: QuantCombineResp - (*QuantCreateReq)(nil), // 128: QuantCreateReq - (*QuantCreateResp)(nil), // 129: QuantCreateResp - (*QuantCreateUpd)(nil), // 130: QuantCreateUpd - (*QuantDeleteReq)(nil), // 131: QuantDeleteReq - (*QuantDeleteResp)(nil), // 132: QuantDeleteResp - (*QuantGetReq)(nil), // 133: QuantGetReq - (*QuantGetResp)(nil), // 134: QuantGetResp - (*QuantLastOutputGetReq)(nil), // 135: QuantLastOutputGetReq - (*QuantLastOutputGetResp)(nil), // 136: QuantLastOutputGetResp - (*QuantListReq)(nil), // 137: QuantListReq - (*QuantListResp)(nil), // 138: QuantListResp - (*QuantLogGetReq)(nil), // 139: QuantLogGetReq - (*QuantLogGetResp)(nil), // 140: QuantLogGetResp - (*QuantLogListReq)(nil), // 141: QuantLogListReq - (*QuantLogListResp)(nil), // 142: QuantLogListResp - (*QuantPublishReq)(nil), // 143: QuantPublishReq - (*QuantPublishResp)(nil), // 144: QuantPublishResp - (*QuantRawDataGetReq)(nil), // 145: QuantRawDataGetReq - (*QuantRawDataGetResp)(nil), // 146: QuantRawDataGetResp - (*QuantUploadReq)(nil), // 147: QuantUploadReq - (*QuantUploadResp)(nil), // 148: QuantUploadResp - (*RegionOfInterestBulkDuplicateReq)(nil), // 149: RegionOfInterestBulkDuplicateReq - (*RegionOfInterestBulkDuplicateResp)(nil), // 150: RegionOfInterestBulkDuplicateResp - (*RegionOfInterestBulkWriteReq)(nil), // 151: RegionOfInterestBulkWriteReq - (*RegionOfInterestBulkWriteResp)(nil), // 152: RegionOfInterestBulkWriteResp - (*RegionOfInterestDeleteReq)(nil), // 153: RegionOfInterestDeleteReq - (*RegionOfInterestDeleteResp)(nil), // 154: RegionOfInterestDeleteResp - (*RegionOfInterestDisplaySettingsGetReq)(nil), // 155: RegionOfInterestDisplaySettingsGetReq - (*RegionOfInterestDisplaySettingsGetResp)(nil), // 156: RegionOfInterestDisplaySettingsGetResp - (*RegionOfInterestDisplaySettingsWriteReq)(nil), // 157: RegionOfInterestDisplaySettingsWriteReq - (*RegionOfInterestDisplaySettingsWriteResp)(nil), // 158: RegionOfInterestDisplaySettingsWriteResp - (*RegionOfInterestGetReq)(nil), // 159: RegionOfInterestGetReq - (*RegionOfInterestGetResp)(nil), // 160: RegionOfInterestGetResp - (*RegionOfInterestListReq)(nil), // 161: RegionOfInterestListReq - (*RegionOfInterestListResp)(nil), // 162: RegionOfInterestListResp - (*RegionOfInterestWriteReq)(nil), // 163: RegionOfInterestWriteReq - (*RegionOfInterestWriteResp)(nil), // 164: RegionOfInterestWriteResp - (*RunTestReq)(nil), // 165: RunTestReq - (*RunTestResp)(nil), // 166: RunTestResp - (*ScanAutoShareReq)(nil), // 167: ScanAutoShareReq - (*ScanAutoShareResp)(nil), // 168: ScanAutoShareResp - (*ScanAutoShareWriteReq)(nil), // 169: ScanAutoShareWriteReq - (*ScanAutoShareWriteResp)(nil), // 170: ScanAutoShareWriteResp - (*ScanBeamLocationsReq)(nil), // 171: ScanBeamLocationsReq - (*ScanBeamLocationsResp)(nil), // 172: ScanBeamLocationsResp - (*ScanDeleteReq)(nil), // 173: ScanDeleteReq - (*ScanDeleteResp)(nil), // 174: ScanDeleteResp - (*ScanEntryMetadataReq)(nil), // 175: ScanEntryMetadataReq - (*ScanEntryMetadataResp)(nil), // 176: ScanEntryMetadataResp - (*ScanEntryReq)(nil), // 177: ScanEntryReq - (*ScanEntryResp)(nil), // 178: ScanEntryResp - (*ScanGetReq)(nil), // 179: ScanGetReq - (*ScanGetResp)(nil), // 180: ScanGetResp - (*ScanListReq)(nil), // 181: ScanListReq - (*ScanListResp)(nil), // 182: ScanListResp - (*ScanListUpd)(nil), // 183: ScanListUpd - (*ScanMetaLabelsAndTypesReq)(nil), // 184: ScanMetaLabelsAndTypesReq - (*ScanMetaLabelsAndTypesResp)(nil), // 185: ScanMetaLabelsAndTypesResp - (*ScanMetaWriteReq)(nil), // 186: ScanMetaWriteReq - (*ScanMetaWriteResp)(nil), // 187: ScanMetaWriteResp - (*ScanTriggerAutoQuantReq)(nil), // 188: ScanTriggerAutoQuantReq - (*ScanTriggerAutoQuantResp)(nil), // 189: ScanTriggerAutoQuantResp - (*ScanTriggerReImportReq)(nil), // 190: ScanTriggerReImportReq - (*ScanTriggerReImportResp)(nil), // 191: ScanTriggerReImportResp - (*ScanTriggerReImportUpd)(nil), // 192: ScanTriggerReImportUpd - (*ScanUploadReq)(nil), // 193: ScanUploadReq - (*ScanUploadResp)(nil), // 194: ScanUploadResp - (*ScanUploadUpd)(nil), // 195: ScanUploadUpd - (*ScreenConfigurationDeleteReq)(nil), // 196: ScreenConfigurationDeleteReq - (*ScreenConfigurationDeleteResp)(nil), // 197: ScreenConfigurationDeleteResp - (*ScreenConfigurationGetReq)(nil), // 198: ScreenConfigurationGetReq - (*ScreenConfigurationGetResp)(nil), // 199: ScreenConfigurationGetResp - (*ScreenConfigurationListReq)(nil), // 200: ScreenConfigurationListReq - (*ScreenConfigurationListResp)(nil), // 201: ScreenConfigurationListResp - (*ScreenConfigurationWriteReq)(nil), // 202: ScreenConfigurationWriteReq - (*ScreenConfigurationWriteResp)(nil), // 203: ScreenConfigurationWriteResp - (*SelectedImagePixelsReq)(nil), // 204: SelectedImagePixelsReq - (*SelectedImagePixelsResp)(nil), // 205: SelectedImagePixelsResp - (*SelectedImagePixelsWriteReq)(nil), // 206: SelectedImagePixelsWriteReq - (*SelectedImagePixelsWriteResp)(nil), // 207: SelectedImagePixelsWriteResp - (*SelectedScanEntriesReq)(nil), // 208: SelectedScanEntriesReq - (*SelectedScanEntriesResp)(nil), // 209: SelectedScanEntriesResp - (*SelectedScanEntriesWriteReq)(nil), // 210: SelectedScanEntriesWriteReq - (*SelectedScanEntriesWriteResp)(nil), // 211: SelectedScanEntriesWriteResp - (*SendUserNotificationReq)(nil), // 212: SendUserNotificationReq - (*SendUserNotificationResp)(nil), // 213: SendUserNotificationResp - (*SpectrumReq)(nil), // 214: SpectrumReq - (*SpectrumResp)(nil), // 215: SpectrumResp - (*TagCreateReq)(nil), // 216: TagCreateReq - (*TagCreateResp)(nil), // 217: TagCreateResp - (*TagDeleteReq)(nil), // 218: TagDeleteReq - (*TagDeleteResp)(nil), // 219: TagDeleteResp - (*TagListReq)(nil), // 220: TagListReq - (*TagListResp)(nil), // 221: TagListResp - (*UserAddRoleReq)(nil), // 222: UserAddRoleReq - (*UserAddRoleResp)(nil), // 223: UserAddRoleResp - (*UserDeleteRoleReq)(nil), // 224: UserDeleteRoleReq - (*UserDeleteRoleResp)(nil), // 225: UserDeleteRoleResp - (*UserDetailsReq)(nil), // 226: UserDetailsReq - (*UserDetailsResp)(nil), // 227: UserDetailsResp - (*UserDetailsWriteReq)(nil), // 228: UserDetailsWriteReq - (*UserDetailsWriteResp)(nil), // 229: UserDetailsWriteResp - (*UserGroupAddAdminReq)(nil), // 230: UserGroupAddAdminReq - (*UserGroupAddAdminResp)(nil), // 231: UserGroupAddAdminResp - (*UserGroupAddMemberReq)(nil), // 232: UserGroupAddMemberReq - (*UserGroupAddMemberResp)(nil), // 233: UserGroupAddMemberResp - (*UserGroupAddViewerReq)(nil), // 234: UserGroupAddViewerReq - (*UserGroupAddViewerResp)(nil), // 235: UserGroupAddViewerResp - (*UserGroupCreateReq)(nil), // 236: UserGroupCreateReq - (*UserGroupCreateResp)(nil), // 237: UserGroupCreateResp - (*UserGroupDeleteAdminReq)(nil), // 238: UserGroupDeleteAdminReq - (*UserGroupDeleteAdminResp)(nil), // 239: UserGroupDeleteAdminResp - (*UserGroupDeleteMemberReq)(nil), // 240: UserGroupDeleteMemberReq - (*UserGroupDeleteMemberResp)(nil), // 241: UserGroupDeleteMemberResp - (*UserGroupDeleteReq)(nil), // 242: UserGroupDeleteReq - (*UserGroupDeleteResp)(nil), // 243: UserGroupDeleteResp - (*UserGroupDeleteViewerReq)(nil), // 244: UserGroupDeleteViewerReq - (*UserGroupDeleteViewerResp)(nil), // 245: UserGroupDeleteViewerResp - (*UserGroupEditDetailsReq)(nil), // 246: UserGroupEditDetailsReq - (*UserGroupEditDetailsResp)(nil), // 247: UserGroupEditDetailsResp - (*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 - (*UserListReq)(nil), // 260: UserListReq - (*UserListResp)(nil), // 261: UserListResp - (*UserNotificationSettingsReq)(nil), // 262: UserNotificationSettingsReq - (*UserNotificationSettingsResp)(nil), // 263: UserNotificationSettingsResp - (*UserNotificationSettingsUpd)(nil), // 264: UserNotificationSettingsUpd - (*UserNotificationSettingsWriteReq)(nil), // 265: UserNotificationSettingsWriteReq - (*UserNotificationSettingsWriteResp)(nil), // 266: UserNotificationSettingsWriteResp - (*UserRoleListReq)(nil), // 267: UserRoleListReq - (*UserRoleListResp)(nil), // 268: UserRoleListResp - (*UserRolesListReq)(nil), // 269: UserRolesListReq - (*UserRolesListResp)(nil), // 270: UserRolesListResp - (*UserSearchReq)(nil), // 271: UserSearchReq - (*UserSearchResp)(nil), // 272: UserSearchResp - (*WidgetDataGetReq)(nil), // 273: WidgetDataGetReq - (*WidgetDataGetResp)(nil), // 274: WidgetDataGetResp - (*WidgetDataWriteReq)(nil), // 275: WidgetDataWriteReq - (*WidgetDataWriteResp)(nil), // 276: WidgetDataWriteResp - (*ZenodoDOIGetReq)(nil), // 277: ZenodoDOIGetReq - (*ZenodoDOIGetResp)(nil), // 278: ZenodoDOIGetResp + (*BackupDBReq)(nil), // 2: BackupDBReq + (*BackupDBResp)(nil), // 3: BackupDBResp + (*BackupDBUpd)(nil), // 4: BackupDBUpd + (*DBAdminConfigGetReq)(nil), // 5: DBAdminConfigGetReq + (*DBAdminConfigGetResp)(nil), // 6: DBAdminConfigGetResp + (*DataModuleAddVersionReq)(nil), // 7: DataModuleAddVersionReq + (*DataModuleAddVersionResp)(nil), // 8: DataModuleAddVersionResp + (*DataModuleGetReq)(nil), // 9: DataModuleGetReq + (*DataModuleGetResp)(nil), // 10: DataModuleGetResp + (*DataModuleListReq)(nil), // 11: DataModuleListReq + (*DataModuleListResp)(nil), // 12: DataModuleListResp + (*DataModuleWriteReq)(nil), // 13: DataModuleWriteReq + (*DataModuleWriteResp)(nil), // 14: DataModuleWriteResp + (*DetectedDiffractionPeaksReq)(nil), // 15: DetectedDiffractionPeaksReq + (*DetectedDiffractionPeaksResp)(nil), // 16: DetectedDiffractionPeaksResp + (*DetectorConfigListReq)(nil), // 17: DetectorConfigListReq + (*DetectorConfigListResp)(nil), // 18: DetectorConfigListResp + (*DetectorConfigReq)(nil), // 19: DetectorConfigReq + (*DetectorConfigResp)(nil), // 20: DetectorConfigResp + (*DiffractionPeakManualDeleteReq)(nil), // 21: DiffractionPeakManualDeleteReq + (*DiffractionPeakManualDeleteResp)(nil), // 22: DiffractionPeakManualDeleteResp + (*DiffractionPeakManualInsertReq)(nil), // 23: DiffractionPeakManualInsertReq + (*DiffractionPeakManualInsertResp)(nil), // 24: DiffractionPeakManualInsertResp + (*DiffractionPeakManualListReq)(nil), // 25: DiffractionPeakManualListReq + (*DiffractionPeakManualListResp)(nil), // 26: DiffractionPeakManualListResp + (*DiffractionPeakStatusDeleteReq)(nil), // 27: DiffractionPeakStatusDeleteReq + (*DiffractionPeakStatusDeleteResp)(nil), // 28: DiffractionPeakStatusDeleteResp + (*DiffractionPeakStatusListReq)(nil), // 29: DiffractionPeakStatusListReq + (*DiffractionPeakStatusListResp)(nil), // 30: DiffractionPeakStatusListResp + (*DiffractionPeakStatusWriteReq)(nil), // 31: DiffractionPeakStatusWriteReq + (*DiffractionPeakStatusWriteResp)(nil), // 32: DiffractionPeakStatusWriteResp + (*ElementSetDeleteReq)(nil), // 33: ElementSetDeleteReq + (*ElementSetDeleteResp)(nil), // 34: ElementSetDeleteResp + (*ElementSetGetReq)(nil), // 35: ElementSetGetReq + (*ElementSetGetResp)(nil), // 36: ElementSetGetResp + (*ElementSetListReq)(nil), // 37: ElementSetListReq + (*ElementSetListResp)(nil), // 38: ElementSetListResp + (*ElementSetWriteReq)(nil), // 39: ElementSetWriteReq + (*ElementSetWriteResp)(nil), // 40: ElementSetWriteResp + (*ExportFilesReq)(nil), // 41: ExportFilesReq + (*ExportFilesResp)(nil), // 42: ExportFilesResp + (*ExpressionDeleteReq)(nil), // 43: ExpressionDeleteReq + (*ExpressionDeleteResp)(nil), // 44: ExpressionDeleteResp + (*ExpressionDisplaySettingsGetReq)(nil), // 45: ExpressionDisplaySettingsGetReq + (*ExpressionDisplaySettingsGetResp)(nil), // 46: ExpressionDisplaySettingsGetResp + (*ExpressionDisplaySettingsWriteReq)(nil), // 47: ExpressionDisplaySettingsWriteReq + (*ExpressionDisplaySettingsWriteResp)(nil), // 48: ExpressionDisplaySettingsWriteResp + (*ExpressionGetReq)(nil), // 49: ExpressionGetReq + (*ExpressionGetResp)(nil), // 50: ExpressionGetResp + (*ExpressionGroupDeleteReq)(nil), // 51: ExpressionGroupDeleteReq + (*ExpressionGroupDeleteResp)(nil), // 52: ExpressionGroupDeleteResp + (*ExpressionGroupGetReq)(nil), // 53: ExpressionGroupGetReq + (*ExpressionGroupGetResp)(nil), // 54: ExpressionGroupGetResp + (*ExpressionGroupListReq)(nil), // 55: ExpressionGroupListReq + (*ExpressionGroupListResp)(nil), // 56: ExpressionGroupListResp + (*ExpressionGroupWriteReq)(nil), // 57: ExpressionGroupWriteReq + (*ExpressionGroupWriteResp)(nil), // 58: ExpressionGroupWriteResp + (*ExpressionListReq)(nil), // 59: ExpressionListReq + (*ExpressionListResp)(nil), // 60: ExpressionListResp + (*ExpressionWriteExecStatReq)(nil), // 61: ExpressionWriteExecStatReq + (*ExpressionWriteExecStatResp)(nil), // 62: ExpressionWriteExecStatResp + (*ExpressionWriteReq)(nil), // 63: ExpressionWriteReq + (*ExpressionWriteResp)(nil), // 64: ExpressionWriteResp + (*GetOwnershipReq)(nil), // 65: GetOwnershipReq + (*GetOwnershipResp)(nil), // 66: GetOwnershipResp + (*ImageBeamLocationVersionsReq)(nil), // 67: ImageBeamLocationVersionsReq + (*ImageBeamLocationVersionsResp)(nil), // 68: ImageBeamLocationVersionsResp + (*ImageBeamLocationsReq)(nil), // 69: ImageBeamLocationsReq + (*ImageBeamLocationsResp)(nil), // 70: ImageBeamLocationsResp + (*ImageDeleteReq)(nil), // 71: ImageDeleteReq + (*ImageDeleteResp)(nil), // 72: ImageDeleteResp + (*ImageGetDefaultReq)(nil), // 73: ImageGetDefaultReq + (*ImageGetDefaultResp)(nil), // 74: ImageGetDefaultResp + (*ImageGetReq)(nil), // 75: ImageGetReq + (*ImageGetResp)(nil), // 76: ImageGetResp + (*ImageListReq)(nil), // 77: ImageListReq + (*ImageListResp)(nil), // 78: ImageListResp + (*ImageListUpd)(nil), // 79: ImageListUpd + (*ImageSetDefaultReq)(nil), // 80: ImageSetDefaultReq + (*ImageSetDefaultResp)(nil), // 81: ImageSetDefaultResp + (*ImageSetMatchTransformReq)(nil), // 82: ImageSetMatchTransformReq + (*ImageSetMatchTransformResp)(nil), // 83: ImageSetMatchTransformResp + (*ImportMarsViewerImageReq)(nil), // 84: ImportMarsViewerImageReq + (*ImportMarsViewerImageResp)(nil), // 85: ImportMarsViewerImageResp + (*ImportMarsViewerImageUpd)(nil), // 86: ImportMarsViewerImageUpd + (*JobListReq)(nil), // 87: JobListReq + (*JobListResp)(nil), // 88: JobListResp + (*JobListUpd)(nil), // 89: JobListUpd + (*LogGetLevelReq)(nil), // 90: LogGetLevelReq + (*LogGetLevelResp)(nil), // 91: LogGetLevelResp + (*LogReadReq)(nil), // 92: LogReadReq + (*LogReadResp)(nil), // 93: LogReadResp + (*LogSetLevelReq)(nil), // 94: LogSetLevelReq + (*LogSetLevelResp)(nil), // 95: LogSetLevelResp + (*MemoiseGetReq)(nil), // 96: MemoiseGetReq + (*MemoiseGetResp)(nil), // 97: MemoiseGetResp + (*MemoiseWriteReq)(nil), // 98: MemoiseWriteReq + (*MemoiseWriteResp)(nil), // 99: MemoiseWriteResp + (*MultiQuantCompareReq)(nil), // 100: MultiQuantCompareReq + (*MultiQuantCompareResp)(nil), // 101: MultiQuantCompareResp + (*NotificationDismissReq)(nil), // 102: NotificationDismissReq + (*NotificationDismissResp)(nil), // 103: NotificationDismissResp + (*NotificationReq)(nil), // 104: NotificationReq + (*NotificationResp)(nil), // 105: NotificationResp + (*NotificationUpd)(nil), // 106: NotificationUpd + (*ObjectEditAccessReq)(nil), // 107: ObjectEditAccessReq + (*ObjectEditAccessResp)(nil), // 108: ObjectEditAccessResp + (*PiquantConfigListReq)(nil), // 109: PiquantConfigListReq + (*PiquantConfigListResp)(nil), // 110: PiquantConfigListResp + (*PiquantConfigVersionReq)(nil), // 111: PiquantConfigVersionReq + (*PiquantConfigVersionResp)(nil), // 112: PiquantConfigVersionResp + (*PiquantConfigVersionsListReq)(nil), // 113: PiquantConfigVersionsListReq + (*PiquantConfigVersionsListResp)(nil), // 114: PiquantConfigVersionsListResp + (*PiquantCurrentVersionReq)(nil), // 115: PiquantCurrentVersionReq + (*PiquantCurrentVersionResp)(nil), // 116: PiquantCurrentVersionResp + (*PiquantVersionListReq)(nil), // 117: PiquantVersionListReq + (*PiquantVersionListResp)(nil), // 118: PiquantVersionListResp + (*PiquantWriteCurrentVersionReq)(nil), // 119: PiquantWriteCurrentVersionReq + (*PiquantWriteCurrentVersionResp)(nil), // 120: PiquantWriteCurrentVersionResp + (*PseudoIntensityReq)(nil), // 121: PseudoIntensityReq + (*PseudoIntensityResp)(nil), // 122: PseudoIntensityResp + (*PublishExpressionToZenodoReq)(nil), // 123: PublishExpressionToZenodoReq + (*PublishExpressionToZenodoResp)(nil), // 124: PublishExpressionToZenodoResp + (*QuantBlessReq)(nil), // 125: QuantBlessReq + (*QuantBlessResp)(nil), // 126: QuantBlessResp + (*QuantCombineListGetReq)(nil), // 127: QuantCombineListGetReq + (*QuantCombineListGetResp)(nil), // 128: QuantCombineListGetResp + (*QuantCombineListWriteReq)(nil), // 129: QuantCombineListWriteReq + (*QuantCombineListWriteResp)(nil), // 130: QuantCombineListWriteResp + (*QuantCombineReq)(nil), // 131: QuantCombineReq + (*QuantCombineResp)(nil), // 132: QuantCombineResp + (*QuantCreateReq)(nil), // 133: QuantCreateReq + (*QuantCreateResp)(nil), // 134: QuantCreateResp + (*QuantCreateUpd)(nil), // 135: QuantCreateUpd + (*QuantDeleteReq)(nil), // 136: QuantDeleteReq + (*QuantDeleteResp)(nil), // 137: QuantDeleteResp + (*QuantGetReq)(nil), // 138: QuantGetReq + (*QuantGetResp)(nil), // 139: QuantGetResp + (*QuantLastOutputGetReq)(nil), // 140: QuantLastOutputGetReq + (*QuantLastOutputGetResp)(nil), // 141: QuantLastOutputGetResp + (*QuantListReq)(nil), // 142: QuantListReq + (*QuantListResp)(nil), // 143: QuantListResp + (*QuantLogGetReq)(nil), // 144: QuantLogGetReq + (*QuantLogGetResp)(nil), // 145: QuantLogGetResp + (*QuantLogListReq)(nil), // 146: QuantLogListReq + (*QuantLogListResp)(nil), // 147: QuantLogListResp + (*QuantPublishReq)(nil), // 148: QuantPublishReq + (*QuantPublishResp)(nil), // 149: QuantPublishResp + (*QuantRawDataGetReq)(nil), // 150: QuantRawDataGetReq + (*QuantRawDataGetResp)(nil), // 151: QuantRawDataGetResp + (*QuantUploadReq)(nil), // 152: QuantUploadReq + (*QuantUploadResp)(nil), // 153: QuantUploadResp + (*RegionOfInterestBulkDuplicateReq)(nil), // 154: RegionOfInterestBulkDuplicateReq + (*RegionOfInterestBulkDuplicateResp)(nil), // 155: RegionOfInterestBulkDuplicateResp + (*RegionOfInterestBulkWriteReq)(nil), // 156: RegionOfInterestBulkWriteReq + (*RegionOfInterestBulkWriteResp)(nil), // 157: RegionOfInterestBulkWriteResp + (*RegionOfInterestDeleteReq)(nil), // 158: RegionOfInterestDeleteReq + (*RegionOfInterestDeleteResp)(nil), // 159: RegionOfInterestDeleteResp + (*RegionOfInterestDisplaySettingsGetReq)(nil), // 160: RegionOfInterestDisplaySettingsGetReq + (*RegionOfInterestDisplaySettingsGetResp)(nil), // 161: RegionOfInterestDisplaySettingsGetResp + (*RegionOfInterestDisplaySettingsWriteReq)(nil), // 162: RegionOfInterestDisplaySettingsWriteReq + (*RegionOfInterestDisplaySettingsWriteResp)(nil), // 163: RegionOfInterestDisplaySettingsWriteResp + (*RegionOfInterestGetReq)(nil), // 164: RegionOfInterestGetReq + (*RegionOfInterestGetResp)(nil), // 165: RegionOfInterestGetResp + (*RegionOfInterestListReq)(nil), // 166: RegionOfInterestListReq + (*RegionOfInterestListResp)(nil), // 167: RegionOfInterestListResp + (*RegionOfInterestWriteReq)(nil), // 168: RegionOfInterestWriteReq + (*RegionOfInterestWriteResp)(nil), // 169: RegionOfInterestWriteResp + (*RestoreDBReq)(nil), // 170: RestoreDBReq + (*RestoreDBResp)(nil), // 171: RestoreDBResp + (*RunTestReq)(nil), // 172: RunTestReq + (*RunTestResp)(nil), // 173: RunTestResp + (*ScanAutoShareReq)(nil), // 174: ScanAutoShareReq + (*ScanAutoShareResp)(nil), // 175: ScanAutoShareResp + (*ScanAutoShareWriteReq)(nil), // 176: ScanAutoShareWriteReq + (*ScanAutoShareWriteResp)(nil), // 177: ScanAutoShareWriteResp + (*ScanBeamLocationsReq)(nil), // 178: ScanBeamLocationsReq + (*ScanBeamLocationsResp)(nil), // 179: ScanBeamLocationsResp + (*ScanDeleteReq)(nil), // 180: ScanDeleteReq + (*ScanDeleteResp)(nil), // 181: ScanDeleteResp + (*ScanEntryMetadataReq)(nil), // 182: ScanEntryMetadataReq + (*ScanEntryMetadataResp)(nil), // 183: ScanEntryMetadataResp + (*ScanEntryReq)(nil), // 184: ScanEntryReq + (*ScanEntryResp)(nil), // 185: ScanEntryResp + (*ScanGetReq)(nil), // 186: ScanGetReq + (*ScanGetResp)(nil), // 187: ScanGetResp + (*ScanListReq)(nil), // 188: ScanListReq + (*ScanListResp)(nil), // 189: ScanListResp + (*ScanListUpd)(nil), // 190: ScanListUpd + (*ScanMetaLabelsAndTypesReq)(nil), // 191: ScanMetaLabelsAndTypesReq + (*ScanMetaLabelsAndTypesResp)(nil), // 192: ScanMetaLabelsAndTypesResp + (*ScanMetaWriteReq)(nil), // 193: ScanMetaWriteReq + (*ScanMetaWriteResp)(nil), // 194: ScanMetaWriteResp + (*ScanTriggerAutoQuantReq)(nil), // 195: ScanTriggerAutoQuantReq + (*ScanTriggerAutoQuantResp)(nil), // 196: ScanTriggerAutoQuantResp + (*ScanTriggerReImportReq)(nil), // 197: ScanTriggerReImportReq + (*ScanTriggerReImportResp)(nil), // 198: ScanTriggerReImportResp + (*ScanTriggerReImportUpd)(nil), // 199: ScanTriggerReImportUpd + (*ScanUploadReq)(nil), // 200: ScanUploadReq + (*ScanUploadResp)(nil), // 201: ScanUploadResp + (*ScanUploadUpd)(nil), // 202: ScanUploadUpd + (*ScreenConfigurationDeleteReq)(nil), // 203: ScreenConfigurationDeleteReq + (*ScreenConfigurationDeleteResp)(nil), // 204: ScreenConfigurationDeleteResp + (*ScreenConfigurationGetReq)(nil), // 205: ScreenConfigurationGetReq + (*ScreenConfigurationGetResp)(nil), // 206: ScreenConfigurationGetResp + (*ScreenConfigurationListReq)(nil), // 207: ScreenConfigurationListReq + (*ScreenConfigurationListResp)(nil), // 208: ScreenConfigurationListResp + (*ScreenConfigurationWriteReq)(nil), // 209: ScreenConfigurationWriteReq + (*ScreenConfigurationWriteResp)(nil), // 210: ScreenConfigurationWriteResp + (*SelectedImagePixelsReq)(nil), // 211: SelectedImagePixelsReq + (*SelectedImagePixelsResp)(nil), // 212: SelectedImagePixelsResp + (*SelectedImagePixelsWriteReq)(nil), // 213: SelectedImagePixelsWriteReq + (*SelectedImagePixelsWriteResp)(nil), // 214: SelectedImagePixelsWriteResp + (*SelectedScanEntriesReq)(nil), // 215: SelectedScanEntriesReq + (*SelectedScanEntriesResp)(nil), // 216: SelectedScanEntriesResp + (*SelectedScanEntriesWriteReq)(nil), // 217: SelectedScanEntriesWriteReq + (*SelectedScanEntriesWriteResp)(nil), // 218: SelectedScanEntriesWriteResp + (*SendUserNotificationReq)(nil), // 219: SendUserNotificationReq + (*SendUserNotificationResp)(nil), // 220: SendUserNotificationResp + (*SpectrumReq)(nil), // 221: SpectrumReq + (*SpectrumResp)(nil), // 222: SpectrumResp + (*TagCreateReq)(nil), // 223: TagCreateReq + (*TagCreateResp)(nil), // 224: TagCreateResp + (*TagDeleteReq)(nil), // 225: TagDeleteReq + (*TagDeleteResp)(nil), // 226: TagDeleteResp + (*TagListReq)(nil), // 227: TagListReq + (*TagListResp)(nil), // 228: TagListResp + (*UserAddRoleReq)(nil), // 229: UserAddRoleReq + (*UserAddRoleResp)(nil), // 230: UserAddRoleResp + (*UserDeleteRoleReq)(nil), // 231: UserDeleteRoleReq + (*UserDeleteRoleResp)(nil), // 232: UserDeleteRoleResp + (*UserDetailsReq)(nil), // 233: UserDetailsReq + (*UserDetailsResp)(nil), // 234: UserDetailsResp + (*UserDetailsWriteReq)(nil), // 235: UserDetailsWriteReq + (*UserDetailsWriteResp)(nil), // 236: UserDetailsWriteResp + (*UserGroupAddAdminReq)(nil), // 237: UserGroupAddAdminReq + (*UserGroupAddAdminResp)(nil), // 238: UserGroupAddAdminResp + (*UserGroupAddMemberReq)(nil), // 239: UserGroupAddMemberReq + (*UserGroupAddMemberResp)(nil), // 240: UserGroupAddMemberResp + (*UserGroupAddViewerReq)(nil), // 241: UserGroupAddViewerReq + (*UserGroupAddViewerResp)(nil), // 242: UserGroupAddViewerResp + (*UserGroupCreateReq)(nil), // 243: UserGroupCreateReq + (*UserGroupCreateResp)(nil), // 244: UserGroupCreateResp + (*UserGroupDeleteAdminReq)(nil), // 245: UserGroupDeleteAdminReq + (*UserGroupDeleteAdminResp)(nil), // 246: UserGroupDeleteAdminResp + (*UserGroupDeleteMemberReq)(nil), // 247: UserGroupDeleteMemberReq + (*UserGroupDeleteMemberResp)(nil), // 248: UserGroupDeleteMemberResp + (*UserGroupDeleteReq)(nil), // 249: UserGroupDeleteReq + (*UserGroupDeleteResp)(nil), // 250: UserGroupDeleteResp + (*UserGroupDeleteViewerReq)(nil), // 251: UserGroupDeleteViewerReq + (*UserGroupDeleteViewerResp)(nil), // 252: UserGroupDeleteViewerResp + (*UserGroupEditDetailsReq)(nil), // 253: UserGroupEditDetailsReq + (*UserGroupEditDetailsResp)(nil), // 254: UserGroupEditDetailsResp + (*UserGroupIgnoreJoinReq)(nil), // 255: UserGroupIgnoreJoinReq + (*UserGroupIgnoreJoinResp)(nil), // 256: UserGroupIgnoreJoinResp + (*UserGroupJoinListReq)(nil), // 257: UserGroupJoinListReq + (*UserGroupJoinListResp)(nil), // 258: UserGroupJoinListResp + (*UserGroupJoinReq)(nil), // 259: UserGroupJoinReq + (*UserGroupJoinResp)(nil), // 260: UserGroupJoinResp + (*UserGroupListJoinableReq)(nil), // 261: UserGroupListJoinableReq + (*UserGroupListJoinableResp)(nil), // 262: UserGroupListJoinableResp + (*UserGroupListReq)(nil), // 263: UserGroupListReq + (*UserGroupListResp)(nil), // 264: UserGroupListResp + (*UserGroupReq)(nil), // 265: UserGroupReq + (*UserGroupResp)(nil), // 266: UserGroupResp + (*UserImpersonateGetReq)(nil), // 267: UserImpersonateGetReq + (*UserImpersonateGetResp)(nil), // 268: UserImpersonateGetResp + (*UserImpersonateReq)(nil), // 269: UserImpersonateReq + (*UserImpersonateResp)(nil), // 270: UserImpersonateResp + (*UserListReq)(nil), // 271: UserListReq + (*UserListResp)(nil), // 272: UserListResp + (*UserNotificationSettingsReq)(nil), // 273: UserNotificationSettingsReq + (*UserNotificationSettingsResp)(nil), // 274: UserNotificationSettingsResp + (*UserNotificationSettingsUpd)(nil), // 275: UserNotificationSettingsUpd + (*UserNotificationSettingsWriteReq)(nil), // 276: UserNotificationSettingsWriteReq + (*UserNotificationSettingsWriteResp)(nil), // 277: UserNotificationSettingsWriteResp + (*UserRoleListReq)(nil), // 278: UserRoleListReq + (*UserRoleListResp)(nil), // 279: UserRoleListResp + (*UserRolesListReq)(nil), // 280: UserRolesListReq + (*UserRolesListResp)(nil), // 281: UserRolesListResp + (*UserSearchReq)(nil), // 282: UserSearchReq + (*UserSearchResp)(nil), // 283: UserSearchResp + (*WidgetDataGetReq)(nil), // 284: WidgetDataGetReq + (*WidgetDataGetResp)(nil), // 285: WidgetDataGetResp + (*WidgetDataWriteReq)(nil), // 286: WidgetDataWriteReq + (*WidgetDataWriteResp)(nil), // 287: WidgetDataWriteResp + (*ZenodoDOIGetReq)(nil), // 288: ZenodoDOIGetReq + (*ZenodoDOIGetResp)(nil), // 289: ZenodoDOIGetResp } var file_websocket_proto_depIdxs = []int32{ 0, // 0: WSMessage.status:type_name -> ResponseStatus - 2, // 1: WSMessage.dataModuleAddVersionReq:type_name -> DataModuleAddVersionReq - 3, // 2: WSMessage.dataModuleAddVersionResp:type_name -> DataModuleAddVersionResp - 4, // 3: WSMessage.dataModuleGetReq:type_name -> DataModuleGetReq - 5, // 4: WSMessage.dataModuleGetResp:type_name -> DataModuleGetResp - 6, // 5: WSMessage.dataModuleListReq:type_name -> DataModuleListReq - 7, // 6: WSMessage.dataModuleListResp:type_name -> DataModuleListResp - 8, // 7: WSMessage.dataModuleWriteReq:type_name -> DataModuleWriteReq - 9, // 8: WSMessage.dataModuleWriteResp:type_name -> DataModuleWriteResp - 10, // 9: WSMessage.detectedDiffractionPeaksReq:type_name -> DetectedDiffractionPeaksReq - 11, // 10: WSMessage.detectedDiffractionPeaksResp:type_name -> DetectedDiffractionPeaksResp - 12, // 11: WSMessage.detectorConfigListReq:type_name -> DetectorConfigListReq - 13, // 12: WSMessage.detectorConfigListResp:type_name -> DetectorConfigListResp - 14, // 13: WSMessage.detectorConfigReq:type_name -> DetectorConfigReq - 15, // 14: WSMessage.detectorConfigResp:type_name -> DetectorConfigResp - 16, // 15: WSMessage.diffractionPeakManualDeleteReq:type_name -> DiffractionPeakManualDeleteReq - 17, // 16: WSMessage.diffractionPeakManualDeleteResp:type_name -> DiffractionPeakManualDeleteResp - 18, // 17: WSMessage.diffractionPeakManualInsertReq:type_name -> DiffractionPeakManualInsertReq - 19, // 18: WSMessage.diffractionPeakManualInsertResp:type_name -> DiffractionPeakManualInsertResp - 20, // 19: WSMessage.diffractionPeakManualListReq:type_name -> DiffractionPeakManualListReq - 21, // 20: WSMessage.diffractionPeakManualListResp:type_name -> DiffractionPeakManualListResp - 22, // 21: WSMessage.diffractionPeakStatusDeleteReq:type_name -> DiffractionPeakStatusDeleteReq - 23, // 22: WSMessage.diffractionPeakStatusDeleteResp:type_name -> DiffractionPeakStatusDeleteResp - 24, // 23: WSMessage.diffractionPeakStatusListReq:type_name -> DiffractionPeakStatusListReq - 25, // 24: WSMessage.diffractionPeakStatusListResp:type_name -> DiffractionPeakStatusListResp - 26, // 25: WSMessage.diffractionPeakStatusWriteReq:type_name -> DiffractionPeakStatusWriteReq - 27, // 26: WSMessage.diffractionPeakStatusWriteResp:type_name -> DiffractionPeakStatusWriteResp - 28, // 27: WSMessage.elementSetDeleteReq:type_name -> ElementSetDeleteReq - 29, // 28: WSMessage.elementSetDeleteResp:type_name -> ElementSetDeleteResp - 30, // 29: WSMessage.elementSetGetReq:type_name -> ElementSetGetReq - 31, // 30: WSMessage.elementSetGetResp:type_name -> ElementSetGetResp - 32, // 31: WSMessage.elementSetListReq:type_name -> ElementSetListReq - 33, // 32: WSMessage.elementSetListResp:type_name -> ElementSetListResp - 34, // 33: WSMessage.elementSetWriteReq:type_name -> ElementSetWriteReq - 35, // 34: WSMessage.elementSetWriteResp:type_name -> ElementSetWriteResp - 36, // 35: WSMessage.exportFilesReq:type_name -> ExportFilesReq - 37, // 36: WSMessage.exportFilesResp:type_name -> ExportFilesResp - 38, // 37: WSMessage.expressionDeleteReq:type_name -> ExpressionDeleteReq - 39, // 38: WSMessage.expressionDeleteResp:type_name -> ExpressionDeleteResp - 40, // 39: WSMessage.expressionDisplaySettingsGetReq:type_name -> ExpressionDisplaySettingsGetReq - 41, // 40: WSMessage.expressionDisplaySettingsGetResp:type_name -> ExpressionDisplaySettingsGetResp - 42, // 41: WSMessage.expressionDisplaySettingsWriteReq:type_name -> ExpressionDisplaySettingsWriteReq - 43, // 42: WSMessage.expressionDisplaySettingsWriteResp:type_name -> ExpressionDisplaySettingsWriteResp - 44, // 43: WSMessage.expressionGetReq:type_name -> ExpressionGetReq - 45, // 44: WSMessage.expressionGetResp:type_name -> ExpressionGetResp - 46, // 45: WSMessage.expressionGroupDeleteReq:type_name -> ExpressionGroupDeleteReq - 47, // 46: WSMessage.expressionGroupDeleteResp:type_name -> ExpressionGroupDeleteResp - 48, // 47: WSMessage.expressionGroupGetReq:type_name -> ExpressionGroupGetReq - 49, // 48: WSMessage.expressionGroupGetResp:type_name -> ExpressionGroupGetResp - 50, // 49: WSMessage.expressionGroupListReq:type_name -> ExpressionGroupListReq - 51, // 50: WSMessage.expressionGroupListResp:type_name -> ExpressionGroupListResp - 52, // 51: WSMessage.expressionGroupWriteReq:type_name -> ExpressionGroupWriteReq - 53, // 52: WSMessage.expressionGroupWriteResp:type_name -> ExpressionGroupWriteResp - 54, // 53: WSMessage.expressionListReq:type_name -> ExpressionListReq - 55, // 54: WSMessage.expressionListResp:type_name -> ExpressionListResp - 56, // 55: WSMessage.expressionWriteExecStatReq:type_name -> ExpressionWriteExecStatReq - 57, // 56: WSMessage.expressionWriteExecStatResp:type_name -> ExpressionWriteExecStatResp - 58, // 57: WSMessage.expressionWriteReq:type_name -> ExpressionWriteReq - 59, // 58: WSMessage.expressionWriteResp:type_name -> ExpressionWriteResp - 60, // 59: WSMessage.getOwnershipReq:type_name -> GetOwnershipReq - 61, // 60: WSMessage.getOwnershipResp:type_name -> GetOwnershipResp - 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.importMarsViewerImageReq:type_name -> ImportMarsViewerImageReq - 80, // 79: WSMessage.importMarsViewerImageResp:type_name -> ImportMarsViewerImageResp - 81, // 80: WSMessage.importMarsViewerImageUpd:type_name -> ImportMarsViewerImageUpd - 82, // 81: WSMessage.jobListReq:type_name -> JobListReq - 83, // 82: WSMessage.jobListResp:type_name -> JobListResp - 84, // 83: WSMessage.jobListUpd:type_name -> JobListUpd - 85, // 84: WSMessage.logGetLevelReq:type_name -> LogGetLevelReq - 86, // 85: WSMessage.logGetLevelResp:type_name -> LogGetLevelResp - 87, // 86: WSMessage.logReadReq:type_name -> LogReadReq - 88, // 87: WSMessage.logReadResp:type_name -> LogReadResp - 89, // 88: WSMessage.logSetLevelReq:type_name -> LogSetLevelReq - 90, // 89: WSMessage.logSetLevelResp:type_name -> LogSetLevelResp - 91, // 90: WSMessage.memoiseGetReq:type_name -> MemoiseGetReq - 92, // 91: WSMessage.memoiseGetResp:type_name -> MemoiseGetResp - 93, // 92: WSMessage.memoiseWriteReq:type_name -> MemoiseWriteReq - 94, // 93: WSMessage.memoiseWriteResp:type_name -> MemoiseWriteResp - 95, // 94: WSMessage.multiQuantCompareReq:type_name -> MultiQuantCompareReq - 96, // 95: WSMessage.multiQuantCompareResp:type_name -> MultiQuantCompareResp - 97, // 96: WSMessage.notificationDismissReq:type_name -> NotificationDismissReq - 98, // 97: WSMessage.notificationDismissResp:type_name -> NotificationDismissResp - 99, // 98: WSMessage.notificationReq:type_name -> NotificationReq - 100, // 99: WSMessage.notificationResp:type_name -> NotificationResp - 101, // 100: WSMessage.notificationUpd:type_name -> NotificationUpd - 102, // 101: WSMessage.objectEditAccessReq:type_name -> ObjectEditAccessReq - 103, // 102: WSMessage.objectEditAccessResp:type_name -> ObjectEditAccessResp - 104, // 103: WSMessage.piquantConfigListReq:type_name -> PiquantConfigListReq - 105, // 104: WSMessage.piquantConfigListResp:type_name -> PiquantConfigListResp - 106, // 105: WSMessage.piquantConfigVersionReq:type_name -> PiquantConfigVersionReq - 107, // 106: WSMessage.piquantConfigVersionResp:type_name -> PiquantConfigVersionResp - 108, // 107: WSMessage.piquantConfigVersionsListReq:type_name -> PiquantConfigVersionsListReq - 109, // 108: WSMessage.piquantConfigVersionsListResp:type_name -> PiquantConfigVersionsListResp - 110, // 109: WSMessage.piquantCurrentVersionReq:type_name -> PiquantCurrentVersionReq - 111, // 110: WSMessage.piquantCurrentVersionResp:type_name -> PiquantCurrentVersionResp - 112, // 111: WSMessage.piquantVersionListReq:type_name -> PiquantVersionListReq - 113, // 112: WSMessage.piquantVersionListResp:type_name -> PiquantVersionListResp - 114, // 113: WSMessage.piquantWriteCurrentVersionReq:type_name -> PiquantWriteCurrentVersionReq - 115, // 114: WSMessage.piquantWriteCurrentVersionResp:type_name -> PiquantWriteCurrentVersionResp - 116, // 115: WSMessage.pseudoIntensityReq:type_name -> PseudoIntensityReq - 117, // 116: WSMessage.pseudoIntensityResp:type_name -> PseudoIntensityResp - 118, // 117: WSMessage.publishExpressionToZenodoReq:type_name -> PublishExpressionToZenodoReq - 119, // 118: WSMessage.publishExpressionToZenodoResp:type_name -> PublishExpressionToZenodoResp - 120, // 119: WSMessage.quantBlessReq:type_name -> QuantBlessReq - 121, // 120: WSMessage.quantBlessResp:type_name -> QuantBlessResp - 122, // 121: WSMessage.quantCombineListGetReq:type_name -> QuantCombineListGetReq - 123, // 122: WSMessage.quantCombineListGetResp:type_name -> QuantCombineListGetResp - 124, // 123: WSMessage.quantCombineListWriteReq:type_name -> QuantCombineListWriteReq - 125, // 124: WSMessage.quantCombineListWriteResp:type_name -> QuantCombineListWriteResp - 126, // 125: WSMessage.quantCombineReq:type_name -> QuantCombineReq - 127, // 126: WSMessage.quantCombineResp:type_name -> QuantCombineResp - 128, // 127: WSMessage.quantCreateReq:type_name -> QuantCreateReq - 129, // 128: WSMessage.quantCreateResp:type_name -> QuantCreateResp - 130, // 129: WSMessage.quantCreateUpd:type_name -> QuantCreateUpd - 131, // 130: WSMessage.quantDeleteReq:type_name -> QuantDeleteReq - 132, // 131: WSMessage.quantDeleteResp:type_name -> QuantDeleteResp - 133, // 132: WSMessage.quantGetReq:type_name -> QuantGetReq - 134, // 133: WSMessage.quantGetResp:type_name -> QuantGetResp - 135, // 134: WSMessage.quantLastOutputGetReq:type_name -> QuantLastOutputGetReq - 136, // 135: WSMessage.quantLastOutputGetResp:type_name -> QuantLastOutputGetResp - 137, // 136: WSMessage.quantListReq:type_name -> QuantListReq - 138, // 137: WSMessage.quantListResp:type_name -> QuantListResp - 139, // 138: WSMessage.quantLogGetReq:type_name -> QuantLogGetReq - 140, // 139: WSMessage.quantLogGetResp:type_name -> QuantLogGetResp - 141, // 140: WSMessage.quantLogListReq:type_name -> QuantLogListReq - 142, // 141: WSMessage.quantLogListResp:type_name -> QuantLogListResp - 143, // 142: WSMessage.quantPublishReq:type_name -> QuantPublishReq - 144, // 143: WSMessage.quantPublishResp:type_name -> QuantPublishResp - 145, // 144: WSMessage.quantRawDataGetReq:type_name -> QuantRawDataGetReq - 146, // 145: WSMessage.quantRawDataGetResp:type_name -> QuantRawDataGetResp - 147, // 146: WSMessage.quantUploadReq:type_name -> QuantUploadReq - 148, // 147: WSMessage.quantUploadResp:type_name -> QuantUploadResp - 149, // 148: WSMessage.regionOfInterestBulkDuplicateReq:type_name -> RegionOfInterestBulkDuplicateReq - 150, // 149: WSMessage.regionOfInterestBulkDuplicateResp:type_name -> RegionOfInterestBulkDuplicateResp - 151, // 150: WSMessage.regionOfInterestBulkWriteReq:type_name -> RegionOfInterestBulkWriteReq - 152, // 151: WSMessage.regionOfInterestBulkWriteResp:type_name -> RegionOfInterestBulkWriteResp - 153, // 152: WSMessage.regionOfInterestDeleteReq:type_name -> RegionOfInterestDeleteReq - 154, // 153: WSMessage.regionOfInterestDeleteResp:type_name -> RegionOfInterestDeleteResp - 155, // 154: WSMessage.regionOfInterestDisplaySettingsGetReq:type_name -> RegionOfInterestDisplaySettingsGetReq - 156, // 155: WSMessage.regionOfInterestDisplaySettingsGetResp:type_name -> RegionOfInterestDisplaySettingsGetResp - 157, // 156: WSMessage.regionOfInterestDisplaySettingsWriteReq:type_name -> RegionOfInterestDisplaySettingsWriteReq - 158, // 157: WSMessage.regionOfInterestDisplaySettingsWriteResp:type_name -> RegionOfInterestDisplaySettingsWriteResp - 159, // 158: WSMessage.regionOfInterestGetReq:type_name -> RegionOfInterestGetReq - 160, // 159: WSMessage.regionOfInterestGetResp:type_name -> RegionOfInterestGetResp - 161, // 160: WSMessage.regionOfInterestListReq:type_name -> RegionOfInterestListReq - 162, // 161: WSMessage.regionOfInterestListResp:type_name -> RegionOfInterestListResp - 163, // 162: WSMessage.regionOfInterestWriteReq:type_name -> RegionOfInterestWriteReq - 164, // 163: WSMessage.regionOfInterestWriteResp:type_name -> RegionOfInterestWriteResp - 165, // 164: WSMessage.runTestReq:type_name -> RunTestReq - 166, // 165: WSMessage.runTestResp:type_name -> RunTestResp - 167, // 166: WSMessage.scanAutoShareReq:type_name -> ScanAutoShareReq - 168, // 167: WSMessage.scanAutoShareResp:type_name -> ScanAutoShareResp - 169, // 168: WSMessage.scanAutoShareWriteReq:type_name -> ScanAutoShareWriteReq - 170, // 169: WSMessage.scanAutoShareWriteResp:type_name -> ScanAutoShareWriteResp - 171, // 170: WSMessage.scanBeamLocationsReq:type_name -> ScanBeamLocationsReq - 172, // 171: WSMessage.scanBeamLocationsResp:type_name -> ScanBeamLocationsResp - 173, // 172: WSMessage.scanDeleteReq:type_name -> ScanDeleteReq - 174, // 173: WSMessage.scanDeleteResp:type_name -> ScanDeleteResp - 175, // 174: WSMessage.scanEntryMetadataReq:type_name -> ScanEntryMetadataReq - 176, // 175: WSMessage.scanEntryMetadataResp:type_name -> ScanEntryMetadataResp - 177, // 176: WSMessage.scanEntryReq:type_name -> ScanEntryReq - 178, // 177: WSMessage.scanEntryResp:type_name -> ScanEntryResp - 179, // 178: WSMessage.scanGetReq:type_name -> ScanGetReq - 180, // 179: WSMessage.scanGetResp:type_name -> ScanGetResp - 181, // 180: WSMessage.scanListReq:type_name -> ScanListReq - 182, // 181: WSMessage.scanListResp:type_name -> ScanListResp - 183, // 182: WSMessage.scanListUpd:type_name -> ScanListUpd - 184, // 183: WSMessage.scanMetaLabelsAndTypesReq:type_name -> ScanMetaLabelsAndTypesReq - 185, // 184: WSMessage.scanMetaLabelsAndTypesResp:type_name -> ScanMetaLabelsAndTypesResp - 186, // 185: WSMessage.scanMetaWriteReq:type_name -> ScanMetaWriteReq - 187, // 186: WSMessage.scanMetaWriteResp:type_name -> ScanMetaWriteResp - 188, // 187: WSMessage.scanTriggerAutoQuantReq:type_name -> ScanTriggerAutoQuantReq - 189, // 188: WSMessage.scanTriggerAutoQuantResp:type_name -> ScanTriggerAutoQuantResp - 190, // 189: WSMessage.scanTriggerReImportReq:type_name -> ScanTriggerReImportReq - 191, // 190: WSMessage.scanTriggerReImportResp:type_name -> ScanTriggerReImportResp - 192, // 191: WSMessage.scanTriggerReImportUpd:type_name -> ScanTriggerReImportUpd - 193, // 192: WSMessage.scanUploadReq:type_name -> ScanUploadReq - 194, // 193: WSMessage.scanUploadResp:type_name -> ScanUploadResp - 195, // 194: WSMessage.scanUploadUpd:type_name -> ScanUploadUpd - 196, // 195: WSMessage.screenConfigurationDeleteReq:type_name -> ScreenConfigurationDeleteReq - 197, // 196: WSMessage.screenConfigurationDeleteResp:type_name -> ScreenConfigurationDeleteResp - 198, // 197: WSMessage.screenConfigurationGetReq:type_name -> ScreenConfigurationGetReq - 199, // 198: WSMessage.screenConfigurationGetResp:type_name -> ScreenConfigurationGetResp - 200, // 199: WSMessage.screenConfigurationListReq:type_name -> ScreenConfigurationListReq - 201, // 200: WSMessage.screenConfigurationListResp:type_name -> ScreenConfigurationListResp - 202, // 201: WSMessage.screenConfigurationWriteReq:type_name -> ScreenConfigurationWriteReq - 203, // 202: WSMessage.screenConfigurationWriteResp:type_name -> ScreenConfigurationWriteResp - 204, // 203: WSMessage.selectedImagePixelsReq:type_name -> SelectedImagePixelsReq - 205, // 204: WSMessage.selectedImagePixelsResp:type_name -> SelectedImagePixelsResp - 206, // 205: WSMessage.selectedImagePixelsWriteReq:type_name -> SelectedImagePixelsWriteReq - 207, // 206: WSMessage.selectedImagePixelsWriteResp:type_name -> SelectedImagePixelsWriteResp - 208, // 207: WSMessage.selectedScanEntriesReq:type_name -> SelectedScanEntriesReq - 209, // 208: WSMessage.selectedScanEntriesResp:type_name -> SelectedScanEntriesResp - 210, // 209: WSMessage.selectedScanEntriesWriteReq:type_name -> SelectedScanEntriesWriteReq - 211, // 210: WSMessage.selectedScanEntriesWriteResp:type_name -> SelectedScanEntriesWriteResp - 212, // 211: WSMessage.sendUserNotificationReq:type_name -> SendUserNotificationReq - 213, // 212: WSMessage.sendUserNotificationResp:type_name -> SendUserNotificationResp - 214, // 213: WSMessage.spectrumReq:type_name -> SpectrumReq - 215, // 214: WSMessage.spectrumResp:type_name -> SpectrumResp - 216, // 215: WSMessage.tagCreateReq:type_name -> TagCreateReq - 217, // 216: WSMessage.tagCreateResp:type_name -> TagCreateResp - 218, // 217: WSMessage.tagDeleteReq:type_name -> TagDeleteReq - 219, // 218: WSMessage.tagDeleteResp:type_name -> TagDeleteResp - 220, // 219: WSMessage.tagListReq:type_name -> TagListReq - 221, // 220: WSMessage.tagListResp:type_name -> TagListResp - 222, // 221: WSMessage.userAddRoleReq:type_name -> UserAddRoleReq - 223, // 222: WSMessage.userAddRoleResp:type_name -> UserAddRoleResp - 224, // 223: WSMessage.userDeleteRoleReq:type_name -> UserDeleteRoleReq - 225, // 224: WSMessage.userDeleteRoleResp:type_name -> UserDeleteRoleResp - 226, // 225: WSMessage.userDetailsReq:type_name -> UserDetailsReq - 227, // 226: WSMessage.userDetailsResp:type_name -> UserDetailsResp - 228, // 227: WSMessage.userDetailsWriteReq:type_name -> UserDetailsWriteReq - 229, // 228: WSMessage.userDetailsWriteResp:type_name -> UserDetailsWriteResp - 230, // 229: WSMessage.userGroupAddAdminReq:type_name -> UserGroupAddAdminReq - 231, // 230: WSMessage.userGroupAddAdminResp:type_name -> UserGroupAddAdminResp - 232, // 231: WSMessage.userGroupAddMemberReq:type_name -> UserGroupAddMemberReq - 233, // 232: WSMessage.userGroupAddMemberResp:type_name -> UserGroupAddMemberResp - 234, // 233: WSMessage.userGroupAddViewerReq:type_name -> UserGroupAddViewerReq - 235, // 234: WSMessage.userGroupAddViewerResp:type_name -> UserGroupAddViewerResp - 236, // 235: WSMessage.userGroupCreateReq:type_name -> UserGroupCreateReq - 237, // 236: WSMessage.userGroupCreateResp:type_name -> UserGroupCreateResp - 238, // 237: WSMessage.userGroupDeleteAdminReq:type_name -> UserGroupDeleteAdminReq - 239, // 238: WSMessage.userGroupDeleteAdminResp:type_name -> UserGroupDeleteAdminResp - 240, // 239: WSMessage.userGroupDeleteMemberReq:type_name -> UserGroupDeleteMemberReq - 241, // 240: WSMessage.userGroupDeleteMemberResp:type_name -> UserGroupDeleteMemberResp - 242, // 241: WSMessage.userGroupDeleteReq:type_name -> UserGroupDeleteReq - 243, // 242: WSMessage.userGroupDeleteResp:type_name -> UserGroupDeleteResp - 244, // 243: WSMessage.userGroupDeleteViewerReq:type_name -> UserGroupDeleteViewerReq - 245, // 244: WSMessage.userGroupDeleteViewerResp:type_name -> UserGroupDeleteViewerResp - 246, // 245: WSMessage.userGroupEditDetailsReq:type_name -> UserGroupEditDetailsReq - 247, // 246: WSMessage.userGroupEditDetailsResp:type_name -> UserGroupEditDetailsResp - 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.userListReq:type_name -> UserListReq - 261, // 260: WSMessage.userListResp:type_name -> UserListResp - 262, // 261: WSMessage.userNotificationSettingsReq:type_name -> UserNotificationSettingsReq - 263, // 262: WSMessage.userNotificationSettingsResp:type_name -> UserNotificationSettingsResp - 264, // 263: WSMessage.userNotificationSettingsUpd:type_name -> UserNotificationSettingsUpd - 265, // 264: WSMessage.userNotificationSettingsWriteReq:type_name -> UserNotificationSettingsWriteReq - 266, // 265: WSMessage.userNotificationSettingsWriteResp:type_name -> UserNotificationSettingsWriteResp - 267, // 266: WSMessage.userRoleListReq:type_name -> UserRoleListReq - 268, // 267: WSMessage.userRoleListResp:type_name -> UserRoleListResp - 269, // 268: WSMessage.userRolesListReq:type_name -> UserRolesListReq - 270, // 269: WSMessage.userRolesListResp:type_name -> UserRolesListResp - 271, // 270: WSMessage.userSearchReq:type_name -> UserSearchReq - 272, // 271: WSMessage.userSearchResp:type_name -> UserSearchResp - 273, // 272: WSMessage.widgetDataGetReq:type_name -> WidgetDataGetReq - 274, // 273: WSMessage.widgetDataGetResp:type_name -> WidgetDataGetResp - 275, // 274: WSMessage.widgetDataWriteReq:type_name -> WidgetDataWriteReq - 276, // 275: WSMessage.widgetDataWriteResp:type_name -> WidgetDataWriteResp - 277, // 276: WSMessage.zenodoDOIGetReq:type_name -> ZenodoDOIGetReq - 278, // 277: WSMessage.zenodoDOIGetResp:type_name -> ZenodoDOIGetResp - 278, // [278:278] is the sub-list for method output_type - 278, // [278:278] is the sub-list for method input_type - 278, // [278:278] is the sub-list for extension type_name - 278, // [278:278] is the sub-list for extension extendee - 0, // [0:278] is the sub-list for field type_name + 2, // 1: WSMessage.backupDBReq:type_name -> BackupDBReq + 3, // 2: WSMessage.backupDBResp:type_name -> BackupDBResp + 4, // 3: WSMessage.backupDBUpd:type_name -> BackupDBUpd + 5, // 4: WSMessage.dBAdminConfigGetReq:type_name -> DBAdminConfigGetReq + 6, // 5: WSMessage.dBAdminConfigGetResp:type_name -> DBAdminConfigGetResp + 7, // 6: WSMessage.dataModuleAddVersionReq:type_name -> DataModuleAddVersionReq + 8, // 7: WSMessage.dataModuleAddVersionResp:type_name -> DataModuleAddVersionResp + 9, // 8: WSMessage.dataModuleGetReq:type_name -> DataModuleGetReq + 10, // 9: WSMessage.dataModuleGetResp:type_name -> DataModuleGetResp + 11, // 10: WSMessage.dataModuleListReq:type_name -> DataModuleListReq + 12, // 11: WSMessage.dataModuleListResp:type_name -> DataModuleListResp + 13, // 12: WSMessage.dataModuleWriteReq:type_name -> DataModuleWriteReq + 14, // 13: WSMessage.dataModuleWriteResp:type_name -> DataModuleWriteResp + 15, // 14: WSMessage.detectedDiffractionPeaksReq:type_name -> DetectedDiffractionPeaksReq + 16, // 15: WSMessage.detectedDiffractionPeaksResp:type_name -> DetectedDiffractionPeaksResp + 17, // 16: WSMessage.detectorConfigListReq:type_name -> DetectorConfigListReq + 18, // 17: WSMessage.detectorConfigListResp:type_name -> DetectorConfigListResp + 19, // 18: WSMessage.detectorConfigReq:type_name -> DetectorConfigReq + 20, // 19: WSMessage.detectorConfigResp:type_name -> DetectorConfigResp + 21, // 20: WSMessage.diffractionPeakManualDeleteReq:type_name -> DiffractionPeakManualDeleteReq + 22, // 21: WSMessage.diffractionPeakManualDeleteResp:type_name -> DiffractionPeakManualDeleteResp + 23, // 22: WSMessage.diffractionPeakManualInsertReq:type_name -> DiffractionPeakManualInsertReq + 24, // 23: WSMessage.diffractionPeakManualInsertResp:type_name -> DiffractionPeakManualInsertResp + 25, // 24: WSMessage.diffractionPeakManualListReq:type_name -> DiffractionPeakManualListReq + 26, // 25: WSMessage.diffractionPeakManualListResp:type_name -> DiffractionPeakManualListResp + 27, // 26: WSMessage.diffractionPeakStatusDeleteReq:type_name -> DiffractionPeakStatusDeleteReq + 28, // 27: WSMessage.diffractionPeakStatusDeleteResp:type_name -> DiffractionPeakStatusDeleteResp + 29, // 28: WSMessage.diffractionPeakStatusListReq:type_name -> DiffractionPeakStatusListReq + 30, // 29: WSMessage.diffractionPeakStatusListResp:type_name -> DiffractionPeakStatusListResp + 31, // 30: WSMessage.diffractionPeakStatusWriteReq:type_name -> DiffractionPeakStatusWriteReq + 32, // 31: WSMessage.diffractionPeakStatusWriteResp:type_name -> DiffractionPeakStatusWriteResp + 33, // 32: WSMessage.elementSetDeleteReq:type_name -> ElementSetDeleteReq + 34, // 33: WSMessage.elementSetDeleteResp:type_name -> ElementSetDeleteResp + 35, // 34: WSMessage.elementSetGetReq:type_name -> ElementSetGetReq + 36, // 35: WSMessage.elementSetGetResp:type_name -> ElementSetGetResp + 37, // 36: WSMessage.elementSetListReq:type_name -> ElementSetListReq + 38, // 37: WSMessage.elementSetListResp:type_name -> ElementSetListResp + 39, // 38: WSMessage.elementSetWriteReq:type_name -> ElementSetWriteReq + 40, // 39: WSMessage.elementSetWriteResp:type_name -> ElementSetWriteResp + 41, // 40: WSMessage.exportFilesReq:type_name -> ExportFilesReq + 42, // 41: WSMessage.exportFilesResp:type_name -> ExportFilesResp + 43, // 42: WSMessage.expressionDeleteReq:type_name -> ExpressionDeleteReq + 44, // 43: WSMessage.expressionDeleteResp:type_name -> ExpressionDeleteResp + 45, // 44: WSMessage.expressionDisplaySettingsGetReq:type_name -> ExpressionDisplaySettingsGetReq + 46, // 45: WSMessage.expressionDisplaySettingsGetResp:type_name -> ExpressionDisplaySettingsGetResp + 47, // 46: WSMessage.expressionDisplaySettingsWriteReq:type_name -> ExpressionDisplaySettingsWriteReq + 48, // 47: WSMessage.expressionDisplaySettingsWriteResp:type_name -> ExpressionDisplaySettingsWriteResp + 49, // 48: WSMessage.expressionGetReq:type_name -> ExpressionGetReq + 50, // 49: WSMessage.expressionGetResp:type_name -> ExpressionGetResp + 51, // 50: WSMessage.expressionGroupDeleteReq:type_name -> ExpressionGroupDeleteReq + 52, // 51: WSMessage.expressionGroupDeleteResp:type_name -> ExpressionGroupDeleteResp + 53, // 52: WSMessage.expressionGroupGetReq:type_name -> ExpressionGroupGetReq + 54, // 53: WSMessage.expressionGroupGetResp:type_name -> ExpressionGroupGetResp + 55, // 54: WSMessage.expressionGroupListReq:type_name -> ExpressionGroupListReq + 56, // 55: WSMessage.expressionGroupListResp:type_name -> ExpressionGroupListResp + 57, // 56: WSMessage.expressionGroupWriteReq:type_name -> ExpressionGroupWriteReq + 58, // 57: WSMessage.expressionGroupWriteResp:type_name -> ExpressionGroupWriteResp + 59, // 58: WSMessage.expressionListReq:type_name -> ExpressionListReq + 60, // 59: WSMessage.expressionListResp:type_name -> ExpressionListResp + 61, // 60: WSMessage.expressionWriteExecStatReq:type_name -> ExpressionWriteExecStatReq + 62, // 61: WSMessage.expressionWriteExecStatResp:type_name -> ExpressionWriteExecStatResp + 63, // 62: WSMessage.expressionWriteReq:type_name -> ExpressionWriteReq + 64, // 63: WSMessage.expressionWriteResp:type_name -> ExpressionWriteResp + 65, // 64: WSMessage.getOwnershipReq:type_name -> GetOwnershipReq + 66, // 65: WSMessage.getOwnershipResp:type_name -> GetOwnershipResp + 67, // 66: WSMessage.imageBeamLocationVersionsReq:type_name -> ImageBeamLocationVersionsReq + 68, // 67: WSMessage.imageBeamLocationVersionsResp:type_name -> ImageBeamLocationVersionsResp + 69, // 68: WSMessage.imageBeamLocationsReq:type_name -> ImageBeamLocationsReq + 70, // 69: WSMessage.imageBeamLocationsResp:type_name -> ImageBeamLocationsResp + 71, // 70: WSMessage.imageDeleteReq:type_name -> ImageDeleteReq + 72, // 71: WSMessage.imageDeleteResp:type_name -> ImageDeleteResp + 73, // 72: WSMessage.imageGetDefaultReq:type_name -> ImageGetDefaultReq + 74, // 73: WSMessage.imageGetDefaultResp:type_name -> ImageGetDefaultResp + 75, // 74: WSMessage.imageGetReq:type_name -> ImageGetReq + 76, // 75: WSMessage.imageGetResp:type_name -> ImageGetResp + 77, // 76: WSMessage.imageListReq:type_name -> ImageListReq + 78, // 77: WSMessage.imageListResp:type_name -> ImageListResp + 79, // 78: WSMessage.imageListUpd:type_name -> ImageListUpd + 80, // 79: WSMessage.imageSetDefaultReq:type_name -> ImageSetDefaultReq + 81, // 80: WSMessage.imageSetDefaultResp:type_name -> ImageSetDefaultResp + 82, // 81: WSMessage.imageSetMatchTransformReq:type_name -> ImageSetMatchTransformReq + 83, // 82: WSMessage.imageSetMatchTransformResp:type_name -> ImageSetMatchTransformResp + 84, // 83: WSMessage.importMarsViewerImageReq:type_name -> ImportMarsViewerImageReq + 85, // 84: WSMessage.importMarsViewerImageResp:type_name -> ImportMarsViewerImageResp + 86, // 85: WSMessage.importMarsViewerImageUpd:type_name -> ImportMarsViewerImageUpd + 87, // 86: WSMessage.jobListReq:type_name -> JobListReq + 88, // 87: WSMessage.jobListResp:type_name -> JobListResp + 89, // 88: WSMessage.jobListUpd:type_name -> JobListUpd + 90, // 89: WSMessage.logGetLevelReq:type_name -> LogGetLevelReq + 91, // 90: WSMessage.logGetLevelResp:type_name -> LogGetLevelResp + 92, // 91: WSMessage.logReadReq:type_name -> LogReadReq + 93, // 92: WSMessage.logReadResp:type_name -> LogReadResp + 94, // 93: WSMessage.logSetLevelReq:type_name -> LogSetLevelReq + 95, // 94: WSMessage.logSetLevelResp:type_name -> LogSetLevelResp + 96, // 95: WSMessage.memoiseGetReq:type_name -> MemoiseGetReq + 97, // 96: WSMessage.memoiseGetResp:type_name -> MemoiseGetResp + 98, // 97: WSMessage.memoiseWriteReq:type_name -> MemoiseWriteReq + 99, // 98: WSMessage.memoiseWriteResp:type_name -> MemoiseWriteResp + 100, // 99: WSMessage.multiQuantCompareReq:type_name -> MultiQuantCompareReq + 101, // 100: WSMessage.multiQuantCompareResp:type_name -> MultiQuantCompareResp + 102, // 101: WSMessage.notificationDismissReq:type_name -> NotificationDismissReq + 103, // 102: WSMessage.notificationDismissResp:type_name -> NotificationDismissResp + 104, // 103: WSMessage.notificationReq:type_name -> NotificationReq + 105, // 104: WSMessage.notificationResp:type_name -> NotificationResp + 106, // 105: WSMessage.notificationUpd:type_name -> NotificationUpd + 107, // 106: WSMessage.objectEditAccessReq:type_name -> ObjectEditAccessReq + 108, // 107: WSMessage.objectEditAccessResp:type_name -> ObjectEditAccessResp + 109, // 108: WSMessage.piquantConfigListReq:type_name -> PiquantConfigListReq + 110, // 109: WSMessage.piquantConfigListResp:type_name -> PiquantConfigListResp + 111, // 110: WSMessage.piquantConfigVersionReq:type_name -> PiquantConfigVersionReq + 112, // 111: WSMessage.piquantConfigVersionResp:type_name -> PiquantConfigVersionResp + 113, // 112: WSMessage.piquantConfigVersionsListReq:type_name -> PiquantConfigVersionsListReq + 114, // 113: WSMessage.piquantConfigVersionsListResp:type_name -> PiquantConfigVersionsListResp + 115, // 114: WSMessage.piquantCurrentVersionReq:type_name -> PiquantCurrentVersionReq + 116, // 115: WSMessage.piquantCurrentVersionResp:type_name -> PiquantCurrentVersionResp + 117, // 116: WSMessage.piquantVersionListReq:type_name -> PiquantVersionListReq + 118, // 117: WSMessage.piquantVersionListResp:type_name -> PiquantVersionListResp + 119, // 118: WSMessage.piquantWriteCurrentVersionReq:type_name -> PiquantWriteCurrentVersionReq + 120, // 119: WSMessage.piquantWriteCurrentVersionResp:type_name -> PiquantWriteCurrentVersionResp + 121, // 120: WSMessage.pseudoIntensityReq:type_name -> PseudoIntensityReq + 122, // 121: WSMessage.pseudoIntensityResp:type_name -> PseudoIntensityResp + 123, // 122: WSMessage.publishExpressionToZenodoReq:type_name -> PublishExpressionToZenodoReq + 124, // 123: WSMessage.publishExpressionToZenodoResp:type_name -> PublishExpressionToZenodoResp + 125, // 124: WSMessage.quantBlessReq:type_name -> QuantBlessReq + 126, // 125: WSMessage.quantBlessResp:type_name -> QuantBlessResp + 127, // 126: WSMessage.quantCombineListGetReq:type_name -> QuantCombineListGetReq + 128, // 127: WSMessage.quantCombineListGetResp:type_name -> QuantCombineListGetResp + 129, // 128: WSMessage.quantCombineListWriteReq:type_name -> QuantCombineListWriteReq + 130, // 129: WSMessage.quantCombineListWriteResp:type_name -> QuantCombineListWriteResp + 131, // 130: WSMessage.quantCombineReq:type_name -> QuantCombineReq + 132, // 131: WSMessage.quantCombineResp:type_name -> QuantCombineResp + 133, // 132: WSMessage.quantCreateReq:type_name -> QuantCreateReq + 134, // 133: WSMessage.quantCreateResp:type_name -> QuantCreateResp + 135, // 134: WSMessage.quantCreateUpd:type_name -> QuantCreateUpd + 136, // 135: WSMessage.quantDeleteReq:type_name -> QuantDeleteReq + 137, // 136: WSMessage.quantDeleteResp:type_name -> QuantDeleteResp + 138, // 137: WSMessage.quantGetReq:type_name -> QuantGetReq + 139, // 138: WSMessage.quantGetResp:type_name -> QuantGetResp + 140, // 139: WSMessage.quantLastOutputGetReq:type_name -> QuantLastOutputGetReq + 141, // 140: WSMessage.quantLastOutputGetResp:type_name -> QuantLastOutputGetResp + 142, // 141: WSMessage.quantListReq:type_name -> QuantListReq + 143, // 142: WSMessage.quantListResp:type_name -> QuantListResp + 144, // 143: WSMessage.quantLogGetReq:type_name -> QuantLogGetReq + 145, // 144: WSMessage.quantLogGetResp:type_name -> QuantLogGetResp + 146, // 145: WSMessage.quantLogListReq:type_name -> QuantLogListReq + 147, // 146: WSMessage.quantLogListResp:type_name -> QuantLogListResp + 148, // 147: WSMessage.quantPublishReq:type_name -> QuantPublishReq + 149, // 148: WSMessage.quantPublishResp:type_name -> QuantPublishResp + 150, // 149: WSMessage.quantRawDataGetReq:type_name -> QuantRawDataGetReq + 151, // 150: WSMessage.quantRawDataGetResp:type_name -> QuantRawDataGetResp + 152, // 151: WSMessage.quantUploadReq:type_name -> QuantUploadReq + 153, // 152: WSMessage.quantUploadResp:type_name -> QuantUploadResp + 154, // 153: WSMessage.regionOfInterestBulkDuplicateReq:type_name -> RegionOfInterestBulkDuplicateReq + 155, // 154: WSMessage.regionOfInterestBulkDuplicateResp:type_name -> RegionOfInterestBulkDuplicateResp + 156, // 155: WSMessage.regionOfInterestBulkWriteReq:type_name -> RegionOfInterestBulkWriteReq + 157, // 156: WSMessage.regionOfInterestBulkWriteResp:type_name -> RegionOfInterestBulkWriteResp + 158, // 157: WSMessage.regionOfInterestDeleteReq:type_name -> RegionOfInterestDeleteReq + 159, // 158: WSMessage.regionOfInterestDeleteResp:type_name -> RegionOfInterestDeleteResp + 160, // 159: WSMessage.regionOfInterestDisplaySettingsGetReq:type_name -> RegionOfInterestDisplaySettingsGetReq + 161, // 160: WSMessage.regionOfInterestDisplaySettingsGetResp:type_name -> RegionOfInterestDisplaySettingsGetResp + 162, // 161: WSMessage.regionOfInterestDisplaySettingsWriteReq:type_name -> RegionOfInterestDisplaySettingsWriteReq + 163, // 162: WSMessage.regionOfInterestDisplaySettingsWriteResp:type_name -> RegionOfInterestDisplaySettingsWriteResp + 164, // 163: WSMessage.regionOfInterestGetReq:type_name -> RegionOfInterestGetReq + 165, // 164: WSMessage.regionOfInterestGetResp:type_name -> RegionOfInterestGetResp + 166, // 165: WSMessage.regionOfInterestListReq:type_name -> RegionOfInterestListReq + 167, // 166: WSMessage.regionOfInterestListResp:type_name -> RegionOfInterestListResp + 168, // 167: WSMessage.regionOfInterestWriteReq:type_name -> RegionOfInterestWriteReq + 169, // 168: WSMessage.regionOfInterestWriteResp:type_name -> RegionOfInterestWriteResp + 170, // 169: WSMessage.restoreDBReq:type_name -> RestoreDBReq + 171, // 170: WSMessage.restoreDBResp:type_name -> RestoreDBResp + 172, // 171: WSMessage.runTestReq:type_name -> RunTestReq + 173, // 172: WSMessage.runTestResp:type_name -> RunTestResp + 174, // 173: WSMessage.scanAutoShareReq:type_name -> ScanAutoShareReq + 175, // 174: WSMessage.scanAutoShareResp:type_name -> ScanAutoShareResp + 176, // 175: WSMessage.scanAutoShareWriteReq:type_name -> ScanAutoShareWriteReq + 177, // 176: WSMessage.scanAutoShareWriteResp:type_name -> ScanAutoShareWriteResp + 178, // 177: WSMessage.scanBeamLocationsReq:type_name -> ScanBeamLocationsReq + 179, // 178: WSMessage.scanBeamLocationsResp:type_name -> ScanBeamLocationsResp + 180, // 179: WSMessage.scanDeleteReq:type_name -> ScanDeleteReq + 181, // 180: WSMessage.scanDeleteResp:type_name -> ScanDeleteResp + 182, // 181: WSMessage.scanEntryMetadataReq:type_name -> ScanEntryMetadataReq + 183, // 182: WSMessage.scanEntryMetadataResp:type_name -> ScanEntryMetadataResp + 184, // 183: WSMessage.scanEntryReq:type_name -> ScanEntryReq + 185, // 184: WSMessage.scanEntryResp:type_name -> ScanEntryResp + 186, // 185: WSMessage.scanGetReq:type_name -> ScanGetReq + 187, // 186: WSMessage.scanGetResp:type_name -> ScanGetResp + 188, // 187: WSMessage.scanListReq:type_name -> ScanListReq + 189, // 188: WSMessage.scanListResp:type_name -> ScanListResp + 190, // 189: WSMessage.scanListUpd:type_name -> ScanListUpd + 191, // 190: WSMessage.scanMetaLabelsAndTypesReq:type_name -> ScanMetaLabelsAndTypesReq + 192, // 191: WSMessage.scanMetaLabelsAndTypesResp:type_name -> ScanMetaLabelsAndTypesResp + 193, // 192: WSMessage.scanMetaWriteReq:type_name -> ScanMetaWriteReq + 194, // 193: WSMessage.scanMetaWriteResp:type_name -> ScanMetaWriteResp + 195, // 194: WSMessage.scanTriggerAutoQuantReq:type_name -> ScanTriggerAutoQuantReq + 196, // 195: WSMessage.scanTriggerAutoQuantResp:type_name -> ScanTriggerAutoQuantResp + 197, // 196: WSMessage.scanTriggerReImportReq:type_name -> ScanTriggerReImportReq + 198, // 197: WSMessage.scanTriggerReImportResp:type_name -> ScanTriggerReImportResp + 199, // 198: WSMessage.scanTriggerReImportUpd:type_name -> ScanTriggerReImportUpd + 200, // 199: WSMessage.scanUploadReq:type_name -> ScanUploadReq + 201, // 200: WSMessage.scanUploadResp:type_name -> ScanUploadResp + 202, // 201: WSMessage.scanUploadUpd:type_name -> ScanUploadUpd + 203, // 202: WSMessage.screenConfigurationDeleteReq:type_name -> ScreenConfigurationDeleteReq + 204, // 203: WSMessage.screenConfigurationDeleteResp:type_name -> ScreenConfigurationDeleteResp + 205, // 204: WSMessage.screenConfigurationGetReq:type_name -> ScreenConfigurationGetReq + 206, // 205: WSMessage.screenConfigurationGetResp:type_name -> ScreenConfigurationGetResp + 207, // 206: WSMessage.screenConfigurationListReq:type_name -> ScreenConfigurationListReq + 208, // 207: WSMessage.screenConfigurationListResp:type_name -> ScreenConfigurationListResp + 209, // 208: WSMessage.screenConfigurationWriteReq:type_name -> ScreenConfigurationWriteReq + 210, // 209: WSMessage.screenConfigurationWriteResp:type_name -> ScreenConfigurationWriteResp + 211, // 210: WSMessage.selectedImagePixelsReq:type_name -> SelectedImagePixelsReq + 212, // 211: WSMessage.selectedImagePixelsResp:type_name -> SelectedImagePixelsResp + 213, // 212: WSMessage.selectedImagePixelsWriteReq:type_name -> SelectedImagePixelsWriteReq + 214, // 213: WSMessage.selectedImagePixelsWriteResp:type_name -> SelectedImagePixelsWriteResp + 215, // 214: WSMessage.selectedScanEntriesReq:type_name -> SelectedScanEntriesReq + 216, // 215: WSMessage.selectedScanEntriesResp:type_name -> SelectedScanEntriesResp + 217, // 216: WSMessage.selectedScanEntriesWriteReq:type_name -> SelectedScanEntriesWriteReq + 218, // 217: WSMessage.selectedScanEntriesWriteResp:type_name -> SelectedScanEntriesWriteResp + 219, // 218: WSMessage.sendUserNotificationReq:type_name -> SendUserNotificationReq + 220, // 219: WSMessage.sendUserNotificationResp:type_name -> SendUserNotificationResp + 221, // 220: WSMessage.spectrumReq:type_name -> SpectrumReq + 222, // 221: WSMessage.spectrumResp:type_name -> SpectrumResp + 223, // 222: WSMessage.tagCreateReq:type_name -> TagCreateReq + 224, // 223: WSMessage.tagCreateResp:type_name -> TagCreateResp + 225, // 224: WSMessage.tagDeleteReq:type_name -> TagDeleteReq + 226, // 225: WSMessage.tagDeleteResp:type_name -> TagDeleteResp + 227, // 226: WSMessage.tagListReq:type_name -> TagListReq + 228, // 227: WSMessage.tagListResp:type_name -> TagListResp + 229, // 228: WSMessage.userAddRoleReq:type_name -> UserAddRoleReq + 230, // 229: WSMessage.userAddRoleResp:type_name -> UserAddRoleResp + 231, // 230: WSMessage.userDeleteRoleReq:type_name -> UserDeleteRoleReq + 232, // 231: WSMessage.userDeleteRoleResp:type_name -> UserDeleteRoleResp + 233, // 232: WSMessage.userDetailsReq:type_name -> UserDetailsReq + 234, // 233: WSMessage.userDetailsResp:type_name -> UserDetailsResp + 235, // 234: WSMessage.userDetailsWriteReq:type_name -> UserDetailsWriteReq + 236, // 235: WSMessage.userDetailsWriteResp:type_name -> UserDetailsWriteResp + 237, // 236: WSMessage.userGroupAddAdminReq:type_name -> UserGroupAddAdminReq + 238, // 237: WSMessage.userGroupAddAdminResp:type_name -> UserGroupAddAdminResp + 239, // 238: WSMessage.userGroupAddMemberReq:type_name -> UserGroupAddMemberReq + 240, // 239: WSMessage.userGroupAddMemberResp:type_name -> UserGroupAddMemberResp + 241, // 240: WSMessage.userGroupAddViewerReq:type_name -> UserGroupAddViewerReq + 242, // 241: WSMessage.userGroupAddViewerResp:type_name -> UserGroupAddViewerResp + 243, // 242: WSMessage.userGroupCreateReq:type_name -> UserGroupCreateReq + 244, // 243: WSMessage.userGroupCreateResp:type_name -> UserGroupCreateResp + 245, // 244: WSMessage.userGroupDeleteAdminReq:type_name -> UserGroupDeleteAdminReq + 246, // 245: WSMessage.userGroupDeleteAdminResp:type_name -> UserGroupDeleteAdminResp + 247, // 246: WSMessage.userGroupDeleteMemberReq:type_name -> UserGroupDeleteMemberReq + 248, // 247: WSMessage.userGroupDeleteMemberResp:type_name -> UserGroupDeleteMemberResp + 249, // 248: WSMessage.userGroupDeleteReq:type_name -> UserGroupDeleteReq + 250, // 249: WSMessage.userGroupDeleteResp:type_name -> UserGroupDeleteResp + 251, // 250: WSMessage.userGroupDeleteViewerReq:type_name -> UserGroupDeleteViewerReq + 252, // 251: WSMessage.userGroupDeleteViewerResp:type_name -> UserGroupDeleteViewerResp + 253, // 252: WSMessage.userGroupEditDetailsReq:type_name -> UserGroupEditDetailsReq + 254, // 253: WSMessage.userGroupEditDetailsResp:type_name -> UserGroupEditDetailsResp + 255, // 254: WSMessage.userGroupIgnoreJoinReq:type_name -> UserGroupIgnoreJoinReq + 256, // 255: WSMessage.userGroupIgnoreJoinResp:type_name -> UserGroupIgnoreJoinResp + 257, // 256: WSMessage.userGroupJoinListReq:type_name -> UserGroupJoinListReq + 258, // 257: WSMessage.userGroupJoinListResp:type_name -> UserGroupJoinListResp + 259, // 258: WSMessage.userGroupJoinReq:type_name -> UserGroupJoinReq + 260, // 259: WSMessage.userGroupJoinResp:type_name -> UserGroupJoinResp + 261, // 260: WSMessage.userGroupListJoinableReq:type_name -> UserGroupListJoinableReq + 262, // 261: WSMessage.userGroupListJoinableResp:type_name -> UserGroupListJoinableResp + 263, // 262: WSMessage.userGroupListReq:type_name -> UserGroupListReq + 264, // 263: WSMessage.userGroupListResp:type_name -> UserGroupListResp + 265, // 264: WSMessage.userGroupReq:type_name -> UserGroupReq + 266, // 265: WSMessage.userGroupResp:type_name -> UserGroupResp + 267, // 266: WSMessage.userImpersonateGetReq:type_name -> UserImpersonateGetReq + 268, // 267: WSMessage.userImpersonateGetResp:type_name -> UserImpersonateGetResp + 269, // 268: WSMessage.userImpersonateReq:type_name -> UserImpersonateReq + 270, // 269: WSMessage.userImpersonateResp:type_name -> UserImpersonateResp + 271, // 270: WSMessage.userListReq:type_name -> UserListReq + 272, // 271: WSMessage.userListResp:type_name -> UserListResp + 273, // 272: WSMessage.userNotificationSettingsReq:type_name -> UserNotificationSettingsReq + 274, // 273: WSMessage.userNotificationSettingsResp:type_name -> UserNotificationSettingsResp + 275, // 274: WSMessage.userNotificationSettingsUpd:type_name -> UserNotificationSettingsUpd + 276, // 275: WSMessage.userNotificationSettingsWriteReq:type_name -> UserNotificationSettingsWriteReq + 277, // 276: WSMessage.userNotificationSettingsWriteResp:type_name -> UserNotificationSettingsWriteResp + 278, // 277: WSMessage.userRoleListReq:type_name -> UserRoleListReq + 279, // 278: WSMessage.userRoleListResp:type_name -> UserRoleListResp + 280, // 279: WSMessage.userRolesListReq:type_name -> UserRolesListReq + 281, // 280: WSMessage.userRolesListResp:type_name -> UserRolesListResp + 282, // 281: WSMessage.userSearchReq:type_name -> UserSearchReq + 283, // 282: WSMessage.userSearchResp:type_name -> UserSearchResp + 284, // 283: WSMessage.widgetDataGetReq:type_name -> WidgetDataGetReq + 285, // 284: WSMessage.widgetDataGetResp:type_name -> WidgetDataGetResp + 286, // 285: WSMessage.widgetDataWriteReq:type_name -> WidgetDataWriteReq + 287, // 286: WSMessage.widgetDataWriteResp:type_name -> WidgetDataWriteResp + 288, // 287: WSMessage.zenodoDOIGetReq:type_name -> ZenodoDOIGetReq + 289, // 288: WSMessage.zenodoDOIGetResp:type_name -> ZenodoDOIGetResp + 289, // [289:289] is the sub-list for method output_type + 289, // [289:289] is the sub-list for method input_type + 289, // [289:289] is the sub-list for extension type_name + 289, // [289:289] is the sub-list for extension extendee + 0, // [0:289] is the sub-list for field type_name } func init() { file_websocket_proto_init() } @@ -6135,6 +6358,7 @@ func file_websocket_proto_init() { file_doi_msgs_proto_init() file_screen_configuration_msgs_proto_init() file_widget_data_msgs_proto_init() + file_system_proto_init() if !protoimpl.UnsafeEnabled { file_websocket_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WSMessage); i { @@ -6150,6 +6374,11 @@ func file_websocket_proto_init() { } } file_websocket_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*WSMessage_BackupDBReq)(nil), + (*WSMessage_BackupDBResp)(nil), + (*WSMessage_BackupDBUpd)(nil), + (*WSMessage_DBAdminConfigGetReq)(nil), + (*WSMessage_DBAdminConfigGetResp)(nil), (*WSMessage_DataModuleAddVersionReq)(nil), (*WSMessage_DataModuleAddVersionResp)(nil), (*WSMessage_DataModuleGetReq)(nil), @@ -6313,6 +6542,8 @@ func file_websocket_proto_init() { (*WSMessage_RegionOfInterestListResp)(nil), (*WSMessage_RegionOfInterestWriteReq)(nil), (*WSMessage_RegionOfInterestWriteResp)(nil), + (*WSMessage_RestoreDBReq)(nil), + (*WSMessage_RestoreDBResp)(nil), (*WSMessage_RunTestReq)(nil), (*WSMessage_RunTestResp)(nil), (*WSMessage_ScanAutoShareReq)(nil), @@ -6408,6 +6639,10 @@ func file_websocket_proto_init() { (*WSMessage_UserGroupListResp)(nil), (*WSMessage_UserGroupReq)(nil), (*WSMessage_UserGroupResp)(nil), + (*WSMessage_UserImpersonateGetReq)(nil), + (*WSMessage_UserImpersonateGetResp)(nil), + (*WSMessage_UserImpersonateReq)(nil), + (*WSMessage_UserImpersonateResp)(nil), (*WSMessage_UserListReq)(nil), (*WSMessage_UserListResp)(nil), (*WSMessage_UserNotificationSettingsReq)(nil), diff --git a/go.mod b/go.mod index 518aa863..7f4fbb47 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.21 require ( github.com/auth0-community/go-auth0 v1.0.0 github.com/aws/aws-lambda-go v1.36.0 - github.com/aws/aws-sdk-go v1.44.159 + github.com/aws/aws-sdk-go v1.53.11 github.com/aws/aws-secretsmanager-caching-go v1.1.0 github.com/getsentry/sentry-go v0.16.0 github.com/gorilla/handlers v1.5.1 @@ -15,8 +15,8 @@ require ( github.com/pixlise/diffraction-peak-detection/v2 v2.0.3 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.15.1 - go.mongodb.org/mongo-driver v1.12.0 - golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb + go.mongodb.org/mongo-driver v1.16.0 + golang.org/x/exp v0.0.0-20240529005216-23cca8864a10 golang.org/x/image v0.9.0 google.golang.org/protobuf v1.31.0 gopkg.in/auth0.v4 v4.7.0 @@ -41,19 +41,21 @@ require ( github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/gnostic-models v0.6.8 // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/uuid v1.3.0 // indirect github.com/imdario/mergo v0.3.13 // indirect + github.com/jessevdk/go-flags v1.5.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.15.13 // indirect + github.com/klauspost/compress v1.17.8 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/montanaflynn/stats v0.6.6 // indirect + github.com/mongodb/mongo-tools v0.0.0-20240909153453-a5bb3a149a1f // indirect + github.com/montanaflynn/stats v0.7.1 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/prometheus/client_model v0.3.0 // indirect github.com/prometheus/common v0.42.0 // indirect @@ -63,13 +65,13 @@ require ( github.com/xdg-go/scram v1.1.2 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/net v0.17.0 // indirect + golang.org/x/crypto v0.25.0 // indirect + golang.org/x/net v0.25.0 // indirect golang.org/x/oauth2 v0.8.0 // indirect - golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.15.0 // indirect - golang.org/x/term v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/term v0.22.0 // indirect + golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.3.0 // indirect google.golang.org/appengine v1.6.7 // indirect gopkg.in/inf.v0 v0.9.1 // indirect diff --git a/go.sum b/go.sum index 0b41b0a7..83e331c1 100644 --- a/go.sum +++ b/go.sum @@ -9,6 +9,8 @@ github.com/aws/aws-lambda-go v1.36.0/go.mod h1:jwFe2KmMsHmffA1X2R09hH6lFzJQxzI8q github.com/aws/aws-sdk-go v1.19.23/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.44.159 h1:9odtuHAYQE9tQKyuX6ny1U1MHeH5/yzeCJi96g9H4DU= github.com/aws/aws-sdk-go v1.44.159/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.53.11 h1:KcmduYvX15rRqt4ZU/7jKkmDxU/G87LJ9MUI0yQJh00= +github.com/aws/aws-sdk-go v1.53.11/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/aws-secretsmanager-caching-go v1.1.0 h1:vcV94XGJ9KouXKYBTMqgrBw96Tae8JKLmoUZ5SbaXNo= github.com/aws/aws-secretsmanager-caching-go v1.1.0/go.mod h1:wahQpJP1dZKMqjGFAjGCqilHkTlN0zReGWocPLbXmxg= github.com/aybabtme/iocontrol v0.0.0-20150809002002-ad15bcfc95a0 h1:0NmehRCgyk5rljDQLKUO+cRJCnduDyn11+zGZIc9Z48= @@ -61,6 +63,8 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -76,6 +80,8 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= +github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -90,6 +96,8 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.13 h1:NFn1Wr8cfnenSJSA46lLq4wHCcBzKTSjnBIexDMMOV0= github.com/klauspost/compress v1.15.13/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= +github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= @@ -106,9 +114,13 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mongodb/mongo-tools v0.0.0-20240909153453-a5bb3a149a1f h1:HZYUMEkFtyQ/YmxEvwSVNZaECNxT4TMMxJY+kdIubDI= +github.com/mongodb/mongo-tools v0.0.0-20240909153453-a5bb3a149a1f/go.mod h1:NfYYZzFCs8WkN+3IEPvUiAGY4Cz/+DRz8fqkLp+heo0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/montanaflynn/stats v0.6.6 h1:Duep6KMIDpY4Yo11iFsvyqJDyfzLF9+sndUKT+v64GQ= github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= +github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= +github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/olahol/melody v1.1.3 h1:7Eo8egmejdrhdCM64uPgWj7NLSAVKl7Iv9NloFlzb60= @@ -147,6 +159,7 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= @@ -161,6 +174,8 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.mongodb.org/mongo-driver v1.12.0 h1:aPx33jmn/rQuJXPQLZQ8NtfPQG8CaqgLThFtqRb0PiE= go.mongodb.org/mongo-driver v1.12.0/go.mod h1:AZkxhPnFJUoH7kZlFkVKucV20K387miPfm7oimrSmK0= +go.mongodb.org/mongo-driver v1.16.0 h1:tpRsfBJMROVHKpdGyc1BBEzzjDUWjItxbVSZ8Ls4BQ4= +go.mongodb.org/mongo-driver v1.16.0/go.mod h1:oB6AhJQvFQL4LEHyXi6aJzQJtBiTQHiAd83l0GdFaiw= golang.org/x/crypto v0.0.0-20180802221240-56440b844dfe/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -170,8 +185,12 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8= golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= +golang.org/x/exp v0.0.0-20240529005216-23cca8864a10 h1:vpzMC/iZhYFAjJzHU0Cfuq+w1vLLsF2vLkDrPjzKYck= +golang.org/x/exp v0.0.0-20240529005216-23cca8864a10/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= golang.org/x/image v0.9.0 h1:QrzfX26snvCM20hIhBwuHI/ThTg18b/+kcKdXHvnR+g= golang.org/x/image v0.9.0/go.mod h1:jtrku+n79PfroUbvDdeUWMAI+heR786BofxrbiSF+J0= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -193,6 +212,8 @@ golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= @@ -203,10 +224,13 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -215,12 +239,16 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= +golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -232,6 +260,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -242,6 +272,7 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/integration-test-config.json b/integration-test-config.json index 8cc7edb2..6aaff744 100644 --- a/integration-test-config.json +++ b/integration-test-config.json @@ -2,7 +2,6 @@ "MaxQuantNodes": 20, "AWSBucketRegion": "us-east-1", "AWSCloudwatchRegion": "us-east-1", - "EnvironmentName": "unittest", "LogLevel": 1, "CoresPerNode": 4, "PiquantDockerImage": "registry.gitlab.com/pixlise/piquant/runner:3.2.17", @@ -25,5 +24,7 @@ "WSMaxMessageSize": 40000, "WSMessageBufferSize": 256, - "ZenodoURI": "https://sandbox.zenodo.org" + "ZenodoURI": "https://sandbox.zenodo.org", + + "EnvironmentName": "unittest" } \ No newline at end of file diff --git a/internal/api/.gitignore b/internal/api/.gitignore new file mode 100644 index 00000000..dcc0a313 --- /dev/null +++ b/internal/api/.gitignore @@ -0,0 +1 @@ +backup/ \ No newline at end of file diff --git a/internal/api/main.go b/internal/api/main.go index 21aa5d05..4f8ca0f8 100644 --- a/internal/api/main.go +++ b/internal/api/main.go @@ -60,7 +60,7 @@ func main() { log.SetFlags(0) cfg := loadConfig() - svcs := initServices(cfg) + svcs := initServices(cfg, instanceId) //////////////////////////////////////////////////// // Set up WebSocket server @@ -199,7 +199,7 @@ func loadConfig() config.APIConfig { return cfg } -func initServices(cfg config.APIConfig) *services.APIServices { +func initServices(cfg config.APIConfig, apiInstanceId string) *services.APIServices { // Get a session for the bucket region sess, err := awsutil.GetSession() if err != nil { @@ -218,7 +218,7 @@ func initServices(cfg config.APIConfig) *services.APIServices { iLog.SetLogLevel(cfg.LogLevel) // Connect to mongo - mongoClient, err := mongoDBConnection.Connect(sess, cfg.MongoSecret, iLog) + mongoClient, mongoDetails, err := mongoDBConnection.Connect(sess, cfg.MongoSecret, iLog) if err != nil { log.Fatal(err) } @@ -235,6 +235,12 @@ func initServices(cfg config.APIConfig) *services.APIServices { } */ + // Ensure prod doesn't have restore and impersonate enabled, so we don't overwrite it via the UI + if strings.Contains(strings.ToLower(cfg.EnvironmentName), "prod") { + cfg.RestoreEnabled = false + cfg.ImpersonateEnabled = false + } + dbCollections.InitCollections(db, iLog, cfg.EnvironmentName) // Authenticaton for endpoints @@ -256,17 +262,19 @@ func initServices(cfg config.APIConfig) *services.APIServices { // Set up services svcs := &services.APIServices{ - Config: cfg, - Log: iLog, - S3: s3svc, - SNS: awsutil.RealSNS{SNS: snsSvc}, - SQS: awsutil.RealSQS{SQS: sqsSvc}, - FS: fs, - JWTReader: jwt, - IDGen: &idgen.IDGen{}, - TimeStamper: ×tamper.UnixTimeNowStamper{}, - MongoDB: db, + Config: cfg, + Log: iLog, + S3: s3svc, + SNS: awsutil.RealSNS{SNS: snsSvc}, + SQS: awsutil.RealSQS{SQS: sqsSvc}, + FS: fs, + JWTReader: jwt, + IDGen: &idgen.IDGen{}, + TimeStamper: ×tamper.UnixTimeNowStamper{}, + MongoDB: db, + MongoDetails: mongoDetails, // Notifier is configured after ws is created + InstanceId: apiInstanceId, } return svcs diff --git a/internal/cmd-line-tools/api-integration-test/main.go b/internal/cmd-line-tools/api-integration-test/main.go index 7241907e..ebbdc7b6 100644 --- a/internal/cmd-line-tools/api-integration-test/main.go +++ b/internal/cmd-line-tools/api-integration-test/main.go @@ -60,6 +60,7 @@ func main() { var apiDBSecret string var expectedAPIVersion string var testType string + var envName string flag.StringVar(&apiHost, "apiHost", "", "Host name of API we're testing. Eg: localhost:8080 or something.review.pixlise.org") flag.StringVar(&apiDBSecret, "apiDBSecret", "", "Mongo secret of the DB the API is connected") @@ -71,6 +72,7 @@ func main() { flag.StringVar(&auth0Params.Audience, "auth0Audience", "", "Auth0 audience") flag.StringVar(&expectedAPIVersion, "expectedAPIVersion", "", "Expected API version (version not checked if blank)") flag.StringVar(&testType, "testType", "local", "Test type to run: local, env") + flag.StringVar(&envName, "envName", "unittest", "Environment name (becomes part of DB name to read)") flag.StringVar(&test1Username, "test1Username", "", "Username of test account 1") flag.StringVar(&test1Password, "test1Password", "", "Password of test account 1") @@ -115,7 +117,7 @@ func main() { runEnvTests(apiHost) } else if testType == "local" || testType == "ci" { // Connect to DB and drop the unit test database - db := wstestlib.GetDB() + db := wstestlib.GetDBWithEnvironment(envName) err = db.Drop(context.TODO()) if err != nil { log.Fatal(err) diff --git a/internal/cmd-line-tools/api-integration-test/testQuantFit.go b/internal/cmd-line-tools/api-integration-test/testQuantFit.go index 8cada9ce..87fdc7bf 100644 --- a/internal/cmd-line-tools/api-integration-test/testQuantFit.go +++ b/internal/cmd-line-tools/api-integration-test/testQuantFit.go @@ -86,7 +86,12 @@ func testQuantFit(apiHost string) { "jobType": "JT_RUN_FIT", "requestorUserId": "${USERID}", "startUnixTimeSec": "${SECAGO=60}", - "elements": ["Ca", "Ti"] + "lastUpdateUnixTimeSec": "${SECAGO=60}", + "endUnixTimeSec": "${SECAGO=60}", + "message": "Wrote Fit output CSV", + "outputFilePath": "${IGNORE}", + "logId": "${IGNORE}", + "elements": ["Ca", "Ti"] }, "resultData": "${REGEXMATCH=%v.+}" }}`, expData64), diff --git a/internal/cmd-line-tools/beam-geom-v1-importer/main.go b/internal/cmd-line-tools/beam-geom-v1-importer/main.go index 96c8d8ea..e6590674 100644 --- a/internal/cmd-line-tools/beam-geom-v1-importer/main.go +++ b/internal/cmd-line-tools/beam-geom-v1-importer/main.go @@ -68,7 +68,7 @@ func main() { iLog.SetLogLevel(logger.LogInfo) // Connect to mongo - destMongoClient, err := mongoDBConnection.Connect(sess, destMongoSecret, iLog) + destMongoClient, _, err := mongoDBConnection.Connect(sess, destMongoSecret, iLog) if err != nil { fatalError(err) } diff --git a/internal/cmd-line-tools/beam-geom-v3-csv-importer/main.go b/internal/cmd-line-tools/beam-geom-v3-csv-importer/main.go index 2903fb91..f6af111f 100644 --- a/internal/cmd-line-tools/beam-geom-v3-csv-importer/main.go +++ b/internal/cmd-line-tools/beam-geom-v3-csv-importer/main.go @@ -15,6 +15,7 @@ import ( "github.com/pixlise/core/v4/core/gdsfilename" "github.com/pixlise/core/v4/core/logger" "github.com/pixlise/core/v4/core/mongoDBConnection" + "github.com/pixlise/core/v4/core/utils" protos "github.com/pixlise/core/v4/generated-protos" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo/options" @@ -75,7 +76,7 @@ func main() { iLog.SetLogLevel(logger.LogInfo) // Connect to mongo - destMongoClient, err := mongoDBConnection.Connect(sess, destMongoSecret, iLog) + destMongoClient, _, err := mongoDBConnection.Connect(sess, destMongoSecret, iLog) if err != nil { fatalError(err) } @@ -141,9 +142,19 @@ func main() { for _, beam := range beamLocs { // They should all be the same so only checking first one + // NOTE: Also ensure we don't have any images stored for PMCs that we don't have beam data for! + validPMCs := []int32{} for imgPMC := range beam.IJ { if _, ok := pmcImageLookup[imgPMC]; !ok { log.Fatalf("Failed to find image for ij PMC: %v", imgPMC) + } else { + validPMCs = append(validPMCs, imgPMC) + } + } + + for pmc := range pmcImageLookup { + if !utils.ItemInSlice(pmc, validPMCs) { + delete(pmcImageLookup, pmc) } } break @@ -193,7 +204,9 @@ func main() { } if beam, ok := beamLocs[int32(pmc)]; !ok { - log.Fatalf("Failed to find v3 beam for PMC: %v", pmc) + //log.Fatalf("Failed to find v3 beam for PMC: %v\n", pmc) + fmt.Printf("WARNING: Failed to find v3 beam for PMC: %v, inserting nil\n", pmc) + ijs = append(ijs, nil) } else { ijs = append(ijs, &protos.Coordinate2D{I: beam.IJ[imgPMC].I, J: beam.IJ[imgPMC].J}) } diff --git a/internal/cmd-line-tools/dataset-converter/main.go b/internal/cmd-line-tools/dataset-converter/main.go index 4dd4901c..7c4dd673 100644 --- a/internal/cmd-line-tools/dataset-converter/main.go +++ b/internal/cmd-line-tools/dataset-converter/main.go @@ -75,7 +75,7 @@ func main() { remoteFS := fileaccess.MakeS3Access(svc) // Connect to mongo - mongoClient, err := mongoDBConnection.Connect(sess, *argMongoSecret, ilog) + mongoClient, _, err := mongoDBConnection.Connect(sess, *argMongoSecret, ilog) if err != nil { log.Fatalf("Failed to connect to mongo DB: %v", err) } @@ -141,7 +141,7 @@ func main() { } var result dataimport.ImportResult - result, err = dataimport.ImportForTrigger([]byte(*argTrigger), "cmd-line", *argConfigBucket, *argDatasetBucket, *argManualUploadBucket, db, ilog, remoteFS) + result, err = dataimport.ImportForTrigger([]byte(*argTrigger), *argConfigBucket, *argDatasetBucket, *argManualUploadBucket, db, ilog, remoteFS) if result.Logger != nil { result.Logger.Close() } diff --git a/internal/cmd-line-tools/v3-importer/main.go b/internal/cmd-line-tools/v3-importer/main.go index 90790d19..7ba19d21 100644 --- a/internal/cmd-line-tools/v3-importer/main.go +++ b/internal/cmd-line-tools/v3-importer/main.go @@ -143,12 +143,12 @@ func main() { iLog.SetLogLevel(logger.LogInfo) // Connect to mongo - sourceMongoClient, err := mongoDBConnection.Connect(sess, sourceMongoSecret, iLog) + sourceMongoClient, _, err := mongoDBConnection.Connect(sess, sourceMongoSecret, iLog) if err != nil { fatalError(err) } - destMongoClient, err := mongoDBConnection.Connect(sess, destMongoSecret, iLog) + destMongoClient, _, err := mongoDBConnection.Connect(sess, destMongoSecret, iLog) if err != nil { fatalError(err) } diff --git a/internal/lambdas/data-import/main.go b/internal/lambdas/data-import/main.go index 33d766cd..15ea18f5 100644 --- a/internal/lambdas/data-import/main.go +++ b/internal/lambdas/data-import/main.go @@ -80,7 +80,7 @@ func HandleRequest(ctx context.Context, event awsutil.Event) (string, error) { // and it'll be useful for initial debugging fmt.Printf("ImportForTrigger: \"%v\"\n", record.SNS.Message) - mongoClient, err := mongoDBConnection.Connect(sess, mongoSecret, iLog) + mongoClient, _, err := mongoDBConnection.Connect(sess, mongoSecret, iLog) if err != nil { log.Fatal(err) } @@ -89,7 +89,7 @@ func HandleRequest(ctx context.Context, event awsutil.Event) (string, error) { dbName := mongoDBConnection.GetDatabaseName("pixlise", envName) db := mongoClient.Database(dbName) - result, err := dataimport.ImportForTrigger([]byte(record.SNS.Message), envName, configBucket, datasetBucket, manualBucket, db, iLog, remoteFS) + result, err := dataimport.ImportForTrigger([]byte(record.SNS.Message), configBucket, datasetBucket, manualBucket, db, iLog, remoteFS) if err != nil { return "", err }