@eide/foir-proto-ts 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eide/foir-proto-ts",
3
- "version": "0.25.0",
3
+ "version": "0.27.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./analytics/v1/analytics_pb": "./src/analytics/v1/analytics_pb.js",
@@ -515,6 +515,18 @@ export declare type Operation = Message<"apps.v1.Operation"> & {
515
515
  * @generated from field: optional bool supports_async = 10;
516
516
  */
517
517
  supportsAsync?: boolean;
518
+
519
+ /**
520
+ * When true, platform auto-enqueues this operation after a successful
521
+ * ConfirmInstallApp (and, for apps declaring __validate_credentials, after
522
+ * that gate passes). Multiple operations with run_after_install=true are
523
+ * dispatched in manifest declaration order. A failure here emits the
524
+ * app_event `post_install_op_failed` but does NOT roll back the install;
525
+ * the admin retries via the standard op-dispatch UI.
526
+ *
527
+ * @generated from field: bool run_after_install = 11;
528
+ */
529
+ runAfterInstall: boolean;
518
530
  };
519
531
 
520
532
  /**
@@ -10,7 +10,7 @@ import { file_google_protobuf_struct } from "@bufbuild/protobuf/wkt";
10
10
  * Describes the file apps/v1/apps.proto.
11
11
  */
12
12
  export const file_apps_v1_apps = /*@__PURE__*/
13
- fileDesc("ChJhcHBzL3YxL2FwcHMucHJvdG8SB2FwcHMudjEi8gQKCUFwcENvbmZpZxI0CgRuYW1lGAEgASgJQia6SCNyIRhAMh1eW2Etel1bYS16MC05XSooLVthLXowLTldKykqJBIYCgd2ZXJzaW9uGAIgASgJQge6SARyAhABEiMKCG1ldGFkYXRhGAMgASgLMhEuYXBwcy52MS5NZXRhZGF0YRInCgptaWRkbGV3YXJlGAQgASgLMhMuYXBwcy52MS5NaWRkbGV3YXJlEikKC2NyZWRlbnRpYWxzGAUgASgLMhQuYXBwcy52MS5DcmVkZW50aWFscxIwCg9zZXR0aW5nc19zY2hlbWEYBiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EjAKB3NvdXJjZXMYByADKAsyHy5hcHBzLnYxLkFwcENvbmZpZy5Tb3VyY2VzRW50cnkSLAoFc2lua3MYCCADKAsyHS5hcHBzLnYxLkFwcENvbmZpZy5TaW5rc0VudHJ5EiYKCm9wZXJhdGlvbnMYCSADKAsyEi5hcHBzLnYxLk9wZXJhdGlvbhIcCgVob29rcxgKIAMoCzINLmFwcHMudjEuSG9vaxIXCgJ1aRgLIAEoCzILLmFwcHMudjEuVUkSIQoHaW5ib3VuZBgMIAEoCzIQLmFwcHMudjEuSW5ib3VuZBpDCgxTb3VyY2VzRW50cnkSCwoDa2V5GAEgASgJEiIKBXZhbHVlGAIgASgLMhMuYXBwcy52MS5Tb3VyY2VUeXBlOgI4ARpDCgpTaW5rc0VudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLmFwcHMudjEuU2lua0NvbnRyYWN0OgI4ASJlCghNZXRhZGF0YRIUCgxkaXNwbGF5X25hbWUYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSDAoEaWNvbhgDIAEoCRIOCgZhdXRob3IYBCABKAkSEAoIaG9tZXBhZ2UYBSABKAkiLQoKTWlkZGxld2FyZRIfCgN1cmwYASABKAlCErpID3INMgteaHR0cHM6Ly8uKyLXAgoLQ3JlZGVudGlhbHMSLwoIc3RyYXRlZ3kYASABKA4yHS5hcHBzLnYxLkNyZWRlbnRpYWxzLlN0cmF0ZWd5EiwKBnNjaGVtYRgCIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAIgBARIoCgVvYXV0aBgDIAEoCzIULmFwcHMudjEuT0F1dGhDb25maWdIAYgBASKpAQoIU3RyYXRlZ3kSGAoUU1RSQVRFR1lfVU5TUEVDSUZJRUQQABISCg5TVFJBVEVHWV9PQVVUSBABEhQKEFNUUkFURUdZX0FQSV9LRVkQAhIaChZTVFJBVEVHWV9TSEFSRURfU0VDUkVUEAMSFAoQU1RSQVRFR1lfU1NIX0tFWRAEEhEKDVNUUkFURUdZX05PTkUQBRIUChBTVFJBVEVHWV9NQU5BR0VEEAZCCQoHX3NjaGVtYUIICgZfb2F1dGgiTAoLT0F1dGhDb25maWcSHAoUYXV0aG9yaXplX3N0YXJ0X3BhdGgYASABKAkSHwoXYXV0aG9yaXplX2NhbGxiYWNrX3BhdGgYAiABKAkiLAoHSW5ib3VuZBIhCgd3ZWJob29rGAEgASgLMhAuYXBwcy52MS5XZWJob29rIhcKB1dlYmhvb2sSDAoEcGF0aBgBIAEoCSKpAQoKU291cmNlVHlwZRINCgVsYWJlbBgBIAEoCRIvCgZmaWVsZHMYAiADKAsyHy5hcHBzLnYxLlNvdXJjZVR5cGUuRmllbGRzRW50cnkSEwoLbmF0dXJhbF9rZXkYAyABKAkaRgoLRmllbGRzRW50cnkSCwoDa2V5GAEgASgJEiYKBXZhbHVlGAIgASgLMhcuYXBwcy52MS5TdWdnZXN0ZWRGaWVsZDoCOAEiqAEKDFNpbmtDb250cmFjdBINCgVsYWJlbBgBIAEoCRIxCgZmaWVsZHMYAiADKAsyIS5hcHBzLnYxLlNpbmtDb250cmFjdC5GaWVsZHNFbnRyeRITCgtuYXR1cmFsX2tleRgDIAEoCRpBCgtGaWVsZHNFbnRyeRILCgNrZXkYASABKAkSIQoFdmFsdWUYAiABKAsyEi5hcHBzLnYxLlNpbmtGaWVsZDoCOAEimQEKDlN1Z2dlc3RlZEZpZWxkEgwKBHR5cGUYASABKAkSEgoFbGFiZWwYAiABKAlIAIgBARIVCghyZXF1aXJlZBgDIAEoCEgBiAEBEiwKBmNvbmZpZxgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAogBAUIICgZfbGFiZWxCCwoJX3JlcXVpcmVkQgkKB19jb25maWciWwoJU2lua0ZpZWxkEgwKBHR5cGUYASABKAkSEAoIc2VtYW50aWMYAiABKAkSEAoIcmVxdWlyZWQYAyABKAgSEgoFbGFiZWwYBCABKAlIAIgBAUIICgZfbGFiZWwi3QMKCU9wZXJhdGlvbhI6CgNrZXkYASABKAlCLbpIKnIoGEAyJF4oX18pP1thLXpdW2EtejAtOV9dKigtW2EtejAtOV9dKykqJBIMCgRuYW1lGAIgASgJEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQESHQoIZW5kcG9pbnQYBCABKAlCC7pICHIGMgReLy4qEhQKDGNhcGFiaWxpdGllcxgFIAMoCRIXCgp0aW1lb3V0X21zGAYgASgFSAGIAQESMgoMcmV0cnlfcG9saWN5GAcgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgCiAEBEjIKDGlucHV0X3NjaGVtYRgIIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIA4gBARIzCg1vdXRwdXRfc2NoZW1hGAkgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgEiAEBEhsKDnN1cHBvcnRzX2FzeW5jGAogASgISAWIAQFCDgoMX2Rlc2NyaXB0aW9uQg0KC190aW1lb3V0X21zQg8KDV9yZXRyeV9wb2xpY3lCDwoNX2lucHV0X3NjaGVtYUIQCg5fb3V0cHV0X3NjaGVtYUIRCg9fc3VwcG9ydHNfYXN5bmMipgEKBEhvb2sSMwoDa2V5GAEgASgJQia6SCNyIRhAMh1eW2Etel1bYS16MC05XSooLVthLXowLTldKykqJBIMCgRuYW1lGAIgASgJEhYKBWV2ZW50GAMgASgJQge6SARyAhABEicKBmZpbHRlchgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSGgoJb3BlcmF0aW9uGAUgASgJQge6SARyAhABIjcKAlVJEjEKCnBsYWNlbWVudHMYASADKAsyHS5hcHBzLnYxLlBsYWNlbWVudERlY2xhcmF0aW9uIpQEChRQbGFjZW1lbnREZWNsYXJhdGlvbhIzCgNrZXkYASABKAlCJrpII3IhGEAyHV5bYS16XVthLXowLTldKigtW2EtejAtOV0rKSokEjQKBnRhcmdldBgCIAEoDjIkLmFwcHMudjEuUGxhY2VtZW50RGVjbGFyYXRpb24uVGFyZ2V0EhIKBW1vZGVsGAMgASgJSACIAQESEgoFZmllbGQYBCABKAlIAYgBARIhChlmaWVsZF9zZWxlY3RlZF9hdF9pbnN0YWxsGAUgASgIEhAKA3RhYhgGIAEoCUgCiAEBEhYKBXRpdGxlGAcgASgJQge6SARyAhABEh8KA3VybBgIIAEoCUISukgPcg0yC15odHRwczovLy4rEh0KEHJlcGxhY2VzX2RlZmF1bHQYCSABKAhIA4gBARIrCgVoaW50cxgKIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIBIgBASJ0CgZUYXJnZXQSFgoSVEFSR0VUX1VOU1BFQ0lGSUVEEAASFAoQVEFSR0VUX0ZVTExfUEFHRRABEhYKElRBUkdFVF9NQUlOX0VESVRPUhACEhIKDlRBUkdFVF9TSURFQkFSEAMSEAoMVEFSR0VUX0ZJRUxEEARCCAoGX21vZGVsQggKBl9maWVsZEIGCgRfdGFiQhMKEV9yZXBsYWNlc19kZWZhdWx0QggKBl9oaW50c0I1WjNnaXRodWIuY29tL2VpZGVzdHVkaW8vZm9pci9nZW4vcHJvdG8vYXBwcy92MTthcHBzdjFiBnByb3RvMw", [file_buf_validate_validate, file_google_protobuf_struct]);
13
+ fileDesc("ChJhcHBzL3YxL2FwcHMucHJvdG8SB2FwcHMudjEi8gQKCUFwcENvbmZpZxI0CgRuYW1lGAEgASgJQia6SCNyIRhAMh1eW2Etel1bYS16MC05XSooLVthLXowLTldKykqJBIYCgd2ZXJzaW9uGAIgASgJQge6SARyAhABEiMKCG1ldGFkYXRhGAMgASgLMhEuYXBwcy52MS5NZXRhZGF0YRInCgptaWRkbGV3YXJlGAQgASgLMhMuYXBwcy52MS5NaWRkbGV3YXJlEikKC2NyZWRlbnRpYWxzGAUgASgLMhQuYXBwcy52MS5DcmVkZW50aWFscxIwCg9zZXR0aW5nc19zY2hlbWEYBiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EjAKB3NvdXJjZXMYByADKAsyHy5hcHBzLnYxLkFwcENvbmZpZy5Tb3VyY2VzRW50cnkSLAoFc2lua3MYCCADKAsyHS5hcHBzLnYxLkFwcENvbmZpZy5TaW5rc0VudHJ5EiYKCm9wZXJhdGlvbnMYCSADKAsyEi5hcHBzLnYxLk9wZXJhdGlvbhIcCgVob29rcxgKIAMoCzINLmFwcHMudjEuSG9vaxIXCgJ1aRgLIAEoCzILLmFwcHMudjEuVUkSIQoHaW5ib3VuZBgMIAEoCzIQLmFwcHMudjEuSW5ib3VuZBpDCgxTb3VyY2VzRW50cnkSCwoDa2V5GAEgASgJEiIKBXZhbHVlGAIgASgLMhMuYXBwcy52MS5Tb3VyY2VUeXBlOgI4ARpDCgpTaW5rc0VudHJ5EgsKA2tleRgBIAEoCRIkCgV2YWx1ZRgCIAEoCzIVLmFwcHMudjEuU2lua0NvbnRyYWN0OgI4ASJlCghNZXRhZGF0YRIUCgxkaXNwbGF5X25hbWUYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSDAoEaWNvbhgDIAEoCRIOCgZhdXRob3IYBCABKAkSEAoIaG9tZXBhZ2UYBSABKAkiLQoKTWlkZGxld2FyZRIfCgN1cmwYASABKAlCErpID3INMgteaHR0cHM6Ly8uKyLXAgoLQ3JlZGVudGlhbHMSLwoIc3RyYXRlZ3kYASABKA4yHS5hcHBzLnYxLkNyZWRlbnRpYWxzLlN0cmF0ZWd5EiwKBnNjaGVtYRgCIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAIgBARIoCgVvYXV0aBgDIAEoCzIULmFwcHMudjEuT0F1dGhDb25maWdIAYgBASKpAQoIU3RyYXRlZ3kSGAoUU1RSQVRFR1lfVU5TUEVDSUZJRUQQABISCg5TVFJBVEVHWV9PQVVUSBABEhQKEFNUUkFURUdZX0FQSV9LRVkQAhIaChZTVFJBVEVHWV9TSEFSRURfU0VDUkVUEAMSFAoQU1RSQVRFR1lfU1NIX0tFWRAEEhEKDVNUUkFURUdZX05PTkUQBRIUChBTVFJBVEVHWV9NQU5BR0VEEAZCCQoHX3NjaGVtYUIICgZfb2F1dGgiTAoLT0F1dGhDb25maWcSHAoUYXV0aG9yaXplX3N0YXJ0X3BhdGgYASABKAkSHwoXYXV0aG9yaXplX2NhbGxiYWNrX3BhdGgYAiABKAkiLAoHSW5ib3VuZBIhCgd3ZWJob29rGAEgASgLMhAuYXBwcy52MS5XZWJob29rIhcKB1dlYmhvb2sSDAoEcGF0aBgBIAEoCSKpAQoKU291cmNlVHlwZRINCgVsYWJlbBgBIAEoCRIvCgZmaWVsZHMYAiADKAsyHy5hcHBzLnYxLlNvdXJjZVR5cGUuRmllbGRzRW50cnkSEwoLbmF0dXJhbF9rZXkYAyABKAkaRgoLRmllbGRzRW50cnkSCwoDa2V5GAEgASgJEiYKBXZhbHVlGAIgASgLMhcuYXBwcy52MS5TdWdnZXN0ZWRGaWVsZDoCOAEiqAEKDFNpbmtDb250cmFjdBINCgVsYWJlbBgBIAEoCRIxCgZmaWVsZHMYAiADKAsyIS5hcHBzLnYxLlNpbmtDb250cmFjdC5GaWVsZHNFbnRyeRITCgtuYXR1cmFsX2tleRgDIAEoCRpBCgtGaWVsZHNFbnRyeRILCgNrZXkYASABKAkSIQoFdmFsdWUYAiABKAsyEi5hcHBzLnYxLlNpbmtGaWVsZDoCOAEimQEKDlN1Z2dlc3RlZEZpZWxkEgwKBHR5cGUYASABKAkSEgoFbGFiZWwYAiABKAlIAIgBARIVCghyZXF1aXJlZBgDIAEoCEgBiAEBEiwKBmNvbmZpZxgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAogBAUIICgZfbGFiZWxCCwoJX3JlcXVpcmVkQgkKB19jb25maWciWwoJU2lua0ZpZWxkEgwKBHR5cGUYASABKAkSEAoIc2VtYW50aWMYAiABKAkSEAoIcmVxdWlyZWQYAyABKAgSEgoFbGFiZWwYBCABKAlIAIgBAUIICgZfbGFiZWwi+AMKCU9wZXJhdGlvbhI6CgNrZXkYASABKAlCLbpIKnIoGEAyJF4oX18pP1thLXpdW2EtejAtOV9dKigtW2EtejAtOV9dKykqJBIMCgRuYW1lGAIgASgJEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQESHQoIZW5kcG9pbnQYBCABKAlCC7pICHIGMgReLy4qEhQKDGNhcGFiaWxpdGllcxgFIAMoCRIXCgp0aW1lb3V0X21zGAYgASgFSAGIAQESMgoMcmV0cnlfcG9saWN5GAcgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgCiAEBEjIKDGlucHV0X3NjaGVtYRgIIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIA4gBARIzCg1vdXRwdXRfc2NoZW1hGAkgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgEiAEBEhsKDnN1cHBvcnRzX2FzeW5jGAogASgISAWIAQESGQoRcnVuX2FmdGVyX2luc3RhbGwYCyABKAhCDgoMX2Rlc2NyaXB0aW9uQg0KC190aW1lb3V0X21zQg8KDV9yZXRyeV9wb2xpY3lCDwoNX2lucHV0X3NjaGVtYUIQCg5fb3V0cHV0X3NjaGVtYUIRCg9fc3VwcG9ydHNfYXN5bmMipgEKBEhvb2sSMwoDa2V5GAEgASgJQia6SCNyIRhAMh1eW2Etel1bYS16MC05XSooLVthLXowLTldKykqJBIMCgRuYW1lGAIgASgJEhYKBWV2ZW50GAMgASgJQge6SARyAhABEicKBmZpbHRlchgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSGgoJb3BlcmF0aW9uGAUgASgJQge6SARyAhABIjcKAlVJEjEKCnBsYWNlbWVudHMYASADKAsyHS5hcHBzLnYxLlBsYWNlbWVudERlY2xhcmF0aW9uIpQEChRQbGFjZW1lbnREZWNsYXJhdGlvbhIzCgNrZXkYASABKAlCJrpII3IhGEAyHV5bYS16XVthLXowLTldKigtW2EtejAtOV0rKSokEjQKBnRhcmdldBgCIAEoDjIkLmFwcHMudjEuUGxhY2VtZW50RGVjbGFyYXRpb24uVGFyZ2V0EhIKBW1vZGVsGAMgASgJSACIAQESEgoFZmllbGQYBCABKAlIAYgBARIhChlmaWVsZF9zZWxlY3RlZF9hdF9pbnN0YWxsGAUgASgIEhAKA3RhYhgGIAEoCUgCiAEBEhYKBXRpdGxlGAcgASgJQge6SARyAhABEh8KA3VybBgIIAEoCUISukgPcg0yC15odHRwczovLy4rEh0KEHJlcGxhY2VzX2RlZmF1bHQYCSABKAhIA4gBARIrCgVoaW50cxgKIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIBIgBASJ0CgZUYXJnZXQSFgoSVEFSR0VUX1VOU1BFQ0lGSUVEEAASFAoQVEFSR0VUX0ZVTExfUEFHRRABEhYKElRBUkdFVF9NQUlOX0VESVRPUhACEhIKDlRBUkdFVF9TSURFQkFSEAMSEAoMVEFSR0VUX0ZJRUxEEARCCAoGX21vZGVsQggKBl9maWVsZEIGCgRfdGFiQhMKEV9yZXBsYWNlc19kZWZhdWx0QggKBl9oaW50c0I1WjNnaXRodWIuY29tL2VpZGVzdHVkaW8vZm9pci9nZW4vcHJvdG8vYXBwcy92MTthcHBzdjFiBnByb3RvMw", [file_buf_validate_validate, file_google_protobuf_struct]);
14
14
 
