Repository: micromdm/micromdm
Pull request #859 (2023-02-07 04:25:06)

Bump github.com/gorilla/mux from 1.6.2 to 1.8.0
Bumps [github.com/gorilla/mux](https://github.com/gorilla/mux) from 1.6.2 to 1.8.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/gorilla/mux/releases">github.com/gorilla/mux's releases</a>.</em></p>
<blockquote>
<h2>v1.8.0 ☀️</h2>
<p>v1.8.0 addresses a minor regression with the variable extraction when using a wildcard host match. Specifying <code>.Host(“foo.example.com:{port:.*})</code> will now correctly capture the port into <code>mux.Vars</code>.</p>
<h2>CHANGELOG</h2>
<ul>
<li>fix: regression in vars extract for wildcard host (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/579">#579</a>) <a href="https://github.com/harshavardhana"><code>@​harshavardhana</code></a></li>
<li>Remove stale text from comment. (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/568">#568</a>) <a href="https://github.com/EricIO"><code>@​EricIO</code></a></li>
</ul>
<p>v1.7.4 addresses a number of performance improvements (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/544">#544</a>), bugs (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/509">#509</a>, <a href="https://github-redirect.dependabot.com/gorilla/mux/issues/535">#535</a>), and documentation improvements.</p>
<h2>CHANGELOG</h2>
<ul>
<li>Reduce allocations in (*routeRegexp).getURLQuery (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/544">#544</a>) <a href="https://github.com/klauspost"><code>@​klauspost</code></a></li>
<li>Fixed golint warnings (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/526">#526</a>) <a href="https://github.com/KosToZyB"><code>@​KosToZyB</code></a></li>
<li>fix headers regexp test case (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/536">#536</a>) <a href="https://github.com/icattlecoder"><code>@​icattlecoder</code></a></li>
<li>Fix the CORSMethodMiddleware bug with subrouters (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/535">#535</a>) <a href="https://github.com/fharding1"><code>@​fharding1</code></a></li>
<li>Remove/cleanup request context helpers (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/525">#525</a>) <a href="https://github.com/fharding1"><code>@​fharding1</code></a></li>
<li>Guess the scheme if r.URL.Scheme is unset (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/474">#474</a>) <a href="https://github.com/euank"><code>@​euank</code></a></li>
<li>Added capacity to slice creation, when capacity is known (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/516">#516</a>) <a href="https://github.com/vivekv96"><code>@​vivekv96</code></a></li>
<li>Modified http status codes, using constants provided by the http package (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/514">#514</a>) <a href="https://github.com/vivekv96"><code>@​vivekv96</code></a></li>
<li>bugfix/subrouter custom methodNotAllowed handler returning 404 (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/509">#509</a>) (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/510">#510</a>) <a href="https://github.com/jonasdebeukelaer"><code>@​jonasdebeukelaer</code></a></li>
<li>Update README (self-host logo) (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/513">#513</a>) <a href="https://github.com/elithrar"><code>@​elithrar</code></a></li>
<li>Remove TravisCI badge (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/503">#503</a>) <a href="https://github.com/elithrar"><code>@​elithrar</code></a></li>
<li>Add documentation for using mux to serve a SPA (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/493">#493</a>) <a href="https://github.com/fharding1"><code>@​fharding1</code></a></li>
<li>Simplify code (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/501">#501</a>) <a href="https://github.com/muesli"><code>@​muesli</code></a></li>
<li>Avoid unnecessary conversion (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/502">#502</a>) <a href="https://github.com/muesli"><code>@​muesli</code></a></li>
<li>Update config.yml (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/495">#495</a>) <a href="https://github.com/elithrar"><code>@​elithrar</code></a></li>
</ul>
<h2>v1.7.3</h2>
<p>This is a patch release that mostly incorporates test &amp; build system updates, as well as fixing a rare cause of panics.</p>
<h2>CHANGELOG</h2>
<ul>
<li>Update stale.yml (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/494">#494</a>) <a href="https://github.com/elithrar"><code>@​elithrar</code></a></li>
<li>Improve CORS Method Middleware (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/477">#477</a>) <a href="https://github.com/fharding1"><code>@​fharding1</code></a></li>
<li>Delete ISSUE_TEMPLATE.md (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/492">#492</a>) <a href="https://github.com/elithrar"><code>@​elithrar</code></a></li>
<li>Use subtests for middleware tests (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/478">#478</a>) <a href="https://github.com/fharding1"><code>@​fharding1</code></a></li>
<li>Delete .travis.yml (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/490">#490</a>) <a href="https://github.com/elithrar"><code>@​elithrar</code></a></li>
<li>Fix nil panic in authentication middleware example (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/489">#489</a>) <a href="https://github.com/fharding1"><code>@​fharding1</code></a></li>
<li>[WIP] Create CircleCI config (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/484">#484</a>) <a href="https://github.com/elithrar"><code>@​elithrar</code></a></li>
</ul>
<h2>v1.7.2</h2>
<p>⚠️ This release relaxes the host:port matching when using <a href="https://godoc.org/github.com/gorilla/mux#Route.Host"><code>*Route.Host()</code></a> as introduced in <a href="https://github.com/gorilla/mux/releases/tag/v1.7.0">v1.7.0</a>. If a port is <em>not</em> provided, the route will match on any port, matching behaviour for all versions of mux prior to v1.7.0.</p>
<p>See <a href="https://github-redirect.dependabot.com/gorilla/mux/issues/447">#447</a> for a fuller discussion.</p>
<h2>CHANGELOG</h2>
<ul>
<li>Route.Host -matching will ignore any provided port from getHost(), if… (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/447">#447</a>) <a href="https://github.com/cognusion"><code>@​cognusion</code></a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/gorilla/mux/commit/98cb6bf42e086f6af920b965c38cacc07402d51b"><code>98cb6bf</code></a> fix: regression in vars extract for wildcard host (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/579">#579</a>)</li>
<li><a href="https://github.com/gorilla/mux/commit/948bec34b5168796bf3fc4dbb09215baa970351a"><code>948bec3</code></a> docs: Remove stale text from comment. (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/568">#568</a>)</li>
<li><a href="https://github.com/gorilla/mux/commit/75dcda0896e109a2a22c9315bca3bb21b87b2ba5"><code>75dcda0</code></a> perf: reduce allocations in (*routeRegexp).getURLQuery (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/544">#544</a>)</li>
<li><a href="https://github.com/gorilla/mux/commit/49c01487a141b49f8ffe06277f3dca3ee80a55fa"><code>49c0148</code></a> lint: Remove golint warning (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/526">#526</a>)</li>
<li><a href="https://github.com/gorilla/mux/commit/4de8a5a4d283677c69afa1a86a044c8451633a18"><code>4de8a5a</code></a> fix headers regexp test (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/536">#536</a>)</li>
<li><a href="https://github.com/gorilla/mux/commit/2854a05fd3e2a9ecec0802bcb6eda09bbc0eea9f"><code>2854a05</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/gorilla/mux/issues/535">#535</a> from fharding1/cors-subrouter-bug</li>
<li><a href="https://github.com/gorilla/mux/commit/946b6237eb8d0ce3225f502b7fd4208d0b60ce5f"><code>946b623</code></a> Fix the CORSMethodMiddleware bug with subrouters</li>
<li><a href="https://github.com/gorilla/mux/commit/f395758b854c4efa789b8c1e9b73479704c548cb"><code>f395758</code></a> Remove/cleanup request context helpers (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/525">#525</a>)</li>
<li><a href="https://github.com/gorilla/mux/commit/ff4e71f144166b1dfe3017a146f8ed32a82e688b"><code>ff4e71f</code></a> Guess the scheme if r.URL.Scheme is unset (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/474">#474</a>)</li>
<li><a href="https://github.com/gorilla/mux/commit/884b5ffcbd3a11b730f0b75f5c86ac408753c34d"><code>884b5ff</code></a> Added capacity to slice creation, when capacity is known (<a href="https://github-redirect.dependabot.com/gorilla/mux/issues/516">#516</a>)</li>
<li>Additional commits viewable in <a href="https://github.com/gorilla/mux/compare/v1.6.2...v1.8.0">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github.com/gorilla/mux&package-manager=go_modules&previous-version=1.6.2&new-version=1.8.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>


Patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 80d47f1..f1141cb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,6 @@
 ## [Unreleased](https://github.com/micromdm/micromdm/compare/v1.10.1...main)
 
-This release is eagerly awaiting *your* awesome contribution!
+- Add SoftwareUpdateSettings to Settings command (#771, #856)
 
 ## [v1.10.1](https://github.com/micromdm/micromdm/compare/v1.10.0...v1.10.1) January 24, 2023
 
diff --git a/go.mod b/go.mod
index e834ec6..9371e97 100644
--- a/go.mod
+++ b/go.mod
@@ -7,7 +7,7 @@ require (
 	github.com/go-kit/kit v0.7.0
 	github.com/google/uuid v1.3.0
 	github.com/gorilla/handlers v1.5.1
-	github.com/gorilla/mux v1.6.2
+	github.com/gorilla/mux v1.8.0
 	github.com/groob/finalizer v0.0.0-20170707115354-4c2ed49aabda
 	github.com/groob/plist v0.0.0-20220217120414-63fa881b19a5
 	github.com/jessepeterson/cfgprofiles v0.2.0
@@ -32,7 +32,6 @@ require (
 	github.com/go-logfmt/logfmt v0.3.0 // indirect
 	github.com/go-sql-driver/mysql v1.4.0 // indirect
 	github.com/go-stack/stack v1.7.0 // indirect
-	github.com/gorilla/context v1.1.1 // indirect
 	github.com/korylprince/go-cpio-odc v0.9.4 // indirect
 	github.com/korylprince/goxar v0.0.0-20211111233330-e9f257bcdf25 // indirect
 	github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 // indirect
diff --git a/go.sum b/go.sum
index dc86602..66c105b 100644
--- a/go.sum
+++ b/go.sum
@@ -28,13 +28,11 @@ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
 github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
 github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/gorilla/context v0.0.0-20160226214623-1ea25387ff6f/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
-github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=
-github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
 github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=
 github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q=
 github.com/gorilla/mux v1.4.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/gorilla/mux v1.6.2 h1:Pgr17XVTNXAk3q/r4CpKzC5xBM/qW1uVLV+IhRZpIIk=
-github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
+github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
 github.com/groob/finalizer v0.0.0-20170707115354-4c2ed49aabda h1:5ikpG9mYCMFiZX0nkxoV6aU2IpCHPdws3gCNgdZeEV0=
 github.com/groob/finalizer v0.0.0-20170707115354-4c2ed49aabda/go.mod h1:MyndkAZd5rUMdNogn35MWXBX1UiBigrU8eTj8DoAC2c=
 github.com/groob/plist v0.0.0-20190114192801-a99fbe489d03/go.mod h1:qg2Nek0ND/hIr+nY8H1oVqEW2cLzVVNaAQ0QexOyjyc=
diff --git a/mdm/mdm/command.go b/mdm/mdm/command.go
index 2d03a49..203616c 100644
--- a/mdm/mdm/command.go
+++ b/mdm/mdm/command.go
@@ -234,6 +234,7 @@ type Setting struct {
 	MDMOptions              map[string]interface{} `plist:",omitempty" json:"mdm_options,omitempty"`
 	PasscodeLockGracePeriod *int                   `plist:",omitempty" json:"passcode_lock_grace_period,omitempty"`
 	MaximumResidentUsers    *int                   `plist:",omitempty" json:"maximum_resident_users,omitempty"`
+	RecommendationCadence   *int                   `plist:",omitempty" json:"recommendation_cadence,omitempty"`
 	Configuration           map[string]interface{} `plist:",omitempty" json:"-"`
 	ConfigurationData       []byte                 `plist:"-" json:"configuration"` // used to build the dictionary
 }
diff --git a/mdm/mdm/internal/mdmproto/mdm.pb.go b/mdm/mdm/internal/mdmproto/mdm.pb.go
index fbf769c..453ba07 100644
--- a/mdm/mdm/internal/mdmproto/mdm.pb.go
+++ b/mdm/mdm/internal/mdmproto/mdm.pb.go
@@ -1,6 +1,6 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
-// 	protoc-gen-go v1.28.0
+// 	protoc-gen-go v1.28.1
 // 	protoc        v3.21.2
 // source: mdm.proto
 
@@ -72,7 +72,7 @@ func (x ResultPayload_Status) Number() protoreflect.EnumNumber {
 
 // Deprecated: Use ResultPayload_Status.Descriptor instead.
 func (ResultPayload_Status) EnumDescriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{71, 0}
+	return file_mdm_proto_rawDescGZIP(), []int{72, 0}
 }
 
 type CommandPayload struct {
@@ -136,31 +136,31 @@ type Command struct {
 	unknownFields protoimpl.UnknownFields
 
 	RequestType string `protobuf:"bytes,1,opt,name=request_type,json=requestType,proto3" json:"request_type,omitempty"`
-	//
-	//Request Types that do not have additional fields:
-	//- ProfileList
-	//- ProvisioningProfileList
-	//- CertificateList",
-	//- SecurityInfo
-	//- RestartDevice
-	//- LOMSetupRequest
-	//- ShutDownDevice
-	//- StopMirroring
-	//- ClearRestrictionsPassword
-	//- UserList
-	//- LogOutUser
-	//- PlayLostModeSound
-	//- DisableLostMode
-	//- DeviceLocation
-	//- ManagedMediaList
-	//- DeviceConfigured
-	//- AvailableOSUpdates
-	//- NSExtensionMappings
-	//- EnableRemoteDesktop
-	//- DisableRemoteDesktop
-	//- ActivationLockBypassCode
+	// Request Types that do not have additional fields:
+	// - ProfileList
+	// - ProvisioningProfileList
+	// - CertificateList",
+	// - SecurityInfo
+	// - RestartDevice
+	// - LOMSetupRequest
+	// - ShutDownDevice
+	// - StopMirroring
+	// - ClearRestrictionsPassword
+	// - UserList
+	// - LogOutUser
+	// - PlayLostModeSound
+	// - DisableLostMode
+	// - DeviceLocation
+	// - ManagedMediaList
+	// - DeviceConfigured
+	// - AvailableOSUpdates
+	// - NSExtensionMappings
+	// - EnableRemoteDesktop
+	// - DisableRemoteDesktop
+	// - ActivationLockBypassCode
 	//
 	// Types that are assignable to Request:
+	//
 	//	*Command_InstallProfile
 	//	*Command_RemoveProfile
 	//	*Command_InstallProvisioningProfile
@@ -2901,6 +2901,7 @@ type Setting struct {
 	AppAnalytics             *AppAnalyticsSetting             `protobuf:"bytes,14,opt,name=app_analytics,json=appAnalytics,proto3" json:"app_analytics,omitempty"`
 	ApplicationConfiguration *ApplicationConfigurationSetting `protobuf:"bytes,15,opt,name=application_configuration,json=applicationConfiguration,proto3" json:"application_configuration,omitempty"`
 	TimeZone                 *TimeZoneSetting                 `protobuf:"bytes,16,opt,name=time_zone,json=timeZone,proto3" json:"time_zone,omitempty"`
+	SoftwareUpdateSettings   *SoftwareUpdateSettingsSetting   `protobuf:"bytes,17,opt,name=software_update_settings,json=softwareUpdateSettings,proto3" json:"software_update_settings,omitempty"`
 }
 
 func (x *Setting) Reset() {
@@ -3047,6 +3048,13 @@ func (x *Setting) GetTimeZone() *TimeZoneSetting {
 	return nil
 }
 
+func (x *Setting) GetSoftwareUpdateSettings() *SoftwareUpdateSettingsSetting {
+	if x != nil {
+		return x.SoftwareUpdateSettings
+	}
+	return nil
+}
+
 type VoiceRoamingSetting struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -3541,6 +3549,53 @@ func (x *TimeZoneSetting) GetTimeZone() string {
 	return ""
 }
 
+type SoftwareUpdateSettingsSetting struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	RecommendationCadence int64 `protobuf:"varint,1,opt,name=recommendation_cadence,json=recommendationCadence,proto3" json:"recommendation_cadence,omitempty"`
+}
+
+func (x *SoftwareUpdateSettingsSetting) Reset() {
+	*x = SoftwareUpdateSettingsSetting{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_mdm_proto_msgTypes[49]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SoftwareUpdateSettingsSetting) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SoftwareUpdateSettingsSetting) ProtoMessage() {}
+
+func (x *SoftwareUpdateSettingsSetting) ProtoReflect() protoreflect.Message {
+	mi := &file_mdm_proto_msgTypes[49]
+	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 SoftwareUpdateSettingsSetting.ProtoReflect.Descriptor instead.
+func (*SoftwareUpdateSettingsSetting) Descriptor() ([]byte, []int) {
+	return file_mdm_proto_rawDescGZIP(), []int{49}
+}
+
+func (x *SoftwareUpdateSettingsSetting) GetRecommendationCadence() int64 {
+	if x != nil {
+		return x.RecommendationCadence
+	}
+	return 0
+}
+
 type HostnameSetting struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -3552,7 +3607,7 @@ type HostnameSetting struct {
 func (x *HostnameSetting) Reset() {
 	*x = HostnameSetting{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[49]
+		mi := &file_mdm_proto_msgTypes[50]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3565,7 +3620,7 @@ func (x *HostnameSetting) String() string {
 func (*HostnameSetting) ProtoMessage() {}
 
 func (x *HostnameSetting) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[49]
+	mi := &file_mdm_proto_msgTypes[50]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3578,7 +3633,7 @@ func (x *HostnameSetting) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use HostnameSetting.ProtoReflect.Descriptor instead.
 func (*HostnameSetting) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{49}
+	return file_mdm_proto_rawDescGZIP(), []int{50}
 }
 
 func (x *HostnameSetting) GetHostname() string {
@@ -3599,7 +3654,7 @@ type MDMOptionsSetting struct {
 func (x *MDMOptionsSetting) Reset() {
 	*x = MDMOptionsSetting{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[50]
+		mi := &file_mdm_proto_msgTypes[51]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3612,7 +3667,7 @@ func (x *MDMOptionsSetting) String() string {
 func (*MDMOptionsSetting) ProtoMessage() {}
 
 func (x *MDMOptionsSetting) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[50]
+	mi := &file_mdm_proto_msgTypes[51]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3625,7 +3680,7 @@ func (x *MDMOptionsSetting) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use MDMOptionsSetting.ProtoReflect.Descriptor instead.
 func (*MDMOptionsSetting) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{50}
+	return file_mdm_proto_rawDescGZIP(), []int{51}
 }
 
 func (x *MDMOptionsSetting) GetMdmOptions() *MDMOptions {
@@ -3648,7 +3703,7 @@ type MDMOptions struct {
 func (x *MDMOptions) Reset() {
 	*x = MDMOptions{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[51]
+		mi := &file_mdm_proto_msgTypes[52]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3661,7 +3716,7 @@ func (x *MDMOptions) String() string {
 func (*MDMOptions) ProtoMessage() {}
 
 func (x *MDMOptions) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[51]
+	mi := &file_mdm_proto_msgTypes[52]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3674,7 +3729,7 @@ func (x *MDMOptions) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use MDMOptions.ProtoReflect.Descriptor instead.
 func (*MDMOptions) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{51}
+	return file_mdm_proto_rawDescGZIP(), []int{52}
 }
 
 func (x *MDMOptions) GetActivationLockAllowedWhileSupervised() bool {
@@ -3709,7 +3764,7 @@ type PasscodeLockGracePeriodSetting struct {
 func (x *PasscodeLockGracePeriodSetting) Reset() {
 	*x = PasscodeLockGracePeriodSetting{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[52]
+		mi := &file_mdm_proto_msgTypes[53]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3722,7 +3777,7 @@ func (x *PasscodeLockGracePeriodSetting) String() string {
 func (*PasscodeLockGracePeriodSetting) ProtoMessage() {}
 
 func (x *PasscodeLockGracePeriodSetting) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[52]
+	mi := &file_mdm_proto_msgTypes[53]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3735,7 +3790,7 @@ func (x *PasscodeLockGracePeriodSetting) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use PasscodeLockGracePeriodSetting.ProtoReflect.Descriptor instead.
 func (*PasscodeLockGracePeriodSetting) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{52}
+	return file_mdm_proto_rawDescGZIP(), []int{53}
 }
 
 func (x *PasscodeLockGracePeriodSetting) GetPasscodeLockGracePeriod() int64 {
@@ -3756,7 +3811,7 @@ type MaximumResidentUsersSetting struct {
 func (x *MaximumResidentUsersSetting) Reset() {
 	*x = MaximumResidentUsersSetting{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[53]
+		mi := &file_mdm_proto_msgTypes[54]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3769,7 +3824,7 @@ func (x *MaximumResidentUsersSetting) String() string {
 func (*MaximumResidentUsersSetting) ProtoMessage() {}
 
 func (x *MaximumResidentUsersSetting) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[53]
+	mi := &file_mdm_proto_msgTypes[54]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3782,7 +3837,7 @@ func (x *MaximumResidentUsersSetting) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use MaximumResidentUsersSetting.ProtoReflect.Descriptor instead.
 func (*MaximumResidentUsersSetting) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{53}
+	return file_mdm_proto_rawDescGZIP(), []int{54}
 }
 
 func (x *MaximumResidentUsersSetting) GetMaximumResidentUsers() int64 {
@@ -3803,7 +3858,7 @@ type DiagnosticSubmissionSetting struct {
 func (x *DiagnosticSubmissionSetting) Reset() {
 	*x = DiagnosticSubmissionSetting{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[54]
+		mi := &file_mdm_proto_msgTypes[55]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3816,7 +3871,7 @@ func (x *DiagnosticSubmissionSetting) String() string {
 func (*DiagnosticSubmissionSetting) ProtoMessage() {}
 
 func (x *DiagnosticSubmissionSetting) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[54]
+	mi := &file_mdm_proto_msgTypes[55]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3829,7 +3884,7 @@ func (x *DiagnosticSubmissionSetting) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use DiagnosticSubmissionSetting.ProtoReflect.Descriptor instead.
 func (*DiagnosticSubmissionSetting) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{54}
+	return file_mdm_proto_rawDescGZIP(), []int{55}
 }
 
 func (x *DiagnosticSubmissionSetting) GetEnabled() bool {
@@ -3850,7 +3905,7 @@ type AppAnalyticsSetting struct {
 func (x *AppAnalyticsSetting) Reset() {
 	*x = AppAnalyticsSetting{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[55]
+		mi := &file_mdm_proto_msgTypes[56]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3863,7 +3918,7 @@ func (x *AppAnalyticsSetting) String() string {
 func (*AppAnalyticsSetting) ProtoMessage() {}
 
 func (x *AppAnalyticsSetting) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[55]
+	mi := &file_mdm_proto_msgTypes[56]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3876,7 +3931,7 @@ func (x *AppAnalyticsSetting) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use AppAnalyticsSetting.ProtoReflect.Descriptor instead.
 func (*AppAnalyticsSetting) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{55}
+	return file_mdm_proto_rawDescGZIP(), []int{56}
 }
 
 func (x *AppAnalyticsSetting) GetEnabled() bool {
@@ -3897,7 +3952,7 @@ type ManagedApplicationConfiguration struct {
 func (x *ManagedApplicationConfiguration) Reset() {
 	*x = ManagedApplicationConfiguration{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[56]
+		mi := &file_mdm_proto_msgTypes[57]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3910,7 +3965,7 @@ func (x *ManagedApplicationConfiguration) String() string {
 func (*ManagedApplicationConfiguration) ProtoMessage() {}
 
 func (x *ManagedApplicationConfiguration) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[56]
+	mi := &file_mdm_proto_msgTypes[57]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3923,7 +3978,7 @@ func (x *ManagedApplicationConfiguration) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ManagedApplicationConfiguration.ProtoReflect.Descriptor instead.
 func (*ManagedApplicationConfiguration) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{56}
+	return file_mdm_proto_rawDescGZIP(), []int{57}
 }
 
 func (x *ManagedApplicationConfiguration) GetIdentifiers() []string {
@@ -3944,7 +3999,7 @@ type ManagedApplicationAttributes struct {
 func (x *ManagedApplicationAttributes) Reset() {
 	*x = ManagedApplicationAttributes{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[57]
+		mi := &file_mdm_proto_msgTypes[58]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -3957,7 +4012,7 @@ func (x *ManagedApplicationAttributes) String() string {
 func (*ManagedApplicationAttributes) ProtoMessage() {}
 
 func (x *ManagedApplicationAttributes) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[57]
+	mi := &file_mdm_proto_msgTypes[58]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -3970,7 +4025,7 @@ func (x *ManagedApplicationAttributes) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ManagedApplicationAttributes.ProtoReflect.Descriptor instead.
 func (*ManagedApplicationAttributes) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{57}
+	return file_mdm_proto_rawDescGZIP(), []int{58}
 }
 
 func (x *ManagedApplicationAttributes) GetIdentifiers() []string {
@@ -3992,7 +4047,7 @@ type ManagedApplicationFeedback struct {
 func (x *ManagedApplicationFeedback) Reset() {
 	*x = ManagedApplicationFeedback{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[58]
+		mi := &file_mdm_proto_msgTypes[59]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4005,7 +4060,7 @@ func (x *ManagedApplicationFeedback) String() string {
 func (*ManagedApplicationFeedback) ProtoMessage() {}
 
 func (x *ManagedApplicationFeedback) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[58]
+	mi := &file_mdm_proto_msgTypes[59]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4018,7 +4073,7 @@ func (x *ManagedApplicationFeedback) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ManagedApplicationFeedback.ProtoReflect.Descriptor instead.
 func (*ManagedApplicationFeedback) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{58}
+	return file_mdm_proto_rawDescGZIP(), []int{59}
 }
 
 func (x *ManagedApplicationFeedback) GetIdentifiers() []string {
@@ -4049,7 +4104,7 @@ type SetFirmwarePassword struct {
 func (x *SetFirmwarePassword) Reset() {
 	*x = SetFirmwarePassword{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[59]
+		mi := &file_mdm_proto_msgTypes[60]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4062,7 +4117,7 @@ func (x *SetFirmwarePassword) String() string {
 func (*SetFirmwarePassword) ProtoMessage() {}
 
 func (x *SetFirmwarePassword) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[59]
+	mi := &file_mdm_proto_msgTypes[60]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4075,7 +4130,7 @@ func (x *SetFirmwarePassword) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetFirmwarePassword.ProtoReflect.Descriptor instead.
 func (*SetFirmwarePassword) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{59}
+	return file_mdm_proto_rawDescGZIP(), []int{60}
 }
 
 func (x *SetFirmwarePassword) GetCurrentPassword() string {
@@ -4117,7 +4172,7 @@ type VerifyFirmwarePassword struct {
 func (x *VerifyFirmwarePassword) Reset() {
 	*x = VerifyFirmwarePassword{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[60]
+		mi := &file_mdm_proto_msgTypes[61]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4130,7 +4185,7 @@ func (x *VerifyFirmwarePassword) String() string {
 func (*VerifyFirmwarePassword) ProtoMessage() {}
 
 func (x *VerifyFirmwarePassword) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[60]
+	mi := &file_mdm_proto_msgTypes[61]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4143,7 +4198,7 @@ func (x *VerifyFirmwarePassword) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use VerifyFirmwarePassword.ProtoReflect.Descriptor instead.
 func (*VerifyFirmwarePassword) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{60}
+	return file_mdm_proto_rawDescGZIP(), []int{61}
 }
 
 func (x *VerifyFirmwarePassword) GetPassword() string {
@@ -4167,7 +4222,7 @@ type SetRecoveryLock struct {
 func (x *SetRecoveryLock) Reset() {
 	*x = SetRecoveryLock{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[61]
+		mi := &file_mdm_proto_msgTypes[62]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4180,7 +4235,7 @@ func (x *SetRecoveryLock) String() string {
 func (*SetRecoveryLock) ProtoMessage() {}
 
 func (x *SetRecoveryLock) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[61]
+	mi := &file_mdm_proto_msgTypes[62]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4193,7 +4248,7 @@ func (x *SetRecoveryLock) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetRecoveryLock.ProtoReflect.Descriptor instead.
 func (*SetRecoveryLock) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{61}
+	return file_mdm_proto_rawDescGZIP(), []int{62}
 }
 
 func (x *SetRecoveryLock) GetCurrentPassword() string {
@@ -4235,7 +4290,7 @@ type VerifyRecoveryLock struct {
 func (x *VerifyRecoveryLock) Reset() {
 	*x = VerifyRecoveryLock{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[62]
+		mi := &file_mdm_proto_msgTypes[63]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4248,7 +4303,7 @@ func (x *VerifyRecoveryLock) String() string {
 func (*VerifyRecoveryLock) ProtoMessage() {}
 
 func (x *VerifyRecoveryLock) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[62]
+	mi := &file_mdm_proto_msgTypes[63]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4261,7 +4316,7 @@ func (x *VerifyRecoveryLock) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use VerifyRecoveryLock.ProtoReflect.Descriptor instead.
 func (*VerifyRecoveryLock) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{62}
+	return file_mdm_proto_rawDescGZIP(), []int{63}
 }
 
 func (x *VerifyRecoveryLock) GetPassword() string {
@@ -4283,7 +4338,7 @@ type SetAutoAdminPassword struct {
 func (x *SetAutoAdminPassword) Reset() {
 	*x = SetAutoAdminPassword{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[63]
+		mi := &file_mdm_proto_msgTypes[64]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4296,7 +4351,7 @@ func (x *SetAutoAdminPassword) String() string {
 func (*SetAutoAdminPassword) ProtoMessage() {}
 
 func (x *SetAutoAdminPassword) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[63]
+	mi := &file_mdm_proto_msgTypes[64]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4309,7 +4364,7 @@ func (x *SetAutoAdminPassword) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetAutoAdminPassword.ProtoReflect.Descriptor instead.
 func (*SetAutoAdminPassword) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{63}
+	return file_mdm_proto_rawDescGZIP(), []int{64}
 }
 
 func (x *SetAutoAdminPassword) GetGuid() string {
@@ -4337,7 +4392,7 @@ type ScheduleOSUpdate struct {
 func (x *ScheduleOSUpdate) Reset() {
 	*x = ScheduleOSUpdate{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[64]
+		mi := &file_mdm_proto_msgTypes[65]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4350,7 +4405,7 @@ func (x *ScheduleOSUpdate) String() string {
 func (*ScheduleOSUpdate) ProtoMessage() {}
 
 func (x *ScheduleOSUpdate) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[64]
+	mi := &file_mdm_proto_msgTypes[65]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4363,7 +4418,7 @@ func (x *ScheduleOSUpdate) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ScheduleOSUpdate.ProtoReflect.Descriptor instead.
 func (*ScheduleOSUpdate) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{64}
+	return file_mdm_proto_rawDescGZIP(), []int{65}
 }
 
 func (x *ScheduleOSUpdate) GetUpdates() []*Update {
@@ -4388,7 +4443,7 @@ type Update struct {
 func (x *Update) Reset() {
 	*x = Update{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[65]
+		mi := &file_mdm_proto_msgTypes[66]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4401,7 +4456,7 @@ func (x *Update) String() string {
 func (*Update) ProtoMessage() {}
 
 func (x *Update) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[65]
+	mi := &file_mdm_proto_msgTypes[66]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4414,7 +4469,7 @@ func (x *Update) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use Update.ProtoReflect.Descriptor instead.
 func (*Update) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{65}
+	return file_mdm_proto_rawDescGZIP(), []int{66}
 }
 
 func (x *Update) GetProductKey() string {
@@ -4463,7 +4518,7 @@ type ScheduleOSUpdateScan struct {
 func (x *ScheduleOSUpdateScan) Reset() {
 	*x = ScheduleOSUpdateScan{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[66]
+		mi := &file_mdm_proto_msgTypes[67]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4476,7 +4531,7 @@ func (x *ScheduleOSUpdateScan) String() string {
 func (*ScheduleOSUpdateScan) ProtoMessage() {}
 
 func (x *ScheduleOSUpdateScan) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[66]
+	mi := &file_mdm_proto_msgTypes[67]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4489,7 +4544,7 @@ func (x *ScheduleOSUpdateScan) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ScheduleOSUpdateScan.ProtoReflect.Descriptor instead.
 func (*ScheduleOSUpdateScan) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{66}
+	return file_mdm_proto_rawDescGZIP(), []int{67}
 }
 
 func (x *ScheduleOSUpdateScan) GetForce() bool {
@@ -4510,7 +4565,7 @@ type ActiveNSExtensions struct {
 func (x *ActiveNSExtensions) Reset() {
 	*x = ActiveNSExtensions{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[67]
+		mi := &file_mdm_proto_msgTypes[68]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4523,7 +4578,7 @@ func (x *ActiveNSExtensions) String() string {
 func (*ActiveNSExtensions) ProtoMessage() {}
 
 func (x *ActiveNSExtensions) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[67]
+	mi := &file_mdm_proto_msgTypes[68]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4536,7 +4591,7 @@ func (x *ActiveNSExtensions) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ActiveNSExtensions.ProtoReflect.Descriptor instead.
 func (*ActiveNSExtensions) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{67}
+	return file_mdm_proto_rawDescGZIP(), []int{68}
 }
 
 func (x *ActiveNSExtensions) GetFilterExtensionPoints() []string {
@@ -4560,7 +4615,7 @@ type RotateFileVaultKey struct {
 func (x *RotateFileVaultKey) Reset() {
 	*x = RotateFileVaultKey{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[68]
+		mi := &file_mdm_proto_msgTypes[69]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4573,7 +4628,7 @@ func (x *RotateFileVaultKey) String() string {
 func (*RotateFileVaultKey) ProtoMessage() {}
 
 func (x *RotateFileVaultKey) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[68]
+	mi := &file_mdm_proto_msgTypes[69]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4586,7 +4641,7 @@ func (x *RotateFileVaultKey) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use RotateFileVaultKey.ProtoReflect.Descriptor instead.
 func (*RotateFileVaultKey) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{68}
+	return file_mdm_proto_rawDescGZIP(), []int{69}
 }
 
 func (x *RotateFileVaultKey) GetKeyType() string {
@@ -4630,7 +4685,7 @@ type FileVaultUnlock struct {
 func (x *FileVaultUnlock) Reset() {
 	*x = FileVaultUnlock{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[69]
+		mi := &file_mdm_proto_msgTypes[70]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4643,7 +4698,7 @@ func (x *FileVaultUnlock) String() string {
 func (*FileVaultUnlock) ProtoMessage() {}
 
 func (x *FileVaultUnlock) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[69]
+	mi := &file_mdm_proto_msgTypes[70]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4656,7 +4711,7 @@ func (x *FileVaultUnlock) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use FileVaultUnlock.ProtoReflect.Descriptor instead.
 func (*FileVaultUnlock) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{69}
+	return file_mdm_proto_rawDescGZIP(), []int{70}
 }
 
 func (x *FileVaultUnlock) GetPassword() string {
@@ -4691,7 +4746,7 @@ type SetBootstrapToken struct {
 func (x *SetBootstrapToken) Reset() {
 	*x = SetBootstrapToken{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[70]
+		mi := &file_mdm_proto_msgTypes[71]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4704,7 +4759,7 @@ func (x *SetBootstrapToken) String() string {
 func (*SetBootstrapToken) ProtoMessage() {}
 
 func (x *SetBootstrapToken) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[70]
+	mi := &file_mdm_proto_msgTypes[71]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4717,7 +4772,7 @@ func (x *SetBootstrapToken) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SetBootstrapToken.ProtoReflect.Descriptor instead.
 func (*SetBootstrapToken) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{70}
+	return file_mdm_proto_rawDescGZIP(), []int{71}
 }
 
 func (x *SetBootstrapToken) GetBootstrapToken() string {
@@ -4740,7 +4795,7 @@ type ResultPayload struct {
 func (x *ResultPayload) Reset() {
 	*x = ResultPayload{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[71]
+		mi := &file_mdm_proto_msgTypes[72]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4753,7 +4808,7 @@ func (x *ResultPayload) String() string {
 func (*ResultPayload) ProtoMessage() {}
 
 func (x *ResultPayload) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[71]
+	mi := &file_mdm_proto_msgTypes[72]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4766,7 +4821,7 @@ func (x *ResultPayload) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ResultPayload.ProtoReflect.Descriptor instead.
 func (*ResultPayload) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{71}
+	return file_mdm_proto_rawDescGZIP(), []int{72}
 }
 
 func (x *ResultPayload) GetUdid() string {
@@ -4807,7 +4862,7 @@ type ErrorChain struct {
 func (x *ErrorChain) Reset() {
 	*x = ErrorChain{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[72]
+		mi := &file_mdm_proto_msgTypes[73]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4820,7 +4875,7 @@ func (x *ErrorChain) String() string {
 func (*ErrorChain) ProtoMessage() {}
 
 func (x *ErrorChain) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[72]
+	mi := &file_mdm_proto_msgTypes[73]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4833,7 +4888,7 @@ func (x *ErrorChain) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ErrorChain.ProtoReflect.Descriptor instead.
 func (*ErrorChain) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{72}
+	return file_mdm_proto_rawDescGZIP(), []int{73}
 }
 
 func (x *ErrorChain) GetLocalizedDescription() string {
@@ -4875,7 +4930,7 @@ type RefreshCellularPlans struct {
 func (x *RefreshCellularPlans) Reset() {
 	*x = RefreshCellularPlans{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_mdm_proto_msgTypes[73]
+		mi := &file_mdm_proto_msgTypes[74]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -4888,7 +4943,7 @@ func (x *RefreshCellularPlans) String() string {
 func (*RefreshCellularPlans) ProtoMessage() {}
 
 func (x *RefreshCellularPlans) ProtoReflect() protoreflect.Message {
-	mi := &file_mdm_proto_msgTypes[73]
+	mi := &file_mdm_proto_msgTypes[74]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -4901,7 +4956,7 @@ func (x *RefreshCellularPlans) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use RefreshCellularPlans.ProtoReflect.Descriptor instead.
 func (*RefreshCellularPlans) Descriptor() ([]byte, []int) {
-	return file_mdm_proto_rawDescGZIP(), []int{73}
+	return file_mdm_proto_rawDescGZIP(), []int{74}
 }
 
 func (x *RefreshCellularPlans) GetEsimServerUrl() string {
@@ -5404,7 +5459,7 @@ var file_mdm_proto_rawDesc = []byte{
 	0x0a, 0x08, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x2d, 0x0a, 0x08, 0x73, 0x65,
 	0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d,
 	0x64, 0x6d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52,
-	0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xf9, 0x08, 0x0a, 0x07, 0x53, 0x65,
+	0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xdc, 0x09, 0x0a, 0x07, 0x53, 0x65,
 	0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20,
 	0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x12, 0x3c, 0x0a, 0x0b, 0x64, 0x65, 0x76,
 	0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b,
@@ -5476,231 +5531,242 @@ var file_mdm_proto_rawDesc = []byte{
 	0x09, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b,
 	0x32, 0x19, 0x2e, 0x6d, 0x64, 0x6d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x69, 0x6d, 0x65,
 	0x5a, 0x6f, 0x6e, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x74, 0x69, 0x6d,
-	0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x22, 0x2f, 0x0a, 0x13, 0x56, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x6f,
-	0x61, 0x6d, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07,
-	0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65,
-	0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x32, 0x0a, 0x16, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e,
-	0x61, 0x6c, 0x48, 0x6f, 0x74, 0x73, 0x70, 0x6f, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
-	0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x3e, 0x0a, 0x10, 0x57, 0x61,
-	0x6c, 0x6c, 0x70, 0x61, 0x70, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x14,
-	0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69,
-	0x6d, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x03, 0x52, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, 0x22, 0x2e, 0x0a, 0x12, 0x44, 0x61,
-	0x74, 0x61, 0x52, 0x6f, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
-	0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x2c, 0x0a, 0x10, 0x42, 0x6c,
-	0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x18,
-	0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
-	0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x96, 0x01, 0x0a, 0x1c, 0x41, 0x70, 0x70,
-	0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
-	0x65, 0x73, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x65,
-	0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69,
-	0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x56, 0x0a, 0x16, 0x61, 0x70, 0x70,
-	0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
-	0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x64, 0x6d, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-	0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x15, 0x61, 0x70, 0x70, 0x6c,
-	0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
-	0x73, 0x22, 0x85, 0x01, 0x0a, 0x1f, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65,
-	0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
-	0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74,
-	0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x1d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75,
-	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x72,
-	0x79, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1b, 0x63, 0x6f,
-	0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x63, 0x74, 0x69,
-	0x6f, 0x6e, 0x61, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x22, 0x32, 0x0a, 0x15, 0x41, 0x70, 0x70,
-	0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
-	0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x76, 0x70, 0x6e, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x70, 0x6e, 0x55, 0x75, 0x69, 0x64, 0x22, 0x34, 0x0a,
-	0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69,
-	0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d,
-	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e,
-	0x61, 0x6d, 0x65, 0x22, 0x2e, 0x0a, 0x0f, 0x54, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x53,
-	0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x7a,
-	0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x5a,
-	0x6f, 0x6e, 0x65, 0x22, 0x2d, 0x0a, 0x0f, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x53,
-	0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61,
-	0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61,
-	0x6d, 0x65, 0x22, 0x4a, 0x0a, 0x11, 0x4d, 0x44, 0x4d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
-	0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x35, 0x0a, 0x0b, 0x6d, 0x64, 0x6d, 0x5f, 0x6f,
-	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d,
-	0x64, 0x6d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4d, 0x44, 0x4d, 0x4f, 0x70, 0x74, 0x69, 0x6f,
-	0x6e, 0x73, 0x52, 0x0a, 0x6d, 0x64, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8f,
-	0x02, 0x0a, 0x0a, 0x4d, 0x44, 0x4d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x56, 0x0a,
-	0x28, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x6b,
-	0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x5f, 0x73,
-	0x75, 0x70, 0x65, 0x72, 0x76, 0x69, 0x73, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
-	0x24, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x6b, 0x41,
-	0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x57, 0x68, 0x69, 0x6c, 0x65, 0x53, 0x75, 0x70, 0x65, 0x72,
-	0x76, 0x69, 0x73, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72,
-	0x61, 0x70, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61,
-	0x70, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x71, 0x0a,
-	0x37, 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x5f,
-	0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x5f,
-	0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e,
-	0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x30,
-	0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x55, 0x73, 0x65, 0x72, 0x54, 0x6f, 0x41, 0x6c, 0x6c, 0x6f,
-	0x77, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x46,
-	0x6f, 0x72, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
-	0x22, 0x5d, 0x0a, 0x1e, 0x50, 0x61, 0x73, 0x73, 0x63, 0x6f, 0x64, 0x65, 0x4c, 0x6f, 0x63, 0x6b,
-	0x47, 0x72, 0x61, 0x63, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69,
-	0x6e, 0x67, 0x12, 0x3b, 0x0a, 0x1a, 0x70, 0x61, 0x73, 0x73, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6c,
-	0x6f, 0x63, 0x6b, 0x5f, 0x67, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x70, 0x61, 0x73, 0x73, 0x63, 0x6f, 0x64, 0x65,
-	0x4c, 0x6f, 0x63, 0x6b, 0x47, 0x72, 0x61, 0x63, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x22,
-	0x53, 0x0a, 0x1b, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x69, 0x64, 0x65,
-	0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x34,
-	0x0a, 0x16, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65,
-	0x6e, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14,
-	0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x55,
-	0x73, 0x65, 0x72, 0x73, 0x22, 0x37, 0x0a, 0x1b, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74,
-	0x69, 0x63, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74,
+	0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x61, 0x0a, 0x18, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72,
+	0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
+	0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6d, 0x64, 0x6d, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74,
+	0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
+	0x52, 0x16, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+	0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x2f, 0x0a, 0x13, 0x56, 0x6f, 0x69, 0x63,
+	0x65, 0x52, 0x6f, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12,
+	0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x32, 0x0a, 0x16, 0x50, 0x65, 0x72,
+	0x73, 0x6f, 0x6e, 0x61, 0x6c, 0x48, 0x6f, 0x74, 0x73, 0x70, 0x6f, 0x74, 0x53, 0x65, 0x74, 0x74,
+	0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x3e, 0x0a,
+	0x10, 0x57, 0x61, 0x6c, 0x6c, 0x70, 0x61, 0x70, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
+	0x67, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c,
+	0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x77, 0x68, 0x65, 0x72, 0x65, 0x22, 0x2e, 0x0a,
+	0x12, 0x44, 0x61, 0x74, 0x61, 0x52, 0x6f, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x74, 0x74,
 	0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x2f, 0x0a,
-	0x13, 0x41, 0x70, 0x70, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x53, 0x65, 0x74,
-	0x74, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x43,
-	0x0a, 0x1f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x2c, 0x0a,
+	0x10, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
+	0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x96, 0x01, 0x0a, 0x1c,
+	0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69,
+	0x62, 0x75, 0x74, 0x65, 0x73, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x0a, 0x0a,
+	0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x56, 0x0a, 0x16,
+	0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x72,
+	0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d,
+	0x64, 0x6d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x15, 0x61,
+	0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+	0x75, 0x74, 0x65, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x1f, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
 	0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
-	0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73,
-	0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
-	0x65, 0x72, 0x73, 0x22, 0x40, 0x0a, 0x1c, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x41, 0x70,
-	0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
-	0x74, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65,
-	0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
-	0x66, 0x69, 0x65, 0x72, 0x73, 0x22, 0x67, 0x0a, 0x1a, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64,
-	0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x65, 0x64, 0x62,
-	0x61, 0x63, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65,
-	0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
-	0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f,
-	0x66, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e,
-	0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x22, 0xcb,
-	0x01, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x46, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x50, 0x61,
-	0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e,
-	0x74, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
-	0x64, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
-	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x73, 0x73,
-	0x77, 0x6f, 0x72, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x72,
-	0x6f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77,
-	0x4f, 0x72, 0x6f, 0x6d, 0x73, 0x12, 0x45, 0x0a, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
-	0x6b, 0x5f, 0x74, 0x65, 0x74, 0x68, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c,
-	0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x4e,
-	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x54, 0x65, 0x74, 0x68, 0x65, 0x72, 0x22, 0x34, 0x0a, 0x16,
-	0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x46, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x50, 0x61,
-	0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f,
-	0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f,
-	0x72, 0x64, 0x22, 0xc7, 0x01, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65,
-	0x72, 0x79, 0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e,
-	0x74, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
-	0x64, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
-	0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x73, 0x73,
-	0x77, 0x6f, 0x72, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x72,
-	0x6f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77,
-	0x4f, 0x72, 0x6f, 0x6d, 0x73, 0x12, 0x45, 0x0a, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
-	0x6b, 0x5f, 0x74, 0x65, 0x74, 0x68, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c,
-	0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x4e,
-	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x54, 0x65, 0x74, 0x68, 0x65, 0x72, 0x22, 0x30, 0x0a, 0x12,
-	0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x4c, 0x6f,
-	0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x4f,
-	0x0a, 0x14, 0x53, 0x65, 0x74, 0x41, 0x75, 0x74, 0x6f, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x50, 0x61,
-	0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x67, 0x75, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x61,
-	0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x0c, 0x52, 0x0c, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x48, 0x61, 0x73, 0x68, 0x22,
-	0x3e, 0x0a, 0x10, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x53, 0x55, 0x70, 0x64,
-	0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01,
-	0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x64, 0x6d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
-	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x22,
-	0xc3, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72,
-	0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x70,
-	0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x56, 0x65, 0x72,
-	0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f,
-	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e,
-	0x73, 0x74, 0x61, 0x6c, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x6d,
-	0x61, 0x78, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x65, 0x72, 0x72, 0x61, 0x6c,
-	0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6d, 0x61, 0x78, 0x55, 0x73, 0x65, 0x72,
-	0x44, 0x65, 0x66, 0x65, 0x72, 0x72, 0x61, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69,
-	0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x69,
-	0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x2c, 0x0a, 0x14, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c,
-	0x65, 0x4f, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x14, 0x0a,
-	0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f,
-	0x72, 0x63, 0x65, 0x22, 0x4c, 0x0a, 0x12, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4e, 0x53, 0x45,
-	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x66, 0x69, 0x6c,
-	0x74, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f,
-	0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x66, 0x69, 0x6c, 0x74,
-	0x65, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74,
-	0x73, 0x22, 0xe0, 0x01, 0x0a, 0x12, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65,
-	0x56, 0x61, 0x75, 0x6c, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x5f,
-	0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x54,
-	0x79, 0x70, 0x65, 0x12, 0x44, 0x0a, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x76, 0x61, 0x75, 0x6c, 0x74,
-	0x5f, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,
-	0x6d, 0x64, 0x6d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x56, 0x61, 0x75,
-	0x6c, 0x74, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0f, 0x66, 0x69, 0x6c, 0x65, 0x76, 0x61,
-	0x75, 0x6c, 0x74, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x27, 0x0a, 0x0f, 0x6e, 0x65, 0x77,
-	0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01,
-	0x28, 0x0c, 0x52, 0x0e, 0x6e, 0x65, 0x77, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
-	0x74, 0x65, 0x12, 0x40, 0x0a, 0x1c, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x5f, 0x65, 0x6e, 0x63, 0x72,
-	0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
-	0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x1a, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x45,
-	0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69,
-	0x63, 0x61, 0x74, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x0f, 0x46, 0x69, 0x6c, 0x65, 0x56, 0x61, 0x75,
-	0x6c, 0x74, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73,
-	0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73,
-	0x77, 0x6f, 0x72, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f,
-	0x6b, 0x65, 0x79, 0x5f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c,
-	0x52, 0x10, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x45, 0x78, 0x70, 0x6f,
-	0x72, 0x74, 0x12, 0x3d, 0x0a, 0x1b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65,
-	0x79, 0x5f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
-	0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65,
-	0x4b, 0x65, 0x79, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
-	0x64, 0x22, 0x3c, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61,
-	0x70, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74,
-	0x72, 0x61, 0x70, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0e, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22,
-	0xd2, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61,
-	0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x64, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x04, 0x75, 0x64, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
-	0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d,
-	0x6d, 0x61, 0x6e, 0x64, 0x55, 0x75, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x0b, 0x65, 0x72, 0x72, 0x6f,
-	0x72, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e,
-	0x6d, 0x64, 0x6d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x68,
-	0x61, 0x69, 0x6e, 0x52, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x22,
-	0x53, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x63, 0x6b,
-	0x6e, 0x6f, 0x77, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x64, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45,
-	0x72, 0x72, 0x6f, 0x72, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
-	0x64, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x02, 0x12, 0x08,
-	0x0a, 0x04, 0x49, 0x64, 0x6c, 0x65, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x6f, 0x74, 0x4e,
-	0x6f, 0x77, 0x10, 0x04, 0x22, 0xb9, 0x01, 0x0a, 0x0a, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x68,
-	0x61, 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x15, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64,
-	0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x14, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x44, 0x65, 0x73,
-	0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x16, 0x75, 0x73, 0x5f, 0x65,
-	0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
-	0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x75, 0x73, 0x45, 0x6e, 0x67, 0x6c,
-	0x69, 0x73, 0x68, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21,
-	0x0a, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x03,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69,
-	0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18,
-	0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65,
-	0x22, 0x3e, 0x0a, 0x14, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x43, 0x65, 0x6c, 0x6c, 0x75,
-	0x6c, 0x61, 0x72, 0x50, 0x6c, 0x61, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x73, 0x69, 0x6d,
-	0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x0d, 0x65, 0x73, 0x69, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x72, 0x6c,
-	0x42, 0x38, 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d,
-	0x69, 0x63, 0x72, 0x6f, 0x6d, 0x64, 0x6d, 0x2f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x6d, 0x64, 0x6d,
-	0x2f, 0x6d, 0x64, 0x6d, 0x2f, 0x6d, 0x64, 0x6d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
-	0x6c, 0x2f, 0x6d, 0x64, 0x6d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x33,
+	0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e,
+	0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x64,
+	0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x1d, 0x63, 0x6f, 0x6e, 0x66,
+	0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x61, 0x72, 0x79, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52,
+	0x1b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x22, 0x32, 0x0a, 0x15,
+	0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69,
+	0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x76, 0x70, 0x6e, 0x5f, 0x75, 0x75, 0x69,
+	0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x70, 0x6e, 0x55, 0x75, 0x69, 0x64,
+	0x22, 0x34, 0x0a, 0x11, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x53, 0x65,
+	0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69,
+	0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x2e, 0x0a, 0x0f, 0x54, 0x69, 0x6d, 0x65, 0x5a, 0x6f,
+	0x6e, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x6d,
+	0x65, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x69,
+	0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x22, 0x56, 0x0a, 0x1d, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61,
+	0x72, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73,
+	0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x35, 0x0a, 0x16, 0x72, 0x65, 0x63, 0x6f, 0x6d,
+	0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, 0x64, 0x65, 0x6e, 0x63,
+	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65,
+	0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x2d,
+	0x0a, 0x0f, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
+	0x67, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x4a, 0x0a,
+	0x11, 0x4d, 0x44, 0x4d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x65, 0x74, 0x74, 0x69,
+	0x6e, 0x67, 0x12, 0x35, 0x0a, 0x0b, 0x6d, 0x64, 0x6d, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+	0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x64, 0x6d, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x2e, 0x4d, 0x44, 0x4d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x6d,
+	0x64, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8f, 0x02, 0x0a, 0x0a, 0x4d, 0x44,
+	0x4d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x56, 0x0a, 0x28, 0x61, 0x63, 0x74, 0x69,
+	0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x61, 0x6c, 0x6c, 0x6f,
+	0x77, 0x65, 0x64, 0x5f, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x75, 0x70, 0x65, 0x72, 0x76,
+	0x69, 0x73, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x24, 0x61, 0x63, 0x74, 0x69,
+	0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x63, 0x6b, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65,
+	0x64, 0x57, 0x68, 0x69, 0x6c, 0x65, 0x53, 0x75, 0x70, 0x65, 0x72, 0x76, 0x69, 0x73, 0x65, 0x64,
+	0x12, 0x36, 0x0a, 0x17, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x5f, 0x74, 0x6f,
+	0x6b, 0x65, 0x6e, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x08, 0x52, 0x15, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x54, 0x6f, 0x6b, 0x65,
+	0x6e, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x71, 0x0a, 0x37, 0x70, 0x72, 0x6f, 0x6d,
+	0x70, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77,
+	0x5f, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e,
+	0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x30, 0x70, 0x72, 0x6f, 0x6d, 0x70,
+	0x74, 0x55, 0x73, 0x65, 0x72, 0x54, 0x6f, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x42, 0x6f, 0x6f, 0x74,
+	0x73, 0x74, 0x72, 0x61, 0x70, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x46, 0x6f, 0x72, 0x41, 0x75, 0x74,
+	0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5d, 0x0a, 0x1e, 0x50,
+	0x61, 0x73, 0x73, 0x63, 0x6f, 0x64, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x47, 0x72, 0x61, 0x63, 0x65,
+	0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x3b, 0x0a,
+	0x1a, 0x70, 0x61, 0x73, 0x73, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x67,
+	0x72, 0x61, 0x63, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x17, 0x70, 0x61, 0x73, 0x73, 0x63, 0x6f, 0x64, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x47,
+	0x72, 0x61, 0x63, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x22, 0x53, 0x0a, 0x1b, 0x4d, 0x61,
+	0x78, 0x69, 0x6d, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65,
+	0x72, 0x73, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x34, 0x0a, 0x16, 0x6d, 0x61, 0x78,
+	0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x73,
+	0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x6d, 0x61, 0x78, 0x69, 0x6d,
+	0x75, 0x6d, 0x52, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x22,
+	0x37, 0x0a, 0x1b, 0x44, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x53, 0x75, 0x62,
+	0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x18,
+	0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
+	0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x2f, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x41,
+	0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12,
+	0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x43, 0x0a, 0x1f, 0x4d, 0x61, 0x6e,
+	0x61, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43,
+	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b,
+	0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
+	0x09, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x22, 0x40,
+	0x0a, 0x1c, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x20,
+	0x0a, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20,
+	0x03, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73,
+	0x22, 0x67, 0x0a, 0x1a, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x69,
+	0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x20,
+	0x0a, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20,
+	0x03, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73,
+	0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x66, 0x65, 0x65, 0x64, 0x62,
+	0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x74,
+	0x65, 0x46, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x22, 0xcb, 0x01, 0x0a, 0x13, 0x53, 0x65,
+	0x74, 0x46, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
+	0x64, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x73,
+	0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x75, 0x72,
+	0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x21, 0x0a, 0x0c,
+	0x6e, 0x65, 0x77, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12,
+	0x1f, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x72, 0x6f, 0x6d, 0x73, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x6f, 0x6d, 0x73,
+	0x12, 0x45, 0x0a, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75,
+	0x69, 0x72, 0x65, 0x73, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x74, 0x65, 0x74,
+	0x68, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x72, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72,
+	0x6b, 0x54, 0x65, 0x74, 0x68, 0x65, 0x72, 0x22, 0x34, 0x0a, 0x16, 0x56, 0x65, 0x72, 0x69, 0x66,
+	0x79, 0x46, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
+	0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0xc7, 0x01,
+	0x0a, 0x0f, 0x53, 0x65, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x4c, 0x6f, 0x63,
+	0x6b, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x73,
+	0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x75, 0x72,
+	0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x21, 0x0a, 0x0c,
+	0x6e, 0x65, 0x77, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12,
+	0x1f, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x72, 0x6f, 0x6d, 0x73, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x6f, 0x6d, 0x73,
+	0x12, 0x45, 0x0a, 0x1f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75,
+	0x69, 0x72, 0x65, 0x73, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x74, 0x65, 0x74,
+	0x68, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x72, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72,
+	0x6b, 0x54, 0x65, 0x74, 0x68, 0x65, 0x72, 0x22, 0x30, 0x0a, 0x12, 0x56, 0x65, 0x72, 0x69, 0x66,
+	0x79, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x4c, 0x6f, 0x63, 0x6b, 0x12, 0x1a, 0x0a,
+	0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x4f, 0x0a, 0x14, 0x53, 0x65, 0x74,
+	0x41, 0x75, 0x74, 0x6f, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
+	0x64, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x04, 0x67, 0x75, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
+	0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x70, 0x61,
+	0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x48, 0x61, 0x73, 0x68, 0x22, 0x3e, 0x0a, 0x10, 0x53, 0x63,
+	0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x53, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2a,
+	0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x10, 0x2e, 0x6d, 0x64, 0x6d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
+	0x65, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x06, 0x55,
+	0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
+	0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x64,
+	0x75, 0x63, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63,
+	0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12,
+	0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c,
+	0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x61, 0x78, 0x5f, 0x75, 0x73,
+	0x65, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x65, 0x72, 0x72, 0x61, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x10, 0x6d, 0x61, 0x78, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x65, 0x72,
+	0x72, 0x61, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79,
+	0x22, 0x2c, 0x0a, 0x14, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x53, 0x55, 0x70,
+	0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63,
+	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x4c,
+	0x0a, 0x12, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4e, 0x53, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
+	0x69, 0x6f, 0x6e, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x65,
+	0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18,
+	0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x74,
+	0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x22, 0xe0, 0x01, 0x0a,
+	0x12, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x56, 0x61, 0x75, 0x6c, 0x74,
+	0x4b, 0x65, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x44,
+	0x0a, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x75, 0x6e, 0x6c, 0x6f,
+	0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x64, 0x6d, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x56, 0x61, 0x75, 0x6c, 0x74, 0x55, 0x6e, 0x6c,
+	0x6f, 0x63, 0x6b, 0x52, 0x0f, 0x66, 0x69, 0x6c, 0x65, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x55, 0x6e,
+	0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x27, 0x0a, 0x0f, 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x65, 0x72, 0x74,
+	0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6e,
+	0x65, 0x77, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x40, 0x0a,
+	0x1c, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f,
+	0x6e, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20,
+	0x01, 0x28, 0x0c, 0x52, 0x1a, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70,
+	0x74, 0x69, 0x6f, 0x6e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x22,
+	0x9a, 0x01, 0x0a, 0x0f, 0x46, 0x69, 0x6c, 0x65, 0x56, 0x61, 0x75, 0x6c, 0x74, 0x55, 0x6e, 0x6c,
+	0x6f, 0x63, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12,
+	0x2c, 0x0a, 0x12, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x65,
+	0x78, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x10, 0x70, 0x72, 0x69,
+	0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x3d, 0x0a,
+	0x1b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x65, 0x78, 0x70,
+	0x6f, 0x72, 0x74, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x18, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x45, 0x78,
+	0x70, 0x6f, 0x72, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x3c, 0x0a, 0x11,
+	0x53, 0x65, 0x74, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x54, 0x6f, 0x6b, 0x65,
+	0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x5f, 0x74,
+	0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x62, 0x6f, 0x6f, 0x74,
+	0x73, 0x74, 0x72, 0x61, 0x70, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xd2, 0x01, 0x0a, 0x0d, 0x52,
+	0x65, 0x73, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x12, 0x0a, 0x04,
+	0x75, 0x64, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x64, 0x69, 0x64,
+	0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x75, 0x75, 0x69, 0x64,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x55,
+	0x75, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x68, 0x61,
+	0x69, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x64, 0x6d, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x0a,
+	0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x22, 0x53, 0x0a, 0x06, 0x53, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x63, 0x6b, 0x6e, 0x6f, 0x77, 0x6c, 0x65,
+	0x64, 0x67, 0x65, 0x64, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10,
+	0x01, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x46, 0x6f, 0x72, 0x6d,
+	0x61, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x64, 0x6c,
+	0x65, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x6f, 0x74, 0x4e, 0x6f, 0x77, 0x10, 0x04, 0x22,
+	0xb9, 0x01, 0x0a, 0x0a, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x33,
+	0x0a, 0x15, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x73, 0x63,
+	0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x6c,
+	0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+	0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x16, 0x75, 0x73, 0x5f, 0x65, 0x6e, 0x67, 0x6c, 0x69, 0x73,
+	0x68, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x14, 0x75, 0x73, 0x45, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x44, 0x65,
+	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x72, 0x72,
+	0x6f, 0x72, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1d, 0x0a, 0x0a,
+	0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05,
+	0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x3e, 0x0a, 0x14, 0x52,
+	0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x43, 0x65, 0x6c, 0x6c, 0x75, 0x6c, 0x61, 0x72, 0x50, 0x6c,
+	0x61, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x73, 0x69, 0x6d, 0x5f, 0x73, 0x65, 0x72, 0x76,
+	0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x73,
+	0x69, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x42, 0x38, 0x5a, 0x36, 0x67,
+	0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x6d,
+	0x64, 0x6d, 0x2f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x6d, 0x64, 0x6d, 0x2f, 0x6d, 0x64, 0x6d, 0x2f,
+	0x6d, 0x64, 0x6d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x6d, 0x64, 0x6d,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -5716,7 +5782,7 @@ func file_mdm_proto_rawDescGZIP() []byte {
 }
 
 var file_mdm_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_mdm_proto_msgTypes = make([]protoimpl.MessageInfo, 74)
+var file_mdm_proto_msgTypes = make([]protoimpl.MessageInfo, 75)
 var file_mdm_proto_goTypes = []interface{}{
 	(ResultPayload_Status)(0),               // 0: mdmproto.ResultPayload.Status
 	(*CommandPayload)(nil),                  // 1: mdmproto.CommandPayload
@@ -5768,31 +5834,32 @@ var file_mdm_proto_goTypes = []interface{}{
 	(*ApplicationAttributes)(nil),           // 47: mdmproto.ApplicationAttributes
 	(*DeviceNameSetting)(nil),               // 48: mdmproto.DeviceNameSetting
 	(*TimeZoneSetting)(nil),                 // 49: mdmproto.TimeZoneSetting
-	(*HostnameSetting)(nil),                 // 50: mdmproto.HostnameSetting
-	(*MDMOptionsSetting)(nil),               // 51: mdmproto.MDMOptionsSetting
-	(*MDMOptions)(nil),                      // 52: mdmproto.MDMOptions
-	(*PasscodeLockGracePeriodSetting)(nil),  // 53: mdmproto.PasscodeLockGracePeriodSetting
-	(*MaximumResidentUsersSetting)(nil),     // 54: mdmproto.MaximumResidentUsersSetting
-	(*DiagnosticSubmissionSetting)(nil),     // 55: mdmproto.DiagnosticSubmissionSetting
-	(*AppAnalyticsSetting)(nil),             // 56: mdmproto.AppAnalyticsSetting
-	(*ManagedApplicationConfiguration)(nil), // 57: mdmproto.ManagedApplicationConfiguration
-	(*ManagedApplicationAttributes)(nil),    // 58: mdmproto.ManagedApplicationAttributes
-	(*ManagedApplicationFeedback)(nil),      // 59: mdmproto.ManagedApplicationFeedback
-	(*SetFirmwarePassword)(nil),             // 60: mdmproto.SetFirmwarePassword
-	(*VerifyFirmwarePassword)(nil),          // 61: mdmproto.VerifyFirmwarePassword
-	(*SetRecoveryLock)(nil),                 // 62: mdmproto.SetRecoveryLock
-	(*VerifyRecoveryLock)(nil),              // 63: mdmproto.VerifyRecoveryLock
-	(*SetAutoAdminPassword)(nil),            // 64: mdmproto.SetAutoAdminPassword
-	(*ScheduleOSUpdate)(nil),                // 65: mdmproto.ScheduleOSUpdate
-	(*Update)(nil),                          // 66: mdmproto.Update
-	(*ScheduleOSUpdateScan)(nil),            // 67: mdmproto.ScheduleOSUpdateScan
-	(*ActiveNSExtensions)(nil),              // 68: mdmproto.ActiveNSExtensions
-	(*RotateFileVaultKey)(nil),              // 69: mdmproto.RotateFileVaultKey
-	(*FileVaultUnlock)(nil),                 // 70: mdmproto.FileVaultUnlock
-	(*SetBootstrapToken)(nil),               // 71: mdmproto.SetBootstrapToken
-	(*ResultPayload)(nil),                   // 72: mdmproto.ResultPayload
-	(*ErrorChain)(nil),                      // 73: mdmproto.ErrorChain
-	(*RefreshCellularPlans)(nil),            // 74: mdmproto.RefreshCellularPlans
+	(*SoftwareUpdateSettingsSetting)(nil),   // 50: mdmproto.SoftwareUpdateSettingsSetting
+	(*HostnameSetting)(nil),                 // 51: mdmproto.HostnameSetting
+	(*MDMOptionsSetting)(nil),               // 52: mdmproto.MDMOptionsSetting
+	(*MDMOptions)(nil),                      // 53: mdmproto.MDMOptions
+	(*PasscodeLockGracePeriodSetting)(nil),  // 54: mdmproto.PasscodeLockGracePeriodSetting
+	(*MaximumResidentUsersSetting)(nil),     // 55: mdmproto.MaximumResidentUsersSetting
+	(*DiagnosticSubmissionSetting)(nil),     // 56: mdmproto.DiagnosticSubmissionSetting
+	(*AppAnalyticsSetting)(nil),             // 57: mdmproto.AppAnalyticsSetting
+	(*ManagedApplicationConfiguration)(nil), // 58: mdmproto.ManagedApplicationConfiguration
+	(*ManagedApplicationAttributes)(nil),    // 59: mdmproto.ManagedApplicationAttributes
+	(*ManagedApplicationFeedback)(nil),      // 60: mdmproto.ManagedApplicationFeedback
+	(*SetFirmwarePassword)(nil),             // 61: mdmproto.SetFirmwarePassword
+	(*VerifyFirmwarePassword)(nil),          // 62: mdmproto.VerifyFirmwarePassword
+	(*SetRecoveryLock)(nil),                 // 63: mdmproto.SetRecoveryLock
+	(*VerifyRecoveryLock)(nil),              // 64: mdmproto.VerifyRecoveryLock
+	(*SetAutoAdminPassword)(nil),            // 65: mdmproto.SetAutoAdminPassword
+	(*ScheduleOSUpdate)(nil),                // 66: mdmproto.ScheduleOSUpdate
+	(*Update)(nil),                          // 67: mdmproto.Update
+	(*ScheduleOSUpdateScan)(nil),            // 68: mdmproto.ScheduleOSUpdateScan
+	(*ActiveNSExtensions)(nil),              // 69: mdmproto.ActiveNSExtensions
+	(*RotateFileVaultKey)(nil),              // 70: mdmproto.RotateFileVaultKey
+	(*FileVaultUnlock)(nil),                 // 71: mdmproto.FileVaultUnlock
+	(*SetBootstrapToken)(nil),               // 72: mdmproto.SetBootstrapToken
+	(*ResultPayload)(nil),                   // 73: mdmproto.ResultPayload
+	(*ErrorChain)(nil),                      // 74: mdmproto.ErrorChain
+	(*RefreshCellularPlans)(nil),            // 75: mdmproto.RefreshCellularPlans
 }
 var file_mdm_proto_depIdxs = []int32{
 	2,  // 0: mdmproto.CommandPayload.command:type_name -> mdmproto.Command
@@ -5820,21 +5887,21 @@ var file_mdm_proto_depIdxs = []int32{
 	34, // 22: mdmproto.Command.install_media:type_name -> mdmproto.InstallMedia
 	35, // 23: mdmproto.Command.remove_media:type_name -> mdmproto.RemoveMedia
 	38, // 24: mdmproto.Command.settings:type_name -> mdmproto.Settings
-	57, // 25: mdmproto.Command.managed_application_configuration:type_name -> mdmproto.ManagedApplicationConfiguration
-	58, // 26: mdmproto.Command.managed_application_attributes:type_name -> mdmproto.ManagedApplicationAttributes
-	59, // 27: mdmproto.Command.managed_application_feedback:type_name -> mdmproto.ManagedApplicationFeedback
-	60, // 28: mdmproto.Command.set_firmware_password:type_name -> mdmproto.SetFirmwarePassword
-	61, // 29: mdmproto.Command.verify_firmware_password:type_name -> mdmproto.VerifyFirmwarePassword
-	64, // 30: mdmproto.Command.set_auto_admin_password:type_name -> mdmproto.SetAutoAdminPassword
-	65, // 31: mdmproto.Command.schedule_os_update:type_name -> mdmproto.ScheduleOSUpdate
-	67, // 32: mdmproto.Command.schedule_os_update_scan:type_name -> mdmproto.ScheduleOSUpdateScan
-	68, // 33: mdmproto.Command.active_ns_extensions:type_name -> mdmproto.ActiveNSExtensions
-	69, // 34: mdmproto.Command.rotate_filevault_key:type_name -> mdmproto.RotateFileVaultKey
+	58, // 25: mdmproto.Command.managed_application_configuration:type_name -> mdmproto.ManagedApplicationConfiguration
+	59, // 26: mdmproto.Command.managed_application_attributes:type_name -> mdmproto.ManagedApplicationAttributes
+	60, // 27: mdmproto.Command.managed_application_feedback:type_name -> mdmproto.ManagedApplicationFeedback
+	61, // 28: mdmproto.Command.set_firmware_password:type_name -> mdmproto.SetFirmwarePassword
+	62, // 29: mdmproto.Command.verify_firmware_password:type_name -> mdmproto.VerifyFirmwarePassword
+	65, // 30: mdmproto.Command.set_auto_admin_password:type_name -> mdmproto.SetAutoAdminPassword
+	66, // 31: mdmproto.Command.schedule_os_update:type_name -> mdmproto.ScheduleOSUpdate
+	68, // 32: mdmproto.Command.schedule_os_update_scan:type_name -> mdmproto.ScheduleOSUpdateScan
+	69, // 33: mdmproto.Command.active_ns_extensions:type_name -> mdmproto.ActiveNSExtensions
+	70, // 34: mdmproto.Command.rotate_filevault_key:type_name -> mdmproto.RotateFileVaultKey
 	21, // 35: mdmproto.Command.install_enterprise_application:type_name -> mdmproto.InstallEnterpriseApplication
-	71, // 36: mdmproto.Command.set_bootstrap_token:type_name -> mdmproto.SetBootstrapToken
-	62, // 37: mdmproto.Command.set_recovery_lock:type_name -> mdmproto.SetRecoveryLock
-	63, // 38: mdmproto.Command.verify_recovery_lock:type_name -> mdmproto.VerifyRecoveryLock
-	74, // 39: mdmproto.Command.refresh_cellular_plans:type_name -> mdmproto.RefreshCellularPlans
+	72, // 36: mdmproto.Command.set_bootstrap_token:type_name -> mdmproto.SetBootstrapToken
+	63, // 37: mdmproto.Command.set_recovery_lock:type_name -> mdmproto.SetRecoveryLock
+	64, // 38: mdmproto.Command.verify_recovery_lock:type_name -> mdmproto.VerifyRecoveryLock
+	75, // 39: mdmproto.Command.refresh_cellular_plans:type_name -> mdmproto.RefreshCellularPlans
 	36, // 40: mdmproto.Command.lomDeviceRequestCommand:type_name -> mdmproto.LOMDeviceRequest
 	18, // 41: mdmproto.InstallApplication.options:type_name -> mdmproto.InstallApplicationOptions
 	19, // 42: mdmproto.InstallApplication.configuration:type_name -> mdmproto.InstallApplicationConfiguration
@@ -5848,30 +5915,31 @@ var file_mdm_proto_depIdxs = []int32{
 	37, // 50: mdmproto.LOMDeviceRequest.requestList:type_name -> mdmproto.LOMDeviceRequestCommand
 	39, // 51: mdmproto.Settings.settings:type_name -> mdmproto.Setting
 	48, // 52: mdmproto.Setting.device_name:type_name -> mdmproto.DeviceNameSetting
-	50, // 53: mdmproto.Setting.hostname:type_name -> mdmproto.HostnameSetting
+	51, // 53: mdmproto.Setting.hostname:type_name -> mdmproto.HostnameSetting
 	40, // 54: mdmproto.Setting.voice_roaming:type_name -> mdmproto.VoiceRoamingSetting
 	41, // 55: mdmproto.Setting.personal_hotspot:type_name -> mdmproto.PersonalHotspotSetting
 	42, // 56: mdmproto.Setting.wallpaper:type_name -> mdmproto.WallpaperSetting
 	43, // 57: mdmproto.Setting.data_roaming:type_name -> mdmproto.DataRoamingSetting
 	44, // 58: mdmproto.Setting.bluetooth:type_name -> mdmproto.BluetoothSetting
 	45, // 59: mdmproto.Setting.application_attributes:type_name -> mdmproto.ApplicationAttributesSetting
-	51, // 60: mdmproto.Setting.mdm_options:type_name -> mdmproto.MDMOptionsSetting
-	53, // 61: mdmproto.Setting.passcode_lock_grace_period:type_name -> mdmproto.PasscodeLockGracePeriodSetting
-	54, // 62: mdmproto.Setting.maximum_resident_users:type_name -> mdmproto.MaximumResidentUsersSetting
-	55, // 63: mdmproto.Setting.diagnostic_submission:type_name -> mdmproto.DiagnosticSubmissionSetting
-	56, // 64: mdmproto.Setting.app_analytics:type_name -> mdmproto.AppAnalyticsSetting
+	52, // 60: mdmproto.Setting.mdm_options:type_name -> mdmproto.MDMOptionsSetting
+	54, // 61: mdmproto.Setting.passcode_lock_grace_period:type_name -> mdmproto.PasscodeLockGracePeriodSetting
+	55, // 62: mdmproto.Setting.maximum_resident_users:type_name -> mdmproto.MaximumResidentUsersSetting
+	56, // 63: mdmproto.Setting.diagnostic_submission:type_name -> mdmproto.DiagnosticSubmissionSetting
+	57, // 64: mdmproto.Setting.app_analytics:type_name -> mdmproto.AppAnalyticsSetting
 	46, // 65: mdmproto.Setting.application_configuration:type_name -> mdmproto.ApplicationConfigurationSetting
 	49, // 66: mdmproto.Setting.time_zone:type_name -> mdmproto.TimeZoneSetting
-	47, // 67: mdmproto.ApplicationAttributesSetting.application_attributes:type_name -> mdmproto.ApplicationAttributes
-	52, // 68: mdmproto.MDMOptionsSetting.mdm_options:type_name -> mdmproto.MDMOptions
-	66, // 69: mdmproto.ScheduleOSUpdate.updates:type_name -> mdmproto.Update
-	70, // 70: mdmproto.RotateFileVaultKey.filevault_unlock:type_name -> mdmproto.FileVaultUnlock
-	73, // 71: mdmproto.ResultPayload.error_chain:type_name -> mdmproto.ErrorChain
-	72, // [72:72] is the sub-list for method output_type
-	72, // [72:72] is the sub-list for method input_type
-	72, // [72:72] is the sub-list for extension type_name
-	72, // [72:72] is the sub-list for extension extendee
-	0,  // [0:72] is the sub-list for field type_name
+	50, // 67: mdmproto.Setting.software_update_settings:type_name -> mdmproto.SoftwareUpdateSettingsSetting
+	47, // 68: mdmproto.ApplicationAttributesSetting.application_attributes:type_name -> mdmproto.ApplicationAttributes
+	53, // 69: mdmproto.MDMOptionsSetting.mdm_options:type_name -> mdmproto.MDMOptions
+	67, // 70: mdmproto.ScheduleOSUpdate.updates:type_name -> mdmproto.Update
+	71, // 71: mdmproto.RotateFileVaultKey.filevault_unlock:type_name -> mdmproto.FileVaultUnlock
+	74, // 72: mdmproto.ResultPayload.error_chain:type_name -> mdmproto.ErrorChain
+	73, // [73:73] is the sub-list for method output_type
+	73, // [73:73] is the sub-list for method input_type
+	73, // [73:73] is the sub-list for extension type_name
+	73, // [73:73] is the sub-list for extension extendee
+	0,  // [0:73] is the sub-list for field type_name
 }
 
 func init() { file_mdm_proto_init() }
@@ -6469,7 +6537,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*HostnameSetting); i {
+			switch v := v.(*SoftwareUpdateSettingsSetting); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6481,7 +6549,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*MDMOptionsSetting); i {
+			switch v := v.(*HostnameSetting); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6493,7 +6561,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*MDMOptions); i {
+			switch v := v.(*MDMOptionsSetting); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6505,7 +6573,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*PasscodeLockGracePeriodSetting); i {
+			switch v := v.(*MDMOptions); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6517,7 +6585,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*MaximumResidentUsersSetting); i {
+			switch v := v.(*PasscodeLockGracePeriodSetting); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6529,7 +6597,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*DiagnosticSubmissionSetting); i {
+			switch v := v.(*MaximumResidentUsersSetting); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6541,7 +6609,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*AppAnalyticsSetting); i {
+			switch v := v.(*DiagnosticSubmissionSetting); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6553,7 +6621,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ManagedApplicationConfiguration); i {
+			switch v := v.(*AppAnalyticsSetting); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6565,7 +6633,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ManagedApplicationAttributes); i {
+			switch v := v.(*ManagedApplicationConfiguration); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6577,7 +6645,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ManagedApplicationFeedback); i {
+			switch v := v.(*ManagedApplicationAttributes); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6589,7 +6657,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetFirmwarePassword); i {
+			switch v := v.(*ManagedApplicationFeedback); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6601,7 +6669,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*VerifyFirmwarePassword); i {
+			switch v := v.(*SetFirmwarePassword); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6613,7 +6681,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetRecoveryLock); i {
+			switch v := v.(*VerifyFirmwarePassword); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6625,7 +6693,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*VerifyRecoveryLock); i {
+			switch v := v.(*SetRecoveryLock); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6637,7 +6705,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetAutoAdminPassword); i {
+			switch v := v.(*VerifyRecoveryLock); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6649,7 +6717,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ScheduleOSUpdate); i {
+			switch v := v.(*SetAutoAdminPassword); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6661,7 +6729,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Update); i {
+			switch v := v.(*ScheduleOSUpdate); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6673,7 +6741,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ScheduleOSUpdateScan); i {
+			switch v := v.(*Update); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6685,7 +6753,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ActiveNSExtensions); i {
+			switch v := v.(*ScheduleOSUpdateScan); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6697,7 +6765,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*RotateFileVaultKey); i {
+			switch v := v.(*ActiveNSExtensions); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6709,7 +6777,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*FileVaultUnlock); i {
+			switch v := v.(*RotateFileVaultKey); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6721,7 +6789,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*SetBootstrapToken); i {
+			switch v := v.(*FileVaultUnlock); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6733,7 +6801,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ResultPayload); i {
+			switch v := v.(*SetBootstrapToken); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6745,7 +6813,7 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ErrorChain); i {
+			switch v := v.(*ResultPayload); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -6757,6 +6825,18 @@ func file_mdm_proto_init() {
 			}
 		}
 		file_mdm_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ErrorChain); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_mdm_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*RefreshCellularPlans); i {
 			case 0:
 				return &v.state
@@ -6817,7 +6897,7 @@ func file_mdm_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_mdm_proto_rawDesc,
 			NumEnums:      1,
-			NumMessages:   74,
+			NumMessages:   75,
 			NumExtensions: 0,
 			NumServices:   0,
 		},
diff --git a/mdm/mdm/internal/mdmproto/mdm.proto b/mdm/mdm/internal/mdmproto/mdm.proto
index c5f4462..efc31f4 100644
--- a/mdm/mdm/internal/mdmproto/mdm.proto
+++ b/mdm/mdm/internal/mdmproto/mdm.proto
@@ -292,6 +292,7 @@ message Setting {
   AppAnalyticsSetting app_analytics = 14;
   ApplicationConfigurationSetting application_configuration = 15;
   TimeZoneSetting time_zone = 16;
+  SoftwareUpdateSettingsSetting software_update_settings = 17;
 }
 
 message VoiceRoamingSetting {
@@ -337,6 +338,10 @@ message TimeZoneSetting {
   string time_zone = 1;
 }
 
+message SoftwareUpdateSettingsSetting {
+  int64 recommendation_cadence = 1;
+}
+
 message HostnameSetting {
   string hostname = 1;
 }
diff --git a/mdm/mdm/marshal_proto.go b/mdm/mdm/marshal_proto.go
index 2422499..6b1e66d 100644
--- a/mdm/mdm/marshal_proto.go
+++ b/mdm/mdm/marshal_proto.go
@@ -514,6 +514,10 @@ func settingToProto(s Setting) *mdmproto.Setting {
 		pbs.AppAnalytics = &mdmproto.AppAnalyticsSetting{
 			Enabled: falseIfNil(s.Enabled),
 		}
+	case "SoftwareUpdateSettings":
+		pbs.SoftwareUpdateSettings = &mdmproto.SoftwareUpdateSettingsSetting{
+			RecommendationCadence: int64(zeroIntIfNil(s.RecommendationCadence)),
+		}
 	}
 	return &pbs
 }
diff --git a/mdm/mdm/unmarshal_proto.go b/mdm/mdm/unmarshal_proto.go
index f64c579..20cc6b5 100644
--- a/mdm/mdm/unmarshal_proto.go
+++ b/mdm/mdm/unmarshal_proto.go
@@ -455,6 +455,10 @@ func protoToSetting(s *mdmproto.Setting) Setting {
 	case "AppAnalytics":
 		pbs := s.GetAppAnalytics()
 		setting.Enabled = nilIfFalse(pbs.GetEnabled())
+	case "SoftwareUpdateSettings":
+		pbs := s.GetSoftwareUpdateSettings()
+		cadence := int(pbs.GetRecommendationCadence())
+		setting.RecommendationCadence = &cadence
 	}
 	return setting
 }


Test patch:
diff --git a/mdm/mdm/mdm_command_test.go b/mdm/mdm/mdm_command_test.go
index 3f31e8e..1fffce6 100644
--- a/mdm/mdm/mdm_command_test.go
+++ b/mdm/mdm/mdm_command_test.go
@@ -29,6 +29,7 @@ Not tested end to end but checked against pdf:
 
 func TestMarshalCommand(t *testing.T) {
 	var deferrals int64 = 3
+	var cadence int
 	var tests = []struct {
 		Command Command
 	}{
@@ -167,6 +168,14 @@ func TestMarshalCommand(t *testing.T) {
 				},
 			},
 		},
+		{
+			Command: Command{
+				RequestType: "Settings",
+				Settings: &Settings{
+					Settings: []Setting{{Item: "SoftwareUpdateSettings", RecommendationCadence: &cadence}},
+				},
+			},
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.Command.RequestType+"_json", func(t *testing.T) {
@@ -573,6 +582,25 @@ func TestEndToEnd(t *testing.T) {
 				}
 			},
 		},
+		{
+			name: "SoftwareUpdateSettings",
+			requestBytes: []byte(
+				`{"request_type":"Settings","settings":[{"item":"SoftwareUpdateSettings","recommendation_cadence":0}]}`,
+			),
+			testFn: func(t *testing.T, parts endToEndParts) {
+				needToSee := [][]byte{
+					[]byte(`Settings`),
+					[]byte(`SoftwareUpdateSettings`),
+					[]byte(`RecommendationCadence`),
+					[]byte(`0`),
+				}
+				for _, b := range needToSee {
+					if !bytes.Contains(parts.plistData, b) {
+						t.Error(fmt.Sprintf("marshaled plist does not contain required bytes: '%s'", string(b)))
+					}
+				}
+			},
+		},
 	}
 
 	for _, tt := range tests {