towns-agent 3.3.1 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -613,7 +613,7 @@ var require_node = __commonJS({
613
613
  var tty = require("tty");
614
614
  var util = require("util");
615
615
  exports2.init = init2;
616
- exports2.log = log13;
616
+ exports2.log = log12;
617
617
  exports2.formatArgs = formatArgs;
618
618
  exports2.save = save;
619
619
  exports2.load = load;
@@ -748,7 +748,7 @@ var require_node = __commonJS({
748
748
  }
749
749
  return (/* @__PURE__ */ new Date()).toISOString() + " ";
750
750
  }
751
- function log13(...args) {
751
+ function log12(...args) {
752
752
  return process.stderr.write(util.formatWithOptions(exports2.inspectOpts, ...args) + "\n");
753
753
  }
754
754
  function save(namespaces) {
@@ -4198,8 +4198,8 @@ var require_dexie = __commonJS({
4198
4198
  }
4199
4199
  function createMiddlewareStack(stackImpl, middlewares) {
4200
4200
  return middlewares.reduce(function(down, _a2) {
4201
- var create19 = _a2.create;
4202
- return __assign(__assign({}, down), create19(down));
4201
+ var create18 = _a2.create;
4202
+ return __assign(__assign({}, down), create18(down));
4203
4203
  }, stackImpl);
4204
4204
  }
4205
4205
  function createMiddlewareStacks(middlewares, idbdb, _a2, tmpTrans) {
@@ -6299,21 +6299,21 @@ var require_dexie = __commonJS({
6299
6299
  }).then(fn);
6300
6300
  };
6301
6301
  Dexie3.prototype.use = function(_a2) {
6302
- var stack = _a2.stack, create19 = _a2.create, level = _a2.level, name = _a2.name;
6302
+ var stack = _a2.stack, create18 = _a2.create, level = _a2.level, name = _a2.name;
6303
6303
  if (name)
6304
6304
  this.unuse({ stack, name });
6305
6305
  var middlewares = this._middlewares[stack] || (this._middlewares[stack] = []);
6306
- middlewares.push({ stack, create: create19, level: level == null ? 10 : level, name });
6306
+ middlewares.push({ stack, create: create18, level: level == null ? 10 : level, name });
6307
6307
  middlewares.sort(function(a, b) {
6308
6308
  return a.level - b.level;
6309
6309
  });
6310
6310
  return this;
6311
6311
  };
6312
6312
  Dexie3.prototype.unuse = function(_a2) {
6313
- var stack = _a2.stack, name = _a2.name, create19 = _a2.create;
6313
+ var stack = _a2.stack, name = _a2.name, create18 = _a2.create;
6314
6314
  if (stack && this._middlewares[stack]) {
6315
6315
  this._middlewares[stack] = this._middlewares[stack].filter(function(mw) {
6316
- return create19 ? mw.create !== create19 : name ? mw.name !== name : false;
6316
+ return create18 ? mw.create !== create18 : name ? mw.name !== name : false;
6317
6317
  });
6318
6318
  }
6319
6319
  return this;
@@ -7564,7 +7564,7 @@ var import_wkt3 = require("@bufbuild/protobuf/wkt");
7564
7564
  // ../proto/dist/gen/payloads_pb.js
7565
7565
  var import_codegenv2 = require("@bufbuild/protobuf/codegenv2");
7566
7566
  var import_wkt = require("@bufbuild/protobuf/wkt");
7567
- var file_payloads = /* @__PURE__ */ (0, import_codegenv2.fileDesc)("Cg5wYXlsb2Fkcy5wcm90bxIFcml2ZXIilCQKDkNoYW5uZWxNZXNzYWdlEioKBHBvc3QYASABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0SAASMgoIcmVhY3Rpb24YAiABKAsyHi5yaXZlci5DaGFubmVsTWVzc2FnZS5SZWFjdGlvbkgAEioKBGVkaXQYAyABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5FZGl0SAASNAoJcmVkYWN0aW9uGAQgASgLMh8ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUmVkYWN0aW9uSAAaMgoIUmVhY3Rpb24SFAoMcmVmX2V2ZW50X2lkGAEgASgJEhAKCHJlYWN0aW9uGAIgASgJGkYKBEVkaXQSFAoMcmVmX2V2ZW50X2lkGAEgASgJEigKBHBvc3QYAiABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0GkEKCVJlZGFjdGlvbhIUCgxyZWZfZXZlbnRfaWQYASABKAkSEwoGcmVhc29uGAIgASgJSACIAQFCCQoHX3JlYXNvbhr1IAoEUG9zdBIWCgl0aHJlYWRfaWQYASABKAlIAYgBARIbCg50aHJlYWRfcHJldmlldxgCIAEoCUgCiAEBEhUKCHJlcGx5X2lkGAMgASgJSAOIAQESGgoNcmVwbHlfcHJldmlldxgEIAEoCUgEiAEBEjcKBHRleHQYZSABKAsyJy5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuVGV4dEgAEjkKBWltYWdlGGYgASgLMigucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlSAASMwoCZ20YZyABKAsyJS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuR01IABI0ChFjb252ZXJzYXRpb25fc2VlZBhoIAEoCzIXLnJpdmVyLkNvbnZlcnNhdGlvblNlZWRIABJFChpjb252ZXJzYXRpb25fc2VlZF9yZXNwb25zZRhpIAEoCzIfLnJpdmVyLkNvbnZlcnNhdGlvblNlZWRSZXNwb25zZUgAGqwBCgdNZW50aW9uEg8KB3VzZXJfaWQYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJEiwKCmF0X2NoYW5uZWwYZCABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlIABI5CgdhdF9yb2xlGGUgASgLMiYucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Sb2xlTWVudGlvbkgAQhEKD21lbnRpb25CZWhhdmlvchoeCgtSb2xlTWVudGlvbhIPCgdyb2xlX2lkGAEgASgFGtIDCgpBdHRhY2htZW50EjkKBWltYWdlGGUgASgLMigucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlSAASKwoMY2h1bmtlZE1lZGlhGGcgASgLMhMucml2ZXIuQ2h1bmtlZE1lZGlhSAASTQoPZW1iZWRkZWRNZXNzYWdlGGggASgLMjIucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkVtYmVkZGVkTWVzc2FnZUgAEkUKC3VuZnVybGVkVXJsGGkgASgLMi4ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LlVuZnVybGVkVVJMSAASOwoGdGlja2VyGGogASgLMikucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LlRpY2tlckgAEj0KB21pbmlhcHAYayABKAsyKi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuTWluaWFwcEgAEj8KCGluZm9DYXJkGGwgASgLMisucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkSABCCQoHY29udGVudBrvFwoHQ29udGVudBqGAQoEVGV4dBIMCgRib2R5GAEgASgJEjQKCG1lbnRpb25zGAIgAygLMiIucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5NZW50aW9uEjoKC2F0dGFjaG1lbnRzGAMgAygLMiUucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5BdHRhY2htZW50GqkCCgVJbWFnZRINCgV0aXRsZRgBIAEoCRI7CgRpbmZvGAIgASgLMi0ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlLkluZm8SRQoJdGh1bWJuYWlsGAMgASgLMi0ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlLkluZm9IAIgBARp/CgRJbmZvEgsKA3VybBgBIAEoCRIQCghtaW1ldHlwZRgCIAEoCRIRCgRzaXplGAMgASgFSACIAQESEgoFd2lkdGgYBCABKAVIAYgBARITCgZoZWlnaHQYBSABKAVIAogBAUIHCgVfc2l6ZUIICgZfd2lkdGhCCQoHX2hlaWdodEIMCgpfdGh1bWJuYWlsGjQKAkdNEhAKCHR5cGVfdXJsGAEgASgJEhIKBXZhbHVlGAIgASgMSACIAQFCCAoGX3ZhbHVlGr0ECg9FbWJlZGRlZE1lc3NhZ2USCwoDdXJsGAEgASgJEigKBHBvc3QYAiABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0EkUKBGluZm8YAyABKAsyNy5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuRW1iZWRkZWRNZXNzYWdlLkluZm8SUQoKc3RhdGljSW5mbxgEIAEoCzI9LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5FbWJlZGRlZE1lc3NhZ2UuU3RhdGljSW5mbxqJAQoESW5mbxIOCgZ1c2VySWQYASABKAkSGAoQY3JlYXRlZEF0RXBvY2hNcxgCIAEoAxIPCgdzcGFjZUlkGAMgASgJEhEKCWNoYW5uZWxJZBgEIAEoCRIRCgltZXNzYWdlSWQYBSABKAkSFAoHcmVwbHlJZBgGIAEoCUgAiAEBQgoKCF9yZXBseUlkGswBCgpTdGF0aWNJbmZvEhUKCHVzZXJOYW1lGAEgASgJSACIAQESGAoLZGlzcGxheU5hbWUYAiABKAlIAYgBARIYCgtjaGFubmVsTmFtZRgDIAEoCUgCiAEBEhYKCXNwYWNlTmFtZRgEIAEoCUgDiAEBEhQKB2Vuc05hbWUYBSABKAlIBIgBAUILCglfdXNlck5hbWVCDgoMX2Rpc3BsYXlOYW1lQg4KDF9jaGFubmVsTmFtZUIMCgpfc3BhY2VOYW1lQgoKCF9lbnNOYW1lGscBCgtVbmZ1cmxlZFVSTBILCgN1cmwYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSDQoFdGl0bGUYAyABKAkSSAoFaW1hZ2UYBCABKAsyNC5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuVW5mdXJsZWRVUkwuSW1hZ2VIAIgBARozCgVJbWFnZRIOCgZoZWlnaHQYASABKAUSDQoFd2lkdGgYAiABKAUSCwoDdXJsGAMgASgJQggKBl9pbWFnZRorCgZUaWNrZXISDwoHYWRkcmVzcxgBIAEoCRIQCghjaGFpbl9pZBgCIAEoCRoWCgdNaW5pYXBwEgsKA3VybBgBIAEoCRqpDQoISW5mb0NhcmQSQAoFdGl0bGUYASABKAsyMS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTGFiZWwSQQoGZmllbGRzGAIgAygLMjEucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkZpZWxkGuYDCgVMYWJlbBJJCgRpY29uGAEgASgOMjYucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkljb25IAIgBARIMCgR0ZXh0GAIgASgJEksKBWJhZGdlGAMgASgLMjcucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkJhZGdlSAGIAQEayAEKBUJhZGdlEgwKBHRleHQYASABKAkSVQoHdmFyaWFudBgCIAEoDjI/LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5MYWJlbC5CYWRnZS5WYXJpYW50SACIAQEiTgoHVmFyaWFudBIXChNWQVJJQU5UX1VOU1BFQ0lGSUVEEAASFAoQVkFSSUFOVF9QT1NJVElWRRABEhQKEFZBUklBTlRfTkVHQVRJVkUQAkIKCghfdmFyaWFudCJZCgRJY29uEhQKEElDT05fVU5TUEVDSUZJRUQQABIOCgpJQ09OX0NIRUNLEAESCgoGSUNPTl9YEAISEAoMSUNPTl9XQVJOSU5HEAMSDQoJSUNPTl9JTkZPEARCBwoFX2ljb25CCAoGX2JhZGdlGpwDCgVGaWVsZBISCgVsYWJlbBgBIAEoCUgBiAEBEkEKBHRleHQYCiABKAsyMS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTGFiZWxIABJDCgR1c2VyGAsgASgLMjMucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLlVzZXJSZWZIABJICgV0b2tlbhgMIAEoCzI3LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5Ub2tlbkFtb3VudEgAEksKCGNvbnRyYWN0GA0gASgLMjcucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkNvbnRyYWN0UmVmSAASTQoLbWFya2V0X2l0ZW0YDiABKAsyNi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTWFya2V0SXRlbUgAQgcKBXZhbHVlQggKBl9sYWJlbBoaCgdVc2VyUmVmEg8KB3VzZXJfaWQYASABKAwaQAoLVG9rZW5BbW91bnQSEAoIY2hhaW5faWQYASABKAkSDwoHYWRkcmVzcxgCIAEoCRIOCgZhbW91bnQYAyABKAkaMAoLQ29udHJhY3RSZWYSEAoIY2hhaW5faWQYASABKAkSDwoHYWRkcmVzcxgCIAEoCRr/AwoKTWFya2V0SXRlbRIMCgRuYW1lGAEgASgJEg0KBXByaWNlGAIgASgJEhUKCGljb25fdXJsGAMgASgJSACIAQESFQoIc3VidGl0bGUYBCABKAlIAYgBARITCgZjaGFuZ2UYBSABKAlIAogBARIXCgpjaGFuZ2VfcGN0GAYgASgJSAOIAQESVwoJZGlyZWN0aW9uGAcgASgOMj8ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkJhZGdlLlZhcmlhbnRIBIgBARJQCghvdXRjb21lcxgIIAMoCzI+LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5NYXJrZXRJdGVtLk91dGNvbWUaigEKB091dGNvbWUSDQoFbGFiZWwYASABKAkSDQoFdmFsdWUYAiABKAkSVQoHdmFyaWFudBgDIAEoDjI/LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5MYWJlbC5CYWRnZS5WYXJpYW50SACIAQFCCgoIX3ZhcmlhbnRCCwoJX2ljb25fdXJsQgsKCV9zdWJ0aXRsZUIJCgdfY2hhbmdlQg0KC19jaGFuZ2VfcGN0QgwKCl9kaXJlY3Rpb25CCQoHY29udGVudEIMCgpfdGhyZWFkX2lkQhEKD190aHJlYWRfcHJldmlld0ILCglfcmVwbHlfaWRCEAoOX3JlcGx5X3ByZXZpZXdCCQoHcGF5bG9hZCJfCh5TcGVjaWFsaXN0Q2FwYWJpbGl0eUludm9jYXRpb24SEAoIYWdlbnRfaWQYASABKAwSFwoPY2FwYWJpbGl0eV9uYW1lGAIgASgJEhIKCnBhcmFtZXRlcnMYAyABKAkiNQoSQWdlbnRQcm9wb3NhbEVycm9yEhAKCGFnZW50X2lkGAEgASgMEg0KBWVycm9yGAIgASgJIv0BCghQcm9wb3NhbBIKCgJpZBgBIAEoCRIXCg90YXJnZXRfYWdlbnRfaWQYAiABKAwSGQoRdGFyZ2V0X2FnZW50X25hbWUYAyABKAkSFwoPY2FwYWJpbGl0eV9uYW1lGAQgASgJEhIKCnBhcmFtZXRlcnMYBSABKAkSEwoLZXhwbGFuYXRpb24YBiABKAkSEgoKY29uZmlkZW5jZRgHIAEoAhIVCg1leHBpcmVzX2F0X21zGAggASgDEhAKCHdhcm5pbmdzGAkgAygJEh0KEGV4cGVjdGVkX291dGNvbWUYCiABKAlIAIgBAUITChFfZXhwZWN0ZWRfb3V0Y29tZSKnAQoWQWdlbnRQcm9wb3NhbHNSZXNwb25zZRIiCglwcm9wb3NhbHMYASADKAsyDy5yaXZlci5Qcm9wb3NhbBIpCgZlcnJvcnMYAiADKAsyGS5yaXZlci5BZ2VudFByb3Bvc2FsRXJyb3ISFwoPcmVzcG9uZGVkX2F0X21zGAMgASgDEiUKBnN0YXR1cxgEIAEoDjIVLnJpdmVyLlByb3Bvc2FsU3RhdHVzIusFChBDb252ZXJzYXRpb25TZWVkEgoKAmlkGAEgASgJEhUKDWNyZWF0ZWRfYXRfbXMYAiABKAMSGwoTcHJvcG9zYWxfdGltZW91dF9tcxgDIAEoAxIcChRjb25jaWVyZ2VfdGltZW91dF9tcxgEIAEoAxINCgVxdWVyeRgFIAEoCRIUCgdjb250ZXh0GAYgASgJSACIAQESGQoMZXh0ZXJuYWxfcmVmGAcgASgJSAGIAQESFAoMY29uY2llcmdlX2lkGAggASgMEhMKBnNvdXJjZRgJIAEoCUgCiAEBEjoKC2ludm9jYXRpb25zGAogAygLMiUucml2ZXIuU3BlY2lhbGlzdENhcGFiaWxpdHlJbnZvY2F0aW9uEiEKGWludm9jYXRpb25zX3VwZGF0ZWRfYXRfbXMYCyABKAMSSQoScHJvcG9zYWxzX2J5X2FnZW50GAwgAygLMi0ucml2ZXIuQ29udmVyc2F0aW9uU2VlZC5Qcm9wb3NhbHNCeUFnZW50RW50cnkSFQoNcmVzcG9uc2VfdGV4dBgNIAEoCRIdChVzZWxlY3RlZF9wcm9wb3NhbF9pZHMYDiADKAkSHAoUY2xhcmlmeWluZ19xdWVzdGlvbnMYDyADKAkSIQoZY29uY2llcmdlX3Jlc3BvbmRlZF9hdF9tcxgQIAEoAxIWCg5zdGF0dXNfdXBkYXRlcxgRIAMoCRIiCglwcm9wb3NhbHMYEiADKAsyDy5yaXZlci5Qcm9wb3NhbBpWChVQcm9wb3NhbHNCeUFnZW50RW50cnkSCwoDa2V5GAEgASgJEiwKBXZhbHVlGAIgASgLMh0ucml2ZXIuQWdlbnRQcm9wb3NhbHNSZXNwb25zZToCOAFCCgoIX2NvbnRleHRCDwoNX2V4dGVybmFsX3JlZkIJCgdfc291cmNlUhRhZGRpdGlvbmFsX3Byb3Bvc2Fsc1IPcHJvcG9zYWxfZXJyb3JzUgpjcmVhdGVkX2F0IrIBChhDb252ZXJzYXRpb25TZWVkUmVzcG9uc2USDwoHc2VlZF9pZBgBIAEoCRIqCgRzZWVkGAIgASgLMhcucml2ZXIuQ29udmVyc2F0aW9uU2VlZEgBiAEBEiwKEXNlbGVjdGVkX3Byb3Bvc2FsGGQgASgLMg8ucml2ZXIuUHJvcG9zYWxIABIWCgx1c2VyX21lc3NhZ2UYZSABKAlIAEIKCghyZXNwb25zZUIHCgVfc2VlZCJjChFDaGFubmVsUHJvcGVydGllcxIMCgRuYW1lGAEgASgJEg0KBXRvcGljGAIgASgJEicKBWltYWdlGAMgASgLMhMucml2ZXIuQ2h1bmtlZE1lZGlhSACIAQFCCAoGX2ltYWdlImgKFlVzZXJNZXRhZGF0YVByb3BlcnRpZXMSFQoIdXNlcm5hbWUYASABKAlIAIgBARIZCgxkaXNwbGF5X25hbWUYAiABKAlIAYgBAUILCglfdXNlcm5hbWVCDwoNX2Rpc3BsYXlfbmFtZSKIAwoQRnVsbHlSZWFkTWFya2VycxI1CgdtYXJrZXJzGAEgAygLMiQucml2ZXIuRnVsbHlSZWFkTWFya2Vycy5NYXJrZXJzRW50cnka6wEKB0NvbnRlbnQSEgoKY2hhbm5lbF9pZBgBIAEoCRIdChB0aHJlYWRfcGFyZW50X2lkGAIgASgJSACIAQESEAoIZXZlbnRfaWQYAyABKAkSEQoJZXZlbnRfbnVtGAQgASgDEhsKE2JlZ2luX3VucmVhZF93aW5kb3cYBSABKAMSGQoRZW5kX3VucmVhZF93aW5kb3cYBiABKAMSEQoJaXNfdW5yZWFkGAcgASgIEhYKDm1hcmtlZFJlYWRBdFRzGAggASgDEhAKCG1lbnRpb25zGAkgASgFQhMKEV90aHJlYWRfcGFyZW50X2lkGk8KDE1hcmtlcnNFbnRyeRILCgNrZXkYASABKAkSLgoFdmFsdWUYAiABKAsyHy5yaXZlci5GdWxseVJlYWRNYXJrZXJzLkNvbnRlbnQ6AjgBIhsKC1Nlc3Npb25LZXlzEgwKBGtleXMYASADKAkiegoVSHlicmlkR3JvdXBTZXNzaW9uS2V5EhIKCnNlc3Npb25faWQYASABKAwSEQoJc3RyZWFtX2lkGAIgASgMEgsKA2tleRgDIAEoDBIVCg1taW5pYmxvY2tfbnVtGAQgASgDEhYKDm1pbmlibG9ja19oYXNoGAUgASgMIm0KCU1lZGlhSW5mbxIQCghtaW1ldHlwZRgBIAEoCRIRCglzaXplQnl0ZXMYAiABKAMSEwoLd2lkdGhQaXhlbHMYAyABKAUSFAoMaGVpZ2h0UGl4ZWxzGAQgASgFEhAKCGZpbGVuYW1lGAUgASgJIkAKDUVtYmVkZGVkTWVkaWESHgoEaW5mbxgBIAEoCzIQLnJpdmVyLk1lZGlhSW5mbxIPCgdjb250ZW50GAIgASgMIs4BCgxDaHVua2VkTWVkaWESHgoEaW5mbxgBIAEoCzIQLnJpdmVyLk1lZGlhSW5mbxIQCghzdHJlYW1JZBgCIAEoCRInCgl0aHVtYm5haWwYAyABKAsyFC5yaXZlci5FbWJlZGRlZE1lZGlhEiwKBmFlc2djbRhlIAEoCzIaLnJpdmVyLkNodW5rZWRNZWRpYS5BRVNHQ01IABonCgZBRVNHQ00SCgoCaXYYASABKAwSEQoJc2VjcmV0S2V5GAIgASgMQgwKCmVuY3J5cHRpb24iUAoHVXNlckJpbxILCgNiaW8YASABKAkSIAoTdXBkYXRlZF9hdF9lcG9jaF9tcxgCIAEoBEgAiAEBQhYKFF91cGRhdGVkX2F0X2Vwb2NoX21zIloKC0JlYXJlclRva2VuEhwKFGRlbGVnYXRlX3ByaXZhdGVfa2V5GAEgASgJEhQKDGRlbGVnYXRlX3NpZxgCIAEoDBIXCg9leHBpcnlfZXBvY2hfbXMYAyABKAMirgMKDkV4cG9ydGVkRGV2aWNlEhEKCXBpY2tsZUtleRgBIAEoCRIWCg5waWNrbGVkQWNjb3VudBgCIAEoCRI8ChBvdXRib3VuZFNlc3Npb25zGAMgAygLMiIucml2ZXIuRXhwb3J0ZWREZXZpY2UuR3JvdXBTZXNzaW9uEjsKD2luYm91bmRTZXNzaW9ucxgEIAMoCzIiLnJpdmVyLkV4cG9ydGVkRGV2aWNlLkdyb3VwU2Vzc2lvbhJFChNoeWJyaWRHcm91cFNlc3Npb25zGAUgAygLMigucml2ZXIuRXhwb3J0ZWREZXZpY2UuSHlicmlkR3JvdXBTZXNzaW9uGkYKDEdyb3VwU2Vzc2lvbhISCgpzZXNzaW9uX2lkGAEgASgJEhEKCXN0cmVhbV9pZBgCIAEoCRIPCgdzZXNzaW9uGAMgASgJGmcKEkh5YnJpZEdyb3VwU2Vzc2lvbhISCgpzZXNzaW9uX2lkGAEgASgJEhEKCXN0cmVhbV9pZBgCIAEoCRITCgtzZXNzaW9uX2tleRgDIAEoDBIVCg1taW5pYmxvY2tfbnVtGAQgASgDIqEBCg5BcHBQcml2YXRlRGF0YRITCgtwcml2YXRlX2tleRgBIAEoCRIwChFlbmNyeXB0aW9uX2RldmljZRgCIAEoCzIVLnJpdmVyLkV4cG9ydGVkRGV2aWNlEgsKA2VudhgDIAEoCRITCgthcHBfYWRkcmVzcxgEIAEoDBIXCgpqd3Rfc2VjcmV0GAUgASgMSACIAQFCDQoLX2p3dF9zZWNyZXQqswEKFkNvbnZlcnNhdGlvblNlZWRTdGF0dXMSKAokQ09OVkVSU0FUSU9OX1NFRURfU1RBVFVTX1VOU1BFQ0lGSUVEEAASJgoiQ09OVkVSU0FUSU9OX1NFRURfU1RBVFVTX05PVF9SRUFEWRABEiIKHkNPTlZFUlNBVElPTl9TRUVEX1NUQVRVU19SRUFEWRACEiMKH0NPTlZFUlNBVElPTl9TRUVEX1NUQVRVU19GQUlMRUQQAyqoAQoOUHJvcG9zYWxTdGF0dXMSHwobUFJPUE9TQUxfU1RBVFVTX1VOU1BFQ0lGSUVEEAASGwoXUFJPUE9TQUxfU1RBVFVTX1BFTkRJTkcQARIdChlQUk9QT1NBTF9TVEFUVVNfRlVMRklMTEVEEAISGgoWUFJPUE9TQUxfU1RBVFVTX0ZBSUxFRBADEh0KGVBST1BPU0FMX1NUQVRVU19USU1FRF9PVVQQBEI0WjJnaXRodWIuY29tL3Rvd25zLXByb3RvY29sL3Rvd25zL2NvcmUvbm9kZS9wcm90b2NvbGIGcHJvdG8z", [import_wkt.file_google_protobuf_empty]);
7567
+ var file_payloads = /* @__PURE__ */ (0, import_codegenv2.fileDesc)("Cg5wYXlsb2Fkcy5wcm90bxIFcml2ZXIilCQKDkNoYW5uZWxNZXNzYWdlEioKBHBvc3QYASABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0SAASMgoIcmVhY3Rpb24YAiABKAsyHi5yaXZlci5DaGFubmVsTWVzc2FnZS5SZWFjdGlvbkgAEioKBGVkaXQYAyABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5FZGl0SAASNAoJcmVkYWN0aW9uGAQgASgLMh8ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUmVkYWN0aW9uSAAaMgoIUmVhY3Rpb24SFAoMcmVmX2V2ZW50X2lkGAEgASgJEhAKCHJlYWN0aW9uGAIgASgJGkYKBEVkaXQSFAoMcmVmX2V2ZW50X2lkGAEgASgJEigKBHBvc3QYAiABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0GkEKCVJlZGFjdGlvbhIUCgxyZWZfZXZlbnRfaWQYASABKAkSEwoGcmVhc29uGAIgASgJSACIAQFCCQoHX3JlYXNvbhr1IAoEUG9zdBIWCgl0aHJlYWRfaWQYASABKAlIAYgBARIbCg50aHJlYWRfcHJldmlldxgCIAEoCUgCiAEBEhUKCHJlcGx5X2lkGAMgASgJSAOIAQESGgoNcmVwbHlfcHJldmlldxgEIAEoCUgEiAEBEjcKBHRleHQYZSABKAsyJy5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuVGV4dEgAEjkKBWltYWdlGGYgASgLMigucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlSAASMwoCZ20YZyABKAsyJS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuR01IABI0ChFjb252ZXJzYXRpb25fc2VlZBhoIAEoCzIXLnJpdmVyLkNvbnZlcnNhdGlvblNlZWRIABJFChpjb252ZXJzYXRpb25fc2VlZF9yZXNwb25zZRhpIAEoCzIfLnJpdmVyLkNvbnZlcnNhdGlvblNlZWRSZXNwb25zZUgAGqwBCgdNZW50aW9uEg8KB3VzZXJfaWQYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJEiwKCmF0X2NoYW5uZWwYZCABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlIABI5CgdhdF9yb2xlGGUgASgLMiYucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Sb2xlTWVudGlvbkgAQhEKD21lbnRpb25CZWhhdmlvchoeCgtSb2xlTWVudGlvbhIPCgdyb2xlX2lkGAEgASgFGtIDCgpBdHRhY2htZW50EjkKBWltYWdlGGUgASgLMigucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlSAASKwoMY2h1bmtlZE1lZGlhGGcgASgLMhMucml2ZXIuQ2h1bmtlZE1lZGlhSAASTQoPZW1iZWRkZWRNZXNzYWdlGGggASgLMjIucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkVtYmVkZGVkTWVzc2FnZUgAEkUKC3VuZnVybGVkVXJsGGkgASgLMi4ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LlVuZnVybGVkVVJMSAASOwoGdGlja2VyGGogASgLMikucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LlRpY2tlckgAEj0KB21pbmlhcHAYayABKAsyKi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuTWluaWFwcEgAEj8KCGluZm9DYXJkGGwgASgLMisucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkSABCCQoHY29udGVudBrvFwoHQ29udGVudBqGAQoEVGV4dBIMCgRib2R5GAEgASgJEjQKCG1lbnRpb25zGAIgAygLMiIucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5NZW50aW9uEjoKC2F0dGFjaG1lbnRzGAMgAygLMiUucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5BdHRhY2htZW50GqkCCgVJbWFnZRINCgV0aXRsZRgBIAEoCRI7CgRpbmZvGAIgASgLMi0ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlLkluZm8SRQoJdGh1bWJuYWlsGAMgASgLMi0ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkltYWdlLkluZm9IAIgBARp/CgRJbmZvEgsKA3VybBgBIAEoCRIQCghtaW1ldHlwZRgCIAEoCRIRCgRzaXplGAMgASgFSACIAQESEgoFd2lkdGgYBCABKAVIAYgBARITCgZoZWlnaHQYBSABKAVIAogBAUIHCgVfc2l6ZUIICgZfd2lkdGhCCQoHX2hlaWdodEIMCgpfdGh1bWJuYWlsGjQKAkdNEhAKCHR5cGVfdXJsGAEgASgJEhIKBXZhbHVlGAIgASgMSACIAQFCCAoGX3ZhbHVlGr0ECg9FbWJlZGRlZE1lc3NhZ2USCwoDdXJsGAEgASgJEigKBHBvc3QYAiABKAsyGi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0EkUKBGluZm8YAyABKAsyNy5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuRW1iZWRkZWRNZXNzYWdlLkluZm8SUQoKc3RhdGljSW5mbxgEIAEoCzI9LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5FbWJlZGRlZE1lc3NhZ2UuU3RhdGljSW5mbxqJAQoESW5mbxIOCgZ1c2VySWQYASABKAkSGAoQY3JlYXRlZEF0RXBvY2hNcxgCIAEoAxIPCgdzcGFjZUlkGAMgASgJEhEKCWNoYW5uZWxJZBgEIAEoCRIRCgltZXNzYWdlSWQYBSABKAkSFAoHcmVwbHlJZBgGIAEoCUgAiAEBQgoKCF9yZXBseUlkGswBCgpTdGF0aWNJbmZvEhUKCHVzZXJOYW1lGAEgASgJSACIAQESGAoLZGlzcGxheU5hbWUYAiABKAlIAYgBARIYCgtjaGFubmVsTmFtZRgDIAEoCUgCiAEBEhYKCXNwYWNlTmFtZRgEIAEoCUgDiAEBEhQKB2Vuc05hbWUYBSABKAlIBIgBAUILCglfdXNlck5hbWVCDgoMX2Rpc3BsYXlOYW1lQg4KDF9jaGFubmVsTmFtZUIMCgpfc3BhY2VOYW1lQgoKCF9lbnNOYW1lGscBCgtVbmZ1cmxlZFVSTBILCgN1cmwYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSDQoFdGl0bGUYAyABKAkSSAoFaW1hZ2UYBCABKAsyNC5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuVW5mdXJsZWRVUkwuSW1hZ2VIAIgBARozCgVJbWFnZRIOCgZoZWlnaHQYASABKAUSDQoFd2lkdGgYAiABKAUSCwoDdXJsGAMgASgJQggKBl9pbWFnZRorCgZUaWNrZXISDwoHYWRkcmVzcxgBIAEoCRIQCghjaGFpbl9pZBgCIAEoCRoWCgdNaW5pYXBwEgsKA3VybBgBIAEoCRqpDQoISW5mb0NhcmQSQAoFdGl0bGUYASABKAsyMS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTGFiZWwSQQoGZmllbGRzGAIgAygLMjEucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkZpZWxkGuYDCgVMYWJlbBJJCgRpY29uGAEgASgOMjYucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkljb25IAIgBARIMCgR0ZXh0GAIgASgJEksKBWJhZGdlGAMgASgLMjcucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkJhZGdlSAGIAQEayAEKBUJhZGdlEgwKBHRleHQYASABKAkSVQoHdmFyaWFudBgCIAEoDjI/LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5MYWJlbC5CYWRnZS5WYXJpYW50SACIAQEiTgoHVmFyaWFudBIXChNWQVJJQU5UX1VOU1BFQ0lGSUVEEAASFAoQVkFSSUFOVF9QT1NJVElWRRABEhQKEFZBUklBTlRfTkVHQVRJVkUQAkIKCghfdmFyaWFudCJZCgRJY29uEhQKEElDT05fVU5TUEVDSUZJRUQQABIOCgpJQ09OX0NIRUNLEAESCgoGSUNPTl9YEAISEAoMSUNPTl9XQVJOSU5HEAMSDQoJSUNPTl9JTkZPEARCBwoFX2ljb25CCAoGX2JhZGdlGpwDCgVGaWVsZBISCgVsYWJlbBgBIAEoCUgBiAEBEkEKBHRleHQYCiABKAsyMS5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTGFiZWxIABJDCgR1c2VyGAsgASgLMjMucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLlVzZXJSZWZIABJICgV0b2tlbhgMIAEoCzI3LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5Ub2tlbkFtb3VudEgAEksKCGNvbnRyYWN0GA0gASgLMjcucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkNvbnRyYWN0UmVmSAASTQoLbWFya2V0X2l0ZW0YDiABKAsyNi5yaXZlci5DaGFubmVsTWVzc2FnZS5Qb3N0LkNvbnRlbnQuSW5mb0NhcmQuTWFya2V0SXRlbUgAQgcKBXZhbHVlQggKBl9sYWJlbBoaCgdVc2VyUmVmEg8KB3VzZXJfaWQYASABKAwaQAoLVG9rZW5BbW91bnQSEAoIY2hhaW5faWQYASABKAkSDwoHYWRkcmVzcxgCIAEoCRIOCgZhbW91bnQYAyABKAkaMAoLQ29udHJhY3RSZWYSEAoIY2hhaW5faWQYASABKAkSDwoHYWRkcmVzcxgCIAEoCRr/AwoKTWFya2V0SXRlbRIMCgRuYW1lGAEgASgJEg0KBXByaWNlGAIgASgJEhUKCGljb25fdXJsGAMgASgJSACIAQESFQoIc3VidGl0bGUYBCABKAlIAYgBARITCgZjaGFuZ2UYBSABKAlIAogBARIXCgpjaGFuZ2VfcGN0GAYgASgJSAOIAQESVwoJZGlyZWN0aW9uGAcgASgOMj8ucml2ZXIuQ2hhbm5lbE1lc3NhZ2UuUG9zdC5Db250ZW50LkluZm9DYXJkLkxhYmVsLkJhZGdlLlZhcmlhbnRIBIgBARJQCghvdXRjb21lcxgIIAMoCzI+LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5NYXJrZXRJdGVtLk91dGNvbWUaigEKB091dGNvbWUSDQoFbGFiZWwYASABKAkSDQoFdmFsdWUYAiABKAkSVQoHdmFyaWFudBgDIAEoDjI/LnJpdmVyLkNoYW5uZWxNZXNzYWdlLlBvc3QuQ29udGVudC5JbmZvQ2FyZC5MYWJlbC5CYWRnZS5WYXJpYW50SACIAQFCCgoIX3ZhcmlhbnRCCwoJX2ljb25fdXJsQgsKCV9zdWJ0aXRsZUIJCgdfY2hhbmdlQg0KC19jaGFuZ2VfcGN0QgwKCl9kaXJlY3Rpb25CCQoHY29udGVudEIMCgpfdGhyZWFkX2lkQhEKD190aHJlYWRfcHJldmlld0ILCglfcmVwbHlfaWRCEAoOX3JlcGx5X3ByZXZpZXdCCQoHcGF5bG9hZCJfCh5TcGVjaWFsaXN0Q2FwYWJpbGl0eUludm9jYXRpb24SEAoIYWdlbnRfaWQYASABKAwSFwoPY2FwYWJpbGl0eV9uYW1lGAIgASgJEhIKCnBhcmFtZXRlcnMYAyABKAkiNQoSQWdlbnRQcm9wb3NhbEVycm9yEhAKCGFnZW50X2lkGAEgASgMEg0KBWVycm9yGAIgASgJIowCCghQcm9wb3NhbBIKCgJpZBgBIAEoCRIXCg90YXJnZXRfYWdlbnRfaWQYAiABKAwSGQoRdGFyZ2V0X2FnZW50X25hbWUYAyABKAkSFwoPY2FwYWJpbGl0eV9uYW1lGAQgASgJEhIKCnBhcmFtZXRlcnMYBSABKAkSEwoLZXhwbGFuYXRpb24YBiABKAkSEgoKY29uZmlkZW5jZRgHIAEoAhIVCg1leHBpcmVzX2F0X21zGAggASgDEhAKCHdhcm5pbmdzGAkgAygJEh0KEGV4cGVjdGVkX291dGNvbWUYCiABKAlIAIgBARINCgV0aXRsZRgLIAEoCUITChFfZXhwZWN0ZWRfb3V0Y29tZSKnAQoWQWdlbnRQcm9wb3NhbHNSZXNwb25zZRIiCglwcm9wb3NhbHMYASADKAsyDy5yaXZlci5Qcm9wb3NhbBIpCgZlcnJvcnMYAiADKAsyGS5yaXZlci5BZ2VudFByb3Bvc2FsRXJyb3ISFwoPcmVzcG9uZGVkX2F0X21zGAMgASgDEiUKBnN0YXR1cxgEIAEoDjIVLnJpdmVyLlByb3Bvc2FsU3RhdHVzIrkGChBDb252ZXJzYXRpb25TZWVkEgoKAmlkGAEgASgJEhUKDWNyZWF0ZWRfYXRfbXMYAiABKAMSGwoTcHJvcG9zYWxfdGltZW91dF9tcxgDIAEoAxIcChRjb25jaWVyZ2VfdGltZW91dF9tcxgEIAEoAxINCgVxdWVyeRgFIAEoCRIUCgdjb250ZXh0GAYgASgJSACIAQESGQoMZXh0ZXJuYWxfcmVmGAcgASgJSAGIAQESFAoMY29uY2llcmdlX2lkGAggASgMEhMKBnNvdXJjZRgJIAEoCUgCiAEBEjoKC2ludm9jYXRpb25zGAogAygLMiUucml2ZXIuU3BlY2lhbGlzdENhcGFiaWxpdHlJbnZvY2F0aW9uEiEKGWludm9jYXRpb25zX3VwZGF0ZWRfYXRfbXMYCyABKAMSSQoScHJvcG9zYWxzX2J5X2FnZW50GAwgAygLMi0ucml2ZXIuQ29udmVyc2F0aW9uU2VlZC5Qcm9wb3NhbHNCeUFnZW50RW50cnkSFQoNcmVzcG9uc2VfdGV4dBgNIAEoCRIdChVzZWxlY3RlZF9wcm9wb3NhbF9pZHMYDiADKAkSHAoUY2xhcmlmeWluZ19xdWVzdGlvbnMYDyADKAkSIQoZY29uY2llcmdlX3Jlc3BvbmRlZF9hdF9tcxgQIAEoAxIWCg5zdGF0dXNfdXBkYXRlcxgRIAMoCRIiCglwcm9wb3NhbHMYEiADKAsyDy5yaXZlci5Qcm9wb3NhbBIaCg11c2VyX3RpbWV6b25lGBMgASgJSAOIAQESHgoWY29uY2llcmdlX2ZhaWxlZF9hdF9tcxgUIAEoAxpWChVQcm9wb3NhbHNCeUFnZW50RW50cnkSCwoDa2V5GAEgASgJEiwKBXZhbHVlGAIgASgLMh0ucml2ZXIuQWdlbnRQcm9wb3NhbHNSZXNwb25zZToCOAFCCgoIX2NvbnRleHRCDwoNX2V4dGVybmFsX3JlZkIJCgdfc291cmNlQhAKDl91c2VyX3RpbWV6b25lUhRhZGRpdGlvbmFsX3Byb3Bvc2Fsc1IPcHJvcG9zYWxfZXJyb3JzUgpjcmVhdGVkX2F0IrIBChhDb252ZXJzYXRpb25TZWVkUmVzcG9uc2USDwoHc2VlZF9pZBgBIAEoCRIqCgRzZWVkGAIgASgLMhcucml2ZXIuQ29udmVyc2F0aW9uU2VlZEgBiAEBEiwKEXNlbGVjdGVkX3Byb3Bvc2FsGGQgASgLMg8ucml2ZXIuUHJvcG9zYWxIABIWCgx1c2VyX21lc3NhZ2UYZSABKAlIAEIKCghyZXNwb25zZUIHCgVfc2VlZCJjChFDaGFubmVsUHJvcGVydGllcxIMCgRuYW1lGAEgASgJEg0KBXRvcGljGAIgASgJEicKBWltYWdlGAMgASgLMhMucml2ZXIuQ2h1bmtlZE1lZGlhSACIAQFCCAoGX2ltYWdlImgKFlVzZXJNZXRhZGF0YVByb3BlcnRpZXMSFQoIdXNlcm5hbWUYASABKAlIAIgBARIZCgxkaXNwbGF5X25hbWUYAiABKAlIAYgBAUILCglfdXNlcm5hbWVCDwoNX2Rpc3BsYXlfbmFtZSKIAwoQRnVsbHlSZWFkTWFya2VycxI1CgdtYXJrZXJzGAEgAygLMiQucml2ZXIuRnVsbHlSZWFkTWFya2Vycy5NYXJrZXJzRW50cnka6wEKB0NvbnRlbnQSEgoKY2hhbm5lbF9pZBgBIAEoCRIdChB0aHJlYWRfcGFyZW50X2lkGAIgASgJSACIAQESEAoIZXZlbnRfaWQYAyABKAkSEQoJZXZlbnRfbnVtGAQgASgDEhsKE2JlZ2luX3VucmVhZF93aW5kb3cYBSABKAMSGQoRZW5kX3VucmVhZF93aW5kb3cYBiABKAMSEQoJaXNfdW5yZWFkGAcgASgIEhYKDm1hcmtlZFJlYWRBdFRzGAggASgDEhAKCG1lbnRpb25zGAkgASgFQhMKEV90aHJlYWRfcGFyZW50X2lkGk8KDE1hcmtlcnNFbnRyeRILCgNrZXkYASABKAkSLgoFdmFsdWUYAiABKAsyHy5yaXZlci5GdWxseVJlYWRNYXJrZXJzLkNvbnRlbnQ6AjgBIhsKC1Nlc3Npb25LZXlzEgwKBGtleXMYASADKAkiegoVSHlicmlkR3JvdXBTZXNzaW9uS2V5EhIKCnNlc3Npb25faWQYASABKAwSEQoJc3RyZWFtX2lkGAIgASgMEgsKA2tleRgDIAEoDBIVCg1taW5pYmxvY2tfbnVtGAQgASgDEhYKDm1pbmlibG9ja19oYXNoGAUgASgMIm0KCU1lZGlhSW5mbxIQCghtaW1ldHlwZRgBIAEoCRIRCglzaXplQnl0ZXMYAiABKAMSEwoLd2lkdGhQaXhlbHMYAyABKAUSFAoMaGVpZ2h0UGl4ZWxzGAQgASgFEhAKCGZpbGVuYW1lGAUgASgJIkAKDUVtYmVkZGVkTWVkaWESHgoEaW5mbxgBIAEoCzIQLnJpdmVyLk1lZGlhSW5mbxIPCgdjb250ZW50GAIgASgMIs4BCgxDaHVua2VkTWVkaWESHgoEaW5mbxgBIAEoCzIQLnJpdmVyLk1lZGlhSW5mbxIQCghzdHJlYW1JZBgCIAEoCRInCgl0aHVtYm5haWwYAyABKAsyFC5yaXZlci5FbWJlZGRlZE1lZGlhEiwKBmFlc2djbRhlIAEoCzIaLnJpdmVyLkNodW5rZWRNZWRpYS5BRVNHQ01IABonCgZBRVNHQ00SCgoCaXYYASABKAwSEQoJc2VjcmV0S2V5GAIgASgMQgwKCmVuY3J5cHRpb24iUAoHVXNlckJpbxILCgNiaW8YASABKAkSIAoTdXBkYXRlZF9hdF9lcG9jaF9tcxgCIAEoBEgAiAEBQhYKFF91cGRhdGVkX2F0X2Vwb2NoX21zIloKC0JlYXJlclRva2VuEhwKFGRlbGVnYXRlX3ByaXZhdGVfa2V5GAEgASgJEhQKDGRlbGVnYXRlX3NpZxgCIAEoDBIXCg9leHBpcnlfZXBvY2hfbXMYAyABKAMirgMKDkV4cG9ydGVkRGV2aWNlEhEKCXBpY2tsZUtleRgBIAEoCRIWCg5waWNrbGVkQWNjb3VudBgCIAEoCRI8ChBvdXRib3VuZFNlc3Npb25zGAMgAygLMiIucml2ZXIuRXhwb3J0ZWREZXZpY2UuR3JvdXBTZXNzaW9uEjsKD2luYm91bmRTZXNzaW9ucxgEIAMoCzIiLnJpdmVyLkV4cG9ydGVkRGV2aWNlLkdyb3VwU2Vzc2lvbhJFChNoeWJyaWRHcm91cFNlc3Npb25zGAUgAygLMigucml2ZXIuRXhwb3J0ZWREZXZpY2UuSHlicmlkR3JvdXBTZXNzaW9uGkYKDEdyb3VwU2Vzc2lvbhISCgpzZXNzaW9uX2lkGAEgASgJEhEKCXN0cmVhbV9pZBgCIAEoCRIPCgdzZXNzaW9uGAMgASgJGmcKEkh5YnJpZEdyb3VwU2Vzc2lvbhISCgpzZXNzaW9uX2lkGAEgASgJEhEKCXN0cmVhbV9pZBgCIAEoCRITCgtzZXNzaW9uX2tleRgDIAEoDBIVCg1taW5pYmxvY2tfbnVtGAQgASgDIqEBCg5BcHBQcml2YXRlRGF0YRITCgtwcml2YXRlX2tleRgBIAEoCRIwChFlbmNyeXB0aW9uX2RldmljZRgCIAEoCzIVLnJpdmVyLkV4cG9ydGVkRGV2aWNlEgsKA2VudhgDIAEoCRITCgthcHBfYWRkcmVzcxgEIAEoDBIXCgpqd3Rfc2VjcmV0GAUgASgMSACIAQFCDQoLX2p3dF9zZWNyZXQqswEKFkNvbnZlcnNhdGlvblNlZWRTdGF0dXMSKAokQ09OVkVSU0FUSU9OX1NFRURfU1RBVFVTX1VOU1BFQ0lGSUVEEAASJgoiQ09OVkVSU0FUSU9OX1NFRURfU1RBVFVTX05PVF9SRUFEWRABEiIKHkNPTlZFUlNBVElPTl9TRUVEX1NUQVRVU19SRUFEWRACEiMKH0NPTlZFUlNBVElPTl9TRUVEX1NUQVRVU19GQUlMRUQQAyqoAQoOUHJvcG9zYWxTdGF0dXMSHwobUFJPUE9TQUxfU1RBVFVTX1VOU1BFQ0lGSUVEEAASGwoXUFJPUE9TQUxfU1RBVFVTX1BFTkRJTkcQARIdChlQUk9QT1NBTF9TVEFUVVNfRlVMRklMTEVEEAISGgoWUFJPUE9TQUxfU1RBVFVTX0ZBSUxFRBADEh0KGVBST1BPU0FMX1NUQVRVU19USU1FRF9PVVQQBEI0WjJnaXRodWIuY29tL3Rvd25zLXByb3RvY29sL3Rvd25zL2NvcmUvbm9kZS9wcm90b2NvbGIGcHJvdG8z", [import_wkt.file_google_protobuf_empty]);
7568
7568
  var ChannelMessageSchema = /* @__PURE__ */ (0, import_codegenv2.messageDesc)(file_payloads, 0);
7569
7569
  var ChannelMessage_Post_Content_InfoCard_Label_Badge_Variant;
7570
7570
  (function(ChannelMessage_Post_Content_InfoCard_Label_Badge_Variant2) {
@@ -7588,7 +7588,6 @@ var ChunkedMediaSchema = /* @__PURE__ */ (0, import_codegenv2.messageDesc)(file_
7588
7588
  var UserBioSchema = /* @__PURE__ */ (0, import_codegenv2.messageDesc)(file_payloads, 15);
7589
7589
  var BearerTokenSchema = /* @__PURE__ */ (0, import_codegenv2.messageDesc)(file_payloads, 16);
7590
7590
  var ExportedDeviceSchema = /* @__PURE__ */ (0, import_codegenv2.messageDesc)(file_payloads, 17);
7591
- var ExportedDevice_GroupSessionSchema = /* @__PURE__ */ (0, import_codegenv2.messageDesc)(file_payloads, 17, 0);
7592
7591
  var ExportedDevice_HybridGroupSessionSchema = /* @__PURE__ */ (0, import_codegenv2.messageDesc)(file_payloads, 17, 1);
7593
7592
  var AppPrivateDataSchema = /* @__PURE__ */ (0, import_codegenv2.messageDesc)(file_payloads, 18);
7594
7593
  var ConversationSeedStatus;
@@ -7610,7 +7609,7 @@ var ProposalStatus;
7610
7609
  // ../proto/dist/gen/protocol_pb.js
7611
7610
  var import_codegenv22 = require("@bufbuild/protobuf/codegenv2");
7612
7611
  var import_wkt2 = require("@bufbuild/protobuf/wkt");
7613
- var file_protocol = /* @__PURE__ */ (0, import_codegenv22.fileDesc)("Cg5wcm90b2NvbC5wcm90bxIFcml2ZXIiXgoJTWluaWJsb2NrEh8KBmV2ZW50cxgBIAMoCzIPLnJpdmVyLkVudmVsb3BlEh8KBmhlYWRlchgCIAEoCzIPLnJpdmVyLkVudmVsb3BlEg8KB3BhcnRpYWwYAyABKAgiOgoIRW52ZWxvcGUSDAoEaGFzaBgBIAEoDBIRCglzaWduYXR1cmUYAiABKAwSDQoFZXZlbnQYAyABKAwi1wYKC1N0cmVhbUV2ZW50EhcKD2NyZWF0b3JfYWRkcmVzcxgBIAEoDBIUCgxkZWxlZ2F0ZV9zaWcYAiABKAwSDAoEc2FsdBgDIAEoDBIgChNwcmV2X21pbmlibG9ja19oYXNoGAQgASgMSAGIAQESGwoTY3JlYXRlZF9hdF9lcG9jaF9tcxgFIAEoAxIgChhkZWxlZ2F0ZV9leHBpcnlfZXBvY2hfbXMYBiABKAMSGQoEdGFncxgHIAEoCzILLnJpdmVyLlRhZ3MSHwoScHJldl9taW5pYmxvY2tfbnVtGAggASgDSAKIAQESEQoJZXBoZW1lcmFsGAkgASgIEhsKE2NyZWF0ZWRfYXRfdGltZXpvbmUYCiABKAkSMgoQbWluaWJsb2NrX2hlYWRlchhkIAEoCzIWLnJpdmVyLk1pbmlibG9ja0hlYWRlckgAEi4KDm1lbWJlcl9wYXlsb2FkGGUgASgLMhQucml2ZXIuTWVtYmVyUGF5bG9hZEgAEioKDHVzZXJfcGF5bG9hZBhoIAEoCzISLnJpdmVyLlVzZXJQYXlsb2FkSAASOwoVdXNlcl9zZXR0aW5nc19wYXlsb2FkGGkgASgLMhoucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZEgAEjsKFXVzZXJfbWV0YWRhdGFfcGF5bG9hZBhqIAEoCzIaLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWRIABI1ChJ1c2VyX2luYm94X3BheWxvYWQYayABKAsyFy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkSAASLAoNbWVkaWFfcGF5bG9hZBhsIAEoCzITLnJpdmVyLk1lZGlhUGF5bG9hZEgAEjcKE2dkbV9jaGFubmVsX3BheWxvYWQYbiABKAsyGC5yaXZlci5HZG1DaGFubmVsUGF5bG9hZEgAQgkKB3BheWxvYWRCFgoUX3ByZXZfbWluaWJsb2NrX2hhc2hCFQoTX3ByZXZfbWluaWJsb2NrX251bUoECGYQZ0oECGcQaEoECG0QbkoECG8QcFINc3BhY2VfcGF5bG9hZFIPY2hhbm5lbF9wYXlsb2FkUhJkbV9jaGFubmVsX3BheWxvYWRSEG1ldGFkYXRhX3BheWxvYWQizwIKD01pbmlibG9ja0hlYWRlchIVCg1taW5pYmxvY2tfbnVtGAEgASgDEhsKE3ByZXZfbWluaWJsb2NrX2hhc2gYAiABKAwSLQoJdGltZXN0YW1wGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIUCgxldmVudF9oYXNoZXMYBCADKAwSGAoQZXZlbnRfbnVtX29mZnNldBgGIAEoAxIjChtwcmV2X3NuYXBzaG90X21pbmlibG9ja19udW0YByABKAMSGgoNc25hcHNob3RfaGFzaBgIIAEoDEgBiAEBEh0KFXJlamVjdGVkX2V2ZW50X2hhc2hlcxgJIAMoDBImCgRub25lGGQgASgLMhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5SABCCQoHY29udGVudEIQCg5fc25hcHNob3RfaGFzaEoECAUQBiL1EgoNTWVtYmVyUGF5bG9hZBI1CgptZW1iZXJzaGlwGAEgASgLMh8ucml2ZXIuTWVtYmVyUGF5bG9hZC5NZW1iZXJzaGlwSAASQAoQa2V5X3NvbGljaXRhdGlvbhgCIAEoCzIkLnJpdmVyLk1lbWJlclBheWxvYWQuS2V5U29saWNpdGF0aW9uSAASPgoPa2V5X2Z1bGZpbGxtZW50GAMgASgLMiMucml2ZXIuTWVtYmVyUGF5bG9hZC5LZXlGdWxmaWxsbWVudEgAEicKA3BpbhgIIAEoCzIYLnJpdmVyLk1lbWJlclBheWxvYWQuUGluSAASKwoFdW5waW4YCSABKAsyGi5yaXZlci5NZW1iZXJQYXlsb2FkLlVucGluSAASWQodbWVtYmVyX2Jsb2NrY2hhaW5fdHJhbnNhY3Rpb24YCyABKAsyMC5yaXZlci5NZW1iZXJQYXlsb2FkLk1lbWJlckJsb2NrY2hhaW5UcmFuc2FjdGlvbkgAEkgKFGVuY3J5cHRpb25fYWxnb3JpdGhtGAwgASgLMigucml2ZXIuTWVtYmVyUGF5bG9hZC5FbmNyeXB0aW9uQWxnb3JpdGhtSAAa9wgKCFNuYXBzaG90EjQKBmpvaW5lZBgBIAMoCzIkLnJpdmVyLk1lbWJlclBheWxvYWQuU25hcHNob3QuTWVtYmVyEi0KBHBpbnMYAiADKAsyHy5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBwZWRQaW4SRgoUZW5jcnlwdGlvbl9hbGdvcml0aG0YBCABKAsyKC5yaXZlci5NZW1iZXJQYXlsb2FkLkVuY3J5cHRpb25BbGdvcml0aG0SNQoEdGlwcxgFIAMoCzInLnJpdmVyLk1lbWJlclBheWxvYWQuU25hcHNob3QuVGlwc0VudHJ5EkAKCnRpcHNfY291bnQYBiADKAsyLC5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNDb3VudEVudHJ5Gt8FCgZNZW1iZXISFAoMdXNlcl9hZGRyZXNzGAEgASgMEhUKDW1pbmlibG9ja19udW0YAiABKAMSEQoJZXZlbnRfbnVtGAMgASgDEjsKDXNvbGljaXRhdGlvbnMYBCADKAsyJC5yaXZlci5NZW1iZXJQYXlsb2FkLktleVNvbGljaXRhdGlvbhJFCgl0aXBzX3NlbnQYCSADKAsyMi5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90Lk1lbWJlci5UaXBzU2VudEVudHJ5Ek0KDXRpcHNfcmVjZWl2ZWQYCiADKAsyNi5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90Lk1lbWJlci5UaXBzUmVjZWl2ZWRFbnRyeRJQCg90aXBzX3NlbnRfY291bnQYCyADKAsyNy5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90Lk1lbWJlci5UaXBzU2VudENvdW50RW50cnkSWAoTdGlwc19yZWNlaXZlZF9jb3VudBgMIAMoCzI7LnJpdmVyLk1lbWJlclBheWxvYWQuU25hcHNob3QuTWVtYmVyLlRpcHNSZWNlaXZlZENvdW50RW50cnkSGAoLYXBwX2FkZHJlc3MYDSABKAxIAIgBARovCg1UaXBzU2VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEaMwoRVGlwc1JlY2VpdmVkRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARo0ChJUaXBzU2VudENvdW50RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARo4ChZUaXBzUmVjZWl2ZWRDb3VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAFCDgoMX2FwcF9hZGRyZXNzSgQIBRAGSgQIBhAHSgQIBxAISgQICBAJGisKCVRpcHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAQ6AjgBGjAKDlRpcHNDb3VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAFKBAgDEAQagwIKCk1lbWJlcnNoaXASHwoCb3AYASABKA4yEy5yaXZlci5NZW1iZXJzaGlwT3ASFAoMdXNlcl9hZGRyZXNzGAIgASgMEhkKEWluaXRpYXRvcl9hZGRyZXNzGAMgASgMEicKBnJlYXNvbhgFIAEoDjIXLnJpdmVyLk1lbWJlcnNoaXBSZWFzb24SGAoLYXBwX2FkZHJlc3MYBiABKAxIAIgBARI3Cg5pbnZpdGVfcGF5bG9hZBgHIAEoCzIaLnJpdmVyLkludml0ZVNpZ25lZFBheWxvYWRIAYgBAUIOCgxfYXBwX2FkZHJlc3NCEQoPX2ludml0ZV9wYXlsb2FkSgQIBBAFGmcKD0tleVNvbGljaXRhdGlvbhISCgpkZXZpY2Vfa2V5GAEgASgJEhQKDGZhbGxiYWNrX2tleRgCIAEoCRIVCg1pc19uZXdfZGV2aWNlGAMgASgIEhMKC3Nlc3Npb25faWRzGAQgAygJGk8KDktleUZ1bGZpbGxtZW50EhQKDHVzZXJfYWRkcmVzcxgBIAEoDBISCgpkZXZpY2Vfa2V5GAIgASgJEhMKC3Nlc3Npb25faWRzGAMgAygJGkwKClNuYXBwZWRQaW4SFwoPY3JlYXRvcl9hZGRyZXNzGAEgASgMEiUKA3BpbhgCIAEoCzIYLnJpdmVyLk1lbWJlclBheWxvYWQuUGluGjoKA1BpbhIQCghldmVudF9pZBgBIAEoDBIhCgVldmVudBgCIAEoCzISLnJpdmVyLlN0cmVhbUV2ZW50GhkKBVVucGluEhAKCGV2ZW50X2lkGAEgASgMGjsKE0VuY3J5cHRpb25BbGdvcml0aG0SFgoJYWxnb3JpdGhtGAEgASgJSACIAQFCDAoKX2FsZ29yaXRobRprChtNZW1iZXJCbG9ja2NoYWluVHJhbnNhY3Rpb24SMQoLdHJhbnNhY3Rpb24YASABKAsyHC5yaXZlci5CbG9ja2NoYWluVHJhbnNhY3Rpb24SGQoRZnJvbV91c2VyX2FkZHJlc3MYAiABKAxCCQoHY29udGVudEoECAQQBUoECAUQBkoECAYQB0oECAcQCEoECAoQCyLwBAoRR2RtQ2hhbm5lbFBheWxvYWQSNwoJaW5jZXB0aW9uGAEgASgLMiIucml2ZXIuR2RtQ2hhbm5lbFBheWxvYWQuSW5jZXB0aW9uSAASJwoHbWVzc2FnZRgCIAEoCzIULnJpdmVyLkVuY3J5cHRlZERhdGFIABIyChJjaGFubmVsX3Byb3BlcnRpZXMYAyABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhSAASJgoGY3VzdG9tGAQgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueUgAEiUKCXJlZGFjdGlvbhgFIAEoCzIQLnJpdmVyLlJlZGFjdGlvbkgAEjgKE2ludGVyYWN0aW9uX3JlcXVlc3QYBiABKAsyGS5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RIABI6ChRpbnRlcmFjdGlvbl9yZXNwb25zZRgHIAEoCzIaLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VIABp6CghTbmFwc2hvdBI1CglpbmNlcHRpb24YASABKAsyIi5yaXZlci5HZG1DaGFubmVsUGF5bG9hZC5JbmNlcHRpb24SNwoSY2hhbm5lbF9wcm9wZXJ0aWVzGAIgASgLMhsucml2ZXIuV3JhcHBlZEVuY3J5cHRlZERhdGEaeQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIwChJjaGFubmVsX3Byb3BlcnRpZXMYAiABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhEicKCHNldHRpbmdzGAMgASgLMhUucml2ZXIuU3RyZWFtU2V0dGluZ3NCCQoHY29udGVudCKFDQoLVXNlclBheWxvYWQSMQoJaW5jZXB0aW9uGAEgASgLMhwucml2ZXIuVXNlclBheWxvYWQuSW5jZXB0aW9uSAASPAoPdXNlcl9tZW1iZXJzaGlwGAIgASgLMiEucml2ZXIuVXNlclBheWxvYWQuVXNlck1lbWJlcnNoaXBIABJJChZ1c2VyX21lbWJlcnNoaXBfYWN0aW9uGAMgASgLMicucml2ZXIuVXNlclBheWxvYWQuVXNlck1lbWJlcnNoaXBBY3Rpb25IABI+ChZibG9ja2NoYWluX3RyYW5zYWN0aW9uGAQgASgLMhwucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uSAASWwofcmVjZWl2ZWRfYmxvY2tjaGFpbl90cmFuc2FjdGlvbhgFIAEoCzIwLnJpdmVyLlVzZXJQYXlsb2FkLlJlY2VpdmVkQmxvY2tjaGFpblRyYW5zYWN0aW9uSAAa5wQKCFNuYXBzaG90Ei8KCWluY2VwdGlvbhgBIAEoCzIcLnJpdmVyLlVzZXJQYXlsb2FkLkluY2VwdGlvbhI2CgttZW1iZXJzaGlwcxgCIAMoCzIhLnJpdmVyLlVzZXJQYXlsb2FkLlVzZXJNZW1iZXJzaGlwEjwKCXRpcHNfc2VudBgDIAMoCzIpLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNTZW50RW50cnkSRAoNdGlwc19yZWNlaXZlZBgEIAMoCzItLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNSZWNlaXZlZEVudHJ5EkcKD3RpcHNfc2VudF9jb3VudBgFIAMoCzIuLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNTZW50Q291bnRFbnRyeRJPChN0aXBzX3JlY2VpdmVkX2NvdW50GAYgAygLMjIucml2ZXIuVXNlclBheWxvYWQuU25hcHNob3QuVGlwc1JlY2VpdmVkQ291bnRFbnRyeRovCg1UaXBzU2VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEaMwoRVGlwc1JlY2VpdmVkRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARo0ChJUaXBzU2VudENvdW50RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARo4ChZUaXBzUmVjZWl2ZWRDb3VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEapwEKCUluY2VwdGlvbhIRCglzdHJlYW1faWQYASABKAwSJwoIc2V0dGluZ3MYAiABKAsyFS5yaXZlci5TdHJlYW1TZXR0aW5ncxIYCgthcHBfYWRkcmVzcxgDIAEoDEgAiAEBEh4KEWFwcF9vd25lcl9hZGRyZXNzGAQgASgMSAGIAQFCDgoMX2FwcF9hZGRyZXNzQhQKEl9hcHBfb3duZXJfYWRkcmVzcxrxAQoOVXNlck1lbWJlcnNoaXASEQoJc3RyZWFtX2lkGAEgASgMEh8KAm9wGAIgASgOMhMucml2ZXIuTWVtYmVyc2hpcE9wEhQKB2ludml0ZXIYAyABKAxIAIgBARIsCgZyZWFzb24YBSABKA4yFy5yaXZlci5NZW1iZXJzaGlwUmVhc29uSAGIAQESNwoOaW52aXRlX3BheWxvYWQYBiABKAsyGi5yaXZlci5JbnZpdGVTaWduZWRQYXlsb2FkSAKIAQFCCgoIX2ludml0ZXJCCQoHX3JlYXNvbkIRCg9faW52aXRlX3BheWxvYWRKBAgEEAUamgEKFFVzZXJNZW1iZXJzaGlwQWN0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIPCgd1c2VyX2lkGAIgASgMEh8KAm9wGAMgASgOMhMucml2ZXIuTWVtYmVyc2hpcE9wEiwKBnJlYXNvbhgFIAEoDjIXLnJpdmVyLk1lbWJlcnNoaXBSZWFzb25IAIgBAUIJCgdfcmVhc29uSgQIBBAFGm0KHVJlY2VpdmVkQmxvY2tjaGFpblRyYW5zYWN0aW9uEjEKC3RyYW5zYWN0aW9uGAEgASgLMhwucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uEhkKEWZyb21fdXNlcl9hZGRyZXNzGAIgASgMQgkKB2NvbnRlbnQi2gcKEFVzZXJJbmJveFBheWxvYWQSNgoJaW5jZXB0aW9uGAEgASgLMiEucml2ZXIuVXNlckluYm94UGF5bG9hZC5JbmNlcHRpb25IABIqCgNhY2sYAiABKAsyGy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkLkFja0gAElQKGWdyb3VwX2VuY3J5cHRpb25fc2Vzc2lvbnMYAyABKAsyLy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkLkdyb3VwRW5jcnlwdGlvblNlc3Npb25zSAAargIKCFNuYXBzaG90EjQKCWluY2VwdGlvbhgBIAEoCzIhLnJpdmVyLlVzZXJJbmJveFBheWxvYWQuSW5jZXB0aW9uEksKDmRldmljZV9zdW1tYXJ5GAIgAygLMjMucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdC5EZXZpY2VTdW1tYXJ5RW50cnkaOQoNRGV2aWNlU3VtbWFyeRITCgtsb3dlcl9ib3VuZBgBIAEoAxITCgt1cHBlcl9ib3VuZBgCIAEoAxpkChJEZXZpY2VTdW1tYXJ5RW50cnkSCwoDa2V5GAEgASgJEj0KBXZhbHVlGAIgASgLMi4ucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdC5EZXZpY2VTdW1tYXJ5OgI4ARqnAQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBInCghzZXR0aW5ncxgCIAEoCzIVLnJpdmVyLlN0cmVhbVNldHRpbmdzEhgKC2FwcF9hZGRyZXNzGAMgASgMSACIAQESHgoRYXBwX293bmVyX2FkZHJlc3MYBCABKAxIAYgBAUIOCgxfYXBwX2FkZHJlc3NCFAoSX2FwcF9vd25lcl9hZGRyZXNzGvMBChdHcm91cEVuY3J5cHRpb25TZXNzaW9ucxIRCglzdHJlYW1faWQYASABKAwSEgoKc2VuZGVyX2tleRgCIAEoCRITCgtzZXNzaW9uX2lkcxgDIAMoCRJVCgtjaXBoZXJ0ZXh0cxgEIAMoCzJALnJpdmVyLlVzZXJJbmJveFBheWxvYWQuR3JvdXBFbmNyeXB0aW9uU2Vzc2lvbnMuQ2lwaGVydGV4dHNFbnRyeRIRCglhbGdvcml0aG0YBSABKAkaMgoQQ2lwaGVydGV4dHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGjAKA0FjaxISCgpkZXZpY2Vfa2V5GAEgASgJEhUKDW1pbmlibG9ja19udW0YAiABKANCCQoHY29udGVudCLBBwoTVXNlclNldHRpbmdzUGF5bG9hZBI5CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkluY2VwdGlvbkgAEkkKEmZ1bGx5X3JlYWRfbWFya2VycxgCIAEoCzIrLnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuRnVsbHlSZWFkTWFya2Vyc0gAEjoKCnVzZXJfYmxvY2sYAyABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLlVzZXJCbG9ja0gAGuwCCghTbmFwc2hvdBI3CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkluY2VwdGlvbhJHChJmdWxseV9yZWFkX21hcmtlcnMYAiADKAsyKy5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkZ1bGx5UmVhZE1hcmtlcnMSSAoQdXNlcl9ibG9ja3NfbGlzdBgDIAMoCzIuLnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuU25hcHNob3QuVXNlckJsb2NrcxqTAQoKVXNlckJsb2NrcxIPCgd1c2VyX2lkGAEgASgMEkQKBmJsb2NrcxgCIAMoCzI0LnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuU25hcHNob3QuVXNlckJsb2Nrcy5CbG9jaxouCgVCbG9jaxISCgppc19ibG9ja2VkGAEgASgIEhEKCWV2ZW50X251bRgCIAEoAxqnAQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBInCghzZXR0aW5ncxgCIAEoCzIVLnJpdmVyLlN0cmVhbVNldHRpbmdzEhgKC2FwcF9hZGRyZXNzGAMgASgMSACIAQESHgoRYXBwX293bmVyX2FkZHJlc3MYBCABKAxIAYgBAUIOCgxfYXBwX2FkZHJlc3NCFAoSX2FwcF9vd25lcl9hZGRyZXNzGh0KDU1hcmtlckNvbnRlbnQSDAoEZGF0YRgBIAEoCRpgChBGdWxseVJlYWRNYXJrZXJzEhEKCXN0cmVhbV9pZBgBIAEoDBI5Cgdjb250ZW50GAIgASgLMigucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZC5NYXJrZXJDb250ZW50GkMKCVVzZXJCbG9jaxIPCgd1c2VyX2lkGAEgASgMEhIKCmlzX2Jsb2NrZWQYAiABKAgSEQoJZXZlbnRfbnVtGAMgASgDQgkKB2NvbnRlbnQizgUKE1VzZXJNZXRhZGF0YVBheWxvYWQSOQoJaW5jZXB0aW9uGAEgASgLMiQucml2ZXIuVXNlck1ldGFkYXRhUGF5bG9hZC5JbmNlcHRpb25IABJIChFlbmNyeXB0aW9uX2RldmljZRgCIAEoCzIrLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuRW5jcnlwdGlvbkRldmljZUgAEi0KDXByb2ZpbGVfaW1hZ2UYAyABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhSAASIwoDYmlvGAQgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YUgAGuoBCghTbmFwc2hvdBI3CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyTWV0YWRhdGFQYXlsb2FkLkluY2VwdGlvbhJHChJlbmNyeXB0aW9uX2RldmljZXMYAiADKAsyKy5yaXZlci5Vc2VyTWV0YWRhdGFQYXlsb2FkLkVuY3J5cHRpb25EZXZpY2USMgoNcHJvZmlsZV9pbWFnZRgDIAEoCzIbLnJpdmVyLldyYXBwZWRFbmNyeXB0ZWREYXRhEigKA2JpbxgEIAEoCzIbLnJpdmVyLldyYXBwZWRFbmNyeXB0ZWREYXRhGqcBCglJbmNlcHRpb24SEQoJc3RyZWFtX2lkGAEgASgMEicKCHNldHRpbmdzGAIgASgLMhUucml2ZXIuU3RyZWFtU2V0dGluZ3MSGAoLYXBwX2FkZHJlc3MYAyABKAxIAIgBARIeChFhcHBfb3duZXJfYWRkcmVzcxgEIAEoDEgBiAEBQg4KDF9hcHBfYWRkcmVzc0IUChJfYXBwX293bmVyX2FkZHJlc3MaPAoQRW5jcnlwdGlvbkRldmljZRISCgpkZXZpY2Vfa2V5GAEgASgJEhQKDGZhbGxiYWNrX2tleRgCIAEoCUIJCgdjb250ZW50IoQECgxNZWRpYVBheWxvYWQSMgoJaW5jZXB0aW9uGAEgASgLMh0ucml2ZXIuTWVkaWFQYXlsb2FkLkluY2VwdGlvbkgAEioKBWNodW5rGAIgASgLMhkucml2ZXIuTWVkaWFQYXlsb2FkLkNodW5rSAAaPAoIU25hcHNob3QSMAoJaW5jZXB0aW9uGAEgASgLMh0ucml2ZXIuTWVkaWFQYXlsb2FkLkluY2VwdGlvbhqGAgoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIXCgpjaGFubmVsX2lkGAIgASgMSACIAQESEwoLY2h1bmtfY291bnQYAyABKAUSJwoIc2V0dGluZ3MYBCABKAsyFS5yaXZlci5TdHJlYW1TZXR0aW5ncxIVCghzcGFjZV9pZBgFIAEoDEgBiAEBEhQKB3VzZXJfaWQYBiABKAxIAogBARIhChRwZXJfY2h1bmtfZW5jcnlwdGlvbhgHIAEoCEgDiAEBQg0KC19jaGFubmVsX2lkQgsKCV9zcGFjZV9pZEIKCghfdXNlcl9pZEIXChVfcGVyX2NodW5rX2VuY3J5cHRpb24aQgoFQ2h1bmsSDAoEZGF0YRgBIAEoDBITCgtjaHVua19pbmRleBgCIAEoBRIPCgJpdhgDIAEoDEgAiAEBQgUKA19pdkIJCgdjb250ZW50IrcECghTbmFwc2hvdBIuCgdtZW1iZXJzGAEgASgLMh0ucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdBIYChBzbmFwc2hvdF92ZXJzaW9uGAIgASgFEjMKDHVzZXJfY29udGVudBhnIAEoCzIbLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90SAASRAoVdXNlcl9zZXR0aW5nc19jb250ZW50GGggASgLMiMucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZC5TbmFwc2hvdEgAEkQKFXVzZXJfbWV0YWRhdGFfY29udGVudBhpIAEoCzIjLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuU25hcHNob3RIABI1Cg1tZWRpYV9jb250ZW50GGogASgLMhwucml2ZXIuTWVkaWFQYXlsb2FkLlNuYXBzaG90SAASQAoTZ2RtX2NoYW5uZWxfY29udGVudBhsIAEoCzIhLnJpdmVyLkdkbUNoYW5uZWxQYXlsb2FkLlNuYXBzaG90SAASPgoSdXNlcl9pbmJveF9jb250ZW50GG0gASgLMiAucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdEgAQgkKB2NvbnRlbnRKBAhlEGZKBAhmEGdKBAhrEGxKBAhuEG9SDXNwYWNlX2NvbnRlbnRSD2NoYW5uZWxfY29udGVudFISZG1fY2hhbm5lbF9jb250ZW50UhBtZXRhZGF0YV9jb250ZW50IrcHChVCbG9ja2NoYWluVHJhbnNhY3Rpb24SNAoHcmVjZWlwdBgBIAEoCzIjLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvblJlY2VpcHQSQQoOc29sYW5hX3JlY2VpcHQYAiABKAsyKS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Ei8KA3RpcBhlIAEoCzIgLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5UaXBIABJECg50b2tlbl90cmFuc2ZlchhmIAEoCzIqLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5Ub2tlblRyYW5zZmVySAASQAoMc3BhY2VfcmV2aWV3GGcgASgLMigucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uLlNwYWNlUmV2aWV3SAAa7QEKA1RpcBI1CgVldmVudBgBIAEoCzImLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5UaXAuRXZlbnQSFQoNdG9Vc2VyQWRkcmVzcxgCIAEoDBqXAQoFRXZlbnQSFQoIdG9rZW5faWQYASABKARIAIgBARIQCghjdXJyZW5jeRgCIAEoDBIOCgZzZW5kZXIYAyABKAwSEAoIcmVjZWl2ZXIYBCABKAwSDgoGYW1vdW50GAUgASgEEhIKCm1lc3NhZ2VfaWQYBiABKAwSEgoKY2hhbm5lbF9pZBgHIAEoDEILCglfdG9rZW5faWQaeAoNVG9rZW5UcmFuc2ZlchIPCgdhZGRyZXNzGAEgASgMEg4KBmFtb3VudBgCIAEoCRIOCgZzZW5kZXIYAyABKAwSEgoKbWVzc2FnZV9pZBgEIAEoDBISCgpjaGFubmVsX2lkGAUgASgMEg4KBmlzX2J1eRgGIAEoCBr2AQoLU3BhY2VSZXZpZXcSFQoNc3BhY2VfYWRkcmVzcxgBIAEoDBI/CgZhY3Rpb24YAiABKA4yLy5yaXZlci5CbG9ja2NoYWluVHJhbnNhY3Rpb24uU3BhY2VSZXZpZXcuQWN0aW9uEj0KBWV2ZW50GAMgASgLMi4ucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uLlNwYWNlUmV2aWV3LkV2ZW50GiUKBUV2ZW50EgwKBHVzZXIYASABKAwSDgoGcmF0aW5nGAIgASgFIikKBkFjdGlvbhIHCgNBZGQQABIKCgZVcGRhdGUQARIKCgZEZWxldGUQAkIJCgdjb250ZW50IucBChxCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0EhAKCGNoYWluX2lkGAEgASgEEhgKEHRyYW5zYWN0aW9uX2hhc2gYAiABKAwSFAoMYmxvY2tfbnVtYmVyGAMgASgEEgoKAnRvGAQgASgMEgwKBGZyb20YBSABKAwSNQoEbG9ncxgGIAMoCzInLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvblJlY2VpcHQuTG9nGjQKA0xvZxIPCgdhZGRyZXNzGAEgASgMEg4KBnRvcGljcxgCIAMoDBIMCgRkYXRhGAMgASgMItcECiJTb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0EgwKBHNsb3QYASABKAQSSgoLdHJhbnNhY3Rpb24YAiABKAsyNS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0LlRyYW5zYWN0aW9uEjwKBG1ldGEYAyABKAsyLi5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEaIQoLVHJhbnNhY3Rpb24SEgoKc2lnbmF0dXJlcxgBIAMoCRr1AgoETWV0YRJXChJwcmVfdG9rZW5fYmFsYW5jZXMYASADKAsyOy5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlElgKE3Bvc3RfdG9rZW5fYmFsYW5jZXMYAiADKAsyOy5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlGrkBCgxUb2tlbkJhbGFuY2USDAoEbWludBgBIAEoCRINCgVvd25lchgCIAEoCRJZCgZhbW91bnQYAyABKAsySS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlLlVJVG9rZW5BbW91bnQaMQoNVUlUb2tlbkFtb3VudBIOCgZhbW91bnQYASABKAkSEAoIZGVjaW1hbHMYAiABKA0iPgoIRXZlbnRSZWYSEQoJc3RyZWFtX2lkGAEgASgMEgwKBGhhc2gYAiABKAwSEQoJc2lnbmF0dXJlGAMgASgMIkoKDlN0cmVhbVNldHRpbmdzEiIKGmRpc2FibGVfbWluaWJsb2NrX2NyZWF0aW9uGAEgASgIEhQKDGxpZ2h0X3N0cmVhbRgCIAEoCCLQAgoNRW5jcnlwdGVkRGF0YRISCgpjaXBoZXJ0ZXh0GAEgASgJEhEKCWFsZ29yaXRobRgCIAEoCRISCgpzZW5kZXJfa2V5GAMgASgJEhIKCnNlc3Npb25faWQYBCABKAkSFQoIY2hlY2tzdW0YBSABKAlIAIgBARIZCgxyZWZfZXZlbnRfaWQYBiABKAlIAYgBARIYChBjaXBoZXJ0ZXh0X2J5dGVzGAggASgMEhAKCGl2X2J5dGVzGAkgASgMEhgKEHNlc3Npb25faWRfYnl0ZXMYCiABKAwSLAoHdmVyc2lvbhgLIAEoDjIbLnJpdmVyLkVuY3J5cHRlZERhdGFWZXJzaW9uEhcKCmRldmljZV9rZXkYDCABKAlIAogBAUILCglfY2hlY2tzdW1CDwoNX3JlZl9ldmVudF9pZEINCgtfZGV2aWNlX2tleUoECAcQCCJhChRXcmFwcGVkRW5jcnlwdGVkRGF0YRIiCgRkYXRhGAEgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YRIRCglldmVudF9udW0YAiABKAMSEgoKZXZlbnRfaGFzaBgDIAEoDCJuCgpTeW5jQ29va2llEhQKDG5vZGVfYWRkcmVzcxgBIAEoDBIRCglzdHJlYW1faWQYAiABKAwSFAoMbWluaXBvb2xfZ2VuGAMgASgDEhsKE3ByZXZfbWluaWJsb2NrX2hhc2gYBSABKAxKBAgEEAUiXQoOQ3JlYXRpb25Db29raWUSEQoJc3RyZWFtX2lkGAEgASgMEhUKDW1pbmlibG9ja19udW0YAyABKAMSGwoTcHJldl9taW5pYmxvY2tfaGFzaBgEIAEoDEoECAIQAyLwAQoPU3RyZWFtQW5kQ29va2llEh8KBmV2ZW50cxgBIAMoCzIPLnJpdmVyLkVudmVsb3BlEisKEG5leHRfc3luY19jb29raWUYAiABKAsyES5yaXZlci5TeW5jQ29va2llEiQKCm1pbmlibG9ja3MYAyADKAsyEC5yaXZlci5NaW5pYmxvY2sSEgoKc3luY19yZXNldBgEIAEoCBImCghzbmFwc2hvdBgFIAEoCzIPLnJpdmVyLkVudmVsb3BlSACIAQESIAoYc25hcHNob3RfbWluaWJsb2NrX2luZGV4GAYgASgDQgsKCV9zbmFwc2hvdCIrCghNaW5pcG9vbBIfCgZldmVudHMYASADKAsyDy5yaXZlci5FbnZlbG9wZSKjAgoEVGFncxI/ChhtZXNzYWdlX2ludGVyYWN0aW9uX3R5cGUYASABKA4yHS5yaXZlci5NZXNzYWdlSW50ZXJhY3Rpb25UeXBlEjQKE2dyb3VwX21lbnRpb25fdHlwZXMYAiADKA4yFy5yaXZlci5Hcm91cE1lbnRpb25UeXBlEiAKGG1lbnRpb25lZF91c2VyX2FkZHJlc3NlcxgDIAMoDBIkChxwYXJ0aWNpcGF0aW5nX3VzZXJfYWRkcmVzc2VzGAQgAygMEhYKCXRocmVhZF9pZBgFIAEoDEgAiAEBEh8KEmFwcF9jbGllbnRfYWRkcmVzcxgGIAEoDEgBiAEBQgwKCl90aHJlYWRfaWRCFQoTX2FwcF9jbGllbnRfYWRkcmVzcyIcCgtJbmZvUmVxdWVzdBINCgVkZWJ1ZxgBIAMoCSJhCgxJbmZvUmVzcG9uc2USEAoIZ3JhZmZpdGkYASABKAkSLgoKc3RhcnRfdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDwoHdmVyc2lvbhgDIAEoCSI+ChJHZXRTdHJlYW1FeFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMEhUKDW9taXRfc25hcHNob3QYAiABKAgingEKE0dldFN0cmVhbUV4UmVzcG9uc2USJQoJbWluaWJsb2NrGAEgASgLMhAucml2ZXIuTWluaWJsb2NrSAASIwoIbWluaXBvb2wYAiABKAsyDy5yaXZlci5NaW5pcG9vbEgAEiYKCHNuYXBzaG90GAMgASgLMg8ucml2ZXIuRW52ZWxvcGVIAYgBAUIGCgRkYXRhQgsKCV9zbmFwc2hvdCK2AQoTQ3JlYXRlU3RyZWFtUmVxdWVzdBIfCgZldmVudHMYASADKAsyDy5yaXZlci5FbnZlbG9wZRIRCglzdHJlYW1faWQYAiABKAwSOgoIbWV0YWRhdGEYAyADKAsyKC5yaXZlci5DcmVhdGVTdHJlYW1SZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAw6AjgBImcKFENyZWF0ZVN0cmVhbVJlc3BvbnNlEiYKBnN0cmVhbRgBIAEoCzIWLnJpdmVyLlN0cmVhbUFuZENvb2tpZRInCg5kZXJpdmVkX2V2ZW50cxgCIAMoCzIPLnJpdmVyLkV2ZW50UmVmIsABChhDcmVhdGVNZWRpYVN0cmVhbVJlcXVlc3QSHwoGZXZlbnRzGAEgAygLMg8ucml2ZXIuRW52ZWxvcGUSEQoJc3RyZWFtX2lkGAIgASgMEj8KCG1ldGFkYXRhGAMgAygLMi0ucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAw6AjgBIlAKGUNyZWF0ZU1lZGlhU3RyZWFtUmVzcG9uc2USMwoUbmV4dF9jcmVhdGlvbl9jb29raWUYASABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZSKHAQoQR2V0U3RyZWFtUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwSEAoIb3B0aW9uYWwYAiABKAgSJgoLc3luY19jb29raWUYAyABKAsyES5yaXZlci5TeW5jQ29va2llEiYKHm51bWJlcl9vZl9wcmVjZWRpbmdfbWluaWJsb2NrcxgEIAEoAyI7ChFHZXRTdHJlYW1SZXNwb25zZRImCgZzdHJlYW0YASABKAsyFi5yaXZlci5TdHJlYW1BbmRDb29raWUiLwoLRXZlbnRGaWx0ZXISDwoHcGF5bG9hZBgBIAEoCRIPCgdjb250ZW50GAIgASgJIp0BChRHZXRNaW5pYmxvY2tzUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwSFgoOZnJvbV9pbmNsdXNpdmUYAiABKAMSFAoMdG9fZXhjbHVzaXZlGAMgASgDEhYKDm9taXRfc25hcHNob3RzGAQgASgIEiwKEGV4Y2x1c2lvbl9maWx0ZXIYBSADKAsyEi5yaXZlci5FdmVudEZpbHRlciKRAgoVR2V0TWluaWJsb2Nrc1Jlc3BvbnNlEiQKCm1pbmlibG9ja3MYASADKAsyEC5yaXZlci5NaW5pYmxvY2sSEAoIdGVybWludXMYAiABKAgSFgoOZnJvbV9pbmNsdXNpdmUYAyABKAMSDQoFbGltaXQYBCABKAMSFgoOb21pdF9zbmFwc2hvdHMYBSABKAgSPgoJc25hcHNob3RzGAYgAygLMisucml2ZXIuR2V0TWluaWJsb2Nrc1Jlc3BvbnNlLlNuYXBzaG90c0VudHJ5GkEKDlNuYXBzaG90c0VudHJ5EgsKA2tleRgBIAEoAxIeCgV2YWx1ZRgCIAEoCzIPLnJpdmVyLkVudmVsb3BlOgI4ASIwChtHZXRMYXN0TWluaWJsb2NrSGFzaFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMIosBChxHZXRMYXN0TWluaWJsb2NrSGFzaFJlc3BvbnNlEgwKBGhhc2gYASABKAwSFQoNbWluaWJsb2NrX251bRgCIAEoAxJGChRlbmNyeXB0aW9uX2FsZ29yaXRobRgDIAEoCzIoLnJpdmVyLk1lbWJlclBheWxvYWQuRW5jcnlwdGlvbkFsZ29yaXRobSJKCg9BZGRFdmVudFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMEh4KBWV2ZW50GAIgASgLMg8ucml2ZXIuRW52ZWxvcGVKBAgDEAQiPQoQQWRkRXZlbnRSZXNwb25zZRIjCgpuZXdfZXZlbnRzGAIgAygLMg8ucml2ZXIuRXZlbnRSZWZKBAgBEAIidAoUQWRkTWVkaWFFdmVudFJlcXVlc3QSHgoFZXZlbnQYASABKAsyDy5yaXZlci5FbnZlbG9wZRIuCg9jcmVhdGlvbl9jb29raWUYAiABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZRIMCgRsYXN0GAMgASgIIkcKFUFkZE1lZGlhRXZlbnRSZXNwb25zZRIuCg9jcmVhdGlvbl9jb29raWUYASABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZSI5ChJTeW5jU3RyZWFtc1JlcXVlc3QSIwoIc3luY19wb3MYASADKAsyES5yaXZlci5TeW5jQ29va2llIq4BChNTeW5jU3RyZWFtc1Jlc3BvbnNlEg8KB3N5bmNfaWQYASABKAkSHgoHc3luY19vcBgCIAEoDjINLnJpdmVyLlN5bmNPcBImCgZzdHJlYW0YAyABKAsyFi5yaXZlci5TdHJlYW1BbmRDb29raWUSEgoKcG9uZ19ub25jZRgEIAEoCRIRCglzdHJlYW1faWQYBSABKAwSFwoPdGFyZ2V0X3N5bmNfaWRzGAYgAygJIuIBChFNb2RpZnlTeW5jUmVxdWVzdBIPCgdzeW5jX2lkGAEgASgJEiYKC2FkZF9zdHJlYW1zGAIgAygLMhEucml2ZXIuU3luY0Nvb2tpZRIWCg5yZW1vdmVfc3RyZWFtcxgDIAMoDBI7ChBiYWNrZmlsbF9zdHJlYW1zGAQgASgLMiEucml2ZXIuTW9kaWZ5U3luY1JlcXVlc3QuQmFja2ZpbGwaPwoIQmFja2ZpbGwSIgoHc3RyZWFtcxgBIAMoCzIRLnJpdmVyLlN5bmNDb29raWUSDwoHc3luY19pZBgCIAEoCSJcChJTeW5jU3RyZWFtT3BTdGF0dXMSEQoJc3RyZWFtX2lkGAEgASgMEgwKBGNvZGUYAiABKAUSDwoHbWVzc2FnZRgDIAEoCRIUCgxub2RlX2FkZHJlc3MYBCABKAwimAEKEk1vZGlmeVN5bmNSZXNwb25zZRInCgRhZGRzGAEgAygLMhkucml2ZXIuU3luY1N0cmVhbU9wU3RhdHVzEisKCHJlbW92YWxzGAIgAygLMhkucml2ZXIuU3luY1N0cmVhbU9wU3RhdHVzEiwKCWJhY2tmaWxscxgDIAMoCzIZLnJpdmVyLlN5bmNTdHJlYW1PcFN0YXR1cyIkChFDYW5jZWxTeW5jUmVxdWVzdBIPCgdzeW5jX2lkGAEgASgJIhQKEkNhbmNlbFN5bmNSZXNwb25zZSIxCg9QaW5nU3luY1JlcXVlc3QSDwoHc3luY19pZBgBIAEoCRINCgVub25jZRgCIAEoCSISChBQaW5nU3luY1Jlc3BvbnNlIh0KCVJlZGFjdGlvbhIQCghldmVudF9pZBgBIAEoDCLyFwoZSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZBJGChFlbmNyeXB0aW9uX2RldmljZRgBIAEoCzIrLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuRW5jcnlwdGlvbkRldmljZRI/CglzaWduYXR1cmUYZSABKAsyKi5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlNpZ25hdHVyZUgAEjUKBGZvcm0YZiABKAsyJS5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLkZvcm1IABJDCgt0cmFuc2FjdGlvbhhnIAEoCzIsLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuVHJhbnNhY3Rpb25IABJACgphZGRfbWVtYmVyGGggASgLMioucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5BZGRNZW1iZXJIABJICg5wcmVwYXJlZF9jYWxscxhpIAEoCzIuLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuUHJlcGFyZWRDYWxsc0gAEjcKBWJhdGNoGGogASgLMiYucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5CYXRjaEgAGu8DCglTaWduYXR1cmUSCgoCaWQYASABKAkSDAoEZGF0YRgCIAEoCRIQCghjaGFpbl9pZBgDIAEoCRIaCg1zaWduZXJfd2FsbGV0GAQgASgJSACIAQESRgoEdHlwZRgFIAEoDjI4LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuU2lnbmF0dXJlLlNpZ25hdHVyZVR5cGUSEgoFdGl0bGUYBiABKAlIAYgBARIVCghzdWJ0aXRsZRgHIAEoCUgCiAEBEmEKFHNpZ25hdHVyZV92YWxpZGF0aW9uGAggASgOMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5TaWduYXR1cmUuU2lnbmF0dXJlVmFsaWRhdGlvbkgDiAEBIjIKDVNpZ25hdHVyZVR5cGUSEQoNUEVSU09OQUxfU0lHThAAEg4KClRZUEVEX0RBVEEQASJOChNTaWduYXR1cmVWYWxpZGF0aW9uEg8KC1VOU1BFQ0lGSUVEEAASDwoLRUlQNzEyX09OTFkQARIVChFFSVA3MTJfT1JfRUlQMTI3MRACQhAKDl9zaWduZXJfd2FsbGV0QggKBl90aXRsZUILCglfc3VidGl0bGVCFwoVX3NpZ25hdHVyZV92YWxpZGF0aW9uGpYDCgRGb3JtEgoKAmlkGAEgASgJEhIKBXRpdGxlGAIgASgJSACIAQESFQoIc3VidGl0bGUYAyABKAlIAYgBARJDCgpjb21wb25lbnRzGAQgAygLMi8ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5Gb3JtLkNvbXBvbmVudBr6AQoJQ29tcG9uZW50EgoKAmlkGAEgASgJEkgKBmJ1dHRvbhhlIAEoCzI2LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuRm9ybS5Db21wb25lbnQuQnV0dG9uSAASTwoKdGV4dF9pbnB1dBhmIAEoCzI5LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuRm9ybS5Db21wb25lbnQuVGV4dElucHV0SAAaFwoGQnV0dG9uEg0KBWxhYmVsGAEgASgJGiAKCVRleHRJbnB1dBITCgtwbGFjZWhvbGRlchgBIAEoCUILCgljb21wb25lbnRCCAoGX3RpdGxlQgsKCV9zdWJ0aXRsZRr/AgoLVHJhbnNhY3Rpb24SCgoCaWQYASABKAkSEgoFdGl0bGUYAiABKAlIAYgBARIVCghzdWJ0aXRsZRgDIAEoCUgCiAEBEkQKA2V2bRhlIAEoCzI1LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuVHJhbnNhY3Rpb24uRVZNQmF0Y2hIABo1CgpFVk1Db250ZW50EgoKAnRvGAEgASgJEg0KBXZhbHVlGAIgASgJEgwKBGRhdGEYAyABKAkamQEKCEVWTUJhdGNoEhAKCGNoYWluX2lkGAEgASgJEhoKDXNpZ25lcl93YWxsZXQYAiABKAlIAIgBARJNCgx0cmFuc2FjdGlvbnMYAyADKAsyNy5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlRyYW5zYWN0aW9uLkVWTUNvbnRlbnRCEAoOX3NpZ25lcl93YWxsZXRCCQoHY29udGVudEIICgZfdGl0bGVCCwoJX3N1YnRpdGxlGkoKCUFkZE1lbWJlchIKCgJpZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgMEhQKB21lc3NhZ2UYAyABKAlIAIgBAUIKCghfbWVzc2FnZRrzBgoNUHJlcGFyZWRDYWxscxIKCgJpZBgBIAEoCRIQCghjaGFpbl9pZBgCIAEoCRISCgp0eXBlZF9kYXRhGAMgASgJEg8KB2NvbnRleHQYBCABKAkSEgoFdGl0bGUYBSABKAlIAIgBARIVCghzdWJ0aXRsZRgGIAEoCUgBiAEBElMKDmF1dGhvcml6ZV9rZXlzGAcgAygLMjsucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLkF1dGhvcml6ZUtleRrmAwoKUGVybWlzc2lvbhJMCgR0eXBlGAEgASgOMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uVHlwZRJOCgRjYWxsGAIgASgLMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uQ2FsbEgAElAKBXNwZW5kGAMgASgLMj8ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uU3BlbmRIABpCCgRDYWxsEg8KAnRvGAEgASgJSACIAQESFQoIc2VsZWN0b3IYAiABKAlIAYgBAUIFCgNfdG9CCwoJX3NlbGVjdG9yGmMKBVNwZW5kEhIKBXRva2VuGAEgASgJSACIAQESEgoFbGltaXQYAiABKAlIAYgBARITCgZwZXJpb2QYAyABKAlIAogBAUIICgZfdG9rZW5CCAoGX2xpbWl0QgkKB19wZXJpb2QiMQoEVHlwZRIUChBUWVBFX1VOU1BFQ0lGSUVEEAASCAoEQ0FMTBABEgkKBVNQRU5EEAJCDAoKcGVybWlzc2lvbhqeAQoMQXV0aG9yaXplS2V5Eg4KBmV4cGlyeRgBIAEoCRIMCgR0eXBlGAIgASgJEgwKBHJvbGUYAyABKAkSEgoKcHVibGljX2tleRgEIAEoCRJOCgtwZXJtaXNzaW9ucxgFIAMoCzI5LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuUHJlcGFyZWRDYWxscy5QZXJtaXNzaW9uQggKBl90aXRsZUILCglfc3VidGl0bGUasAIKBUJhdGNoEgoKAmlkGAEgASgJEhIKBXRpdGxlGAIgASgJSACIAQESFQoIc3VidGl0bGUYAyABKAlIAYgBARI6CgVzdGVwcxgEIAMoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuQmF0Y2guU3RlcBqcAQoEU3RlcBI/CglzaWduYXR1cmUYZSABKAsyKi5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlNpZ25hdHVyZUgAEkgKDnByZXBhcmVkX2NhbGxzGGkgASgLMi4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzSABCCQoHY29udGVudEIICgZfdGl0bGVCCwoJX3N1YnRpdGxlQgkKB2NvbnRlbnQilAEKEkludGVyYWN0aW9uUmVxdWVzdBIWCglyZWNpcGllbnQYASABKAxIAIgBARIsCg5lbmNyeXB0ZWRfZGF0YRgDIAEoCzIULnJpdmVyLkVuY3J5cHRlZERhdGESFgoJdGhyZWFkX2lkGAQgASgMSAGIAQFCDAoKX3JlY2lwaWVudEIMCgpfdGhyZWFkX2lkSgQIAhADInwKE0ludGVyYWN0aW9uUmVzcG9uc2USEQoJcmVjaXBpZW50GAEgASgMEiwKDmVuY3J5cHRlZF9kYXRhGAIgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YRIWCgl0aHJlYWRfaWQYAyABKAxIAIgBAUIMCgpfdGhyZWFkX2lkIugKChpJbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZBIMCgRzYWx0GAEgASgMEkAKCXNpZ25hdHVyZRhlIAEoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlNpZ25hdHVyZUgAEjYKBGZvcm0YZiABKAsyJi5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5Gb3JtSAASRAoLdHJhbnNhY3Rpb24YZyABKAsyLS5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5UcmFuc2FjdGlvbkgAEkEKCmFkZF9tZW1iZXIYaCABKAsyKy5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5BZGRNZW1iZXJIABJJCg5wcmVwYXJlZF9jYWxscxhpIAEoCzIvLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlByZXBhcmVkQ2FsbHNIABI4CgViYXRjaBhqIAEoCzInLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkJhdGNoSAAaMgoJU2lnbmF0dXJlEhIKCnJlcXVlc3RfaWQYASABKAkSEQoJc2lnbmF0dXJlGAIgASgJGsoCCgRGb3JtEhIKCnJlcXVlc3RfaWQYASABKAkSRAoKY29tcG9uZW50cxgCIAMoCzIwLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkZvcm0uQ29tcG9uZW50GucBCglDb21wb25lbnQSCgoCaWQYASABKAkSSQoGYnV0dG9uGGUgASgLMjcucml2ZXIuSW50ZXJhY3Rpb25SZXNwb25zZVBheWxvYWQuRm9ybS5Db21wb25lbnQuQnV0dG9uSAASUAoKdGV4dF9pbnB1dBhmIAEoCzI6LnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkZvcm0uQ29tcG9uZW50LlRleHRJbnB1dEgAGggKBkJ1dHRvbhoaCglUZXh0SW5wdXQSDQoFdmFsdWUYASABKAlCCwoJY29tcG9uZW50GjIKC1RyYW5zYWN0aW9uEhIKCnJlcXVlc3RfaWQYASABKAkSDwoHdHhfaGFzaBgCIAEoCRoxCglBZGRNZW1iZXISEgoKcmVxdWVzdF9pZBgBIAEoCRIQCghhY2NlcHRlZBgCIAEoCBq0AQoNUHJlcGFyZWRDYWxscxISCgpyZXF1ZXN0X2lkGAEgASgJEhEKCXNpZ25hdHVyZRgCIAEoCRIeChFwYXltZW50X3NpZ25hdHVyZRgDIAEoCUgAiAEBEhQKB2NvbnRleHQYBCABKAlIAYgBARIWCglidW5kbGVfaWQYBSABKAlIAogBAUIUChJfcGF5bWVudF9zaWduYXR1cmVCCgoIX2NvbnRleHRCDAoKX2J1bmRsZV9pZBqJAgoFQmF0Y2gSEgoKcmVxdWVzdF9pZBgBIAEoCRJDCgVzdGVwcxgCIAMoCzI0LnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkJhdGNoLlN0ZXBSZXNwb25zZRqmAQoMU3RlcFJlc3BvbnNlEkAKCXNpZ25hdHVyZRhlIAEoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlNpZ25hdHVyZUgAEkkKDnByZXBhcmVkX2NhbGxzGGkgASgLMi8ucml2ZXIuSW50ZXJhY3Rpb25SZXNwb25zZVBheWxvYWQuUHJlcGFyZWRDYWxsc0gAQgkKB2NvbnRlbnRCCQoHY29udGVudCKLAQoTSW52aXRlU2lnbmVkUGF5bG9hZBIPCgd1c2VyX2lkGAEgASgMEhEKCXN0cmVhbV9pZBgCIAEoDBIUCgx0aW1lc3RhbXBfbXMYAyABKAMSDAoEc2FsdBgEIAEoDBIRCglzaWduYXR1cmUYBSABKAwSGQoRc2lnbmVyX3B1YmxpY19rZXkYBiABKAwqawoGU3luY09wEhQKEFNZTkNfVU5TUEVDSUZJRUQQABIMCghTWU5DX05FVxABEg4KClNZTkNfQ0xPU0UQAhIPCgtTWU5DX1VQREFURRADEg0KCVNZTkNfUE9ORxAEEg0KCVNZTkNfRE9XThAFKkwKDE1lbWJlcnNoaXBPcBISCg5TT19VTlNQRUNJRklFRBAAEg0KCVNPX0lOVklURRABEgsKB1NPX0pPSU4QAhIMCghTT19MRUFWRRADKkQKEE1lbWJlcnNoaXBSZWFzb24SCwoHTVJfTk9ORRAAEhMKD01SX05PVF9FTlRJVExFRBABEg4KCk1SX0VYUElSRUQQAipPCglDaGFubmVsT3ASEgoOQ09fVU5TUEVDSUZJRUQQABIOCgpDT19DUkVBVEVEEAESDgoKQ09fREVMRVRFRBACEg4KCkNPX1VQREFURUQQBCrtAgoWTWVzc2FnZUludGVyYWN0aW9uVHlwZRIoCiRNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABIiCh5NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUkVQTFkQARIlCiFNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUkVBQ1RJT04QAhIhCh1NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUE9TVBADEiEKHU1FU1NBR0VfSU5URVJBQ1RJT05fVFlQRV9FRElUEAQSJgoiTUVTU0FHRV9JTlRFUkFDVElPTl9UWVBFX1JFREFDVElPThAFEiAKHE1FU1NBR0VfSU5URVJBQ1RJT05fVFlQRV9USVAQBhIiCh5NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfVFJBREUQBxIqCiZNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfU0xBU0hfQ09NTUFORBAIKlkKEEdyb3VwTWVudGlvblR5cGUSIgoeR1JPVVBfTUVOVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASIQodR1JPVVBfTUVOVElPTl9UWVBFX0FUX0NIQU5ORUwQASpSChRFbmNyeXB0ZWREYXRhVmVyc2lvbhIcChhFTkNSWVBURURfREFUQV9WRVJTSU9OXzAQABIcChhFTkNSWVBURURfREFUQV9WRVJTSU9OXzEQASr1DAoDRXJyEhMKD0VSUl9VTlNQRUNJRklFRBAAEgwKCENBTkNFTEVEEAESCwoHVU5LTk9XThACEhQKEElOVkFMSURfQVJHVU1FTlQQAxIVChFERUFETElORV9FWENFRURFRBAEEg0KCU5PVF9GT1VORBAFEhIKDkFMUkVBRFlfRVhJU1RTEAYSFQoRUEVSTUlTU0lPTl9ERU5JRUQQBxIWChJSRVNPVVJDRV9FWEhBVVNURUQQCBIXChNGQUlMRURfUFJFQ09ORElUSU9OEAkSCwoHQUJPUlRFRBAKEhAKDE9VVF9PRl9SQU5HRRALEhEKDVVOSU1QTEVNRU5URUQQDBIMCghJTlRFUk5BTBANEg8KC1VOQVZBSUxBQkxFEA4SDQoJREFUQV9MT1NTEA8SEwoPVU5BVVRIRU5USUNBVEVEEBASDwoLREVCVUdfRVJST1IQERIRCg1CQURfU1RSRUFNX0lEEBISHgoaQkFEX1NUUkVBTV9DUkVBVElPTl9QQVJBTVMQExIZChVJTlRFUk5BTF9FUlJPUl9TV0lUQ0gQFBIQCgxCQURfRVZFTlRfSUQQFRIXChNCQURfRVZFTlRfU0lHTkFUVVJFEBYSEwoPQkFEX0hBU0hfRk9STUFUEBcSGwoXQkFEX1BSRVZfTUlOSUJMT0NLX0hBU0gQGBIWChJOT19FVkVOVF9TUEVDSUZJRUQQGRINCglCQURfRVZFTlQQGhISCg5VU0VSX0NBTlRfUE9TVBAbEhUKEVNUUkVBTV9CQURfSEFTSEVTEBwSEAoMU1RSRUFNX0VNUFRZEB0SFAoQU1RSRUFNX0JBRF9FVkVOVBAeEhQKEEJBRF9ERUxFR0FURV9TSUcQHxISCg5CQURfUFVCTElDX0tFWRAgEg8KC0JBRF9QQVlMT0FEECESEgoOQkFEX0hFWF9TVFJJTkcQIhISCg5CQURfRVZFTlRfSEFTSBAjEhMKD0JBRF9TWU5DX0NPT0tJRRAkEhMKD0RVUExJQ0FURV9FVkVOVBAlEg0KCUJBRF9CTE9DSxAmEh0KGVNUUkVBTV9OT19JTkNFUFRJT05fRVZFTlQQJxIUChBCQURfQkxPQ0tfTlVNQkVSECgSFQoRQkFEX01JTklQT09MX1NMT1QQKRIXChNCQURfQ1JFQVRPUl9BRERSRVNTECoSEgoOU1RBTEVfREVMRUdBVEUQKxIhCh1CQURfTElOS19XQUxMRVRfQkFEX1NJR05BVFVSRRAsEhMKD0JBRF9ST09UX0tFWV9JRBAtEhAKDFVOS05PV05fTk9ERRAuEhgKFERCX09QRVJBVElPTl9GQUlMVVJFEC8SHgoaTUlOSUJMT0NLU19TVE9SQUdFX0ZBSUxVUkUQMBIPCgtCQURfQUREUkVTUxAxEg8KC0JVRkZFUl9GVUxMEDISDgoKQkFEX0NPTkZJRxAzEhAKDEJBRF9DT05UUkFDVBA0EhIKDkNBTk5PVF9DT05ORUNUEDUSHQoZQ0FOTk9UX0dFVF9MSU5LRURfV0FMTEVUUxA2Eh0KGUNBTk5PVF9DSEVDS19FTlRJVExFTUVOVFMQNxIYChRDQU5OT1RfQ0FMTF9DT05UUkFDVBA4EhIKDlNQQUNFX0RJU0FCTEVEEDkSFAoQQ0hBTk5FTF9ESVNBQkxFRBA6EhUKEVdST05HX1NUUkVBTV9UWVBFEDsSGwoXTUlOSVBPT0xfTUlTU0lOR19FVkVOVFMQPBIeChpTVFJFQU1fTEFTVF9CTE9DS19NSVNNQVRDSBA9EhwKGERPV05TVFJFQU1fTkVUV09SS19FUlJPUhA+EhUKEU1JTklCTE9DS19UT09fTkVXED8SFQoRTUlOSUJMT0NLX1RPT19PTEQQQBIRCg1RVU9SVU1fRkFJTEVEEEESFwoTQ0FOTk9UX0NBTExfV0VCSE9PSxBCEh4KGk1BTEZPUk1FRF9XRUJIT09LX1JFU1BPTlNFEEMSGQoVQkFEX0VOQ1JZUFRJT05fREVWSUNFEEQSIgoeU1RSRUFNX1JFQ09OQ0lMSUFUSU9OX1JFUVVJUkVEEEUSHQoZU1lOQ19TRVNTSU9OX1JVTk5FUl9FTVBUWRBGEiQKIFNZTkNfU0VTU0lPTl9SVU5ORVJfVU5BU1NJR05BQkxFEEcSGAoUTUlOSUJMT0NLU19OT1RfRk9VTkQQSDKqBwoNU3RyZWFtU2VydmljZRIvCgRJbmZvEhIucml2ZXIuSW5mb1JlcXVlc3QaEy5yaXZlci5JbmZvUmVzcG9uc2USRwoMQ3JlYXRlU3RyZWFtEhoucml2ZXIuQ3JlYXRlU3RyZWFtUmVxdWVzdBobLnJpdmVyLkNyZWF0ZVN0cmVhbVJlc3BvbnNlElYKEUNyZWF0ZU1lZGlhU3RyZWFtEh8ucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXF1ZXN0GiAucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXNwb25zZRI+CglHZXRTdHJlYW0SFy5yaXZlci5HZXRTdHJlYW1SZXF1ZXN0Ghgucml2ZXIuR2V0U3RyZWFtUmVzcG9uc2USRgoLR2V0U3RyZWFtRXgSGS5yaXZlci5HZXRTdHJlYW1FeFJlcXVlc3QaGi5yaXZlci5HZXRTdHJlYW1FeFJlc3BvbnNlMAESSgoNR2V0TWluaWJsb2NrcxIbLnJpdmVyLkdldE1pbmlibG9ja3NSZXF1ZXN0Ghwucml2ZXIuR2V0TWluaWJsb2Nrc1Jlc3BvbnNlEl8KFEdldExhc3RNaW5pYmxvY2tIYXNoEiIucml2ZXIuR2V0TGFzdE1pbmlibG9ja0hhc2hSZXF1ZXN0GiMucml2ZXIuR2V0TGFzdE1pbmlibG9ja0hhc2hSZXNwb25zZRI7CghBZGRFdmVudBIWLnJpdmVyLkFkZEV2ZW50UmVxdWVzdBoXLnJpdmVyLkFkZEV2ZW50UmVzcG9uc2USSgoNQWRkTWVkaWFFdmVudBIbLnJpdmVyLkFkZE1lZGlhRXZlbnRSZXF1ZXN0Ghwucml2ZXIuQWRkTWVkaWFFdmVudFJlc3BvbnNlEkYKC1N5bmNTdHJlYW1zEhkucml2ZXIuU3luY1N0cmVhbXNSZXF1ZXN0Ghoucml2ZXIuU3luY1N0cmVhbXNSZXNwb25zZTABEkEKCk1vZGlmeVN5bmMSGC5yaXZlci5Nb2RpZnlTeW5jUmVxdWVzdBoZLnJpdmVyLk1vZGlmeVN5bmNSZXNwb25zZRJBCgpDYW5jZWxTeW5jEhgucml2ZXIuQ2FuY2VsU3luY1JlcXVlc3QaGS5yaXZlci5DYW5jZWxTeW5jUmVzcG9uc2USOwoIUGluZ1N5bmMSFi5yaXZlci5QaW5nU3luY1JlcXVlc3QaFy5yaXZlci5QaW5nU3luY1Jlc3BvbnNlQjRaMmdpdGh1Yi5jb20vdG93bnMtcHJvdG9jb2wvdG93bnMvY29yZS9ub2RlL3Byb3RvY29sYgZwcm90bzM", [import_wkt2.file_google_protobuf_any, import_wkt2.file_google_protobuf_empty, import_wkt2.file_google_protobuf_timestamp]);
7612
+ var file_protocol = /* @__PURE__ */ (0, import_codegenv22.fileDesc)("Cg5wcm90b2NvbC5wcm90bxIFcml2ZXIiXgoJTWluaWJsb2NrEh8KBmV2ZW50cxgBIAMoCzIPLnJpdmVyLkVudmVsb3BlEh8KBmhlYWRlchgCIAEoCzIPLnJpdmVyLkVudmVsb3BlEg8KB3BhcnRpYWwYAyABKAgiOgoIRW52ZWxvcGUSDAoEaGFzaBgBIAEoDBIRCglzaWduYXR1cmUYAiABKAwSDQoFZXZlbnQYAyABKAwi1wYKC1N0cmVhbUV2ZW50EhcKD2NyZWF0b3JfYWRkcmVzcxgBIAEoDBIUCgxkZWxlZ2F0ZV9zaWcYAiABKAwSDAoEc2FsdBgDIAEoDBIgChNwcmV2X21pbmlibG9ja19oYXNoGAQgASgMSAGIAQESGwoTY3JlYXRlZF9hdF9lcG9jaF9tcxgFIAEoAxIgChhkZWxlZ2F0ZV9leHBpcnlfZXBvY2hfbXMYBiABKAMSGQoEdGFncxgHIAEoCzILLnJpdmVyLlRhZ3MSHwoScHJldl9taW5pYmxvY2tfbnVtGAggASgDSAKIAQESEQoJZXBoZW1lcmFsGAkgASgIEhsKE2NyZWF0ZWRfYXRfdGltZXpvbmUYCiABKAkSMgoQbWluaWJsb2NrX2hlYWRlchhkIAEoCzIWLnJpdmVyLk1pbmlibG9ja0hlYWRlckgAEi4KDm1lbWJlcl9wYXlsb2FkGGUgASgLMhQucml2ZXIuTWVtYmVyUGF5bG9hZEgAEioKDHVzZXJfcGF5bG9hZBhoIAEoCzISLnJpdmVyLlVzZXJQYXlsb2FkSAASOwoVdXNlcl9zZXR0aW5nc19wYXlsb2FkGGkgASgLMhoucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZEgAEjsKFXVzZXJfbWV0YWRhdGFfcGF5bG9hZBhqIAEoCzIaLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWRIABI1ChJ1c2VyX2luYm94X3BheWxvYWQYayABKAsyFy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkSAASLAoNbWVkaWFfcGF5bG9hZBhsIAEoCzITLnJpdmVyLk1lZGlhUGF5bG9hZEgAEjcKE2dkbV9jaGFubmVsX3BheWxvYWQYbiABKAsyGC5yaXZlci5HZG1DaGFubmVsUGF5bG9hZEgAQgkKB3BheWxvYWRCFgoUX3ByZXZfbWluaWJsb2NrX2hhc2hCFQoTX3ByZXZfbWluaWJsb2NrX251bUoECGYQZ0oECGcQaEoECG0QbkoECG8QcFINc3BhY2VfcGF5bG9hZFIPY2hhbm5lbF9wYXlsb2FkUhJkbV9jaGFubmVsX3BheWxvYWRSEG1ldGFkYXRhX3BheWxvYWQizwIKD01pbmlibG9ja0hlYWRlchIVCg1taW5pYmxvY2tfbnVtGAEgASgDEhsKE3ByZXZfbWluaWJsb2NrX2hhc2gYAiABKAwSLQoJdGltZXN0YW1wGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIUCgxldmVudF9oYXNoZXMYBCADKAwSGAoQZXZlbnRfbnVtX29mZnNldBgGIAEoAxIjChtwcmV2X3NuYXBzaG90X21pbmlibG9ja19udW0YByABKAMSGgoNc25hcHNob3RfaGFzaBgIIAEoDEgBiAEBEh0KFXJlamVjdGVkX2V2ZW50X2hhc2hlcxgJIAMoDBImCgRub25lGGQgASgLMhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5SABCCQoHY29udGVudEIQCg5fc25hcHNob3RfaGFzaEoECAUQBiLcFAoNTWVtYmVyUGF5bG9hZBI1CgptZW1iZXJzaGlwGAEgASgLMh8ucml2ZXIuTWVtYmVyUGF5bG9hZC5NZW1iZXJzaGlwSAASQAoQa2V5X3NvbGljaXRhdGlvbhgCIAEoCzIkLnJpdmVyLk1lbWJlclBheWxvYWQuS2V5U29saWNpdGF0aW9uSAASPgoPa2V5X2Z1bGZpbGxtZW50GAMgASgLMiMucml2ZXIuTWVtYmVyUGF5bG9hZC5LZXlGdWxmaWxsbWVudEgAEicKA3BpbhgIIAEoCzIYLnJpdmVyLk1lbWJlclBheWxvYWQuUGluSAASKwoFdW5waW4YCSABKAsyGi5yaXZlci5NZW1iZXJQYXlsb2FkLlVucGluSAASWQodbWVtYmVyX2Jsb2NrY2hhaW5fdHJhbnNhY3Rpb24YCyABKAsyMC5yaXZlci5NZW1iZXJQYXlsb2FkLk1lbWJlckJsb2NrY2hhaW5UcmFuc2FjdGlvbkgAEkgKFGVuY3J5cHRpb25fYWxnb3JpdGhtGAwgASgLMigucml2ZXIuTWVtYmVyUGF5bG9hZC5FbmNyeXB0aW9uQWxnb3JpdGhtSAASPQoPc2V0X2FwcF9hZGRyZXNzGA0gASgLMiIucml2ZXIuTWVtYmVyUGF5bG9hZC5TZXRBcHBBZGRyZXNzSAASQQoRdW5zZXRfYXBwX2FkZHJlc3MYDiABKAsyJC5yaXZlci5NZW1iZXJQYXlsb2FkLlVuc2V0QXBwQWRkcmVzc0gAGvcICghTbmFwc2hvdBI0CgZqb2luZWQYASADKAsyJC5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90Lk1lbWJlchItCgRwaW5zGAIgAygLMh8ucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwcGVkUGluEkYKFGVuY3J5cHRpb25fYWxnb3JpdGhtGAQgASgLMigucml2ZXIuTWVtYmVyUGF5bG9hZC5FbmNyeXB0aW9uQWxnb3JpdGhtEjUKBHRpcHMYBSADKAsyJy5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNFbnRyeRJACgp0aXBzX2NvdW50GAYgAygLMiwucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdC5UaXBzQ291bnRFbnRyeRrfBQoGTWVtYmVyEhQKDHVzZXJfYWRkcmVzcxgBIAEoDBIVCg1taW5pYmxvY2tfbnVtGAIgASgDEhEKCWV2ZW50X251bRgDIAEoAxI7Cg1zb2xpY2l0YXRpb25zGAQgAygLMiQucml2ZXIuTWVtYmVyUGF5bG9hZC5LZXlTb2xpY2l0YXRpb24SRQoJdGlwc19zZW50GAkgAygLMjIucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdC5NZW1iZXIuVGlwc1NlbnRFbnRyeRJNCg10aXBzX3JlY2VpdmVkGAogAygLMjYucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdC5NZW1iZXIuVGlwc1JlY2VpdmVkRW50cnkSUAoPdGlwc19zZW50X2NvdW50GAsgAygLMjcucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdC5NZW1iZXIuVGlwc1NlbnRDb3VudEVudHJ5ElgKE3RpcHNfcmVjZWl2ZWRfY291bnQYDCADKAsyOy5yaXZlci5NZW1iZXJQYXlsb2FkLlNuYXBzaG90Lk1lbWJlci5UaXBzUmVjZWl2ZWRDb3VudEVudHJ5EhgKC2FwcF9hZGRyZXNzGA0gASgMSACIAQEaLwoNVGlwc1NlbnRFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAQ6AjgBGjMKEVRpcHNSZWNlaXZlZEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEaNAoSVGlwc1NlbnRDb3VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEaOAoWVGlwc1JlY2VpdmVkQ291bnRFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAQ6AjgBQg4KDF9hcHBfYWRkcmVzc0oECAUQBkoECAYQB0oECAcQCEoECAgQCRorCglUaXBzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARowCg5UaXBzQ291bnRFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAQ6AjgBSgQIAxAEGoMCCgpNZW1iZXJzaGlwEh8KAm9wGAEgASgOMhMucml2ZXIuTWVtYmVyc2hpcE9wEhQKDHVzZXJfYWRkcmVzcxgCIAEoDBIZChFpbml0aWF0b3JfYWRkcmVzcxgDIAEoDBInCgZyZWFzb24YBSABKA4yFy5yaXZlci5NZW1iZXJzaGlwUmVhc29uEhgKC2FwcF9hZGRyZXNzGAYgASgMSACIAQESNwoOaW52aXRlX3BheWxvYWQYByABKAsyGi5yaXZlci5JbnZpdGVTaWduZWRQYXlsb2FkSAGIAQFCDgoMX2FwcF9hZGRyZXNzQhEKD19pbnZpdGVfcGF5bG9hZEoECAQQBRpnCg9LZXlTb2xpY2l0YXRpb24SEgoKZGV2aWNlX2tleRgBIAEoCRIUCgxmYWxsYmFja19rZXkYAiABKAkSFQoNaXNfbmV3X2RldmljZRgDIAEoCBITCgtzZXNzaW9uX2lkcxgEIAMoCRpPCg5LZXlGdWxmaWxsbWVudBIUCgx1c2VyX2FkZHJlc3MYASABKAwSEgoKZGV2aWNlX2tleRgCIAEoCRITCgtzZXNzaW9uX2lkcxgDIAMoCRpMCgpTbmFwcGVkUGluEhcKD2NyZWF0b3JfYWRkcmVzcxgBIAEoDBIlCgNwaW4YAiABKAsyGC5yaXZlci5NZW1iZXJQYXlsb2FkLlBpbho6CgNQaW4SEAoIZXZlbnRfaWQYASABKAwSIQoFZXZlbnQYAiABKAsyEi5yaXZlci5TdHJlYW1FdmVudBoZCgVVbnBpbhIQCghldmVudF9pZBgBIAEoDBo7ChNFbmNyeXB0aW9uQWxnb3JpdGhtEhYKCWFsZ29yaXRobRgBIAEoCUgAiAEBQgwKCl9hbGdvcml0aG0aawobTWVtYmVyQmxvY2tjaGFpblRyYW5zYWN0aW9uEjEKC3RyYW5zYWN0aW9uGAEgASgLMhwucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uEhkKEWZyb21fdXNlcl9hZGRyZXNzGAIgASgMGjoKDVNldEFwcEFkZHJlc3MSFAoMdXNlcl9hZGRyZXNzGAEgASgMEhMKC2FwcF9hZGRyZXNzGAIgASgMGicKD1Vuc2V0QXBwQWRkcmVzcxIUCgx1c2VyX2FkZHJlc3MYASABKAxCCQoHY29udGVudEoECAQQBUoECAUQBkoECAYQB0oECAcQCEoECAoQCyLwBAoRR2RtQ2hhbm5lbFBheWxvYWQSNwoJaW5jZXB0aW9uGAEgASgLMiIucml2ZXIuR2RtQ2hhbm5lbFBheWxvYWQuSW5jZXB0aW9uSAASJwoHbWVzc2FnZRgCIAEoCzIULnJpdmVyLkVuY3J5cHRlZERhdGFIABIyChJjaGFubmVsX3Byb3BlcnRpZXMYAyABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhSAASJgoGY3VzdG9tGAQgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueUgAEiUKCXJlZGFjdGlvbhgFIAEoCzIQLnJpdmVyLlJlZGFjdGlvbkgAEjgKE2ludGVyYWN0aW9uX3JlcXVlc3QYBiABKAsyGS5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RIABI6ChRpbnRlcmFjdGlvbl9yZXNwb25zZRgHIAEoCzIaLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VIABp6CghTbmFwc2hvdBI1CglpbmNlcHRpb24YASABKAsyIi5yaXZlci5HZG1DaGFubmVsUGF5bG9hZC5JbmNlcHRpb24SNwoSY2hhbm5lbF9wcm9wZXJ0aWVzGAIgASgLMhsucml2ZXIuV3JhcHBlZEVuY3J5cHRlZERhdGEaeQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIwChJjaGFubmVsX3Byb3BlcnRpZXMYAiABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhEicKCHNldHRpbmdzGAMgASgLMhUucml2ZXIuU3RyZWFtU2V0dGluZ3NCCQoHY29udGVudCKFDQoLVXNlclBheWxvYWQSMQoJaW5jZXB0aW9uGAEgASgLMhwucml2ZXIuVXNlclBheWxvYWQuSW5jZXB0aW9uSAASPAoPdXNlcl9tZW1iZXJzaGlwGAIgASgLMiEucml2ZXIuVXNlclBheWxvYWQuVXNlck1lbWJlcnNoaXBIABJJChZ1c2VyX21lbWJlcnNoaXBfYWN0aW9uGAMgASgLMicucml2ZXIuVXNlclBheWxvYWQuVXNlck1lbWJlcnNoaXBBY3Rpb25IABI+ChZibG9ja2NoYWluX3RyYW5zYWN0aW9uGAQgASgLMhwucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uSAASWwofcmVjZWl2ZWRfYmxvY2tjaGFpbl90cmFuc2FjdGlvbhgFIAEoCzIwLnJpdmVyLlVzZXJQYXlsb2FkLlJlY2VpdmVkQmxvY2tjaGFpblRyYW5zYWN0aW9uSAAa5wQKCFNuYXBzaG90Ei8KCWluY2VwdGlvbhgBIAEoCzIcLnJpdmVyLlVzZXJQYXlsb2FkLkluY2VwdGlvbhI2CgttZW1iZXJzaGlwcxgCIAMoCzIhLnJpdmVyLlVzZXJQYXlsb2FkLlVzZXJNZW1iZXJzaGlwEjwKCXRpcHNfc2VudBgDIAMoCzIpLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNTZW50RW50cnkSRAoNdGlwc19yZWNlaXZlZBgEIAMoCzItLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNSZWNlaXZlZEVudHJ5EkcKD3RpcHNfc2VudF9jb3VudBgFIAMoCzIuLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90LlRpcHNTZW50Q291bnRFbnRyeRJPChN0aXBzX3JlY2VpdmVkX2NvdW50GAYgAygLMjIucml2ZXIuVXNlclBheWxvYWQuU25hcHNob3QuVGlwc1JlY2VpdmVkQ291bnRFbnRyeRovCg1UaXBzU2VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEaMwoRVGlwc1JlY2VpdmVkRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARo0ChJUaXBzU2VudENvdW50RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgEOgI4ARo4ChZUaXBzUmVjZWl2ZWRDb3VudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBDoCOAEapwEKCUluY2VwdGlvbhIRCglzdHJlYW1faWQYASABKAwSJwoIc2V0dGluZ3MYAiABKAsyFS5yaXZlci5TdHJlYW1TZXR0aW5ncxIYCgthcHBfYWRkcmVzcxgDIAEoDEgAiAEBEh4KEWFwcF9vd25lcl9hZGRyZXNzGAQgASgMSAGIAQFCDgoMX2FwcF9hZGRyZXNzQhQKEl9hcHBfb3duZXJfYWRkcmVzcxrxAQoOVXNlck1lbWJlcnNoaXASEQoJc3RyZWFtX2lkGAEgASgMEh8KAm9wGAIgASgOMhMucml2ZXIuTWVtYmVyc2hpcE9wEhQKB2ludml0ZXIYAyABKAxIAIgBARIsCgZyZWFzb24YBSABKA4yFy5yaXZlci5NZW1iZXJzaGlwUmVhc29uSAGIAQESNwoOaW52aXRlX3BheWxvYWQYBiABKAsyGi5yaXZlci5JbnZpdGVTaWduZWRQYXlsb2FkSAKIAQFCCgoIX2ludml0ZXJCCQoHX3JlYXNvbkIRCg9faW52aXRlX3BheWxvYWRKBAgEEAUamgEKFFVzZXJNZW1iZXJzaGlwQWN0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIPCgd1c2VyX2lkGAIgASgMEh8KAm9wGAMgASgOMhMucml2ZXIuTWVtYmVyc2hpcE9wEiwKBnJlYXNvbhgFIAEoDjIXLnJpdmVyLk1lbWJlcnNoaXBSZWFzb25IAIgBAUIJCgdfcmVhc29uSgQIBBAFGm0KHVJlY2VpdmVkQmxvY2tjaGFpblRyYW5zYWN0aW9uEjEKC3RyYW5zYWN0aW9uGAEgASgLMhwucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uEhkKEWZyb21fdXNlcl9hZGRyZXNzGAIgASgMQgkKB2NvbnRlbnQi2gcKEFVzZXJJbmJveFBheWxvYWQSNgoJaW5jZXB0aW9uGAEgASgLMiEucml2ZXIuVXNlckluYm94UGF5bG9hZC5JbmNlcHRpb25IABIqCgNhY2sYAiABKAsyGy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkLkFja0gAElQKGWdyb3VwX2VuY3J5cHRpb25fc2Vzc2lvbnMYAyABKAsyLy5yaXZlci5Vc2VySW5ib3hQYXlsb2FkLkdyb3VwRW5jcnlwdGlvblNlc3Npb25zSAAargIKCFNuYXBzaG90EjQKCWluY2VwdGlvbhgBIAEoCzIhLnJpdmVyLlVzZXJJbmJveFBheWxvYWQuSW5jZXB0aW9uEksKDmRldmljZV9zdW1tYXJ5GAIgAygLMjMucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdC5EZXZpY2VTdW1tYXJ5RW50cnkaOQoNRGV2aWNlU3VtbWFyeRITCgtsb3dlcl9ib3VuZBgBIAEoAxITCgt1cHBlcl9ib3VuZBgCIAEoAxpkChJEZXZpY2VTdW1tYXJ5RW50cnkSCwoDa2V5GAEgASgJEj0KBXZhbHVlGAIgASgLMi4ucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdC5EZXZpY2VTdW1tYXJ5OgI4ARqnAQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBInCghzZXR0aW5ncxgCIAEoCzIVLnJpdmVyLlN0cmVhbVNldHRpbmdzEhgKC2FwcF9hZGRyZXNzGAMgASgMSACIAQESHgoRYXBwX293bmVyX2FkZHJlc3MYBCABKAxIAYgBAUIOCgxfYXBwX2FkZHJlc3NCFAoSX2FwcF9vd25lcl9hZGRyZXNzGvMBChdHcm91cEVuY3J5cHRpb25TZXNzaW9ucxIRCglzdHJlYW1faWQYASABKAwSEgoKc2VuZGVyX2tleRgCIAEoCRITCgtzZXNzaW9uX2lkcxgDIAMoCRJVCgtjaXBoZXJ0ZXh0cxgEIAMoCzJALnJpdmVyLlVzZXJJbmJveFBheWxvYWQuR3JvdXBFbmNyeXB0aW9uU2Vzc2lvbnMuQ2lwaGVydGV4dHNFbnRyeRIRCglhbGdvcml0aG0YBSABKAkaMgoQQ2lwaGVydGV4dHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGjAKA0FjaxISCgpkZXZpY2Vfa2V5GAEgASgJEhUKDW1pbmlibG9ja19udW0YAiABKANCCQoHY29udGVudCLBBwoTVXNlclNldHRpbmdzUGF5bG9hZBI5CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkluY2VwdGlvbkgAEkkKEmZ1bGx5X3JlYWRfbWFya2VycxgCIAEoCzIrLnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuRnVsbHlSZWFkTWFya2Vyc0gAEjoKCnVzZXJfYmxvY2sYAyABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLlVzZXJCbG9ja0gAGuwCCghTbmFwc2hvdBI3CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkluY2VwdGlvbhJHChJmdWxseV9yZWFkX21hcmtlcnMYAiADKAsyKy5yaXZlci5Vc2VyU2V0dGluZ3NQYXlsb2FkLkZ1bGx5UmVhZE1hcmtlcnMSSAoQdXNlcl9ibG9ja3NfbGlzdBgDIAMoCzIuLnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuU25hcHNob3QuVXNlckJsb2NrcxqTAQoKVXNlckJsb2NrcxIPCgd1c2VyX2lkGAEgASgMEkQKBmJsb2NrcxgCIAMoCzI0LnJpdmVyLlVzZXJTZXR0aW5nc1BheWxvYWQuU25hcHNob3QuVXNlckJsb2Nrcy5CbG9jaxouCgVCbG9jaxISCgppc19ibG9ja2VkGAEgASgIEhEKCWV2ZW50X251bRgCIAEoAxqnAQoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBInCghzZXR0aW5ncxgCIAEoCzIVLnJpdmVyLlN0cmVhbVNldHRpbmdzEhgKC2FwcF9hZGRyZXNzGAMgASgMSACIAQESHgoRYXBwX293bmVyX2FkZHJlc3MYBCABKAxIAYgBAUIOCgxfYXBwX2FkZHJlc3NCFAoSX2FwcF9vd25lcl9hZGRyZXNzGh0KDU1hcmtlckNvbnRlbnQSDAoEZGF0YRgBIAEoCRpgChBGdWxseVJlYWRNYXJrZXJzEhEKCXN0cmVhbV9pZBgBIAEoDBI5Cgdjb250ZW50GAIgASgLMigucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZC5NYXJrZXJDb250ZW50GkMKCVVzZXJCbG9jaxIPCgd1c2VyX2lkGAEgASgMEhIKCmlzX2Jsb2NrZWQYAiABKAgSEQoJZXZlbnRfbnVtGAMgASgDQgkKB2NvbnRlbnQizgUKE1VzZXJNZXRhZGF0YVBheWxvYWQSOQoJaW5jZXB0aW9uGAEgASgLMiQucml2ZXIuVXNlck1ldGFkYXRhUGF5bG9hZC5JbmNlcHRpb25IABJIChFlbmNyeXB0aW9uX2RldmljZRgCIAEoCzIrLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuRW5jcnlwdGlvbkRldmljZUgAEi0KDXByb2ZpbGVfaW1hZ2UYAyABKAsyFC5yaXZlci5FbmNyeXB0ZWREYXRhSAASIwoDYmlvGAQgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YUgAGuoBCghTbmFwc2hvdBI3CglpbmNlcHRpb24YASABKAsyJC5yaXZlci5Vc2VyTWV0YWRhdGFQYXlsb2FkLkluY2VwdGlvbhJHChJlbmNyeXB0aW9uX2RldmljZXMYAiADKAsyKy5yaXZlci5Vc2VyTWV0YWRhdGFQYXlsb2FkLkVuY3J5cHRpb25EZXZpY2USMgoNcHJvZmlsZV9pbWFnZRgDIAEoCzIbLnJpdmVyLldyYXBwZWRFbmNyeXB0ZWREYXRhEigKA2JpbxgEIAEoCzIbLnJpdmVyLldyYXBwZWRFbmNyeXB0ZWREYXRhGqcBCglJbmNlcHRpb24SEQoJc3RyZWFtX2lkGAEgASgMEicKCHNldHRpbmdzGAIgASgLMhUucml2ZXIuU3RyZWFtU2V0dGluZ3MSGAoLYXBwX2FkZHJlc3MYAyABKAxIAIgBARIeChFhcHBfb3duZXJfYWRkcmVzcxgEIAEoDEgBiAEBQg4KDF9hcHBfYWRkcmVzc0IUChJfYXBwX293bmVyX2FkZHJlc3MaPAoQRW5jcnlwdGlvbkRldmljZRISCgpkZXZpY2Vfa2V5GAEgASgJEhQKDGZhbGxiYWNrX2tleRgCIAEoCUIJCgdjb250ZW50IoQECgxNZWRpYVBheWxvYWQSMgoJaW5jZXB0aW9uGAEgASgLMh0ucml2ZXIuTWVkaWFQYXlsb2FkLkluY2VwdGlvbkgAEioKBWNodW5rGAIgASgLMhkucml2ZXIuTWVkaWFQYXlsb2FkLkNodW5rSAAaPAoIU25hcHNob3QSMAoJaW5jZXB0aW9uGAEgASgLMh0ucml2ZXIuTWVkaWFQYXlsb2FkLkluY2VwdGlvbhqGAgoJSW5jZXB0aW9uEhEKCXN0cmVhbV9pZBgBIAEoDBIXCgpjaGFubmVsX2lkGAIgASgMSACIAQESEwoLY2h1bmtfY291bnQYAyABKAUSJwoIc2V0dGluZ3MYBCABKAsyFS5yaXZlci5TdHJlYW1TZXR0aW5ncxIVCghzcGFjZV9pZBgFIAEoDEgBiAEBEhQKB3VzZXJfaWQYBiABKAxIAogBARIhChRwZXJfY2h1bmtfZW5jcnlwdGlvbhgHIAEoCEgDiAEBQg0KC19jaGFubmVsX2lkQgsKCV9zcGFjZV9pZEIKCghfdXNlcl9pZEIXChVfcGVyX2NodW5rX2VuY3J5cHRpb24aQgoFQ2h1bmsSDAoEZGF0YRgBIAEoDBITCgtjaHVua19pbmRleBgCIAEoBRIPCgJpdhgDIAEoDEgAiAEBQgUKA19pdkIJCgdjb250ZW50IrcECghTbmFwc2hvdBIuCgdtZW1iZXJzGAEgASgLMh0ucml2ZXIuTWVtYmVyUGF5bG9hZC5TbmFwc2hvdBIYChBzbmFwc2hvdF92ZXJzaW9uGAIgASgFEjMKDHVzZXJfY29udGVudBhnIAEoCzIbLnJpdmVyLlVzZXJQYXlsb2FkLlNuYXBzaG90SAASRAoVdXNlcl9zZXR0aW5nc19jb250ZW50GGggASgLMiMucml2ZXIuVXNlclNldHRpbmdzUGF5bG9hZC5TbmFwc2hvdEgAEkQKFXVzZXJfbWV0YWRhdGFfY29udGVudBhpIAEoCzIjLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuU25hcHNob3RIABI1Cg1tZWRpYV9jb250ZW50GGogASgLMhwucml2ZXIuTWVkaWFQYXlsb2FkLlNuYXBzaG90SAASQAoTZ2RtX2NoYW5uZWxfY29udGVudBhsIAEoCzIhLnJpdmVyLkdkbUNoYW5uZWxQYXlsb2FkLlNuYXBzaG90SAASPgoSdXNlcl9pbmJveF9jb250ZW50GG0gASgLMiAucml2ZXIuVXNlckluYm94UGF5bG9hZC5TbmFwc2hvdEgAQgkKB2NvbnRlbnRKBAhlEGZKBAhmEGdKBAhrEGxKBAhuEG9SDXNwYWNlX2NvbnRlbnRSD2NoYW5uZWxfY29udGVudFISZG1fY2hhbm5lbF9jb250ZW50UhBtZXRhZGF0YV9jb250ZW50IrcHChVCbG9ja2NoYWluVHJhbnNhY3Rpb24SNAoHcmVjZWlwdBgBIAEoCzIjLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvblJlY2VpcHQSQQoOc29sYW5hX3JlY2VpcHQYAiABKAsyKS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Ei8KA3RpcBhlIAEoCzIgLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5UaXBIABJECg50b2tlbl90cmFuc2ZlchhmIAEoCzIqLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5Ub2tlblRyYW5zZmVySAASQAoMc3BhY2VfcmV2aWV3GGcgASgLMigucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uLlNwYWNlUmV2aWV3SAAa7QEKA1RpcBI1CgVldmVudBgBIAEoCzImLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvbi5UaXAuRXZlbnQSFQoNdG9Vc2VyQWRkcmVzcxgCIAEoDBqXAQoFRXZlbnQSFQoIdG9rZW5faWQYASABKARIAIgBARIQCghjdXJyZW5jeRgCIAEoDBIOCgZzZW5kZXIYAyABKAwSEAoIcmVjZWl2ZXIYBCABKAwSDgoGYW1vdW50GAUgASgEEhIKCm1lc3NhZ2VfaWQYBiABKAwSEgoKY2hhbm5lbF9pZBgHIAEoDEILCglfdG9rZW5faWQaeAoNVG9rZW5UcmFuc2ZlchIPCgdhZGRyZXNzGAEgASgMEg4KBmFtb3VudBgCIAEoCRIOCgZzZW5kZXIYAyABKAwSEgoKbWVzc2FnZV9pZBgEIAEoDBISCgpjaGFubmVsX2lkGAUgASgMEg4KBmlzX2J1eRgGIAEoCBr2AQoLU3BhY2VSZXZpZXcSFQoNc3BhY2VfYWRkcmVzcxgBIAEoDBI/CgZhY3Rpb24YAiABKA4yLy5yaXZlci5CbG9ja2NoYWluVHJhbnNhY3Rpb24uU3BhY2VSZXZpZXcuQWN0aW9uEj0KBWV2ZW50GAMgASgLMi4ucml2ZXIuQmxvY2tjaGFpblRyYW5zYWN0aW9uLlNwYWNlUmV2aWV3LkV2ZW50GiUKBUV2ZW50EgwKBHVzZXIYASABKAwSDgoGcmF0aW5nGAIgASgFIikKBkFjdGlvbhIHCgNBZGQQABIKCgZVcGRhdGUQARIKCgZEZWxldGUQAkIJCgdjb250ZW50IucBChxCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0EhAKCGNoYWluX2lkGAEgASgEEhgKEHRyYW5zYWN0aW9uX2hhc2gYAiABKAwSFAoMYmxvY2tfbnVtYmVyGAMgASgEEgoKAnRvGAQgASgMEgwKBGZyb20YBSABKAwSNQoEbG9ncxgGIAMoCzInLnJpdmVyLkJsb2NrY2hhaW5UcmFuc2FjdGlvblJlY2VpcHQuTG9nGjQKA0xvZxIPCgdhZGRyZXNzGAEgASgMEg4KBnRvcGljcxgCIAMoDBIMCgRkYXRhGAMgASgMItcECiJTb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0EgwKBHNsb3QYASABKAQSSgoLdHJhbnNhY3Rpb24YAiABKAsyNS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0LlRyYW5zYWN0aW9uEjwKBG1ldGEYAyABKAsyLi5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEaIQoLVHJhbnNhY3Rpb24SEgoKc2lnbmF0dXJlcxgBIAMoCRr1AgoETWV0YRJXChJwcmVfdG9rZW5fYmFsYW5jZXMYASADKAsyOy5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlElgKE3Bvc3RfdG9rZW5fYmFsYW5jZXMYAiADKAsyOy5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlGrkBCgxUb2tlbkJhbGFuY2USDAoEbWludBgBIAEoCRINCgVvd25lchgCIAEoCRJZCgZhbW91bnQYAyABKAsySS5yaXZlci5Tb2xhbmFCbG9ja2NoYWluVHJhbnNhY3Rpb25SZWNlaXB0Lk1ldGEuVG9rZW5CYWxhbmNlLlVJVG9rZW5BbW91bnQaMQoNVUlUb2tlbkFtb3VudBIOCgZhbW91bnQYASABKAkSEAoIZGVjaW1hbHMYAiABKA0iPgoIRXZlbnRSZWYSEQoJc3RyZWFtX2lkGAEgASgMEgwKBGhhc2gYAiABKAwSEQoJc2lnbmF0dXJlGAMgASgMIkoKDlN0cmVhbVNldHRpbmdzEiIKGmRpc2FibGVfbWluaWJsb2NrX2NyZWF0aW9uGAEgASgIEhQKDGxpZ2h0X3N0cmVhbRgCIAEoCCLQAgoNRW5jcnlwdGVkRGF0YRISCgpjaXBoZXJ0ZXh0GAEgASgJEhEKCWFsZ29yaXRobRgCIAEoCRISCgpzZW5kZXJfa2V5GAMgASgJEhIKCnNlc3Npb25faWQYBCABKAkSFQoIY2hlY2tzdW0YBSABKAlIAIgBARIZCgxyZWZfZXZlbnRfaWQYBiABKAlIAYgBARIYChBjaXBoZXJ0ZXh0X2J5dGVzGAggASgMEhAKCGl2X2J5dGVzGAkgASgMEhgKEHNlc3Npb25faWRfYnl0ZXMYCiABKAwSLAoHdmVyc2lvbhgLIAEoDjIbLnJpdmVyLkVuY3J5cHRlZERhdGFWZXJzaW9uEhcKCmRldmljZV9rZXkYDCABKAlIAogBAUILCglfY2hlY2tzdW1CDwoNX3JlZl9ldmVudF9pZEINCgtfZGV2aWNlX2tleUoECAcQCCJhChRXcmFwcGVkRW5jcnlwdGVkRGF0YRIiCgRkYXRhGAEgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YRIRCglldmVudF9udW0YAiABKAMSEgoKZXZlbnRfaGFzaBgDIAEoDCJuCgpTeW5jQ29va2llEhQKDG5vZGVfYWRkcmVzcxgBIAEoDBIRCglzdHJlYW1faWQYAiABKAwSFAoMbWluaXBvb2xfZ2VuGAMgASgDEhsKE3ByZXZfbWluaWJsb2NrX2hhc2gYBSABKAxKBAgEEAUiXQoOQ3JlYXRpb25Db29raWUSEQoJc3RyZWFtX2lkGAEgASgMEhUKDW1pbmlibG9ja19udW0YAyABKAMSGwoTcHJldl9taW5pYmxvY2tfaGFzaBgEIAEoDEoECAIQAyLwAQoPU3RyZWFtQW5kQ29va2llEh8KBmV2ZW50cxgBIAMoCzIPLnJpdmVyLkVudmVsb3BlEisKEG5leHRfc3luY19jb29raWUYAiABKAsyES5yaXZlci5TeW5jQ29va2llEiQKCm1pbmlibG9ja3MYAyADKAsyEC5yaXZlci5NaW5pYmxvY2sSEgoKc3luY19yZXNldBgEIAEoCBImCghzbmFwc2hvdBgFIAEoCzIPLnJpdmVyLkVudmVsb3BlSACIAQESIAoYc25hcHNob3RfbWluaWJsb2NrX2luZGV4GAYgASgDQgsKCV9zbmFwc2hvdCIrCghNaW5pcG9vbBIfCgZldmVudHMYASADKAsyDy5yaXZlci5FbnZlbG9wZSKjAgoEVGFncxI/ChhtZXNzYWdlX2ludGVyYWN0aW9uX3R5cGUYASABKA4yHS5yaXZlci5NZXNzYWdlSW50ZXJhY3Rpb25UeXBlEjQKE2dyb3VwX21lbnRpb25fdHlwZXMYAiADKA4yFy5yaXZlci5Hcm91cE1lbnRpb25UeXBlEiAKGG1lbnRpb25lZF91c2VyX2FkZHJlc3NlcxgDIAMoDBIkChxwYXJ0aWNpcGF0aW5nX3VzZXJfYWRkcmVzc2VzGAQgAygMEhYKCXRocmVhZF9pZBgFIAEoDEgAiAEBEh8KEmFwcF9jbGllbnRfYWRkcmVzcxgGIAEoDEgBiAEBQgwKCl90aHJlYWRfaWRCFQoTX2FwcF9jbGllbnRfYWRkcmVzcyIcCgtJbmZvUmVxdWVzdBINCgVkZWJ1ZxgBIAMoCSJhCgxJbmZvUmVzcG9uc2USEAoIZ3JhZmZpdGkYASABKAkSLgoKc3RhcnRfdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDwoHdmVyc2lvbhgDIAEoCSI+ChJHZXRTdHJlYW1FeFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMEhUKDW9taXRfc25hcHNob3QYAiABKAgingEKE0dldFN0cmVhbUV4UmVzcG9uc2USJQoJbWluaWJsb2NrGAEgASgLMhAucml2ZXIuTWluaWJsb2NrSAASIwoIbWluaXBvb2wYAiABKAsyDy5yaXZlci5NaW5pcG9vbEgAEiYKCHNuYXBzaG90GAMgASgLMg8ucml2ZXIuRW52ZWxvcGVIAYgBAUIGCgRkYXRhQgsKCV9zbmFwc2hvdCK2AQoTQ3JlYXRlU3RyZWFtUmVxdWVzdBIfCgZldmVudHMYASADKAsyDy5yaXZlci5FbnZlbG9wZRIRCglzdHJlYW1faWQYAiABKAwSOgoIbWV0YWRhdGEYAyADKAsyKC5yaXZlci5DcmVhdGVTdHJlYW1SZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAw6AjgBImcKFENyZWF0ZVN0cmVhbVJlc3BvbnNlEiYKBnN0cmVhbRgBIAEoCzIWLnJpdmVyLlN0cmVhbUFuZENvb2tpZRInCg5kZXJpdmVkX2V2ZW50cxgCIAMoCzIPLnJpdmVyLkV2ZW50UmVmIsABChhDcmVhdGVNZWRpYVN0cmVhbVJlcXVlc3QSHwoGZXZlbnRzGAEgAygLMg8ucml2ZXIuRW52ZWxvcGUSEQoJc3RyZWFtX2lkGAIgASgMEj8KCG1ldGFkYXRhGAMgAygLMi0ucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXF1ZXN0Lk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAw6AjgBIlAKGUNyZWF0ZU1lZGlhU3RyZWFtUmVzcG9uc2USMwoUbmV4dF9jcmVhdGlvbl9jb29raWUYASABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZSKHAQoQR2V0U3RyZWFtUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwSEAoIb3B0aW9uYWwYAiABKAgSJgoLc3luY19jb29raWUYAyABKAsyES5yaXZlci5TeW5jQ29va2llEiYKHm51bWJlcl9vZl9wcmVjZWRpbmdfbWluaWJsb2NrcxgEIAEoAyI7ChFHZXRTdHJlYW1SZXNwb25zZRImCgZzdHJlYW0YASABKAsyFi5yaXZlci5TdHJlYW1BbmRDb29raWUiLwoLRXZlbnRGaWx0ZXISDwoHcGF5bG9hZBgBIAEoCRIPCgdjb250ZW50GAIgASgJIp0BChRHZXRNaW5pYmxvY2tzUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwSFgoOZnJvbV9pbmNsdXNpdmUYAiABKAMSFAoMdG9fZXhjbHVzaXZlGAMgASgDEhYKDm9taXRfc25hcHNob3RzGAQgASgIEiwKEGV4Y2x1c2lvbl9maWx0ZXIYBSADKAsyEi5yaXZlci5FdmVudEZpbHRlciKRAgoVR2V0TWluaWJsb2Nrc1Jlc3BvbnNlEiQKCm1pbmlibG9ja3MYASADKAsyEC5yaXZlci5NaW5pYmxvY2sSEAoIdGVybWludXMYAiABKAgSFgoOZnJvbV9pbmNsdXNpdmUYAyABKAMSDQoFbGltaXQYBCABKAMSFgoOb21pdF9zbmFwc2hvdHMYBSABKAgSPgoJc25hcHNob3RzGAYgAygLMisucml2ZXIuR2V0TWluaWJsb2Nrc1Jlc3BvbnNlLlNuYXBzaG90c0VudHJ5GkEKDlNuYXBzaG90c0VudHJ5EgsKA2tleRgBIAEoAxIeCgV2YWx1ZRgCIAEoCzIPLnJpdmVyLkVudmVsb3BlOgI4ASIwChtHZXRMYXN0TWluaWJsb2NrSGFzaFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMIosBChxHZXRMYXN0TWluaWJsb2NrSGFzaFJlc3BvbnNlEgwKBGhhc2gYASABKAwSFQoNbWluaWJsb2NrX251bRgCIAEoAxJGChRlbmNyeXB0aW9uX2FsZ29yaXRobRgDIAEoCzIoLnJpdmVyLk1lbWJlclBheWxvYWQuRW5jcnlwdGlvbkFsZ29yaXRobSJKCg9BZGRFdmVudFJlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMEh4KBWV2ZW50GAIgASgLMg8ucml2ZXIuRW52ZWxvcGVKBAgDEAQiPQoQQWRkRXZlbnRSZXNwb25zZRIjCgpuZXdfZXZlbnRzGAIgAygLMg8ucml2ZXIuRXZlbnRSZWZKBAgBEAIidAoUQWRkTWVkaWFFdmVudFJlcXVlc3QSHgoFZXZlbnQYASABKAsyDy5yaXZlci5FbnZlbG9wZRIuCg9jcmVhdGlvbl9jb29raWUYAiABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZRIMCgRsYXN0GAMgASgIIkcKFUFkZE1lZGlhRXZlbnRSZXNwb25zZRIuCg9jcmVhdGlvbl9jb29raWUYASABKAsyFS5yaXZlci5DcmVhdGlvbkNvb2tpZSI5ChJTeW5jU3RyZWFtc1JlcXVlc3QSIwoIc3luY19wb3MYASADKAsyES5yaXZlci5TeW5jQ29va2llIq4BChNTeW5jU3RyZWFtc1Jlc3BvbnNlEg8KB3N5bmNfaWQYASABKAkSHgoHc3luY19vcBgCIAEoDjINLnJpdmVyLlN5bmNPcBImCgZzdHJlYW0YAyABKAsyFi5yaXZlci5TdHJlYW1BbmRDb29raWUSEgoKcG9uZ19ub25jZRgEIAEoCRIRCglzdHJlYW1faWQYBSABKAwSFwoPdGFyZ2V0X3N5bmNfaWRzGAYgAygJIuIBChFNb2RpZnlTeW5jUmVxdWVzdBIPCgdzeW5jX2lkGAEgASgJEiYKC2FkZF9zdHJlYW1zGAIgAygLMhEucml2ZXIuU3luY0Nvb2tpZRIWCg5yZW1vdmVfc3RyZWFtcxgDIAMoDBI7ChBiYWNrZmlsbF9zdHJlYW1zGAQgASgLMiEucml2ZXIuTW9kaWZ5U3luY1JlcXVlc3QuQmFja2ZpbGwaPwoIQmFja2ZpbGwSIgoHc3RyZWFtcxgBIAMoCzIRLnJpdmVyLlN5bmNDb29raWUSDwoHc3luY19pZBgCIAEoCSJcChJTeW5jU3RyZWFtT3BTdGF0dXMSEQoJc3RyZWFtX2lkGAEgASgMEgwKBGNvZGUYAiABKAUSDwoHbWVzc2FnZRgDIAEoCRIUCgxub2RlX2FkZHJlc3MYBCABKAwimAEKEk1vZGlmeVN5bmNSZXNwb25zZRInCgRhZGRzGAEgAygLMhkucml2ZXIuU3luY1N0cmVhbU9wU3RhdHVzEisKCHJlbW92YWxzGAIgAygLMhkucml2ZXIuU3luY1N0cmVhbU9wU3RhdHVzEiwKCWJhY2tmaWxscxgDIAMoCzIZLnJpdmVyLlN5bmNTdHJlYW1PcFN0YXR1cyIkChFDYW5jZWxTeW5jUmVxdWVzdBIPCgdzeW5jX2lkGAEgASgJIhQKEkNhbmNlbFN5bmNSZXNwb25zZSIxCg9QaW5nU3luY1JlcXVlc3QSDwoHc3luY19pZBgBIAEoCRINCgVub25jZRgCIAEoCSISChBQaW5nU3luY1Jlc3BvbnNlIh0KCVJlZGFjdGlvbhIQCghldmVudF9pZBgBIAEoDCLyFwoZSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZBJGChFlbmNyeXB0aW9uX2RldmljZRgBIAEoCzIrLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuRW5jcnlwdGlvbkRldmljZRI/CglzaWduYXR1cmUYZSABKAsyKi5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlNpZ25hdHVyZUgAEjUKBGZvcm0YZiABKAsyJS5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLkZvcm1IABJDCgt0cmFuc2FjdGlvbhhnIAEoCzIsLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuVHJhbnNhY3Rpb25IABJACgphZGRfbWVtYmVyGGggASgLMioucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5BZGRNZW1iZXJIABJICg5wcmVwYXJlZF9jYWxscxhpIAEoCzIuLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuUHJlcGFyZWRDYWxsc0gAEjcKBWJhdGNoGGogASgLMiYucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5CYXRjaEgAGu8DCglTaWduYXR1cmUSCgoCaWQYASABKAkSDAoEZGF0YRgCIAEoCRIQCghjaGFpbl9pZBgDIAEoCRIaCg1zaWduZXJfd2FsbGV0GAQgASgJSACIAQESRgoEdHlwZRgFIAEoDjI4LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuU2lnbmF0dXJlLlNpZ25hdHVyZVR5cGUSEgoFdGl0bGUYBiABKAlIAYgBARIVCghzdWJ0aXRsZRgHIAEoCUgCiAEBEmEKFHNpZ25hdHVyZV92YWxpZGF0aW9uGAggASgOMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5TaWduYXR1cmUuU2lnbmF0dXJlVmFsaWRhdGlvbkgDiAEBIjIKDVNpZ25hdHVyZVR5cGUSEQoNUEVSU09OQUxfU0lHThAAEg4KClRZUEVEX0RBVEEQASJOChNTaWduYXR1cmVWYWxpZGF0aW9uEg8KC1VOU1BFQ0lGSUVEEAASDwoLRUlQNzEyX09OTFkQARIVChFFSVA3MTJfT1JfRUlQMTI3MRACQhAKDl9zaWduZXJfd2FsbGV0QggKBl90aXRsZUILCglfc3VidGl0bGVCFwoVX3NpZ25hdHVyZV92YWxpZGF0aW9uGpYDCgRGb3JtEgoKAmlkGAEgASgJEhIKBXRpdGxlGAIgASgJSACIAQESFQoIc3VidGl0bGUYAyABKAlIAYgBARJDCgpjb21wb25lbnRzGAQgAygLMi8ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5Gb3JtLkNvbXBvbmVudBr6AQoJQ29tcG9uZW50EgoKAmlkGAEgASgJEkgKBmJ1dHRvbhhlIAEoCzI2LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuRm9ybS5Db21wb25lbnQuQnV0dG9uSAASTwoKdGV4dF9pbnB1dBhmIAEoCzI5LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuRm9ybS5Db21wb25lbnQuVGV4dElucHV0SAAaFwoGQnV0dG9uEg0KBWxhYmVsGAEgASgJGiAKCVRleHRJbnB1dBITCgtwbGFjZWhvbGRlchgBIAEoCUILCgljb21wb25lbnRCCAoGX3RpdGxlQgsKCV9zdWJ0aXRsZRr/AgoLVHJhbnNhY3Rpb24SCgoCaWQYASABKAkSEgoFdGl0bGUYAiABKAlIAYgBARIVCghzdWJ0aXRsZRgDIAEoCUgCiAEBEkQKA2V2bRhlIAEoCzI1LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuVHJhbnNhY3Rpb24uRVZNQmF0Y2hIABo1CgpFVk1Db250ZW50EgoKAnRvGAEgASgJEg0KBXZhbHVlGAIgASgJEgwKBGRhdGEYAyABKAkamQEKCEVWTUJhdGNoEhAKCGNoYWluX2lkGAEgASgJEhoKDXNpZ25lcl93YWxsZXQYAiABKAlIAIgBARJNCgx0cmFuc2FjdGlvbnMYAyADKAsyNy5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlRyYW5zYWN0aW9uLkVWTUNvbnRlbnRCEAoOX3NpZ25lcl93YWxsZXRCCQoHY29udGVudEIICgZfdGl0bGVCCwoJX3N1YnRpdGxlGkoKCUFkZE1lbWJlchIKCgJpZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgMEhQKB21lc3NhZ2UYAyABKAlIAIgBAUIKCghfbWVzc2FnZRrzBgoNUHJlcGFyZWRDYWxscxIKCgJpZBgBIAEoCRIQCghjaGFpbl9pZBgCIAEoCRISCgp0eXBlZF9kYXRhGAMgASgJEg8KB2NvbnRleHQYBCABKAkSEgoFdGl0bGUYBSABKAlIAIgBARIVCghzdWJ0aXRsZRgGIAEoCUgBiAEBElMKDmF1dGhvcml6ZV9rZXlzGAcgAygLMjsucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLkF1dGhvcml6ZUtleRrmAwoKUGVybWlzc2lvbhJMCgR0eXBlGAEgASgOMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uVHlwZRJOCgRjYWxsGAIgASgLMj4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uQ2FsbEgAElAKBXNwZW5kGAMgASgLMj8ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzLlBlcm1pc3Npb24uU3BlbmRIABpCCgRDYWxsEg8KAnRvGAEgASgJSACIAQESFQoIc2VsZWN0b3IYAiABKAlIAYgBAUIFCgNfdG9CCwoJX3NlbGVjdG9yGmMKBVNwZW5kEhIKBXRva2VuGAEgASgJSACIAQESEgoFbGltaXQYAiABKAlIAYgBARITCgZwZXJpb2QYAyABKAlIAogBAUIICgZfdG9rZW5CCAoGX2xpbWl0QgkKB19wZXJpb2QiMQoEVHlwZRIUChBUWVBFX1VOU1BFQ0lGSUVEEAASCAoEQ0FMTBABEgkKBVNQRU5EEAJCDAoKcGVybWlzc2lvbhqeAQoMQXV0aG9yaXplS2V5Eg4KBmV4cGlyeRgBIAEoCRIMCgR0eXBlGAIgASgJEgwKBHJvbGUYAyABKAkSEgoKcHVibGljX2tleRgEIAEoCRJOCgtwZXJtaXNzaW9ucxgFIAMoCzI5LnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuUHJlcGFyZWRDYWxscy5QZXJtaXNzaW9uQggKBl90aXRsZUILCglfc3VidGl0bGUasAIKBUJhdGNoEgoKAmlkGAEgASgJEhIKBXRpdGxlGAIgASgJSACIAQESFQoIc3VidGl0bGUYAyABKAlIAYgBARI6CgVzdGVwcxgEIAMoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVxdWVzdFBheWxvYWQuQmF0Y2guU3RlcBqcAQoEU3RlcBI/CglzaWduYXR1cmUYZSABKAsyKi5yaXZlci5JbnRlcmFjdGlvblJlcXVlc3RQYXlsb2FkLlNpZ25hdHVyZUgAEkgKDnByZXBhcmVkX2NhbGxzGGkgASgLMi4ucml2ZXIuSW50ZXJhY3Rpb25SZXF1ZXN0UGF5bG9hZC5QcmVwYXJlZENhbGxzSABCCQoHY29udGVudEIICgZfdGl0bGVCCwoJX3N1YnRpdGxlQgkKB2NvbnRlbnQilAEKEkludGVyYWN0aW9uUmVxdWVzdBIWCglyZWNpcGllbnQYASABKAxIAIgBARIsCg5lbmNyeXB0ZWRfZGF0YRgDIAEoCzIULnJpdmVyLkVuY3J5cHRlZERhdGESFgoJdGhyZWFkX2lkGAQgASgMSAGIAQFCDAoKX3JlY2lwaWVudEIMCgpfdGhyZWFkX2lkSgQIAhADInwKE0ludGVyYWN0aW9uUmVzcG9uc2USEQoJcmVjaXBpZW50GAEgASgMEiwKDmVuY3J5cHRlZF9kYXRhGAIgASgLMhQucml2ZXIuRW5jcnlwdGVkRGF0YRIWCgl0aHJlYWRfaWQYAyABKAxIAIgBAUIMCgpfdGhyZWFkX2lkIugKChpJbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZBIMCgRzYWx0GAEgASgMEkAKCXNpZ25hdHVyZRhlIAEoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlNpZ25hdHVyZUgAEjYKBGZvcm0YZiABKAsyJi5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5Gb3JtSAASRAoLdHJhbnNhY3Rpb24YZyABKAsyLS5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5UcmFuc2FjdGlvbkgAEkEKCmFkZF9tZW1iZXIYaCABKAsyKy5yaXZlci5JbnRlcmFjdGlvblJlc3BvbnNlUGF5bG9hZC5BZGRNZW1iZXJIABJJCg5wcmVwYXJlZF9jYWxscxhpIAEoCzIvLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlByZXBhcmVkQ2FsbHNIABI4CgViYXRjaBhqIAEoCzInLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkJhdGNoSAAaMgoJU2lnbmF0dXJlEhIKCnJlcXVlc3RfaWQYASABKAkSEQoJc2lnbmF0dXJlGAIgASgJGsoCCgRGb3JtEhIKCnJlcXVlc3RfaWQYASABKAkSRAoKY29tcG9uZW50cxgCIAMoCzIwLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkZvcm0uQ29tcG9uZW50GucBCglDb21wb25lbnQSCgoCaWQYASABKAkSSQoGYnV0dG9uGGUgASgLMjcucml2ZXIuSW50ZXJhY3Rpb25SZXNwb25zZVBheWxvYWQuRm9ybS5Db21wb25lbnQuQnV0dG9uSAASUAoKdGV4dF9pbnB1dBhmIAEoCzI6LnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkZvcm0uQ29tcG9uZW50LlRleHRJbnB1dEgAGggKBkJ1dHRvbhoaCglUZXh0SW5wdXQSDQoFdmFsdWUYASABKAlCCwoJY29tcG9uZW50GjIKC1RyYW5zYWN0aW9uEhIKCnJlcXVlc3RfaWQYASABKAkSDwoHdHhfaGFzaBgCIAEoCRoxCglBZGRNZW1iZXISEgoKcmVxdWVzdF9pZBgBIAEoCRIQCghhY2NlcHRlZBgCIAEoCBq0AQoNUHJlcGFyZWRDYWxscxISCgpyZXF1ZXN0X2lkGAEgASgJEhEKCXNpZ25hdHVyZRgCIAEoCRIeChFwYXltZW50X3NpZ25hdHVyZRgDIAEoCUgAiAEBEhQKB2NvbnRleHQYBCABKAlIAYgBARIWCglidW5kbGVfaWQYBSABKAlIAogBAUIUChJfcGF5bWVudF9zaWduYXR1cmVCCgoIX2NvbnRleHRCDAoKX2J1bmRsZV9pZBqJAgoFQmF0Y2gSEgoKcmVxdWVzdF9pZBgBIAEoCRJDCgVzdGVwcxgCIAMoCzI0LnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLkJhdGNoLlN0ZXBSZXNwb25zZRqmAQoMU3RlcFJlc3BvbnNlEkAKCXNpZ25hdHVyZRhlIAEoCzIrLnJpdmVyLkludGVyYWN0aW9uUmVzcG9uc2VQYXlsb2FkLlNpZ25hdHVyZUgAEkkKDnByZXBhcmVkX2NhbGxzGGkgASgLMi8ucml2ZXIuSW50ZXJhY3Rpb25SZXNwb25zZVBheWxvYWQuUHJlcGFyZWRDYWxsc0gAQgkKB2NvbnRlbnRCCQoHY29udGVudCKLAQoTSW52aXRlU2lnbmVkUGF5bG9hZBIPCgd1c2VyX2lkGAEgASgMEhEKCXN0cmVhbV9pZBgCIAEoDBIUCgx0aW1lc3RhbXBfbXMYAyABKAMSDAoEc2FsdBgEIAEoDBIRCglzaWduYXR1cmUYBSABKAwSGQoRc2lnbmVyX3B1YmxpY19rZXkYBiABKAwqawoGU3luY09wEhQKEFNZTkNfVU5TUEVDSUZJRUQQABIMCghTWU5DX05FVxABEg4KClNZTkNfQ0xPU0UQAhIPCgtTWU5DX1VQREFURRADEg0KCVNZTkNfUE9ORxAEEg0KCVNZTkNfRE9XThAFKkwKDE1lbWJlcnNoaXBPcBISCg5TT19VTlNQRUNJRklFRBAAEg0KCVNPX0lOVklURRABEgsKB1NPX0pPSU4QAhIMCghTT19MRUFWRRADKkQKEE1lbWJlcnNoaXBSZWFzb24SCwoHTVJfTk9ORRAAEhMKD01SX05PVF9FTlRJVExFRBABEg4KCk1SX0VYUElSRUQQAipPCglDaGFubmVsT3ASEgoOQ09fVU5TUEVDSUZJRUQQABIOCgpDT19DUkVBVEVEEAESDgoKQ09fREVMRVRFRBACEg4KCkNPX1VQREFURUQQBCrtAgoWTWVzc2FnZUludGVyYWN0aW9uVHlwZRIoCiRNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABIiCh5NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUkVQTFkQARIlCiFNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUkVBQ1RJT04QAhIhCh1NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfUE9TVBADEiEKHU1FU1NBR0VfSU5URVJBQ1RJT05fVFlQRV9FRElUEAQSJgoiTUVTU0FHRV9JTlRFUkFDVElPTl9UWVBFX1JFREFDVElPThAFEiAKHE1FU1NBR0VfSU5URVJBQ1RJT05fVFlQRV9USVAQBhIiCh5NRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfVFJBREUQBxIqCiZNRVNTQUdFX0lOVEVSQUNUSU9OX1RZUEVfU0xBU0hfQ09NTUFORBAIKlkKEEdyb3VwTWVudGlvblR5cGUSIgoeR1JPVVBfTUVOVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASIQodR1JPVVBfTUVOVElPTl9UWVBFX0FUX0NIQU5ORUwQASpSChRFbmNyeXB0ZWREYXRhVmVyc2lvbhIcChhFTkNSWVBURURfREFUQV9WRVJTSU9OXzAQABIcChhFTkNSWVBURURfREFUQV9WRVJTSU9OXzEQASr1DAoDRXJyEhMKD0VSUl9VTlNQRUNJRklFRBAAEgwKCENBTkNFTEVEEAESCwoHVU5LTk9XThACEhQKEElOVkFMSURfQVJHVU1FTlQQAxIVChFERUFETElORV9FWENFRURFRBAEEg0KCU5PVF9GT1VORBAFEhIKDkFMUkVBRFlfRVhJU1RTEAYSFQoRUEVSTUlTU0lPTl9ERU5JRUQQBxIWChJSRVNPVVJDRV9FWEhBVVNURUQQCBIXChNGQUlMRURfUFJFQ09ORElUSU9OEAkSCwoHQUJPUlRFRBAKEhAKDE9VVF9PRl9SQU5HRRALEhEKDVVOSU1QTEVNRU5URUQQDBIMCghJTlRFUk5BTBANEg8KC1VOQVZBSUxBQkxFEA4SDQoJREFUQV9MT1NTEA8SEwoPVU5BVVRIRU5USUNBVEVEEBASDwoLREVCVUdfRVJST1IQERIRCg1CQURfU1RSRUFNX0lEEBISHgoaQkFEX1NUUkVBTV9DUkVBVElPTl9QQVJBTVMQExIZChVJTlRFUk5BTF9FUlJPUl9TV0lUQ0gQFBIQCgxCQURfRVZFTlRfSUQQFRIXChNCQURfRVZFTlRfU0lHTkFUVVJFEBYSEwoPQkFEX0hBU0hfRk9STUFUEBcSGwoXQkFEX1BSRVZfTUlOSUJMT0NLX0hBU0gQGBIWChJOT19FVkVOVF9TUEVDSUZJRUQQGRINCglCQURfRVZFTlQQGhISCg5VU0VSX0NBTlRfUE9TVBAbEhUKEVNUUkVBTV9CQURfSEFTSEVTEBwSEAoMU1RSRUFNX0VNUFRZEB0SFAoQU1RSRUFNX0JBRF9FVkVOVBAeEhQKEEJBRF9ERUxFR0FURV9TSUcQHxISCg5CQURfUFVCTElDX0tFWRAgEg8KC0JBRF9QQVlMT0FEECESEgoOQkFEX0hFWF9TVFJJTkcQIhISCg5CQURfRVZFTlRfSEFTSBAjEhMKD0JBRF9TWU5DX0NPT0tJRRAkEhMKD0RVUExJQ0FURV9FVkVOVBAlEg0KCUJBRF9CTE9DSxAmEh0KGVNUUkVBTV9OT19JTkNFUFRJT05fRVZFTlQQJxIUChBCQURfQkxPQ0tfTlVNQkVSECgSFQoRQkFEX01JTklQT09MX1NMT1QQKRIXChNCQURfQ1JFQVRPUl9BRERSRVNTECoSEgoOU1RBTEVfREVMRUdBVEUQKxIhCh1CQURfTElOS19XQUxMRVRfQkFEX1NJR05BVFVSRRAsEhMKD0JBRF9ST09UX0tFWV9JRBAtEhAKDFVOS05PV05fTk9ERRAuEhgKFERCX09QRVJBVElPTl9GQUlMVVJFEC8SHgoaTUlOSUJMT0NLU19TVE9SQUdFX0ZBSUxVUkUQMBIPCgtCQURfQUREUkVTUxAxEg8KC0JVRkZFUl9GVUxMEDISDgoKQkFEX0NPTkZJRxAzEhAKDEJBRF9DT05UUkFDVBA0EhIKDkNBTk5PVF9DT05ORUNUEDUSHQoZQ0FOTk9UX0dFVF9MSU5LRURfV0FMTEVUUxA2Eh0KGUNBTk5PVF9DSEVDS19FTlRJVExFTUVOVFMQNxIYChRDQU5OT1RfQ0FMTF9DT05UUkFDVBA4EhIKDlNQQUNFX0RJU0FCTEVEEDkSFAoQQ0hBTk5FTF9ESVNBQkxFRBA6EhUKEVdST05HX1NUUkVBTV9UWVBFEDsSGwoXTUlOSVBPT0xfTUlTU0lOR19FVkVOVFMQPBIeChpTVFJFQU1fTEFTVF9CTE9DS19NSVNNQVRDSBA9EhwKGERPV05TVFJFQU1fTkVUV09SS19FUlJPUhA+EhUKEU1JTklCTE9DS19UT09fTkVXED8SFQoRTUlOSUJMT0NLX1RPT19PTEQQQBIRCg1RVU9SVU1fRkFJTEVEEEESFwoTQ0FOTk9UX0NBTExfV0VCSE9PSxBCEh4KGk1BTEZPUk1FRF9XRUJIT09LX1JFU1BPTlNFEEMSGQoVQkFEX0VOQ1JZUFRJT05fREVWSUNFEEQSIgoeU1RSRUFNX1JFQ09OQ0lMSUFUSU9OX1JFUVVJUkVEEEUSHQoZU1lOQ19TRVNTSU9OX1JVTk5FUl9FTVBUWRBGEiQKIFNZTkNfU0VTU0lPTl9SVU5ORVJfVU5BU1NJR05BQkxFEEcSGAoUTUlOSUJMT0NLU19OT1RfRk9VTkQQSDKqBwoNU3RyZWFtU2VydmljZRIvCgRJbmZvEhIucml2ZXIuSW5mb1JlcXVlc3QaEy5yaXZlci5JbmZvUmVzcG9uc2USRwoMQ3JlYXRlU3RyZWFtEhoucml2ZXIuQ3JlYXRlU3RyZWFtUmVxdWVzdBobLnJpdmVyLkNyZWF0ZVN0cmVhbVJlc3BvbnNlElYKEUNyZWF0ZU1lZGlhU3RyZWFtEh8ucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXF1ZXN0GiAucml2ZXIuQ3JlYXRlTWVkaWFTdHJlYW1SZXNwb25zZRI+CglHZXRTdHJlYW0SFy5yaXZlci5HZXRTdHJlYW1SZXF1ZXN0Ghgucml2ZXIuR2V0U3RyZWFtUmVzcG9uc2USRgoLR2V0U3RyZWFtRXgSGS5yaXZlci5HZXRTdHJlYW1FeFJlcXVlc3QaGi5yaXZlci5HZXRTdHJlYW1FeFJlc3BvbnNlMAESSgoNR2V0TWluaWJsb2NrcxIbLnJpdmVyLkdldE1pbmlibG9ja3NSZXF1ZXN0Ghwucml2ZXIuR2V0TWluaWJsb2Nrc1Jlc3BvbnNlEl8KFEdldExhc3RNaW5pYmxvY2tIYXNoEiIucml2ZXIuR2V0TGFzdE1pbmlibG9ja0hhc2hSZXF1ZXN0GiMucml2ZXIuR2V0TGFzdE1pbmlibG9ja0hhc2hSZXNwb25zZRI7CghBZGRFdmVudBIWLnJpdmVyLkFkZEV2ZW50UmVxdWVzdBoXLnJpdmVyLkFkZEV2ZW50UmVzcG9uc2USSgoNQWRkTWVkaWFFdmVudBIbLnJpdmVyLkFkZE1lZGlhRXZlbnRSZXF1ZXN0Ghwucml2ZXIuQWRkTWVkaWFFdmVudFJlc3BvbnNlEkYKC1N5bmNTdHJlYW1zEhkucml2ZXIuU3luY1N0cmVhbXNSZXF1ZXN0Ghoucml2ZXIuU3luY1N0cmVhbXNSZXNwb25zZTABEkEKCk1vZGlmeVN5bmMSGC5yaXZlci5Nb2RpZnlTeW5jUmVxdWVzdBoZLnJpdmVyLk1vZGlmeVN5bmNSZXNwb25zZRJBCgpDYW5jZWxTeW5jEhgucml2ZXIuQ2FuY2VsU3luY1JlcXVlc3QaGS5yaXZlci5DYW5jZWxTeW5jUmVzcG9uc2USOwoIUGluZ1N5bmMSFi5yaXZlci5QaW5nU3luY1JlcXVlc3QaFy5yaXZlci5QaW5nU3luY1Jlc3BvbnNlQjRaMmdpdGh1Yi5jb20vdG93bnMtcHJvdG9jb2wvdG93bnMvY29yZS9ub2RlL3Byb3RvY29sYgZwcm90bzM", [import_wkt2.file_google_protobuf_any, import_wkt2.file_google_protobuf_empty, import_wkt2.file_google_protobuf_timestamp]);
7614
7613
  var EnvelopeSchema = /* @__PURE__ */ (0, import_codegenv22.messageDesc)(file_protocol, 1);
7615
7614
  var StreamEventSchema = /* @__PURE__ */ (0, import_codegenv22.messageDesc)(file_protocol, 2);
7616
7615
  var UserSettingsPayload_Snapshot_UserBlocksSchema = /* @__PURE__ */ (0, import_codegenv22.messageDesc)(file_protocol, 8, 0, 0);
@@ -7778,7 +7777,7 @@ var Err;
7778
7777
  var StreamService = /* @__PURE__ */ (0, import_codegenv22.serviceDesc)(file_protocol, 0);
7779
7778
 
7780
7779
  // ../proto/dist/gen/apps_pb.js
7781
- var file_apps = /* @__PURE__ */ (0, import_codegenv23.fileDesc)("CgphcHBzLnByb3RvEgVyaXZlciKFAQoLQXBwU2V0dGluZ3MSMwoPZm9yd2FyZF9zZXR0aW5nGAEgASgOMhoucml2ZXIuRm9yd2FyZFNldHRpbmdWYWx1ZRIUCgh0cmFkYWJsZRgCIAEoCEICGAESKwoOc3VwcG9ydGVkX2FwaXMYAyADKA4yEy5yaXZlci5TdXBwb3J0ZWRBcGkigwEKD1JlZ2lzdGVyUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSFAoMYXBwX293bmVyX2lkGAIgASgMEiQKCHNldHRpbmdzGAMgASgLMhIucml2ZXIuQXBwU2V0dGluZ3MSJAoIbWV0YWRhdGEYBCABKAsyEi5yaXZlci5BcHBNZXRhZGF0YSIvChBSZWdpc3RlclJlc3BvbnNlEhsKE2hzMjU2X3NoYXJlZF9zZWNyZXQYASABKAwiPQoWUmVnaXN0ZXJXZWJob29rUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSEwoLd2ViaG9va191cmwYAiABKAkiGQoXUmVnaXN0ZXJXZWJob29rUmVzcG9uc2UiTQoVU2V0QXBwU2V0dGluZ3NSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDBIkCghzZXR0aW5ncxgCIAEoCzISLnJpdmVyLkFwcFNldHRpbmdzIhgKFlNldEFwcFNldHRpbmdzUmVzcG9uc2UiugEKGFVwZGF0ZUFwcFNldHRpbmdzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSOAoPZm9yd2FyZF9zZXR0aW5nGAIgASgOMhoucml2ZXIuRm9yd2FyZFNldHRpbmdWYWx1ZUgAiAEBEisKDnN1cHBvcnRlZF9hcGlzGAMgAygOMhMucml2ZXIuU3VwcG9ydGVkQXBpEhMKC3VwZGF0ZV9tYXNrGAQgAygJQhIKEF9mb3J3YXJkX3NldHRpbmciGwoZVXBkYXRlQXBwU2V0dGluZ3NSZXNwb25zZSInChVHZXRBcHBTZXR0aW5nc1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMImgKFkdldEFwcFNldHRpbmdzUmVzcG9uc2USJAoIc2V0dGluZ3MYASABKAsyEi5yaXZlci5BcHBTZXR0aW5ncxIYCgt3ZWJob29rX3VybBgCIAEoCUgAiAEBQg4KDF93ZWJob29rX3VybCIlChNSb3RhdGVTZWNyZXRSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDCIzChRSb3RhdGVTZWNyZXRSZXNwb25zZRIbChNoczI1Nl9zaGFyZWRfc2VjcmV0GAEgASgMIiIKEEdldFN0YXR1c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMIowBChFHZXRTdGF0dXNSZXNwb25zZRIVCg1pc19yZWdpc3RlcmVkGAEgASgIEhYKDnZhbGlkX3Jlc3BvbnNlGAIgASgIEjgKBnN0YXR1cxgDIAEoCzIoLnJpdmVyLkFwcFNlcnZpY2VSZXNwb25zZS5TdGF0dXNSZXNwb25zZRIOCgZhY3RpdmUYBCABKAgiXAoRR2V0U2Vzc2lvblJlcXVlc3QSDgoGYXBwX2lkGAEgASgMEhQKCnNlc3Npb25faWQYAiABKAlIABITCglzdHJlYW1faWQYAyABKAxIAEIMCgppZGVudGlmaWVyIkgKEkdldFNlc3Npb25SZXNwb25zZRIyChlncm91cF9lbmNyeXB0aW9uX3Nlc3Npb25zGAEgASgLMg8ucml2ZXIuRW52ZWxvcGUiugIKDEV2ZW50UGF5bG9hZBIwCghtZXNzYWdlcxgBIAEoCzIcLnJpdmVyLkV2ZW50UGF5bG9hZC5NZXNzYWdlc0gAEjcKDHNvbGljaXRhdGlvbhgCIAEoCzIfLnJpdmVyLkV2ZW50UGF5bG9hZC5Tb2xpY2l0S2V5c0gAGn0KCE1lc3NhZ2VzEhEKCXN0cmVhbV9pZBgBIAEoDBIhCghtZXNzYWdlcxgCIAMoCzIPLnJpdmVyLkVudmVsb3BlEjsKImdyb3VwX2VuY3J5cHRpb25fc2Vzc2lvbnNfbWVzc2FnZXMYAyADKAsyDy5yaXZlci5FbnZlbG9wZRo1CgtTb2xpY2l0S2V5cxIRCglzdHJlYW1faWQYASABKAwSEwoLc2Vzc2lvbl9pZHMYAiADKAlCCQoHcGF5bG9hZCI0Cg1FdmVudHNQYXlsb2FkEiMKBmV2ZW50cxgBIAMoCzITLnJpdmVyLkV2ZW50UGF5bG9hZCKsBgoRQXBwU2VydmljZVJlcXVlc3QSLAoKaW5pdGlhbGl6ZRhlIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEigKBnN0YXR1cxhmIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEiYKBmV2ZW50cxhnIAEoCzIULnJpdmVyLkV2ZW50c1BheWxvYWRIABIsCglwb3NpdGlvbnMYaCABKAsyFy5yaXZlci5Qb3NpdGlvbnNSZXF1ZXN0SAASPgoJcHJvcG9zYWxzGGkgASgLMikucml2ZXIuQXBwU2VydmljZVJlcXVlc3QuUHJvcG9zYWxzUmVxdWVzdEgAEkYKEWNvbmNpZXJnZV9yZXF1ZXN0GGogASgLMikucml2ZXIuQXBwU2VydmljZVJlcXVlc3QuQ29uY2llcmdlUmVxdWVzdEgAGsoBChBQcm9wb3NhbHNSZXF1ZXN0EhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJEhIKCnVzZXJfcXVlcnkYAiABKAkSFAoHY29udGV4dBgDIAEoCUgAiAEBEjoKC2ludm9jYXRpb25zGAQgAygLMiUucml2ZXIuU3BlY2lhbGlzdENhcGFiaWxpdHlJbnZvY2F0aW9uEhcKCnRpbWVvdXRfbXMYBSABKAVIAYgBAUIKCghfY29udGV4dEINCgtfdGltZW91dF9tcxqIAgoQQ29uY2llcmdlUmVxdWVzdBIcChRjb252ZXJzYXRpb25fc2VlZF9pZBgBIAEoCRISCgp1c2VyX3F1ZXJ5GAIgASgJEhQKB2NvbnRleHQYAyABKAlIAIgBARIZCgxleHRlcm5hbF9yZWYYBCABKAlIAYgBARIgChNwcm9wb3NhbF90aW1lb3V0X21zGAUgASgDSAKIAQESIQoUY29uY2llcmdlX3RpbWVvdXRfbXMYBiABKANIA4gBAUIKCghfY29udGV4dEIPCg1fZXh0ZXJuYWxfcmVmQhYKFF9wcm9wb3NhbF90aW1lb3V0X21zQhcKFV9jb25jaWVyZ2VfdGltZW91dF9tc0IJCgdwYXlsb2FkIo8FChJBcHBTZXJ2aWNlUmVzcG9uc2USQgoKaW5pdGlhbGl6ZRhlIAEoCzIsLnJpdmVyLkFwcFNlcnZpY2VSZXNwb25zZS5Jbml0aWFsaXplUmVzcG9uc2VIABI6CgZzdGF0dXMYZiABKAsyKC5yaXZlci5BcHBTZXJ2aWNlUmVzcG9uc2UuU3RhdHVzUmVzcG9uc2VIABItCglwb3NpdGlvbnMYZyABKAsyGC5yaXZlci5Qb3NpdGlvbnNSZXNwb25zZUgAEkAKCXByb3Bvc2FscxhoIAEoCzIrLnJpdmVyLkFwcFNlcnZpY2VSZXNwb25zZS5Qcm9wb3NhbHNSZXNwb25zZUgAEkkKEmNvbmNpZXJnZV9yZXNwb25zZRhpIAEoCzIrLnJpdmVyLkFwcFNlcnZpY2VSZXNwb25zZS5Db25jaWVyZ2VSZXNwb25zZUgAGlwKEkluaXRpYWxpemVSZXNwb25zZRJGChFlbmNyeXB0aW9uX2RldmljZRgBIAEoCzIrLnJpdmVyLlVzZXJNZXRhZGF0YVBheWxvYWQuRW5jcnlwdGlvbkRldmljZRqFAQoOU3RhdHVzUmVzcG9uc2USGQoRZnJhbWV3b3JrX3ZlcnNpb24YASABKAUSEgoKZGV2aWNlX2tleRgCIAEoCRIUCgxmYWxsYmFja19rZXkYAyABKAkSGwoOY2xpZW50X3ZlcnNpb24YBCABKAlIAIgBAUIRCg9fY2xpZW50X3ZlcnNpb24aJQoRUHJvcG9zYWxzUmVzcG9uc2USEAoIYWNjZXB0ZWQYASABKAgaJQoRQ29uY2llcmdlUmVzcG9uc2USEAoIYWNjZXB0ZWQYASABKAhCCQoHcGF5bG9hZCLwAQoIUG9zaXRpb24SDQoFbGFiZWwYASABKAkSGAoLZGVzY3JpcHRpb24YAiABKAlIAIgBARIOCgZzeW1ib2wYAyABKAkSIQoEdHlwZRgEIAEoDjITLnJpdmVyLlBvc2l0aW9uVHlwZRITCgtiYWxhbmNlX3VzZBgFIAEoCRIPCgdwbmxfdXNkGAYgASgJEhUKCGNoYWluX2lkGAcgASgESAGIAQESGwoObmF0aXZlX2JhbGFuY2UYCCABKAlIAogBAUIOCgxfZGVzY3JpcHRpb25CCwoJX2NoYWluX2lkQhEKD19uYXRpdmVfYmFsYW5jZSIjChBQb3NpdGlvbnNSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAwiewoRUG9zaXRpb25zUmVzcG9uc2USEQoJc3VwcG9ydGVkGAEgASgIEhIKBWVycm9yGAIgASgJSACIAQESIgoJcG9zaXRpb25zGAMgAygLMg8ucml2ZXIuUG9zaXRpb24SEQoJdGltZXN0YW1wGAQgASgDQggKBl9lcnJvciIxCgxTbGFzaENvbW1hbmQSDAoEbmFtZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCSI7ChFDYXBhYmlsaXR5RXhhbXBsZRISCgp1c2VyX3F1ZXJ5GAEgASgJEhIKCnBhcmFtZXRlcnMYAiABKAkicQoKQ2FwYWJpbGl0eRIMCgRuYW1lGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEhQKDGlucHV0X3NjaGVtYRgDIAEoCRIqCghleGFtcGxlcxgEIAMoCzIYLnJpdmVyLkNhcGFiaWxpdHlFeGFtcGxlIo8BChJDYXBhYmlsaXR5TWFuaWZlc3QSEAoIYWdlbnRfaWQYASABKAwSEgoKYWdlbnRfbmFtZRgCIAEoCRIZChFhZ2VudF9kZXNjcmlwdGlvbhgDIAEoCRInCgxjYXBhYmlsaXRpZXMYBCADKAsyES5yaXZlci5DYXBhYmlsaXR5Eg8KB3ZlcnNpb24YBSABKAkigAIKC0FwcE1ldGFkYXRhEhAKCHVzZXJuYW1lGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEhEKCWltYWdlX3VybBgDIAEoCRIZCgxleHRlcm5hbF91cmwYBCABKAlIAIgBARIrCg5zbGFzaF9jb21tYW5kcxgGIAMoCzITLnJpdmVyLlNsYXNoQ29tbWFuZBIUCgxkaXNwbGF5X25hbWUYByABKAkSDQoFbW90dG8YCCABKAkSJwoMY2FwYWJpbGl0aWVzGAkgAygLMhEucml2ZXIuQ2FwYWJpbGl0eUIPCg1fZXh0ZXJuYWxfdXJsSgQIBRAGUgphdmF0YXJfdXJsIuUCChFBcHBNZXRhZGF0YVVwZGF0ZRIVCgh1c2VybmFtZRgBIAEoCUgAiAEBEhgKC2Rlc2NyaXB0aW9uGAIgASgJSAGIAQESFgoJaW1hZ2VfdXJsGAMgASgJSAKIAQESGQoMZXh0ZXJuYWxfdXJsGAQgASgJSAOIAQESKwoOc2xhc2hfY29tbWFuZHMYBiADKAsyEy5yaXZlci5TbGFzaENvbW1hbmQSGQoMZGlzcGxheV9uYW1lGAcgASgJSASIAQESEgoFbW90dG8YCCABKAlIBYgBARInCgxjYXBhYmlsaXRpZXMYCSADKAsyES5yaXZlci5DYXBhYmlsaXR5QgsKCV91c2VybmFtZUIOCgxfZGVzY3JpcHRpb25CDAoKX2ltYWdlX3VybEIPCg1fZXh0ZXJuYWxfdXJsQg8KDV9kaXNwbGF5X25hbWVCCAoGX21vdHRvSgQIBRAGUgphdmF0YXJfdXJsImsKGFVwZGF0ZUFwcE1ldGFkYXRhUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSKgoIbWV0YWRhdGEYAiABKAsyGC5yaXZlci5BcHBNZXRhZGF0YVVwZGF0ZRITCgt1cGRhdGVfbWFzaxgDIAMoCSIbChlVcGRhdGVBcHBNZXRhZGF0YVJlc3BvbnNlIicKFUdldEFwcE1ldGFkYXRhUmVxdWVzdBIOCgZhcHBfaWQYASABKAwiPgoWR2V0QXBwTWV0YWRhdGFSZXNwb25zZRIkCghtZXRhZGF0YRgBIAEoCzISLnJpdmVyLkFwcE1ldGFkYXRhIioKFlZhbGlkYXRlQm90TmFtZVJlcXVlc3QSEAoIdXNlcm5hbWUYASABKAkiRgoXVmFsaWRhdGVCb3ROYW1lUmVzcG9uc2USFAoMaXNfYXZhaWxhYmxlGAEgASgIEhUKDWVycm9yX21lc3NhZ2UYAiABKAkiOwoZU2V0QXBwQWN0aXZlU3RhdHVzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSDgoGYWN0aXZlGAIgASgIIhwKGlNldEFwcEFjdGl2ZVN0YXR1c1Jlc3BvbnNlIj8KG1NldEFwcFByb21vdGVkU3RhdHVzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSEAoIcHJvbW90ZWQYAiABKAgiHgocU2V0QXBwUHJvbW90ZWRTdGF0dXNSZXNwb25zZSI/ChtTZXRBcHBWZXJpZmllZFN0YXR1c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMEhAKCHZlcmlmaWVkGAIgASgIIh4KHFNldEFwcFZlcmlmaWVkU3RhdHVzUmVzcG9uc2UiPAoSU2V0VXNlck5hbWVSZXF1ZXN0EhAKCHVzZXJuYW1lGAEgASgJEhQKDGRpc3BsYXlfbmFtZRgCIAEoCSIVChNTZXRVc2VyTmFtZVJlc3BvbnNlIikKFEdldEVudGl0eU5hbWVSZXF1ZXN0EhEKCWVudGl0eV9pZBgBIAEoDCJUChVHZXRFbnRpdHlOYW1lUmVzcG9uc2USEAoIdXNlcm5hbWUYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJEhMKC2VudGl0eV90eXBlGAMgASgFIjAKGkdldEJhdGNoRW50aXR5TmFtZXNSZXF1ZXN0EhIKCmVudGl0eV9pZHMYASADKAwiYAoORW50aXR5TmFtZUluZm8SEQoJZW50aXR5X2lkGAEgASgMEhAKCHVzZXJuYW1lGAIgASgJEhQKDGRpc3BsYXlfbmFtZRgDIAEoCRITCgtlbnRpdHlfdHlwZRgEIAEoBSJGChtHZXRCYXRjaEVudGl0eU5hbWVzUmVzcG9uc2USJwoIZW50aXRpZXMYASADKAsyFS5yaXZlci5FbnRpdHlOYW1lSW5mbyJCChdJbnZpdGVFbmNyeXB0aW9uU2Vzc2lvbhISCgpzZXNzaW9uX2lkGAEgASgJEhMKC3Nlc3Npb25fa2V5GAIgASgJIm4KFEludml0ZUVuY3J5cHRpb25EYXRhEhEKCXN0cmVhbV9pZBgBIAEoDBIRCglhbGdvcml0aG0YAiABKAkSMAoIc2Vzc2lvbnMYAyADKAsyHi5yaXZlci5JbnZpdGVFbmNyeXB0aW9uU2Vzc2lvbiK7AQoXQ3JlYXRlSW52aXRlTGlua1JlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMEjsKFmludml0ZV9lbmNyeXB0aW9uX2RhdGEYAiABKAsyGy5yaXZlci5JbnZpdGVFbmNyeXB0aW9uRGF0YRI5ChJjaGFubmVsX3Byb3BlcnRpZXMYAyABKAsyGC5yaXZlci5DaGFubmVsUHJvcGVydGllc0gAiAEBQhUKE19jaGFubmVsX3Byb3BlcnRpZXMiLwoYQ3JlYXRlSW52aXRlTGlua1Jlc3BvbnNlEhMKC2ludml0ZV9jb2RlGAEgASgJIiwKF1Jldm9rZUludml0ZUxpbmtSZXF1ZXN0EhEKCXN0cmVhbV9pZBgBIAEoDCIaChhSZXZva2VJbnZpdGVMaW5rUmVzcG9uc2UiLgoXUmVkZWVtSW52aXRlTGlua1JlcXVlc3QSEwoLaW52aXRlX2NvZGUYASABKAki3QEKGFJlZGVlbUludml0ZUxpbmtSZXNwb25zZRIyCg5zaWduZWRfcGF5bG9hZBgBIAEoCzIaLnJpdmVyLkludml0ZVNpZ25lZFBheWxvYWQSOwoWaW52aXRlX2VuY3J5cHRpb25fZGF0YRgCIAEoCzIbLnJpdmVyLkludml0ZUVuY3J5cHRpb25EYXRhEjkKEmNoYW5uZWxfcHJvcGVydGllcxgDIAEoCzIYLnJpdmVyLkNoYW5uZWxQcm9wZXJ0aWVzSACIAQFCFQoTX2NoYW5uZWxfcHJvcGVydGllcyIpChRHZXRJbnZpdGVMaW5rUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwiewoVR2V0SW52aXRlTGlua1Jlc3BvbnNlEhgKC2ludml0ZV9jb2RlGAEgASgJSACIAQESIAoTY3JlYXRlZF9hdF9lcG9jaF9tcxgCIAEoA0gBiAEBQg4KDF9pbnZpdGVfY29kZUIWChRfY3JlYXRlZF9hdF9lcG9jaF9tcyI4Cg9BcHBJbnN0YWxsU3RhdHMSDgoGYXBwX2lkGAEgASgMEhUKDWluc3RhbGxfY291bnQYAiABKAUijQEKCUFwcFJldmlldxIKCgJpZBgBIAEoCRIOCgZhcHBfaWQYAiABKAwSGAoQcmV2aWV3ZXJfYWRkcmVzcxgDIAEoDBIOCgZyYXRpbmcYBCABKAUSDwoHY29tbWVudBgFIAEoCRIVCg1jcmVhdGVkX2F0X21zGAYgASgDEhIKCmlzX3Jldm9rZWQYByABKAgiaQoQQXBwUmV2aWV3U3VtbWFyeRIOCgZhcHBfaWQYASABKAwSFQoNdG90YWxfcmV2aWV3cxgCIAEoBRIWCg5hY3RpdmVfcmV2aWV3cxgDIAEoBRIWCg5hdmVyYWdlX3JhdGluZxgEIAEoAiLvAQoLQXBwSW5mb0Z1bGwSDgoGYXBwX2lkGAEgASgMEg0KBW93bmVyGAIgASgMEiQKCG1ldGFkYXRhGAMgASgLMhIucml2ZXIuQXBwTWV0YWRhdGESLQoNaW5zdGFsbF9zdGF0cxgEIAEoCzIWLnJpdmVyLkFwcEluc3RhbGxTdGF0cxIvCg5yZXZpZXdfc3VtbWFyeRgFIAEoCzIXLnJpdmVyLkFwcFJldmlld1N1bW1hcnkSEQoJaXNfYWN0aXZlGAYgASgIEhMKC2lzX3Byb21vdGVkGAcgASgIEhMKC2lzX3ZlcmlmaWVkGAggASgIIuYBChlMaXN0UmVnaXN0ZXJlZEFwcHNSZXF1ZXN0Eg0KBWxpbWl0GAEgASgFEg4KBm9mZnNldBgCIAEoBRITCgthY3RpdmVfb25seRgDIAEoCBIaCg1vd25lcl9hZGRyZXNzGAQgASgMSACIAQESFgoJc3RyZWFtX2lkGAUgASgMSAGIAQESFQoNcHJvbW90ZWRfb25seRgGIAEoCBIZCgxzZWFyY2hfcXVlcnkYByABKAlIAogBAUIQCg5fb3duZXJfYWRkcmVzc0IMCgpfc3RyZWFtX2lkQg8KDV9zZWFyY2hfcXVlcnkiUwoaTGlzdFJlZ2lzdGVyZWRBcHBzUmVzcG9uc2USIAoEYXBwcxgBIAMoCzISLnJpdmVyLkFwcEluZm9GdWxsEhMKC3RvdGFsX2NvdW50GAIgASgFIigKFUdldEJ1bGtBcHBEYXRhUmVxdWVzdBIPCgdhcHBfaWRzGAEgAygMIjoKFkdldEJ1bGtBcHBEYXRhUmVzcG9uc2USIAoEYXBwcxgBIAMoCzISLnJpdmVyLkFwcEluZm9GdWxsIisKGUdldEFwcEluc3RhbGxTdGF0c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMIkMKGkdldEFwcEluc3RhbGxTdGF0c1Jlc3BvbnNlEiUKBXN0YXRzGAEgASgLMhYucml2ZXIuQXBwSW5zdGFsbFN0YXRzIjAKHUdldEJ1bGtBcHBJbnN0YWxsU3RhdHNSZXF1ZXN0Eg8KB2FwcF9pZHMYASADKAwiRwoeR2V0QnVsa0FwcEluc3RhbGxTdGF0c1Jlc3BvbnNlEiUKBXN0YXRzGAEgAygLMhYucml2ZXIuQXBwSW5zdGFsbFN0YXRzIkkKFlN1Ym1pdEFwcFJldmlld1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMEg4KBnJhdGluZxgCIAEoBRIPCgdjb21tZW50GAMgASgJIiwKF1N1Ym1pdEFwcFJldmlld1Jlc3BvbnNlEhEKCXJldmlld19pZBgBIAEoCSJFChRHZXRBcHBSZXZpZXdzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSDQoFbGltaXQYAiABKAUSDgoGb2Zmc2V0GAMgASgFIk8KFUdldEFwcFJldmlld3NSZXNwb25zZRIhCgdyZXZpZXdzGAEgAygLMhAucml2ZXIuQXBwUmV2aWV3EhMKC3RvdGFsX2NvdW50GAIgASgFIigKFlJldm9rZUFwcFJldmlld1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMIhkKF1Jldm9rZUFwcFJldmlld1Jlc3BvbnNlIiwKGkdldEFwcFJldmlld1N1bW1hcnlSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDCJHChtHZXRBcHBSZXZpZXdTdW1tYXJ5UmVzcG9uc2USKAoHc3VtbWFyeRgBIAEoCzIXLnJpdmVyLkFwcFJldmlld1N1bW1hcnkiMwogR2V0QnVsa0FwcFJldmlld1N1bW1hcmllc1JlcXVlc3QSDwoHYXBwX2lkcxgBIAMoDCJPCiFHZXRCdWxrQXBwUmV2aWV3U3VtbWFyaWVzUmVzcG9uc2USKgoJc3VtbWFyaWVzGAEgAygLMhcucml2ZXIuQXBwUmV2aWV3U3VtbWFyeSIoChZHZXRBcHBQb3NpdGlvbnNSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDCJWChdHZXRBcHBQb3NpdGlvbnNSZXNwb25zZRIOCgZhcHBfaWQYASABKAwSKwoJcG9zaXRpb25zGAIgASgLMhgucml2ZXIuUG9zaXRpb25zUmVzcG9uc2UiLgobR2V0QmF0Y2hBcHBQb3NpdGlvbnNSZXF1ZXN0Eg8KB2FwcF9pZHMYASADKAwiSQocR2V0QmF0Y2hBcHBQb3NpdGlvbnNSZXNwb25zZRIpCgdlbnRyaWVzGAEgAygLMhgucml2ZXIuQXBwUG9zaXRpb25zRW50cnkibgoRQXBwUG9zaXRpb25zRW50cnkSDgoGYXBwX2lkGAEgASgMEisKCXBvc2l0aW9ucxgCIAEoCzIYLnJpdmVyLlBvc2l0aW9uc1Jlc3BvbnNlEhIKBWVycm9yGAMgASgJSACIAQFCCAoGX2Vycm9yIjQKH0dldEJ1bGtBZ2VudENhcGFiaWxpdGllc1JlcXVlc3QSEQoJYWdlbnRfaWRzGAEgAygMIlAKIEdldEJ1bGtBZ2VudENhcGFiaWxpdGllc1Jlc3BvbnNlEiwKCW1hbmlmZXN0cxgBIAMoCzIZLnJpdmVyLkNhcGFiaWxpdHlNYW5pZmVzdCKdAQocR2V0QnVsa0FnZW50UHJvcG9zYWxzUmVxdWVzdBIcChRjb252ZXJzYXRpb25fc2VlZF9pZBgBIAEoCRI3CghyZXF1ZXN0cxgCIAMoCzIlLnJpdmVyLlNwZWNpYWxpc3RDYXBhYmlsaXR5SW52b2NhdGlvbhIXCgp0aW1lb3V0X21zGAMgASgFSACIAQFCDQoLX3RpbWVvdXRfbXMiMQodR2V0QnVsa0FnZW50UHJvcG9zYWxzUmVzcG9uc2USEAoIYWNjZXB0ZWQYASABKAgicgoVUXVlcnlDb25jaWVyZ2VSZXF1ZXN0Eg0KBXF1ZXJ5GAEgASgJEhMKBnNvdXJjZRgCIAEoCUgAiAEBEhkKDGV4dGVybmFsX3JlZhgDIAEoCUgBiAEBQgkKB19zb3VyY2VCDwoNX2V4dGVybmFsX3JlZiI2ChZRdWVyeUNvbmNpZXJnZVJlc3BvbnNlEhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJIi0KGkdldENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0Eg8KB3NlZWRfaWQYASABKAkiowEKG0dldENvbnZlcnNhdGlvblNlZWRSZXNwb25zZRIlCgRzZWVkGAEgASgLMhcucml2ZXIuQ29udmVyc2F0aW9uU2VlZBItCgZzdGF0dXMYAiABKA4yHS5yaXZlci5Db252ZXJzYXRpb25TZWVkU3RhdHVzEi4KD3Byb3Bvc2FsX3N0YXR1cxgDIAEoDjIVLnJpdmVyLlByb3Bvc2FsU3RhdHVzIooBChtTdWJtaXRBZ2VudFByb3Bvc2Fsc1JlcXVlc3QSHAoUY29udmVyc2F0aW9uX3NlZWRfaWQYASABKAkSIgoJcHJvcG9zYWxzGAIgAygLMg8ucml2ZXIuUHJvcG9zYWwSKQoGZXJyb3JzGAMgAygLMhkucml2ZXIuQWdlbnRQcm9wb3NhbEVycm9yIh4KHFN1Ym1pdEFnZW50UHJvcG9zYWxzUmVzcG9uc2UikQEKHUZpbmlzaENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0EhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJEhUKDXJlc3BvbnNlX3RleHQYAiABKAkSHQoVc2VsZWN0ZWRfcHJvcG9zYWxfaWRzGAMgAygJEhwKFGNsYXJpZnlpbmdfcXVlc3Rpb25zGAQgAygJIiAKHkZpbmlzaENvbnZlcnNhdGlvblNlZWRSZXNwb25zZSqpAQoTRm9yd2FyZFNldHRpbmdWYWx1ZRIfChtGT1JXQVJEX1NFVFRJTkdfVU5TUEVDSUZJRUQQABIgChxGT1JXQVJEX1NFVFRJTkdfQUxMX01FU1NBR0VTEAESLgoqRk9SV0FSRF9TRVRUSU5HX01FTlRJT05TX1JFUExJRVNfUkVBQ1RJT05TEAISHwobRk9SV0FSRF9TRVRUSU5HX05PX01FU1NBR0VTEAMqSgoMU3VwcG9ydGVkQXBpEh0KGVNVUFBPUlRFRF9BUElfVU5TUEVDSUZJRUQQABIbChdTVVBQT1JURURfQVBJX1BPU0lUSU9OUxABKmgKDFBvc2l0aW9uVHlwZRIdChlQT1NJVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASGwoXUE9TSVRJT05fVFlQRV9QRVJQRVRVQUwQARIcChhQT1NJVElPTl9UWVBFX1BSRURJQ1RJT04QAjLZGQoSQXBwUmVnaXN0cnlTZXJ2aWNlEjsKCFJlZ2lzdGVyEhYucml2ZXIuUmVnaXN0ZXJSZXF1ZXN0Ghcucml2ZXIuUmVnaXN0ZXJSZXNwb25zZRJQCg9SZWdpc3RlcldlYmhvb2sSHS5yaXZlci5SZWdpc3RlcldlYmhvb2tSZXF1ZXN0Gh4ucml2ZXIuUmVnaXN0ZXJXZWJob29rUmVzcG9uc2USPgoJR2V0U3RhdHVzEhcucml2ZXIuR2V0U3RhdHVzUmVxdWVzdBoYLnJpdmVyLkdldFN0YXR1c1Jlc3BvbnNlEk0KDlNldEFwcFNldHRpbmdzEhwucml2ZXIuU2V0QXBwU2V0dGluZ3NSZXF1ZXN0Gh0ucml2ZXIuU2V0QXBwU2V0dGluZ3NSZXNwb25zZRJWChFVcGRhdGVBcHBTZXR0aW5ncxIfLnJpdmVyLlVwZGF0ZUFwcFNldHRpbmdzUmVxdWVzdBogLnJpdmVyLlVwZGF0ZUFwcFNldHRpbmdzUmVzcG9uc2USTQoOR2V0QXBwU2V0dGluZ3MSHC5yaXZlci5HZXRBcHBTZXR0aW5nc1JlcXVlc3QaHS5yaXZlci5HZXRBcHBTZXR0aW5nc1Jlc3BvbnNlElYKEVVwZGF0ZUFwcE1ldGFkYXRhEh8ucml2ZXIuVXBkYXRlQXBwTWV0YWRhdGFSZXF1ZXN0GiAucml2ZXIuVXBkYXRlQXBwTWV0YWRhdGFSZXNwb25zZRJNCg5HZXRBcHBNZXRhZGF0YRIcLnJpdmVyLkdldEFwcE1ldGFkYXRhUmVxdWVzdBodLnJpdmVyLkdldEFwcE1ldGFkYXRhUmVzcG9uc2USRwoMUm90YXRlU2VjcmV0Ehoucml2ZXIuUm90YXRlU2VjcmV0UmVxdWVzdBobLnJpdmVyLlJvdGF0ZVNlY3JldFJlc3BvbnNlEkEKCkdldFNlc3Npb24SGC5yaXZlci5HZXRTZXNzaW9uUmVxdWVzdBoZLnJpdmVyLkdldFNlc3Npb25SZXNwb25zZRJQCg9WYWxpZGF0ZUJvdE5hbWUSHS5yaXZlci5WYWxpZGF0ZUJvdE5hbWVSZXF1ZXN0Gh4ucml2ZXIuVmFsaWRhdGVCb3ROYW1lUmVzcG9uc2USWQoSU2V0QXBwQWN0aXZlU3RhdHVzEiAucml2ZXIuU2V0QXBwQWN0aXZlU3RhdHVzUmVxdWVzdBohLnJpdmVyLlNldEFwcEFjdGl2ZVN0YXR1c1Jlc3BvbnNlEl8KFFNldEFwcFByb21vdGVkU3RhdHVzEiIucml2ZXIuU2V0QXBwUHJvbW90ZWRTdGF0dXNSZXF1ZXN0GiMucml2ZXIuU2V0QXBwUHJvbW90ZWRTdGF0dXNSZXNwb25zZRJfChRTZXRBcHBWZXJpZmllZFN0YXR1cxIiLnJpdmVyLlNldEFwcFZlcmlmaWVkU3RhdHVzUmVxdWVzdBojLnJpdmVyLlNldEFwcFZlcmlmaWVkU3RhdHVzUmVzcG9uc2USRAoLU2V0VXNlck5hbWUSGS5yaXZlci5TZXRVc2VyTmFtZVJlcXVlc3QaGi5yaXZlci5TZXRVc2VyTmFtZVJlc3BvbnNlEkoKDUdldEVudGl0eU5hbWUSGy5yaXZlci5HZXRFbnRpdHlOYW1lUmVxdWVzdBocLnJpdmVyLkdldEVudGl0eU5hbWVSZXNwb25zZRJcChNHZXRCYXRjaEVudGl0eU5hbWVzEiEucml2ZXIuR2V0QmF0Y2hFbnRpdHlOYW1lc1JlcXVlc3QaIi5yaXZlci5HZXRCYXRjaEVudGl0eU5hbWVzUmVzcG9uc2USUwoQQ3JlYXRlSW52aXRlTGluaxIeLnJpdmVyLkNyZWF0ZUludml0ZUxpbmtSZXF1ZXN0Gh8ucml2ZXIuQ3JlYXRlSW52aXRlTGlua1Jlc3BvbnNlElMKEFJldm9rZUludml0ZUxpbmsSHi5yaXZlci5SZXZva2VJbnZpdGVMaW5rUmVxdWVzdBofLnJpdmVyLlJldm9rZUludml0ZUxpbmtSZXNwb25zZRJTChBSZWRlZW1JbnZpdGVMaW5rEh4ucml2ZXIuUmVkZWVtSW52aXRlTGlua1JlcXVlc3QaHy5yaXZlci5SZWRlZW1JbnZpdGVMaW5rUmVzcG9uc2USSgoNR2V0SW52aXRlTGluaxIbLnJpdmVyLkdldEludml0ZUxpbmtSZXF1ZXN0Ghwucml2ZXIuR2V0SW52aXRlTGlua1Jlc3BvbnNlElkKEkxpc3RSZWdpc3RlcmVkQXBwcxIgLnJpdmVyLkxpc3RSZWdpc3RlcmVkQXBwc1JlcXVlc3QaIS5yaXZlci5MaXN0UmVnaXN0ZXJlZEFwcHNSZXNwb25zZRJNCg5HZXRCdWxrQXBwRGF0YRIcLnJpdmVyLkdldEJ1bGtBcHBEYXRhUmVxdWVzdBodLnJpdmVyLkdldEJ1bGtBcHBEYXRhUmVzcG9uc2USWQoSR2V0QXBwSW5zdGFsbFN0YXRzEiAucml2ZXIuR2V0QXBwSW5zdGFsbFN0YXRzUmVxdWVzdBohLnJpdmVyLkdldEFwcEluc3RhbGxTdGF0c1Jlc3BvbnNlEmUKFkdldEJ1bGtBcHBJbnN0YWxsU3RhdHMSJC5yaXZlci5HZXRCdWxrQXBwSW5zdGFsbFN0YXRzUmVxdWVzdBolLnJpdmVyLkdldEJ1bGtBcHBJbnN0YWxsU3RhdHNSZXNwb25zZRJQCg9TdWJtaXRBcHBSZXZpZXcSHS5yaXZlci5TdWJtaXRBcHBSZXZpZXdSZXF1ZXN0Gh4ucml2ZXIuU3VibWl0QXBwUmV2aWV3UmVzcG9uc2USSgoNR2V0QXBwUmV2aWV3cxIbLnJpdmVyLkdldEFwcFJldmlld3NSZXF1ZXN0Ghwucml2ZXIuR2V0QXBwUmV2aWV3c1Jlc3BvbnNlElAKD1Jldm9rZUFwcFJldmlldxIdLnJpdmVyLlJldm9rZUFwcFJldmlld1JlcXVlc3QaHi5yaXZlci5SZXZva2VBcHBSZXZpZXdSZXNwb25zZRJcChNHZXRBcHBSZXZpZXdTdW1tYXJ5EiEucml2ZXIuR2V0QXBwUmV2aWV3U3VtbWFyeVJlcXVlc3QaIi5yaXZlci5HZXRBcHBSZXZpZXdTdW1tYXJ5UmVzcG9uc2USbgoZR2V0QnVsa0FwcFJldmlld1N1bW1hcmllcxInLnJpdmVyLkdldEJ1bGtBcHBSZXZpZXdTdW1tYXJpZXNSZXF1ZXN0Gigucml2ZXIuR2V0QnVsa0FwcFJldmlld1N1bW1hcmllc1Jlc3BvbnNlElAKD0dldEFwcFBvc2l0aW9ucxIdLnJpdmVyLkdldEFwcFBvc2l0aW9uc1JlcXVlc3QaHi5yaXZlci5HZXRBcHBQb3NpdGlvbnNSZXNwb25zZRJfChRHZXRCYXRjaEFwcFBvc2l0aW9ucxIiLnJpdmVyLkdldEJhdGNoQXBwUG9zaXRpb25zUmVxdWVzdBojLnJpdmVyLkdldEJhdGNoQXBwUG9zaXRpb25zUmVzcG9uc2USawoYR2V0QnVsa0FnZW50Q2FwYWJpbGl0aWVzEiYucml2ZXIuR2V0QnVsa0FnZW50Q2FwYWJpbGl0aWVzUmVxdWVzdBonLnJpdmVyLkdldEJ1bGtBZ2VudENhcGFiaWxpdGllc1Jlc3BvbnNlEmIKFUdldEJ1bGtBZ2VudFByb3Bvc2FscxIjLnJpdmVyLkdldEJ1bGtBZ2VudFByb3Bvc2Fsc1JlcXVlc3QaJC5yaXZlci5HZXRCdWxrQWdlbnRQcm9wb3NhbHNSZXNwb25zZRJNCg5RdWVyeUNvbmNpZXJnZRIcLnJpdmVyLlF1ZXJ5Q29uY2llcmdlUmVxdWVzdBodLnJpdmVyLlF1ZXJ5Q29uY2llcmdlUmVzcG9uc2USXAoTR2V0Q29udmVyc2F0aW9uU2VlZBIhLnJpdmVyLkdldENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0GiIucml2ZXIuR2V0Q29udmVyc2F0aW9uU2VlZFJlc3BvbnNlEl8KFFN1Ym1pdEFnZW50UHJvcG9zYWxzEiIucml2ZXIuU3VibWl0QWdlbnRQcm9wb3NhbHNSZXF1ZXN0GiMucml2ZXIuU3VibWl0QWdlbnRQcm9wb3NhbHNSZXNwb25zZRJlChZGaW5pc2hDb252ZXJzYXRpb25TZWVkEiQucml2ZXIuRmluaXNoQ29udmVyc2F0aW9uU2VlZFJlcXVlc3QaJS5yaXZlci5GaW5pc2hDb252ZXJzYXRpb25TZWVkUmVzcG9uc2VCNFoyZ2l0aHViLmNvbS90b3ducy1wcm90b2NvbC90b3ducy9jb3JlL25vZGUvcHJvdG9jb2xiBnByb3RvMw", [import_wkt3.file_google_protobuf_empty, file_payloads, file_protocol]);
7780
+ var file_apps = /* @__PURE__ */ (0, import_codegenv23.fileDesc)("CgphcHBzLnByb3RvEgVyaXZlciKFAQoLQXBwU2V0dGluZ3MSMwoPZm9yd2FyZF9zZXR0aW5nGAEgASgOMhoucml2ZXIuRm9yd2FyZFNldHRpbmdWYWx1ZRIUCgh0cmFkYWJsZRgCIAEoCEICGAESKwoOc3VwcG9ydGVkX2FwaXMYAyADKA4yEy5yaXZlci5TdXBwb3J0ZWRBcGkigwEKD1JlZ2lzdGVyUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSFAoMYXBwX293bmVyX2lkGAIgASgMEiQKCHNldHRpbmdzGAMgASgLMhIucml2ZXIuQXBwU2V0dGluZ3MSJAoIbWV0YWRhdGEYBCABKAsyEi5yaXZlci5BcHBNZXRhZGF0YSIvChBSZWdpc3RlclJlc3BvbnNlEhsKE2hzMjU2X3NoYXJlZF9zZWNyZXQYASABKAwiPQoWUmVnaXN0ZXJXZWJob29rUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSEwoLd2ViaG9va191cmwYAiABKAkiGQoXUmVnaXN0ZXJXZWJob29rUmVzcG9uc2UiTQoVU2V0QXBwU2V0dGluZ3NSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDBIkCghzZXR0aW5ncxgCIAEoCzISLnJpdmVyLkFwcFNldHRpbmdzIhgKFlNldEFwcFNldHRpbmdzUmVzcG9uc2UiugEKGFVwZGF0ZUFwcFNldHRpbmdzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwSOAoPZm9yd2FyZF9zZXR0aW5nGAIgASgOMhoucml2ZXIuRm9yd2FyZFNldHRpbmdWYWx1ZUgAiAEBEisKDnN1cHBvcnRlZF9hcGlzGAMgAygOMhMucml2ZXIuU3VwcG9ydGVkQXBpEhMKC3VwZGF0ZV9tYXNrGAQgAygJQhIKEF9mb3J3YXJkX3NldHRpbmciGwoZVXBkYXRlQXBwU2V0dGluZ3NSZXNwb25zZSInChVHZXRBcHBTZXR0aW5nc1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMImgKFkdldEFwcFNldHRpbmdzUmVzcG9uc2USJAoIc2V0dGluZ3MYASABKAsyEi5yaXZlci5BcHBTZXR0aW5ncxIYCgt3ZWJob29rX3VybBgCIAEoCUgAiAEBQg4KDF93ZWJob29rX3VybCIlChNSb3RhdGVTZWNyZXRSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDCIzChRSb3RhdGVTZWNyZXRSZXNwb25zZRIbChNoczI1Nl9zaGFyZWRfc2VjcmV0GAEgASgMIiIKEEdldFN0YXR1c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMIowBChFHZXRTdGF0dXNSZXNwb25zZRIVCg1pc19yZWdpc3RlcmVkGAEgASgIEhYKDnZhbGlkX3Jlc3BvbnNlGAIgASgIEjgKBnN0YXR1cxgDIAEoCzIoLnJpdmVyLkFwcFNlcnZpY2VSZXNwb25zZS5TdGF0dXNSZXNwb25zZRIOCgZhY3RpdmUYBCABKAgiXAoRR2V0U2Vzc2lvblJlcXVlc3QSDgoGYXBwX2lkGAEgASgMEhQKCnNlc3Npb25faWQYAiABKAlIABITCglzdHJlYW1faWQYAyABKAxIAEIMCgppZGVudGlmaWVyIkgKEkdldFNlc3Npb25SZXNwb25zZRIyChlncm91cF9lbmNyeXB0aW9uX3Nlc3Npb25zGAEgASgLMg8ucml2ZXIuRW52ZWxvcGUiugIKDEV2ZW50UGF5bG9hZBIwCghtZXNzYWdlcxgBIAEoCzIcLnJpdmVyLkV2ZW50UGF5bG9hZC5NZXNzYWdlc0gAEjcKDHNvbGljaXRhdGlvbhgCIAEoCzIfLnJpdmVyLkV2ZW50UGF5bG9hZC5Tb2xpY2l0S2V5c0gAGn0KCE1lc3NhZ2VzEhEKCXN0cmVhbV9pZBgBIAEoDBIhCghtZXNzYWdlcxgCIAMoCzIPLnJpdmVyLkVudmVsb3BlEjsKImdyb3VwX2VuY3J5cHRpb25fc2Vzc2lvbnNfbWVzc2FnZXMYAyADKAsyDy5yaXZlci5FbnZlbG9wZRo1CgtTb2xpY2l0S2V5cxIRCglzdHJlYW1faWQYASABKAwSEwoLc2Vzc2lvbl9pZHMYAiADKAlCCQoHcGF5bG9hZCI0Cg1FdmVudHNQYXlsb2FkEiMKBmV2ZW50cxgBIAMoCzITLnJpdmVyLkV2ZW50UGF5bG9hZCLaBgoRQXBwU2VydmljZVJlcXVlc3QSLAoKaW5pdGlhbGl6ZRhlIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEigKBnN0YXR1cxhmIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEiYKBmV2ZW50cxhnIAEoCzIULnJpdmVyLkV2ZW50c1BheWxvYWRIABIsCglwb3NpdGlvbnMYaCABKAsyFy5yaXZlci5Qb3NpdGlvbnNSZXF1ZXN0SAASPgoJcHJvcG9zYWxzGGkgASgLMikucml2ZXIuQXBwU2VydmljZVJlcXVlc3QuUHJvcG9zYWxzUmVxdWVzdEgAEkYKEWNvbmNpZXJnZV9yZXF1ZXN0GGogASgLMikucml2ZXIuQXBwU2VydmljZVJlcXVlc3QuQ29uY2llcmdlUmVxdWVzdEgAGsoBChBQcm9wb3NhbHNSZXF1ZXN0EhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJEhIKCnVzZXJfcXVlcnkYAiABKAkSFAoHY29udGV4dBgDIAEoCUgAiAEBEjoKC2ludm9jYXRpb25zGAQgAygLMiUucml2ZXIuU3BlY2lhbGlzdENhcGFiaWxpdHlJbnZvY2F0aW9uEhcKCnRpbWVvdXRfbXMYBSABKAVIAYgBAUIKCghfY29udGV4dEINCgtfdGltZW91dF9tcxq2AgoQQ29uY2llcmdlUmVxdWVzdBIcChRjb252ZXJzYXRpb25fc2VlZF9pZBgBIAEoCRISCgp1c2VyX3F1ZXJ5GAIgASgJEhQKB2NvbnRleHQYAyABKAlIAIgBARIZCgxleHRlcm5hbF9yZWYYBCABKAlIAYgBARIgChNwcm9wb3NhbF90aW1lb3V0X21zGAUgASgDSAKIAQESIQoUY29uY2llcmdlX3RpbWVvdXRfbXMYBiABKANIA4gBARIaCg11c2VyX3RpbWV6b25lGAcgASgJSASIAQFCCgoIX2NvbnRleHRCDwoNX2V4dGVybmFsX3JlZkIWChRfcHJvcG9zYWxfdGltZW91dF9tc0IXChVfY29uY2llcmdlX3RpbWVvdXRfbXNCEAoOX3VzZXJfdGltZXpvbmVCCQoHcGF5bG9hZCKPBQoSQXBwU2VydmljZVJlc3BvbnNlEkIKCmluaXRpYWxpemUYZSABKAsyLC5yaXZlci5BcHBTZXJ2aWNlUmVzcG9uc2UuSW5pdGlhbGl6ZVJlc3BvbnNlSAASOgoGc3RhdHVzGGYgASgLMigucml2ZXIuQXBwU2VydmljZVJlc3BvbnNlLlN0YXR1c1Jlc3BvbnNlSAASLQoJcG9zaXRpb25zGGcgASgLMhgucml2ZXIuUG9zaXRpb25zUmVzcG9uc2VIABJACglwcm9wb3NhbHMYaCABKAsyKy5yaXZlci5BcHBTZXJ2aWNlUmVzcG9uc2UuUHJvcG9zYWxzUmVzcG9uc2VIABJJChJjb25jaWVyZ2VfcmVzcG9uc2UYaSABKAsyKy5yaXZlci5BcHBTZXJ2aWNlUmVzcG9uc2UuQ29uY2llcmdlUmVzcG9uc2VIABpcChJJbml0aWFsaXplUmVzcG9uc2USRgoRZW5jcnlwdGlvbl9kZXZpY2UYASABKAsyKy5yaXZlci5Vc2VyTWV0YWRhdGFQYXlsb2FkLkVuY3J5cHRpb25EZXZpY2UahQEKDlN0YXR1c1Jlc3BvbnNlEhkKEWZyYW1ld29ya192ZXJzaW9uGAEgASgFEhIKCmRldmljZV9rZXkYAiABKAkSFAoMZmFsbGJhY2tfa2V5GAMgASgJEhsKDmNsaWVudF92ZXJzaW9uGAQgASgJSACIAQFCEQoPX2NsaWVudF92ZXJzaW9uGiUKEVByb3Bvc2Fsc1Jlc3BvbnNlEhAKCGFjY2VwdGVkGAEgASgIGiUKEUNvbmNpZXJnZVJlc3BvbnNlEhAKCGFjY2VwdGVkGAEgASgIQgkKB3BheWxvYWQi8AEKCFBvc2l0aW9uEg0KBWxhYmVsGAEgASgJEhgKC2Rlc2NyaXB0aW9uGAIgASgJSACIAQESDgoGc3ltYm9sGAMgASgJEiEKBHR5cGUYBCABKA4yEy5yaXZlci5Qb3NpdGlvblR5cGUSEwoLYmFsYW5jZV91c2QYBSABKAkSDwoHcG5sX3VzZBgGIAEoCRIVCghjaGFpbl9pZBgHIAEoBEgBiAEBEhsKDm5hdGl2ZV9iYWxhbmNlGAggASgJSAKIAQFCDgoMX2Rlc2NyaXB0aW9uQgsKCV9jaGFpbl9pZEIRCg9fbmF0aXZlX2JhbGFuY2UiIwoQUG9zaXRpb25zUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgMInsKEVBvc2l0aW9uc1Jlc3BvbnNlEhEKCXN1cHBvcnRlZBgBIAEoCBISCgVlcnJvchgCIAEoCUgAiAEBEiIKCXBvc2l0aW9ucxgDIAMoCzIPLnJpdmVyLlBvc2l0aW9uEhEKCXRpbWVzdGFtcBgEIAEoA0IICgZfZXJyb3IiMQoMU2xhc2hDb21tYW5kEgwKBG5hbWUYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkiOwoRQ2FwYWJpbGl0eUV4YW1wbGUSEgoKdXNlcl9xdWVyeRgBIAEoCRISCgpwYXJhbWV0ZXJzGAIgASgJInEKCkNhcGFiaWxpdHkSDAoEbmFtZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCRIUCgxpbnB1dF9zY2hlbWEYAyABKAkSKgoIZXhhbXBsZXMYBCADKAsyGC5yaXZlci5DYXBhYmlsaXR5RXhhbXBsZSKPAQoSQ2FwYWJpbGl0eU1hbmlmZXN0EhAKCGFnZW50X2lkGAEgASgMEhIKCmFnZW50X25hbWUYAiABKAkSGQoRYWdlbnRfZGVzY3JpcHRpb24YAyABKAkSJwoMY2FwYWJpbGl0aWVzGAQgAygLMhEucml2ZXIuQ2FwYWJpbGl0eRIPCgd2ZXJzaW9uGAUgASgJIoACCgtBcHBNZXRhZGF0YRIQCgh1c2VybmFtZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCRIRCglpbWFnZV91cmwYAyABKAkSGQoMZXh0ZXJuYWxfdXJsGAQgASgJSACIAQESKwoOc2xhc2hfY29tbWFuZHMYBiADKAsyEy5yaXZlci5TbGFzaENvbW1hbmQSFAoMZGlzcGxheV9uYW1lGAcgASgJEg0KBW1vdHRvGAggASgJEicKDGNhcGFiaWxpdGllcxgJIAMoCzIRLnJpdmVyLkNhcGFiaWxpdHlCDwoNX2V4dGVybmFsX3VybEoECAUQBlIKYXZhdGFyX3VybCLlAgoRQXBwTWV0YWRhdGFVcGRhdGUSFQoIdXNlcm5hbWUYASABKAlIAIgBARIYCgtkZXNjcmlwdGlvbhgCIAEoCUgBiAEBEhYKCWltYWdlX3VybBgDIAEoCUgCiAEBEhkKDGV4dGVybmFsX3VybBgEIAEoCUgDiAEBEisKDnNsYXNoX2NvbW1hbmRzGAYgAygLMhMucml2ZXIuU2xhc2hDb21tYW5kEhkKDGRpc3BsYXlfbmFtZRgHIAEoCUgEiAEBEhIKBW1vdHRvGAggASgJSAWIAQESJwoMY2FwYWJpbGl0aWVzGAkgAygLMhEucml2ZXIuQ2FwYWJpbGl0eUILCglfdXNlcm5hbWVCDgoMX2Rlc2NyaXB0aW9uQgwKCl9pbWFnZV91cmxCDwoNX2V4dGVybmFsX3VybEIPCg1fZGlzcGxheV9uYW1lQggKBl9tb3R0b0oECAUQBlIKYXZhdGFyX3VybCJrChhVcGRhdGVBcHBNZXRhZGF0YVJlcXVlc3QSDgoGYXBwX2lkGAEgASgMEioKCG1ldGFkYXRhGAIgASgLMhgucml2ZXIuQXBwTWV0YWRhdGFVcGRhdGUSEwoLdXBkYXRlX21hc2sYAyADKAkiGwoZVXBkYXRlQXBwTWV0YWRhdGFSZXNwb25zZSInChVHZXRBcHBNZXRhZGF0YVJlcXVlc3QSDgoGYXBwX2lkGAEgASgMIj4KFkdldEFwcE1ldGFkYXRhUmVzcG9uc2USJAoIbWV0YWRhdGEYASABKAsyEi5yaXZlci5BcHBNZXRhZGF0YSIqChZWYWxpZGF0ZUJvdE5hbWVSZXF1ZXN0EhAKCHVzZXJuYW1lGAEgASgJIkYKF1ZhbGlkYXRlQm90TmFtZVJlc3BvbnNlEhQKDGlzX2F2YWlsYWJsZRgBIAEoCBIVCg1lcnJvcl9tZXNzYWdlGAIgASgJIjsKGVNldEFwcEFjdGl2ZVN0YXR1c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMEg4KBmFjdGl2ZRgCIAEoCCIcChpTZXRBcHBBY3RpdmVTdGF0dXNSZXNwb25zZSI/ChtTZXRBcHBQcm9tb3RlZFN0YXR1c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMEhAKCHByb21vdGVkGAIgASgIIh4KHFNldEFwcFByb21vdGVkU3RhdHVzUmVzcG9uc2UiPwobU2V0QXBwVmVyaWZpZWRTdGF0dXNSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDBIQCgh2ZXJpZmllZBgCIAEoCCIeChxTZXRBcHBWZXJpZmllZFN0YXR1c1Jlc3BvbnNlIjwKElNldFVzZXJOYW1lUmVxdWVzdBIQCgh1c2VybmFtZRgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkiFQoTU2V0VXNlck5hbWVSZXNwb25zZSIpChRHZXRFbnRpdHlOYW1lUmVxdWVzdBIRCgllbnRpdHlfaWQYASABKAwiVAoVR2V0RW50aXR5TmFtZVJlc3BvbnNlEhAKCHVzZXJuYW1lGAEgASgJEhQKDGRpc3BsYXlfbmFtZRgCIAEoCRITCgtlbnRpdHlfdHlwZRgDIAEoBSIwChpHZXRCYXRjaEVudGl0eU5hbWVzUmVxdWVzdBISCgplbnRpdHlfaWRzGAEgAygMImAKDkVudGl0eU5hbWVJbmZvEhEKCWVudGl0eV9pZBgBIAEoDBIQCgh1c2VybmFtZRgCIAEoCRIUCgxkaXNwbGF5X25hbWUYAyABKAkSEwoLZW50aXR5X3R5cGUYBCABKAUiRgobR2V0QmF0Y2hFbnRpdHlOYW1lc1Jlc3BvbnNlEicKCGVudGl0aWVzGAEgAygLMhUucml2ZXIuRW50aXR5TmFtZUluZm8iQgoXSW52aXRlRW5jcnlwdGlvblNlc3Npb24SEgoKc2Vzc2lvbl9pZBgBIAEoCRITCgtzZXNzaW9uX2tleRgCIAEoCSJuChRJbnZpdGVFbmNyeXB0aW9uRGF0YRIRCglzdHJlYW1faWQYASABKAwSEQoJYWxnb3JpdGhtGAIgASgJEjAKCHNlc3Npb25zGAMgAygLMh4ucml2ZXIuSW52aXRlRW5jcnlwdGlvblNlc3Npb24iuwEKF0NyZWF0ZUludml0ZUxpbmtSZXF1ZXN0EhEKCXN0cmVhbV9pZBgBIAEoDBI7ChZpbnZpdGVfZW5jcnlwdGlvbl9kYXRhGAIgASgLMhsucml2ZXIuSW52aXRlRW5jcnlwdGlvbkRhdGESOQoSY2hhbm5lbF9wcm9wZXJ0aWVzGAMgASgLMhgucml2ZXIuQ2hhbm5lbFByb3BlcnRpZXNIAIgBAUIVChNfY2hhbm5lbF9wcm9wZXJ0aWVzIi8KGENyZWF0ZUludml0ZUxpbmtSZXNwb25zZRITCgtpbnZpdGVfY29kZRgBIAEoCSIsChdSZXZva2VJbnZpdGVMaW5rUmVxdWVzdBIRCglzdHJlYW1faWQYASABKAwiGgoYUmV2b2tlSW52aXRlTGlua1Jlc3BvbnNlIi4KF1JlZGVlbUludml0ZUxpbmtSZXF1ZXN0EhMKC2ludml0ZV9jb2RlGAEgASgJIt0BChhSZWRlZW1JbnZpdGVMaW5rUmVzcG9uc2USMgoOc2lnbmVkX3BheWxvYWQYASABKAsyGi5yaXZlci5JbnZpdGVTaWduZWRQYXlsb2FkEjsKFmludml0ZV9lbmNyeXB0aW9uX2RhdGEYAiABKAsyGy5yaXZlci5JbnZpdGVFbmNyeXB0aW9uRGF0YRI5ChJjaGFubmVsX3Byb3BlcnRpZXMYAyABKAsyGC5yaXZlci5DaGFubmVsUHJvcGVydGllc0gAiAEBQhUKE19jaGFubmVsX3Byb3BlcnRpZXMiKQoUR2V0SW52aXRlTGlua1JlcXVlc3QSEQoJc3RyZWFtX2lkGAEgASgMInsKFUdldEludml0ZUxpbmtSZXNwb25zZRIYCgtpbnZpdGVfY29kZRgBIAEoCUgAiAEBEiAKE2NyZWF0ZWRfYXRfZXBvY2hfbXMYAiABKANIAYgBAUIOCgxfaW52aXRlX2NvZGVCFgoUX2NyZWF0ZWRfYXRfZXBvY2hfbXMiOAoPQXBwSW5zdGFsbFN0YXRzEg4KBmFwcF9pZBgBIAEoDBIVCg1pbnN0YWxsX2NvdW50GAIgASgFIo0BCglBcHBSZXZpZXcSCgoCaWQYASABKAkSDgoGYXBwX2lkGAIgASgMEhgKEHJldmlld2VyX2FkZHJlc3MYAyABKAwSDgoGcmF0aW5nGAQgASgFEg8KB2NvbW1lbnQYBSABKAkSFQoNY3JlYXRlZF9hdF9tcxgGIAEoAxISCgppc19yZXZva2VkGAcgASgIImkKEEFwcFJldmlld1N1bW1hcnkSDgoGYXBwX2lkGAEgASgMEhUKDXRvdGFsX3Jldmlld3MYAiABKAUSFgoOYWN0aXZlX3Jldmlld3MYAyABKAUSFgoOYXZlcmFnZV9yYXRpbmcYBCABKAIi7wEKC0FwcEluZm9GdWxsEg4KBmFwcF9pZBgBIAEoDBINCgVvd25lchgCIAEoDBIkCghtZXRhZGF0YRgDIAEoCzISLnJpdmVyLkFwcE1ldGFkYXRhEi0KDWluc3RhbGxfc3RhdHMYBCABKAsyFi5yaXZlci5BcHBJbnN0YWxsU3RhdHMSLwoOcmV2aWV3X3N1bW1hcnkYBSABKAsyFy5yaXZlci5BcHBSZXZpZXdTdW1tYXJ5EhEKCWlzX2FjdGl2ZRgGIAEoCBITCgtpc19wcm9tb3RlZBgHIAEoCBITCgtpc192ZXJpZmllZBgIIAEoCCLmAQoZTGlzdFJlZ2lzdGVyZWRBcHBzUmVxdWVzdBINCgVsaW1pdBgBIAEoBRIOCgZvZmZzZXQYAiABKAUSEwoLYWN0aXZlX29ubHkYAyABKAgSGgoNb3duZXJfYWRkcmVzcxgEIAEoDEgAiAEBEhYKCXN0cmVhbV9pZBgFIAEoDEgBiAEBEhUKDXByb21vdGVkX29ubHkYBiABKAgSGQoMc2VhcmNoX3F1ZXJ5GAcgASgJSAKIAQFCEAoOX293bmVyX2FkZHJlc3NCDAoKX3N0cmVhbV9pZEIPCg1fc2VhcmNoX3F1ZXJ5IlMKGkxpc3RSZWdpc3RlcmVkQXBwc1Jlc3BvbnNlEiAKBGFwcHMYASADKAsyEi5yaXZlci5BcHBJbmZvRnVsbBITCgt0b3RhbF9jb3VudBgCIAEoBSIoChVHZXRCdWxrQXBwRGF0YVJlcXVlc3QSDwoHYXBwX2lkcxgBIAMoDCI6ChZHZXRCdWxrQXBwRGF0YVJlc3BvbnNlEiAKBGFwcHMYASADKAsyEi5yaXZlci5BcHBJbmZvRnVsbCIrChlHZXRBcHBJbnN0YWxsU3RhdHNSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDCJDChpHZXRBcHBJbnN0YWxsU3RhdHNSZXNwb25zZRIlCgVzdGF0cxgBIAEoCzIWLnJpdmVyLkFwcEluc3RhbGxTdGF0cyIwCh1HZXRCdWxrQXBwSW5zdGFsbFN0YXRzUmVxdWVzdBIPCgdhcHBfaWRzGAEgAygMIkcKHkdldEJ1bGtBcHBJbnN0YWxsU3RhdHNSZXNwb25zZRIlCgVzdGF0cxgBIAMoCzIWLnJpdmVyLkFwcEluc3RhbGxTdGF0cyJJChZTdWJtaXRBcHBSZXZpZXdSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDBIOCgZyYXRpbmcYAiABKAUSDwoHY29tbWVudBgDIAEoCSIsChdTdWJtaXRBcHBSZXZpZXdSZXNwb25zZRIRCglyZXZpZXdfaWQYASABKAkiRQoUR2V0QXBwUmV2aWV3c1JlcXVlc3QSDgoGYXBwX2lkGAEgASgMEg0KBWxpbWl0GAIgASgFEg4KBm9mZnNldBgDIAEoBSJPChVHZXRBcHBSZXZpZXdzUmVzcG9uc2USIQoHcmV2aWV3cxgBIAMoCzIQLnJpdmVyLkFwcFJldmlldxITCgt0b3RhbF9jb3VudBgCIAEoBSIoChZSZXZva2VBcHBSZXZpZXdSZXF1ZXN0Eg4KBmFwcF9pZBgBIAEoDCIZChdSZXZva2VBcHBSZXZpZXdSZXNwb25zZSIsChpHZXRBcHBSZXZpZXdTdW1tYXJ5UmVxdWVzdBIOCgZhcHBfaWQYASABKAwiRwobR2V0QXBwUmV2aWV3U3VtbWFyeVJlc3BvbnNlEigKB3N1bW1hcnkYASABKAsyFy5yaXZlci5BcHBSZXZpZXdTdW1tYXJ5IjMKIEdldEJ1bGtBcHBSZXZpZXdTdW1tYXJpZXNSZXF1ZXN0Eg8KB2FwcF9pZHMYASADKAwiTwohR2V0QnVsa0FwcFJldmlld1N1bW1hcmllc1Jlc3BvbnNlEioKCXN1bW1hcmllcxgBIAMoCzIXLnJpdmVyLkFwcFJldmlld1N1bW1hcnkiKAoWR2V0QXBwUG9zaXRpb25zUmVxdWVzdBIOCgZhcHBfaWQYASABKAwiVgoXR2V0QXBwUG9zaXRpb25zUmVzcG9uc2USDgoGYXBwX2lkGAEgASgMEisKCXBvc2l0aW9ucxgCIAEoCzIYLnJpdmVyLlBvc2l0aW9uc1Jlc3BvbnNlIi4KG0dldEJhdGNoQXBwUG9zaXRpb25zUmVxdWVzdBIPCgdhcHBfaWRzGAEgAygMIkkKHEdldEJhdGNoQXBwUG9zaXRpb25zUmVzcG9uc2USKQoHZW50cmllcxgBIAMoCzIYLnJpdmVyLkFwcFBvc2l0aW9uc0VudHJ5Im4KEUFwcFBvc2l0aW9uc0VudHJ5Eg4KBmFwcF9pZBgBIAEoDBIrCglwb3NpdGlvbnMYAiABKAsyGC5yaXZlci5Qb3NpdGlvbnNSZXNwb25zZRISCgVlcnJvchgDIAEoCUgAiAEBQggKBl9lcnJvciI0Ch9HZXRCdWxrQWdlbnRDYXBhYmlsaXRpZXNSZXF1ZXN0EhEKCWFnZW50X2lkcxgBIAMoDCJQCiBHZXRCdWxrQWdlbnRDYXBhYmlsaXRpZXNSZXNwb25zZRIsCgltYW5pZmVzdHMYASADKAsyGS5yaXZlci5DYXBhYmlsaXR5TWFuaWZlc3QinQEKHEdldEJ1bGtBZ2VudFByb3Bvc2Fsc1JlcXVlc3QSHAoUY29udmVyc2F0aW9uX3NlZWRfaWQYASABKAkSNwoIcmVxdWVzdHMYAiADKAsyJS5yaXZlci5TcGVjaWFsaXN0Q2FwYWJpbGl0eUludm9jYXRpb24SFwoKdGltZW91dF9tcxgDIAEoBUgAiAEBQg0KC190aW1lb3V0X21zIjEKHUdldEJ1bGtBZ2VudFByb3Bvc2Fsc1Jlc3BvbnNlEhAKCGFjY2VwdGVkGAEgASgIIqABChVRdWVyeUNvbmNpZXJnZVJlcXVlc3QSDQoFcXVlcnkYASABKAkSEwoGc291cmNlGAIgASgJSACIAQESGQoMZXh0ZXJuYWxfcmVmGAMgASgJSAGIAQESGgoNdXNlcl90aW1lem9uZRgEIAEoCUgCiAEBQgkKB19zb3VyY2VCDwoNX2V4dGVybmFsX3JlZkIQCg5fdXNlcl90aW1lem9uZSI2ChZRdWVyeUNvbmNpZXJnZVJlc3BvbnNlEhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJIi0KGkdldENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0Eg8KB3NlZWRfaWQYASABKAkiowEKG0dldENvbnZlcnNhdGlvblNlZWRSZXNwb25zZRIlCgRzZWVkGAEgASgLMhcucml2ZXIuQ29udmVyc2F0aW9uU2VlZBItCgZzdGF0dXMYAiABKA4yHS5yaXZlci5Db252ZXJzYXRpb25TZWVkU3RhdHVzEi4KD3Byb3Bvc2FsX3N0YXR1cxgDIAEoDjIVLnJpdmVyLlByb3Bvc2FsU3RhdHVzIooBChtTdWJtaXRBZ2VudFByb3Bvc2Fsc1JlcXVlc3QSHAoUY29udmVyc2F0aW9uX3NlZWRfaWQYASABKAkSIgoJcHJvcG9zYWxzGAIgAygLMg8ucml2ZXIuUHJvcG9zYWwSKQoGZXJyb3JzGAMgAygLMhkucml2ZXIuQWdlbnRQcm9wb3NhbEVycm9yIh4KHFN1Ym1pdEFnZW50UHJvcG9zYWxzUmVzcG9uc2UivwEKHUZpbmlzaENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0EhwKFGNvbnZlcnNhdGlvbl9zZWVkX2lkGAEgASgJEhUKDXJlc3BvbnNlX3RleHQYAiABKAkSHQoVc2VsZWN0ZWRfcHJvcG9zYWxfaWRzGAMgAygJEhwKFGNsYXJpZnlpbmdfcXVlc3Rpb25zGAQgAygJEiwKBnN0YXR1cxgFIAEoDjIcLnJpdmVyLkNvbmNpZXJnZUZpbmlzaFN0YXR1cyIgCh5GaW5pc2hDb252ZXJzYXRpb25TZWVkUmVzcG9uc2UiKAoWR2V0RW50aXRsZW1lbnRzUmVxdWVzdBIOCgZhcHBfaWQYASABKAwipgEKF0dldEVudGl0bGVtZW50c1Jlc3BvbnNlEhgKEGNhbl9zZXRfcHJvbW90ZWQYASABKAgSGAoQY2FuX3NldF92ZXJpZmllZBgCIAEoCBIWCg5jYW5fc2V0X2FjdGl2ZRgDIAEoCBIbChNjYW5fdXBkYXRlX21ldGFkYXRhGAQgASgIEhAKCGlzX293bmVyGAUgASgIEhAKCGlzX2FkbWluGAYgASgIKqkBChNGb3J3YXJkU2V0dGluZ1ZhbHVlEh8KG0ZPUldBUkRfU0VUVElOR19VTlNQRUNJRklFRBAAEiAKHEZPUldBUkRfU0VUVElOR19BTExfTUVTU0FHRVMQARIuCipGT1JXQVJEX1NFVFRJTkdfTUVOVElPTlNfUkVQTElFU19SRUFDVElPTlMQAhIfChtGT1JXQVJEX1NFVFRJTkdfTk9fTUVTU0FHRVMQAypKCgxTdXBwb3J0ZWRBcGkSHQoZU1VQUE9SVEVEX0FQSV9VTlNQRUNJRklFRBAAEhsKF1NVUFBPUlRFRF9BUElfUE9TSVRJT05TEAEqaAoMUG9zaXRpb25UeXBlEh0KGVBPU0lUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABIbChdQT1NJVElPTl9UWVBFX1BFUlBFVFVBTBABEhwKGFBPU0lUSU9OX1RZUEVfUFJFRElDVElPThACKooBChVDb25jaWVyZ2VGaW5pc2hTdGF0dXMSJwojQ09OQ0lFUkdFX0ZJTklTSF9TVEFUVVNfVU5TUEVDSUZJRUQQABIjCh9DT05DSUVSR0VfRklOSVNIX1NUQVRVU19TVUNDRVNTEAESIwofQ09OQ0lFUkdFX0ZJTklTSF9TVEFUVVNfRkFJTFVSRRACMqsaChJBcHBSZWdpc3RyeVNlcnZpY2USOwoIUmVnaXN0ZXISFi5yaXZlci5SZWdpc3RlclJlcXVlc3QaFy5yaXZlci5SZWdpc3RlclJlc3BvbnNlElAKD1JlZ2lzdGVyV2ViaG9vaxIdLnJpdmVyLlJlZ2lzdGVyV2ViaG9va1JlcXVlc3QaHi5yaXZlci5SZWdpc3RlcldlYmhvb2tSZXNwb25zZRI+CglHZXRTdGF0dXMSFy5yaXZlci5HZXRTdGF0dXNSZXF1ZXN0Ghgucml2ZXIuR2V0U3RhdHVzUmVzcG9uc2USTQoOU2V0QXBwU2V0dGluZ3MSHC5yaXZlci5TZXRBcHBTZXR0aW5nc1JlcXVlc3QaHS5yaXZlci5TZXRBcHBTZXR0aW5nc1Jlc3BvbnNlElYKEVVwZGF0ZUFwcFNldHRpbmdzEh8ucml2ZXIuVXBkYXRlQXBwU2V0dGluZ3NSZXF1ZXN0GiAucml2ZXIuVXBkYXRlQXBwU2V0dGluZ3NSZXNwb25zZRJNCg5HZXRBcHBTZXR0aW5ncxIcLnJpdmVyLkdldEFwcFNldHRpbmdzUmVxdWVzdBodLnJpdmVyLkdldEFwcFNldHRpbmdzUmVzcG9uc2USVgoRVXBkYXRlQXBwTWV0YWRhdGESHy5yaXZlci5VcGRhdGVBcHBNZXRhZGF0YVJlcXVlc3QaIC5yaXZlci5VcGRhdGVBcHBNZXRhZGF0YVJlc3BvbnNlEk0KDkdldEFwcE1ldGFkYXRhEhwucml2ZXIuR2V0QXBwTWV0YWRhdGFSZXF1ZXN0Gh0ucml2ZXIuR2V0QXBwTWV0YWRhdGFSZXNwb25zZRJHCgxSb3RhdGVTZWNyZXQSGi5yaXZlci5Sb3RhdGVTZWNyZXRSZXF1ZXN0Ghsucml2ZXIuUm90YXRlU2VjcmV0UmVzcG9uc2USQQoKR2V0U2Vzc2lvbhIYLnJpdmVyLkdldFNlc3Npb25SZXF1ZXN0Ghkucml2ZXIuR2V0U2Vzc2lvblJlc3BvbnNlElAKD1ZhbGlkYXRlQm90TmFtZRIdLnJpdmVyLlZhbGlkYXRlQm90TmFtZVJlcXVlc3QaHi5yaXZlci5WYWxpZGF0ZUJvdE5hbWVSZXNwb25zZRJZChJTZXRBcHBBY3RpdmVTdGF0dXMSIC5yaXZlci5TZXRBcHBBY3RpdmVTdGF0dXNSZXF1ZXN0GiEucml2ZXIuU2V0QXBwQWN0aXZlU3RhdHVzUmVzcG9uc2USXwoUU2V0QXBwUHJvbW90ZWRTdGF0dXMSIi5yaXZlci5TZXRBcHBQcm9tb3RlZFN0YXR1c1JlcXVlc3QaIy5yaXZlci5TZXRBcHBQcm9tb3RlZFN0YXR1c1Jlc3BvbnNlEl8KFFNldEFwcFZlcmlmaWVkU3RhdHVzEiIucml2ZXIuU2V0QXBwVmVyaWZpZWRTdGF0dXNSZXF1ZXN0GiMucml2ZXIuU2V0QXBwVmVyaWZpZWRTdGF0dXNSZXNwb25zZRJQCg9HZXRFbnRpdGxlbWVudHMSHS5yaXZlci5HZXRFbnRpdGxlbWVudHNSZXF1ZXN0Gh4ucml2ZXIuR2V0RW50aXRsZW1lbnRzUmVzcG9uc2USRAoLU2V0VXNlck5hbWUSGS5yaXZlci5TZXRVc2VyTmFtZVJlcXVlc3QaGi5yaXZlci5TZXRVc2VyTmFtZVJlc3BvbnNlEkoKDUdldEVudGl0eU5hbWUSGy5yaXZlci5HZXRFbnRpdHlOYW1lUmVxdWVzdBocLnJpdmVyLkdldEVudGl0eU5hbWVSZXNwb25zZRJcChNHZXRCYXRjaEVudGl0eU5hbWVzEiEucml2ZXIuR2V0QmF0Y2hFbnRpdHlOYW1lc1JlcXVlc3QaIi5yaXZlci5HZXRCYXRjaEVudGl0eU5hbWVzUmVzcG9uc2USUwoQQ3JlYXRlSW52aXRlTGluaxIeLnJpdmVyLkNyZWF0ZUludml0ZUxpbmtSZXF1ZXN0Gh8ucml2ZXIuQ3JlYXRlSW52aXRlTGlua1Jlc3BvbnNlElMKEFJldm9rZUludml0ZUxpbmsSHi5yaXZlci5SZXZva2VJbnZpdGVMaW5rUmVxdWVzdBofLnJpdmVyLlJldm9rZUludml0ZUxpbmtSZXNwb25zZRJTChBSZWRlZW1JbnZpdGVMaW5rEh4ucml2ZXIuUmVkZWVtSW52aXRlTGlua1JlcXVlc3QaHy5yaXZlci5SZWRlZW1JbnZpdGVMaW5rUmVzcG9uc2USSgoNR2V0SW52aXRlTGluaxIbLnJpdmVyLkdldEludml0ZUxpbmtSZXF1ZXN0Ghwucml2ZXIuR2V0SW52aXRlTGlua1Jlc3BvbnNlElkKEkxpc3RSZWdpc3RlcmVkQXBwcxIgLnJpdmVyLkxpc3RSZWdpc3RlcmVkQXBwc1JlcXVlc3QaIS5yaXZlci5MaXN0UmVnaXN0ZXJlZEFwcHNSZXNwb25zZRJNCg5HZXRCdWxrQXBwRGF0YRIcLnJpdmVyLkdldEJ1bGtBcHBEYXRhUmVxdWVzdBodLnJpdmVyLkdldEJ1bGtBcHBEYXRhUmVzcG9uc2USWQoSR2V0QXBwSW5zdGFsbFN0YXRzEiAucml2ZXIuR2V0QXBwSW5zdGFsbFN0YXRzUmVxdWVzdBohLnJpdmVyLkdldEFwcEluc3RhbGxTdGF0c1Jlc3BvbnNlEmUKFkdldEJ1bGtBcHBJbnN0YWxsU3RhdHMSJC5yaXZlci5HZXRCdWxrQXBwSW5zdGFsbFN0YXRzUmVxdWVzdBolLnJpdmVyLkdldEJ1bGtBcHBJbnN0YWxsU3RhdHNSZXNwb25zZRJQCg9TdWJtaXRBcHBSZXZpZXcSHS5yaXZlci5TdWJtaXRBcHBSZXZpZXdSZXF1ZXN0Gh4ucml2ZXIuU3VibWl0QXBwUmV2aWV3UmVzcG9uc2USSgoNR2V0QXBwUmV2aWV3cxIbLnJpdmVyLkdldEFwcFJldmlld3NSZXF1ZXN0Ghwucml2ZXIuR2V0QXBwUmV2aWV3c1Jlc3BvbnNlElAKD1Jldm9rZUFwcFJldmlldxIdLnJpdmVyLlJldm9rZUFwcFJldmlld1JlcXVlc3QaHi5yaXZlci5SZXZva2VBcHBSZXZpZXdSZXNwb25zZRJcChNHZXRBcHBSZXZpZXdTdW1tYXJ5EiEucml2ZXIuR2V0QXBwUmV2aWV3U3VtbWFyeVJlcXVlc3QaIi5yaXZlci5HZXRBcHBSZXZpZXdTdW1tYXJ5UmVzcG9uc2USbgoZR2V0QnVsa0FwcFJldmlld1N1bW1hcmllcxInLnJpdmVyLkdldEJ1bGtBcHBSZXZpZXdTdW1tYXJpZXNSZXF1ZXN0Gigucml2ZXIuR2V0QnVsa0FwcFJldmlld1N1bW1hcmllc1Jlc3BvbnNlElAKD0dldEFwcFBvc2l0aW9ucxIdLnJpdmVyLkdldEFwcFBvc2l0aW9uc1JlcXVlc3QaHi5yaXZlci5HZXRBcHBQb3NpdGlvbnNSZXNwb25zZRJfChRHZXRCYXRjaEFwcFBvc2l0aW9ucxIiLnJpdmVyLkdldEJhdGNoQXBwUG9zaXRpb25zUmVxdWVzdBojLnJpdmVyLkdldEJhdGNoQXBwUG9zaXRpb25zUmVzcG9uc2USawoYR2V0QnVsa0FnZW50Q2FwYWJpbGl0aWVzEiYucml2ZXIuR2V0QnVsa0FnZW50Q2FwYWJpbGl0aWVzUmVxdWVzdBonLnJpdmVyLkdldEJ1bGtBZ2VudENhcGFiaWxpdGllc1Jlc3BvbnNlEmIKFUdldEJ1bGtBZ2VudFByb3Bvc2FscxIjLnJpdmVyLkdldEJ1bGtBZ2VudFByb3Bvc2Fsc1JlcXVlc3QaJC5yaXZlci5HZXRCdWxrQWdlbnRQcm9wb3NhbHNSZXNwb25zZRJNCg5RdWVyeUNvbmNpZXJnZRIcLnJpdmVyLlF1ZXJ5Q29uY2llcmdlUmVxdWVzdBodLnJpdmVyLlF1ZXJ5Q29uY2llcmdlUmVzcG9uc2USXAoTR2V0Q29udmVyc2F0aW9uU2VlZBIhLnJpdmVyLkdldENvbnZlcnNhdGlvblNlZWRSZXF1ZXN0GiIucml2ZXIuR2V0Q29udmVyc2F0aW9uU2VlZFJlc3BvbnNlEl8KFFN1Ym1pdEFnZW50UHJvcG9zYWxzEiIucml2ZXIuU3VibWl0QWdlbnRQcm9wb3NhbHNSZXF1ZXN0GiMucml2ZXIuU3VibWl0QWdlbnRQcm9wb3NhbHNSZXNwb25zZRJlChZGaW5pc2hDb252ZXJzYXRpb25TZWVkEiQucml2ZXIuRmluaXNoQ29udmVyc2F0aW9uU2VlZFJlcXVlc3QaJS5yaXZlci5GaW5pc2hDb252ZXJzYXRpb25TZWVkUmVzcG9uc2VCNFoyZ2l0aHViLmNvbS90b3ducy1wcm90b2NvbC90b3ducy9jb3JlL25vZGUvcHJvdG9jb2xiBnByb3RvMw", [import_wkt3.file_google_protobuf_empty, file_payloads, file_protocol]);
7782
7781
  var ForwardSettingValue;
7783
7782
  (function(ForwardSettingValue2) {
7784
7783
  ForwardSettingValue2[ForwardSettingValue2["FORWARD_SETTING_UNSPECIFIED"] = 0] = "FORWARD_SETTING_UNSPECIFIED";
@@ -7797,6 +7796,12 @@ var PositionType;
7797
7796
  PositionType2[PositionType2["PERPETUAL"] = 1] = "PERPETUAL";
7798
7797
  PositionType2[PositionType2["PREDICTION"] = 2] = "PREDICTION";
7799
7798
  })(PositionType || (PositionType = {}));
7799
+ var ConciergeFinishStatus;
7800
+ (function(ConciergeFinishStatus2) {
7801
+ ConciergeFinishStatus2[ConciergeFinishStatus2["UNSPECIFIED"] = 0] = "UNSPECIFIED";
7802
+ ConciergeFinishStatus2[ConciergeFinishStatus2["SUCCESS"] = 1] = "SUCCESS";
7803
+ ConciergeFinishStatus2[ConciergeFinishStatus2["FAILURE"] = 2] = "FAILURE";
7804
+ })(ConciergeFinishStatus || (ConciergeFinishStatus = {}));
7800
7805
  var AppRegistryService = /* @__PURE__ */ (0, import_codegenv23.serviceDesc)(file_apps, 0);
7801
7806
 
7802
7807
  // ../proto/dist/gen/auth_pb.js
@@ -10286,8 +10291,8 @@ function getHash(hash) {
10286
10291
  };
10287
10292
  }
10288
10293
  function createCurve(curveDef, defHash) {
10289
- const create19 = (hash) => weierstrass({ ...curveDef, ...getHash(hash) });
10290
- return { ...create19(defHash), create: create19 };
10294
+ const create18 = (hash) => weierstrass({ ...curveDef, ...getHash(hash) });
10295
+ return { ...create18(defHash), create: create18 };
10291
10296
  }
10292
10297
 
10293
10298
  // ../../node_modules/.bun/@noble+curves@1.9.0/node_modules/@noble/curves/esm/secp256k1.js
@@ -15247,8 +15252,8 @@ function weierstrass2(c2) {
15247
15252
 
15248
15253
  // ../../node_modules/.bun/@noble+curves@1.9.7/node_modules/@noble/curves/esm/_shortw_utils.js
15249
15254
  function createCurve2(curveDef, defHash) {
15250
- const create19 = (hash) => weierstrass2({ ...curveDef, hash });
15251
- return { ...create19(defHash), create: create19 };
15255
+ const create18 = (hash) => weierstrass2({ ...curveDef, hash });
15256
+ return { ...create18(defHash), create: create18 };
15252
15257
  }
15253
15258
 
15254
15259
  // ../../node_modules/.bun/@noble+curves@1.9.7/node_modules/@noble/curves/esm/secp256k1.js
@@ -16414,12 +16419,6 @@ var CryptoStoreIndexedDb = class extends import_wrapper_default {
16414
16419
  await this.hybridGroupSessions.clear();
16415
16420
  await this.devices.clear();
16416
16421
  }
16417
- async deleteInboundGroupSessions(streamId, sessionId) {
16418
- await this.inboundGroupSessions.where({ streamId, sessionId }).delete();
16419
- }
16420
- async deleteOutboundGrounpSessions(streamId) {
16421
- await this.outboundGroupSessions.where({ streamId }).delete();
16422
- }
16423
16422
  async deleteAccount(userId) {
16424
16423
  await this.account.where({ id: userId }).delete();
16425
16424
  }
@@ -16433,22 +16432,6 @@ var CryptoStoreIndexedDb = class extends import_wrapper_default {
16433
16432
  async storeAccount(accountPickle) {
16434
16433
  await this.account.put({ id: this.userId, accountPickle });
16435
16434
  }
16436
- async storeEndToEndOutboundGroupSession(sessionId, sessionData, streamId) {
16437
- await this.outboundGroupSessions.put({ sessionId, session: sessionData, streamId });
16438
- }
16439
- async getEndToEndOutboundGroupSession(streamId) {
16440
- const session = await this.outboundGroupSessions.get({ streamId });
16441
- if (!session) {
16442
- throw new Error("session not found");
16443
- }
16444
- return session.session;
16445
- }
16446
- async getAllEndToEndOutboundGroupSessions() {
16447
- return await this.outboundGroupSessions.toArray();
16448
- }
16449
- async getEndToEndInboundGroupSession(streamId, sessionId) {
16450
- return await this.inboundGroupSessions.get({ sessionId, streamId });
16451
- }
16452
16435
  async getHybridGroupSession(streamId, sessionId) {
16453
16436
  return await this.hybridGroupSessions.get({ streamId, sessionId });
16454
16437
  }
@@ -16456,25 +16439,15 @@ var CryptoStoreIndexedDb = class extends import_wrapper_default {
16456
16439
  const sessions = await this.hybridGroupSessions.where({ streamId }).toArray();
16457
16440
  return sessions;
16458
16441
  }
16459
- async getAllEndToEndInboundGroupSessions() {
16460
- return await this.inboundGroupSessions.toArray();
16461
- }
16462
16442
  async getAllHybridGroupSessions() {
16463
16443
  return await this.hybridGroupSessions.toArray();
16464
16444
  }
16465
16445
  async deleteHybridGroupSessions(streamId) {
16466
16446
  await this.hybridGroupSessions.where({ streamId }).delete();
16467
16447
  }
16468
- async storeEndToEndInboundGroupSession(streamId, sessionId, sessionData) {
16469
- await this.inboundGroupSessions.put({ streamId, sessionId, ...sessionData });
16470
- }
16471
16448
  async storeHybridGroupSession(sessionData) {
16472
16449
  await this.hybridGroupSessions.put({ ...sessionData });
16473
16450
  }
16474
- async getInboundGroupSessionIds(streamId) {
16475
- const sessions = await this.inboundGroupSessions.where({ streamId }).toArray();
16476
- return sessions.map((s) => s.sessionId);
16477
- }
16478
16451
  async getHybridGroupSessionIds(streamId) {
16479
16452
  const sessions = await this.hybridGroupSessions.where({ streamId }).toArray();
16480
16453
  return sessions.map((s) => s.sessionId);
@@ -16483,14 +16456,7 @@ var CryptoStoreIndexedDb = class extends import_wrapper_default {
16483
16456
  return await this.transaction("rw", this.account, fn);
16484
16457
  }
16485
16458
  async withGroupSessions(fn) {
16486
- return await this.transaction(
16487
- "rw",
16488
- this.outboundGroupSessions,
16489
- this.inboundGroupSessions,
16490
- this.hybridGroupSessions,
16491
- // aellis this should be in its own transaction but tests were failing otherwise
16492
- fn
16493
- );
16459
+ return await this.transaction("rw", this.hybridGroupSessions, fn);
16494
16460
  }
16495
16461
  /**
16496
16462
  * Only used for testing
@@ -17967,15 +17933,11 @@ var DEFAULT_MAX_CRYPTO_STORE_ENTRIES = 5e3;
17967
17933
  var CryptoStoreInMemory = class {
17968
17934
  userId;
17969
17935
  accounts;
17970
- outboundGroupSessions;
17971
- inboundGroupSessions;
17972
17936
  hybridGroupSessions;
17973
17937
  devices;
17974
17938
  constructor(userId, maxEntries = DEFAULT_MAX_CRYPTO_STORE_ENTRIES) {
17975
17939
  this.userId = userId;
17976
17940
  this.accounts = new LRUCache({ max: maxEntries });
17977
- this.outboundGroupSessions = new LRUCache({ max: maxEntries });
17978
- this.inboundGroupSessions = new LRUCache({ max: maxEntries });
17979
17941
  this.hybridGroupSessions = new LRUCache({ max: maxEntries });
17980
17942
  this.devices = new LRUCache({ max: maxEntries });
17981
17943
  }
@@ -17991,18 +17953,9 @@ var CryptoStoreInMemory = class {
17991
17953
  }
17992
17954
  async deleteAllData() {
17993
17955
  this.accounts.clear();
17994
- this.outboundGroupSessions.clear();
17995
- this.inboundGroupSessions.clear();
17996
17956
  this.hybridGroupSessions.clear();
17997
17957
  this.devices.clear();
17998
17958
  }
17999
- async deleteInboundGroupSessions(streamId, sessionId) {
18000
- const key = this.getInboundSessionKey(streamId, sessionId);
18001
- this.inboundGroupSessions.delete(key);
18002
- }
18003
- async deleteOutboundGrounpSessions(streamId) {
18004
- this.outboundGroupSessions.delete(streamId);
18005
- }
18006
17959
  async deleteAccount(userId) {
18007
17960
  this.accounts.delete(userId);
18008
17961
  }
@@ -18016,28 +17969,6 @@ var CryptoStoreInMemory = class {
18016
17969
  async storeAccount(accountPickle) {
18017
17970
  this.accounts.set(this.userId, { id: this.userId, accountPickle });
18018
17971
  }
18019
- async storeEndToEndOutboundGroupSession(sessionId, sessionData, streamId) {
18020
- this.outboundGroupSessions.set(streamId, { sessionId, session: sessionData, streamId });
18021
- }
18022
- async getEndToEndOutboundGroupSession(streamId) {
18023
- const session = this.outboundGroupSessions.get(streamId);
18024
- if (!session) {
18025
- throw new Error("session not found");
18026
- }
18027
- return session.session;
18028
- }
18029
- async getAllEndToEndOutboundGroupSessions() {
18030
- return Array.from(this.outboundGroupSessions.values());
18031
- }
18032
- async getEndToEndInboundGroupSession(streamId, sessionId) {
18033
- const key = this.getInboundSessionKey(streamId, sessionId);
18034
- const session = this.inboundGroupSessions.get(key);
18035
- if (session) {
18036
- const { streamId: _, sessionId: __, ...sessionData } = session;
18037
- return sessionData;
18038
- }
18039
- return void 0;
18040
- }
18041
17972
  async getHybridGroupSession(streamId, sessionId) {
18042
17973
  const key = this.getHybridSessionKey(streamId, sessionId);
18043
17974
  return this.hybridGroupSessions.get(key);
@@ -18051,9 +17982,6 @@ var CryptoStoreInMemory = class {
18051
17982
  }
18052
17983
  return sessions;
18053
17984
  }
18054
- async getAllEndToEndInboundGroupSessions() {
18055
- return Array.from(this.inboundGroupSessions.values());
18056
- }
18057
17985
  async getAllHybridGroupSessions() {
18058
17986
  return Array.from(this.hybridGroupSessions.values());
18059
17987
  }
@@ -18064,23 +17992,10 @@ var CryptoStoreInMemory = class {
18064
17992
  }
18065
17993
  }
18066
17994
  }
18067
- async storeEndToEndInboundGroupSession(streamId, sessionId, sessionData) {
18068
- const key = this.getInboundSessionKey(streamId, sessionId);
18069
- this.inboundGroupSessions.set(key, { streamId, sessionId, ...sessionData });
18070
- }
18071
17995
  async storeHybridGroupSession(sessionData) {
18072
17996
  const key = this.getHybridSessionKey(sessionData.streamId, sessionData.sessionId);
18073
17997
  this.hybridGroupSessions.set(key, sessionData);
18074
17998
  }
18075
- async getInboundGroupSessionIds(streamId) {
18076
- const sessionIds = [];
18077
- for (const session of this.inboundGroupSessions.values()) {
18078
- if (session.streamId === streamId) {
18079
- sessionIds.push(session.sessionId);
18080
- }
18081
- }
18082
- return sessionIds;
18083
- }
18084
17999
  async getHybridGroupSessionIds(streamId) {
18085
18000
  const sessionIds = [];
18086
18001
  for (const session of this.hybridGroupSessions.values()) {
@@ -18119,9 +18034,6 @@ var CryptoStoreInMemory = class {
18119
18034
  }
18120
18035
  return userDevices;
18121
18036
  }
18122
- getInboundSessionKey(streamId, sessionId) {
18123
- return `${streamId}:${sessionId}`;
18124
- }
18125
18037
  getHybridSessionKey(streamId, sessionId) {
18126
18038
  return `${streamId}:${sessionId}`;
18127
18039
  }
@@ -18264,7 +18176,6 @@ var EncryptionAlgorithmId;
18264
18176
  })(EncryptionAlgorithmId || (EncryptionAlgorithmId = {}));
18265
18177
  var GroupEncryptionAlgorithmId;
18266
18178
  (function(GroupEncryptionAlgorithmId2) {
18267
- GroupEncryptionAlgorithmId2["GroupEncryption"] = "r.group-encryption.v1.aes-sha2";
18268
18179
  GroupEncryptionAlgorithmId2["HybridGroupEncryption"] = "grpaes";
18269
18180
  })(GroupEncryptionAlgorithmId || (GroupEncryptionAlgorithmId = {}));
18270
18181
  function isGroupEncryptionAlgorithmId(value) {
@@ -18317,13 +18228,6 @@ var EncryptionDevice = class {
18317
18228
  // not one time keys, which suffer a race condition and expire once used.
18318
18229
  olmPrekeyPromise = Promise.resolve();
18319
18230
  // set by consumers
18320
- // Store a set of decrypted message indexes for each group session.
18321
- // This partially mitigates a replay attack where a MITM resends a group
18322
- // message into the room.
18323
- //
18324
- // Keys are strings of form "<senderKey>|<session_id>|<message_index>"
18325
- // Values are objects of the form "{id: <event id>, timestamp: <ts>}"
18326
- inboundGroupSessionMessageIndexes = {};
18327
18231
  constructor(delegate2, cryptoStore) {
18328
18232
  this.delegate = delegate2;
18329
18233
  this.cryptoStore = cryptoStore;
@@ -18377,17 +18281,7 @@ var EncryptionDevice = class {
18377
18281
  }
18378
18282
  async initializeFromExportedDevice(exportedData, account) {
18379
18283
  await this.cryptoStore.withAccountTx(() => this.cryptoStore.storeAccount(exportedData.pickledAccount));
18380
- await this.cryptoStore.withGroupSessions(() => {
18381
- return Promise.all([
18382
- ...exportedData.outboundSessions.map((session) => this.cryptoStore.storeEndToEndOutboundGroupSession(session.sessionId, session.session, session.streamId)),
18383
- ...exportedData.inboundSessions.map((session) => this.cryptoStore.storeEndToEndInboundGroupSession(session.streamId, session.sessionId, {
18384
- stream_id: session.streamId,
18385
- session: session.session,
18386
- keysClaimed: {}
18387
- })),
18388
- ...exportedData.hybridGroupSessions.map((session) => this.cryptoStore.storeHybridGroupSession(session))
18389
- ]);
18390
- });
18284
+ await this.cryptoStore.withGroupSessions(() => Promise.all(exportedData.hybridGroupSessions.map((session) => this.cryptoStore.storeHybridGroupSession(session))));
18391
18285
  account.unpickle(this.pickleKey, exportedData.pickledAccount);
18392
18286
  }
18393
18287
  async initializeAccount(account) {
@@ -18408,24 +18302,10 @@ var EncryptionDevice = class {
18408
18302
  const account = await this.getAccount();
18409
18303
  const pickledAccount = account.pickle(this.pickleKey);
18410
18304
  account.free();
18411
- const [inboundSessions, outboundSessions, hybridGroupSessions] = await Promise.all([
18412
- this.cryptoStore.getAllEndToEndInboundGroupSessions(),
18413
- this.cryptoStore.getAllEndToEndOutboundGroupSessions(),
18414
- this.cryptoStore.getAllHybridGroupSessions()
18415
- ]);
18305
+ const hybridGroupSessions = await this.cryptoStore.getAllHybridGroupSessions();
18416
18306
  return (0, import_protobuf7.create)(ExportedDeviceSchema, {
18417
18307
  pickleKey: this.pickleKey,
18418
18308
  pickledAccount,
18419
- inboundSessions: inboundSessions.map((session) => (0, import_protobuf7.create)(ExportedDevice_GroupSessionSchema, {
18420
- sessionId: session.sessionId,
18421
- streamId: session.streamId,
18422
- session: session.session
18423
- })),
18424
- outboundSessions: outboundSessions.map((session) => (0, import_protobuf7.create)(ExportedDevice_GroupSessionSchema, {
18425
- sessionId: session.sessionId,
18426
- streamId: session.streamId,
18427
- session: session.session
18428
- })),
18429
18309
  hybridGroupSessions: hybridGroupSessions.map((session) => (0, import_protobuf7.create)(ExportedDevice_HybridGroupSessionSchema, {
18430
18310
  sessionId: session.sessionId,
18431
18311
  streamId: session.streamId,
@@ -18525,47 +18405,6 @@ var EncryptionDevice = class {
18525
18405
  account.forget_old_fallback_key();
18526
18406
  await this.storeAccount(account);
18527
18407
  }
18528
- // Outbound group session
18529
- // ======================
18530
- /**
18531
- * Store an OutboundGroupSession in outboundSessionStore
18532
- *
18533
- */
18534
- async saveOutboundGroupSession(session, streamId) {
18535
- return this.cryptoStore.withGroupSessions(async () => {
18536
- await this.cryptoStore.storeEndToEndOutboundGroupSession(session.session_id(), session.pickle(this.pickleKey), streamId);
18537
- });
18538
- }
18539
- /**
18540
- * Extract OutboundGroupSession from the session store and call given fn.
18541
- */
18542
- async getOutboundGroupSession(streamId) {
18543
- return this.cryptoStore.withGroupSessions(async () => {
18544
- const pickled = await this.cryptoStore.getEndToEndOutboundGroupSession(streamId);
18545
- if (!pickled) {
18546
- throw new Error(`Unknown outbound group session ${streamId}`);
18547
- }
18548
- const session = this.delegate.createOutboundGroupSession();
18549
- session.unpickle(this.pickleKey, pickled);
18550
- return session;
18551
- });
18552
- }
18553
- /**
18554
- * Get the session keys for an outbound group session
18555
- *
18556
- * @param sessionId - the id of the outbound group session
18557
- *
18558
- * @returns current chain index, and
18559
- * base64-encoded secret key.
18560
- */
18561
- async getOutboundGroupSessionKey(streamId) {
18562
- const session = await this.getOutboundGroupSession(streamId);
18563
- const chain_index = session.message_index();
18564
- const key = session.session_key();
18565
- const sessionId = session.session_id();
18566
- session.free();
18567
- return { chain_index, key, sessionId };
18568
- }
18569
18408
  /** */
18570
18409
  async getHybridGroupSessionKeyForStream(streamId) {
18571
18410
  return this.cryptoStore.withGroupSessions(async () => {
@@ -18587,36 +18426,6 @@ var EncryptionDevice = class {
18587
18426
  return (0, import_protobuf7.fromBinary)(HybridGroupSessionKeySchema, sessionRecord.sessionKey);
18588
18427
  });
18589
18428
  }
18590
- /**
18591
- * Generate a new outbound group session
18592
- *
18593
- */
18594
- async createOutboundGroupSession(streamId) {
18595
- return await this.cryptoStore.withGroupSessions(async () => {
18596
- const session = this.delegate.createOutboundGroupSession();
18597
- const inboundSession = this.delegate.createInboundGroupSession();
18598
- try {
18599
- session.create();
18600
- const sessionId = session.session_id();
18601
- await this.saveOutboundGroupSession(session, streamId);
18602
- const key = session.session_key();
18603
- inboundSession.create(key);
18604
- const pickled = inboundSession.pickle(this.pickleKey);
18605
- await this.cryptoStore.storeEndToEndInboundGroupSession(streamId, sessionId, {
18606
- session: pickled,
18607
- stream_id: streamId,
18608
- keysClaimed: {}
18609
- });
18610
- return sessionId;
18611
- } catch (e) {
18612
- log4("Error creating outbound group session", e);
18613
- throw e;
18614
- } finally {
18615
- session.free();
18616
- inboundSession.free();
18617
- }
18618
- });
18619
- }
18620
18429
  /** */
18621
18430
  async createHybridGroupSession(streamId, miniblockNum, miniblockHash) {
18622
18431
  const streamIdBytes = bin_fromHexString(streamId);
@@ -18642,96 +18451,6 @@ var EncryptionDevice = class {
18642
18451
  return { sessionId, sessionRecord, sessionKey };
18643
18452
  });
18644
18453
  }
18645
- // Inbound group session
18646
- // =====================
18647
- /**
18648
- * Unpickle a session from a sessionData object and invoke the given function.
18649
- * The session is valid only until func returns.
18650
- *
18651
- * @param sessionData - Object describing the session.
18652
- * @param func - Invoked with the unpickled session
18653
- * @returns result of func
18654
- */
18655
- unpickleInboundGroupSession(sessionData) {
18656
- const session = this.delegate.createInboundGroupSession();
18657
- session.unpickle(this.pickleKey, sessionData.session);
18658
- return session;
18659
- }
18660
- /**
18661
- * Extract an InboundGroupSession from the crypto store and call the given function
18662
- *
18663
- * @param streamId - The stream ID to extract the session for, or null to fetch
18664
- * sessions for any room.
18665
- * @param txn - Opaque transaction object from cryptoStore.doTxn()
18666
- * @param func - function to call.
18667
- *
18668
- * @internal
18669
- */
18670
- async getInboundGroupSession(streamId, sessionId) {
18671
- const sessionInfo = await this.cryptoStore.getEndToEndInboundGroupSession(streamId, sessionId);
18672
- const session = sessionInfo ? this.unpickleInboundGroupSession(sessionInfo) : void 0;
18673
- return {
18674
- session,
18675
- data: sessionInfo
18676
- };
18677
- }
18678
- /**
18679
- * Add an inbound group session to the session store
18680
- *
18681
- * @param streamId - room in which this session will be used
18682
- * @param senderKey - base64-encoded curve25519 key of the sender
18683
- * @param sessionId - session identifier
18684
- * @param sessionKey - base64-encoded secret key
18685
- * @param keysClaimed - Other keys the sender claims.
18686
- * @param exportFormat - true if the group keys are in export format
18687
- * (ie, they lack an ed25519 signature)
18688
- * @param extraSessionData - any other data to be include with the session
18689
- */
18690
- async addInboundGroupSession(streamId, sessionId, sessionKey, keysClaimed, _exportFormat, extraSessionData = {}) {
18691
- const { session: existingSession, data: existingSessionData } = await this.getInboundGroupSession(streamId, sessionId);
18692
- const session = this.delegate.createInboundGroupSession();
18693
- try {
18694
- log4(`Adding group session ${streamId}|${sessionId}`);
18695
- try {
18696
- session.import_session(sessionKey);
18697
- } catch {
18698
- session.create(sessionKey);
18699
- }
18700
- if (sessionId != session.session_id()) {
18701
- throw new Error("Mismatched group session ID from streamId: " + streamId);
18702
- }
18703
- if (existingSession && existingSessionData) {
18704
- log4(`Update for group session ${streamId}|${sessionId}`);
18705
- if (existingSession.first_known_index() <= session.first_known_index()) {
18706
- if (!existingSessionData.untrusted || extraSessionData.untrusted) {
18707
- log4(`Keeping existing group session ${streamId}|${sessionId}`);
18708
- return;
18709
- }
18710
- if (existingSession.first_known_index() < session.first_known_index()) {
18711
- if (existingSession.export_session(session.first_known_index()) === session.export_session(session.first_known_index())) {
18712
- log4(`Upgrading trust of existing group session ${streamId}|${sessionId} based on newly-received trusted session`);
18713
- existingSessionData.untrusted = false;
18714
- await this.cryptoStore.storeEndToEndInboundGroupSession(streamId, sessionId, existingSessionData);
18715
- } else {
18716
- log4(`Newly-received group session ${streamId}|$sessionId} does not match existing session! Keeping existing session`);
18717
- }
18718
- return;
18719
- }
18720
- }
18721
- }
18722
- log4(`Storing group session ${streamId}|${sessionId} with first index ${session.first_known_index()}`);
18723
- const sessionData = Object.assign({}, extraSessionData, {
18724
- stream_id: streamId,
18725
- session: session.pickle(this.pickleKey),
18726
- keysClaimed
18727
- });
18728
- await this.cryptoStore.withGroupSessions(async () => {
18729
- await this.cryptoStore.storeEndToEndInboundGroupSession(streamId, sessionId, sessionData);
18730
- });
18731
- } finally {
18732
- session.free();
18733
- }
18734
- }
18735
18454
  /** */
18736
18455
  async addHybridGroupSession(streamId, sessionId, sessionKey) {
18737
18456
  const sessionKeyBytes = bin_fromHexString(sessionKey);
@@ -18756,26 +18475,6 @@ var EncryptionDevice = class {
18756
18475
  });
18757
18476
  });
18758
18477
  }
18759
- /**
18760
- * Encrypt an outgoing message with an outbound group session
18761
- *
18762
- * @param sessionId - this id of the session
18763
- * @param payloadString - payload to be encrypted
18764
- *
18765
- * @returns ciphertext
18766
- */
18767
- async encryptGroupMessage(payloadString, streamId) {
18768
- return await this.cryptoStore.withGroupSessions(async () => {
18769
- log4(`encrypting msg with group session for stream id ${streamId}`);
18770
- checkPayloadLength(payloadString, { streamId, source: "encryptGroupMessage" });
18771
- const session = await this.getOutboundGroupSession(streamId);
18772
- const ciphertext = session.encrypt(payloadString);
18773
- const sessionId = session.session_id();
18774
- await this.saveOutboundGroupSession(session, streamId);
18775
- session.free();
18776
- return { ciphertext, sessionId };
18777
- });
18778
- }
18779
18478
  async encryptUsingFallbackKey(theirIdentityKey, fallbackKey, payload) {
18780
18479
  checkPayloadLength(payload, { source: "encryptUsingFallbackKey" });
18781
18480
  return this.cryptoStore.withAccountTx(async () => {
@@ -18842,61 +18541,14 @@ var EncryptionDevice = class {
18842
18541
  util.ed25519_verify(key, message, signature);
18843
18542
  });
18844
18543
  }
18845
- // Group Sessions
18846
- async getInboundGroupSessionIds(streamId) {
18847
- return await this.cryptoStore.getInboundGroupSessionIds(streamId);
18848
- }
18849
18544
  async getHybridGroupSessionIds(streamId) {
18850
18545
  return await this.cryptoStore.getHybridGroupSessionIds(streamId);
18851
18546
  }
18852
- /**
18853
- * Determine if we have the keys for a given group session
18854
- *
18855
- * @param streamId - stream in which the message was received
18856
- * @param senderKey - base64-encoded curve25519 key of the sender
18857
- * @param sessionId - session identifier
18858
- */
18859
- async hasInboundSessionKeys(streamId, sessionId) {
18860
- const sessionData = await this.cryptoStore.withGroupSessions(async () => {
18861
- return this.cryptoStore.getEndToEndInboundGroupSession(streamId, sessionId);
18862
- });
18863
- if (!sessionData) {
18864
- return false;
18865
- }
18866
- if (streamId !== sessionData.stream_id) {
18867
- log4(`[hasInboundSessionKey]: requested keys for inbound group session${sessionId}, with incorrect stream id (expected ${sessionData.stream_id}, was ${streamId})`);
18868
- return false;
18869
- } else {
18870
- return true;
18871
- }
18872
- }
18873
18547
  /** */
18874
18548
  async hasHybridGroupSessionKey(streamId, sessionId) {
18875
18549
  const key = await this.cryptoStore.getHybridGroupSession(streamId, sessionId);
18876
18550
  return key !== void 0;
18877
18551
  }
18878
- /**
18879
- * Export an inbound group session
18880
- *
18881
- * @param streamId - streamId of session
18882
- * @param sessionId - session identifier
18883
- */
18884
- async exportInboundGroupSession(streamId, sessionId) {
18885
- const sessionData = await this.cryptoStore.getEndToEndInboundGroupSession(streamId, sessionId);
18886
- if (!sessionData) {
18887
- return void 0;
18888
- }
18889
- const session = this.unpickleInboundGroupSession(sessionData);
18890
- const messageIndex = session.first_known_index();
18891
- const sessionKey = session.export_session(messageIndex);
18892
- session.free();
18893
- return {
18894
- streamId,
18895
- sessionId,
18896
- sessionKey,
18897
- algorithm: GroupEncryptionAlgorithmId.GroupEncryption
18898
- };
18899
- }
18900
18552
  /** */
18901
18553
  async exportHybridGroupSession(streamId, sessionId) {
18902
18554
  const sessionData = await this.cryptoStore.getHybridGroupSession(streamId, sessionId);
@@ -18910,33 +18562,6 @@ var EncryptionDevice = class {
18910
18562
  algorithm: GroupEncryptionAlgorithmId.HybridGroupEncryption
18911
18563
  };
18912
18564
  }
18913
- /**
18914
- * Get a list containing all of the room keys
18915
- *
18916
- * @returns a list of session export objects
18917
- */
18918
- async exportInboundGroupSessions() {
18919
- const exportedSessions = [];
18920
- await this.cryptoStore.withGroupSessions(async () => {
18921
- const sessions = await this.cryptoStore.getAllEndToEndInboundGroupSessions();
18922
- for (const sessionData of sessions) {
18923
- if (!sessionData) {
18924
- continue;
18925
- }
18926
- const session = this.unpickleInboundGroupSession(sessionData);
18927
- const messageIndex = session.first_known_index();
18928
- const sessionKey = session.export_session(messageIndex);
18929
- session.free();
18930
- exportedSessions.push({
18931
- streamId: sessionData.streamId,
18932
- sessionId: sessionData.sessionId,
18933
- sessionKey,
18934
- algorithm: GroupEncryptionAlgorithmId.GroupEncryption
18935
- });
18936
- }
18937
- });
18938
- return exportedSessions;
18939
- }
18940
18565
  async exportHybridGroupSessions() {
18941
18566
  const sessions = await this.cryptoStore.getAllHybridGroupSessions();
18942
18567
  return sessions.map((session) => {
@@ -18972,164 +18597,9 @@ async function hybridSessionKeyHash(streamId, key, miniblockNum, miniblockHash)
18972
18597
  return new Uint8Array(hashBytes);
18973
18598
  }
18974
18599
 
18975
- // ../encryption/dist/groupDecryption.js
18976
- var logError2 = dlogError("csb:encryption:groupDecryption");
18977
- var GroupDecryption = class extends DecryptionAlgorithm {
18978
- algorithm = GroupEncryptionAlgorithmId.GroupEncryption;
18979
- lruCache;
18980
- constructor(params) {
18981
- super(params);
18982
- this.lruCache = new LRUCache({ max: 1e3 });
18983
- }
18984
- /**
18985
- * returns a promise which resolves to a
18986
- * {@link EventDecryptionResult} once we have finished
18987
- * decrypting, or rejects with an `algorithms.DecryptionError` if there is a
18988
- * problem decrypting the event.
18989
- */
18990
- async decrypt(streamId, content) {
18991
- if (!content.senderKey || !content.sessionId || !content.ciphertext) {
18992
- throw new DecryptionError("GROUP_DECRYPTION_MISSING_FIELDS", "Missing fields in input");
18993
- }
18994
- let session = this.lruCache.get(content.sessionId);
18995
- if (!session) {
18996
- const { session: loadedSession } = await this.device.getInboundGroupSession(streamId, content.sessionId);
18997
- if (loadedSession) {
18998
- this.lruCache.set(content.sessionId, loadedSession);
18999
- session = loadedSession;
19000
- }
19001
- }
19002
- if (!session) {
19003
- throw new Error("Session not found");
19004
- }
19005
- const result = session.decrypt(content.ciphertext);
19006
- switch (content.version) {
19007
- case EncryptedDataVersion.ENCRYPTED_DATA_VERSION_0:
19008
- return result.plaintext;
19009
- case EncryptedDataVersion.ENCRYPTED_DATA_VERSION_1:
19010
- return bin_fromBase64(result.plaintext);
19011
- default:
19012
- throw new DecryptionError("GROUP_DECRYPTION_INVALID_VERSION", "Unsupported version");
19013
- }
19014
- }
19015
- /**
19016
- * @param streamId - the stream id of the session
19017
- * @param session- the group session object
19018
- */
19019
- async importStreamKey(streamId, session) {
19020
- const extraSessionData = {};
19021
- try {
19022
- await this.device.addInboundGroupSession(
19023
- streamId,
19024
- session.sessionId,
19025
- session.sessionKey,
19026
- // sender claimed keys not yet supported
19027
- {},
19028
- false,
19029
- extraSessionData
19030
- );
19031
- } catch (e) {
19032
- logError2(`Error handling room key import: ${e.message}`);
19033
- throw e;
19034
- }
19035
- }
19036
- /** */
19037
- async exportGroupSession(streamId, sessionId) {
19038
- return this.device.exportInboundGroupSession(streamId, sessionId);
19039
- }
19040
- /** */
19041
- exportGroupSessions() {
19042
- return this.device.exportInboundGroupSessions();
19043
- }
19044
- /** */
19045
- exportGroupSessionIds(streamId) {
19046
- return this.device.getInboundGroupSessionIds(streamId);
19047
- }
19048
- /** */
19049
- async hasSessionKey(streamId, sessionId) {
19050
- return this.device.hasInboundSessionKeys(streamId, sessionId);
19051
- }
19052
- };
19053
-
19054
- // ../encryption/dist/groupEncryption.js
18600
+ // ../encryption/dist/hybridGroupEncryption.js
19055
18601
  var import_protobuf8 = require("@bufbuild/protobuf");
19056
18602
  var log5 = dlog("csb:encryption:groupEncryption");
19057
- var GroupEncryption = class extends EncryptionAlgorithm {
19058
- algorithm = GroupEncryptionAlgorithmId.GroupEncryption;
19059
- constructor(params) {
19060
- super(params);
19061
- }
19062
- async ensureOutboundSession(streamId, opts) {
19063
- try {
19064
- const sessionKey = await this.device.getOutboundGroupSessionKey(streamId);
19065
- return sessionKey.sessionId;
19066
- } catch (error) {
19067
- const sessionId = await this.device.createOutboundGroupSession(streamId);
19068
- log5(`Started new megolm session ${sessionId}`);
19069
- const promise = this.shareSession(streamId, sessionId, opts?.priorityUserIds ?? []);
19070
- if (opts?.shareShareSessionTimeoutMs === 0) {
19071
- await promise;
19072
- } else {
19073
- const waitTimeBeforeMovingOn = opts?.shareShareSessionTimeoutMs ?? 3e4;
19074
- await Promise.race([
19075
- promise,
19076
- new Promise((resolve4, _) => setTimeout(() => resolve4(), waitTimeBeforeMovingOn))
19077
- ]);
19078
- }
19079
- return sessionId;
19080
- }
19081
- }
19082
- async hasOutboundSession(streamId) {
19083
- try {
19084
- await this.device.getOutboundGroupSessionKey(streamId);
19085
- return true;
19086
- } catch {
19087
- return false;
19088
- }
19089
- }
19090
- async shareSession(streamId, sessionId, priorityUserIds) {
19091
- const session = await this.device.exportInboundGroupSession(streamId, sessionId);
19092
- if (!session) {
19093
- throw new Error("Session key not found for session " + sessionId);
19094
- }
19095
- await this.client.encryptAndShareGroupSessionsToStream(streamId, [session], this.algorithm, priorityUserIds);
19096
- }
19097
- /**
19098
- * @deprecated
19099
- */
19100
- async encrypt_deprecated_v0(streamId, payload) {
19101
- await this.ensureOutboundSession(streamId);
19102
- const result = await this.device.encryptGroupMessage(payload, streamId);
19103
- return (0, import_protobuf8.create)(EncryptedDataSchema, {
19104
- algorithm: this.algorithm,
19105
- senderKey: this.device.deviceCurve25519Key,
19106
- ciphertext: result.ciphertext,
19107
- sessionId: result.sessionId,
19108
- version: EncryptedDataVersion.ENCRYPTED_DATA_VERSION_0
19109
- });
19110
- }
19111
- /**
19112
- * @param content - plaintext event content
19113
- *
19114
- * @returns Promise which resolves to the new event body
19115
- */
19116
- async encrypt(streamId, payload) {
19117
- log5("Starting to encrypt event");
19118
- await this.ensureOutboundSession(streamId);
19119
- const result = await this.device.encryptGroupMessage(bin_toBase64(payload), streamId);
19120
- return (0, import_protobuf8.create)(EncryptedDataSchema, {
19121
- algorithm: this.algorithm,
19122
- senderKey: this.device.deviceCurve25519Key,
19123
- ciphertext: result.ciphertext,
19124
- sessionId: result.sessionId,
19125
- version: EncryptedDataVersion.ENCRYPTED_DATA_VERSION_1
19126
- });
19127
- }
19128
- };
19129
-
19130
- // ../encryption/dist/hybridGroupEncryption.js
19131
- var import_protobuf9 = require("@bufbuild/protobuf");
19132
- var log6 = dlog("csb:encryption:groupEncryption");
19133
18603
  var HybridGroupEncryption = class extends EncryptionAlgorithm {
19134
18604
  algorithm = GroupEncryptionAlgorithmId.HybridGroupEncryption;
19135
18605
  constructor(params) {
@@ -19146,7 +18616,7 @@ var HybridGroupEncryption = class extends EncryptionAlgorithm {
19146
18616
  } catch (error) {
19147
18617
  const { miniblockNum, miniblockHash } = opts?.miniblockInfo ?? await this.client.getMiniblockInfo(streamId);
19148
18618
  const { sessionId, sessionKey } = await this.device.createHybridGroupSession(streamId, miniblockNum, miniblockHash);
19149
- log6(`Started new hybrid group session ${sessionId}`);
18619
+ log5(`Started new hybrid group session ${sessionId}`);
19150
18620
  const promise = this.shareSession(streamId, sessionId, opts?.priorityUserIds ?? []);
19151
18621
  if (opts?.shareShareSessionTimeoutMs === 0) {
19152
18622
  await promise;
@@ -19175,34 +18645,17 @@ var HybridGroupEncryption = class extends EncryptionAlgorithm {
19175
18645
  }
19176
18646
  await this.client.encryptAndShareGroupSessionsToStream(streamId, [session], this.algorithm, priorityUserIds);
19177
18647
  }
19178
- /**
19179
- * @deprecated
19180
- */
19181
- async encrypt_deprecated_v0(streamId, payload) {
19182
- const sessionKey = await this._ensureOutboundSession(streamId);
19183
- const key = await importAesGsmKeyBytes(sessionKey.key);
19184
- const payloadBytes = new TextEncoder().encode(payload);
19185
- const { ciphertext, iv } = await encryptAesGcm(key, payloadBytes);
19186
- return (0, import_protobuf9.create)(EncryptedDataSchema, {
19187
- algorithm: this.algorithm,
19188
- senderKey: this.device.deviceCurve25519Key,
19189
- sessionIdBytes: sessionKey.sessionId,
19190
- ciphertextBytes: ciphertext,
19191
- ivBytes: iv,
19192
- version: EncryptedDataVersion.ENCRYPTED_DATA_VERSION_0
19193
- });
19194
- }
19195
18648
  /**
19196
18649
  * @param content - plaintext event content
19197
18650
  *
19198
18651
  * @returns Promise which resolves to the new event body
19199
18652
  */
19200
18653
  async encrypt(streamId, payload) {
19201
- log6("Starting to encrypt event");
18654
+ log5("Starting to encrypt event");
19202
18655
  const sessionKey = await this._ensureOutboundSession(streamId);
19203
18656
  const key = await importAesGsmKeyBytes(sessionKey.key);
19204
18657
  const { ciphertext, iv } = await encryptAesGcm(key, payload);
19205
- return (0, import_protobuf9.create)(EncryptedDataSchema, {
18658
+ return (0, import_protobuf8.create)(EncryptedDataSchema, {
19206
18659
  algorithm: this.algorithm,
19207
18660
  senderKey: this.device.deviceCurve25519Key,
19208
18661
  sessionIdBytes: sessionKey.sessionId,
@@ -19214,7 +18667,7 @@ var HybridGroupEncryption = class extends EncryptionAlgorithm {
19214
18667
  };
19215
18668
 
19216
18669
  // ../encryption/dist/hybridGroupDecryption.js
19217
- var logError3 = dlogError("csb:encryption:groupDecryption");
18670
+ var logError2 = dlogError("csb:encryption:groupDecryption");
19218
18671
  var HybridGroupDecryption = class extends DecryptionAlgorithm {
19219
18672
  algorithm = GroupEncryptionAlgorithmId.HybridGroupEncryption;
19220
18673
  lruCache;
@@ -19260,7 +18713,7 @@ var HybridGroupDecryption = class extends DecryptionAlgorithm {
19260
18713
  try {
19261
18714
  await this.device.addHybridGroupSession(streamId, session.sessionId, session.sessionKey);
19262
18715
  } catch (e) {
19263
- logError3(`Error handling room key import: ${e.message}`);
18716
+ logError2(`Error handling room key import: ${e.message}`);
19264
18717
  throw e;
19265
18718
  }
19266
18719
  }
@@ -19282,7 +18735,7 @@ var HybridGroupDecryption = class extends DecryptionAlgorithm {
19282
18735
  };
19283
18736
 
19284
18737
  // ../encryption/dist/groupEncryptionCrypto.js
19285
- var log7 = dlog("csb:encryption:groupEncryptionCrypto");
18738
+ var log6 = dlog("csb:encryption:groupEncryptionCrypto");
19286
18739
  var GroupEncryptionCrypto = class {
19287
18740
  delegate;
19288
18741
  encryptionDevice;
@@ -19295,24 +18748,17 @@ var GroupEncryptionCrypto = class {
19295
18748
  this.cryptoStore = cryptoStore;
19296
18749
  this.delegate = new EncryptionDelegate();
19297
18750
  this.delegate.init().catch((e) => {
19298
- log7("error initializing olm", e);
18751
+ log6("error initializing olm", e);
19299
18752
  throw e;
19300
18753
  });
19301
18754
  this.encryptionDevice = new EncryptionDevice(this.delegate, cryptoStore);
19302
18755
  this.groupEncryption = {
19303
- [GroupEncryptionAlgorithmId.GroupEncryption]: new GroupEncryption({
19304
- device: this.encryptionDevice,
19305
- client
19306
- }),
19307
18756
  [GroupEncryptionAlgorithmId.HybridGroupEncryption]: new HybridGroupEncryption({
19308
18757
  device: this.encryptionDevice,
19309
18758
  client
19310
18759
  })
19311
18760
  };
19312
18761
  this.groupDecryption = {
19313
- [GroupEncryptionAlgorithmId.GroupEncryption]: new GroupDecryption({
19314
- device: this.encryptionDevice
19315
- }),
19316
18762
  [GroupEncryptionAlgorithmId.HybridGroupEncryption]: new HybridGroupDecryption({
19317
18763
  device: this.encryptionDevice
19318
18764
  })
@@ -19324,7 +18770,7 @@ var GroupEncryptionCrypto = class {
19324
18770
  async init(opts) {
19325
18771
  await this.encryptionDevice.init(opts);
19326
18772
  if (!this.encryptionDevice.deviceCurve25519Key || !this.encryptionDevice.deviceDoNotUseKey) {
19327
- log7("device keys not initialized, cannot encrypt event");
18773
+ log6("device keys not initialized, cannot encrypt event");
19328
18774
  }
19329
18775
  }
19330
18776
  /**
@@ -19381,15 +18827,6 @@ var GroupEncryptionCrypto = class {
19381
18827
  async encryptGroupEvent(streamId, payload, algorithm) {
19382
18828
  return this.groupEncryption[algorithm].encrypt(streamId, payload);
19383
18829
  }
19384
- /**
19385
- * Deprecated uses v0 encryption version
19386
- *
19387
- * @returns Promise which resolves when the event has been
19388
- * encrypted, or null if nothing was needed
19389
- */
19390
- async encryptGroupEvent_deprecated_v0(streamId, payload, algorithm) {
19391
- return this.groupEncryption[algorithm].encrypt_deprecated_v0(streamId, payload);
19392
- }
19393
18830
  /**
19394
18831
  * Decrypt a received event using group encryption algorithm
19395
18832
  *
@@ -19399,7 +18836,8 @@ var GroupEncryptionCrypto = class {
19399
18836
  async decryptGroupEvent(streamId, content) {
19400
18837
  const algorithm = parseGroupEncryptionAlgorithmId(content.algorithm);
19401
18838
  if (algorithm.kind === "unrecognized") {
19402
- throw new DecryptionError("GROUP_DECRYPTION_UNKNOWN_ALGORITHM", content.algorithm);
18839
+ log6(`skipping event with unrecognized algorithm: ${content.algorithm}`);
18840
+ return void 0;
19403
18841
  }
19404
18842
  return this.groupDecryption[algorithm.value].decrypt(streamId, content);
19405
18843
  }
@@ -19459,10 +18897,10 @@ var GroupEncryptionCrypto = class {
19459
18897
  try {
19460
18898
  await this.groupDecryption[algorithm].importStreamKey(streamId, key);
19461
18899
  } catch (error) {
19462
- log7(`failed to import key`, error);
18900
+ log6(`failed to import key`, error);
19463
18901
  }
19464
18902
  } else {
19465
- log7(`unknown algorithm ${algorithm}`);
18903
+ log6(`unknown algorithm ${algorithm}`);
19466
18904
  }
19467
18905
  })));
19468
18906
  }
@@ -19486,7 +18924,7 @@ var GroupEncryptionCrypto = class {
19486
18924
  }
19487
18925
  return Promise.all(keys2.map(async (key) => {
19488
18926
  if (!key.streamId || !key.algorithm) {
19489
- log7("ignoring room key entry with missing fields", key);
18927
+ log6("ignoring room key entry with missing fields", key);
19490
18928
  failures++;
19491
18929
  if (opts.progressCallback) {
19492
18930
  updateProgress();
@@ -19502,14 +18940,14 @@ var GroupEncryptionCrypto = class {
19502
18940
  updateProgress();
19503
18941
  }
19504
18942
  } catch (error) {
19505
- log7("failed to import key", error);
18943
+ log6("failed to import key", error);
19506
18944
  failures++;
19507
18945
  if (opts.progressCallback) {
19508
18946
  updateProgress();
19509
18947
  }
19510
18948
  }
19511
18949
  } else {
19512
- log7(`unknown algorithm ${algorithm}`);
18950
+ log6(`unknown algorithm ${algorithm}`);
19513
18951
  }
19514
18952
  })).then();
19515
18953
  }
@@ -20509,7 +19947,7 @@ function SpaceIdFromSpaceAddress(spaceAddress) {
20509
19947
  return spaceAddress.toLowerCase().replace("0x", "10").padEnd(64, "0");
20510
19948
  }
20511
19949
 
20512
- // ../deployments/dist/config/deployments.json
19950
+ // ../contracts/dist/config/deployments.json
20513
19951
  var deployments_default = {
20514
19952
  beta: {
20515
19953
  river: {
@@ -20816,7 +20254,7 @@ function makeWeb3Deployment(optionalEnv, requiredEnv) {
20816
20254
  }
20817
20255
 
20818
20256
  // ../web3/dist/utils/xchain.js
20819
- var log8 = dlogger("csb:XChainConfig");
20257
+ var log7 = dlogger("csb:XChainConfig");
20820
20258
  var validateLog = dlogger("csb:validateAndParseXChainConfig");
20821
20259
 
20822
20260
  // ../web3/dist/web3Types.js
@@ -20860,18 +20298,18 @@ var reviewAbi = [
20860
20298
  }
20861
20299
  ];
20862
20300
  function getSpaceReviewEventDataBin(binLogs, from) {
20863
- const logs = binLogs.map((log13) => ({
20864
- address: "0x" + bin_toHexString(log13.address),
20865
- topics: log13.topics.map((topic) => "0x" + bin_toHexString(topic)),
20866
- data: "0x" + bin_toHexString(log13.data)
20301
+ const logs = binLogs.map((log12) => ({
20302
+ address: "0x" + bin_toHexString(log12.address),
20303
+ topics: log12.topics.map((topic) => "0x" + bin_toHexString(topic)),
20304
+ data: "0x" + bin_toHexString(log12.data)
20867
20305
  }));
20868
20306
  const senderWallet = ("0x" + bin_toHexString(from)).toLowerCase();
20869
- for (const log13 of logs) {
20307
+ for (const log12 of logs) {
20870
20308
  try {
20871
20309
  const decoded = (0, import_viem5.decodeEventLog)({
20872
20310
  abi: reviewAbi,
20873
- data: log13.data,
20874
- topics: log13.topics
20311
+ data: log12.data,
20312
+ topics: log12.topics
20875
20313
  });
20876
20314
  if (decoded.eventName === "ReviewAdded" && decoded.args.user.toLowerCase() === senderWallet) {
20877
20315
  return {
@@ -21156,7 +20594,7 @@ function townsEnv(opts) {
21156
20594
  var import_ethers7 = require("ethers");
21157
20595
 
21158
20596
  // ../sdk/dist/decryptionExtensions.js
21159
- var import_protobuf10 = require("@bufbuild/protobuf");
20597
+ var import_protobuf9 = require("@bufbuild/protobuf");
21160
20598
 
21161
20599
  // ../sdk/dist/observable/utils.js
21162
20600
  function sortedArraysEqual(a, b) {
@@ -21618,7 +21056,7 @@ var BaseDecryptionExtensions = class {
21618
21056
  return;
21619
21057
  }
21620
21058
  this.log.debug("processNewGroupSession", session);
21621
- const parsed = parseGroupEncryptionAlgorithmId(session.algorithm, GroupEncryptionAlgorithmId.GroupEncryption);
21059
+ const parsed = parseGroupEncryptionAlgorithmId(session.algorithm, GroupEncryptionAlgorithmId.HybridGroupEncryption);
21622
21060
  if (parsed.kind === "unrecognized") {
21623
21061
  this.log.error("skipping, invalid algorithm", session.algorithm);
21624
21062
  return;
@@ -21634,7 +21072,7 @@ var BaseDecryptionExtensions = class {
21634
21072
  }
21635
21073
  if (neededKeyIndexs.length > 0) {
21636
21074
  const cleartext = await this.crypto.decryptWithDeviceKey(ciphertext, session.senderKey);
21637
- const sessionKeys = (0, import_protobuf10.fromJsonString)(SessionKeysSchema, cleartext);
21075
+ const sessionKeys = (0, import_protobuf9.fromJsonString)(SessionKeysSchema, cleartext);
21638
21076
  check(sessionKeys.keys.length === session.sessionIds.length, "bad sessionKeys");
21639
21077
  const neededSessions = neededKeyIndexs.map((i2) => ({
21640
21078
  streamId,
@@ -21878,7 +21316,7 @@ var BaseDecryptionExtensions = class {
21878
21316
  };
21879
21317
  function makeSessionKeys(sessions) {
21880
21318
  const sessionKeys = sessions.map((s) => s.sessionKey);
21881
- return (0, import_protobuf10.create)(SessionKeysSchema, {
21319
+ return (0, import_protobuf9.create)(SessionKeysSchema, {
21882
21320
  keys: sessionKeys
21883
21321
  });
21884
21322
  }
@@ -21920,7 +21358,7 @@ var RiverDbManager = class {
21920
21358
  };
21921
21359
 
21922
21360
  // ../sdk/dist/types.js
21923
- var import_protobuf11 = require("@bufbuild/protobuf");
21361
+ var import_protobuf10 = require("@bufbuild/protobuf");
21924
21362
  function isSolanaTransactionReceipt(obj) {
21925
21363
  return typeof obj === "object" && obj !== null && "transaction" in obj && "meta" in obj && typeof obj["meta"] === "object" && obj.meta !== null && "preTokenBalances" in obj.meta && "postTokenBalances" in obj.meta;
21926
21364
  }
@@ -22064,8 +21502,7 @@ var make_MemberPayload_Membership2 = (value) => {
22064
21502
  userAddress: addressFromUserId(value.userId),
22065
21503
  op: value.op,
22066
21504
  initiatorAddress: addressFromUserId(value.initiatorId),
22067
- reason: MembershipReason.MR_NONE,
22068
- appAddress: value.appAddress ? bin_fromHexString(value.appAddress) : void 0
21505
+ reason: MembershipReason.MR_NONE
22069
21506
  });
22070
21507
  };
22071
21508
  var make_GDMChannelPayload_Inception = (value) => {
@@ -22301,10 +21738,10 @@ var getRefEventIdFromChannelMessage = (message) => {
22301
21738
  };
22302
21739
 
22303
21740
  // ../sdk/dist/client-v2.js
22304
- var import_protobuf20 = require("@bufbuild/protobuf");
21741
+ var import_protobuf19 = require("@bufbuild/protobuf");
22305
21742
 
22306
21743
  // ../sdk/dist/encryptedContentTypes.js
22307
- var import_protobuf12 = require("@bufbuild/protobuf");
21744
+ var import_protobuf11 = require("@bufbuild/protobuf");
22308
21745
  function isEncryptedContentKind(kind) {
22309
21746
  return kind === "text" || kind === "channelMessage" || kind === "channelProperties" || kind === "interactionRequestPayload";
22310
21747
  }
@@ -22323,17 +21760,17 @@ function toDecryptedContent(kind, dataVersion, cleartext) {
22323
21760
  case "channelMessage":
22324
21761
  return {
22325
21762
  kind,
22326
- content: (0, import_protobuf12.fromJsonString)(ChannelMessageSchema, cleartext)
21763
+ content: (0, import_protobuf11.fromJsonString)(ChannelMessageSchema, cleartext)
22327
21764
  };
22328
21765
  case "channelProperties":
22329
21766
  return {
22330
21767
  kind,
22331
- content: (0, import_protobuf12.fromJsonString)(ChannelPropertiesSchema, cleartext)
21768
+ content: (0, import_protobuf11.fromJsonString)(ChannelPropertiesSchema, cleartext)
22332
21769
  };
22333
21770
  case "interactionRequestPayload":
22334
21771
  return {
22335
21772
  kind,
22336
- content: (0, import_protobuf12.fromJsonString)(InteractionRequestPayloadSchema, cleartext)
21773
+ content: (0, import_protobuf11.fromJsonString)(InteractionRequestPayloadSchema, cleartext)
22337
21774
  };
22338
21775
  default:
22339
21776
  checkNever(kind);
@@ -22355,17 +21792,17 @@ function toDecryptedContent(kind, dataVersion, cleartext) {
22355
21792
  case "channelProperties":
22356
21793
  return {
22357
21794
  kind: "channelProperties",
22358
- content: (0, import_protobuf12.fromBinary)(ChannelPropertiesSchema, cleartext)
21795
+ content: (0, import_protobuf11.fromBinary)(ChannelPropertiesSchema, cleartext)
22359
21796
  };
22360
21797
  case "channelMessage":
22361
21798
  return {
22362
21799
  kind: "channelMessage",
22363
- content: (0, import_protobuf12.fromBinary)(ChannelMessageSchema, cleartext)
21800
+ content: (0, import_protobuf11.fromBinary)(ChannelMessageSchema, cleartext)
22364
21801
  };
22365
21802
  case "interactionRequestPayload":
22366
21803
  return {
22367
21804
  kind: "interactionRequestPayload",
22368
- content: (0, import_protobuf12.fromBinary)(InteractionRequestPayloadSchema, cleartext)
21805
+ content: (0, import_protobuf11.fromBinary)(InteractionRequestPayloadSchema, cleartext)
22369
21806
  };
22370
21807
  default:
22371
21808
  checkNever(kind);
@@ -22597,8 +22034,8 @@ var StreamStateView_User = class extends StreamStateView_AbstractContent {
22597
22034
  };
22598
22035
 
22599
22036
  // ../sdk/dist/streamStateView_UserSettings.js
22600
- var import_protobuf13 = require("@bufbuild/protobuf");
22601
- var log9 = dlog("csb:stream");
22037
+ var import_protobuf12 = require("@bufbuild/protobuf");
22038
+ var log8 = dlog("csb:stream");
22602
22039
  var StreamStateView_UserSettings = class extends StreamStateView_AbstractContent {
22603
22040
  userSettingsStreamsView;
22604
22041
  streamId;
@@ -22671,17 +22108,17 @@ var StreamStateView_UserSettings = class extends StreamStateView_AbstractContent
22671
22108
  }
22672
22109
  fullyReadMarkerUpdate(payload, emitter) {
22673
22110
  const { content } = payload;
22674
- log9("$ fullyReadMarkerUpdate", { content });
22111
+ log8("$ fullyReadMarkerUpdate", { content });
22675
22112
  if (content === void 0) {
22676
- log9("$ Content with FullyReadMarkers is undefined");
22113
+ log8("$ Content with FullyReadMarkers is undefined");
22677
22114
  return;
22678
22115
  }
22679
22116
  const streamId = streamIdFromBytes(payload.streamId);
22680
22117
  let fullyReadMarkersContent;
22681
22118
  try {
22682
- fullyReadMarkersContent = (0, import_protobuf13.fromJsonString)(FullyReadMarkersSchema, content.data);
22119
+ fullyReadMarkersContent = (0, import_protobuf12.fromJsonString)(FullyReadMarkersSchema, content.data);
22683
22120
  } catch (e) {
22684
- log9("failed to decode FullyReadMarkers, skipping", streamId, e);
22121
+ log8("failed to decode FullyReadMarkers, skipping", streamId, e);
22685
22122
  return;
22686
22123
  }
22687
22124
  this.userSettingsStreamsView.setFullyReadMarkers(this.streamId, streamId, fullyReadMarkersContent.markers);
@@ -22689,7 +22126,7 @@ var StreamStateView_UserSettings = class extends StreamStateView_AbstractContent
22689
22126
  }
22690
22127
  userBlockUpdate(payload, emitter) {
22691
22128
  const userId = userIdFromAddress(payload.userId);
22692
- const userBlock = (0, import_protobuf13.create)(UserSettingsPayload_Snapshot_UserBlocks_BlockSchema, {
22129
+ const userBlock = (0, import_protobuf12.create)(UserSettingsPayload_Snapshot_UserBlocks_BlockSchema, {
22693
22130
  eventNum: payload.eventNum,
22694
22131
  isBlocked: payload.isBlocked
22695
22132
  });
@@ -22820,7 +22257,7 @@ async function encryptChunkedAESGCM(data, chunkSize) {
22820
22257
  }
22821
22258
 
22822
22259
  // ../sdk/dist/streamStateView_UserMetadata.js
22823
- var import_protobuf14 = require("@bufbuild/protobuf");
22260
+ var import_protobuf13 = require("@bufbuild/protobuf");
22824
22261
  var StreamStateView_UserMetadata = class extends StreamStateView_AbstractContent {
22825
22262
  userMetadataStreamsView;
22826
22263
  streamId;
@@ -22913,7 +22350,7 @@ var StreamStateView_UserMetadata = class extends StreamStateView_AbstractContent
22913
22350
  this.decryptionInProgress = {
22914
22351
  ...this.decryptionInProgress,
22915
22352
  image: this.decrypt(encryptedData, (decrypted) => {
22916
- const profileImage = (0, import_protobuf14.fromBinary)(ChunkedMediaSchema, decrypted);
22353
+ const profileImage = (0, import_protobuf13.fromBinary)(ChunkedMediaSchema, decrypted);
22917
22354
  this.profileImage = profileImage;
22918
22355
  return profileImage;
22919
22356
  }, () => {
@@ -22937,7 +22374,7 @@ var StreamStateView_UserMetadata = class extends StreamStateView_AbstractContent
22937
22374
  this.decryptionInProgress = {
22938
22375
  ...this.decryptionInProgress,
22939
22376
  bio: this.decrypt(encryptedData, (plaintext) => {
22940
- const bioPlaintext = (0, import_protobuf14.fromBinary)(UserBioSchema, plaintext);
22377
+ const bioPlaintext = (0, import_protobuf13.fromBinary)(UserBioSchema, plaintext);
22941
22378
  this.bio = bioPlaintext;
22942
22379
  return bioPlaintext;
22943
22380
  }, () => {
@@ -23046,7 +22483,7 @@ var StreamStateView_MemberMetadata = class {
23046
22483
 
23047
22484
  // ../sdk/dist/streamStateView_Members.js
23048
22485
  var import_ethers6 = require("ethers");
23049
- var log10 = dlog("csb:streamStateView_Members");
22486
+ var log9 = dlog("csb:streamStateView_Members");
23050
22487
  var StreamStateView_Members = class extends StreamStateView_AbstractContent {
23051
22488
  streamMemberIdsView;
23052
22489
  streamId;
@@ -23182,7 +22619,7 @@ var StreamStateView_Members = class extends StreamStateView_AbstractContent {
23182
22619
  switch (membership.op) {
23183
22620
  case MembershipOp.SO_JOIN:
23184
22621
  if (this.joined.has(userId)) {
23185
- log10("user already joined", this.streamId, userId);
22622
+ log9("user already joined", this.streamId, userId);
23186
22623
  return;
23187
22624
  }
23188
22625
  this.joined.set(userId, {
@@ -23327,6 +22764,8 @@ var StreamStateView_Members = class extends StreamStateView_AbstractContent {
23327
22764
  this.encryptionAlgorithm = payload.content.value.algorithm;
23328
22765
  stateEmitter?.emit("streamEncryptionAlgorithmUpdated", this.streamId, this.encryptionAlgorithm);
23329
22766
  break;
22767
+ case "setAppAddress":
22768
+ case "unsetAppAddress":
23330
22769
  case void 0:
23331
22770
  break;
23332
22771
  default:
@@ -23365,6 +22804,8 @@ var StreamStateView_Members = class extends StreamStateView_AbstractContent {
23365
22804
  break;
23366
22805
  case "encryptionAlgorithm":
23367
22806
  break;
22807
+ case "setAppAddress":
22808
+ case "unsetAppAddress":
23368
22809
  case void 0:
23369
22810
  break;
23370
22811
  default:
@@ -23886,7 +23327,7 @@ function snapshotMigration0003(snapshot) {
23886
23327
  }
23887
23328
 
23888
23329
  // ../sdk/dist/migrations/snapshotMigration0004.js
23889
- var import_protobuf15 = require("@bufbuild/protobuf");
23330
+ var import_protobuf14 = require("@bufbuild/protobuf");
23890
23331
  var logger2 = dlogger("csb:snapshotMigration0004");
23891
23332
  var LOG_SIZE_REDUCTION = false;
23892
23333
  function snapshotMigration0004(snapshot, force = false) {
@@ -23916,7 +23357,7 @@ function snapshotMigration0004(snapshot, force = false) {
23916
23357
  }
23917
23358
  const lostSessionIds = Array.from(sessionIdCounts.entries()).filter(([_, count]) => count > threshold).map(([id]) => id).toSorted();
23918
23359
  if (lostSessionIds.length) {
23919
- const before = LOG_SIZE_REDUCTION ? (0, import_protobuf15.toBinary)(SnapshotSchema, snapshot).length : void 0;
23360
+ const before = LOG_SIZE_REDUCTION ? (0, import_protobuf14.toBinary)(SnapshotSchema, snapshot).length : void 0;
23920
23361
  let numRemove = 0;
23921
23362
  for (const member of members) {
23922
23363
  for (const solicitation of member.solicitations) {
@@ -23929,7 +23370,7 @@ function snapshotMigration0004(snapshot, force = false) {
23929
23370
  const streamIdBytes = snapshot.content.value?.inception?.streamId;
23930
23371
  const streamId = streamIdBytes ? bin_toHexString(streamIdBytes) : "";
23931
23372
  const spaceAddress = SpaceIdFromSpaceAddress(streamId);
23932
- const after = LOG_SIZE_REDUCTION ? (0, import_protobuf15.toBinary)(SnapshotSchema, snapshot).length : void 0;
23373
+ const after = LOG_SIZE_REDUCTION ? (0, import_protobuf14.toBinary)(SnapshotSchema, snapshot).length : void 0;
23933
23374
  const mbSaved = before && after ? (before - after) / 1024 / 1024 : void 0;
23934
23375
  const sizeLog = before && after && mbSaved ? `Snapshot size reduced from ${before} to ${after}, ${mbSaved.toFixed(2)} MB saved` : "";
23935
23376
  logger2.info(`${spaceAddress} ${sizeLog} ${numRemove} sessionIds`);
@@ -23938,7 +23379,7 @@ function snapshotMigration0004(snapshot, force = false) {
23938
23379
  }
23939
23380
 
23940
23381
  // ../sdk/dist/migrations/snapshotMigration0005.js
23941
- var import_protobuf16 = require("@bufbuild/protobuf");
23382
+ var import_protobuf15 = require("@bufbuild/protobuf");
23942
23383
  var logger3 = dlogger("csb:snapshotMigration0005");
23943
23384
  var LOG_SIZE_REDUCTION2 = false;
23944
23385
  function snapshotMigration0005(snapshot, force = false) {
@@ -23965,7 +23406,7 @@ function snapshotMigration0005(snapshot, force = false) {
23965
23406
  const lostSessionIds = Array.from(sessionIdCounts.entries()).filter(([_, count]) => count > threshold).map(([id]) => id);
23966
23407
  if (lostSessionIds.length) {
23967
23408
  const lostSessionIdsSet = new Set(lostSessionIds);
23968
- const before = LOG_SIZE_REDUCTION2 ? (0, import_protobuf16.toBinary)(SnapshotSchema, snapshot).length : void 0;
23409
+ const before = LOG_SIZE_REDUCTION2 ? (0, import_protobuf15.toBinary)(SnapshotSchema, snapshot).length : void 0;
23969
23410
  let numRemove = 0;
23970
23411
  for (const member of members) {
23971
23412
  for (const solicitation of member.solicitations) {
@@ -23979,7 +23420,7 @@ function snapshotMigration0005(snapshot, force = false) {
23979
23420
  const streamIdBytes = snapshot.content.value?.inception?.streamId;
23980
23421
  const streamId = streamIdBytes ? bin_toHexString(streamIdBytes) : "";
23981
23422
  const spaceAddress = SpaceIdFromSpaceAddress(streamId);
23982
- const after = LOG_SIZE_REDUCTION2 ? (0, import_protobuf16.toBinary)(SnapshotSchema, snapshot).length : void 0;
23423
+ const after = LOG_SIZE_REDUCTION2 ? (0, import_protobuf15.toBinary)(SnapshotSchema, snapshot).length : void 0;
23983
23424
  const mbSaved = before && after ? (before - after) / 1024 / 1024 : void 0;
23984
23425
  const sizeLog = before && after && mbSaved ? `Snapshot size reduced from ${before} to ${after}, ${mbSaved.toFixed(2)} MB saved` : "";
23985
23426
  logger3.info(`${spaceAddress} ${sizeLog} ${numRemove} sessionIds`);
@@ -24262,7 +23703,7 @@ var StreamStatus = class extends ObservableRecord {
24262
23703
  };
24263
23704
 
24264
23705
  // ../sdk/dist/views/models/timelineTypes.js
24265
- var import_protobuf17 = require("@bufbuild/protobuf");
23706
+ var import_protobuf16 = require("@bufbuild/protobuf");
24266
23707
  var EventStatus;
24267
23708
  (function(EventStatus2) {
24268
23709
  EventStatus2["NOT_SENT"] = "not_sent";
@@ -24307,6 +23748,8 @@ var RiverTimelineEvent;
24307
23748
  RiverTimelineEvent2["UserReceivedBlockchainTransaction"] = "m.user_received_blockchain_transaction";
24308
23749
  RiverTimelineEvent2["ConversationSeed"] = "m.conversation_seed";
24309
23750
  RiverTimelineEvent2["ConversationSeedResponse"] = "m.conversation_seed_response";
23751
+ RiverTimelineEvent2["SetAppAddress"] = "m.set_app_address";
23752
+ RiverTimelineEvent2["UnsetAppAddress"] = "m.unset_app_address";
24310
23753
  })(RiverTimelineEvent || (RiverTimelineEvent = {}));
24311
23754
  var Membership;
24312
23755
  (function(Membership2) {
@@ -24606,6 +24049,21 @@ function toTownsContent_MemberPayload(event, message, value, description) {
24606
24049
  return {
24607
24050
  error: `Encryption Algorithm not supported: ${description}`
24608
24051
  };
24052
+ case "setAppAddress":
24053
+ return {
24054
+ content: {
24055
+ kind: RiverTimelineEvent.SetAppAddress,
24056
+ userId: bin_toHexString(value.content.value.userAddress),
24057
+ appAddress: bin_toHexString(value.content.value.appAddress)
24058
+ }
24059
+ };
24060
+ case "unsetAppAddress":
24061
+ return {
24062
+ content: {
24063
+ kind: RiverTimelineEvent.UnsetAppAddress,
24064
+ userId: bin_toHexString(value.content.value.userAddress)
24065
+ }
24066
+ };
24609
24067
  case void 0:
24610
24068
  return { error: `Undefined payload case: ${description}` };
24611
24069
  default:
@@ -25250,6 +24708,8 @@ function toDecryptedEvent(event, decryptedContent, userId) {
25250
24708
  case RiverTimelineEvent.UserReceivedBlockchainTransaction:
25251
24709
  case RiverTimelineEvent.ConversationSeed:
25252
24710
  case RiverTimelineEvent.ConversationSeedResponse:
24711
+ case RiverTimelineEvent.SetAppAddress:
24712
+ case RiverTimelineEvent.UnsetAppAddress:
25253
24713
  return event;
25254
24714
  default:
25255
24715
  logNever(event.content);
@@ -25360,6 +24820,10 @@ function getFallbackContent(senderDisplayName, content, error) {
25360
24820
  return toConversationSeedBody(content);
25361
24821
  case RiverTimelineEvent.ConversationSeedResponse:
25362
24822
  return toConversationSeedResponseBody(content);
24823
+ case RiverTimelineEvent.SetAppAddress:
24824
+ return `setAppAddress: ${content.userId} -> ${content.appAddress}`;
24825
+ case RiverTimelineEvent.UnsetAppAddress:
24826
+ return `unsetAppAddress: ${content.userId}`;
25363
24827
  default:
25364
24828
  checkNever(content);
25365
24829
  }
@@ -26070,7 +25534,7 @@ var TimelinesView = class extends Observable {
26070
25534
  };
26071
25535
 
26072
25536
  // ../sdk/dist/views/streams/userSettingsStreams.js
26073
- var import_protobuf18 = require("@bufbuild/protobuf");
25537
+ var import_protobuf17 = require("@bufbuild/protobuf");
26074
25538
  var DEFAULT_USER_SETTINGS_STREAM_MODEL = (userSettingsStreamId) => ({
26075
25539
  streamId: userSettingsStreamId,
26076
25540
  initialized: false,
@@ -26078,7 +25542,7 @@ var DEFAULT_USER_SETTINGS_STREAM_MODEL = (userSettingsStreamId) => ({
26078
25542
  userBlocks: {},
26079
25543
  appAddress: void 0
26080
25544
  });
26081
- var EMPTY_USER_BLOCKS = (0, import_protobuf18.create)(UserSettingsPayload_Snapshot_UserBlocksSchema, {
25545
+ var EMPTY_USER_BLOCKS = (0, import_protobuf17.create)(UserSettingsPayload_Snapshot_UserBlocksSchema, {
26082
25546
  blocks: [],
26083
25547
  userId: new Uint8Array()
26084
25548
  });
@@ -26957,7 +26421,7 @@ function membersNotInDmsTransform(value, prev, prevResult) {
26957
26421
  }
26958
26422
 
26959
26423
  // ../sdk/dist/notificationsClient.js
26960
- var import_protobuf19 = require("@bufbuild/protobuf");
26424
+ var import_protobuf18 = require("@bufbuild/protobuf");
26961
26425
 
26962
26426
  // ../sdk/dist/makeNotificationRpcClient.js
26963
26427
  var logInfo4 = dlog("csb:rpc:info");
@@ -27043,10 +26507,10 @@ var InMemoryNotificationStore = class {
27043
26507
  store = {};
27044
26508
  getItem(schema, key) {
27045
26509
  const data = this.store[`${schema.typeName}-${key}`];
27046
- return data ? (0, import_protobuf19.fromBinary)(schema, bin_fromBase64(data)) : void 0;
26510
+ return data ? (0, import_protobuf18.fromBinary)(schema, bin_fromBase64(data)) : void 0;
27047
26511
  }
27048
26512
  setItem(schema, key, value) {
27049
- this.store[`${schema.typeName}-${key}`] = bin_toBase64((0, import_protobuf19.toBinary)(schema, value));
26513
+ this.store[`${schema.typeName}-${key}`] = bin_toBase64((0, import_protobuf18.toBinary)(schema, value));
27050
26514
  }
27051
26515
  };
27052
26516
  var NotificationsClient = class {
@@ -27165,7 +26629,7 @@ var NotificationsClient = class {
27165
26629
  const response = await client.getSettings({});
27166
26630
  this.setLocalSettings(response);
27167
26631
  this.streamsView.notificationSettings.updateSettings(response, Date.now());
27168
- logger6.log("TNS PUSH: fetched settings", (0, import_protobuf19.toJson)(GetSettingsResponseSchema, response));
26632
+ logger6.log("TNS PUSH: fetched settings", (0, import_protobuf18.toJson)(GetSettingsResponseSchema, response));
27169
26633
  this.getSettingsPromise = void 0;
27170
26634
  return response;
27171
26635
  } catch (error) {
@@ -27204,7 +26668,7 @@ var NotificationsClient = class {
27204
26668
  });
27205
26669
  this.updateLocalSettings((settings) => {
27206
26670
  settings.gdmChannels = settings.gdmChannels.filter((c2) => streamIdAsString(c2.channelId) !== channelId);
27207
- settings.gdmChannels.push((0, import_protobuf19.create)(GdmChannelSettingSchema, {
26671
+ settings.gdmChannels.push((0, import_protobuf18.create)(GdmChannelSettingSchema, {
27208
26672
  channelId: streamIdAsBytes(channelId),
27209
26673
  value
27210
26674
  }));
@@ -27350,8 +26814,8 @@ var StreamsView = class {
27350
26814
  };
27351
26815
 
27352
26816
  // ../sdk/dist/streamStateView.js
27353
- var log11 = dlog("csb:streams");
27354
- var logError4 = dlogError("csb:streams:error");
26817
+ var log10 = dlog("csb:streams");
26818
+ var logError3 = dlogError("csb:streams:error");
27355
26819
  var EMPTY_TIMELINE = [];
27356
26820
  var StreamStateView = class {
27357
26821
  streamId;
@@ -27410,7 +26874,7 @@ var StreamStateView = class {
27410
26874
  return this._mediaContent;
27411
26875
  }
27412
26876
  constructor(userId, streamId, streamsView) {
27413
- log11("streamStateView::constructor", streamId);
26877
+ log10("streamStateView::constructor", streamId);
27414
26878
  this.userId = userId;
27415
26879
  this.streamId = streamId;
27416
26880
  this.streamsView = streamsView || new StreamsView("", void 0);
@@ -27555,7 +27019,7 @@ var StreamStateView = class {
27555
27019
  this.getContent().appendEvent(timelineEvent, cleartext, encryptionEmitter, stateEmitter);
27556
27020
  }
27557
27021
  } catch (e) {
27558
- logError4(`StreamStateView::Error appending streamId: ${this.streamId} event ${event.hashStr}`, e);
27022
+ logError3(`StreamStateView::Error appending streamId: ${this.streamId} event ${event.hashStr}`, e);
27559
27023
  }
27560
27024
  return confirmed;
27561
27025
  }
@@ -27565,7 +27029,7 @@ var StreamStateView = class {
27565
27029
  const eventId = bin_toHexString(eventHashes[i2]);
27566
27030
  const event = this.minipoolEvents.get(eventId);
27567
27031
  if (!event) {
27568
- logError4(`Mininblock event not found ${eventId}`);
27032
+ logError3(`Mininblock event not found ${eventId}`);
27569
27033
  continue;
27570
27034
  }
27571
27035
  this.minipoolEvents.delete(eventId);
@@ -27600,13 +27064,13 @@ var StreamStateView = class {
27600
27064
  this.membershipContent.prependEvent(timelineEvent, cleartext, encryptionEmitter, stateEmitter);
27601
27065
  break;
27602
27066
  case void 0:
27603
- logError4(`StreamStateView::Error undefined payload case ${event.hashStr}`, payload);
27067
+ logError3(`StreamStateView::Error undefined payload case ${event.hashStr}`, payload);
27604
27068
  break;
27605
27069
  default:
27606
27070
  this.getContent().prependEvent(timelineEvent, cleartext, encryptionEmitter, stateEmitter);
27607
27071
  }
27608
27072
  } catch (e) {
27609
- logError4(`StreamStateView::Error prepending stream ${this.streamId} event ${event.hashStr}`, e);
27073
+ logError3(`StreamStateView::Error prepending stream ${this.streamId} event ${event.hashStr}`, e);
27610
27074
  }
27611
27075
  }
27612
27076
  updateMiniblockInfo(value, update2) {
@@ -27736,7 +27200,7 @@ var StreamStateView = class {
27736
27200
  }
27737
27201
  appendLocalEvent(channelMessage, status, emitter, appClientAddress) {
27738
27202
  const localId = genLocalId();
27739
- log11("appendLocalEvent", localId);
27203
+ log10("appendLocalEvent", localId);
27740
27204
  const timelineEvent = {
27741
27205
  hashStr: localId,
27742
27206
  creatorUserId: this.userId,
@@ -27752,10 +27216,10 @@ var StreamStateView = class {
27752
27216
  return localId;
27753
27217
  }
27754
27218
  updateLocalEvent(localId, parsedEventHash, status, emitter) {
27755
- log11("updateLocalEvent", { localId, parsedEventHash, status });
27219
+ log10("updateLocalEvent", { localId, parsedEventHash, status });
27756
27220
  const timelineEvent = this.minipoolEvents.get(localId) ?? this.minipoolEvents.get(parsedEventHash);
27757
27221
  if (!isDefined(timelineEvent)) {
27758
- const logMissing = status === "sending" ? logError4 : log11;
27222
+ const logMissing = status === "sending" ? logError3 : log10;
27759
27223
  logMissing("Local event not found", {
27760
27224
  streamId: this.streamId,
27761
27225
  localId,
@@ -27765,7 +27229,7 @@ var StreamStateView = class {
27765
27229
  return;
27766
27230
  }
27767
27231
  if (!isLocalEvent(timelineEvent)) {
27768
- const logMissing = status === "sending" ? logError4 : log11;
27232
+ const logMissing = status === "sending" ? logError3 : log10;
27769
27233
  logMissing("Event is not local", {
27770
27234
  streamId: this.streamId,
27771
27235
  localId,
@@ -27831,7 +27295,7 @@ function timestampToEpochMs(ts) {
27831
27295
  }
27832
27296
 
27833
27297
  // ../sdk/dist/client.js
27834
- var import_protobuf22 = require("@bufbuild/protobuf");
27298
+ var import_protobuf21 = require("@bufbuild/protobuf");
27835
27299
 
27836
27300
  // ../sdk/dist/clientDecryptionExtensions.js
27837
27301
  var ClientDecryptionExtensions = class extends BaseDecryptionExtensions {
@@ -29127,7 +28591,7 @@ var Stream = class extends import_events.default {
29127
28591
  };
29128
28592
 
29129
28593
  // ../sdk/dist/syncedStream.js
29130
- var import_protobuf21 = require("@bufbuild/protobuf");
28594
+ var import_protobuf20 = require("@bufbuild/protobuf");
29131
28595
  var SyncedStream = class extends Stream {
29132
28596
  log;
29133
28597
  get isUpToDate() {
@@ -29160,7 +28624,7 @@ var SyncedStream = class extends Stream {
29160
28624
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
29161
28625
  async initialize(nextSyncCookie, events, snapshot, miniblocks, prependedMiniblocks, prevSnapshotMiniblockNum, cleartexts) {
29162
28626
  super.initialize(nextSyncCookie, events, snapshot, miniblocks, prependedMiniblocks, prevSnapshotMiniblockNum, cleartexts);
29163
- const cachedSyncedStream = (0, import_protobuf21.create)(PersistedSyncedStreamSchema, {
28627
+ const cachedSyncedStream = (0, import_protobuf20.create)(PersistedSyncedStreamSchema, {
29164
28628
  syncCookie: nextSyncCookie,
29165
28629
  lastSnapshotMiniblockNum: miniblocks[0].header.miniblockNum,
29166
28630
  minipoolEvents: events,
@@ -29216,7 +28680,7 @@ var SyncedStream = class extends Stream {
29216
28680
  }
29217
28681
  const minipoolEvents = Array.from(this.view.minipoolEvents.values());
29218
28682
  const lastSnapshotMiniblockNum = miniblock.header.snapshotHash !== void 0 && bin_equal(miniblock.header.snapshotHash, snapshot?.hash) ? miniblock.header.miniblockNum : miniblock.header.prevSnapshotMiniblockNum;
29219
- const cachedSyncedStream = (0, import_protobuf21.create)(PersistedSyncedStreamSchema, {
28683
+ const cachedSyncedStream = (0, import_protobuf20.create)(PersistedSyncedStreamSchema, {
29220
28684
  syncCookie,
29221
28685
  lastSnapshotMiniblockNum,
29222
28686
  minipoolEvents,
@@ -30287,7 +29751,7 @@ var Client = class extends import_events2.default {
30287
29751
  void channelSettings;
30288
29752
  throw new Error("Channel streams are not supported");
30289
29753
  }
30290
- async createGDMChannel(users, channelProperties, streamSettings) {
29754
+ async createGDMChannel(userIds, channelProperties, streamSettings) {
30291
29755
  const channelIdStr = makeUniqueGDMChannelStreamId();
30292
29756
  const channelId = streamIdAsBytes(channelIdStr);
30293
29757
  const events = [];
@@ -30300,24 +29764,31 @@ var Client = class extends import_events2.default {
30300
29764
  const joinEvent = await makeEvent(this.signerContext, make_MemberPayload_Membership2({
30301
29765
  userId: this.userId,
30302
29766
  op: MembershipOp.SO_JOIN,
30303
- initiatorId: this.userId,
30304
- appAddress: this.appAddress
29767
+ initiatorId: this.userId
30305
29768
  }));
30306
29769
  events.push(joinEvent);
30307
- for (const user of users) {
29770
+ for (const userId of userIds) {
30308
29771
  const inviteEvent = await makeEvent(this.signerContext, make_MemberPayload_Membership2({
30309
- userId: user.userId,
29772
+ userId,
30310
29773
  op: MembershipOp.SO_JOIN,
30311
- initiatorId: this.userId,
30312
- appAddress: user.appAddress
29774
+ initiatorId: this.userId
30313
29775
  }));
30314
29776
  events.push(inviteEvent);
30315
29777
  }
30316
- return this.createStreamAndSync({
29778
+ const result = await this.createStreamAndSync({
30317
29779
  events,
30318
29780
  streamId: channelId,
30319
29781
  metadata: {}
30320
29782
  });
29783
+ try {
29784
+ await this.ensureOutboundSession(result.streamId);
29785
+ } catch (error) {
29786
+ this.logError("Failed to ensure outbound session after GDM creation", {
29787
+ streamId: result.streamId,
29788
+ error
29789
+ });
29790
+ }
29791
+ return result;
30321
29792
  }
30322
29793
  async createMediaStream(channelId, spaceId, userId, chunkCount, firstChunk, firstChunkIv, streamSettings, perChunkEncryption) {
30323
29794
  assert(this.userStreamId !== void 0, "userStreamId must be set");
@@ -30375,11 +29846,11 @@ var Client = class extends import_events2.default {
30375
29846
  this.logCall("updateGDMChannelProperties", streamId, channelName, channelTopic);
30376
29847
  assert(isGDMChannelStreamId(streamId), "streamId must be a valid GDM stream id");
30377
29848
  check(isDefined(this.cryptoBackend));
30378
- const channelProps = (0, import_protobuf22.create)(ChannelPropertiesSchema, {
29849
+ const channelProps = (0, import_protobuf21.create)(ChannelPropertiesSchema, {
30379
29850
  name: channelName,
30380
29851
  topic: channelTopic
30381
29852
  });
30382
- const encryptedData = await this.cryptoBackend.encryptGroupEvent(streamId, (0, import_protobuf22.toBinary)(ChannelPropertiesSchema, channelProps), this.defaultGroupEncryptionAlgorithm);
29853
+ const encryptedData = await this.cryptoBackend.encryptGroupEvent(streamId, (0, import_protobuf21.toBinary)(ChannelPropertiesSchema, channelProps), this.defaultGroupEncryptionAlgorithm);
30383
29854
  const event = make_GDMChannelPayload_ChannelProperties(encryptedData);
30384
29855
  return this.makeEventAndAddToStream(streamId, event, {
30385
29856
  method: "updateGDMChannelProperties"
@@ -30399,12 +29870,12 @@ var Client = class extends import_events2.default {
30399
29870
  if (!isDefined(this.userSettingsStreamId)) {
30400
29871
  throw Error("userSettingsStreamId is not defined");
30401
29872
  }
30402
- const fullyReadMarkersContent = (0, import_protobuf22.create)(FullyReadMarkersSchema, {
29873
+ const fullyReadMarkersContent = (0, import_protobuf21.create)(FullyReadMarkersSchema, {
30403
29874
  markers: fullyReadMarkers
30404
29875
  });
30405
29876
  return this.makeEventAndAddToStream(this.userSettingsStreamId, make_UserSettingsPayload_FullyReadMarkers({
30406
29877
  streamId: streamIdAsBytes(channelId),
30407
- content: { data: (0, import_protobuf22.toJsonString)(FullyReadMarkersSchema, fullyReadMarkersContent) }
29878
+ content: { data: (0, import_protobuf21.toJsonString)(FullyReadMarkersSchema, fullyReadMarkersContent) }
30408
29879
  }), { method: "sendFullyReadMarker" });
30409
29880
  }
30410
29881
  async updateUserBlock(userId, isBlocked) {
@@ -30436,8 +29907,8 @@ var Client = class extends import_events2.default {
30436
29907
  await this.initStream(userStreamId);
30437
29908
  }
30438
29909
  const { key, iv } = await deriveKeyAndIV(context);
30439
- const { ciphertext } = await encryptAESGCM((0, import_protobuf22.toBinary)(ChunkedMediaSchema, (0, import_protobuf22.create)(ChunkedMediaSchema, chunkedMediaInfo)), key, iv);
30440
- const encryptedData = (0, import_protobuf22.create)(EncryptedDataSchema, {
29910
+ const { ciphertext } = await encryptAESGCM((0, import_protobuf21.toBinary)(ChunkedMediaSchema, (0, import_protobuf21.create)(ChunkedMediaSchema, chunkedMediaInfo)), key, iv);
29911
+ const encryptedData = (0, import_protobuf21.create)(EncryptedDataSchema, {
30441
29912
  ciphertext: uint8ArrayToBase64(ciphertext),
30442
29913
  algorithm: AES_GCM_DERIVED_ALGORITHM
30443
29914
  });
@@ -30454,9 +29925,9 @@ var Client = class extends import_events2.default {
30454
29925
  const userStreamId = makeUserMetadataStreamId(this.userId);
30455
29926
  const { key, iv } = await deriveKeyAndIV(context);
30456
29927
  bio.updatedAtEpochMs = BigInt(Date.now());
30457
- const bioBinary = (0, import_protobuf22.toBinary)(UserBioSchema, (0, import_protobuf22.create)(UserBioSchema, bio));
29928
+ const bioBinary = (0, import_protobuf21.toBinary)(UserBioSchema, (0, import_protobuf21.create)(UserBioSchema, bio));
30458
29929
  const { ciphertext } = await encryptAESGCM(bioBinary, key, iv);
30459
- const encryptedData = (0, import_protobuf22.create)(EncryptedDataSchema, {
29930
+ const encryptedData = (0, import_protobuf21.create)(EncryptedDataSchema, {
30460
29931
  ciphertext: uint8ArrayToBase64(ciphertext),
30461
29932
  algorithm: AES_GCM_DERIVED_ALGORITHM
30462
29933
  });
@@ -30723,7 +30194,7 @@ var Client = class extends import_events2.default {
30723
30194
  async sendChannelMessage(streamId, inPayload, opts) {
30724
30195
  const stream = this.stream(streamId);
30725
30196
  check(stream !== void 0, "stream not found");
30726
- const payload = (0, import_protobuf22.create)(ChannelMessageSchema, inPayload);
30197
+ const payload = (0, import_protobuf21.create)(ChannelMessageSchema, inPayload);
30727
30198
  const localId = stream.appendLocalEvent(payload, "sending", opts?.appClientAddress);
30728
30199
  opts?.onLocalEventAppended?.(localId);
30729
30200
  if (opts?.beforeSendEventHook) {
@@ -30741,21 +30212,9 @@ var Client = class extends import_events2.default {
30741
30212
  if (opts?.appClientAddress && tags) {
30742
30213
  tags.appClientAddress = bin_fromHexString(opts.appClientAddress);
30743
30214
  }
30744
- const cleartext = (0, import_protobuf22.toBinary)(ChannelMessageSchema, payload);
30745
- let message;
30746
- const encryptionAlgorithm = stream.view.membershipContent.encryptionAlgorithm;
30747
- const buffer = (0, import_protobuf22.toBinary)(ChannelMessageSchema, payload);
30748
- switch (encryptionAlgorithm) {
30749
- case GroupEncryptionAlgorithmId.HybridGroupEncryption:
30750
- message = await this.encryptGroupEvent(buffer, streamId, GroupEncryptionAlgorithmId.HybridGroupEncryption);
30751
- break;
30752
- case GroupEncryptionAlgorithmId.GroupEncryption:
30753
- message = await this.encryptGroupEvent(buffer, streamId, GroupEncryptionAlgorithmId.GroupEncryption);
30754
- break;
30755
- default: {
30756
- message = await this.encryptGroupEvent(buffer, streamId, this.defaultGroupEncryptionAlgorithm);
30757
- }
30758
- }
30215
+ const cleartext = (0, import_protobuf21.toBinary)(ChannelMessageSchema, payload);
30216
+ const buffer = (0, import_protobuf21.toBinary)(ChannelMessageSchema, payload);
30217
+ const message = await this.encryptGroupEvent(buffer, streamId, GroupEncryptionAlgorithmId.HybridGroupEncryption);
30759
30218
  if (!message) {
30760
30219
  throw new Error("failed to encrypt message");
30761
30220
  }
@@ -30936,12 +30395,11 @@ var Client = class extends import_events2.default {
30936
30395
  const stream = this.stream(streamId);
30937
30396
  check(isDefined(stream), "stream not found");
30938
30397
  check(isDefined(this.cryptoBackend), "crypto backend not initialized");
30939
- const payload = (0, import_protobuf22.create)(InteractionRequestPayloadSchema, {
30398
+ const payload = (0, import_protobuf21.create)(InteractionRequestPayloadSchema, {
30940
30399
  encryptionDevice: this.userDeviceKey(),
30941
30400
  content
30942
30401
  });
30943
- const encryptionAlgorithm = stream.view.membershipContent.encryptionAlgorithm ?? this.defaultGroupEncryptionAlgorithm;
30944
- const encryptedData = await this.cryptoBackend.encryptGroupEvent(streamId, (0, import_protobuf22.toBinary)(InteractionRequestPayloadSchema, payload), encryptionAlgorithm);
30402
+ const encryptedData = await this.cryptoBackend.encryptGroupEvent(streamId, (0, import_protobuf21.toBinary)(InteractionRequestPayloadSchema, payload), GroupEncryptionAlgorithmId.HybridGroupEncryption);
30945
30403
  const request = {
30946
30404
  recipient: typeof recipient === "string" ? bin_fromHexString(recipient) : recipient ?? void 0,
30947
30405
  encryptedData,
@@ -30954,7 +30412,7 @@ var Client = class extends import_events2.default {
30954
30412
  });
30955
30413
  }
30956
30414
  async sendInteractionResponse(streamId, recipient, payload, toUserDevice, opts) {
30957
- const binaryData = (0, import_protobuf22.toBinary)(InteractionResponsePayloadSchema, (0, import_protobuf22.create)(InteractionResponsePayloadSchema, payload));
30415
+ const binaryData = (0, import_protobuf21.toBinary)(InteractionResponsePayloadSchema, (0, import_protobuf21.create)(InteractionResponsePayloadSchema, payload));
30958
30416
  const string = bin_toBase64(binaryData);
30959
30417
  const ciphertextmap = await this.encryptWithDeviceKeys(string, [toUserDevice]);
30960
30418
  const ciphertext = ciphertextmap[toUserDevice.deviceKey];
@@ -31030,9 +30488,9 @@ var Client = class extends import_events2.default {
31030
30488
  streamId: streamIdAsBytes(streamId)
31031
30489
  }), { method: "joinUser" });
31032
30490
  try {
31033
- await this.encryptAndShareLatestGroupSessionToUser(streamId, userId);
30491
+ await this.encryptAndShareAllGroupSessionsToUser(streamId, userId);
31034
30492
  } catch (error) {
31035
- this.logError("Failed to share group session to user", {
30493
+ this.logError("Failed to share group sessions to user", {
31036
30494
  streamId,
31037
30495
  userId,
31038
30496
  error
@@ -31046,6 +30504,9 @@ var Client = class extends import_events2.default {
31046
30504
  const userStream = this.stream(this.userStreamId);
31047
30505
  check(isDefined(userStream), "userStream not defined");
31048
30506
  const streamIdStr = streamIdAsString(streamId);
30507
+ if (opts?.redeemedInvite?.inviteEncryptionData) {
30508
+ await this.importInviteEncryptionData(streamIdStr, opts.redeemedInvite.inviteEncryptionData);
30509
+ }
31049
30510
  const stream = await this.initStream(streamId);
31050
30511
  if (userStream.view.userContent.isJoined(streamIdStr)) {
31051
30512
  this.logError("joinStream: user already a member", streamId);
@@ -31054,7 +30515,7 @@ var Client = class extends import_events2.default {
31054
30515
  await this.makeEventAndAddToStream(this.userStreamId, make_UserPayload_UserMembership({
31055
30516
  op: MembershipOp.SO_JOIN,
31056
30517
  streamId: streamIdAsBytes(streamId),
31057
- invitePayload: opts?.invitePayload
30518
+ invitePayload: opts?.redeemedInvite?.signedPayload
31058
30519
  }), { method: "joinStream" });
31059
30520
  if (opts?.skipWaitForMiniblockConfirmation !== true) {
31060
30521
  await stream.waitForMembership(MembershipOp.SO_JOIN);
@@ -31087,19 +30548,19 @@ var Client = class extends import_events2.default {
31087
30548
  async addTransaction(chainId, receipt, content, tags) {
31088
30549
  check(isDefined(this.userStreamId));
31089
30550
  const transaction = {
31090
- receipt: !isSolanaTransactionReceipt(receipt) ? (0, import_protobuf22.create)(BlockchainTransactionReceiptSchema, {
30551
+ receipt: !isSolanaTransactionReceipt(receipt) ? (0, import_protobuf21.create)(BlockchainTransactionReceiptSchema, {
31091
30552
  chainId: BigInt(chainId),
31092
30553
  transactionHash: bin_fromHexString(receipt.transactionHash),
31093
30554
  blockNumber: BigInt(receipt.blockNumber),
31094
30555
  to: bin_fromHexString(receipt.to),
31095
30556
  from: bin_fromHexString(receipt.from),
31096
- logs: receipt.logs.map((log13) => (0, import_protobuf22.create)(BlockchainTransactionReceipt_LogSchema, {
31097
- address: bin_fromHexString(log13.address),
31098
- topics: log13.topics.map(bin_fromHexString),
31099
- data: bin_fromHexString(log13.data)
30557
+ logs: receipt.logs.map((log12) => (0, import_protobuf21.create)(BlockchainTransactionReceipt_LogSchema, {
30558
+ address: bin_fromHexString(log12.address),
30559
+ topics: log12.topics.map(bin_fromHexString),
30560
+ data: bin_fromHexString(log12.data)
31100
30561
  }))
31101
30562
  }) : void 0,
31102
- solanaReceipt: isSolanaTransactionReceipt(receipt) ? (0, import_protobuf22.create)(SolanaBlockchainTransactionReceiptSchema, {
30563
+ solanaReceipt: isSolanaTransactionReceipt(receipt) ? (0, import_protobuf21.create)(SolanaBlockchainTransactionReceiptSchema, {
31103
30564
  ...receipt
31104
30565
  }) : void 0,
31105
30566
  content: content ?? { case: void 0 }
@@ -31513,10 +30974,9 @@ var Client = class extends import_events2.default {
31513
30974
  check(isDefined(this.cryptoBackend), "crypto backend not initialized");
31514
30975
  return this.cryptoBackend.ensureOutboundSession(streamId, this.defaultGroupEncryptionAlgorithm, opts);
31515
30976
  }
31516
- async exportInviteEncryptionData(inStreamId) {
31517
- const streamId = streamIdAsString(inStreamId);
31518
- await this.ensureOutboundSession(streamId);
30977
+ async exportAllGroupSessions(streamId) {
31519
30978
  check(isDefined(this.cryptoBackend), "crypto backend not initialized");
30979
+ await this.ensureOutboundSession(streamId);
31520
30980
  const sessionIds = await this.cryptoBackend.getGroupSessionIds(streamId);
31521
30981
  const sessions = [];
31522
30982
  for (const sessionId of sessionIds) {
@@ -31525,6 +30985,11 @@ var Client = class extends import_events2.default {
31525
30985
  sessions.push(session);
31526
30986
  }
31527
30987
  }
30988
+ return sessions;
30989
+ }
30990
+ async exportInviteEncryptionData(inStreamId) {
30991
+ const streamId = streamIdAsString(inStreamId);
30992
+ const sessions = await this.exportAllGroupSessions(streamId);
31528
30993
  check(sessions.length > 0, "no group sessions found for stream");
31529
30994
  check(new Set(sessions.map((session) => session.algorithm)).size === 1, "group sessions must all use the same algorithm");
31530
30995
  return {
@@ -31580,6 +31045,9 @@ var Client = class extends import_events2.default {
31580
31045
  throw new Error("crypto backend not initialized");
31581
31046
  }
31582
31047
  const cleartext = await this.cryptoBackend.decryptGroupEvent(streamId, encryptedData);
31048
+ if (cleartext === void 0) {
31049
+ throw new Error(`unrecognized encryption algorithm: ${encryptedData.algorithm}`);
31050
+ }
31583
31051
  await this.persistenceStore.saveCleartext(eventId, cleartext);
31584
31052
  return cleartext;
31585
31053
  }
@@ -31594,7 +31062,7 @@ var Client = class extends import_events2.default {
31594
31062
  check(sessions[0].streamId === streamIdStr, "streamId mismatch");
31595
31063
  const sessionIds = sessions.map((session) => session.sessionId);
31596
31064
  const payload = makeSessionKeys(sessions);
31597
- const payloadClearText = (0, import_protobuf22.toJsonString)(SessionKeysSchema, payload);
31065
+ const payloadClearText = (0, import_protobuf21.toJsonString)(SessionKeysSchema, payload);
31598
31066
  return { streamIdBytes, sessionIds, payload, payloadClearText };
31599
31067
  }
31600
31068
  async _encryptAndShareGroupSessionsToDevice(inStreamId, content, algorithm, userId, deviceKeys, userDevice, printLog = false) {
@@ -31652,22 +31120,17 @@ var Client = class extends import_events2.default {
31652
31120
  await Promise.all(promises);
31653
31121
  this.logCall("encryptAndShareGroupSessions: done");
31654
31122
  }
31655
- // only works with hybrid group encryption
31656
- async encryptAndShareLatestGroupSessionToUser(inStreamId, toUserId) {
31123
+ async encryptAndShareAllGroupSessionsToUser(inStreamId, toUserId) {
31657
31124
  const streamId = streamIdAsString(inStreamId);
31658
- if (!this.cryptoBackend?.hasOutboundSession(streamId, GroupEncryptionAlgorithmId.HybridGroupEncryption)) {
31659
- throw new Error("No outbound session found");
31660
- }
31661
- const sessionId = await this.cryptoBackend.ensureOutboundSession(streamId, GroupEncryptionAlgorithmId.HybridGroupEncryption);
31662
- const session = await this.cryptoBackend.exportGroupSession(streamId, sessionId);
31663
- if (!session) {
31664
- throw new Error("Session not exported");
31125
+ const sessions = await this.exportAllGroupSessions(streamId);
31126
+ if (sessions.length === 0) {
31127
+ return;
31665
31128
  }
31666
31129
  const deviceInfo = await this.downloadSingleUserDeviceInfo(toUserId, true);
31667
31130
  if (deviceInfo.devices.length === 0) {
31668
- throw new Error("No device keys found");
31131
+ return;
31669
31132
  }
31670
- await this.encryptAndShareGroupSessionsToDevice(streamId, [session], GroupEncryptionAlgorithmId.HybridGroupEncryption, toUserId, deviceInfo.devices);
31133
+ await this.encryptAndShareGroupSessionsToDevice(streamId, sessions, GroupEncryptionAlgorithmId.HybridGroupEncryption, toUserId, deviceInfo.devices);
31671
31134
  }
31672
31135
  // Encrypt event using GroupEncryption.
31673
31136
  encryptGroupEvent(event, streamId, algorithm) {
@@ -31698,7 +31161,7 @@ var Client = class extends import_events2.default {
31698
31161
  });
31699
31162
  }
31700
31163
  async debugForceAddEvent(streamId, event) {
31701
- const jsonStr = (0, import_protobuf22.toJsonString)(EnvelopeSchema, event);
31164
+ const jsonStr = (0, import_protobuf21.toJsonString)(EnvelopeSchema, event);
31702
31165
  await this.rpcClient.info({ debug: ["add_event", streamId, jsonStr] });
31703
31166
  }
31704
31167
  async debugDropStream(syncId, streamId) {
@@ -31816,7 +31279,7 @@ async function updateAppSettings(params) {
31816
31279
  }
31817
31280
 
31818
31281
  // ../sdk/dist/store/store.js
31819
- var log12 = dlog("csb:dataStore");
31282
+ var log11 = dlog("csb:dataStore");
31820
31283
  var LoadPriority;
31821
31284
  (function(LoadPriority2) {
31822
31285
  LoadPriority2["high"] = "high";
@@ -31904,10 +31367,10 @@ var LocalhostWeb3Provider = class extends import_ethers8.ethers.providers.JsonRp
31904
31367
  var import_debug3 = __toESM(require_src(), 1);
31905
31368
 
31906
31369
  // src/modules/utils.ts
31907
- var import_protobuf23 = require("@bufbuild/protobuf");
31370
+ var import_protobuf22 = require("@bufbuild/protobuf");
31908
31371
 
31909
31372
  // package.json
31910
- var version = "3.3.1";
31373
+ var version = "3.4.1";
31911
31374
 
31912
31375
  // src/modules/utils.ts
31913
31376
  var getPackageManager = () => {
@@ -32362,7 +31825,7 @@ async function executeWithAuthRetry(initialAuth, operation) {
32362
31825
  function checkTokenExpiry(tokenHex) {
32363
31826
  try {
32364
31827
  const bytes = bin_fromHexString(tokenHex);
32365
- const bearerToken = (0, import_protobuf23.fromBinary)(BearerTokenSchema, bytes);
31828
+ const bearerToken = (0, import_protobuf22.fromBinary)(BearerTokenSchema, bytes);
32366
31829
  const expiryMs = Number(bearerToken.expiryEpochMs);
32367
31830
  if (expiryMs === 0) {
32368
31831
  return { valid: true, expiryMs: 0 };
@@ -33524,7 +32987,7 @@ function getChain(chainId, rpcUrl) {
33524
32987
  };
33525
32988
  }
33526
32989
 
33527
- // ../deployments/dist/addresses.json
32990
+ // ../contracts/dist/addresses.json
33528
32991
  var addresses_default = {
33529
32992
  dev: {
33530
32993
  "84532": {
@@ -33618,7 +33081,7 @@ var addresses_default = {
33618
33081
  }
33619
33082
  };
33620
33083
 
33621
- // ../deployments/dist/index.js
33084
+ // ../contracts/dist/index.js
33622
33085
  var requiredAddressKeys = [
33623
33086
  "orchestrator",
33624
33087
  "simpleFunder",
@@ -33722,7 +33185,7 @@ function getAddressesWithFallback(context, chainId, opts) {
33722
33185
  // src/modules/image.ts
33723
33186
  var fs4 = __toESM(require("fs"));
33724
33187
  var path4 = __toESM(require("path"));
33725
- var import_protobuf24 = require("@bufbuild/protobuf");
33188
+ var import_protobuf23 = require("@bufbuild/protobuf");
33726
33189
  var import_image_size = __toESM(require("image-size"));
33727
33190
 
33728
33191
  // ../../node_modules/.bun/file-type@19.6.0/node_modules/file-type/index.js
@@ -36183,7 +35646,7 @@ async function uploadChunkedMedia(data, mimeType, width, height, filename, botUs
36183
35646
  throw new Error("Failed to create media stream");
36184
35647
  }
36185
35648
  if (chunkCount > 1) {
36186
- let cc = (0, import_protobuf24.create)(CreationCookieSchema, mediaStreamResponse.nextCreationCookie);
35649
+ let cc = (0, import_protobuf23.create)(CreationCookieSchema, mediaStreamResponse.nextCreationCookie);
36187
35650
  for (let chunkIndex = 1; chunkIndex < chunkCount; chunkIndex++) {
36188
35651
  const chunkEvent = await makeEvent(
36189
35652
  signerContext,
@@ -36202,7 +35665,7 @@ async function uploadChunkedMedia(data, mimeType, width, height, filename, botUs
36202
35665
  if (!result?.creationCookie) {
36203
35666
  throw new Error("Failed to send media chunk");
36204
35667
  }
36205
- cc = (0, import_protobuf24.create)(CreationCookieSchema, result.creationCookie);
35668
+ cc = (0, import_protobuf23.create)(CreationCookieSchema, result.creationCookie);
36206
35669
  }
36207
35670
  }
36208
35671
  const info = {
@@ -36219,7 +35682,7 @@ async function uploadChunkedMedia(data, mimeType, width, height, filename, botUs
36219
35682
  };
36220
35683
  }
36221
35684
  async function setProfileImage(media, botUserId, signerContext, rpc) {
36222
- const chunkedMedia = (0, import_protobuf24.create)(ChunkedMediaSchema, {
35685
+ const chunkedMedia = (0, import_protobuf23.create)(ChunkedMediaSchema, {
36223
35686
  info: media.info,
36224
35687
  streamId: media.streamId,
36225
35688
  encryption: {
@@ -36232,8 +35695,8 @@ async function setProfileImage(media, botUserId, signerContext, rpc) {
36232
35695
  });
36233
35696
  const context = botUserId.toLowerCase();
36234
35697
  const { key, iv } = await deriveKeyAndIV(context);
36235
- const { ciphertext } = await encryptAESGCM((0, import_protobuf24.toBinary)(ChunkedMediaSchema, chunkedMedia), key, iv);
36236
- const encryptedData = (0, import_protobuf24.create)(EncryptedDataSchema, {
35698
+ const { ciphertext } = await encryptAESGCM((0, import_protobuf23.toBinary)(ChunkedMediaSchema, chunkedMedia), key, iv);
35699
+ const encryptedData = (0, import_protobuf23.create)(EncryptedDataSchema, {
36237
35700
  ciphertext: uint8ArrayToBase64(ciphertext),
36238
35701
  algorithm: AES_GCM_DERIVED_ALGORITHM
36239
35702
  });
@@ -36250,7 +35713,7 @@ async function setProfileImage(media, botUserId, signerContext, rpc) {
36250
35713
  }
36251
35714
 
36252
35715
  // src/modules/create.ts
36253
- async function create18(argv) {
35716
+ async function create17(argv) {
36254
35717
  const auth = await resolveAuth(argv.ownerPrivateKey, argv.bearerToken);
36255
35718
  if (!auth) {
36256
35719
  console.error((0, import_picocolors5.red)("Authentication is required."));
@@ -37611,7 +37074,7 @@ async function main() {
37611
37074
  break;
37612
37075
  case "create":
37613
37076
  if (isCreateArgs(args)) {
37614
- await create18(args);
37077
+ await create17(args);
37615
37078
  }
37616
37079
  break;
37617
37080
  case "metadata":