15
15
  /**
16
16
  * Describes the message apps.v1.AppConfig.
@@ -88,6 +88,20 @@ export declare type App = Message<"apps.v1.App"> & {
88
88
  * @generated from field: google.protobuf.Timestamp updated_at = 13;
89
89
  */
90
90
  updatedAt?: Timestamp;
91
+
92
+ /**
93
+ * Last-pushed snapshot of `mappings` from `foir push`. Populated only by
94
+ * CLI writes; admin-UI mapping edits leave this alone. Enables three-way
95
+ * merge on subsequent pushes. See docs/platform/apps.md §SP-3.
96
+ *
97
+ * @generated from field: google.protobuf.Struct last_pushed_mappings = 14;
98
+ */
99
+ lastPushedMappings?: JsonObject;
100
+
101
+ /**
102
+ * @generated from field: optional google.protobuf.Timestamp last_pushed_at = 15;
103
+ */
104
+ lastPushedAt?: Timestamp;
91
105
  };
92
106
 
93
107
  /**
@@ -428,6 +442,14 @@ export declare type ConfirmInstallAppRequest = Message<"apps.v1.ConfirmInstallAp
428
442
  * @generated from field: map<string, apps.v1.PlacementFieldChoice> placement_field_choices = 5;
429
443
  */
430
444
  placementFieldChoices: { [key: string]: PlacementFieldChoice };
445
+
446
+ /**
447
+ * When true, server records the full mappings payload as
448
+ * last_pushed_mappings for three-way merge on subsequent pushes.
449
+ *
450
+ * @generated from field: bool update_push_snapshot = 6;
451
+ */
452
+ updatePushSnapshot: boolean;
431
453
  };
432
454
 
433
455
  /**
@@ -703,6 +725,23 @@ export declare type SetAppMappingRequest = Message<"apps.v1.SetAppMappingRequest
703
725
  * @generated from field: map<string, apps.v1.PlacementFieldChoice> placement_field_choices = 6;
704
726
  */
705
727
  placementFieldChoices: { [key: string]: PlacementFieldChoice };
728
+
729
+ /**
730
+ * When true, server records the mappings payload as last_pushed_mappings.
731
+ * See ConfirmInstallAppRequest.update_push_snapshot.
732
+ *
733
+ * @generated from field: bool update_push_snapshot = 7;
734
+ */
735
+ updatePushSnapshot: boolean;
736
+
737
+ /**
738
+ * When true, server treats the payload as the pulled state and writes it
739
+ * to last_pushed_mappings ONLY — live `mappings` column untouched. Used
740
+ * by `foir pull` so the next push is a no-op.
741
+ *
742
+ * @generated from field: bool snapshot_only = 8;
743
+ */
744
+ snapshotOnly: boolean;
706
745
  };
707
746
 
708
747
  /**
@@ -10,7 +10,7 @@ import { file_google_protobuf_struct, file_google_protobuf_timestamp } from "@bu
10
10
  * Describes the file apps/v1/apps_service.proto.
11
11
  */
12
12
  export const file_apps_v1_apps_service = /*@__PURE__*/
