@githolon/dsl 0.119.13 → 0.119.29

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.
@@ -32,7 +32,7 @@ var __toESM = (mod, isNodeMode, target3) => (target3 = mod != null ? __create(__
32
32
  var define_NOMOS_KERNEL_RELEASE_default;
33
33
  var init_define_NOMOS_KERNEL_RELEASE = __esm({
34
34
  "<define:__NOMOS_KERNEL_RELEASE__>"() {
35
- define_NOMOS_KERNEL_RELEASE_default = { contracts: { "nomos.kernel.v1": "1.0.0" }, descriptorSha256: "80e9dec7aedf8171e3e4ec130cf6935469868c3ad7586d82975c3e9831da572f" };
35
+ define_NOMOS_KERNEL_RELEASE_default = { contracts: { "nomos.kernel.v1": "1.0.0" }, descriptorSha256: "3c8284fd934d34b45072e1604f4ac8aa85980e704ad28e5dc937d61eb6352972" };
36
36
  }
37
37
  });
38
38
 
@@ -1056,10 +1056,10 @@ var require_uri_all = __commonJS({
1056
1056
 
1057
1057
  // ../../platform-shells/node/stdio/entry.ts
1058
1058
  init_define_NOMOS_KERNEL_RELEASE();
1059
- import { createHash as createHash2, randomUUID as randomUUID2 } from "node:crypto";
1060
- import { existsSync as existsSync5, mkdirSync as mkdirSync5, mkdtempSync as mkdtempSync4, readFileSync as readFileSync3, rmSync as rmSync4, writeFileSync as writeFileSync5 } from "node:fs";
1059
+ import { createHash as createHash3, randomUUID as randomUUID2 } from "node:crypto";
1060
+ import { existsSync as existsSync5, mkdirSync as mkdirSync6, mkdtempSync as mkdtempSync4, readFileSync as readFileSync4, rmSync as rmSync5, writeFileSync as writeFileSync6 } from "node:fs";
1061
1061
  import { tmpdir as tmpdir3 } from "node:os";
1062
- import { join as join5 } from "node:path";
1062
+ import { join as join6 } from "node:path";
1063
1063
  import { createInterface } from "node:readline";
1064
1064
 
1065
1065
  // ../../node_modules/@bufbuild/protobuf/dist/esm/index.js
@@ -5733,7 +5733,7 @@ init_define_NOMOS_KERNEL_RELEASE();
5733
5733
 
5734
5734
  // ../../adapter/proto/nomos/kernel/v1/kernel_pb.js
5735
5735
  init_define_NOMOS_KERNEL_RELEASE();
5736
- var file_nomos_kernel_v1_kernel = /* @__PURE__ */ fileDesc("Chxub21vcy9rZXJuZWwvdjEva2VybmVsLnByb3RvEg9ub21vcy5rZXJuZWwudjEixgkKC0NhbGxSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIsCgRvcGVuGAogASgLMhwubm9tb3Mua2VybmVsLnYxLk9wZW5SZXF1ZXN0SAASLgoFb2ZmZXIYCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXF1ZXN0SAASLgoFcXVlcnkYDCABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0SAASMAoGb3V0Ym94GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlcXVlc3RIABIsCgRzeW5jGA4gASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZXF1ZXN0SAASMgoHY3VzdG9keRgPIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVxdWVzdEgAEkAKCWNvbmZpZ3VyZRgQIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxDb25maWd1cmF0aW9uUmVxdWVzdEgAEkgKE3NpZ25fcHJlcGFyZWRfb2ZmZXIYESABKAsyKS5ub21vcy5rZXJuZWwudjEuU2lnblByZXBhcmVkT2ZmZXJSZXF1ZXN0SAASSgoUcHJlcGFyZV9yZW1vdGVfb2ZmZXIYEiABKAsyKi5ub21vcy5rZXJuZWwudjEuUHJlcGFyZVJlbW90ZU9mZmVyUmVxdWVzdEgAEk4KFnNpZ25fb2ZmZXJfcHJlcGFyYXRpb24YEyABKAsyLC5ub21vcy5rZXJuZWwudjEuU2lnbk9mZmVyUHJlcGFyYXRpb25SZXF1ZXN0SAASTgoWc2lnbl9iaXJ0aF9jZXJ0aWZpY2F0ZRgUIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5TaWduQmlydGhDZXJ0aWZpY2F0ZVJlcXVlc3RIABJDChBzaWduaW5nX2lkZW50aXR5GBcgASgLMicubm9tb3Mua2VybmVsLnYxLlNpZ25pbmdJZGVudGl0eVJlcXVlc3RIABJWChpzaWduX2F1dGhvcml0eV9hdHRlc3RhdGlvbhgYIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5TaWduQXV0aG9yaXR5QXR0ZXN0YXRpb25SZXF1ZXN0SAASPAoNbWludF90eXBlZF9pZBgZIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5NaW50VHlwZWRJZFJlcXVlc3RIABJJChNlbmNyeXB0aW9uX2lkZW50aXR5GBogASgLMioubm9tb3Mua2VybmVsLnYxLkVuY3J5cHRpb25JZGVudGl0eVJlcXVlc3RIABI+Cg53cmFwX3Njb3BlX2tleRgbIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5XcmFwU2NvcGVLZXlSZXF1ZXN0SAASQgoQdW53cmFwX3Njb3BlX2tleRgcIAEoCzImLm5vbW9zLmtlcm5lbC52MS5VbndyYXBTY29wZUtleVJlcXVlc3RIAEILCglvcGVyYXRpb25KBAgVEBZKBAgWEBdSFGluaXRpYWxpemVfd29ya3NwYWNlUhZhcHBseV93b3Jrc3BhY2VfZWZmZWN0IoMKCgxDYWxsUmVzcG9uc2USGAoQcHJvdG9jb2xfdmVyc2lvbhgBIAEoDRISCgpyZXF1ZXN0X2lkGAIgASgJEisKB2ZhaWx1cmUYCiABKAsyGC5ub21vcy5rZXJuZWwudjEuRmFpbHVyZUgAEi0KBG9wZW4YCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT3BlblJlc3BvbnNlSAASLwoFb2ZmZXIYDCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUgAEi8KBXF1ZXJ5GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5UmVzcG9uc2VIABIxCgZvdXRib3gYDiABKAsyHy5ub21vcy5rZXJuZWwudjEuT3V0Ym94UmVzcG9uc2VIABItCgRzeW5jGA8gASgLMh0ubm9tb3Mua2VybmVsLnYxLlN5bmNSZXNwb25zZUgAEjMKB2N1c3RvZHkYECABKAsyIC5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVJlc3BvbnNlSAASQQoJY29uZmlndXJlGBEgASgLMiwubm9tb3Mua2VybmVsLnYxLktlcm5lbENvbmZpZ3VyYXRpb25SZXNwb25zZUgAEkkKE3NpZ25fcHJlcGFyZWRfb2ZmZXIYEiABKAsyKi5ub21vcy5rZXJuZWwudjEuU2lnblByZXBhcmVkT2ZmZXJSZXNwb25zZUgAEksKFHByZXBhcmVfcmVtb3RlX29mZmVyGBMgASgLMisubm9tb3Mua2VybmVsLnYxLlByZXBhcmVSZW1vdGVPZmZlclJlc3BvbnNlSAASTwoWc2lnbl9vZmZlcl9wcmVwYXJhdGlvbhgUIAEoCzItLm5vbW9zLmtlcm5lbC52MS5TaWduT2ZmZXJQcmVwYXJhdGlvblJlc3BvbnNlSAASTwoWc2lnbl9iaXJ0aF9jZXJ0aWZpY2F0ZRgVIAEoCzItLm5vbW9zLmtlcm5lbC52MS5TaWduQmlydGhDZXJ0aWZpY2F0ZVJlc3BvbnNlSAASRAoQc2lnbmluZ19pZGVudGl0eRgYIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5TaWduaW5nSWRlbnRpdHlSZXNwb25zZUgAElcKGnNpZ25fYXV0aG9yaXR5X2F0dGVzdGF0aW9uGBkgASgLMjEubm9tb3Mua2VybmVsLnYxLlNpZ25BdXRob3JpdHlBdHRlc3RhdGlvblJlc3BvbnNlSAASPQoNbWludF90eXBlZF9pZBgaIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5NaW50VHlwZWRJZFJlc3BvbnNlSAASSgoTZW5jcnlwdGlvbl9pZGVudGl0eRgbIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5FbmNyeXB0aW9uSWRlbnRpdHlSZXNwb25zZUgAEj8KDndyYXBfc2NvcGVfa2V5GBwgASgLMiUubm9tb3Mua2VybmVsLnYxLldyYXBTY29wZUtleVJlc3BvbnNlSAASQwoQdW53cmFwX3Njb3BlX2tleRgdIAEoCzInLm5vbW9zLmtlcm5lbC52MS5VbndyYXBTY29wZUtleVJlc3BvbnNlSABCCQoHb3V0Y29tZUoECBYQF0oECBcQGFIUaW5pdGlhbGl6ZV93b3Jrc3BhY2VSFmFwcGx5X3dvcmtzcGFjZV9lZmZlY3QitwIKB0ZhaWx1cmUSDAoEY29kZRgBIAEoCRIPCgdtZXNzYWdlGAIgASgJEi0KB2RldGFpbHMYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSYQoiaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzc19yZXF1aXJlZBgKIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1JlcXVpcmVkSACIAQESPwoQaGlzdG9yeV9yZXF1aXJlZBgLIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5IaXN0b3J5UmVxdWlyZWRIAYgBAUIlCiNfaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzc19yZXF1aXJlZEITChFfaGlzdG9yeV9yZXF1aXJlZCJRCh9JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1JlcXVpcmVkEhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAkSFAoMcmVxdWlyZWRfa2lkGAIgASgJIjwKDE9wZW5SZXNwb25zZRIsCgZyZXN1bHQYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QiugQKDU9mZmVyUmVzcG9uc2USMgoIYWRtaXR0ZWQYASABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJBZG1pdHRlZEgAEjAKB3JlZnVzZWQYAiABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZWZ1c2VkSAASOwoNZGVhZF9sZXR0ZXJlZBgDIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5PZmZlckRlYWRMZXR0ZXJlZEgAEjgKC3F1YXJhbnRpbmVkGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLk9mZmVyUXVhcmFudGluZWRIABJKChVibG9ja2VkX29uX2RlcGVuZGVuY3kYBSABKAsyKS5ub21vcy5rZXJuZWwudjEuT2ZmZXJCbG9ja2VkT25EZXBlbmRlbmN5SAASMgoIcHJlcGFyZWQYBiABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJQcmVwYXJlZEgAEkIKEHdvcmtzcGFjZV9lZmZlY3QYByABKAsyKC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0SWRlbnRpdHkSGwoOanVkZ2VkX2F0X2hlYWQYCCABKAlIAYgBARJNChJqdWRnbWVudF9zaWduYXR1cmUYCSABKAsyMS5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0SnVkZ21lbnRTaWduYXR1cmVCCQoHb3V0Y29tZUIRCg9fanVkZ2VkX2F0X2hlYWQifwogV29ya3NwYWNlRWZmZWN0SnVkZ21lbnRTaWduYXR1cmUSDwoHdmVyc2lvbhgBIAEoDRISCgpwdWJsaWNfa2V5GAIgASgMEhEKCWtleV9lcG9jaBgDIAEoEhIRCglzaWduYXR1cmUYBCABKAwSEAoIanVkZ21lbnQYBSABKAwiqAEKF1dvcmtzcGFjZUVmZmVjdElkZW50aXR5EhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAkSIAoYc291cmNlX3dvcmtzcGFjZV9nZW5lc2lzGAIgASgJEhgKEHRhcmdldF93b3Jrc3BhY2UYAyABKAkSIAoYdGFyZ2V0X3dvcmtzcGFjZV9nZW5lc2lzGAQgASgJEhUKDWVmZmVjdF9kaWdlc3QYBSABKAkiVwocV29ya3NwYWNlRWZmZWN0U3RhdHVzUmVxdWVzdBIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYASABKAkSFQoNZWZmZWN0X2RpZ2VzdBgCIAEoCSJRCh1Xb3Jrc3BhY2VFZmZlY3RTdGF0dXNSZXNwb25zZRIwCghqdWRnbWVudBgBIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5PZmZlclJlc3BvbnNlIoYCCiNSZWNvcmRXb3Jrc3BhY2VFZmZlY3RPdXRjb21lUmVxdWVzdBIwCgZzb3VyY2UYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhkKEXNvdXJjZV9vZmZlcl9wYXRoGAIgASgJEhUKC21haWxib3hfdXJsGAMgASgJSAASPQoRcmVjaXBpZW50X2N1c3RvZHkYBSABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0SAASMAoIanVkZ21lbnQYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUIKCghldmlkZW5jZSJaCh5SZWNvcmRlZFdvcmtzcGFjZUVmZmVjdE91dGNvbWUSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCRIYChB0ZXJtaW5hbF9yZWZ1c2FsGAMgASgIIq4FCg1PZmZlckFkbWl0dGVkEgwKBGhlYWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEhcKCmludGVudF9vdXQYAyABKAlIAIgBARIzCgdjcmVhdGVkGAQgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEjQKCGFmZmVjdGVkGAUgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEiwKBGJvcm4YBiADKAsyHi5ub21vcy5rZXJuZWwudjEuQm9ybldvcmtzcGFjZRI1Cg5iaXJ0aF9vdXRjb21lcxgHIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSNwoMa2VybmVsX3NwYW5zGAggASgLMhwubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5zSAGIAQESDwoHZHJ5X3J1bhgJIAEoCBIfChJpbnN0YWxsZWRfbGF3X2hhc2gYCiABKAlIAogBARI5CglwbGFjZW1lbnQYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuUGxhY2VtZW50QWRvcHRlZEgDiAEBEhcKD2FscmVhZHlfYXBwbGllZBgMIAEoCBI8CgxzdGF0ZV9jaGFuZ2UYDSABKAsyIS5ub21vcy5rZXJuZWwudjEuT2ZmZXJTdGF0ZUNoYW5nZUgEiAEBEkAKFGxhd192ZXJzaW9uX3dhcm5pbmdzGA4gAygLMiIubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25XYXJuaW5nQg0KC19pbnRlbnRfb3V0Qg8KDV9rZXJuZWxfc3BhbnNCFQoTX2luc3RhbGxlZF9sYXdfaGFzaEIMCgpfcGxhY2VtZW50Qg8KDV9zdGF0ZV9jaGFuZ2UiIwoLTGF3SWRlbnRpdHkSFAoMcGFja2FnZV9uYW1lGAEgASgJIiQKCkxhd1ZlcnNpb24SFgoOY2xvc3VyZV9zaGEyNTYYASABKAkiIQoPTGF3VmVyc2lvbkNsYWltEg4KBnNlbXZlchgBIAEoCSLgAgoRTGF3VmVyc2lvbldhcm5pbmcSKQoDbGF3GAEgASgLMhwubm9tb3Mua2VybmVsLnYxLkxhd0lkZW50aXR5Ei8KBW9yZGVyGAIgASgOMiAubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25PcmRlchI5Cg9pbnN0YWxsZWRfY2xhaW0YAyABKAsyIC5ub21vcy5rZXJuZWwudjEuTGF3VmVyc2lvbkNsYWltEjYKEWluc3RhbGxlZF92ZXJzaW9uGAQgASgLMhsubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb24SNgoMc2VydmVkX2NsYWltGAUgASgLMiAubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25DbGFpbRIzCg5zZXJ2ZWRfdmVyc2lvbhgGIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5MYXdWZXJzaW9uEg8KB21lc3NhZ2UYByABKAkiUgoQT2ZmZXJTdGF0ZUNoYW5nZRITCgtwYXJlbnRfaGVhZBgBIAEoCRIXCg9hZ2dyZWdhdGVfdHlwZXMYAiADKAkSEAoIYXJjaGl2ZXMYAyABKAgiLQoRT2ZmZXJBZ2dyZWdhdGVSZWYSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCSIwCg1Cb3JuV29ya3NwYWNlEhEKCXdvcmtzcGFjZRgBIAEoCRIMCgRoZWFkGAIgASgJIssDCgxCaXJ0aE91dGNvbWUSFgoJd29ya3NwYWNlGAEgASgJSACIAQESMwoGc3RhdHVzGAIgASgOMiMubm9tb3Mua2VybmVsLnYxLkJpcnRoT3V0Y29tZVN0YXR1cxITCgZyZWFzb24YAyABKAlIAYgBARIRCgRjb2RlGAQgASgJSAKIAQESEAoIcmVwbGF5ZWQYBSABKAgSFQoIbGF3X2hhc2gYBiABKAlIA4gBARIdChBwYXJlbnRfd29ya3NwYWNlGAcgASgJSASIAQESHAoPY2hpbGRfd29ya3NwYWNlGAggASgJSAWIAQESJwoaY2VydGlmaWNhdGVfcmVmdXNhbF9yZWFzb24YCSABKAlIBogBARI0CgdyZWZ1c2FsGAogASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxIB4gBAUIMCgpfd29ya3NwYWNlQgkKB19yZWFzb25CBwoFX2NvZGVCCwoJX2xhd19oYXNoQhMKEV9wYXJlbnRfd29ya3NwYWNlQhIKEF9jaGlsZF93b3Jrc3BhY2VCHQobX2NlcnRpZmljYXRlX3JlZnVzYWxfcmVhc29uQgoKCF9yZWZ1c2FsIi8KEEtlcm5lbFNwYW5NZXRyaWMSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoBCKjAQoKS2VybmVsU3BhbhINCgVsYWJlbBgBIAEoCRIQCgh0b3RhbF91cxgCIAEoBBIPCgdyZWNvcmRzGAMgASgEEjEKBnBoYXNlcxgEIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuTWV0cmljEjAKBW5vdGVzGAUgAygLMiEubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5NZXRyaWMicQoLS2VybmVsU3BhbnMSLwoKb3BlcmF0aW9ucxgBIAMoCzIbLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuEjEKBmVuZ2luZRgCIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuTWV0cmljImEKDURvbWFpblJlZnVzYWwSEgoKbGF3X3NoYTI1NhgBIAEoDBIRCglpbnZhcmlhbnQYAiABKAkSFQoNdHlwZV9pZGVudGl0eRgDIAEoCRISCgp2YWx1ZV91c2RhGAQgASgMIs4BCgxPZmZlclJlZnVzZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIvCgdyZWZ1c2FsGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWwSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSNgoOZG9tYWluX3JlZnVzYWwYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuRG9tYWluUmVmdXNhbEILCglfb2ZmZXJfaWQiegoRT2ZmZXJEZWFkTGV0dGVyZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZyZWFzb24YAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIq4BChBPZmZlclF1YXJhbnRpbmVkEhUKCG9mZmVyX2lkGAEgASgJSACIAQESGQoRYXV0aG9yZWRfbGF3X2hhc2gYAiABKAkSGAoQY3VycmVudF9sYXdfaGFzaBgDIAEoCRIOCgZyZWFzb24YBCABKAkSMQoLZGlhZ25vc3RpY3MYBSABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIsABChhPZmZlckJsb2NrZWRPbkRlcGVuZGVuY3kSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZkZXRhaWwYAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSPQoSYXdhaXRzX21haW50ZW5hbmNlGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlYWRJbmRleFBlbmRpbmdCCwoJX29mZmVyX2lkIr8BCg1PZmZlclByZXBhcmVkEhwKFGF1dGhvcmVkX2NoYW5nZV91c2RhGAEgASgMEhkKEXdvcmtzcGFjZV9iaW5kaW5nGAIgASgJEhgKEHByZXBhcmVkX2F0X2hlYWQYAyABKAkSIQoZYXV0aG9yX3NpZ25hdHVyZV9yZXF1aXJlZBgEIAEoCBI4CghkZXRhY2hlZBgFIAEoCzImLm5vbW9zLmtlcm5lbC52MS5EZXRhY2hlZFNpZ25pbmdJbnB1dHMiYwoVRGV0YWNoZWRTaWduaW5nSW5wdXRzEhIKCnB1YmxpY19rZXkYASABKAwSEQoJaW50ZW50X2lkGAIgASgJEg4KBmF1dGhvchgDIAEoDBITCgtvZmZlcl90b2tlbhgEIAEoCSKVAQoURGV0YWNoZWRTaWduZWRDaGFuZ2USHAoUYXV0aG9yZWRfY2hhbmdlX3VzZGEYASABKAwSEgoKcHVibGljX2tleRgCIAEoDBIYChBhdXRob3Jfc2lnbmF0dXJlGAMgASgMEhIKCm9mZmVyX2Jhc2UYBCABKAkSHQoVb2ZmZXJfdG9rZW5fc2lnbmF0dXJlGAUgASgMImoKGFNpZ25QcmVwYXJlZE9mZmVyUmVxdWVzdBIcChRhdXRob3JlZF9jaGFuZ2VfdXNkYRgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIVCg1hdXRob3Jfc2VjcmV0GAMgASgMIjcKGVNpZ25QcmVwYXJlZE9mZmVyUmVzcG9uc2USGgoSc2lnbmVkX2NoYW5nZV91c2RhGAEgASgMIq0BChlQcmVwYXJlUmVtb3RlT2ZmZXJSZXF1ZXN0EhUKDW9mZmVyX3JlcXVlc3QYASABKAwSGQoRd29ya3NwYWNlX2JpbmRpbmcYAiABKAkSGAoQcHJlcGFyZWRfYXRfaGVhZBgDIAEoCRISCgpwdWJsaWNfa2V5GAQgASgMEhEKCXNpZ25hdHVyZRgFIAEoDBIdChVyZXF1aXJlZF9jdXN0b2R5X2hlYWQYBiABKAkiUAoZT2ZmZXJQcmVwYXJhdGlvbkNoYWxsZW5nZRIZChF3b3Jrc3BhY2VfYmluZGluZxgBIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAIgASgJIpkBChpQcmVwYXJlUmVtb3RlT2ZmZXJSZXNwb25zZRI/CgljaGFsbGVuZ2UYASABKAsyKi5ub21vcy5rZXJuZWwudjEuT2ZmZXJQcmVwYXJhdGlvbkNoYWxsZW5nZUgAEi8KBW9mZmVyGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVzcG9uc2VIAEIJCgdvdXRjb21lIoABChtTaWduT2ZmZXJQcmVwYXJhdGlvblJlcXVlc3QSFQoNb2ZmZXJfcmVxdWVzdBgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAMgASgJEhUKDWF1dGhvcl9zZWNyZXQYBCABKAwiRQocU2lnbk9mZmVyUHJlcGFyYXRpb25SZXNwb25zZRISCgpwdWJsaWNfa2V5GAEgASgMEhEKCXNpZ25hdHVyZRgCIAEoDCKkAQoWU2lnbmluZ0lkZW50aXR5UmVxdWVzdBI7CghnZW5lcmF0ZRgBIAEoCzInLm5vbW9zLmtlcm5lbC52MS5HZW5lcmF0ZVNpZ25pbmdLZXlQYWlySAASQAoNZGVyaXZlX3B1YmxpYxgCIAEoCzInLm5vbW9zLmtlcm5lbC52MS5EZXJpdmVTaWduaW5nUHVibGljS2V5SABCCwoJb3BlcmF0aW9uIhgKFkdlbmVyYXRlU2lnbmluZ0tleVBhaXIiKAoWRGVyaXZlU2lnbmluZ1B1YmxpY0tleRIOCgZzZWNyZXQYASABKAwilgEKF1NpZ25pbmdJZGVudGl0eVJlc3BvbnNlEjQKCWdlbmVyYXRlZBgBIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5TaWduaW5nS2V5UGFpckgAEjsKDmRlcml2ZWRfcHVibGljGAIgASgLMiEubm9tb3Mua2VybmVsLnYxLlNpZ25pbmdQdWJsaWNLZXlIAEIICgZyZXN1bHQiNAoOU2lnbmluZ0tleVBhaXISDgoGc2VjcmV0GAEgASgMEhIKCnB1YmxpY19rZXkYAiABKAwiJgoQU2lnbmluZ1B1YmxpY0tleRISCgpwdWJsaWNfa2V5GAEgASgMIpwBCh9TaWduQXV0aG9yaXR5QXR0ZXN0YXRpb25SZXF1ZXN0EhUKDXNpZ25lcl9zZWNyZXQYASABKAwSGgoSYXNzZXJ0ZXJfd29ya3NwYWNlGAIgASgJEg4KBm9iamVjdBgDIAEoCRIQCghyZWxhdGlvbhgEIAEoCRIPCgdzdWJqZWN0GAUgASgJEhMKC2F0dGVzdGVkX2F0GAYgASgJIkkKIFNpZ25BdXRob3JpdHlBdHRlc3RhdGlvblJlc3BvbnNlEhEKCXNpZ25hdHVyZRgBIAEoDBISCgpwdWJsaWNfa2V5GAIgASgMIkQKEk1pbnRUeXBlZElkUmVxdWVzdBIQCgh0eXBlX3RhZxgBIAEoCRIcChRjYXB0dXJlZF91bml4X21pbGxpcxgCIAEoBCIhChNNaW50VHlwZWRJZFJlc3BvbnNlEgoKAmlkGAEgASgJIhsKGUVuY3J5cHRpb25JZGVudGl0eVJlcXVlc3QiRAoaRW5jcnlwdGlvbklkZW50aXR5UmVzcG9uc2USEgoKc2VjcmV0X2tleRgBIAEoDBISCgpwdWJsaWNfa2V5GAIgASgMIkYKE1dyYXBTY29wZUtleVJlcXVlc3QSHAoUcmVjaXBpZW50X3B1YmxpY19rZXkYASABKAwSEQoJc2NvcGVfa2V5GAIgASgMIkgKFFdyYXBTY29wZUtleVJlc3BvbnNlEhwKFGVwaGVtZXJhbF9wdWJsaWNfa2V5GAEgASgMEhIKCmNpcGhlcnRleHQYAiABKAwiZwoVVW53cmFwU2NvcGVLZXlSZXF1ZXN0EhwKFHJlY2lwaWVudF9zZWNyZXRfa2V5GAEgASgMEhwKFGVwaGVtZXJhbF9wdWJsaWNfa2V5GAIgASgMEhIKCmNpcGhlcnRleHQYAyABKAwiKwoWVW53cmFwU2NvcGVLZXlSZXNwb25zZRIRCglzY29wZV9rZXkYASABKAwikwEKDUtlcm5lbFJlZnVzYWwSMAoEY29kZRgBIAEoDjIiLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsQ29kZRIPCgdtZXNzYWdlGAIgASgJEi0KB2RldGFpbHMYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEAoIdGVybWluYWwYBCABKAgi/A8KDVF1ZXJ5UmVzcG9uc2USFQoLcmVzdWx0X3VzZGEYAiABKAxIABIsCgV2YWx1ZRgBIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlSAASSgoTYXV0aG9yaXphdGlvbl9jaGVjaxgKIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZUgAEkwKFGF1dGhvcml6YXRpb25fZXhwYW5kGAsgASgLMiwubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBhbmRSZXNwb25zZUgAEj4KDW9zZ2lfcmVzb3VyY2UYDCABKAsyJS5ub21vcy5rZXJuZWwudjEuT3NnaVJlc291cmNlUmVzcG9uc2VIABJKChNmcm9udGllcl90cmFuc2l0aW9uGA0gASgLMisubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlSAASSwoUb3duZWRfZGV2aWNlX3JlcXVlc3QYDiABKAsyKy5ub21vcy5rZXJuZWwudjEuT3duZWREZXZpY2VSZXF1ZXN0UmVzcG9uc2VIABJPChZvd25lZF9wcmVwYXJlX2FwcHJvdmFsGA8gASgLMi0ubm9tb3Mua2VybmVsLnYxLk93bmVkUHJlcGFyZUFwcHJvdmFsUmVzcG9uc2VIABIXCg1pbnRlZ2VyX3ZhbHVlGBAgASgSSAASUAoWYXV0aGVudGljYXRpb25fcG9zdHVyZRgRIAEoCzIuLm5vbW9zLmtlcm5lbC52MS5BdXRoZW50aWNhdGlvblBvc3R1cmVSZXNwb25zZUgAEkgKEGNoaWxkX3dvcmtzcGFjZXMYEiABKAsyLC5ub21vcy5rZXJuZWwudjEuQ2hpbGRXb3Jrc3BhY2VRdWVyeVJlc3BvbnNlSAASWQoWYXV0aG9yaW5nX3JlcXVpcmVtZW50cxgTIAEoCzI3Lm5vbW9zLmtlcm5lbC52MS5EaXJlY3RpdmVBdXRob3JpbmdSZXF1aXJlbWVudHNSZXNwb25zZUgAEj4KDXdhcm1fcHJvZ3Jlc3MYFSABKAsyJS5ub21vcy5rZXJuZWwudjEuV2FybVByb2dyZXNzUmVzcG9uc2VIABJVChlpZGVudGl0eV9wcm92aWRlcl93aXRuZXNzGBYgASgLMjAubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzUmVzcG9uc2VIABJSChdpbnRlcmZhY2VfY29tcGF0aWJpbGl0eRgXIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVzcG9uc2VIABIyChJhcHBsaWNhdGlvbl9yZXN1bHQYGCABKAsyFC5nb29nbGUucHJvdG9idWYuQW55SAASSgoTbWFpbnRlbmFuY2VfcXVhbnR1bRgZIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5NYWludGVuYW5jZVF1YW50dW1SZXNwb25zZUgAEj8KEnJlYWRfaW5kZXhfcGVuZGluZxgaIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZWFkSW5kZXhQZW5kaW5nSAASRwoSZnVsbF9oaXN0b3J5X2F1ZGl0GBsgASgLMikubm9tb3Mua2VybmVsLnYxLkZ1bGxIaXN0b3J5QXVkaXRSZXNwb25zZUgAElMKGHdvcmtzcGFjZV9lZmZlY3RfcmVjZWlwdBgcIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UmVzcG9uc2VIABJLChRvcGVuX2FwaV9kZXNjcmlwdGlvbhgdIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5PcGVuQXBpRGVzY3JpcHRpb25SZXNwb25zZUgAElcKGmluc3RhbGxlZF9sYXdfZGVjbGFyYXRpb25zGB4gASgLMjEubm9tb3Mua2VybmVsLnYxLkluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1Jlc3BvbnNlSAASSwoYYXBwbGljYXRpb25fcmVzdWx0X2RlbHRhGB8gASgLMicubm9tb3Mua2VybmVsLnYxLkFwcGxpY2F0aW9uUmVzdWx0RGVsdGFIABJJChh2ZXJpZnlfY2hhaW5fZGlhZ25vc3RpY3MYFCABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcxIcCg9yZXN1bHRfZnJvbnRpZXIYICABKAlIAYgBARJCChJmdWxsX3Jlc3VsdF9yZWFzb24YISABKA4yIS5ub21vcy5rZXJuZWwudjEuRnVsbFJlc3VsdFJlYXNvbkgCiAEBEkMKE3Jlc3VsdF9kZXBlbmRlbmNpZXMYIiABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVhZERlcGVuZGVuY2llc0gDiAEBEkAKEXJlYWRfaW5kZXhfYmVoaW5kGCMgASgLMiAubm9tb3Mua2VybmVsLnYxLlJlYWRJbmRleEJlaGluZEgEiAEBQggKBnJlc3VsdEISChBfcmVzdWx0X2Zyb250aWVyQhUKE19mdWxsX3Jlc3VsdF9yZWFzb25CFgoUX3Jlc3VsdF9kZXBlbmRlbmNpZXNCFAoSX3JlYWRfaW5kZXhfYmVoaW5kIoABCg9SZWFkSW5kZXhCZWhpbmQSEQoJd29ya3NwYWNlGAEgASgJEg4KBmJyYW5jaBgCIAEoCRIXCg9zZXJ2ZWRfZnJvbnRpZXIYAyABKAkSGgoScmVxdWVzdGVkX2Zyb250aWVyGAQgASgJEhUKDXN1Y2Nlc3Nvcl9sYXcYBSABKAgiVAoQUmVhZERlcGVuZGVuY2llcxIXCg9hZ2dyZWdhdGVfdHlwZXMYASADKAkSFgoOcmVhZHNfYXJjaGl2ZXMYAiABKAgSDwoHcmVhZF9hdBgDIAEoCSKCAQoWQXBwbGljYXRpb25SZXN1bHREZWx0YRIVCg1iYXNlX2Zyb250aWVyGAEgASgJEhAKCGZyb250aWVyGAIgASgJEioKDGNoYW5nZWRfcm93cxgDIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnkSEwoLcmVtb3ZlZF9pZHMYBCADKAkiMwoaT3BlbkFwaURlc2NyaXB0aW9uUmVzcG9uc2USFQoNZG9jdW1lbnRfanNvbhgBIAEoCSJxChtJbnRlcmZhY2VDb21wYXRpYmlsaXR5UXVlcnkSHwoXYXBwbGljYXRpb25fbWF0cml4X3VzZGEYASABKAwSMQoPY2FuZGlkYXRlX3VuaXRzGAIgAygLMhgubm9tb3Mua2VybmVsLnYxLkxhd1VuaXQisAIKFkludGVyZmFjZU1lbWJlclZlcmRpY3QSDgoGZG9tYWluGAEgASgJEjIKBGtpbmQYAiABKA4yJC5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlTWVtYmVyS2luZBIOCgZtZW1iZXIYAyABKAkSEgoFZmllbGQYBCABKAlIAIgBARI9CgZzdGF0dXMYBSABKA4yLS5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVN0YXR1cxI9CgZyZWFzb24YBiABKA4yLS5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVJlYXNvbhIXCgpkaWFnbm9zdGljGAcgASgJSAGIAQFCCAoGX2ZpZWxkQg0KC19kaWFnbm9zdGljIqIBCh5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVzcG9uc2USEgoKY29tcGF0aWJsZRgBIAEoCBI4CgdtZW1iZXJzGAIgAygLMicubm9tb3Mua2VybmVsLnYxLkludGVyZmFjZU1lbWJlclZlcmRpY3QSGgoSd29ya3NwYWNlX2Zyb250aWVyGAMgASgJEhYKDmNhbmRpZGF0ZV9oYXNoGAQgASgJIv8BChRXYXJtUHJvZ3Jlc3NSZXNwb25zZRIbChNtYWludGVuYW5jZV9wZW5kaW5nGAEgASgIEiQKF3ByZXBhcmVkX2NvbW1hbmRfZG9tYWluGAIgASgJSACIAQESJQoYcHJlcGFyZWRfY29tbWFuZF9wYWNrYWdlGAMgASgJSAGIAQESJgoZcHJlcGFyZWRfY29tbWFuZF9zZWxlY3RvchgEIAEoCUgCiAEBQhoKGF9wcmVwYXJlZF9jb21tYW5kX2RvbWFpbkIbChlfcHJlcGFyZWRfY29tbWFuZF9wYWNrYWdlQhwKGl9wcmVwYXJlZF9jb21tYW5kX3NlbGVjdG9yImwKEFJlYWRJbmRleFBlbmRpbmcSEQoJd29ya3NwYWNlGAEgASgJEg4KBmJyYW5jaBgCIAEoCRIaChJyZXF1ZXN0ZWRfZnJvbnRpZXIYAyABKAkSGQoRbGFzdF9yZWFkeV9hYnNlbnQYBCABKAki6AIKF01haW50ZW5hbmNlUXVhbnR1bVF1ZXJ5Eh0KEHJlcXVlc3RlZF9kb21haW4YASABKAlIAIgBARIeChFyZXF1ZXN0ZWRfcGFja2FnZRgCIAEoCUgBiAEBEiAKE3JlcXVlc3RlZF9kaXJlY3RpdmUYAyABKAlIAogBARIXCg9sb2NhbF9yZWFkX29ubHkYBCABKAgSHAoUbWFpbnRhaW5fZ2l0X2N1c3RvZHkYBSABKAgSFwoPcmVhZF9pbmRleF9vbmx5GAYgASgIEiQKHG1haW50YWluX2FkZHJlc3NlZF9mcm9udGllcnMYByABKAgSGAoQZmx1c2hfZHVyYWJpbGl0eRgIIAEoCBIZChFsb2NhbF93cml0ZV9idXJzdBgJIAEoCEITChFfcmVxdWVzdGVkX2RvbWFpbkIUChJfcmVxdWVzdGVkX3BhY2thZ2VCFgoUX3JlcXVlc3RlZF9kaXJlY3RpdmUiogQKGk1haW50ZW5hbmNlUXVhbnR1bVJlc3BvbnNlEhEKCXdvcmtzcGFjZRgBIAEoCRIbChNtYWludGVuYW5jZV9wZW5kaW5nGAIgASgIEjAKBXBoYXNlGAMgASgOMiEubm9tb3Mua2VybmVsLnYxLk1haW50ZW5hbmNlUGhhc2USGQoMZ2l0X2Zyb250aWVyGAQgASgJSACIAQESGgoNcmVhZF9mcm9udGllchgFIAEoCUgBiAEBEhwKD3NxbGl0ZV9mcm9udGllchgGIAEoCUgCiAEBEhIKCndvcmtfdW5pdHMYByABKAQSFgoOZWxhcHNlZF9taWNyb3MYCCABKAQSJAoXcHJlcGFyZWRfY29tbWFuZF9kb21haW4YCSABKAlIA4gBARIlChhwcmVwYXJlZF9jb21tYW5kX3BhY2thZ2UYCiABKAlIBIgBARImChlwcmVwYXJlZF9jb21tYW5kX3NlbGVjdG9yGAsgASgJSAWIAQESHgoWbG9vc2VfY3VzdG9keV9wcmVzc3VyZRgMIAEoCEIPCg1fZ2l0X2Zyb250aWVyQhAKDl9yZWFkX2Zyb250aWVyQhIKEF9zcWxpdGVfZnJvbnRpZXJCGgoYX3ByZXBhcmVkX2NvbW1hbmRfZG9tYWluQhsKGV9wcmVwYXJlZF9jb21tYW5kX3BhY2thZ2VCHAoaX3ByZXBhcmVkX2NvbW1hbmRfc2VsZWN0b3IiSAoNT3NnaUF0dHJpYnV0ZRIMCgRuYW1lGAEgASgJEg0KBXZhbHVlGAIgASgJEhEKBHR5cGUYAyABKAlIAIgBAUIHCgVfdHlwZSIsCg1Pc2dpRGlyZWN0aXZlEgwKBG5hbWUYASABKAkSDQoFdmFsdWUYAiABKAkiiwEKDk9zZ2lDYXBhYmlsaXR5EhEKCW5hbWVzcGFjZRgBIAEoCRIyCgphdHRyaWJ1dGVzGAIgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lBdHRyaWJ1dGUSMgoKZGlyZWN0aXZlcxgDIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5Pc2dpRGlyZWN0aXZlIowBCg9Pc2dpUmVxdWlyZW1lbnQSEQoJbmFtZXNwYWNlGAEgASgJEjIKCmF0dHJpYnV0ZXMYAiADKAsyHi5ub21vcy5rZXJuZWwudjEuT3NnaUF0dHJpYnV0ZRIyCgpkaXJlY3RpdmVzGAMgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lEaXJlY3RpdmUimgEKFE9zZ2lSZXNvdXJjZVJlc3BvbnNlEhMKC3NvdXJjZV91c2RhGAEgASgMEjUKDGNhcGFiaWxpdGllcxgCIAMoCzIfLm5vbW9zLmtlcm5lbC52MS5Pc2dpQ2FwYWJpbGl0eRI2CgxyZXF1aXJlbWVudHMYAyADKAsyIC5ub21vcy5rZXJuZWwudjEuT3NnaVJlcXVpcmVtZW50IucBChNWZXJpZnlDaGFpblN0ZXBTcGFuEg0KBWluZGV4GAEgASgEEhIKCmNvbW1pdF9vaWQYAiABKAkSDgoGZG9tYWluGAMgASgJEhEKCWRpcmVjdGl2ZRgEIAEoCRIQCgh0b3RhbF91cxgFIAEoBBI2CgZwaGFzZXMYBiABKAsyJi5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5TdGVwUGhhc2VzEkAKDmVuZ2luZV90aW1pbmdzGAcgAygLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluRW5naW5lVGltaW5nIpgCChVWZXJpZnlDaGFpblN0ZXBQaGFzZXMSHgoWcnVudGltZV9sYXdfcmVmcmVzaF91cxgBIAEoBBITCgttYW5pZmVzdF91cxgCIAEoBBIZChFsYXdfcmVzb2x1dGlvbl91cxgDIAEoBBIdChVtYW5hZ2VkX3RyYW5zaXRpb25fdXMYBCABKAQSFAoMcHJpbmNpcGFsX3VzGAUgASgEEhQKDGV2b2x1dGlvbl91cxgGIAEoBBIaChJjb2xvY2F0ZWRfcmVhZHNfdXMYByABKAQSIQoZdHlwZWRfaW5zdGFsbF92ZXJpZmllcl91cxgIIAEoBBIUCgxhZG1pc3Npb25fdXMYCSABKAQSDwoHZm9sZF91cxgKIAEoBCLaBQoWVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcxIuCgR3YWxrGAEgASgOMiAubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluV2FsaxIQCgh0b3RhbF91cxgCIAEoBBIbChNyZWZlcmVuY2VfbG9va3VwX3VzGAMgASgEEhoKEnJlcG9zaXRvcnlfb3Blbl91cxgEIAEoBBIVCg1jaGFpbl9yZWFkX3VzGAUgASgEEhYKDmVuZ2luZV9pbml0X3VzGAYgASgEEhgKEHRpbWVsaW5lX3JlYWRfdXMYByABKAQSGAoQbGF3X2h5ZHJhdGlvbl91cxgIIAEoBBIbChNyZWNvdmVyeV9wcmVzY2FuX3VzGAkgASgEEhgKEGZvbGRfZnJvbnRpZXJfdXMYCiABKAQSMwoFc3RlcHMYCyADKAsyJC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5TdGVwU3BhbhJACg5lbmdpbmVfdGltaW5ncxgMIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkVuZ2luZVRpbWluZxJNChVsYXdfaHlkcmF0aW9uX3RpbWluZ3MYDSADKAsyLi5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5MYXdIeWRyYXRpb25UaW1pbmcSGQoRbGF3X2Nsb3N1cmVfY291bnQYDiABKAQSHgoWbGF3X2Nsb3N1cmVfY2FjaGVfaGl0cxgPIAEoBBIgChhsYXdfY2xvc3VyZV9jYWNoZV9taXNzZXMYECABKAQSEgoKc3RlcF9jb3VudBgRIAEoBBIVCg1zdGVwX3RvdGFsX3VzGBIgASgEEkEKEXN0ZXBfcGhhc2VfdG90YWxzGBMgASgLMiYubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFBoYXNlcxIaChJvbWl0dGVkX3N0ZXBfY291bnQYFCABKAQiOgoXVmVyaWZ5Q2hhaW5FbmdpbmVUaW1pbmcSDQoFcGhhc2UYASABKAkSEAoIdG90YWxfdXMYAiABKAQiQAodVmVyaWZ5Q2hhaW5MYXdIeWRyYXRpb25UaW1pbmcSDQoFcGhhc2UYASABKAkSEAoIdG90YWxfdXMYAiABKAQiqwEKFEh0dHBzRXhlY3V0aW9uUG9saWN5EjwKCXBsYWNlbWVudBgBIAEoDjIpLm5vbW9zLmtlcm5lbC52MS5FZmZlY3RFeGVjdXRpb25QbGFjZW1lbnQSQAoLY2FyZGluYWxpdHkYAiABKA4yKy5ub21vcy5rZXJuZWwudjEuRWZmZWN0RXhlY3V0aW9uQ2FyZGluYWxpdHkSEwoLbGF3X2Nsb3N1cmUYAyABKAkiWwoSSHR0cHNPdXRib3VuZFJvdXRlEgsKA3VybBgBIAEoCRI4CglleGVjdXRpb24YAiABKAsyJS5ub21vcy5rZXJuZWwudjEuSHR0cHNFeGVjdXRpb25Qb2xpY3kiKwoWV29ya3NwYWNlT3V0Ym91bmRSb3V0ZRIRCgl3b3Jrc3BhY2UYASABKAkihQIKFUNhcnJpZWRXb3Jrc3BhY2VPZmZlchIwCgZzb3VyY2UYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhUKDXNvdXJjZV9jb21taXQYAiABKAkSGQoRc291cmNlX29mZmVyX3BhdGgYAyABKAkSHAoUc291cmNlX2V2aWRlbmNlX3BhY2sYBSABKAwSIwobYWRtaXNzaW9uX2NoZWNrcG9pbnRfc2VjcmV0GAYgASgMEhUKDWVmZmVjdF9kaWdlc3QYByABKAkSIAoYc291cmNlX3dvcmtzcGFjZV9nZW5lc2lzGAggASgJSgQIBBAFUgZ0YXJnZXQizAQKDU91dGJvdW5kT2ZmZXISCgoCaWQYASABKAkSFwoLZGVzdGluYXRpb24YAiABKAlCAhgBEhQKDHNlYWxlZF9vZmZlchgDIAEoDBIUCgxjb250ZW50X3R5cGUYBCABKAkSGAoQc291cmNlX3dvcmtzcGFjZRgFIAEoCRIUCgxjdXN0b2R5X2hlYWQYBiABKAkSFwoPY2F1c2VkX2J5X29mZmVyGAcgASgJEhsKE3NjaGVkdWxlZF9hdF9taWxsaXMYCCABKAQSGgoSZGVhZGxpbmVfYXRfbWlsbGlzGAkgASgEEhQKDGN1c3RvZHlfcGF0aBgKIAEoCRITCgtjdXN0b2R5X29pZBgLIAEoCRIUCgxkZWxpdmVyeV9yZWYYDCABKAkSFQoNb2JsaWdhdGlvbl9pZBgNIAEoCRI6CgtodHRwc19yb3V0ZRgOIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5IdHRwc091dGJvdW5kUm91dGVIABJCCg93b3Jrc3BhY2Vfcm91dGUYDyABKAsyJy5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlT3V0Ym91bmRSb3V0ZUgAEhUKDXNvdXJjZV9jb21taXQYECABKAkSHAoUc291cmNlX2V2aWRlbmNlX3BhY2sYESABKAwSGQoRc291cmNlX29mZmVyX3BhdGgYEiABKAkSFQoNZWZmZWN0X2RpZ2VzdBgTIAEoCRIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYFCABKAlCBwoFcm91dGUi7gEKDk91dGJveFJlc3BvbnNlEi4KBm9mZmVycxgBIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5PdXRib3VuZE9mZmVyEh8KEm5leHRfZHVlX2F0X21pbGxpcxgCIAEoBEgAiAEBEi0KB2VudHJpZXMYAyADKAsyHC5ub21vcy5rZXJuZWwudjEuT3V0Ym94RW50cnkSFAoMd29ya19wZW5kaW5nGAQgASgIEhUKDWVudHJpZXNfdG90YWwYBSABKA0SGAoQZW50cmllc19wcmVwYXJlZBgGIAEoDUIVChNfbmV4dF9kdWVfYXRfbWlsbGlzIr0BCgtPdXRib3hFbnRyeRIKCgJpZBgBIAEoCRIZChFzb3VyY2Vfb2ZmZXJfcGF0aBgCIAEoCRI6CgtodHRwc19yb3V0ZRgDIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5IdHRwc091dGJvdW5kUm91dGVIABJCCg93b3Jrc3BhY2Vfcm91dGUYBCABKAsyJy5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlT3V0Ym91bmRSb3V0ZUgAQgcKBXJvdXRlIpQBChRQcmVwYXJlT3V0Ym91bmRPZmZlchIYChB0YXJnZXRfd29ya3NwYWNlGAEgASgJEhoKDXNvdXJjZV9jb21taXQYAiABKAlIAIgBARIeChFzb3VyY2Vfb2ZmZXJfcGF0aBgDIAEoCUgBiAEBQhAKDl9zb3VyY2VfY29tbWl0QhQKEl9zb3VyY2Vfb2ZmZXJfcGF0aCKJBQoMU3luY1Jlc3BvbnNlEhAKCGFkbWl0dGVkGAIgASgIEgwKBGhlYWQYAyABKAkSFgoOY2FuZGlkYXRlX2hlYWQYBCABKAkSHAoUYWRtaXR0ZWRfcmVtb3RlX2hlYWQYBSABKAkSHAoUcmVwbGF5ZWRfcmVtb3RlX2hlYWQYBiABKAkSPAoPYWRtaXR0ZWRfcmVtb3RlGAcgAygLMiMubm9tb3Mua2VybmVsLnYxLlN5bmNBZG1pdHRlZEludGVudBI8ChVyZW1vdGVfYmlydGhfb3V0Y29tZXMYCCADKAsyHS5ub21vcy5rZXJuZWwudjEuQmlydGhPdXRjb21lEjkKDnJlbW90ZV9yZWZ1c2FsGAkgASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZWZ1c2FsSACIAQESOwoOcmVwbGF5ZWRfbG9jYWwYCiADKAsyIy5ub21vcy5rZXJuZWwudjEuU3luY1JlcGxheWVkSW50ZW50EiAKGHNraXBwZWRfbG9jYWxfaW50ZW50X2lkcxgLIAMoCRI5Cg1yZWZ1c2VkX2xvY2FsGAwgAygLMiIubm9tb3Mua2VybmVsLnYxLlN5bmNSZWZ1c2VkSW50ZW50EkcKFGN1c3RvZHlfZGlzYWdyZWVtZW50GA0gASgLMiQubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlEaXNhZ3JlZW1lbnRIAYgBARIZChFwYXJrZWRfbG9jYWxfcmVmcxgOIAMoCRIWCg5yZXBsYXlfcGVuZGluZxgPIAEoCEIRCg9fcmVtb3RlX3JlZnVzYWxCFwoVX2N1c3RvZHlfZGlzYWdyZWVtZW50SgQIARACUgZyZXN1bHQiUQoTQ3VzdG9keURpc2FncmVlbWVudBISCgpsb2NhbF9oZWFkGAEgASgJEhYKDmNhbmRpZGF0ZV9oZWFkGAIgASgJEg4KBnJlYXNvbhgDIAEoCSJPChJTeW5jQWRtaXR0ZWRJbnRlbnQSEQoJaW50ZW50X2lkGAEgASgJEhgKEGNhbmRpZGF0ZV9jb21taXQYAiABKAkSDAoEaGVhZBgDIAEoCSJsChJTeW5jUmVwbGF5ZWRJbnRlbnQSEQoJaW50ZW50X2lkGAEgASgJEgwKBGhlYWQYAiABKAkSNQoOYmlydGhfb3V0Y29tZXMYAyADKAsyHS5ub21vcy5rZXJuZWwudjEuQmlydGhPdXRjb21lIqEBCgtTeW5jUmVmdXNhbBIWCglpbnRlbnRfaWQYASABKAlIAIgBARIOCgZyZWFzb24YAiABKAkSEQoEY29kZRgDIAEoCUgBiAEBEjQKB3JlZnVzYWwYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbEgCiAEBQgwKCl9pbnRlbnRfaWRCBwoFX2NvZGVCCgoIX3JlZnVzYWwijQEKEVN5bmNSZWZ1c2VkSW50ZW50EhEKCWludGVudF9pZBgBIAEoCRIOCgZyZWFzb24YAiABKAkSEwoLY2hhbmdlX3VzZGEYAyABKAwSNAoHcmVmdXNhbBgEIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsSACIAQFCCgoIX3JlZnVzYWwiQgoPV29ya3NwYWNlVGFyZ2V0EgwKBHJlcG8YASABKAkSEQoJd29ya3NwYWNlGAIgASgJEg4KBmJyYW5jaBgDIAEoCSJOCgtPcGVuUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Eg0KBXNwYW5zGAIgASgIIg4KDEdlbmVzaXNPZmZlciKjAQoNRGlyZWN0aXZlQ2FsbBIOCgZkb21haW4YASABKAkSEQoJZGlyZWN0aXZlGAIgASgJEicKCW9wZXJhdGlvbhgFIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnkSFgoOYXJndW1lbnRzX2pzb24YBiABKAlKBAgDEARKBAgEEAVSCWNhbGxfdXNkYVIHcGF5bG9hZFIObGVnYWN5X3BheWxvYWQi1gIKEEF1dGhvcmluZ09wdGlvbnMSDQoFYWN0b3IYASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIVCg1hdXRob3Jfc2VjcmV0GAMgASgMEh0KEHZhbGlkX2Zyb21fZXBvY2gYBCABKARIAIgBARIfChJwcmluY2lwYWxfdmVyaWZpZWQYBSABKAhIAYgBARILCgNybmcYBiADKAESGAoQZGVmZXJfcHJvamVjdGlvbhgHIAEoCBINCgVzcGFucxgIIAEoCBIPCgdkcnlfcnVuGAkgASgIEhAKCHNlcXVlbmNlGAogASgEEi0KBWNsb2NrGAsgASgLMh4ubm9tb3Mua2VybmVsLnYxLkNhcHR1cmVkQ2xvY2sSFAoMcHJlcGFyZV9vbmx5GAwgASgIQhMKEV92YWxpZF9mcm9tX2Vwb2NoQhUKE19wcmluY2lwYWxfdmVyaWZpZWQiSgoNQ2FwdHVyZWRDbG9jaxIXCg9waHlzaWNhbF9taWxsaXMYASABKAQSDwoHbG9naWNhbBgCIAEoDRIPCgdyZXBsaWNhGAMgASgEIsMDChBCaXJ0aENlcnRpZmljYXRlEg0KBWNoaWxkGAEgASgJEg8KB2ZvdW5kZXIYAiABKAkSEAoIdmVyaWZpZWQYAyABKAgSEgoKcGFyZW50X2tleRgEIAEoDBIRCglwYXJlbnRfaWQYBSABKAkSDQoFZXBvY2gYBiABKAMSEQoJc2lnbmF0dXJlGAcgASgMEhkKDHZlcmlmaWVkX3ZpYRgIIAEoCUgAiAEBEhYKCWlkcF90b2tlbhgJIAEoCUgBiAEBEhsKDmNhcHR1cmVkX2Nsb2NrGAogASgDSAKIAQESIQoUYXV0aF9wcm92aWRlcl9pc3N1ZXIYCyABKAlIA4gBARIfChJhdXRoX3Byb3ZpZGVyX2p3a3MYDCABKAlIBIgBARIjChZhdXRoX3Byb3ZpZGVyX2F1ZGllbmNlGA0gASgJSAWIAQFCDwoNX3ZlcmlmaWVkX3ZpYUIMCgpfaWRwX3Rva2VuQhEKD19jYXB0dXJlZF9jbG9ja0IXChVfYXV0aF9wcm92aWRlcl9pc3N1ZXJCFQoTX2F1dGhfcHJvdmlkZXJfandrc0IZChdfYXV0aF9wcm92aWRlcl9hdWRpZW5jZSJsChtTaWduQmlydGhDZXJ0aWZpY2F0ZVJlcXVlc3QSNgoLY2VydGlmaWNhdGUYASABKAsyIS5ub21vcy5rZXJuZWwudjEuQmlydGhDZXJ0aWZpY2F0ZRIVCg1zaWduZXJfc2VjcmV0GAIgASgMIlYKHFNpZ25CaXJ0aENlcnRpZmljYXRlUmVzcG9uc2USNgoLY2VydGlmaWNhdGUYASABKAsyIS5ub21vcy5rZXJuZWwudjEuQmlydGhDZXJ0aWZpY2F0ZSLsAgoUTW9kZWxMaWZlY3ljbGVJbnRlbnQSOwoJb3BlcmF0aW9uGAEgASgOMigubm9tb3Mua2VybmVsLnYxLk1vZGVsTGlmZWN5Y2xlT3BlcmF0aW9uEhQKDGluc3RhbGxlZF9ieRgCIAEoCRIXCgpzdXBlcnNlZGVzGAMgASgJSACIAQESRAoKdHJhbnNpdGlvbhgEIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25SZXNwb25zZUgBiAEBEhUKCHJlcGxhY2VzGAUgASgJSAKIAQESHgoRYWNjZXB0YW5jZV9yZWFzb24YBiABKAlIA4gBARIZCgxsYXdfaWRlbnRpdHkYByABKAlIBIgBAUINCgtfc3VwZXJzZWRlc0INCgtfdHJhbnNpdGlvbkILCglfcmVwbGFjZXNCFAoSX2FjY2VwdGFuY2VfcmVhc29uQg8KDV9sYXdfaWRlbnRpdHkiOwofSWRlbnRpdHlQcm92aWRlcldpdG5lc3NBZG9wdGlvbhIYChBzb3VyY2Vfd29ya3NwYWNlGAEgASgJIucHCgxPZmZlclJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIuCgRjYWxsGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLkRpcmVjdGl2ZUNhbGxIABIcChJzZWFsZWRfY2hhbmdlX3VzZGEYByABKAxIABJACg9tb2RlbF9saWZlY3ljbGUYDCABKAsyJS5ub21vcy5rZXJuZWwudjEuTW9kZWxMaWZlY3ljbGVJbnRlbnRIABJeCiJpZGVudGl0eV9wcm92aWRlcl93aXRuZXNzX2Fkb3B0aW9uGA0gASgLMjAubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzQWRvcHRpb25IABIwCgdnZW5lc2lzGA4gASgLMh0ubm9tb3Mua2VybmVsLnYxLkdlbmVzaXNPZmZlckgAEkkKF2NhcnJpZWRfd29ya3NwYWNlX29mZmVyGA8gASgLMiYubm9tb3Mua2VybmVsLnYxLkNhcnJpZWRXb3Jrc3BhY2VPZmZlckgAEjQKCXBsYWNlbWVudBgQIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5QbGFjZW1lbnRPZmZlckgAEkcKFmRldGFjaGVkX3NpZ25lZF9jaGFuZ2UYEiABKAsyJS5ub21vcy5rZXJuZWwudjEuRGV0YWNoZWRTaWduZWRDaGFuZ2VIABI0CglhdXRob3JpbmcYAyABKAsyIS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaW5nT3B0aW9ucxIQCghsYXdfdXNkehgEIAEoDBIzCgxhdHRlc3RhdGlvbnMYBSADKAsyHS5ub21vcy5rZXJuZWwudjEuQXR0ZXN0ZWRSZWFkEj0KEmNvbmZsaWN0X3NuYXBzaG90cxgGIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5Db25mbGljdFNuYXBzaG90EhoKEmV4ZWN1dGlvbl9sYXdfdXNkehgIIAEoDBIgChNjb250cm9sbGVyX2xhd19oYXNoGAkgASgJSAGIAQESHQoQY2FuZGlkYXRlX2NvbW1pdBgKIAEoCUgCiAEBEjwKEWJpcnRoX2NlcnRpZmljYXRlGAsgASgLMiEubm9tb3Mua2VybmVsLnYxLkJpcnRoQ2VydGlmaWNhdGUSKwoJbGF3X3VuaXRzGBEgAygLMhgubm9tb3Mua2VybmVsLnYxLkxhd1VuaXRCCAoGaW50ZW50QhYKFF9jb250cm9sbGVyX2xhd19oYXNoQhMKEV9jYW5kaWRhdGVfY29tbWl0IjYKB0xhd1VuaXQSKwoFZmlsZXMYASADKAsyHC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdEZpbGUiLAoLTGF3VW5pdEZpbGUSDAoEcGF0aBgBIAEoCRIPCgdjb250ZW50GAIgASgMIsUBCgxBdHRlc3RlZFJlYWQSEAoIcXVlcnlfaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EisKBnJlc3VsdBgDIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlEjIKCGV2aWRlbmNlGAUgASgLMiAubm9tb3Mua2VybmVsLnYxLlJlYWRBdHRlc3RhdGlvbkoECAQQBVILYXR0ZXN0YXRpb24i1QEKD1JlYWRBdHRlc3RhdGlvbhIPCgd2ZXJzaW9uGAEgASgDEhgKEHNvdXJjZV93b3Jrc3BhY2UYAiABKAkSFgoOc291cmNlX2dlbmVzaXMYAyABKAkSEwoLc291cmNlX2hlYWQYBCABKAkSEQoJZm9sZF9yb290GAUgASgJEhQKDHNvdXJjZV9lcG9jaBgGIAEoAxIaChJhdHRlc3RlZF9hdF9taWxsaXMYByABKAMSEgoKcHVibGljX2tleRgIIAEoDBIRCglzaWduYXR1cmUYCSABKAwidQoQQ29uZmxpY3RTbmFwc2hvdBIWCg5hZ2dyZWdhdGVfdHlwZRgBIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAiABKAkSDQoFZmllbGQYAyABKAkSFQoNdGFyZ2V0X3NjaGVtYRgEIAEoCRINCgV0b2tlbhgFIAEoCSKqDwoMUXVlcnlSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSMgoJYXV0aG9yaXR5GAIgASgLMh8ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5QXV0aG9yaXR5Eg0KBXNwYW5zGAMgASgIEjkKDXJlc3VsdF9mb3JtYXQYBCABKA4yIi5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXN1bHRGb3JtYXQSGAoQc2VydmVfbGFzdF9yZWFkeRgFIAEoCBIqCgRyb3dzGAogASgLMhoubm9tb3Mua2VybmVsLnYxLlJvd3NRdWVyeUgAEioKBHBhZ2UYCyABKAsyGi5ub21vcy5rZXJuZWwudjEuUGFnZVF1ZXJ5SAASKwoFYnlfaWQYDCABKAsyGi5ub21vcy5rZXJuZWwudjEuQnlJZFF1ZXJ5SAASOQoMcmVzb2x2ZV9yZWZzGA0gASgLMiEubm9tb3Mua2VybmVsLnYxLlJlc29sdmVSZWZzUXVlcnlIABJFChJyZWZlcmVuY2VfdmVyc2lvbnMYDiABKAsyJy5ub21vcy5rZXJuZWwudjEuUmVmZXJlbmNlVmVyc2lvbnNRdWVyeUgAEiwKBWNvdW50GA8gASgLMhsubm9tb3Mua2VybmVsLnYxLlRhbGx5UXVlcnlIABIqCgNzdW0YECABKAsyGy5ub21vcy5rZXJuZWwudjEuVGFsbHlRdWVyeUgAEjAKB3NwYXRpYWwYESABKAsyHS5ub21vcy5rZXJuZWwudjEuU3BhdGlhbFF1ZXJ5SAASLAoFbmFtZWQYEiABKAsyGy5ub21vcy5rZXJuZWwudjEuTmFtZWRRdWVyeUgAEkkKE2F1dGhvcml6YXRpb25fY2hlY2sYEyABKAsyKi5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNoZWNrUmVxdWVzdEgAEksKFGF1dGhvcml6YXRpb25fZXhwYW5kGBQgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBhbmRSZXF1ZXN0SAASSQoTZnJvbnRpZXJfdHJhbnNpdGlvbhgVIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25SZXF1ZXN0SAASLwoHYnlfdHlwZRgWIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5CeVR5cGVRdWVyeUgAEkgKFG93bmVkX2RldmljZV9yZXF1ZXN0GBcgASgLMigubm9tb3Mua2VybmVsLnYxLk93bmVkRGV2aWNlUmVxdWVzdFF1ZXJ5SAASTAoWb3duZWRfcHJlcGFyZV9hcHByb3ZhbBgYIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5Pd25lZFByZXBhcmVBcHByb3ZhbFF1ZXJ5SAASQwoRcGVuZGluZ19jb25mbGljdHMYGSABKAsyJi5ub21vcy5rZXJuZWwudjEuUGVuZGluZ0NvbmZsaWN0c1F1ZXJ5SAASUAoYcGVuZGluZ19jb25mbGljdF9zdW1tYXJ5GBogASgLMiwubm9tb3Mua2VybmVsLnYxLlBlbmRpbmdDb25mbGljdFN1bW1hcnlRdWVyeUgAEk0KFmF1dGhlbnRpY2F0aW9uX3Bvc3R1cmUYGyABKAsyKy5ub21vcy5rZXJuZWwudjEuQXV0aGVudGljYXRpb25Qb3N0dXJlUXVlcnlIABJAChBjaGlsZF93b3Jrc3BhY2VzGBwgASgLMiQubm9tb3Mua2VybmVsLnYxLkNoaWxkV29ya3NwYWNlUXVlcnlIABJWChZhdXRob3JpbmdfcmVxdWlyZW1lbnRzGB0gASgLMjQubm9tb3Mua2VybmVsLnYxLkRpcmVjdGl2ZUF1dGhvcmluZ1JlcXVpcmVtZW50c1F1ZXJ5SAASUgoZaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzcxgeIAEoCzItLm5vbW9zLmtlcm5lbC52MS5JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1F1ZXJ5SAASTwoXaW50ZXJmYWNlX2NvbXBhdGliaWxpdHkYHyABKAsyLC5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVF1ZXJ5SAASRwoTbWFpbnRlbmFuY2VfcXVhbnR1bRggIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5NYWludGVuYW5jZVF1YW50dW1RdWVyeUgAEkQKEmZ1bGxfaGlzdG9yeV9hdWRpdBghIAEoCzImLm5vbW9zLmtlcm5lbC52MS5GdWxsSGlzdG9yeUF1ZGl0UXVlcnlIABJQChh3b3Jrc3BhY2VfZWZmZWN0X3JlY2VpcHQYIiABKAsyLC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0UmVjZWlwdFF1ZXJ5SAASVAoaaW5zdGFsbGVkX2xhd19kZWNsYXJhdGlvbnMYIyABKAsyLi5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3RGVjbGFyYXRpb25zUXVlcnlIAEIHCgVxdWVyeSJWChtXb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UXVlcnkSIAoYc291cmNlX3dvcmtzcGFjZV9nZW5lc2lzGAEgASgJEhUKDWVmZmVjdF9kaWdlc3QYAiABKAki5AEKHldvcmtzcGFjZUVmZmVjdFJlY2VpcHRSZXNwb25zZRIYChB0YXJnZXRfd29ya3NwYWNlGAEgASgJEiAKGHRhcmdldF93b3Jrc3BhY2VfZ2VuZXNpcxgCIAEoCRIVCg1vYnNlcnZlZF9oZWFkGAMgASgJEiAKGHNvdXJjZV93b3Jrc3BhY2VfZ2VuZXNpcxgEIAEoCRIVCg1lZmZlY3RfZGlnZXN0GAUgASgJEh8KEmFkbWl0dGVkX2ludGVudF9pZBgGIAEoCUgAiAEBQhUKE19hZG1pdHRlZF9pbnRlbnRfaWQiFwoVRnVsbEhpc3RvcnlBdWRpdFF1ZXJ5IrADChhGdWxsSGlzdG9yeUF1ZGl0UmVzcG9uc2USDQoFdmFsaWQYASABKAgSLgoEd2FsaxgCIAEoDjIgLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbldhbGsSEQoEaGVhZBgDIAEoCUgAiAEBEhQKB2ludGVudHMYBCABKARIAYgBARIYCgtwbGFuc19yZXJ1bhgFIAEoBEgCiAEBEhwKD2NvbnRyb2xsZXJfaGFzaBgGIAEoCUgDiAEBEhkKEWluc3RhbGxlZF9kb21haW5zGAcgAygJEhIKBWNoZWNrGAggASgJSASIAQESFQoIYXRfaW5kZXgYCSABKARIBYgBARISCgVlcnJvchgKIAEoCUgGiAEBEjQKB3JlZnVzYWwYCyABKAsyHi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbEgHiAEBQgcKBV9oZWFkQgoKCF9pbnRlbnRzQg4KDF9wbGFuc19yZXJ1bkISChBfY29udHJvbGxlcl9oYXNoQggKBl9jaGVja0ILCglfYXRfaW5kZXhCCAoGX2Vycm9yQgoKCF9yZWZ1c2FsIh4KHElkZW50aXR5UHJvdmlkZXJXaXRuZXNzUXVlcnkiiwIKGklkZW50aXR5UHJvdmlkZXJXaXRuZXNzS2V5Eg8KB29yZGluYWwYASABKAQSCwoDa3R5GAIgASgJEhAKA2tpZBgDIAEoCUgAiAEBEhAKA2FsZxgEIAEoCUgBiAEBEhAKA3VzZRgFIAEoCUgCiAEBEhAKA2NydhgGIAEoCUgDiAEBEg4KAXgYByABKAlIBIgBARIOCgF5GAggASgJSAWIAQESDgoBbhgJIAEoCUgGiAEBEg4KAWUYCiABKAlIB4gBARIPCgdrZXlfb3BzGAsgAygJQgYKBF9raWRCBgoEX2FsZ0IGCgRfdXNlQgYKBF9jcnZCBAoCX3hCBAoCX3lCBAoCX25CBAoCX2UiYwoiSWRlbnRpdHlQcm92aWRlcldpdG5lc3NDZXJ0aWZpY2F0ZRITCgtrZXlfb3JkaW5hbBgBIAEoBBIbChNjZXJ0aWZpY2F0ZV9vcmRpbmFsGAIgASgEEgsKA2RlchgDIAEoDCLFBAofSWRlbnRpdHlQcm92aWRlcldpdG5lc3NSZXNwb25zZRIYChBzb3VyY2Vfd29ya3NwYWNlGAEgASgJEhYKDnNvdXJjZV9nZW5lc2lzGAIgASgJEhMKC3NvdXJjZV9oZWFkGAMgASgJEg0KBWVwb2NoGAQgASgEEh8KEnByZWRlY2Vzc29yX3NoYTI1NhgFIAEoDEgAiAEBEg4KBmlzc3VlchgGIAEoCRIVCghhdWRpZW5jZRgHIAEoCUgBiAEBEhcKD3ByaW5jaXBhbF9jbGFpbRgIIAEoCRIhChRkZXZpY2VfYmluZGluZ19jbGFpbRgJIAEoCUgCiAEBEh4KFnJlcXVpcmVfZGV2aWNlX2JpbmRpbmcYCiABKAgSOQoEa2V5cxgLIAMoCzIrLm5vbW9zLmtlcm5lbC52MS5JZGVudGl0eVByb3ZpZGVyV2l0bmVzc0tleRJJCgxjZXJ0aWZpY2F0ZXMYDCADKAsyMy5ub21vcy5rZXJuZWwudjEuSWRlbnRpdHlQcm92aWRlcldpdG5lc3NDZXJ0aWZpY2F0ZRIXCg9tYXRlcmlhbF9zaGEyNTYYDSABKAwSMwoMYXR0ZXN0YXRpb25zGA8gAygLMh0ubm9tb3Mua2VybmVsLnYxLkF0dGVzdGVkUmVhZEIVChNfcHJlZGVjZXNzb3Jfc2hhMjU2QgsKCV9hdWRpZW5jZUIXChVfZGV2aWNlX2JpbmRpbmdfY2xhaW1KBAgOEA9SEXNvdXJjZV9wcm9vZl91c2RhIhUKE0NoaWxkV29ya3NwYWNlUXVlcnkikAEKGUNoaWxkV29ya3NwYWNlUXVlcnlSZWNvcmQSEQoJd29ya3NwYWNlGAEgASgJEj4KBnN0YXR1cxgCIAEoDjIuLm5vbW9zLmtlcm5lbC52MS5DaGlsZFdvcmtzcGFjZUxpZmVjeWNsZVN0YXR1cxIUCgdib3JuX2F0GAMgASgJSACIAQFCCgoIX2Jvcm5fYXQiWwobQ2hpbGRXb3Jrc3BhY2VRdWVyeVJlc3BvbnNlEjwKCGNoaWxkcmVuGAEgAygLMioubm9tb3Mua2VybmVsLnYxLkNoaWxkV29ya3NwYWNlUXVlcnlSZWNvcmQiHwodSW5zdGFsbGVkTGF3RGVjbGFyYXRpb25zUXVlcnkiNwoQSW5zdGFsbGVkTGF3VW5pdBIQCgh1bml0X2tleRgBIAEoCRIRCgl1bml0X2hhc2gYAiABKAkijAEKE0luc3RhbGxlZExhd1VuaXRTZXQSFAoMc2V0X2lkZW50aXR5GAEgASgJEhgKEGNvbXBvc2VyX3ZlcnNpb24YAiABKAkSEwoLb3BlbnVzZF9yZXYYAyABKAkSMAoFdW5pdHMYBCADKAsyIS5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3VW5pdCKBAgoeRGVjbGFyZWRBdXRoZW50aWNhdGlvblByb3ZpZGVyEg4KBmRvbWFpbhgBIAEoCRIOCgZtZW1iZXIYAiABKAkSOwoLbWVtYmVyX2tpbmQYAyABKA4yJi5ub21vcy5rZXJuZWwudjEuRGVjbGFyZWRMYXdNZW1iZXJLaW5kEkEKBGtpbmQYBCABKA4yMy5ub21vcy5rZXJuZWwudjEuRGVjbGFyZWRBdXRoZW50aWNhdGlvblByb3ZpZGVyS2luZBINCgVzY29wZRgFIAEoCRIcCg9pZGVudGl0eV9zaGEyNTYYBiABKAlIAIgBAUISChBfaWRlbnRpdHlfc2hhMjU2IukBCh9JbnN0YWxsZWRMYXdDbG9zdXJlRGVjbGFyYXRpb25zEhgKEGNsb3N1cmVfaWRlbnRpdHkYASABKAkSDwoHZG9tYWlucxgCIAMoCRI7Cgh1bml0X3NldBgDIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5JbnN0YWxsZWRMYXdVbml0U2V0SACIAQESUQoYYXV0aGVudGljYXRpb25fcHJvdmlkZXJzGAQgAygLMi8ubm9tb3Mua2VybmVsLnYxLkRlY2xhcmVkQXV0aGVudGljYXRpb25Qcm92aWRlckILCglfdW5pdF9zZXQidAogSW5zdGFsbGVkTGF3RGVjbGFyYXRpb25zUmVzcG9uc2USDAoEaGVhZBgBIAEoCRJCCghjbG9zdXJlcxgCIAMoCzIwLm5vbW9zLmtlcm5lbC52MS5JbnN0YWxsZWRMYXdDbG9zdXJlRGVjbGFyYXRpb25zIsoBCiNEaXJlY3RpdmVBdXRob3JpbmdSZXF1aXJlbWVudHNRdWVyeRIRCglkaXJlY3RpdmUYASABKAkSFgoJcHJpbmNpcGFsGAIgASgJSACIAQESFwoKcHVibGljX2tleRgDIAEoDEgBiAEBEhUKCGtleV9oYXNoGAQgASgJSAKIAQESEwoGZG9tYWluGAUgASgJSAOIAQFCDAoKX3ByaW5jaXBhbEINCgtfcHVibGljX2tleUILCglfa2V5X2hhc2hCCQoHX2RvbWFpbiKMAgomRGlyZWN0aXZlQXV0aG9yaW5nUmVxdWlyZW1lbnRzUmVzcG9uc2USDQoFZm91bmQYASABKAgSEwoGZG9tYWluGAIgASgJSACIAQESFQoIcmVsYXRpb24YAyABKAlIAYgBARITCgZvYmplY3QYBCABKAlIAogBARISCgVhY3RvchgFIAEoCUgDiAEBEhUKCGtleV9oYXNoGAYgASgJSASIAQESFwoPc2lnbmVyX2Vucm9sbGVkGAcgASgIEhQKDHJvbGVfYWxsb3dlZBgIIAEoCEIJCgdfZG9tYWluQgsKCV9yZWxhdGlvbkIJCgdfb2JqZWN0QggKBl9hY3RvckILCglfa2V5X2hhc2gicgoaQXV0aGVudGljYXRpb25Qb3N0dXJlUXVlcnkSHgoWaW5jbHVkZV9iaXJ0aF9ldmlkZW5jZRgBIAEoCBIeChFkZXZpY2VfcHVibGljX2tleRgCIAEoDEgAiAEBQhQKEl9kZXZpY2VfcHVibGljX2tleSLsAgodQXV0aGVudGljYXRpb25Qb3N0dXJlUmVzcG9uc2USSAoOcHJvdmlkZXJfdG9rZW4YASABKA4yMC5ub21vcy5rZXJuZWwudjEuUHJvdmlkZXJUb2tlblZlcmlmaWNhdGlvblN0YXR1cxIXCg9lbnJvbGxlZF9kZXZpY2UYAiABKAgSGgoScmVzb2x2ZWRfcHJpbmNpcGFsGAMgASgJEkQKDmJpcnRoX2V2aWRlbmNlGAQgASgLMicubm9tb3Mua2VybmVsLnYxLkJpcnRoRXZpZGVuY2VSZWFkaW5lc3NIAIgBARJBChRkZXZpY2Vfc2lnbmVyX3N0YXR1cxgFIAEoDjIjLm5vbW9zLmtlcm5lbC52MS5EZXZpY2VTaWduZXJTdGF0dXMSGgoSZGV2aWNlX2tleV9zdWJqZWN0GAYgASgJEhQKDHNpZ25lcl9lcG9jaBgHIAEoA0IRCg9fYmlydGhfZXZpZGVuY2UiXgoWQmlydGhFdmlkZW5jZVJlYWRpbmVzcxI0CgZzdGF0dXMYASABKA4yJC5ub21vcy5rZXJuZWwudjEuQmlydGhFdmlkZW5jZVN0YXR1cxIOCgZkZXRhaWwYAiABKAkiKAoXT3duZWREZXZpY2VSZXF1ZXN0UXVlcnkSDQoFc2NvcGUYASABKAkiMgoaT3duZWREZXZpY2VSZXF1ZXN0UmVzcG9uc2USFAoMcmVxdWVzdF91c2RhGAEgASgMIkAKGU93bmVkUHJlcGFyZUFwcHJvdmFsUXVlcnkSDQoFc2NvcGUYASABKAkSFAoMcmVxdWVzdF91c2RhGAIgASgMIr8BChxPd25lZFByZXBhcmVBcHByb3ZhbFJlc3BvbnNlEhcKD25ld19rZXlfc3ViamVjdBgBIAEoCRIaChJvd25lZF9jdXN0b2R5X3VzZGEYAiABKAwSFAoMdmVyaWZpZWRfdmlhGAMgASgJEhgKEHZhbGlkX2Zyb21fZXBvY2gYBCABKAQSHwoXYXBwcm92ZWRfYXRfdW5peF9taWxsaXMYBSABKAQSGQoRb3duZWRfa2V5X3N1YmplY3QYBiABKAkikgEKDlF1ZXJ5QXV0aG9yaXR5EhcKD3ByaW5jaXBhbF9jbGFpbRgBIAEoCRISCgphdXRoX3Rva2VuGAIgASgMEhAKCG5vd191bml4GAMgASgEEhUKDWF1dGhvcl9zZWNyZXQYBCABKAwSKgoEa2V5cxgFIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5JbmplY3RlZEtleSI4CgtJbmplY3RlZEtleRINCgVzY29wZRgBIAEoCRINCgVlcG9jaBgCIAEoBBILCgNrZXkYAyABKAwi2AEKCVJvd3NRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJcHJpbmNpcGFsGAMgASgJEhYKDmFyZ3VtZW50c191c2RhGAQgASgMEjMKFWFwcGxpY2F0aW9uX2FyZ3VtZW50cxgFIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnkSGwoOc2luY2VfZnJvbnRpZXIYBiABKAlIAIgBAUIRCg9fc2luY2VfZnJvbnRpZXIixgEKCVBhZ2VRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSDQoFbGltaXQYAyABKA0SDQoFYWZ0ZXIYBCABKAkSEQoJcHJpbmNpcGFsGAUgASgJEhYKDmFyZ3VtZW50c191c2RhGAYgASgMEjMKFWFwcGxpY2F0aW9uX2FyZ3VtZW50cxgHIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnkiTAoJQnlJZFF1ZXJ5EhYKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJEhQKDGFnZ3JlZ2F0ZV9pZBgCIAEoCRIRCglwcmluY2lwYWwYAyABKAkiOAoLQnlUeXBlUXVlcnkSFgoOYWdncmVnYXRlX3R5cGUYASABKAkSEQoJcHJpbmNpcGFsGAIgASgJIlwKCE5vbW9zUmVmEhEKCXdvcmtzcGFjZRgBIAEoCRIWCg5hZ2dyZWdhdGVfdHlwZRgCIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAyABKAkSDwoHdmVyc2lvbhgEIAEoCSJOChBSZXNvbHZlUmVmc1F1ZXJ5EicKBHJlZnMYASADKAsyGS5ub21vcy5rZXJuZWwudjEuTm9tb3NSZWYSEQoJcHJpbmNpcGFsGAIgASgJIk4KFlJlZmVyZW5jZVZlcnNpb25zUXVlcnkSNAoEcmVmcxgBIAMoCzImLm5vbW9zLmtlcm5lbC52MS5SZWZlcmVuY2VWZXJzaW9uQ2hlY2sihAEKFVJlZmVyZW5jZVZlcnNpb25DaGVjaxIpCgZwaW5uZWQYASABKAsyGS5ub21vcy5rZXJuZWwudjEuTm9tb3NSZWYSKQoGc2VyaWVzGAIgASgLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEhUKDWN1cnJlbnRfZmllbGQYAyABKAkiYgoKVGFsbHlRdWVyeRIKCgJpZBgBIAEoCRIRCglwcmluY2lwYWwYAyABKAkSFgoJZ3JvdXBfa2V5GAQgASgJSACIAQFCDAoKX2dyb3VwX2tleUoECAIQA1IJYXJndW1lbnRzInoKDFNwYXRpYWxRdWVyeRIKCgJpZBgBIAEoCRIRCglwcmluY2lwYWwYAyABKAkSDQoFbWluX3gYBCABKAESDQoFbWluX3kYBSABKAESDQoFbWF4X3gYBiABKAESDQoFbWF4X3kYByABKAFKBAgCEANSCWFyZ3VtZW50cyJaChVQZW5kaW5nQ29uZmxpY3RzUXVlcnkSGwoOYWdncmVnYXRlX3R5cGUYASABKAlIAIgBARIRCglwcmluY2lwYWwYAiABKAlCEQoPX2FnZ3JlZ2F0ZV90eXBlIjAKG1BlbmRpbmdDb25mbGljdFN1bW1hcnlRdWVyeRIRCglwcmluY2lwYWwYASABKAkicQoKTmFtZWRRdWVyeRIyCglvcGVyYXRpb24YASABKA4yHy5ub21vcy5rZXJuZWwudjEuUXVlcnlPcGVyYXRpb24SLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IuQBChlGcm9udGllclRyYW5zaXRpb25SZXF1ZXN0Eg4KBmRvbWFpbhgBIAEoCRIWCg5jYW5kaWRhdGVfaGFzaBgCIAEoCRIPCgdhdF9oYXNoGAMgASgJEiEKGWFja25vd2xlZGdlbWVudF9wcmluY2lwYWwYBCABKAkSIAoTcmVzdG9yZV9wcmV2aW91c19vZhgFIAEoCUgAiAEBEjEKD2NhbmRpZGF0ZV91bml0cxgGIAMoCzIYLm5vbW9zLmtlcm5lbC52MS5MYXdVbml0QhYKFF9yZXN0b3JlX3ByZXZpb3VzX29mIloKJUZyb250aWVyVHJhbnNpdGlvbkRpc3Bvc2l0aW9uTWFwRW50cnkSGAoQc291cmNlX3N0YWJsZV9pZBgBIAEoCRIXCg9hY2tub3dsZWRnZW1lbnQYAiABKAki9QEKHkZyb250aWVyVHJhbnNpdGlvbkRpc3Bvc2l0aW9ucxIPCgdyZXRpcmVkGAEgAygJEkcKB3JldHlwZWQYAiADKAsyNi5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uRGlzcG9zaXRpb25NYXBFbnRyeRJHCgdyZWJpbmRzGAMgAygLMjYubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvbkRpc3Bvc2l0aW9uTWFwRW50cnkSHAoPYWNrbm93bGVkZ2VkX2J5GAQgASgJSACIAQFCEgoQX2Fja25vd2xlZGdlZF9ieSI9ChtGcm9udGllclRyYW5zaXRpb25WaW9sYXRpb24SDgoGZG9tYWluGAEgASgJEg4KBmRldGFpbBgCIAEoCSLXAgoaRnJvbnRpZXJUcmFuc2l0aW9uUmVzcG9uc2USDwoHYXRfaGFzaBgBIAEoCRIZCgxjdXJyZW50X2hhc2gYAiABKAlIAIgBARIVCg1hdF9zdGF0ZV9yb290GAMgASgJEhYKDmNhbmRpZGF0ZV9oYXNoGAQgASgJEg4KBmRvbWFpbhgFIAEoCRIPCgdkb21haW5zGAYgAygJEg0KBXJlYWR5GAcgASgIEkAKCnZpb2xhdGlvbnMYCCADKAsyLC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uVmlvbGF0aW9uEkoKDGRpc3Bvc2l0aW9ucxgJIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbnNIAYgBAUIPCg1fY3VycmVudF9oYXNoQg8KDV9kaXNwb3NpdGlvbnMiLwoTQXV0aG9yaXphdGlvbk9iamVjdBIMCgR0eXBlGAEgASgJEgoKAmlkGAIgASgJIlQKFEF1dGhvcml6YXRpb25TdWJqZWN0EgwKBHR5cGUYASABKAkSCgoCaWQYAiABKAkSFQoIcmVsYXRpb24YAyABKAlIAIgBAUILCglfcmVsYXRpb24inAEKGFJlbGF0aW9uc2hpcFR1cGxlQWRkcmVzcxI2CghyZXNvdXJjZRgBIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uT2JqZWN0EhAKCHJlbGF0aW9uGAIgASgJEjYKB3N1YmplY3QYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvblN1YmplY3QigQEKGEF1dGhvcml6YXRpb25Db25zaXN0ZW5jeRIjChljdXJyZW50X3ZlcmlmaWVkX2Zyb250aWVyGAEgASgISAASGQoPYXRfbGVhc3RfY29tbWl0GAIgASgJSAASFgoMZXhhY3RfY29tbWl0GAMgASgJSABCDQoLcmVxdWlyZW1lbnQiZgodQXV0aG9yaXphdGlvbkNvbmRpdGlvbkNvbnRleHQSFAoMY29uZGl0aW9uX2lkGAEgASgJEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCL3AgoZQXV0aG9yaXphdGlvbkNoZWNrUmVxdWVzdBI2CghyZXNvdXJjZRgBIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uT2JqZWN0EhIKCnBlcm1pc3Npb24YAiABKAkSNgoHc3ViamVjdBgDIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uU3ViamVjdBI+Cgtjb25zaXN0ZW5jeRgEIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSPwoHY29udGV4dBgFIAMoCzIuLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uZGl0aW9uQ29udGV4dBIgChNleHBlY3RlZF9tb2RlbF9oYXNoGAYgASgJSACIAQESGwoTaW5jbHVkZV9leHBsYW5hdGlvbhgHIAEoCEIWChRfZXhwZWN0ZWRfbW9kZWxfaGFzaCLtAgoaQXV0aG9yaXphdGlvbkV4cGFuZFJlcXVlc3QSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBISCgpwZXJtaXNzaW9uGAIgASgJEj4KC2NvbnNpc3RlbmN5GAMgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25Db25zaXN0ZW5jeRI/Cgdjb250ZXh0GAQgAygLMi4ubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25Db25kaXRpb25Db250ZXh0EiAKE2V4cGVjdGVkX21vZGVsX2hhc2gYBSABKAlIAIgBARINCgVsaW1pdBgGIAEoDRISCgVhZnRlchgHIAEoCUgBiAEBEhsKE2luY2x1ZGVfZXhwbGFuYXRpb24YCCABKAhCFgoUX2V4cGVjdGVkX21vZGVsX2hhc2hCCAoGX2FmdGVyIr0BChlSZWxhdGlvbnNoaXBUdXBsZUV2aWRlbmNlEjgKBXR1cGxlGAEgASgLMikubm9tb3Mua2VybmVsLnYxLlJlbGF0aW9uc2hpcFR1cGxlQWRkcmVzcxIQCgh0dXBsZV9pZBgCIAEoCRIaChJhc3NlcnRpb25fZXZlbnRfaWQYAyABKAkSIAoTcmV2b2NhdGlvbl9ldmVudF9pZBgEIAEoCUgAiAEBQhYKFF9yZXZvY2F0aW9uX2V2ZW50X2lkIuEDChhBdXRob3JpemF0aW9uRXhwbGFuYXRpb24SRgoJb3BlcmF0aW9uGAEgASgOMjMubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbi5PcGVyYXRpb24SEAoIcmVsYXRpb24YAiABKAkSDgoGcmVzdWx0GAMgASgIEjwKCGV2aWRlbmNlGAQgAygLMioubm9tb3Mua2VybmVsLnYxLlJlbGF0aW9uc2hpcFR1cGxlRXZpZGVuY2USOwoIY2hpbGRyZW4YBSADKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uIt8BCglPcGVyYXRpb24SGQoVT1BFUkFUSU9OX1VOU1BFQ0lGSUVEEAASFAoQT1BFUkFUSU9OX0RJUkVDVBABEh4KGk9QRVJBVElPTl9DT01QVVRFRF9VU0VSU0VUEAISHgoaT1BFUkFUSU9OX1RVUExFX1RPX1VTRVJTRVQQAxITCg9PUEVSQVRJT05fVU5JT04QBBIaChZPUEVSQVRJT05fSU5URVJTRUNUSU9OEAUSFwoTT1BFUkFUSU9OX0VYQ0xVU0lPThAGEhcKE09QRVJBVElPTl9DT05ESVRJT04QByJ3ChpBdXRob3JpemF0aW9uRGVjaXNpb25CYXNpcxIgChhhdXRob3JpemF0aW9uX21vZGVsX2hhc2gYASABKAkSIQoZcmVsYXRpb25zaGlwX3N0YXRlX2NvbW1pdBgCIAEoCRIUCgxjb250ZXh0X2hhc2gYAyABKAwivgEKGkF1dGhvcml6YXRpb25DaGVja1Jlc3BvbnNlEg8KB2FsbG93ZWQYASABKAgSOgoFYmFzaXMYAiABKAsyKy5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkRlY2lzaW9uQmFzaXMSQwoLZXhwbGFuYXRpb24YAyABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uSACIAQFCDgoMX2V4cGxhbmF0aW9uIoMCChtBdXRob3JpemF0aW9uRXhwYW5kUmVzcG9uc2USNwoIc3ViamVjdHMYASADKAsyJS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvblN1YmplY3QSOgoFYmFzaXMYAiABKAsyKy5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkRlY2lzaW9uQmFzaXMSEQoEbmV4dBgDIAEoCUgAiAEBEkMKC2V4cGxhbmF0aW9uGAQgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbkgBiAEBQgcKBV9uZXh0Qg4KDF9leHBsYW5hdGlvbiKoAQoNT3V0Ym94UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Ei0KBWNsb2NrGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLkNhcHR1cmVkQ2xvY2sSNgoHcHJlcGFyZRgDIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5QcmVwYXJlT3V0Ym91bmRPZmZlciK2AQoLU3luY1JlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIRCglmcm9tX2Jhc2UYAiABKAkSDwoHdG9faGVhZBgDIAEoCRIaChJwYXJrX3JlZnVzZWRfbG9jYWwYBCABKAgSGAoQcGFya2VkX2F0X21pbGxpcxgFIAEoBBIbChNyZXBsYXlfb2ZmZXJfYnVkZ2V0GAYgASgNItMBChpLZXJuZWxDb25maWd1cmF0aW9uUmVxdWVzdBIdChV0cnVzdF9yb290X3B1YmxpY19rZXkYASABKAwSJQoYdHJ1c3RzX2N1c3RvZGlhbl9oaXN0b3J5GAIgASgISACIAQESIAoTZGVmZXJyZWRfZHVyYWJpbGl0eRgDIAEoCEgBiAEBEhgKEGhvc3RfY2FsbF9sZWRnZXIYBCABKAhCGwoZX3RydXN0c19jdXN0b2RpYW5faGlzdG9yeUIWChRfZGVmZXJyZWRfZHVyYWJpbGl0eSKAAQobS2VybmVsQ29uZmlndXJhdGlvblJlc3BvbnNlEi0KBnJlc3VsdBgBIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWQSHQoQaG9zdF9jYWxsX2xlZGdlchgCIAEoDUgAiAEBQhMKEV9ob3N0X2NhbGxfbGVkZ2VyIvMRCg5DdXN0b2R5UmVxdWVzdBI3CgpwYWNrX2RlbHRhGAogASgLMiEubm9tb3Mua2VybmVsLnYxLlBhY2tEZWx0YVJlcXVlc3RIABI3CgphcHBseV9wYWNrGAsgASgLMiEubm9tb3Mua2VybmVsLnYxLkFwcGx5UGFja1JlcXVlc3RIABI3CgpyZXBvX3N0YXRzGAwgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlcG9TdGF0c1JlcXVlc3RIABI9Cg1pbnRlbnRzX2Fib3ZlGA0gASgLMiQubm9tb3Mua2VybmVsLnYxLkludGVudHNBYm92ZVJlcXVlc3RIABI/Cg5pbnNwZWN0X2NoYW5nZRgOIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q2hhbmdlUmVxdWVzdEgAEk4KFmVuY29kZV9yZWZ1c2FsX3ZlcmRpY3QYDyABKAsyLC5ub21vcy5rZXJuZWwudjEuRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXF1ZXN0SAASUAoXaW5zcGVjdF9yZWZ1c2FsX3ZlcmRpY3QYECABKAsyLS5ub21vcy5rZXJuZWwudjEuSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVxdWVzdEgAEjUKCXJlYWRfYmxvYhgRIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5SZWFkQmxvYlJlcXVlc3RIABI5CgtyZXNvbHZlX3JlZhgSIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmUmVxdWVzdEgAEjUKCWxpc3RfcmVmcxgTIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5MaXN0UmVmc1JlcXVlc3RIABI1Cgl3cml0ZV9yZWYYFCABKAsyIC5ub21vcy5rZXJuZWwudjEuV3JpdGVSZWZSZXF1ZXN0SAASNwoKZGVsZXRlX3JlZhgVIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5EZWxldGVSZWZSZXF1ZXN0SAASRAoRd3JpdGVfbWV0YV9jb21taXQYFiABKAsyJy5ub21vcy5rZXJuZWwudjEuV3JpdGVNZXRhQ29tbWl0UmVxdWVzdEgAEkIKEGxhd19jbG9zdXJlX2luZm8YFyABKAsyJi5ub21vcy5rZXJuZWwudjEuTGF3Q2xvc3VyZUluZm9SZXF1ZXN0SAASRQoRY2hlY2twb2ludF9leHBvcnQYGCABKAsyKC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEV4cG9ydFJlcXVlc3RIABJFChFjaGVja3BvaW50X2ltcG9ydBgZIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50SW1wb3J0UmVxdWVzdEgAEkMKEGNhcGFjaXR5X3Jlc2VydmUYGiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ2FwYWNpdHlSZXNlcnZlUmVxdWVzdEgAEjsKDHJlc3RvcmVfbWFpbhgbIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5SZXN0b3JlTWFpblJlcXVlc3RIABJOChZyZXNvbHZlX3N0YXRlX3Bvc2l0aW9uGBwgASgLMiwubm9tb3Mua2VybmVsLnYxLlJlc29sdmVTdGF0ZVBvc2l0aW9uUmVxdWVzdEgAEkcKEnJlc2lkZW50X2Zvb3RwcmludBgdIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudEZvb3RwcmludFJlcXVlc3RIABJBCg9oaXN0b3J5X3N1bW1hcnkYHiABKAsyJi5ub21vcy5rZXJuZWwudjEuSGlzdG9yeVN1bW1hcnlSZXF1ZXN0SAASWgoccHJvdmVfY29tcGFjdGlvbl9lcXVpdmFsZW5jZRgfIAEoCzIyLm5vbW9zLmtlcm5lbC52MS5Qcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlcXVlc3RIABI+Cg5vcGVuX2dpdF9zdGF0ZRggIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5PcGVuR2l0U3RhdGVSZXF1ZXN0SAASTgoWcmVhZF9jdXN0b2R5X3BsYWNlbWVudBghIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5SZWFkQ3VzdG9keVBsYWNlbWVudFJlcXVlc3RIABJUChlpbnNwZWN0X2N1c3RvZHlfcGxhY2VtZW50GCMgASgLMi8ubm9tb3Mua2VybmVsLnYxLkluc3BlY3RDdXN0b2R5UGxhY2VtZW50UmVxdWVzdEgAElAKF3JlbGVhc2Vfd29ya3NwYWNlX3N0YXRlGCQgASgLMi0ubm9tb3Mua2VybmVsLnYxLlJlbGVhc2VXb3Jrc3BhY2VTdGF0ZVJlcXVlc3RIABJfCh9yZWNvcmRfd29ya3NwYWNlX2VmZmVjdF9vdXRjb21lGCUgASgLMjQubm9tb3Mua2VybmVsLnYxLlJlY29yZFdvcmtzcGFjZUVmZmVjdE91dGNvbWVSZXF1ZXN0SAASTAoVYXR0YWNoX2xvY2FsX2Zyb250aWVyGCYgASgLMisubm9tb3Mua2VybmVsLnYxLkF0dGFjaExvY2FsRnJvbnRpZXJSZXF1ZXN0SAASQwoQYWdncmVnYXRlX2NlbnN1cxgnIAEoCzInLm5vbW9zLmtlcm5lbC52MS5BZ2dyZWdhdGVDZW5zdXNSZXF1ZXN0SAASPQoNYXVkaXRfY3VzdG9keRgoIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5BdWRpdEN1c3RvZHlSZXF1ZXN0SAASSAoTZXhwb3J0X2xhd19wcm9kdWN0cxgpIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5FeHBvcnRMYXdQcm9kdWN0c1JlcXVlc3RIABJIChNpbXBvcnRfbGF3X3Byb2R1Y3RzGCogASgLMikubm9tb3Mua2VybmVsLnYxLkltcG9ydExhd1Byb2R1Y3RzUmVxdWVzdEgAQgsKCW9wZXJhdGlvbkoECCIQI1IXYWRvcHRfY3VzdG9keV9wbGFjZW1lbnQiXgoWQWdncmVnYXRlQ2Vuc3VzUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhIKCnR5cGVfbGltaXQYAiABKA0iMQoSQWdncmVnYXRlVHlwZUNvdW50EgwKBHR5cGUYASABKAkSDQoFY291bnQYAiABKAQi+wEKF0FnZ3JlZ2F0ZUNlbnN1c1Jlc3BvbnNlEhEKBGhlYWQYASABKAlIAIgBARIcCg9hZ2dyZWdhdGVfY291bnQYAiABKARIAYgBARIXCgpzdGF0ZV9yb290GAMgASgJSAKIAQESNgoJdG9wX3R5cGVzGAQgAygLMiMubm9tb3Mua2VybmVsLnYxLkFnZ3JlZ2F0ZVR5cGVDb3VudBIdChB0eXBlc19zdGF0ZV9yb290GAUgASgJSAOIAQFCBwoFX2hlYWRCEgoQX2FnZ3JlZ2F0ZV9jb3VudEINCgtfc3RhdGVfcm9vdEITChFfdHlwZXNfc3RhdGVfcm9vdCIoChhSZXNpZGVudEZvb3RwcmludFJlcXVlc3QSDAoEZGVlcBgBIAEoCCL0AwoRUmVzaWRlbnRGb290cHJpbnQSEQoJd29ya3NwYWNlGAEgASgJEg4KBmJyYW5jaBgCIAEoCRIYChByZWFkX21vZGVsX2J5dGVzGAMgASgEEh0KFXJlYWRfbW9kZWxfcnVzdF9ieXRlcxgEIAEoBBIYChBmb2xkX3N0YXRlX2J5dGVzGAUgASgEEhMKC2ZvbGRfaW1hZ2VzGAYgASgNEh8KF3NoYXJlZF9hdHRyaWJ1dGVkX2J5dGVzGAcgASgEEhIKCmFnZ3JlZ2F0ZXMYCCABKAQSNgoKY29tcG9uZW50cxgJIAMoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudENvbXBvbmVudBISCgpjb21wdXRlX3VzGAogASgEEkUKEXJlYWRfc3RvcmFnZV9raW5kGAsgASgOMioubm9tb3Mua2VybmVsLnYxLlJlYWRQcm9qZWN0aW9uU3RvcmFnZUtpbmQSHwoXc3FsaXRlX2NhY2hlX3VzZWRfYnl0ZXMYDCABKAQSGAoQZmxhdF9zY2FsYXJfcm93cxgNIAEoBBIdChVmbGF0X3NjYWxhcl9yb3dzX3JlYWQYDiABKAQSHQoQZnVsbF9yZXBsYXlfaGVhZBgPIAEoCUgAiAEBQhMKEV9mdWxsX3JlcGxheV9oZWFkImkKEVJlc2lkZW50Q29tcG9uZW50EjQKBGtpbmQYASABKA4yJi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRDb21wb25lbnRLaW5kEg0KBWJ5dGVzGAIgASgEEg8KB2NlaWxpbmcYAyABKAgiygEKGVJlc2lkZW50Rm9vdHByaW50UmVzcG9uc2USNQoJcmVzaWRlbnRzGAEgAygLMiIubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Rm9vdHByaW50EhwKFGFsbG9jYXRvcl9saXZlX2J5dGVzGAIgASgEEhgKEGF0dHJpYnV0ZWRfYnl0ZXMYAyABKAQSGQoRdW5hY2NvdW50ZWRfYnl0ZXMYBCABKAQSFQoNYWNjb3VudGluZ191cxgFIAEoBBIMCgRkZWVwGAYgASgIIuIBChBQYWNrRGVsdGFSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoEaGVhZBgCIAEoCUgAiAEBEhEKBGJhc2UYAyABKAlIAYgBARIOCgZicmFuY2gYBCABKAkSHQoQc3RhZ2VkX3BhY2tfZmlsZRgFIAEoCUgCiAEBEhIKBWRlcHRoGAYgASgNSAOIAQESEgoKYmVsb3dfaGVhZBgHIAEoCBISCgphbHNvX2hlYWRzGAggAygJQgcKBV9oZWFkQgcKBV9iYXNlQhMKEV9zdGFnZWRfcGFja19maWxlQggKBl9kZXB0aCL6AQoQQXBwbHlQYWNrUmVxdWVzdBIMCgRyZXBvGAEgASgJEg4KBHBhY2sYAiABKAxIABIaChBzdGFnZWRfcGFja19maWxlGAQgASgJSAASGgoQY29udGludWVfcGVuZGluZxgIIAEoCEgAEhgKDmNhbmNlbF9wZW5kaW5nGAogASgISAASEQoEaGVhZBgDIAEoCUgBiAEBEg8KB3NoYWxsb3cYBSADKAkSEQoJdW5zaGFsbG93GAYgAygJEhkKEXdvcmtfYnVkZ2V0X2J5dGVzGAcgASgEEhEKCWltcG9ydF9pZBgJIAEoBEIICgZzb3VyY2VCBwoFX2hlYWQiIAoQUmVwb1N0YXRzUmVxdWVzdBIMCgRyZXBvGAEgASgJIr8BChNJbnRlbnRzQWJvdmVSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoEaGVhZBgCIAEoCUgAiAEBEhEKBGJhc2UYAyABKAlIAYgBARIOCgZicmFuY2gYBCABKAkSDQoFbGltaXQYBSABKAQSGAoQY29tcGxldGVfbG9naWNhbBgGIAEoCBIWCg5jb21wYWN0X3N0b3JlZBgHIAEoCBIRCglmcm9tX2Jhc2UYCCABKAhCBwoFX2hlYWRCBwoFX2Jhc2UibQoVSGlzdG9yeVN1bW1hcnlSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoEaGVhZBgCIAEoCUgAiAEBEg4KBmJyYW5jaBgDIAEoCRIRCgRiYXNlGAQgASgJSAGIAQFCBwoFX2hlYWRCBwoFX2Jhc2UiKwoUSW5zcGVjdENoYW5nZVJlcXVlc3QSEwoLY2hhbmdlX3VzZGEYASABKAwi3wEKDlJlZnVzYWxWZXJkaWN0EhUKCG9mZmVyX2lkGAEgASgJSACIAQESEAoDb2lkGAIgASgJSAGIAQESEwoGZG9tYWluGAMgASgJSAKIAQESGQoMZGlyZWN0aXZlX2lkGAQgASgJSAOIAQESFAoHc2Vzc2lvbhgFIAEoCUgEiAEBEhEKCXBhcmtlZF9hdBgGIAEoCRIOCgZyZWFzb24YByABKAlCCwoJX29mZmVyX2lkQgYKBF9vaWRCCQoHX2RvbWFpbkIPCg1fZGlyZWN0aXZlX2lkQgoKCF9zZXNzaW9uIk8KG0VuY29kZVJlZnVzYWxWZXJkaWN0UmVxdWVzdBIwCgd2ZXJkaWN0GAEgASgLMh8ubm9tb3Mua2VybmVsLnYxLlJlZnVzYWxWZXJkaWN0IjQKHEluc3BlY3RSZWZ1c2FsVmVyZGljdFJlcXVlc3QSFAoMdmVyZGljdF91c2RhGAEgASgMItQBChVDb21wYWN0aW9uRXF1aXZhbGVuY2USEwoLc291cmNlX2hlYWQYASABKAkSFgoOc291cmNlX2dlbmVzaXMYAiABKAkSFgoOY2FuZGlkYXRlX2hlYWQYAyABKAkSGQoRY2FuZGlkYXRlX2dlbmVzaXMYBCABKAkSFgoOc291cmNlX2ludGVudHMYBSABKAQSFwoPY2FycmllZF9pbnRlbnRzGAYgASgEEhYKDnBhcmtlZF9pbnRlbnRzGAcgASgEEhIKCmVxdWl2YWxlbnQYCCABKAgifQohUHJvdmVDb21wYWN0aW9uRXF1aXZhbGVuY2VSZXF1ZXN0EhMKC3NvdXJjZV9yZXBvGAEgASgJEhMKC3NvdXJjZV9oZWFkGAIgASgJEhYKDmNhbmRpZGF0ZV9yZXBvGAMgASgJEhYKDmNhbmRpZGF0ZV9oZWFkGAQgASgJIjoKD1JlYWRCbG9iUmVxdWVzdBIMCgRyZXBvGAEgASgJEgsKA29pZBgCIAEoCRIMCgRwYXRoGAMgASgJIlAKEVJlc29sdmVSZWZSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoJcmVmZXJlbmNlGAIgASgJEhEKBHBhdGgYAyABKAlIAIgBAUIHCgVfcGF0aCI2Cg9QaHlzaWNhbFJlZkZpbGUSEQoJcmVmZXJlbmNlGAEgASgJEhAKCGNvbnRlbnRzGAIgASgMIqcCCg9MaXN0UmVmc1JlcXVlc3QSDAoEcmVwbxgBIAEoCRIOCgZwcmVmaXgYAiABKAkSGAoQbG9vc2VfcmVmZXJlbmNlcxgDIAMoCRIgChhsb29zZV9pbnZlbnRvcnlfY29tcGxldGUYBCABKAgSIAoTcGFja2VkX3JlZnNfcHJlc2VudBgFIAEoCEgAiAEBEj0KE3BoeXNpY2FsX2xvb3NlX3JlZnMYBiADKAsyIC5ub21vcy5rZXJuZWwudjEuUGh5c2ljYWxSZWZGaWxlEhwKFHBoeXNpY2FsX3BhY2tlZF9yZWZzGAcgASgMEiMKG3BoeXNpY2FsX2ludmVudG9yeV9jb21wbGV0ZRgIIAEoCEIWChRfcGFja2VkX3JlZnNfcHJlc2VudCJCCg9Xcml0ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkSDgoGdGFyZ2V0GAMgASgJIjMKEERlbGV0ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkiKQoITWV0YUZpbGUSDAoEcGF0aBgBIAEoCRIPCgdjb250ZW50GAIgASgMIq4BChZXcml0ZU1ldGFDb21taXRSZXF1ZXN0EgwKBHJlcG8YASABKAkSDwoHcGFyZW50cxgCIAMoCRIoCgVmaWxlcxgDIAMoCzIZLm5vbW9zLmtlcm5lbC52MS5NZXRhRmlsZRIPCgdtZXNzYWdlGAQgASgJEhQKDHRpbWVfc2Vjb25kcxgFIAEoEhIWCglyZWZlcmVuY2UYBiABKAlIAIgBAUIMCgpfcmVmZXJlbmNlImcKFUxhd0Nsb3N1cmVJbmZvUmVxdWVzdBIUCgxjbG9zdXJlX2ZpbGUYASABKAkSOAoKY2FwYWJpbGl0eRgCIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxMYXdDYXBhYmlsaXR5IocBChdDaGVja3BvaW50RXhwb3J0UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EiEKFHN0YWdlZF9mcm9udGllcl9maWxlGAIgASgJSACIAQFCFwoVX3N0YWdlZF9mcm9udGllcl9maWxlIkEKC0Zyb250aWVySGxjEhAKCHBoeXNpY2FsGAEgASgEEg8KB2xvZ2ljYWwYAiABKA0SDwoHcmVwbGljYRgDIAEoBCLtBAoXVmVyaWZpZWRGcm9udGllclJlY2VpcHQSFgoOZm9ybWF0X3ZlcnNpb24YASABKA0SCwoDb2lkGAIgASgJEg8KB2ludGVudHMYAyABKAQSEwoLcGxhbnNfcmVydW4YBCABKAQSHAoPY29udHJvbGxlcl9oYXNoGAUgASgJSACIAQESGQoRaW5zdGFsbGVkX2RvbWFpbnMYBiADKAkSDgoGbGluZWFyGAcgASgIEjMKCGxhc3RfaGxjGAggASgLMhwubm9tb3Mua2VybmVsLnYxLkZyb250aWVySGxjSAGIAQESFAoHbGFzdF9pZBgJIAEoCUgCiAEBEhEKCXN0YXRlX29pZBgKIAEoCRIUCgxzdGF0ZV9zaGEyNTYYCyABKAkSOQoOc3RhdGVfbGFzdF9obGMYDCABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIA4gBARIaCg1zdGF0ZV9sYXN0X2lkGA0gASgJSASIAQESFwoPbWFuaWZlc3Rfc2hhMjU2GA4gASgJEh4KFmxhd19jbG9zdXJlX2lkZW50aXRpZXMYDyADKAkSGgoScmVzb2x2YWJsZV9kb21haW5zGBAgAygJEiIKFXByb2plY3Rpb25fc3RhdGVfcm9vdBgRIAEoCUgFiAEBEg4KBndhbGtlZBgSIAEoCEISChBfY29udHJvbGxlcl9oYXNoQgsKCV9sYXN0X2hsY0IKCghfbGFzdF9pZEIRCg9fc3RhdGVfbGFzdF9obGNCEAoOX3N0YXRlX2xhc3RfaWRCGAoWX3Byb2plY3Rpb25fc3RhdGVfcm9vdCJFChVGb2xkRnJvbnRpZXJBZ2dyZWdhdGUSFAoMYWdncmVnYXRlX2lkGAEgASgJEhYKDmFnZ3JlZ2F0ZV91c2RhGAIgASgMIkEKF0ZvbGRGcm9udGllckZpbmdlcnByaW50EhEKCWludGVudF9pZBgBIAEoCRITCgtmaW5nZXJwcmludBgCIAEoCSLWAwoURm9sZEZyb250aWVyU25hcHNob3QSFgoOZm9ybWF0X3ZlcnNpb24YASABKA0SCwoDdGlwGAIgASgJEg8KB2dlbmVzaXMYAyABKAkSFQoNaGlzdG9yeV9kZXB0aBgEIAEoBBI6CgphZ2dyZWdhdGVzGAUgAygLMiYubm9tb3Mua2VybmVsLnYxLkZvbGRGcm9udGllckFnZ3JlZ2F0ZRI4Cg1obGNfd2F0ZXJtYXJrGAYgASgLMhwubm9tb3Mua2VybmVsLnYxLkZyb250aWVySGxjSACIAQESMwoIbGFzdF9obGMYByABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIAYgBARIUCgdsYXN0X2lkGAggASgJSAKIAQESFgoOc3RyaWtlX3RhcmdldHMYCSADKAkSRQoTaW50ZW50X2ZpbmdlcnByaW50cxgKIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5Gb2xkRnJvbnRpZXJGaW5nZXJwcmludBIXCgpzdGF0ZV9yb290GAsgASgJSAOIAQFCEAoOX2hsY193YXRlcm1hcmtCCwoJX2xhc3RfaGxjQgoKCF9sYXN0X2lkQg0KC19zdGF0ZV9yb290IpsDChhTdG9yZWRDaGVja3BvaW50TWFuaWZlc3QSFgoOZm9ybWF0X3ZlcnNpb24YASABKA0SEwoGY3Vyc29yGAIgASgJSACIAQESGAoQY2hlY2twb2ludF9ieXRlcxgDIAEoBBIQCghsYXdfaGFzaBgEIAEoCRI7Cgtjb21wcmVzc2lvbhgFIAEoDjImLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50Q29tcHJlc3Npb24SEQoJcmF3X2J5dGVzGAYgASgEEhQKDHN0b3JlZF9ieXRlcxgHIAEoBBIdChVmcm9udGllcl9zdG9yZWRfYnl0ZXMYCCABKAQSFwoKc3RhdGVfcm9vdBgJIAEoCUgBiAEBElAKGXZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQYCiABKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZpZWRGcm9udGllclJlY2VpcHRIAogBAUIJCgdfY3Vyc29yQg0KC19zdGF0ZV9yb290QhwKGl92ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0IsEDChdDaGVja3BvaW50SW1wb3J0UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhIKCGZyb250aWVyGAIgASgMSAASHgoUc3RhZ2VkX2Zyb250aWVyX2ZpbGUYBiABKAlIABITCgZjdXJzb3IYAyABKAlIAYgBARIXCgpzdGF0ZV9yb290GAQgASgJSAKIAQESDQoFc3BhbnMYBSABKAgSEQoEaGVhZBgHIAEoCUgDiAEBElAKGXZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQYCCABKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZpZWRGcm9udGllclJlY2VpcHRIBIgBARJKChN2ZXJpZmljYXRpb25fcG9saWN5GAkgASgOMi0ubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRWZXJpZmljYXRpb25Qb2xpY3lCEQoPZnJvbnRpZXJfc291cmNlQgkKB19jdXJzb3JCDQoLX3N0YXRlX3Jvb3RCBwoFX2hlYWRCHAoaX3ZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQiMQoWQ2FwYWNpdHlSZXNlcnZlUmVxdWVzdBIXCg9hZ2dyZWdhdGVfY291bnQYASABKAQimQIKElJlc3RvcmVNYWluUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EgwKBGhlYWQYAiABKAkSEwoLZGlhZ25vc3RpY3MYAyABKAgSGAoQb3BlcmF0b3JfY3VzdG9keRgEIAEoCBIgChNleHBlY3RlZF9sb2NhbF9oZWFkGAUgASgJSACIAQESQAoTY3VzdG9keV9jZXJ0aWZpY2F0ZRgGIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5Q2VydGlmaWNhdGUSGAoQcHJvdmlkZXJfY3VzdG9keRgHIAEoCEIWChRfZXhwZWN0ZWRfbG9jYWxfaGVhZCJtChNBdWRpdEN1c3RvZHlSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSFQoNYnVkZ2V0X21pY3JvcxgCIAEoDRINCgVzdGFydBgDIAEoCCKUAQoUQXVkaXRDdXN0b2R5UmVzcG9uc2USDwoHcGVuZGluZxgBIAEoCBIMCgRoZWFkGAIgASgJEg4KBndhbGtlZBgDIAEoBBINCgV0b3RhbBgEIAEoBBIPCgdvdXRjb21lGAUgASgJEi0KB3ZlcmRpY3QYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QifgoLTGF3UHJvZHVjdHMSFAoMbGF3X2lkZW50aXR5GAEgASgJEhYKDmZvcm1hdF92ZXJzaW9uGAIgASgNEhIKCnJlYWRfbGF5ZXIYAyABKAwSFQoNY29tbWFuZF9sYXllchgEIAEoDBIWCg5zZW1hbnRpY19sYXllchgFIAEoDCJMChhFeHBvcnRMYXdQcm9kdWN0c1JlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldCJZChlFeHBvcnRMYXdQcm9kdWN0c1Jlc3BvbnNlEgwKBGhlYWQYASABKAkSLgoIcHJvZHVjdHMYAiADKAsyHC5ub21vcy5rZXJuZWwudjEuTGF3UHJvZHVjdHMifAoYSW1wb3J0TGF3UHJvZHVjdHNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSLgoIcHJvZHVjdHMYAiADKAsyHC5ub21vcy5rZXJuZWwudjEuTGF3UHJvZHVjdHMiLQoZSW1wb3J0TGF3UHJvZHVjdHNSZXNwb25zZRIQCghpbXBvcnRlZBgBIAMoCSJvChJDdXN0b2R5Q2VydGlmaWNhdGUSEQoJd29ya3NwYWNlGAEgASgJEgwKBGhlYWQYAiABKAkSEQoJa2V5X2Vwb2NoGAMgASgDEhIKCnB1YmxpY19rZXkYBCABKAwSEQoJc2lnbmF0dXJlGAUgASgMImQKE09wZW5HaXRTdGF0ZVJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIMCgRoZWFkGAIgASgJEg0KBXNwYW5zGAMgASgIImsKGkF0dGFjaExvY2FsRnJvbnRpZXJSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDAoEaGVhZBgCIAEoCRINCgVzcGFucxgDIAEoCCJTCg1DdXN0b2R5UmVtb3RlEgwKBG5hbWUYASABKAkSCwoDdXJsGAIgASgJEhUKDXBlZXJfaWRlbnRpdHkYAyABKAkSEAoIcHJpb3JpdHkYBCABKA0ixgEKFEN1c3RvZHlQbGFjZW1lbnRSdWxlEhIKCnBlZXJfY2xhc3MYASABKAkSQAoQa2VybmVsX3Jlc2lkZW5jeRgCIAEoDjImLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZXNpZGVuY3lJbnRlbnQSQgoRY3VzdG9keV9yZXRlbnRpb24YAyABKA4yJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVJldGVudGlvbkludGVudBIUCgxyZW1vdGVfbmFtZXMYBCADKAkirgIKFkN1c3RvZHlQbGFjZW1lbnRQb2xpY3kSEwoLZGVjbGFyYXRpb24YASABKAkSFgoOcGFja2FnZV9zaGEyNTYYAiABKAkSNAoFcnVsZXMYAyADKAsyJS5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFJ1bGUSEgoKYWRvcHRlZF9ieRgEIAEoCRIOCgZyZWFzb24YBSABKAkSHgoWZWZmZWN0aXZlX3RpbWVfc2Vjb25kcxgGIAEoEhIvCgdyZW1vdGVzGAcgAygLMh4ubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlSZW1vdGUSIgoVcmVjaXBpZW50X21haWxib3hfdXJsGAggASgJSACIAQFCGAoWX3JlY2lwaWVudF9tYWlsYm94X3VybCJZChtDdXN0b2R5UGxhY2VtZW50RXhwZWN0YXRpb24SEAoGYWJzZW50GAEgASgISAASDQoDb2lkGAIgASgJSAASDQoDYW55GAMgASgISABCCgoIZnJvbnRpZXIiKwobUmVhZEN1c3RvZHlQbGFjZW1lbnRSZXF1ZXN0EgwKBHJlcG8YASABKAkiNQoeSW5zcGVjdEN1c3RvZHlQbGFjZW1lbnRSZXF1ZXN0EhMKC3BvbGljeV91c2RhGAEgASgMIokBCg5QbGFjZW1lbnRPZmZlchI+CghleHBlY3RlZBgBIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UGxhY2VtZW50RXhwZWN0YXRpb24SNwoGcG9saWN5GAIgASgLMicubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlQbGFjZW1lbnRQb2xpY3kiaQobUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoJbWFpbl9oZWFkGAIgASgJEhUKDWhpbnRlZF9jb21taXQYAyABKAkSEgoKc3RhdGVfcm9vdBgEIAEoCSKFEgoPQ3VzdG9keVJlc3BvbnNlEjgKCnBhY2tfZGVsdGEYCiABKAsyIi5ub21vcy5rZXJuZWwudjEuUGFja0RlbHRhUmVzcG9uc2VIABI4CgphcHBseV9wYWNrGAsgASgLMiIubm9tb3Mua2VybmVsLnYxLkFwcGx5UGFja1Jlc3BvbnNlSAASOAoKcmVwb19zdGF0cxgMIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXBvU3RhdHNSZXNwb25zZUgAEj4KDWludGVudHNfYWJvdmUYDSABKAsyJS5ub21vcy5rZXJuZWwudjEuSW50ZW50c0Fib3ZlUmVzcG9uc2VIABJACg5pbnNwZWN0X2NoYW5nZRgOIAEoCzImLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q2hhbmdlUmVzcG9uc2VIABJPChZlbmNvZGVfcmVmdXNhbF92ZXJkaWN0GA8gASgLMi0ubm9tb3Mua2VybmVsLnYxLkVuY29kZVJlZnVzYWxWZXJkaWN0UmVzcG9uc2VIABJRChdpbnNwZWN0X3JlZnVzYWxfdmVyZGljdBgQIAEoCzIuLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0UmVmdXNhbFZlcmRpY3RSZXNwb25zZUgAEjYKCXJlYWRfYmxvYhgRIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZWFkQmxvYlJlc3BvbnNlSAASOgoLcmVzb2x2ZV9yZWYYEiABKAsyIy5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVJlZlJlc3BvbnNlSAASNgoJbGlzdF9yZWZzGBMgASgLMiEubm9tb3Mua2VybmVsLnYxLkxpc3RSZWZzUmVzcG9uc2VIABIyCgl3cml0ZV9yZWYYFCABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkSAASMwoKZGVsZXRlX3JlZhgVIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWRIABJFChF3cml0ZV9tZXRhX2NvbW1pdBgWIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5Xcml0ZU1ldGFDb21taXRSZXNwb25zZUgAEkMKEGxhd19jbG9zdXJlX2luZm8YFyABKAsyJy5ub21vcy5rZXJuZWwudjEuTGF3Q2xvc3VyZUluZm9SZXNwb25zZUgAEkYKEWNoZWNrcG9pbnRfZXhwb3J0GBggASgLMikubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRFeHBvcnRSZXNwb25zZUgAEkYKEWNoZWNrcG9pbnRfaW1wb3J0GBkgASgLMikubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRJbXBvcnRSZXNwb25zZUgAEkQKEGNhcGFjaXR5X3Jlc2VydmUYGiABKAsyKC5ub21vcy5rZXJuZWwudjEuQ2FwYWNpdHlSZXNlcnZlUmVzcG9uc2VIABI8CgxyZXN0b3JlX21haW4YGyABKAsyJC5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5SZXNwb25zZUgAEk8KFnJlc29sdmVfc3RhdGVfcG9zaXRpb24YHCABKAsyLS5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXNwb25zZUgAEkgKEnJlc2lkZW50X2Zvb3RwcmludBgdIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudEZvb3RwcmludFJlc3BvbnNlSAASQgoPaGlzdG9yeV9zdW1tYXJ5GB4gASgLMicubm9tb3Mua2VybmVsLnYxLkhpc3RvcnlTdW1tYXJ5UmVzcG9uc2VIABJbChxwcm92ZV9jb21wYWN0aW9uX2VxdWl2YWxlbmNlGB8gASgLMjMubm9tb3Mua2VybmVsLnYxLlByb3ZlQ29tcGFjdGlvbkVxdWl2YWxlbmNlUmVzcG9uc2VIABI/Cg5vcGVuX2dpdF9zdGF0ZRggIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5PcGVuR2l0U3RhdGVSZXNwb25zZUgAEk8KFnJlYWRfY3VzdG9keV9wbGFjZW1lbnQYISABKAsyLS5ub21vcy5rZXJuZWwudjEuUmVhZEN1c3RvZHlQbGFjZW1lbnRSZXNwb25zZUgAElUKGWluc3BlY3RfY3VzdG9keV9wbGFjZW1lbnQYIyABKAsyMC5ub21vcy5rZXJuZWwudjEuSW5zcGVjdEN1c3RvZHlQbGFjZW1lbnRSZXNwb25zZUgAElEKF3JlbGVhc2Vfd29ya3NwYWNlX3N0YXRlGCQgASgLMi4ubm9tb3Mua2VybmVsLnYxLlJlbGVhc2VXb3Jrc3BhY2VTdGF0ZVJlc3BvbnNlSAASWgofcmVjb3JkX3dvcmtzcGFjZV9lZmZlY3Rfb3V0Y29tZRglIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5SZWNvcmRlZFdvcmtzcGFjZUVmZmVjdE91dGNvbWVIABJNChVhdHRhY2hfbG9jYWxfZnJvbnRpZXIYJiABKAsyLC5ub21vcy5rZXJuZWwudjEuQXR0YWNoTG9jYWxGcm9udGllclJlc3BvbnNlSAASRAoQYWdncmVnYXRlX2NlbnN1cxgnIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5BZ2dyZWdhdGVDZW5zdXNSZXNwb25zZUgAEj4KDWF1ZGl0X2N1c3RvZHkYKCABKAsyJS5ub21vcy5rZXJuZWwudjEuQXVkaXRDdXN0b2R5UmVzcG9uc2VIABJJChNleHBvcnRfbGF3X3Byb2R1Y3RzGCkgASgLMioubm9tb3Mua2VybmVsLnYxLkV4cG9ydExhd1Byb2R1Y3RzUmVzcG9uc2VIABJJChNpbXBvcnRfbGF3X3Byb2R1Y3RzGCogASgLMioubm9tb3Mua2VybmVsLnYxLkltcG9ydExhd1Byb2R1Y3RzUmVzcG9uc2VIAEILCglvcGVyYXRpb25KBAgiECNSF2Fkb3B0X2N1c3RvZHlfcGxhY2VtZW50InAKEVBhY2tEZWx0YVJlc3BvbnNlEgwKBHBhY2sYASABKAwSDQoFYnl0ZXMYAiABKAQSDwoHc2hhbGxvdxgDIAMoCRIPCgdjb21taXRzGAQgASgNEg0KBXRyZWVzGAUgASgNEg0KBWJsb2JzGAYgASgNIuIBChFBcHBseVBhY2tSZXNwb25zZRIUCgxvYmplY3RfY291bnQYASABKAQSEQoJcGFja19oYXNoGAIgASgJEjsKB2Nsb3N1cmUYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuUGh5c2ljYWxDbG9zdXJlQ2hlY2tIAIgBARIWCg5pbXBvcnRfcGVuZGluZxgEIAEoCBIXCg93b3JrX2RvbmVfYnl0ZXMYBSABKAQSEQoJaW1wb3J0X2lkGAYgASgEEhcKD2ltcG9ydF9kZWZlcnJlZBgHIAEoCEIKCghfY2xvc3VyZSJtChRQaHlzaWNhbENsb3N1cmVDaGVjaxIWCg5yZXVzZWRfcmVjZWlwdBgBIAEoCBIUCgxjb21taXRzX3JlYWQYAiABKAQSEgoKdHJlZXNfcmVhZBgDIAEoBBITCgtsZWF2ZXNfcmVhZBgEIAEoBCK4AQoRUmVwb1N0YXRzUmVzcG9uc2USEwoLdG90YWxfYnl0ZXMYASABKAQSFAoMb2JqZWN0X2J5dGVzGAIgASgEEhUKDWxvb3NlX29iamVjdHMYAyABKAQSEwoLbG9vc2VfYnl0ZXMYBCABKAQSEgoKcGFja19maWxlcxgFIAEoBBISCgpwYWNrX2J5dGVzGAYgASgEEhMKC2luZGV4X2J5dGVzGAcgASgEEg8KB3NoYWxsb3cYCCADKAki4gEKDEludGVudFJlY29yZBILCgNvaWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEg4KBmRvbWFpbhgDIAEoCRIRCglkaXJlY3RpdmUYBCABKAkSEwoLY2hhbmdlX3VzZGEYBSABKAwSLgoIc2VtYW50aWMYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSSgoVdHJhbnNwb3J0X3JlcXVpcmVtZW50GAcgASgOMisubm9tb3Mua2VybmVsLnYxLkludGVudFRyYW5zcG9ydFJlcXVpcmVtZW50IkYKFEludGVudHNBYm92ZVJlc3BvbnNlEi4KB2ludGVudHMYASADKAsyHS5ub21vcy5rZXJuZWwudjEuSW50ZW50UmVjb3JkInQKFkhpc3RvcnlTdW1tYXJ5UmVzcG9uc2USDAoEaGVhZBgBIAEoCRIOCgZvbGRlc3QYAiABKAkSFAoMY29tbWl0X2NvdW50GAMgASgEEhAKCGNvbXBsZXRlGAQgASgIEhQKDHJlYWNoZWRfYmFzZRgFIAEoCCJCChNOb21pbmFsQ2FsbElkZW50aXR5EhMKC2RvbWFpbl9wYXRoGAEgASgJEhYKDmRpcmVjdGl2ZV9wYXRoGAIgASgJIogBChhMaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSHwoXdGFyZ2V0X2Nsb3N1cmVfaWRlbnRpdHkYASABKAkSFAoMaW5zdGFsbGVkX2J5GAIgASgJEjUKBXBoYXNlGAMgASgOMiYubm9tb3Mua2VybmVsLnYxLkxpZmVjeWNsZUluc3RhbGxQaGFzZSJaCh1Xb3Jrc3BhY2VSZXNpZGVuY3lSZXF1aXJlbWVudBIRCgl3b3Jrc3BhY2UYASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSEQoJZm9sZF9yb290GAMgASgJIrQCChVJbnNwZWN0Q2hhbmdlUmVzcG9uc2USLgoIc2VtYW50aWMYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJaW50ZW50X2lkGAIgASgJEjIKBGNhbGwYAyABKAsyJC5ub21vcy5rZXJuZWwudjEuTm9taW5hbENhbGxJZGVudGl0eRIQCghhdXRob3JlZBgEIAEoCBJEChFsaWZlY3ljbGVfaW5zdGFsbBgFIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5MaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSTAoUcmVxdWlyZWRfcmVzaWRlbmNpZXMYBiADKAsyLi5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlUmVzaWRlbmN5UmVxdWlyZW1lbnQiTAocUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXNwb25zZRIaCg1yZXNvbHZlZF9oZWFkGAEgASgJSACIAQFCEAoOX3Jlc29sdmVkX2hlYWQiNAocRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXNwb25zZRIUCgx2ZXJkaWN0X3VzZGEYASABKAwiUQodSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVzcG9uc2USMAoHdmVyZGljdBgBIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5SZWZ1c2FsVmVyZGljdCJ1CiJQcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlc3BvbnNlEjgKCGV2aWRlbmNlGAEgASgLMiYubm9tb3Mua2VybmVsLnYxLkNvbXBhY3Rpb25FcXVpdmFsZW5jZRIVCg1ldmlkZW5jZV91c2RhGAIgASgMIi8KEFJlYWRCbG9iUmVzcG9uc2USDQoFZm91bmQYASABKAgSDAoEYmxvYhgCIAEoDCIuChJSZXNvbHZlUmVmUmVzcG9uc2USEAoDb2lkGAEgASgJSACIAQFCBgoEX29pZCIrCglSZWZSZWNvcmQSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCSI8ChBMaXN0UmVmc1Jlc3BvbnNlEigKBHJlZnMYASADKAsyGi5ub21vcy5rZXJuZWwudjEuUmVmUmVjb3JkIg4KDEFja25vd2xlZGdlZCImChdXcml0ZU1ldGFDb21taXRSZXNwb25zZRILCgNvaWQYASABKAkigwEKFkxhd0Nsb3N1cmVJbmZvUmVzcG9uc2USEAoIaWRlbnRpdHkYASABKAkSGQoRcm9vdF9sb2dpY2FsX3BhdGgYAiABKAkSEwoLYXNzZXRfY291bnQYAyABKAQSEgoKcHJpbV9jb3VudBgEIAEoBBITCgtkb21haW5fa2V5cxgFIAMoCSLfAwoYQ2hlY2twb2ludEV4cG9ydFJlc3BvbnNlEg0KBWVtcHR5GAEgASgIEhMKBmN1cnNvchgCIAEoCUgAiAEBEhAKCGZyb250aWVyGAMgASgMEhcKCnN0YXRlX3Jvb3QYBCABKAlIAYgBARISCgpzdGF0ZV90cmVlGAUgASgIEg4KBnBpbm5lZBgGIAEoCBIbChNyZWFkX2luZGV4X3NuYXBzaG90GAcgASgIEiMKG3JlYWRfaW5kZXhfc25hcHNob3RfcGVuZGluZxgIIAEoCBIkChdyZWFkX2luZGV4X3NxbGl0ZV9ieXRlcxgJIAEoBEgCiAEBEiUKGHJlYWRfaW5kZXhfY3VzdG9keV9ieXRlcxgKIAEoBEgDiAEBElAKGXZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQYCyABKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZpZWRGcm9udGllclJlY2VpcHRIBIgBAUIJCgdfY3Vyc29yQg0KC19zdGF0ZV9yb290QhoKGF9yZWFkX2luZGV4X3NxbGl0ZV9ieXRlc0IbChlfcmVhZF9pbmRleF9jdXN0b2R5X2J5dGVzQhwKGl92ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0IusCChhDaGVja3BvaW50SW1wb3J0UmVzcG9uc2USEAoIcmVzdG9yZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESFwoPZnJvbnRpZXJfc2VlZGVkGAMgASgIEiUKHWZyb250aWVyX3ZlcmlmaWNhdGlvbl9wZW5kaW5nGAQgASgIEhcKD2FnZ3JlZ2F0ZV9jb3VudBgFIAEoBBIrCgVzcGFucxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBITCgZjdXJzb3IYByABKAlIAYgBARIRCglyZWFkX29ubHkYCCABKAgSFwoPbGF6eV9yZWFkX2luZGV4GAkgASgIEjcKCWFzc3VyYW5jZRgKIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlEhIKCnJlYWRfcmVhZHkYCyABKAhCCQoHX3JlYXNvbkIJCgdfY3Vyc29yIsABChRPcGVuR2l0U3RhdGVSZXNwb25zZRIOCgZvcGVuZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESFwoPYWdncmVnYXRlX2NvdW50GAMgASgEEisKBXNwYW5zGAQgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhMKBmN1cnNvchgFIAEoCUgBiAEBEhIKCnJlYWRfcmVhZHkYBiABKAhCCQoHX3JlYXNvbkIJCgdfY3Vyc29yIukBChtBdHRhY2hMb2NhbEZyb250aWVyUmVzcG9uc2USEAoIYXR0YWNoZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESDAoEaGVhZBgDIAEoCRISCgpzdGF0ZV9yb290GAQgASgJEhcKD2FnZ3JlZ2F0ZV9jb3VudBgFIAEoBBIrCgVzcGFucxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBISCgpyZWFkX3JlYWR5GAcgASgIEhwKFGZvcmVpZ25fc291cmNlX3JlYWR5GAggASgIQgkKB19yZWFzb24iMQocUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVxdWVzdBIRCgl3b3Jrc3BhY2UYASABKAkiMQodUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVzcG9uc2USEAoIcmVsZWFzZWQYASABKAgiiwEKHFJlYWRDdXN0b2R5UGxhY2VtZW50UmVzcG9uc2USFQoIZnJvbnRpZXIYASABKAlIAIgBARI8CgZwb2xpY3kYAiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeUgBiAEBQgsKCV9mcm9udGllckIJCgdfcG9saWN5Il0KEFBsYWNlbWVudEFkb3B0ZWQSEAoIZnJvbnRpZXIYASABKAkSNwoGcG9saWN5GAIgASgLMicubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlQbGFjZW1lbnRQb2xpY3kiWgofSW5zcGVjdEN1c3RvZHlQbGFjZW1lbnRSZXNwb25zZRI3CgZwb2xpY3kYASABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeSJKChdDYXBhY2l0eVJlc2VydmVSZXNwb25zZRIXCg9hZ2dyZWdhdGVfY291bnQYASABKAQSFgoOcmVzZXJ2ZWRfYnl0ZXMYAiABKAQi+QIKEFJlc3RvcmVNYWluU3BhbnMSEAoIdG90YWxfdXMYASABKAQSGgoSbGl2ZV9yZWZfbG9va3VwX3VzGAIgASgEEhgKEHRhcmdldF9kZWNvZGVfdXMYAyABKAQSJAocY3VzdG9keV9jb21wbGV0ZW5lc3NfcmVhZF91cxgEIAEoBBIZChFxdWFyYW50aW5lX3JlZl91cxgFIAEoBBIlCh1jaGFpbl9zaWduYXR1cmVfbGF3X3JlcGxheV91cxgGIAEoBBIZChF2ZXJkaWN0X2RlY29kZV91cxgHIAEoBBIjChtwcm9tb3RlX2FuZF9jbGVhbnVwX3JlZnNfdXMYCCABKAQSGwoTZnJvbnRpZXJfcmVidWlsZF91cxgJIAEoBBIZChFmcm9udGllcl9zdG9yZV91cxgKIAEoBBI9Cgx2ZXJpZmljYXRpb24YCyABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcyLvAQoTUmVzdG9yZU1haW5SZXNwb25zZRIMCgRoZWFkGAEgASgJEhAKCHZlcmlmaWVkGAIgASgIEgwKBHdhbGsYAyABKAkSMAoFc3BhbnMYBCABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5TcGFucxItCgd2ZXJkaWN0GAUgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EjcKCWFzc3VyYW5jZRgGIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlEhAKCGFjY2VwdGVkGAcgASgIIpsCCgpOb21vc1ZhbHVlEiUKBG51bGwYASABKAsyFS5ub21vcy5rZXJuZWwudjEuTnVsbEgAEhEKB2Jvb2xlYW4YAiABKAhIABIYCg5zaWduZWRfaW50ZWdlchgDIAEoEkgAEhoKEHVuc2lnbmVkX2ludGVnZXIYBCABKARIABIYCg5mbG9hdGluZ19wb2ludBgFIAEoAUgAEg4KBHRleHQYBiABKAlIABIPCgVieXRlcxgHIAEoDEgAEioKBGxpc3QYCCABKAsyGi5ub21vcy5rZXJuZWwudjEuTm9tb3NMaXN0SAASLgoGb2JqZWN0GAkgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0SABCBgoEa2luZCIGCgROdWxsIjgKCU5vbW9zTGlzdBIrCgZ2YWx1ZXMYASADKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZSKTAQoLTm9tb3NTdHJ1Y3QSOAoGZmllbGRzGAEgAygLMigubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0LkZpZWxkc0VudHJ5GkoKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIqCgV2YWx1ZRgCIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlOgI4ASI6Cg9IaXN0b3J5UmVxdWlyZWQSEQoJd29ya3NwYWNlGAEgASgJEhQKDHVudGlsX2NvbW1pdBgCIAEoCSpuCg9MYXdWZXJzaW9uT3JkZXISIQodTEFXX1ZFUlNJT05fT1JERVJfVU5TUEVDSUZJRUQQABIbChdMQVdfVkVSU0lPTl9PUkRFUl9FUVVBTBABEhsKF0xBV19WRVJTSU9OX09SREVSX0xPV0VSEAIq6gEKEkJpcnRoT3V0Y29tZVN0YXR1cxIkCiBCSVJUSF9PVVRDT01FX1NUQVRVU19VTlNQRUNJRklFRBAAEh0KGUJJUlRIX09VVENPTUVfU1RBVFVTX0JPUk4QARIhCh1CSVJUSF9PVVRDT01FX1NUQVRVU19ERUZFUlJFRBACEh8KG0JJUlRIX09VVENPTUVfU1RBVFVTX0ZBSUxFRBADEiAKHEJJUlRIX09VVENPTUVfU1RBVFVTX1JFRlVTRUQQBBIpCiVCSVJUSF9PVVRDT01FX1NUQVRVU19VTldBUlJBTlRFRF9DRVJUEAUqzBQKEUtlcm5lbFJlZnVzYWxDb2RlEiMKH0tFUk5FTF9SRUZVU0FMX0NPREVfVU5TUEVDSUZJRUQQABIlCiFLRVJORUxfUkVGVVNBTF9DT0RFX0JBRF9TSUdOQVRVUkUQARIkCiBLRVJORUxfUkVGVVNBTF9DT0RFX1VOQVVUSE9SSVpFRBACEicKI0tFUk5FTF9SRUZVU0FMX0NPREVfUE9MSUNZX0RJU0FCTEVEEAMSKgomS0VSTkVMX1JFRlVTQUxfQ09ERV9VTkNFUlRJRklFRF9QT0xJQ1kQBBIjCh9LRVJORUxfUkVGVVNBTF9DT0RFX1JFRkVSRU5USUFMEAUSLworS0VSTkVMX1JFRlVTQUxfQ09ERV9QT0lOVF9TVEFURV9VTkFWQUlMQUJMRRAGEiQKIEtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQX0VYQ0VFREVEEAcSLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBfQ09VTlRfVU5BVkFJTEFCTEUQCBIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX0VWSURFTkNFX1VOQkFDS0VEEAkSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9PUlBIQU5fUkVDRUlQVBAKEjYKMktFUk5FTF9SRUZVU0FMX0NPREVfUkVDRUlQVF9PTl9URVJNSU5BTF9PQkxJR0FUSU9OEAsSIgoeS0VSTkVMX1JFRlVTQUxfQ09ERV9OT1RfTUlOVEVEEAwSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9ET01BSU5fTElGRUNZQ0xFEA0SKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9UWVBFX1RBR19NSVNNQVRDSBAOEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfUkVUSVJFRF9SRUFEX1NVUkZBQ0UQDxIwCixLRVJORUxfUkVGVVNBTF9DT0RFX0NST1NTX1dPUktTUEFDRV9ERUNMSU5FRBAQEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfQUdHUkVHQVRFX0lOVkFSSUFOVBAREisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfV09SS1NQQUNFX0lOVkFSSUFOVBASEi4KKktFUk5FTF9SRUZVU0FMX0NPREVfQ0FQVFVSRURfUkVBRF9DT05GTElDVBATEjIKLktFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfUkVRVUlSRUQQFBI0CjBLRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1VOREVDTEFSRUQQFRIxCi1LRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX0lOVkFMSUQQFhIvCitLRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1NUQUxFEBcSMAosS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBUVVJFRF9SRUFEX1VOREVDTEFSRUQQGBItCilLRVJORUxfUkVGVVNBTF9DT0RFX0NBUFRVUkVEX1JFQURfUFJJVkFURRAZEjAKLEtFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9VTkRFQ0xBUkVEEBoSMwovS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1VOVFJVU1RFRF9LRVkQGxI2CjJLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfVU5UUlVTVEVEX1NPVVJDRRAcEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9GT1JHRUQQHRIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfU1RBTEUQHhIuCipLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfT1ZFUlNJWkUQHxI3CjNLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfRElTSE9OT1JFRF9TT1VSQ0UQIBI1CjFLRVJORUxfUkVGVVNBTF9DT0RFX0VRVUlWT0NBVElPTl9FVklERU5DRV9JTlZBTElEECESMwovS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RBVElPTl9SRUNFSVBUX0lOVkFMSUQQIhIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0tFWV9ST1NURVJfTUlTTUFUQ0gQIxIvCitLRVJORUxfUkVGVVNBTF9DT0RFX0tFWV9FUE9DSF9OT1RfTU9OT1RPTklDECQSKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9XUklURV9FUE9DSF9TVEFMRRAlEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfRU5WRUxPUEVfU0lEX01JU01BVENIECYSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9SRVZPS0VEX01FTUJFUl9SRVNVUlJFQ1RFRBAnEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfRk9SR0VEX1BSSU5DSVBBTBAoEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfT1dORURfS0VZX0FOQ0hPUhApEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfT1dORURfUkVDT1ZFUlkQKhIsCihLRVJORUxfUkVGVVNBTF9DT0RFX1NVUkZBQ0VEX0JBU0lTX0FIRUFEECsSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9TSUdORVJfRVBPQ0hfT1VUX09GX1dJTkRPVxAsEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfRVZPTFZFX1JFRlVTRUQQLRIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEFUSU9OX0lOVkFMSUQQLhItCilLRVJORUxfUkVGVVNBTF9DT0RFX1BBUkVOVF9ESURfTk9UX0FUVEVTVBAvEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfQ0VSVF9DSEFJTl9CUk9LRU4QMBIqCiZLRVJORUxfUkVGVVNBTF9DT0RFX05PVF9ST09URURfQVRfUk9PVBAxEioKJktFUk5FTF9SRUZVU0FMX0NPREVfREVMRUdBVElPTl9JTlZBTElEEDISJQohS0VSTkVMX1JFRlVTQUxfQ09ERV9QTEFOX1JFSkVDVEVEEDMSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9ET01BSU5fUkVGVVNFRBA0EjEKLUtFUk5FTF9SRUZVU0FMX0NPREVfSU5WQVJJQU5UX0VYRUNVVElPTl9GQVVMVBA1EjUKMUtFUk5FTF9SRUZVU0FMX0NPREVfQ0hFQ0tQT0lOVF9TSUdORVJfVU5BVkFJTEFCTEUQNhIoCiRLRVJORUxfUkVGVVNBTF9DT0RFX09GRkVSX0JBU0VfU1RBTEUQNxIlCiFLRVJORUxfUkVGVVNBTF9DT0RFX0JJUlRIX1JFRlVTRUQQOCrvAgoQRnVsbFJlc3VsdFJlYXNvbhIiCh5GVUxMX1JFU1VMVF9SRUFTT05fVU5TUEVDSUZJRUQQABIeChpGVUxMX1JFU1VMVF9SRUFTT05fTk9fQkFTRRABEiIKHkZVTExfUkVTVUxUX1JFQVNPTl9MQVdfQ0hBTkdFRBACEi0KKUZVTExfUkVTVUxUX1JFQVNPTl9SRUFEX0FVVEhPUklUWV9DSEFOR0VEEAMSKQolRlVMTF9SRVNVTFRfUkVBU09OX1BFUl9SRUNPUkRfUkVGVVNBTBAEEiMKH0ZVTExfUkVTVUxUX1JFQVNPTl9PUkRFUkVEX1JFQUQQBRImCiJGVUxMX1JFU1VMVF9SRUFTT05fVEVNUE9SQUxfRklFTERTEAYSJwojRlVMTF9SRVNVTFRfUkVBU09OX0JBU0VfVU5BVkFJTEFCTEUQBxIjCh9GVUxMX1JFU1VMVF9SRUFTT05fTEVHQUNZX1NUQVRFEAgqyQEKE0ludGVyZmFjZU1lbWJlcktpbmQSJQohSU5URVJGQUNFX01FTUJFUl9LSU5EX1VOU1BFQ0lGSUVEEAASIAocSU5URVJGQUNFX01FTUJFUl9LSU5EX0RPTUFJThABEiMKH0lOVEVSRkFDRV9NRU1CRVJfS0lORF9ESVJFQ1RJVkUQAhIjCh9JTlRFUkZBQ0VfTUVNQkVSX0tJTkRfQUdHUkVHQVRFEAMSHwobSU5URVJGQUNFX01FTUJFUl9LSU5EX0ZJRUxEEAQqiAIKHEludGVyZmFjZUNvbXBhdGliaWxpdHlTdGF0dXMSLgoqSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfU1RBVFVTX1VOU1BFQ0lGSUVEEAASKAokSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfU1RBVFVTX0VYQUNUEAESLQopSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfU1RBVFVTX0NPTVBBVElCTEUQAhIuCipJTlRFUkZBQ0VfQ09NUEFUSUJJTElUWV9TVEFUVVNfVU5BVkFJTEFCTEUQAxIvCitJTlRFUkZBQ0VfQ09NUEFUSUJJTElUWV9TVEFUVVNfSU5DT01QQVRJQkxFEAQqwwMKHEludGVyZmFjZUNvbXBhdGliaWxpdHlSZWFzb24SLgoqSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX1VOU1BFQ0lGSUVEEAASMQotSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX0RPTUFJTl9NSVNTSU5HEAESMQotSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX01FTUJFUl9NSVNTSU5HEAISMAosSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX0ZJRUxEX01JU1NJTkcQAxI1CjFJTlRFUkZBQ0VfQ09NUEFUSUJJTElUWV9SRUFTT05fVkFMVUVfS0lORF9DSEFOR0VEEAQSNwozSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX1JFUVVJUkVEX0lOUFVUX0FEREVEEAUSMQotSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX01BVFJJWF9JTlZBTElEEAYSOAo0SU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX1dJUkVfQ09OVFJBQ1RfQ0hBTkdFRBAHKrcCChBNYWludGVuYW5jZVBoYXNlEiEKHU1BSU5URU5BTkNFX1BIQVNFX1VOU1BFQ0lGSUVEEAASJAogTUFJTlRFTkFOQ0VfUEhBU0VfUkVBRF9ET0NVTUVOVFMQARIiCh5NQUlOVEVOQU5DRV9QSEFTRV9TUUxJVEVfSU5ERVgQAhImCiJNQUlOVEVOQU5DRV9QSEFTRV9DT01NQU5EX0ZST05USUVSEAMSIwofTUFJTlRFTkFOQ0VfUEhBU0VfQ09NTUFORF9ST1VURRAEEiEKHU1BSU5URU5BTkNFX1BIQVNFX0dJVF9DVVNUT0RZEAUSJgoiTUFJTlRFTkFOQ0VfUEhBU0VfUkVBRF9JTkRFWF9DQUNIRRAGEh4KGk1BSU5URU5BTkNFX1BIQVNFX0NPTVBMRVRFEAcqigEKD1ZlcmlmeUNoYWluV2FsaxIhCh1WRVJJRllfQ0hBSU5fV0FMS19VTlNQRUNJRklFRBAAEhoKFlZFUklGWV9DSEFJTl9XQUxLX0ZVTEwQARIcChhWRVJJRllfQ0hBSU5fV0FMS19TVUZGSVgQAhIaChZWRVJJRllfQ0hBSU5fV0FMS19NRU1PEAMqcAoYRWZmZWN0RXhlY3V0aW9uUGxhY2VtZW50EioKJkVGRkVDVF9FWEVDVVRJT05fUExBQ0VNRU5UX1VOU1BFQ0lGSUVEEAASKAokRUZGRUNUX0VYRUNVVElPTl9QTEFDRU1FTlRfQ1VTVE9ESUFOEAEqdgoaRWZmZWN0RXhlY3V0aW9uQ2FyZGluYWxpdHkSLAooRUZGRUNUX0VYRUNVVElPTl9DQVJESU5BTElUWV9VTlNQRUNJRklFRBAAEioKJkVGRkVDVF9FWEVDVVRJT05fQ0FSRElOQUxJVFlfU0lOR0xFVE9OEAEqtwEKF01vZGVsTGlmZWN5Y2xlT3BlcmF0aW9uEikKJU1PREVMX0xJRkVDWUNMRV9PUEVSQVRJT05fVU5TUEVDSUZJRUQQABIlCiFNT0RFTF9MSUZFQ1lDTEVfT1BFUkFUSU9OX0lOU1RBTEwQARIjCh9NT0RFTF9MSUZFQ1lDTEVfT1BFUkFUSU9OX1NUQUdFEAISJQohTU9ERUxfTElGRUNZQ0xFX09QRVJBVElPTl9QUk9NT1RFEAMq3AEKHUNoaWxkV29ya3NwYWNlTGlmZWN5Y2xlU3RhdHVzEjAKLENISUxEX1dPUktTUEFDRV9MSUZFQ1lDTEVfU1RBVFVTX1VOU1BFQ0lGSUVEEAASKwonQ0hJTERfV09SS1NQQUNFX0xJRkVDWUNMRV9TVEFUVVNfQUNUSVZFEAESLAooQ0hJTERfV09SS1NQQUNFX0xJRkVDWUNMRV9TVEFUVVNfUkVUSVJFRBACEi4KKkNISUxEX1dPUktTUEFDRV9MSUZFQ1lDTEVfU1RBVFVTX1JFQ0xBSU1FRBADKvgBCiJEZWNsYXJlZEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJLaW5kEjUKMURFQ0xBUkVEX0FVVEhFTlRJQ0FUSU9OX1BST1ZJREVSX0tJTkRfVU5TUEVDSUZJRUQQABIyCi5ERUNMQVJFRF9BVVRIRU5USUNBVElPTl9QUk9WSURFUl9LSU5EX1NFTEVDVEVEEAESMgouREVDTEFSRURfQVVUSEVOVElDQVRJT05fUFJPVklERVJfS0lORF9FTlJPTExFRBACEjMKL0RFQ0xBUkVEX0FVVEhFTlRJQ0FUSU9OX1BST1ZJREVSX0tJTkRfU09WRVJFSUdOEAMqigEKFURlY2xhcmVkTGF3TWVtYmVyS2luZBIoCiRERUNMQVJFRF9MQVdfTUVNQkVSX0tJTkRfVU5TUEVDSUZJRUQQABIkCiBERUNMQVJFRF9MQVdfTUVNQkVSX0tJTkRfQ09NTUFORBABEiEKHURFQ0xBUkVEX0xBV19NRU1CRVJfS0lORF9SRUFEEAIqiwYKH1Byb3ZpZGVyVG9rZW5WZXJpZmljYXRpb25TdGF0dXMSMgouUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19VTlNQRUNJRklFRBAAEiwKKFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfVkFMSUQQARI2CjJQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX05PX01BVENISU5HX0tFWRACEi4KKlBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfRVhQSVJFRBADEjQKMFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfTk9UX1lFVF9WQUxJRBAEEjYKMlBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfSVNTVUVSX01JU01BVENIEAUSOAo0UFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19BVURJRU5DRV9NSVNNQVRDSBAGEjQKMFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfQkFEX1NJR05BVFVSRRAHEjAKLFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfTUFMRk9STUVEEAgSPAo4UFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19VTlNVUFBPUlRFRF9BTEdPUklUSE0QCRIuCipQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0JBRF9LRVkQChI2CjJQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX01JU1NJTkdfU1VCSkVDVBALEjIKLlBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfTk9fVkVSSUZJRVIQDBI0CjBQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX01JU1NJTkdfVE9LRU4QDSrIAQoSRGV2aWNlU2lnbmVyU3RhdHVzEiQKIERFVklDRV9TSUdORVJfU1RBVFVTX1VOU1BFQ0lGSUVEEAASHwobREVWSUNFX1NJR05FUl9TVEFUVVNfQUNUSVZFEAESHwobREVWSUNFX1NJR05FUl9TVEFUVVNfQUJTRU5UEAISIAocREVWSUNFX1NJR05FUl9TVEFUVVNfUkVWT0tFRBADEigKJERFVklDRV9TSUdORVJfU1RBVFVTX0tFWV9VTkFWQUlMQUJMRRAEKtcBChNCaXJ0aEV2aWRlbmNlU3RhdHVzEiUKIUJJUlRIX0VWSURFTkNFX1NUQVRVU19VTlNQRUNJRklFRBAAEiYKIkJJUlRIX0VWSURFTkNFX1NUQVRVU19OT1RfUkVRVUlSRUQQARIfChtCSVJUSF9FVklERU5DRV9TVEFUVVNfUkVBRFkQAhItCilCSVJUSF9FVklERU5DRV9TVEFUVVNfREVMRUdBVElPTl9SRVFVSVJFRBADEiEKHUJJUlRIX0VWSURFTkNFX1NUQVRVU19JTlZBTElEEAQqsgEKEVF1ZXJ5UmVzdWx0Rm9ybWF0EiMKH1FVRVJZX1JFU1VMVF9GT1JNQVRfVU5TUEVDSUZJRUQQABIkCiBRVUVSWV9SRVNVTFRfRk9STUFUX0xFR0FDWV9WQUxVRRABEiQKIFFVRVJZX1JFU1VMVF9GT1JNQVRfTk9NSU5BTF9VU0RBEAISLAooUVVFUllfUkVTVUxUX0ZPUk1BVF9BUFBMSUNBVElPTl9QUk9UT0JVRhADKpUMCg5RdWVyeU9wZXJhdGlvbhIfChtRVUVSWV9PUEVSQVRJT05fVU5TUEVDSUZJRUQQABIcChhRVUVSWV9PUEVSQVRJT05fRVhUUkVNVU0QARIgChxRVUVSWV9PUEVSQVRJT05fUkVBRF9QT1NUVVJFEAQSHwobUVVFUllfT1BFUkFUSU9OX0NVUlJFTlRfTEFXEAUSIwofUVVFUllfT1BFUkFUSU9OX0lOVEVSRkFDRV9PRkZFUhAGEicKI1FVRVJZX09QRVJBVElPTl9SRUxBVElPTl9HQVRFX09GRkVSEAcSHQoZUVVFUllfT1BFUkFUSU9OX1NDRU5FX0xBVxAIEiEKHVFVRVJZX09QRVJBVElPTl9JTlNUQUxMRURfTEFXEAkSHAoYUVVFUllfT1BFUkFUSU9OX0RFU0NSSUJFEAoSIwofUVVFUllfT1BFUkFUSU9OX0tFUk5FTF9SRVNPVVJDRRALEiMKH1FVRVJZX09QRVJBVElPTl9ERVZFTE9QRVJfU1BBTlMQDBIpCiVRVUVSWV9PUEVSQVRJT05fREVDTEFSRURfQ0FQQUJJTElUSUVTEA0SHQoZUVVFUllfT1BFUkFUSU9OX1JFQURJTkVTUxAOEiQKIFFVRVJZX09QRVJBVElPTl9QUk9KRUNUSU9OX1NUQVRTEA8SJQohUVVFUllfT1BFUkFUSU9OX01FTU9SWV9EUk9QX1BST0JFEBASGAoUUVVFUllfT1BFUkFUSU9OX1dBUk0QERIbChdRVUVSWV9PUEVSQVRJT05fUkVGUkVTSBASEiAKHFFVRVJZX09QRVJBVElPTl9WRVJJRllfQ0hBSU4QExIiCh5RVUVSWV9PUEVSQVRJT05fQ09VTlRFUkZBQ1RVQUwQFBIZChVRVUVSWV9PUEVSQVRJT05fUk9VVEUQFRIlCiFRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1NFQUxfRklFTEQQGBIsCihRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX0JMSU5EX0lOREVYX1RPS0VOEBkSKgomUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9TQ09QRV9LRVkQGhIvCitRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX09XTkVEX0RFVklDRV9SRVFVRVNUEBsSMQotUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9QUkVQQVJFX0FQUFJPVkFMEBwSMQotUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9QUkVQQVJFX1JFQ09WRVJZEB0SIAocUVVFUllfT1BFUkFUSU9OX1JFQ0VJUFRfUEFUSBAiEh0KGVFVRVJZX09QRVJBVElPTl9DRVJUX1NJR04QIxIlCiFRVUVSWV9PUEVSQVRJT05fQklSVEhfVFJVU1RfU1RBVEUQJBIhCh1RVUVSWV9PUEVSQVRJT05fRVJBX0NFUlRfU0lHThAlEigKJFFVRVJZX09QRVJBVElPTl9ERUxFR0FUSU9OX0NFUlRfU0lHThAmEikKJVFVRVJZX09QRVJBVElPTl9DQU5PTklDQUxJWkVfRlJPTlRJRVIQJxIrCidRVUVSWV9PUEVSQVRJT05fQ0FOT05JQ0FMSVpFX1BST0pFQ1RJT04QKCIECAIQAiIECAMQAyIECBYQFiIECBcQFyIECB4QHiIECB8QHyIECCAQICIECCEQISohUVVFUllfT1BFUkFUSU9OX1BFTkRJTkdfQ09ORkxJQ1RTKihRVUVSWV9PUEVSQVRJT05fUEVORElOR19DT05GTElDVF9TVU1NQVJZKhRRVUVSWV9PUEVSQVRJT05fTUlOVCodUVVFUllfT1BFUkFUSU9OX0NSWVBUT19LRVlHRU4qH1FVRVJZX09QRVJBVElPTl9DUllQVE9fV1JBUF9LRVkqIVFVRVJZX09QRVJBVElPTl9DUllQVE9fVU5XUkFQX0tFWSodUVVFUllfT1BFUkFUSU9OX0FVVEhPUl9LRVlHRU4qIFFVRVJZX09QRVJBVElPTl9BVFRFU1RBVElPTl9TSUdOKqkBChlSZWFkUHJvamVjdGlvblN0b3JhZ2VLaW5kEiwKKFJFQURfUFJPSkVDVElPTl9TVE9SQUdFX0tJTkRfVU5TUEVDSUZJRUQQABIpCiVSRUFEX1BST0pFQ1RJT05fU1RPUkFHRV9LSU5EX1JFU0lERU5UEAESMwovUkVBRF9QUk9KRUNUSU9OX1NUT1JBR0VfS0lORF9GSUxFX0JBQ0tFRF9TQ0FMQVIQAirSAgoVUmVzaWRlbnRDb21wb25lbnRLaW5kEicKI1JFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1VOU1BFQ0lGSUVEEAASJgoiUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfRk9MRF9TVEFURRABEi0KKVJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1JFQURfTU9ERUxfU1FMSVRFEAISLgoqUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfUkVBRF9NT0RFTF9JTkRFWEVTEAMSLQopUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfU0hBUkVEX0FUVFJJQlVURUQQBBIsCihSRVNJREVOVF9DT01QT05FTlRfS0lORF9XT1JLU1BBQ0VfQ0FDSEVTEAUSLAooUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfR0lUX09CSkVDVF9DQUNIRRAGKmwKE0tlcm5lbExhd0NhcGFiaWxpdHkSJQohS0VSTkVMX0xBV19DQVBBQklMSVRZX1VOU1BFQ0lGSUVEEAASLgoqS0VSTkVMX0xBV19DQVBBQklMSVRZX1NUQUdFX1pFUk9fQk9PVFNUUkFQEAEqWQoVQ2hlY2twb2ludENvbXByZXNzaW9uEh8KG0NIRUNLUE9JTlRfQ09NUFJFU1NJT05fTk9ORRAAEh8KG0NIRUNLUE9JTlRfQ09NUFJFU1NJT05fR1pJUBABKpEBChxDaGVja3BvaW50VmVyaWZpY2F0aW9uUG9saWN5EjMKL0NIRUNLUE9JTlRfVkVSSUZJQ0FUSU9OX1BPTElDWV9WRVJJRllfQ0FOT05JQ0FMEAASPAo4Q0hFQ0tQT0lOVF9WRVJJRklDQVRJT05fUE9MSUNZX1RSVVNUX1BSRVZJT1VTTFlfVkVSSUZJRUQQASqAAQoTQ2hlY2twb2ludEFzc3VyYW5jZRIkCiBDSEVDS1BPSU5UX0FTU1VSQU5DRV9VTlNQRUNJRklFRBAAEiAKHENIRUNLUE9JTlRfQVNTVVJBTkNFX1RSVVNURUQQARIhCh1DSEVDS1BPSU5UX0FTU1VSQU5DRV9WRVJJRklFRBACKokBChVLZXJuZWxSZXNpZGVuY3lJbnRlbnQSJwojS0VSTkVMX1JFU0lERU5DWV9JTlRFTlRfVU5TUEVDSUZJRUQQABIgChxLRVJORUxfUkVTSURFTkNZX0lOVEVOVF9XQVJNEAESJQohS0VSTkVMX1JFU0lERU5DWV9JTlRFTlRfT05fREVNQU5EEAIqrgEKFkN1c3RvZHlSZXRlbnRpb25JbnRlbnQSKAokQ1VTVE9EWV9SRVRFTlRJT05fSU5URU5UX1VOU1BFQ0lGSUVEEAASIwofQ1VTVE9EWV9SRVRFTlRJT05fSU5URU5UX1JFVEFJThABEiIKHkNVU1RPRFlfUkVURU5USU9OX0lOVEVOVF9DQUNIRRACEiEKHUNVU1RPRFlfUkVURU5USU9OX0lOVEVOVF9OT05FEAMqqAEKGkludGVudFRyYW5zcG9ydFJlcXVpcmVtZW50EiwKKElOVEVOVF9UUkFOU1BPUlRfUkVRVUlSRU1FTlRfVU5TUEVDSUZJRUQQABIuCipJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX1NFQUxFRF9DSEFOR0UQARIsCihJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX0NPTU1JVF9UUkVFEAIqiQEKFUxpZmVjeWNsZUluc3RhbGxQaGFzZRInCiNMSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9VTlNQRUNJRklFRBAAEiIKHkxJRkVDWUNMRV9JTlNUQUxMX1BIQVNFX0FDVElWRRABEiMKH0xJRkVDWUNMRV9JTlNUQUxMX1BIQVNFX1BFTkRJTkcQAjJZChJOb21vc0tlcm5lbFNlcnZpY2USQwoEQ2FsbBIcLm5vbW9zLmtlcm5lbC52MS5DYWxsUmVxdWVzdBodLm5vbW9zLmtlcm5lbC52MS5DYWxsUmVzcG9uc2ViBnByb3RvMw", [file_google_protobuf_any]);
5736
+ var file_nomos_kernel_v1_kernel = /* @__PURE__ */ fileDesc("Chxub21vcy9rZXJuZWwvdjEva2VybmVsLnByb3RvEg9ub21vcy5rZXJuZWwudjEixgkKC0NhbGxSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIsCgRvcGVuGAogASgLMhwubm9tb3Mua2VybmVsLnYxLk9wZW5SZXF1ZXN0SAASLgoFb2ZmZXIYCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXF1ZXN0SAASLgoFcXVlcnkYDCABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0SAASMAoGb3V0Ym94GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlcXVlc3RIABIsCgRzeW5jGA4gASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZXF1ZXN0SAASMgoHY3VzdG9keRgPIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVxdWVzdEgAEkAKCWNvbmZpZ3VyZRgQIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxDb25maWd1cmF0aW9uUmVxdWVzdEgAEkgKE3NpZ25fcHJlcGFyZWRfb2ZmZXIYESABKAsyKS5ub21vcy5rZXJuZWwudjEuU2lnblByZXBhcmVkT2ZmZXJSZXF1ZXN0SAASSgoUcHJlcGFyZV9yZW1vdGVfb2ZmZXIYEiABKAsyKi5ub21vcy5rZXJuZWwudjEuUHJlcGFyZVJlbW90ZU9mZmVyUmVxdWVzdEgAEk4KFnNpZ25fb2ZmZXJfcHJlcGFyYXRpb24YEyABKAsyLC5ub21vcy5rZXJuZWwudjEuU2lnbk9mZmVyUHJlcGFyYXRpb25SZXF1ZXN0SAASTgoWc2lnbl9iaXJ0aF9jZXJ0aWZpY2F0ZRgUIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5TaWduQmlydGhDZXJ0aWZpY2F0ZVJlcXVlc3RIABJDChBzaWduaW5nX2lkZW50aXR5GBcgASgLMicubm9tb3Mua2VybmVsLnYxLlNpZ25pbmdJZGVudGl0eVJlcXVlc3RIABJWChpzaWduX2F1dGhvcml0eV9hdHRlc3RhdGlvbhgYIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5TaWduQXV0aG9yaXR5QXR0ZXN0YXRpb25SZXF1ZXN0SAASPAoNbWludF90eXBlZF9pZBgZIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5NaW50VHlwZWRJZFJlcXVlc3RIABJJChNlbmNyeXB0aW9uX2lkZW50aXR5GBogASgLMioubm9tb3Mua2VybmVsLnYxLkVuY3J5cHRpb25JZGVudGl0eVJlcXVlc3RIABI+Cg53cmFwX3Njb3BlX2tleRgbIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5XcmFwU2NvcGVLZXlSZXF1ZXN0SAASQgoQdW53cmFwX3Njb3BlX2tleRgcIAEoCzImLm5vbW9zLmtlcm5lbC52MS5VbndyYXBTY29wZUtleVJlcXVlc3RIAEILCglvcGVyYXRpb25KBAgVEBZKBAgWEBdSFGluaXRpYWxpemVfd29ya3NwYWNlUhZhcHBseV93b3Jrc3BhY2VfZWZmZWN0IoMKCgxDYWxsUmVzcG9uc2USGAoQcHJvdG9jb2xfdmVyc2lvbhgBIAEoDRISCgpyZXF1ZXN0X2lkGAIgASgJEisKB2ZhaWx1cmUYCiABKAsyGC5ub21vcy5rZXJuZWwudjEuRmFpbHVyZUgAEi0KBG9wZW4YCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT3BlblJlc3BvbnNlSAASLwoFb2ZmZXIYDCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUgAEi8KBXF1ZXJ5GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5UmVzcG9uc2VIABIxCgZvdXRib3gYDiABKAsyHy5ub21vcy5rZXJuZWwudjEuT3V0Ym94UmVzcG9uc2VIABItCgRzeW5jGA8gASgLMh0ubm9tb3Mua2VybmVsLnYxLlN5bmNSZXNwb25zZUgAEjMKB2N1c3RvZHkYECABKAsyIC5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVJlc3BvbnNlSAASQQoJY29uZmlndXJlGBEgASgLMiwubm9tb3Mua2VybmVsLnYxLktlcm5lbENvbmZpZ3VyYXRpb25SZXNwb25zZUgAEkkKE3NpZ25fcHJlcGFyZWRfb2ZmZXIYEiABKAsyKi5ub21vcy5rZXJuZWwudjEuU2lnblByZXBhcmVkT2ZmZXJSZXNwb25zZUgAEksKFHByZXBhcmVfcmVtb3RlX29mZmVyGBMgASgLMisubm9tb3Mua2VybmVsLnYxLlByZXBhcmVSZW1vdGVPZmZlclJlc3BvbnNlSAASTwoWc2lnbl9vZmZlcl9wcmVwYXJhdGlvbhgUIAEoCzItLm5vbW9zLmtlcm5lbC52MS5TaWduT2ZmZXJQcmVwYXJhdGlvblJlc3BvbnNlSAASTwoWc2lnbl9iaXJ0aF9jZXJ0aWZpY2F0ZRgVIAEoCzItLm5vbW9zLmtlcm5lbC52MS5TaWduQmlydGhDZXJ0aWZpY2F0ZVJlc3BvbnNlSAASRAoQc2lnbmluZ19pZGVudGl0eRgYIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5TaWduaW5nSWRlbnRpdHlSZXNwb25zZUgAElcKGnNpZ25fYXV0aG9yaXR5X2F0dGVzdGF0aW9uGBkgASgLMjEubm9tb3Mua2VybmVsLnYxLlNpZ25BdXRob3JpdHlBdHRlc3RhdGlvblJlc3BvbnNlSAASPQoNbWludF90eXBlZF9pZBgaIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5NaW50VHlwZWRJZFJlc3BvbnNlSAASSgoTZW5jcnlwdGlvbl9pZGVudGl0eRgbIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5FbmNyeXB0aW9uSWRlbnRpdHlSZXNwb25zZUgAEj8KDndyYXBfc2NvcGVfa2V5GBwgASgLMiUubm9tb3Mua2VybmVsLnYxLldyYXBTY29wZUtleVJlc3BvbnNlSAASQwoQdW53cmFwX3Njb3BlX2tleRgdIAEoCzInLm5vbW9zLmtlcm5lbC52MS5VbndyYXBTY29wZUtleVJlc3BvbnNlSABCCQoHb3V0Y29tZUoECBYQF0oECBcQGFIUaW5pdGlhbGl6ZV93b3Jrc3BhY2VSFmFwcGx5X3dvcmtzcGFjZV9lZmZlY3QitwIKB0ZhaWx1cmUSDAoEY29kZRgBIAEoCRIPCgdtZXNzYWdlGAIgASgJEi0KB2RldGFpbHMYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSYQoiaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzc19yZXF1aXJlZBgKIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1JlcXVpcmVkSACIAQESPwoQaGlzdG9yeV9yZXF1aXJlZBgLIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5IaXN0b3J5UmVxdWlyZWRIAYgBAUIlCiNfaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzc19yZXF1aXJlZEITChFfaGlzdG9yeV9yZXF1aXJlZCJRCh9JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1JlcXVpcmVkEhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAkSFAoMcmVxdWlyZWRfa2lkGAIgASgJIjwKDE9wZW5SZXNwb25zZRIsCgZyZXN1bHQYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QiugQKDU9mZmVyUmVzcG9uc2USMgoIYWRtaXR0ZWQYASABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJBZG1pdHRlZEgAEjAKB3JlZnVzZWQYAiABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZWZ1c2VkSAASOwoNZGVhZF9sZXR0ZXJlZBgDIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5PZmZlckRlYWRMZXR0ZXJlZEgAEjgKC3F1YXJhbnRpbmVkGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLk9mZmVyUXVhcmFudGluZWRIABJKChVibG9ja2VkX29uX2RlcGVuZGVuY3kYBSABKAsyKS5ub21vcy5rZXJuZWwudjEuT2ZmZXJCbG9ja2VkT25EZXBlbmRlbmN5SAASMgoIcHJlcGFyZWQYBiABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJQcmVwYXJlZEgAEkIKEHdvcmtzcGFjZV9lZmZlY3QYByABKAsyKC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0SWRlbnRpdHkSGwoOanVkZ2VkX2F0X2hlYWQYCCABKAlIAYgBARJNChJqdWRnbWVudF9zaWduYXR1cmUYCSABKAsyMS5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0SnVkZ21lbnRTaWduYXR1cmVCCQoHb3V0Y29tZUIRCg9fanVkZ2VkX2F0X2hlYWQifwogV29ya3NwYWNlRWZmZWN0SnVkZ21lbnRTaWduYXR1cmUSDwoHdmVyc2lvbhgBIAEoDRISCgpwdWJsaWNfa2V5GAIgASgMEhEKCWtleV9lcG9jaBgDIAEoEhIRCglzaWduYXR1cmUYBCABKAwSEAoIanVkZ21lbnQYBSABKAwiqAEKF1dvcmtzcGFjZUVmZmVjdElkZW50aXR5EhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAkSIAoYc291cmNlX3dvcmtzcGFjZV9nZW5lc2lzGAIgASgJEhgKEHRhcmdldF93b3Jrc3BhY2UYAyABKAkSIAoYdGFyZ2V0X3dvcmtzcGFjZV9nZW5lc2lzGAQgASgJEhUKDWVmZmVjdF9kaWdlc3QYBSABKAkiVwocV29ya3NwYWNlRWZmZWN0U3RhdHVzUmVxdWVzdBIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYASABKAkSFQoNZWZmZWN0X2RpZ2VzdBgCIAEoCSJRCh1Xb3Jrc3BhY2VFZmZlY3RTdGF0dXNSZXNwb25zZRIwCghqdWRnbWVudBgBIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5PZmZlclJlc3BvbnNlIoYCCiNSZWNvcmRXb3Jrc3BhY2VFZmZlY3RPdXRjb21lUmVxdWVzdBIwCgZzb3VyY2UYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhkKEXNvdXJjZV9vZmZlcl9wYXRoGAIgASgJEhUKC21haWxib3hfdXJsGAMgASgJSAASPQoRcmVjaXBpZW50X2N1c3RvZHkYBSABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0SAASMAoIanVkZ21lbnQYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUIKCghldmlkZW5jZSJaCh5SZWNvcmRlZFdvcmtzcGFjZUVmZmVjdE91dGNvbWUSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCRIYChB0ZXJtaW5hbF9yZWZ1c2FsGAMgASgIIq4FCg1PZmZlckFkbWl0dGVkEgwKBGhlYWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEhcKCmludGVudF9vdXQYAyABKAlIAIgBARIzCgdjcmVhdGVkGAQgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEjQKCGFmZmVjdGVkGAUgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEiwKBGJvcm4YBiADKAsyHi5ub21vcy5rZXJuZWwudjEuQm9ybldvcmtzcGFjZRI1Cg5iaXJ0aF9vdXRjb21lcxgHIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSNwoMa2VybmVsX3NwYW5zGAggASgLMhwubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5zSAGIAQESDwoHZHJ5X3J1bhgJIAEoCBIfChJpbnN0YWxsZWRfbGF3X2hhc2gYCiABKAlIAogBARI5CglwbGFjZW1lbnQYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuUGxhY2VtZW50QWRvcHRlZEgDiAEBEhcKD2FscmVhZHlfYXBwbGllZBgMIAEoCBI8CgxzdGF0ZV9jaGFuZ2UYDSABKAsyIS5ub21vcy5rZXJuZWwudjEuT2ZmZXJTdGF0ZUNoYW5nZUgEiAEBEkAKFGxhd192ZXJzaW9uX3dhcm5pbmdzGA4gAygLMiIubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25XYXJuaW5nQg0KC19pbnRlbnRfb3V0Qg8KDV9rZXJuZWxfc3BhbnNCFQoTX2luc3RhbGxlZF9sYXdfaGFzaEIMCgpfcGxhY2VtZW50Qg8KDV9zdGF0ZV9jaGFuZ2UiIwoLTGF3SWRlbnRpdHkSFAoMcGFja2FnZV9uYW1lGAEgASgJIiQKCkxhd1ZlcnNpb24SFgoOY2xvc3VyZV9zaGEyNTYYASABKAkiIQoPTGF3VmVyc2lvbkNsYWltEg4KBnNlbXZlchgBIAEoCSLgAgoRTGF3VmVyc2lvbldhcm5pbmcSKQoDbGF3GAEgASgLMhwubm9tb3Mua2VybmVsLnYxLkxhd0lkZW50aXR5Ei8KBW9yZGVyGAIgASgOMiAubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25PcmRlchI5Cg9pbnN0YWxsZWRfY2xhaW0YAyABKAsyIC5ub21vcy5rZXJuZWwudjEuTGF3VmVyc2lvbkNsYWltEjYKEWluc3RhbGxlZF92ZXJzaW9uGAQgASgLMhsubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb24SNgoMc2VydmVkX2NsYWltGAUgASgLMiAubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25DbGFpbRIzCg5zZXJ2ZWRfdmVyc2lvbhgGIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5MYXdWZXJzaW9uEg8KB21lc3NhZ2UYByABKAkiUgoQT2ZmZXJTdGF0ZUNoYW5nZRITCgtwYXJlbnRfaGVhZBgBIAEoCRIXCg9hZ2dyZWdhdGVfdHlwZXMYAiADKAkSEAoIYXJjaGl2ZXMYAyABKAgiLQoRT2ZmZXJBZ2dyZWdhdGVSZWYSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCSIwCg1Cb3JuV29ya3NwYWNlEhEKCXdvcmtzcGFjZRgBIAEoCRIMCgRoZWFkGAIgASgJIssDCgxCaXJ0aE91dGNvbWUSFgoJd29ya3NwYWNlGAEgASgJSACIAQESMwoGc3RhdHVzGAIgASgOMiMubm9tb3Mua2VybmVsLnYxLkJpcnRoT3V0Y29tZVN0YXR1cxITCgZyZWFzb24YAyABKAlIAYgBARIRCgRjb2RlGAQgASgJSAKIAQESEAoIcmVwbGF5ZWQYBSABKAgSFQoIbGF3X2hhc2gYBiABKAlIA4gBARIdChBwYXJlbnRfd29ya3NwYWNlGAcgASgJSASIAQESHAoPY2hpbGRfd29ya3NwYWNlGAggASgJSAWIAQESJwoaY2VydGlmaWNhdGVfcmVmdXNhbF9yZWFzb24YCSABKAlIBogBARI0CgdyZWZ1c2FsGAogASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxIB4gBAUIMCgpfd29ya3NwYWNlQgkKB19yZWFzb25CBwoFX2NvZGVCCwoJX2xhd19oYXNoQhMKEV9wYXJlbnRfd29ya3NwYWNlQhIKEF9jaGlsZF93b3Jrc3BhY2VCHQobX2NlcnRpZmljYXRlX3JlZnVzYWxfcmVhc29uQgoKCF9yZWZ1c2FsIi8KEEtlcm5lbFNwYW5NZXRyaWMSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoBCKjAQoKS2VybmVsU3BhbhINCgVsYWJlbBgBIAEoCRIQCgh0b3RhbF91cxgCIAEoBBIPCgdyZWNvcmRzGAMgASgEEjEKBnBoYXNlcxgEIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuTWV0cmljEjAKBW5vdGVzGAUgAygLMiEubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5NZXRyaWMicQoLS2VybmVsU3BhbnMSLwoKb3BlcmF0aW9ucxgBIAMoCzIbLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuEjEKBmVuZ2luZRgCIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuTWV0cmljImEKDURvbWFpblJlZnVzYWwSEgoKbGF3X3NoYTI1NhgBIAEoDBIRCglpbnZhcmlhbnQYAiABKAkSFQoNdHlwZV9pZGVudGl0eRgDIAEoCRISCgp2YWx1ZV91c2RhGAQgASgMIs4BCgxPZmZlclJlZnVzZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIvCgdyZWZ1c2FsGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWwSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSNgoOZG9tYWluX3JlZnVzYWwYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuRG9tYWluUmVmdXNhbEILCglfb2ZmZXJfaWQiegoRT2ZmZXJEZWFkTGV0dGVyZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZyZWFzb24YAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIq4BChBPZmZlclF1YXJhbnRpbmVkEhUKCG9mZmVyX2lkGAEgASgJSACIAQESGQoRYXV0aG9yZWRfbGF3X2hhc2gYAiABKAkSGAoQY3VycmVudF9sYXdfaGFzaBgDIAEoCRIOCgZyZWFzb24YBCABKAkSMQoLZGlhZ25vc3RpY3MYBSABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIsABChhPZmZlckJsb2NrZWRPbkRlcGVuZGVuY3kSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZkZXRhaWwYAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSPQoSYXdhaXRzX21haW50ZW5hbmNlGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlYWRJbmRleFBlbmRpbmdCCwoJX29mZmVyX2lkIr8BCg1PZmZlclByZXBhcmVkEhwKFGF1dGhvcmVkX2NoYW5nZV91c2RhGAEgASgMEhkKEXdvcmtzcGFjZV9iaW5kaW5nGAIgASgJEhgKEHByZXBhcmVkX2F0X2hlYWQYAyABKAkSIQoZYXV0aG9yX3NpZ25hdHVyZV9yZXF1aXJlZBgEIAEoCBI4CghkZXRhY2hlZBgFIAEoCzImLm5vbW9zLmtlcm5lbC52MS5EZXRhY2hlZFNpZ25pbmdJbnB1dHMiYwoVRGV0YWNoZWRTaWduaW5nSW5wdXRzEhIKCnB1YmxpY19rZXkYASABKAwSEQoJaW50ZW50X2lkGAIgASgJEg4KBmF1dGhvchgDIAEoDBITCgtvZmZlcl90b2tlbhgEIAEoCSKVAQoURGV0YWNoZWRTaWduZWRDaGFuZ2USHAoUYXV0aG9yZWRfY2hhbmdlX3VzZGEYASABKAwSEgoKcHVibGljX2tleRgCIAEoDBIYChBhdXRob3Jfc2lnbmF0dXJlGAMgASgMEhIKCm9mZmVyX2Jhc2UYBCABKAkSHQoVb2ZmZXJfdG9rZW5fc2lnbmF0dXJlGAUgASgMImoKGFNpZ25QcmVwYXJlZE9mZmVyUmVxdWVzdBIcChRhdXRob3JlZF9jaGFuZ2VfdXNkYRgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIVCg1hdXRob3Jfc2VjcmV0GAMgASgMIjcKGVNpZ25QcmVwYXJlZE9mZmVyUmVzcG9uc2USGgoSc2lnbmVkX2NoYW5nZV91c2RhGAEgASgMIq0BChlQcmVwYXJlUmVtb3RlT2ZmZXJSZXF1ZXN0EhUKDW9mZmVyX3JlcXVlc3QYASABKAwSGQoRd29ya3NwYWNlX2JpbmRpbmcYAiABKAkSGAoQcHJlcGFyZWRfYXRfaGVhZBgDIAEoCRISCgpwdWJsaWNfa2V5GAQgASgMEhEKCXNpZ25hdHVyZRgFIAEoDBIdChVyZXF1aXJlZF9jdXN0b2R5X2hlYWQYBiABKAkiUAoZT2ZmZXJQcmVwYXJhdGlvbkNoYWxsZW5nZRIZChF3b3Jrc3BhY2VfYmluZGluZxgBIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAIgASgJIpkBChpQcmVwYXJlUmVtb3RlT2ZmZXJSZXNwb25zZRI/CgljaGFsbGVuZ2UYASABKAsyKi5ub21vcy5rZXJuZWwudjEuT2ZmZXJQcmVwYXJhdGlvbkNoYWxsZW5nZUgAEi8KBW9mZmVyGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVzcG9uc2VIAEIJCgdvdXRjb21lIoABChtTaWduT2ZmZXJQcmVwYXJhdGlvblJlcXVlc3QSFQoNb2ZmZXJfcmVxdWVzdBgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAMgASgJEhUKDWF1dGhvcl9zZWNyZXQYBCABKAwiRQocU2lnbk9mZmVyUHJlcGFyYXRpb25SZXNwb25zZRISCgpwdWJsaWNfa2V5GAEgASgMEhEKCXNpZ25hdHVyZRgCIAEoDCKkAQoWU2lnbmluZ0lkZW50aXR5UmVxdWVzdBI7CghnZW5lcmF0ZRgBIAEoCzInLm5vbW9zLmtlcm5lbC52MS5HZW5lcmF0ZVNpZ25pbmdLZXlQYWlySAASQAoNZGVyaXZlX3B1YmxpYxgCIAEoCzInLm5vbW9zLmtlcm5lbC52MS5EZXJpdmVTaWduaW5nUHVibGljS2V5SABCCwoJb3BlcmF0aW9uIhgKFkdlbmVyYXRlU2lnbmluZ0tleVBhaXIiKAoWRGVyaXZlU2lnbmluZ1B1YmxpY0tleRIOCgZzZWNyZXQYASABKAwilgEKF1NpZ25pbmdJZGVudGl0eVJlc3BvbnNlEjQKCWdlbmVyYXRlZBgBIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5TaWduaW5nS2V5UGFpckgAEjsKDmRlcml2ZWRfcHVibGljGAIgASgLMiEubm9tb3Mua2VybmVsLnYxLlNpZ25pbmdQdWJsaWNLZXlIAEIICgZyZXN1bHQiNAoOU2lnbmluZ0tleVBhaXISDgoGc2VjcmV0GAEgASgMEhIKCnB1YmxpY19rZXkYAiABKAwiJgoQU2lnbmluZ1B1YmxpY0tleRISCgpwdWJsaWNfa2V5GAEgASgMIpwBCh9TaWduQXV0aG9yaXR5QXR0ZXN0YXRpb25SZXF1ZXN0EhUKDXNpZ25lcl9zZWNyZXQYASABKAwSGgoSYXNzZXJ0ZXJfd29ya3NwYWNlGAIgASgJEg4KBm9iamVjdBgDIAEoCRIQCghyZWxhdGlvbhgEIAEoCRIPCgdzdWJqZWN0GAUgASgJEhMKC2F0dGVzdGVkX2F0GAYgASgJIkkKIFNpZ25BdXRob3JpdHlBdHRlc3RhdGlvblJlc3BvbnNlEhEKCXNpZ25hdHVyZRgBIAEoDBISCgpwdWJsaWNfa2V5GAIgASgMIkQKEk1pbnRUeXBlZElkUmVxdWVzdBIQCgh0eXBlX3RhZxgBIAEoCRIcChRjYXB0dXJlZF91bml4X21pbGxpcxgCIAEoBCIhChNNaW50VHlwZWRJZFJlc3BvbnNlEgoKAmlkGAEgASgJIhsKGUVuY3J5cHRpb25JZGVudGl0eVJlcXVlc3QiRAoaRW5jcnlwdGlvbklkZW50aXR5UmVzcG9uc2USEgoKc2VjcmV0X2tleRgBIAEoDBISCgpwdWJsaWNfa2V5GAIgASgMIkYKE1dyYXBTY29wZUtleVJlcXVlc3QSHAoUcmVjaXBpZW50X3B1YmxpY19rZXkYASABKAwSEQoJc2NvcGVfa2V5GAIgASgMIkgKFFdyYXBTY29wZUtleVJlc3BvbnNlEhwKFGVwaGVtZXJhbF9wdWJsaWNfa2V5GAEgASgMEhIKCmNpcGhlcnRleHQYAiABKAwiZwoVVW53cmFwU2NvcGVLZXlSZXF1ZXN0EhwKFHJlY2lwaWVudF9zZWNyZXRfa2V5GAEgASgMEhwKFGVwaGVtZXJhbF9wdWJsaWNfa2V5GAIgASgMEhIKCmNpcGhlcnRleHQYAyABKAwiKwoWVW53cmFwU2NvcGVLZXlSZXNwb25zZRIRCglzY29wZV9rZXkYASABKAwikwEKDUtlcm5lbFJlZnVzYWwSMAoEY29kZRgBIAEoDjIiLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsQ29kZRIPCgdtZXNzYWdlGAIgASgJEi0KB2RldGFpbHMYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEAoIdGVybWluYWwYBCABKAgixxAKDVF1ZXJ5UmVzcG9uc2USFQoLcmVzdWx0X3VzZGEYAiABKAxIABIsCgV2YWx1ZRgBIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlSAASSgoTYXV0aG9yaXphdGlvbl9jaGVjaxgKIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZUgAEkwKFGF1dGhvcml6YXRpb25fZXhwYW5kGAsgASgLMiwubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBhbmRSZXNwb25zZUgAEj4KDW9zZ2lfcmVzb3VyY2UYDCABKAsyJS5ub21vcy5rZXJuZWwudjEuT3NnaVJlc291cmNlUmVzcG9uc2VIABJKChNmcm9udGllcl90cmFuc2l0aW9uGA0gASgLMisubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlSAASSwoUb3duZWRfZGV2aWNlX3JlcXVlc3QYDiABKAsyKy5ub21vcy5rZXJuZWwudjEuT3duZWREZXZpY2VSZXF1ZXN0UmVzcG9uc2VIABJPChZvd25lZF9wcmVwYXJlX2FwcHJvdmFsGA8gASgLMi0ubm9tb3Mua2VybmVsLnYxLk93bmVkUHJlcGFyZUFwcHJvdmFsUmVzcG9uc2VIABIXCg1pbnRlZ2VyX3ZhbHVlGBAgASgSSAASUAoWYXV0aGVudGljYXRpb25fcG9zdHVyZRgRIAEoCzIuLm5vbW9zLmtlcm5lbC52MS5BdXRoZW50aWNhdGlvblBvc3R1cmVSZXNwb25zZUgAEkgKEGNoaWxkX3dvcmtzcGFjZXMYEiABKAsyLC5ub21vcy5rZXJuZWwudjEuQ2hpbGRXb3Jrc3BhY2VRdWVyeVJlc3BvbnNlSAASWQoWYXV0aG9yaW5nX3JlcXVpcmVtZW50cxgTIAEoCzI3Lm5vbW9zLmtlcm5lbC52MS5EaXJlY3RpdmVBdXRob3JpbmdSZXF1aXJlbWVudHNSZXNwb25zZUgAEj4KDXdhcm1fcHJvZ3Jlc3MYFSABKAsyJS5ub21vcy5rZXJuZWwudjEuV2FybVByb2dyZXNzUmVzcG9uc2VIABJVChlpZGVudGl0eV9wcm92aWRlcl93aXRuZXNzGBYgASgLMjAubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzUmVzcG9uc2VIABJSChdpbnRlcmZhY2VfY29tcGF0aWJpbGl0eRgXIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVzcG9uc2VIABIyChJhcHBsaWNhdGlvbl9yZXN1bHQYGCABKAsyFC5nb29nbGUucHJvdG9idWYuQW55SAASSgoTbWFpbnRlbmFuY2VfcXVhbnR1bRgZIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5NYWludGVuYW5jZVF1YW50dW1SZXNwb25zZUgAEj8KEnJlYWRfaW5kZXhfcGVuZGluZxgaIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZWFkSW5kZXhQZW5kaW5nSAASRwoSZnVsbF9oaXN0b3J5X2F1ZGl0GBsgASgLMikubm9tb3Mua2VybmVsLnYxLkZ1bGxIaXN0b3J5QXVkaXRSZXNwb25zZUgAElMKGHdvcmtzcGFjZV9lZmZlY3RfcmVjZWlwdBgcIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UmVzcG9uc2VIABJLChRvcGVuX2FwaV9kZXNjcmlwdGlvbhgdIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5PcGVuQXBpRGVzY3JpcHRpb25SZXNwb25zZUgAElcKGmluc3RhbGxlZF9sYXdfZGVjbGFyYXRpb25zGB4gASgLMjEubm9tb3Mua2VybmVsLnYxLkluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1Jlc3BvbnNlSAASSwoYYXBwbGljYXRpb25fcmVzdWx0X2RlbHRhGB8gASgLMicubm9tb3Mua2VybmVsLnYxLkFwcGxpY2F0aW9uUmVzdWx0RGVsdGFIABJJChNyZXNvbHZlX2RvbWFpbl9wbGFuGCQgASgLMioubm9tb3Mua2VybmVsLnYxLlJlc29sdmVEb21haW5QbGFuUmVzcG9uc2VIABJJChh2ZXJpZnlfY2hhaW5fZGlhZ25vc3RpY3MYFCABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcxIcCg9yZXN1bHRfZnJvbnRpZXIYICABKAlIAYgBARJCChJmdWxsX3Jlc3VsdF9yZWFzb24YISABKA4yIS5ub21vcy5rZXJuZWwudjEuRnVsbFJlc3VsdFJlYXNvbkgCiAEBEkMKE3Jlc3VsdF9kZXBlbmRlbmNpZXMYIiABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVhZERlcGVuZGVuY2llc0gDiAEBEkAKEXJlYWRfaW5kZXhfYmVoaW5kGCMgASgLMiAubm9tb3Mua2VybmVsLnYxLlJlYWRJbmRleEJlaGluZEgEiAEBQggKBnJlc3VsdEISChBfcmVzdWx0X2Zyb250aWVyQhUKE19mdWxsX3Jlc3VsdF9yZWFzb25CFgoUX3Jlc3VsdF9kZXBlbmRlbmNpZXNCFAoSX3JlYWRfaW5kZXhfYmVoaW5kIoABCg9SZWFkSW5kZXhCZWhpbmQSEQoJd29ya3NwYWNlGAEgASgJEg4KBmJyYW5jaBgCIAEoCRIXCg9zZXJ2ZWRfZnJvbnRpZXIYAyABKAkSGgoScmVxdWVzdGVkX2Zyb250aWVyGAQgASgJEhUKDXN1Y2Nlc3Nvcl9sYXcYBSABKAgiVAoQUmVhZERlcGVuZGVuY2llcxIXCg9hZ2dyZWdhdGVfdHlwZXMYASADKAkSFgoOcmVhZHNfYXJjaGl2ZXMYAiABKAgSDwoHcmVhZF9hdBgDIAEoCSKCAQoWQXBwbGljYXRpb25SZXN1bHREZWx0YRIVCg1iYXNlX2Zyb250aWVyGAEgASgJEhAKCGZyb250aWVyGAIgASgJEioKDGNoYW5nZWRfcm93cxgDIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnkSEwoLcmVtb3ZlZF9pZHMYBCADKAkiMwoaT3BlbkFwaURlc2NyaXB0aW9uUmVzcG9uc2USFQoNZG9jdW1lbnRfanNvbhgBIAEoCSJxChtJbnRlcmZhY2VDb21wYXRpYmlsaXR5UXVlcnkSHwoXYXBwbGljYXRpb25fbWF0cml4X3VzZGEYASABKAwSMQoPY2FuZGlkYXRlX3VuaXRzGAIgAygLMhgubm9tb3Mua2VybmVsLnYxLkxhd1VuaXQisAIKFkludGVyZmFjZU1lbWJlclZlcmRpY3QSDgoGZG9tYWluGAEgASgJEjIKBGtpbmQYAiABKA4yJC5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlTWVtYmVyS2luZBIOCgZtZW1iZXIYAyABKAkSEgoFZmllbGQYBCABKAlIAIgBARI9CgZzdGF0dXMYBSABKA4yLS5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVN0YXR1cxI9CgZyZWFzb24YBiABKA4yLS5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVJlYXNvbhIXCgpkaWFnbm9zdGljGAcgASgJSAGIAQFCCAoGX2ZpZWxkQg0KC19kaWFnbm9zdGljIsIBCh5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVzcG9uc2USEgoKY29tcGF0aWJsZRgBIAEoCBI4CgdtZW1iZXJzGAIgAygLMicubm9tb3Mua2VybmVsLnYxLkludGVyZmFjZU1lbWJlclZlcmRpY3QSGgoSd29ya3NwYWNlX2Zyb250aWVyGAMgASgJEhYKDmNhbmRpZGF0ZV9oYXNoGAQgASgJEh4KFmVmZmVjdGl2ZV9sYXdfaWRlbnRpdHkYBSABKAki/wEKFFdhcm1Qcm9ncmVzc1Jlc3BvbnNlEhsKE21haW50ZW5hbmNlX3BlbmRpbmcYASABKAgSJAoXcHJlcGFyZWRfY29tbWFuZF9kb21haW4YAiABKAlIAIgBARIlChhwcmVwYXJlZF9jb21tYW5kX3BhY2thZ2UYAyABKAlIAYgBARImChlwcmVwYXJlZF9jb21tYW5kX3NlbGVjdG9yGAQgASgJSAKIAQFCGgoYX3ByZXBhcmVkX2NvbW1hbmRfZG9tYWluQhsKGV9wcmVwYXJlZF9jb21tYW5kX3BhY2thZ2VCHAoaX3ByZXBhcmVkX2NvbW1hbmRfc2VsZWN0b3IibAoQUmVhZEluZGV4UGVuZGluZxIRCgl3b3Jrc3BhY2UYASABKAkSDgoGYnJhbmNoGAIgASgJEhoKEnJlcXVlc3RlZF9mcm9udGllchgDIAEoCRIZChFsYXN0X3JlYWR5X2Fic2VudBgEIAEoCSLoAgoXTWFpbnRlbmFuY2VRdWFudHVtUXVlcnkSHQoQcmVxdWVzdGVkX2RvbWFpbhgBIAEoCUgAiAEBEh4KEXJlcXVlc3RlZF9wYWNrYWdlGAIgASgJSAGIAQESIAoTcmVxdWVzdGVkX2RpcmVjdGl2ZRgDIAEoCUgCiAEBEhcKD2xvY2FsX3JlYWRfb25seRgEIAEoCBIcChRtYWludGFpbl9naXRfY3VzdG9keRgFIAEoCBIXCg9yZWFkX2luZGV4X29ubHkYBiABKAgSJAocbWFpbnRhaW5fYWRkcmVzc2VkX2Zyb250aWVycxgHIAEoCBIYChBmbHVzaF9kdXJhYmlsaXR5GAggASgIEhkKEWxvY2FsX3dyaXRlX2J1cnN0GAkgASgIQhMKEV9yZXF1ZXN0ZWRfZG9tYWluQhQKEl9yZXF1ZXN0ZWRfcGFja2FnZUIWChRfcmVxdWVzdGVkX2RpcmVjdGl2ZSKiBAoaTWFpbnRlbmFuY2VRdWFudHVtUmVzcG9uc2USEQoJd29ya3NwYWNlGAEgASgJEhsKE21haW50ZW5hbmNlX3BlbmRpbmcYAiABKAgSMAoFcGhhc2UYAyABKA4yIS5ub21vcy5rZXJuZWwudjEuTWFpbnRlbmFuY2VQaGFzZRIZCgxnaXRfZnJvbnRpZXIYBCABKAlIAIgBARIaCg1yZWFkX2Zyb250aWVyGAUgASgJSAGIAQESHAoPc3FsaXRlX2Zyb250aWVyGAYgASgJSAKIAQESEgoKd29ya191bml0cxgHIAEoBBIWCg5lbGFwc2VkX21pY3JvcxgIIAEoBBIkChdwcmVwYXJlZF9jb21tYW5kX2RvbWFpbhgJIAEoCUgDiAEBEiUKGHByZXBhcmVkX2NvbW1hbmRfcGFja2FnZRgKIAEoCUgEiAEBEiYKGXByZXBhcmVkX2NvbW1hbmRfc2VsZWN0b3IYCyABKAlIBYgBARIeChZsb29zZV9jdXN0b2R5X3ByZXNzdXJlGAwgASgIQg8KDV9naXRfZnJvbnRpZXJCEAoOX3JlYWRfZnJvbnRpZXJCEgoQX3NxbGl0ZV9mcm9udGllckIaChhfcHJlcGFyZWRfY29tbWFuZF9kb21haW5CGwoZX3ByZXBhcmVkX2NvbW1hbmRfcGFja2FnZUIcChpfcHJlcGFyZWRfY29tbWFuZF9zZWxlY3RvciJICg1Pc2dpQXR0cmlidXRlEgwKBG5hbWUYASABKAkSDQoFdmFsdWUYAiABKAkSEQoEdHlwZRgDIAEoCUgAiAEBQgcKBV90eXBlIiwKDU9zZ2lEaXJlY3RpdmUSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoCSKLAQoOT3NnaUNhcGFiaWxpdHkSEQoJbmFtZXNwYWNlGAEgASgJEjIKCmF0dHJpYnV0ZXMYAiADKAsyHi5ub21vcy5rZXJuZWwudjEuT3NnaUF0dHJpYnV0ZRIyCgpkaXJlY3RpdmVzGAMgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lEaXJlY3RpdmUijAEKD09zZ2lSZXF1aXJlbWVudBIRCgluYW1lc3BhY2UYASABKAkSMgoKYXR0cmlidXRlcxgCIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5Pc2dpQXR0cmlidXRlEjIKCmRpcmVjdGl2ZXMYAyADKAsyHi5ub21vcy5rZXJuZWwudjEuT3NnaURpcmVjdGl2ZSKaAQoUT3NnaVJlc291cmNlUmVzcG9uc2USEwoLc291cmNlX3VzZGEYASABKAwSNQoMY2FwYWJpbGl0aWVzGAIgAygLMh8ubm9tb3Mua2VybmVsLnYxLk9zZ2lDYXBhYmlsaXR5EjYKDHJlcXVpcmVtZW50cxgDIAMoCzIgLm5vbW9zLmtlcm5lbC52MS5Pc2dpUmVxdWlyZW1lbnQi5wEKE1ZlcmlmeUNoYWluU3RlcFNwYW4SDQoFaW5kZXgYASABKAQSEgoKY29tbWl0X29pZBgCIAEoCRIOCgZkb21haW4YAyABKAkSEQoJZGlyZWN0aXZlGAQgASgJEhAKCHRvdGFsX3VzGAUgASgEEjYKBnBoYXNlcxgGIAEoCzImLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpblN0ZXBQaGFzZXMSQAoOZW5naW5lX3RpbWluZ3MYByADKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5FbmdpbmVUaW1pbmcimAIKFVZlcmlmeUNoYWluU3RlcFBoYXNlcxIeChZydW50aW1lX2xhd19yZWZyZXNoX3VzGAEgASgEEhMKC21hbmlmZXN0X3VzGAIgASgEEhkKEWxhd19yZXNvbHV0aW9uX3VzGAMgASgEEh0KFW1hbmFnZWRfdHJhbnNpdGlvbl91cxgEIAEoBBIUCgxwcmluY2lwYWxfdXMYBSABKAQSFAoMZXZvbHV0aW9uX3VzGAYgASgEEhoKEmNvbG9jYXRlZF9yZWFkc191cxgHIAEoBBIhChl0eXBlZF9pbnN0YWxsX3ZlcmlmaWVyX3VzGAggASgEEhQKDGFkbWlzc2lvbl91cxgJIAEoBBIPCgdmb2xkX3VzGAogASgEItoFChZWZXJpZnlDaGFpbkRpYWdub3N0aWNzEi4KBHdhbGsYASABKA4yIC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5XYWxrEhAKCHRvdGFsX3VzGAIgASgEEhsKE3JlZmVyZW5jZV9sb29rdXBfdXMYAyABKAQSGgoScmVwb3NpdG9yeV9vcGVuX3VzGAQgASgEEhUKDWNoYWluX3JlYWRfdXMYBSABKAQSFgoOZW5naW5lX2luaXRfdXMYBiABKAQSGAoQdGltZWxpbmVfcmVhZF91cxgHIAEoBBIYChBsYXdfaHlkcmF0aW9uX3VzGAggASgEEhsKE3JlY292ZXJ5X3ByZXNjYW5fdXMYCSABKAQSGAoQZm9sZF9mcm9udGllcl91cxgKIAEoBBIzCgVzdGVwcxgLIAMoCzIkLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpblN0ZXBTcGFuEkAKDmVuZ2luZV90aW1pbmdzGAwgAygLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluRW5naW5lVGltaW5nEk0KFWxhd19oeWRyYXRpb25fdGltaW5ncxgNIAMoCzIuLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkxhd0h5ZHJhdGlvblRpbWluZxIZChFsYXdfY2xvc3VyZV9jb3VudBgOIAEoBBIeChZsYXdfY2xvc3VyZV9jYWNoZV9oaXRzGA8gASgEEiAKGGxhd19jbG9zdXJlX2NhY2hlX21pc3NlcxgQIAEoBBISCgpzdGVwX2NvdW50GBEgASgEEhUKDXN0ZXBfdG90YWxfdXMYEiABKAQSQQoRc3RlcF9waGFzZV90b3RhbHMYEyABKAsyJi5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5TdGVwUGhhc2VzEhoKEm9taXR0ZWRfc3RlcF9jb3VudBgUIAEoBCI6ChdWZXJpZnlDaGFpbkVuZ2luZVRpbWluZxINCgVwaGFzZRgBIAEoCRIQCgh0b3RhbF91cxgCIAEoBCJACh1WZXJpZnlDaGFpbkxhd0h5ZHJhdGlvblRpbWluZxINCgVwaGFzZRgBIAEoCRIQCgh0b3RhbF91cxgCIAEoBCKrAQoUSHR0cHNFeGVjdXRpb25Qb2xpY3kSPAoJcGxhY2VtZW50GAEgASgOMikubm9tb3Mua2VybmVsLnYxLkVmZmVjdEV4ZWN1dGlvblBsYWNlbWVudBJACgtjYXJkaW5hbGl0eRgCIAEoDjIrLm5vbW9zLmtlcm5lbC52MS5FZmZlY3RFeGVjdXRpb25DYXJkaW5hbGl0eRITCgtsYXdfY2xvc3VyZRgDIAEoCSJbChJIdHRwc091dGJvdW5kUm91dGUSCwoDdXJsGAEgASgJEjgKCWV4ZWN1dGlvbhgCIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5IdHRwc0V4ZWN1dGlvblBvbGljeSIrChZXb3Jrc3BhY2VPdXRib3VuZFJvdXRlEhEKCXdvcmtzcGFjZRgBIAEoCSKFAgoVQ2FycmllZFdvcmtzcGFjZU9mZmVyEjAKBnNvdXJjZRgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSFQoNc291cmNlX2NvbW1pdBgCIAEoCRIZChFzb3VyY2Vfb2ZmZXJfcGF0aBgDIAEoCRIcChRzb3VyY2VfZXZpZGVuY2VfcGFjaxgFIAEoDBIjChthZG1pc3Npb25fY2hlY2twb2ludF9zZWNyZXQYBiABKAwSFQoNZWZmZWN0X2RpZ2VzdBgHIAEoCRIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYCCABKAlKBAgEEAVSBnRhcmdldCLMBAoNT3V0Ym91bmRPZmZlchIKCgJpZBgBIAEoCRIXCgtkZXN0aW5hdGlvbhgCIAEoCUICGAESFAoMc2VhbGVkX29mZmVyGAMgASgMEhQKDGNvbnRlbnRfdHlwZRgEIAEoCRIYChBzb3VyY2Vfd29ya3NwYWNlGAUgASgJEhQKDGN1c3RvZHlfaGVhZBgGIAEoCRIXCg9jYXVzZWRfYnlfb2ZmZXIYByABKAkSGwoTc2NoZWR1bGVkX2F0X21pbGxpcxgIIAEoBBIaChJkZWFkbGluZV9hdF9taWxsaXMYCSABKAQSFAoMY3VzdG9keV9wYXRoGAogASgJEhMKC2N1c3RvZHlfb2lkGAsgASgJEhQKDGRlbGl2ZXJ5X3JlZhgMIAEoCRIVCg1vYmxpZ2F0aW9uX2lkGA0gASgJEjoKC2h0dHBzX3JvdXRlGA4gASgLMiMubm9tb3Mua2VybmVsLnYxLkh0dHBzT3V0Ym91bmRSb3V0ZUgAEkIKD3dvcmtzcGFjZV9yb3V0ZRgPIAEoCzInLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VPdXRib3VuZFJvdXRlSAASFQoNc291cmNlX2NvbW1pdBgQIAEoCRIcChRzb3VyY2VfZXZpZGVuY2VfcGFjaxgRIAEoDBIZChFzb3VyY2Vfb2ZmZXJfcGF0aBgSIAEoCRIVCg1lZmZlY3RfZGlnZXN0GBMgASgJEiAKGHNvdXJjZV93b3Jrc3BhY2VfZ2VuZXNpcxgUIAEoCUIHCgVyb3V0ZSLuAQoOT3V0Ym94UmVzcG9uc2USLgoGb2ZmZXJzGAEgAygLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJvdW5kT2ZmZXISHwoSbmV4dF9kdWVfYXRfbWlsbGlzGAIgASgESACIAQESLQoHZW50cmllcxgDIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5PdXRib3hFbnRyeRIUCgx3b3JrX3BlbmRpbmcYBCABKAgSFQoNZW50cmllc190b3RhbBgFIAEoDRIYChBlbnRyaWVzX3ByZXBhcmVkGAYgASgNQhUKE19uZXh0X2R1ZV9hdF9taWxsaXMivQEKC091dGJveEVudHJ5EgoKAmlkGAEgASgJEhkKEXNvdXJjZV9vZmZlcl9wYXRoGAIgASgJEjoKC2h0dHBzX3JvdXRlGAMgASgLMiMubm9tb3Mua2VybmVsLnYxLkh0dHBzT3V0Ym91bmRSb3V0ZUgAEkIKD3dvcmtzcGFjZV9yb3V0ZRgEIAEoCzInLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VPdXRib3VuZFJvdXRlSABCBwoFcm91dGUilAEKFFByZXBhcmVPdXRib3VuZE9mZmVyEhgKEHRhcmdldF93b3Jrc3BhY2UYASABKAkSGgoNc291cmNlX2NvbW1pdBgCIAEoCUgAiAEBEh4KEXNvdXJjZV9vZmZlcl9wYXRoGAMgASgJSAGIAQFCEAoOX3NvdXJjZV9jb21taXRCFAoSX3NvdXJjZV9vZmZlcl9wYXRoIokFCgxTeW5jUmVzcG9uc2USEAoIYWRtaXR0ZWQYAiABKAgSDAoEaGVhZBgDIAEoCRIWCg5jYW5kaWRhdGVfaGVhZBgEIAEoCRIcChRhZG1pdHRlZF9yZW1vdGVfaGVhZBgFIAEoCRIcChRyZXBsYXllZF9yZW1vdGVfaGVhZBgGIAEoCRI8Cg9hZG1pdHRlZF9yZW1vdGUYByADKAsyIy5ub21vcy5rZXJuZWwudjEuU3luY0FkbWl0dGVkSW50ZW50EjwKFXJlbW90ZV9iaXJ0aF9vdXRjb21lcxgIIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSOQoOcmVtb3RlX3JlZnVzYWwYCSABKAsyHC5ub21vcy5rZXJuZWwudjEuU3luY1JlZnVzYWxIAIgBARI7Cg5yZXBsYXllZF9sb2NhbBgKIAMoCzIjLm5vbW9zLmtlcm5lbC52MS5TeW5jUmVwbGF5ZWRJbnRlbnQSIAoYc2tpcHBlZF9sb2NhbF9pbnRlbnRfaWRzGAsgAygJEjkKDXJlZnVzZWRfbG9jYWwYDCADKAsyIi5ub21vcy5rZXJuZWwudjEuU3luY1JlZnVzZWRJbnRlbnQSRwoUY3VzdG9keV9kaXNhZ3JlZW1lbnQYDSABKAsyJC5ub21vcy5rZXJuZWwudjEuQ3VzdG9keURpc2FncmVlbWVudEgBiAEBEhkKEXBhcmtlZF9sb2NhbF9yZWZzGA4gAygJEhYKDnJlcGxheV9wZW5kaW5nGA8gASgIQhEKD19yZW1vdGVfcmVmdXNhbEIXChVfY3VzdG9keV9kaXNhZ3JlZW1lbnRKBAgBEAJSBnJlc3VsdCJRChNDdXN0b2R5RGlzYWdyZWVtZW50EhIKCmxvY2FsX2hlYWQYASABKAkSFgoOY2FuZGlkYXRlX2hlYWQYAiABKAkSDgoGcmVhc29uGAMgASgJIk8KElN5bmNBZG1pdHRlZEludGVudBIRCglpbnRlbnRfaWQYASABKAkSGAoQY2FuZGlkYXRlX2NvbW1pdBgCIAEoCRIMCgRoZWFkGAMgASgJImwKElN5bmNSZXBsYXllZEludGVudBIRCglpbnRlbnRfaWQYASABKAkSDAoEaGVhZBgCIAEoCRI1Cg5iaXJ0aF9vdXRjb21lcxgDIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUioQEKC1N5bmNSZWZ1c2FsEhYKCWludGVudF9pZBgBIAEoCUgAiAEBEg4KBnJlYXNvbhgCIAEoCRIRCgRjb2RlGAMgASgJSAGIAQESNAoHcmVmdXNhbBgEIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsSAKIAQFCDAoKX2ludGVudF9pZEIHCgVfY29kZUIKCghfcmVmdXNhbCKNAQoRU3luY1JlZnVzZWRJbnRlbnQSEQoJaW50ZW50X2lkGAEgASgJEg4KBnJlYXNvbhgCIAEoCRITCgtjaGFuZ2VfdXNkYRgDIAEoDBI0CgdyZWZ1c2FsGAQgASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxIAIgBAUIKCghfcmVmdXNhbCJCCg9Xb3Jrc3BhY2VUYXJnZXQSDAoEcmVwbxgBIAEoCRIRCgl3b3Jrc3BhY2UYAiABKAkSDgoGYnJhbmNoGAMgASgJIk4KC09wZW5SZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDQoFc3BhbnMYAiABKAgiDgoMR2VuZXNpc09mZmVyIqMBCg1EaXJlY3RpdmVDYWxsEg4KBmRvbWFpbhgBIAEoCRIRCglkaXJlY3RpdmUYAiABKAkSJwoJb3BlcmF0aW9uGAUgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueRIWCg5hcmd1bWVudHNfanNvbhgGIAEoCUoECAMQBEoECAQQBVIJY2FsbF91c2RhUgdwYXlsb2FkUg5sZWdhY3lfcGF5bG9hZCLWAgoQQXV0aG9yaW5nT3B0aW9ucxINCgVhY3RvchgBIAEoCRISCgphdXRoX3Rva2VuGAIgASgMEhUKDWF1dGhvcl9zZWNyZXQYAyABKAwSHQoQdmFsaWRfZnJvbV9lcG9jaBgEIAEoBEgAiAEBEh8KEnByaW5jaXBhbF92ZXJpZmllZBgFIAEoCEgBiAEBEgsKA3JuZxgGIAMoARIYChBkZWZlcl9wcm9qZWN0aW9uGAcgASgIEg0KBXNwYW5zGAggASgIEg8KB2RyeV9ydW4YCSABKAgSEAoIc2VxdWVuY2UYCiABKAQSLQoFY2xvY2sYCyABKAsyHi5ub21vcy5rZXJuZWwudjEuQ2FwdHVyZWRDbG9jaxIUCgxwcmVwYXJlX29ubHkYDCABKAhCEwoRX3ZhbGlkX2Zyb21fZXBvY2hCFQoTX3ByaW5jaXBhbF92ZXJpZmllZCJKCg1DYXB0dXJlZENsb2NrEhcKD3BoeXNpY2FsX21pbGxpcxgBIAEoBBIPCgdsb2dpY2FsGAIgASgNEg8KB3JlcGxpY2EYAyABKAQiwwMKEEJpcnRoQ2VydGlmaWNhdGUSDQoFY2hpbGQYASABKAkSDwoHZm91bmRlchgCIAEoCRIQCgh2ZXJpZmllZBgDIAEoCBISCgpwYXJlbnRfa2V5GAQgASgMEhEKCXBhcmVudF9pZBgFIAEoCRINCgVlcG9jaBgGIAEoAxIRCglzaWduYXR1cmUYByABKAwSGQoMdmVyaWZpZWRfdmlhGAggASgJSACIAQESFgoJaWRwX3Rva2VuGAkgASgJSAGIAQESGwoOY2FwdHVyZWRfY2xvY2sYCiABKANIAogBARIhChRhdXRoX3Byb3ZpZGVyX2lzc3VlchgLIAEoCUgDiAEBEh8KEmF1dGhfcHJvdmlkZXJfandrcxgMIAEoCUgEiAEBEiMKFmF1dGhfcHJvdmlkZXJfYXVkaWVuY2UYDSABKAlIBYgBAUIPCg1fdmVyaWZpZWRfdmlhQgwKCl9pZHBfdG9rZW5CEQoPX2NhcHR1cmVkX2Nsb2NrQhcKFV9hdXRoX3Byb3ZpZGVyX2lzc3VlckIVChNfYXV0aF9wcm92aWRlcl9qd2tzQhkKF19hdXRoX3Byb3ZpZGVyX2F1ZGllbmNlImwKG1NpZ25CaXJ0aENlcnRpZmljYXRlUmVxdWVzdBI2CgtjZXJ0aWZpY2F0ZRgBIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5CaXJ0aENlcnRpZmljYXRlEhUKDXNpZ25lcl9zZWNyZXQYAiABKAwiVgocU2lnbkJpcnRoQ2VydGlmaWNhdGVSZXNwb25zZRI2CgtjZXJ0aWZpY2F0ZRgBIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5CaXJ0aENlcnRpZmljYXRlIs8DChRNb2RlbExpZmVjeWNsZUludGVudBI7CglvcGVyYXRpb24YASABKA4yKC5ub21vcy5rZXJuZWwudjEuTW9kZWxMaWZlY3ljbGVPcGVyYXRpb24SFAoMaW5zdGFsbGVkX2J5GAIgASgJEhcKCnN1cGVyc2VkZXMYAyABKAlIAIgBARJECgp0cmFuc2l0aW9uGAQgASgLMisubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlSAGIAQESFQoIcmVwbGFjZXMYBSABKAlIAogBARIeChFhY2NlcHRhbmNlX3JlYXNvbhgGIAEoCUgDiAEBEhkKDGxhd19pZGVudGl0eRgHIAEoCUgEiAEBEksKEWRvbWFpbl90cmFuc2l0aW9uGAggASgLMisubm9tb3Mua2VybmVsLnYxLkRvbWFpblRyYW5zaXRpb25BY3RpdmF0aW9uSAWIAQFCDQoLX3N1cGVyc2VkZXNCDQoLX3RyYW5zaXRpb25CCwoJX3JlcGxhY2VzQhQKEl9hY2NlcHRhbmNlX3JlYXNvbkIPCg1fbGF3X2lkZW50aXR5QhQKEl9kb21haW5fdHJhbnNpdGlvbiJwCgpEb21haW5QbGFuEi4KB2FjdGlvbnMYASADKAsyHS5ub21vcy5rZXJuZWwudjEuRG9tYWluQWN0aW9uEjIKB3N1cHBvcnQYAiADKAsyIS5ub21vcy5rZXJuZWwudjEuRG9tYWluU3VwcG9ydFBpbiJoCgxEb21haW5BY3Rpb24SDgoGZG9tYWluGAEgASgJEhUKDWV4cGVjdGVkX3VuaXQYAiABKAkSEwoLdGFyZ2V0X3VuaXQYAyABKAkSEgoFZ3JvdXAYBCABKAlIAIgBAUIICgZfZ3JvdXAiQQoQRG9tYWluU3VwcG9ydFBpbhINCgVncm91cBgBIAEoCRILCgNrZXkYAiABKAkSEQoJdW5pdF9oYXNoGAMgASgJIpICChhSZXNvbHZlRG9tYWluUGxhblJlcXVlc3QSKQoEcGxhbhgBIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Eb21haW5QbGFuEg8KB2F0X2hhc2gYAiABKAkSFAoManVkZ2Vfc3RhZ2VkGAMgASgIEiEKGWFja25vd2xlZGdlbWVudF9wcmluY2lwYWwYBCABKAkSDwoHcXVhbGlmeRgFIAEoCBI9Cgljb25zdW1lcnMYBiADKAsyKi5ub21vcy5rZXJuZWwudjEuRG9tYWluQ29uc3VtZXJSZXF1aXJlbWVudBIxCg9hdmFpbGFibGVfdW5pdHMYByADKAsyGC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdCJKChlEb21haW5Db25zdW1lclJlcXVpcmVtZW50EgwKBG5hbWUYASABKAkSHwoXYXBwbGljYXRpb25fbWF0cml4X3VzZGEYAiABKAwiSgoVRG9tYWluQ29uc3VtZXJWZXJkaWN0EgwKBG5hbWUYASABKAkSEgoKY29tcGF0aWJsZRgCIAEoCBIPCgdmYWlsaW5nGAMgAygJImsKE1Jlc29sdmVkRG9tYWluR3JvdXASDQoFZ3JvdXAYASABKAkSFgoOY2FuZGlkYXRlX2hhc2gYAiABKAkSLQoFdW5pdHMYAyADKAsyHi5ub21vcy5rZXJuZWwudjEuRG9tYWluVW5pdFBpbiIvCg1Eb21haW5Vbml0UGluEgsKA2tleRgBIAEoCRIRCgl1bml0X2hhc2gYAiABKAkitAMKGVJlc29sdmVEb21haW5QbGFuUmVzcG9uc2USDwoHYXRfaGFzaBgBIAEoCRIVCg1hdF9zdGF0ZV9yb290GAIgASgJEjQKBmdyb3VwcxgDIAMoCzIkLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlZERvbWFpbkdyb3VwEhwKFHJldGlyZV9pbnN0YWxsYXRpb25zGAQgAygJEjgKEHNlbGVjdGVkX2RvbWFpbnMYBSADKAsyHi5ub21vcy5rZXJuZWwudjEuRG9tYWluVW5pdFBpbhISCgVyZWFkeRgGIAEoCEgAiAEBEhIKCnZpb2xhdGlvbnMYByADKAkSOQoJY29uc3VtZXJzGAggAygLMiYubm9tb3Mua2VybmVsLnYxLkRvbWFpbkNvbnN1bWVyVmVyZGljdBI5Cgl1bml0X3NldHMYCSADKAsyJi5ub21vcy5rZXJuZWwudjEuTGF3UHJlcGFyYXRpb25Vbml0U2V0EhkKEWtlcm5lbF9nZW5lcmF0aW9uGAogASgJEh4KFmVmZmVjdGl2ZV9sYXdfaWRlbnRpdHkYCyABKAlCCAoGX3JlYWR5IoUBChpEb21haW5UcmFuc2l0aW9uQWN0aXZhdGlvbhIpCgRwbGFuGAEgASgLMhsubm9tb3Mua2VybmVsLnYxLkRvbWFpblBsYW4SPAoIcmVzb2x2ZWQYAiABKAsyKi5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZURvbWFpblBsYW5SZXNwb25zZSI7Ch9JZGVudGl0eVByb3ZpZGVyV2l0bmVzc0Fkb3B0aW9uEhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAki5wcKDE9mZmVyUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Ei4KBGNhbGwYAiABKAsyHi5ub21vcy5rZXJuZWwudjEuRGlyZWN0aXZlQ2FsbEgAEhwKEnNlYWxlZF9jaGFuZ2VfdXNkYRgHIAEoDEgAEkAKD21vZGVsX2xpZmVjeWNsZRgMIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5Nb2RlbExpZmVjeWNsZUludGVudEgAEl4KImlkZW50aXR5X3Byb3ZpZGVyX3dpdG5lc3NfYWRvcHRpb24YDSABKAsyMC5ub21vcy5rZXJuZWwudjEuSWRlbnRpdHlQcm92aWRlcldpdG5lc3NBZG9wdGlvbkgAEjAKB2dlbmVzaXMYDiABKAsyHS5ub21vcy5rZXJuZWwudjEuR2VuZXNpc09mZmVySAASSQoXY2FycmllZF93b3Jrc3BhY2Vfb2ZmZXIYDyABKAsyJi5ub21vcy5rZXJuZWwudjEuQ2FycmllZFdvcmtzcGFjZU9mZmVySAASNAoJcGxhY2VtZW50GBAgASgLMh8ubm9tb3Mua2VybmVsLnYxLlBsYWNlbWVudE9mZmVySAASRwoWZGV0YWNoZWRfc2lnbmVkX2NoYW5nZRgSIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5EZXRhY2hlZFNpZ25lZENoYW5nZUgAEjQKCWF1dGhvcmluZxgDIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpbmdPcHRpb25zEhAKCGxhd191c2R6GAQgASgMEjMKDGF0dGVzdGF0aW9ucxgFIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5BdHRlc3RlZFJlYWQSPQoSY29uZmxpY3Rfc25hcHNob3RzGAYgAygLMiEubm9tb3Mua2VybmVsLnYxLkNvbmZsaWN0U25hcHNob3QSGgoSZXhlY3V0aW9uX2xhd191c2R6GAggASgMEiAKE2NvbnRyb2xsZXJfbGF3X2hhc2gYCSABKAlIAYgBARIdChBjYW5kaWRhdGVfY29tbWl0GAogASgJSAKIAQESPAoRYmlydGhfY2VydGlmaWNhdGUYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuQmlydGhDZXJ0aWZpY2F0ZRIrCglsYXdfdW5pdHMYESADKAsyGC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdEIICgZpbnRlbnRCFgoUX2NvbnRyb2xsZXJfbGF3X2hhc2hCEwoRX2NhbmRpZGF0ZV9jb21taXQiNgoHTGF3VW5pdBIrCgVmaWxlcxgBIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5MYXdVbml0RmlsZSIsCgtMYXdVbml0RmlsZRIMCgRwYXRoGAEgASgJEg8KB2NvbnRlbnQYAiABKAwixQEKDEF0dGVzdGVkUmVhZBIQCghxdWVyeV9pZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSKwoGcmVzdWx0GAMgASgLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWUSMgoIZXZpZGVuY2UYBSABKAsyIC5ub21vcy5rZXJuZWwudjEuUmVhZEF0dGVzdGF0aW9uSgQIBBAFUgthdHRlc3RhdGlvbiLVAQoPUmVhZEF0dGVzdGF0aW9uEg8KB3ZlcnNpb24YASABKAMSGAoQc291cmNlX3dvcmtzcGFjZRgCIAEoCRIWCg5zb3VyY2VfZ2VuZXNpcxgDIAEoCRITCgtzb3VyY2VfaGVhZBgEIAEoCRIRCglmb2xkX3Jvb3QYBSABKAkSFAoMc291cmNlX2Vwb2NoGAYgASgDEhoKEmF0dGVzdGVkX2F0X21pbGxpcxgHIAEoAxISCgpwdWJsaWNfa2V5GAggASgMEhEKCXNpZ25hdHVyZRgJIAEoDCJ1ChBDb25mbGljdFNuYXBzaG90EhYKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJEhQKDGFnZ3JlZ2F0ZV9pZBgCIAEoCRINCgVmaWVsZBgDIAEoCRIVCg10YXJnZXRfc2NoZW1hGAQgASgJEg0KBXRva2VuGAUgASgJIvQPCgxRdWVyeVJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIyCglhdXRob3JpdHkYAiABKAsyHy5ub21vcy5rZXJuZWwudjEuUXVlcnlBdXRob3JpdHkSDQoFc3BhbnMYAyABKAgSOQoNcmVzdWx0X2Zvcm1hdBgEIAEoDjIiLm5vbW9zLmtlcm5lbC52MS5RdWVyeVJlc3VsdEZvcm1hdBIYChBzZXJ2ZV9sYXN0X3JlYWR5GAUgASgIEioKBHJvd3MYCiABKAsyGi5ub21vcy5rZXJuZWwudjEuUm93c1F1ZXJ5SAASKgoEcGFnZRgLIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5QYWdlUXVlcnlIABIrCgVieV9pZBgMIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5CeUlkUXVlcnlIABI5CgxyZXNvbHZlX3JlZnMYDSABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVJlZnNRdWVyeUgAEkUKEnJlZmVyZW5jZV92ZXJzaW9ucxgOIAEoCzInLm5vbW9zLmtlcm5lbC52MS5SZWZlcmVuY2VWZXJzaW9uc1F1ZXJ5SAASLAoFY291bnQYDyABKAsyGy5ub21vcy5rZXJuZWwudjEuVGFsbHlRdWVyeUgAEioKA3N1bRgQIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5UYWxseVF1ZXJ5SAASMAoHc3BhdGlhbBgRIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5TcGF0aWFsUXVlcnlIABIsCgVuYW1lZBgSIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5OYW1lZFF1ZXJ5SAASSQoTYXV0aG9yaXphdGlvbl9jaGVjaxgTIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXF1ZXN0SAASSwoUYXV0aG9yaXphdGlvbl9leHBhbmQYFCABKAsyKy5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGFuZFJlcXVlc3RIABJJChNmcm9udGllcl90cmFuc2l0aW9uGBUgASgLMioubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlcXVlc3RIABIvCgdieV90eXBlGBYgASgLMhwubm9tb3Mua2VybmVsLnYxLkJ5VHlwZVF1ZXJ5SAASSAoUb3duZWRfZGV2aWNlX3JlcXVlc3QYFyABKAsyKC5ub21vcy5rZXJuZWwudjEuT3duZWREZXZpY2VSZXF1ZXN0UXVlcnlIABJMChZvd25lZF9wcmVwYXJlX2FwcHJvdmFsGBggASgLMioubm9tb3Mua2VybmVsLnYxLk93bmVkUHJlcGFyZUFwcHJvdmFsUXVlcnlIABJDChFwZW5kaW5nX2NvbmZsaWN0cxgZIAEoCzImLm5vbW9zLmtlcm5lbC52MS5QZW5kaW5nQ29uZmxpY3RzUXVlcnlIABJQChhwZW5kaW5nX2NvbmZsaWN0X3N1bW1hcnkYGiABKAsyLC5ub21vcy5rZXJuZWwudjEuUGVuZGluZ0NvbmZsaWN0U3VtbWFyeVF1ZXJ5SAASTQoWYXV0aGVudGljYXRpb25fcG9zdHVyZRgbIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRoZW50aWNhdGlvblBvc3R1cmVRdWVyeUgAEkAKEGNoaWxkX3dvcmtzcGFjZXMYHCABKAsyJC5ub21vcy5rZXJuZWwudjEuQ2hpbGRXb3Jrc3BhY2VRdWVyeUgAElYKFmF1dGhvcmluZ19yZXF1aXJlbWVudHMYHSABKAsyNC5ub21vcy5rZXJuZWwudjEuRGlyZWN0aXZlQXV0aG9yaW5nUmVxdWlyZW1lbnRzUXVlcnlIABJSChlpZGVudGl0eV9wcm92aWRlcl93aXRuZXNzGB4gASgLMi0ubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzUXVlcnlIABJPChdpbnRlcmZhY2VfY29tcGF0aWJpbGl0eRgfIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UXVlcnlIABJHChNtYWludGVuYW5jZV9xdWFudHVtGCAgASgLMigubm9tb3Mua2VybmVsLnYxLk1haW50ZW5hbmNlUXVhbnR1bVF1ZXJ5SAASRAoSZnVsbF9oaXN0b3J5X2F1ZGl0GCEgASgLMiYubm9tb3Mua2VybmVsLnYxLkZ1bGxIaXN0b3J5QXVkaXRRdWVyeUgAElAKGHdvcmtzcGFjZV9lZmZlY3RfcmVjZWlwdBgiIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UXVlcnlIABJUChppbnN0YWxsZWRfbGF3X2RlY2xhcmF0aW9ucxgjIAEoCzIuLm5vbW9zLmtlcm5lbC52MS5JbnN0YWxsZWRMYXdEZWNsYXJhdGlvbnNRdWVyeUgAEkgKE3Jlc29sdmVfZG9tYWluX3BsYW4YJCABKAsyKS5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZURvbWFpblBsYW5SZXF1ZXN0SABCBwoFcXVlcnkiVgobV29ya3NwYWNlRWZmZWN0UmVjZWlwdFF1ZXJ5EiAKGHNvdXJjZV93b3Jrc3BhY2VfZ2VuZXNpcxgBIAEoCRIVCg1lZmZlY3RfZGlnZXN0GAIgASgJIuQBCh5Xb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UmVzcG9uc2USGAoQdGFyZ2V0X3dvcmtzcGFjZRgBIAEoCRIgChh0YXJnZXRfd29ya3NwYWNlX2dlbmVzaXMYAiABKAkSFQoNb2JzZXJ2ZWRfaGVhZBgDIAEoCRIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYBCABKAkSFQoNZWZmZWN0X2RpZ2VzdBgFIAEoCRIfChJhZG1pdHRlZF9pbnRlbnRfaWQYBiABKAlIAIgBAUIVChNfYWRtaXR0ZWRfaW50ZW50X2lkIhcKFUZ1bGxIaXN0b3J5QXVkaXRRdWVyeSKwAwoYRnVsbEhpc3RvcnlBdWRpdFJlc3BvbnNlEg0KBXZhbGlkGAEgASgIEi4KBHdhbGsYAiABKA4yIC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5XYWxrEhEKBGhlYWQYAyABKAlIAIgBARIUCgdpbnRlbnRzGAQgASgESAGIAQESGAoLcGxhbnNfcmVydW4YBSABKARIAogBARIcCg9jb250cm9sbGVyX2hhc2gYBiABKAlIA4gBARIZChFpbnN0YWxsZWRfZG9tYWlucxgHIAMoCRISCgVjaGVjaxgIIAEoCUgEiAEBEhUKCGF0X2luZGV4GAkgASgESAWIAQESEgoFZXJyb3IYCiABKAlIBogBARI0CgdyZWZ1c2FsGAsgASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxIB4gBAUIHCgVfaGVhZEIKCghfaW50ZW50c0IOCgxfcGxhbnNfcmVydW5CEgoQX2NvbnRyb2xsZXJfaGFzaEIICgZfY2hlY2tCCwoJX2F0X2luZGV4QggKBl9lcnJvckIKCghfcmVmdXNhbCIeChxJZGVudGl0eVByb3ZpZGVyV2l0bmVzc1F1ZXJ5IosCChpJZGVudGl0eVByb3ZpZGVyV2l0bmVzc0tleRIPCgdvcmRpbmFsGAEgASgEEgsKA2t0eRgCIAEoCRIQCgNraWQYAyABKAlIAIgBARIQCgNhbGcYBCABKAlIAYgBARIQCgN1c2UYBSABKAlIAogBARIQCgNjcnYYBiABKAlIA4gBARIOCgF4GAcgASgJSASIAQESDgoBeRgIIAEoCUgFiAEBEg4KAW4YCSABKAlIBogBARIOCgFlGAogASgJSAeIAQESDwoHa2V5X29wcxgLIAMoCUIGCgRfa2lkQgYKBF9hbGdCBgoEX3VzZUIGCgRfY3J2QgQKAl94QgQKAl95QgQKAl9uQgQKAl9lImMKIklkZW50aXR5UHJvdmlkZXJXaXRuZXNzQ2VydGlmaWNhdGUSEwoLa2V5X29yZGluYWwYASABKAQSGwoTY2VydGlmaWNhdGVfb3JkaW5hbBgCIAEoBBILCgNkZXIYAyABKAwixQQKH0lkZW50aXR5UHJvdmlkZXJXaXRuZXNzUmVzcG9uc2USGAoQc291cmNlX3dvcmtzcGFjZRgBIAEoCRIWCg5zb3VyY2VfZ2VuZXNpcxgCIAEoCRITCgtzb3VyY2VfaGVhZBgDIAEoCRINCgVlcG9jaBgEIAEoBBIfChJwcmVkZWNlc3Nvcl9zaGEyNTYYBSABKAxIAIgBARIOCgZpc3N1ZXIYBiABKAkSFQoIYXVkaWVuY2UYByABKAlIAYgBARIXCg9wcmluY2lwYWxfY2xhaW0YCCABKAkSIQoUZGV2aWNlX2JpbmRpbmdfY2xhaW0YCSABKAlIAogBARIeChZyZXF1aXJlX2RldmljZV9iaW5kaW5nGAogASgIEjkKBGtleXMYCyADKAsyKy5ub21vcy5rZXJuZWwudjEuSWRlbnRpdHlQcm92aWRlcldpdG5lc3NLZXkSSQoMY2VydGlmaWNhdGVzGAwgAygLMjMubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzQ2VydGlmaWNhdGUSFwoPbWF0ZXJpYWxfc2hhMjU2GA0gASgMEjMKDGF0dGVzdGF0aW9ucxgPIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5BdHRlc3RlZFJlYWRCFQoTX3ByZWRlY2Vzc29yX3NoYTI1NkILCglfYXVkaWVuY2VCFwoVX2RldmljZV9iaW5kaW5nX2NsYWltSgQIDhAPUhFzb3VyY2VfcHJvb2ZfdXNkYSIVChNDaGlsZFdvcmtzcGFjZVF1ZXJ5IpABChlDaGlsZFdvcmtzcGFjZVF1ZXJ5UmVjb3JkEhEKCXdvcmtzcGFjZRgBIAEoCRI+CgZzdGF0dXMYAiABKA4yLi5ub21vcy5rZXJuZWwudjEuQ2hpbGRXb3Jrc3BhY2VMaWZlY3ljbGVTdGF0dXMSFAoHYm9ybl9hdBgDIAEoCUgAiAEBQgoKCF9ib3JuX2F0IlsKG0NoaWxkV29ya3NwYWNlUXVlcnlSZXNwb25zZRI8CghjaGlsZHJlbhgBIAMoCzIqLm5vbW9zLmtlcm5lbC52MS5DaGlsZFdvcmtzcGFjZVF1ZXJ5UmVjb3JkIh8KHUluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1F1ZXJ5IjcKEEluc3RhbGxlZExhd1VuaXQSEAoIdW5pdF9rZXkYASABKAkSEQoJdW5pdF9oYXNoGAIgASgJIowBChNJbnN0YWxsZWRMYXdVbml0U2V0EhQKDHNldF9pZGVudGl0eRgBIAEoCRIYChBjb21wb3Nlcl92ZXJzaW9uGAIgASgJEhMKC29wZW51c2RfcmV2GAMgASgJEjAKBXVuaXRzGAQgAygLMiEubm9tb3Mua2VybmVsLnYxLkluc3RhbGxlZExhd1VuaXQigQIKHkRlY2xhcmVkQXV0aGVudGljYXRpb25Qcm92aWRlchIOCgZkb21haW4YASABKAkSDgoGbWVtYmVyGAIgASgJEjsKC21lbWJlcl9raW5kGAMgASgOMiYubm9tb3Mua2VybmVsLnYxLkRlY2xhcmVkTGF3TWVtYmVyS2luZBJBCgRraW5kGAQgASgOMjMubm9tb3Mua2VybmVsLnYxLkRlY2xhcmVkQXV0aGVudGljYXRpb25Qcm92aWRlcktpbmQSDQoFc2NvcGUYBSABKAkSHAoPaWRlbnRpdHlfc2hhMjU2GAYgASgJSACIAQFCEgoQX2lkZW50aXR5X3NoYTI1NiLpAQofSW5zdGFsbGVkTGF3Q2xvc3VyZURlY2xhcmF0aW9ucxIYChBjbG9zdXJlX2lkZW50aXR5GAEgASgJEg8KB2RvbWFpbnMYAiADKAkSOwoIdW5pdF9zZXQYAyABKAsyJC5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3VW5pdFNldEgAiAEBElEKGGF1dGhlbnRpY2F0aW9uX3Byb3ZpZGVycxgEIAMoCzIvLm5vbW9zLmtlcm5lbC52MS5EZWNsYXJlZEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJCCwoJX3VuaXRfc2V0InQKIEluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1Jlc3BvbnNlEgwKBGhlYWQYASABKAkSQgoIY2xvc3VyZXMYAiADKAsyMC5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3Q2xvc3VyZURlY2xhcmF0aW9ucyLKAQojRGlyZWN0aXZlQXV0aG9yaW5nUmVxdWlyZW1lbnRzUXVlcnkSEQoJZGlyZWN0aXZlGAEgASgJEhYKCXByaW5jaXBhbBgCIAEoCUgAiAEBEhcKCnB1YmxpY19rZXkYAyABKAxIAYgBARIVCghrZXlfaGFzaBgEIAEoCUgCiAEBEhMKBmRvbWFpbhgFIAEoCUgDiAEBQgwKCl9wcmluY2lwYWxCDQoLX3B1YmxpY19rZXlCCwoJX2tleV9oYXNoQgkKB19kb21haW4ijAIKJkRpcmVjdGl2ZUF1dGhvcmluZ1JlcXVpcmVtZW50c1Jlc3BvbnNlEg0KBWZvdW5kGAEgASgIEhMKBmRvbWFpbhgCIAEoCUgAiAEBEhUKCHJlbGF0aW9uGAMgASgJSAGIAQESEwoGb2JqZWN0GAQgASgJSAKIAQESEgoFYWN0b3IYBSABKAlIA4gBARIVCghrZXlfaGFzaBgGIAEoCUgEiAEBEhcKD3NpZ25lcl9lbnJvbGxlZBgHIAEoCBIUCgxyb2xlX2FsbG93ZWQYCCABKAhCCQoHX2RvbWFpbkILCglfcmVsYXRpb25CCQoHX29iamVjdEIICgZfYWN0b3JCCwoJX2tleV9oYXNoInIKGkF1dGhlbnRpY2F0aW9uUG9zdHVyZVF1ZXJ5Eh4KFmluY2x1ZGVfYmlydGhfZXZpZGVuY2UYASABKAgSHgoRZGV2aWNlX3B1YmxpY19rZXkYAiABKAxIAIgBAUIUChJfZGV2aWNlX3B1YmxpY19rZXki7AIKHUF1dGhlbnRpY2F0aW9uUG9zdHVyZVJlc3BvbnNlEkgKDnByb3ZpZGVyX3Rva2VuGAEgASgOMjAubm9tb3Mua2VybmVsLnYxLlByb3ZpZGVyVG9rZW5WZXJpZmljYXRpb25TdGF0dXMSFwoPZW5yb2xsZWRfZGV2aWNlGAIgASgIEhoKEnJlc29sdmVkX3ByaW5jaXBhbBgDIAEoCRJECg5iaXJ0aF9ldmlkZW5jZRgEIAEoCzInLm5vbW9zLmtlcm5lbC52MS5CaXJ0aEV2aWRlbmNlUmVhZGluZXNzSACIAQESQQoUZGV2aWNlX3NpZ25lcl9zdGF0dXMYBSABKA4yIy5ub21vcy5rZXJuZWwudjEuRGV2aWNlU2lnbmVyU3RhdHVzEhoKEmRldmljZV9rZXlfc3ViamVjdBgGIAEoCRIUCgxzaWduZXJfZXBvY2gYByABKANCEQoPX2JpcnRoX2V2aWRlbmNlIl4KFkJpcnRoRXZpZGVuY2VSZWFkaW5lc3MSNAoGc3RhdHVzGAEgASgOMiQubm9tb3Mua2VybmVsLnYxLkJpcnRoRXZpZGVuY2VTdGF0dXMSDgoGZGV0YWlsGAIgASgJIigKF093bmVkRGV2aWNlUmVxdWVzdFF1ZXJ5Eg0KBXNjb3BlGAEgASgJIjIKGk93bmVkRGV2aWNlUmVxdWVzdFJlc3BvbnNlEhQKDHJlcXVlc3RfdXNkYRgBIAEoDCJAChlPd25lZFByZXBhcmVBcHByb3ZhbFF1ZXJ5Eg0KBXNjb3BlGAEgASgJEhQKDHJlcXVlc3RfdXNkYRgCIAEoDCK/AQocT3duZWRQcmVwYXJlQXBwcm92YWxSZXNwb25zZRIXCg9uZXdfa2V5X3N1YmplY3QYASABKAkSGgoSb3duZWRfY3VzdG9keV91c2RhGAIgASgMEhQKDHZlcmlmaWVkX3ZpYRgDIAEoCRIYChB2YWxpZF9mcm9tX2Vwb2NoGAQgASgEEh8KF2FwcHJvdmVkX2F0X3VuaXhfbWlsbGlzGAUgASgEEhkKEW93bmVkX2tleV9zdWJqZWN0GAYgASgJIpIBCg5RdWVyeUF1dGhvcml0eRIXCg9wcmluY2lwYWxfY2xhaW0YASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIQCghub3dfdW5peBgDIAEoBBIVCg1hdXRob3Jfc2VjcmV0GAQgASgMEioKBGtleXMYBSADKAsyHC5ub21vcy5rZXJuZWwudjEuSW5qZWN0ZWRLZXkiOAoLSW5qZWN0ZWRLZXkSDQoFc2NvcGUYASABKAkSDQoFZXBvY2gYAiABKAQSCwoDa2V5GAMgASgMItgBCglSb3dzUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCXByaW5jaXBhbBgDIAEoCRIWCg5hcmd1bWVudHNfdXNkYRgEIAEoDBIzChVhcHBsaWNhdGlvbl9hcmd1bWVudHMYBSABKAsyFC5nb29nbGUucHJvdG9idWYuQW55EhsKDnNpbmNlX2Zyb250aWVyGAYgASgJSACIAQFCEQoPX3NpbmNlX2Zyb250aWVyIsYBCglQYWdlUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0Eg0KBWxpbWl0GAMgASgNEg0KBWFmdGVyGAQgASgJEhEKCXByaW5jaXBhbBgFIAEoCRIWCg5hcmd1bWVudHNfdXNkYRgGIAEoDBIzChVhcHBsaWNhdGlvbl9hcmd1bWVudHMYByABKAsyFC5nb29nbGUucHJvdG9idWYuQW55IkwKCUJ5SWRRdWVyeRIWCg5hZ2dyZWdhdGVfdHlwZRgBIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAiABKAkSEQoJcHJpbmNpcGFsGAMgASgJIjgKC0J5VHlwZVF1ZXJ5EhYKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJEhEKCXByaW5jaXBhbBgCIAEoCSJcCghOb21vc1JlZhIRCgl3b3Jrc3BhY2UYASABKAkSFgoOYWdncmVnYXRlX3R5cGUYAiABKAkSFAoMYWdncmVnYXRlX2lkGAMgASgJEg8KB3ZlcnNpb24YBCABKAkiTgoQUmVzb2x2ZVJlZnNRdWVyeRInCgRyZWZzGAEgAygLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEhEKCXByaW5jaXBhbBgCIAEoCSJOChZSZWZlcmVuY2VWZXJzaW9uc1F1ZXJ5EjQKBHJlZnMYASADKAsyJi5ub21vcy5rZXJuZWwudjEuUmVmZXJlbmNlVmVyc2lvbkNoZWNrIoQBChVSZWZlcmVuY2VWZXJzaW9uQ2hlY2sSKQoGcGlubmVkGAEgASgLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEikKBnNlcmllcxgCIAEoCzIZLm5vbW9zLmtlcm5lbC52MS5Ob21vc1JlZhIVCg1jdXJyZW50X2ZpZWxkGAMgASgJImIKClRhbGx5UXVlcnkSCgoCaWQYASABKAkSEQoJcHJpbmNpcGFsGAMgASgJEhYKCWdyb3VwX2tleRgEIAEoCUgAiAEBQgwKCl9ncm91cF9rZXlKBAgCEANSCWFyZ3VtZW50cyJ6CgxTcGF0aWFsUXVlcnkSCgoCaWQYASABKAkSEQoJcHJpbmNpcGFsGAMgASgJEg0KBW1pbl94GAQgASgBEg0KBW1pbl95GAUgASgBEg0KBW1heF94GAYgASgBEg0KBW1heF95GAcgASgBSgQIAhADUglhcmd1bWVudHMiWgoVUGVuZGluZ0NvbmZsaWN0c1F1ZXJ5EhsKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJSACIAQESEQoJcHJpbmNpcGFsGAIgASgJQhEKD19hZ2dyZWdhdGVfdHlwZSIwChtQZW5kaW5nQ29uZmxpY3RTdW1tYXJ5UXVlcnkSEQoJcHJpbmNpcGFsGAEgASgJInEKCk5hbWVkUXVlcnkSMgoJb3BlcmF0aW9uGAEgASgOMh8ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5T3BlcmF0aW9uEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCLkAQoZRnJvbnRpZXJUcmFuc2l0aW9uUmVxdWVzdBIOCgZkb21haW4YASABKAkSFgoOY2FuZGlkYXRlX2hhc2gYAiABKAkSDwoHYXRfaGFzaBgDIAEoCRIhChlhY2tub3dsZWRnZW1lbnRfcHJpbmNpcGFsGAQgASgJEiAKE3Jlc3RvcmVfcHJldmlvdXNfb2YYBSABKAlIAIgBARIxCg9jYW5kaWRhdGVfdW5pdHMYBiADKAsyGC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdEIWChRfcmVzdG9yZV9wcmV2aW91c19vZiJaCiVGcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EhgKEHNvdXJjZV9zdGFibGVfaWQYASABKAkSFwoPYWNrbm93bGVkZ2VtZW50GAIgASgJIvUBCh5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbnMSDwoHcmV0aXJlZBgBIAMoCRJHCgdyZXR5cGVkGAIgAygLMjYubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvbkRpc3Bvc2l0aW9uTWFwRW50cnkSRwoHcmViaW5kcxgDIAMoCzI2Lm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EhwKD2Fja25vd2xlZGdlZF9ieRgEIAEoCUgAiAEBQhIKEF9hY2tub3dsZWRnZWRfYnkiPQobRnJvbnRpZXJUcmFuc2l0aW9uVmlvbGF0aW9uEg4KBmRvbWFpbhgBIAEoCRIOCgZkZXRhaWwYAiABKAki1wIKGkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlEg8KB2F0X2hhc2gYASABKAkSGQoMY3VycmVudF9oYXNoGAIgASgJSACIAQESFQoNYXRfc3RhdGVfcm9vdBgDIAEoCRIWCg5jYW5kaWRhdGVfaGFzaBgEIAEoCRIOCgZkb21haW4YBSABKAkSDwoHZG9tYWlucxgGIAMoCRINCgVyZWFkeRgHIAEoCBJACgp2aW9sYXRpb25zGAggAygLMiwubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblZpb2xhdGlvbhJKCgxkaXNwb3NpdGlvbnMYCSABKAsyLy5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uRGlzcG9zaXRpb25zSAGIAQFCDwoNX2N1cnJlbnRfaGFzaEIPCg1fZGlzcG9zaXRpb25zIi8KE0F1dGhvcml6YXRpb25PYmplY3QSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCSJUChRBdXRob3JpemF0aW9uU3ViamVjdBIMCgR0eXBlGAEgASgJEgoKAmlkGAIgASgJEhUKCHJlbGF0aW9uGAMgASgJSACIAQFCCwoJX3JlbGF0aW9uIpwBChhSZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBIQCghyZWxhdGlvbhgCIAEoCRI2CgdzdWJqZWN0GAMgASgLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0IoEBChhBdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSIwoZY3VycmVudF92ZXJpZmllZF9mcm9udGllchgBIAEoCEgAEhkKD2F0X2xlYXN0X2NvbW1pdBgCIAEoCUgAEhYKDGV4YWN0X2NvbW1pdBgDIAEoCUgAQg0KC3JlcXVpcmVtZW50ImYKHUF1dGhvcml6YXRpb25Db25kaXRpb25Db250ZXh0EhQKDGNvbmRpdGlvbl9pZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3Qi9wIKGUF1dGhvcml6YXRpb25DaGVja1JlcXVlc3QSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBISCgpwZXJtaXNzaW9uGAIgASgJEjYKB3N1YmplY3QYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvblN1YmplY3QSPgoLY29uc2lzdGVuY3kYBCABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5Ej8KB2NvbnRleHQYBSADKAsyLi5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbmRpdGlvbkNvbnRleHQSIAoTZXhwZWN0ZWRfbW9kZWxfaGFzaBgGIAEoCUgAiAEBEhsKE2luY2x1ZGVfZXhwbGFuYXRpb24YByABKAhCFgoUX2V4cGVjdGVkX21vZGVsX2hhc2gi7QIKGkF1dGhvcml6YXRpb25FeHBhbmRSZXF1ZXN0EjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEgoKcGVybWlzc2lvbhgCIAEoCRI+Cgtjb25zaXN0ZW5jeRgDIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSPwoHY29udGV4dBgEIAMoCzIuLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uZGl0aW9uQ29udGV4dBIgChNleHBlY3RlZF9tb2RlbF9oYXNoGAUgASgJSACIAQESDQoFbGltaXQYBiABKA0SEgoFYWZ0ZXIYByABKAlIAYgBARIbChNpbmNsdWRlX2V4cGxhbmF0aW9uGAggASgIQhYKFF9leHBlY3RlZF9tb2RlbF9oYXNoQggKBl9hZnRlciK9AQoZUmVsYXRpb25zaGlwVHVwbGVFdmlkZW5jZRI4CgV0dXBsZRgBIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSEAoIdHVwbGVfaWQYAiABKAkSGgoSYXNzZXJ0aW9uX2V2ZW50X2lkGAMgASgJEiAKE3Jldm9jYXRpb25fZXZlbnRfaWQYBCABKAlIAIgBAUIWChRfcmV2b2NhdGlvbl9ldmVudF9pZCLhAwoYQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uEkYKCW9wZXJhdGlvbhgBIAEoDjIzLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb24uT3BlcmF0aW9uEhAKCHJlbGF0aW9uGAIgASgJEg4KBnJlc3VsdBgDIAEoCBI8CghldmlkZW5jZRgEIAMoCzIqLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUV2aWRlbmNlEjsKCGNoaWxkcmVuGAUgAygLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbiLfAQoJT3BlcmF0aW9uEhkKFU9QRVJBVElPTl9VTlNQRUNJRklFRBAAEhQKEE9QRVJBVElPTl9ESVJFQ1QQARIeChpPUEVSQVRJT05fQ09NUFVURURfVVNFUlNFVBACEh4KGk9QRVJBVElPTl9UVVBMRV9UT19VU0VSU0VUEAMSEwoPT1BFUkFUSU9OX1VOSU9OEAQSGgoWT1BFUkFUSU9OX0lOVEVSU0VDVElPThAFEhcKE09QRVJBVElPTl9FWENMVVNJT04QBhIXChNPUEVSQVRJT05fQ09ORElUSU9OEAcidwoaQXV0aG9yaXphdGlvbkRlY2lzaW9uQmFzaXMSIAoYYXV0aG9yaXphdGlvbl9tb2RlbF9oYXNoGAEgASgJEiEKGXJlbGF0aW9uc2hpcF9zdGF0ZV9jb21taXQYAiABKAkSFAoMY29udGV4dF9oYXNoGAMgASgMIr4BChpBdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZRIPCgdhbGxvd2VkGAEgASgIEjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEkMKC2V4cGxhbmF0aW9uGAMgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbkgAiAEBQg4KDF9leHBsYW5hdGlvbiKDAgobQXV0aG9yaXphdGlvbkV4cGFuZFJlc3BvbnNlEjcKCHN1YmplY3RzGAEgAygLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0EjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEhEKBG5leHQYAyABKAlIAIgBARJDCgtleHBsYW5hdGlvbhgEIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb25IAYgBAUIHCgVfbmV4dEIOCgxfZXhwbGFuYXRpb24iqAEKDU91dGJveFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBItCgVjbG9jaxgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5DYXB0dXJlZENsb2NrEjYKB3ByZXBhcmUYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuUHJlcGFyZU91dGJvdW5kT2ZmZXIitgEKC1N5bmNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEQoJZnJvbV9iYXNlGAIgASgJEg8KB3RvX2hlYWQYAyABKAkSGgoScGFya19yZWZ1c2VkX2xvY2FsGAQgASgIEhgKEHBhcmtlZF9hdF9taWxsaXMYBSABKAQSGwoTcmVwbGF5X29mZmVyX2J1ZGdldBgGIAEoDSLTAQoaS2VybmVsQ29uZmlndXJhdGlvblJlcXVlc3QSHQoVdHJ1c3Rfcm9vdF9wdWJsaWNfa2V5GAEgASgMEiUKGHRydXN0c19jdXN0b2RpYW5faGlzdG9yeRgCIAEoCEgAiAEBEiAKE2RlZmVycmVkX2R1cmFiaWxpdHkYAyABKAhIAYgBARIYChBob3N0X2NhbGxfbGVkZ2VyGAQgASgIQhsKGV90cnVzdHNfY3VzdG9kaWFuX2hpc3RvcnlCFgoUX2RlZmVycmVkX2R1cmFiaWxpdHkigAEKG0tlcm5lbENvbmZpZ3VyYXRpb25SZXNwb25zZRItCgZyZXN1bHQYASABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkEh0KEGhvc3RfY2FsbF9sZWRnZXIYAiABKA1IAIgBAUITChFfaG9zdF9jYWxsX2xlZGdlciKTEwoOQ3VzdG9keVJlcXVlc3QSNwoKcGFja19kZWx0YRgKIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5QYWNrRGVsdGFSZXF1ZXN0SAASNwoKYXBwbHlfcGFjaxgLIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5BcHBseVBhY2tSZXF1ZXN0SAASNwoKcmVwb19zdGF0cxgMIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZXBvU3RhdHNSZXF1ZXN0SAASPQoNaW50ZW50c19hYm92ZRgNIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRzQWJvdmVSZXF1ZXN0SAASPwoOaW5zcGVjdF9jaGFuZ2UYDiABKAsyJS5ub21vcy5rZXJuZWwudjEuSW5zcGVjdENoYW5nZVJlcXVlc3RIABJOChZlbmNvZGVfcmVmdXNhbF92ZXJkaWN0GA8gASgLMiwubm9tb3Mua2VybmVsLnYxLkVuY29kZVJlZnVzYWxWZXJkaWN0UmVxdWVzdEgAElAKF2luc3BlY3RfcmVmdXNhbF92ZXJkaWN0GBAgASgLMi0ubm9tb3Mua2VybmVsLnYxLkluc3BlY3RSZWZ1c2FsVmVyZGljdFJlcXVlc3RIABI1CglyZWFkX2Jsb2IYESABKAsyIC5ub21vcy5rZXJuZWwudjEuUmVhZEJsb2JSZXF1ZXN0SAASOQoLcmVzb2x2ZV9yZWYYEiABKAsyIi5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVJlZlJlcXVlc3RIABI1CglsaXN0X3JlZnMYEyABKAsyIC5ub21vcy5rZXJuZWwudjEuTGlzdFJlZnNSZXF1ZXN0SAASNQoJd3JpdGVfcmVmGBQgASgLMiAubm9tb3Mua2VybmVsLnYxLldyaXRlUmVmUmVxdWVzdEgAEjcKCmRlbGV0ZV9yZWYYFSABKAsyIS5ub21vcy5rZXJuZWwudjEuRGVsZXRlUmVmUmVxdWVzdEgAEkQKEXdyaXRlX21ldGFfY29tbWl0GBYgASgLMicubm9tb3Mua2VybmVsLnYxLldyaXRlTWV0YUNvbW1pdFJlcXVlc3RIABJCChBsYXdfY2xvc3VyZV9pbmZvGBcgASgLMiYubm9tb3Mua2VybmVsLnYxLkxhd0Nsb3N1cmVJbmZvUmVxdWVzdEgAEkUKEWNoZWNrcG9pbnRfZXhwb3J0GBggASgLMigubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRFeHBvcnRSZXF1ZXN0SAASRQoRY2hlY2twb2ludF9pbXBvcnQYGSABKAsyKC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEltcG9ydFJlcXVlc3RIABJDChBjYXBhY2l0eV9yZXNlcnZlGBogASgLMicubm9tb3Mua2VybmVsLnYxLkNhcGFjaXR5UmVzZXJ2ZVJlcXVlc3RIABI7CgxyZXN0b3JlX21haW4YGyABKAsyIy5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5SZXF1ZXN0SAASTgoWcmVzb2x2ZV9zdGF0ZV9wb3NpdGlvbhgcIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlU3RhdGVQb3NpdGlvblJlcXVlc3RIABJHChJyZXNpZGVudF9mb290cHJpbnQYHSABKAsyKS5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRGb290cHJpbnRSZXF1ZXN0SAASQQoPaGlzdG9yeV9zdW1tYXJ5GB4gASgLMiYubm9tb3Mua2VybmVsLnYxLkhpc3RvcnlTdW1tYXJ5UmVxdWVzdEgAEloKHHByb3ZlX2NvbXBhY3Rpb25fZXF1aXZhbGVuY2UYHyABKAsyMi5ub21vcy5rZXJuZWwudjEuUHJvdmVDb21wYWN0aW9uRXF1aXZhbGVuY2VSZXF1ZXN0SAASPgoOb3Blbl9naXRfc3RhdGUYICABKAsyJC5ub21vcy5rZXJuZWwudjEuT3BlbkdpdFN0YXRlUmVxdWVzdEgAEk4KFnJlYWRfY3VzdG9keV9wbGFjZW1lbnQYISABKAsyLC5ub21vcy5rZXJuZWwudjEuUmVhZEN1c3RvZHlQbGFjZW1lbnRSZXF1ZXN0SAASVAoZaW5zcGVjdF9jdXN0b2R5X3BsYWNlbWVudBgjIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q3VzdG9keVBsYWNlbWVudFJlcXVlc3RIABJQChdyZWxlYXNlX3dvcmtzcGFjZV9zdGF0ZRgkIAEoCzItLm5vbW9zLmtlcm5lbC52MS5SZWxlYXNlV29ya3NwYWNlU3RhdGVSZXF1ZXN0SAASXwofcmVjb3JkX3dvcmtzcGFjZV9lZmZlY3Rfb3V0Y29tZRglIAEoCzI0Lm5vbW9zLmtlcm5lbC52MS5SZWNvcmRXb3Jrc3BhY2VFZmZlY3RPdXRjb21lUmVxdWVzdEgAEkwKFWF0dGFjaF9sb2NhbF9mcm9udGllchgmIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdHRhY2hMb2NhbEZyb250aWVyUmVxdWVzdEgAEkMKEGFnZ3JlZ2F0ZV9jZW5zdXMYJyABKAsyJy5ub21vcy5rZXJuZWwudjEuQWdncmVnYXRlQ2Vuc3VzUmVxdWVzdEgAEj0KDWF1ZGl0X2N1c3RvZHkYKCABKAsyJC5ub21vcy5rZXJuZWwudjEuQXVkaXRDdXN0b2R5UmVxdWVzdEgAEkgKE2V4cG9ydF9sYXdfcHJvZHVjdHMYKSABKAsyKS5ub21vcy5rZXJuZWwudjEuRXhwb3J0TGF3UHJvZHVjdHNSZXF1ZXN0SAASSAoTaW1wb3J0X2xhd19wcm9kdWN0cxgqIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5JbXBvcnRMYXdQcm9kdWN0c1JlcXVlc3RIABJKChRwcmVwYXJlX2xhd19wcm9kdWN0cxgrIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5QcmVwYXJlTGF3UHJvZHVjdHNSZXF1ZXN0SAASUgoYcmVjb3Zlcl9kZXRhY2hlZF9yZWNlaXB0GCwgASgLMi4ubm9tb3Mua2VybmVsLnYxLlJlY292ZXJEZXRhY2hlZFJlY2VpcHRSZXF1ZXN0SABCCwoJb3BlcmF0aW9uSgQIIhAjUhdhZG9wdF9jdXN0b2R5X3BsYWNlbWVudCJeChZBZ2dyZWdhdGVDZW5zdXNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEgoKdHlwZV9saW1pdBgCIAEoDSIxChJBZ2dyZWdhdGVUeXBlQ291bnQSDAoEdHlwZRgBIAEoCRINCgVjb3VudBgCIAEoBCL7AQoXQWdncmVnYXRlQ2Vuc3VzUmVzcG9uc2USEQoEaGVhZBgBIAEoCUgAiAEBEhwKD2FnZ3JlZ2F0ZV9jb3VudBgCIAEoBEgBiAEBEhcKCnN0YXRlX3Jvb3QYAyABKAlIAogBARI2Cgl0b3BfdHlwZXMYBCADKAsyIy5ub21vcy5rZXJuZWwudjEuQWdncmVnYXRlVHlwZUNvdW50Eh0KEHR5cGVzX3N0YXRlX3Jvb3QYBSABKAlIA4gBAUIHCgVfaGVhZEISChBfYWdncmVnYXRlX2NvdW50Qg0KC19zdGF0ZV9yb290QhMKEV90eXBlc19zdGF0ZV9yb290IigKGFJlc2lkZW50Rm9vdHByaW50UmVxdWVzdBIMCgRkZWVwGAEgASgIIvQDChFSZXNpZGVudEZvb3RwcmludBIRCgl3b3Jrc3BhY2UYASABKAkSDgoGYnJhbmNoGAIgASgJEhgKEHJlYWRfbW9kZWxfYnl0ZXMYAyABKAQSHQoVcmVhZF9tb2RlbF9ydXN0X2J5dGVzGAQgASgEEhgKEGZvbGRfc3RhdGVfYnl0ZXMYBSABKAQSEwoLZm9sZF9pbWFnZXMYBiABKA0SHwoXc2hhcmVkX2F0dHJpYnV0ZWRfYnl0ZXMYByABKAQSEgoKYWdncmVnYXRlcxgIIAEoBBI2Cgpjb21wb25lbnRzGAkgAygLMiIubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Q29tcG9uZW50EhIKCmNvbXB1dGVfdXMYCiABKAQSRQoRcmVhZF9zdG9yYWdlX2tpbmQYCyABKA4yKi5ub21vcy5rZXJuZWwudjEuUmVhZFByb2plY3Rpb25TdG9yYWdlS2luZBIfChdzcWxpdGVfY2FjaGVfdXNlZF9ieXRlcxgMIAEoBBIYChBmbGF0X3NjYWxhcl9yb3dzGA0gASgEEh0KFWZsYXRfc2NhbGFyX3Jvd3NfcmVhZBgOIAEoBBIdChBmdWxsX3JlcGxheV9oZWFkGA8gASgJSACIAQFCEwoRX2Z1bGxfcmVwbGF5X2hlYWQiaQoRUmVzaWRlbnRDb21wb25lbnQSNAoEa2luZBgBIAEoDjImLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudENvbXBvbmVudEtpbmQSDQoFYnl0ZXMYAiABKAQSDwoHY2VpbGluZxgDIAEoCCLKAQoZUmVzaWRlbnRGb290cHJpbnRSZXNwb25zZRI1CglyZXNpZGVudHMYASADKAsyIi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRGb290cHJpbnQSHAoUYWxsb2NhdG9yX2xpdmVfYnl0ZXMYAiABKAQSGAoQYXR0cmlidXRlZF9ieXRlcxgDIAEoBBIZChF1bmFjY291bnRlZF9ieXRlcxgEIAEoBBIVCg1hY2NvdW50aW5nX3VzGAUgASgEEgwKBGRlZXAYBiABKAgi4gEKEFBhY2tEZWx0YVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESEQoEYmFzZRgDIAEoCUgBiAEBEg4KBmJyYW5jaBgEIAEoCRIdChBzdGFnZWRfcGFja19maWxlGAUgASgJSAKIAQESEgoFZGVwdGgYBiABKA1IA4gBARISCgpiZWxvd19oZWFkGAcgASgIEhIKCmFsc29faGVhZHMYCCADKAlCBwoFX2hlYWRCBwoFX2Jhc2VCEwoRX3N0YWdlZF9wYWNrX2ZpbGVCCAoGX2RlcHRoIvoBChBBcHBseVBhY2tSZXF1ZXN0EgwKBHJlcG8YASABKAkSDgoEcGFjaxgCIAEoDEgAEhoKEHN0YWdlZF9wYWNrX2ZpbGUYBCABKAlIABIaChBjb250aW51ZV9wZW5kaW5nGAggASgISAASGAoOY2FuY2VsX3BlbmRpbmcYCiABKAhIABIRCgRoZWFkGAMgASgJSAGIAQESDwoHc2hhbGxvdxgFIAMoCRIRCgl1bnNoYWxsb3cYBiADKAkSGQoRd29ya19idWRnZXRfYnl0ZXMYByABKAQSEQoJaW1wb3J0X2lkGAkgASgEQggKBnNvdXJjZUIHCgVfaGVhZCIgChBSZXBvU3RhdHNSZXF1ZXN0EgwKBHJlcG8YASABKAkivwEKE0ludGVudHNBYm92ZVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESEQoEYmFzZRgDIAEoCUgBiAEBEg4KBmJyYW5jaBgEIAEoCRINCgVsaW1pdBgFIAEoBBIYChBjb21wbGV0ZV9sb2dpY2FsGAYgASgIEhYKDmNvbXBhY3Rfc3RvcmVkGAcgASgIEhEKCWZyb21fYmFzZRgIIAEoCEIHCgVfaGVhZEIHCgVfYmFzZSJtChVIaXN0b3J5U3VtbWFyeVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESDgoGYnJhbmNoGAMgASgJEhEKBGJhc2UYBCABKAlIAYgBAUIHCgVfaGVhZEIHCgVfYmFzZSIrChRJbnNwZWN0Q2hhbmdlUmVxdWVzdBITCgtjaGFuZ2VfdXNkYRgBIAEoDCLfAQoOUmVmdXNhbFZlcmRpY3QSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIQCgNvaWQYAiABKAlIAYgBARITCgZkb21haW4YAyABKAlIAogBARIZCgxkaXJlY3RpdmVfaWQYBCABKAlIA4gBARIUCgdzZXNzaW9uGAUgASgJSASIAQESEQoJcGFya2VkX2F0GAYgASgJEg4KBnJlYXNvbhgHIAEoCUILCglfb2ZmZXJfaWRCBgoEX29pZEIJCgdfZG9tYWluQg8KDV9kaXJlY3RpdmVfaWRCCgoIX3Nlc3Npb24iTwobRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXF1ZXN0EjAKB3ZlcmRpY3QYASABKAsyHy5ub21vcy5rZXJuZWwudjEuUmVmdXNhbFZlcmRpY3QiNAocSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVxdWVzdBIUCgx2ZXJkaWN0X3VzZGEYASABKAwi1AEKFUNvbXBhY3Rpb25FcXVpdmFsZW5jZRITCgtzb3VyY2VfaGVhZBgBIAEoCRIWCg5zb3VyY2VfZ2VuZXNpcxgCIAEoCRIWCg5jYW5kaWRhdGVfaGVhZBgDIAEoCRIZChFjYW5kaWRhdGVfZ2VuZXNpcxgEIAEoCRIWCg5zb3VyY2VfaW50ZW50cxgFIAEoBBIXCg9jYXJyaWVkX2ludGVudHMYBiABKAQSFgoOcGFya2VkX2ludGVudHMYByABKAQSEgoKZXF1aXZhbGVudBgIIAEoCCJ9CiFQcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlcXVlc3QSEwoLc291cmNlX3JlcG8YASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSFgoOY2FuZGlkYXRlX3JlcG8YAyABKAkSFgoOY2FuZGlkYXRlX2hlYWQYBCABKAkiOgoPUmVhZEJsb2JSZXF1ZXN0EgwKBHJlcG8YASABKAkSCwoDb2lkGAIgASgJEgwKBHBhdGgYAyABKAkiUAoRUmVzb2x2ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkSEQoEcGF0aBgDIAEoCUgAiAEBQgcKBV9wYXRoIjYKD1BoeXNpY2FsUmVmRmlsZRIRCglyZWZlcmVuY2UYASABKAkSEAoIY29udGVudHMYAiABKAwipwIKD0xpc3RSZWZzUmVxdWVzdBIMCgRyZXBvGAEgASgJEg4KBnByZWZpeBgCIAEoCRIYChBsb29zZV9yZWZlcmVuY2VzGAMgAygJEiAKGGxvb3NlX2ludmVudG9yeV9jb21wbGV0ZRgEIAEoCBIgChNwYWNrZWRfcmVmc19wcmVzZW50GAUgASgISACIAQESPQoTcGh5c2ljYWxfbG9vc2VfcmVmcxgGIAMoCzIgLm5vbW9zLmtlcm5lbC52MS5QaHlzaWNhbFJlZkZpbGUSHAoUcGh5c2ljYWxfcGFja2VkX3JlZnMYByABKAwSIwobcGh5c2ljYWxfaW52ZW50b3J5X2NvbXBsZXRlGAggASgIQhYKFF9wYWNrZWRfcmVmc19wcmVzZW50IkIKD1dyaXRlUmVmUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCRIOCgZ0YXJnZXQYAyABKAkiMwoQRGVsZXRlUmVmUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCSIpCghNZXRhRmlsZRIMCgRwYXRoGAEgASgJEg8KB2NvbnRlbnQYAiABKAwirgEKFldyaXRlTWV0YUNvbW1pdFJlcXVlc3QSDAoEcmVwbxgBIAEoCRIPCgdwYXJlbnRzGAIgAygJEigKBWZpbGVzGAMgAygLMhkubm9tb3Mua2VybmVsLnYxLk1ldGFGaWxlEg8KB21lc3NhZ2UYBCABKAkSFAoMdGltZV9zZWNvbmRzGAUgASgSEhYKCXJlZmVyZW5jZRgGIAEoCUgAiAEBQgwKCl9yZWZlcmVuY2UiZwoVTGF3Q2xvc3VyZUluZm9SZXF1ZXN0EhQKDGNsb3N1cmVfZmlsZRgBIAEoCRI4CgpjYXBhYmlsaXR5GAIgASgOMiQubm9tb3Mua2VybmVsLnYxLktlcm5lbExhd0NhcGFiaWxpdHkihwEKF0NoZWNrcG9pbnRFeHBvcnRSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSIQoUc3RhZ2VkX2Zyb250aWVyX2ZpbGUYAiABKAlIAIgBAUIXChVfc3RhZ2VkX2Zyb250aWVyX2ZpbGUiQQoLRnJvbnRpZXJIbGMSEAoIcGh5c2ljYWwYASABKAQSDwoHbG9naWNhbBgCIAEoDRIPCgdyZXBsaWNhGAMgASgEIu0EChdWZXJpZmllZEZyb250aWVyUmVjZWlwdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRILCgNvaWQYAiABKAkSDwoHaW50ZW50cxgDIAEoBBITCgtwbGFuc19yZXJ1bhgEIAEoBBIcCg9jb250cm9sbGVyX2hhc2gYBSABKAlIAIgBARIZChFpbnN0YWxsZWRfZG9tYWlucxgGIAMoCRIOCgZsaW5lYXIYByABKAgSMwoIbGFzdF9obGMYCCABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIAYgBARIUCgdsYXN0X2lkGAkgASgJSAKIAQESEQoJc3RhdGVfb2lkGAogASgJEhQKDHN0YXRlX3NoYTI1NhgLIAEoCRI5Cg5zdGF0ZV9sYXN0X2hsYxgMIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gDiAEBEhoKDXN0YXRlX2xhc3RfaWQYDSABKAlIBIgBARIXCg9tYW5pZmVzdF9zaGEyNTYYDiABKAkSHgoWbGF3X2Nsb3N1cmVfaWRlbnRpdGllcxgPIAMoCRIaChJyZXNvbHZhYmxlX2RvbWFpbnMYECADKAkSIgoVcHJvamVjdGlvbl9zdGF0ZV9yb290GBEgASgJSAWIAQESDgoGd2Fsa2VkGBIgASgIQhIKEF9jb250cm9sbGVyX2hhc2hCCwoJX2xhc3RfaGxjQgoKCF9sYXN0X2lkQhEKD19zdGF0ZV9sYXN0X2hsY0IQCg5fc3RhdGVfbGFzdF9pZEIYChZfcHJvamVjdGlvbl9zdGF0ZV9yb290IkUKFUZvbGRGcm9udGllckFnZ3JlZ2F0ZRIUCgxhZ2dyZWdhdGVfaWQYASABKAkSFgoOYWdncmVnYXRlX3VzZGEYAiABKAwiQQoXRm9sZEZyb250aWVyRmluZ2VycHJpbnQSEQoJaW50ZW50X2lkGAEgASgJEhMKC2ZpbmdlcnByaW50GAIgASgJItYDChRGb2xkRnJvbnRpZXJTbmFwc2hvdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRILCgN0aXAYAiABKAkSDwoHZ2VuZXNpcxgDIAEoCRIVCg1oaXN0b3J5X2RlcHRoGAQgASgEEjoKCmFnZ3JlZ2F0ZXMYBSADKAsyJi5ub21vcy5rZXJuZWwudjEuRm9sZEZyb250aWVyQWdncmVnYXRlEjgKDWhsY193YXRlcm1hcmsYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIAIgBARIzCghsYXN0X2hsYxgHIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gBiAEBEhQKB2xhc3RfaWQYCCABKAlIAogBARIWCg5zdHJpa2VfdGFyZ2V0cxgJIAMoCRJFChNpbnRlbnRfZmluZ2VycHJpbnRzGAogAygLMigubm9tb3Mua2VybmVsLnYxLkZvbGRGcm9udGllckZpbmdlcnByaW50EhcKCnN0YXRlX3Jvb3QYCyABKAlIA4gBAUIQCg5faGxjX3dhdGVybWFya0ILCglfbGFzdF9obGNCCgoIX2xhc3RfaWRCDQoLX3N0YXRlX3Jvb3QimwMKGFN0b3JlZENoZWNrcG9pbnRNYW5pZmVzdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRITCgZjdXJzb3IYAiABKAlIAIgBARIYChBjaGVja3BvaW50X2J5dGVzGAMgASgEEhAKCGxhd19oYXNoGAQgASgJEjsKC2NvbXByZXNzaW9uGAUgASgOMiYubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRDb21wcmVzc2lvbhIRCglyYXdfYnl0ZXMYBiABKAQSFAoMc3RvcmVkX2J5dGVzGAcgASgEEh0KFWZyb250aWVyX3N0b3JlZF9ieXRlcxgIIAEoBBIXCgpzdGF0ZV9yb290GAkgASgJSAGIAQESUAoZdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdBgKIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZmllZEZyb250aWVyUmVjZWlwdEgCiAEBQgkKB19jdXJzb3JCDQoLX3N0YXRlX3Jvb3RCHAoaX3ZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQiwQMKF0NoZWNrcG9pbnRJbXBvcnRSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEgoIZnJvbnRpZXIYAiABKAxIABIeChRzdGFnZWRfZnJvbnRpZXJfZmlsZRgGIAEoCUgAEhMKBmN1cnNvchgDIAEoCUgBiAEBEhcKCnN0YXRlX3Jvb3QYBCABKAlIAogBARINCgVzcGFucxgFIAEoCBIRCgRoZWFkGAcgASgJSAOIAQESUAoZdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdBgIIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZmllZEZyb250aWVyUmVjZWlwdEgEiAEBEkoKE3ZlcmlmaWNhdGlvbl9wb2xpY3kYCSABKA4yLS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludFZlcmlmaWNhdGlvblBvbGljeUIRCg9mcm9udGllcl9zb3VyY2VCCQoHX2N1cnNvckINCgtfc3RhdGVfcm9vdEIHCgVfaGVhZEIcChpfdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdCIxChZDYXBhY2l0eVJlc2VydmVSZXF1ZXN0EhcKD2FnZ3JlZ2F0ZV9jb3VudBgBIAEoBCKZAgoSUmVzdG9yZU1haW5SZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDAoEaGVhZBgCIAEoCRITCgtkaWFnbm9zdGljcxgDIAEoCBIYChBvcGVyYXRvcl9jdXN0b2R5GAQgASgIEiAKE2V4cGVjdGVkX2xvY2FsX2hlYWQYBSABKAlIAIgBARJAChNjdXN0b2R5X2NlcnRpZmljYXRlGAYgASgLMiMubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlDZXJ0aWZpY2F0ZRIYChBwcm92aWRlcl9jdXN0b2R5GAcgASgIQhYKFF9leHBlY3RlZF9sb2NhbF9oZWFkIm0KE0F1ZGl0Q3VzdG9keVJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIVCg1idWRnZXRfbWljcm9zGAIgASgNEg0KBXN0YXJ0GAMgASgIIpQBChRBdWRpdEN1c3RvZHlSZXNwb25zZRIPCgdwZW5kaW5nGAEgASgIEgwKBGhlYWQYAiABKAkSDgoGd2Fsa2VkGAMgASgEEg0KBXRvdGFsGAQgASgEEg8KB291dGNvbWUYBSABKAkSLQoHdmVyZGljdBgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCJ+CgtMYXdQcm9kdWN0cxIUCgxsYXdfaWRlbnRpdHkYASABKAkSFgoOZm9ybWF0X3ZlcnNpb24YAiABKA0SEgoKcmVhZF9sYXllchgDIAEoDBIVCg1jb21tYW5kX2xheWVyGAQgASgMEhYKDnNlbWFudGljX2xheWVyGAUgASgMIkwKGEV4cG9ydExhd1Byb2R1Y3RzUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0IlkKGUV4cG9ydExhd1Byb2R1Y3RzUmVzcG9uc2USDAoEaGVhZBgBIAEoCRIuCghwcm9kdWN0cxgCIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5MYXdQcm9kdWN0cyJ8ChhJbXBvcnRMYXdQcm9kdWN0c1JlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIuCghwcm9kdWN0cxgCIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5MYXdQcm9kdWN0cyItChlJbXBvcnRMYXdQcm9kdWN0c1Jlc3BvbnNlEhAKCGltcG9ydGVkGAEgAygJIm8KEkN1c3RvZHlDZXJ0aWZpY2F0ZRIRCgl3b3Jrc3BhY2UYASABKAkSDAoEaGVhZBgCIAEoCRIRCglrZXlfZXBvY2gYAyABKAMSEgoKcHVibGljX2tleRgEIAEoDBIRCglzaWduYXR1cmUYBSABKAwiZAoTT3BlbkdpdFN0YXRlUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EgwKBGhlYWQYAiABKAkSDQoFc3BhbnMYAyABKAgiawoaQXR0YWNoTG9jYWxGcm9udGllclJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIMCgRoZWFkGAIgASgJEg0KBXNwYW5zGAMgASgIIlMKDUN1c3RvZHlSZW1vdGUSDAoEbmFtZRgBIAEoCRILCgN1cmwYAiABKAkSFQoNcGVlcl9pZGVudGl0eRgDIAEoCRIQCghwcmlvcml0eRgEIAEoDSLGAQoUQ3VzdG9keVBsYWNlbWVudFJ1bGUSEgoKcGVlcl9jbGFzcxgBIAEoCRJAChBrZXJuZWxfcmVzaWRlbmN5GAIgASgOMiYubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlc2lkZW5jeUludGVudBJCChFjdXN0b2R5X3JldGVudGlvbhgDIAEoDjInLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmV0ZW50aW9uSW50ZW50EhQKDHJlbW90ZV9uYW1lcxgEIAMoCSKuAgoWQ3VzdG9keVBsYWNlbWVudFBvbGljeRITCgtkZWNsYXJhdGlvbhgBIAEoCRIWCg5wYWNrYWdlX3NoYTI1NhgCIAEoCRI0CgVydWxlcxgDIAMoCzIlLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UGxhY2VtZW50UnVsZRISCgphZG9wdGVkX2J5GAQgASgJEg4KBnJlYXNvbhgFIAEoCRIeChZlZmZlY3RpdmVfdGltZV9zZWNvbmRzGAYgASgSEi8KB3JlbW90ZXMYByADKAsyHi5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVJlbW90ZRIiChVyZWNpcGllbnRfbWFpbGJveF91cmwYCCABKAlIAIgBAUIYChZfcmVjaXBpZW50X21haWxib3hfdXJsIlkKG0N1c3RvZHlQbGFjZW1lbnRFeHBlY3RhdGlvbhIQCgZhYnNlbnQYASABKAhIABINCgNvaWQYAiABKAlIABINCgNhbnkYAyABKAhIAEIKCghmcm9udGllciIrChtSZWFkQ3VzdG9keVBsYWNlbWVudFJlcXVlc3QSDAoEcmVwbxgBIAEoCSI1Ch5JbnNwZWN0Q3VzdG9keVBsYWNlbWVudFJlcXVlc3QSEwoLcG9saWN5X3VzZGEYASABKAwiiQEKDlBsYWNlbWVudE9mZmVyEj4KCGV4cGVjdGVkGAEgASgLMiwubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlQbGFjZW1lbnRFeHBlY3RhdGlvbhI3CgZwb2xpY3kYAiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeSJpChtSZXNvbHZlU3RhdGVQb3NpdGlvblJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgltYWluX2hlYWQYAiABKAkSFQoNaGludGVkX2NvbW1pdBgDIAEoCRISCgpzdGF0ZV9yb290GAQgASgJIpYTCg9DdXN0b2R5UmVzcG9uc2USOAoKcGFja19kZWx0YRgKIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5QYWNrRGVsdGFSZXNwb25zZUgAEjgKCmFwcGx5X3BhY2sYCyABKAsyIi5ub21vcy5rZXJuZWwudjEuQXBwbHlQYWNrUmVzcG9uc2VIABI4CgpyZXBvX3N0YXRzGAwgASgLMiIubm9tb3Mua2VybmVsLnYxLlJlcG9TdGF0c1Jlc3BvbnNlSAASPgoNaW50ZW50c19hYm92ZRgNIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRzQWJvdmVSZXNwb25zZUgAEkAKDmluc3BlY3RfY2hhbmdlGA4gASgLMiYubm9tb3Mua2VybmVsLnYxLkluc3BlY3RDaGFuZ2VSZXNwb25zZUgAEk8KFmVuY29kZV9yZWZ1c2FsX3ZlcmRpY3QYDyABKAsyLS5ub21vcy5rZXJuZWwudjEuRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXNwb25zZUgAElEKF2luc3BlY3RfcmVmdXNhbF92ZXJkaWN0GBAgASgLMi4ubm9tb3Mua2VybmVsLnYxLkluc3BlY3RSZWZ1c2FsVmVyZGljdFJlc3BvbnNlSAASNgoJcmVhZF9ibG9iGBEgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlYWRCbG9iUmVzcG9uc2VIABI6CgtyZXNvbHZlX3JlZhgSIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmUmVzcG9uc2VIABI2CglsaXN0X3JlZnMYEyABKAsyIS5ub21vcy5rZXJuZWwudjEuTGlzdFJlZnNSZXNwb25zZUgAEjIKCXdyaXRlX3JlZhgUIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWRIABIzCgpkZWxldGVfcmVmGBUgASgLMh0ubm9tb3Mua2VybmVsLnYxLkFja25vd2xlZGdlZEgAEkUKEXdyaXRlX21ldGFfY29tbWl0GBYgASgLMigubm9tb3Mua2VybmVsLnYxLldyaXRlTWV0YUNvbW1pdFJlc3BvbnNlSAASQwoQbGF3X2Nsb3N1cmVfaW5mbxgXIAEoCzInLm5vbW9zLmtlcm5lbC52MS5MYXdDbG9zdXJlSW5mb1Jlc3BvbnNlSAASRgoRY2hlY2twb2ludF9leHBvcnQYGCABKAsyKS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEV4cG9ydFJlc3BvbnNlSAASRgoRY2hlY2twb2ludF9pbXBvcnQYGSABKAsyKS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEltcG9ydFJlc3BvbnNlSAASRAoQY2FwYWNpdHlfcmVzZXJ2ZRgaIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DYXBhY2l0eVJlc2VydmVSZXNwb25zZUgAEjwKDHJlc3RvcmVfbWFpbhgbIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5SZXN0b3JlTWFpblJlc3BvbnNlSAASTwoWcmVzb2x2ZV9zdGF0ZV9wb3NpdGlvbhgcIAEoCzItLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlU3RhdGVQb3NpdGlvblJlc3BvbnNlSAASSAoScmVzaWRlbnRfZm9vdHByaW50GB0gASgLMioubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Rm9vdHByaW50UmVzcG9uc2VIABJCCg9oaXN0b3J5X3N1bW1hcnkYHiABKAsyJy5ub21vcy5rZXJuZWwudjEuSGlzdG9yeVN1bW1hcnlSZXNwb25zZUgAElsKHHByb3ZlX2NvbXBhY3Rpb25fZXF1aXZhbGVuY2UYHyABKAsyMy5ub21vcy5rZXJuZWwudjEuUHJvdmVDb21wYWN0aW9uRXF1aXZhbGVuY2VSZXNwb25zZUgAEj8KDm9wZW5fZ2l0X3N0YXRlGCAgASgLMiUubm9tb3Mua2VybmVsLnYxLk9wZW5HaXRTdGF0ZVJlc3BvbnNlSAASTwoWcmVhZF9jdXN0b2R5X3BsYWNlbWVudBghIAEoCzItLm5vbW9zLmtlcm5lbC52MS5SZWFkQ3VzdG9keVBsYWNlbWVudFJlc3BvbnNlSAASVQoZaW5zcGVjdF9jdXN0b2R5X3BsYWNlbWVudBgjIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q3VzdG9keVBsYWNlbWVudFJlc3BvbnNlSAASUQoXcmVsZWFzZV93b3Jrc3BhY2Vfc3RhdGUYJCABKAsyLi5ub21vcy5rZXJuZWwudjEuUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVzcG9uc2VIABJaCh9yZWNvcmRfd29ya3NwYWNlX2VmZmVjdF9vdXRjb21lGCUgASgLMi8ubm9tb3Mua2VybmVsLnYxLlJlY29yZGVkV29ya3NwYWNlRWZmZWN0T3V0Y29tZUgAEk0KFWF0dGFjaF9sb2NhbF9mcm9udGllchgmIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5BdHRhY2hMb2NhbEZyb250aWVyUmVzcG9uc2VIABJEChBhZ2dyZWdhdGVfY2Vuc3VzGCcgASgLMigubm9tb3Mua2VybmVsLnYxLkFnZ3JlZ2F0ZUNlbnN1c1Jlc3BvbnNlSAASPgoNYXVkaXRfY3VzdG9keRgoIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5BdWRpdEN1c3RvZHlSZXNwb25zZUgAEkkKE2V4cG9ydF9sYXdfcHJvZHVjdHMYKSABKAsyKi5ub21vcy5rZXJuZWwudjEuRXhwb3J0TGF3UHJvZHVjdHNSZXNwb25zZUgAEkkKE2ltcG9ydF9sYXdfcHJvZHVjdHMYKiABKAsyKi5ub21vcy5rZXJuZWwudjEuSW1wb3J0TGF3UHJvZHVjdHNSZXNwb25zZUgAEksKFHByZXBhcmVfbGF3X3Byb2R1Y3RzGCsgASgLMisubm9tb3Mua2VybmVsLnYxLlByZXBhcmVMYXdQcm9kdWN0c1Jlc3BvbnNlSAASQgoYcmVjb3Zlcl9kZXRhY2hlZF9yZWNlaXB0GCwgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVzcG9uc2VIAEILCglvcGVyYXRpb25KBAgiECNSF2Fkb3B0X2N1c3RvZHlfcGxhY2VtZW50InAKEVBhY2tEZWx0YVJlc3BvbnNlEgwKBHBhY2sYASABKAwSDQoFYnl0ZXMYAiABKAQSDwoHc2hhbGxvdxgDIAMoCRIPCgdjb21taXRzGAQgASgNEg0KBXRyZWVzGAUgASgNEg0KBWJsb2JzGAYgASgNIuIBChFBcHBseVBhY2tSZXNwb25zZRIUCgxvYmplY3RfY291bnQYASABKAQSEQoJcGFja19oYXNoGAIgASgJEjsKB2Nsb3N1cmUYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuUGh5c2ljYWxDbG9zdXJlQ2hlY2tIAIgBARIWCg5pbXBvcnRfcGVuZGluZxgEIAEoCBIXCg93b3JrX2RvbmVfYnl0ZXMYBSABKAQSEQoJaW1wb3J0X2lkGAYgASgEEhcKD2ltcG9ydF9kZWZlcnJlZBgHIAEoCEIKCghfY2xvc3VyZSJtChRQaHlzaWNhbENsb3N1cmVDaGVjaxIWCg5yZXVzZWRfcmVjZWlwdBgBIAEoCBIUCgxjb21taXRzX3JlYWQYAiABKAQSEgoKdHJlZXNfcmVhZBgDIAEoBBITCgtsZWF2ZXNfcmVhZBgEIAEoBCK4AQoRUmVwb1N0YXRzUmVzcG9uc2USEwoLdG90YWxfYnl0ZXMYASABKAQSFAoMb2JqZWN0X2J5dGVzGAIgASgEEhUKDWxvb3NlX29iamVjdHMYAyABKAQSEwoLbG9vc2VfYnl0ZXMYBCABKAQSEgoKcGFja19maWxlcxgFIAEoBBISCgpwYWNrX2J5dGVzGAYgASgEEhMKC2luZGV4X2J5dGVzGAcgASgEEg8KB3NoYWxsb3cYCCADKAki4gEKDEludGVudFJlY29yZBILCgNvaWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEg4KBmRvbWFpbhgDIAEoCRIRCglkaXJlY3RpdmUYBCABKAkSEwoLY2hhbmdlX3VzZGEYBSABKAwSLgoIc2VtYW50aWMYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSSgoVdHJhbnNwb3J0X3JlcXVpcmVtZW50GAcgASgOMisubm9tb3Mua2VybmVsLnYxLkludGVudFRyYW5zcG9ydFJlcXVpcmVtZW50IkYKFEludGVudHNBYm92ZVJlc3BvbnNlEi4KB2ludGVudHMYASADKAsyHS5ub21vcy5rZXJuZWwudjEuSW50ZW50UmVjb3JkInQKFkhpc3RvcnlTdW1tYXJ5UmVzcG9uc2USDAoEaGVhZBgBIAEoCRIOCgZvbGRlc3QYAiABKAkSFAoMY29tbWl0X2NvdW50GAMgASgEEhAKCGNvbXBsZXRlGAQgASgIEhQKDHJlYWNoZWRfYmFzZRgFIAEoCCJCChNOb21pbmFsQ2FsbElkZW50aXR5EhMKC2RvbWFpbl9wYXRoGAEgASgJEhYKDmRpcmVjdGl2ZV9wYXRoGAIgASgJIogBChhMaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSHwoXdGFyZ2V0X2Nsb3N1cmVfaWRlbnRpdHkYASABKAkSFAoMaW5zdGFsbGVkX2J5GAIgASgJEjUKBXBoYXNlGAMgASgOMiYubm9tb3Mua2VybmVsLnYxLkxpZmVjeWNsZUluc3RhbGxQaGFzZSJaCh1Xb3Jrc3BhY2VSZXNpZGVuY3lSZXF1aXJlbWVudBIRCgl3b3Jrc3BhY2UYASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSEQoJZm9sZF9yb290GAMgASgJIrQCChVJbnNwZWN0Q2hhbmdlUmVzcG9uc2USLgoIc2VtYW50aWMYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJaW50ZW50X2lkGAIgASgJEjIKBGNhbGwYAyABKAsyJC5ub21vcy5rZXJuZWwudjEuTm9taW5hbENhbGxJZGVudGl0eRIQCghhdXRob3JlZBgEIAEoCBJEChFsaWZlY3ljbGVfaW5zdGFsbBgFIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5MaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSTAoUcmVxdWlyZWRfcmVzaWRlbmNpZXMYBiADKAsyLi5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlUmVzaWRlbmN5UmVxdWlyZW1lbnQiTAocUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXNwb25zZRIaCg1yZXNvbHZlZF9oZWFkGAEgASgJSACIAQFCEAoOX3Jlc29sdmVkX2hlYWQiNAocRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXNwb25zZRIUCgx2ZXJkaWN0X3VzZGEYASABKAwiUQodSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVzcG9uc2USMAoHdmVyZGljdBgBIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5SZWZ1c2FsVmVyZGljdCJ1CiJQcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlc3BvbnNlEjgKCGV2aWRlbmNlGAEgASgLMiYubm9tb3Mua2VybmVsLnYxLkNvbXBhY3Rpb25FcXVpdmFsZW5jZRIVCg1ldmlkZW5jZV91c2RhGAIgASgMIi8KEFJlYWRCbG9iUmVzcG9uc2USDQoFZm91bmQYASABKAgSDAoEYmxvYhgCIAEoDCIuChJSZXNvbHZlUmVmUmVzcG9uc2USEAoDb2lkGAEgASgJSACIAQFCBgoEX29pZCIrCglSZWZSZWNvcmQSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCSI8ChBMaXN0UmVmc1Jlc3BvbnNlEigKBHJlZnMYASADKAsyGi5ub21vcy5rZXJuZWwudjEuUmVmUmVjb3JkIg4KDEFja25vd2xlZGdlZCImChdXcml0ZU1ldGFDb21taXRSZXNwb25zZRILCgNvaWQYASABKAkigwEKFkxhd0Nsb3N1cmVJbmZvUmVzcG9uc2USEAoIaWRlbnRpdHkYASABKAkSGQoRcm9vdF9sb2dpY2FsX3BhdGgYAiABKAkSEwoLYXNzZXRfY291bnQYAyABKAQSEgoKcHJpbV9jb3VudBgEIAEoBBITCgtkb21haW5fa2V5cxgFIAMoCSLfAwoYQ2hlY2twb2ludEV4cG9ydFJlc3BvbnNlEg0KBWVtcHR5GAEgASgIEhMKBmN1cnNvchgCIAEoCUgAiAEBEhAKCGZyb250aWVyGAMgASgMEhcKCnN0YXRlX3Jvb3QYBCABKAlIAYgBARISCgpzdGF0ZV90cmVlGAUgASgIEg4KBnBpbm5lZBgGIAEoCBIbChNyZWFkX2luZGV4X3NuYXBzaG90GAcgASgIEiMKG3JlYWRfaW5kZXhfc25hcHNob3RfcGVuZGluZxgIIAEoCBIkChdyZWFkX2luZGV4X3NxbGl0ZV9ieXRlcxgJIAEoBEgCiAEBEiUKGHJlYWRfaW5kZXhfY3VzdG9keV9ieXRlcxgKIAEoBEgDiAEBElAKGXZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQYCyABKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZpZWRGcm9udGllclJlY2VpcHRIBIgBAUIJCgdfY3Vyc29yQg0KC19zdGF0ZV9yb290QhoKGF9yZWFkX2luZGV4X3NxbGl0ZV9ieXRlc0IbChlfcmVhZF9pbmRleF9jdXN0b2R5X2J5dGVzQhwKGl92ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0IusCChhDaGVja3BvaW50SW1wb3J0UmVzcG9uc2USEAoIcmVzdG9yZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESFwoPZnJvbnRpZXJfc2VlZGVkGAMgASgIEiUKHWZyb250aWVyX3ZlcmlmaWNhdGlvbl9wZW5kaW5nGAQgASgIEhcKD2FnZ3JlZ2F0ZV9jb3VudBgFIAEoBBIrCgVzcGFucxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBITCgZjdXJzb3IYByABKAlIAYgBARIRCglyZWFkX29ubHkYCCABKAgSFwoPbGF6eV9yZWFkX2luZGV4GAkgASgIEjcKCWFzc3VyYW5jZRgKIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlEhIKCnJlYWRfcmVhZHkYCyABKAhCCQoHX3JlYXNvbkIJCgdfY3Vyc29yIsABChRPcGVuR2l0U3RhdGVSZXNwb25zZRIOCgZvcGVuZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESFwoPYWdncmVnYXRlX2NvdW50GAMgASgEEisKBXNwYW5zGAQgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhMKBmN1cnNvchgFIAEoCUgBiAEBEhIKCnJlYWRfcmVhZHkYBiABKAhCCQoHX3JlYXNvbkIJCgdfY3Vyc29yIukBChtBdHRhY2hMb2NhbEZyb250aWVyUmVzcG9uc2USEAoIYXR0YWNoZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESDAoEaGVhZBgDIAEoCRISCgpzdGF0ZV9yb290GAQgASgJEhcKD2FnZ3JlZ2F0ZV9jb3VudBgFIAEoBBIrCgVzcGFucxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBISCgpyZWFkX3JlYWR5GAcgASgIEhwKFGZvcmVpZ25fc291cmNlX3JlYWR5GAggASgIQgkKB19yZWFzb24iMQocUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVxdWVzdBIRCgl3b3Jrc3BhY2UYASABKAkiMQodUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVzcG9uc2USEAoIcmVsZWFzZWQYASABKAgiiwEKHFJlYWRDdXN0b2R5UGxhY2VtZW50UmVzcG9uc2USFQoIZnJvbnRpZXIYASABKAlIAIgBARI8CgZwb2xpY3kYAiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeUgBiAEBQgsKCV9mcm9udGllckIJCgdfcG9saWN5Il0KEFBsYWNlbWVudEFkb3B0ZWQSEAoIZnJvbnRpZXIYASABKAkSNwoGcG9saWN5GAIgASgLMicubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlQbGFjZW1lbnRQb2xpY3kiWgofSW5zcGVjdEN1c3RvZHlQbGFjZW1lbnRSZXNwb25zZRI3CgZwb2xpY3kYASABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeSJKChdDYXBhY2l0eVJlc2VydmVSZXNwb25zZRIXCg9hZ2dyZWdhdGVfY291bnQYASABKAQSFgoOcmVzZXJ2ZWRfYnl0ZXMYAiABKAQi+QIKEFJlc3RvcmVNYWluU3BhbnMSEAoIdG90YWxfdXMYASABKAQSGgoSbGl2ZV9yZWZfbG9va3VwX3VzGAIgASgEEhgKEHRhcmdldF9kZWNvZGVfdXMYAyABKAQSJAocY3VzdG9keV9jb21wbGV0ZW5lc3NfcmVhZF91cxgEIAEoBBIZChFxdWFyYW50aW5lX3JlZl91cxgFIAEoBBIlCh1jaGFpbl9zaWduYXR1cmVfbGF3X3JlcGxheV91cxgGIAEoBBIZChF2ZXJkaWN0X2RlY29kZV91cxgHIAEoBBIjChtwcm9tb3RlX2FuZF9jbGVhbnVwX3JlZnNfdXMYCCABKAQSGwoTZnJvbnRpZXJfcmVidWlsZF91cxgJIAEoBBIZChFmcm9udGllcl9zdG9yZV91cxgKIAEoBBI9Cgx2ZXJpZmljYXRpb24YCyABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcyLvAQoTUmVzdG9yZU1haW5SZXNwb25zZRIMCgRoZWFkGAEgASgJEhAKCHZlcmlmaWVkGAIgASgIEgwKBHdhbGsYAyABKAkSMAoFc3BhbnMYBCABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5TcGFucxItCgd2ZXJkaWN0GAUgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EjcKCWFzc3VyYW5jZRgGIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlEhAKCGFjY2VwdGVkGAcgASgIIpsCCgpOb21vc1ZhbHVlEiUKBG51bGwYASABKAsyFS5ub21vcy5rZXJuZWwudjEuTnVsbEgAEhEKB2Jvb2xlYW4YAiABKAhIABIYCg5zaWduZWRfaW50ZWdlchgDIAEoEkgAEhoKEHVuc2lnbmVkX2ludGVnZXIYBCABKARIABIYCg5mbG9hdGluZ19wb2ludBgFIAEoAUgAEg4KBHRleHQYBiABKAlIABIPCgVieXRlcxgHIAEoDEgAEioKBGxpc3QYCCABKAsyGi5ub21vcy5rZXJuZWwudjEuTm9tb3NMaXN0SAASLgoGb2JqZWN0GAkgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0SABCBgoEa2luZCIGCgROdWxsIjgKCU5vbW9zTGlzdBIrCgZ2YWx1ZXMYASADKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZSKTAQoLTm9tb3NTdHJ1Y3QSOAoGZmllbGRzGAEgAygLMigubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0LkZpZWxkc0VudHJ5GkoKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIqCgV2YWx1ZRgCIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlOgI4ASI6Cg9IaXN0b3J5UmVxdWlyZWQSEQoJd29ya3NwYWNlGAEgASgJEhQKDHVudGlsX2NvbW1pdBgCIAEoCSJAChVMYXdQcmVwYXJhdGlvblVuaXRTZXQSJwoFdW5pdHMYASADKAsyGC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdCJNChBQcmVwYXJlZExhd0xheWVyEg0KBWlucHV0GAEgASgJEgsKA2tleRgCIAEoCRINCgVsYXllchgDIAEoDBIOCgZzaGEyNTYYBCABKAki6AIKGVByZXBhcmVMYXdQcm9kdWN0c1JlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBI5Cgl1bml0X3NldHMYAiADKAsyJi5ub21vcy5rZXJuZWwudjEuTGF3UHJlcGFyYXRpb25Vbml0U2V0Ej0KCGV4cGVjdGVkGAMgASgLMisubm9tb3Mua2VybmVsLnYxLlByZXBhcmVMYXdQcm9kdWN0c1Jlc3BvbnNlEjEKD2NhbmRpZGF0ZV91bml0cxgEIAMoCzIYLm5vbW9zLmtlcm5lbC52MS5MYXdVbml0EhUKDWNvdmVyYWdlX29ubHkYBSABKAgSFQoNY3VzdG9keV9oZWFkcxgGIAMoCRI+Cgtkb21haW5fcGxhbhgHIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlRG9tYWluUGxhblJlcXVlc3QiyAEKGlByZXBhcmVMYXdQcm9kdWN0c1Jlc3BvbnNlEhkKEWtlcm5lbF9nZW5lcmF0aW9uGAEgASgJEhEKCXVuaXRfc2V0cxgCIAMoCRIYChBwcmVwYXJhdGlvbl9rZXlzGAMgAygJEjEKBmxheWVycxgEIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5QcmVwYXJlZExhd0xheWVyEhMKC2Rlcml2YXRpb25zGAUgASgEEhoKEnByZXBhcmF0aW9uX21pY3JvcxgGIAEoBCKIAQodUmVjb3ZlckRldGFjaGVkUmVjZWlwdFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBI1CgZjaGFuZ2UYAiABKAsyJS5ub21vcy5rZXJuZWwudjEuRGV0YWNoZWRTaWduZWRDaGFuZ2UqbgoPTGF3VmVyc2lvbk9yZGVyEiEKHUxBV19WRVJTSU9OX09SREVSX1VOU1BFQ0lGSUVEEAASGwoXTEFXX1ZFUlNJT05fT1JERVJfRVFVQUwQARIbChdMQVdfVkVSU0lPTl9PUkRFUl9MT1dFUhACKuoBChJCaXJ0aE91dGNvbWVTdGF0dXMSJAogQklSVEhfT1VUQ09NRV9TVEFUVVNfVU5TUEVDSUZJRUQQABIdChlCSVJUSF9PVVRDT01FX1NUQVRVU19CT1JOEAESIQodQklSVEhfT1VUQ09NRV9TVEFUVVNfREVGRVJSRUQQAhIfChtCSVJUSF9PVVRDT01FX1NUQVRVU19GQUlMRUQQAxIgChxCSVJUSF9PVVRDT01FX1NUQVRVU19SRUZVU0VEEAQSKQolQklSVEhfT1VUQ09NRV9TVEFUVVNfVU5XQVJSQU5URURfQ0VSVBAFKswUChFLZXJuZWxSZWZ1c2FsQ29kZRIjCh9LRVJORUxfUkVGVVNBTF9DT0RFX1VOU1BFQ0lGSUVEEAASJQohS0VSTkVMX1JFRlVTQUxfQ09ERV9CQURfU0lHTkFUVVJFEAESJAogS0VSTkVMX1JFRlVTQUxfQ09ERV9VTkFVVEhPUklaRUQQAhInCiNLRVJORUxfUkVGVVNBTF9DT0RFX1BPTElDWV9ESVNBQkxFRBADEioKJktFUk5FTF9SRUZVU0FMX0NPREVfVU5DRVJUSUZJRURfUE9MSUNZEAQSIwofS0VSTkVMX1JFRlVTQUxfQ09ERV9SRUZFUkVOVElBTBAFEi8KK0tFUk5FTF9SRUZVU0FMX0NPREVfUE9JTlRfU1RBVEVfVU5BVkFJTEFCTEUQBhIkCiBLRVJORUxfUkVGVVNBTF9DT0RFX0NBUF9FWENFRURFRBAHEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQX0NPVU5UX1VOQVZBSUxBQkxFEAgSKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9FVklERU5DRV9VTkJBQ0tFRBAJEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfT1JQSEFOX1JFQ0VJUFQQChI2CjJLRVJORUxfUkVGVVNBTF9DT0RFX1JFQ0VJUFRfT05fVEVSTUlOQUxfT0JMSUdBVElPThALEiIKHktFUk5FTF9SRUZVU0FMX0NPREVfTk9UX01JTlRFRBAMEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfRE9NQUlOX0xJRkVDWUNMRRANEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfVFlQRV9UQUdfTUlTTUFUQ0gQDhIsCihLRVJORUxfUkVGVVNBTF9DT0RFX1JFVElSRURfUkVBRF9TVVJGQUNFEA8SMAosS0VSTkVMX1JFRlVTQUxfQ09ERV9DUk9TU19XT1JLU1BBQ0VfREVDTElORUQQEBIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FHR1JFR0FURV9JTlZBUklBTlQQERIrCidLRVJORUxfUkVGVVNBTF9DT0RFX1dPUktTUEFDRV9JTlZBUklBTlQQEhIuCipLRVJORUxfUkVGVVNBTF9DT0RFX0NBUFRVUkVEX1JFQURfQ09ORkxJQ1QQExIyCi5LRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1JFUVVJUkVEEBQSNAowS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9VTkRFQ0xBUkVEEBUSMQotS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9JTlZBTElEEBYSLworS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9TVEFMRRAXEjAKLEtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQVFVSRURfUkVBRF9VTkRFQ0xBUkVEEBgSLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBUVVJFRF9SRUFEX1BSSVZBVEUQGRIwCixLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfVU5ERUNMQVJFRBAaEjMKL0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9VTlRSVVNURURfS0VZEBsSNgoyS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1VOVFJVU1RFRF9TT1VSQ0UQHBIsCihLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfRk9SR0VEEB0SKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1NUQUxFEB4SLgoqS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX09WRVJTSVpFEB8SNwozS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX0RJU0hPTk9SRURfU09VUkNFECASNQoxS0VSTkVMX1JFRlVTQUxfQ09ERV9FUVVJVk9DQVRJT05fRVZJREVOQ0VfSU5WQUxJRBAhEjMKL0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNUQVRJT05fUkVDRUlQVF9JTlZBTElEECISKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9LRVlfUk9TVEVSX01JU01BVENIECMSLworS0VSTkVMX1JFRlVTQUxfQ09ERV9LRVlfRVBPQ0hfTk9UX01PTk9UT05JQxAkEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfV1JJVEVfRVBPQ0hfU1RBTEUQJRItCilLRVJORUxfUkVGVVNBTF9DT0RFX0VOVkVMT1BFX1NJRF9NSVNNQVRDSBAmEjIKLktFUk5FTF9SRUZVU0FMX0NPREVfUkVWT0tFRF9NRU1CRVJfUkVTVVJSRUNURUQQJxIoCiRLRVJORUxfUkVGVVNBTF9DT0RFX0ZPUkdFRF9QUklOQ0lQQUwQKBIoCiRLRVJORUxfUkVGVVNBTF9DT0RFX09XTkVEX0tFWV9BTkNIT1IQKRImCiJLRVJORUxfUkVGVVNBTF9DT0RFX09XTkVEX1JFQ09WRVJZECoSLAooS0VSTkVMX1JFRlVTQUxfQ09ERV9TVVJGQUNFRF9CQVNJU19BSEVBRBArEjIKLktFUk5FTF9SRUZVU0FMX0NPREVfU0lHTkVSX0VQT0NIX09VVF9PRl9XSU5ET1cQLBImCiJLRVJORUxfUkVGVVNBTF9DT0RFX0VWT0xWRV9SRUZVU0VEEC0SKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RBVElPTl9JTlZBTElEEC4SLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9QQVJFTlRfRElEX05PVF9BVFRFU1QQLxIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX0NFUlRfQ0hBSU5fQlJPS0VOEDASKgomS0VSTkVMX1JFRlVTQUxfQ09ERV9OT1RfUk9PVEVEX0FUX1JPT1QQMRIqCiZLRVJORUxfUkVGVVNBTF9DT0RFX0RFTEVHQVRJT05fSU5WQUxJRBAyEiUKIUtFUk5FTF9SRUZVU0FMX0NPREVfUExBTl9SRUpFQ1RFRBAzEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfRE9NQUlOX1JFRlVTRUQQNBIxCi1LRVJORUxfUkVGVVNBTF9DT0RFX0lOVkFSSUFOVF9FWEVDVVRJT05fRkFVTFQQNRI1CjFLRVJORUxfUkVGVVNBTF9DT0RFX0NIRUNLUE9JTlRfU0lHTkVSX1VOQVZBSUxBQkxFEDYSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9PRkZFUl9CQVNFX1NUQUxFEDcSJQohS0VSTkVMX1JFRlVTQUxfQ09ERV9CSVJUSF9SRUZVU0VEEDgq7wIKEEZ1bGxSZXN1bHRSZWFzb24SIgoeRlVMTF9SRVNVTFRfUkVBU09OX1VOU1BFQ0lGSUVEEAASHgoaRlVMTF9SRVNVTFRfUkVBU09OX05PX0JBU0UQARIiCh5GVUxMX1JFU1VMVF9SRUFTT05fTEFXX0NIQU5HRUQQAhItCilGVUxMX1JFU1VMVF9SRUFTT05fUkVBRF9BVVRIT1JJVFlfQ0hBTkdFRBADEikKJUZVTExfUkVTVUxUX1JFQVNPTl9QRVJfUkVDT1JEX1JFRlVTQUwQBBIjCh9GVUxMX1JFU1VMVF9SRUFTT05fT1JERVJFRF9SRUFEEAUSJgoiRlVMTF9SRVNVTFRfUkVBU09OX1RFTVBPUkFMX0ZJRUxEUxAGEicKI0ZVTExfUkVTVUxUX1JFQVNPTl9CQVNFX1VOQVZBSUxBQkxFEAcSIwofRlVMTF9SRVNVTFRfUkVBU09OX0xFR0FDWV9TVEFURRAIKskBChNJbnRlcmZhY2VNZW1iZXJLaW5kEiUKIUlOVEVSRkFDRV9NRU1CRVJfS0lORF9VTlNQRUNJRklFRBAAEiAKHElOVEVSRkFDRV9NRU1CRVJfS0lORF9ET01BSU4QARIjCh9JTlRFUkZBQ0VfTUVNQkVSX0tJTkRfRElSRUNUSVZFEAISIwofSU5URVJGQUNFX01FTUJFUl9LSU5EX0FHR1JFR0FURRADEh8KG0lOVEVSRkFDRV9NRU1CRVJfS0lORF9GSUVMRBAEKogCChxJbnRlcmZhY2VDb21wYXRpYmlsaXR5U3RhdHVzEi4KKklOVEVSRkFDRV9DT01QQVRJQklMSVRZX1NUQVRVU19VTlNQRUNJRklFRBAAEigKJElOVEVSRkFDRV9DT01QQVRJQklMSVRZX1NUQVRVU19FWEFDVBABEi0KKUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1NUQVRVU19DT01QQVRJQkxFEAISLgoqSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfU1RBVFVTX1VOQVZBSUxBQkxFEAMSLworSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfU1RBVFVTX0lOQ09NUEFUSUJMRRAEKsMDChxJbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVhc29uEi4KKklOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9VTlNQRUNJRklFRBAAEjEKLUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9ET01BSU5fTUlTU0lORxABEjEKLUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9NRU1CRVJfTUlTU0lORxACEjAKLElOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9GSUVMRF9NSVNTSU5HEAMSNQoxSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX1ZBTFVFX0tJTkRfQ0hBTkdFRBAEEjcKM0lOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9SRVFVSVJFRF9JTlBVVF9BRERFRBAFEjEKLUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9NQVRSSVhfSU5WQUxJRBAGEjgKNElOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9XSVJFX0NPTlRSQUNUX0NIQU5HRUQQByq3AgoQTWFpbnRlbmFuY2VQaGFzZRIhCh1NQUlOVEVOQU5DRV9QSEFTRV9VTlNQRUNJRklFRBAAEiQKIE1BSU5URU5BTkNFX1BIQVNFX1JFQURfRE9DVU1FTlRTEAESIgoeTUFJTlRFTkFOQ0VfUEhBU0VfU1FMSVRFX0lOREVYEAISJgoiTUFJTlRFTkFOQ0VfUEhBU0VfQ09NTUFORF9GUk9OVElFUhADEiMKH01BSU5URU5BTkNFX1BIQVNFX0NPTU1BTkRfUk9VVEUQBBIhCh1NQUlOVEVOQU5DRV9QSEFTRV9HSVRfQ1VTVE9EWRAFEiYKIk1BSU5URU5BTkNFX1BIQVNFX1JFQURfSU5ERVhfQ0FDSEUQBhIeChpNQUlOVEVOQU5DRV9QSEFTRV9DT01QTEVURRAHKooBCg9WZXJpZnlDaGFpbldhbGsSIQodVkVSSUZZX0NIQUlOX1dBTEtfVU5TUEVDSUZJRUQQABIaChZWRVJJRllfQ0hBSU5fV0FMS19GVUxMEAESHAoYVkVSSUZZX0NIQUlOX1dBTEtfU1VGRklYEAISGgoWVkVSSUZZX0NIQUlOX1dBTEtfTUVNTxADKnAKGEVmZmVjdEV4ZWN1dGlvblBsYWNlbWVudBIqCiZFRkZFQ1RfRVhFQ1VUSU9OX1BMQUNFTUVOVF9VTlNQRUNJRklFRBAAEigKJEVGRkVDVF9FWEVDVVRJT05fUExBQ0VNRU5UX0NVU1RPRElBThABKnYKGkVmZmVjdEV4ZWN1dGlvbkNhcmRpbmFsaXR5EiwKKEVGRkVDVF9FWEVDVVRJT05fQ0FSRElOQUxJVFlfVU5TUEVDSUZJRUQQABIqCiZFRkZFQ1RfRVhFQ1VUSU9OX0NBUkRJTkFMSVRZX1NJTkdMRVRPThABKrcBChdNb2RlbExpZmVjeWNsZU9wZXJhdGlvbhIpCiVNT0RFTF9MSUZFQ1lDTEVfT1BFUkFUSU9OX1VOU1BFQ0lGSUVEEAASJQohTU9ERUxfTElGRUNZQ0xFX09QRVJBVElPTl9JTlNUQUxMEAESIwofTU9ERUxfTElGRUNZQ0xFX09QRVJBVElPTl9TVEFHRRACEiUKIU1PREVMX0xJRkVDWUNMRV9PUEVSQVRJT05fUFJPTU9URRADKtwBCh1DaGlsZFdvcmtzcGFjZUxpZmVjeWNsZVN0YXR1cxIwCixDSElMRF9XT1JLU1BBQ0VfTElGRUNZQ0xFX1NUQVRVU19VTlNQRUNJRklFRBAAEisKJ0NISUxEX1dPUktTUEFDRV9MSUZFQ1lDTEVfU1RBVFVTX0FDVElWRRABEiwKKENISUxEX1dPUktTUEFDRV9MSUZFQ1lDTEVfU1RBVFVTX1JFVElSRUQQAhIuCipDSElMRF9XT1JLU1BBQ0VfTElGRUNZQ0xFX1NUQVRVU19SRUNMQUlNRUQQAyr4AQoiRGVjbGFyZWRBdXRoZW50aWNhdGlvblByb3ZpZGVyS2luZBI1CjFERUNMQVJFRF9BVVRIRU5USUNBVElPTl9QUk9WSURFUl9LSU5EX1VOU1BFQ0lGSUVEEAASMgouREVDTEFSRURfQVVUSEVOVElDQVRJT05fUFJPVklERVJfS0lORF9TRUxFQ1RFRBABEjIKLkRFQ0xBUkVEX0FVVEhFTlRJQ0FUSU9OX1BST1ZJREVSX0tJTkRfRU5ST0xMRUQQAhIzCi9ERUNMQVJFRF9BVVRIRU5USUNBVElPTl9QUk9WSURFUl9LSU5EX1NPVkVSRUlHThADKooBChVEZWNsYXJlZExhd01lbWJlcktpbmQSKAokREVDTEFSRURfTEFXX01FTUJFUl9LSU5EX1VOU1BFQ0lGSUVEEAASJAogREVDTEFSRURfTEFXX01FTUJFUl9LSU5EX0NPTU1BTkQQARIhCh1ERUNMQVJFRF9MQVdfTUVNQkVSX0tJTkRfUkVBRBACKosGCh9Qcm92aWRlclRva2VuVmVyaWZpY2F0aW9uU3RhdHVzEjIKLlBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfVU5TUEVDSUZJRUQQABIsCihQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX1ZBTElEEAESNgoyUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19OT19NQVRDSElOR19LRVkQAhIuCipQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0VYUElSRUQQAxI0CjBQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX05PVF9ZRVRfVkFMSUQQBBI2CjJQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0lTU1VFUl9NSVNNQVRDSBAFEjgKNFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfQVVESUVOQ0VfTUlTTUFUQ0gQBhI0CjBQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0JBRF9TSUdOQVRVUkUQBxIwCixQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX01BTEZPUk1FRBAIEjwKOFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfVU5TVVBQT1JURURfQUxHT1JJVEhNEAkSLgoqUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19CQURfS0VZEAoSNgoyUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19NSVNTSU5HX1NVQkpFQ1QQCxIyCi5QUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX05PX1ZFUklGSUVSEAwSNAowUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19NSVNTSU5HX1RPS0VOEA0qyAEKEkRldmljZVNpZ25lclN0YXR1cxIkCiBERVZJQ0VfU0lHTkVSX1NUQVRVU19VTlNQRUNJRklFRBAAEh8KG0RFVklDRV9TSUdORVJfU1RBVFVTX0FDVElWRRABEh8KG0RFVklDRV9TSUdORVJfU1RBVFVTX0FCU0VOVBACEiAKHERFVklDRV9TSUdORVJfU1RBVFVTX1JFVk9LRUQQAxIoCiRERVZJQ0VfU0lHTkVSX1NUQVRVU19LRVlfVU5BVkFJTEFCTEUQBCrXAQoTQmlydGhFdmlkZW5jZVN0YXR1cxIlCiFCSVJUSF9FVklERU5DRV9TVEFUVVNfVU5TUEVDSUZJRUQQABImCiJCSVJUSF9FVklERU5DRV9TVEFUVVNfTk9UX1JFUVVJUkVEEAESHwobQklSVEhfRVZJREVOQ0VfU1RBVFVTX1JFQURZEAISLQopQklSVEhfRVZJREVOQ0VfU1RBVFVTX0RFTEVHQVRJT05fUkVRVUlSRUQQAxIhCh1CSVJUSF9FVklERU5DRV9TVEFUVVNfSU5WQUxJRBAEKrIBChFRdWVyeVJlc3VsdEZvcm1hdBIjCh9RVUVSWV9SRVNVTFRfRk9STUFUX1VOU1BFQ0lGSUVEEAASJAogUVVFUllfUkVTVUxUX0ZPUk1BVF9MRUdBQ1lfVkFMVUUQARIkCiBRVUVSWV9SRVNVTFRfRk9STUFUX05PTUlOQUxfVVNEQRACEiwKKFFVRVJZX1JFU1VMVF9GT1JNQVRfQVBQTElDQVRJT05fUFJPVE9CVUYQAyqVDAoOUXVlcnlPcGVyYXRpb24SHwobUVVFUllfT1BFUkFUSU9OX1VOU1BFQ0lGSUVEEAASHAoYUVVFUllfT1BFUkFUSU9OX0VYVFJFTVVNEAESIAocUVVFUllfT1BFUkFUSU9OX1JFQURfUE9TVFVSRRAEEh8KG1FVRVJZX09QRVJBVElPTl9DVVJSRU5UX0xBVxAFEiMKH1FVRVJZX09QRVJBVElPTl9JTlRFUkZBQ0VfT0ZGRVIQBhInCiNRVUVSWV9PUEVSQVRJT05fUkVMQVRJT05fR0FURV9PRkZFUhAHEh0KGVFVRVJZX09QRVJBVElPTl9TQ0VORV9MQVcQCBIhCh1RVUVSWV9PUEVSQVRJT05fSU5TVEFMTEVEX0xBVxAJEhwKGFFVRVJZX09QRVJBVElPTl9ERVNDUklCRRAKEiMKH1FVRVJZX09QRVJBVElPTl9LRVJORUxfUkVTT1VSQ0UQCxIjCh9RVUVSWV9PUEVSQVRJT05fREVWRUxPUEVSX1NQQU5TEAwSKQolUVVFUllfT1BFUkFUSU9OX0RFQ0xBUkVEX0NBUEFCSUxJVElFUxANEh0KGVFVRVJZX09QRVJBVElPTl9SRUFESU5FU1MQDhIkCiBRVUVSWV9PUEVSQVRJT05fUFJPSkVDVElPTl9TVEFUUxAPEiUKIVFVRVJZX09QRVJBVElPTl9NRU1PUllfRFJPUF9QUk9CRRAQEhgKFFFVRVJZX09QRVJBVElPTl9XQVJNEBESGwoXUVVFUllfT1BFUkFUSU9OX1JFRlJFU0gQEhIgChxRVUVSWV9PUEVSQVRJT05fVkVSSUZZX0NIQUlOEBMSIgoeUVVFUllfT1BFUkFUSU9OX0NPVU5URVJGQUNUVUFMEBQSGQoVUVVFUllfT1BFUkFUSU9OX1JPVVRFEBUSJQohUVVFUllfT1BFUkFUSU9OX0NSWVBUT19TRUFMX0ZJRUxEEBgSLAooUVVFUllfT1BFUkFUSU9OX0NSWVBUT19CTElORF9JTkRFWF9UT0tFThAZEioKJlFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfU0NPUEVfS0VZEBoSLworUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9ERVZJQ0VfUkVRVUVTVBAbEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9BUFBST1ZBTBAcEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9SRUNPVkVSWRAdEiAKHFFVRVJZX09QRVJBVElPTl9SRUNFSVBUX1BBVEgQIhIdChlRVUVSWV9PUEVSQVRJT05fQ0VSVF9TSUdOECMSJQohUVVFUllfT1BFUkFUSU9OX0JJUlRIX1RSVVNUX1NUQVRFECQSIQodUVVFUllfT1BFUkFUSU9OX0VSQV9DRVJUX1NJR04QJRIoCiRRVUVSWV9PUEVSQVRJT05fREVMRUdBVElPTl9DRVJUX1NJR04QJhIpCiVRVUVSWV9PUEVSQVRJT05fQ0FOT05JQ0FMSVpFX0ZST05USUVSECcSKwonUVVFUllfT1BFUkFUSU9OX0NBTk9OSUNBTElaRV9QUk9KRUNUSU9OECgiBAgCEAIiBAgDEAMiBAgWEBYiBAgXEBciBAgeEB4iBAgfEB8iBAggECAiBAghECEqIVFVRVJZX09QRVJBVElPTl9QRU5ESU5HX0NPTkZMSUNUUyooUVVFUllfT1BFUkFUSU9OX1BFTkRJTkdfQ09ORkxJQ1RfU1VNTUFSWSoUUVVFUllfT1BFUkFUSU9OX01JTlQqHVFVRVJZX09QRVJBVElPTl9DUllQVE9fS0VZR0VOKh9RVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1dSQVBfS0VZKiFRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1VOV1JBUF9LRVkqHVFVRVJZX09QRVJBVElPTl9BVVRIT1JfS0VZR0VOKiBRVUVSWV9PUEVSQVRJT05fQVRURVNUQVRJT05fU0lHTiqpAQoZUmVhZFByb2plY3Rpb25TdG9yYWdlS2luZBIsCihSRUFEX1BST0pFQ1RJT05fU1RPUkFHRV9LSU5EX1VOU1BFQ0lGSUVEEAASKQolUkVBRF9QUk9KRUNUSU9OX1NUT1JBR0VfS0lORF9SRVNJREVOVBABEjMKL1JFQURfUFJPSkVDVElPTl9TVE9SQUdFX0tJTkRfRklMRV9CQUNLRURfU0NBTEFSEAIq0gIKFVJlc2lkZW50Q29tcG9uZW50S2luZBInCiNSRVNJREVOVF9DT01QT05FTlRfS0lORF9VTlNQRUNJRklFRBAAEiYKIlJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX0ZPTERfU1RBVEUQARItCilSRVNJREVOVF9DT01QT05FTlRfS0lORF9SRUFEX01PREVMX1NRTElURRACEi4KKlJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1JFQURfTU9ERUxfSU5ERVhFUxADEi0KKVJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1NIQVJFRF9BVFRSSUJVVEVEEAQSLAooUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfV09SS1NQQUNFX0NBQ0hFUxAFEiwKKFJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX0dJVF9PQkpFQ1RfQ0FDSEUQBipsChNLZXJuZWxMYXdDYXBhYmlsaXR5EiUKIUtFUk5FTF9MQVdfQ0FQQUJJTElUWV9VTlNQRUNJRklFRBAAEi4KKktFUk5FTF9MQVdfQ0FQQUJJTElUWV9TVEFHRV9aRVJPX0JPT1RTVFJBUBABKlkKFUNoZWNrcG9pbnRDb21wcmVzc2lvbhIfChtDSEVDS1BPSU5UX0NPTVBSRVNTSU9OX05PTkUQABIfChtDSEVDS1BPSU5UX0NPTVBSRVNTSU9OX0daSVAQASqRAQocQ2hlY2twb2ludFZlcmlmaWNhdGlvblBvbGljeRIzCi9DSEVDS1BPSU5UX1ZFUklGSUNBVElPTl9QT0xJQ1lfVkVSSUZZX0NBTk9OSUNBTBAAEjwKOENIRUNLUE9JTlRfVkVSSUZJQ0FUSU9OX1BPTElDWV9UUlVTVF9QUkVWSU9VU0xZX1ZFUklGSUVEEAEqgAEKE0NoZWNrcG9pbnRBc3N1cmFuY2USJAogQ0hFQ0tQT0lOVF9BU1NVUkFOQ0VfVU5TUEVDSUZJRUQQABIgChxDSEVDS1BPSU5UX0FTU1VSQU5DRV9UUlVTVEVEEAESIQodQ0hFQ0tQT0lOVF9BU1NVUkFOQ0VfVkVSSUZJRUQQAiqJAQoVS2VybmVsUmVzaWRlbmN5SW50ZW50EicKI0tFUk5FTF9SRVNJREVOQ1lfSU5URU5UX1VOU1BFQ0lGSUVEEAASIAocS0VSTkVMX1JFU0lERU5DWV9JTlRFTlRfV0FSTRABEiUKIUtFUk5FTF9SRVNJREVOQ1lfSU5URU5UX09OX0RFTUFORBACKq4BChZDdXN0b2R5UmV0ZW50aW9uSW50ZW50EigKJENVU1RPRFlfUkVURU5USU9OX0lOVEVOVF9VTlNQRUNJRklFRBAAEiMKH0NVU1RPRFlfUkVURU5USU9OX0lOVEVOVF9SRVRBSU4QARIiCh5DVVNUT0RZX1JFVEVOVElPTl9JTlRFTlRfQ0FDSEUQAhIhCh1DVVNUT0RZX1JFVEVOVElPTl9JTlRFTlRfTk9ORRADKqgBChpJbnRlbnRUcmFuc3BvcnRSZXF1aXJlbWVudBIsCihJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX1VOU1BFQ0lGSUVEEAASLgoqSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9TRUFMRURfQ0hBTkdFEAESLAooSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9DT01NSVRfVFJFRRACKokBChVMaWZlY3ljbGVJbnN0YWxsUGhhc2USJwojTElGRUNZQ0xFX0lOU1RBTExfUEhBU0VfVU5TUEVDSUZJRUQQABIiCh5MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9BQ1RJVkUQARIjCh9MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9QRU5ESU5HEAIyWQoSTm9tb3NLZXJuZWxTZXJ2aWNlEkMKBENhbGwSHC5ub21vcy5rZXJuZWwudjEuQ2FsbFJlcXVlc3QaHS5ub21vcy5rZXJuZWwudjEuQ2FsbFJlc3BvbnNlYgZwcm90bzM", [file_google_protobuf_any]);
5737
5737
  var CallRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 0);
5738
5738
  var CallResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 1);
5739
5739
  var OfferResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 5);
@@ -5762,56 +5762,57 @@ var AuthoringOptionsSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_ke
5762
5762
  var CapturedClockSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 97);
5763
5763
  var BirthCertificateSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 98);
5764
5764
  var SignBirthCertificateRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 99);
5765
- var IdentityProviderWitnessAdoptionSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 102);
5766
- var OfferRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 103);
5767
- var QueryRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 109);
5768
- var IdentityProviderWitnessQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 114);
5769
- var ChildWorkspaceQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 118);
5770
- var InstalledLawDeclarationsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 121);
5771
- var DirectiveAuthoringRequirementsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 127);
5772
- var AuthenticationPostureQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 129);
5773
- var QueryAuthoritySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 136);
5774
- var NomosRefSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 142);
5775
- var ReferenceVersionsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 144);
5776
- var NamedQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 150);
5777
- var FrontierTransitionRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 151);
5778
- var AuthorizationCheckRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 161);
5779
- var OutboxRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 168);
5780
- var SyncRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 169);
5781
- var KernelConfigurationRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 170);
5782
- var CustodyRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 172);
5783
- var AggregateCensusRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 173);
5784
- var ResidentFootprintRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 176);
5785
- var PackDeltaRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 180);
5786
- var ApplyPackRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 181);
5787
- var RepoStatsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 182);
5788
- var IntentsAboveRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 183);
5789
- var HistorySummaryRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 184);
5790
- var InspectChangeRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 185);
5791
- var InspectRefusalVerdictRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 188);
5792
- var ReadBlobRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 191);
5793
- var ResolveRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 192);
5794
- var PhysicalRefFileSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 193);
5795
- var ListRefsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 194);
5796
- var WriteRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 195);
5797
- var DeleteRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 196);
5798
- var LawClosureInfoRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 199);
5799
- var RestoreMainRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 209);
5800
- var LawProductsSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 212);
5801
- var ExportLawProductsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 213);
5802
- var ExportLawProductsResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 214);
5803
- var ImportLawProductsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 215);
5804
- var AttachLocalFrontierRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 219);
5805
- var CustodyRemoteSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 220);
5806
- var CustodyPlacementPolicySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 222);
5807
- var CustodyPlacementExpectationSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 223);
5808
- var ReadCustodyPlacementRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 224);
5809
- var InspectCustodyPlacementRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 225);
5810
- var PlacementOfferSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 226);
5811
- var ResolveStatePositionRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 227);
5812
- var ReleaseWorkspaceStateRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 255);
5813
- var NomosValueSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 263);
5814
- var NomosStructSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 266);
5765
+ var IdentityProviderWitnessAdoptionSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 112);
5766
+ var OfferRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 113);
5767
+ var QueryRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 119);
5768
+ var IdentityProviderWitnessQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 124);
5769
+ var ChildWorkspaceQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 128);
5770
+ var InstalledLawDeclarationsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 131);
5771
+ var DirectiveAuthoringRequirementsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 137);
5772
+ var AuthenticationPostureQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 139);
5773
+ var QueryAuthoritySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 146);
5774
+ var NomosRefSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 152);
5775
+ var ReferenceVersionsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 154);
5776
+ var NamedQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 160);
5777
+ var FrontierTransitionRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 161);
5778
+ var AuthorizationCheckRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 171);
5779
+ var OutboxRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 178);
5780
+ var SyncRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 179);
5781
+ var KernelConfigurationRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 180);
5782
+ var CustodyRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 182);
5783
+ var AggregateCensusRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 183);
5784
+ var ResidentFootprintRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 186);
5785
+ var PackDeltaRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 190);
5786
+ var ApplyPackRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 191);
5787
+ var RepoStatsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 192);
5788
+ var IntentsAboveRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 193);
5789
+ var HistorySummaryRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 194);
5790
+ var InspectChangeRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 195);
5791
+ var InspectRefusalVerdictRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 198);
5792
+ var ReadBlobRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 201);
5793
+ var ResolveRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 202);
5794
+ var PhysicalRefFileSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 203);
5795
+ var ListRefsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 204);
5796
+ var WriteRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 205);
5797
+ var DeleteRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 206);
5798
+ var LawClosureInfoRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 209);
5799
+ var RestoreMainRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 219);
5800
+ var LawProductsSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 222);
5801
+ var ExportLawProductsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 223);
5802
+ var ExportLawProductsResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 224);
5803
+ var ImportLawProductsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 225);
5804
+ var AttachLocalFrontierRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 229);
5805
+ var CustodyRemoteSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 230);
5806
+ var CustodyPlacementPolicySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 232);
5807
+ var CustodyPlacementExpectationSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 233);
5808
+ var ReadCustodyPlacementRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 234);
5809
+ var InspectCustodyPlacementRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 235);
5810
+ var PlacementOfferSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 236);
5811
+ var ResolveStatePositionRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 237);
5812
+ var ReleaseWorkspaceStateRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 265);
5813
+ var NomosValueSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 273);
5814
+ var NomosStructSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 276);
5815
+ var PrepareLawProductsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 280);
5815
5816
  var BirthOutcomeStatusSchema = /* @__PURE__ */ enumDesc(file_nomos_kernel_v1_kernel, 1);
5816
5817
  var BirthOutcomeStatus = /* @__PURE__ */ tsEnum(BirthOutcomeStatusSchema);
5817
5818
  var KernelRefusalCodeSchema = /* @__PURE__ */ enumDesc(file_nomos_kernel_v1_kernel, 2);
@@ -6381,13 +6382,13 @@ async function runGitHttpBackend(projectRoot, { method, pathInfo, query, content
6381
6382
 
6382
6383
  // ../../platform-shells/node/local-development/peer_process.ts
6383
6384
  init_define_NOMOS_KERNEL_RELEASE();
6384
- import { createHash, randomBytes } from "node:crypto";
6385
+ import { createHash as createHash2, randomBytes } from "node:crypto";
6385
6386
  import {
6386
6387
  existsSync as existsSync4,
6387
- mkdirSync as mkdirSync4,
6388
+ mkdirSync as mkdirSync5,
6388
6389
  mkdtempSync as mkdtempSync3,
6389
- readFileSync as readFileSync2,
6390
- writeFileSync as writeFileSync4
6390
+ readFileSync as readFileSync3,
6391
+ writeFileSync as writeFileSync5
6391
6392
  } from "node:fs";
6392
6393
  import os from "node:os";
6393
6394
  import path2 from "node:path";
@@ -6395,10 +6396,64 @@ import { fileURLToPath } from "node:url";
6395
6396
 
6396
6397
  // ../../platform-shells/node/node_kernel_machine.ts
6397
6398
  init_define_NOMOS_KERNEL_RELEASE();
6399
+ import { Worker } from "node:worker_threads";
6400
+ import { URL as URL2 } from "node:url";
6401
+
6402
+ // ../../platform-shells/node/law_preparation_queue.ts
6403
+ init_define_NOMOS_KERNEL_RELEASE();
6404
+ import { createHash } from "node:crypto";
6405
+ import { mkdirSync as mkdirSync2, readFileSync, readdirSync as readdirSync2, renameSync, rmSync as rmSync2, writeFileSync } from "node:fs";
6406
+ import { join as join2 } from "node:path";
6407
+ var LawPreparationQueue = class {
6408
+ #directory;
6409
+ #run;
6410
+ #running = /* @__PURE__ */ new Map();
6411
+ #tail = Promise.resolve();
6412
+ constructor(directory2, run2) {
6413
+ this.#directory = join2(directory2, ".nomos-law-preparation-jobs");
6414
+ this.#run = run2;
6415
+ mkdirSync2(this.#directory, { recursive: true });
6416
+ }
6417
+ prepare(request) {
6418
+ const key = createHash("sha256").update(request).digest("hex");
6419
+ const pending = this.#running.get(key);
6420
+ if (pending) return pending;
6421
+ const path3 = join2(this.#directory, key);
6422
+ writeFileSync(`${path3}.staging`, request);
6423
+ renameSync(`${path3}.staging`, path3);
6424
+ const work = this.#tail.catch(() => {
6425
+ }).then(async () => {
6426
+ const result = await this.#run(readFileSync(path3));
6427
+ rmSync2(path3);
6428
+ return result;
6429
+ });
6430
+ this.#tail = work;
6431
+ this.#running.set(key, work);
6432
+ void work.finally(() => {
6433
+ this.#running.delete(key);
6434
+ }).catch(() => {
6435
+ });
6436
+ return work;
6437
+ }
6438
+ async resume() {
6439
+ const results = [];
6440
+ for (const name of readdirSync2(this.#directory).filter((name2) => /^[a-f0-9]{64}$/.test(name2))) {
6441
+ try {
6442
+ await this.prepare(readFileSync(join2(this.#directory, name)));
6443
+ results.push({ status: "fulfilled" });
6444
+ } catch {
6445
+ results.push({ status: "rejected" });
6446
+ }
6447
+ }
6448
+ return results;
6449
+ }
6450
+ };
6451
+
6452
+ // ../../platform-shells/node/node_kernel_machine.ts
6398
6453
  import { WASI as WASI2 } from "node:wasi";
6399
- import { mkdtempSync as mkdtempSync2, realpathSync as realpathSync2, rmSync as rmSync3 } from "node:fs";
6454
+ import { mkdtempSync as mkdtempSync2, realpathSync as realpathSync2, rmSync as rmSync4 } from "node:fs";
6400
6455
  import { tmpdir as tmpdir2 } from "node:os";
6401
- import { join as join4, resolve as resolve2 } from "node:path";
6456
+ import { join as join5, resolve as resolve2 } from "node:path";
6402
6457
 
6403
6458
  // ../../adapter/kernel_machine_desk.ts
6404
6459
  init_define_NOMOS_KERNEL_RELEASE();
@@ -6866,14 +6921,14 @@ init_define_NOMOS_KERNEL_RELEASE();
6866
6921
  import {
6867
6922
  appendFileSync,
6868
6923
  lstatSync,
6869
- mkdirSync as mkdirSync2,
6924
+ mkdirSync as mkdirSync3,
6870
6925
  opendirSync,
6871
- readFileSync,
6926
+ readFileSync as readFileSync2,
6872
6927
  realpathSync,
6873
6928
  unlinkSync,
6874
- writeFileSync
6929
+ writeFileSync as writeFileSync2
6875
6930
  } from "node:fs";
6876
- import { isAbsolute, join as join2, parse } from "node:path";
6931
+ import { isAbsolute, join as join3, parse } from "node:path";
6877
6932
  function nodeCustodyFilesystem(directory2) {
6878
6933
  if (!isAbsolute(directory2))
6879
6934
  throw new Error("kernel working directory must be absolute");
@@ -6891,7 +6946,7 @@ function nodeCustodyFilesystem(directory2) {
6891
6946
  }
6892
6947
  let resolved = root;
6893
6948
  for (const segment of segments) {
6894
- resolved = join2(resolved, segment);
6949
+ resolved = join3(resolved, segment);
6895
6950
  try {
6896
6951
  if (lstatSync(resolved).isSymbolicLink()) {
6897
6952
  throw Object.assign(
@@ -6920,7 +6975,7 @@ function nodeCustodyFilesystem(directory2) {
6920
6975
  let bytes = 0n;
6921
6976
  try {
6922
6977
  for (let entry = dir.readSync(); entry; entry = dir.readSync()) {
6923
- bytes += measure(join2(path3, entry.name));
6978
+ bytes += measure(join3(path3, entry.name));
6924
6979
  }
6925
6980
  } finally {
6926
6981
  dir.closeSync();
@@ -6937,7 +6992,7 @@ function nodeCustodyFilesystem(directory2) {
6937
6992
  }
6938
6993
  try {
6939
6994
  for (let entry = directory3.readSync(); entry; entry = directory3.readSync()) {
6940
- const physicalChild = join2(physical, entry.name);
6995
+ const physicalChild = join3(physical, entry.name);
6941
6996
  const logicalChild = `${logical}/${entry.name}`;
6942
6997
  if (entry.isDirectory()) list(physicalChild, logicalChild, files2);
6943
6998
  else if (entry.isFile()) files2.push(logicalChild);
@@ -6949,9 +7004,9 @@ function nodeCustodyFilesystem(directory2) {
6949
7004
  };
6950
7005
  const files = {
6951
7006
  mkdir: (path3) => {
6952
- mkdirSync2(physicalPath(path3), { mode: 448 });
7007
+ mkdirSync3(physicalPath(path3), { mode: 448 });
6953
7008
  },
6954
- writeFile: (path3, bytes) => writeFileSync(physicalPath(path3), bytes, { mode: 384 }),
7009
+ writeFile: (path3, bytes) => writeFileSync2(physicalPath(path3), bytes, { mode: 384 }),
6955
7010
  unlink: (path3) => unlinkSync(physicalPath(path3)),
6956
7011
  treeBytes: (path3) => measure(physicalPath(path3)),
6957
7012
  listFiles: (path3) => {
@@ -6959,7 +7014,7 @@ function nodeCustodyFilesystem(directory2) {
6959
7014
  list(physicalPath(path3), path3, result);
6960
7015
  return result.sort();
6961
7016
  },
6962
- readFile: (path3) => new Uint8Array(readFileSync(physicalPath(path3))),
7017
+ readFile: (path3) => new Uint8Array(readFileSync2(physicalPath(path3))),
6963
7018
  appendFile: (path3, bytes) => appendFileSync(physicalPath(path3), bytes, { mode: 384 }),
6964
7019
  fileSize: (path3) => {
6965
7020
  try {
@@ -7058,13 +7113,13 @@ function kernelWasiStdio(memory, stderr, writeFile2, stderrPartial) {
7058
7113
  // ../../platform-shells/node/certification_seal.ts
7059
7114
  init_define_NOMOS_KERNEL_RELEASE();
7060
7115
  import { spawnSync } from "node:child_process";
7061
- import { existsSync as existsSync2, mkdirSync as mkdirSync3, mkdtempSync, renameSync, rmSync as rmSync2, chmodSync, writeFileSync as writeFileSync2, openSync, fsyncSync, closeSync } from "node:fs";
7062
- import { join as join3, resolve } from "node:path";
7116
+ import { existsSync as existsSync2, mkdirSync as mkdirSync4, mkdtempSync, renameSync as renameSync2, rmSync as rmSync3, chmodSync, writeFileSync as writeFileSync3, openSync, fsyncSync, closeSync } from "node:fs";
7117
+ import { join as join4, resolve } from "node:path";
7063
7118
  function nodeCertificationSeal(keyDirectory, custodyIdentity) {
7064
7119
  const directory2 = resolve(keyDirectory);
7065
- const activeKey = join3(directory2, "active-key");
7066
- const privateKey = join3(activeKey, "private.pem");
7067
- const publicKey = join3(activeKey, "public.pem");
7120
+ const activeKey = join4(directory2, "active-key");
7121
+ const privateKey = join4(activeKey, "private.pem");
7122
+ const publicKey = join4(activeKey, "public.pem");
7068
7123
  const domain = new TextEncoder().encode(`nomos.host-certified-current/v1\0${custodyIdentity}\0`);
7069
7124
  const run2 = (args) => spawnSync("openssl", args, {
7070
7125
  encoding: null,
@@ -7076,10 +7131,10 @@ function nodeCertificationSeal(keyDirectory, custodyIdentity) {
7076
7131
  const ensureKey = () => {
7077
7132
  if (existsSync2(privateKey) && existsSync2(publicKey)) return true;
7078
7133
  if (existsSync2(activeKey)) return false;
7079
- mkdirSync3(directory2, { recursive: true, mode: 448 });
7080
- const pending = mkdtempSync(join3(directory2, ".generation-"));
7134
+ mkdirSync4(directory2, { recursive: true, mode: 448 });
7135
+ const pending = mkdtempSync(join4(directory2, ".generation-"));
7081
7136
  try {
7082
- const pendingPrivate = join3(pending, "private.pem"), pendingPublic = join3(pending, "public.pem");
7137
+ const pendingPrivate = join4(pending, "private.pem"), pendingPublic = join4(pending, "public.pem");
7083
7138
  if (run2(["genpkey", "-algorithm", "ED25519", "-out", pendingPrivate]).status !== 0) return false;
7084
7139
  chmodSync(pendingPrivate, 384);
7085
7140
  if (run2(["pkey", "-in", pendingPrivate, "-pubout", "-out", pendingPublic]).status !== 0) return false;
@@ -7092,27 +7147,27 @@ function nodeCertificationSeal(keyDirectory, custodyIdentity) {
7092
7147
  }
7093
7148
  }
7094
7149
  try {
7095
- renameSync(pending, activeKey);
7150
+ renameSync2(pending, activeKey);
7096
7151
  } catch (error) {
7097
7152
  if (!existsSync2(privateKey) || !existsSync2(publicKey)) throw error;
7098
7153
  }
7099
7154
  return true;
7100
7155
  } finally {
7101
- rmSync2(pending, { recursive: true, force: true });
7156
+ rmSync3(pending, { recursive: true, force: true });
7102
7157
  }
7103
7158
  };
7104
7159
  const withMessage = (payload, body) => {
7105
7160
  if (payload.length === 0 || payload.length > 8192) return;
7106
- const temporary = mkdtempSync(join3(directory2, "message-"));
7161
+ const temporary = mkdtempSync(join4(directory2, "message-"));
7107
7162
  try {
7108
- const message = join3(temporary, "message.bin");
7163
+ const message = join4(temporary, "message.bin");
7109
7164
  const bytes = new Uint8Array(domain.length + payload.length);
7110
7165
  bytes.set(domain);
7111
7166
  bytes.set(payload, domain.length);
7112
- writeFileSync2(message, bytes, { mode: 384 });
7167
+ writeFileSync3(message, bytes, { mode: 384 });
7113
7168
  return body(message, temporary);
7114
7169
  } finally {
7115
- rmSync2(temporary, { recursive: true, force: true });
7170
+ rmSync3(temporary, { recursive: true, force: true });
7116
7171
  }
7117
7172
  };
7118
7173
  return {
@@ -7132,8 +7187,8 @@ function nodeCertificationSeal(keyDirectory, custodyIdentity) {
7132
7187
  if (!existsSync2(privateKey) || !existsSync2(publicKey)) return;
7133
7188
  if (tag.length !== 64) return false;
7134
7189
  return withMessage(payload, (message, temporary) => {
7135
- const signature = join3(temporary, "tag.bin");
7136
- writeFileSync2(signature, tag, { mode: 384 });
7190
+ const signature = join4(temporary, "tag.bin");
7191
+ writeFileSync3(signature, tag, { mode: 384 });
7137
7192
  return run2([
7138
7193
  "pkeyutl",
7139
7194
  "-verify",
@@ -7212,7 +7267,7 @@ function nodeKernelWasiHost(directory2, stderr) {
7212
7267
  }
7213
7268
  };
7214
7269
  }
7215
- var createNodeKernelMachine = async (source, directory2) => {
7270
+ var createNodeKernelMachine = async (source, directory2, preparationEnabled = true) => {
7216
7271
  const sealed = {
7217
7272
  ...source,
7218
7273
  // A sibling host-private directory is outside /work and never exported as Git custody.
@@ -7220,10 +7275,33 @@ var createNodeKernelMachine = async (source, directory2) => {
7220
7275
  };
7221
7276
  const makeHost = (stderr) => nodeKernelWasiHost(directory2, stderr);
7222
7277
  const machine = await createKernelMachineWithHost(sealed, makeHost);
7223
- return { ...machine, spawnDisposable: () => disposableKernelMachine(sealed, makeHost) };
7278
+ const preparation = preparationEnabled ? new LawPreparationQueue(directory2, (request) => new Promise((resolve4, reject) => {
7279
+ const { observeStderr: _observe, certificationSeal: _seal, ...workerSource } = source;
7280
+ const workerUrl = true ? new URL2(`data:text/javascript;charset=utf-8,${encodeURIComponent('// ../../platform-shells/node/law_preparation_worker.ts\nimport { parentPort, workerData } from "node:worker_threads";\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/is-message.js\nfunction isMessage(arg, schema) {\n const isMessage2 = arg !== null && typeof arg == "object" && "$typeName" in arg && typeof arg.$typeName == "string";\n if (!isMessage2) {\n return false;\n }\n if (schema === void 0) {\n return true;\n }\n return schema.typeName === arg.$typeName;\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/descriptors.js\nvar ScalarType;\n(function(ScalarType2) {\n ScalarType2[ScalarType2["DOUBLE"] = 1] = "DOUBLE";\n ScalarType2[ScalarType2["FLOAT"] = 2] = "FLOAT";\n ScalarType2[ScalarType2["INT64"] = 3] = "INT64";\n ScalarType2[ScalarType2["UINT64"] = 4] = "UINT64";\n ScalarType2[ScalarType2["INT32"] = 5] = "INT32";\n ScalarType2[ScalarType2["FIXED64"] = 6] = "FIXED64";\n ScalarType2[ScalarType2["FIXED32"] = 7] = "FIXED32";\n ScalarType2[ScalarType2["BOOL"] = 8] = "BOOL";\n ScalarType2[ScalarType2["STRING"] = 9] = "STRING";\n ScalarType2[ScalarType2["BYTES"] = 12] = "BYTES";\n ScalarType2[ScalarType2["UINT32"] = 13] = "UINT32";\n ScalarType2[ScalarType2["SFIXED32"] = 15] = "SFIXED32";\n ScalarType2[ScalarType2["SFIXED64"] = 16] = "SFIXED64";\n ScalarType2[ScalarType2["SINT32"] = 17] = "SINT32";\n ScalarType2[ScalarType2["SINT64"] = 18] = "SINT64";\n})(ScalarType || (ScalarType = {}));\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/wire/varint.js\nfunction varint64read() {\n let lowBits = 0;\n let highBits = 0;\n for (let shift = 0; shift < 28; shift += 7) {\n let b = this.buf[this.pos++];\n lowBits |= (b & 127) << shift;\n if ((b & 128) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n }\n let middleByte = this.buf[this.pos++];\n lowBits |= (middleByte & 15) << 28;\n highBits = (middleByte & 112) >> 4;\n if ((middleByte & 128) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n for (let shift = 3; shift <= 31; shift += 7) {\n let b = this.buf[this.pos++];\n highBits |= (b & 127) << shift;\n if ((b & 128) == 0) {\n this.assertBounds();\n return [lowBits, highBits];\n }\n }\n throw new Error("invalid varint");\n}\nfunction varint64write(lo, hi, bytes) {\n for (let i = 0; i < 28; i = i + 7) {\n const shift = lo >>> i;\n const hasNext = !(shift >>> 7 == 0 && hi == 0);\n const byte = (hasNext ? shift | 128 : shift) & 255;\n bytes.push(byte);\n if (!hasNext) {\n return;\n }\n }\n const splitBits = lo >>> 28 & 15 | (hi & 7) << 4;\n const hasMoreBits = !(hi >> 3 == 0);\n bytes.push((hasMoreBits ? splitBits | 128 : splitBits) & 255);\n if (!hasMoreBits) {\n return;\n }\n for (let i = 3; i < 31; i = i + 7) {\n const shift = hi >>> i;\n const hasNext = !(shift >>> 7 == 0);\n const byte = (hasNext ? shift | 128 : shift) & 255;\n bytes.push(byte);\n if (!hasNext) {\n return;\n }\n }\n bytes.push(hi >>> 31 & 1);\n}\nvar TWO_PWR_32_DBL = 4294967296;\nfunction int64FromString(dec) {\n const minus = dec[0] === "-";\n if (minus) {\n dec = dec.slice(1);\n }\n const base = 1e6;\n let lowBits = 0;\n let highBits = 0;\n function add1e6digit(begin, end) {\n const digit1e6 = Number(dec.slice(begin, end));\n highBits *= base;\n lowBits = lowBits * base + digit1e6;\n if (lowBits >= TWO_PWR_32_DBL) {\n highBits = highBits + (lowBits / TWO_PWR_32_DBL | 0);\n lowBits = lowBits % TWO_PWR_32_DBL;\n }\n }\n add1e6digit(-24, -18);\n add1e6digit(-18, -12);\n add1e6digit(-12, -6);\n add1e6digit(-6);\n return minus ? negate(lowBits, highBits) : newBits(lowBits, highBits);\n}\nfunction int64ToString(lo, hi) {\n let bits = newBits(lo, hi);\n const negative = bits.hi & 2147483648;\n if (negative) {\n bits = negate(bits.lo, bits.hi);\n }\n const result = uInt64ToString(bits.lo, bits.hi);\n return negative ? "-" + result : result;\n}\nfunction uInt64ToString(lo, hi) {\n ({ lo, hi } = toUnsigned(lo, hi));\n if (hi <= 2097151) {\n return String(TWO_PWR_32_DBL * hi + lo);\n }\n const low = lo & 16777215;\n const mid = (lo >>> 24 | hi << 8) & 16777215;\n const high = hi >> 16 & 65535;\n let digitA = low + mid * 6777216 + high * 6710656;\n let digitB = mid + high * 8147497;\n let digitC = high * 2;\n const base = 1e7;\n if (digitA >= base) {\n digitB += Math.floor(digitA / base);\n digitA %= base;\n }\n if (digitB >= base) {\n digitC += Math.floor(digitB / base);\n digitB %= base;\n }\n return digitC.toString() + decimalFrom1e7WithLeadingZeros(digitB) + decimalFrom1e7WithLeadingZeros(digitA);\n}\nfunction toUnsigned(lo, hi) {\n return { lo: lo >>> 0, hi: hi >>> 0 };\n}\nfunction newBits(lo, hi) {\n return { lo: lo | 0, hi: hi | 0 };\n}\nfunction negate(lowBits, highBits) {\n highBits = ~highBits;\n if (lowBits) {\n lowBits = ~lowBits + 1;\n } else {\n highBits += 1;\n }\n return newBits(lowBits, highBits);\n}\nvar decimalFrom1e7WithLeadingZeros = (digit1e7) => {\n const partial = String(digit1e7);\n return "0000000".slice(partial.length) + partial;\n};\nfunction varint32write(value, bytes) {\n if (value >= 0) {\n while (value > 127) {\n bytes.push(value & 127 | 128);\n value = value >>> 7;\n }\n bytes.push(value);\n } else {\n for (let i = 0; i < 9; i++) {\n bytes.push(value & 127 | 128);\n value = value >> 7;\n }\n bytes.push(1);\n }\n}\nfunction varint32read() {\n let b = this.buf[this.pos++];\n let result = b & 127;\n if ((b & 128) == 0) {\n this.assertBounds();\n return result;\n }\n b = this.buf[this.pos++];\n result |= (b & 127) << 7;\n if ((b & 128) == 0) {\n this.assertBounds();\n return result;\n }\n b = this.buf[this.pos++];\n result |= (b & 127) << 14;\n if ((b & 128) == 0) {\n this.assertBounds();\n return result;\n }\n b = this.buf[this.pos++];\n result |= (b & 127) << 21;\n if ((b & 128) == 0) {\n this.assertBounds();\n return result;\n }\n b = this.buf[this.pos++];\n result |= (b & 15) << 28;\n for (let readBytes = 5; (b & 128) !== 0 && readBytes < 10; readBytes++)\n b = this.buf[this.pos++];\n if ((b & 128) != 0)\n throw new Error("invalid varint");\n this.assertBounds();\n return result >>> 0;\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/proto-int64.js\nvar protoInt64 = /* @__PURE__ */ makeInt64Support();\nfunction makeInt64Support() {\n const dv = new DataView(new ArrayBuffer(8));\n const ok = typeof BigInt === "function" && typeof dv.getBigInt64 === "function" && typeof dv.getBigUint64 === "function" && typeof dv.setBigInt64 === "function" && typeof dv.setBigUint64 === "function" && (!!globalThis.Deno || !!globalThis.Bun || typeof process != "object" || typeof process.env != "object" || process.env.BUF_BIGINT_DISABLE !== "1");\n if (ok) {\n const MIN = BigInt("-9223372036854775808");\n const MAX = BigInt("9223372036854775807");\n const UMIN = BigInt("0");\n const UMAX = BigInt("18446744073709551615");\n return {\n zero: BigInt(0),\n supported: true,\n parse(value) {\n const bi = typeof value == "bigint" ? value : BigInt(value);\n if (bi > MAX || bi < MIN) {\n throw new Error(`invalid int64: ${value}`);\n }\n return bi;\n },\n uParse(value) {\n const bi = typeof value == "bigint" ? value : BigInt(value);\n if (bi > UMAX || bi < UMIN) {\n throw new Error(`invalid uint64: ${value}`);\n }\n return bi;\n },\n enc(value) {\n dv.setBigInt64(0, this.parse(value), true);\n return {\n lo: dv.getInt32(0, true),\n hi: dv.getInt32(4, true)\n };\n },\n uEnc(value) {\n dv.setBigInt64(0, this.uParse(value), true);\n return {\n lo: dv.getInt32(0, true),\n hi: dv.getInt32(4, true)\n };\n },\n dec(lo, hi) {\n dv.setInt32(0, lo, true);\n dv.setInt32(4, hi, true);\n return dv.getBigInt64(0, true);\n },\n uDec(lo, hi) {\n dv.setInt32(0, lo, true);\n dv.setInt32(4, hi, true);\n return dv.getBigUint64(0, true);\n }\n };\n }\n return {\n zero: "0",\n supported: false,\n parse(value) {\n if (typeof value != "string") {\n value = value.toString();\n }\n assertInt64String(value);\n return value;\n },\n uParse(value) {\n if (typeof value != "string") {\n value = value.toString();\n }\n assertUInt64String(value);\n return value;\n },\n enc(value) {\n if (typeof value != "string") {\n value = value.toString();\n }\n assertInt64String(value);\n return int64FromString(value);\n },\n uEnc(value) {\n if (typeof value != "string") {\n value = value.toString();\n }\n assertUInt64String(value);\n return int64FromString(value);\n },\n dec(lo, hi) {\n return int64ToString(lo, hi);\n },\n uDec(lo, hi) {\n return uInt64ToString(lo, hi);\n }\n };\n}\nfunction assertInt64String(value) {\n if (!/^-?[0-9]+$/.test(value)) {\n throw new Error("invalid int64: " + value);\n }\n}\nfunction assertUInt64String(value) {\n if (!/^[0-9]+$/.test(value)) {\n throw new Error("invalid uint64: " + value);\n }\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/scalar.js\nfunction scalarZeroValue(type, longAsString) {\n switch (type) {\n case ScalarType.STRING:\n return "";\n case ScalarType.BOOL:\n return false;\n case ScalarType.DOUBLE:\n case ScalarType.FLOAT:\n return 0;\n case ScalarType.INT64:\n case ScalarType.UINT64:\n case ScalarType.SFIXED64:\n case ScalarType.FIXED64:\n case ScalarType.SINT64:\n return longAsString ? "0" : protoInt64.zero;\n case ScalarType.BYTES:\n return new Uint8Array(0);\n default:\n return 0;\n }\n}\nfunction isScalarZeroValue(type, value) {\n switch (type) {\n case ScalarType.BOOL:\n return value === false;\n case ScalarType.STRING:\n return value === "";\n case ScalarType.BYTES:\n return value instanceof Uint8Array && !value.byteLength;\n case ScalarType.DOUBLE:\n case ScalarType.FLOAT:\n return Object.is(value, 0);\n default:\n return value == 0;\n }\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/unsafe.js\nvar IMPLICIT = 2;\nvar unsafeLocal = Symbol.for("reflect unsafe local");\nfunction unsafeOneofCase(target, oneof) {\n const c = target[oneof.localName].case;\n if (c === void 0) {\n return c;\n }\n return oneof.fields.find((f) => f.localName === c);\n}\nfunction unsafeIsSet(target, field) {\n const name = field.localName;\n if (field.oneof) {\n return target[field.oneof.localName].case === name;\n }\n if (field.presence != IMPLICIT) {\n return target[name] !== void 0 && Object.prototype.hasOwnProperty.call(target, name);\n }\n switch (field.fieldKind) {\n case "list":\n return target[name].length > 0;\n case "map":\n return Object.keys(target[name]).length > 0;\n case "scalar":\n return !isScalarZeroValue(field.scalar, target[name]);\n case "enum":\n return target[name] !== field.enum.values[0].number;\n }\n throw new Error("message field with implicit presence");\n}\nfunction unsafeIsSetExplicit(target, localName) {\n return Object.prototype.hasOwnProperty.call(target, localName) && target[localName] !== void 0;\n}\nfunction unsafeGet(target, field) {\n if (field.oneof) {\n const oneof = target[field.oneof.localName];\n if (oneof.case === field.localName) {\n return oneof.value;\n }\n return void 0;\n }\n return target[field.localName];\n}\nfunction unsafeSet(target, field, value) {\n if (field.oneof) {\n target[field.oneof.localName] = {\n case: field.localName,\n value\n };\n } else {\n target[field.localName] = value;\n }\n}\nfunction unsafeClear(target, field) {\n const name = field.localName;\n if (field.oneof) {\n const oneofLocalName = field.oneof.localName;\n if (target[oneofLocalName].case === name) {\n target[oneofLocalName] = { case: void 0 };\n }\n } else if (field.presence != IMPLICIT) {\n delete target[name];\n } else {\n switch (field.fieldKind) {\n case "map":\n target[name] = {};\n break;\n case "list":\n target[name] = [];\n break;\n case "enum":\n target[name] = field.enum.values[0].number;\n break;\n case "scalar":\n target[name] = scalarZeroValue(field.scalar, field.longAsString);\n break;\n }\n }\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/guard.js\nfunction isObject(arg) {\n return arg !== null && typeof arg == "object" && !Array.isArray(arg);\n}\nfunction isReflectList(arg, field) {\n var _a, _b, _c, _d;\n if (isObject(arg) && unsafeLocal in arg && "add" in arg && "field" in arg && typeof arg.field == "function") {\n if (field !== void 0) {\n const a = field;\n const b = arg.field();\n return a.listKind == b.listKind && a.scalar === b.scalar && ((_a = a.message) === null || _a === void 0 ? void 0 : _a.typeName) === ((_b = b.message) === null || _b === void 0 ? void 0 : _b.typeName) && ((_c = a.enum) === null || _c === void 0 ? void 0 : _c.typeName) === ((_d = b.enum) === null || _d === void 0 ? void 0 : _d.typeName);\n }\n return true;\n }\n return false;\n}\nfunction isReflectMap(arg, field) {\n var _a, _b, _c, _d;\n if (isObject(arg) && unsafeLocal in arg && "has" in arg && "field" in arg && typeof arg.field == "function") {\n if (field !== void 0) {\n const a = field, b = arg.field();\n return a.mapKey === b.mapKey && a.mapKind == b.mapKind && a.scalar === b.scalar && ((_a = a.message) === null || _a === void 0 ? void 0 : _a.typeName) === ((_b = b.message) === null || _b === void 0 ? void 0 : _b.typeName) && ((_c = a.enum) === null || _c === void 0 ? void 0 : _c.typeName) === ((_d = b.enum) === null || _d === void 0 ? void 0 : _d.typeName);\n }\n return true;\n }\n return false;\n}\nfunction isReflectMessage(arg, messageDesc2) {\n return isObject(arg) && unsafeLocal in arg && "desc" in arg && isObject(arg.desc) && arg.desc.kind === "message" && (messageDesc2 === void 0 || arg.desc.typeName == messageDesc2.typeName);\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.js\nfunction isWrapper(arg) {\n return isWrapperTypeName(arg.$typeName);\n}\nfunction isWrapperDesc(messageDesc2) {\n const f = messageDesc2.fields[0];\n return isWrapperTypeName(messageDesc2.typeName) && f !== void 0 && f.fieldKind == "scalar" && f.name == "value" && f.number == 1;\n}\nfunction isWrapperTypeName(name) {\n return name.startsWith("google.protobuf.") && [\n "DoubleValue",\n "FloatValue",\n "Int64Value",\n "UInt64Value",\n "Int32Value",\n "UInt32Value",\n "BoolValue",\n "StringValue",\n "BytesValue"\n ].includes(name.substring(16));\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/create.js\nvar EDITION_PROTO3 = 999;\nvar EDITION_PROTO2 = 998;\nvar IMPLICIT2 = 2;\nfunction create(schema, init) {\n if (isMessage(init, schema)) {\n return init;\n }\n const message = createZeroMessage(schema);\n if (init !== void 0) {\n initMessage(schema, message, init);\n }\n return message;\n}\nfunction initMessage(messageDesc2, message, init) {\n for (const member of messageDesc2.members) {\n let value = init[member.localName];\n if (value == null) {\n continue;\n }\n let field;\n if (member.kind == "oneof") {\n const oneofField = unsafeOneofCase(init, member);\n if (!oneofField) {\n continue;\n }\n field = oneofField;\n value = unsafeGet(init, oneofField);\n } else {\n field = member;\n }\n switch (field.fieldKind) {\n case "message":\n value = toMessage(field, value);\n break;\n case "scalar":\n value = initScalar(field, value);\n break;\n case "list":\n value = initList(field, value);\n break;\n case "map":\n value = initMap(field, value);\n break;\n }\n unsafeSet(message, field, value);\n }\n return message;\n}\nfunction initScalar(field, value) {\n if (field.scalar == ScalarType.BYTES) {\n return toU8Arr(value);\n }\n return value;\n}\nfunction initMap(field, value) {\n if (isObject(value)) {\n if (field.scalar == ScalarType.BYTES) {\n return convertObjectValues(value, toU8Arr);\n }\n if (field.mapKind == "message") {\n return convertObjectValues(value, (val) => toMessage(field, val));\n }\n }\n return value;\n}\nfunction initList(field, value) {\n if (Array.isArray(value)) {\n if (field.scalar == ScalarType.BYTES) {\n return value.map(toU8Arr);\n }\n if (field.listKind == "message") {\n return value.map((item) => toMessage(field, item));\n }\n }\n return value;\n}\nfunction toMessage(field, value) {\n if (field.fieldKind == "message" && !field.oneof && isWrapperDesc(field.message)) {\n return initScalar(field.message.fields[0], value);\n }\n if (isObject(value)) {\n if (field.message.typeName == "google.protobuf.Struct" && field.parent.typeName !== "google.protobuf.Value") {\n return value;\n }\n if (!isMessage(value, field.message)) {\n return create(field.message, value);\n }\n }\n return value;\n}\nfunction toU8Arr(value) {\n return Array.isArray(value) ? new Uint8Array(value) : value;\n}\nfunction convertObjectValues(obj, fn) {\n const ret = {};\n for (const entry of Object.entries(obj)) {\n ret[entry[0]] = fn(entry[1]);\n }\n return ret;\n}\nvar tokenZeroMessageField = Symbol();\nvar messagePrototypes = /* @__PURE__ */ new WeakMap();\nfunction createZeroMessage(desc) {\n let msg;\n if (!needsPrototypeChain(desc)) {\n msg = {\n $typeName: desc.typeName\n };\n for (const member of desc.members) {\n if (member.kind == "oneof" || member.presence == IMPLICIT2) {\n msg[member.localName] = createZeroField(member);\n }\n }\n } else {\n const cached = messagePrototypes.get(desc);\n let prototype;\n let members;\n if (cached) {\n ({ prototype, members } = cached);\n } else {\n prototype = {};\n members = /* @__PURE__ */ new Set();\n for (const member of desc.members) {\n if (member.kind == "oneof") {\n continue;\n }\n if (member.fieldKind != "scalar" && member.fieldKind != "enum") {\n continue;\n }\n if (member.presence == IMPLICIT2) {\n continue;\n }\n members.add(member);\n prototype[member.localName] = createZeroField(member);\n }\n messagePrototypes.set(desc, { prototype, members });\n }\n msg = Object.create(prototype);\n msg.$typeName = desc.typeName;\n for (const member of desc.members) {\n if (members.has(member)) {\n continue;\n }\n if (member.kind == "field") {\n if (member.fieldKind == "message") {\n continue;\n }\n if (member.fieldKind == "scalar" || member.fieldKind == "enum") {\n if (member.presence != IMPLICIT2) {\n continue;\n }\n }\n }\n msg[member.localName] = createZeroField(member);\n }\n }\n return msg;\n}\nfunction needsPrototypeChain(desc) {\n switch (desc.file.edition) {\n case EDITION_PROTO3:\n return false;\n case EDITION_PROTO2:\n return true;\n default:\n return desc.fields.some((f) => f.presence != IMPLICIT2 && f.fieldKind != "message" && !f.oneof);\n }\n}\nfunction createZeroField(field) {\n if (field.kind == "oneof") {\n return { case: void 0 };\n }\n if (field.fieldKind == "list") {\n return [];\n }\n if (field.fieldKind == "map") {\n return {};\n }\n if (field.fieldKind == "message") {\n return tokenZeroMessageField;\n }\n const defaultValue = field.getDefaultValue();\n if (defaultValue !== void 0) {\n return field.fieldKind == "scalar" && field.longAsString ? defaultValue.toString() : defaultValue;\n }\n return field.fieldKind == "scalar" ? scalarZeroValue(field.scalar, field.longAsString) : field.enum.values[0].number;\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/error.js\nvar FieldError = class extends Error {\n constructor(fieldOrOneof, message, name = "FieldValueInvalidError") {\n super(message);\n this.name = name;\n this.field = () => fieldOrOneof;\n }\n};\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js\nvar symbol = Symbol.for("@bufbuild/protobuf/text-encoding");\nfunction getTextEncoding() {\n if (globalThis[symbol] == void 0) {\n const te = new globalThis.TextEncoder();\n const td = new globalThis.TextDecoder();\n let tdStrict;\n globalThis[symbol] = {\n encodeUtf8(text) {\n return te.encode(text);\n },\n decodeUtf8(bytes, strict) {\n if (strict) {\n if (tdStrict === void 0) {\n tdStrict = new globalThis.TextDecoder("utf-8", { fatal: true });\n }\n return tdStrict.decode(bytes);\n }\n return td.decode(bytes);\n },\n checkUtf8(text) {\n try {\n encodeURIComponent(text);\n return true;\n } catch (_) {\n return false;\n }\n }\n };\n }\n return globalThis[symbol];\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js\nvar WireType;\n(function(WireType2) {\n WireType2[WireType2["Varint"] = 0] = "Varint";\n WireType2[WireType2["Bit64"] = 1] = "Bit64";\n WireType2[WireType2["LengthDelimited"] = 2] = "LengthDelimited";\n WireType2[WireType2["StartGroup"] = 3] = "StartGroup";\n WireType2[WireType2["EndGroup"] = 4] = "EndGroup";\n WireType2[WireType2["Bit32"] = 5] = "Bit32";\n})(WireType || (WireType = {}));\nvar FLOAT32_MAX = 34028234663852886e22;\nvar FLOAT32_MIN = -34028234663852886e22;\nvar UINT32_MAX = 4294967295;\nvar INT32_MAX = 2147483647;\nvar INT32_MIN = -2147483648;\nvar BinaryWriter = class {\n constructor(encodeUtf8 = getTextEncoding().encodeUtf8) {\n this.encodeUtf8 = encodeUtf8;\n this.stack = [];\n this.chunks = [];\n this.buf = [];\n }\n /**\n * Return all bytes written and reset this writer.\n */\n finish() {\n if (this.buf.length) {\n this.chunks.push(new Uint8Array(this.buf));\n this.buf = [];\n }\n let len = 0;\n for (let i = 0; i < this.chunks.length; i++)\n len += this.chunks[i].length;\n let bytes = new Uint8Array(len);\n let offset = 0;\n for (let i = 0; i < this.chunks.length; i++) {\n bytes.set(this.chunks[i], offset);\n offset += this.chunks[i].length;\n }\n this.chunks = [];\n return bytes;\n }\n /**\n * Start a new fork for length-delimited data like a message\n * or a packed repeated field.\n *\n * Must be joined later with `join()`.\n */\n fork() {\n this.stack.push({ chunks: this.chunks, buf: this.buf });\n this.chunks = [];\n this.buf = [];\n return this;\n }\n /**\n * Join the last fork. Write its length and bytes, then\n * return to the previous state.\n */\n join() {\n let chunk = this.finish();\n let prev = this.stack.pop();\n if (!prev)\n throw new Error("invalid state, fork stack empty");\n this.chunks = prev.chunks;\n this.buf = prev.buf;\n this.uint32(chunk.byteLength);\n return this.raw(chunk);\n }\n /**\n * Writes a tag (field number and wire type).\n *\n * Equivalent to `uint32( (fieldNo << 3 | type) >>> 0 )`.\n *\n * Generated code should compute the tag ahead of time and call `uint32()`.\n */\n tag(fieldNo, type) {\n return this.uint32((fieldNo << 3 | type) >>> 0);\n }\n /**\n * Write a chunk of raw bytes.\n */\n raw(chunk) {\n if (this.buf.length) {\n this.chunks.push(new Uint8Array(this.buf));\n this.buf = [];\n }\n this.chunks.push(chunk);\n return this;\n }\n /**\n * Write a `uint32` value, an unsigned 32 bit varint.\n */\n uint32(value) {\n assertUInt32(value);\n while (value > 127) {\n this.buf.push(value & 127 | 128);\n value = value >>> 7;\n }\n this.buf.push(value);\n return this;\n }\n /**\n * Write a `int32` value, a signed 32 bit varint.\n */\n int32(value) {\n assertInt32(value);\n varint32write(value, this.buf);\n return this;\n }\n /**\n * Write a `bool` value, a varint.\n */\n bool(value) {\n this.buf.push(value ? 1 : 0);\n return this;\n }\n /**\n * Write a `bytes` value, length-delimited arbitrary data.\n */\n bytes(value) {\n this.uint32(value.byteLength);\n return this.raw(value);\n }\n /**\n * Write a `string` value, length-delimited data converted to UTF-8 text.\n */\n string(value) {\n let chunk = this.encodeUtf8(value);\n this.uint32(chunk.byteLength);\n return this.raw(chunk);\n }\n /**\n * Write a `float` value, 32-bit floating point number.\n */\n float(value) {\n assertFloat32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setFloat32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `double` value, a 64-bit floating point number.\n */\n double(value) {\n let chunk = new Uint8Array(8);\n new DataView(chunk.buffer).setFloat64(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `fixed32` value, an unsigned, fixed-length 32-bit integer.\n */\n fixed32(value) {\n assertUInt32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setUint32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `sfixed32` value, a signed, fixed-length 32-bit integer.\n */\n sfixed32(value) {\n assertInt32(value);\n let chunk = new Uint8Array(4);\n new DataView(chunk.buffer).setInt32(0, value, true);\n return this.raw(chunk);\n }\n /**\n * Write a `sint32` value, a signed, zigzag-encoded 32-bit varint.\n */\n sint32(value) {\n assertInt32(value);\n value = (value << 1 ^ value >> 31) >>> 0;\n varint32write(value, this.buf);\n return this;\n }\n /**\n * Write a `sfixed64` value, a signed, fixed-length 64-bit integer.\n */\n sfixed64(value) {\n let chunk = new Uint8Array(8), view = new DataView(chunk.buffer), tc = protoInt64.enc(value);\n view.setInt32(0, tc.lo, true);\n view.setInt32(4, tc.hi, true);\n return this.raw(chunk);\n }\n /**\n * Write a `fixed64` value, an unsigned, fixed-length 64 bit integer.\n */\n fixed64(value) {\n let chunk = new Uint8Array(8), view = new DataView(chunk.buffer), tc = protoInt64.uEnc(value);\n view.setInt32(0, tc.lo, true);\n view.setInt32(4, tc.hi, true);\n return this.raw(chunk);\n }\n /**\n * Write a `int64` value, a signed 64-bit varint.\n */\n int64(value) {\n let tc = protoInt64.enc(value);\n varint64write(tc.lo, tc.hi, this.buf);\n return this;\n }\n /**\n * Write a `sint64` value, a signed, zig-zag-encoded 64-bit varint.\n */\n sint64(value) {\n const tc = protoInt64.enc(value), sign = tc.hi >> 31, lo = tc.lo << 1 ^ sign, hi = (tc.hi << 1 | tc.lo >>> 31) ^ sign;\n varint64write(lo, hi, this.buf);\n return this;\n }\n /**\n * Write a `uint64` value, an unsigned 64-bit varint.\n */\n uint64(value) {\n const tc = protoInt64.uEnc(value);\n varint64write(tc.lo, tc.hi, this.buf);\n return this;\n }\n};\nvar BinaryReader = class {\n constructor(buf, decodeUtf8 = getTextEncoding().decodeUtf8) {\n this.decodeUtf8 = decodeUtf8;\n this.varint64 = varint64read;\n this.uint32 = varint32read;\n this.buf = buf;\n this.len = buf.length;\n this.pos = 0;\n this.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n /**\n * Reads a tag - field number and wire type. Tags are uint32 varints; values\n * that do not fit in uint32 are rejected.\n */\n tag() {\n const start = this.pos;\n const tag = this.uint32();\n const bytesRead = this.pos - start;\n if (bytesRead > 5 || bytesRead == 5 && this.buf[this.pos - 1] > 15) {\n throw new Error("illegal tag: varint overflows uint32");\n }\n const fieldNo = tag >>> 3;\n const wireType = tag & 7;\n if (fieldNo <= 0 || wireType > 5) {\n throw new Error("illegal tag: field no " + fieldNo + " wire type " + wireType);\n }\n return [fieldNo, wireType];\n }\n /**\n * Skip one element and return the skipped data.\n *\n * When skipping StartGroup, provide the tags field number to check for\n * matching field number in the EndGroup tag. Recursion into nested groups\n * is guarded by the `recursionLimit` argument: When the limit is reached,\n * this method throws.\n */\n skip(wireType, fieldNo, recursionLimit = 100) {\n let start = this.pos;\n switch (wireType) {\n case WireType.Varint:\n while (this.buf[this.pos++] & 128) {\n }\n break;\n // @ts-ignore TS7029: Fallthrough case in switch -- ignore instead of expect-error for compiler settings without noFallthroughCasesInSwitch: true\n case WireType.Bit64:\n this.pos += 4;\n case WireType.Bit32:\n this.pos += 4;\n break;\n case WireType.LengthDelimited:\n let len = this.uint32();\n this.pos += len;\n break;\n case WireType.StartGroup:\n if (recursionLimit <= 0) {\n throw new Error("maximum recursion depth reached");\n }\n for (; ; ) {\n const [fn, wt] = this.tag();\n if (wt === WireType.EndGroup) {\n if (fieldNo !== void 0 && fn !== fieldNo) {\n throw new Error("invalid end group tag");\n }\n break;\n }\n this.skip(wt, fn, recursionLimit - 1);\n }\n break;\n default:\n throw new Error("cant skip wire type " + wireType);\n }\n this.assertBounds();\n return this.buf.subarray(start, this.pos);\n }\n /**\n * Throws error if position in byte array is out of range.\n */\n assertBounds() {\n if (this.pos > this.len)\n throw new RangeError("premature EOF");\n }\n /**\n * Read a `int32` field, a signed 32 bit varint.\n */\n int32() {\n return this.uint32() | 0;\n }\n /**\n * Read a `sint32` field, a signed, zigzag-encoded 32-bit varint.\n */\n sint32() {\n let zze = this.uint32();\n return zze >>> 1 ^ -(zze & 1);\n }\n /**\n * Read a `int64` field, a signed 64-bit varint.\n */\n int64() {\n return protoInt64.dec(...this.varint64());\n }\n /**\n * Read a `uint64` field, an unsigned 64-bit varint.\n */\n uint64() {\n return protoInt64.uDec(...this.varint64());\n }\n /**\n * Read a `sint64` field, a signed, zig-zag-encoded 64-bit varint.\n */\n sint64() {\n let [lo, hi] = this.varint64();\n let s = -(lo & 1);\n lo = (lo >>> 1 | (hi & 1) << 31) ^ s;\n hi = hi >>> 1 ^ s;\n return protoInt64.dec(lo, hi);\n }\n /**\n * Read a `bool` field, a variant.\n */\n bool() {\n let [lo, hi] = this.varint64();\n return lo !== 0 || hi !== 0;\n }\n /**\n * Read a `fixed32` field, an unsigned, fixed-length 32-bit integer.\n */\n fixed32() {\n return this.view.getUint32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `sfixed32` field, a signed, fixed-length 32-bit integer.\n */\n sfixed32() {\n return this.view.getInt32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `fixed64` field, an unsigned, fixed-length 64 bit integer.\n */\n fixed64() {\n return protoInt64.uDec(this.sfixed32(), this.sfixed32());\n }\n /**\n * Read a `fixed64` field, a signed, fixed-length 64-bit integer.\n */\n sfixed64() {\n return protoInt64.dec(this.sfixed32(), this.sfixed32());\n }\n /**\n * Read a `float` field, 32-bit floating point number.\n */\n float() {\n return this.view.getFloat32((this.pos += 4) - 4, true);\n }\n /**\n * Read a `double` field, a 64-bit floating point number.\n */\n double() {\n return this.view.getFloat64((this.pos += 8) - 8, true);\n }\n /**\n * Read a `bytes` field, length-delimited arbitrary data.\n */\n bytes() {\n let len = this.uint32(), start = this.pos;\n this.pos += len;\n this.assertBounds();\n return this.buf.subarray(start, start + len);\n }\n /**\n * Read a `string` field, length-delimited data converted to UTF-8 text. If\n * `strict` is true, throw on invalid UTF-8 instead of substituting U+FFFD.\n */\n string(strict) {\n return this.decodeUtf8(this.bytes(), strict);\n }\n};\nfunction assertInt32(arg) {\n if (typeof arg == "string") {\n arg = Number(arg);\n } else if (typeof arg != "number") {\n throw new Error("invalid int32: " + typeof arg);\n }\n if (!Number.isInteger(arg) || arg > INT32_MAX || arg < INT32_MIN)\n throw new Error("invalid int32: " + arg);\n}\nfunction assertUInt32(arg) {\n if (typeof arg == "string") {\n arg = Number(arg);\n } else if (typeof arg != "number") {\n throw new Error("invalid uint32: " + typeof arg);\n }\n if (!Number.isInteger(arg) || arg > UINT32_MAX || arg < 0)\n throw new Error("invalid uint32: " + arg);\n}\nfunction assertFloat32(arg) {\n if (typeof arg == "string") {\n const o = arg;\n arg = Number(arg);\n if (Number.isNaN(arg) && o !== "NaN") {\n throw new Error("invalid float32: " + o);\n }\n } else if (typeof arg != "number") {\n throw new Error("invalid float32: " + typeof arg);\n }\n if (Number.isFinite(arg) && (arg > FLOAT32_MAX || arg < FLOAT32_MIN))\n throw new Error("invalid float32: " + arg);\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.js\nfunction checkField(field, value) {\n const check = field.fieldKind == "list" ? isReflectList(value, field) : field.fieldKind == "map" ? isReflectMap(value, field) : checkSingular(field, value);\n if (check === true) {\n return void 0;\n }\n let reason;\n switch (field.fieldKind) {\n case "list":\n reason = `expected ${formatReflectList(field)}, got ${formatVal(value)}`;\n break;\n case "map":\n reason = `expected ${formatReflectMap(field)}, got ${formatVal(value)}`;\n break;\n default: {\n reason = reasonSingular(field, value, check);\n }\n }\n return new FieldError(field, reason);\n}\nfunction checkListItem(field, index, value) {\n const check = checkSingular(field, value);\n if (check !== true) {\n return new FieldError(field, `list item #${index + 1}: ${reasonSingular(field, value, check)}`);\n }\n return void 0;\n}\nfunction checkMapEntry(field, key, value) {\n const checkKey = checkScalarValue(key, field.mapKey);\n if (checkKey !== true) {\n return new FieldError(field, `invalid map key: ${reasonSingular({ scalar: field.mapKey }, key, checkKey)}`);\n }\n const checkVal = checkSingular(field, value);\n if (checkVal !== true) {\n return new FieldError(field, `map entry ${formatVal(key)}: ${reasonSingular(field, value, checkVal)}`);\n }\n return void 0;\n}\nfunction checkSingular(field, value) {\n if (field.scalar !== void 0) {\n return checkScalarValue(value, field.scalar);\n }\n if (field.enum !== void 0) {\n if (field.enum.open) {\n return checkScalarValue(value, ScalarType.INT32);\n }\n return field.enum.values.some((v) => v.number === value);\n }\n return isReflectMessage(value, field.message);\n}\nfunction checkScalarValue(value, scalar) {\n switch (scalar) {\n case ScalarType.DOUBLE:\n return typeof value == "number";\n case ScalarType.FLOAT:\n if (typeof value != "number") {\n return false;\n }\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n return true;\n }\n if (value > FLOAT32_MAX || value < FLOAT32_MIN) {\n return `${value.toFixed()} out of range`;\n }\n return true;\n case ScalarType.INT32:\n case ScalarType.SFIXED32:\n case ScalarType.SINT32:\n if (typeof value !== "number" || !Number.isInteger(value)) {\n return false;\n }\n if (value > INT32_MAX || value < INT32_MIN) {\n return `${value.toFixed()} out of range`;\n }\n return true;\n case ScalarType.FIXED32:\n case ScalarType.UINT32:\n if (typeof value !== "number" || !Number.isInteger(value)) {\n return false;\n }\n if (value > UINT32_MAX || value < 0) {\n return `${value.toFixed()} out of range`;\n }\n return true;\n case ScalarType.BOOL:\n return typeof value == "boolean";\n case ScalarType.STRING:\n if (typeof value != "string") {\n return false;\n }\n return getTextEncoding().checkUtf8(value) || "invalid UTF8";\n case ScalarType.BYTES:\n return value instanceof Uint8Array;\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n if (typeof value == "bigint" || typeof value == "number" || typeof value == "string" && value.length > 0) {\n try {\n protoInt64.parse(value);\n return true;\n } catch (_) {\n return `${value} out of range`;\n }\n }\n return false;\n case ScalarType.FIXED64:\n case ScalarType.UINT64:\n if (typeof value == "bigint" || typeof value == "number" || typeof value == "string" && value.length > 0) {\n try {\n protoInt64.uParse(value);\n return true;\n } catch (_) {\n return `${value} out of range`;\n }\n }\n return false;\n }\n}\nfunction reasonSingular(field, val, details) {\n details = typeof details == "string" ? `: ${details}` : `, got ${formatVal(val)}`;\n if (field.scalar !== void 0) {\n return `expected ${scalarTypeDescription(field.scalar)}` + details;\n }\n if (field.enum !== void 0) {\n return `expected ${field.enum.toString()}` + details;\n }\n return `expected ${formatReflectMessage(field.message)}` + details;\n}\nfunction formatVal(val) {\n switch (typeof val) {\n case "object":\n if (val === null) {\n return "null";\n }\n if (val instanceof Uint8Array) {\n return `Uint8Array(${val.length})`;\n }\n if (Array.isArray(val)) {\n return `Array(${val.length})`;\n }\n if (isReflectList(val)) {\n return formatReflectList(val.field());\n }\n if (isReflectMap(val)) {\n return formatReflectMap(val.field());\n }\n if (isReflectMessage(val)) {\n return formatReflectMessage(val.desc);\n }\n if (isMessage(val)) {\n return `message ${val.$typeName}`;\n }\n return "object";\n case "string":\n return val.length > 30 ? "string" : `"${val.split(\'"\').join(\'\\\\"\')}"`;\n case "boolean":\n return String(val);\n case "number":\n return String(val);\n case "bigint":\n return String(val) + "n";\n default:\n return typeof val;\n }\n}\nfunction formatReflectMessage(desc) {\n return `ReflectMessage (${desc.typeName})`;\n}\nfunction formatReflectList(field) {\n switch (field.listKind) {\n case "message":\n return `ReflectList (${field.message.toString()})`;\n case "enum":\n return `ReflectList (${field.enum.toString()})`;\n case "scalar":\n return `ReflectList (${ScalarType[field.scalar]})`;\n }\n}\nfunction formatReflectMap(field) {\n switch (field.mapKind) {\n case "message":\n return `ReflectMap (${ScalarType[field.mapKey]}, ${field.message.toString()})`;\n case "enum":\n return `ReflectMap (${ScalarType[field.mapKey]}, ${field.enum.toString()})`;\n case "scalar":\n return `ReflectMap (${ScalarType[field.mapKey]}, ${ScalarType[field.scalar]})`;\n }\n}\nfunction scalarTypeDescription(scalar) {\n switch (scalar) {\n case ScalarType.STRING:\n return "string";\n case ScalarType.BOOL:\n return "boolean";\n case ScalarType.INT64:\n case ScalarType.SINT64:\n case ScalarType.SFIXED64:\n return "bigint (int64)";\n case ScalarType.UINT64:\n case ScalarType.FIXED64:\n return "bigint (uint64)";\n case ScalarType.BYTES:\n return "Uint8Array";\n case ScalarType.DOUBLE:\n return "number (float64)";\n case ScalarType.FLOAT:\n return "number (float32)";\n case ScalarType.FIXED32:\n case ScalarType.UINT32:\n return "number (uint32)";\n case ScalarType.INT32:\n case ScalarType.SFIXED32:\n case ScalarType.SINT32:\n return "number (int32)";\n }\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.js\nvar NULL_VALUE = 0;\nfunction reflect(messageDesc2, message, check = true) {\n return new ReflectMessageImpl(messageDesc2, message, check);\n}\nvar messageSortedFields = /* @__PURE__ */ new WeakMap();\nvar ReflectMessageImpl = class {\n get sortedFields() {\n const cached = messageSortedFields.get(this.desc);\n if (cached) {\n return cached;\n }\n const sortedFields = this.desc.fields.concat().sort((a, b) => a.number - b.number);\n messageSortedFields.set(this.desc, sortedFields);\n return sortedFields;\n }\n constructor(messageDesc2, message, check = true) {\n this.lists = /* @__PURE__ */ new Map();\n this.maps = /* @__PURE__ */ new Map();\n this.check = check;\n this.desc = messageDesc2;\n this.message = this[unsafeLocal] = message !== null && message !== void 0 ? message : create(messageDesc2);\n this.fields = messageDesc2.fields;\n this.oneofs = messageDesc2.oneofs;\n this.members = messageDesc2.members;\n }\n findNumber(number) {\n if (!this._fieldsByNumber) {\n this._fieldsByNumber = new Map(this.desc.fields.map((f) => [f.number, f]));\n }\n return this._fieldsByNumber.get(number);\n }\n oneofCase(oneof) {\n assertOwn(this.message, oneof);\n return unsafeOneofCase(this.message, oneof);\n }\n isSet(field) {\n assertOwn(this.message, field);\n return unsafeIsSet(this.message, field);\n }\n clear(field) {\n assertOwn(this.message, field);\n unsafeClear(this.message, field);\n }\n get(field) {\n assertOwn(this.message, field);\n const value = unsafeGet(this.message, field);\n switch (field.fieldKind) {\n case "list":\n let list = this.lists.get(field);\n if (!list || list[unsafeLocal] !== value) {\n this.lists.set(\n field,\n // biome-ignore lint/suspicious/noAssignInExpressions: no\n list = new ReflectListImpl(field, value, this.check)\n );\n }\n return list;\n case "map":\n let map = this.maps.get(field);\n if (!map || map[unsafeLocal] !== value) {\n this.maps.set(\n field,\n // biome-ignore lint/suspicious/noAssignInExpressions: no\n map = new ReflectMapImpl(field, value, this.check)\n );\n }\n return map;\n case "message":\n return messageToReflect(field, value, this.check);\n case "scalar":\n return value === void 0 ? scalarZeroValue(field.scalar, false) : longToReflect(field, value);\n case "enum":\n return value !== null && value !== void 0 ? value : field.enum.values[0].number;\n }\n }\n set(field, value) {\n assertOwn(this.message, field);\n if (this.check) {\n const err = checkField(field, value);\n if (err) {\n throw err;\n }\n }\n let local;\n if (field.fieldKind == "message") {\n local = messageToLocal(field, value);\n } else if (isReflectMap(value) || isReflectList(value)) {\n local = value[unsafeLocal];\n } else {\n local = longToLocal(field, value);\n }\n unsafeSet(this.message, field, local);\n }\n getUnknown() {\n return this.message.$unknown;\n }\n setUnknown(value) {\n this.message.$unknown = value;\n }\n};\nfunction assertOwn(owner, member) {\n if (member.parent.typeName !== owner.$typeName) {\n throw new FieldError(member, `cannot use ${member.toString()} with message ${owner.$typeName}`, "ForeignFieldError");\n }\n}\nvar ReflectListImpl = class {\n field() {\n return this._field;\n }\n get size() {\n return this._arr.length;\n }\n constructor(field, unsafeInput, check) {\n this._field = field;\n this._arr = this[unsafeLocal] = unsafeInput;\n this.check = check;\n }\n get(index) {\n const item = this._arr[index];\n return item === void 0 ? void 0 : listItemToReflect(this._field, item, this.check);\n }\n set(index, item) {\n if (index < 0 || index >= this._arr.length) {\n throw new FieldError(this._field, `list item #${index + 1}: out of range`);\n }\n if (this.check) {\n const err = checkListItem(this._field, index, item);\n if (err) {\n throw err;\n }\n }\n this._arr[index] = listItemToLocal(this._field, item);\n }\n add(item) {\n if (this.check) {\n const err = checkListItem(this._field, this._arr.length, item);\n if (err) {\n throw err;\n }\n }\n this._arr.push(listItemToLocal(this._field, item));\n return void 0;\n }\n clear() {\n this._arr.splice(0, this._arr.length);\n }\n [Symbol.iterator]() {\n return this.values();\n }\n keys() {\n return this._arr.keys();\n }\n *values() {\n for (const item of this._arr) {\n yield listItemToReflect(this._field, item, this.check);\n }\n }\n *entries() {\n for (let i = 0; i < this._arr.length; i++) {\n yield [i, listItemToReflect(this._field, this._arr[i], this.check)];\n }\n }\n};\nvar ReflectMapImpl = class {\n constructor(field, unsafeInput, check = true) {\n this.obj = this[unsafeLocal] = unsafeInput !== null && unsafeInput !== void 0 ? unsafeInput : {};\n this.check = check;\n this._field = field;\n }\n field() {\n return this._field;\n }\n set(key, value) {\n if (this.check) {\n const err = checkMapEntry(this._field, key, value);\n if (err) {\n throw err;\n }\n }\n this.obj[mapKeyToLocal(key)] = mapValueToLocal(this._field, value);\n return this;\n }\n delete(key) {\n const k = mapKeyToLocal(key);\n const has = Object.prototype.hasOwnProperty.call(this.obj, k);\n if (has) {\n delete this.obj[k];\n }\n return has;\n }\n clear() {\n for (const key of Object.keys(this.obj)) {\n delete this.obj[key];\n }\n }\n get(key) {\n let val = this.obj[mapKeyToLocal(key)];\n if (val !== void 0) {\n val = mapValueToReflect(this._field, val, this.check);\n }\n return val;\n }\n has(key) {\n return Object.prototype.hasOwnProperty.call(this.obj, mapKeyToLocal(key));\n }\n *keys() {\n for (const objKey of Object.keys(this.obj)) {\n yield mapKeyToReflect(objKey, this._field.mapKey);\n }\n }\n *entries() {\n for (const objEntry of Object.entries(this.obj)) {\n yield [\n mapKeyToReflect(objEntry[0], this._field.mapKey),\n mapValueToReflect(this._field, objEntry[1], this.check)\n ];\n }\n }\n [Symbol.iterator]() {\n return this.entries();\n }\n get size() {\n return Object.keys(this.obj).length;\n }\n *values() {\n for (const val of Object.values(this.obj)) {\n yield mapValueToReflect(this._field, val, this.check);\n }\n }\n forEach(callbackfn, thisArg) {\n for (const mapEntry of this.entries()) {\n callbackfn.call(thisArg, mapEntry[1], mapEntry[0], this);\n }\n }\n};\nfunction messageToLocal(field, value) {\n if (!isReflectMessage(value)) {\n return value;\n }\n if (isWrapper(value.message) && !field.oneof && field.fieldKind == "message") {\n return value.message.value;\n }\n if (value.desc.typeName == "google.protobuf.Struct" && field.parent.typeName != "google.protobuf.Value") {\n return wktStructToLocal(value.message);\n }\n return value.message;\n}\nfunction messageToReflect(field, value, check) {\n if (value !== void 0) {\n if (isWrapperDesc(field.message) && !field.oneof && field.fieldKind == "message") {\n value = {\n $typeName: field.message.typeName,\n value: longToReflect(field.message.fields[0], value)\n };\n } else if (field.message.typeName == "google.protobuf.Struct" && field.parent.typeName != "google.protobuf.Value" && isObject(value)) {\n value = wktStructToReflect(value);\n }\n }\n return new ReflectMessageImpl(field.message, value, check);\n}\nfunction listItemToLocal(field, value) {\n if (field.listKind == "message") {\n return messageToLocal(field, value);\n }\n return longToLocal(field, value);\n}\nfunction listItemToReflect(field, value, check) {\n if (field.listKind == "message") {\n return messageToReflect(field, value, check);\n }\n return longToReflect(field, value);\n}\nfunction mapValueToLocal(field, value) {\n if (field.mapKind == "message") {\n return messageToLocal(field, value);\n }\n return longToLocal(field, value);\n}\nfunction mapValueToReflect(field, value, check) {\n if (field.mapKind == "message") {\n return messageToReflect(field, value, check);\n }\n return value;\n}\nfunction mapKeyToLocal(key) {\n return typeof key == "string" || typeof key == "number" ? key : String(key);\n}\nfunction mapKeyToReflect(key, type) {\n switch (type) {\n case ScalarType.STRING:\n return key;\n case ScalarType.INT32:\n case ScalarType.FIXED32:\n case ScalarType.UINT32:\n case ScalarType.SFIXED32:\n case ScalarType.SINT32: {\n const n = Number.parseInt(key);\n if (Number.isFinite(n)) {\n return n;\n }\n break;\n }\n case ScalarType.BOOL:\n switch (key) {\n case "true":\n return true;\n case "false":\n return false;\n }\n break;\n case ScalarType.UINT64:\n case ScalarType.FIXED64:\n try {\n return protoInt64.uParse(key);\n } catch (_a) {\n }\n break;\n default:\n try {\n return protoInt64.parse(key);\n } catch (_b) {\n }\n break;\n }\n return key;\n}\nfunction longToReflect(field, value) {\n switch (field.scalar) {\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n if ("longAsString" in field && field.longAsString && typeof value == "string") {\n value = protoInt64.parse(value);\n }\n break;\n case ScalarType.FIXED64:\n case ScalarType.UINT64:\n if ("longAsString" in field && field.longAsString && typeof value == "string") {\n value = protoInt64.uParse(value);\n }\n break;\n }\n return value;\n}\nfunction longToLocal(field, value) {\n switch (field.scalar) {\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n if ("longAsString" in field && field.longAsString) {\n value = String(value);\n } else if (typeof value == "string" || typeof value == "number") {\n value = protoInt64.parse(value);\n }\n break;\n case ScalarType.FIXED64:\n case ScalarType.UINT64:\n if ("longAsString" in field && field.longAsString) {\n value = String(value);\n } else if (typeof value == "string" || typeof value == "number") {\n value = protoInt64.uParse(value);\n }\n break;\n }\n return value;\n}\nfunction wktStructToReflect(json) {\n const struct = {\n $typeName: "google.protobuf.Struct",\n fields: {}\n };\n if (isObject(json)) {\n for (const [k, v] of Object.entries(json)) {\n struct.fields[k] = wktValueToReflect(v);\n }\n }\n return struct;\n}\nfunction wktStructToLocal(val) {\n const json = {};\n for (const [k, v] of Object.entries(val.fields)) {\n json[k] = wktValueToLocal(v);\n }\n return json;\n}\nfunction wktValueToLocal(val) {\n switch (val.kind.case) {\n case "structValue":\n return wktStructToLocal(val.kind.value);\n case "listValue":\n return val.kind.value.values.map(wktValueToLocal);\n case "nullValue":\n case void 0:\n return null;\n default:\n return val.kind.value;\n }\n}\nfunction wktValueToReflect(json) {\n const value = {\n $typeName: "google.protobuf.Value",\n kind: { case: void 0 }\n };\n switch (typeof json) {\n case "number":\n value.kind = { case: "numberValue", value: json };\n break;\n case "string":\n value.kind = { case: "stringValue", value: json };\n break;\n case "boolean":\n value.kind = { case: "boolValue", value: json };\n break;\n case "object":\n if (json === null) {\n value.kind = { case: "nullValue", value: NULL_VALUE };\n } else if (Array.isArray(json)) {\n const listValue = {\n $typeName: "google.protobuf.ListValue",\n values: []\n };\n if (Array.isArray(json)) {\n for (const e of json) {\n listValue.values.push(wktValueToReflect(e));\n }\n }\n value.kind = {\n case: "listValue",\n value: listValue\n };\n } else {\n value.kind = {\n case: "structValue",\n value: wktStructToReflect(json)\n };\n }\n break;\n }\n return value;\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/wire/base64-encoding.js\nfunction base64Decode(base64Str) {\n const table = getDecodeTable();\n let es = base64Str.length * 3 / 4;\n if (base64Str[base64Str.length - 2] == "=")\n es -= 2;\n else if (base64Str[base64Str.length - 1] == "=")\n es -= 1;\n let bytes = new Uint8Array(es), bytePos = 0, groupPos = 0, b, p = 0;\n for (let i = 0; i < base64Str.length; i++) {\n b = table[base64Str.charCodeAt(i)];\n if (b === void 0) {\n switch (base64Str[i]) {\n // @ts-ignore TS7029: Fallthrough case in switch -- ignore instead of expect-error for compiler settings without noFallthroughCasesInSwitch: true\n case "=":\n groupPos = 0;\n // reset state when padding found\n case "\\n":\n case "\\r":\n case " ":\n case " ":\n continue;\n // skip white-space, and padding\n default:\n throw Error("invalid base64 string");\n }\n }\n switch (groupPos) {\n case 0:\n p = b;\n groupPos = 1;\n break;\n case 1:\n bytes[bytePos++] = p << 2 | (b & 48) >> 4;\n p = b;\n groupPos = 2;\n break;\n case 2:\n bytes[bytePos++] = (p & 15) << 4 | (b & 60) >> 2;\n p = b;\n groupPos = 3;\n break;\n case 3:\n bytes[bytePos++] = (p & 3) << 6 | b;\n groupPos = 0;\n break;\n }\n }\n if (groupPos == 1)\n throw Error("invalid base64 string");\n return bytes.subarray(0, bytePos);\n}\nvar encodeTableStd;\nvar encodeTableUrl;\nvar decodeTable;\nfunction getEncodeTable(encoding) {\n if (!encodeTableStd) {\n encodeTableStd = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");\n encodeTableUrl = encodeTableStd.slice(0, -2).concat("-", "_");\n }\n return encoding == "url" ? (\n // biome-ignore lint/style/noNonNullAssertion: TS fails to narrow down\n encodeTableUrl\n ) : encodeTableStd;\n}\nfunction getDecodeTable() {\n if (!decodeTable) {\n decodeTable = [];\n const encodeTable = getEncodeTable("std");\n for (let i = 0; i < encodeTable.length; i++)\n decodeTable[encodeTable[i].charCodeAt(0)] = i;\n decodeTable["-".charCodeAt(0)] = encodeTable.indexOf("+");\n decodeTable["_".charCodeAt(0)] = encodeTable.indexOf("/");\n }\n return decodeTable;\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/names.js\nfunction protoCamelCase(snakeCase) {\n let capNext = false;\n const b = [];\n for (let i = 0; i < snakeCase.length; i++) {\n let c = snakeCase.charAt(i);\n switch (c) {\n case "_":\n capNext = true;\n break;\n case "0":\n case "1":\n case "2":\n case "3":\n case "4":\n case "5":\n case "6":\n case "7":\n case "8":\n case "9":\n b.push(c);\n capNext = false;\n break;\n default:\n if (capNext) {\n capNext = false;\n c = c.toUpperCase();\n }\n b.push(c);\n break;\n }\n }\n return b.join("");\n}\nvar reservedObjectProperties = /* @__PURE__ */ new Set([\n // names reserved by JavaScript\n "constructor",\n "toString",\n "toJSON",\n "valueOf"\n]);\nfunction safeObjectProperty(name) {\n return reservedObjectProperties.has(name) ? name + "$" : name;\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/codegenv2/restore-json-names.js\nfunction restoreJsonNames(message) {\n for (const f of message.field) {\n if (!unsafeIsSetExplicit(f, "jsonName")) {\n f.jsonName = protoCamelCase(f.name);\n }\n }\n message.nestedType.forEach(restoreJsonNames);\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/wire/text-format.js\nfunction parseTextFormatEnumValue(descEnum, value) {\n const enumValue = descEnum.values.find((v) => v.name === value);\n if (!enumValue) {\n throw new Error(`cannot parse ${descEnum} default value: ${value}`);\n }\n return enumValue.number;\n}\nfunction parseTextFormatScalarValue(type, value) {\n switch (type) {\n case ScalarType.STRING:\n return value;\n case ScalarType.BYTES: {\n const u = unescapeBytesDefaultValue(value);\n if (u === false) {\n throw new Error(`cannot parse ${ScalarType[type]} default value: ${value}`);\n }\n return u;\n }\n case ScalarType.INT64:\n case ScalarType.SFIXED64:\n case ScalarType.SINT64:\n return protoInt64.parse(value);\n case ScalarType.UINT64:\n case ScalarType.FIXED64:\n return protoInt64.uParse(value);\n case ScalarType.DOUBLE:\n case ScalarType.FLOAT:\n switch (value) {\n case "inf":\n return Number.POSITIVE_INFINITY;\n case "-inf":\n return Number.NEGATIVE_INFINITY;\n case "nan":\n return Number.NaN;\n default:\n return parseFloat(value);\n }\n case ScalarType.BOOL:\n return value === "true";\n case ScalarType.INT32:\n case ScalarType.UINT32:\n case ScalarType.SINT32:\n case ScalarType.FIXED32:\n case ScalarType.SFIXED32:\n return parseInt(value, 10);\n }\n}\nfunction unescapeBytesDefaultValue(str) {\n const b = [];\n const input = {\n tail: str,\n c: "",\n next() {\n if (this.tail.length == 0) {\n return false;\n }\n this.c = this.tail[0];\n this.tail = this.tail.substring(1);\n return true;\n },\n take(n) {\n if (this.tail.length >= n) {\n const r = this.tail.substring(0, n);\n this.tail = this.tail.substring(n);\n return r;\n }\n return false;\n }\n };\n while (input.next()) {\n switch (input.c) {\n case "\\\\":\n if (input.next()) {\n switch (input.c) {\n case "\\\\":\n b.push(input.c.charCodeAt(0));\n break;\n case "b":\n b.push(8);\n break;\n case "f":\n b.push(12);\n break;\n case "n":\n b.push(10);\n break;\n case "r":\n b.push(13);\n break;\n case "t":\n b.push(9);\n break;\n case "v":\n b.push(11);\n break;\n case "0":\n case "1":\n case "2":\n case "3":\n case "4":\n case "5":\n case "6":\n case "7": {\n const s = input.c;\n const t = input.take(2);\n if (t === false) {\n return false;\n }\n const n = parseInt(s + t, 8);\n if (Number.isNaN(n)) {\n return false;\n }\n b.push(n);\n break;\n }\n case "x": {\n const s = input.c;\n const t = input.take(2);\n if (t === false) {\n return false;\n }\n const n = parseInt(s + t, 16);\n if (Number.isNaN(n)) {\n return false;\n }\n b.push(n);\n break;\n }\n case "u": {\n const s = input.c;\n const t = input.take(4);\n if (t === false) {\n return false;\n }\n const n = parseInt(s + t, 16);\n if (Number.isNaN(n)) {\n return false;\n }\n const chunk = new Uint8Array(4);\n const view = new DataView(chunk.buffer);\n view.setInt32(0, n, true);\n b.push(chunk[0], chunk[1], chunk[2], chunk[3]);\n break;\n }\n case "U": {\n const s = input.c;\n const t = input.take(8);\n if (t === false) {\n return false;\n }\n const tc = protoInt64.uEnc(s + t);\n const chunk = new Uint8Array(8);\n const view = new DataView(chunk.buffer);\n view.setInt32(0, tc.lo, true);\n view.setInt32(4, tc.hi, true);\n b.push(chunk[0], chunk[1], chunk[2], chunk[3], chunk[4], chunk[5], chunk[6], chunk[7]);\n break;\n }\n }\n }\n break;\n default:\n b.push(input.c.charCodeAt(0));\n }\n }\n return new Uint8Array(b);\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/reflect/nested-types.js\nfunction* nestedTypes(desc) {\n switch (desc.kind) {\n case "file":\n for (const message of desc.messages) {\n yield message;\n yield* nestedTypes(message);\n }\n yield* desc.enums;\n yield* desc.services;\n yield* desc.extensions;\n break;\n case "message":\n for (const message of desc.nestedMessages) {\n yield message;\n yield* nestedTypes(message);\n }\n yield* desc.nestedEnums;\n yield* desc.nestedExtensions;\n break;\n }\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/registry.js\nfunction createFileRegistry(...args) {\n const registry = createBaseRegistry();\n if (!args.length) {\n return registry;\n }\n if ("$typeName" in args[0] && args[0].$typeName == "google.protobuf.FileDescriptorSet") {\n for (const file of args[0].file) {\n addFile(file, registry);\n }\n return registry;\n }\n if ("$typeName" in args[0]) {\n let recurseDeps = function(file) {\n const deps = [];\n for (const protoFileName of file.dependency) {\n if (registry.getFile(protoFileName) != void 0) {\n continue;\n }\n if (seen.has(protoFileName)) {\n continue;\n }\n const dep = resolve3(protoFileName);\n if (!dep) {\n throw new Error(`Unable to resolve ${protoFileName}, imported by ${file.name}`);\n }\n if ("kind" in dep) {\n registry.addFile(dep, false, true);\n } else {\n seen.add(dep.name);\n deps.push(dep);\n }\n }\n return deps.concat(...deps.map(recurseDeps));\n };\n const input = args[0];\n const resolve3 = args[1];\n const seen = /* @__PURE__ */ new Set();\n for (const file of [input, ...recurseDeps(input)].reverse()) {\n addFile(file, registry);\n }\n } else {\n for (const fileReg of args) {\n for (const file of fileReg.files) {\n registry.addFile(file);\n }\n }\n }\n return registry;\n}\nfunction createBaseRegistry() {\n const types = /* @__PURE__ */ new Map();\n const extendees = /* @__PURE__ */ new Map();\n const files = /* @__PURE__ */ new Map();\n return {\n kind: "registry",\n types,\n extendees,\n [Symbol.iterator]() {\n return types.values();\n },\n get files() {\n return files.values();\n },\n addFile(file, skipTypes, withDeps) {\n files.set(file.proto.name, file);\n if (!skipTypes) {\n for (const type of nestedTypes(file)) {\n this.add(type);\n }\n }\n if (withDeps) {\n for (const f of file.dependencies) {\n this.addFile(f, skipTypes, withDeps);\n }\n }\n },\n add(desc) {\n if (desc.kind == "extension") {\n let numberToExt = extendees.get(desc.extendee.typeName);\n if (!numberToExt) {\n extendees.set(\n desc.extendee.typeName,\n // biome-ignore lint/suspicious/noAssignInExpressions: no\n numberToExt = /* @__PURE__ */ new Map()\n );\n }\n numberToExt.set(desc.number, desc);\n }\n types.set(desc.typeName, desc);\n },\n get(typeName) {\n return types.get(typeName);\n },\n getFile(fileName) {\n return files.get(fileName);\n },\n getMessage(typeName) {\n const t = types.get(typeName);\n return (t === null || t === void 0 ? void 0 : t.kind) == "message" ? t : void 0;\n },\n getEnum(typeName) {\n const t = types.get(typeName);\n return (t === null || t === void 0 ? void 0 : t.kind) == "enum" ? t : void 0;\n },\n getExtension(typeName) {\n const t = types.get(typeName);\n return (t === null || t === void 0 ? void 0 : t.kind) == "extension" ? t : void 0;\n },\n getExtensionFor(extendee, no) {\n var _a;\n return (_a = extendees.get(extendee.typeName)) === null || _a === void 0 ? void 0 : _a.get(no);\n },\n getService(typeName) {\n const t = types.get(typeName);\n return (t === null || t === void 0 ? void 0 : t.kind) == "service" ? t : void 0;\n }\n };\n}\nvar EDITION_PROTO22 = 998;\nvar EDITION_PROTO32 = 999;\nvar EDITION_UNSTABLE = 9999;\nvar TYPE_STRING = 9;\nvar TYPE_GROUP = 10;\nvar TYPE_MESSAGE = 11;\nvar TYPE_BYTES = 12;\nvar TYPE_ENUM = 14;\nvar LABEL_REPEATED = 3;\nvar LABEL_REQUIRED = 2;\nvar JS_STRING = 1;\nvar IDEMPOTENCY_UNKNOWN = 0;\nvar EXPLICIT = 1;\nvar IMPLICIT3 = 2;\nvar LEGACY_REQUIRED = 3;\nvar PACKED = 1;\nvar DELIMITED = 2;\nvar OPEN = 1;\nvar VERIFY = 2;\nvar maximumEdition = 1001;\nvar featureDefaults = {\n // EDITION_PROTO2\n 998: {\n fieldPresence: 1,\n // EXPLICIT,\n enumType: 2,\n // CLOSED,\n repeatedFieldEncoding: 2,\n // EXPANDED,\n utf8Validation: 3,\n // NONE,\n messageEncoding: 1,\n // LENGTH_PREFIXED,\n jsonFormat: 2,\n // LEGACY_BEST_EFFORT,\n enforceNamingStyle: 2,\n // STYLE_LEGACY,\n defaultSymbolVisibility: 1\n // EXPORT_ALL,\n },\n // EDITION_PROTO3\n 999: {\n fieldPresence: 2,\n // IMPLICIT,\n enumType: 1,\n // OPEN,\n repeatedFieldEncoding: 1,\n // PACKED,\n utf8Validation: 2,\n // VERIFY,\n messageEncoding: 1,\n // LENGTH_PREFIXED,\n jsonFormat: 1,\n // ALLOW,\n enforceNamingStyle: 2,\n // STYLE_LEGACY,\n defaultSymbolVisibility: 1\n // EXPORT_ALL,\n },\n // EDITION_2023\n 1e3: {\n fieldPresence: 1,\n // EXPLICIT,\n enumType: 1,\n // OPEN,\n repeatedFieldEncoding: 1,\n // PACKED,\n utf8Validation: 2,\n // VERIFY,\n messageEncoding: 1,\n // LENGTH_PREFIXED,\n jsonFormat: 1,\n // ALLOW,\n enforceNamingStyle: 2,\n // STYLE_LEGACY,\n defaultSymbolVisibility: 1\n // EXPORT_ALL,\n },\n // EDITION_2024\n 1001: {\n fieldPresence: 1,\n // EXPLICIT,\n enumType: 1,\n // OPEN,\n repeatedFieldEncoding: 1,\n // PACKED,\n utf8Validation: 2,\n // VERIFY,\n messageEncoding: 1,\n // LENGTH_PREFIXED,\n jsonFormat: 1,\n // ALLOW,\n enforceNamingStyle: 1,\n // STYLE2024,\n defaultSymbolVisibility: 2\n // EXPORT_TOP_LEVEL,\n }\n};\nfunction addFile(proto, reg) {\n var _a, _b;\n const file = {\n kind: "file",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n edition: getFileEdition(proto),\n name: proto.name.replace(/\\.proto$/, ""),\n dependencies: findFileDependencies(proto, reg),\n enums: [],\n messages: [],\n extensions: [],\n services: [],\n toString() {\n return `file ${proto.name}`;\n }\n };\n const mapEntriesStore = /* @__PURE__ */ new Map();\n const mapEntries = {\n get(typeName) {\n return mapEntriesStore.get(typeName);\n },\n add(desc) {\n var _a2;\n assert(((_a2 = desc.proto.options) === null || _a2 === void 0 ? void 0 : _a2.mapEntry) === true);\n mapEntriesStore.set(desc.typeName, desc);\n }\n };\n for (const enumProto of proto.enumType) {\n addEnum(enumProto, file, void 0, reg);\n }\n for (const messageProto of proto.messageType) {\n addMessage(messageProto, file, void 0, reg, mapEntries);\n }\n for (const serviceProto of proto.service) {\n addService(serviceProto, file, reg);\n }\n addExtensions(file, reg);\n for (const mapEntry of mapEntriesStore.values()) {\n addFields(mapEntry, reg, mapEntries);\n }\n for (const message of file.messages) {\n addFields(message, reg, mapEntries);\n addExtensions(message, reg);\n }\n reg.addFile(file, true);\n}\nfunction addExtensions(desc, reg) {\n switch (desc.kind) {\n case "file":\n for (const proto of desc.proto.extension) {\n const ext = newField(proto, desc, reg);\n desc.extensions.push(ext);\n reg.add(ext);\n }\n break;\n case "message":\n for (const proto of desc.proto.extension) {\n const ext = newField(proto, desc, reg);\n desc.nestedExtensions.push(ext);\n reg.add(ext);\n }\n for (const message of desc.nestedMessages) {\n addExtensions(message, reg);\n }\n break;\n }\n}\nfunction addFields(message, reg, mapEntries) {\n const allOneofs = message.proto.oneofDecl.map((proto) => newOneof(proto, message));\n const oneofsSeen = /* @__PURE__ */ new Set();\n for (const proto of message.proto.field) {\n const oneof = findOneof(proto, allOneofs);\n const field = newField(proto, message, reg, oneof, mapEntries);\n message.fields.push(field);\n message.field[field.localName] = field;\n if (oneof === void 0) {\n message.members.push(field);\n } else {\n oneof.fields.push(field);\n if (!oneofsSeen.has(oneof)) {\n oneofsSeen.add(oneof);\n message.members.push(oneof);\n }\n }\n }\n for (const oneof of allOneofs.filter((o) => oneofsSeen.has(o))) {\n message.oneofs.push(oneof);\n }\n for (const child of message.nestedMessages) {\n addFields(child, reg, mapEntries);\n }\n}\nfunction addEnum(proto, file, parent, reg) {\n var _a, _b, _c, _d, _e;\n const sharedPrefix = findEnumSharedPrefix(proto.name, proto.value);\n const desc = {\n kind: "enum",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n file,\n parent,\n open: true,\n name: proto.name,\n typeName: makeTypeName(proto, parent, file),\n value: {},\n values: [],\n sharedPrefix,\n toString() {\n return `enum ${this.typeName}`;\n }\n };\n desc.open = isEnumOpen(desc);\n reg.add(desc);\n for (const p of proto.value) {\n const name = p.name;\n desc.values.push(\n // biome-ignore lint/suspicious/noAssignInExpressions: no\n desc.value[p.number] = {\n kind: "enum_value",\n proto: p,\n deprecated: (_d = (_c = p.options) === null || _c === void 0 ? void 0 : _c.deprecated) !== null && _d !== void 0 ? _d : false,\n parent: desc,\n name,\n localName: safeObjectProperty(sharedPrefix == void 0 ? name : name.substring(sharedPrefix.length)),\n number: p.number,\n toString() {\n return `enum value ${desc.typeName}.${name}`;\n }\n }\n );\n }\n ((_e = parent === null || parent === void 0 ? void 0 : parent.nestedEnums) !== null && _e !== void 0 ? _e : file.enums).push(desc);\n}\nfunction addMessage(proto, file, parent, reg, mapEntries) {\n var _a, _b, _c, _d;\n const desc = {\n kind: "message",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n file,\n parent,\n name: proto.name,\n typeName: makeTypeName(proto, parent, file),\n fields: [],\n field: {},\n oneofs: [],\n members: [],\n nestedEnums: [],\n nestedMessages: [],\n nestedExtensions: [],\n toString() {\n return `message ${this.typeName}`;\n }\n };\n if (((_c = proto.options) === null || _c === void 0 ? void 0 : _c.mapEntry) === true) {\n mapEntries.add(desc);\n } else {\n ((_d = parent === null || parent === void 0 ? void 0 : parent.nestedMessages) !== null && _d !== void 0 ? _d : file.messages).push(desc);\n reg.add(desc);\n }\n for (const enumProto of proto.enumType) {\n addEnum(enumProto, file, desc, reg);\n }\n for (const messageProto of proto.nestedType) {\n addMessage(messageProto, file, desc, reg, mapEntries);\n }\n}\nfunction addService(proto, file, reg) {\n var _a, _b;\n const desc = {\n kind: "service",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n file,\n name: proto.name,\n typeName: makeTypeName(proto, void 0, file),\n methods: [],\n method: {},\n toString() {\n return `service ${this.typeName}`;\n }\n };\n file.services.push(desc);\n reg.add(desc);\n for (const methodProto of proto.method) {\n const method = newMethod(methodProto, desc, reg);\n desc.methods.push(method);\n desc.method[method.localName] = method;\n }\n}\nfunction newMethod(proto, parent, reg) {\n var _a, _b, _c, _d;\n let methodKind;\n if (proto.clientStreaming && proto.serverStreaming) {\n methodKind = "bidi_streaming";\n } else if (proto.clientStreaming) {\n methodKind = "client_streaming";\n } else if (proto.serverStreaming) {\n methodKind = "server_streaming";\n } else {\n methodKind = "unary";\n }\n const input = reg.getMessage(trimLeadingDot(proto.inputType));\n const output = reg.getMessage(trimLeadingDot(proto.outputType));\n assert(input, `invalid MethodDescriptorProto: input_type ${proto.inputType} not found`);\n assert(output, `invalid MethodDescriptorProto: output_type ${proto.inputType} not found`);\n const name = proto.name;\n return {\n kind: "rpc",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n parent,\n name,\n localName: safeObjectProperty(name.length ? safeObjectProperty(name[0].toLowerCase() + name.substring(1)) : name),\n methodKind,\n input,\n output,\n idempotency: (_d = (_c = proto.options) === null || _c === void 0 ? void 0 : _c.idempotencyLevel) !== null && _d !== void 0 ? _d : IDEMPOTENCY_UNKNOWN,\n toString() {\n return `rpc ${parent.typeName}.${name}`;\n }\n };\n}\nfunction newOneof(proto, parent) {\n return {\n kind: "oneof",\n proto,\n deprecated: false,\n parent,\n fields: [],\n name: proto.name,\n localName: safeObjectProperty(protoCamelCase(proto.name)),\n toString() {\n return `oneof ${parent.typeName}.${this.name}`;\n }\n };\n}\nfunction newField(proto, parentOrFile, reg, oneof, mapEntries) {\n var _a, _b, _c;\n const isExtension = mapEntries === void 0;\n const field = {\n kind: "field",\n proto,\n deprecated: (_b = (_a = proto.options) === null || _a === void 0 ? void 0 : _a.deprecated) !== null && _b !== void 0 ? _b : false,\n name: proto.name,\n number: proto.number,\n scalar: void 0,\n message: void 0,\n enum: void 0,\n presence: getFieldPresence(proto, oneof, isExtension, parentOrFile),\n utf8Validation: isUtf8Validated(proto, parentOrFile),\n listKind: void 0,\n mapKind: void 0,\n mapKey: void 0,\n delimitedEncoding: void 0,\n packed: void 0,\n longAsString: false,\n getDefaultValue: void 0\n };\n if (isExtension) {\n const file = parentOrFile.kind == "file" ? parentOrFile : parentOrFile.file;\n const parent = parentOrFile.kind == "file" ? void 0 : parentOrFile;\n const typeName = makeTypeName(proto, parent, file);\n field.kind = "extension";\n field.file = file;\n field.parent = parent;\n field.oneof = void 0;\n field.typeName = typeName;\n field.jsonName = `[${typeName}]`;\n field.toString = () => `extension ${typeName}`;\n const extendee = reg.getMessage(trimLeadingDot(proto.extendee));\n assert(extendee, `invalid FieldDescriptorProto: extendee ${proto.extendee} not found`);\n field.extendee = extendee;\n } else {\n const parent = parentOrFile;\n assert(parent.kind == "message");\n field.parent = parent;\n field.oneof = oneof;\n field.localName = oneof ? protoCamelCase(proto.name) : safeObjectProperty(protoCamelCase(proto.name));\n field.jsonName = proto.jsonName;\n field.toString = () => `field ${parent.typeName}.${proto.name}`;\n }\n const label = proto.label;\n const type = proto.type;\n const jstype = (_c = proto.options) === null || _c === void 0 ? void 0 : _c.jstype;\n if (label === LABEL_REPEATED) {\n const mapEntry = type == TYPE_MESSAGE ? mapEntries === null || mapEntries === void 0 ? void 0 : mapEntries.get(trimLeadingDot(proto.typeName)) : void 0;\n if (mapEntry) {\n field.fieldKind = "map";\n const { key, value } = findMapEntryFields(mapEntry);\n field.mapKey = key.scalar;\n field.mapKind = value.fieldKind;\n field.message = value.message;\n field.delimitedEncoding = false;\n field.enum = value.enum;\n field.scalar = value.scalar;\n return field;\n }\n field.fieldKind = "list";\n switch (type) {\n case TYPE_MESSAGE:\n case TYPE_GROUP:\n field.listKind = "message";\n field.message = reg.getMessage(trimLeadingDot(proto.typeName));\n assert(field.message);\n field.delimitedEncoding = isDelimitedEncoding(proto, parentOrFile);\n break;\n case TYPE_ENUM:\n field.listKind = "enum";\n field.enum = reg.getEnum(trimLeadingDot(proto.typeName));\n assert(field.enum);\n break;\n default:\n field.listKind = "scalar";\n field.scalar = type;\n field.longAsString = jstype == JS_STRING;\n break;\n }\n field.packed = isPackedField(proto, parentOrFile);\n return field;\n }\n switch (type) {\n case TYPE_MESSAGE:\n case TYPE_GROUP:\n field.fieldKind = "message";\n field.message = reg.getMessage(trimLeadingDot(proto.typeName));\n assert(field.message, `invalid FieldDescriptorProto: type_name ${proto.typeName} not found`);\n field.delimitedEncoding = isDelimitedEncoding(proto, parentOrFile);\n field.getDefaultValue = () => void 0;\n break;\n case TYPE_ENUM: {\n const enumeration = reg.getEnum(trimLeadingDot(proto.typeName));\n assert(enumeration !== void 0, `invalid FieldDescriptorProto: type_name ${proto.typeName} not found`);\n field.fieldKind = "enum";\n field.enum = reg.getEnum(trimLeadingDot(proto.typeName));\n field.getDefaultValue = () => {\n return unsafeIsSetExplicit(proto, "defaultValue") ? parseTextFormatEnumValue(enumeration, proto.defaultValue) : void 0;\n };\n break;\n }\n default: {\n field.fieldKind = "scalar";\n field.scalar = type;\n field.longAsString = jstype == JS_STRING;\n field.getDefaultValue = () => {\n return unsafeIsSetExplicit(proto, "defaultValue") ? parseTextFormatScalarValue(type, proto.defaultValue) : void 0;\n };\n break;\n }\n }\n return field;\n}\nfunction getFileEdition(proto) {\n switch (proto.syntax) {\n case "":\n case "proto2":\n return EDITION_PROTO22;\n case "proto3":\n return EDITION_PROTO32;\n case "editions":\n if (proto.edition === EDITION_UNSTABLE) {\n return maximumEdition;\n }\n if (proto.edition in featureDefaults) {\n return proto.edition;\n }\n throw new Error(`${proto.name}: unsupported edition`);\n default:\n throw new Error(`${proto.name}: unsupported syntax "${proto.syntax}"`);\n }\n}\nfunction findFileDependencies(proto, reg) {\n return proto.dependency.map((wantName) => {\n const dep = reg.getFile(wantName);\n if (!dep) {\n throw new Error(`Cannot find ${wantName}, imported by ${proto.name}`);\n }\n return dep;\n });\n}\nfunction findEnumSharedPrefix(enumName, values) {\n const prefix = camelToSnakeCase(enumName) + "_";\n for (const value of values) {\n if (!value.name.toLowerCase().startsWith(prefix)) {\n return void 0;\n }\n const shortName = value.name.substring(prefix.length);\n if (shortName.length == 0) {\n return void 0;\n }\n if (/^\\d/.test(shortName)) {\n return void 0;\n }\n }\n return prefix;\n}\nfunction camelToSnakeCase(camel) {\n return (camel.substring(0, 1) + camel.substring(1).replace(/[A-Z]/g, (c) => "_" + c)).toLowerCase();\n}\nfunction makeTypeName(proto, parent, file) {\n let typeName;\n if (parent) {\n typeName = `${parent.typeName}.${proto.name}`;\n } else if (file.proto.package.length > 0) {\n typeName = `${file.proto.package}.${proto.name}`;\n } else {\n typeName = `${proto.name}`;\n }\n return typeName;\n}\nfunction trimLeadingDot(typeName) {\n return typeName.startsWith(".") ? typeName.substring(1) : typeName;\n}\nfunction findOneof(proto, allOneofs) {\n if (!unsafeIsSetExplicit(proto, "oneofIndex")) {\n return void 0;\n }\n if (proto.proto3Optional) {\n return void 0;\n }\n const oneof = allOneofs[proto.oneofIndex];\n assert(oneof, `invalid FieldDescriptorProto: oneof #${proto.oneofIndex} for field #${proto.number} not found`);\n return oneof;\n}\nfunction getFieldPresence(proto, oneof, isExtension, parent) {\n if (proto.label == LABEL_REQUIRED) {\n return LEGACY_REQUIRED;\n }\n if (proto.label == LABEL_REPEATED) {\n return IMPLICIT3;\n }\n if (!!oneof || proto.proto3Optional) {\n return EXPLICIT;\n }\n if (isExtension) {\n return EXPLICIT;\n }\n const resolved = resolveFeature("fieldPresence", { proto, parent });\n if (resolved == IMPLICIT3 && (proto.type == TYPE_MESSAGE || proto.type == TYPE_GROUP)) {\n return EXPLICIT;\n }\n return resolved;\n}\nfunction isPackedField(proto, parent) {\n if (proto.label != LABEL_REPEATED) {\n return false;\n }\n switch (proto.type) {\n case TYPE_STRING:\n case TYPE_BYTES:\n case TYPE_GROUP:\n case TYPE_MESSAGE:\n return false;\n }\n const o = proto.options;\n if (o && unsafeIsSetExplicit(o, "packed")) {\n return o.packed;\n }\n return PACKED == resolveFeature("repeatedFieldEncoding", {\n proto,\n parent\n });\n}\nfunction findMapEntryFields(mapEntry) {\n const key = mapEntry.fields.find((f) => f.number === 1);\n const value = mapEntry.fields.find((f) => f.number === 2);\n assert(key && key.fieldKind == "scalar" && key.scalar != ScalarType.BYTES && key.scalar != ScalarType.FLOAT && key.scalar != ScalarType.DOUBLE && value && value.fieldKind != "list" && value.fieldKind != "map");\n return { key, value };\n}\nfunction isEnumOpen(desc) {\n var _a;\n return OPEN == resolveFeature("enumType", {\n proto: desc.proto,\n parent: (_a = desc.parent) !== null && _a !== void 0 ? _a : desc.file\n });\n}\nfunction isDelimitedEncoding(proto, parent) {\n if (proto.type == TYPE_GROUP) {\n return true;\n }\n return DELIMITED == resolveFeature("messageEncoding", {\n proto,\n parent\n });\n}\nfunction isUtf8Validated(proto, parent) {\n return VERIFY == resolveFeature("utf8Validation", {\n proto,\n parent\n });\n}\nfunction resolveFeature(name, ref) {\n var _a, _b;\n const featureSet = (_a = ref.proto.options) === null || _a === void 0 ? void 0 : _a.features;\n if (featureSet) {\n const val = featureSet[name];\n if (val != 0) {\n return val;\n }\n }\n if ("kind" in ref) {\n if (ref.kind == "message") {\n return resolveFeature(name, (_b = ref.parent) !== null && _b !== void 0 ? _b : ref.file);\n }\n const editionDefaults = featureDefaults[ref.edition];\n if (!editionDefaults) {\n throw new Error(`feature default for edition ${ref.edition} not found`);\n }\n return editionDefaults[name];\n }\n return resolveFeature(name, ref.parent);\n}\nfunction assert(condition, msg) {\n if (!condition) {\n throw new Error(msg);\n }\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/codegenv2/boot.js\nfunction boot(boot2) {\n const root = bootFileDescriptorProto(boot2);\n root.messageType.forEach(restoreJsonNames);\n const reg = createFileRegistry(root, () => void 0);\n return reg.getFile(root.name);\n}\nfunction bootFileDescriptorProto(init) {\n const proto = /* @__PURE__ */ Object.create({\n syntax: "",\n edition: 0\n });\n return Object.assign(proto, Object.assign(Object.assign({ $typeName: "google.protobuf.FileDescriptorProto", dependency: [], publicDependency: [], weakDependency: [], optionDependency: [], service: [], extension: [] }, init), { messageType: init.messageType.map(bootDescriptorProto), enumType: init.enumType.map(bootEnumDescriptorProto) }));\n}\nfunction bootDescriptorProto(init) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const proto = /* @__PURE__ */ Object.create({\n visibility: 0\n });\n return Object.assign(proto, {\n $typeName: "google.protobuf.DescriptorProto",\n name: init.name,\n field: (_b = (_a = init.field) === null || _a === void 0 ? void 0 : _a.map(bootFieldDescriptorProto)) !== null && _b !== void 0 ? _b : [],\n extension: [],\n nestedType: (_d = (_c = init.nestedType) === null || _c === void 0 ? void 0 : _c.map(bootDescriptorProto)) !== null && _d !== void 0 ? _d : [],\n enumType: (_f = (_e = init.enumType) === null || _e === void 0 ? void 0 : _e.map(bootEnumDescriptorProto)) !== null && _f !== void 0 ? _f : [],\n extensionRange: (_h = (_g = init.extensionRange) === null || _g === void 0 ? void 0 : _g.map((e) => Object.assign({ $typeName: "google.protobuf.DescriptorProto.ExtensionRange" }, e))) !== null && _h !== void 0 ? _h : [],\n oneofDecl: [],\n reservedRange: [],\n reservedName: []\n });\n}\nfunction bootFieldDescriptorProto(init) {\n const proto = /* @__PURE__ */ Object.create({\n label: 1,\n typeName: "",\n extendee: "",\n defaultValue: "",\n oneofIndex: 0,\n jsonName: "",\n proto3Optional: false\n });\n return Object.assign(proto, Object.assign(Object.assign({ $typeName: "google.protobuf.FieldDescriptorProto" }, init), { options: init.options ? bootFieldOptions(init.options) : void 0 }));\n}\nfunction bootFieldOptions(init) {\n var _a, _b, _c;\n const proto = /* @__PURE__ */ Object.create({\n ctype: 0,\n packed: false,\n jstype: 0,\n lazy: false,\n unverifiedLazy: false,\n deprecated: false,\n weak: false,\n debugRedact: false,\n retention: 0\n });\n return Object.assign(proto, Object.assign(Object.assign({ $typeName: "google.protobuf.FieldOptions" }, init), { targets: (_a = init.targets) !== null && _a !== void 0 ? _a : [], editionDefaults: (_c = (_b = init.editionDefaults) === null || _b === void 0 ? void 0 : _b.map((e) => Object.assign({ $typeName: "google.protobuf.FieldOptions.EditionDefault" }, e))) !== null && _c !== void 0 ? _c : [], uninterpretedOption: [] }));\n}\nfunction bootEnumDescriptorProto(init) {\n const proto = /* @__PURE__ */ Object.create({\n visibility: 0\n });\n return Object.assign(proto, {\n $typeName: "google.protobuf.EnumDescriptorProto",\n name: init.name,\n reservedName: [],\n reservedRange: [],\n value: init.value.map((e) => Object.assign({ $typeName: "google.protobuf.EnumValueDescriptorProto" }, e))\n });\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/codegenv2/message.js\nfunction messageDesc(file, path, ...paths) {\n return paths.reduce((acc, cur) => acc.nestedMessages[cur], file.messages[path]);\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/codegenv2/enum.js\nfunction enumDesc(file, path, ...paths) {\n if (paths.length == 0) {\n return file.enums[path];\n }\n const e = paths.pop();\n return paths.reduce((acc, cur) => acc.nestedMessages[cur], file.messages[path]).nestedEnums[e];\n}\nfunction tsEnum(desc) {\n const enumObject = {};\n for (const value of desc.values) {\n enumObject[value.localName] = value.number;\n enumObject[value.number] = value.localName;\n }\n return enumObject;\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js\nvar file_google_protobuf_descriptor = /* @__PURE__ */ boot({ "name": "google/protobuf/descriptor.proto", "package": "google.protobuf", "messageType": [{ "name": "FileDescriptorSet", "field": [{ "name": "file", "number": 1, "type": 11, "label": 3, "typeName": ".google.protobuf.FileDescriptorProto" }], "extensionRange": [{ "start": 536e6, "end": 536000001 }] }, { "name": "FileDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "package", "number": 2, "type": 9, "label": 1 }, { "name": "dependency", "number": 3, "type": 9, "label": 3 }, { "name": "public_dependency", "number": 10, "type": 5, "label": 3 }, { "name": "weak_dependency", "number": 11, "type": 5, "label": 3 }, { "name": "option_dependency", "number": 15, "type": 9, "label": 3 }, { "name": "message_type", "number": 4, "type": 11, "label": 3, "typeName": ".google.protobuf.DescriptorProto" }, { "name": "enum_type", "number": 5, "type": 11, "label": 3, "typeName": ".google.protobuf.EnumDescriptorProto" }, { "name": "service", "number": 6, "type": 11, "label": 3, "typeName": ".google.protobuf.ServiceDescriptorProto" }, { "name": "extension", "number": 7, "type": 11, "label": 3, "typeName": ".google.protobuf.FieldDescriptorProto" }, { "name": "options", "number": 8, "type": 11, "label": 1, "typeName": ".google.protobuf.FileOptions" }, { "name": "source_code_info", "number": 9, "type": 11, "label": 1, "typeName": ".google.protobuf.SourceCodeInfo" }, { "name": "syntax", "number": 12, "type": 9, "label": 1 }, { "name": "edition", "number": 14, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }] }, { "name": "DescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "field", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.FieldDescriptorProto" }, { "name": "extension", "number": 6, "type": 11, "label": 3, "typeName": ".google.protobuf.FieldDescriptorProto" }, { "name": "nested_type", "number": 3, "type": 11, "label": 3, "typeName": ".google.protobuf.DescriptorProto" }, { "name": "enum_type", "number": 4, "type": 11, "label": 3, "typeName": ".google.protobuf.EnumDescriptorProto" }, { "name": "extension_range", "number": 5, "type": 11, "label": 3, "typeName": ".google.protobuf.DescriptorProto.ExtensionRange" }, { "name": "oneof_decl", "number": 8, "type": 11, "label": 3, "typeName": ".google.protobuf.OneofDescriptorProto" }, { "name": "options", "number": 7, "type": 11, "label": 1, "typeName": ".google.protobuf.MessageOptions" }, { "name": "reserved_range", "number": 9, "type": 11, "label": 3, "typeName": ".google.protobuf.DescriptorProto.ReservedRange" }, { "name": "reserved_name", "number": 10, "type": 9, "label": 3 }, { "name": "visibility", "number": 11, "type": 14, "label": 1, "typeName": ".google.protobuf.SymbolVisibility" }], "nestedType": [{ "name": "ExtensionRange", "field": [{ "name": "start", "number": 1, "type": 5, "label": 1 }, { "name": "end", "number": 2, "type": 5, "label": 1 }, { "name": "options", "number": 3, "type": 11, "label": 1, "typeName": ".google.protobuf.ExtensionRangeOptions" }] }, { "name": "ReservedRange", "field": [{ "name": "start", "number": 1, "type": 5, "label": 1 }, { "name": "end", "number": 2, "type": 5, "label": 1 }] }] }, { "name": "ExtensionRangeOptions", "field": [{ "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }, { "name": "declaration", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.ExtensionRangeOptions.Declaration", "options": { "retention": 2 } }, { "name": "features", "number": 50, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "verification", "number": 3, "type": 14, "label": 1, "typeName": ".google.protobuf.ExtensionRangeOptions.VerificationState", "defaultValue": "UNVERIFIED", "options": { "retention": 2 } }], "nestedType": [{ "name": "Declaration", "field": [{ "name": "number", "number": 1, "type": 5, "label": 1 }, { "name": "full_name", "number": 2, "type": 9, "label": 1 }, { "name": "type", "number": 3, "type": 9, "label": 1 }, { "name": "reserved", "number": 5, "type": 8, "label": 1 }, { "name": "repeated", "number": 6, "type": 8, "label": 1 }] }], "enumType": [{ "name": "VerificationState", "value": [{ "name": "DECLARATION", "number": 0 }, { "name": "UNVERIFIED", "number": 1 }] }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "FieldDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "number", "number": 3, "type": 5, "label": 1 }, { "name": "label", "number": 4, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldDescriptorProto.Label" }, { "name": "type", "number": 5, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldDescriptorProto.Type" }, { "name": "type_name", "number": 6, "type": 9, "label": 1 }, { "name": "extendee", "number": 2, "type": 9, "label": 1 }, { "name": "default_value", "number": 7, "type": 9, "label": 1 }, { "name": "oneof_index", "number": 9, "type": 5, "label": 1 }, { "name": "json_name", "number": 10, "type": 9, "label": 1 }, { "name": "options", "number": 8, "type": 11, "label": 1, "typeName": ".google.protobuf.FieldOptions" }, { "name": "proto3_optional", "number": 17, "type": 8, "label": 1 }], "enumType": [{ "name": "Type", "value": [{ "name": "TYPE_DOUBLE", "number": 1 }, { "name": "TYPE_FLOAT", "number": 2 }, { "name": "TYPE_INT64", "number": 3 }, { "name": "TYPE_UINT64", "number": 4 }, { "name": "TYPE_INT32", "number": 5 }, { "name": "TYPE_FIXED64", "number": 6 }, { "name": "TYPE_FIXED32", "number": 7 }, { "name": "TYPE_BOOL", "number": 8 }, { "name": "TYPE_STRING", "number": 9 }, { "name": "TYPE_GROUP", "number": 10 }, { "name": "TYPE_MESSAGE", "number": 11 }, { "name": "TYPE_BYTES", "number": 12 }, { "name": "TYPE_UINT32", "number": 13 }, { "name": "TYPE_ENUM", "number": 14 }, { "name": "TYPE_SFIXED32", "number": 15 }, { "name": "TYPE_SFIXED64", "number": 16 }, { "name": "TYPE_SINT32", "number": 17 }, { "name": "TYPE_SINT64", "number": 18 }] }, { "name": "Label", "value": [{ "name": "LABEL_OPTIONAL", "number": 1 }, { "name": "LABEL_REPEATED", "number": 3 }, { "name": "LABEL_REQUIRED", "number": 2 }] }] }, { "name": "OneofDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "options", "number": 2, "type": 11, "label": 1, "typeName": ".google.protobuf.OneofOptions" }] }, { "name": "EnumDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "value", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.EnumValueDescriptorProto" }, { "name": "options", "number": 3, "type": 11, "label": 1, "typeName": ".google.protobuf.EnumOptions" }, { "name": "reserved_range", "number": 4, "type": 11, "label": 3, "typeName": ".google.protobuf.EnumDescriptorProto.EnumReservedRange" }, { "name": "reserved_name", "number": 5, "type": 9, "label": 3 }, { "name": "visibility", "number": 6, "type": 14, "label": 1, "typeName": ".google.protobuf.SymbolVisibility" }], "nestedType": [{ "name": "EnumReservedRange", "field": [{ "name": "start", "number": 1, "type": 5, "label": 1 }, { "name": "end", "number": 2, "type": 5, "label": 1 }] }] }, { "name": "EnumValueDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "number", "number": 2, "type": 5, "label": 1 }, { "name": "options", "number": 3, "type": 11, "label": 1, "typeName": ".google.protobuf.EnumValueOptions" }] }, { "name": "ServiceDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "method", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.MethodDescriptorProto" }, { "name": "options", "number": 3, "type": 11, "label": 1, "typeName": ".google.protobuf.ServiceOptions" }] }, { "name": "MethodDescriptorProto", "field": [{ "name": "name", "number": 1, "type": 9, "label": 1 }, { "name": "input_type", "number": 2, "type": 9, "label": 1 }, { "name": "output_type", "number": 3, "type": 9, "label": 1 }, { "name": "options", "number": 4, "type": 11, "label": 1, "typeName": ".google.protobuf.MethodOptions" }, { "name": "client_streaming", "number": 5, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "server_streaming", "number": 6, "type": 8, "label": 1, "defaultValue": "false" }] }, { "name": "FileOptions", "field": [{ "name": "java_package", "number": 1, "type": 9, "label": 1 }, { "name": "java_outer_classname", "number": 8, "type": 9, "label": 1 }, { "name": "java_multiple_files", "number": 10, "type": 8, "label": 1, "defaultValue": "false", "options": {} }, { "name": "java_generate_equals_and_hash", "number": 20, "type": 8, "label": 1, "options": { "deprecated": true } }, { "name": "java_string_check_utf8", "number": 27, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "optimize_for", "number": 9, "type": 14, "label": 1, "typeName": ".google.protobuf.FileOptions.OptimizeMode", "defaultValue": "SPEED" }, { "name": "go_package", "number": 11, "type": 9, "label": 1 }, { "name": "cc_generic_services", "number": 16, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "java_generic_services", "number": 17, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "py_generic_services", "number": 18, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "deprecated", "number": 23, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "cc_enable_arenas", "number": 31, "type": 8, "label": 1, "defaultValue": "true" }, { "name": "objc_class_prefix", "number": 36, "type": 9, "label": 1 }, { "name": "csharp_namespace", "number": 37, "type": 9, "label": 1 }, { "name": "swift_prefix", "number": 39, "type": 9, "label": 1 }, { "name": "php_class_prefix", "number": 40, "type": 9, "label": 1 }, { "name": "php_namespace", "number": 41, "type": 9, "label": 1 }, { "name": "php_metadata_namespace", "number": 44, "type": 9, "label": 1 }, { "name": "ruby_package", "number": 45, "type": 9, "label": 1 }, { "name": "features", "number": 50, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "enumType": [{ "name": "OptimizeMode", "value": [{ "name": "SPEED", "number": 1 }, { "name": "CODE_SIZE", "number": 2 }, { "name": "LITE_RUNTIME", "number": 3 }] }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "MessageOptions", "field": [{ "name": "message_set_wire_format", "number": 1, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "no_standard_descriptor_accessor", "number": 2, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "deprecated", "number": 3, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "map_entry", "number": 7, "type": 8, "label": 1 }, { "name": "deprecated_legacy_json_field_conflicts", "number": 11, "type": 8, "label": 1, "options": { "deprecated": true } }, { "name": "features", "number": 12, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "FieldOptions", "field": [{ "name": "ctype", "number": 1, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldOptions.CType", "defaultValue": "STRING" }, { "name": "packed", "number": 2, "type": 8, "label": 1 }, { "name": "jstype", "number": 6, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldOptions.JSType", "defaultValue": "JS_NORMAL" }, { "name": "lazy", "number": 5, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "unverified_lazy", "number": 15, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "deprecated", "number": 3, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "weak", "number": 10, "type": 8, "label": 1, "defaultValue": "false", "options": { "deprecated": true } }, { "name": "debug_redact", "number": 16, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "retention", "number": 17, "type": 14, "label": 1, "typeName": ".google.protobuf.FieldOptions.OptionRetention" }, { "name": "targets", "number": 19, "type": 14, "label": 3, "typeName": ".google.protobuf.FieldOptions.OptionTargetType" }, { "name": "edition_defaults", "number": 20, "type": 11, "label": 3, "typeName": ".google.protobuf.FieldOptions.EditionDefault" }, { "name": "features", "number": 21, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "feature_support", "number": 22, "type": 11, "label": 1, "typeName": ".google.protobuf.FieldOptions.FeatureSupport" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "nestedType": [{ "name": "EditionDefault", "field": [{ "name": "edition", "number": 3, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "value", "number": 2, "type": 9, "label": 1 }] }, { "name": "FeatureSupport", "field": [{ "name": "edition_introduced", "number": 1, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "edition_deprecated", "number": 2, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "deprecation_warning", "number": 3, "type": 9, "label": 1 }, { "name": "edition_removed", "number": 4, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "removal_error", "number": 5, "type": 9, "label": 1 }] }], "enumType": [{ "name": "CType", "value": [{ "name": "STRING", "number": 0 }, { "name": "CORD", "number": 1 }, { "name": "STRING_PIECE", "number": 2 }] }, { "name": "JSType", "value": [{ "name": "JS_NORMAL", "number": 0 }, { "name": "JS_STRING", "number": 1 }, { "name": "JS_NUMBER", "number": 2 }] }, { "name": "OptionRetention", "value": [{ "name": "RETENTION_UNKNOWN", "number": 0 }, { "name": "RETENTION_RUNTIME", "number": 1 }, { "name": "RETENTION_SOURCE", "number": 2 }] }, { "name": "OptionTargetType", "value": [{ "name": "TARGET_TYPE_UNKNOWN", "number": 0 }, { "name": "TARGET_TYPE_FILE", "number": 1 }, { "name": "TARGET_TYPE_EXTENSION_RANGE", "number": 2 }, { "name": "TARGET_TYPE_MESSAGE", "number": 3 }, { "name": "TARGET_TYPE_FIELD", "number": 4 }, { "name": "TARGET_TYPE_ONEOF", "number": 5 }, { "name": "TARGET_TYPE_ENUM", "number": 6 }, { "name": "TARGET_TYPE_ENUM_ENTRY", "number": 7 }, { "name": "TARGET_TYPE_SERVICE", "number": 8 }, { "name": "TARGET_TYPE_METHOD", "number": 9 }] }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "OneofOptions", "field": [{ "name": "features", "number": 1, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "EnumOptions", "field": [{ "name": "allow_alias", "number": 2, "type": 8, "label": 1 }, { "name": "deprecated", "number": 3, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "deprecated_legacy_json_field_conflicts", "number": 6, "type": 8, "label": 1, "options": { "deprecated": true } }, { "name": "features", "number": 7, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "EnumValueOptions", "field": [{ "name": "deprecated", "number": 1, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "features", "number": 2, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "debug_redact", "number": 3, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "feature_support", "number": 4, "type": 11, "label": 1, "typeName": ".google.protobuf.FieldOptions.FeatureSupport" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "ServiceOptions", "field": [{ "name": "features", "number": 34, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "deprecated", "number": 33, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "MethodOptions", "field": [{ "name": "deprecated", "number": 33, "type": 8, "label": 1, "defaultValue": "false" }, { "name": "idempotency_level", "number": 34, "type": 14, "label": 1, "typeName": ".google.protobuf.MethodOptions.IdempotencyLevel", "defaultValue": "IDEMPOTENCY_UNKNOWN" }, { "name": "features", "number": 35, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "uninterpreted_option", "number": 999, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption" }], "enumType": [{ "name": "IdempotencyLevel", "value": [{ "name": "IDEMPOTENCY_UNKNOWN", "number": 0 }, { "name": "NO_SIDE_EFFECTS", "number": 1 }, { "name": "IDEMPOTENT", "number": 2 }] }], "extensionRange": [{ "start": 1e3, "end": 536870912 }] }, { "name": "UninterpretedOption", "field": [{ "name": "name", "number": 2, "type": 11, "label": 3, "typeName": ".google.protobuf.UninterpretedOption.NamePart" }, { "name": "identifier_value", "number": 3, "type": 9, "label": 1 }, { "name": "positive_int_value", "number": 4, "type": 4, "label": 1 }, { "name": "negative_int_value", "number": 5, "type": 3, "label": 1 }, { "name": "double_value", "number": 6, "type": 1, "label": 1 }, { "name": "string_value", "number": 7, "type": 12, "label": 1 }, { "name": "aggregate_value", "number": 8, "type": 9, "label": 1 }], "nestedType": [{ "name": "NamePart", "field": [{ "name": "name_part", "number": 1, "type": 9, "label": 2 }, { "name": "is_extension", "number": 2, "type": 8, "label": 2 }] }] }, { "name": "FeatureSet", "field": [{ "name": "field_presence", "number": 1, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.FieldPresence", "options": { "retention": 1, "targets": [4, 1], "editionDefaults": [{ "value": "EXPLICIT", "edition": 900 }, { "value": "IMPLICIT", "edition": 999 }, { "value": "EXPLICIT", "edition": 1e3 }] } }, { "name": "enum_type", "number": 2, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.EnumType", "options": { "retention": 1, "targets": [6, 1], "editionDefaults": [{ "value": "CLOSED", "edition": 900 }, { "value": "OPEN", "edition": 999 }] } }, { "name": "repeated_field_encoding", "number": 3, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.RepeatedFieldEncoding", "options": { "retention": 1, "targets": [4, 1], "editionDefaults": [{ "value": "EXPANDED", "edition": 900 }, { "value": "PACKED", "edition": 999 }] } }, { "name": "utf8_validation", "number": 4, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.Utf8Validation", "options": { "retention": 1, "targets": [4, 1], "editionDefaults": [{ "value": "NONE", "edition": 900 }, { "value": "VERIFY", "edition": 999 }] } }, { "name": "message_encoding", "number": 5, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.MessageEncoding", "options": { "retention": 1, "targets": [4, 1], "editionDefaults": [{ "value": "LENGTH_PREFIXED", "edition": 900 }] } }, { "name": "json_format", "number": 6, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.JsonFormat", "options": { "retention": 1, "targets": [3, 6, 1], "editionDefaults": [{ "value": "LEGACY_BEST_EFFORT", "edition": 900 }, { "value": "ALLOW", "edition": 999 }] } }, { "name": "enforce_naming_style", "number": 7, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.EnforceNamingStyle", "options": { "retention": 2, "targets": [1, 2, 3, 4, 5, 6, 7, 8, 9], "editionDefaults": [{ "value": "STYLE_LEGACY", "edition": 900 }, { "value": "STYLE2024", "edition": 1001 }] } }, { "name": "default_symbol_visibility", "number": 8, "type": 14, "label": 1, "typeName": ".google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility", "options": { "retention": 2, "targets": [1], "editionDefaults": [{ "value": "EXPORT_ALL", "edition": 900 }, { "value": "EXPORT_TOP_LEVEL", "edition": 1001 }] } }], "nestedType": [{ "name": "VisibilityFeature", "enumType": [{ "name": "DefaultSymbolVisibility", "value": [{ "name": "DEFAULT_SYMBOL_VISIBILITY_UNKNOWN", "number": 0 }, { "name": "EXPORT_ALL", "number": 1 }, { "name": "EXPORT_TOP_LEVEL", "number": 2 }, { "name": "LOCAL_ALL", "number": 3 }, { "name": "STRICT", "number": 4 }] }] }], "enumType": [{ "name": "FieldPresence", "value": [{ "name": "FIELD_PRESENCE_UNKNOWN", "number": 0 }, { "name": "EXPLICIT", "number": 1 }, { "name": "IMPLICIT", "number": 2 }, { "name": "LEGACY_REQUIRED", "number": 3 }] }, { "name": "EnumType", "value": [{ "name": "ENUM_TYPE_UNKNOWN", "number": 0 }, { "name": "OPEN", "number": 1 }, { "name": "CLOSED", "number": 2 }] }, { "name": "RepeatedFieldEncoding", "value": [{ "name": "REPEATED_FIELD_ENCODING_UNKNOWN", "number": 0 }, { "name": "PACKED", "number": 1 }, { "name": "EXPANDED", "number": 2 }] }, { "name": "Utf8Validation", "value": [{ "name": "UTF8_VALIDATION_UNKNOWN", "number": 0 }, { "name": "VERIFY", "number": 2 }, { "name": "NONE", "number": 3 }] }, { "name": "MessageEncoding", "value": [{ "name": "MESSAGE_ENCODING_UNKNOWN", "number": 0 }, { "name": "LENGTH_PREFIXED", "number": 1 }, { "name": "DELIMITED", "number": 2 }] }, { "name": "JsonFormat", "value": [{ "name": "JSON_FORMAT_UNKNOWN", "number": 0 }, { "name": "ALLOW", "number": 1 }, { "name": "LEGACY_BEST_EFFORT", "number": 2 }] }, { "name": "EnforceNamingStyle", "value": [{ "name": "ENFORCE_NAMING_STYLE_UNKNOWN", "number": 0 }, { "name": "STYLE2024", "number": 1 }, { "name": "STYLE_LEGACY", "number": 2 }] }], "extensionRange": [{ "start": 1e3, "end": 9995 }, { "start": 9995, "end": 1e4 }, { "start": 1e4, "end": 10001 }] }, { "name": "FeatureSetDefaults", "field": [{ "name": "defaults", "number": 1, "type": 11, "label": 3, "typeName": ".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault" }, { "name": "minimum_edition", "number": 4, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "maximum_edition", "number": 5, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }], "nestedType": [{ "name": "FeatureSetEditionDefault", "field": [{ "name": "edition", "number": 3, "type": 14, "label": 1, "typeName": ".google.protobuf.Edition" }, { "name": "overridable_features", "number": 4, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }, { "name": "fixed_features", "number": 5, "type": 11, "label": 1, "typeName": ".google.protobuf.FeatureSet" }] }] }, { "name": "SourceCodeInfo", "field": [{ "name": "location", "number": 1, "type": 11, "label": 3, "typeName": ".google.protobuf.SourceCodeInfo.Location" }], "nestedType": [{ "name": "Location", "field": [{ "name": "path", "number": 1, "type": 5, "label": 3, "options": { "packed": true } }, { "name": "span", "number": 2, "type": 5, "label": 3, "options": { "packed": true } }, { "name": "leading_comments", "number": 3, "type": 9, "label": 1 }, { "name": "trailing_comments", "number": 4, "type": 9, "label": 1 }, { "name": "leading_detached_comments", "number": 6, "type": 9, "label": 3 }] }], "extensionRange": [{ "start": 536e6, "end": 536000001 }] }, { "name": "GeneratedCodeInfo", "field": [{ "name": "annotation", "number": 1, "type": 11, "label": 3, "typeName": ".google.protobuf.GeneratedCodeInfo.Annotation" }], "nestedType": [{ "name": "Annotation", "field": [{ "name": "path", "number": 1, "type": 5, "label": 3, "options": { "packed": true } }, { "name": "source_file", "number": 2, "type": 9, "label": 1 }, { "name": "begin", "number": 3, "type": 5, "label": 1 }, { "name": "end", "number": 4, "type": 5, "label": 1 }, { "name": "semantic", "number": 5, "type": 14, "label": 1, "typeName": ".google.protobuf.GeneratedCodeInfo.Annotation.Semantic" }], "enumType": [{ "name": "Semantic", "value": [{ "name": "NONE", "number": 0 }, { "name": "SET", "number": 1 }, { "name": "ALIAS", "number": 2 }] }] }] }], "enumType": [{ "name": "Edition", "value": [{ "name": "EDITION_UNKNOWN", "number": 0 }, { "name": "EDITION_LEGACY", "number": 900 }, { "name": "EDITION_PROTO2", "number": 998 }, { "name": "EDITION_PROTO3", "number": 999 }, { "name": "EDITION_2023", "number": 1e3 }, { "name": "EDITION_2024", "number": 1001 }, { "name": "EDITION_UNSTABLE", "number": 9999 }, { "name": "EDITION_1_TEST_ONLY", "number": 1 }, { "name": "EDITION_2_TEST_ONLY", "number": 2 }, { "name": "EDITION_99997_TEST_ONLY", "number": 99997 }, { "name": "EDITION_99998_TEST_ONLY", "number": 99998 }, { "name": "EDITION_99999_TEST_ONLY", "number": 99999 }, { "name": "EDITION_MAX", "number": 2147483647 }] }, { "name": "SymbolVisibility", "value": [{ "name": "VISIBILITY_UNSET", "number": 0 }, { "name": "VISIBILITY_LOCAL", "number": 1 }, { "name": "VISIBILITY_EXPORT", "number": 2 }] }] });\nvar FileDescriptorProtoSchema = /* @__PURE__ */ messageDesc(file_google_protobuf_descriptor, 1);\nvar ExtensionRangeOptions_VerificationState;\n(function(ExtensionRangeOptions_VerificationState2) {\n ExtensionRangeOptions_VerificationState2[ExtensionRangeOptions_VerificationState2["DECLARATION"] = 0] = "DECLARATION";\n ExtensionRangeOptions_VerificationState2[ExtensionRangeOptions_VerificationState2["UNVERIFIED"] = 1] = "UNVERIFIED";\n})(ExtensionRangeOptions_VerificationState || (ExtensionRangeOptions_VerificationState = {}));\nvar FieldDescriptorProto_Type;\n(function(FieldDescriptorProto_Type2) {\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["DOUBLE"] = 1] = "DOUBLE";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["FLOAT"] = 2] = "FLOAT";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["INT64"] = 3] = "INT64";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["UINT64"] = 4] = "UINT64";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["INT32"] = 5] = "INT32";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["FIXED64"] = 6] = "FIXED64";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["FIXED32"] = 7] = "FIXED32";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["BOOL"] = 8] = "BOOL";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["STRING"] = 9] = "STRING";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["GROUP"] = 10] = "GROUP";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["MESSAGE"] = 11] = "MESSAGE";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["BYTES"] = 12] = "BYTES";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["UINT32"] = 13] = "UINT32";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["ENUM"] = 14] = "ENUM";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["SFIXED32"] = 15] = "SFIXED32";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["SFIXED64"] = 16] = "SFIXED64";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["SINT32"] = 17] = "SINT32";\n FieldDescriptorProto_Type2[FieldDescriptorProto_Type2["SINT64"] = 18] = "SINT64";\n})(FieldDescriptorProto_Type || (FieldDescriptorProto_Type = {}));\nvar FieldDescriptorProto_Label;\n(function(FieldDescriptorProto_Label2) {\n FieldDescriptorProto_Label2[FieldDescriptorProto_Label2["OPTIONAL"] = 1] = "OPTIONAL";\n FieldDescriptorProto_Label2[FieldDescriptorProto_Label2["REPEATED"] = 3] = "REPEATED";\n FieldDescriptorProto_Label2[FieldDescriptorProto_Label2["REQUIRED"] = 2] = "REQUIRED";\n})(FieldDescriptorProto_Label || (FieldDescriptorProto_Label = {}));\nvar FileOptions_OptimizeMode;\n(function(FileOptions_OptimizeMode2) {\n FileOptions_OptimizeMode2[FileOptions_OptimizeMode2["SPEED"] = 1] = "SPEED";\n FileOptions_OptimizeMode2[FileOptions_OptimizeMode2["CODE_SIZE"] = 2] = "CODE_SIZE";\n FileOptions_OptimizeMode2[FileOptions_OptimizeMode2["LITE_RUNTIME"] = 3] = "LITE_RUNTIME";\n})(FileOptions_OptimizeMode || (FileOptions_OptimizeMode = {}));\nvar FieldOptions_CType;\n(function(FieldOptions_CType2) {\n FieldOptions_CType2[FieldOptions_CType2["STRING"] = 0] = "STRING";\n FieldOptions_CType2[FieldOptions_CType2["CORD"] = 1] = "CORD";\n FieldOptions_CType2[FieldOptions_CType2["STRING_PIECE"] = 2] = "STRING_PIECE";\n})(FieldOptions_CType || (FieldOptions_CType = {}));\nvar FieldOptions_JSType;\n(function(FieldOptions_JSType2) {\n FieldOptions_JSType2[FieldOptions_JSType2["JS_NORMAL"] = 0] = "JS_NORMAL";\n FieldOptions_JSType2[FieldOptions_JSType2["JS_STRING"] = 1] = "JS_STRING";\n FieldOptions_JSType2[FieldOptions_JSType2["JS_NUMBER"] = 2] = "JS_NUMBER";\n})(FieldOptions_JSType || (FieldOptions_JSType = {}));\nvar FieldOptions_OptionRetention;\n(function(FieldOptions_OptionRetention2) {\n FieldOptions_OptionRetention2[FieldOptions_OptionRetention2["RETENTION_UNKNOWN"] = 0] = "RETENTION_UNKNOWN";\n FieldOptions_OptionRetention2[FieldOptions_OptionRetention2["RETENTION_RUNTIME"] = 1] = "RETENTION_RUNTIME";\n FieldOptions_OptionRetention2[FieldOptions_OptionRetention2["RETENTION_SOURCE"] = 2] = "RETENTION_SOURCE";\n})(FieldOptions_OptionRetention || (FieldOptions_OptionRetention = {}));\nvar FieldOptions_OptionTargetType;\n(function(FieldOptions_OptionTargetType2) {\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_UNKNOWN"] = 0] = "TARGET_TYPE_UNKNOWN";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_FILE"] = 1] = "TARGET_TYPE_FILE";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_EXTENSION_RANGE"] = 2] = "TARGET_TYPE_EXTENSION_RANGE";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_MESSAGE"] = 3] = "TARGET_TYPE_MESSAGE";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_FIELD"] = 4] = "TARGET_TYPE_FIELD";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_ONEOF"] = 5] = "TARGET_TYPE_ONEOF";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_ENUM"] = 6] = "TARGET_TYPE_ENUM";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_ENUM_ENTRY"] = 7] = "TARGET_TYPE_ENUM_ENTRY";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_SERVICE"] = 8] = "TARGET_TYPE_SERVICE";\n FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2["TARGET_TYPE_METHOD"] = 9] = "TARGET_TYPE_METHOD";\n})(FieldOptions_OptionTargetType || (FieldOptions_OptionTargetType = {}));\nvar MethodOptions_IdempotencyLevel;\n(function(MethodOptions_IdempotencyLevel2) {\n MethodOptions_IdempotencyLevel2[MethodOptions_IdempotencyLevel2["IDEMPOTENCY_UNKNOWN"] = 0] = "IDEMPOTENCY_UNKNOWN";\n MethodOptions_IdempotencyLevel2[MethodOptions_IdempotencyLevel2["NO_SIDE_EFFECTS"] = 1] = "NO_SIDE_EFFECTS";\n MethodOptions_IdempotencyLevel2[MethodOptions_IdempotencyLevel2["IDEMPOTENT"] = 2] = "IDEMPOTENT";\n})(MethodOptions_IdempotencyLevel || (MethodOptions_IdempotencyLevel = {}));\nvar FeatureSet_VisibilityFeature_DefaultSymbolVisibility;\n(function(FeatureSet_VisibilityFeature_DefaultSymbolVisibility2) {\n FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2["DEFAULT_SYMBOL_VISIBILITY_UNKNOWN"] = 0] = "DEFAULT_SYMBOL_VISIBILITY_UNKNOWN";\n FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2["EXPORT_ALL"] = 1] = "EXPORT_ALL";\n FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2["EXPORT_TOP_LEVEL"] = 2] = "EXPORT_TOP_LEVEL";\n FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2["LOCAL_ALL"] = 3] = "LOCAL_ALL";\n FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2["STRICT"] = 4] = "STRICT";\n})(FeatureSet_VisibilityFeature_DefaultSymbolVisibility || (FeatureSet_VisibilityFeature_DefaultSymbolVisibility = {}));\nvar FeatureSet_FieldPresence;\n(function(FeatureSet_FieldPresence2) {\n FeatureSet_FieldPresence2[FeatureSet_FieldPresence2["FIELD_PRESENCE_UNKNOWN"] = 0] = "FIELD_PRESENCE_UNKNOWN";\n FeatureSet_FieldPresence2[FeatureSet_FieldPresence2["EXPLICIT"] = 1] = "EXPLICIT";\n FeatureSet_FieldPresence2[FeatureSet_FieldPresence2["IMPLICIT"] = 2] = "IMPLICIT";\n FeatureSet_FieldPresence2[FeatureSet_FieldPresence2["LEGACY_REQUIRED"] = 3] = "LEGACY_REQUIRED";\n})(FeatureSet_FieldPresence || (FeatureSet_FieldPresence = {}));\nvar FeatureSet_EnumType;\n(function(FeatureSet_EnumType2) {\n FeatureSet_EnumType2[FeatureSet_EnumType2["ENUM_TYPE_UNKNOWN"] = 0] = "ENUM_TYPE_UNKNOWN";\n FeatureSet_EnumType2[FeatureSet_EnumType2["OPEN"] = 1] = "OPEN";\n FeatureSet_EnumType2[FeatureSet_EnumType2["CLOSED"] = 2] = "CLOSED";\n})(FeatureSet_EnumType || (FeatureSet_EnumType = {}));\nvar FeatureSet_RepeatedFieldEncoding;\n(function(FeatureSet_RepeatedFieldEncoding2) {\n FeatureSet_RepeatedFieldEncoding2[FeatureSet_RepeatedFieldEncoding2["REPEATED_FIELD_ENCODING_UNKNOWN"] = 0] = "REPEATED_FIELD_ENCODING_UNKNOWN";\n FeatureSet_RepeatedFieldEncoding2[FeatureSet_RepeatedFieldEncoding2["PACKED"] = 1] = "PACKED";\n FeatureSet_RepeatedFieldEncoding2[FeatureSet_RepeatedFieldEncoding2["EXPANDED"] = 2] = "EXPANDED";\n})(FeatureSet_RepeatedFieldEncoding || (FeatureSet_RepeatedFieldEncoding = {}));\nvar FeatureSet_Utf8Validation;\n(function(FeatureSet_Utf8Validation2) {\n FeatureSet_Utf8Validation2[FeatureSet_Utf8Validation2["UTF8_VALIDATION_UNKNOWN"] = 0] = "UTF8_VALIDATION_UNKNOWN";\n FeatureSet_Utf8Validation2[FeatureSet_Utf8Validation2["VERIFY"] = 2] = "VERIFY";\n FeatureSet_Utf8Validation2[FeatureSet_Utf8Validation2["NONE"] = 3] = "NONE";\n})(FeatureSet_Utf8Validation || (FeatureSet_Utf8Validation = {}));\nvar FeatureSet_MessageEncoding;\n(function(FeatureSet_MessageEncoding2) {\n FeatureSet_MessageEncoding2[FeatureSet_MessageEncoding2["MESSAGE_ENCODING_UNKNOWN"] = 0] = "MESSAGE_ENCODING_UNKNOWN";\n FeatureSet_MessageEncoding2[FeatureSet_MessageEncoding2["LENGTH_PREFIXED"] = 1] = "LENGTH_PREFIXED";\n FeatureSet_MessageEncoding2[FeatureSet_MessageEncoding2["DELIMITED"] = 2] = "DELIMITED";\n})(FeatureSet_MessageEncoding || (FeatureSet_MessageEncoding = {}));\nvar FeatureSet_JsonFormat;\n(function(FeatureSet_JsonFormat2) {\n FeatureSet_JsonFormat2[FeatureSet_JsonFormat2["JSON_FORMAT_UNKNOWN"] = 0] = "JSON_FORMAT_UNKNOWN";\n FeatureSet_JsonFormat2[FeatureSet_JsonFormat2["ALLOW"] = 1] = "ALLOW";\n FeatureSet_JsonFormat2[FeatureSet_JsonFormat2["LEGACY_BEST_EFFORT"] = 2] = "LEGACY_BEST_EFFORT";\n})(FeatureSet_JsonFormat || (FeatureSet_JsonFormat = {}));\nvar FeatureSet_EnforceNamingStyle;\n(function(FeatureSet_EnforceNamingStyle2) {\n FeatureSet_EnforceNamingStyle2[FeatureSet_EnforceNamingStyle2["ENFORCE_NAMING_STYLE_UNKNOWN"] = 0] = "ENFORCE_NAMING_STYLE_UNKNOWN";\n FeatureSet_EnforceNamingStyle2[FeatureSet_EnforceNamingStyle2["STYLE2024"] = 1] = "STYLE2024";\n FeatureSet_EnforceNamingStyle2[FeatureSet_EnforceNamingStyle2["STYLE_LEGACY"] = 2] = "STYLE_LEGACY";\n})(FeatureSet_EnforceNamingStyle || (FeatureSet_EnforceNamingStyle = {}));\nvar GeneratedCodeInfo_Annotation_Semantic;\n(function(GeneratedCodeInfo_Annotation_Semantic2) {\n GeneratedCodeInfo_Annotation_Semantic2[GeneratedCodeInfo_Annotation_Semantic2["NONE"] = 0] = "NONE";\n GeneratedCodeInfo_Annotation_Semantic2[GeneratedCodeInfo_Annotation_Semantic2["SET"] = 1] = "SET";\n GeneratedCodeInfo_Annotation_Semantic2[GeneratedCodeInfo_Annotation_Semantic2["ALIAS"] = 2] = "ALIAS";\n})(GeneratedCodeInfo_Annotation_Semantic || (GeneratedCodeInfo_Annotation_Semantic = {}));\nvar Edition;\n(function(Edition2) {\n Edition2[Edition2["EDITION_UNKNOWN"] = 0] = "EDITION_UNKNOWN";\n Edition2[Edition2["EDITION_LEGACY"] = 900] = "EDITION_LEGACY";\n Edition2[Edition2["EDITION_PROTO2"] = 998] = "EDITION_PROTO2";\n Edition2[Edition2["EDITION_PROTO3"] = 999] = "EDITION_PROTO3";\n Edition2[Edition2["EDITION_2023"] = 1e3] = "EDITION_2023";\n Edition2[Edition2["EDITION_2024"] = 1001] = "EDITION_2024";\n Edition2[Edition2["EDITION_UNSTABLE"] = 9999] = "EDITION_UNSTABLE";\n Edition2[Edition2["EDITION_1_TEST_ONLY"] = 1] = "EDITION_1_TEST_ONLY";\n Edition2[Edition2["EDITION_2_TEST_ONLY"] = 2] = "EDITION_2_TEST_ONLY";\n Edition2[Edition2["EDITION_99997_TEST_ONLY"] = 99997] = "EDITION_99997_TEST_ONLY";\n Edition2[Edition2["EDITION_99998_TEST_ONLY"] = 99998] = "EDITION_99998_TEST_ONLY";\n Edition2[Edition2["EDITION_99999_TEST_ONLY"] = 99999] = "EDITION_99999_TEST_ONLY";\n Edition2[Edition2["EDITION_MAX"] = 2147483647] = "EDITION_MAX";\n})(Edition || (Edition = {}));\nvar SymbolVisibility;\n(function(SymbolVisibility2) {\n SymbolVisibility2[SymbolVisibility2["VISIBILITY_UNSET"] = 0] = "VISIBILITY_UNSET";\n SymbolVisibility2[SymbolVisibility2["VISIBILITY_LOCAL"] = 1] = "VISIBILITY_LOCAL";\n SymbolVisibility2[SymbolVisibility2["VISIBILITY_EXPORT"] = 2] = "VISIBILITY_EXPORT";\n})(SymbolVisibility || (SymbolVisibility = {}));\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/from-binary.js\nfunction makeReadContext(options) {\n return Object.assign(Object.assign({ readUnknownFields: true, recursionLimit: 100 }, options), { depth: 0 });\n}\nfunction fromBinary(schema, bytes, options) {\n const msg = reflect(schema, void 0, false);\n readMessage(msg, new BinaryReader(bytes), makeReadContext(options), false, bytes.byteLength);\n return msg.message;\n}\nfunction readMessage(message, reader, ctx, delimited, lengthOrDelimitedFieldNo) {\n var _a;\n if (++ctx.depth > ctx.recursionLimit) {\n throw new Error(`cannot decode ${message.desc} from binary: maximum recursion depth of ${ctx.recursionLimit} reached`);\n }\n const end = delimited ? reader.len : reader.pos + lengthOrDelimitedFieldNo;\n let fieldNo;\n let wireType;\n const unknownFields = (_a = message.getUnknown()) !== null && _a !== void 0 ? _a : [];\n while (reader.pos < end) {\n [fieldNo, wireType] = reader.tag();\n if (delimited && wireType == WireType.EndGroup) {\n break;\n }\n const field = message.findNumber(fieldNo);\n if (!field) {\n const recursionLimit = ctx.recursionLimit - ctx.depth;\n const data = reader.skip(wireType, fieldNo, recursionLimit);\n if (ctx.readUnknownFields) {\n unknownFields.push({ no: fieldNo, wireType, data });\n }\n continue;\n }\n readField(message, reader, field, wireType, ctx);\n }\n if (delimited) {\n if (wireType != WireType.EndGroup || fieldNo !== lengthOrDelimitedFieldNo) {\n throw new Error("invalid end group tag");\n }\n }\n if (unknownFields.length > 0) {\n message.setUnknown(unknownFields);\n }\n ctx.depth--;\n}\nfunction readField(message, reader, field, wireType, ctx) {\n var _a;\n switch (field.fieldKind) {\n case "scalar":\n message.set(field, readScalar(reader, field.scalar, field.utf8Validation));\n break;\n case "enum":\n const val = readScalar(reader, ScalarType.INT32);\n if (field.enum.open) {\n message.set(field, val);\n } else {\n const ok = field.enum.values.some((v) => v.number === val);\n if (ok) {\n message.set(field, val);\n } else if (ctx.readUnknownFields) {\n const bytes = [];\n varint32write(val, bytes);\n const unknownFields = (_a = message.getUnknown()) !== null && _a !== void 0 ? _a : [];\n unknownFields.push({\n no: field.number,\n wireType,\n data: new Uint8Array(bytes)\n });\n message.setUnknown(unknownFields);\n }\n }\n break;\n case "message":\n message.set(field, readMessageField(reader, ctx, field, message.get(field)));\n break;\n case "list":\n readListField(reader, wireType, message.get(field), ctx);\n break;\n case "map":\n readMapEntry(reader, message.get(field), ctx);\n break;\n }\n}\nfunction readMapEntry(reader, map, ctx) {\n const field = map.field();\n let key;\n let val;\n const len = reader.uint32();\n const end = reader.pos + len;\n while (reader.pos < end) {\n const [fieldNo] = reader.tag();\n switch (fieldNo) {\n case 1:\n key = readScalar(reader, field.mapKey, field.utf8Validation);\n break;\n case 2:\n switch (field.mapKind) {\n case "scalar":\n val = readScalar(reader, field.scalar, field.utf8Validation);\n break;\n case "enum":\n val = reader.int32();\n break;\n case "message":\n val = readMessageField(reader, ctx, field);\n break;\n }\n break;\n }\n }\n if (key === void 0) {\n key = scalarZeroValue(field.mapKey, false);\n }\n if (val === void 0) {\n switch (field.mapKind) {\n case "scalar":\n val = scalarZeroValue(field.scalar, false);\n break;\n case "enum":\n val = field.enum.values[0].number;\n break;\n case "message":\n val = reflect(field.message, void 0, false);\n break;\n }\n }\n map.set(key, val);\n}\nfunction readListField(reader, wireType, list, ctx) {\n var _a;\n const field = list.field();\n if (field.listKind === "message") {\n list.add(readMessageField(reader, ctx, field));\n return;\n }\n const scalarType = (_a = field.scalar) !== null && _a !== void 0 ? _a : ScalarType.INT32;\n const packed = wireType == WireType.LengthDelimited && scalarType != ScalarType.STRING && scalarType != ScalarType.BYTES;\n if (!packed) {\n list.add(readScalar(reader, scalarType, field.utf8Validation));\n return;\n }\n const e = reader.uint32() + reader.pos;\n while (reader.pos < e) {\n list.add(readScalar(reader, scalarType, field.utf8Validation));\n }\n}\nfunction readMessageField(reader, ctx, field, mergeMessage) {\n const delimited = field.delimitedEncoding;\n const message = mergeMessage !== null && mergeMessage !== void 0 ? mergeMessage : reflect(field.message, void 0, false);\n readMessage(message, reader, ctx, delimited, delimited ? field.number : reader.uint32());\n return message;\n}\nfunction readScalar(reader, type, validateUtf8 = false) {\n switch (type) {\n case ScalarType.STRING:\n return reader.string(validateUtf8);\n case ScalarType.BOOL:\n return reader.bool();\n case ScalarType.DOUBLE:\n return reader.double();\n case ScalarType.FLOAT:\n return reader.float();\n case ScalarType.INT32:\n return reader.int32();\n case ScalarType.INT64:\n return reader.int64();\n case ScalarType.UINT64:\n return reader.uint64();\n case ScalarType.FIXED64:\n return reader.fixed64();\n case ScalarType.BYTES:\n return reader.bytes();\n case ScalarType.FIXED32:\n return reader.fixed32();\n case ScalarType.SFIXED32:\n return reader.sfixed32();\n case ScalarType.SFIXED64:\n return reader.sfixed64();\n case ScalarType.SINT64:\n return reader.sint64();\n case ScalarType.UINT32:\n return reader.uint32();\n case ScalarType.SINT32:\n return reader.sint32();\n }\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/codegenv2/file.js\nfunction fileDesc(b64, imports) {\n var _a;\n const root = fromBinary(FileDescriptorProtoSchema, base64Decode(b64));\n root.messageType.forEach(restoreJsonNames);\n root.dependency = (_a = imports === null || imports === void 0 ? void 0 : imports.map((f) => f.proto.name)) !== null && _a !== void 0 ? _a : [];\n const reg = createFileRegistry(root, (protoFileName) => imports === null || imports === void 0 ? void 0 : imports.find((f) => f.proto.name === protoFileName));\n return reg.getFile(root.name);\n}\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/any_pb.js\nvar file_google_protobuf_any = /* @__PURE__ */ fileDesc("Chlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvEg9nb29nbGUucHJvdG9idWYiJgoDQW55EhAKCHR5cGVfdXJsGAEgASgJEg0KBXZhbHVlGAIgASgMQnYKE2NvbS5nb29nbGUucHJvdG9idWZCCEFueVByb3RvUAFaLGdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL2FueXBiogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzM");\n\n// ../../node_modules/@bufbuild/protobuf/dist/esm/to-binary.js\nvar LEGACY_REQUIRED2 = 3;\nvar writeDefaults = {\n writeUnknownFields: true\n};\nfunction makeWriteOptions(options) {\n return options ? Object.assign(Object.assign({}, writeDefaults), options) : writeDefaults;\n}\nfunction toBinary(schema, message, options) {\n return writeFields(new BinaryWriter(), makeWriteOptions(options), reflect(schema, message)).finish();\n}\nfunction writeFields(writer, opts, msg) {\n var _a;\n for (const f of msg.sortedFields) {\n if (!msg.isSet(f)) {\n if (f.presence == LEGACY_REQUIRED2) {\n throw new Error(`cannot encode ${f} to binary: required field not set`);\n }\n continue;\n }\n writeField(writer, opts, msg, f);\n }\n if (opts.writeUnknownFields) {\n for (const { no, wireType, data } of (_a = msg.getUnknown()) !== null && _a !== void 0 ? _a : []) {\n writer.tag(no, wireType).raw(data);\n }\n }\n return writer;\n}\nfunction writeField(writer, opts, msg, field) {\n var _a;\n switch (field.fieldKind) {\n case "scalar":\n case "enum":\n writeScalar(writer, msg.desc.typeName, field.name, (_a = field.scalar) !== null && _a !== void 0 ? _a : ScalarType.INT32, field.number, msg.get(field));\n break;\n case "list":\n writeListField(writer, opts, field, msg.get(field));\n break;\n case "message":\n writeMessageField(writer, opts, field, msg.get(field));\n break;\n case "map":\n for (const [key, val] of msg.get(field)) {\n writeMapEntry(writer, opts, field, key, val);\n }\n break;\n }\n}\nfunction writeScalar(writer, msgName, fieldName, scalarType, fieldNo, value) {\n writeScalarValue(writer.tag(fieldNo, writeTypeOfScalar(scalarType)), msgName, fieldName, scalarType, value);\n}\nfunction writeMessageField(writer, opts, field, message) {\n if (field.delimitedEncoding) {\n writeFields(writer.tag(field.number, WireType.StartGroup), opts, message).tag(field.number, WireType.EndGroup);\n } else {\n writeFields(writer.tag(field.number, WireType.LengthDelimited).fork(), opts, message).join();\n }\n}\nfunction writeListField(writer, opts, field, list) {\n var _a;\n if (field.listKind == "message") {\n for (const item of list) {\n writeMessageField(writer, opts, field, item);\n }\n return;\n }\n const scalarType = (_a = field.scalar) !== null && _a !== void 0 ? _a : ScalarType.INT32;\n if (field.packed) {\n if (!list.size) {\n return;\n }\n writer.tag(field.number, WireType.LengthDelimited).fork();\n for (const item of list) {\n writeScalarValue(writer, field.parent.typeName, field.name, scalarType, item);\n }\n writer.join();\n return;\n }\n for (const item of list) {\n writeScalar(writer, field.parent.typeName, field.name, scalarType, field.number, item);\n }\n}\nfunction writeMapEntry(writer, opts, field, key, value) {\n var _a;\n writer.tag(field.number, WireType.LengthDelimited).fork();\n writeScalar(writer, field.parent.typeName, field.name, field.mapKey, 1, key);\n switch (field.mapKind) {\n case "scalar":\n case "enum":\n writeScalar(writer, field.parent.typeName, field.name, (_a = field.scalar) !== null && _a !== void 0 ? _a : ScalarType.INT32, 2, value);\n break;\n case "message":\n writeFields(writer.tag(2, WireType.LengthDelimited).fork(), opts, value).join();\n break;\n }\n writer.join();\n}\nfunction writeScalarValue(writer, msgName, fieldName, type, value) {\n try {\n switch (type) {\n case ScalarType.STRING:\n writer.string(value);\n break;\n case ScalarType.BOOL:\n writer.bool(value);\n break;\n case ScalarType.DOUBLE:\n writer.double(value);\n break;\n case ScalarType.FLOAT:\n writer.float(value);\n break;\n case ScalarType.INT32:\n writer.int32(value);\n break;\n case ScalarType.INT64:\n writer.int64(value);\n break;\n case ScalarType.UINT64:\n writer.uint64(value);\n break;\n case ScalarType.FIXED64:\n writer.fixed64(value);\n break;\n case ScalarType.BYTES:\n writer.bytes(value);\n break;\n case ScalarType.FIXED32:\n writer.fixed32(value);\n break;\n case ScalarType.SFIXED32:\n writer.sfixed32(value);\n break;\n case ScalarType.SFIXED64:\n writer.sfixed64(value);\n break;\n case ScalarType.SINT64:\n writer.sint64(value);\n break;\n case ScalarType.UINT32:\n writer.uint32(value);\n break;\n case ScalarType.SINT32:\n writer.sint32(value);\n break;\n }\n } catch (e) {\n if (e instanceof Error) {\n throw new Error(`cannot encode field ${msgName}.${fieldName} to binary: ${e.message}`);\n }\n throw e;\n }\n}\nfunction writeTypeOfScalar(type) {\n switch (type) {\n case ScalarType.BYTES:\n case ScalarType.STRING:\n return WireType.LengthDelimited;\n case ScalarType.DOUBLE:\n case ScalarType.FIXED64:\n case ScalarType.SFIXED64:\n return WireType.Bit64;\n case ScalarType.FIXED32:\n case ScalarType.SFIXED32:\n case ScalarType.FLOAT:\n return WireType.Bit32;\n default:\n return WireType.Varint;\n }\n}\n\n// ../../platform-shells/node/node_kernel_machine.ts\nimport { Worker } from "node:worker_threads";\nimport { URL } from "node:url";\n\n// ../../platform-shells/node/law_preparation_queue.ts\nimport { createHash } from "node:crypto";\nimport { mkdirSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from "node:fs";\nimport { join } from "node:path";\nvar LawPreparationQueue = class {\n #directory;\n #run;\n #running = /* @__PURE__ */ new Map();\n #tail = Promise.resolve();\n constructor(directory, run) {\n this.#directory = join(directory, ".nomos-law-preparation-jobs");\n this.#run = run;\n mkdirSync(this.#directory, { recursive: true });\n }\n prepare(request) {\n const key = createHash("sha256").update(request).digest("hex");\n const pending = this.#running.get(key);\n if (pending) return pending;\n const path = join(this.#directory, key);\n writeFileSync(`${path}.staging`, request);\n renameSync(`${path}.staging`, path);\n const work = this.#tail.catch(() => {\n }).then(async () => {\n const result = await this.#run(readFileSync(path));\n rmSync(path);\n return result;\n });\n this.#tail = work;\n this.#running.set(key, work);\n void work.finally(() => {\n this.#running.delete(key);\n }).catch(() => {\n });\n return work;\n }\n async resume() {\n const results = [];\n for (const name of readdirSync(this.#directory).filter((name2) => /^[a-f0-9]{64}$/.test(name2))) {\n try {\n await this.prepare(readFileSync(join(this.#directory, name)));\n results.push({ status: "fulfilled" });\n } catch {\n results.push({ status: "rejected" });\n }\n }\n return results;\n }\n};\n\n// ../../platform-shells/node/node_kernel_machine.ts\nimport { WASI as WASI2 } from "node:wasi";\nimport { mkdtempSync as mkdtempSync2, realpathSync as realpathSync2, rmSync as rmSync3 } from "node:fs";\nimport { join as join4, resolve as resolve2 } from "node:path";\n\n// ../../node_modules/@bjorn3/browser_wasi_shim/dist/wasi_defs.js\nvar RIGHTS_FD_DATASYNC = 1 << 0;\nvar RIGHTS_FD_READ = 1 << 1;\nvar RIGHTS_FD_SEEK = 1 << 2;\nvar RIGHTS_FD_FDSTAT_SET_FLAGS = 1 << 3;\nvar RIGHTS_FD_SYNC = 1 << 4;\nvar RIGHTS_FD_TELL = 1 << 5;\nvar RIGHTS_FD_WRITE = 1 << 6;\nvar RIGHTS_FD_ADVISE = 1 << 7;\nvar RIGHTS_FD_ALLOCATE = 1 << 8;\nvar RIGHTS_PATH_CREATE_DIRECTORY = 1 << 9;\nvar RIGHTS_PATH_CREATE_FILE = 1 << 10;\nvar RIGHTS_PATH_LINK_SOURCE = 1 << 11;\nvar RIGHTS_PATH_LINK_TARGET = 1 << 12;\nvar RIGHTS_PATH_OPEN = 1 << 13;\nvar RIGHTS_FD_READDIR = 1 << 14;\nvar RIGHTS_PATH_READLINK = 1 << 15;\nvar RIGHTS_PATH_RENAME_SOURCE = 1 << 16;\nvar RIGHTS_PATH_RENAME_TARGET = 1 << 17;\nvar RIGHTS_PATH_FILESTAT_GET = 1 << 18;\nvar RIGHTS_PATH_FILESTAT_SET_SIZE = 1 << 19;\nvar RIGHTS_PATH_FILESTAT_SET_TIMES = 1 << 20;\nvar RIGHTS_FD_FILESTAT_GET = 1 << 21;\nvar RIGHTS_FD_FILESTAT_SET_SIZE = 1 << 22;\nvar RIGHTS_FD_FILESTAT_SET_TIMES = 1 << 23;\nvar RIGHTS_PATH_SYMLINK = 1 << 24;\nvar RIGHTS_PATH_REMOVE_DIRECTORY = 1 << 25;\nvar RIGHTS_PATH_UNLINK_FILE = 1 << 26;\nvar RIGHTS_POLL_FD_READWRITE = 1 << 27;\nvar RIGHTS_SOCK_SHUTDOWN = 1 << 28;\nvar FDFLAGS_APPEND = 1 << 0;\nvar FDFLAGS_DSYNC = 1 << 1;\nvar FDFLAGS_NONBLOCK = 1 << 2;\nvar FDFLAGS_RSYNC = 1 << 3;\nvar FDFLAGS_SYNC = 1 << 4;\nvar FSTFLAGS_ATIM = 1 << 0;\nvar FSTFLAGS_ATIM_NOW = 1 << 1;\nvar FSTFLAGS_MTIM = 1 << 2;\nvar FSTFLAGS_MTIM_NOW = 1 << 3;\nvar OFLAGS_CREAT = 1 << 0;\nvar OFLAGS_DIRECTORY = 1 << 1;\nvar OFLAGS_EXCL = 1 << 2;\nvar OFLAGS_TRUNC = 1 << 3;\nvar EVENTRWFLAGS_FD_READWRITE_HANGUP = 1 << 0;\nvar SUBCLOCKFLAGS_SUBSCRIPTION_CLOCK_ABSTIME = 1 << 0;\nvar RIFLAGS_RECV_PEEK = 1 << 0;\nvar RIFLAGS_RECV_WAITALL = 1 << 1;\nvar ROFLAGS_RECV_DATA_TRUNCATED = 1 << 0;\nvar SDFLAGS_RD = 1 << 0;\nvar SDFLAGS_WR = 1 << 1;\n\n// ../../node_modules/@bjorn3/browser_wasi_shim/dist/debug.js\nvar Debug = class Debug2 {\n enable(enabled) {\n this.log = createLogger(enabled === void 0 ? true : enabled, this.prefix);\n }\n get enabled() {\n return this.isEnabled;\n }\n constructor(isEnabled) {\n this.isEnabled = isEnabled;\n this.prefix = "wasi:";\n this.enable(isEnabled);\n }\n};\nfunction createLogger(enabled, prefix) {\n if (enabled) {\n const a = console.log.bind(console, "%c%s", "color: #265BA0", prefix);\n return a;\n } else {\n return () => {\n };\n }\n}\nvar debug = new Debug(false);\n\n// ../../node_modules/@bjorn3/browser_wasi_shim/dist/fd.js\nvar Inode = class _Inode {\n static issue_ino() {\n return _Inode.next_ino++;\n }\n static root_ino() {\n return 0n;\n }\n constructor() {\n this.ino = _Inode.issue_ino();\n }\n};\nInode.next_ino = 1n;\n\n// ../../adapter/amortized_memory_file.ts\nvar ADOPT_WRITE_BYTES = 64 * 1024;\n\n// ../../adapter/proto/nomos/kernel/v1/kernel_pb.js\nvar file_nomos_kernel_v1_kernel = /* @__PURE__ */ fileDesc("Chxub21vcy9rZXJuZWwvdjEva2VybmVsLnByb3RvEg9ub21vcy5rZXJuZWwudjEixgkKC0NhbGxSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIsCgRvcGVuGAogASgLMhwubm9tb3Mua2VybmVsLnYxLk9wZW5SZXF1ZXN0SAASLgoFb2ZmZXIYCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXF1ZXN0SAASLgoFcXVlcnkYDCABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0SAASMAoGb3V0Ym94GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlcXVlc3RIABIsCgRzeW5jGA4gASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZXF1ZXN0SAASMgoHY3VzdG9keRgPIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVxdWVzdEgAEkAKCWNvbmZpZ3VyZRgQIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxDb25maWd1cmF0aW9uUmVxdWVzdEgAEkgKE3NpZ25fcHJlcGFyZWRfb2ZmZXIYESABKAsyKS5ub21vcy5rZXJuZWwudjEuU2lnblByZXBhcmVkT2ZmZXJSZXF1ZXN0SAASSgoUcHJlcGFyZV9yZW1vdGVfb2ZmZXIYEiABKAsyKi5ub21vcy5rZXJuZWwudjEuUHJlcGFyZVJlbW90ZU9mZmVyUmVxdWVzdEgAEk4KFnNpZ25fb2ZmZXJfcHJlcGFyYXRpb24YEyABKAsyLC5ub21vcy5rZXJuZWwudjEuU2lnbk9mZmVyUHJlcGFyYXRpb25SZXF1ZXN0SAASTgoWc2lnbl9iaXJ0aF9jZXJ0aWZpY2F0ZRgUIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5TaWduQmlydGhDZXJ0aWZpY2F0ZVJlcXVlc3RIABJDChBzaWduaW5nX2lkZW50aXR5GBcgASgLMicubm9tb3Mua2VybmVsLnYxLlNpZ25pbmdJZGVudGl0eVJlcXVlc3RIABJWChpzaWduX2F1dGhvcml0eV9hdHRlc3RhdGlvbhgYIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5TaWduQXV0aG9yaXR5QXR0ZXN0YXRpb25SZXF1ZXN0SAASPAoNbWludF90eXBlZF9pZBgZIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5NaW50VHlwZWRJZFJlcXVlc3RIABJJChNlbmNyeXB0aW9uX2lkZW50aXR5GBogASgLMioubm9tb3Mua2VybmVsLnYxLkVuY3J5cHRpb25JZGVudGl0eVJlcXVlc3RIABI+Cg53cmFwX3Njb3BlX2tleRgbIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5XcmFwU2NvcGVLZXlSZXF1ZXN0SAASQgoQdW53cmFwX3Njb3BlX2tleRgcIAEoCzImLm5vbW9zLmtlcm5lbC52MS5VbndyYXBTY29wZUtleVJlcXVlc3RIAEILCglvcGVyYXRpb25KBAgVEBZKBAgWEBdSFGluaXRpYWxpemVfd29ya3NwYWNlUhZhcHBseV93b3Jrc3BhY2VfZWZmZWN0IoMKCgxDYWxsUmVzcG9uc2USGAoQcHJvdG9jb2xfdmVyc2lvbhgBIAEoDRISCgpyZXF1ZXN0X2lkGAIgASgJEisKB2ZhaWx1cmUYCiABKAsyGC5ub21vcy5rZXJuZWwudjEuRmFpbHVyZUgAEi0KBG9wZW4YCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT3BlblJlc3BvbnNlSAASLwoFb2ZmZXIYDCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUgAEi8KBXF1ZXJ5GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5UmVzcG9uc2VIABIxCgZvdXRib3gYDiABKAsyHy5ub21vcy5rZXJuZWwudjEuT3V0Ym94UmVzcG9uc2VIABItCgRzeW5jGA8gASgLMh0ubm9tb3Mua2VybmVsLnYxLlN5bmNSZXNwb25zZUgAEjMKB2N1c3RvZHkYECABKAsyIC5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVJlc3BvbnNlSAASQQoJY29uZmlndXJlGBEgASgLMiwubm9tb3Mua2VybmVsLnYxLktlcm5lbENvbmZpZ3VyYXRpb25SZXNwb25zZUgAEkkKE3NpZ25fcHJlcGFyZWRfb2ZmZXIYEiABKAsyKi5ub21vcy5rZXJuZWwudjEuU2lnblByZXBhcmVkT2ZmZXJSZXNwb25zZUgAEksKFHByZXBhcmVfcmVtb3RlX29mZmVyGBMgASgLMisubm9tb3Mua2VybmVsLnYxLlByZXBhcmVSZW1vdGVPZmZlclJlc3BvbnNlSAASTwoWc2lnbl9vZmZlcl9wcmVwYXJhdGlvbhgUIAEoCzItLm5vbW9zLmtlcm5lbC52MS5TaWduT2ZmZXJQcmVwYXJhdGlvblJlc3BvbnNlSAASTwoWc2lnbl9iaXJ0aF9jZXJ0aWZpY2F0ZRgVIAEoCzItLm5vbW9zLmtlcm5lbC52MS5TaWduQmlydGhDZXJ0aWZpY2F0ZVJlc3BvbnNlSAASRAoQc2lnbmluZ19pZGVudGl0eRgYIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5TaWduaW5nSWRlbnRpdHlSZXNwb25zZUgAElcKGnNpZ25fYXV0aG9yaXR5X2F0dGVzdGF0aW9uGBkgASgLMjEubm9tb3Mua2VybmVsLnYxLlNpZ25BdXRob3JpdHlBdHRlc3RhdGlvblJlc3BvbnNlSAASPQoNbWludF90eXBlZF9pZBgaIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5NaW50VHlwZWRJZFJlc3BvbnNlSAASSgoTZW5jcnlwdGlvbl9pZGVudGl0eRgbIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5FbmNyeXB0aW9uSWRlbnRpdHlSZXNwb25zZUgAEj8KDndyYXBfc2NvcGVfa2V5GBwgASgLMiUubm9tb3Mua2VybmVsLnYxLldyYXBTY29wZUtleVJlc3BvbnNlSAASQwoQdW53cmFwX3Njb3BlX2tleRgdIAEoCzInLm5vbW9zLmtlcm5lbC52MS5VbndyYXBTY29wZUtleVJlc3BvbnNlSABCCQoHb3V0Y29tZUoECBYQF0oECBcQGFIUaW5pdGlhbGl6ZV93b3Jrc3BhY2VSFmFwcGx5X3dvcmtzcGFjZV9lZmZlY3QitwIKB0ZhaWx1cmUSDAoEY29kZRgBIAEoCRIPCgdtZXNzYWdlGAIgASgJEi0KB2RldGFpbHMYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSYQoiaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzc19yZXF1aXJlZBgKIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1JlcXVpcmVkSACIAQESPwoQaGlzdG9yeV9yZXF1aXJlZBgLIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5IaXN0b3J5UmVxdWlyZWRIAYgBAUIlCiNfaWRlbnRpdHlfcHJvdmlkZXJfd2l0bmVzc19yZXF1aXJlZEITChFfaGlzdG9yeV9yZXF1aXJlZCJRCh9JZGVudGl0eVByb3ZpZGVyV2l0bmVzc1JlcXVpcmVkEhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAkSFAoMcmVxdWlyZWRfa2lkGAIgASgJIjwKDE9wZW5SZXNwb25zZRIsCgZyZXN1bHQYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QiugQKDU9mZmVyUmVzcG9uc2USMgoIYWRtaXR0ZWQYASABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJBZG1pdHRlZEgAEjAKB3JlZnVzZWQYAiABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZWZ1c2VkSAASOwoNZGVhZF9sZXR0ZXJlZBgDIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5PZmZlckRlYWRMZXR0ZXJlZEgAEjgKC3F1YXJhbnRpbmVkGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLk9mZmVyUXVhcmFudGluZWRIABJKChVibG9ja2VkX29uX2RlcGVuZGVuY3kYBSABKAsyKS5ub21vcy5rZXJuZWwudjEuT2ZmZXJCbG9ja2VkT25EZXBlbmRlbmN5SAASMgoIcHJlcGFyZWQYBiABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJQcmVwYXJlZEgAEkIKEHdvcmtzcGFjZV9lZmZlY3QYByABKAsyKC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0SWRlbnRpdHkSGwoOanVkZ2VkX2F0X2hlYWQYCCABKAlIAYgBARJNChJqdWRnbWVudF9zaWduYXR1cmUYCSABKAsyMS5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlRWZmZWN0SnVkZ21lbnRTaWduYXR1cmVCCQoHb3V0Y29tZUIRCg9fanVkZ2VkX2F0X2hlYWQifwogV29ya3NwYWNlRWZmZWN0SnVkZ21lbnRTaWduYXR1cmUSDwoHdmVyc2lvbhgBIAEoDRISCgpwdWJsaWNfa2V5GAIgASgMEhEKCWtleV9lcG9jaBgDIAEoEhIRCglzaWduYXR1cmUYBCABKAwSEAoIanVkZ21lbnQYBSABKAwiqAEKF1dvcmtzcGFjZUVmZmVjdElkZW50aXR5EhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAkSIAoYc291cmNlX3dvcmtzcGFjZV9nZW5lc2lzGAIgASgJEhgKEHRhcmdldF93b3Jrc3BhY2UYAyABKAkSIAoYdGFyZ2V0X3dvcmtzcGFjZV9nZW5lc2lzGAQgASgJEhUKDWVmZmVjdF9kaWdlc3QYBSABKAkiVwocV29ya3NwYWNlRWZmZWN0U3RhdHVzUmVxdWVzdBIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYASABKAkSFQoNZWZmZWN0X2RpZ2VzdBgCIAEoCSJRCh1Xb3Jrc3BhY2VFZmZlY3RTdGF0dXNSZXNwb25zZRIwCghqdWRnbWVudBgBIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5PZmZlclJlc3BvbnNlIoYCCiNSZWNvcmRXb3Jrc3BhY2VFZmZlY3RPdXRjb21lUmVxdWVzdBIwCgZzb3VyY2UYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhkKEXNvdXJjZV9vZmZlcl9wYXRoGAIgASgJEhUKC21haWxib3hfdXJsGAMgASgJSAASPQoRcmVjaXBpZW50X2N1c3RvZHkYBSABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0SAASMAoIanVkZ21lbnQYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZUIKCghldmlkZW5jZSJaCh5SZWNvcmRlZFdvcmtzcGFjZUVmZmVjdE91dGNvbWUSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCRIYChB0ZXJtaW5hbF9yZWZ1c2FsGAMgASgIIq4FCg1PZmZlckFkbWl0dGVkEgwKBGhlYWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEhcKCmludGVudF9vdXQYAyABKAlIAIgBARIzCgdjcmVhdGVkGAQgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEjQKCGFmZmVjdGVkGAUgAygLMiIubm9tb3Mua2VybmVsLnYxLk9mZmVyQWdncmVnYXRlUmVmEiwKBGJvcm4YBiADKAsyHi5ub21vcy5rZXJuZWwudjEuQm9ybldvcmtzcGFjZRI1Cg5iaXJ0aF9vdXRjb21lcxgHIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSNwoMa2VybmVsX3NwYW5zGAggASgLMhwubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5zSAGIAQESDwoHZHJ5X3J1bhgJIAEoCBIfChJpbnN0YWxsZWRfbGF3X2hhc2gYCiABKAlIAogBARI5CglwbGFjZW1lbnQYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuUGxhY2VtZW50QWRvcHRlZEgDiAEBEhcKD2FscmVhZHlfYXBwbGllZBgMIAEoCBI8CgxzdGF0ZV9jaGFuZ2UYDSABKAsyIS5ub21vcy5rZXJuZWwudjEuT2ZmZXJTdGF0ZUNoYW5nZUgEiAEBEkAKFGxhd192ZXJzaW9uX3dhcm5pbmdzGA4gAygLMiIubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25XYXJuaW5nQg0KC19pbnRlbnRfb3V0Qg8KDV9rZXJuZWxfc3BhbnNCFQoTX2luc3RhbGxlZF9sYXdfaGFzaEIMCgpfcGxhY2VtZW50Qg8KDV9zdGF0ZV9jaGFuZ2UiIwoLTGF3SWRlbnRpdHkSFAoMcGFja2FnZV9uYW1lGAEgASgJIiQKCkxhd1ZlcnNpb24SFgoOY2xvc3VyZV9zaGEyNTYYASABKAkiIQoPTGF3VmVyc2lvbkNsYWltEg4KBnNlbXZlchgBIAEoCSLgAgoRTGF3VmVyc2lvbldhcm5pbmcSKQoDbGF3GAEgASgLMhwubm9tb3Mua2VybmVsLnYxLkxhd0lkZW50aXR5Ei8KBW9yZGVyGAIgASgOMiAubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25PcmRlchI5Cg9pbnN0YWxsZWRfY2xhaW0YAyABKAsyIC5ub21vcy5rZXJuZWwudjEuTGF3VmVyc2lvbkNsYWltEjYKEWluc3RhbGxlZF92ZXJzaW9uGAQgASgLMhsubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb24SNgoMc2VydmVkX2NsYWltGAUgASgLMiAubm9tb3Mua2VybmVsLnYxLkxhd1ZlcnNpb25DbGFpbRIzCg5zZXJ2ZWRfdmVyc2lvbhgGIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5MYXdWZXJzaW9uEg8KB21lc3NhZ2UYByABKAkiUgoQT2ZmZXJTdGF0ZUNoYW5nZRITCgtwYXJlbnRfaGVhZBgBIAEoCRIXCg9hZ2dyZWdhdGVfdHlwZXMYAiADKAkSEAoIYXJjaGl2ZXMYAyABKAgiLQoRT2ZmZXJBZ2dyZWdhdGVSZWYSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCSIwCg1Cb3JuV29ya3NwYWNlEhEKCXdvcmtzcGFjZRgBIAEoCRIMCgRoZWFkGAIgASgJIssDCgxCaXJ0aE91dGNvbWUSFgoJd29ya3NwYWNlGAEgASgJSACIAQESMwoGc3RhdHVzGAIgASgOMiMubm9tb3Mua2VybmVsLnYxLkJpcnRoT3V0Y29tZVN0YXR1cxITCgZyZWFzb24YAyABKAlIAYgBARIRCgRjb2RlGAQgASgJSAKIAQESEAoIcmVwbGF5ZWQYBSABKAgSFQoIbGF3X2hhc2gYBiABKAlIA4gBARIdChBwYXJlbnRfd29ya3NwYWNlGAcgASgJSASIAQESHAoPY2hpbGRfd29ya3NwYWNlGAggASgJSAWIAQESJwoaY2VydGlmaWNhdGVfcmVmdXNhbF9yZWFzb24YCSABKAlIBogBARI0CgdyZWZ1c2FsGAogASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxIB4gBAUIMCgpfd29ya3NwYWNlQgkKB19yZWFzb25CBwoFX2NvZGVCCwoJX2xhd19oYXNoQhMKEV9wYXJlbnRfd29ya3NwYWNlQhIKEF9jaGlsZF93b3Jrc3BhY2VCHQobX2NlcnRpZmljYXRlX3JlZnVzYWxfcmVhc29uQgoKCF9yZWZ1c2FsIi8KEEtlcm5lbFNwYW5NZXRyaWMSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoBCKjAQoKS2VybmVsU3BhbhINCgVsYWJlbBgBIAEoCRIQCgh0b3RhbF91cxgCIAEoBBIPCgdyZWNvcmRzGAMgASgEEjEKBnBoYXNlcxgEIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuTWV0cmljEjAKBW5vdGVzGAUgAygLMiEubm9tb3Mua2VybmVsLnYxLktlcm5lbFNwYW5NZXRyaWMicQoLS2VybmVsU3BhbnMSLwoKb3BlcmF0aW9ucxgBIAMoCzIbLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuEjEKBmVuZ2luZRgCIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxTcGFuTWV0cmljImEKDURvbWFpblJlZnVzYWwSEgoKbGF3X3NoYTI1NhgBIAEoDBIRCglpbnZhcmlhbnQYAiABKAkSFQoNdHlwZV9pZGVudGl0eRgDIAEoCRISCgp2YWx1ZV91c2RhGAQgASgMIs4BCgxPZmZlclJlZnVzZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIvCgdyZWZ1c2FsGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWwSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSNgoOZG9tYWluX3JlZnVzYWwYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuRG9tYWluUmVmdXNhbEILCglfb2ZmZXJfaWQiegoRT2ZmZXJEZWFkTGV0dGVyZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZyZWFzb24YAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIq4BChBPZmZlclF1YXJhbnRpbmVkEhUKCG9mZmVyX2lkGAEgASgJSACIAQESGQoRYXV0aG9yZWRfbGF3X2hhc2gYAiABKAkSGAoQY3VycmVudF9sYXdfaGFzaBgDIAEoCRIOCgZyZWFzb24YBCABKAkSMQoLZGlhZ25vc3RpY3MYBSABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIsABChhPZmZlckJsb2NrZWRPbkRlcGVuZGVuY3kSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZkZXRhaWwYAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSPQoSYXdhaXRzX21haW50ZW5hbmNlGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlYWRJbmRleFBlbmRpbmdCCwoJX29mZmVyX2lkIr8BCg1PZmZlclByZXBhcmVkEhwKFGF1dGhvcmVkX2NoYW5nZV91c2RhGAEgASgMEhkKEXdvcmtzcGFjZV9iaW5kaW5nGAIgASgJEhgKEHByZXBhcmVkX2F0X2hlYWQYAyABKAkSIQoZYXV0aG9yX3NpZ25hdHVyZV9yZXF1aXJlZBgEIAEoCBI4CghkZXRhY2hlZBgFIAEoCzImLm5vbW9zLmtlcm5lbC52MS5EZXRhY2hlZFNpZ25pbmdJbnB1dHMiYwoVRGV0YWNoZWRTaWduaW5nSW5wdXRzEhIKCnB1YmxpY19rZXkYASABKAwSEQoJaW50ZW50X2lkGAIgASgJEg4KBmF1dGhvchgDIAEoDBITCgtvZmZlcl90b2tlbhgEIAEoCSKVAQoURGV0YWNoZWRTaWduZWRDaGFuZ2USHAoUYXV0aG9yZWRfY2hhbmdlX3VzZGEYASABKAwSEgoKcHVibGljX2tleRgCIAEoDBIYChBhdXRob3Jfc2lnbmF0dXJlGAMgASgMEhIKCm9mZmVyX2Jhc2UYBCABKAkSHQoVb2ZmZXJfdG9rZW5fc2lnbmF0dXJlGAUgASgMImoKGFNpZ25QcmVwYXJlZE9mZmVyUmVxdWVzdBIcChRhdXRob3JlZF9jaGFuZ2VfdXNkYRgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIVCg1hdXRob3Jfc2VjcmV0GAMgASgMIjcKGVNpZ25QcmVwYXJlZE9mZmVyUmVzcG9uc2USGgoSc2lnbmVkX2NoYW5nZV91c2RhGAEgASgMIq0BChlQcmVwYXJlUmVtb3RlT2ZmZXJSZXF1ZXN0EhUKDW9mZmVyX3JlcXVlc3QYASABKAwSGQoRd29ya3NwYWNlX2JpbmRpbmcYAiABKAkSGAoQcHJlcGFyZWRfYXRfaGVhZBgDIAEoCRISCgpwdWJsaWNfa2V5GAQgASgMEhEKCXNpZ25hdHVyZRgFIAEoDBIdChVyZXF1aXJlZF9jdXN0b2R5X2hlYWQYBiABKAkiUAoZT2ZmZXJQcmVwYXJhdGlvbkNoYWxsZW5nZRIZChF3b3Jrc3BhY2VfYmluZGluZxgBIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAIgASgJIpkBChpQcmVwYXJlUmVtb3RlT2ZmZXJSZXNwb25zZRI/CgljaGFsbGVuZ2UYASABKAsyKi5ub21vcy5rZXJuZWwudjEuT2ZmZXJQcmVwYXJhdGlvbkNoYWxsZW5nZUgAEi8KBW9mZmVyGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVzcG9uc2VIAEIJCgdvdXRjb21lIoABChtTaWduT2ZmZXJQcmVwYXJhdGlvblJlcXVlc3QSFQoNb2ZmZXJfcmVxdWVzdBgBIAEoDBIZChF3b3Jrc3BhY2VfYmluZGluZxgCIAEoCRIYChBwcmVwYXJlZF9hdF9oZWFkGAMgASgJEhUKDWF1dGhvcl9zZWNyZXQYBCABKAwiRQocU2lnbk9mZmVyUHJlcGFyYXRpb25SZXNwb25zZRISCgpwdWJsaWNfa2V5GAEgASgMEhEKCXNpZ25hdHVyZRgCIAEoDCKkAQoWU2lnbmluZ0lkZW50aXR5UmVxdWVzdBI7CghnZW5lcmF0ZRgBIAEoCzInLm5vbW9zLmtlcm5lbC52MS5HZW5lcmF0ZVNpZ25pbmdLZXlQYWlySAASQAoNZGVyaXZlX3B1YmxpYxgCIAEoCzInLm5vbW9zLmtlcm5lbC52MS5EZXJpdmVTaWduaW5nUHVibGljS2V5SABCCwoJb3BlcmF0aW9uIhgKFkdlbmVyYXRlU2lnbmluZ0tleVBhaXIiKAoWRGVyaXZlU2lnbmluZ1B1YmxpY0tleRIOCgZzZWNyZXQYASABKAwilgEKF1NpZ25pbmdJZGVudGl0eVJlc3BvbnNlEjQKCWdlbmVyYXRlZBgBIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5TaWduaW5nS2V5UGFpckgAEjsKDmRlcml2ZWRfcHVibGljGAIgASgLMiEubm9tb3Mua2VybmVsLnYxLlNpZ25pbmdQdWJsaWNLZXlIAEIICgZyZXN1bHQiNAoOU2lnbmluZ0tleVBhaXISDgoGc2VjcmV0GAEgASgMEhIKCnB1YmxpY19rZXkYAiABKAwiJgoQU2lnbmluZ1B1YmxpY0tleRISCgpwdWJsaWNfa2V5GAEgASgMIpwBCh9TaWduQXV0aG9yaXR5QXR0ZXN0YXRpb25SZXF1ZXN0EhUKDXNpZ25lcl9zZWNyZXQYASABKAwSGgoSYXNzZXJ0ZXJfd29ya3NwYWNlGAIgASgJEg4KBm9iamVjdBgDIAEoCRIQCghyZWxhdGlvbhgEIAEoCRIPCgdzdWJqZWN0GAUgASgJEhMKC2F0dGVzdGVkX2F0GAYgASgJIkkKIFNpZ25BdXRob3JpdHlBdHRlc3RhdGlvblJlc3BvbnNlEhEKCXNpZ25hdHVyZRgBIAEoDBISCgpwdWJsaWNfa2V5GAIgASgMIkQKEk1pbnRUeXBlZElkUmVxdWVzdBIQCgh0eXBlX3RhZxgBIAEoCRIcChRjYXB0dXJlZF91bml4X21pbGxpcxgCIAEoBCIhChNNaW50VHlwZWRJZFJlc3BvbnNlEgoKAmlkGAEgASgJIhsKGUVuY3J5cHRpb25JZGVudGl0eVJlcXVlc3QiRAoaRW5jcnlwdGlvbklkZW50aXR5UmVzcG9uc2USEgoKc2VjcmV0X2tleRgBIAEoDBISCgpwdWJsaWNfa2V5GAIgASgMIkYKE1dyYXBTY29wZUtleVJlcXVlc3QSHAoUcmVjaXBpZW50X3B1YmxpY19rZXkYASABKAwSEQoJc2NvcGVfa2V5GAIgASgMIkgKFFdyYXBTY29wZUtleVJlc3BvbnNlEhwKFGVwaGVtZXJhbF9wdWJsaWNfa2V5GAEgASgMEhIKCmNpcGhlcnRleHQYAiABKAwiZwoVVW53cmFwU2NvcGVLZXlSZXF1ZXN0EhwKFHJlY2lwaWVudF9zZWNyZXRfa2V5GAEgASgMEhwKFGVwaGVtZXJhbF9wdWJsaWNfa2V5GAIgASgMEhIKCmNpcGhlcnRleHQYAyABKAwiKwoWVW53cmFwU2NvcGVLZXlSZXNwb25zZRIRCglzY29wZV9rZXkYASABKAwikwEKDUtlcm5lbFJlZnVzYWwSMAoEY29kZRgBIAEoDjIiLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsQ29kZRIPCgdtZXNzYWdlGAIgASgJEi0KB2RldGFpbHMYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEAoIdGVybWluYWwYBCABKAgixxAKDVF1ZXJ5UmVzcG9uc2USFQoLcmVzdWx0X3VzZGEYAiABKAxIABIsCgV2YWx1ZRgBIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlSAASSgoTYXV0aG9yaXphdGlvbl9jaGVjaxgKIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZUgAEkwKFGF1dGhvcml6YXRpb25fZXhwYW5kGAsgASgLMiwubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBhbmRSZXNwb25zZUgAEj4KDW9zZ2lfcmVzb3VyY2UYDCABKAsyJS5ub21vcy5rZXJuZWwudjEuT3NnaVJlc291cmNlUmVzcG9uc2VIABJKChNmcm9udGllcl90cmFuc2l0aW9uGA0gASgLMisubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlSAASSwoUb3duZWRfZGV2aWNlX3JlcXVlc3QYDiABKAsyKy5ub21vcy5rZXJuZWwudjEuT3duZWREZXZpY2VSZXF1ZXN0UmVzcG9uc2VIABJPChZvd25lZF9wcmVwYXJlX2FwcHJvdmFsGA8gASgLMi0ubm9tb3Mua2VybmVsLnYxLk93bmVkUHJlcGFyZUFwcHJvdmFsUmVzcG9uc2VIABIXCg1pbnRlZ2VyX3ZhbHVlGBAgASgSSAASUAoWYXV0aGVudGljYXRpb25fcG9zdHVyZRgRIAEoCzIuLm5vbW9zLmtlcm5lbC52MS5BdXRoZW50aWNhdGlvblBvc3R1cmVSZXNwb25zZUgAEkgKEGNoaWxkX3dvcmtzcGFjZXMYEiABKAsyLC5ub21vcy5rZXJuZWwudjEuQ2hpbGRXb3Jrc3BhY2VRdWVyeVJlc3BvbnNlSAASWQoWYXV0aG9yaW5nX3JlcXVpcmVtZW50cxgTIAEoCzI3Lm5vbW9zLmtlcm5lbC52MS5EaXJlY3RpdmVBdXRob3JpbmdSZXF1aXJlbWVudHNSZXNwb25zZUgAEj4KDXdhcm1fcHJvZ3Jlc3MYFSABKAsyJS5ub21vcy5rZXJuZWwudjEuV2FybVByb2dyZXNzUmVzcG9uc2VIABJVChlpZGVudGl0eV9wcm92aWRlcl93aXRuZXNzGBYgASgLMjAubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzUmVzcG9uc2VIABJSChdpbnRlcmZhY2VfY29tcGF0aWJpbGl0eRgXIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVzcG9uc2VIABIyChJhcHBsaWNhdGlvbl9yZXN1bHQYGCABKAsyFC5nb29nbGUucHJvdG9idWYuQW55SAASSgoTbWFpbnRlbmFuY2VfcXVhbnR1bRgZIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5NYWludGVuYW5jZVF1YW50dW1SZXNwb25zZUgAEj8KEnJlYWRfaW5kZXhfcGVuZGluZxgaIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZWFkSW5kZXhQZW5kaW5nSAASRwoSZnVsbF9oaXN0b3J5X2F1ZGl0GBsgASgLMikubm9tb3Mua2VybmVsLnYxLkZ1bGxIaXN0b3J5QXVkaXRSZXNwb25zZUgAElMKGHdvcmtzcGFjZV9lZmZlY3RfcmVjZWlwdBgcIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UmVzcG9uc2VIABJLChRvcGVuX2FwaV9kZXNjcmlwdGlvbhgdIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5PcGVuQXBpRGVzY3JpcHRpb25SZXNwb25zZUgAElcKGmluc3RhbGxlZF9sYXdfZGVjbGFyYXRpb25zGB4gASgLMjEubm9tb3Mua2VybmVsLnYxLkluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1Jlc3BvbnNlSAASSwoYYXBwbGljYXRpb25fcmVzdWx0X2RlbHRhGB8gASgLMicubm9tb3Mua2VybmVsLnYxLkFwcGxpY2F0aW9uUmVzdWx0RGVsdGFIABJJChNyZXNvbHZlX2RvbWFpbl9wbGFuGCQgASgLMioubm9tb3Mua2VybmVsLnYxLlJlc29sdmVEb21haW5QbGFuUmVzcG9uc2VIABJJChh2ZXJpZnlfY2hhaW5fZGlhZ25vc3RpY3MYFCABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcxIcCg9yZXN1bHRfZnJvbnRpZXIYICABKAlIAYgBARJCChJmdWxsX3Jlc3VsdF9yZWFzb24YISABKA4yIS5ub21vcy5rZXJuZWwudjEuRnVsbFJlc3VsdFJlYXNvbkgCiAEBEkMKE3Jlc3VsdF9kZXBlbmRlbmNpZXMYIiABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVhZERlcGVuZGVuY2llc0gDiAEBEkAKEXJlYWRfaW5kZXhfYmVoaW5kGCMgASgLMiAubm9tb3Mua2VybmVsLnYxLlJlYWRJbmRleEJlaGluZEgEiAEBQggKBnJlc3VsdEISChBfcmVzdWx0X2Zyb250aWVyQhUKE19mdWxsX3Jlc3VsdF9yZWFzb25CFgoUX3Jlc3VsdF9kZXBlbmRlbmNpZXNCFAoSX3JlYWRfaW5kZXhfYmVoaW5kIoABCg9SZWFkSW5kZXhCZWhpbmQSEQoJd29ya3NwYWNlGAEgASgJEg4KBmJyYW5jaBgCIAEoCRIXCg9zZXJ2ZWRfZnJvbnRpZXIYAyABKAkSGgoScmVxdWVzdGVkX2Zyb250aWVyGAQgASgJEhUKDXN1Y2Nlc3Nvcl9sYXcYBSABKAgiVAoQUmVhZERlcGVuZGVuY2llcxIXCg9hZ2dyZWdhdGVfdHlwZXMYASADKAkSFgoOcmVhZHNfYXJjaGl2ZXMYAiABKAgSDwoHcmVhZF9hdBgDIAEoCSKCAQoWQXBwbGljYXRpb25SZXN1bHREZWx0YRIVCg1iYXNlX2Zyb250aWVyGAEgASgJEhAKCGZyb250aWVyGAIgASgJEioKDGNoYW5nZWRfcm93cxgDIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnkSEwoLcmVtb3ZlZF9pZHMYBCADKAkiMwoaT3BlbkFwaURlc2NyaXB0aW9uUmVzcG9uc2USFQoNZG9jdW1lbnRfanNvbhgBIAEoCSJxChtJbnRlcmZhY2VDb21wYXRpYmlsaXR5UXVlcnkSHwoXYXBwbGljYXRpb25fbWF0cml4X3VzZGEYASABKAwSMQoPY2FuZGlkYXRlX3VuaXRzGAIgAygLMhgubm9tb3Mua2VybmVsLnYxLkxhd1VuaXQisAIKFkludGVyZmFjZU1lbWJlclZlcmRpY3QSDgoGZG9tYWluGAEgASgJEjIKBGtpbmQYAiABKA4yJC5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlTWVtYmVyS2luZBIOCgZtZW1iZXIYAyABKAkSEgoFZmllbGQYBCABKAlIAIgBARI9CgZzdGF0dXMYBSABKA4yLS5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVN0YXR1cxI9CgZyZWFzb24YBiABKA4yLS5ub21vcy5rZXJuZWwudjEuSW50ZXJmYWNlQ29tcGF0aWJpbGl0eVJlYXNvbhIXCgpkaWFnbm9zdGljGAcgASgJSAGIAQFCCAoGX2ZpZWxkQg0KC19kaWFnbm9zdGljIsIBCh5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVzcG9uc2USEgoKY29tcGF0aWJsZRgBIAEoCBI4CgdtZW1iZXJzGAIgAygLMicubm9tb3Mua2VybmVsLnYxLkludGVyZmFjZU1lbWJlclZlcmRpY3QSGgoSd29ya3NwYWNlX2Zyb250aWVyGAMgASgJEhYKDmNhbmRpZGF0ZV9oYXNoGAQgASgJEh4KFmVmZmVjdGl2ZV9sYXdfaWRlbnRpdHkYBSABKAki/wEKFFdhcm1Qcm9ncmVzc1Jlc3BvbnNlEhsKE21haW50ZW5hbmNlX3BlbmRpbmcYASABKAgSJAoXcHJlcGFyZWRfY29tbWFuZF9kb21haW4YAiABKAlIAIgBARIlChhwcmVwYXJlZF9jb21tYW5kX3BhY2thZ2UYAyABKAlIAYgBARImChlwcmVwYXJlZF9jb21tYW5kX3NlbGVjdG9yGAQgASgJSAKIAQFCGgoYX3ByZXBhcmVkX2NvbW1hbmRfZG9tYWluQhsKGV9wcmVwYXJlZF9jb21tYW5kX3BhY2thZ2VCHAoaX3ByZXBhcmVkX2NvbW1hbmRfc2VsZWN0b3IibAoQUmVhZEluZGV4UGVuZGluZxIRCgl3b3Jrc3BhY2UYASABKAkSDgoGYnJhbmNoGAIgASgJEhoKEnJlcXVlc3RlZF9mcm9udGllchgDIAEoCRIZChFsYXN0X3JlYWR5X2Fic2VudBgEIAEoCSLoAgoXTWFpbnRlbmFuY2VRdWFudHVtUXVlcnkSHQoQcmVxdWVzdGVkX2RvbWFpbhgBIAEoCUgAiAEBEh4KEXJlcXVlc3RlZF9wYWNrYWdlGAIgASgJSAGIAQESIAoTcmVxdWVzdGVkX2RpcmVjdGl2ZRgDIAEoCUgCiAEBEhcKD2xvY2FsX3JlYWRfb25seRgEIAEoCBIcChRtYWludGFpbl9naXRfY3VzdG9keRgFIAEoCBIXCg9yZWFkX2luZGV4X29ubHkYBiABKAgSJAocbWFpbnRhaW5fYWRkcmVzc2VkX2Zyb250aWVycxgHIAEoCBIYChBmbHVzaF9kdXJhYmlsaXR5GAggASgIEhkKEWxvY2FsX3dyaXRlX2J1cnN0GAkgASgIQhMKEV9yZXF1ZXN0ZWRfZG9tYWluQhQKEl9yZXF1ZXN0ZWRfcGFja2FnZUIWChRfcmVxdWVzdGVkX2RpcmVjdGl2ZSKiBAoaTWFpbnRlbmFuY2VRdWFudHVtUmVzcG9uc2USEQoJd29ya3NwYWNlGAEgASgJEhsKE21haW50ZW5hbmNlX3BlbmRpbmcYAiABKAgSMAoFcGhhc2UYAyABKA4yIS5ub21vcy5rZXJuZWwudjEuTWFpbnRlbmFuY2VQaGFzZRIZCgxnaXRfZnJvbnRpZXIYBCABKAlIAIgBARIaCg1yZWFkX2Zyb250aWVyGAUgASgJSAGIAQESHAoPc3FsaXRlX2Zyb250aWVyGAYgASgJSAKIAQESEgoKd29ya191bml0cxgHIAEoBBIWCg5lbGFwc2VkX21pY3JvcxgIIAEoBBIkChdwcmVwYXJlZF9jb21tYW5kX2RvbWFpbhgJIAEoCUgDiAEBEiUKGHByZXBhcmVkX2NvbW1hbmRfcGFja2FnZRgKIAEoCUgEiAEBEiYKGXByZXBhcmVkX2NvbW1hbmRfc2VsZWN0b3IYCyABKAlIBYgBARIeChZsb29zZV9jdXN0b2R5X3ByZXNzdXJlGAwgASgIQg8KDV9naXRfZnJvbnRpZXJCEAoOX3JlYWRfZnJvbnRpZXJCEgoQX3NxbGl0ZV9mcm9udGllckIaChhfcHJlcGFyZWRfY29tbWFuZF9kb21haW5CGwoZX3ByZXBhcmVkX2NvbW1hbmRfcGFja2FnZUIcChpfcHJlcGFyZWRfY29tbWFuZF9zZWxlY3RvciJICg1Pc2dpQXR0cmlidXRlEgwKBG5hbWUYASABKAkSDQoFdmFsdWUYAiABKAkSEQoEdHlwZRgDIAEoCUgAiAEBQgcKBV90eXBlIiwKDU9zZ2lEaXJlY3RpdmUSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoCSKLAQoOT3NnaUNhcGFiaWxpdHkSEQoJbmFtZXNwYWNlGAEgASgJEjIKCmF0dHJpYnV0ZXMYAiADKAsyHi5ub21vcy5rZXJuZWwudjEuT3NnaUF0dHJpYnV0ZRIyCgpkaXJlY3RpdmVzGAMgAygLMh4ubm9tb3Mua2VybmVsLnYxLk9zZ2lEaXJlY3RpdmUijAEKD09zZ2lSZXF1aXJlbWVudBIRCgluYW1lc3BhY2UYASABKAkSMgoKYXR0cmlidXRlcxgCIAMoCzIeLm5vbW9zLmtlcm5lbC52MS5Pc2dpQXR0cmlidXRlEjIKCmRpcmVjdGl2ZXMYAyADKAsyHi5ub21vcy5rZXJuZWwudjEuT3NnaURpcmVjdGl2ZSKaAQoUT3NnaVJlc291cmNlUmVzcG9uc2USEwoLc291cmNlX3VzZGEYASABKAwSNQoMY2FwYWJpbGl0aWVzGAIgAygLMh8ubm9tb3Mua2VybmVsLnYxLk9zZ2lDYXBhYmlsaXR5EjYKDHJlcXVpcmVtZW50cxgDIAMoCzIgLm5vbW9zLmtlcm5lbC52MS5Pc2dpUmVxdWlyZW1lbnQi5wEKE1ZlcmlmeUNoYWluU3RlcFNwYW4SDQoFaW5kZXgYASABKAQSEgoKY29tbWl0X29pZBgCIAEoCRIOCgZkb21haW4YAyABKAkSEQoJZGlyZWN0aXZlGAQgASgJEhAKCHRvdGFsX3VzGAUgASgEEjYKBnBoYXNlcxgGIAEoCzImLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpblN0ZXBQaGFzZXMSQAoOZW5naW5lX3RpbWluZ3MYByADKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5FbmdpbmVUaW1pbmcimAIKFVZlcmlmeUNoYWluU3RlcFBoYXNlcxIeChZydW50aW1lX2xhd19yZWZyZXNoX3VzGAEgASgEEhMKC21hbmlmZXN0X3VzGAIgASgEEhkKEWxhd19yZXNvbHV0aW9uX3VzGAMgASgEEh0KFW1hbmFnZWRfdHJhbnNpdGlvbl91cxgEIAEoBBIUCgxwcmluY2lwYWxfdXMYBSABKAQSFAoMZXZvbHV0aW9uX3VzGAYgASgEEhoKEmNvbG9jYXRlZF9yZWFkc191cxgHIAEoBBIhChl0eXBlZF9pbnN0YWxsX3ZlcmlmaWVyX3VzGAggASgEEhQKDGFkbWlzc2lvbl91cxgJIAEoBBIPCgdmb2xkX3VzGAogASgEItoFChZWZXJpZnlDaGFpbkRpYWdub3N0aWNzEi4KBHdhbGsYASABKA4yIC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5XYWxrEhAKCHRvdGFsX3VzGAIgASgEEhsKE3JlZmVyZW5jZV9sb29rdXBfdXMYAyABKAQSGgoScmVwb3NpdG9yeV9vcGVuX3VzGAQgASgEEhUKDWNoYWluX3JlYWRfdXMYBSABKAQSFgoOZW5naW5lX2luaXRfdXMYBiABKAQSGAoQdGltZWxpbmVfcmVhZF91cxgHIAEoBBIYChBsYXdfaHlkcmF0aW9uX3VzGAggASgEEhsKE3JlY292ZXJ5X3ByZXNjYW5fdXMYCSABKAQSGAoQZm9sZF9mcm9udGllcl91cxgKIAEoBBIzCgVzdGVwcxgLIAMoCzIkLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpblN0ZXBTcGFuEkAKDmVuZ2luZV90aW1pbmdzGAwgAygLMigubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluRW5naW5lVGltaW5nEk0KFWxhd19oeWRyYXRpb25fdGltaW5ncxgNIAMoCzIuLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkxhd0h5ZHJhdGlvblRpbWluZxIZChFsYXdfY2xvc3VyZV9jb3VudBgOIAEoBBIeChZsYXdfY2xvc3VyZV9jYWNoZV9oaXRzGA8gASgEEiAKGGxhd19jbG9zdXJlX2NhY2hlX21pc3NlcxgQIAEoBBISCgpzdGVwX2NvdW50GBEgASgEEhUKDXN0ZXBfdG90YWxfdXMYEiABKAQSQQoRc3RlcF9waGFzZV90b3RhbHMYEyABKAsyJi5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5TdGVwUGhhc2VzEhoKEm9taXR0ZWRfc3RlcF9jb3VudBgUIAEoBCI6ChdWZXJpZnlDaGFpbkVuZ2luZVRpbWluZxINCgVwaGFzZRgBIAEoCRIQCgh0b3RhbF91cxgCIAEoBCJACh1WZXJpZnlDaGFpbkxhd0h5ZHJhdGlvblRpbWluZxINCgVwaGFzZRgBIAEoCRIQCgh0b3RhbF91cxgCIAEoBCKrAQoUSHR0cHNFeGVjdXRpb25Qb2xpY3kSPAoJcGxhY2VtZW50GAEgASgOMikubm9tb3Mua2VybmVsLnYxLkVmZmVjdEV4ZWN1dGlvblBsYWNlbWVudBJACgtjYXJkaW5hbGl0eRgCIAEoDjIrLm5vbW9zLmtlcm5lbC52MS5FZmZlY3RFeGVjdXRpb25DYXJkaW5hbGl0eRITCgtsYXdfY2xvc3VyZRgDIAEoCSJbChJIdHRwc091dGJvdW5kUm91dGUSCwoDdXJsGAEgASgJEjgKCWV4ZWN1dGlvbhgCIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5IdHRwc0V4ZWN1dGlvblBvbGljeSIrChZXb3Jrc3BhY2VPdXRib3VuZFJvdXRlEhEKCXdvcmtzcGFjZRgBIAEoCSKFAgoVQ2FycmllZFdvcmtzcGFjZU9mZmVyEjAKBnNvdXJjZRgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSFQoNc291cmNlX2NvbW1pdBgCIAEoCRIZChFzb3VyY2Vfb2ZmZXJfcGF0aBgDIAEoCRIcChRzb3VyY2VfZXZpZGVuY2VfcGFjaxgFIAEoDBIjChthZG1pc3Npb25fY2hlY2twb2ludF9zZWNyZXQYBiABKAwSFQoNZWZmZWN0X2RpZ2VzdBgHIAEoCRIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYCCABKAlKBAgEEAVSBnRhcmdldCLMBAoNT3V0Ym91bmRPZmZlchIKCgJpZBgBIAEoCRIXCgtkZXN0aW5hdGlvbhgCIAEoCUICGAESFAoMc2VhbGVkX29mZmVyGAMgASgMEhQKDGNvbnRlbnRfdHlwZRgEIAEoCRIYChBzb3VyY2Vfd29ya3NwYWNlGAUgASgJEhQKDGN1c3RvZHlfaGVhZBgGIAEoCRIXCg9jYXVzZWRfYnlfb2ZmZXIYByABKAkSGwoTc2NoZWR1bGVkX2F0X21pbGxpcxgIIAEoBBIaChJkZWFkbGluZV9hdF9taWxsaXMYCSABKAQSFAoMY3VzdG9keV9wYXRoGAogASgJEhMKC2N1c3RvZHlfb2lkGAsgASgJEhQKDGRlbGl2ZXJ5X3JlZhgMIAEoCRIVCg1vYmxpZ2F0aW9uX2lkGA0gASgJEjoKC2h0dHBzX3JvdXRlGA4gASgLMiMubm9tb3Mua2VybmVsLnYxLkh0dHBzT3V0Ym91bmRSb3V0ZUgAEkIKD3dvcmtzcGFjZV9yb3V0ZRgPIAEoCzInLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VPdXRib3VuZFJvdXRlSAASFQoNc291cmNlX2NvbW1pdBgQIAEoCRIcChRzb3VyY2VfZXZpZGVuY2VfcGFjaxgRIAEoDBIZChFzb3VyY2Vfb2ZmZXJfcGF0aBgSIAEoCRIVCg1lZmZlY3RfZGlnZXN0GBMgASgJEiAKGHNvdXJjZV93b3Jrc3BhY2VfZ2VuZXNpcxgUIAEoCUIHCgVyb3V0ZSLuAQoOT3V0Ym94UmVzcG9uc2USLgoGb2ZmZXJzGAEgAygLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJvdW5kT2ZmZXISHwoSbmV4dF9kdWVfYXRfbWlsbGlzGAIgASgESACIAQESLQoHZW50cmllcxgDIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5PdXRib3hFbnRyeRIUCgx3b3JrX3BlbmRpbmcYBCABKAgSFQoNZW50cmllc190b3RhbBgFIAEoDRIYChBlbnRyaWVzX3ByZXBhcmVkGAYgASgNQhUKE19uZXh0X2R1ZV9hdF9taWxsaXMivQEKC091dGJveEVudHJ5EgoKAmlkGAEgASgJEhkKEXNvdXJjZV9vZmZlcl9wYXRoGAIgASgJEjoKC2h0dHBzX3JvdXRlGAMgASgLMiMubm9tb3Mua2VybmVsLnYxLkh0dHBzT3V0Ym91bmRSb3V0ZUgAEkIKD3dvcmtzcGFjZV9yb3V0ZRgEIAEoCzInLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VPdXRib3VuZFJvdXRlSABCBwoFcm91dGUilAEKFFByZXBhcmVPdXRib3VuZE9mZmVyEhgKEHRhcmdldF93b3Jrc3BhY2UYASABKAkSGgoNc291cmNlX2NvbW1pdBgCIAEoCUgAiAEBEh4KEXNvdXJjZV9vZmZlcl9wYXRoGAMgASgJSAGIAQFCEAoOX3NvdXJjZV9jb21taXRCFAoSX3NvdXJjZV9vZmZlcl9wYXRoIokFCgxTeW5jUmVzcG9uc2USEAoIYWRtaXR0ZWQYAiABKAgSDAoEaGVhZBgDIAEoCRIWCg5jYW5kaWRhdGVfaGVhZBgEIAEoCRIcChRhZG1pdHRlZF9yZW1vdGVfaGVhZBgFIAEoCRIcChRyZXBsYXllZF9yZW1vdGVfaGVhZBgGIAEoCRI8Cg9hZG1pdHRlZF9yZW1vdGUYByADKAsyIy5ub21vcy5rZXJuZWwudjEuU3luY0FkbWl0dGVkSW50ZW50EjwKFXJlbW90ZV9iaXJ0aF9vdXRjb21lcxgIIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSOQoOcmVtb3RlX3JlZnVzYWwYCSABKAsyHC5ub21vcy5rZXJuZWwudjEuU3luY1JlZnVzYWxIAIgBARI7Cg5yZXBsYXllZF9sb2NhbBgKIAMoCzIjLm5vbW9zLmtlcm5lbC52MS5TeW5jUmVwbGF5ZWRJbnRlbnQSIAoYc2tpcHBlZF9sb2NhbF9pbnRlbnRfaWRzGAsgAygJEjkKDXJlZnVzZWRfbG9jYWwYDCADKAsyIi5ub21vcy5rZXJuZWwudjEuU3luY1JlZnVzZWRJbnRlbnQSRwoUY3VzdG9keV9kaXNhZ3JlZW1lbnQYDSABKAsyJC5ub21vcy5rZXJuZWwudjEuQ3VzdG9keURpc2FncmVlbWVudEgBiAEBEhkKEXBhcmtlZF9sb2NhbF9yZWZzGA4gAygJEhYKDnJlcGxheV9wZW5kaW5nGA8gASgIQhEKD19yZW1vdGVfcmVmdXNhbEIXChVfY3VzdG9keV9kaXNhZ3JlZW1lbnRKBAgBEAJSBnJlc3VsdCJRChNDdXN0b2R5RGlzYWdyZWVtZW50EhIKCmxvY2FsX2hlYWQYASABKAkSFgoOY2FuZGlkYXRlX2hlYWQYAiABKAkSDgoGcmVhc29uGAMgASgJIk8KElN5bmNBZG1pdHRlZEludGVudBIRCglpbnRlbnRfaWQYASABKAkSGAoQY2FuZGlkYXRlX2NvbW1pdBgCIAEoCRIMCgRoZWFkGAMgASgJImwKElN5bmNSZXBsYXllZEludGVudBIRCglpbnRlbnRfaWQYASABKAkSDAoEaGVhZBgCIAEoCRI1Cg5iaXJ0aF9vdXRjb21lcxgDIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUioQEKC1N5bmNSZWZ1c2FsEhYKCWludGVudF9pZBgBIAEoCUgAiAEBEg4KBnJlYXNvbhgCIAEoCRIRCgRjb2RlGAMgASgJSAGIAQESNAoHcmVmdXNhbBgEIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxSZWZ1c2FsSAKIAQFCDAoKX2ludGVudF9pZEIHCgVfY29kZUIKCghfcmVmdXNhbCKNAQoRU3luY1JlZnVzZWRJbnRlbnQSEQoJaW50ZW50X2lkGAEgASgJEg4KBnJlYXNvbhgCIAEoCRITCgtjaGFuZ2VfdXNkYRgDIAEoDBI0CgdyZWZ1c2FsGAQgASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxIAIgBAUIKCghfcmVmdXNhbCJCCg9Xb3Jrc3BhY2VUYXJnZXQSDAoEcmVwbxgBIAEoCRIRCgl3b3Jrc3BhY2UYAiABKAkSDgoGYnJhbmNoGAMgASgJIk4KC09wZW5SZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDQoFc3BhbnMYAiABKAgiDgoMR2VuZXNpc09mZmVyIqMBCg1EaXJlY3RpdmVDYWxsEg4KBmRvbWFpbhgBIAEoCRIRCglkaXJlY3RpdmUYAiABKAkSJwoJb3BlcmF0aW9uGAUgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueRIWCg5hcmd1bWVudHNfanNvbhgGIAEoCUoECAMQBEoECAQQBVIJY2FsbF91c2RhUgdwYXlsb2FkUg5sZWdhY3lfcGF5bG9hZCLWAgoQQXV0aG9yaW5nT3B0aW9ucxINCgVhY3RvchgBIAEoCRISCgphdXRoX3Rva2VuGAIgASgMEhUKDWF1dGhvcl9zZWNyZXQYAyABKAwSHQoQdmFsaWRfZnJvbV9lcG9jaBgEIAEoBEgAiAEBEh8KEnByaW5jaXBhbF92ZXJpZmllZBgFIAEoCEgBiAEBEgsKA3JuZxgGIAMoARIYChBkZWZlcl9wcm9qZWN0aW9uGAcgASgIEg0KBXNwYW5zGAggASgIEg8KB2RyeV9ydW4YCSABKAgSEAoIc2VxdWVuY2UYCiABKAQSLQoFY2xvY2sYCyABKAsyHi5ub21vcy5rZXJuZWwudjEuQ2FwdHVyZWRDbG9jaxIUCgxwcmVwYXJlX29ubHkYDCABKAhCEwoRX3ZhbGlkX2Zyb21fZXBvY2hCFQoTX3ByaW5jaXBhbF92ZXJpZmllZCJKCg1DYXB0dXJlZENsb2NrEhcKD3BoeXNpY2FsX21pbGxpcxgBIAEoBBIPCgdsb2dpY2FsGAIgASgNEg8KB3JlcGxpY2EYAyABKAQiwwMKEEJpcnRoQ2VydGlmaWNhdGUSDQoFY2hpbGQYASABKAkSDwoHZm91bmRlchgCIAEoCRIQCgh2ZXJpZmllZBgDIAEoCBISCgpwYXJlbnRfa2V5GAQgASgMEhEKCXBhcmVudF9pZBgFIAEoCRINCgVlcG9jaBgGIAEoAxIRCglzaWduYXR1cmUYByABKAwSGQoMdmVyaWZpZWRfdmlhGAggASgJSACIAQESFgoJaWRwX3Rva2VuGAkgASgJSAGIAQESGwoOY2FwdHVyZWRfY2xvY2sYCiABKANIAogBARIhChRhdXRoX3Byb3ZpZGVyX2lzc3VlchgLIAEoCUgDiAEBEh8KEmF1dGhfcHJvdmlkZXJfandrcxgMIAEoCUgEiAEBEiMKFmF1dGhfcHJvdmlkZXJfYXVkaWVuY2UYDSABKAlIBYgBAUIPCg1fdmVyaWZpZWRfdmlhQgwKCl9pZHBfdG9rZW5CEQoPX2NhcHR1cmVkX2Nsb2NrQhcKFV9hdXRoX3Byb3ZpZGVyX2lzc3VlckIVChNfYXV0aF9wcm92aWRlcl9qd2tzQhkKF19hdXRoX3Byb3ZpZGVyX2F1ZGllbmNlImwKG1NpZ25CaXJ0aENlcnRpZmljYXRlUmVxdWVzdBI2CgtjZXJ0aWZpY2F0ZRgBIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5CaXJ0aENlcnRpZmljYXRlEhUKDXNpZ25lcl9zZWNyZXQYAiABKAwiVgocU2lnbkJpcnRoQ2VydGlmaWNhdGVSZXNwb25zZRI2CgtjZXJ0aWZpY2F0ZRgBIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5CaXJ0aENlcnRpZmljYXRlIs8DChRNb2RlbExpZmVjeWNsZUludGVudBI7CglvcGVyYXRpb24YASABKA4yKC5ub21vcy5rZXJuZWwudjEuTW9kZWxMaWZlY3ljbGVPcGVyYXRpb24SFAoMaW5zdGFsbGVkX2J5GAIgASgJEhcKCnN1cGVyc2VkZXMYAyABKAlIAIgBARJECgp0cmFuc2l0aW9uGAQgASgLMisubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlSAGIAQESFQoIcmVwbGFjZXMYBSABKAlIAogBARIeChFhY2NlcHRhbmNlX3JlYXNvbhgGIAEoCUgDiAEBEhkKDGxhd19pZGVudGl0eRgHIAEoCUgEiAEBEksKEWRvbWFpbl90cmFuc2l0aW9uGAggASgLMisubm9tb3Mua2VybmVsLnYxLkRvbWFpblRyYW5zaXRpb25BY3RpdmF0aW9uSAWIAQFCDQoLX3N1cGVyc2VkZXNCDQoLX3RyYW5zaXRpb25CCwoJX3JlcGxhY2VzQhQKEl9hY2NlcHRhbmNlX3JlYXNvbkIPCg1fbGF3X2lkZW50aXR5QhQKEl9kb21haW5fdHJhbnNpdGlvbiJwCgpEb21haW5QbGFuEi4KB2FjdGlvbnMYASADKAsyHS5ub21vcy5rZXJuZWwudjEuRG9tYWluQWN0aW9uEjIKB3N1cHBvcnQYAiADKAsyIS5ub21vcy5rZXJuZWwudjEuRG9tYWluU3VwcG9ydFBpbiJoCgxEb21haW5BY3Rpb24SDgoGZG9tYWluGAEgASgJEhUKDWV4cGVjdGVkX3VuaXQYAiABKAkSEwoLdGFyZ2V0X3VuaXQYAyABKAkSEgoFZ3JvdXAYBCABKAlIAIgBAUIICgZfZ3JvdXAiQQoQRG9tYWluU3VwcG9ydFBpbhINCgVncm91cBgBIAEoCRILCgNrZXkYAiABKAkSEQoJdW5pdF9oYXNoGAMgASgJIpICChhSZXNvbHZlRG9tYWluUGxhblJlcXVlc3QSKQoEcGxhbhgBIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Eb21haW5QbGFuEg8KB2F0X2hhc2gYAiABKAkSFAoManVkZ2Vfc3RhZ2VkGAMgASgIEiEKGWFja25vd2xlZGdlbWVudF9wcmluY2lwYWwYBCABKAkSDwoHcXVhbGlmeRgFIAEoCBI9Cgljb25zdW1lcnMYBiADKAsyKi5ub21vcy5rZXJuZWwudjEuRG9tYWluQ29uc3VtZXJSZXF1aXJlbWVudBIxCg9hdmFpbGFibGVfdW5pdHMYByADKAsyGC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdCJKChlEb21haW5Db25zdW1lclJlcXVpcmVtZW50EgwKBG5hbWUYASABKAkSHwoXYXBwbGljYXRpb25fbWF0cml4X3VzZGEYAiABKAwiSgoVRG9tYWluQ29uc3VtZXJWZXJkaWN0EgwKBG5hbWUYASABKAkSEgoKY29tcGF0aWJsZRgCIAEoCBIPCgdmYWlsaW5nGAMgAygJImsKE1Jlc29sdmVkRG9tYWluR3JvdXASDQoFZ3JvdXAYASABKAkSFgoOY2FuZGlkYXRlX2hhc2gYAiABKAkSLQoFdW5pdHMYAyADKAsyHi5ub21vcy5rZXJuZWwudjEuRG9tYWluVW5pdFBpbiIvCg1Eb21haW5Vbml0UGluEgsKA2tleRgBIAEoCRIRCgl1bml0X2hhc2gYAiABKAkitAMKGVJlc29sdmVEb21haW5QbGFuUmVzcG9uc2USDwoHYXRfaGFzaBgBIAEoCRIVCg1hdF9zdGF0ZV9yb290GAIgASgJEjQKBmdyb3VwcxgDIAMoCzIkLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlZERvbWFpbkdyb3VwEhwKFHJldGlyZV9pbnN0YWxsYXRpb25zGAQgAygJEjgKEHNlbGVjdGVkX2RvbWFpbnMYBSADKAsyHi5ub21vcy5rZXJuZWwudjEuRG9tYWluVW5pdFBpbhISCgVyZWFkeRgGIAEoCEgAiAEBEhIKCnZpb2xhdGlvbnMYByADKAkSOQoJY29uc3VtZXJzGAggAygLMiYubm9tb3Mua2VybmVsLnYxLkRvbWFpbkNvbnN1bWVyVmVyZGljdBI5Cgl1bml0X3NldHMYCSADKAsyJi5ub21vcy5rZXJuZWwudjEuTGF3UHJlcGFyYXRpb25Vbml0U2V0EhkKEWtlcm5lbF9nZW5lcmF0aW9uGAogASgJEh4KFmVmZmVjdGl2ZV9sYXdfaWRlbnRpdHkYCyABKAlCCAoGX3JlYWR5IoUBChpEb21haW5UcmFuc2l0aW9uQWN0aXZhdGlvbhIpCgRwbGFuGAEgASgLMhsubm9tb3Mua2VybmVsLnYxLkRvbWFpblBsYW4SPAoIcmVzb2x2ZWQYAiABKAsyKi5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZURvbWFpblBsYW5SZXNwb25zZSI7Ch9JZGVudGl0eVByb3ZpZGVyV2l0bmVzc0Fkb3B0aW9uEhgKEHNvdXJjZV93b3Jrc3BhY2UYASABKAki5wcKDE9mZmVyUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Ei4KBGNhbGwYAiABKAsyHi5ub21vcy5rZXJuZWwudjEuRGlyZWN0aXZlQ2FsbEgAEhwKEnNlYWxlZF9jaGFuZ2VfdXNkYRgHIAEoDEgAEkAKD21vZGVsX2xpZmVjeWNsZRgMIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5Nb2RlbExpZmVjeWNsZUludGVudEgAEl4KImlkZW50aXR5X3Byb3ZpZGVyX3dpdG5lc3NfYWRvcHRpb24YDSABKAsyMC5ub21vcy5rZXJuZWwudjEuSWRlbnRpdHlQcm92aWRlcldpdG5lc3NBZG9wdGlvbkgAEjAKB2dlbmVzaXMYDiABKAsyHS5ub21vcy5rZXJuZWwudjEuR2VuZXNpc09mZmVySAASSQoXY2FycmllZF93b3Jrc3BhY2Vfb2ZmZXIYDyABKAsyJi5ub21vcy5rZXJuZWwudjEuQ2FycmllZFdvcmtzcGFjZU9mZmVySAASNAoJcGxhY2VtZW50GBAgASgLMh8ubm9tb3Mua2VybmVsLnYxLlBsYWNlbWVudE9mZmVySAASRwoWZGV0YWNoZWRfc2lnbmVkX2NoYW5nZRgSIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5EZXRhY2hlZFNpZ25lZENoYW5nZUgAEjQKCWF1dGhvcmluZxgDIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpbmdPcHRpb25zEhAKCGxhd191c2R6GAQgASgMEjMKDGF0dGVzdGF0aW9ucxgFIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5BdHRlc3RlZFJlYWQSPQoSY29uZmxpY3Rfc25hcHNob3RzGAYgAygLMiEubm9tb3Mua2VybmVsLnYxLkNvbmZsaWN0U25hcHNob3QSGgoSZXhlY3V0aW9uX2xhd191c2R6GAggASgMEiAKE2NvbnRyb2xsZXJfbGF3X2hhc2gYCSABKAlIAYgBARIdChBjYW5kaWRhdGVfY29tbWl0GAogASgJSAKIAQESPAoRYmlydGhfY2VydGlmaWNhdGUYCyABKAsyIS5ub21vcy5rZXJuZWwudjEuQmlydGhDZXJ0aWZpY2F0ZRIrCglsYXdfdW5pdHMYESADKAsyGC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdEIICgZpbnRlbnRCFgoUX2NvbnRyb2xsZXJfbGF3X2hhc2hCEwoRX2NhbmRpZGF0ZV9jb21taXQiNgoHTGF3VW5pdBIrCgVmaWxlcxgBIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5MYXdVbml0RmlsZSIsCgtMYXdVbml0RmlsZRIMCgRwYXRoGAEgASgJEg8KB2NvbnRlbnQYAiABKAwixQEKDEF0dGVzdGVkUmVhZBIQCghxdWVyeV9pZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSKwoGcmVzdWx0GAMgASgLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWUSMgoIZXZpZGVuY2UYBSABKAsyIC5ub21vcy5rZXJuZWwudjEuUmVhZEF0dGVzdGF0aW9uSgQIBBAFUgthdHRlc3RhdGlvbiLVAQoPUmVhZEF0dGVzdGF0aW9uEg8KB3ZlcnNpb24YASABKAMSGAoQc291cmNlX3dvcmtzcGFjZRgCIAEoCRIWCg5zb3VyY2VfZ2VuZXNpcxgDIAEoCRITCgtzb3VyY2VfaGVhZBgEIAEoCRIRCglmb2xkX3Jvb3QYBSABKAkSFAoMc291cmNlX2Vwb2NoGAYgASgDEhoKEmF0dGVzdGVkX2F0X21pbGxpcxgHIAEoAxISCgpwdWJsaWNfa2V5GAggASgMEhEKCXNpZ25hdHVyZRgJIAEoDCJ1ChBDb25mbGljdFNuYXBzaG90EhYKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJEhQKDGFnZ3JlZ2F0ZV9pZBgCIAEoCRINCgVmaWVsZBgDIAEoCRIVCg10YXJnZXRfc2NoZW1hGAQgASgJEg0KBXRva2VuGAUgASgJIvQPCgxRdWVyeVJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIyCglhdXRob3JpdHkYAiABKAsyHy5ub21vcy5rZXJuZWwudjEuUXVlcnlBdXRob3JpdHkSDQoFc3BhbnMYAyABKAgSOQoNcmVzdWx0X2Zvcm1hdBgEIAEoDjIiLm5vbW9zLmtlcm5lbC52MS5RdWVyeVJlc3VsdEZvcm1hdBIYChBzZXJ2ZV9sYXN0X3JlYWR5GAUgASgIEioKBHJvd3MYCiABKAsyGi5ub21vcy5rZXJuZWwudjEuUm93c1F1ZXJ5SAASKgoEcGFnZRgLIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5QYWdlUXVlcnlIABIrCgVieV9pZBgMIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5CeUlkUXVlcnlIABI5CgxyZXNvbHZlX3JlZnMYDSABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVJlZnNRdWVyeUgAEkUKEnJlZmVyZW5jZV92ZXJzaW9ucxgOIAEoCzInLm5vbW9zLmtlcm5lbC52MS5SZWZlcmVuY2VWZXJzaW9uc1F1ZXJ5SAASLAoFY291bnQYDyABKAsyGy5ub21vcy5rZXJuZWwudjEuVGFsbHlRdWVyeUgAEioKA3N1bRgQIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5UYWxseVF1ZXJ5SAASMAoHc3BhdGlhbBgRIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5TcGF0aWFsUXVlcnlIABIsCgVuYW1lZBgSIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5OYW1lZFF1ZXJ5SAASSQoTYXV0aG9yaXphdGlvbl9jaGVjaxgTIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXF1ZXN0SAASSwoUYXV0aG9yaXphdGlvbl9leHBhbmQYFCABKAsyKy5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGFuZFJlcXVlc3RIABJJChNmcm9udGllcl90cmFuc2l0aW9uGBUgASgLMioubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblJlcXVlc3RIABIvCgdieV90eXBlGBYgASgLMhwubm9tb3Mua2VybmVsLnYxLkJ5VHlwZVF1ZXJ5SAASSAoUb3duZWRfZGV2aWNlX3JlcXVlc3QYFyABKAsyKC5ub21vcy5rZXJuZWwudjEuT3duZWREZXZpY2VSZXF1ZXN0UXVlcnlIABJMChZvd25lZF9wcmVwYXJlX2FwcHJvdmFsGBggASgLMioubm9tb3Mua2VybmVsLnYxLk93bmVkUHJlcGFyZUFwcHJvdmFsUXVlcnlIABJDChFwZW5kaW5nX2NvbmZsaWN0cxgZIAEoCzImLm5vbW9zLmtlcm5lbC52MS5QZW5kaW5nQ29uZmxpY3RzUXVlcnlIABJQChhwZW5kaW5nX2NvbmZsaWN0X3N1bW1hcnkYGiABKAsyLC5ub21vcy5rZXJuZWwudjEuUGVuZGluZ0NvbmZsaWN0U3VtbWFyeVF1ZXJ5SAASTQoWYXV0aGVudGljYXRpb25fcG9zdHVyZRgbIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRoZW50aWNhdGlvblBvc3R1cmVRdWVyeUgAEkAKEGNoaWxkX3dvcmtzcGFjZXMYHCABKAsyJC5ub21vcy5rZXJuZWwudjEuQ2hpbGRXb3Jrc3BhY2VRdWVyeUgAElYKFmF1dGhvcmluZ19yZXF1aXJlbWVudHMYHSABKAsyNC5ub21vcy5rZXJuZWwudjEuRGlyZWN0aXZlQXV0aG9yaW5nUmVxdWlyZW1lbnRzUXVlcnlIABJSChlpZGVudGl0eV9wcm92aWRlcl93aXRuZXNzGB4gASgLMi0ubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzUXVlcnlIABJPChdpbnRlcmZhY2VfY29tcGF0aWJpbGl0eRgfIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5JbnRlcmZhY2VDb21wYXRpYmlsaXR5UXVlcnlIABJHChNtYWludGVuYW5jZV9xdWFudHVtGCAgASgLMigubm9tb3Mua2VybmVsLnYxLk1haW50ZW5hbmNlUXVhbnR1bVF1ZXJ5SAASRAoSZnVsbF9oaXN0b3J5X2F1ZGl0GCEgASgLMiYubm9tb3Mua2VybmVsLnYxLkZ1bGxIaXN0b3J5QXVkaXRRdWVyeUgAElAKGHdvcmtzcGFjZV9lZmZlY3RfcmVjZWlwdBgiIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UXVlcnlIABJUChppbnN0YWxsZWRfbGF3X2RlY2xhcmF0aW9ucxgjIAEoCzIuLm5vbW9zLmtlcm5lbC52MS5JbnN0YWxsZWRMYXdEZWNsYXJhdGlvbnNRdWVyeUgAEkgKE3Jlc29sdmVfZG9tYWluX3BsYW4YJCABKAsyKS5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZURvbWFpblBsYW5SZXF1ZXN0SABCBwoFcXVlcnkiVgobV29ya3NwYWNlRWZmZWN0UmVjZWlwdFF1ZXJ5EiAKGHNvdXJjZV93b3Jrc3BhY2VfZ2VuZXNpcxgBIAEoCRIVCg1lZmZlY3RfZGlnZXN0GAIgASgJIuQBCh5Xb3Jrc3BhY2VFZmZlY3RSZWNlaXB0UmVzcG9uc2USGAoQdGFyZ2V0X3dvcmtzcGFjZRgBIAEoCRIgChh0YXJnZXRfd29ya3NwYWNlX2dlbmVzaXMYAiABKAkSFQoNb2JzZXJ2ZWRfaGVhZBgDIAEoCRIgChhzb3VyY2Vfd29ya3NwYWNlX2dlbmVzaXMYBCABKAkSFQoNZWZmZWN0X2RpZ2VzdBgFIAEoCRIfChJhZG1pdHRlZF9pbnRlbnRfaWQYBiABKAlIAIgBAUIVChNfYWRtaXR0ZWRfaW50ZW50X2lkIhcKFUZ1bGxIaXN0b3J5QXVkaXRRdWVyeSKwAwoYRnVsbEhpc3RvcnlBdWRpdFJlc3BvbnNlEg0KBXZhbGlkGAEgASgIEi4KBHdhbGsYAiABKA4yIC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5XYWxrEhEKBGhlYWQYAyABKAlIAIgBARIUCgdpbnRlbnRzGAQgASgESAGIAQESGAoLcGxhbnNfcmVydW4YBSABKARIAogBARIcCg9jb250cm9sbGVyX2hhc2gYBiABKAlIA4gBARIZChFpbnN0YWxsZWRfZG9tYWlucxgHIAMoCRISCgVjaGVjaxgIIAEoCUgEiAEBEhUKCGF0X2luZGV4GAkgASgESAWIAQESEgoFZXJyb3IYCiABKAlIBogBARI0CgdyZWZ1c2FsGAsgASgLMh4ubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlZnVzYWxIB4gBAUIHCgVfaGVhZEIKCghfaW50ZW50c0IOCgxfcGxhbnNfcmVydW5CEgoQX2NvbnRyb2xsZXJfaGFzaEIICgZfY2hlY2tCCwoJX2F0X2luZGV4QggKBl9lcnJvckIKCghfcmVmdXNhbCIeChxJZGVudGl0eVByb3ZpZGVyV2l0bmVzc1F1ZXJ5IosCChpJZGVudGl0eVByb3ZpZGVyV2l0bmVzc0tleRIPCgdvcmRpbmFsGAEgASgEEgsKA2t0eRgCIAEoCRIQCgNraWQYAyABKAlIAIgBARIQCgNhbGcYBCABKAlIAYgBARIQCgN1c2UYBSABKAlIAogBARIQCgNjcnYYBiABKAlIA4gBARIOCgF4GAcgASgJSASIAQESDgoBeRgIIAEoCUgFiAEBEg4KAW4YCSABKAlIBogBARIOCgFlGAogASgJSAeIAQESDwoHa2V5X29wcxgLIAMoCUIGCgRfa2lkQgYKBF9hbGdCBgoEX3VzZUIGCgRfY3J2QgQKAl94QgQKAl95QgQKAl9uQgQKAl9lImMKIklkZW50aXR5UHJvdmlkZXJXaXRuZXNzQ2VydGlmaWNhdGUSEwoLa2V5X29yZGluYWwYASABKAQSGwoTY2VydGlmaWNhdGVfb3JkaW5hbBgCIAEoBBILCgNkZXIYAyABKAwixQQKH0lkZW50aXR5UHJvdmlkZXJXaXRuZXNzUmVzcG9uc2USGAoQc291cmNlX3dvcmtzcGFjZRgBIAEoCRIWCg5zb3VyY2VfZ2VuZXNpcxgCIAEoCRITCgtzb3VyY2VfaGVhZBgDIAEoCRINCgVlcG9jaBgEIAEoBBIfChJwcmVkZWNlc3Nvcl9zaGEyNTYYBSABKAxIAIgBARIOCgZpc3N1ZXIYBiABKAkSFQoIYXVkaWVuY2UYByABKAlIAYgBARIXCg9wcmluY2lwYWxfY2xhaW0YCCABKAkSIQoUZGV2aWNlX2JpbmRpbmdfY2xhaW0YCSABKAlIAogBARIeChZyZXF1aXJlX2RldmljZV9iaW5kaW5nGAogASgIEjkKBGtleXMYCyADKAsyKy5ub21vcy5rZXJuZWwudjEuSWRlbnRpdHlQcm92aWRlcldpdG5lc3NLZXkSSQoMY2VydGlmaWNhdGVzGAwgAygLMjMubm9tb3Mua2VybmVsLnYxLklkZW50aXR5UHJvdmlkZXJXaXRuZXNzQ2VydGlmaWNhdGUSFwoPbWF0ZXJpYWxfc2hhMjU2GA0gASgMEjMKDGF0dGVzdGF0aW9ucxgPIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5BdHRlc3RlZFJlYWRCFQoTX3ByZWRlY2Vzc29yX3NoYTI1NkILCglfYXVkaWVuY2VCFwoVX2RldmljZV9iaW5kaW5nX2NsYWltSgQIDhAPUhFzb3VyY2VfcHJvb2ZfdXNkYSIVChNDaGlsZFdvcmtzcGFjZVF1ZXJ5IpABChlDaGlsZFdvcmtzcGFjZVF1ZXJ5UmVjb3JkEhEKCXdvcmtzcGFjZRgBIAEoCRI+CgZzdGF0dXMYAiABKA4yLi5ub21vcy5rZXJuZWwudjEuQ2hpbGRXb3Jrc3BhY2VMaWZlY3ljbGVTdGF0dXMSFAoHYm9ybl9hdBgDIAEoCUgAiAEBQgoKCF9ib3JuX2F0IlsKG0NoaWxkV29ya3NwYWNlUXVlcnlSZXNwb25zZRI8CghjaGlsZHJlbhgBIAMoCzIqLm5vbW9zLmtlcm5lbC52MS5DaGlsZFdvcmtzcGFjZVF1ZXJ5UmVjb3JkIh8KHUluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1F1ZXJ5IjcKEEluc3RhbGxlZExhd1VuaXQSEAoIdW5pdF9rZXkYASABKAkSEQoJdW5pdF9oYXNoGAIgASgJIowBChNJbnN0YWxsZWRMYXdVbml0U2V0EhQKDHNldF9pZGVudGl0eRgBIAEoCRIYChBjb21wb3Nlcl92ZXJzaW9uGAIgASgJEhMKC29wZW51c2RfcmV2GAMgASgJEjAKBXVuaXRzGAQgAygLMiEubm9tb3Mua2VybmVsLnYxLkluc3RhbGxlZExhd1VuaXQigQIKHkRlY2xhcmVkQXV0aGVudGljYXRpb25Qcm92aWRlchIOCgZkb21haW4YASABKAkSDgoGbWVtYmVyGAIgASgJEjsKC21lbWJlcl9raW5kGAMgASgOMiYubm9tb3Mua2VybmVsLnYxLkRlY2xhcmVkTGF3TWVtYmVyS2luZBJBCgRraW5kGAQgASgOMjMubm9tb3Mua2VybmVsLnYxLkRlY2xhcmVkQXV0aGVudGljYXRpb25Qcm92aWRlcktpbmQSDQoFc2NvcGUYBSABKAkSHAoPaWRlbnRpdHlfc2hhMjU2GAYgASgJSACIAQFCEgoQX2lkZW50aXR5X3NoYTI1NiLpAQofSW5zdGFsbGVkTGF3Q2xvc3VyZURlY2xhcmF0aW9ucxIYChBjbG9zdXJlX2lkZW50aXR5GAEgASgJEg8KB2RvbWFpbnMYAiADKAkSOwoIdW5pdF9zZXQYAyABKAsyJC5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3VW5pdFNldEgAiAEBElEKGGF1dGhlbnRpY2F0aW9uX3Byb3ZpZGVycxgEIAMoCzIvLm5vbW9zLmtlcm5lbC52MS5EZWNsYXJlZEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJCCwoJX3VuaXRfc2V0InQKIEluc3RhbGxlZExhd0RlY2xhcmF0aW9uc1Jlc3BvbnNlEgwKBGhlYWQYASABKAkSQgoIY2xvc3VyZXMYAiADKAsyMC5ub21vcy5rZXJuZWwudjEuSW5zdGFsbGVkTGF3Q2xvc3VyZURlY2xhcmF0aW9ucyLKAQojRGlyZWN0aXZlQXV0aG9yaW5nUmVxdWlyZW1lbnRzUXVlcnkSEQoJZGlyZWN0aXZlGAEgASgJEhYKCXByaW5jaXBhbBgCIAEoCUgAiAEBEhcKCnB1YmxpY19rZXkYAyABKAxIAYgBARIVCghrZXlfaGFzaBgEIAEoCUgCiAEBEhMKBmRvbWFpbhgFIAEoCUgDiAEBQgwKCl9wcmluY2lwYWxCDQoLX3B1YmxpY19rZXlCCwoJX2tleV9oYXNoQgkKB19kb21haW4ijAIKJkRpcmVjdGl2ZUF1dGhvcmluZ1JlcXVpcmVtZW50c1Jlc3BvbnNlEg0KBWZvdW5kGAEgASgIEhMKBmRvbWFpbhgCIAEoCUgAiAEBEhUKCHJlbGF0aW9uGAMgASgJSAGIAQESEwoGb2JqZWN0GAQgASgJSAKIAQESEgoFYWN0b3IYBSABKAlIA4gBARIVCghrZXlfaGFzaBgGIAEoCUgEiAEBEhcKD3NpZ25lcl9lbnJvbGxlZBgHIAEoCBIUCgxyb2xlX2FsbG93ZWQYCCABKAhCCQoHX2RvbWFpbkILCglfcmVsYXRpb25CCQoHX29iamVjdEIICgZfYWN0b3JCCwoJX2tleV9oYXNoInIKGkF1dGhlbnRpY2F0aW9uUG9zdHVyZVF1ZXJ5Eh4KFmluY2x1ZGVfYmlydGhfZXZpZGVuY2UYASABKAgSHgoRZGV2aWNlX3B1YmxpY19rZXkYAiABKAxIAIgBAUIUChJfZGV2aWNlX3B1YmxpY19rZXki7AIKHUF1dGhlbnRpY2F0aW9uUG9zdHVyZVJlc3BvbnNlEkgKDnByb3ZpZGVyX3Rva2VuGAEgASgOMjAubm9tb3Mua2VybmVsLnYxLlByb3ZpZGVyVG9rZW5WZXJpZmljYXRpb25TdGF0dXMSFwoPZW5yb2xsZWRfZGV2aWNlGAIgASgIEhoKEnJlc29sdmVkX3ByaW5jaXBhbBgDIAEoCRJECg5iaXJ0aF9ldmlkZW5jZRgEIAEoCzInLm5vbW9zLmtlcm5lbC52MS5CaXJ0aEV2aWRlbmNlUmVhZGluZXNzSACIAQESQQoUZGV2aWNlX3NpZ25lcl9zdGF0dXMYBSABKA4yIy5ub21vcy5rZXJuZWwudjEuRGV2aWNlU2lnbmVyU3RhdHVzEhoKEmRldmljZV9rZXlfc3ViamVjdBgGIAEoCRIUCgxzaWduZXJfZXBvY2gYByABKANCEQoPX2JpcnRoX2V2aWRlbmNlIl4KFkJpcnRoRXZpZGVuY2VSZWFkaW5lc3MSNAoGc3RhdHVzGAEgASgOMiQubm9tb3Mua2VybmVsLnYxLkJpcnRoRXZpZGVuY2VTdGF0dXMSDgoGZGV0YWlsGAIgASgJIigKF093bmVkRGV2aWNlUmVxdWVzdFF1ZXJ5Eg0KBXNjb3BlGAEgASgJIjIKGk93bmVkRGV2aWNlUmVxdWVzdFJlc3BvbnNlEhQKDHJlcXVlc3RfdXNkYRgBIAEoDCJAChlPd25lZFByZXBhcmVBcHByb3ZhbFF1ZXJ5Eg0KBXNjb3BlGAEgASgJEhQKDHJlcXVlc3RfdXNkYRgCIAEoDCK/AQocT3duZWRQcmVwYXJlQXBwcm92YWxSZXNwb25zZRIXCg9uZXdfa2V5X3N1YmplY3QYASABKAkSGgoSb3duZWRfY3VzdG9keV91c2RhGAIgASgMEhQKDHZlcmlmaWVkX3ZpYRgDIAEoCRIYChB2YWxpZF9mcm9tX2Vwb2NoGAQgASgEEh8KF2FwcHJvdmVkX2F0X3VuaXhfbWlsbGlzGAUgASgEEhkKEW93bmVkX2tleV9zdWJqZWN0GAYgASgJIpIBCg5RdWVyeUF1dGhvcml0eRIXCg9wcmluY2lwYWxfY2xhaW0YASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIQCghub3dfdW5peBgDIAEoBBIVCg1hdXRob3Jfc2VjcmV0GAQgASgMEioKBGtleXMYBSADKAsyHC5ub21vcy5rZXJuZWwudjEuSW5qZWN0ZWRLZXkiOAoLSW5qZWN0ZWRLZXkSDQoFc2NvcGUYASABKAkSDQoFZXBvY2gYAiABKAQSCwoDa2V5GAMgASgMItgBCglSb3dzUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCXByaW5jaXBhbBgDIAEoCRIWCg5hcmd1bWVudHNfdXNkYRgEIAEoDBIzChVhcHBsaWNhdGlvbl9hcmd1bWVudHMYBSABKAsyFC5nb29nbGUucHJvdG9idWYuQW55EhsKDnNpbmNlX2Zyb250aWVyGAYgASgJSACIAQFCEQoPX3NpbmNlX2Zyb250aWVyIsYBCglQYWdlUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0Eg0KBWxpbWl0GAMgASgNEg0KBWFmdGVyGAQgASgJEhEKCXByaW5jaXBhbBgFIAEoCRIWCg5hcmd1bWVudHNfdXNkYRgGIAEoDBIzChVhcHBsaWNhdGlvbl9hcmd1bWVudHMYByABKAsyFC5nb29nbGUucHJvdG9idWYuQW55IkwKCUJ5SWRRdWVyeRIWCg5hZ2dyZWdhdGVfdHlwZRgBIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAiABKAkSEQoJcHJpbmNpcGFsGAMgASgJIjgKC0J5VHlwZVF1ZXJ5EhYKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJEhEKCXByaW5jaXBhbBgCIAEoCSJcCghOb21vc1JlZhIRCgl3b3Jrc3BhY2UYASABKAkSFgoOYWdncmVnYXRlX3R5cGUYAiABKAkSFAoMYWdncmVnYXRlX2lkGAMgASgJEg8KB3ZlcnNpb24YBCABKAkiTgoQUmVzb2x2ZVJlZnNRdWVyeRInCgRyZWZzGAEgAygLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEhEKCXByaW5jaXBhbBgCIAEoCSJOChZSZWZlcmVuY2VWZXJzaW9uc1F1ZXJ5EjQKBHJlZnMYASADKAsyJi5ub21vcy5rZXJuZWwudjEuUmVmZXJlbmNlVmVyc2lvbkNoZWNrIoQBChVSZWZlcmVuY2VWZXJzaW9uQ2hlY2sSKQoGcGlubmVkGAEgASgLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEikKBnNlcmllcxgCIAEoCzIZLm5vbW9zLmtlcm5lbC52MS5Ob21vc1JlZhIVCg1jdXJyZW50X2ZpZWxkGAMgASgJImIKClRhbGx5UXVlcnkSCgoCaWQYASABKAkSEQoJcHJpbmNpcGFsGAMgASgJEhYKCWdyb3VwX2tleRgEIAEoCUgAiAEBQgwKCl9ncm91cF9rZXlKBAgCEANSCWFyZ3VtZW50cyJ6CgxTcGF0aWFsUXVlcnkSCgoCaWQYASABKAkSEQoJcHJpbmNpcGFsGAMgASgJEg0KBW1pbl94GAQgASgBEg0KBW1pbl95GAUgASgBEg0KBW1heF94GAYgASgBEg0KBW1heF95GAcgASgBSgQIAhADUglhcmd1bWVudHMiWgoVUGVuZGluZ0NvbmZsaWN0c1F1ZXJ5EhsKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJSACIAQESEQoJcHJpbmNpcGFsGAIgASgJQhEKD19hZ2dyZWdhdGVfdHlwZSIwChtQZW5kaW5nQ29uZmxpY3RTdW1tYXJ5UXVlcnkSEQoJcHJpbmNpcGFsGAEgASgJInEKCk5hbWVkUXVlcnkSMgoJb3BlcmF0aW9uGAEgASgOMh8ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5T3BlcmF0aW9uEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCLkAQoZRnJvbnRpZXJUcmFuc2l0aW9uUmVxdWVzdBIOCgZkb21haW4YASABKAkSFgoOY2FuZGlkYXRlX2hhc2gYAiABKAkSDwoHYXRfaGFzaBgDIAEoCRIhChlhY2tub3dsZWRnZW1lbnRfcHJpbmNpcGFsGAQgASgJEiAKE3Jlc3RvcmVfcHJldmlvdXNfb2YYBSABKAlIAIgBARIxCg9jYW5kaWRhdGVfdW5pdHMYBiADKAsyGC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdEIWChRfcmVzdG9yZV9wcmV2aW91c19vZiJaCiVGcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EhgKEHNvdXJjZV9zdGFibGVfaWQYASABKAkSFwoPYWNrbm93bGVkZ2VtZW50GAIgASgJIvUBCh5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbnMSDwoHcmV0aXJlZBgBIAMoCRJHCgdyZXR5cGVkGAIgAygLMjYubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvbkRpc3Bvc2l0aW9uTWFwRW50cnkSRwoHcmViaW5kcxgDIAMoCzI2Lm5vbW9zLmtlcm5lbC52MS5Gcm9udGllclRyYW5zaXRpb25EaXNwb3NpdGlvbk1hcEVudHJ5EhwKD2Fja25vd2xlZGdlZF9ieRgEIAEoCUgAiAEBQhIKEF9hY2tub3dsZWRnZWRfYnkiPQobRnJvbnRpZXJUcmFuc2l0aW9uVmlvbGF0aW9uEg4KBmRvbWFpbhgBIAEoCRIOCgZkZXRhaWwYAiABKAki1wIKGkZyb250aWVyVHJhbnNpdGlvblJlc3BvbnNlEg8KB2F0X2hhc2gYASABKAkSGQoMY3VycmVudF9oYXNoGAIgASgJSACIAQESFQoNYXRfc3RhdGVfcm9vdBgDIAEoCRIWCg5jYW5kaWRhdGVfaGFzaBgEIAEoCRIOCgZkb21haW4YBSABKAkSDwoHZG9tYWlucxgGIAMoCRINCgVyZWFkeRgHIAEoCBJACgp2aW9sYXRpb25zGAggAygLMiwubm9tb3Mua2VybmVsLnYxLkZyb250aWVyVHJhbnNpdGlvblZpb2xhdGlvbhJKCgxkaXNwb3NpdGlvbnMYCSABKAsyLy5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJUcmFuc2l0aW9uRGlzcG9zaXRpb25zSAGIAQFCDwoNX2N1cnJlbnRfaGFzaEIPCg1fZGlzcG9zaXRpb25zIi8KE0F1dGhvcml6YXRpb25PYmplY3QSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCSJUChRBdXRob3JpemF0aW9uU3ViamVjdBIMCgR0eXBlGAEgASgJEgoKAmlkGAIgASgJEhUKCHJlbGF0aW9uGAMgASgJSACIAQFCCwoJX3JlbGF0aW9uIpwBChhSZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBIQCghyZWxhdGlvbhgCIAEoCRI2CgdzdWJqZWN0GAMgASgLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0IoEBChhBdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSIwoZY3VycmVudF92ZXJpZmllZF9mcm9udGllchgBIAEoCEgAEhkKD2F0X2xlYXN0X2NvbW1pdBgCIAEoCUgAEhYKDGV4YWN0X2NvbW1pdBgDIAEoCUgAQg0KC3JlcXVpcmVtZW50ImYKHUF1dGhvcml6YXRpb25Db25kaXRpb25Db250ZXh0EhQKDGNvbmRpdGlvbl9pZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3Qi9wIKGUF1dGhvcml6YXRpb25DaGVja1JlcXVlc3QSNgoIcmVzb3VyY2UYASABKAsyJC5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbk9iamVjdBISCgpwZXJtaXNzaW9uGAIgASgJEjYKB3N1YmplY3QYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvblN1YmplY3QSPgoLY29uc2lzdGVuY3kYBCABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5Ej8KB2NvbnRleHQYBSADKAsyLi5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbmRpdGlvbkNvbnRleHQSIAoTZXhwZWN0ZWRfbW9kZWxfaGFzaBgGIAEoCUgAiAEBEhsKE2luY2x1ZGVfZXhwbGFuYXRpb24YByABKAhCFgoUX2V4cGVjdGVkX21vZGVsX2hhc2gi7QIKGkF1dGhvcml6YXRpb25FeHBhbmRSZXF1ZXN0EjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEgoKcGVybWlzc2lvbhgCIAEoCRI+Cgtjb25zaXN0ZW5jeRgDIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uc2lzdGVuY3kSPwoHY29udGV4dBgEIAMoCzIuLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ29uZGl0aW9uQ29udGV4dBIgChNleHBlY3RlZF9tb2RlbF9oYXNoGAUgASgJSACIAQESDQoFbGltaXQYBiABKA0SEgoFYWZ0ZXIYByABKAlIAYgBARIbChNpbmNsdWRlX2V4cGxhbmF0aW9uGAggASgIQhYKFF9leHBlY3RlZF9tb2RlbF9oYXNoQggKBl9hZnRlciK9AQoZUmVsYXRpb25zaGlwVHVwbGVFdmlkZW5jZRI4CgV0dXBsZRgBIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUFkZHJlc3MSEAoIdHVwbGVfaWQYAiABKAkSGgoSYXNzZXJ0aW9uX2V2ZW50X2lkGAMgASgJEiAKE3Jldm9jYXRpb25fZXZlbnRfaWQYBCABKAlIAIgBAUIWChRfcmV2b2NhdGlvbl9ldmVudF9pZCLhAwoYQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uEkYKCW9wZXJhdGlvbhgBIAEoDjIzLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb24uT3BlcmF0aW9uEhAKCHJlbGF0aW9uGAIgASgJEg4KBnJlc3VsdBgDIAEoCBI8CghldmlkZW5jZRgEIAMoCzIqLm5vbW9zLmtlcm5lbC52MS5SZWxhdGlvbnNoaXBUdXBsZUV2aWRlbmNlEjsKCGNoaWxkcmVuGAUgAygLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbiLfAQoJT3BlcmF0aW9uEhkKFU9QRVJBVElPTl9VTlNQRUNJRklFRBAAEhQKEE9QRVJBVElPTl9ESVJFQ1QQARIeChpPUEVSQVRJT05fQ09NUFVURURfVVNFUlNFVBACEh4KGk9QRVJBVElPTl9UVVBMRV9UT19VU0VSU0VUEAMSEwoPT1BFUkFUSU9OX1VOSU9OEAQSGgoWT1BFUkFUSU9OX0lOVEVSU0VDVElPThAFEhcKE09QRVJBVElPTl9FWENMVVNJT04QBhIXChNPUEVSQVRJT05fQ09ORElUSU9OEAcidwoaQXV0aG9yaXphdGlvbkRlY2lzaW9uQmFzaXMSIAoYYXV0aG9yaXphdGlvbl9tb2RlbF9oYXNoGAEgASgJEiEKGXJlbGF0aW9uc2hpcF9zdGF0ZV9jb21taXQYAiABKAkSFAoMY29udGV4dF9oYXNoGAMgASgMIr4BChpBdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZRIPCgdhbGxvd2VkGAEgASgIEjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEkMKC2V4cGxhbmF0aW9uGAMgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBsYW5hdGlvbkgAiAEBQg4KDF9leHBsYW5hdGlvbiKDAgobQXV0aG9yaXphdGlvbkV4cGFuZFJlc3BvbnNlEjcKCHN1YmplY3RzGAEgAygLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0EjoKBWJhc2lzGAIgASgLMisubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEhEKBG5leHQYAyABKAlIAIgBARJDCgtleHBsYW5hdGlvbhgEIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb25IAYgBAUIHCgVfbmV4dEIOCgxfZXhwbGFuYXRpb24iqAEKDU91dGJveFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBItCgVjbG9jaxgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5DYXB0dXJlZENsb2NrEjYKB3ByZXBhcmUYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuUHJlcGFyZU91dGJvdW5kT2ZmZXIitgEKC1N5bmNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEQoJZnJvbV9iYXNlGAIgASgJEg8KB3RvX2hlYWQYAyABKAkSGgoScGFya19yZWZ1c2VkX2xvY2FsGAQgASgIEhgKEHBhcmtlZF9hdF9taWxsaXMYBSABKAQSGwoTcmVwbGF5X29mZmVyX2J1ZGdldBgGIAEoDSLTAQoaS2VybmVsQ29uZmlndXJhdGlvblJlcXVlc3QSHQoVdHJ1c3Rfcm9vdF9wdWJsaWNfa2V5GAEgASgMEiUKGHRydXN0c19jdXN0b2RpYW5faGlzdG9yeRgCIAEoCEgAiAEBEiAKE2RlZmVycmVkX2R1cmFiaWxpdHkYAyABKAhIAYgBARIYChBob3N0X2NhbGxfbGVkZ2VyGAQgASgIQhsKGV90cnVzdHNfY3VzdG9kaWFuX2hpc3RvcnlCFgoUX2RlZmVycmVkX2R1cmFiaWxpdHkigAEKG0tlcm5lbENvbmZpZ3VyYXRpb25SZXNwb25zZRItCgZyZXN1bHQYASABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkEh0KEGhvc3RfY2FsbF9sZWRnZXIYAiABKA1IAIgBAUITChFfaG9zdF9jYWxsX2xlZGdlciKTEwoOQ3VzdG9keVJlcXVlc3QSNwoKcGFja19kZWx0YRgKIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5QYWNrRGVsdGFSZXF1ZXN0SAASNwoKYXBwbHlfcGFjaxgLIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5BcHBseVBhY2tSZXF1ZXN0SAASNwoKcmVwb19zdGF0cxgMIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZXBvU3RhdHNSZXF1ZXN0SAASPQoNaW50ZW50c19hYm92ZRgNIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRzQWJvdmVSZXF1ZXN0SAASPwoOaW5zcGVjdF9jaGFuZ2UYDiABKAsyJS5ub21vcy5rZXJuZWwudjEuSW5zcGVjdENoYW5nZVJlcXVlc3RIABJOChZlbmNvZGVfcmVmdXNhbF92ZXJkaWN0GA8gASgLMiwubm9tb3Mua2VybmVsLnYxLkVuY29kZVJlZnVzYWxWZXJkaWN0UmVxdWVzdEgAElAKF2luc3BlY3RfcmVmdXNhbF92ZXJkaWN0GBAgASgLMi0ubm9tb3Mua2VybmVsLnYxLkluc3BlY3RSZWZ1c2FsVmVyZGljdFJlcXVlc3RIABI1CglyZWFkX2Jsb2IYESABKAsyIC5ub21vcy5rZXJuZWwudjEuUmVhZEJsb2JSZXF1ZXN0SAASOQoLcmVzb2x2ZV9yZWYYEiABKAsyIi5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVJlZlJlcXVlc3RIABI1CglsaXN0X3JlZnMYEyABKAsyIC5ub21vcy5rZXJuZWwudjEuTGlzdFJlZnNSZXF1ZXN0SAASNQoJd3JpdGVfcmVmGBQgASgLMiAubm9tb3Mua2VybmVsLnYxLldyaXRlUmVmUmVxdWVzdEgAEjcKCmRlbGV0ZV9yZWYYFSABKAsyIS5ub21vcy5rZXJuZWwudjEuRGVsZXRlUmVmUmVxdWVzdEgAEkQKEXdyaXRlX21ldGFfY29tbWl0GBYgASgLMicubm9tb3Mua2VybmVsLnYxLldyaXRlTWV0YUNvbW1pdFJlcXVlc3RIABJCChBsYXdfY2xvc3VyZV9pbmZvGBcgASgLMiYubm9tb3Mua2VybmVsLnYxLkxhd0Nsb3N1cmVJbmZvUmVxdWVzdEgAEkUKEWNoZWNrcG9pbnRfZXhwb3J0GBggASgLMigubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRFeHBvcnRSZXF1ZXN0SAASRQoRY2hlY2twb2ludF9pbXBvcnQYGSABKAsyKC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEltcG9ydFJlcXVlc3RIABJDChBjYXBhY2l0eV9yZXNlcnZlGBogASgLMicubm9tb3Mua2VybmVsLnYxLkNhcGFjaXR5UmVzZXJ2ZVJlcXVlc3RIABI7CgxyZXN0b3JlX21haW4YGyABKAsyIy5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5SZXF1ZXN0SAASTgoWcmVzb2x2ZV9zdGF0ZV9wb3NpdGlvbhgcIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlU3RhdGVQb3NpdGlvblJlcXVlc3RIABJHChJyZXNpZGVudF9mb290cHJpbnQYHSABKAsyKS5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRGb290cHJpbnRSZXF1ZXN0SAASQQoPaGlzdG9yeV9zdW1tYXJ5GB4gASgLMiYubm9tb3Mua2VybmVsLnYxLkhpc3RvcnlTdW1tYXJ5UmVxdWVzdEgAEloKHHByb3ZlX2NvbXBhY3Rpb25fZXF1aXZhbGVuY2UYHyABKAsyMi5ub21vcy5rZXJuZWwudjEuUHJvdmVDb21wYWN0aW9uRXF1aXZhbGVuY2VSZXF1ZXN0SAASPgoOb3Blbl9naXRfc3RhdGUYICABKAsyJC5ub21vcy5rZXJuZWwudjEuT3BlbkdpdFN0YXRlUmVxdWVzdEgAEk4KFnJlYWRfY3VzdG9keV9wbGFjZW1lbnQYISABKAsyLC5ub21vcy5rZXJuZWwudjEuUmVhZEN1c3RvZHlQbGFjZW1lbnRSZXF1ZXN0SAASVAoZaW5zcGVjdF9jdXN0b2R5X3BsYWNlbWVudBgjIAEoCzIvLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q3VzdG9keVBsYWNlbWVudFJlcXVlc3RIABJQChdyZWxlYXNlX3dvcmtzcGFjZV9zdGF0ZRgkIAEoCzItLm5vbW9zLmtlcm5lbC52MS5SZWxlYXNlV29ya3NwYWNlU3RhdGVSZXF1ZXN0SAASXwofcmVjb3JkX3dvcmtzcGFjZV9lZmZlY3Rfb3V0Y29tZRglIAEoCzI0Lm5vbW9zLmtlcm5lbC52MS5SZWNvcmRXb3Jrc3BhY2VFZmZlY3RPdXRjb21lUmVxdWVzdEgAEkwKFWF0dGFjaF9sb2NhbF9mcm9udGllchgmIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdHRhY2hMb2NhbEZyb250aWVyUmVxdWVzdEgAEkMKEGFnZ3JlZ2F0ZV9jZW5zdXMYJyABKAsyJy5ub21vcy5rZXJuZWwudjEuQWdncmVnYXRlQ2Vuc3VzUmVxdWVzdEgAEj0KDWF1ZGl0X2N1c3RvZHkYKCABKAsyJC5ub21vcy5rZXJuZWwudjEuQXVkaXRDdXN0b2R5UmVxdWVzdEgAEkgKE2V4cG9ydF9sYXdfcHJvZHVjdHMYKSABKAsyKS5ub21vcy5rZXJuZWwudjEuRXhwb3J0TGF3UHJvZHVjdHNSZXF1ZXN0SAASSAoTaW1wb3J0X2xhd19wcm9kdWN0cxgqIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5JbXBvcnRMYXdQcm9kdWN0c1JlcXVlc3RIABJKChRwcmVwYXJlX2xhd19wcm9kdWN0cxgrIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5QcmVwYXJlTGF3UHJvZHVjdHNSZXF1ZXN0SAASUgoYcmVjb3Zlcl9kZXRhY2hlZF9yZWNlaXB0GCwgASgLMi4ubm9tb3Mua2VybmVsLnYxLlJlY292ZXJEZXRhY2hlZFJlY2VpcHRSZXF1ZXN0SABCCwoJb3BlcmF0aW9uSgQIIhAjUhdhZG9wdF9jdXN0b2R5X3BsYWNlbWVudCJeChZBZ2dyZWdhdGVDZW5zdXNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEgoKdHlwZV9saW1pdBgCIAEoDSIxChJBZ2dyZWdhdGVUeXBlQ291bnQSDAoEdHlwZRgBIAEoCRINCgVjb3VudBgCIAEoBCL7AQoXQWdncmVnYXRlQ2Vuc3VzUmVzcG9uc2USEQoEaGVhZBgBIAEoCUgAiAEBEhwKD2FnZ3JlZ2F0ZV9jb3VudBgCIAEoBEgBiAEBEhcKCnN0YXRlX3Jvb3QYAyABKAlIAogBARI2Cgl0b3BfdHlwZXMYBCADKAsyIy5ub21vcy5rZXJuZWwudjEuQWdncmVnYXRlVHlwZUNvdW50Eh0KEHR5cGVzX3N0YXRlX3Jvb3QYBSABKAlIA4gBAUIHCgVfaGVhZEISChBfYWdncmVnYXRlX2NvdW50Qg0KC19zdGF0ZV9yb290QhMKEV90eXBlc19zdGF0ZV9yb290IigKGFJlc2lkZW50Rm9vdHByaW50UmVxdWVzdBIMCgRkZWVwGAEgASgIIvQDChFSZXNpZGVudEZvb3RwcmludBIRCgl3b3Jrc3BhY2UYASABKAkSDgoGYnJhbmNoGAIgASgJEhgKEHJlYWRfbW9kZWxfYnl0ZXMYAyABKAQSHQoVcmVhZF9tb2RlbF9ydXN0X2J5dGVzGAQgASgEEhgKEGZvbGRfc3RhdGVfYnl0ZXMYBSABKAQSEwoLZm9sZF9pbWFnZXMYBiABKA0SHwoXc2hhcmVkX2F0dHJpYnV0ZWRfYnl0ZXMYByABKAQSEgoKYWdncmVnYXRlcxgIIAEoBBI2Cgpjb21wb25lbnRzGAkgAygLMiIubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Q29tcG9uZW50EhIKCmNvbXB1dGVfdXMYCiABKAQSRQoRcmVhZF9zdG9yYWdlX2tpbmQYCyABKA4yKi5ub21vcy5rZXJuZWwudjEuUmVhZFByb2plY3Rpb25TdG9yYWdlS2luZBIfChdzcWxpdGVfY2FjaGVfdXNlZF9ieXRlcxgMIAEoBBIYChBmbGF0X3NjYWxhcl9yb3dzGA0gASgEEh0KFWZsYXRfc2NhbGFyX3Jvd3NfcmVhZBgOIAEoBBIdChBmdWxsX3JlcGxheV9oZWFkGA8gASgJSACIAQFCEwoRX2Z1bGxfcmVwbGF5X2hlYWQiaQoRUmVzaWRlbnRDb21wb25lbnQSNAoEa2luZBgBIAEoDjImLm5vbW9zLmtlcm5lbC52MS5SZXNpZGVudENvbXBvbmVudEtpbmQSDQoFYnl0ZXMYAiABKAQSDwoHY2VpbGluZxgDIAEoCCLKAQoZUmVzaWRlbnRGb290cHJpbnRSZXNwb25zZRI1CglyZXNpZGVudHMYASADKAsyIi5ub21vcy5rZXJuZWwudjEuUmVzaWRlbnRGb290cHJpbnQSHAoUYWxsb2NhdG9yX2xpdmVfYnl0ZXMYAiABKAQSGAoQYXR0cmlidXRlZF9ieXRlcxgDIAEoBBIZChF1bmFjY291bnRlZF9ieXRlcxgEIAEoBBIVCg1hY2NvdW50aW5nX3VzGAUgASgEEgwKBGRlZXAYBiABKAgi4gEKEFBhY2tEZWx0YVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESEQoEYmFzZRgDIAEoCUgBiAEBEg4KBmJyYW5jaBgEIAEoCRIdChBzdGFnZWRfcGFja19maWxlGAUgASgJSAKIAQESEgoFZGVwdGgYBiABKA1IA4gBARISCgpiZWxvd19oZWFkGAcgASgIEhIKCmFsc29faGVhZHMYCCADKAlCBwoFX2hlYWRCBwoFX2Jhc2VCEwoRX3N0YWdlZF9wYWNrX2ZpbGVCCAoGX2RlcHRoIvoBChBBcHBseVBhY2tSZXF1ZXN0EgwKBHJlcG8YASABKAkSDgoEcGFjaxgCIAEoDEgAEhoKEHN0YWdlZF9wYWNrX2ZpbGUYBCABKAlIABIaChBjb250aW51ZV9wZW5kaW5nGAggASgISAASGAoOY2FuY2VsX3BlbmRpbmcYCiABKAhIABIRCgRoZWFkGAMgASgJSAGIAQESDwoHc2hhbGxvdxgFIAMoCRIRCgl1bnNoYWxsb3cYBiADKAkSGQoRd29ya19idWRnZXRfYnl0ZXMYByABKAQSEQoJaW1wb3J0X2lkGAkgASgEQggKBnNvdXJjZUIHCgVfaGVhZCIgChBSZXBvU3RhdHNSZXF1ZXN0EgwKBHJlcG8YASABKAkivwEKE0ludGVudHNBYm92ZVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESEQoEYmFzZRgDIAEoCUgBiAEBEg4KBmJyYW5jaBgEIAEoCRINCgVsaW1pdBgFIAEoBBIYChBjb21wbGV0ZV9sb2dpY2FsGAYgASgIEhYKDmNvbXBhY3Rfc3RvcmVkGAcgASgIEhEKCWZyb21fYmFzZRgIIAEoCEIHCgVfaGVhZEIHCgVfYmFzZSJtChVIaXN0b3J5U3VtbWFyeVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESDgoGYnJhbmNoGAMgASgJEhEKBGJhc2UYBCABKAlIAYgBAUIHCgVfaGVhZEIHCgVfYmFzZSIrChRJbnNwZWN0Q2hhbmdlUmVxdWVzdBITCgtjaGFuZ2VfdXNkYRgBIAEoDCLfAQoOUmVmdXNhbFZlcmRpY3QSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIQCgNvaWQYAiABKAlIAYgBARITCgZkb21haW4YAyABKAlIAogBARIZCgxkaXJlY3RpdmVfaWQYBCABKAlIA4gBARIUCgdzZXNzaW9uGAUgASgJSASIAQESEQoJcGFya2VkX2F0GAYgASgJEg4KBnJlYXNvbhgHIAEoCUILCglfb2ZmZXJfaWRCBgoEX29pZEIJCgdfZG9tYWluQg8KDV9kaXJlY3RpdmVfaWRCCgoIX3Nlc3Npb24iTwobRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXF1ZXN0EjAKB3ZlcmRpY3QYASABKAsyHy5ub21vcy5rZXJuZWwudjEuUmVmdXNhbFZlcmRpY3QiNAocSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVxdWVzdBIUCgx2ZXJkaWN0X3VzZGEYASABKAwi1AEKFUNvbXBhY3Rpb25FcXVpdmFsZW5jZRITCgtzb3VyY2VfaGVhZBgBIAEoCRIWCg5zb3VyY2VfZ2VuZXNpcxgCIAEoCRIWCg5jYW5kaWRhdGVfaGVhZBgDIAEoCRIZChFjYW5kaWRhdGVfZ2VuZXNpcxgEIAEoCRIWCg5zb3VyY2VfaW50ZW50cxgFIAEoBBIXCg9jYXJyaWVkX2ludGVudHMYBiABKAQSFgoOcGFya2VkX2ludGVudHMYByABKAQSEgoKZXF1aXZhbGVudBgIIAEoCCJ9CiFQcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlcXVlc3QSEwoLc291cmNlX3JlcG8YASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSFgoOY2FuZGlkYXRlX3JlcG8YAyABKAkSFgoOY2FuZGlkYXRlX2hlYWQYBCABKAkiOgoPUmVhZEJsb2JSZXF1ZXN0EgwKBHJlcG8YASABKAkSCwoDb2lkGAIgASgJEgwKBHBhdGgYAyABKAkiUAoRUmVzb2x2ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkSEQoEcGF0aBgDIAEoCUgAiAEBQgcKBV9wYXRoIjYKD1BoeXNpY2FsUmVmRmlsZRIRCglyZWZlcmVuY2UYASABKAkSEAoIY29udGVudHMYAiABKAwipwIKD0xpc3RSZWZzUmVxdWVzdBIMCgRyZXBvGAEgASgJEg4KBnByZWZpeBgCIAEoCRIYChBsb29zZV9yZWZlcmVuY2VzGAMgAygJEiAKGGxvb3NlX2ludmVudG9yeV9jb21wbGV0ZRgEIAEoCBIgChNwYWNrZWRfcmVmc19wcmVzZW50GAUgASgISACIAQESPQoTcGh5c2ljYWxfbG9vc2VfcmVmcxgGIAMoCzIgLm5vbW9zLmtlcm5lbC52MS5QaHlzaWNhbFJlZkZpbGUSHAoUcGh5c2ljYWxfcGFja2VkX3JlZnMYByABKAwSIwobcGh5c2ljYWxfaW52ZW50b3J5X2NvbXBsZXRlGAggASgIQhYKFF9wYWNrZWRfcmVmc19wcmVzZW50IkIKD1dyaXRlUmVmUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCRIOCgZ0YXJnZXQYAyABKAkiMwoQRGVsZXRlUmVmUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCSIpCghNZXRhRmlsZRIMCgRwYXRoGAEgASgJEg8KB2NvbnRlbnQYAiABKAwirgEKFldyaXRlTWV0YUNvbW1pdFJlcXVlc3QSDAoEcmVwbxgBIAEoCRIPCgdwYXJlbnRzGAIgAygJEigKBWZpbGVzGAMgAygLMhkubm9tb3Mua2VybmVsLnYxLk1ldGFGaWxlEg8KB21lc3NhZ2UYBCABKAkSFAoMdGltZV9zZWNvbmRzGAUgASgSEhYKCXJlZmVyZW5jZRgGIAEoCUgAiAEBQgwKCl9yZWZlcmVuY2UiZwoVTGF3Q2xvc3VyZUluZm9SZXF1ZXN0EhQKDGNsb3N1cmVfZmlsZRgBIAEoCRI4CgpjYXBhYmlsaXR5GAIgASgOMiQubm9tb3Mua2VybmVsLnYxLktlcm5lbExhd0NhcGFiaWxpdHkihwEKF0NoZWNrcG9pbnRFeHBvcnRSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSIQoUc3RhZ2VkX2Zyb250aWVyX2ZpbGUYAiABKAlIAIgBAUIXChVfc3RhZ2VkX2Zyb250aWVyX2ZpbGUiQQoLRnJvbnRpZXJIbGMSEAoIcGh5c2ljYWwYASABKAQSDwoHbG9naWNhbBgCIAEoDRIPCgdyZXBsaWNhGAMgASgEIu0EChdWZXJpZmllZEZyb250aWVyUmVjZWlwdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRILCgNvaWQYAiABKAkSDwoHaW50ZW50cxgDIAEoBBITCgtwbGFuc19yZXJ1bhgEIAEoBBIcCg9jb250cm9sbGVyX2hhc2gYBSABKAlIAIgBARIZChFpbnN0YWxsZWRfZG9tYWlucxgGIAMoCRIOCgZsaW5lYXIYByABKAgSMwoIbGFzdF9obGMYCCABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIAYgBARIUCgdsYXN0X2lkGAkgASgJSAKIAQESEQoJc3RhdGVfb2lkGAogASgJEhQKDHN0YXRlX3NoYTI1NhgLIAEoCRI5Cg5zdGF0ZV9sYXN0X2hsYxgMIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gDiAEBEhoKDXN0YXRlX2xhc3RfaWQYDSABKAlIBIgBARIXCg9tYW5pZmVzdF9zaGEyNTYYDiABKAkSHgoWbGF3X2Nsb3N1cmVfaWRlbnRpdGllcxgPIAMoCRIaChJyZXNvbHZhYmxlX2RvbWFpbnMYECADKAkSIgoVcHJvamVjdGlvbl9zdGF0ZV9yb290GBEgASgJSAWIAQESDgoGd2Fsa2VkGBIgASgIQhIKEF9jb250cm9sbGVyX2hhc2hCCwoJX2xhc3RfaGxjQgoKCF9sYXN0X2lkQhEKD19zdGF0ZV9sYXN0X2hsY0IQCg5fc3RhdGVfbGFzdF9pZEIYChZfcHJvamVjdGlvbl9zdGF0ZV9yb290IkUKFUZvbGRGcm9udGllckFnZ3JlZ2F0ZRIUCgxhZ2dyZWdhdGVfaWQYASABKAkSFgoOYWdncmVnYXRlX3VzZGEYAiABKAwiQQoXRm9sZEZyb250aWVyRmluZ2VycHJpbnQSEQoJaW50ZW50X2lkGAEgASgJEhMKC2ZpbmdlcnByaW50GAIgASgJItYDChRGb2xkRnJvbnRpZXJTbmFwc2hvdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRILCgN0aXAYAiABKAkSDwoHZ2VuZXNpcxgDIAEoCRIVCg1oaXN0b3J5X2RlcHRoGAQgASgEEjoKCmFnZ3JlZ2F0ZXMYBSADKAsyJi5ub21vcy5rZXJuZWwudjEuRm9sZEZyb250aWVyQWdncmVnYXRlEjgKDWhsY193YXRlcm1hcmsYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuRnJvbnRpZXJIbGNIAIgBARIzCghsYXN0X2hsYxgHIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Gcm9udGllckhsY0gBiAEBEhQKB2xhc3RfaWQYCCABKAlIAogBARIWCg5zdHJpa2VfdGFyZ2V0cxgJIAMoCRJFChNpbnRlbnRfZmluZ2VycHJpbnRzGAogAygLMigubm9tb3Mua2VybmVsLnYxLkZvbGRGcm9udGllckZpbmdlcnByaW50EhcKCnN0YXRlX3Jvb3QYCyABKAlIA4gBAUIQCg5faGxjX3dhdGVybWFya0ILCglfbGFzdF9obGNCCgoIX2xhc3RfaWRCDQoLX3N0YXRlX3Jvb3QimwMKGFN0b3JlZENoZWNrcG9pbnRNYW5pZmVzdBIWCg5mb3JtYXRfdmVyc2lvbhgBIAEoDRITCgZjdXJzb3IYAiABKAlIAIgBARIYChBjaGVja3BvaW50X2J5dGVzGAMgASgEEhAKCGxhd19oYXNoGAQgASgJEjsKC2NvbXByZXNzaW9uGAUgASgOMiYubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRDb21wcmVzc2lvbhIRCglyYXdfYnl0ZXMYBiABKAQSFAoMc3RvcmVkX2J5dGVzGAcgASgEEh0KFWZyb250aWVyX3N0b3JlZF9ieXRlcxgIIAEoBBIXCgpzdGF0ZV9yb290GAkgASgJSAGIAQESUAoZdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdBgKIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZmllZEZyb250aWVyUmVjZWlwdEgCiAEBQgkKB19jdXJzb3JCDQoLX3N0YXRlX3Jvb3RCHAoaX3ZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQiwQMKF0NoZWNrcG9pbnRJbXBvcnRSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEgoIZnJvbnRpZXIYAiABKAxIABIeChRzdGFnZWRfZnJvbnRpZXJfZmlsZRgGIAEoCUgAEhMKBmN1cnNvchgDIAEoCUgBiAEBEhcKCnN0YXRlX3Jvb3QYBCABKAlIAogBARINCgVzcGFucxgFIAEoCBIRCgRoZWFkGAcgASgJSAOIAQESUAoZdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdBgIIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZmllZEZyb250aWVyUmVjZWlwdEgEiAEBEkoKE3ZlcmlmaWNhdGlvbl9wb2xpY3kYCSABKA4yLS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludFZlcmlmaWNhdGlvblBvbGljeUIRCg9mcm9udGllcl9zb3VyY2VCCQoHX2N1cnNvckINCgtfc3RhdGVfcm9vdEIHCgVfaGVhZEIcChpfdmVyaWZpZWRfZnJvbnRpZXJfcmVjZWlwdCIxChZDYXBhY2l0eVJlc2VydmVSZXF1ZXN0EhcKD2FnZ3JlZ2F0ZV9jb3VudBgBIAEoBCKZAgoSUmVzdG9yZU1haW5SZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDAoEaGVhZBgCIAEoCRITCgtkaWFnbm9zdGljcxgDIAEoCBIYChBvcGVyYXRvcl9jdXN0b2R5GAQgASgIEiAKE2V4cGVjdGVkX2xvY2FsX2hlYWQYBSABKAlIAIgBARJAChNjdXN0b2R5X2NlcnRpZmljYXRlGAYgASgLMiMubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlDZXJ0aWZpY2F0ZRIYChBwcm92aWRlcl9jdXN0b2R5GAcgASgIQhYKFF9leHBlY3RlZF9sb2NhbF9oZWFkIm0KE0F1ZGl0Q3VzdG9keVJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIVCg1idWRnZXRfbWljcm9zGAIgASgNEg0KBXN0YXJ0GAMgASgIIpQBChRBdWRpdEN1c3RvZHlSZXNwb25zZRIPCgdwZW5kaW5nGAEgASgIEgwKBGhlYWQYAiABKAkSDgoGd2Fsa2VkGAMgASgEEg0KBXRvdGFsGAQgASgEEg8KB291dGNvbWUYBSABKAkSLQoHdmVyZGljdBgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCJ+CgtMYXdQcm9kdWN0cxIUCgxsYXdfaWRlbnRpdHkYASABKAkSFgoOZm9ybWF0X3ZlcnNpb24YAiABKA0SEgoKcmVhZF9sYXllchgDIAEoDBIVCg1jb21tYW5kX2xheWVyGAQgASgMEhYKDnNlbWFudGljX2xheWVyGAUgASgMIkwKGEV4cG9ydExhd1Byb2R1Y3RzUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0IlkKGUV4cG9ydExhd1Byb2R1Y3RzUmVzcG9uc2USDAoEaGVhZBgBIAEoCRIuCghwcm9kdWN0cxgCIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5MYXdQcm9kdWN0cyJ8ChhJbXBvcnRMYXdQcm9kdWN0c1JlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIuCghwcm9kdWN0cxgCIAMoCzIcLm5vbW9zLmtlcm5lbC52MS5MYXdQcm9kdWN0cyItChlJbXBvcnRMYXdQcm9kdWN0c1Jlc3BvbnNlEhAKCGltcG9ydGVkGAEgAygJIm8KEkN1c3RvZHlDZXJ0aWZpY2F0ZRIRCgl3b3Jrc3BhY2UYASABKAkSDAoEaGVhZBgCIAEoCRIRCglrZXlfZXBvY2gYAyABKAMSEgoKcHVibGljX2tleRgEIAEoDBIRCglzaWduYXR1cmUYBSABKAwiZAoTT3BlbkdpdFN0YXRlUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EgwKBGhlYWQYAiABKAkSDQoFc3BhbnMYAyABKAgiawoaQXR0YWNoTG9jYWxGcm9udGllclJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIMCgRoZWFkGAIgASgJEg0KBXNwYW5zGAMgASgIIlMKDUN1c3RvZHlSZW1vdGUSDAoEbmFtZRgBIAEoCRILCgN1cmwYAiABKAkSFQoNcGVlcl9pZGVudGl0eRgDIAEoCRIQCghwcmlvcml0eRgEIAEoDSLGAQoUQ3VzdG9keVBsYWNlbWVudFJ1bGUSEgoKcGVlcl9jbGFzcxgBIAEoCRJAChBrZXJuZWxfcmVzaWRlbmN5GAIgASgOMiYubm9tb3Mua2VybmVsLnYxLktlcm5lbFJlc2lkZW5jeUludGVudBJCChFjdXN0b2R5X3JldGVudGlvbhgDIAEoDjInLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmV0ZW50aW9uSW50ZW50EhQKDHJlbW90ZV9uYW1lcxgEIAMoCSKuAgoWQ3VzdG9keVBsYWNlbWVudFBvbGljeRITCgtkZWNsYXJhdGlvbhgBIAEoCRIWCg5wYWNrYWdlX3NoYTI1NhgCIAEoCRI0CgVydWxlcxgDIAMoCzIlLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UGxhY2VtZW50UnVsZRISCgphZG9wdGVkX2J5GAQgASgJEg4KBnJlYXNvbhgFIAEoCRIeChZlZmZlY3RpdmVfdGltZV9zZWNvbmRzGAYgASgSEi8KB3JlbW90ZXMYByADKAsyHi5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVJlbW90ZRIiChVyZWNpcGllbnRfbWFpbGJveF91cmwYCCABKAlIAIgBAUIYChZfcmVjaXBpZW50X21haWxib3hfdXJsIlkKG0N1c3RvZHlQbGFjZW1lbnRFeHBlY3RhdGlvbhIQCgZhYnNlbnQYASABKAhIABINCgNvaWQYAiABKAlIABINCgNhbnkYAyABKAhIAEIKCghmcm9udGllciIrChtSZWFkQ3VzdG9keVBsYWNlbWVudFJlcXVlc3QSDAoEcmVwbxgBIAEoCSI1Ch5JbnNwZWN0Q3VzdG9keVBsYWNlbWVudFJlcXVlc3QSEwoLcG9saWN5X3VzZGEYASABKAwiiQEKDlBsYWNlbWVudE9mZmVyEj4KCGV4cGVjdGVkGAEgASgLMiwubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlQbGFjZW1lbnRFeHBlY3RhdGlvbhI3CgZwb2xpY3kYAiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeSJpChtSZXNvbHZlU3RhdGVQb3NpdGlvblJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgltYWluX2hlYWQYAiABKAkSFQoNaGludGVkX2NvbW1pdBgDIAEoCRISCgpzdGF0ZV9yb290GAQgASgJIpYTCg9DdXN0b2R5UmVzcG9uc2USOAoKcGFja19kZWx0YRgKIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5QYWNrRGVsdGFSZXNwb25zZUgAEjgKCmFwcGx5X3BhY2sYCyABKAsyIi5ub21vcy5rZXJuZWwudjEuQXBwbHlQYWNrUmVzcG9uc2VIABI4CgpyZXBvX3N0YXRzGAwgASgLMiIubm9tb3Mua2VybmVsLnYxLlJlcG9TdGF0c1Jlc3BvbnNlSAASPgoNaW50ZW50c19hYm92ZRgNIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRzQWJvdmVSZXNwb25zZUgAEkAKDmluc3BlY3RfY2hhbmdlGA4gASgLMiYubm9tb3Mua2VybmVsLnYxLkluc3BlY3RDaGFuZ2VSZXNwb25zZUgAEk8KFmVuY29kZV9yZWZ1c2FsX3ZlcmRpY3QYDyABKAsyLS5ub21vcy5rZXJuZWwudjEuRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXNwb25zZUgAElEKF2luc3BlY3RfcmVmdXNhbF92ZXJkaWN0GBAgASgLMi4ubm9tb3Mua2VybmVsLnYxLkluc3BlY3RSZWZ1c2FsVmVyZGljdFJlc3BvbnNlSAASNgoJcmVhZF9ibG9iGBEgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlYWRCbG9iUmVzcG9uc2VIABI6CgtyZXNvbHZlX3JlZhgSIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmUmVzcG9uc2VIABI2CglsaXN0X3JlZnMYEyABKAsyIS5ub21vcy5rZXJuZWwudjEuTGlzdFJlZnNSZXNwb25zZUgAEjIKCXdyaXRlX3JlZhgUIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWRIABIzCgpkZWxldGVfcmVmGBUgASgLMh0ubm9tb3Mua2VybmVsLnYxLkFja25vd2xlZGdlZEgAEkUKEXdyaXRlX21ldGFfY29tbWl0GBYgASgLMigubm9tb3Mua2VybmVsLnYxLldyaXRlTWV0YUNvbW1pdFJlc3BvbnNlSAASQwoQbGF3X2Nsb3N1cmVfaW5mbxgXIAEoCzInLm5vbW9zLmtlcm5lbC52MS5MYXdDbG9zdXJlSW5mb1Jlc3BvbnNlSAASRgoRY2hlY2twb2ludF9leHBvcnQYGCABKAsyKS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEV4cG9ydFJlc3BvbnNlSAASRgoRY2hlY2twb2ludF9pbXBvcnQYGSABKAsyKS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEltcG9ydFJlc3BvbnNlSAASRAoQY2FwYWNpdHlfcmVzZXJ2ZRgaIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DYXBhY2l0eVJlc2VydmVSZXNwb25zZUgAEjwKDHJlc3RvcmVfbWFpbhgbIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5SZXN0b3JlTWFpblJlc3BvbnNlSAASTwoWcmVzb2x2ZV9zdGF0ZV9wb3NpdGlvbhgcIAEoCzItLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlU3RhdGVQb3NpdGlvblJlc3BvbnNlSAASSAoScmVzaWRlbnRfZm9vdHByaW50GB0gASgLMioubm9tb3Mua2VybmVsLnYxLlJlc2lkZW50Rm9vdHByaW50UmVzcG9uc2VIABJCCg9oaXN0b3J5X3N1bW1hcnkYHiABKAsyJy5ub21vcy5rZXJuZWwudjEuSGlzdG9yeVN1bW1hcnlSZXNwb25zZUgAElsKHHByb3ZlX2NvbXBhY3Rpb25fZXF1aXZhbGVuY2UYHyABKAsyMy5ub21vcy5rZXJuZWwudjEuUHJvdmVDb21wYWN0aW9uRXF1aXZhbGVuY2VSZXNwb25zZUgAEj8KDm9wZW5fZ2l0X3N0YXRlGCAgASgLMiUubm9tb3Mua2VybmVsLnYxLk9wZW5HaXRTdGF0ZVJlc3BvbnNlSAASTwoWcmVhZF9jdXN0b2R5X3BsYWNlbWVudBghIAEoCzItLm5vbW9zLmtlcm5lbC52MS5SZWFkQ3VzdG9keVBsYWNlbWVudFJlc3BvbnNlSAASVQoZaW5zcGVjdF9jdXN0b2R5X3BsYWNlbWVudBgjIAEoCzIwLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q3VzdG9keVBsYWNlbWVudFJlc3BvbnNlSAASUQoXcmVsZWFzZV93b3Jrc3BhY2Vfc3RhdGUYJCABKAsyLi5ub21vcy5rZXJuZWwudjEuUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVzcG9uc2VIABJaCh9yZWNvcmRfd29ya3NwYWNlX2VmZmVjdF9vdXRjb21lGCUgASgLMi8ubm9tb3Mua2VybmVsLnYxLlJlY29yZGVkV29ya3NwYWNlRWZmZWN0T3V0Y29tZUgAEk0KFWF0dGFjaF9sb2NhbF9mcm9udGllchgmIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5BdHRhY2hMb2NhbEZyb250aWVyUmVzcG9uc2VIABJEChBhZ2dyZWdhdGVfY2Vuc3VzGCcgASgLMigubm9tb3Mua2VybmVsLnYxLkFnZ3JlZ2F0ZUNlbnN1c1Jlc3BvbnNlSAASPgoNYXVkaXRfY3VzdG9keRgoIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5BdWRpdEN1c3RvZHlSZXNwb25zZUgAEkkKE2V4cG9ydF9sYXdfcHJvZHVjdHMYKSABKAsyKi5ub21vcy5rZXJuZWwudjEuRXhwb3J0TGF3UHJvZHVjdHNSZXNwb25zZUgAEkkKE2ltcG9ydF9sYXdfcHJvZHVjdHMYKiABKAsyKi5ub21vcy5rZXJuZWwudjEuSW1wb3J0TGF3UHJvZHVjdHNSZXNwb25zZUgAEksKFHByZXBhcmVfbGF3X3Byb2R1Y3RzGCsgASgLMisubm9tb3Mua2VybmVsLnYxLlByZXBhcmVMYXdQcm9kdWN0c1Jlc3BvbnNlSAASQgoYcmVjb3Zlcl9kZXRhY2hlZF9yZWNlaXB0GCwgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVzcG9uc2VIAEILCglvcGVyYXRpb25KBAgiECNSF2Fkb3B0X2N1c3RvZHlfcGxhY2VtZW50InAKEVBhY2tEZWx0YVJlc3BvbnNlEgwKBHBhY2sYASABKAwSDQoFYnl0ZXMYAiABKAQSDwoHc2hhbGxvdxgDIAMoCRIPCgdjb21taXRzGAQgASgNEg0KBXRyZWVzGAUgASgNEg0KBWJsb2JzGAYgASgNIuIBChFBcHBseVBhY2tSZXNwb25zZRIUCgxvYmplY3RfY291bnQYASABKAQSEQoJcGFja19oYXNoGAIgASgJEjsKB2Nsb3N1cmUYAyABKAsyJS5ub21vcy5rZXJuZWwudjEuUGh5c2ljYWxDbG9zdXJlQ2hlY2tIAIgBARIWCg5pbXBvcnRfcGVuZGluZxgEIAEoCBIXCg93b3JrX2RvbmVfYnl0ZXMYBSABKAQSEQoJaW1wb3J0X2lkGAYgASgEEhcKD2ltcG9ydF9kZWZlcnJlZBgHIAEoCEIKCghfY2xvc3VyZSJtChRQaHlzaWNhbENsb3N1cmVDaGVjaxIWCg5yZXVzZWRfcmVjZWlwdBgBIAEoCBIUCgxjb21taXRzX3JlYWQYAiABKAQSEgoKdHJlZXNfcmVhZBgDIAEoBBITCgtsZWF2ZXNfcmVhZBgEIAEoBCK4AQoRUmVwb1N0YXRzUmVzcG9uc2USEwoLdG90YWxfYnl0ZXMYASABKAQSFAoMb2JqZWN0X2J5dGVzGAIgASgEEhUKDWxvb3NlX29iamVjdHMYAyABKAQSEwoLbG9vc2VfYnl0ZXMYBCABKAQSEgoKcGFja19maWxlcxgFIAEoBBISCgpwYWNrX2J5dGVzGAYgASgEEhMKC2luZGV4X2J5dGVzGAcgASgEEg8KB3NoYWxsb3cYCCADKAki4gEKDEludGVudFJlY29yZBILCgNvaWQYASABKAkSEQoJaW50ZW50X2lkGAIgASgJEg4KBmRvbWFpbhgDIAEoCRIRCglkaXJlY3RpdmUYBCABKAkSEwoLY2hhbmdlX3VzZGEYBSABKAwSLgoIc2VtYW50aWMYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSSgoVdHJhbnNwb3J0X3JlcXVpcmVtZW50GAcgASgOMisubm9tb3Mua2VybmVsLnYxLkludGVudFRyYW5zcG9ydFJlcXVpcmVtZW50IkYKFEludGVudHNBYm92ZVJlc3BvbnNlEi4KB2ludGVudHMYASADKAsyHS5ub21vcy5rZXJuZWwudjEuSW50ZW50UmVjb3JkInQKFkhpc3RvcnlTdW1tYXJ5UmVzcG9uc2USDAoEaGVhZBgBIAEoCRIOCgZvbGRlc3QYAiABKAkSFAoMY29tbWl0X2NvdW50GAMgASgEEhAKCGNvbXBsZXRlGAQgASgIEhQKDHJlYWNoZWRfYmFzZRgFIAEoCCJCChNOb21pbmFsQ2FsbElkZW50aXR5EhMKC2RvbWFpbl9wYXRoGAEgASgJEhYKDmRpcmVjdGl2ZV9wYXRoGAIgASgJIogBChhMaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSHwoXdGFyZ2V0X2Nsb3N1cmVfaWRlbnRpdHkYASABKAkSFAoMaW5zdGFsbGVkX2J5GAIgASgJEjUKBXBoYXNlGAMgASgOMiYubm9tb3Mua2VybmVsLnYxLkxpZmVjeWNsZUluc3RhbGxQaGFzZSJaCh1Xb3Jrc3BhY2VSZXNpZGVuY3lSZXF1aXJlbWVudBIRCgl3b3Jrc3BhY2UYASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSEQoJZm9sZF9yb290GAMgASgJIrQCChVJbnNwZWN0Q2hhbmdlUmVzcG9uc2USLgoIc2VtYW50aWMYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJaW50ZW50X2lkGAIgASgJEjIKBGNhbGwYAyABKAsyJC5ub21vcy5rZXJuZWwudjEuTm9taW5hbENhbGxJZGVudGl0eRIQCghhdXRob3JlZBgEIAEoCBJEChFsaWZlY3ljbGVfaW5zdGFsbBgFIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5MaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSTAoUcmVxdWlyZWRfcmVzaWRlbmNpZXMYBiADKAsyLi5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlUmVzaWRlbmN5UmVxdWlyZW1lbnQiTAocUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXNwb25zZRIaCg1yZXNvbHZlZF9oZWFkGAEgASgJSACIAQFCEAoOX3Jlc29sdmVkX2hlYWQiNAocRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXNwb25zZRIUCgx2ZXJkaWN0X3VzZGEYASABKAwiUQodSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVzcG9uc2USMAoHdmVyZGljdBgBIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5SZWZ1c2FsVmVyZGljdCJ1CiJQcm92ZUNvbXBhY3Rpb25FcXVpdmFsZW5jZVJlc3BvbnNlEjgKCGV2aWRlbmNlGAEgASgLMiYubm9tb3Mua2VybmVsLnYxLkNvbXBhY3Rpb25FcXVpdmFsZW5jZRIVCg1ldmlkZW5jZV91c2RhGAIgASgMIi8KEFJlYWRCbG9iUmVzcG9uc2USDQoFZm91bmQYASABKAgSDAoEYmxvYhgCIAEoDCIuChJSZXNvbHZlUmVmUmVzcG9uc2USEAoDb2lkGAEgASgJSACIAQFCBgoEX29pZCIrCglSZWZSZWNvcmQSEQoJcmVmZXJlbmNlGAEgASgJEgsKA29pZBgCIAEoCSI8ChBMaXN0UmVmc1Jlc3BvbnNlEigKBHJlZnMYASADKAsyGi5ub21vcy5rZXJuZWwudjEuUmVmUmVjb3JkIg4KDEFja25vd2xlZGdlZCImChdXcml0ZU1ldGFDb21taXRSZXNwb25zZRILCgNvaWQYASABKAkigwEKFkxhd0Nsb3N1cmVJbmZvUmVzcG9uc2USEAoIaWRlbnRpdHkYASABKAkSGQoRcm9vdF9sb2dpY2FsX3BhdGgYAiABKAkSEwoLYXNzZXRfY291bnQYAyABKAQSEgoKcHJpbV9jb3VudBgEIAEoBBITCgtkb21haW5fa2V5cxgFIAMoCSLfAwoYQ2hlY2twb2ludEV4cG9ydFJlc3BvbnNlEg0KBWVtcHR5GAEgASgIEhMKBmN1cnNvchgCIAEoCUgAiAEBEhAKCGZyb250aWVyGAMgASgMEhcKCnN0YXRlX3Jvb3QYBCABKAlIAYgBARISCgpzdGF0ZV90cmVlGAUgASgIEg4KBnBpbm5lZBgGIAEoCBIbChNyZWFkX2luZGV4X3NuYXBzaG90GAcgASgIEiMKG3JlYWRfaW5kZXhfc25hcHNob3RfcGVuZGluZxgIIAEoCBIkChdyZWFkX2luZGV4X3NxbGl0ZV9ieXRlcxgJIAEoBEgCiAEBEiUKGHJlYWRfaW5kZXhfY3VzdG9keV9ieXRlcxgKIAEoBEgDiAEBElAKGXZlcmlmaWVkX2Zyb250aWVyX3JlY2VpcHQYCyABKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZpZWRGcm9udGllclJlY2VpcHRIBIgBAUIJCgdfY3Vyc29yQg0KC19zdGF0ZV9yb290QhoKGF9yZWFkX2luZGV4X3NxbGl0ZV9ieXRlc0IbChlfcmVhZF9pbmRleF9jdXN0b2R5X2J5dGVzQhwKGl92ZXJpZmllZF9mcm9udGllcl9yZWNlaXB0IusCChhDaGVja3BvaW50SW1wb3J0UmVzcG9uc2USEAoIcmVzdG9yZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESFwoPZnJvbnRpZXJfc2VlZGVkGAMgASgIEiUKHWZyb250aWVyX3ZlcmlmaWNhdGlvbl9wZW5kaW5nGAQgASgIEhcKD2FnZ3JlZ2F0ZV9jb3VudBgFIAEoBBIrCgVzcGFucxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBITCgZjdXJzb3IYByABKAlIAYgBARIRCglyZWFkX29ubHkYCCABKAgSFwoPbGF6eV9yZWFkX2luZGV4GAkgASgIEjcKCWFzc3VyYW5jZRgKIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlEhIKCnJlYWRfcmVhZHkYCyABKAhCCQoHX3JlYXNvbkIJCgdfY3Vyc29yIsABChRPcGVuR2l0U3RhdGVSZXNwb25zZRIOCgZvcGVuZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESFwoPYWdncmVnYXRlX2NvdW50GAMgASgEEisKBXNwYW5zGAQgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhMKBmN1cnNvchgFIAEoCUgBiAEBEhIKCnJlYWRfcmVhZHkYBiABKAhCCQoHX3JlYXNvbkIJCgdfY3Vyc29yIukBChtBdHRhY2hMb2NhbEZyb250aWVyUmVzcG9uc2USEAoIYXR0YWNoZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESDAoEaGVhZBgDIAEoCRISCgpzdGF0ZV9yb290GAQgASgJEhcKD2FnZ3JlZ2F0ZV9jb3VudBgFIAEoBBIrCgVzcGFucxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBISCgpyZWFkX3JlYWR5GAcgASgIEhwKFGZvcmVpZ25fc291cmNlX3JlYWR5GAggASgIQgkKB19yZWFzb24iMQocUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVxdWVzdBIRCgl3b3Jrc3BhY2UYASABKAkiMQodUmVsZWFzZVdvcmtzcGFjZVN0YXRlUmVzcG9uc2USEAoIcmVsZWFzZWQYASABKAgiiwEKHFJlYWRDdXN0b2R5UGxhY2VtZW50UmVzcG9uc2USFQoIZnJvbnRpZXIYASABKAlIAIgBARI8CgZwb2xpY3kYAiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeUgBiAEBQgsKCV9mcm9udGllckIJCgdfcG9saWN5Il0KEFBsYWNlbWVudEFkb3B0ZWQSEAoIZnJvbnRpZXIYASABKAkSNwoGcG9saWN5GAIgASgLMicubm9tb3Mua2VybmVsLnYxLkN1c3RvZHlQbGFjZW1lbnRQb2xpY3kiWgofSW5zcGVjdEN1c3RvZHlQbGFjZW1lbnRSZXNwb25zZRI3CgZwb2xpY3kYASABKAsyJy5ub21vcy5rZXJuZWwudjEuQ3VzdG9keVBsYWNlbWVudFBvbGljeSJKChdDYXBhY2l0eVJlc2VydmVSZXNwb25zZRIXCg9hZ2dyZWdhdGVfY291bnQYASABKAQSFgoOcmVzZXJ2ZWRfYnl0ZXMYAiABKAQi+QIKEFJlc3RvcmVNYWluU3BhbnMSEAoIdG90YWxfdXMYASABKAQSGgoSbGl2ZV9yZWZfbG9va3VwX3VzGAIgASgEEhgKEHRhcmdldF9kZWNvZGVfdXMYAyABKAQSJAocY3VzdG9keV9jb21wbGV0ZW5lc3NfcmVhZF91cxgEIAEoBBIZChFxdWFyYW50aW5lX3JlZl91cxgFIAEoBBIlCh1jaGFpbl9zaWduYXR1cmVfbGF3X3JlcGxheV91cxgGIAEoBBIZChF2ZXJkaWN0X2RlY29kZV91cxgHIAEoBBIjChtwcm9tb3RlX2FuZF9jbGVhbnVwX3JlZnNfdXMYCCABKAQSGwoTZnJvbnRpZXJfcmVidWlsZF91cxgJIAEoBBIZChFmcm9udGllcl9zdG9yZV91cxgKIAEoBBI9Cgx2ZXJpZmljYXRpb24YCyABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcyLvAQoTUmVzdG9yZU1haW5SZXNwb25zZRIMCgRoZWFkGAEgASgJEhAKCHZlcmlmaWVkGAIgASgIEgwKBHdhbGsYAyABKAkSMAoFc3BhbnMYBCABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5TcGFucxItCgd2ZXJkaWN0GAUgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EjcKCWFzc3VyYW5jZRgGIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50QXNzdXJhbmNlEhAKCGFjY2VwdGVkGAcgASgIIpsCCgpOb21vc1ZhbHVlEiUKBG51bGwYASABKAsyFS5ub21vcy5rZXJuZWwudjEuTnVsbEgAEhEKB2Jvb2xlYW4YAiABKAhIABIYCg5zaWduZWRfaW50ZWdlchgDIAEoEkgAEhoKEHVuc2lnbmVkX2ludGVnZXIYBCABKARIABIYCg5mbG9hdGluZ19wb2ludBgFIAEoAUgAEg4KBHRleHQYBiABKAlIABIPCgVieXRlcxgHIAEoDEgAEioKBGxpc3QYCCABKAsyGi5ub21vcy5rZXJuZWwudjEuTm9tb3NMaXN0SAASLgoGb2JqZWN0GAkgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0SABCBgoEa2luZCIGCgROdWxsIjgKCU5vbW9zTGlzdBIrCgZ2YWx1ZXMYASADKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZSKTAQoLTm9tb3NTdHJ1Y3QSOAoGZmllbGRzGAEgAygLMigubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0LkZpZWxkc0VudHJ5GkoKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIqCgV2YWx1ZRgCIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlOgI4ASI6Cg9IaXN0b3J5UmVxdWlyZWQSEQoJd29ya3NwYWNlGAEgASgJEhQKDHVudGlsX2NvbW1pdBgCIAEoCSJAChVMYXdQcmVwYXJhdGlvblVuaXRTZXQSJwoFdW5pdHMYASADKAsyGC5ub21vcy5rZXJuZWwudjEuTGF3VW5pdCJNChBQcmVwYXJlZExhd0xheWVyEg0KBWlucHV0GAEgASgJEgsKA2tleRgCIAEoCRINCgVsYXllchgDIAEoDBIOCgZzaGEyNTYYBCABKAki6AIKGVByZXBhcmVMYXdQcm9kdWN0c1JlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBI5Cgl1bml0X3NldHMYAiADKAsyJi5ub21vcy5rZXJuZWwudjEuTGF3UHJlcGFyYXRpb25Vbml0U2V0Ej0KCGV4cGVjdGVkGAMgASgLMisubm9tb3Mua2VybmVsLnYxLlByZXBhcmVMYXdQcm9kdWN0c1Jlc3BvbnNlEjEKD2NhbmRpZGF0ZV91bml0cxgEIAMoCzIYLm5vbW9zLmtlcm5lbC52MS5MYXdVbml0EhUKDWNvdmVyYWdlX29ubHkYBSABKAgSFQoNY3VzdG9keV9oZWFkcxgGIAMoCRI+Cgtkb21haW5fcGxhbhgHIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlRG9tYWluUGxhblJlcXVlc3QiyAEKGlByZXBhcmVMYXdQcm9kdWN0c1Jlc3BvbnNlEhkKEWtlcm5lbF9nZW5lcmF0aW9uGAEgASgJEhEKCXVuaXRfc2V0cxgCIAMoCRIYChBwcmVwYXJhdGlvbl9rZXlzGAMgAygJEjEKBmxheWVycxgEIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5QcmVwYXJlZExhd0xheWVyEhMKC2Rlcml2YXRpb25zGAUgASgEEhoKEnByZXBhcmF0aW9uX21pY3JvcxgGIAEoBCKIAQodUmVjb3ZlckRldGFjaGVkUmVjZWlwdFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBI1CgZjaGFuZ2UYAiABKAsyJS5ub21vcy5rZXJuZWwudjEuRGV0YWNoZWRTaWduZWRDaGFuZ2UqbgoPTGF3VmVyc2lvbk9yZGVyEiEKHUxBV19WRVJTSU9OX09SREVSX1VOU1BFQ0lGSUVEEAASGwoXTEFXX1ZFUlNJT05fT1JERVJfRVFVQUwQARIbChdMQVdfVkVSU0lPTl9PUkRFUl9MT1dFUhACKuoBChJCaXJ0aE91dGNvbWVTdGF0dXMSJAogQklSVEhfT1VUQ09NRV9TVEFUVVNfVU5TUEVDSUZJRUQQABIdChlCSVJUSF9PVVRDT01FX1NUQVRVU19CT1JOEAESIQodQklSVEhfT1VUQ09NRV9TVEFUVVNfREVGRVJSRUQQAhIfChtCSVJUSF9PVVRDT01FX1NUQVRVU19GQUlMRUQQAxIgChxCSVJUSF9PVVRDT01FX1NUQVRVU19SRUZVU0VEEAQSKQolQklSVEhfT1VUQ09NRV9TVEFUVVNfVU5XQVJSQU5URURfQ0VSVBAFKswUChFLZXJuZWxSZWZ1c2FsQ29kZRIjCh9LRVJORUxfUkVGVVNBTF9DT0RFX1VOU1BFQ0lGSUVEEAASJQohS0VSTkVMX1JFRlVTQUxfQ09ERV9CQURfU0lHTkFUVVJFEAESJAogS0VSTkVMX1JFRlVTQUxfQ09ERV9VTkFVVEhPUklaRUQQAhInCiNLRVJORUxfUkVGVVNBTF9DT0RFX1BPTElDWV9ESVNBQkxFRBADEioKJktFUk5FTF9SRUZVU0FMX0NPREVfVU5DRVJUSUZJRURfUE9MSUNZEAQSIwofS0VSTkVMX1JFRlVTQUxfQ09ERV9SRUZFUkVOVElBTBAFEi8KK0tFUk5FTF9SRUZVU0FMX0NPREVfUE9JTlRfU1RBVEVfVU5BVkFJTEFCTEUQBhIkCiBLRVJORUxfUkVGVVNBTF9DT0RFX0NBUF9FWENFRURFRBAHEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQX0NPVU5UX1VOQVZBSUxBQkxFEAgSKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9FVklERU5DRV9VTkJBQ0tFRBAJEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfT1JQSEFOX1JFQ0VJUFQQChI2CjJLRVJORUxfUkVGVVNBTF9DT0RFX1JFQ0VJUFRfT05fVEVSTUlOQUxfT0JMSUdBVElPThALEiIKHktFUk5FTF9SRUZVU0FMX0NPREVfTk9UX01JTlRFRBAMEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfRE9NQUlOX0xJRkVDWUNMRRANEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfVFlQRV9UQUdfTUlTTUFUQ0gQDhIsCihLRVJORUxfUkVGVVNBTF9DT0RFX1JFVElSRURfUkVBRF9TVVJGQUNFEA8SMAosS0VSTkVMX1JFRlVTQUxfQ09ERV9DUk9TU19XT1JLU1BBQ0VfREVDTElORUQQEBIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FHR1JFR0FURV9JTlZBUklBTlQQERIrCidLRVJORUxfUkVGVVNBTF9DT0RFX1dPUktTUEFDRV9JTlZBUklBTlQQEhIuCipLRVJORUxfUkVGVVNBTF9DT0RFX0NBUFRVUkVEX1JFQURfQ09ORkxJQ1QQExIyCi5LRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1JFUVVJUkVEEBQSNAowS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9VTkRFQ0xBUkVEEBUSMQotS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9JTlZBTElEEBYSLworS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9TVEFMRRAXEjAKLEtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQVFVSRURfUkVBRF9VTkRFQ0xBUkVEEBgSLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBUVVJFRF9SRUFEX1BSSVZBVEUQGRIwCixLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfVU5ERUNMQVJFRBAaEjMKL0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9VTlRSVVNURURfS0VZEBsSNgoyS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1VOVFJVU1RFRF9TT1VSQ0UQHBIsCihLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfRk9SR0VEEB0SKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1NUQUxFEB4SLgoqS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX09WRVJTSVpFEB8SNwozS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX0RJU0hPTk9SRURfU09VUkNFECASNQoxS0VSTkVMX1JFRlVTQUxfQ09ERV9FUVVJVk9DQVRJT05fRVZJREVOQ0VfSU5WQUxJRBAhEjMKL0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNUQVRJT05fUkVDRUlQVF9JTlZBTElEECISKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9LRVlfUk9TVEVSX01JU01BVENIECMSLworS0VSTkVMX1JFRlVTQUxfQ09ERV9LRVlfRVBPQ0hfTk9UX01PTk9UT05JQxAkEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfV1JJVEVfRVBPQ0hfU1RBTEUQJRItCilLRVJORUxfUkVGVVNBTF9DT0RFX0VOVkVMT1BFX1NJRF9NSVNNQVRDSBAmEjIKLktFUk5FTF9SRUZVU0FMX0NPREVfUkVWT0tFRF9NRU1CRVJfUkVTVVJSRUNURUQQJxIoCiRLRVJORUxfUkVGVVNBTF9DT0RFX0ZPUkdFRF9QUklOQ0lQQUwQKBIoCiRLRVJORUxfUkVGVVNBTF9DT0RFX09XTkVEX0tFWV9BTkNIT1IQKRImCiJLRVJORUxfUkVGVVNBTF9DT0RFX09XTkVEX1JFQ09WRVJZECoSLAooS0VSTkVMX1JFRlVTQUxfQ09ERV9TVVJGQUNFRF9CQVNJU19BSEVBRBArEjIKLktFUk5FTF9SRUZVU0FMX0NPREVfU0lHTkVSX0VQT0NIX09VVF9PRl9XSU5ET1cQLBImCiJLRVJORUxfUkVGVVNBTF9DT0RFX0VWT0xWRV9SRUZVU0VEEC0SKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RBVElPTl9JTlZBTElEEC4SLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9QQVJFTlRfRElEX05PVF9BVFRFU1QQLxIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX0NFUlRfQ0hBSU5fQlJPS0VOEDASKgomS0VSTkVMX1JFRlVTQUxfQ09ERV9OT1RfUk9PVEVEX0FUX1JPT1QQMRIqCiZLRVJORUxfUkVGVVNBTF9DT0RFX0RFTEVHQVRJT05fSU5WQUxJRBAyEiUKIUtFUk5FTF9SRUZVU0FMX0NPREVfUExBTl9SRUpFQ1RFRBAzEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfRE9NQUlOX1JFRlVTRUQQNBIxCi1LRVJORUxfUkVGVVNBTF9DT0RFX0lOVkFSSUFOVF9FWEVDVVRJT05fRkFVTFQQNRI1CjFLRVJORUxfUkVGVVNBTF9DT0RFX0NIRUNLUE9JTlRfU0lHTkVSX1VOQVZBSUxBQkxFEDYSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9PRkZFUl9CQVNFX1NUQUxFEDcSJQohS0VSTkVMX1JFRlVTQUxfQ09ERV9CSVJUSF9SRUZVU0VEEDgq7wIKEEZ1bGxSZXN1bHRSZWFzb24SIgoeRlVMTF9SRVNVTFRfUkVBU09OX1VOU1BFQ0lGSUVEEAASHgoaRlVMTF9SRVNVTFRfUkVBU09OX05PX0JBU0UQARIiCh5GVUxMX1JFU1VMVF9SRUFTT05fTEFXX0NIQU5HRUQQAhItCilGVUxMX1JFU1VMVF9SRUFTT05fUkVBRF9BVVRIT1JJVFlfQ0hBTkdFRBADEikKJUZVTExfUkVTVUxUX1JFQVNPTl9QRVJfUkVDT1JEX1JFRlVTQUwQBBIjCh9GVUxMX1JFU1VMVF9SRUFTT05fT1JERVJFRF9SRUFEEAUSJgoiRlVMTF9SRVNVTFRfUkVBU09OX1RFTVBPUkFMX0ZJRUxEUxAGEicKI0ZVTExfUkVTVUxUX1JFQVNPTl9CQVNFX1VOQVZBSUxBQkxFEAcSIwofRlVMTF9SRVNVTFRfUkVBU09OX0xFR0FDWV9TVEFURRAIKskBChNJbnRlcmZhY2VNZW1iZXJLaW5kEiUKIUlOVEVSRkFDRV9NRU1CRVJfS0lORF9VTlNQRUNJRklFRBAAEiAKHElOVEVSRkFDRV9NRU1CRVJfS0lORF9ET01BSU4QARIjCh9JTlRFUkZBQ0VfTUVNQkVSX0tJTkRfRElSRUNUSVZFEAISIwofSU5URVJGQUNFX01FTUJFUl9LSU5EX0FHR1JFR0FURRADEh8KG0lOVEVSRkFDRV9NRU1CRVJfS0lORF9GSUVMRBAEKogCChxJbnRlcmZhY2VDb21wYXRpYmlsaXR5U3RhdHVzEi4KKklOVEVSRkFDRV9DT01QQVRJQklMSVRZX1NUQVRVU19VTlNQRUNJRklFRBAAEigKJElOVEVSRkFDRV9DT01QQVRJQklMSVRZX1NUQVRVU19FWEFDVBABEi0KKUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1NUQVRVU19DT01QQVRJQkxFEAISLgoqSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfU1RBVFVTX1VOQVZBSUxBQkxFEAMSLworSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfU1RBVFVTX0lOQ09NUEFUSUJMRRAEKsMDChxJbnRlcmZhY2VDb21wYXRpYmlsaXR5UmVhc29uEi4KKklOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9VTlNQRUNJRklFRBAAEjEKLUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9ET01BSU5fTUlTU0lORxABEjEKLUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9NRU1CRVJfTUlTU0lORxACEjAKLElOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9GSUVMRF9NSVNTSU5HEAMSNQoxSU5URVJGQUNFX0NPTVBBVElCSUxJVFlfUkVBU09OX1ZBTFVFX0tJTkRfQ0hBTkdFRBAEEjcKM0lOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9SRVFVSVJFRF9JTlBVVF9BRERFRBAFEjEKLUlOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9NQVRSSVhfSU5WQUxJRBAGEjgKNElOVEVSRkFDRV9DT01QQVRJQklMSVRZX1JFQVNPTl9XSVJFX0NPTlRSQUNUX0NIQU5HRUQQByq3AgoQTWFpbnRlbmFuY2VQaGFzZRIhCh1NQUlOVEVOQU5DRV9QSEFTRV9VTlNQRUNJRklFRBAAEiQKIE1BSU5URU5BTkNFX1BIQVNFX1JFQURfRE9DVU1FTlRTEAESIgoeTUFJTlRFTkFOQ0VfUEhBU0VfU1FMSVRFX0lOREVYEAISJgoiTUFJTlRFTkFOQ0VfUEhBU0VfQ09NTUFORF9GUk9OVElFUhADEiMKH01BSU5URU5BTkNFX1BIQVNFX0NPTU1BTkRfUk9VVEUQBBIhCh1NQUlOVEVOQU5DRV9QSEFTRV9HSVRfQ1VTVE9EWRAFEiYKIk1BSU5URU5BTkNFX1BIQVNFX1JFQURfSU5ERVhfQ0FDSEUQBhIeChpNQUlOVEVOQU5DRV9QSEFTRV9DT01QTEVURRAHKooBCg9WZXJpZnlDaGFpbldhbGsSIQodVkVSSUZZX0NIQUlOX1dBTEtfVU5TUEVDSUZJRUQQABIaChZWRVJJRllfQ0hBSU5fV0FMS19GVUxMEAESHAoYVkVSSUZZX0NIQUlOX1dBTEtfU1VGRklYEAISGgoWVkVSSUZZX0NIQUlOX1dBTEtfTUVNTxADKnAKGEVmZmVjdEV4ZWN1dGlvblBsYWNlbWVudBIqCiZFRkZFQ1RfRVhFQ1VUSU9OX1BMQUNFTUVOVF9VTlNQRUNJRklFRBAAEigKJEVGRkVDVF9FWEVDVVRJT05fUExBQ0VNRU5UX0NVU1RPRElBThABKnYKGkVmZmVjdEV4ZWN1dGlvbkNhcmRpbmFsaXR5EiwKKEVGRkVDVF9FWEVDVVRJT05fQ0FSRElOQUxJVFlfVU5TUEVDSUZJRUQQABIqCiZFRkZFQ1RfRVhFQ1VUSU9OX0NBUkRJTkFMSVRZX1NJTkdMRVRPThABKrcBChdNb2RlbExpZmVjeWNsZU9wZXJhdGlvbhIpCiVNT0RFTF9MSUZFQ1lDTEVfT1BFUkFUSU9OX1VOU1BFQ0lGSUVEEAASJQohTU9ERUxfTElGRUNZQ0xFX09QRVJBVElPTl9JTlNUQUxMEAESIwofTU9ERUxfTElGRUNZQ0xFX09QRVJBVElPTl9TVEFHRRACEiUKIU1PREVMX0xJRkVDWUNMRV9PUEVSQVRJT05fUFJPTU9URRADKtwBCh1DaGlsZFdvcmtzcGFjZUxpZmVjeWNsZVN0YXR1cxIwCixDSElMRF9XT1JLU1BBQ0VfTElGRUNZQ0xFX1NUQVRVU19VTlNQRUNJRklFRBAAEisKJ0NISUxEX1dPUktTUEFDRV9MSUZFQ1lDTEVfU1RBVFVTX0FDVElWRRABEiwKKENISUxEX1dPUktTUEFDRV9MSUZFQ1lDTEVfU1RBVFVTX1JFVElSRUQQAhIuCipDSElMRF9XT1JLU1BBQ0VfTElGRUNZQ0xFX1NUQVRVU19SRUNMQUlNRUQQAyr4AQoiRGVjbGFyZWRBdXRoZW50aWNhdGlvblByb3ZpZGVyS2luZBI1CjFERUNMQVJFRF9BVVRIRU5USUNBVElPTl9QUk9WSURFUl9LSU5EX1VOU1BFQ0lGSUVEEAASMgouREVDTEFSRURfQVVUSEVOVElDQVRJT05fUFJPVklERVJfS0lORF9TRUxFQ1RFRBABEjIKLkRFQ0xBUkVEX0FVVEhFTlRJQ0FUSU9OX1BST1ZJREVSX0tJTkRfRU5ST0xMRUQQAhIzCi9ERUNMQVJFRF9BVVRIRU5USUNBVElPTl9QUk9WSURFUl9LSU5EX1NPVkVSRUlHThADKooBChVEZWNsYXJlZExhd01lbWJlcktpbmQSKAokREVDTEFSRURfTEFXX01FTUJFUl9LSU5EX1VOU1BFQ0lGSUVEEAASJAogREVDTEFSRURfTEFXX01FTUJFUl9LSU5EX0NPTU1BTkQQARIhCh1ERUNMQVJFRF9MQVdfTUVNQkVSX0tJTkRfUkVBRBACKosGCh9Qcm92aWRlclRva2VuVmVyaWZpY2F0aW9uU3RhdHVzEjIKLlBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfVU5TUEVDSUZJRUQQABIsCihQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX1ZBTElEEAESNgoyUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19OT19NQVRDSElOR19LRVkQAhIuCipQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0VYUElSRUQQAxI0CjBQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX05PVF9ZRVRfVkFMSUQQBBI2CjJQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0lTU1VFUl9NSVNNQVRDSBAFEjgKNFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfQVVESUVOQ0VfTUlTTUFUQ0gQBhI0CjBQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX0JBRF9TSUdOQVRVUkUQBxIwCixQUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX01BTEZPUk1FRBAIEjwKOFBST1ZJREVSX1RPS0VOX1ZFUklGSUNBVElPTl9TVEFUVVNfVU5TVVBQT1JURURfQUxHT1JJVEhNEAkSLgoqUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19CQURfS0VZEAoSNgoyUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19NSVNTSU5HX1NVQkpFQ1QQCxIyCi5QUk9WSURFUl9UT0tFTl9WRVJJRklDQVRJT05fU1RBVFVTX05PX1ZFUklGSUVSEAwSNAowUFJPVklERVJfVE9LRU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19NSVNTSU5HX1RPS0VOEA0qyAEKEkRldmljZVNpZ25lclN0YXR1cxIkCiBERVZJQ0VfU0lHTkVSX1NUQVRVU19VTlNQRUNJRklFRBAAEh8KG0RFVklDRV9TSUdORVJfU1RBVFVTX0FDVElWRRABEh8KG0RFVklDRV9TSUdORVJfU1RBVFVTX0FCU0VOVBACEiAKHERFVklDRV9TSUdORVJfU1RBVFVTX1JFVk9LRUQQAxIoCiRERVZJQ0VfU0lHTkVSX1NUQVRVU19LRVlfVU5BVkFJTEFCTEUQBCrXAQoTQmlydGhFdmlkZW5jZVN0YXR1cxIlCiFCSVJUSF9FVklERU5DRV9TVEFUVVNfVU5TUEVDSUZJRUQQABImCiJCSVJUSF9FVklERU5DRV9TVEFUVVNfTk9UX1JFUVVJUkVEEAESHwobQklSVEhfRVZJREVOQ0VfU1RBVFVTX1JFQURZEAISLQopQklSVEhfRVZJREVOQ0VfU1RBVFVTX0RFTEVHQVRJT05fUkVRVUlSRUQQAxIhCh1CSVJUSF9FVklERU5DRV9TVEFUVVNfSU5WQUxJRBAEKrIBChFRdWVyeVJlc3VsdEZvcm1hdBIjCh9RVUVSWV9SRVNVTFRfRk9STUFUX1VOU1BFQ0lGSUVEEAASJAogUVVFUllfUkVTVUxUX0ZPUk1BVF9MRUdBQ1lfVkFMVUUQARIkCiBRVUVSWV9SRVNVTFRfRk9STUFUX05PTUlOQUxfVVNEQRACEiwKKFFVRVJZX1JFU1VMVF9GT1JNQVRfQVBQTElDQVRJT05fUFJPVE9CVUYQAyqVDAoOUXVlcnlPcGVyYXRpb24SHwobUVVFUllfT1BFUkFUSU9OX1VOU1BFQ0lGSUVEEAASHAoYUVVFUllfT1BFUkFUSU9OX0VYVFJFTVVNEAESIAocUVVFUllfT1BFUkFUSU9OX1JFQURfUE9TVFVSRRAEEh8KG1FVRVJZX09QRVJBVElPTl9DVVJSRU5UX0xBVxAFEiMKH1FVRVJZX09QRVJBVElPTl9JTlRFUkZBQ0VfT0ZGRVIQBhInCiNRVUVSWV9PUEVSQVRJT05fUkVMQVRJT05fR0FURV9PRkZFUhAHEh0KGVFVRVJZX09QRVJBVElPTl9TQ0VORV9MQVcQCBIhCh1RVUVSWV9PUEVSQVRJT05fSU5TVEFMTEVEX0xBVxAJEhwKGFFVRVJZX09QRVJBVElPTl9ERVNDUklCRRAKEiMKH1FVRVJZX09QRVJBVElPTl9LRVJORUxfUkVTT1VSQ0UQCxIjCh9RVUVSWV9PUEVSQVRJT05fREVWRUxPUEVSX1NQQU5TEAwSKQolUVVFUllfT1BFUkFUSU9OX0RFQ0xBUkVEX0NBUEFCSUxJVElFUxANEh0KGVFVRVJZX09QRVJBVElPTl9SRUFESU5FU1MQDhIkCiBRVUVSWV9PUEVSQVRJT05fUFJPSkVDVElPTl9TVEFUUxAPEiUKIVFVRVJZX09QRVJBVElPTl9NRU1PUllfRFJPUF9QUk9CRRAQEhgKFFFVRVJZX09QRVJBVElPTl9XQVJNEBESGwoXUVVFUllfT1BFUkFUSU9OX1JFRlJFU0gQEhIgChxRVUVSWV9PUEVSQVRJT05fVkVSSUZZX0NIQUlOEBMSIgoeUVVFUllfT1BFUkFUSU9OX0NPVU5URVJGQUNUVUFMEBQSGQoVUVVFUllfT1BFUkFUSU9OX1JPVVRFEBUSJQohUVVFUllfT1BFUkFUSU9OX0NSWVBUT19TRUFMX0ZJRUxEEBgSLAooUVVFUllfT1BFUkFUSU9OX0NSWVBUT19CTElORF9JTkRFWF9UT0tFThAZEioKJlFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfU0NPUEVfS0VZEBoSLworUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9ERVZJQ0VfUkVRVUVTVBAbEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9BUFBST1ZBTBAcEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9SRUNPVkVSWRAdEiAKHFFVRVJZX09QRVJBVElPTl9SRUNFSVBUX1BBVEgQIhIdChlRVUVSWV9PUEVSQVRJT05fQ0VSVF9TSUdOECMSJQohUVVFUllfT1BFUkFUSU9OX0JJUlRIX1RSVVNUX1NUQVRFECQSIQodUVVFUllfT1BFUkFUSU9OX0VSQV9DRVJUX1NJR04QJRIoCiRRVUVSWV9PUEVSQVRJT05fREVMRUdBVElPTl9DRVJUX1NJR04QJhIpCiVRVUVSWV9PUEVSQVRJT05fQ0FOT05JQ0FMSVpFX0ZST05USUVSECcSKwonUVVFUllfT1BFUkFUSU9OX0NBTk9OSUNBTElaRV9QUk9KRUNUSU9OECgiBAgCEAIiBAgDEAMiBAgWEBYiBAgXEBciBAgeEB4iBAgfEB8iBAggECAiBAghECEqIVFVRVJZX09QRVJBVElPTl9QRU5ESU5HX0NPTkZMSUNUUyooUVVFUllfT1BFUkFUSU9OX1BFTkRJTkdfQ09ORkxJQ1RfU1VNTUFSWSoUUVVFUllfT1BFUkFUSU9OX01JTlQqHVFVRVJZX09QRVJBVElPTl9DUllQVE9fS0VZR0VOKh9RVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1dSQVBfS0VZKiFRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1VOV1JBUF9LRVkqHVFVRVJZX09QRVJBVElPTl9BVVRIT1JfS0VZR0VOKiBRVUVSWV9PUEVSQVRJT05fQVRURVNUQVRJT05fU0lHTiqpAQoZUmVhZFByb2plY3Rpb25TdG9yYWdlS2luZBIsCihSRUFEX1BST0pFQ1RJT05fU1RPUkFHRV9LSU5EX1VOU1BFQ0lGSUVEEAASKQolUkVBRF9QUk9KRUNUSU9OX1NUT1JBR0VfS0lORF9SRVNJREVOVBABEjMKL1JFQURfUFJPSkVDVElPTl9TVE9SQUdFX0tJTkRfRklMRV9CQUNLRURfU0NBTEFSEAIq0gIKFVJlc2lkZW50Q29tcG9uZW50S2luZBInCiNSRVNJREVOVF9DT01QT05FTlRfS0lORF9VTlNQRUNJRklFRBAAEiYKIlJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX0ZPTERfU1RBVEUQARItCilSRVNJREVOVF9DT01QT05FTlRfS0lORF9SRUFEX01PREVMX1NRTElURRACEi4KKlJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1JFQURfTU9ERUxfSU5ERVhFUxADEi0KKVJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX1NIQVJFRF9BVFRSSUJVVEVEEAQSLAooUkVTSURFTlRfQ09NUE9ORU5UX0tJTkRfV09SS1NQQUNFX0NBQ0hFUxAFEiwKKFJFU0lERU5UX0NPTVBPTkVOVF9LSU5EX0dJVF9PQkpFQ1RfQ0FDSEUQBipsChNLZXJuZWxMYXdDYXBhYmlsaXR5EiUKIUtFUk5FTF9MQVdfQ0FQQUJJTElUWV9VTlNQRUNJRklFRBAAEi4KKktFUk5FTF9MQVdfQ0FQQUJJTElUWV9TVEFHRV9aRVJPX0JPT1RTVFJBUBABKlkKFUNoZWNrcG9pbnRDb21wcmVzc2lvbhIfChtDSEVDS1BPSU5UX0NPTVBSRVNTSU9OX05PTkUQABIfChtDSEVDS1BPSU5UX0NPTVBSRVNTSU9OX0daSVAQASqRAQocQ2hlY2twb2ludFZlcmlmaWNhdGlvblBvbGljeRIzCi9DSEVDS1BPSU5UX1ZFUklGSUNBVElPTl9QT0xJQ1lfVkVSSUZZX0NBTk9OSUNBTBAAEjwKOENIRUNLUE9JTlRfVkVSSUZJQ0FUSU9OX1BPTElDWV9UUlVTVF9QUkVWSU9VU0xZX1ZFUklGSUVEEAEqgAEKE0NoZWNrcG9pbnRBc3N1cmFuY2USJAogQ0hFQ0tQT0lOVF9BU1NVUkFOQ0VfVU5TUEVDSUZJRUQQABIgChxDSEVDS1BPSU5UX0FTU1VSQU5DRV9UUlVTVEVEEAESIQodQ0hFQ0tQT0lOVF9BU1NVUkFOQ0VfVkVSSUZJRUQQAiqJAQoVS2VybmVsUmVzaWRlbmN5SW50ZW50EicKI0tFUk5FTF9SRVNJREVOQ1lfSU5URU5UX1VOU1BFQ0lGSUVEEAASIAocS0VSTkVMX1JFU0lERU5DWV9JTlRFTlRfV0FSTRABEiUKIUtFUk5FTF9SRVNJREVOQ1lfSU5URU5UX09OX0RFTUFORBACKq4BChZDdXN0b2R5UmV0ZW50aW9uSW50ZW50EigKJENVU1RPRFlfUkVURU5USU9OX0lOVEVOVF9VTlNQRUNJRklFRBAAEiMKH0NVU1RPRFlfUkVURU5USU9OX0lOVEVOVF9SRVRBSU4QARIiCh5DVVNUT0RZX1JFVEVOVElPTl9JTlRFTlRfQ0FDSEUQAhIhCh1DVVNUT0RZX1JFVEVOVElPTl9JTlRFTlRfTk9ORRADKqgBChpJbnRlbnRUcmFuc3BvcnRSZXF1aXJlbWVudBIsCihJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX1VOU1BFQ0lGSUVEEAASLgoqSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9TRUFMRURfQ0hBTkdFEAESLAooSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9DT01NSVRfVFJFRRACKokBChVMaWZlY3ljbGVJbnN0YWxsUGhhc2USJwojTElGRUNZQ0xFX0lOU1RBTExfUEhBU0VfVU5TUEVDSUZJRUQQABIiCh5MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9BQ1RJVkUQARIjCh9MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9QRU5ESU5HEAIyWQoSTm9tb3NLZXJuZWxTZXJ2aWNlEkMKBENhbGwSHC5ub21vcy5rZXJuZWwudjEuQ2FsbFJlcXVlc3QaHS5ub21vcy5rZXJuZWwudjEuQ2FsbFJlc3BvbnNlYgZwcm90bzM", [file_google_protobuf_any]);\nvar CallRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 0);\nvar CallResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 1);\nvar KernelConfigurationRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 180);\nvar CustodyRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 182);\nvar LawClosureInfoRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 209);\nvar PrepareLawProductsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 280);\nvar PrepareLawProductsResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 281);\nvar KernelLawCapabilitySchema = /* @__PURE__ */ enumDesc(file_nomos_kernel_v1_kernel, 22);\nvar KernelLawCapability = /* @__PURE__ */ tsEnum(KernelLawCapabilitySchema);\n\n// ../../adapter/kernel_call_desk.ts\nvar PROTOCOL_VERSION = 1;\nvar generatedRequestSequence = 0;\nvar unpackResponse = (packed) => {\n const value = BigInt.asUintN(\n 64,\n typeof packed === "bigint" ? packed : BigInt(packed)\n );\n return {\n pointer: Number(value >> 32n & 0xffffffffn),\n length: Number(value & 0xffffffffn)\n };\n};\nvar invoke = (machine2, request) => {\n if (request.protocolVersion !== PROTOCOL_VERSION) {\n throw new Error(\n `kernel protobuf ABI ${request.protocolVersion}; expected ${PROTOCOL_VERSION}`\n );\n }\n if (!request.requestId) throw new Error("kernel protobuf request id is required");\n if (!request.operation.case) {\n throw new Error(`kernel call \'${request.requestId}\' carries no operation`);\n }\n const nested = request.operation.value;\n if (nested && typeof nested === "object" && "operation" in nested && !nested.operation?.case) {\n throw new Error(\n `kernel call \'${request.requestId}\' carries a ${request.operation.case} request with no operation`\n );\n }\n const bytes = toBinary(CallRequestSchema, request);\n const requestPointer = machine2.ex.git_holon_alloc(bytes.length) >>> 0;\n try {\n new Uint8Array(\n machine2.ex.memory.buffer,\n requestPointer,\n bytes.length\n ).set(bytes);\n let packed;\n try {\n packed = machine2.ex.git_holon_call_proto(requestPointer, bytes.length);\n } catch (error) {\n const diagnostics = machine2.STDERR.length ? `guest-diagnostics=${machine2.STDERR.slice(-8).join(" / ")}: ` : "";\n throw new Error(`${diagnostics}${String(error?.stack || error)}`);\n }\n const { pointer, length } = unpackResponse(packed);\n try {\n const response = fromBinary(\n CallResponseSchema,\n new Uint8Array(machine2.ex.memory.buffer, pointer, length).slice()\n );\n if (response.protocolVersion !== PROTOCOL_VERSION) {\n throw new Error(\n `kernel protobuf ABI ${response.protocolVersion}; expected ${PROTOCOL_VERSION}`\n );\n }\n if (response.requestId !== request.requestId) {\n const failure = response.outcome.case === "failure" ? `; kernel failure ${response.outcome.value.code}: ${response.outcome.value.message}` : "";\n throw new Error(\n `kernel protobuf response id ${response.requestId || "<empty>"}; expected ${request.requestId}${failure}`\n );\n }\n return response;\n } finally {\n machine2.ex.git_holon_dealloc(pointer, length);\n }\n } finally {\n machine2.ex.git_holon_dealloc(requestPointer, bytes.length);\n }\n};\nvar callKernelOperation = (machine2, operation) => invoke(machine2, create(CallRequestSchema, {\n protocolVersion: PROTOCOL_VERSION,\n requestId: `adapter-${++generatedRequestSequence}`,\n operation\n}));\n\n// ../../adapter/certification_seal.ts\nfunction certificationSealImports(memory, host) {\n const view = (pointer, length, maximum) => {\n const buffer = memory()?.buffer;\n const start = pointer >>> 0, size = length >>> 0;\n if (!buffer || size === 0 || size > maximum || start + size > buffer.byteLength) return;\n return new Uint8Array(buffer, start, size);\n };\n return {\n certified_state_seal(pointer, length, output, capacity) {\n if (!host) return -1;\n const payload = view(pointer, length, 8192), target = view(output, capacity, 128);\n if (!payload || !target) return -1;\n try {\n const tag = host.seal(payload);\n if (!tag || tag.length === 0 || tag.length > target.length) return -1;\n target.set(tag);\n return tag.length;\n } catch {\n return -1;\n }\n },\n certified_state_verify(pointer, length, tagPointer, tagLength) {\n if (!host) return -1;\n const payload = view(pointer, length, 8192), tag = view(tagPointer, tagLength, 128);\n if (!payload || !tag) return 0;\n try {\n const valid = host.verify(payload, tag);\n return valid === void 0 ? -1 : valid ? 1 : 0;\n } catch {\n return -1;\n }\n }\n };\n}\n\n// ../../adapter/kernel_machine_desk.ts\nvar writeBootLaw = (files, path, bytes) => {\n if (files.fileExists(path)) {\n const held = files.readFile(path);\n if (held.byteLength === bytes.byteLength && held.every((byte, index) => byte === bytes[index])) return;\n }\n files.writeFile(path, bytes);\n};\nvar assertUsdz = (name, bytes) => {\n if (bytes.byteLength < 4 || bytes[0] !== 80 || bytes[1] !== 75 || bytes[2] !== 3 || bytes[3] !== 4)\n throw new Error(`${name} must be opaque USDZ bytes`);\n};\nvar unsignedWasiPointers = (imports) => {\n const pointerArguments = {\n args_sizes_get: [0, 1],\n args_get: [0, 1],\n environ_sizes_get: [0, 1],\n environ_get: [0, 1],\n clock_res_get: [1],\n clock_time_get: [2],\n fd_fdstat_get: [1],\n fd_filestat_get: [1],\n fd_pread: [1, 4],\n fd_prestat_get: [1],\n fd_prestat_dir_name: [1],\n fd_pwrite: [1, 4],\n fd_read: [1, 3],\n fd_readdir: [1, 4],\n fd_seek: [3],\n fd_tell: [1],\n fd_write: [1, 3],\n path_create_directory: [1],\n path_filestat_get: [2, 4],\n path_filestat_set_times: [2],\n path_link: [2, 5],\n path_open: [2, 8],\n path_readlink: [1, 3, 5],\n path_remove_directory: [1],\n path_rename: [1, 4],\n path_symlink: [0, 3],\n path_unlink_file: [1],\n poll_oneoff: [0, 1],\n random_get: [0]\n };\n for (const [name, indexes] of Object.entries(pointerArguments)) {\n const original = imports[name];\n if (original === void 0) continue;\n imports[name] = (...args) => {\n for (const index of indexes) args[index] = args[index] >>> 0;\n return original(...args);\n };\n }\n return imports;\n};\nvar verifyLawClosure = (machine2, closureFile, capability) => {\n const response = callKernelOperation(machine2, {\n case: "custody",\n value: create(CustodyRequestSchema, {\n operation: {\n case: "lawClosureInfo",\n value: create(LawClosureInfoRequestSchema, { closureFile, capability })\n }\n })\n });\n if (response.outcome.case !== "custody" || response.outcome.value.operation.case !== "lawClosureInfo" || !response.outcome.value.operation.value.identity)\n throw new Error(`kernel refused USDA closure ${closureFile}`);\n};\nfunction disposableKernelMachine(source, makeHost) {\n const boot2 = bootKernelMachine(source, makeHost);\n let instance;\n try {\n const { Instance } = WebAssembly;\n instance = new Instance(source.wasmModule, boot2.imports);\n } catch (error) {\n boot2.dispose();\n throw error;\n }\n const machine2 = boot2.start(instance);\n const dispose = machine2.dispose;\n return {\n ...machine2,\n dispose() {\n try {\n source.observeStderr?.(`[nomos-kernel-perf] ${JSON.stringify({\n op: "disposable_kernel_released",\n totalUs: 0,\n notes: { memoryBytes: machine2.ex.memory.buffer.byteLength }\n })}`);\n } catch {\n }\n dispose();\n }\n };\n}\nasync function createKernelMachineWithHost(source, makeHost) {\n const boot2 = bootKernelMachine(source, makeHost);\n let instance;\n try {\n instance = await WebAssembly.instantiate(source.wasmModule, boot2.imports);\n } catch (error) {\n boot2.dispose();\n throw error;\n }\n return boot2.start(instance);\n}\nfunction bootKernelMachine(source, makeHost) {\n assertUsdz("bootstrapLawUsdz", source.bootstrapLawUsdz);\n assertUsdz("nomosLawUsdz", source.nomosLawUsdz);\n const stderr = [];\n let observationClock;\n const pushStderr = (line) => {\n if (stderr.length >= 500) stderr.splice(0, stderr.length - 499);\n stderr.push(line);\n source.observeStderr?.(line);\n };\n const host = makeHost(pushStderr);\n let disposed = false;\n const dispose = () => {\n if (!disposed) {\n disposed = true;\n host.dispose();\n }\n };\n try {\n writeBootLaw(host.filesystem.files, "/work/bootstrap.law.usdz", source.bootstrapLawUsdz);\n writeBootLaw(host.filesystem.files, "/work/nomos.law.usdz", source.nomosLawUsdz);\n try {\n host.filesystem.files.mkdir("/work/ws");\n } catch (error) {\n if (error?.code !== "EEXIST") throw error;\n }\n } catch (error) {\n dispose();\n throw error;\n }\n let kernelMemory;\n const imports = {\n wasi_snapshot_preview1: host.imports,\n nomos_peer_office: {\n ...certificationSealImports(() => kernelMemory, source.certificationSeal),\n clock_unix_millis: () => {\n if (!observationClock)\n throw new Error(\n "peer office has not bound the platform observation clock"\n );\n return observationClock.unixNanoseconds() / 1000000n;\n },\n clock_monotonic_nanoseconds: () => {\n if (!observationClock)\n throw new Error(\n "peer office has not bound the platform observation clock"\n );\n return observationClock.monotonicNanoseconds();\n }\n }\n };\n const start = (instance) => {\n try {\n kernelMemory = instance.exports.memory;\n const exitCode = host.start(instance);\n if (exitCode !== 0)\n throw new Error(\n `kernel reactor exited ${exitCode}; stderr=${stderr.join("\\n")}`\n );\n const exports = instance.exports;\n for (const name of [\n "memory",\n "git_holon_alloc",\n "git_holon_dealloc",\n "git_holon_call_proto"\n ]) {\n if (exports[name] === void 0)\n throw new Error(`kernel is missing export ${name}`);\n }\n const machine2 = {\n ex: Object.fromEntries(\n Object.entries(exports).map(([name, value]) => [\n name,\n typeof value !== "function" ? value : (...args) => {\n if (disposed)\n throw new Error("kernel machine has been disposed");\n return value(...args);\n }\n ])\n ),\n STDERR: stderr,\n replica: source.replica,\n ...host.filesystem,\n dispose,\n bindObservationClock(clock) {\n observationClock = clock;\n }\n };\n if (source.trustRootPublicKey !== void 0) {\n if (source.trustRootPublicKey.byteLength !== 32) {\n throw new Error("trustRootPublicKey must contain exactly 32 bytes");\n }\n const configured = callKernelOperation(machine2, {\n case: "configure",\n value: create(KernelConfigurationRequestSchema, {\n trustRootPublicKey: source.trustRootPublicKey\n })\n });\n if (configured.outcome.case !== "configure") {\n throw new Error("kernel refused its boot trust root configuration");\n }\n }\n verifyLawClosure(\n machine2,\n "/work/bootstrap.law.usdz",\n KernelLawCapability.STAGE_ZERO_BOOTSTRAP\n );\n verifyLawClosure(\n machine2,\n "/work/nomos.law.usdz",\n KernelLawCapability.UNSPECIFIED\n );\n return machine2;\n } catch (error) {\n dispose();\n throw error;\n }\n };\n return { imports, start, dispose };\n}\n\n// ../../platform-shells/node/node_custody_filesystem.ts\nimport {\n appendFileSync,\n lstatSync,\n mkdirSync as mkdirSync2,\n opendirSync,\n readFileSync as readFileSync2,\n realpathSync,\n unlinkSync,\n writeFileSync as writeFileSync2\n} from "node:fs";\nimport { isAbsolute, join as join2, parse } from "node:path";\nfunction nodeCustodyFilesystem(directory) {\n if (!isAbsolute(directory))\n throw new Error("kernel working directory must be absolute");\n const root = realpathSync(directory);\n if (root === parse(root).root || !lstatSync(root).isDirectory()) {\n throw new Error("kernel working directory must be a scoped directory");\n }\n const physicalPath = (path) => {\n if (path === "/work") return root;\n const segments = path.slice(6).split("/");\n if (!path.startsWith("/work/") || path.includes("\\\\") || path.includes("\\0") || segments.some((part) => !part || part === "." || part === "..")) {\n throw Object.assign(new Error(`invalid kernel file path: ${path}`), {\n code: "EINVAL"\n });\n }\n let resolved = root;\n for (const segment of segments) {\n resolved = join2(resolved, segment);\n try {\n if (lstatSync(resolved).isSymbolicLink()) {\n throw Object.assign(\n new Error(`kernel file path is a symlink: ${path}`),\n { code: "ELOOP" }\n );\n }\n } catch (error) {\n if (error.code !== "ENOENT") throw error;\n }\n }\n return resolved;\n };\n const measure = (path) => {\n let stat;\n try {\n stat = lstatSync(path, { bigint: true });\n } catch (error) {\n if (error.code === "ENOENT") return 0n;\n throw error;\n }\n if (stat.isFile()) return stat.size;\n if (!stat.isDirectory())\n throw new Error(`unsupported kernel file kind: ${path}`);\n const dir = opendirSync(path);\n let bytes = 0n;\n try {\n for (let entry = dir.readSync(); entry; entry = dir.readSync()) {\n bytes += measure(join2(path, entry.name));\n }\n } finally {\n dir.closeSync();\n }\n return bytes;\n };\n const list = (physical, logical, files2) => {\n let directory2;\n try {\n directory2 = opendirSync(physical);\n } catch (error) {\n if (error.code === "ENOENT") return;\n throw error;\n }\n try {\n for (let entry = directory2.readSync(); entry; entry = directory2.readSync()) {\n const physicalChild = join2(physical, entry.name);\n const logicalChild = `${logical}/${entry.name}`;\n if (entry.isDirectory()) list(physicalChild, logicalChild, files2);\n else if (entry.isFile()) files2.push(logicalChild);\n else throw new Error(`unsupported kernel file kind: ${logicalChild}`);\n }\n } finally {\n directory2.closeSync();\n }\n };\n const files = {\n mkdir: (path) => {\n mkdirSync2(physicalPath(path), { mode: 448 });\n },\n writeFile: (path, bytes) => writeFileSync2(physicalPath(path), bytes, { mode: 384 }),\n unlink: (path) => unlinkSync(physicalPath(path)),\n treeBytes: (path) => measure(physicalPath(path)),\n listFiles: (path) => {\n const result = [];\n list(physicalPath(path), path, result);\n return result.sort();\n },\n readFile: (path) => new Uint8Array(readFileSync2(physicalPath(path))),\n appendFile: (path, bytes) => appendFileSync(physicalPath(path), bytes, { mode: 384 }),\n fileSize: (path) => {\n try {\n const stat = lstatSync(physicalPath(path));\n return stat.isFile() ? stat.size : void 0;\n } catch (error) {\n if (error.code === "ENOENT") return void 0;\n throw error;\n }\n },\n fileExists: (path) => {\n try {\n return lstatSync(physicalPath(path)).isFile();\n } catch (error) {\n if (error.code === "ENOENT") return false;\n throw error;\n }\n }\n };\n return {\n files,\n fs: {\n promises: {\n async mkdir(path) {\n files.mkdir(path);\n },\n async writeFile(path, value) {\n files.writeFile(\n path,\n typeof value === "string" ? new TextEncoder().encode(value) : new Uint8Array(value)\n );\n }\n }\n }\n };\n}\n\n// ../../platform-shells/node/kernel_wasi_stdio.ts\nimport { TextDecoder as TextDecoder2 } from "node:util";\nfunction kernelWasiStdio(memory, stderr, writeFile, stderrPartial) {\n const decoder = new TextDecoder2();\n let pending = "";\n const accept = (bytes) => {\n pending += decoder.decode(bytes, { stream: true });\n for (; ; ) {\n const newline = pending.indexOf("\\n");\n if (newline >= 0 && newline < 16384) {\n stderr(pending.slice(0, newline));\n pending = pending.slice(newline + 1);\n } else if (pending.length >= 16384) {\n stderr(`[nomos-kernel-stderr chunk] ${pending.slice(0, 16384)}`);\n pending = pending.slice(16384);\n } else break;\n }\n if (pending && !pending.startsWith("[nomos-kernel-perf] ")) {\n stderrPartial?.(pending.slice(-2e3));\n }\n };\n return (fd, iovs, count, written) => {\n if (fd !== 1 && fd !== 2) return writeFile(fd, iovs, count, written);\n iovs >>>= 0;\n count >>>= 0;\n written >>>= 0;\n const buffer = memory().buffer;\n if (iovs + count * 8 > buffer.byteLength || written + 4 > buffer.byteLength)\n return 21;\n const view = new DataView(buffer);\n let total = 0;\n for (let index = 0; index < count; index++) {\n const pointer = view.getUint32(iovs + index * 8, true);\n const length = view.getUint32(iovs + index * 8 + 4, true);\n if (pointer + length > buffer.byteLength) return 21;\n total += length;\n if (total > 4294967295) return 28;\n }\n if (fd === 2)\n for (let index = 0; index < count; index++) {\n const pointer = view.getUint32(iovs + index * 8, true);\n const length = view.getUint32(iovs + index * 8 + 4, true);\n for (let offset = 0; offset < length; offset += 4096) {\n accept(\n new Uint8Array(\n buffer,\n pointer + offset,\n Math.min(4096, length - offset)\n )\n );\n }\n }\n view.setUint32(written, total, true);\n return 0;\n };\n}\n\n// ../../platform-shells/node/certification_seal.ts\nimport { spawnSync } from "node:child_process";\nimport { existsSync, mkdirSync as mkdirSync3, mkdtempSync, renameSync as renameSync2, rmSync as rmSync2, chmodSync, writeFileSync as writeFileSync3, openSync, fsyncSync, closeSync } from "node:fs";\nimport { join as join3, resolve } from "node:path";\nfunction nodeCertificationSeal(keyDirectory, custodyIdentity) {\n const directory = resolve(keyDirectory);\n const activeKey = join3(directory, "active-key");\n const privateKey = join3(activeKey, "private.pem");\n const publicKey = join3(activeKey, "public.pem");\n const domain = new TextEncoder().encode(`nomos.host-certified-current/v1\\0${custodyIdentity}\\0`);\n const run = (args) => spawnSync("openssl", args, {\n encoding: null,\n timeout: 5e3,\n maxBuffer: 16384,\n env: { PATH: process.env.PATH ?? "/usr/bin:/bin" },\n stdio: ["ignore", "pipe", "pipe"]\n });\n const ensureKey = () => {\n if (existsSync(privateKey) && existsSync(publicKey)) return true;\n if (existsSync(activeKey)) return false;\n mkdirSync3(directory, { recursive: true, mode: 448 });\n const pending = mkdtempSync(join3(directory, ".generation-"));\n try {\n const pendingPrivate = join3(pending, "private.pem"), pendingPublic = join3(pending, "public.pem");\n if (run(["genpkey", "-algorithm", "ED25519", "-out", pendingPrivate]).status !== 0) return false;\n chmodSync(pendingPrivate, 384);\n if (run(["pkey", "-in", pendingPrivate, "-pubout", "-out", pendingPublic]).status !== 0) return false;\n for (const file of [pendingPrivate, pendingPublic]) {\n const fd = openSync(file, "r");\n try {\n fsyncSync(fd);\n } finally {\n closeSync(fd);\n }\n }\n try {\n renameSync2(pending, activeKey);\n } catch (error) {\n if (!existsSync(privateKey) || !existsSync(publicKey)) throw error;\n }\n return true;\n } finally {\n rmSync2(pending, { recursive: true, force: true });\n }\n };\n const withMessage = (payload, body) => {\n if (payload.length === 0 || payload.length > 8192) return;\n const temporary = mkdtempSync(join3(directory, "message-"));\n try {\n const message = join3(temporary, "message.bin");\n const bytes = new Uint8Array(domain.length + payload.length);\n bytes.set(domain);\n bytes.set(payload, domain.length);\n writeFileSync3(message, bytes, { mode: 384 });\n return body(message, temporary);\n } finally {\n rmSync2(temporary, { recursive: true, force: true });\n }\n };\n return {\n seal(payload) {\n try {\n if (!ensureKey()) return;\n return withMessage(payload, (message) => {\n const result = run(["pkeyutl", "-sign", "-rawin", "-inkey", privateKey, "-in", message]);\n return result.status === 0 && result.stdout.length === 64 ? Uint8Array.from(result.stdout) : void 0;\n });\n } catch {\n return;\n }\n },\n verify(payload, tag) {\n try {\n if (!existsSync(privateKey) || !existsSync(publicKey)) return;\n if (tag.length !== 64) return false;\n return withMessage(payload, (message, temporary) => {\n const signature = join3(temporary, "tag.bin");\n writeFileSync3(signature, tag, { mode: 384 });\n return run([\n "pkeyutl",\n "-verify",\n "-rawin",\n "-pubin",\n "-inkey",\n publicKey,\n "-in",\n message,\n "-sigfile",\n signature\n ]).status === 0;\n });\n } catch {\n return;\n }\n }\n };\n}\n\n// ../../platform-shells/node/node_kernel_machine.ts\nfunction nodeKernelWasiHost(directory, stderr) {\n const filesystem = nodeCustodyFilesystem(directory);\n const wasi = new WASI2({\n version: "preview1",\n args: ["wasm_git_holon", "reactor"],\n env: {},\n preopens: { "/work": realpathSync2(directory) },\n returnOnExit: true\n });\n let memory;\n const imports = unsignedWasiPointers(\n { ...wasi.wasiImport }\n );\n const openDescriptors = /* @__PURE__ */ new Set([3]);\n const pathOpen = imports.path_open;\n const fdClose = imports.fd_close;\n const fdRenumber = imports.fd_renumber;\n imports.path_open = (...args) => {\n const result = pathOpen(...args);\n if (result === 0)\n openDescriptors.add(\n new DataView(memory.buffer).getUint32(args[8] >>> 0, true)\n );\n return result;\n };\n imports.fd_close = (fd) => {\n const result = fdClose(fd);\n if (result === 0) openDescriptors.delete(fd);\n return result;\n };\n imports.fd_renumber = (from, to) => {\n const result = fdRenumber(from, to);\n if (result === 0) {\n openDescriptors.delete(from);\n openDescriptors.add(to);\n }\n return result;\n };\n imports.fd_write = kernelWasiStdio(\n () => memory,\n stderr,\n imports.fd_write,\n (partial) => stderr(`[nomos-kernel-stderr partial] ${partial}`)\n );\n return {\n filesystem,\n imports,\n start(instance) {\n memory = instance.exports.memory;\n return wasi.start(instance);\n },\n dispose() {\n for (const fd of openDescriptors) if (fd >= 3) fdClose(fd);\n openDescriptors.clear();\n }\n };\n}\nvar createNodeKernelMachine = async (source, directory, preparationEnabled = true) => {\n const sealed = {\n ...source,\n // A sibling host-private directory is outside /work and never exported as Git custody.\n certificationSeal: source.certificationSeal ?? nodeCertificationSeal(`${resolve2(directory)}.host-certification`, resolve2(directory))\n };\n const makeHost = (stderr) => nodeKernelWasiHost(directory, stderr);\n const machine2 = await createKernelMachineWithHost(sealed, makeHost);\n const preparation = preparationEnabled ? new LawPreparationQueue(directory, (request) => new Promise((resolve3, reject) => {\n const { observeStderr: _observe, certificationSeal: _seal, ...workerSource } = source;\n const workerUrl = typeof __NOMOS_NODE_LAW_PREPARATION_WORKER__ === "string" ? new URL(`data:text/javascript;charset=utf-8,${encodeURIComponent(__NOMOS_NODE_LAW_PREPARATION_WORKER__)}`) : new URL("./law_preparation_worker.ts", import.meta.url);\n const worker = new Worker(workerUrl, {\n workerData: { source: workerSource, directory, request }\n });\n let settled = false;\n worker.once("message", (message) => {\n settled = true;\n if (message.result) resolve3(message.result);\n else reject(new Error(message.error ?? "law preparation failed"));\n });\n worker.once("error", reject);\n worker.once("exit", (code) => {\n if (!settled) reject(new Error(`law preparation worker exited ${code}`));\n });\n })) : void 0;\n if (preparation) void preparation.resume().catch(() => {\n });\n return {\n ...machine2,\n spawnDisposable: () => disposableKernelMachine(sealed, makeHost),\n ...preparation ? { prepareLawProducts: (request) => preparation.prepare(request) } : {}\n };\n};\n\n// ../../platform-shells/node/law_preparation_worker.ts\nif (!parentPort) throw new Error("law preparation requires a worker thread");\nvar machine = await createNodeKernelMachine(workerData.source, workerData.directory, false);\ntry {\n const request = fromBinary(PrepareLawProductsRequestSchema, workerData.request);\n const answer = callKernelOperation(machine, { case: "custody", value: create(CustodyRequestSchema, {\n operation: { case: "prepareLawProducts", value: request }\n }) });\n if (answer.outcome.case !== "custody" || answer.outcome.value.operation.case !== "prepareLawProducts") {\n throw new Error(answer.outcome.case === "failure" ? answer.outcome.value.message : "law preparation returned no result");\n }\n parentPort.postMessage({ result: toBinary(PrepareLawProductsResponseSchema, answer.outcome.value.operation.value) });\n} catch (error) {\n parentPort.postMessage({ error: String(error) });\n} finally {\n machine.dispose();\n}\n')}`) : new URL2("./law_preparation_worker.ts", import.meta.url);
7281
+ const worker = new Worker(workerUrl, {
7282
+ workerData: { source: workerSource, directory: directory2, request }
7283
+ });
7284
+ let settled = false;
7285
+ worker.once("message", (message) => {
7286
+ settled = true;
7287
+ if (message.result) resolve4(message.result);
7288
+ else reject(new Error(message.error ?? "law preparation failed"));
7289
+ });
7290
+ worker.once("error", reject);
7291
+ worker.once("exit", (code) => {
7292
+ if (!settled) reject(new Error(`law preparation worker exited ${code}`));
7293
+ });
7294
+ })) : void 0;
7295
+ if (preparation) void preparation.resume().catch(() => {
7296
+ });
7297
+ return {
7298
+ ...machine,
7299
+ spawnDisposable: () => disposableKernelMachine(sealed, makeHost),
7300
+ ...preparation ? { prepareLawProducts: (request) => preparation.prepare(request) } : {}
7301
+ };
7224
7302
  };
7225
7303
  async function createEphemeralNodeKernelMachine(source, parent = tmpdir2()) {
7226
- const directory2 = mkdtempSync2(join4(parent, "nomos-kernel-work-"));
7304
+ const directory2 = mkdtempSync2(join5(parent, "nomos-kernel-work-"));
7227
7305
  try {
7228
7306
  const machine = await createNodeKernelMachine(source, directory2);
7229
7307
  let disposed = false;
@@ -7234,13 +7312,13 @@ async function createEphemeralNodeKernelMachine(source, parent = tmpdir2()) {
7234
7312
  if (disposed) return;
7235
7313
  disposed = true;
7236
7314
  machine.dispose();
7237
- rmSync3(directory2, { recursive: true, force: true });
7238
- rmSync3(`${directory2}.host-certification`, { recursive: true, force: true });
7315
+ rmSync4(directory2, { recursive: true, force: true });
7316
+ rmSync4(`${directory2}.host-certification`, { recursive: true, force: true });
7239
7317
  }
7240
7318
  };
7241
7319
  } catch (error) {
7242
- rmSync3(directory2, { recursive: true, force: true });
7243
- rmSync3(`${directory2}.host-certification`, { recursive: true, force: true });
7320
+ rmSync4(directory2, { recursive: true, force: true });
7321
+ rmSync4(`${directory2}.host-certification`, { recursive: true, force: true });
7244
7322
  throw error;
7245
7323
  }
7246
7324
  }
@@ -7248,7 +7326,7 @@ async function createEphemeralNodeKernelMachine(source, parent = tmpdir2()) {
7248
7326
  // ../../platform-shells/node/local-development/kernel_work_recovery.ts
7249
7327
  init_define_NOMOS_KERNEL_RELEASE();
7250
7328
  import { execFileSync as execFileSync2 } from "node:child_process";
7251
- import { existsSync as existsSync3, readdirSync as readdirSync2, statSync, writeFileSync as writeFileSync3 } from "node:fs";
7329
+ import { existsSync as existsSync3, readdirSync as readdirSync3, statSync, writeFileSync as writeFileSync4 } from "node:fs";
7252
7330
  import path from "node:path";
7253
7331
  var KERNEL_WORK_PREFIX = "nomos-kernel-work-";
7254
7332
  var RECOVERED_MARKER = "RECOVERED";
@@ -7271,13 +7349,13 @@ var isAncestor = (gitDir, ancestor, descendant) => {
7271
7349
  function recoverPreservedKernelWork(dataDir, report) {
7272
7350
  const recovered = [];
7273
7351
  const custodyRoot = path.join(dataDir, "custody");
7274
- for (const name of readdirSync2(dataDir).sort()) {
7352
+ for (const name of readdirSync3(dataDir).sort()) {
7275
7353
  const directory2 = path.join(dataDir, name);
7276
7354
  if (!name.startsWith(KERNEL_WORK_PREFIX) || name.endsWith(".host-certification")) continue;
7277
7355
  if (!statSync(directory2).isDirectory() || existsSync3(path.join(directory2, RECOVERED_MARKER))) continue;
7278
7356
  const workspaces = path.join(directory2, "ws");
7279
7357
  if (existsSync3(workspaces)) {
7280
- for (const workspace of readdirSync2(workspaces).sort()) {
7358
+ for (const workspace of readdirSync3(workspaces).sort()) {
7281
7359
  const kernelRepo = path.join(workspaces, workspace, "nomos.git");
7282
7360
  if (!existsSync3(kernelRepo)) continue;
7283
7361
  const head = resolve3(kernelRepo, "refs/heads/main");
@@ -7313,7 +7391,7 @@ function recoverPreservedKernelWork(dataDir, report) {
7313
7391
  }
7314
7392
  }
7315
7393
  }
7316
- writeFileSync3(path.join(directory2, RECOVERED_MARKER), `${JSON.stringify(
7394
+ writeFileSync4(path.join(directory2, RECOVERED_MARKER), `${JSON.stringify(
7317
7395
  recovered.filter((entry) => entry.directory === directory2)
7318
7396
  )}
7319
7397
  `);
@@ -7455,6 +7533,7 @@ function runtimeKernelPort(engine) {
7455
7533
  observationClock = clock2;
7456
7534
  engine.bindObservationClock(clock2);
7457
7535
  },
7536
+ ...engine.prepareLawProducts ? { prepareLawProducts: engine.prepareLawProducts.bind(engine) } : {},
7458
7537
  ...spawnDisposable ? {
7459
7538
  callDisposable: (requestBytes) => {
7460
7539
  const disposable = spawnDisposable();
@@ -7499,6 +7578,11 @@ function runtimeKernelPort(engine) {
7499
7578
  cause: error
7500
7579
  });
7501
7580
  }
7581
+ if (engine.prepareLawProducts && response.outcome.case === "failure" && response.outcome.value.code === "NMS-LAW-PRODUCTS-PENDING") {
7582
+ const pending = pendingLawPreparation(request);
7583
+ if (pending) void engine.prepareLawProducts(pending).catch(() => {
7584
+ });
7585
+ }
7502
7586
  if (response.outcome.case === "failure" && response.outcome.value.code === "NMS-KERNEL-TRAP") {
7503
7587
  throw new Error(
7504
7588
  `${response.outcome.value.code}: ${response.outcome.value.message}`
@@ -7750,6 +7834,25 @@ function streamFilesOf(files) {
7750
7834
  path: path3
7751
7835
  };
7752
7836
  }
7837
+ function pendingLawPreparation(request) {
7838
+ const operation = request.operation;
7839
+ const offer = operation.case === "offer" ? operation.value : operation.case === "prepareRemoteOffer" ? fromBinary(OfferRequestSchema, operation.value.offerRequest) : void 0;
7840
+ const custody = operation.case === "custody" ? operation.value.operation : void 0;
7841
+ const custodyTarget = custody?.value && "target" in custody.value && typeof custody.value.target === "object" ? custody.value.target : void 0;
7842
+ const target3 = operation.case === "query" || operation.case === "open" || operation.case === "sync" || operation.case === "outbox" ? operation.value.target : offer?.target ?? custodyTarget;
7843
+ const query = operation.case === "query" ? operation.value.query : void 0;
7844
+ const candidateUnits = offer?.lawUnits ?? (query?.case === "frontierTransition" || query?.case === "interfaceCompatibility" ? query.value.candidateUnits : []);
7845
+ if (target3) return toBinary(
7846
+ PrepareLawProductsRequestSchema,
7847
+ create(PrepareLawProductsRequestSchema, {
7848
+ target: target3,
7849
+ candidateUnits,
7850
+ coverageOnly: true,
7851
+ ...query?.case === "resolveDomainPlan" ? { domainPlan: query.value } : {},
7852
+ custodyHeads: operation.case === "sync" ? [operation.value.toHead].filter(Boolean) : custody?.value && "head" in custody.value && typeof custody.value.head === "string" ? [custody.value.head].filter(Boolean) : []
7853
+ })
7854
+ );
7855
+ }
7753
7856
 
7754
7857
  // ../../adapter/kernel_execution_desk.ts
7755
7858
  var kernelExecutionDesk = (machine) => runtimeKernelPort(machine);
@@ -8112,6 +8215,14 @@ var KernelReadinessPending = class extends Error {
8112
8215
  this.detail = detail;
8113
8216
  }
8114
8217
  };
8218
+ var KernelLawProductsPending = class extends Error {
8219
+ detail;
8220
+ constructor(detail) {
8221
+ super(detail);
8222
+ this.detail = detail;
8223
+ this.name = "KernelLawProductsPending";
8224
+ }
8225
+ };
8115
8226
  var READINESS_DEBT = /foreign-read-not-ready: .*awaits background (maintenance|certification)/;
8116
8227
  var kernelReadinessPending = (message) => {
8117
8228
  if (!READINESS_DEBT.test(message)) return void 0;
@@ -8156,18 +8267,20 @@ var KernelRefusal = class extends Error {
8156
8267
  }
8157
8268
  };
8158
8269
  function throwKernelFailure(failure) {
8270
+ if (failure.code === "NMS-LAW-PRODUCTS-PENDING") throw new KernelLawProductsPending(failure.message);
8159
8271
  throwIfKernelControlRequired(failure);
8160
8272
  throw new KernelRefusal(failure);
8161
8273
  }
8162
8274
  var KERNEL_FAILURE_TEXT = /^(NMS-[A-Z0-9]+(?:-[A-Z0-9]+)*): ([\s\S]*)$/;
8163
8275
  var ENVIRONMENTAL = /NMS-KERNEL-TRAP|\btrap\b|unreachable|out of bounds|out of memory|memory allocation|\block\b|File exists|No such file|os error|I\/O|Permission denied|No space|\bE(?:EXIST|NOENT|ACCES|NOSPC|IO|AGAIN|BUSY)\b/i;
8164
8276
  function deterministicKernelRefusal(error) {
8165
- if (error instanceof KernelWorkspaceResidencyRequired || error instanceof KernelHistoryRequired || error instanceof KernelReadinessPending) return void 0;
8277
+ if (error instanceof KernelWorkspaceResidencyRequired || error instanceof KernelHistoryRequired || error instanceof KernelReadinessPending || error instanceof KernelLawProductsPending) return void 0;
8166
8278
  if (error instanceof KernelRefusal && (error.failure.historyRequired !== void 0 || error.failure.identityProviderWitnessRequired !== void 0)) return void 0;
8167
8279
  const text = error instanceof Error ? error.message : typeof error === "string" ? error : "";
8168
8280
  const match = KERNEL_FAILURE_TEXT.exec(text);
8169
8281
  if (!match) return void 0;
8170
8282
  const [, code, message] = match;
8283
+ if (code === "NMS-CUSTODY-INCOMPLETE" || code === "NMS-LAW-PRODUCTS-PENDING") return void 0;
8171
8284
  if (ENVIRONMENTAL.test(text) || READINESS_DEBT.test(message) || requiredForeignWorkspace(message) !== void 0) return void 0;
8172
8285
  return { code, message };
8173
8286
  }
@@ -8930,6 +9043,30 @@ function gitCustodyDesk(kernel, fetchImpl = fetch, observe, phaseStarted, import
8930
9043
  }
8931
9044
  return { head: result.value.head, products: result.value.products };
8932
9045
  },
9046
+ async exportProviderLawProducts(workspace, ledger) {
9047
+ if (!ledger.readOnly || ledger.operatorCustody !== true) {
9048
+ throw new Error(`only a read-only operator copy of '${workspace}' repairs law-product custody`);
9049
+ }
9050
+ return acquiring(workspace, ledger, "export-law-products", async () => {
9051
+ const head = resolveRef(workspace, branchRef("main"));
9052
+ try {
9053
+ return desk.exportLawProducts(workspace);
9054
+ } catch (error) {
9055
+ if (!head || !(error instanceof KernelRefusal) || error.code !== "NMS-CUSTODY-INCOMPLETE") throw error;
9056
+ }
9057
+ const fetched = await fetchPackWithBoundaries(ledger.remote, ledger.headers ?? {}, {
9058
+ wants: [head],
9059
+ haves: [],
9060
+ depth: 1
9061
+ }, fetchImpl);
9062
+ if (!fetched) throw new Error(`provider returned no frontier while repairing law products of '${workspace}' at ${head}`);
9063
+ await importFetchedPack(workspace, fetched.pack);
9064
+ if (resolveRef(workspace, branchRef("main")) !== head) {
9065
+ throw new Error(`main moved while repairing law products of '${workspace}' at ${head}`);
9066
+ }
9067
+ return desk.exportLawProducts(workspace);
9068
+ });
9069
+ },
8933
9070
  importLawProducts(workspace, products) {
8934
9071
  const imported = [];
8935
9072
  const refused = [];
@@ -15580,6 +15717,8 @@ function mainAfterCall(request, response) {
15580
15717
  case "releaseWorkspaceState":
15581
15718
  case "aggregateCensus":
15582
15719
  case "auditCustody":
15720
+ case "recoverDetachedReceipt":
15721
+ case "prepareLawProducts":
15583
15722
  case "exportLawProducts":
15584
15723
  case void 0:
15585
15724
  return UNMOVED;
@@ -15615,6 +15754,8 @@ var moveObserver;
15615
15754
  var MainMoves = class {
15616
15755
  /** The last head known per workspace; `null` = known to hold no custody. */
15617
15756
  #known = /* @__PURE__ */ new Map();
15757
+ /** A first sighting has not yet emitted any custody obligation. */
15758
+ #baselines = /* @__PURE__ */ new Set();
15618
15759
  #moved;
15619
15760
  constructor(moved) {
15620
15761
  this.#moved = moved;
@@ -15623,13 +15764,28 @@ var MainMoves = class {
15623
15764
  known(workspace) {
15624
15765
  return this.#known.get(workspace);
15625
15766
  }
15767
+ /** A physical birth receipt proves this office created custody. A read can
15768
+ * race that receipt and establish a baseline first; promote that baseline to
15769
+ * the one birth move, preserving a newer observed head and ignoring repeats. */
15770
+ born(workspace, head) {
15771
+ if (!workspace || !head) return void 0;
15772
+ const observed = this.#known.get(workspace);
15773
+ if (observed && !this.#baselines.has(workspace)) return void 0;
15774
+ this.#known.set(workspace, null);
15775
+ return this.observe(workspace, observed || head, "offer");
15776
+ }
15626
15777
  /** The kernel named this workspace's main head (`undefined`: no custody). */
15627
15778
  observe(workspace, head, via) {
15628
15779
  if (!workspace) return void 0;
15629
15780
  const next = head || null;
15630
15781
  const previous = this.#known.get(workspace);
15631
15782
  this.#known.set(workspace, next);
15632
- if (previous === void 0 || previous === next) return void 0;
15783
+ if (previous === void 0) {
15784
+ if (next) this.#baselines.add(workspace);
15785
+ return void 0;
15786
+ }
15787
+ if (previous === next) return void 0;
15788
+ this.#baselines.delete(workspace);
15633
15789
  const move = {
15634
15790
  workspace,
15635
15791
  from: previous ?? void 0,
@@ -16496,8 +16652,7 @@ var KernelPort = class {
16496
16652
  */
16497
16653
  bornCustodyPersisted(workspace, head) {
16498
16654
  if (!workspace || !head) return;
16499
- if (this.#mainMoves.known(workspace) === void 0) this.#mainMoves.observe(workspace, void 0, "custody");
16500
- this.#mainMoves.observe(workspace, head, "offer");
16655
+ this.#mainMoves.born(workspace, head);
16501
16656
  }
16502
16657
  /** The head of the mounted branch. Main's head, wherever it is found, is reported to the one
16503
16658
  * "main moved" funnel: a head read is how a move made outside this port's calls (recovery on
@@ -17360,6 +17515,10 @@ var KernelPort = class {
17360
17515
  operation,
17361
17516
  () => timelineTraceEnabled() ? this.#timedCall(operation, request) : fromBinary(CallResponseSchema, this.#kernel.call(toBinary(CallRequestSchema, request)))
17362
17517
  );
17518
+ if (this.#kernel.enqueueLawPreparation && response.outcome.case === "failure" && response.outcome.value.code === "NMS-LAW-PRODUCTS-PENDING") {
17519
+ const pending = pendingLawPreparation(request);
17520
+ if (pending) this.#kernel.enqueueLawPreparation(pending);
17521
+ }
17363
17522
  } catch (error) {
17364
17523
  this.#attached?.lost();
17365
17524
  const trapped = error instanceof Error && /NMS-KERNEL-TRAP|\btrap\b|unreachable|out of bounds/i.test(error.message);
@@ -18403,14 +18562,39 @@ var WorkspaceAccessDesk = class {
18403
18562
  WORKSPACE_OPENING_RETRY_AFTER_MILLIS
18404
18563
  );
18405
18564
  }
18406
- if (request.command.case === "syncWorkspace" || request.command.case === "recoverCorrespondence" || request.command.case === "previewLocalCopyDrop" || request.command.case === "dropLocalCopy") {
18565
+ if (request.command.case === "syncWorkspace" || request.command.case === "recoverCorrespondence" || request.command.case === "serveLiveStream" || request.command.case === "previewLocalCopyDrop" || request.command.case === "dropLocalCopy") {
18407
18566
  return yield* this.#settle(resume, workId2, resolving);
18408
18567
  }
18409
18568
  let unreadable;
18410
18569
  if (local.outcome.value.available) {
18411
18570
  const allowUnborn = request.command.case === "kernelCall" && kernelCallPermitsUnbornCustody(request.command.value);
18412
18571
  try {
18413
- this.openLocal(request, workspace, allowUnborn);
18572
+ for (let attempt = 0; ; attempt++) {
18573
+ try {
18574
+ this.openLocal(request, workspace, allowUnborn);
18575
+ break;
18576
+ } catch (error) {
18577
+ if (!(error instanceof KernelLawProductsPending)) throw error;
18578
+ if (attempt === 40) return this.#unavailable(
18579
+ request,
18580
+ RuntimeUnavailableReason.LOCAL_REPLICA_NOT_READY,
18581
+ workspace,
18582
+ "this peer is preparing the workspace law",
18583
+ 250
18584
+ );
18585
+ const receipt = yield { case: "wake", value: create(PeerWakeEffectSchema, {
18586
+ effectId: `${workId2}:${workspace}:law-ready:${attempt}`,
18587
+ delayMillis: 250
18588
+ }) };
18589
+ if (receipt.outcome.case !== "woken") return this.#unavailable(
18590
+ request,
18591
+ RuntimeUnavailableReason.LOCAL_REPLICA_NOT_READY,
18592
+ workspace,
18593
+ "workspace law preparation was interrupted",
18594
+ 250
18595
+ );
18596
+ }
18597
+ }
18414
18598
  } catch (error) {
18415
18599
  if (!(error instanceof WorkspaceLocalCopyUnreadableError)) throw error;
18416
18600
  unreadable = error;
@@ -20306,6 +20490,8 @@ var RECEIVING_GROUP_CONVERGENCE_INTERRUPTED = "nomos.runtime.receiving_group_con
20306
20490
  var RECEIVING_GROUP_ENROLMENT_REFUSED = "nomos.runtime.receiving_group_enrolment_refused";
20307
20491
  var ENROLMENT_ATTEMPTS = 3;
20308
20492
  var ENROLMENT_INITIAL_BACKOFF_MILLIS = 1e3;
20493
+ var ENROLLED_CALL_WAIT_NANOSECONDS = 30000000000n;
20494
+ var ENROLLED_CONVERGENCE_WAIT_NANOSECONDS = 90000000000n;
20309
20495
  var CONSOLE_CREDENTIAL_CODES = /* @__PURE__ */ new Set(["provider_token_invalid", "provider_token_spent", "enrolment_not_admitted"]);
20310
20496
  var ENROLMENT_CREDENTIAL_RETRY_MILLIS = 3e4;
20311
20497
  var LOCAL_COPY_REPAIR_RETRY_MILLIS = 1e3;
@@ -20360,6 +20546,20 @@ var ReceivingGroupDesk = class {
20360
20546
  #opening = /* @__PURE__ */ new Set();
20361
20547
  #accounts = /* @__PURE__ */ new Map();
20362
20548
  /** D22: device key hash → the workspaces the console reported this key enrolled in (this process's memory, not truth). */
20549
+ #localBirths = /* @__PURE__ */ new Map();
20550
+ /** Local admission is not proof that the provider has materialised this child. */
20551
+ localBirth(workspace, parent, head, intentId) {
20552
+ this.#localBirths.set(workspace, { parent, head, intentId });
20553
+ }
20554
+ /** A provider birth admission answers after persisting its born children. The
20555
+ * parent's later retention seal is not an enrolment prerequisite. Intent IDs
20556
+ * also correlate admissions whose commits the provider rebased. */
20557
+ providerIntentsAdmitted(parent, intentIds) {
20558
+ const admitted = new Set(intentIds);
20559
+ for (const [child, birth] of this.#localBirths) {
20560
+ if (birth.parent === parent && birth.intentId && admitted.has(birth.intentId)) this.#localBirths.delete(child);
20561
+ }
20562
+ }
20363
20563
  #consoleEnrolments = /* @__PURE__ */ new Map();
20364
20564
  #preparingCalls = /* @__PURE__ */ new Map();
20365
20565
  #sequence = 0;
@@ -20411,6 +20611,10 @@ var ReceivingGroupDesk = class {
20411
20611
  /** Only a proven non-admission can enter recovery. Console-enrolled children
20412
20612
  * share the owning application's route, selected by credential capability and
20413
20613
  * principal, never by workspace-name guessing or an unverified payload. */
20614
+ /** A person's pending call needs correspondence through discovery and enrolment convergence. */
20615
+ waitingForAccess(workspace) {
20616
+ return [...this.#preparingCalls.values()].some((call) => call.workspace === workspace && !call.settled);
20617
+ }
20414
20618
  recoverOffer(request, response) {
20415
20619
  if (!this.#ports.call || request.command.case !== "kernelCall" || request.command.value.credentialUse !== CredentialUse.SESSION || request.command.value.request?.operation.case !== "offer" || request.command.value.request.operation.value.intent.case !== "call") return;
20416
20620
  const verdict = signerVerdictOf(response);
@@ -20539,7 +20743,7 @@ var ReceivingGroupDesk = class {
20539
20743
  this.#ports.emit(binding.session, purpose === "write" ? { case: "writePreparation", value: create(WritePreparationSchema, observation) } : { case: "readAccessPreparation", value: create(ReadAccessPreparationSchema, observation) });
20540
20744
  const key = JSON.stringify([binding.credentialCapability, principal, binding.workspace]);
20541
20745
  const shared = this.#preparingCalls.get(key);
20542
- const deadline = this.#ports.clock.monotonicNanoseconds() + 30000000000n;
20746
+ const enrolmentDeadline = this.#ports.clock.monotonicNanoseconds() + ENROLLED_CALL_WAIT_NANOSECONDS;
20543
20747
  let wake = 0;
20544
20748
  const blocked = this.#copyBlocks(binding, request.requestId);
20545
20749
  if (blocked) return ended(blocked);
@@ -20547,7 +20751,7 @@ var ReceivingGroupDesk = class {
20547
20751
  while (!shared.settled) {
20548
20752
  const blockedNow = this.#copyBlocks(binding, request.requestId);
20549
20753
  if (blockedNow) return ended(blockedNow);
20550
- if (this.#ports.clock.monotonicNanoseconds() >= deadline) return ended("waiting");
20754
+ if (shared.convergenceDeadline !== void 0 && this.#ports.clock.monotonicNanoseconds() >= shared.convergenceDeadline) return ended("waiting");
20551
20755
  const receipt = yield { case: "wake", value: create(PeerWakeEffectSchema, {
20552
20756
  effectId: `${workId2}:join-${++wake}`,
20553
20757
  delayMillis: 250
@@ -20556,7 +20760,7 @@ var ReceivingGroupDesk = class {
20556
20760
  }
20557
20761
  if (shared.outcome) return ended(shared.outcome);
20558
20762
  } else {
20559
- const preparation = { settled: false };
20763
+ const preparation = { workspace: binding.workspace, settled: false };
20560
20764
  this.#preparingCalls.set(key, preparation);
20561
20765
  try {
20562
20766
  const secret = this.#ports.authorSecretIfPresent(binding.session);
@@ -20565,6 +20769,19 @@ var ReceivingGroupDesk = class {
20565
20769
  let posture = this.#ports.posture(request, binding.session, principal, secret, false);
20566
20770
  if (posture.deviceSignerStatus === DeviceSignerStatus.REVOKED) return ended(preparation.outcome = "revoked");
20567
20771
  if (!posture.enrolledDevice || posture.deviceSignerStatus !== DeviceSignerStatus.ACTIVE) {
20772
+ while (this.#localBirths.has(binding.workspace)) {
20773
+ const birth = this.#localBirths.get(binding.workspace);
20774
+ if (this.#ports.providerBirthObserved(birth.parent, birth.head, request.requestId)) {
20775
+ this.#localBirths.delete(binding.workspace);
20776
+ break;
20777
+ }
20778
+ if (this.#ports.clock.monotonicNanoseconds() >= enrolmentDeadline) return ended(preparation.outcome = "waiting");
20779
+ const receipt = yield { case: "wake", value: create(PeerWakeEffectSchema, {
20780
+ effectId: `${workId2}:birth-wait-${++wake}`,
20781
+ delayMillis: 100
20782
+ }) };
20783
+ if (receipt.outcome.case !== "woken") return ended(preparation.outcome = "waiting");
20784
+ }
20568
20785
  const enrolled = yield* this.#enrolAtConsole(
20569
20786
  route,
20570
20787
  binding,
@@ -20574,17 +20791,18 @@ var ReceivingGroupDesk = class {
20574
20791
  [binding.workspace],
20575
20792
  `${workId2}:console`,
20576
20793
  ENROLMENT_ATTEMPTS,
20577
- deadline
20794
+ enrolmentDeadline
20578
20795
  );
20579
20796
  if (enrolled.case === "deferred") return ended(preparation.outcome = enrolled.credentialRefused ? "sign-in" : "waiting");
20580
20797
  if (!(binding.workspace in enrolled.value.heads)) return ended(preparation.outcome = "denied");
20798
+ preparation.convergenceDeadline = this.#ports.clock.monotonicNanoseconds() + ENROLLED_CONVERGENCE_WAIT_NANOSECONDS;
20581
20799
  while (true) {
20582
20800
  const blockedNow = this.#copyBlocks(binding, request.requestId);
20583
20801
  if (blockedNow) return ended(preparation.outcome = blockedNow);
20584
20802
  posture = this.#ports.posture(request, binding.session, principal, secret, false);
20585
20803
  if (posture.deviceSignerStatus === DeviceSignerStatus.REVOKED) return ended(preparation.outcome = "revoked");
20586
20804
  if (posture.enrolledDevice && posture.deviceSignerStatus === DeviceSignerStatus.ACTIVE) break;
20587
- if (this.#ports.clock.monotonicNanoseconds() >= deadline) return ended(preparation.outcome = "waiting");
20805
+ if (this.#ports.clock.monotonicNanoseconds() >= preparation.convergenceDeadline) return ended(preparation.outcome = "waiting");
20588
20806
  const receipt = yield { case: "wake", value: create(PeerWakeEffectSchema, {
20589
20807
  effectId: `${workId2}:observe-${++wake}`,
20590
20808
  delayMillis: 500
@@ -20675,6 +20893,7 @@ var ReceivingGroupDesk = class {
20675
20893
  this.#opening.clear();
20676
20894
  this.#accounts.clear();
20677
20895
  this.#consoleEnrolments.clear();
20896
+ this.#localBirths.clear();
20678
20897
  this.#preparingCalls.clear();
20679
20898
  }
20680
20899
  #begin(request, workId2, procedure) {
@@ -22120,6 +22339,10 @@ var CustodyReceipts = class {
22120
22339
  if (stored.head !== value.head && !value.bases.includes(stored.head)) return void 0;
22121
22340
  return fromBinary(CustodyIntentAdmissionSchema, toBinary(CustodyIntentAdmissionSchema, stored.receipt));
22122
22341
  }
22342
+ /** Older records did not distinguish parent admission from birth completion. */
22343
+ requiresBirthRecovery(workspace, change) {
22344
+ return this.#receipts.get(`receipt:${workspace}:${sha256Hex(change)}`)?.births !== false;
22345
+ }
22123
22346
  record(workspace, before, after, receipts) {
22124
22347
  const old = this.#journals.get(workspace);
22125
22348
  const journalKey = `head:${workspace}`;
@@ -22128,13 +22351,13 @@ var CustodyReceipts = class {
22128
22351
  value.bases = [...new Set(value.bases)].slice(-MAX_BASES);
22129
22352
  const keys = new Set(value.keys);
22130
22353
  const discarded = new Set(old?.generation !== value.generation ? old?.keys : []);
22131
- for (const { change, receipt } of receipts) {
22354
+ for (const { change, receipt, births = false } of receipts) {
22132
22355
  if (receipt.outcome.case !== "admitted") continue;
22133
22356
  const key = `receipt:${workspace}:${sha256Hex(change)}`;
22134
22357
  keys.delete(key);
22135
22358
  keys.add(key);
22136
22359
  discarded.delete(key);
22137
- const header2 = encoder2.encode(`${JSON.stringify({ generation: value.generation, head: after })}
22360
+ const header2 = encoder2.encode(`${JSON.stringify({ generation: value.generation, head: after, births })}
22138
22361
  `);
22139
22362
  const body = toBinary(CustodyIntentAdmissionSchema, receipt);
22140
22363
  const bytes = new Uint8Array(header2.length + body.length);
@@ -22145,6 +22368,7 @@ var CustodyReceipts = class {
22145
22368
  this.#receipts.set(key, {
22146
22369
  generation: value.generation,
22147
22370
  head: after,
22371
+ births,
22148
22372
  receipt: fromBinary(CustodyIntentAdmissionSchema, body)
22149
22373
  });
22150
22374
  }
@@ -22408,6 +22632,15 @@ var CustodyAdmissionDesk = class {
22408
22632
  })();
22409
22633
  const sessions = /* @__PURE__ */ new Map();
22410
22634
  const births = [];
22635
+ const birthOutcomes = [];
22636
+ const collectBirths = (verdict) => {
22637
+ if (verdict.outcome.case !== "admitted") return;
22638
+ birthOutcomes.push(...verdict.outcome.value.birthOutcomes);
22639
+ for (const child of verdict.outcome.value.born) births.push(create(BornCustodySchema, {
22640
+ child,
22641
+ pack: this.#kernel.packDelta(workspaceMount(child.workspace), request.requestId, child.head)
22642
+ }));
22643
+ };
22411
22644
  const admittedBase = this.#kernel.head(mount, request.requestId) ?? "";
22412
22645
  const streamSession = offers[0]?.session ?? "";
22413
22646
  const streamKey = mount.workspace;
@@ -22415,8 +22648,13 @@ var CustodyAdmissionDesk = class {
22415
22648
  const continuesStream = command.continuesAfter !== void 0 && offers.length > 0 && offers.every((offer) => offer.session === streamSession) && stream?.lastCommit === command.continuesAfter && stream.main === admittedBase;
22416
22649
  if (command.fastForwardOnly && offers.length > 0 && !continuesStream && (command.baseHead ?? "") !== admittedBase) {
22417
22650
  for (const offer of offers) {
22418
- const receipt = this.#receipts.receipt(mount.workspace, admittedBase, offer.changeUsda);
22651
+ let receipt = this.#receipts.receipt(mount.workspace, admittedBase, offer.changeUsda);
22419
22652
  if (!receipt) continue;
22653
+ if (this.#receipts.requiresBirthRecovery(mount.workspace, offer.changeUsda)) {
22654
+ const verdict = this.#offer(request, mount, offer);
22655
+ collectBirths(verdict);
22656
+ receipt = this.#record(offer, verdict);
22657
+ }
22420
22658
  receipt.commitOid = offer.commitOid;
22421
22659
  const records = sessions.get(offer.session) ?? [];
22422
22660
  records.push(receipt);
@@ -22443,6 +22681,8 @@ var CustodyAdmissionDesk = class {
22443
22681
  }
22444
22682
  return create(CustodyAdmissionSchema, {
22445
22683
  main: admittedBase,
22684
+ bornCustody: births,
22685
+ birthOutcomes,
22446
22686
  sessions: [...sessions].map(([session, intents]) => create(CustodySessionAdmissionSchema, { session, intents })),
22447
22687
  ...delta
22448
22688
  });
@@ -22461,20 +22701,11 @@ var CustodyAdmissionDesk = class {
22461
22701
  const records = sessions.get(offer.session) ?? [];
22462
22702
  const receipt = this.#record(offer, verdict);
22463
22703
  records.push(receipt);
22464
- receipts.push({ change: offer.changeUsda, receipt });
22704
+ receipts.push({ change: offer.changeUsda, receipt, births: verdict.outcome.case === "admitted" && (verdict.outcome.value.born.length > 0 || verdict.outcome.value.birthOutcomes.length > 0) });
22465
22705
  sessions.set(offer.session, records);
22466
22706
  if (verdict.outcome.case === "admitted") {
22467
22707
  main = verdict.outcome.value.head;
22468
- for (const child of verdict.outcome.value.born) {
22469
- births.push(create(BornCustodySchema, {
22470
- child,
22471
- pack: this.#kernel.packDelta(
22472
- workspaceMount(child.workspace),
22473
- request.requestId,
22474
- child.head
22475
- )
22476
- }));
22477
- }
22708
+ collectBirths(verdict);
22478
22709
  }
22479
22710
  }
22480
22711
  if (options.journal !== false && receipts.some((entry) => entry.receipt.outcome.case === "admitted")) {
@@ -22492,6 +22723,7 @@ var CustodyAdmissionDesk = class {
22492
22723
  ([sessionIdentity, intents]) => create(CustodySessionAdmissionSchema, { session: sessionIdentity, intents })
22493
22724
  ),
22494
22725
  bornCustody: births,
22726
+ birthOutcomes,
22495
22727
  ...custodyReturnDelta(this.#kernel, mount, request.requestId, command.baseHead, admittedBase, main, command.observedHead)
22496
22728
  });
22497
22729
  }
@@ -26026,7 +26258,7 @@ function delayUntilDue(follow, nowUnixMillis) {
26026
26258
 
26027
26259
  // ../src/runtime/runtime_identity.ts
26028
26260
  init_define_NOMOS_KERNEL_RELEASE();
26029
- var PEER_RUNTIME_IDENTITY = "0.119.13" ? `@githolon/runtime@${"0.119.13"}` : "@githolon/runtime@unbundled";
26261
+ var PEER_RUNTIME_IDENTITY = "0.119.29" ? `@githolon/runtime@${"0.119.29"}` : "@githolon/runtime@unbundled";
26030
26262
 
26031
26263
  // ../src/runtime/replica_follow_desk.ts
26032
26264
  init_define_NOMOS_KERNEL_RELEASE();
@@ -26718,11 +26950,13 @@ var PlacementDiscoveryDesk = class {
26718
26950
  * A sync round just reached a provider: the link is up, and the round may have carried a birth whose
26719
26951
  * custodian now declares the child's placement. Every discovery still waiting (a failure, or an
26720
26952
  * answer without placement) is due again now, with its backoff restarted, instead of on a timer that
26721
- * grew while this peer was offline.
26953
+ * grew while this peer was offline. An enrolment acknowledgement names one
26954
+ * available workspace, so only that workspace leaves discovery backoff.
26722
26955
  */
26723
- providerReached() {
26956
+ providerReached(availableWorkspace) {
26724
26957
  const now2 = this.#now();
26725
26958
  for (const [workspace, state] of this.#inventory) {
26959
+ if (availableWorkspace !== void 0 && workspace !== availableWorkspace) continue;
26726
26960
  if (state.case === DiscoveryPhase.Waiting && state.dueAt > now2) {
26727
26961
  this.#inventory.set(workspace, { case: DiscoveryPhase.Waiting, attempt: 0, dueAt: now2 });
26728
26962
  }
@@ -27588,6 +27822,10 @@ var LiveCorrespondenceDesk = class {
27588
27822
  linkClosed;
27589
27823
  /** The host's origin fence: a link is never opened to an origin it does not permit. */
27590
27824
  originAllowed;
27825
+ /** Application peers bound pending handshakes too: a socket open can warm remote custody. */
27826
+ openingLanes = Infinity;
27827
+ /** Capacity above that bound reserved for an interaction waiting on its workspace. */
27828
+ urgentOpeningLanes = 0;
27591
27829
  /** A batch went out or an admission came back: the stream's progress may have changed. */
27592
27830
  progressChanged;
27593
27831
  /**
@@ -27893,6 +28131,8 @@ var LiveCorrespondenceDesk = class {
27893
28131
  return retried;
27894
28132
  }
27895
28133
  #open(link) {
28134
+ const limit = this.openingLanes + (this.inbound.urgent?.(link.binding.workspace) ? this.urgentOpeningLanes : 0);
28135
+ if (Number.isFinite(limit) && [...this.#links.values()].filter((other) => other.state === "opening").length >= limit) return false;
27896
28136
  link.id = `live:${++this.#sequence}:${link.binding.workspace}`;
27897
28137
  link.state = "opening";
27898
28138
  link.openedAt = void 0;
@@ -27903,6 +28143,7 @@ var LiveCorrespondenceDesk = class {
27903
28143
  link.dirty = true;
27904
28144
  const endpoint = link.origin.replace(/\/+$/, "").replace(/^http/, "ws");
27905
28145
  this.#effect(link, { case: "openUrl", value: `${endpoint}/v2/workspaces/${encodeURIComponent(link.binding.workspace)}/subscribe?${subscribeQuery(link)}` });
28146
+ return true;
27906
28147
  }
27907
28148
  #send(link, message) {
27908
28149
  const bytes = toBinary(LiveOfferFrameSchema, create(LiveOfferFrameSchema, { message }));
@@ -28250,7 +28491,10 @@ var LiveCorrespondenceDesk = class {
28250
28491
  this.#closeByRuntime(link, "open timed out");
28251
28492
  link.state = "closed";
28252
28493
  }
28253
- if (link.state === "closed" && now2 >= link.due) this.#open(link);
28494
+ if (link.state === "closed" && now2 >= link.due && !this.#open(link)) {
28495
+ wake = wake === void 0 || wake > 250n ? 250n : wake;
28496
+ continue;
28497
+ }
28254
28498
  if (link.state === "open" && !link.publisher) {
28255
28499
  const again = this.inbound.drive(link.binding.workspace);
28256
28500
  if (again !== void 0) {
@@ -29547,6 +29791,7 @@ var WorkspaceSyncWork = class {
29547
29791
  #remountsLost = 0;
29548
29792
  /** This round's level ask is a containment question (CAP-870): on a refusal, take this path. */
29549
29793
  #containment;
29794
+ #containmentProven = false;
29550
29795
  /** The stale bookmark a contained round replaces: its custodian's main holds the local head. */
29551
29796
  #containedBookmark;
29552
29797
  /** Local intents this round's rebase refused and parked on the refused-offer desk. */
@@ -29708,6 +29953,7 @@ var WorkspaceSyncWork = class {
29708
29953
  * stays this round's to replace; the local head is the round's base from here. */
29709
29954
  #contained() {
29710
29955
  this.#containment = void 0;
29956
+ this.#containmentProven = true;
29711
29957
  this.#containedBookmark = this.#previousHead;
29712
29958
  this.#previousHead = this.#localHead;
29713
29959
  }
@@ -29723,6 +29969,11 @@ var WorkspaceSyncWork = class {
29723
29969
  }
29724
29970
  notContainedThisLifetime.set(this.#mount.workspace, this.#localHead);
29725
29971
  }
29972
+ if (otherwise === "recover") {
29973
+ this.#offerAfterConverge = this.#command.admit;
29974
+ this.#rebaseFrom = void 0;
29975
+ return this.#acquire("full");
29976
+ }
29726
29977
  if (this.#probeOnly) {
29727
29978
  this.#needsReconciliation = true;
29728
29979
  return this.#finish(create(SyncWorkspaceResponseSchema, {
@@ -30341,6 +30592,7 @@ var WorkspaceSyncWork = class {
30341
30592
  }));
30342
30593
  }
30343
30594
  if (!this.#establishBase(this.#desiredHead)) {
30595
+ if (this.#mayBeContained()) return this.#askContainment("recover");
30344
30596
  this.#offerAfterConverge = this.#command.admit;
30345
30597
  this.#rebaseFrom = void 0;
30346
30598
  return this.#acquire("full");
@@ -30704,7 +30956,7 @@ var WorkspaceSyncWork = class {
30704
30956
  }
30705
30957
  #converged(verdict, candidateHead, receivedBytes, prefetchMillis, started = this.#clock.monotonicNanoseconds(), rebirth) {
30706
30958
  const tracked = verdict.admitted && this.#candidateDurable ? this.#kernel.resolveRef(this.#mount, this.#requestId, trackedMain) : void 0;
30707
- if (verdict.admitted && this.#candidateDurable && tracked !== candidateHead && (tracked === this.#previousHead || this.#containedBookmark !== void 0 && tracked === this.#containedBookmark)) {
30959
+ if (verdict.admitted && this.#candidateDurable && tracked !== candidateHead && (tracked === this.#previousHead || this.#containmentProven && tracked === this.#containedBookmark)) {
30708
30960
  this.#kernel.writeRef(
30709
30961
  this.#mount,
30710
30962
  this.#requestId,
@@ -33998,6 +34250,7 @@ var BirthCustodyWork = class {
33998
34250
  };
33999
34251
  var BirthCustodyDesk = class {
34000
34252
  #kernel;
34253
+ #sequence = 0;
34001
34254
  #work = new CorrespondenceWorkRegistry();
34002
34255
  #publicationRefs;
34003
34256
  /** The kernel call each unfinished birth-custody work answers. Its admitted parent frontier becomes
@@ -34012,6 +34265,9 @@ var BirthCustodyDesk = class {
34012
34265
  this.#publicationRefs = publicationRefs;
34013
34266
  }
34014
34267
  afterKernelCall(request, response) {
34268
+ if (response.outcome.case === "offer" && response.outcome.value.outcome.case === "admitted") {
34269
+ this.#requireBuilt(request, response.outcome.value.outcome.value.birthOutcomes, false);
34270
+ }
34015
34271
  const births = response.outcome.case === "offer" && response.outcome.value.outcome.case === "admitted" ? response.outcome.value.outcome.value.born.map((child) => create(BornCustodySchema, {
34016
34272
  child,
34017
34273
  pack: this.#kernel.packDelta(
@@ -34023,6 +34279,7 @@ var BirthCustodyDesk = class {
34023
34279
  return this.#begin(request, { case: "kernelCall", value: response }, births);
34024
34280
  }
34025
34281
  afterCustodyAdmission(request, admission) {
34282
+ this.#requireBuilt(request, admission.birthOutcomes, true);
34026
34283
  return this.#begin(
34027
34284
  request,
34028
34285
  { case: "custodyOffersAdmitted", value: admission },
@@ -34039,7 +34296,19 @@ var BirthCustodyDesk = class {
34039
34296
  * retained into custody (and a stop drops it, leaving an orphan child).
34040
34297
  */
34041
34298
  continue(workId2, receipt) {
34042
- const step = this.#work.resume(workId2, receipt);
34299
+ let step;
34300
+ try {
34301
+ step = this.#work.resume(workId2, receipt);
34302
+ } catch (error) {
34303
+ const pending = this.#work.peek(workId2);
34304
+ const physicalFailure = receipt.outcome.case === "failure" || receipt.outcome.case === "bornCustodyPersisted" && receipt.outcome.value.children.some((child) => !child.persisted);
34305
+ if (physicalFailure && pending?.case === "pending" && pending.value.effect.case === "persistBornCustody" && pending.value.effect.value.effectId === receipt.effectId) {
34306
+ this.#work.failed(workId2, receipt.effectId, error instanceof Error ? error.message : String(error));
34307
+ this.#origins.delete(workId2);
34308
+ this.#bornByCustodyAdmission.delete(workId2);
34309
+ }
34310
+ throw error;
34311
+ }
34043
34312
  if (step.case !== "complete") return { step };
34044
34313
  this.#work.completed(workId2);
34045
34314
  for (const child of this.#bornByCustodyAdmission.get(workId2) ?? []) {
@@ -34055,6 +34324,20 @@ var BirthCustodyDesk = class {
34055
34324
  this.#origins.clear();
34056
34325
  this.#bornByCustodyAdmission.clear();
34057
34326
  }
34327
+ #requireBuilt(request, outcomes, custody) {
34328
+ const pending = outcomes.filter((outcome) => outcome.status !== BirthOutcomeStatus.BORN);
34329
+ for (const outcome of pending) {
34330
+ console.error("nomos.birth.incomplete", {
34331
+ parent: request.target?.workspace,
34332
+ child: outcome.workspace,
34333
+ status: outcome.status,
34334
+ reason: outcome.reason,
34335
+ code: outcome.code
34336
+ });
34337
+ }
34338
+ const failed = pending.filter((outcome) => custody || outcome.status !== BirthOutcomeStatus.DEFERRED);
34339
+ if (failed.length) throw new Error(`birth custody incomplete; retry the exact admitted parent offer: ${failed.map((outcome) => `${outcome.workspace ?? "unknown child"}: ${outcome.reason ?? outcome.code ?? outcome.status}`).join("; ")}`);
34340
+ }
34058
34341
  #begin(request, outcome, births) {
34059
34342
  if (births.length === 0) return { case: "complete", value: outcome };
34060
34343
  for (const birth of births) {
@@ -34062,8 +34345,7 @@ var BirthCustodyDesk = class {
34062
34345
  throw new Error("kernel admitted a birth without complete child Git custody");
34063
34346
  }
34064
34347
  }
34065
- const workId2 = `birth-custody-${births.map((birth) => `${birth.child.workspace}@${birth.child.head}`).sort().join("+")}`;
34066
- if (this.#work.has(workId2)) return this.#work.current(workId2);
34348
+ const workId2 = `birth-custody-${++this.#sequence}-${births.map((birth) => `${birth.child.workspace}@${birth.child.head}`).sort().join("+")}`;
34067
34349
  this.#origins.set(workId2, request);
34068
34350
  if (outcome.case === "custodyOffersAdmitted") {
34069
34351
  this.#bornByCustodyAdmission.set(workId2, births.map((birth) => ({
@@ -34932,6 +35214,7 @@ function terminal(response) {
34932
35214
  }
34933
35215
  var BackgroundPaperSlots = class {
34934
35216
  #now;
35217
+ #waitingForAccess;
34935
35218
  #papers = /* @__PURE__ */ new Map();
34936
35219
  #urgentUntil = /* @__PURE__ */ new Map();
34937
35220
  #rungUntil = /* @__PURE__ */ new Map();
@@ -34940,8 +35223,9 @@ var BackgroundPaperSlots = class {
34940
35223
  /** Application opens still waiting on correspondence, by request id. */
34941
35224
  #opening = /* @__PURE__ */ new Map();
34942
35225
  /** `monotonicNanoseconds` of the office's observation clock. */
34943
- constructor(monotonicNanoseconds) {
35226
+ constructor(monotonicNanoseconds, waitingForAccess = () => false) {
34944
35227
  this.#now = monotonicNanoseconds;
35228
+ this.#waitingForAccess = waitingForAccess;
34945
35229
  }
34946
35230
  /** Workspaces with a paper in flight; expired leases are dropped first. */
34947
35231
  inFlight() {
@@ -34952,6 +35236,7 @@ var BackgroundPaperSlots = class {
34952
35236
  return new Set([...this.#papers.values()].map((paper) => paper.workspace));
34953
35237
  }
34954
35238
  urgent(workspace) {
35239
+ if (this.#waitingForAccess(workspace)) return true;
34955
35240
  const until = this.#urgentUntil.get(workspace);
34956
35241
  if (until === void 0) return false;
34957
35242
  if (until > this.#now()) return true;
@@ -34964,6 +35249,12 @@ var BackgroundPaperSlots = class {
34964
35249
  this.#rungUntil.set(workspace, this.#now() + BigInt(URGENT_WAIT_MILLIS) * MILLIS);
34965
35250
  if ([...this.#papers.values()].some((paper) => paper.workspace === workspace)) this.#rungBehind.add(workspace);
34966
35251
  }
35252
+ /** Speculative follows cannot turn their initial announcements into interaction priority. */
35253
+ remoteAdvanced(workspace, interacting) {
35254
+ if (!interacting && !this.urgent(workspace)) return false;
35255
+ this.rang(workspace);
35256
+ return true;
35257
+ }
34967
35258
  rung(workspace) {
34968
35259
  const until = this.#rungUntil.get(workspace);
34969
35260
  if (until === void 0) return false;
@@ -34998,9 +35289,6 @@ var BackgroundPaperSlots = class {
34998
35289
  if (!this.#rungBehind.delete(paper.workspace)) this.#rungUntil.delete(paper.workspace);
34999
35290
  return;
35000
35291
  }
35001
- if (response.outcome.case === "workspaceFetch" && response.outcome.value.following) {
35002
- this.#waitsOn(response.outcome.value.workspace);
35003
- }
35004
35292
  if (response.outcome.case === "unavailable") {
35005
35293
  const { reason, workspace } = response.outcome.value;
35006
35294
  if (reason === RuntimeUnavailableReason.LOCAL_REPLICA_NOT_READY || reason === RuntimeUnavailableReason.WORKSPACE_OPENING || reason === RuntimeUnavailableReason.FIRST_DOWNLOAD) {
@@ -35589,7 +35877,10 @@ var PeerOffice = class {
35589
35877
  }
35590
35878
  } }
35591
35879
  );
35592
- this.#paperSlots = new BackgroundPaperSlots(() => observations.monotonicNanoseconds());
35880
+ this.#paperSlots = new BackgroundPaperSlots(
35881
+ () => observations.monotonicNanoseconds(),
35882
+ (workspace) => this.#receivingGroup?.waitingForAccess(workspace) ?? false
35883
+ );
35593
35884
  kernel.bindObservationClock(observations);
35594
35885
  bindTimelineClock(observations);
35595
35886
  this.#clock = observations;
@@ -35627,6 +35918,10 @@ var PeerOffice = class {
35627
35918
  this.#lawTrees
35628
35919
  );
35629
35920
  this.#live.inbound.urgent = (workspace) => this.#paperSlots.urgent(workspace) || this.#paperSlots.rung(workspace);
35921
+ if (profile.classes.some((peerClass) => INTERACTIVE_PEER_CLASSES.has(peerClass))) {
35922
+ this.#live.openingLanes = 2;
35923
+ this.#live.urgentOpeningLanes = 2;
35924
+ }
35630
35925
  this.#liveStream = new LiveStreamServer(this.#kernel, Date.now, (workspace) => {
35631
35926
  try {
35632
35927
  this.#historyAcquisition.requestFromBackground(workspace, this.#historyCredentialCapability(workspace));
@@ -35709,9 +36004,9 @@ var PeerOffice = class {
35709
36004
  this.#admissionDurability = new AdmissionDurabilityDesk(this.#kernel, retention);
35710
36005
  }
35711
36006
  this.#birthCustody = new BirthCustodyDesk(this.#kernel, (request, workspace) => {
36007
+ this.#replicaInventory.placementMayHaveChanged(workspace);
35712
36008
  if (!this.#custodianPlacement) return [];
35713
36009
  this.#custodianPlacement.ensure(workspace, request.requestId);
35714
- this.#replicaInventory.placementMayHaveChanged(workspace);
35715
36010
  return retention.refs(workspace);
35716
36011
  });
35717
36012
  this.#commandPreparation = new CommandPreparationDesk(this.#readMaintenance);
@@ -35734,7 +36029,10 @@ var PeerOffice = class {
35734
36029
  const workspace = this.#sessions.binding(session).workspace;
35735
36030
  this.#trace.measure("peer.application.schedule-after-admission", { request, session, workspace }, {}, () => {
35736
36031
  this.#writeBurst?.offered();
35737
- if (!admitted.dryRun) this.#paperSlots.localWrite(workspace);
36032
+ if (!admitted.dryRun) {
36033
+ this.#paperSlots.localWrite(workspace);
36034
+ for (const child of admitted.born) this.#receivingGroup.localBirth(child.workspace, workspace, admitted.head, admitted.intentId);
36035
+ }
35738
36036
  if (!admitted.dryRun) this.#readMaintenance.localOfferAdmitted(session);
35739
36037
  this.#correspondence.workspaceFrontierChanged(workspace);
35740
36038
  });
@@ -35882,6 +36180,7 @@ var PeerOffice = class {
35882
36180
  backgroundHistory: profile.backgroundHistory !== false,
35883
36181
  onSyncCompleted: (session, event) => {
35884
36182
  if (event.result?.workspace) {
36183
+ this.#receivingGroup.providerIntentsAdmitted(event.result.workspace, [...event.result.admittedIntentIds, ...event.result.convergedIntentIds]);
35885
36184
  this.#replicaInventory.placementMayHaveChanged(event.result.workspace);
35886
36185
  }
35887
36186
  if (this.#sessions.bindingIfPresent(session)) {
@@ -35904,13 +36203,17 @@ var PeerOffice = class {
35904
36203
  return false;
35905
36204
  };
35906
36205
  this.#live.remoteAdvanced = (workspace) => {
35907
- this.#paperSlots.rang(workspace);
35908
- this.#rungThisReceipt?.add(workspace);
36206
+ if (this.#paperSlots.remoteAdvanced(workspace, this.#sessions.hasWorkspaceSession(workspace))) {
36207
+ this.#rungThisReceipt?.add(workspace);
36208
+ }
35909
36209
  this.#correspondence.replicaRemoteAdvanced(workspace);
35910
36210
  };
35911
36211
  this.#live.declined = (workspace) => this.#correspondence.liveAdmissionDeclined(workspace);
35912
36212
  this.#live.acknowledged = (workspace, ack) => this.#correspondence.liveAdmissionAcknowledged(workspace, ack);
35913
- this.#live.intentsAdmitted = (workspace, intentIds, local) => this.#correspondence.liveIntentsAdmitted(workspace, intentIds, local);
36213
+ this.#live.intentsAdmitted = (workspace, intentIds, local) => {
36214
+ this.#receivingGroup.providerIntentsAdmitted(workspace, intentIds);
36215
+ this.#correspondence.liveIntentsAdmitted(workspace, intentIds, local);
36216
+ };
35914
36217
  this.#live.placementAdvanced = (workspace) => this.#correspondence.replicaPlacementAnnounced(workspace);
35915
36218
  this.#live.progressChanged = () => this.#correspondence.reportFollows();
35916
36219
  this.#correspondence.streamProgress = (workspace) => this.#live.progress(workspace);
@@ -36013,7 +36316,7 @@ var PeerOffice = class {
36013
36316
  }
36014
36317
  },
36015
36318
  (request) => {
36016
- if (request.command.case === "admitCustodyOffers") {
36319
+ if (request.command.case === "admitCustodyOffers" || request.command.case === "serveLiveStream") {
36017
36320
  const workspace = request.target?.workspace;
36018
36321
  if (!workspace) return void 0;
36019
36322
  return this.#kernel.head(
@@ -36074,6 +36377,11 @@ var PeerOffice = class {
36074
36377
  providerBase: (request, workspace) => this.#placement.providerBase(request, this.#sessions.mountForWorkspace(workspace)),
36075
36378
  sessionsBoundTo: (workspace) => this.#sessions.applicationSessions().filter((binding) => binding.workspace === workspace).map((binding) => binding.session),
36076
36379
  localHead: (session, requestId) => this.#kernel.head(this.#sessions.mountForSession(session), requestId),
36380
+ providerBirthObserved: (parent, birthHead, requestId) => {
36381
+ const mount = workspaceMount(parent);
36382
+ const tracked = this.#kernel.resolveRef(mount, requestId, "refs/remotes/nomos/main");
36383
+ return !!tracked && (tracked === birthHead || this.#kernel.historySummary(mount, requestId, birthHead, tracked).reachedBase);
36384
+ },
36077
36385
  localCopyUnreadable: (session, requestId) => this.#localCopyUnreadable(session, requestId),
36078
36386
  localCopyRepairing: (workspace) => this.#correspondence.localCopyRepairing(workspace),
36079
36387
  refetchUnreadableLocalCopy: (workspace, head) => this.#correspondence.refetchUnreadableLocalCopy(workspace, head),
@@ -36110,7 +36418,12 @@ var PeerOffice = class {
36110
36418
  this.#enrolledCapabilities.add(this.#sessions.credentialCapabilityFor(session));
36111
36419
  },
36112
36420
  // The answer names the head that carries this key's enrollDevice: fetch it now, as a doorbell would.
36113
- consoleEnrolled: (workspace) => this.#correspondence.replicaLinkOpened(workspace)
36421
+ consoleEnrolled: (workspace) => {
36422
+ this.#replicaInventory.placementMayHaveChanged(workspace);
36423
+ this.#placementDiscovery.providerReached(workspace);
36424
+ this.#paperSlots.rang(workspace);
36425
+ this.#correspondence.replicaRemoteAdvanced(workspace);
36426
+ }
36114
36427
  });
36115
36428
  this.#offerReadiness = new OfferReadinessDesk({
36116
36429
  call: (request, command) => this.#application.call(request, command),
@@ -36282,21 +36595,21 @@ var PeerOffice = class {
36282
36595
  * Platform shells may wake this method and execute the returned exact frame;
36283
36596
  * they do not inspect the outbox or own retry state.
36284
36597
  */
36285
- nextBackgroundPaper(requestId, retentionOnly = false, excludedWorkspaces = /* @__PURE__ */ new Set()) {
36286
- return this.#backgroundTurn(() => this.#timedBackgroundPaper(requestId, retentionOnly, excludedWorkspaces));
36598
+ nextBackgroundPaper(requestId, retentionOnly = false, excludedWorkspaces = /* @__PURE__ */ new Set(), urgentOnly = false) {
36599
+ return this.#backgroundTurn(() => this.#timedBackgroundPaper(requestId, retentionOnly, excludedWorkspaces, urgentOnly));
36287
36600
  }
36288
- #timedBackgroundPaper(requestId, retentionOnly, excludedWorkspaces) {
36601
+ #timedBackgroundPaper(requestId, retentionOnly, excludedWorkspaces, urgentOnly) {
36289
36602
  const turn = beginTimelineTurn("paper", void 0, () => retentionOnly ? "retention" : "paper");
36290
- if (turn === void 0) return this.#nextBackgroundPaper(requestId, retentionOnly, excludedWorkspaces);
36603
+ if (turn === void 0) return this.#nextBackgroundPaper(requestId, retentionOnly, excludedWorkspaces, urgentOnly);
36291
36604
  let paper;
36292
36605
  try {
36293
- paper = this.#nextBackgroundPaper(requestId, retentionOnly, excludedWorkspaces);
36606
+ paper = this.#nextBackgroundPaper(requestId, retentionOnly, excludedWorkspaces, urgentOnly);
36294
36607
  return paper;
36295
36608
  } finally {
36296
36609
  endTimelineTurn(turn, paper?.frame === void 0 ? `paper=none next=${paper?.nextAfterMillis ?? "idle"}` : `paper=${requestId} bytes=${paper.frame.byteLength}`);
36297
36610
  }
36298
36611
  }
36299
- #nextBackgroundPaper(requestId, retentionOnly, excludedWorkspaces) {
36612
+ #nextBackgroundPaper(requestId, retentionOnly, excludedWorkspaces, urgentOnly) {
36300
36613
  if (retentionOnly) return this.#background.next(requestId, true, excludedWorkspaces);
36301
36614
  const inFlight = this.#paperSlots.inFlight();
36302
36615
  const id = typeof requestId === "bigint" ? requestId : BigInt(requestId);
@@ -36305,14 +36618,14 @@ var PeerOffice = class {
36305
36618
  let paper;
36306
36619
  if (rung?.frame !== void 0) {
36307
36620
  paper = rung;
36308
- } else if (inFlight.size === 0) {
36621
+ } else if (inFlight.size === 0 && !urgentOnly) {
36309
36622
  paper = this.#background.next(requestId, false, excludedWorkspaces);
36310
36623
  } else {
36311
36624
  const retention = this.#background.next(requestId, true, excludedWorkspaces);
36312
36625
  if (retention.frame !== void 0) return retention;
36313
36626
  const free = (workspace) => !inFlight.has(workspace) && !converging.has(workspace) && !excludedWorkspaces.has(workspace);
36314
36627
  paper = this.#background.nextBeside(requestId, { has: (workspace) => this.#paperSlots.urgent(workspace) && free(workspace) });
36315
- if (paper.frame === void 0) {
36628
+ if (paper.frame === void 0 && !urgentOnly) {
36316
36629
  const ordinary = this.#background.nextBeside(requestId, { has: free });
36317
36630
  const delays = [paper.nextAfterMillis, ordinary.nextAfterMillis, retention.nextAfterMillis].filter((delay) => delay !== void 0);
36318
36631
  paper = ordinary.frame !== void 0 ? ordinary : { ...delays.length ? { nextAfterMillis: Math.min(...delays) } : {}, ...ordinary.maintenanceDue || paper.maintenanceDue ? { maintenanceDue: true } : {} };
@@ -37007,6 +37320,7 @@ var PeerOffice = class {
37007
37320
  );
37008
37321
  }
37009
37322
  this.#live.close();
37323
+ this.#streamWaits.clear();
37010
37324
  if (!this.#lifecycle.close()) {
37011
37325
  this.#custody.close(request);
37012
37326
  return this.#response(request, {
@@ -37430,6 +37744,7 @@ var PeerOffice = class {
37430
37744
  return;
37431
37745
  }
37432
37746
  this.#live.close();
37747
+ this.#streamWaits.clear();
37433
37748
  this.#subscriptions.clear();
37434
37749
  this.#interaction.clear();
37435
37750
  this.#readMaintenance.clear();
@@ -37472,7 +37787,9 @@ var PeerOffice = class {
37472
37787
  value: this.#readResponses.begin(step.request, step.response.outcome.value.result.value)
37473
37788
  });
37474
37789
  }
37475
- return this.#birthCustodyResponse(step.request, this.#birthCustody.afterKernelCall(step.request, step.response));
37790
+ const result = this.#birthCustodyResponse(step.request, this.#birthCustody.afterKernelCall(step.request, step.response));
37791
+ this.#retentionObserver.observe(step.request, result);
37792
+ return result;
37476
37793
  }
37477
37794
  if (step.case === "pending") return this.#response(request, { case: "correspondencePending", value: step.value });
37478
37795
  if (step.case === "failure") return this.#failure(request, step.code, step.message);
@@ -37636,6 +37953,7 @@ function createBackgroundLanes(options) {
37636
37953
  let timer;
37637
37954
  let wakeAt;
37638
37955
  const correspondenceLanes = Math.max(1, options.correspondenceLanes === Infinity ? Infinity : Math.floor(options.correspondenceLanes ?? 1));
37956
+ const urgentLanes = Math.max(0, Math.floor(options.urgentLanes ?? 0));
37639
37957
  const staggerMillis = Math.max(0, options.staggerMillis ?? 0);
37640
37958
  const inFlight = /* @__PURE__ */ new Set();
37641
37959
  const correspondenceNotBefore = /* @__PURE__ */ new Map();
@@ -37669,8 +37987,9 @@ function createBackgroundLanes(options) {
37669
37987
  if (at2 <= now2) correspondenceNotBefore.delete(workspace2);
37670
37988
  }
37671
37989
  const backoffMillis = correspondenceNotBefore.size ? Math.min(...[...correspondenceNotBefore.values()].map((at2) => Number((at2 - now2 + 999999n) / 1000000n))) : void 0;
37672
- const retentionOnly = inFlight.size >= correspondenceLanes;
37673
- const next = options.nextPaper(retentionOnly, /* @__PURE__ */ new Set([...correspondenceNotBefore.keys(), ...inFlight]));
37990
+ const retentionOnly = inFlight.size >= correspondenceLanes + urgentLanes;
37991
+ const urgentOnly = !retentionOnly && inFlight.size >= correspondenceLanes;
37992
+ const next = options.nextPaper(retentionOnly, /* @__PURE__ */ new Set([...correspondenceNotBefore.keys(), ...inFlight]), urgentOnly);
37674
37993
  selectionFailures = 0;
37675
37994
  if (next.frame === void 0) {
37676
37995
  const delays = [next.nextAfterMillis, backoffMillis].filter((delay2) => delay2 !== void 0);
@@ -37777,8 +38096,8 @@ function createPeerOfficeFrameRunner(kernel, credentials, profile, observations,
37777
38096
  maintenanceTimer.unref?.();
37778
38097
  };
37779
38098
  const lanes = driveBackground === void 0 ? void 0 : createBackgroundLanes({
37780
- nextPaper: (retentionOnly, excludedWorkspaces) => {
37781
- const paper = peer2.nextBackgroundPaper(++backgroundRequestId, retentionOnly, excludedWorkspaces);
38099
+ nextPaper: (retentionOnly, excludedWorkspaces, urgentOnly) => {
38100
+ const paper = peer2.nextBackgroundPaper(++backgroundRequestId, retentionOnly, excludedWorkspaces, urgentOnly);
37782
38101
  if (paper.maintenanceDue) scheduleMaintenance();
37783
38102
  return paper;
37784
38103
  },
@@ -37789,6 +38108,7 @@ function createPeerOfficeFrameRunner(kernel, credentials, profile, observations,
37789
38108
  isRetention: (frame2) => fromBinary(RuntimeRequestSchema, frame2).command.case === "retainFrontier",
37790
38109
  monotonicNanoseconds: () => observations.monotonicNanoseconds(),
37791
38110
  correspondenceLanes,
38111
+ urgentLanes: correspondenceLanes > 1 && Number.isFinite(correspondenceLanes) ? 2 : 0,
37792
38112
  staggerMillis: BACKGROUND_PAPER_STAGGER_MILLIS,
37793
38113
  onSelectionError: (error) => console.error("Nomos background paper selection failed", error)
37794
38114
  });
@@ -38020,7 +38340,7 @@ var refusedTransport = (effectId2, what) => create(PeerEffectReceiptSchema, {
38020
38340
  message: `refused: a peer shell performs no ${what}; custody comes from the workspace's stream`
38021
38341
  }) }
38022
38342
  });
38023
- async function drivePeerFrame(runner, initialFrame, fetchImpl = globalThis.fetch, custody, bornCustody, credentialRefresh, yieldWakeToCaller = false, deviceIdentity, lawPackage, yieldLocalReadToCaller = false, yieldHistoryToCaller = false, performExternalEffect, turn = inlineTurn) {
38343
+ async function drivePeerFrame(runner, initialFrame, fetchImpl = globalThis.fetch, custody, bornCustody, credentialRefresh, yieldWakeToCaller = false, deviceIdentity, lawPackage, yieldLocalReadToCaller = false, yieldHistoryToCaller = false, performExternalEffect, turn = inlineTurn, wait = (work) => work()) {
38024
38344
  const persistBornCustody = bornCustody ?? (custody?.persistBornCustody ? (effect) => custody.persistBornCustody(effect) : void 0);
38025
38345
  let responseFrame = await turn(() => runner.handleFrame(initialFrame));
38026
38346
  const satisfied = /* @__PURE__ */ new Set();
@@ -38162,7 +38482,8 @@ async function drivePeerFrame(runner, initialFrame, fetchImpl = globalThis.fetch
38162
38482
  const external = pending.effect.case === "refreshCredential" && credentialRefresh === externalPeerEffect || pending.effect.case === "deviceIdentity" && deviceIdentity === externalPeerEffect || pending.effect.case === "lawPackage" && lawPackage === externalPeerEffect || pending.effect.case === "consoleEnrolment";
38163
38483
  if (external && !performExternalEffect) return responseFrame;
38164
38484
  const effectStarted = Date.now();
38165
- const receipt = external ? await performExternalEffect(pending) : pending.effect.case === "http" ? await executeHttpEffect(pending.effect.value, fetchImpl) : pending.effect.case === "gitFetch" ? refusedTransport(pending.effect.value.effectId, "Git fetch") : pending.effect.case === "gitPush" ? refusedTransport(pending.effect.value.effectId, "Git push") : pending.effect.case === "stream" ? refusedTransport(pending.effect.value.effectId, "stream request") : pending.effect.case === "persistBornCustody" ? create(PeerEffectReceiptSchema, {
38485
+ const wakeEffect = pending.effect.case === "wake" ? pending.effect.value : void 0;
38486
+ const receipt = external ? await (pending.effect.case === "consoleEnrolment" ? wait(() => performExternalEffect(pending)) : performExternalEffect(pending)) : pending.effect.case === "http" ? await executeHttpEffect(pending.effect.value, fetchImpl) : pending.effect.case === "gitFetch" ? refusedTransport(pending.effect.value.effectId, "Git fetch") : pending.effect.case === "gitPush" ? refusedTransport(pending.effect.value.effectId, "Git push") : pending.effect.case === "stream" ? refusedTransport(pending.effect.value.effectId, "stream request") : pending.effect.case === "persistBornCustody" ? create(PeerEffectReceiptSchema, {
38166
38487
  effectId: pending.effect.value.effectId,
38167
38488
  outcome: {
38168
38489
  case: "bornCustodyPersisted",
@@ -38171,7 +38492,7 @@ async function drivePeerFrame(runner, initialFrame, fetchImpl = globalThis.fetch
38171
38492
  await persistBornCustody(pending.effect.value)
38172
38493
  )
38173
38494
  }
38174
- }) : pending.effect.case === "retainFrontier" ? await executeRetainFrontierEffect(pending.effect.value, custody) : pending.effect.case === "wake" ? await executeWakeEffect(pending.effect.value) : pending.effect.case === "refreshCredential" ? await executeCredentialRefreshEffect(pending.effect.value, credentialRefresh) : pending.effect.case === "deviceIdentity" ? await executeDeviceIdentityEffect(pending.effect.value, deviceIdentity) : pending.effect.case === "lawPackage" ? await executeLawPackageEffect(pending.effect.value, lawPackage) : pending.effect.case === "historyAcquisition" ? await executeHistoryAcquisitionEffect(pending.effect.value, custody) : (() => {
38495
+ }) : pending.effect.case === "retainFrontier" ? await executeRetainFrontierEffect(pending.effect.value, custody) : pending.effect.case === "wake" ? await wait(() => executeWakeEffect(wakeEffect)) : pending.effect.case === "refreshCredential" ? await executeCredentialRefreshEffect(pending.effect.value, credentialRefresh) : pending.effect.case === "deviceIdentity" ? await executeDeviceIdentityEffect(pending.effect.value, deviceIdentity) : pending.effect.case === "lawPackage" ? await executeLawPackageEffect(pending.effect.value, lawPackage) : pending.effect.case === "historyAcquisition" ? await executeHistoryAcquisitionEffect(pending.effect.value, custody) : (() => {
38175
38496
  throw new Error(`correspondence work '${pending.workId}' has no effect`);
38176
38497
  })();
38177
38498
  reportSlowEffect(pending, receipt, Date.now() - effectStarted, external);
@@ -38489,8 +38810,19 @@ function createForegroundGate(options = {}) {
38489
38810
  },
38490
38811
  async foreground(work) {
38491
38812
  inFlight += 1;
38813
+ let waits = 0;
38492
38814
  try {
38493
- return await work();
38815
+ return await work(async (wait) => {
38816
+ if (waits++ === 0) {
38817
+ inFlight -= 1;
38818
+ if (inFlight === 0) release();
38819
+ }
38820
+ try {
38821
+ return await wait();
38822
+ } finally {
38823
+ if (--waits === 0) inFlight += 1;
38824
+ }
38825
+ });
38494
38826
  } finally {
38495
38827
  inFlight -= 1;
38496
38828
  if (inFlight === 0) release();
@@ -38577,10 +38909,9 @@ function openPeerOfficeHost(kernel, shell, fetchImpl = globalThis.fetch, mainten
38577
38909
  },
38578
38910
  shell.peerDeskStore(),
38579
38911
  void 0,
38580
- // An application peer (a tab, a local development peer) syncs every workspace at once, started a
38581
- // stagger apart, so one slow or failing workspace never holds the rest behind it. The office orders
38582
- // them: the workspaces the application waits on first.
38583
- Infinity
38912
+ // Bound physical correspondence, not just fetch registration. The runner
38913
+ // reserves two additional slots for interactive dependencies.
38914
+ 2
38584
38915
  );
38585
38916
  const providerOrigins = [...configuredOrigins];
38586
38917
  if (providerOrigins.length > 0) {
@@ -38605,7 +38936,7 @@ function openPeerOfficeHost(kernel, shell, fetchImpl = globalThis.fetch, mainten
38605
38936
  if (request.command.case === "closeRealm") {
38606
38937
  await runner.settleRetention(4e3);
38607
38938
  }
38608
- return gate.foreground(async () => {
38939
+ return gate.foreground(async (wait) => {
38609
38940
  const target3 = request.target;
38610
38941
  if (args.workspace !== void 0) {
38611
38942
  if (!target3?.workspace || !target3.session || target3.workspace !== args.workspace) {
@@ -38633,7 +38964,9 @@ function openPeerOfficeHost(kernel, shell, fetchImpl = globalThis.fetch, mainten
38633
38964
  lawPackage,
38634
38965
  false,
38635
38966
  false,
38636
- performExternalEffect
38967
+ performExternalEffect,
38968
+ void 0,
38969
+ wait
38637
38970
  );
38638
38971
  });
38639
38972
  },
@@ -38808,11 +39141,11 @@ var loadRuntimeBundle = (options) => {
38808
39141
  selected ? path2.join(selected.directory, repositoryFile) : void 0,
38809
39142
  path2.join(repoRoot, "cloud/cloudflare-shell/runtime/kernel.repository.xml")
38810
39143
  );
38811
- const wasm = new Uint8Array(readFileSync2(wasmPath));
38812
- const kernelSha = createHash("sha256").update(wasm).digest("hex");
39144
+ const wasm = new Uint8Array(readFileSync3(wasmPath));
39145
+ const kernelSha = createHash2("sha256").update(wasm).digest("hex");
38813
39146
  const expectedType = "nomos.kernel.production";
38814
39147
  const matchingResources = parseOsgiRepository(
38815
- readFileSync2(repositoryPath2, "utf8")
39148
+ readFileSync3(repositoryPath2, "utf8")
38816
39149
  ).filter(
38817
39150
  (resource) => resource.identityType === expectedType && resource.contentSha256 === kernelSha && resource.contentSize === wasm.byteLength
38818
39151
  );
@@ -38823,7 +39156,7 @@ var loadRuntimeBundle = (options) => {
38823
39156
  }
38824
39157
  const optionalText = (...candidates) => {
38825
39158
  const found = candidates.find((candidate) => candidate !== void 0 && existsSync4(candidate));
38826
- return found === void 0 ? void 0 : readFileSync2(found, "utf8");
39159
+ return found === void 0 ? void 0 : readFileSync3(found, "utf8");
38827
39160
  };
38828
39161
  const attestation = optionalText(
38829
39162
  selected ? path2.join(selected.directory, "kernel.attestation.dsse.json") : void 0,
@@ -38835,8 +39168,8 @@ var loadRuntimeBundle = (options) => {
38835
39168
  );
38836
39169
  return {
38837
39170
  wasm,
38838
- bootstrapLaw: new Uint8Array(readFileSync2(bootstrapPath)),
38839
- controllerLaw: new Uint8Array(readFileSync2(controllerPath)),
39171
+ bootstrapLaw: new Uint8Array(readFileSync3(bootstrapPath)),
39172
+ controllerLaw: new Uint8Array(readFileSync3(controllerPath)),
38840
39173
  repositoryResource: matchingResources[0],
38841
39174
  ...attestation === void 0 ? {} : { attestation },
38842
39175
  ...releaseKeyCertificate === void 0 ? {} : { releaseKeyCertificate }
@@ -38856,10 +39189,10 @@ var replicaId = async () => {
38856
39189
  };
38857
39190
  async function openLocalPeerProcess(options) {
38858
39191
  const dataDir = options.ephemeral ? mkdtempSync3(path2.join(os.tmpdir(), "nomos-local-peer-")) : path2.resolve(options.data ?? ".nomos/local-peer");
38859
- mkdirSync4(dataDir, { recursive: true });
39192
+ mkdirSync5(dataDir, { recursive: true });
38860
39193
  const bundle = loadRuntimeBundle(options);
38861
- const kernelSha = createHash("sha256").update(bundle.wasm).digest("hex");
38862
- const bootstrapSha = createHash("sha256").update(bundle.bootstrapLaw).digest("hex");
39194
+ const kernelSha = createHash2("sha256").update(bundle.wasm).digest("hex");
39195
+ const bootstrapSha = createHash2("sha256").update(bundle.bootstrapLaw).digest("hex");
38863
39196
  const source = {
38864
39197
  wasmModule: await WebAssembly.compile(bundle.wasm),
38865
39198
  bootstrapLawUsdz: bundle.bootstrapLaw,
@@ -38873,7 +39206,7 @@ async function openLocalPeerProcess(options) {
38873
39206
  `));
38874
39207
  }
38875
39208
  const retainedDirectory = options.workingDirectory === void 0 ? void 0 : path2.resolve(options.workingDirectory);
38876
- if (retainedDirectory) mkdirSync4(retainedDirectory, { recursive: true });
39209
+ if (retainedDirectory) mkdirSync5(retainedDirectory, { recursive: true });
38877
39210
  const machine = retainedDirectory ? { ...await createNodeKernelMachine(source, retainedDirectory), workingDirectory: retainedDirectory } : await createEphemeralNodeKernelMachine(source, dataDir);
38878
39211
  const custodyLifetime = new AbortController();
38879
39212
  try {
@@ -38909,11 +39242,11 @@ async function openLocalPeerProcess(options) {
38909
39242
  dataDir,
38910
39243
  "admission-checkpoint.secret"
38911
39244
  );
38912
- const admissionSecret = existsSync4(admissionSecretPath) ? new Uint8Array(readFileSync2(admissionSecretPath)) : randomBytes(32);
39245
+ const admissionSecret = existsSync4(admissionSecretPath) ? new Uint8Array(readFileSync3(admissionSecretPath)) : randomBytes(32);
38913
39246
  if (admissionSecret.byteLength !== 32)
38914
39247
  throw new Error("local admission credential must be 32 bytes");
38915
39248
  if (!existsSync4(admissionSecretPath)) {
38916
- writeFileSync4(admissionSecretPath, admissionSecret, { mode: 384 });
39249
+ writeFileSync5(admissionSecretPath, admissionSecret, { mode: 384 });
38917
39250
  }
38918
39251
  const persistBornCustody = async (effect) => ({
38919
39252
  $typeName: "nomos.runtime.v2.PersistBornCustodyReceipt",
@@ -39058,6 +39391,7 @@ async function openLocalPeerProcess(options) {
39058
39391
  custody,
39059
39392
  admissionSecret: admissionSecret.slice(),
39060
39393
  invoke: (args) => office.invoke(args),
39394
+ prepareLawProducts: (requestBytes) => machine.prepareLawProducts(requestBytes),
39061
39395
  // The office's record, not the kernel's attachments: a host open attaches nothing (CAP-761).
39062
39396
  residentWorkspaces: () => office.residentWorkspaces(),
39063
39397
  kernelMemoryBytes: () => kernel.memoryBytes(),
@@ -39532,12 +39866,12 @@ if (trustRootPublicKey !== void 0 && trustRootPublicKey.byteLength !== 32) {
39532
39866
  var suppliedData = argumentsByName.get("custody");
39533
39867
  var traceFrames = argumentsByName.get("trace") === "frames";
39534
39868
  var traceMicros = () => process.hrtime.bigint() / 1000n;
39535
- var data = suppliedData ?? mkdtempSync4(join5(tmpdir3(), "nomos-node-peer-"));
39536
- var identityFile = join5(data, "peer-identity");
39537
- var peerIdentity = existsSync5(identityFile) ? readFileSync3(identityFile, "utf8").trim() : (() => {
39869
+ var data = suppliedData ?? mkdtempSync4(join6(tmpdir3(), "nomos-node-peer-"));
39870
+ var identityFile = join6(data, "peer-identity");
39871
+ var peerIdentity = existsSync5(identityFile) ? readFileSync4(identityFile, "utf8").trim() : (() => {
39538
39872
  const minted = `peer:nomos-node:${randomUUID2()}`;
39539
- mkdirSync5(data, { recursive: true });
39540
- writeFileSync5(identityFile, `${minted}
39873
+ mkdirSync6(data, { recursive: true });
39874
+ writeFileSync6(identityFile, `${minted}
39541
39875
  `);
39542
39876
  return minted;
39543
39877
  })();
@@ -39550,7 +39884,7 @@ var physicalFetch = async (input, init) => {
39550
39884
  throw new Error(`the node peer refused unexpected physical route ${url}`);
39551
39885
  }
39552
39886
  const body = request.method === "GET" || request.method === "HEAD" ? void 0 : new Uint8Array(await request.arrayBuffer());
39553
- const result = await runGitHttpBackend(join5(data, "custody"), {
39887
+ const result = await runGitHttpBackend(join6(data, "custody"), {
39554
39888
  method: request.method,
39555
39889
  pathInfo: url.pathname.slice("/git/nomos".length),
39556
39890
  query: url.search.slice(1),
@@ -39560,27 +39894,27 @@ var physicalFetch = async (input, init) => {
39560
39894
  return new Response(result.body, { status: result.status, headers: result.headers });
39561
39895
  };
39562
39896
  var diskBootStore = (directory2) => {
39563
- const file = (url) => join5(directory2, createHash2("sha256").update(url).digest("hex"));
39897
+ const file = (url) => join6(directory2, createHash3("sha256").update(url).digest("hex"));
39564
39898
  return {
39565
39899
  async match(url) {
39566
39900
  if (!existsSync5(`${file(url)}.body`) || !existsSync5(`${file(url)}.headers.json`)) return void 0;
39567
- return new Response(new Uint8Array(readFileSync3(`${file(url)}.body`)), {
39568
- headers: JSON.parse(readFileSync3(`${file(url)}.headers.json`, "utf8"))
39901
+ return new Response(new Uint8Array(readFileSync4(`${file(url)}.body`)), {
39902
+ headers: JSON.parse(readFileSync4(`${file(url)}.headers.json`, "utf8"))
39569
39903
  });
39570
39904
  },
39571
39905
  async put(url, response) {
39572
- mkdirSync5(directory2, { recursive: true });
39573
- writeFileSync5(`${file(url)}.body`, new Uint8Array(await response.arrayBuffer()));
39574
- writeFileSync5(`${file(url)}.headers.json`, JSON.stringify(Object.fromEntries(response.headers)));
39906
+ mkdirSync6(directory2, { recursive: true });
39907
+ writeFileSync6(`${file(url)}.body`, new Uint8Array(await response.arrayBuffer()));
39908
+ writeFileSync6(`${file(url)}.headers.json`, JSON.stringify(Object.fromEntries(response.headers)));
39575
39909
  }
39576
39910
  };
39577
39911
  };
39578
39912
  var fetchReleaseBundle = async (cloud) => {
39579
- const cacheRoot = join5(data, "runtime");
39913
+ const cacheRoot = join6(data, "runtime");
39580
39914
  const selected = await selectReleaseKernel({
39581
39915
  base: cloud,
39582
39916
  // Offline-first: an unreachable channel boots the last selection this peer verified, verified again now.
39583
- fetchImpl: retainedBootFetch(cloud, (input, init) => fetch(input, init), diskBootStore(join5(cacheRoot, "boot"))),
39917
+ fetchImpl: retainedBootFetch(cloud, (input, init) => fetch(input, init), diskBootStore(join6(cacheRoot, "boot"))),
39584
39918
  release: define_NOMOS_KERNEL_RELEASE_default,
39585
39919
  // The pinned production roots; plus a developer's local-dev root only when named explicitly AND the custodian is
39586
39920
  // on this machine (CAP-813) — announced on stderr either way.
@@ -39592,12 +39926,12 @@ var fetchReleaseBundle = async (cloud) => {
39592
39926
  }),
39593
39927
  cache: {
39594
39928
  async read(sha, name) {
39595
- const file = join5(cacheRoot, sha, name);
39596
- return existsSync5(file) ? new Uint8Array(readFileSync3(file)) : void 0;
39929
+ const file = join6(cacheRoot, sha, name);
39930
+ return existsSync5(file) ? new Uint8Array(readFileSync4(file)) : void 0;
39597
39931
  },
39598
39932
  async write(sha, name, bytes) {
39599
- mkdirSync5(join5(cacheRoot, sha), { recursive: true });
39600
- writeFileSync5(join5(cacheRoot, sha, name), bytes);
39933
+ mkdirSync6(join6(cacheRoot, sha), { recursive: true });
39934
+ writeFileSync6(join6(cacheRoot, sha, name), bytes);
39601
39935
  }
39602
39936
  }
39603
39937
  });
@@ -39740,7 +40074,7 @@ var shutdown = async () => {
39740
40074
  gitHttpBackendLifetime.abort();
39741
40075
  peer?.close();
39742
40076
  peer = void 0;
39743
- if (suppliedData === void 0) rmSync4(data, { recursive: true, force: true });
40077
+ if (suppliedData === void 0) rmSync5(data, { recursive: true, force: true });
39744
40078
  };
39745
40079
  var shutdownFailureReported = false;
39746
40080
  var reportShutdownFailure = (error) => {