13
- fileDesc("ChphcHBzL3YxL2FwcHNfc2VydmljZS5wcm90bxIHYXBwcy52MSKOAwoDQXBwEgoKAmlkGAEgASgJEhEKCXRlbmFudF9pZBgCIAEoCRISCgpwcm9qZWN0X2lkGAMgASgJEgwKBG5hbWUYBCABKAkSFAoMbWFuaWZlc3RfdXJsGAUgASgJEhUKDW1hbmlmZXN0X2hhc2gYBiABKAkSJAoIbWFuaWZlc3QYByABKAsyEi5hcHBzLnYxLkFwcENvbmZpZxIpCghzZXR0aW5ncxgIIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSKQoIbWFwcGluZ3MYCSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Eg8KB2VuYWJsZWQYCiABKAgSMAoMaW5zdGFsbGVkX2F0GAsgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIZCgxpbnN0YWxsZWRfYnkYDCABKAlIAIgBARIuCgp1cGRhdGVkX2F0GA0gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIPCg1faW5zdGFsbGVkX2J5IpkBCg1Tb3VyY2VNYXBwaW5nEhAKCHRvX21vZGVsGAEgASgJEhMKC25hdHVyYWxfa2V5GAIgASgJEjIKBmZpZWxkcxgDIAMoCzIiLmFwcHMudjEuU291cmNlTWFwcGluZy5GaWVsZHNFbnRyeRotCgtGaWVsZHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIpUBCgtTaW5rTWFwcGluZxIQCgh0b19tb2RlbBgBIAEoCRITCgtuYXR1cmFsX2tleRgCIAEoCRIwCgZmaWVsZHMYAyADKAsyIC5hcHBzLnYxLlNpbmtNYXBwaW5nLkZpZWxkc0VudHJ5Gi0KC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiNAoUUGxhY2VtZW50RmllbGRDaG9pY2USDQoFbW9kZWwYASABKAkSDQoFZmllbGQYAiABKAki3QIKEUFwcEluc3RhbGxQcmV2aWV3EiQKCG1hbmlmZXN0GAEgASgLMhIuYXBwcy52MS5BcHBDb25maWcSFQoNbWFuaWZlc3RfaGFzaBgCIAEoCRIcChRvcGVyYXRpb25zX3RvX2NyZWF0ZRgDIAMoCRIXCg9ob29rc190b19jcmVhdGUYBCADKAkSHAoUcGxhY2VtZW50c190b19jcmVhdGUYBSADKAkSOgoTY3JlZGVudGlhbF9zdHJhdGVneRgGIAEoDjIdLmFwcHMudjEuQ3JlZGVudGlhbHMuU3RyYXRlZ3kSGwoTc291cmNlX3R5cGVzX3RvX21hcBgHIAMoCRIdChVzaW5rX2NvbnRyYWN0c190b19tYXAYCCADKAkSKQohcGxhY2VtZW50c19yZXF1aXJpbmdfZmllbGRfY2hvaWNlGAkgAygJEhMKC3dlYmhvb2tfdXJsGAogASgJIjgKD0xpc3RBcHBzUmVxdWVzdBIRCgl0ZW5hbnRfaWQYASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCSIuChBMaXN0QXBwc1Jlc3BvbnNlEhoKBGFwcHMYASADKAsyDC5hcHBzLnYxLkFwcCJECg1HZXRBcHBSZXF1ZXN0EhEKCXRlbmFudF9pZBgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEgwKBG5hbWUYAyABKAkiKwoOR2V0QXBwUmVzcG9uc2USGQoDYXBwGAEgASgLMgwuYXBwcy52MS5BcHAiUAoRSW5zdGFsbEFwcFJlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSFAoMbWFuaWZlc3RfdXJsGAMgASgJIokBChJJbnN0YWxsQXBwUmVzcG9uc2USFgoOaW5zdGFsbF90aWNrZXQYASABKAkSKwoHcHJldmlldxgCIAEoCzIaLmFwcHMudjEuQXBwSW5zdGFsbFByZXZpZXcSLgoKZXhwaXJlc19hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAi4QQKGENvbmZpcm1JbnN0YWxsQXBwUmVxdWVzdBIWCg5pbnN0YWxsX3RpY2tldBgBIAEoCRJOCg9zb3VyY2VfbWFwcGluZ3MYAiADKAsyNS5hcHBzLnYxLkNvbmZpcm1JbnN0YWxsQXBwUmVxdWVzdC5Tb3VyY2VNYXBwaW5nc0VudHJ5EkoKDXNpbmtfbWFwcGluZ3MYAyADKAsyMy5hcHBzLnYxLkNvbmZpcm1JbnN0YWxsQXBwUmVxdWVzdC5TaW5rTWFwcGluZ3NFbnRyeRIuCghzZXR0aW5ncxgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAIgBARJdChdwbGFjZW1lbnRfZmllbGRfY2hvaWNlcxgFIAMoCzI8LmFwcHMudjEuQ29uZmlybUluc3RhbGxBcHBSZXF1ZXN0LlBsYWNlbWVudEZpZWxkQ2hvaWNlc0VudHJ5Gk0KE1NvdXJjZU1hcHBpbmdzRW50cnkSCwoDa2V5GAEgASgJEiUKBXZhbHVlGAIgASgLMhYuYXBwcy52MS5Tb3VyY2VNYXBwaW5nOgI4ARpJChFTaW5rTWFwcGluZ3NFbnRyeRILCgNrZXkYASABKAkSIwoFdmFsdWUYAiABKAsyFC5hcHBzLnYxLlNpbmtNYXBwaW5nOgI4ARpbChpQbGFjZW1lbnRGaWVsZENob2ljZXNFbnRyeRILCgNrZXkYASABKAkSLAoFdmFsdWUYAiABKAsyHS5hcHBzLnYxLlBsYWNlbWVudEZpZWxkQ2hvaWNlOgI4AUILCglfc2V0dGluZ3MiNgoZQ29uZmlybUluc3RhbGxBcHBSZXNwb25zZRIZCgNhcHAYASABKAsyDC5hcHBzLnYxLkFwcCJHChBVcGRhdGVBcHBSZXF1ZXN0EhEKCXRlbmFudF9pZBgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEgwKBG5hbWUYAyABKAkilgEKEVVwZGF0ZUFwcFJlc3BvbnNlEhkKEW5ld19tYW5pZmVzdF9oYXNoGAEgASgJEigKDG5ld19tYW5pZmVzdBgCIAEoCzISLmFwcHMudjEuQXBwQ29uZmlnEigKB2NoYW5nZXMYAyADKAsyFy5hcHBzLnYxLk1hbmlmZXN0Q2hhbmdlEhIKCm5vX2NoYW5nZXMYBCABKAgiywEKDk1hbmlmZXN0Q2hhbmdlEiwKBWNsYXNzGAEgASgOMh0uYXBwcy52MS5NYW5pZmVzdENoYW5nZS5DbGFzcxIMCgRwYXRoGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJImgKBUNsYXNzEhUKEUNMQVNTX1VOU1BFQ0lGSUVEEAASEwoPQ0xBU1NfU0FGRV9BVVRPEAESHwobQ0xBU1NfUkVRVUlSRVNfQ09ORklSTUFUSU9OEAISEgoOQ0xBU1NfUkVKRUNURUQQAyJpChdDb25maXJtVXBkYXRlQXBwUmVxdWVzdBIRCgl0ZW5hbnRfaWQYASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCRIMCgRuYW1lGAMgASgJEhkKEW5ld19tYW5pZmVzdF9oYXNoGAQgASgJIjUKGENvbmZpcm1VcGRhdGVBcHBSZXNwb25zZRIZCgNhcHAYASABKAsyDC5hcHBzLnYxLkFwcCJZChNVbmluc3RhbGxBcHBSZXF1ZXN0EhEKCXRlbmFudF9pZBgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEgwKBG5hbWUYAyABKAkSDQoFZm9yY2UYBCABKAgiNwoUVW5pbnN0YWxsQXBwUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCBIOCgZmb3JjZWQYAiABKAgisQQKFFNldEFwcE1hcHBpbmdSZXF1ZXN0EhEKCXRlbmFudF9pZBgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEgwKBG5hbWUYAyABKAkSSgoPc291cmNlX21hcHBpbmdzGAQgAygLMjEuYXBwcy52MS5TZXRBcHBNYXBwaW5nUmVxdWVzdC5Tb3VyY2VNYXBwaW5nc0VudHJ5EkYKDXNpbmtfbWFwcGluZ3MYBSADKAsyLy5hcHBzLnYxLlNldEFwcE1hcHBpbmdSZXF1ZXN0LlNpbmtNYXBwaW5nc0VudHJ5ElkKF3BsYWNlbWVudF9maWVsZF9jaG9pY2VzGAYgAygLMjguYXBwcy52MS5TZXRBcHBNYXBwaW5nUmVxdWVzdC5QbGFjZW1lbnRGaWVsZENob2ljZXNFbnRyeRpNChNTb3VyY2VNYXBwaW5nc0VudHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmFwcHMudjEuU291cmNlTWFwcGluZzoCOAEaSQoRU2lua01hcHBpbmdzRW50cnkSCwoDa2V5GAEgASgJEiMKBXZhbHVlGAIgASgLMhQuYXBwcy52MS5TaW5rTWFwcGluZzoCOAEaWwoaUGxhY2VtZW50RmllbGRDaG9pY2VzRW50cnkSCwoDa2V5GAEgASgJEiwKBXZhbHVlGAIgASgLMh0uYXBwcy52MS5QbGFjZW1lbnRGaWVsZENob2ljZToCOAEiMgoVU2V0QXBwTWFwcGluZ1Jlc3BvbnNlEhkKA2FwcBgBIAEoCzIMLmFwcHMudjEuQXBwIlQKF1ZhbGlkYXRlTWFuaWZlc3RSZXF1ZXN0EhYKDG1hbmlmZXN0X3VybBgBIAEoCUgAEhcKDW1hbmlmZXN0X2pzb24YAiABKAlIAEIICgZzb3VyY2UitQEKD1ZhbGlkYXRpb25Jc3N1ZRIzCghzZXZlcml0eRgBIAEoDjIhLmFwcHMudjEuVmFsaWRhdGlvbklzc3VlLlNldmVyaXR5EgwKBHBhdGgYAiABKAkSDwoHbWVzc2FnZRgDIAEoCSJOCghTZXZlcml0eRIYChRTRVZFUklUWV9VTlNQRUNJRklFRBAAEhIKDlNFVkVSSVRZX0VSUk9SEAESFAoQU0VWRVJJVFlfV0FSTklORxACIlAKGFZhbGlkYXRlTWFuaWZlc3RSZXNwb25zZRIoCgZpc3N1ZXMYASADKAsyGC5hcHBzLnYxLlZhbGlkYXRpb25Jc3N1ZRIKCgJvaxgCIAEoCCKOAQoXVHJpZ2dlck9wZXJhdGlvblJlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSFQoNb3BlcmF0aW9uX2tleRgDIAEoCRIrCgVpbnB1dBgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAIgBAUIICgZfaW5wdXQiMAoYVHJpZ2dlck9wZXJhdGlvblJlc3BvbnNlEhQKDGV4ZWN1dGlvbl9pZBgBIAEoCSJ9ChlXcml0ZUFwcENyZWRlbnRpYWxSZXF1ZXN0EhEKCXRlbmFudF9pZBgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEhAKCGFwcF9uYW1lGAMgASgJEicKBnZhbHVlcxgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiLQoaV3JpdGVBcHBDcmVkZW50aWFsUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCJSChdHZXRBcHBDcmVkZW50aWFsUmVxdWVzdBIRCgl0ZW5hbnRfaWQYASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCRIQCghhcHBfbmFtZRgDIAEoCSKHAQoYR2V0QXBwQ3JlZGVudGlhbFJlc3BvbnNlEi8KCHN0cmF0ZWd5GAEgASgOMh0uYXBwcy52MS5DcmVkZW50aWFscy5TdHJhdGVneRInCgZ2YWx1ZXMYAiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhEKCXBvcHVsYXRlZBgDIAEoCCJVChpEZWxldGVBcHBDcmVkZW50aWFsUmVxdWVzdBIRCgl0ZW5hbnRfaWQYASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCRIQCghhcHBfbmFtZRgDIAEoCSIuChtEZWxldGVBcHBDcmVkZW50aWFsUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCJVChpJc3N1ZUV4Y2hhbmdlVGlja2V0UmVxdWVzdBIRCgl0ZW5hbnRfaWQYASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCRIQCghhcHBfbmFtZRgDIAEoCSJdChtJc3N1ZUV4Y2hhbmdlVGlja2V0UmVzcG9uc2USDgoGdGlja2V0GAEgASgJEi4KCmV4cGlyZXNfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIi0KG1JlZGVlbUV4Y2hhbmdlVGlja2V0UmVxdWVzdBIOCgZ0aWNrZXQYASABKAkiZAocUmVkZWVtRXhjaGFuZ2VUaWNrZXRSZXNwb25zZRIUCgxzY29wZWRfdG9rZW4YASABKAkSLgoKZXhwaXJlc19hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiMgoZUmVmcmVzaFNjb3BlZFRva2VuUmVxdWVzdBIVCg1jdXJyZW50X3Rva2VuGAEgASgJImIKGlJlZnJlc2hTY29wZWRUb2tlblJlc3BvbnNlEhQKDHNjb3BlZF90b2tlbhgBIAEoCRIuCgpleHBpcmVzX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCL7BAoJQXBwU3RhdHVzEhEKCXRlbmFudF9pZBgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEhAKCGFwcF9uYW1lGAMgASgJEjUKDGxhc3Rfc3luY19hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBARIiChVsYXN0X3N5bmNfZHVyYXRpb25fbXMYBSABKANIAYgBARIjChZsYXN0X3N5bmNfcmVjb3JkX2NvdW50GAYgASgDSAKIAQESFwoKbGFzdF9lcnJvchgHIAEoCUgDiAEBEjYKDWxhc3RfZXJyb3JfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSASIAQESGwoTc3Vic2NyaXB0aW9uX2hlYWx0aBgJIAEoCRITCgthdXRoX3N0YXR1cxgKIAEoCRIeChFkZWxldGlvbl9zdHJhdGVneRgLIAEoCUgFiAEBEisKBWV4dHJhGAwgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgGiAEBEi4KCnVwZGF0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhsKDnVwZGF0ZWRfYnlfanRpGA4gASgJSAeIAQFCDwoNX2xhc3Rfc3luY19hdEIYChZfbGFzdF9zeW5jX2R1cmF0aW9uX21zQhkKF19sYXN0X3N5bmNfcmVjb3JkX2NvdW50Qg0KC19sYXN0X2Vycm9yQhAKDl9sYXN0X2Vycm9yX2F0QhQKEl9kZWxldGlvbl9zdHJhdGVneUIICgZfZXh0cmFCEQoPX3VwZGF0ZWRfYnlfanRpIk4KE0dldEFwcFN0YXR1c1JlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSEAoIYXBwX25hbWUYAyABKAkiOgoUR2V0QXBwU3RhdHVzUmVzcG9uc2USIgoGc3RhdHVzGAEgASgLMhIuYXBwcy52MS5BcHBTdGF0dXMiPAoWVXBzZXJ0QXBwU3RhdHVzUmVxdWVzdBIiCgZzdGF0dXMYASABKAsyEi5hcHBzLnYxLkFwcFN0YXR1cyIqChdVcHNlcnRBcHBTdGF0dXNSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIuYBCghBcHBFdmVudBIKCgJpZBgBIAEoCRIRCgl0ZW5hbnRfaWQYAiABKAkSEgoKcHJvamVjdF9pZBgDIAEoCRIQCghhcHBfbmFtZRgEIAEoCRINCgVldmVudBgFIAEoCRISCgVhY3RvchgGIAEoCUgAiAEBEiwKBmRldGFpbBgHIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAYgBARIvCgtvY2N1cnJlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCCAoGX2FjdG9yQgkKB19kZXRhaWwiXgoUTGlzdEFwcEV2ZW50c1JlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSEAoIYXBwX25hbWUYAyABKAkSDQoFbGltaXQYBCABKAUiOgoVTGlzdEFwcEV2ZW50c1Jlc3BvbnNlEiEKBmV2ZW50cxgBIAMoCzIRLmFwcHMudjEuQXBwRXZlbnQymAYKC0FwcHNTZXJ2aWNlEj8KCExpc3RBcHBzEhguYXBwcy52MS5MaXN0QXBwc1JlcXVlc3QaGS5hcHBzLnYxLkxpc3RBcHBzUmVzcG9uc2USOQoGR2V0QXBwEhYuYXBwcy52MS5HZXRBcHBSZXF1ZXN0GhcuYXBwcy52MS5HZXRBcHBSZXNwb25zZRJFCgpJbnN0YWxsQXBwEhouYXBwcy52MS5JbnN0YWxsQXBwUmVxdWVzdBobLmFwcHMudjEuSW5zdGFsbEFwcFJlc3BvbnNlEloKEUNvbmZpcm1JbnN0YWxsQXBwEiEuYXBwcy52MS5Db25maXJtSW5zdGFsbEFwcFJlcXVlc3QaIi5hcHBzLnYxLkNvbmZpcm1JbnN0YWxsQXBwUmVzcG9uc2USQgoJVXBkYXRlQXBwEhkuYXBwcy52MS5VcGRhdGVBcHBSZXF1ZXN0GhouYXBwcy52MS5VcGRhdGVBcHBSZXNwb25zZRJXChBDb25maXJtVXBkYXRlQXBwEiAuYXBwcy52MS5Db25maXJtVXBkYXRlQXBwUmVxdWVzdBohLmFwcHMudjEuQ29uZmlybVVwZGF0ZUFwcFJlc3BvbnNlEksKDFVuaW5zdGFsbEFwcBIcLmFwcHMudjEuVW5pbnN0YWxsQXBwUmVxdWVzdBodLmFwcHMudjEuVW5pbnN0YWxsQXBwUmVzcG9uc2USTgoNU2V0QXBwTWFwcGluZxIdLmFwcHMudjEuU2V0QXBwTWFwcGluZ1JlcXVlc3QaHi5hcHBzLnYxLlNldEFwcE1hcHBpbmdSZXNwb25zZRJXChBWYWxpZGF0ZU1hbmlmZXN0EiAuYXBwcy52MS5WYWxpZGF0ZU1hbmlmZXN0UmVxdWVzdBohLmFwcHMudjEuVmFsaWRhdGVNYW5pZmVzdFJlc3BvbnNlElcKEFRyaWdnZXJPcGVyYXRpb24SIC5hcHBzLnYxLlRyaWdnZXJPcGVyYXRpb25SZXF1ZXN0GiEuYXBwcy52MS5UcmlnZ2VyT3BlcmF0aW9uUmVzcG9uc2UysQIKFUFwcENyZWRlbnRpYWxzU2VydmljZRJdChJXcml0ZUFwcENyZWRlbnRpYWwSIi5hcHBzLnYxLldyaXRlQXBwQ3JlZGVudGlhbFJlcXVlc3QaIy5hcHBzLnYxLldyaXRlQXBwQ3JlZGVudGlhbFJlc3BvbnNlElcKEEdldEFwcENyZWRlbnRpYWwSIC5hcHBzLnYxLkdldEFwcENyZWRlbnRpYWxSZXF1ZXN0GiEuYXBwcy52MS5HZXRBcHBDcmVkZW50aWFsUmVzcG9uc2USYAoTRGVsZXRlQXBwQ3JlZGVudGlhbBIjLmFwcHMudjEuRGVsZXRlQXBwQ3JlZGVudGlhbFJlcXVlc3QaJC5hcHBzLnYxLkRlbGV0ZUFwcENyZWRlbnRpYWxSZXNwb25zZTK2AgoOQXBwQXV0aFNlcnZpY2USYAoTSXNzdWVFeGNoYW5nZVRpY2tldBIjLmFwcHMudjEuSXNzdWVFeGNoYW5nZVRpY2tldFJlcXVlc3QaJC5hcHBzLnYxLklzc3VlRXhjaGFuZ2VUaWNrZXRSZXNwb25zZRJjChRSZWRlZW1FeGNoYW5nZVRpY2tldBIkLmFwcHMudjEuUmVkZWVtRXhjaGFuZ2VUaWNrZXRSZXF1ZXN0GiUuYXBwcy52MS5SZWRlZW1FeGNoYW5nZVRpY2tldFJlc3BvbnNlEl0KElJlZnJlc2hTY29wZWRUb2tlbhIiLmFwcHMudjEuUmVmcmVzaFNjb3BlZFRva2VuUmVxdWVzdBojLmFwcHMudjEuUmVmcmVzaFNjb3BlZFRva2VuUmVzcG9uc2UyhQIKEEFwcFN0YXR1c1NlcnZpY2USSwoMR2V0QXBwU3RhdHVzEhwuYXBwcy52MS5HZXRBcHBTdGF0dXNSZXF1ZXN0Gh0uYXBwcy52MS5HZXRBcHBTdGF0dXNSZXNwb25zZRJUCg9VcHNlcnRBcHBTdGF0dXMSHy5hcHBzLnYxLlVwc2VydEFwcFN0YXR1c1JlcXVlc3QaIC5hcHBzLnYxLlVwc2VydEFwcFN0YXR1c1Jlc3BvbnNlEk4KDUxpc3RBcHBFdmVudHMSHS5hcHBzLnYxLkxpc3RBcHBFdmVudHNSZXF1ZXN0Gh4uYXBwcy52MS5MaXN0QXBwRXZlbnRzUmVzcG9uc2VCNVozZ2l0aHViLmNvbS9laWRlc3R1ZGlvL2ZvaXIvZ2VuL3Byb3RvL2FwcHMvdjE7YXBwc3YxYgZwcm90bzM", [file_apps_v1_apps, file_google_protobuf_struct, file_google_protobuf_timestamp]);
13
+ fileDesc("ChphcHBzL3YxL2FwcHNfc2VydmljZS5wcm90bxIHYXBwcy52MSKRBAoDQXBwEgoKAmlkGAEgASgJEhEKCXRlbmFudF9pZBgCIAEoCRISCgpwcm9qZWN0X2lkGAMgASgJEgwKBG5hbWUYBCABKAkSFAoMbWFuaWZlc3RfdXJsGAUgASgJEhUKDW1hbmlmZXN0X2hhc2gYBiABKAkSJAoIbWFuaWZlc3QYByABKAsyEi5hcHBzLnYxLkFwcENvbmZpZxIpCghzZXR0aW5ncxgIIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSKQoIbWFwcGluZ3MYCSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Eg8KB2VuYWJsZWQYCiABKAgSMAoMaW5zdGFsbGVkX2F0GAsgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIZCgxpbnN0YWxsZWRfYnkYDCABKAlIAIgBARIuCgp1cGRhdGVkX2F0GA0gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI1ChRsYXN0X3B1c2hlZF9tYXBwaW5ncxgOIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSNwoObGFzdF9wdXNoZWRfYXQYDyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQFCDwoNX2luc3RhbGxlZF9ieUIRCg9fbGFzdF9wdXNoZWRfYXQimQEKDVNvdXJjZU1hcHBpbmcSEAoIdG9fbW9kZWwYASABKAkSEwoLbmF0dXJhbF9rZXkYAiABKAkSMgoGZmllbGRzGAMgAygLMiIuYXBwcy52MS5Tb3VyY2VNYXBwaW5nLkZpZWxkc0VudHJ5Gi0KC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEilQEKC1NpbmtNYXBwaW5nEhAKCHRvX21vZGVsGAEgASgJEhMKC25hdHVyYWxfa2V5GAIgASgJEjAKBmZpZWxkcxgDIAMoCzIgLmFwcHMudjEuU2lua01hcHBpbmcuRmllbGRzRW50cnkaLQoLRmllbGRzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASI0ChRQbGFjZW1lbnRGaWVsZENob2ljZRINCgVtb2RlbBgBIAEoCRINCgVmaWVsZBgCIAEoCSLdAgoRQXBwSW5zdGFsbFByZXZpZXcSJAoIbWFuaWZlc3QYASABKAsyEi5hcHBzLnYxLkFwcENvbmZpZxIVCg1tYW5pZmVzdF9oYXNoGAIgASgJEhwKFG9wZXJhdGlvbnNfdG9fY3JlYXRlGAMgAygJEhcKD2hvb2tzX3RvX2NyZWF0ZRgEIAMoCRIcChRwbGFjZW1lbnRzX3RvX2NyZWF0ZRgFIAMoCRI6ChNjcmVkZW50aWFsX3N0cmF0ZWd5GAYgASgOMh0uYXBwcy52MS5DcmVkZW50aWFscy5TdHJhdGVneRIbChNzb3VyY2VfdHlwZXNfdG9fbWFwGAcgAygJEh0KFXNpbmtfY29udHJhY3RzX3RvX21hcBgIIAMoCRIpCiFwbGFjZW1lbnRzX3JlcXVpcmluZ19maWVsZF9jaG9pY2UYCSADKAkSEwoLd2ViaG9va191cmwYCiABKAkiOAoPTGlzdEFwcHNSZXF1ZXN0EhEKCXRlbmFudF9pZBgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJIi4KEExpc3RBcHBzUmVzcG9uc2USGgoEYXBwcxgBIAMoCzIMLmFwcHMudjEuQXBwIkQKDUdldEFwcFJlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSDAoEbmFtZRgDIAEoCSIrCg5HZXRBcHBSZXNwb25zZRIZCgNhcHAYASABKAsyDC5hcHBzLnYxLkFwcCJQChFJbnN0YWxsQXBwUmVxdWVzdBIRCgl0ZW5hbnRfaWQYASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCRIUCgxtYW5pZmVzdF91cmwYAyABKAkiiQEKEkluc3RhbGxBcHBSZXNwb25zZRIWCg5pbnN0YWxsX3RpY2tldBgBIAEoCRIrCgdwcmV2aWV3GAIgASgLMhouYXBwcy52MS5BcHBJbnN0YWxsUHJldmlldxIuCgpleHBpcmVzX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCL/BAoYQ29uZmlybUluc3RhbGxBcHBSZXF1ZXN0EhYKDmluc3RhbGxfdGlja2V0GAEgASgJEk4KD3NvdXJjZV9tYXBwaW5ncxgCIAMoCzI1LmFwcHMudjEuQ29uZmlybUluc3RhbGxBcHBSZXF1ZXN0LlNvdXJjZU1hcHBpbmdzRW50cnkSSgoNc2lua19tYXBwaW5ncxgDIAMoCzIzLmFwcHMudjEuQ29uZmlybUluc3RhbGxBcHBSZXF1ZXN0LlNpbmtNYXBwaW5nc0VudHJ5Ei4KCHNldHRpbmdzGAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgAiAEBEl0KF3BsYWNlbWVudF9maWVsZF9jaG9pY2VzGAUgAygLMjwuYXBwcy52MS5Db25maXJtSW5zdGFsbEFwcFJlcXVlc3QuUGxhY2VtZW50RmllbGRDaG9pY2VzRW50cnkSHAoUdXBkYXRlX3B1c2hfc25hcHNob3QYBiABKAgaTQoTU291cmNlTWFwcGluZ3NFbnRyeRILCgNrZXkYASABKAkSJQoFdmFsdWUYAiABKAsyFi5hcHBzLnYxLlNvdXJjZU1hcHBpbmc6AjgBGkkKEVNpbmtNYXBwaW5nc0VudHJ5EgsKA2tleRgBIAEoCRIjCgV2YWx1ZRgCIAEoCzIULmFwcHMudjEuU2lua01hcHBpbmc6AjgBGlsKGlBsYWNlbWVudEZpZWxkQ2hvaWNlc0VudHJ5EgsKA2tleRgBIAEoCRIsCgV2YWx1ZRgCIAEoCzIdLmFwcHMudjEuUGxhY2VtZW50RmllbGRDaG9pY2U6AjgBQgsKCV9zZXR0aW5ncyI2ChlDb25maXJtSW5zdGFsbEFwcFJlc3BvbnNlEhkKA2FwcBgBIAEoCzIMLmFwcHMudjEuQXBwIkcKEFVwZGF0ZUFwcFJlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSDAoEbmFtZRgDIAEoCSKWAQoRVXBkYXRlQXBwUmVzcG9uc2USGQoRbmV3X21hbmlmZXN0X2hhc2gYASABKAkSKAoMbmV3X21hbmlmZXN0GAIgASgLMhIuYXBwcy52MS5BcHBDb25maWcSKAoHY2hhbmdlcxgDIAMoCzIXLmFwcHMudjEuTWFuaWZlc3RDaGFuZ2USEgoKbm9fY2hhbmdlcxgEIAEoCCLLAQoOTWFuaWZlc3RDaGFuZ2USLAoFY2xhc3MYASABKA4yHS5hcHBzLnYxLk1hbmlmZXN0Q2hhbmdlLkNsYXNzEgwKBHBhdGgYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkiaAoFQ2xhc3MSFQoRQ0xBU1NfVU5TUEVDSUZJRUQQABITCg9DTEFTU19TQUZFX0FVVE8QARIfChtDTEFTU19SRVFVSVJFU19DT05GSVJNQVRJT04QAhISCg5DTEFTU19SRUpFQ1RFRBADImkKF0NvbmZpcm1VcGRhdGVBcHBSZXF1ZXN0EhEKCXRlbmFudF9pZBgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEgwKBG5hbWUYAyABKAkSGQoRbmV3X21hbmlmZXN0X2hhc2gYBCABKAkiNQoYQ29uZmlybVVwZGF0ZUFwcFJlc3BvbnNlEhkKA2FwcBgBIAEoCzIMLmFwcHMudjEuQXBwIlkKE1VuaW5zdGFsbEFwcFJlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSDAoEbmFtZRgDIAEoCRINCgVmb3JjZRgEIAEoCCI3ChRVbmluc3RhbGxBcHBSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIEg4KBmZvcmNlZBgCIAEoCCLmBAoUU2V0QXBwTWFwcGluZ1JlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSDAoEbmFtZRgDIAEoCRJKCg9zb3VyY2VfbWFwcGluZ3MYBCADKAsyMS5hcHBzLnYxLlNldEFwcE1hcHBpbmdSZXF1ZXN0LlNvdXJjZU1hcHBpbmdzRW50cnkSRgoNc2lua19tYXBwaW5ncxgFIAMoCzIvLmFwcHMudjEuU2V0QXBwTWFwcGluZ1JlcXVlc3QuU2lua01hcHBpbmdzRW50cnkSWQoXcGxhY2VtZW50X2ZpZWxkX2Nob2ljZXMYBiADKAsyOC5hcHBzLnYxLlNldEFwcE1hcHBpbmdSZXF1ZXN0LlBsYWNlbWVudEZpZWxkQ2hvaWNlc0VudHJ5EhwKFHVwZGF0ZV9wdXNoX3NuYXBzaG90GAcgASgIEhUKDXNuYXBzaG90X29ubHkYCCABKAgaTQoTU291cmNlTWFwcGluZ3NFbnRyeRILCgNrZXkYASABKAkSJQoFdmFsdWUYAiABKAsyFi5hcHBzLnYxLlNvdXJjZU1hcHBpbmc6AjgBGkkKEVNpbmtNYXBwaW5nc0VudHJ5EgsKA2tleRgBIAEoCRIjCgV2YWx1ZRgCIAEoCzIULmFwcHMudjEuU2lua01hcHBpbmc6AjgBGlsKGlBsYWNlbWVudEZpZWxkQ2hvaWNlc0VudHJ5EgsKA2tleRgBIAEoCRIsCgV2YWx1ZRgCIAEoCzIdLmFwcHMudjEuUGxhY2VtZW50RmllbGRDaG9pY2U6AjgBIjIKFVNldEFwcE1hcHBpbmdSZXNwb25zZRIZCgNhcHAYASABKAsyDC5hcHBzLnYxLkFwcCJUChdWYWxpZGF0ZU1hbmlmZXN0UmVxdWVzdBIWCgxtYW5pZmVzdF91cmwYASABKAlIABIXCg1tYW5pZmVzdF9qc29uGAIgASgJSABCCAoGc291cmNlIrUBCg9WYWxpZGF0aW9uSXNzdWUSMwoIc2V2ZXJpdHkYASABKA4yIS5hcHBzLnYxLlZhbGlkYXRpb25Jc3N1ZS5TZXZlcml0eRIMCgRwYXRoGAIgASgJEg8KB21lc3NhZ2UYAyABKAkiTgoIU2V2ZXJpdHkSGAoUU0VWRVJJVFlfVU5TUEVDSUZJRUQQABISCg5TRVZFUklUWV9FUlJPUhABEhQKEFNFVkVSSVRZX1dBUk5JTkcQAiJQChhWYWxpZGF0ZU1hbmlmZXN0UmVzcG9uc2USKAoGaXNzdWVzGAEgAygLMhguYXBwcy52MS5WYWxpZGF0aW9uSXNzdWUSCgoCb2sYAiABKAgijgEKF1RyaWdnZXJPcGVyYXRpb25SZXF1ZXN0EhEKCXRlbmFudF9pZBgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEhUKDW9wZXJhdGlvbl9rZXkYAyABKAkSKwoFaW5wdXQYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SACIAQFCCAoGX2lucHV0IjAKGFRyaWdnZXJPcGVyYXRpb25SZXNwb25zZRIUCgxleGVjdXRpb25faWQYASABKAkifQoZV3JpdGVBcHBDcmVkZW50aWFsUmVxdWVzdBIRCgl0ZW5hbnRfaWQYASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCRIQCghhcHBfbmFtZRgDIAEoCRInCgZ2YWx1ZXMYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ii0KGldyaXRlQXBwQ3JlZGVudGlhbFJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgiUgoXR2V0QXBwQ3JlZGVudGlhbFJlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSEAoIYXBwX25hbWUYAyABKAkihwEKGEdldEFwcENyZWRlbnRpYWxSZXNwb25zZRIvCghzdHJhdGVneRgBIAEoDjIdLmFwcHMudjEuQ3JlZGVudGlhbHMuU3RyYXRlZ3kSJwoGdmFsdWVzGAIgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIRCglwb3B1bGF0ZWQYAyABKAgiVQoaRGVsZXRlQXBwQ3JlZGVudGlhbFJlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSEAoIYXBwX25hbWUYAyABKAkiLgobRGVsZXRlQXBwQ3JlZGVudGlhbFJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgiVQoaSXNzdWVFeGNoYW5nZVRpY2tldFJlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSEAoIYXBwX25hbWUYAyABKAkiXQobSXNzdWVFeGNoYW5nZVRpY2tldFJlc3BvbnNlEg4KBnRpY2tldBgBIAEoCRIuCgpleHBpcmVzX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCItChtSZWRlZW1FeGNoYW5nZVRpY2tldFJlcXVlc3QSDgoGdGlja2V0GAEgASgJImQKHFJlZGVlbUV4Y2hhbmdlVGlja2V0UmVzcG9uc2USFAoMc2NvcGVkX3Rva2VuGAEgASgJEi4KCmV4cGlyZXNfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIjIKGVJlZnJlc2hTY29wZWRUb2tlblJlcXVlc3QSFQoNY3VycmVudF90b2tlbhgBIAEoCSJiChpSZWZyZXNoU2NvcGVkVG9rZW5SZXNwb25zZRIUCgxzY29wZWRfdG9rZW4YASABKAkSLgoKZXhwaXJlc19hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAi+wQKCUFwcFN0YXR1cxIRCgl0ZW5hbnRfaWQYASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCRIQCghhcHBfbmFtZRgDIAEoCRI1CgxsYXN0X3N5bmNfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSACIAQESIgoVbGFzdF9zeW5jX2R1cmF0aW9uX21zGAUgASgDSAGIAQESIwoWbGFzdF9zeW5jX3JlY29yZF9jb3VudBgGIAEoA0gCiAEBEhcKCmxhc3RfZXJyb3IYByABKAlIA4gBARI2Cg1sYXN0X2Vycm9yX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgEiAEBEhsKE3N1YnNjcmlwdGlvbl9oZWFsdGgYCSABKAkSEwoLYXV0aF9zdGF0dXMYCiABKAkSHgoRZGVsZXRpb25fc3RyYXRlZ3kYCyABKAlIBYgBARIrCgVleHRyYRgMIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIBogBARIuCgp1cGRhdGVkX2F0GA0gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIbCg51cGRhdGVkX2J5X2p0aRgOIAEoCUgHiAEBQg8KDV9sYXN0X3N5bmNfYXRCGAoWX2xhc3Rfc3luY19kdXJhdGlvbl9tc0IZChdfbGFzdF9zeW5jX3JlY29yZF9jb3VudEINCgtfbGFzdF9lcnJvckIQCg5fbGFzdF9lcnJvcl9hdEIUChJfZGVsZXRpb25fc3RyYXRlZ3lCCAoGX2V4dHJhQhEKD191cGRhdGVkX2J5X2p0aSJOChNHZXRBcHBTdGF0dXNSZXF1ZXN0EhEKCXRlbmFudF9pZBgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEhAKCGFwcF9uYW1lGAMgASgJIjoKFEdldEFwcFN0YXR1c1Jlc3BvbnNlEiIKBnN0YXR1cxgBIAEoCzISLmFwcHMudjEuQXBwU3RhdHVzIjwKFlVwc2VydEFwcFN0YXR1c1JlcXVlc3QSIgoGc3RhdHVzGAEgASgLMhIuYXBwcy52MS5BcHBTdGF0dXMiKgoXVXBzZXJ0QXBwU3RhdHVzUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCLmAQoIQXBwRXZlbnQSCgoCaWQYASABKAkSEQoJdGVuYW50X2lkGAIgASgJEhIKCnByb2plY3RfaWQYAyABKAkSEAoIYXBwX25hbWUYBCABKAkSDQoFZXZlbnQYBSABKAkSEgoFYWN0b3IYBiABKAlIAIgBARIsCgZkZXRhaWwYByABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SAGIAQESLwoLb2NjdXJyZWRfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQggKBl9hY3RvckIJCgdfZGV0YWlsIl4KFExpc3RBcHBFdmVudHNSZXF1ZXN0EhEKCXRlbmFudF9pZBgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEhAKCGFwcF9uYW1lGAMgASgJEg0KBWxpbWl0GAQgASgFIjoKFUxpc3RBcHBFdmVudHNSZXNwb25zZRIhCgZldmVudHMYASADKAsyES5hcHBzLnYxLkFwcEV2ZW50MpgGCgtBcHBzU2VydmljZRI/CghMaXN0QXBwcxIYLmFwcHMudjEuTGlzdEFwcHNSZXF1ZXN0GhkuYXBwcy52MS5MaXN0QXBwc1Jlc3BvbnNlEjkKBkdldEFwcBIWLmFwcHMudjEuR2V0QXBwUmVxdWVzdBoXLmFwcHMudjEuR2V0QXBwUmVzcG9uc2USRQoKSW5zdGFsbEFwcBIaLmFwcHMudjEuSW5zdGFsbEFwcFJlcXVlc3QaGy5hcHBzLnYxLkluc3RhbGxBcHBSZXNwb25zZRJaChFDb25maXJtSW5zdGFsbEFwcBIhLmFwcHMudjEuQ29uZmlybUluc3RhbGxBcHBSZXF1ZXN0GiIuYXBwcy52MS5Db25maXJtSW5zdGFsbEFwcFJlc3BvbnNlEkIKCVVwZGF0ZUFwcBIZLmFwcHMudjEuVXBkYXRlQXBwUmVxdWVzdBoaLmFwcHMudjEuVXBkYXRlQXBwUmVzcG9uc2USVwoQQ29uZmlybVVwZGF0ZUFwcBIgLmFwcHMudjEuQ29uZmlybVVwZGF0ZUFwcFJlcXVlc3QaIS5hcHBzLnYxLkNvbmZpcm1VcGRhdGVBcHBSZXNwb25zZRJLCgxVbmluc3RhbGxBcHASHC5hcHBzLnYxLlVuaW5zdGFsbEFwcFJlcXVlc3QaHS5hcHBzLnYxLlVuaW5zdGFsbEFwcFJlc3BvbnNlEk4KDVNldEFwcE1hcHBpbmcSHS5hcHBzLnYxLlNldEFwcE1hcHBpbmdSZXF1ZXN0Gh4uYXBwcy52MS5TZXRBcHBNYXBwaW5nUmVzcG9uc2USVwoQVmFsaWRhdGVNYW5pZmVzdBIgLmFwcHMudjEuVmFsaWRhdGVNYW5pZmVzdFJlcXVlc3QaIS5hcHBzLnYxLlZhbGlkYXRlTWFuaWZlc3RSZXNwb25zZRJXChBUcmlnZ2VyT3BlcmF0aW9uEiAuYXBwcy52MS5UcmlnZ2VyT3BlcmF0aW9uUmVxdWVzdBohLmFwcHMudjEuVHJpZ2dlck9wZXJhdGlvblJlc3BvbnNlMrECChVBcHBDcmVkZW50aWFsc1NlcnZpY2USXQoSV3JpdGVBcHBDcmVkZW50aWFsEiIuYXBwcy52MS5Xcml0ZUFwcENyZWRlbnRpYWxSZXF1ZXN0GiMuYXBwcy52MS5Xcml0ZUFwcENyZWRlbnRpYWxSZXNwb25zZRJXChBHZXRBcHBDcmVkZW50aWFsEiAuYXBwcy52MS5HZXRBcHBDcmVkZW50aWFsUmVxdWVzdBohLmFwcHMudjEuR2V0QXBwQ3JlZGVudGlhbFJlc3BvbnNlEmAKE0RlbGV0ZUFwcENyZWRlbnRpYWwSIy5hcHBzLnYxLkRlbGV0ZUFwcENyZWRlbnRpYWxSZXF1ZXN0GiQuYXBwcy52MS5EZWxldGVBcHBDcmVkZW50aWFsUmVzcG9uc2UytgIKDkFwcEF1dGhTZXJ2aWNlEmAKE0lzc3VlRXhjaGFuZ2VUaWNrZXQSIy5hcHBzLnYxLklzc3VlRXhjaGFuZ2VUaWNrZXRSZXF1ZXN0GiQuYXBwcy52MS5Jc3N1ZUV4Y2hhbmdlVGlja2V0UmVzcG9uc2USYwoUUmVkZWVtRXhjaGFuZ2VUaWNrZXQSJC5hcHBzLnYxLlJlZGVlbUV4Y2hhbmdlVGlja2V0UmVxdWVzdBolLmFwcHMudjEuUmVkZWVtRXhjaGFuZ2VUaWNrZXRSZXNwb25zZRJdChJSZWZyZXNoU2NvcGVkVG9rZW4SIi5hcHBzLnYxLlJlZnJlc2hTY29wZWRUb2tlblJlcXVlc3QaIy5hcHBzLnYxLlJlZnJlc2hTY29wZWRUb2tlblJlc3BvbnNlMoUCChBBcHBTdGF0dXNTZXJ2aWNlEksKDEdldEFwcFN0YXR1cxIcLmFwcHMudjEuR2V0QXBwU3RhdHVzUmVxdWVzdBodLmFwcHMudjEuR2V0QXBwU3RhdHVzUmVzcG9uc2USVAoPVXBzZXJ0QXBwU3RhdHVzEh8uYXBwcy52MS5VcHNlcnRBcHBTdGF0dXNSZXF1ZXN0GiAuYXBwcy52MS5VcHNlcnRBcHBTdGF0dXNSZXNwb25zZRJOCg1MaXN0QXBwRXZlbnRzEh0uYXBwcy52MS5MaXN0QXBwRXZlbnRzUmVxdWVzdBoeLmFwcHMudjEuTGlzdEFwcEV2ZW50c1Jlc3BvbnNlQjVaM2dpdGh1Yi5jb20vZWlkZXN0dWRpby9mb2lyL2dlbi9wcm90by9hcHBzL3YxO2FwcHN2MWIGcHJvdG8z", [file_apps_v1_apps, file_google_protobuf_struct, file_google_protobuf_timestamp]);
14
14
 
15
15
  /**
16
16
  * Describes the message apps.v1.App.
@@ -379,6 +379,20 @@ export declare type Model = Message<"models.v1.Model"> & {
379
379
  * @generated from field: google.protobuf.Timestamp updated_at = 31;
380
380
  */
381
381
  updatedAt?: Timestamp;
382
+
383
+ /**
384
+ * Last-pushed snapshot from `foir push`. Populated only when the CLI
385
+ * writes through with update_push_snapshot=true; admin-UI edits do not
386
+ * touch these columns. See docs/platform/apps.md §SP-3.
387
+ *
388
+ * @generated from field: repeated models.v1.Field last_pushed_fields = 40;
389
+ */
390
+ lastPushedFields: Field[];
391
+
392
+ /**
393
+ * @generated from field: optional google.protobuf.Timestamp last_pushed_at = 41;
394
+ */
395
+ lastPushedAt?: Timestamp;
382
396
  };
383
397
 
384
398
  /**
@@ -471,6 +485,15 @@ export declare type CreateModelRequest = Message<"models.v1.CreateModelRequest">
471
485
  * @generated from field: optional string config_id = 5;
472
486
  */
473
487
  configId?: string;
488
+
489
+ /**
490
+ * When true, server stores `fields` as last_pushed_fields and sets
491
+ * last_pushed_at=now() in the same write. CLI sets this on `foir push`
492
+ * so a three-way merge has a common ancestor on the next push.
493
+ *
494
+ * @generated from field: bool update_push_snapshot = 6;
495
+ */
496
+ updatePushSnapshot: boolean;
474
497
  };
475
498
 
476
499
  /**
@@ -652,6 +675,23 @@ export declare type UpdateModelRequest = Message<"models.v1.UpdateModelRequest">
652
675
  * @generated from field: bool update_fields = 6;
653
676
  */
654
677
  updateFields: boolean;
678
+
679
+ /**
680
+ * When true, server stores `fields` as last_pushed_fields and sets
681
+ * last_pushed_at=now(). See CreateModelRequest.update_push_snapshot.
682
+ *
683
+ * @generated from field: bool update_push_snapshot = 7;
684
+ */
685
+ updatePushSnapshot: boolean;
686
+
687
+ /**
688
+ * When true, server treats `fields` as the pulled state and writes it to
689
+ * last_pushed_fields ONLY — does not touch the live `fields` column.
690
+ * Used by `foir pull` so an immediate subsequent push is a no-op.
691
+ *
692
+ * @generated from field: bool snapshot_only = 8;
693
+ */
694
+ snapshotOnly: boolean;
655
695
  };
656
696
 
657
697
  /**
@@ -9,7 +9,7 @@ import { file_google_protobuf_struct, file_google_protobuf_timestamp } from "@bu
9
9
  * Describes the file models/v1/models.proto.
10
10
  */
11
11
  export const file_models_v1_models = /*@__PURE__*/
12
- fileDesc("ChZtb2RlbHMvdjEvbW9kZWxzLnByb3RvEgltb2RlbHMudjEiuQQKBUZpZWxkEgoKAmlkGAEgASgJEgsKA2tleRgCIAEoCRINCgVsYWJlbBgDIAEoCRIMCgR0eXBlGAQgASgJEhAKCHJlcXVpcmVkGAUgASgIEhYKCWhlbHBfdGV4dBgGIAEoCUgAiAEBEhgKC3BsYWNlaG9sZGVyGAcgASgJSAGIAQESMgoNZGVmYXVsdF92YWx1ZRgIIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZUgCiAEBEicKBmNvbmZpZxgJIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFgoJaXRlbV90eXBlGAogASgJSAOIAQESFAoHc3RvcmFnZRgLIAEoCUgEiAEBEhoKDXRlbXBsYXRlX3pvbmUYDCABKAlIBYgBARIXCgp6b25lX29yZGVyGA0gASgFSAaIAQESNgoQcmVmZXJlbmNlX2ZpbHRlchgOIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIB4gBARIvCgp2YWxpZGF0aW9uGA8gASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlSAiIAQFCDAoKX2hlbHBfdGV4dEIOCgxfcGxhY2Vob2xkZXJCEAoOX2RlZmF1bHRfdmFsdWVCDAoKX2l0ZW1fdHlwZUIKCghfc3RvcmFnZUIQCg5fdGVtcGxhdGVfem9uZUINCgtfem9uZV9vcmRlckITChFfcmVmZXJlbmNlX2ZpbHRlckINCgtfdmFsaWRhdGlvbiI8Cg1TaGFyaW5nQ29uZmlnEg8KB2VuYWJsZWQYASABKAgSGgoScmVxdWlyZV9hY2NlcHRhbmNlGAIgASgIIq8FCgtNb2RlbENvbmZpZxISCgp2ZXJzaW9uaW5nGAEgASgIEhIKCnB1Ymxpc2hpbmcYAiABKAgSEAoIdmFyaWFudHMYAyABKAgSDgoGaW5saW5lGAQgASgIEhcKD2N1c3RvbWVyX3Njb3BlZBgFIAEoCBIuCgdzaGFyaW5nGAYgASgLMhgubW9kZWxzLnYxLlNoYXJpbmdDb25maWdIAIgBARIYCgtwbHVyYWxfbmFtZRgHIAEoCUgBiAEBEhgKC2Rlc2NyaXB0aW9uGAggASgJSAKIAQESFQoIY2F0ZWdvcnkYCSABKAlIA4gBARIRCgRpY29uGAogASgJSASIAQESGgoNZGlzcGxheV9maWVsZBgLIAEoCUgFiAEBEh4KEW5hdHVyYWxfa2V5X2ZpZWxkGAwgASgJSAaIAQESFQoNc3lzdGVtX2VudGl0eRgNIAEoCBIWCglkZWxldGFibGUYDiABKAhIB4gBARIVCghlZGl0YWJsZRgPIAEoCEgIiAEBEjUKD21ldGFkYXRhX3NjaGVtYRgQIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RICYgBARIrCgVob29rcxgRIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RICogBARIXCgpwbHVyYWxfa2V5GBIgASgJSAuIAQFCCgoIX3NoYXJpbmdCDgoMX3BsdXJhbF9uYW1lQg4KDF9kZXNjcmlwdGlvbkILCglfY2F0ZWdvcnlCBwoFX2ljb25CEAoOX2Rpc3BsYXlfZmllbGRCFAoSX25hdHVyYWxfa2V5X2ZpZWxkQgwKCl9kZWxldGFibGVCCwoJX2VkaXRhYmxlQhIKEF9tZXRhZGF0YV9zY2hlbWFCCAoGX2hvb2tzQg0KC19wbHVyYWxfa2V5IokBChFNb2RlbENhcGFiaWxpdGllcxIUCgxpc192ZXJzaW9uZWQYASABKAgSFgoOaXNfcHVibGlzaGFibGUYAiABKAgSFAoMaGFzX3ZhcmlhbnRzGAMgASgIEhcKD2N1c3RvbWVyX3Njb3BlZBgEIAEoCBIXCg9zaGFyaW5nX2VuYWJsZWQYBSABKAgipQQKBU1vZGVsEgoKAmlkGAEgASgJEgsKA2tleRgCIAEoCRIMCgRuYW1lGAMgASgJEiAKBmZpZWxkcxgEIAMoCzIQLm1vZGVscy52MS5GaWVsZBImCgZjb25maWcYBSABKAsyFi5tb2RlbHMudjEuTW9kZWxDb25maWcSFgoJY29uZmlnX2lkGAYgASgJSACIAQESMgoMY2FwYWJpbGl0aWVzGAcgASgLMhwubW9kZWxzLnYxLk1vZGVsQ2FwYWJpbGl0aWVzEh8KEmN1cnJlbnRfdmVyc2lvbl9pZBgIIAEoCUgBiAEBEiUKGHB1Ymxpc2hlZF92ZXJzaW9uX251bWJlchgJIAEoBUgCiAEBEhEKCXRlbmFudF9pZBgKIAEoCRISCgpwcm9qZWN0X2lkGAsgASgJEhcKCmNyZWF0ZWRfYnkYFCABKAlIA4gBARIXCgp1cGRhdGVkX2J5GBUgASgJSASIAQESLgoKY3JlYXRlZF9hdBgeIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgfIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCDAoKX2NvbmZpZ19pZEIVChNfY3VycmVudF92ZXJzaW9uX2lkQhsKGV9wdWJsaXNoZWRfdmVyc2lvbl9udW1iZXJCDQoLX2NyZWF0ZWRfYnlCDQoLX3VwZGF0ZWRfYnkiwgIKDE1vZGVsVmVyc2lvbhIKCgJpZBgBIAEoCRIQCghtb2RlbF9pZBgCIAEoCRIWCg52ZXJzaW9uX251bWJlchgDIAEoBRIgCgZmaWVsZHMYBCADKAsyEC5tb2RlbHMudjEuRmllbGQSFAoMY29udGVudF9oYXNoGAUgASgJEh4KEXNvdXJjZV92ZXJzaW9uX2lkGAYgASgJSACIAQESHwoSY2hhbmdlX2Rlc2NyaXB0aW9uGAcgASgJSAGIAQESLgoKY3JlYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFwoKY3JlYXRlZF9ieRgJIAEoCUgCiAEBQhQKEl9zb3VyY2VfdmVyc2lvbl9pZEIVChNfY2hhbmdlX2Rlc2NyaXB0aW9uQg0KC19jcmVhdGVkX2J5Iq8BChJDcmVhdGVNb2RlbFJlcXVlc3QSCwoDa2V5GAEgASgJEgwKBG5hbWUYAiABKAkSIAoGZmllbGRzGAMgAygLMhAubW9kZWxzLnYxLkZpZWxkEisKBmNvbmZpZxgEIAEoCzIWLm1vZGVscy52MS5Nb2RlbENvbmZpZ0gAiAEBEhYKCWNvbmZpZ19pZBgFIAEoCUgBiAEBQgkKB19jb25maWdCDAoKX2NvbmZpZ19pZCI2ChNDcmVhdGVNb2RlbFJlc3BvbnNlEh8KBW1vZGVsGAEgASgLMhAubW9kZWxzLnYxLk1vZGVsIh0KD0dldE1vZGVsUmVxdWVzdBIKCgJpZBgBIAEoCSIzChBHZXRNb2RlbFJlc3BvbnNlEh8KBW1vZGVsGAEgASgLMhAubW9kZWxzLnYxLk1vZGVsIiMKFEdldE1vZGVsQnlLZXlSZXF1ZXN0EgsKA2tleRgBIAEoCSI4ChVHZXRNb2RlbEJ5S2V5UmVzcG9uc2USHwoFbW9kZWwYASABKAsyEC5tb2RlbHMudjEuTW9kZWwinAEKEUxpc3RNb2RlbHNSZXF1ZXN0EhMKBnNlYXJjaBgBIAEoCUgAiAEBEhUKCGNhdGVnb3J5GAIgASgJSAGIAQESDQoFbGltaXQYAyABKAUSDgoGb2Zmc2V0GAQgASgFEhYKCWNvbmZpZ19pZBgFIAEoCUgCiAEBQgkKB19zZWFyY2hCCwoJX2NhdGVnb3J5QgwKCl9jb25maWdfaWQiRQoSTGlzdE1vZGVsc1Jlc3BvbnNlEiAKBm1vZGVscxgBIAMoCzIQLm1vZGVscy52MS5Nb2RlbBINCgV0b3RhbBgCIAEoBSLlAQoSVXBkYXRlTW9kZWxSZXF1ZXN0EgoKAmlkGAEgASgJEhEKBG5hbWUYAiABKAlIAIgBARIgCgZmaWVsZHMYAyADKAsyEC5tb2RlbHMudjEuRmllbGQSKwoGY29uZmlnGAQgASgLMhYubW9kZWxzLnYxLk1vZGVsQ29uZmlnSAGIAQESHwoSY2hhbmdlX2Rlc2NyaXB0aW9uGAUgASgJSAKIAQESFQoNdXBkYXRlX2ZpZWxkcxgGIAEoCEIHCgVfbmFtZUIJCgdfY29uZmlnQhUKE19jaGFuZ2VfZGVzY3JpcHRpb24iNgoTVXBkYXRlTW9kZWxSZXNwb25zZRIfCgVtb2RlbBgBIAEoCzIQLm1vZGVscy52MS5Nb2RlbCIgChJEZWxldGVNb2RlbFJlcXVlc3QSCgoCaWQYASABKAkiJgoTRGVsZXRlTW9kZWxSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIkYKFUR1cGxpY2F0ZU1vZGVsUmVxdWVzdBIKCgJpZBgBIAEoCRIPCgduZXdfa2V5GAIgASgJEhAKCG5ld19uYW1lGAMgASgJIjkKFkR1cGxpY2F0ZU1vZGVsUmVzcG9uc2USHwoFbW9kZWwYASABKAsyEC5tb2RlbHMudjEuTW9kZWwiSwoYTGlzdE1vZGVsVmVyc2lvbnNSZXF1ZXN0EhAKCG1vZGVsX2lkGAEgASgJEg0KBWxpbWl0GAIgASgFEg4KBm9mZnNldBgDIAEoBSJVChlMaXN0TW9kZWxWZXJzaW9uc1Jlc3BvbnNlEikKCHZlcnNpb25zGAEgAygLMhcubW9kZWxzLnYxLk1vZGVsVmVyc2lvbhINCgV0b3RhbBgCIAEoBSI+ChZHZXRNb2RlbFZlcnNpb25SZXF1ZXN0EhAKCG1vZGVsX2lkGAEgASgJEhIKCnZlcnNpb25faWQYAiABKAkiQwoXR2V0TW9kZWxWZXJzaW9uUmVzcG9uc2USKAoHdmVyc2lvbhgBIAEoCzIXLm1vZGVscy52MS5Nb2RlbFZlcnNpb24iQgoaUmVzdG9yZU1vZGVsVmVyc2lvblJlcXVlc3QSEAoIbW9kZWxfaWQYASABKAkSEgoKdmVyc2lvbl9pZBgCIAEoCSI+ChtSZXN0b3JlTW9kZWxWZXJzaW9uUmVzcG9uc2USHwoFbW9kZWwYASABKAsyEC5tb2RlbHMudjEuTW9kZWwq4wIKCUZpZWxkVHlwZRIaChZGSUVMRF9UWVBFX1VOU1BFQ0lGSUVEEAASEwoPRklFTERfVFlQRV9URVhUEAESFQoRRklFTERfVFlQRV9OVU1CRVIQAhIWChJGSUVMRF9UWVBFX0JPT0xFQU4QAxITCg9GSUVMRF9UWVBFX0RBVEUQBBIVChFGSUVMRF9UWVBFX1NFTEVDVBAFEhMKD0ZJRUxEX1RZUEVfSlNPThAGEhMKD0ZJRUxEX1RZUEVfTElTVBAHEhQKEEZJRUxEX1RZUEVfTU9ERUwQCBIYChRGSUVMRF9UWVBFX1JFRkVSRU5DRRAJEhMKD0ZJRUxEX1RZUEVfRklMRRAKEhQKEEZJRUxEX1RZUEVfSU1BR0UQCxIUChBGSUVMRF9UWVBFX1ZJREVPEAwSFgoSRklFTERfVFlQRV9DT05URU5UEA0SFwoTRklFTERfVFlQRV9GTEVYSUJMRRAOMtQGCg1Nb2RlbHNTZXJ2aWNlEkMKCEdldE1vZGVsEhoubW9kZWxzLnYxLkdldE1vZGVsUmVxdWVzdBobLm1vZGVscy52MS5HZXRNb2RlbFJlc3BvbnNlElIKDUdldE1vZGVsQnlLZXkSHy5tb2RlbHMudjEuR2V0TW9kZWxCeUtleVJlcXVlc3QaIC5tb2RlbHMudjEuR2V0TW9kZWxCeUtleVJlc3BvbnNlEkkKCkxpc3RNb2RlbHMSHC5tb2RlbHMudjEuTGlzdE1vZGVsc1JlcXVlc3QaHS5tb2RlbHMudjEuTGlzdE1vZGVsc1Jlc3BvbnNlEkwKC0NyZWF0ZU1vZGVsEh0ubW9kZWxzLnYxLkNyZWF0ZU1vZGVsUmVxdWVzdBoeLm1vZGVscy52MS5DcmVhdGVNb2RlbFJlc3BvbnNlEkwKC1VwZGF0ZU1vZGVsEh0ubW9kZWxzLnYxLlVwZGF0ZU1vZGVsUmVxdWVzdBoeLm1vZGVscy52MS5VcGRhdGVNb2RlbFJlc3BvbnNlEkwKC0RlbGV0ZU1vZGVsEh0ubW9kZWxzLnYxLkRlbGV0ZU1vZGVsUmVxdWVzdBoeLm1vZGVscy52MS5EZWxldGVNb2RlbFJlc3BvbnNlElUKDkR1cGxpY2F0ZU1vZGVsEiAubW9kZWxzLnYxLkR1cGxpY2F0ZU1vZGVsUmVxdWVzdBohLm1vZGVscy52MS5EdXBsaWNhdGVNb2RlbFJlc3BvbnNlElgKD0dldE1vZGVsVmVyc2lvbhIhLm1vZGVscy52MS5HZXRNb2RlbFZlcnNpb25SZXF1ZXN0GiIubW9kZWxzLnYxLkdldE1vZGVsVmVyc2lvblJlc3BvbnNlEl4KEUxpc3RNb2RlbFZlcnNpb25zEiMubW9kZWxzLnYxLkxpc3RNb2RlbFZlcnNpb25zUmVxdWVzdBokLm1vZGVscy52MS5MaXN0TW9kZWxWZXJzaW9uc1Jlc3BvbnNlEmQKE1Jlc3RvcmVNb2RlbFZlcnNpb24SJS5tb2RlbHMudjEuUmVzdG9yZU1vZGVsVmVyc2lvblJlcXVlc3QaJi5tb2RlbHMudjEuUmVzdG9yZU1vZGVsVmVyc2lvblJlc3BvbnNlQjlaN2dpdGh1Yi5jb20vZWlkZXN0dWRpby9mb2lyL2dlbi9wcm90by9tb2RlbHMvdjE7bW9kZWxzdjFiBnByb3RvMw", [file_google_protobuf_struct, file_google_protobuf_timestamp]);
12
+ fileDesc("ChZtb2RlbHMvdjEvbW9kZWxzLnByb3RvEgltb2RlbHMudjEiuQQKBUZpZWxkEgoKAmlkGAEgASgJEgsKA2tleRgCIAEoCRINCgVsYWJlbBgDIAEoCRIMCgR0eXBlGAQgASgJEhAKCHJlcXVpcmVkGAUgASgIEhYKCWhlbHBfdGV4dBgGIAEoCUgAiAEBEhgKC3BsYWNlaG9sZGVyGAcgASgJSAGIAQESMgoNZGVmYXVsdF92YWx1ZRgIIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZUgCiAEBEicKBmNvbmZpZxgJIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFgoJaXRlbV90eXBlGAogASgJSAOIAQESFAoHc3RvcmFnZRgLIAEoCUgEiAEBEhoKDXRlbXBsYXRlX3pvbmUYDCABKAlIBYgBARIXCgp6b25lX29yZGVyGA0gASgFSAaIAQESNgoQcmVmZXJlbmNlX2ZpbHRlchgOIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIB4gBARIvCgp2YWxpZGF0aW9uGA8gASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlSAiIAQFCDAoKX2hlbHBfdGV4dEIOCgxfcGxhY2Vob2xkZXJCEAoOX2RlZmF1bHRfdmFsdWVCDAoKX2l0ZW1fdHlwZUIKCghfc3RvcmFnZUIQCg5fdGVtcGxhdGVfem9uZUINCgtfem9uZV9vcmRlckITChFfcmVmZXJlbmNlX2ZpbHRlckINCgtfdmFsaWRhdGlvbiI8Cg1TaGFyaW5nQ29uZmlnEg8KB2VuYWJsZWQYASABKAgSGgoScmVxdWlyZV9hY2NlcHRhbmNlGAIgASgIIq8FCgtNb2RlbENvbmZpZxISCgp2ZXJzaW9uaW5nGAEgASgIEhIKCnB1Ymxpc2hpbmcYAiABKAgSEAoIdmFyaWFudHMYAyABKAgSDgoGaW5saW5lGAQgASgIEhcKD2N1c3RvbWVyX3Njb3BlZBgFIAEoCBIuCgdzaGFyaW5nGAYgASgLMhgubW9kZWxzLnYxLlNoYXJpbmdDb25maWdIAIgBARIYCgtwbHVyYWxfbmFtZRgHIAEoCUgBiAEBEhgKC2Rlc2NyaXB0aW9uGAggASgJSAKIAQESFQoIY2F0ZWdvcnkYCSABKAlIA4gBARIRCgRpY29uGAogASgJSASIAQESGgoNZGlzcGxheV9maWVsZBgLIAEoCUgFiAEBEh4KEW5hdHVyYWxfa2V5X2ZpZWxkGAwgASgJSAaIAQESFQoNc3lzdGVtX2VudGl0eRgNIAEoCBIWCglkZWxldGFibGUYDiABKAhIB4gBARIVCghlZGl0YWJsZRgPIAEoCEgIiAEBEjUKD21ldGFkYXRhX3NjaGVtYRgQIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RICYgBARIrCgVob29rcxgRIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RICogBARIXCgpwbHVyYWxfa2V5GBIgASgJSAuIAQFCCgoIX3NoYXJpbmdCDgoMX3BsdXJhbF9uYW1lQg4KDF9kZXNjcmlwdGlvbkILCglfY2F0ZWdvcnlCBwoFX2ljb25CEAoOX2Rpc3BsYXlfZmllbGRCFAoSX25hdHVyYWxfa2V5X2ZpZWxkQgwKCl9kZWxldGFibGVCCwoJX2VkaXRhYmxlQhIKEF9tZXRhZGF0YV9zY2hlbWFCCAoGX2hvb2tzQg0KC19wbHVyYWxfa2V5IokBChFNb2RlbENhcGFiaWxpdGllcxIUCgxpc192ZXJzaW9uZWQYASABKAgSFgoOaXNfcHVibGlzaGFibGUYAiABKAgSFAoMaGFzX3ZhcmlhbnRzGAMgASgIEhcKD2N1c3RvbWVyX3Njb3BlZBgEIAEoCBIXCg9zaGFyaW5nX2VuYWJsZWQYBSABKAginwUKBU1vZGVsEgoKAmlkGAEgASgJEgsKA2tleRgCIAEoCRIMCgRuYW1lGAMgASgJEiAKBmZpZWxkcxgEIAMoCzIQLm1vZGVscy52MS5GaWVsZBImCgZjb25maWcYBSABKAsyFi5tb2RlbHMudjEuTW9kZWxDb25maWcSFgoJY29uZmlnX2lkGAYgASgJSACIAQESMgoMY2FwYWJpbGl0aWVzGAcgASgLMhwubW9kZWxzLnYxLk1vZGVsQ2FwYWJpbGl0aWVzEh8KEmN1cnJlbnRfdmVyc2lvbl9pZBgIIAEoCUgBiAEBEiUKGHB1Ymxpc2hlZF92ZXJzaW9uX251bWJlchgJIAEoBUgCiAEBEhEKCXRlbmFudF9pZBgKIAEoCRISCgpwcm9qZWN0X2lkGAsgASgJEhcKCmNyZWF0ZWRfYnkYFCABKAlIA4gBARIXCgp1cGRhdGVkX2J5GBUgASgJSASIAQESLgoKY3JlYXRlZF9hdBgeIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgfIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLAoSbGFzdF9wdXNoZWRfZmllbGRzGCggAygLMhAubW9kZWxzLnYxLkZpZWxkEjcKDmxhc3RfcHVzaGVkX2F0GCkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgFiAEBQgwKCl9jb25maWdfaWRCFQoTX2N1cnJlbnRfdmVyc2lvbl9pZEIbChlfcHVibGlzaGVkX3ZlcnNpb25fbnVtYmVyQg0KC19jcmVhdGVkX2J5Qg0KC191cGRhdGVkX2J5QhEKD19sYXN0X3B1c2hlZF9hdCLCAgoMTW9kZWxWZXJzaW9uEgoKAmlkGAEgASgJEhAKCG1vZGVsX2lkGAIgASgJEhYKDnZlcnNpb25fbnVtYmVyGAMgASgFEiAKBmZpZWxkcxgEIAMoCzIQLm1vZGVscy52MS5GaWVsZBIUCgxjb250ZW50X2hhc2gYBSABKAkSHgoRc291cmNlX3ZlcnNpb25faWQYBiABKAlIAIgBARIfChJjaGFuZ2VfZGVzY3JpcHRpb24YByABKAlIAYgBARIuCgpjcmVhdGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIXCgpjcmVhdGVkX2J5GAkgASgJSAKIAQFCFAoSX3NvdXJjZV92ZXJzaW9uX2lkQhUKE19jaGFuZ2VfZGVzY3JpcHRpb25CDQoLX2NyZWF0ZWRfYnkizQEKEkNyZWF0ZU1vZGVsUmVxdWVzdBILCgNrZXkYASABKAkSDAoEbmFtZRgCIAEoCRIgCgZmaWVsZHMYAyADKAsyEC5tb2RlbHMudjEuRmllbGQSKwoGY29uZmlnGAQgASgLMhYubW9kZWxzLnYxLk1vZGVsQ29uZmlnSACIAQESFgoJY29uZmlnX2lkGAUgASgJSAGIAQESHAoUdXBkYXRlX3B1c2hfc25hcHNob3QYBiABKAhCCQoHX2NvbmZpZ0IMCgpfY29uZmlnX2lkIjYKE0NyZWF0ZU1vZGVsUmVzcG9uc2USHwoFbW9kZWwYASABKAsyEC5tb2RlbHMudjEuTW9kZWwiHQoPR2V0TW9kZWxSZXF1ZXN0EgoKAmlkGAEgASgJIjMKEEdldE1vZGVsUmVzcG9uc2USHwoFbW9kZWwYASABKAsyEC5tb2RlbHMudjEuTW9kZWwiIwoUR2V0TW9kZWxCeUtleVJlcXVlc3QSCwoDa2V5GAEgASgJIjgKFUdldE1vZGVsQnlLZXlSZXNwb25zZRIfCgVtb2RlbBgBIAEoCzIQLm1vZGVscy52MS5Nb2RlbCKcAQoRTGlzdE1vZGVsc1JlcXVlc3QSEwoGc2VhcmNoGAEgASgJSACIAQESFQoIY2F0ZWdvcnkYAiABKAlIAYgBARINCgVsaW1pdBgDIAEoBRIOCgZvZmZzZXQYBCABKAUSFgoJY29uZmlnX2lkGAUgASgJSAKIAQFCCQoHX3NlYXJjaEILCglfY2F0ZWdvcnlCDAoKX2NvbmZpZ19pZCJFChJMaXN0TW9kZWxzUmVzcG9uc2USIAoGbW9kZWxzGAEgAygLMhAubW9kZWxzLnYxLk1vZGVsEg0KBXRvdGFsGAIgASgFIpoCChJVcGRhdGVNb2RlbFJlcXVlc3QSCgoCaWQYASABKAkSEQoEbmFtZRgCIAEoCUgAiAEBEiAKBmZpZWxkcxgDIAMoCzIQLm1vZGVscy52MS5GaWVsZBIrCgZjb25maWcYBCABKAsyFi5tb2RlbHMudjEuTW9kZWxDb25maWdIAYgBARIfChJjaGFuZ2VfZGVzY3JpcHRpb24YBSABKAlIAogBARIVCg11cGRhdGVfZmllbGRzGAYgASgIEhwKFHVwZGF0ZV9wdXNoX3NuYXBzaG90GAcgASgIEhUKDXNuYXBzaG90X29ubHkYCCABKAhCBwoFX25hbWVCCQoHX2NvbmZpZ0IVChNfY2hhbmdlX2Rlc2NyaXB0aW9uIjYKE1VwZGF0ZU1vZGVsUmVzcG9uc2USHwoFbW9kZWwYASABKAsyEC5tb2RlbHMudjEuTW9kZWwiIAoSRGVsZXRlTW9kZWxSZXF1ZXN0EgoKAmlkGAEgASgJIiYKE0RlbGV0ZU1vZGVsUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCJGChVEdXBsaWNhdGVNb2RlbFJlcXVlc3QSCgoCaWQYASABKAkSDwoHbmV3X2tleRgCIAEoCRIQCghuZXdfbmFtZRgDIAEoCSI5ChZEdXBsaWNhdGVNb2RlbFJlc3BvbnNlEh8KBW1vZGVsGAEgASgLMhAubW9kZWxzLnYxLk1vZGVsIksKGExpc3RNb2RlbFZlcnNpb25zUmVxdWVzdBIQCghtb2RlbF9pZBgBIAEoCRINCgVsaW1pdBgCIAEoBRIOCgZvZmZzZXQYAyABKAUiVQoZTGlzdE1vZGVsVmVyc2lvbnNSZXNwb25zZRIpCgh2ZXJzaW9ucxgBIAMoCzIXLm1vZGVscy52MS5Nb2RlbFZlcnNpb24SDQoFdG90YWwYAiABKAUiPgoWR2V0TW9kZWxWZXJzaW9uUmVxdWVzdBIQCghtb2RlbF9pZBgBIAEoCRISCgp2ZXJzaW9uX2lkGAIgASgJIkMKF0dldE1vZGVsVmVyc2lvblJlc3BvbnNlEigKB3ZlcnNpb24YASABKAsyFy5tb2RlbHMudjEuTW9kZWxWZXJzaW9uIkIKGlJlc3RvcmVNb2RlbFZlcnNpb25SZXF1ZXN0EhAKCG1vZGVsX2lkGAEgASgJEhIKCnZlcnNpb25faWQYAiABKAkiPgobUmVzdG9yZU1vZGVsVmVyc2lvblJlc3BvbnNlEh8KBW1vZGVsGAEgASgLMhAubW9kZWxzLnYxLk1vZGVsKuMCCglGaWVsZFR5cGUSGgoWRklFTERfVFlQRV9VTlNQRUNJRklFRBAAEhMKD0ZJRUxEX1RZUEVfVEVYVBABEhUKEUZJRUxEX1RZUEVfTlVNQkVSEAISFgoSRklFTERfVFlQRV9CT09MRUFOEAMSEwoPRklFTERfVFlQRV9EQVRFEAQSFQoRRklFTERfVFlQRV9TRUxFQ1QQBRITCg9GSUVMRF9UWVBFX0pTT04QBhITCg9GSUVMRF9UWVBFX0xJU1QQBxIUChBGSUVMRF9UWVBFX01PREVMEAgSGAoURklFTERfVFlQRV9SRUZFUkVOQ0UQCRITCg9GSUVMRF9UWVBFX0ZJTEUQChIUChBGSUVMRF9UWVBFX0lNQUdFEAsSFAoQRklFTERfVFlQRV9WSURFTxAMEhYKEkZJRUxEX1RZUEVfQ09OVEVOVBANEhcKE0ZJRUxEX1RZUEVfRkxFWElCTEUQDjLUBgoNTW9kZWxzU2VydmljZRJDCghHZXRNb2RlbBIaLm1vZGVscy52MS5HZXRNb2RlbFJlcXVlc3QaGy5tb2RlbHMudjEuR2V0TW9kZWxSZXNwb25zZRJSCg1HZXRNb2RlbEJ5S2V5Eh8ubW9kZWxzLnYxLkdldE1vZGVsQnlLZXlSZXF1ZXN0GiAubW9kZWxzLnYxLkdldE1vZGVsQnlLZXlSZXNwb25zZRJJCgpMaXN0TW9kZWxzEhwubW9kZWxzLnYxLkxpc3RNb2RlbHNSZXF1ZXN0Gh0ubW9kZWxzLnYxLkxpc3RNb2RlbHNSZXNwb25zZRJMCgtDcmVhdGVNb2RlbBIdLm1vZGVscy52MS5DcmVhdGVNb2RlbFJlcXVlc3QaHi5tb2RlbHMudjEuQ3JlYXRlTW9kZWxSZXNwb25zZRJMCgtVcGRhdGVNb2RlbBIdLm1vZGVscy52MS5VcGRhdGVNb2RlbFJlcXVlc3QaHi5tb2RlbHMudjEuVXBkYXRlTW9kZWxSZXNwb25zZRJMCgtEZWxldGVNb2RlbBIdLm1vZGVscy52MS5EZWxldGVNb2RlbFJlcXVlc3QaHi5tb2RlbHMudjEuRGVsZXRlTW9kZWxSZXNwb25zZRJVCg5EdXBsaWNhdGVNb2RlbBIgLm1vZGVscy52MS5EdXBsaWNhdGVNb2RlbFJlcXVlc3QaIS5tb2RlbHMudjEuRHVwbGljYXRlTW9kZWxSZXNwb25zZRJYCg9HZXRNb2RlbFZlcnNpb24SIS5tb2RlbHMudjEuR2V0TW9kZWxWZXJzaW9uUmVxdWVzdBoiLm1vZGVscy52MS5HZXRNb2RlbFZlcnNpb25SZXNwb25zZRJeChFMaXN0TW9kZWxWZXJzaW9ucxIjLm1vZGVscy52MS5MaXN0TW9kZWxWZXJzaW9uc1JlcXVlc3QaJC5tb2RlbHMudjEuTGlzdE1vZGVsVmVyc2lvbnNSZXNwb25zZRJkChNSZXN0b3JlTW9kZWxWZXJzaW9uEiUubW9kZWxzLnYxLlJlc3RvcmVNb2RlbFZlcnNpb25SZXF1ZXN0GiYubW9kZWxzLnYxLlJlc3RvcmVNb2RlbFZlcnNpb25SZXNwb25zZUI5WjdnaXRodWIuY29tL2VpZGVzdHVkaW8vZm9pci9nZW4vcHJvdG8vbW9kZWxzL3YxO21vZGVsc3YxYgZwcm90bzM", [file_google_protobuf_struct, file_google_protobuf_timestamp]);
13
13
 
14
14
  /**
15
15
  * Describes the message models.v1.Field.