@githolon/dsl 0.108.3 → 0.108.6
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/dart/CHANGELOG.md +10 -0
- package/dart/lib/src/application_framework_calls.dart +21 -0
- package/dart/lib/src/dev_cloud.dart +67 -0
- package/dart/lib/src/nms_test_environment.dart +1 -1
- package/dart/lib/src/runner/node-entry.mjs +372 -106
- package/dart/lib/src/runner/offline-install.mjs +171 -11
- package/dart/lib/src/session_bound.dart +58 -30
- package/dart/lib/src/test_harness.dart +60 -98
- package/dart/lib/src/webview_bridge.dart +212 -32
- package/dart/pubspec.lock +1 -1
- package/dart/pubspec.yaml +2 -2
- package/dart/test/node_runner_transport_test.dart +5 -5
- package/dart/test/webview_bridge_test.dart +6 -0
- package/dart_types/CHANGELOG.md +4 -0
- package/dart_types/lib/src/proto/nomos/runtime/v2/runtime.pb.dart +428 -2
- package/dart_types/pubspec.yaml +1 -1
- package/package.json +1 -1
- package/runtime/generated-application-host.js +314 -82
- package/src/application_topology.ts +120 -28
- package/src/births.ts +27 -0
- package/src/codegen_call_usda.ts +9 -4
- package/src/codegen_dart_application.ts +146 -37
- package/src/codegen_dart_client.ts +225 -160
- package/src/codegen_dart_framework_calls.ts +89 -4
- package/src/codegen_ts.ts +135 -60
- package/src/compile_package_main.ts +3544 -1460
- package/src/directive.ts +320 -118
- package/src/fields.ts +2 -3
- package/src/framework/application_home.ts +3 -0
- package/src/framework/auth_provider_law.ts +20 -16
- package/src/framework/genesis.ts +32 -1
- package/src/framework/home.ts +45 -8
- package/src/framework/signing_identity.ts +78 -0
- package/src/framework/workspaces.ts +9 -1
- package/src/framework_call_dart_enums.ts +33 -0
- package/src/framework_call_definitions.ts +11 -2
- package/src/index.ts +12 -0
- package/src/intent.ts +525 -194
- package/src/law_graph.ts +32 -4
- package/src/law_graph_usda.ts +3 -0
- package/src/package_config.ts +16 -1
- package/src/read.ts +33 -11
- package/src/wire.ts +1 -0
- package/src/wire_encode.ts +3 -3
|
@@ -5625,7 +5625,8 @@ function nmsInternalEncodeTypedProviderCall(operation, requestPrefix = "browser"
|
|
|
5625
5625
|
}));
|
|
5626
5626
|
const query = operation.case === "query" ? operation.value.query : void 0;
|
|
5627
5627
|
const custody = operation.case === "custody" ? operation.value.operation : void 0;
|
|
5628
|
-
const
|
|
5628
|
+
const offeredIntent = operation.case === "offer" ? operation.value.intent.case : void 0;
|
|
5629
|
+
const detail = query?.case === "named" ? `query:named:${String(query.value.operation)}` : query?.case ? `query:${query.case}` : custody?.case ? `custody:${custody.case}` : offeredIntent ? `offer:${offeredIntent}` : operation.case || "empty";
|
|
5629
5630
|
return { requestId, mode: operation.case || "empty", detail, bytes, encodeMs: monotonicMs() - started };
|
|
5630
5631
|
}
|
|
5631
5632
|
function nmsInternalDecodeTypedProviderResponse(bytes, requestId) {
|
|
@@ -6050,8 +6051,13 @@ function createWasmEnginePlane({ span } = {}) {
|
|
|
6050
6051
|
wsContents.set(name, new File(bytes));
|
|
6051
6052
|
},
|
|
6052
6053
|
readWsFile(name) {
|
|
6053
|
-
const
|
|
6054
|
-
|
|
6054
|
+
const parts = String(name).split("/").filter(Boolean);
|
|
6055
|
+
let node = wsDirNode ?? void 0;
|
|
6056
|
+
for (const part of parts) {
|
|
6057
|
+
if (!(node instanceof Directory)) return null;
|
|
6058
|
+
node = node.contents.get(part);
|
|
6059
|
+
}
|
|
6060
|
+
return node instanceof File ? node.data : null;
|
|
6055
6061
|
},
|
|
6056
6062
|
memBytes() {
|
|
6057
6063
|
return ex ? ex.memory.buffer.byteLength : 0;
|
|
@@ -6137,6 +6143,11 @@ function createWasmEnginePlane({ span } = {}) {
|
|
|
6137
6143
|
}
|
|
6138
6144
|
})
|
|
6139
6145
|
});
|
|
6146
|
+
if (response.outcome.case === "failure") {
|
|
6147
|
+
throw new Error(
|
|
6148
|
+
`${response.outcome.value.code}: ${response.outcome.value.message}`
|
|
6149
|
+
);
|
|
6150
|
+
}
|
|
6140
6151
|
if (response.outcome.case !== "custody" || response.outcome.value.operation.case !== "packDelta") return null;
|
|
6141
6152
|
const pack = response.outcome.value.operation.value.pack;
|
|
6142
6153
|
return pack.length ? pack : null;
|
|
@@ -6574,6 +6585,7 @@ function createModelLifecycleOfferRequest(target, args) {
|
|
|
6574
6585
|
rng: args.capturedPorts.rng,
|
|
6575
6586
|
deferProjection: args.deferProjection === true,
|
|
6576
6587
|
spans: args.spans === true,
|
|
6588
|
+
prepareOnly: args.prepareOnly === true,
|
|
6577
6589
|
sequence: BigInt(args.sequence),
|
|
6578
6590
|
clock: create(CapturedClockSchema, {
|
|
6579
6591
|
physicalMillis: BigInt(args.capturedPorts.clock.physical),
|
|
@@ -7705,12 +7717,12 @@ function createAutoSyncController(dependencies, options) {
|
|
|
7705
7717
|
var file_nomos_kernel_v1_progress = /* @__PURE__ */ fileDesc("Ch5ub21vcy9rZXJuZWwvdjEvcHJvZ3Jlc3MucHJvdG8SD25vbW9zLmtlcm5lbC52MSLEAwoWS2VybmVsUHJvZ3Jlc3NTbmFwc2hvdBIWCg5zY2hlbWFfdmVyc2lvbhgBIAEoDRIQCghzZXF1ZW5jZRgCIAEoBBI7CglvcGVyYXRpb24YAyABKA4yKC5ub21vcy5rZXJuZWwudjEuS2VybmVsUHJvZ3Jlc3NPcGVyYXRpb24SMwoFcGhhc2UYBCABKA4yJC5ub21vcy5rZXJuZWwudjEuS2VybmVsUHJvZ3Jlc3NQaGFzZRIXCg9jb21wbGV0ZWRfdW5pdHMYBSABKAQSEwoLdG90YWxfdW5pdHMYBiABKAQSMQoEdW5pdBgHIAEoDjIjLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxQcm9ncmVzc1VuaXQSEAoIdGVybWluYWwYCCABKAgSHAoUYWxsb2NhdG9yX2xpdmVfYnl0ZXMYCSABKAQSHAoUYWxsb2NhdG9yX3BlYWtfYnl0ZXMYCiABKAQSQwoSbGF3X2h5ZHJhdGlvbl9zdGVwGAsgASgOMicubm9tb3Mua2VybmVsLnYxLktlcm5lbExhd0h5ZHJhdGlvblN0ZXASGgoSbGF3X3BhY2thZ2Vfc2hhMjU2GAwgASgJKnAKF0tlcm5lbFByb2dyZXNzT3BlcmF0aW9uEikKJUtFUk5FTF9QUk9HUkVTU19PUEVSQVRJT05fVU5TUEVDSUZJRUQQABIqCiZLRVJORUxfUFJPR1JFU1NfT1BFUkFUSU9OX1JFU1RPUkVfTUFJThABKtkDChNLZXJuZWxQcm9ncmVzc1BoYXNlEiUKIUtFUk5FTF9QUk9HUkVTU19QSEFTRV9VTlNQRUNJRklFRBAAEicKI0tFUk5FTF9QUk9HUkVTU19QSEFTRV9DSEVDS19DVVNUT0RZEAESJAogS0VSTkVMX1BST0dSRVNTX1BIQVNFX1JFQURfQ0hBSU4QAhIrCidLRVJORUxfUFJPR1JFU1NfUEhBU0VfSU5JVElBTElaRV9FTkdJTkUQAxInCiNLRVJORUxfUFJPR1JFU1NfUEhBU0VfUkVBRF9USU1FTElORRAEEiUKIUtFUk5FTF9QUk9HUkVTU19QSEFTRV9IWURSQVRFX0xBVxAFEioKJktFUk5FTF9QUk9HUkVTU19QSEFTRV9SRUNPVkVSWV9QUkVTQ0FOEAYSKAokS0VSTkVMX1BST0dSRVNTX1BIQVNFX1ZFUklGWV9JTlRFTlRTEAcSKQolS0VSTkVMX1BST0dSRVNTX1BIQVNFX1BST01PVEVfQ1VTVE9EWRAIEioKJktFUk5FTF9QUk9HUkVTU19QSEFTRV9SRUJVSUxEX0ZST05USUVSEAkSIgoeS0VSTkVMX1BST0dSRVNTX1BIQVNFX0NPTVBMRVRFEAoqgQEKEktlcm5lbFByb2dyZXNzVW5pdBIkCiBLRVJORUxfUFJPR1JFU1NfVU5JVF9VTlNQRUNJRklFRBAAEh8KG0tFUk5FTF9QUk9HUkVTU19VTklUX0lOVEVOVBABEiQKIEtFUk5FTF9QUk9HUkVTU19VTklUX0xBV19QQUNLQUdFEAIqqwIKFktlcm5lbExhd0h5ZHJhdGlvblN0ZXASKQolS0VSTkVMX0xBV19IWURSQVRJT05fU1RFUF9VTlNQRUNJRklFRBAAEioKJktFUk5FTF9MQVdfSFlEUkFUSU9OX1NURVBfUkVBRF9DTE9TVVJFEAESKwonS0VSTkVMX0xBV19IWURSQVRJT05fU1RFUF9DT01QT1NFX1NUQUdFEAISLAooS0VSTkVMX0xBV19IWURSQVRJT05fU1RFUF9ERVJJVkVfU0NIRU1BUxADEi8KK0tFUk5FTF9MQVdfSFlEUkFUSU9OX1NURVBfTE9BRF9QT0xJQ1lfU0hFTEwQBBIuCipLRVJORUxfTEFXX0hZRFJBVElPTl9TVEVQX1BBQ0tBR0VfQ09NUExFVEUQBWIGcHJvdG8z");
|
|
7706
7718
|
|
|
7707
7719
|
// ../cloud/web-client/src/_adapter/proto/nomos/runtime/v2/runtime_pb.js
|
|
7708
|
-
var file_nomos_runtime_v2_runtime = /* @__PURE__ */ fileDesc("Ch5ub21vcy9ydW50aW1lL3YyL3J1bnRpbWUucHJvdG8SEG5vbW9zLnJ1bnRpbWUudjIioAkKDlJ1bnRpbWVSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoBBIyCgV0cmFjZRgDIAEoCzIeLm5vbW9zLnJ1bnRpbWUudjIuVHJhY2VDb250ZXh0SAGIAQESOgoLa2VybmVsX2NhbGwYCiABKAsyIy5ub21vcy5ydW50aW1lLnYyLktlcm5lbENhbGxSZXF1ZXN0SAASMwoHY29ubmVjdBgLIAEoCzIgLm5vbW9zLnJ1bnRpbWUudjIuQ29ubmVjdFJlcXVlc3RIABJCCg9saXN0X3dvcmtzcGFjZXMYDCABKAsyJy5ub21vcy5ydW50aW1lLnYyLkxpc3RXb3Jrc3BhY2VzUmVxdWVzdEgAEkgKEnNuYXBzaG90X3dvcmtzcGFjZRgNIAEoCzIqLm5vbW9zLnJ1bnRpbWUudjIuU25hcHNob3RXb3Jrc3BhY2VSZXF1ZXN0SAASQAoOc3luY193b3Jrc3BhY2UYDiABKAsyJi5ub21vcy5ydW50aW1lLnYyLlN5bmNXb3Jrc3BhY2VSZXF1ZXN0SAASQQoPc3RhcnRfYXV0b19zeW5jGA8gASgLMiYubm9tb3MucnVudGltZS52Mi5TdGFydEF1dG9TeW5jUmVxdWVzdEgAEj8KDnN0b3BfYXV0b19zeW5jGBAgASgLMiUubm9tb3MucnVudGltZS52Mi5TdG9wQXV0b1N5bmNSZXF1ZXN0SAASLwoFd2F0Y2gYESABKAsyHi5ub21vcy5ydW50aW1lLnYyLldhdGNoUmVxdWVzdEgAEjMKB3Vud2F0Y2gYEiABKAsyIC5ub21vcy5ydW50aW1lLnYyLlVud2F0Y2hSZXF1ZXN0SAASQAoOcHJlcGFyZV9kb21haW4YEyABKAsyJi5ub21vcy5ydW50aW1lLnYyLlByZXBhcmVEb21haW5SZXF1ZXN0SAASTQoVcmVzb2x2ZV9jdXN0b2R5X2JyZWFrGBQgASgLMiwubm9tb3MucnVudGltZS52Mi5SZXNvbHZlQ3VzdG9keUJyZWFrUmVxdWVzdEgAEjoKC2Nsb3NlX3JlYWxtGBUgASgLMiMubm9tb3MucnVudGltZS52Mi5DbG9zZVJlYWxtUmVxdWVzdEgAEjoKC2RlYWRfbGV0dGVyGBYgASgLMiMubm9tb3MucnVudGltZS52Mi5EZWFkTGV0dGVyUmVxdWVzdEgAEkAKDmhpc3RvcmljX3F1ZXJ5GBcgASgLMiYubm9tb3MucnVudGltZS52Mi5IaXN0b3JpY1F1ZXJ5UmVxdWVzdEgAEkIKD21vZGVsX2xpZmVjeWNsZRgYIAEoCzInLm5vbW9zLnJ1bnRpbWUudjIuTW9kZWxMaWZlY3ljbGVSZXF1ZXN0SAASXQodZXN0YWJsaXNoX2FwcGxpY2F0aW9uX2N1c3RvZHkYGSABKAsyNC5ub21vcy5ydW50aW1lLnYyLkVzdGFibGlzaEFwcGxpY2F0aW9uQ3VzdG9keVJlcXVlc3RIAEIJCgdjb21tYW5kQggKBl90cmFjZSJTChFLZXJuZWxDYWxsUmVxdWVzdBIPCgdzZXNzaW9uGAEgASgJEi0KB3JlcXVlc3QYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuQ2FsbFJlcXVlc3Qi8QIKIkVzdGFibGlzaEFwcGxpY2F0aW9uQ3VzdG9keVJlcXVlc3QSDwoHc2Vzc2lvbhgBIAEoCRIOCgZwYXJlbnQYAiABKAkSEQoJcHJpbmNpcGFsGAMgASgJEg8KB3N1YmplY3QYBCABKAkSFQoNZGV2aWNlX3NlY3JldBgFIAEoDBIVCg1kZXZpY2VfcHVibGljGAYgASgMEhIKCmF1dGhfdG9rZW4YByABKAkSEAoIaWRfdG9rZW4YCCABKAkSFAoMdmVyaWZpZWRfdmlhGAkgASgJEg8KB2Jvcm5fYXQYCiABKAkSOwoTZW5yb2xsX2ZpcnN0X2RldmljZRgLIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5EaXJlY3RpdmVDYWxsEj0KFWJpcnRoX3JlY2VpdmluZ19ncm91cBgMIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5EaXJlY3RpdmVDYWxsEg8KB2NvbmZpcm0YDSABKAginwEKHUFwcGxpY2F0aW9uQ3VzdG9keUVzdGFibGlzaGVkEgwKBGhvbWUYASABKAkSFwoKY2hpbGRfaGVhZBgCIAEoCUgAiAEBEhAKCHZlcmlmaWVkGAMgASgIEh8KEnZlcmlmaWNhdGlvbl9lcnJvchgEIAEoCUgBiAEBQg0KC19jaGlsZF9oZWFkQhUKE192ZXJpZmljYXRpb25fZXJyb3IiZQoUSGlzdG9yaWNRdWVyeVJlcXVlc3QSDwoHc2Vzc2lvbhgBIAEoCRIOCgZtb21lbnQYAiABKAkSLAoFcXVlcnkYAyABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0IrUJCg9SdW50aW1lUmVzcG9uc2USGAoQcHJvdG9jb2xfdmVyc2lvbhgBIAEoDRISCgpyZXF1ZXN0X2lkGAIgASgEEjMKB2ZhaWx1cmUYCiABKAsyIC5ub21vcy5ydW50aW1lLnYyLlJ1bnRpbWVGYWlsdXJlSAASNAoLa2VybmVsX2NhbGwYCyABKAsyHS5ub21vcy5rZXJuZWwudjEuQ2FsbFJlc3BvbnNlSAASMAoJY29ubmVjdGVkGAwgASgLMhsubm9tb3MucnVudGltZS52Mi5Db25uZWN0ZWRIABI5Cg53b3Jrc3BhY2VfbGlzdBgNIAEoCzIfLm5vbW9zLnJ1bnRpbWUudjIuV29ya3NwYWNlTGlzdEgAEkEKEndvcmtzcGFjZV9zbmFwc2hvdBgOIAEoCzIjLm5vbW9zLnJ1bnRpbWUudjIuV29ya3NwYWNlU25hcHNob3RIABJBCg5zeW5jX3dvcmtzcGFjZRgPIAEoCzInLm5vbW9zLnJ1bnRpbWUudjIuU3luY1dvcmtzcGFjZVJlc3BvbnNlSAASPgoRYXV0b19zeW5jX3N0YXJ0ZWQYECABKAsyIS5ub21vcy5ydW50aW1lLnYyLkF1dG9TeW5jU3RhcnRlZEgAEj4KEWF1dG9fc3luY19zdG9wcGVkGBEgASgLMiEubm9tb3MucnVudGltZS52Mi5BdXRvU3luY1N0b3BwZWRIABI3Cg13YXRjaF9zdGFydGVkGBIgASgLMh4ubm9tb3MucnVudGltZS52Mi5XYXRjaFN0YXJ0ZWRIABI3Cg13YXRjaF9zdG9wcGVkGBMgASgLMh4ubm9tb3MucnVudGltZS52Mi5XYXRjaFN0b3BwZWRIABI7Cg9kb21haW5fcHJlcGFyZWQYFCABKAsyIC5ub21vcy5ydW50aW1lLnYyLkRvbWFpblByZXBhcmVkSAASSAoWY3VzdG9keV9icmVha19yZXNvbHZlZBgVIAEoCzImLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUJyZWFrUmVzb2x2ZWRIABI1CgxyZWFsbV9jbG9zZWQYFiABKAsyHS5ub21vcy5ydW50aW1lLnYyLlJlYWxtQ2xvc2VkSAASMwoHYmxvY2tlZBgXIAEoCzIgLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZUJsb2NrZWRIABJIChZyZW1vdGVfb2ZmZXJfYWRtaXNzaW9uGBggASgLMiYubm9tb3MucnVudGltZS52Mi5SZW1vdGVPZmZlckFkbWlzc2lvbkgAEjsKC2RlYWRfbGV0dGVyGBkgASgLMiQubm9tb3MucnVudGltZS52Mi5EZWFkTGV0dGVyUmVzcG9uc2VIABJDCg9tb2RlbF9saWZlY3ljbGUYGiABKAsyKC5ub21vcy5ydW50aW1lLnYyLk1vZGVsTGlmZWN5Y2xlUmVzcG9uc2VIABJaCh9hcHBsaWNhdGlvbl9jdXN0b2R5X2VzdGFibGlzaGVkGBsgASgLMi8ubm9tb3MucnVudGltZS52Mi5BcHBsaWNhdGlvbkN1c3RvZHlFc3RhYmxpc2hlZEgAQgkKB291dGNvbWUinwEKDlJ1bnRpbWVCbG9ja2VkEkEKCXdvcmtzcGFjZRgBIAEoCzIsLm5vbW9zLnJ1bnRpbWUudjIuV29ya3NwYWNlUmVzaWRlbmN5UmVxdWlyZWRIABJACghzaWJsaW5ncxgCIAEoCzIsLm5vbW9zLnJ1bnRpbWUudjIuU2libGluZ1Jlc2lkZW5jaWVzUmVxdWlyZWRIAEIICgZyZWFzb24iLwoaV29ya3NwYWNlUmVzaWRlbmN5UmVxdWlyZWQSEQoJd29ya3NwYWNlGAEgASgJIlUKGFNpYmxpbmdSZXNpZGVuY3lSZXF1aXJlZBIRCgl3b3Jrc3BhY2UYASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSEQoJZm9sZF9yb290GAMgASgJIl0KGlNpYmxpbmdSZXNpZGVuY2llc1JlcXVpcmVkEj8KC3Jlc2lkZW5jaWVzGAEgAygLMioubm9tb3MucnVudGltZS52Mi5TaWJsaW5nUmVzaWRlbmN5UmVxdWlyZWQihgIKFFJlbW90ZU9mZmVyQWRtaXNzaW9uEhEKCXdvcmtzcGFjZRgBIAEoCRIMCgRtYWluGAIgASgJEhgKC3NlYWxlZF9tYWluGAMgASgJSACIAQESLwoHdmVyZGljdBgEIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5PZmZlclJlc3BvbnNlEjMKDGJvcm5fY3VzdG9keRgFIAMoCzIdLm5vbW9zLnJ1bnRpbWUudjIuQm9ybkN1c3RvZHkSEwoLcmVzdWx0X3BhY2sYBiABKAwSGAoLcmVzdWx0X2Jhc2UYByABKAlIAYgBAUIOCgxfc2VhbGVkX21haW5CDgoMX3Jlc3VsdF9iYXNlIkoKC0Jvcm5DdXN0b2R5Ei0KBWNoaWxkGAEgASgLMh4ubm9tb3Mua2VybmVsLnYxLkJvcm5Xb3Jrc3BhY2USDAoEcGFjaxgCIAEoDCL5AQoYQ3VzdG9keU9mZmVyQmF0Y2hSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRI3CgZpbmxpbmUYAyABKAsyJS5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlJbmxpbmVPZmZlcnNIABJGChFzZXNzaW9uX2NhbmRpZGF0ZRgEIAEoCzIpLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keVNlc3Npb25DYW5kaWRhdGVIABIWCgliYXNlX2hlYWQYBSABKAlIAYgBAUIICgZzb3VyY2VCDAoKX2Jhc2VfaGVhZCJOChJDdXN0b2R5SW50ZW50T2ZmZXISDwoHc2Vzc2lvbhgBIAEoCRISCgpjb21taXRfb2lkGAIgASgJEhMKC2NoYW5nZV91c2RhGAMgASgMIksKE0N1c3RvZHlJbmxpbmVPZmZlcnMSNAoGb2ZmZXJzGAEgAygLMiQubm9tb3MucnVudGltZS52Mi5DdXN0b2R5SW50ZW50T2ZmZXIiLAoXQ3VzdG9keVNlc3Npb25DYW5kaWRhdGUSEQoJcmVmZXJlbmNlGAEgASgJIvcBChlDdXN0b2R5T2ZmZXJCYXRjaFJlc3BvbnNlEhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRI3CglhZG1pc3Npb24YCiABKAsyIi5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlBZG1pc3Npb25IABIzCgdmYWlsdXJlGAsgASgLMiAubm9tb3MucnVudGltZS52Mi5SdW50aW1lRmFpbHVyZUgAEjMKB2Jsb2NrZWQYDCABKAsyIC5ub21vcy5ydW50aW1lLnYyLlJ1bnRpbWVCbG9ja2VkSABCCQoHb3V0Y29tZSLuAgoQQ3VzdG9keUFkbWlzc2lvbhIMCgRtYWluGAEgASgJEhgKC3NlYWxlZF9tYWluGAIgASgJSACIAQESOwoIc2Vzc2lvbnMYAyADKAsyKS5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlTZXNzaW9uQWRtaXNzaW9uEjUKDmJpcnRoX291dGNvbWVzGAQgAygLMh0ubm9tb3Mua2VybmVsLnYxLkJpcnRoT3V0Y29tZRIzCgxib3JuX2N1c3RvZHkYBSADKAsyHS5ub21vcy5ydW50aW1lLnYyLkJvcm5DdXN0b2R5EhMKC3Jlc3VsdF9wYWNrGAYgASgMEhgKC3Jlc3VsdF9iYXNlGAcgASgJSAGIAQESOgoHdGltaW5ncxgIIAEoCzIpLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUFkbWlzc2lvblRpbWluZ3NCDgoMX3NlYWxlZF9tYWluQg4KDF9yZXN1bHRfYmFzZSJlChdDdXN0b2R5U2Vzc2lvbkFkbWlzc2lvbhIPCgdzZXNzaW9uGAEgASgJEjkKB2ludGVudHMYAiADKAsyKC5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlJbnRlbnRBZG1pc3Npb24ikAIKFkN1c3RvZHlJbnRlbnRBZG1pc3Npb24SEgoKY29tbWl0X29pZBgBIAEoCRIWCglpbnRlbnRfaWQYAiABKAlIAYgBARI7CghhZG1pdHRlZBgKIAEoCzInLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUludGVudEFkbWl0dGVkSAASOQoHc2tpcHBlZBgLIAEoCzImLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUludGVudFNraXBwZWRIABI5CgdyZWZ1c2VkGAwgASgLMiYubm9tb3MucnVudGltZS52Mi5DdXN0b2R5SW50ZW50UmVmdXNlZEgAQgkKB291dGNvbWVCDAoKX2ludGVudF9pZCKQAQoVQ3VzdG9keUludGVudEFkbWl0dGVkEgwKBGhlYWQYASABKAkSMwoHY3JlYXRlZBgCIAMoCzIiLm5vbW9zLmtlcm5lbC52MS5PZmZlckFnZ3JlZ2F0ZVJlZhI0CghhZmZlY3RlZBgDIAMoCzIiLm5vbW9zLmtlcm5lbC52MS5PZmZlckFnZ3JlZ2F0ZVJlZiIvChRDdXN0b2R5SW50ZW50U2tpcHBlZBIXCg9hbHJlYWR5X29uX21haW4YASABKAgiWgoUQ3VzdG9keUludGVudFJlZnVzZWQSDwoHbWVzc2FnZRgBIAEoCRIVCg1kZWFkX2xldHRlcmVkGAIgASgIEhEKBGhpbnQYAyABKAlIAIgBAUIHCgVfaGludCLtAQoXQ3VzdG9keUFkbWlzc2lvblRpbWluZ3MSFAoMdG90YWxfbWlsbGlzGAEgASgBEhMKC3NjYW5fbWlsbGlzGAIgASgBEhQKDGZldGNoX21pbGxpcxgDIAEoARITCgtzZWFsX21pbGxpcxgEIAEoARIYChBnYXRlX2ZvbGRfbWlsbGlzGAUgASgBEhQKDGludGVudF9jb3VudBgGIAEoDRIVCg1zZXNzaW9uX2NvdW50GAcgASgNEjUKBXNwYW5zGAggAygLMiYubm9tb3MucnVudGltZS52Mi5DdXN0b2R5QWRtaXNzaW9uU3BhbiKXAQoUQ3VzdG9keUFkbWlzc2lvblNwYW4SCgoCaWQYASABKAkSDQoFdHJhY2sYAiABKAkSDAoEbmFtZRgDIAEoCRIMCgRraW5kGAQgASgJEg0KBWRlcHRoGAUgASgNEhsKE3N0YXJ0ZWRfdW5peF9taWxsaXMYBiABKAESHAoUZmluaXNoZWRfdW5peF9taWxsaXMYByABKAEiQgoMVHJhY2VDb250ZXh0EhAKCHRyYWNlX2lkGAEgASgMEg8KB3NwYW5faWQYAiABKAwSDwoHc2FtcGxlZBgDIAEoCCLpAQoOUnVudGltZUZhaWx1cmUSDAoEY29kZRgBIAEoCRIPCgdtZXNzYWdlGAIgASgJEhEKCWNvbXBvbmVudBgDIAEoCRIWCgl3b3Jrc3BhY2UYBCABKAlIAIgBARITCgZkb21haW4YBSABKAlIAYgBARIWCglkaXJlY3RpdmUYBiABKAlIAogBARI5CgphdHRyaWJ1dGVzGAcgAygLMiUubm9tb3MucnVudGltZS52Mi5EaWFnbm9zdGljQXR0cmlidXRlQgwKCl93b3Jrc3BhY2VCCQoHX2RvbWFpbkIMCgpfZGlyZWN0aXZlIqUBChNEaWFnbm9zdGljQXR0cmlidXRlEgwKBG5hbWUYASABKAkSFgoMc3RyaW5nX3ZhbHVlGAIgASgJSAASFwoNaW50ZWdlcl92YWx1ZRgDIAEoEkgAEhYKDGRvdWJsZV92YWx1ZRgEIAEoAUgAEhcKDWJvb2xlYW5fdmFsdWUYBSABKAhIABIVCgtieXRlc192YWx1ZRgGIAEoDEgAQgcKBXZhbHVlIs0CCg5Db25uZWN0UmVxdWVzdBIRCgl3b3Jrc3BhY2UYASABKAkSEQoJY2xpZW50X2lkGAIgASgJEhQKB3Nlc3Npb24YAyABKAlIAIgBARISCgVjbG91ZBgEIAEoCUgBiAEBEhIKCmF1dGhfdG9rZW4YBSABKAwSFQoNYXV0aG9yX3NlY3JldBgGIAEoDBIiChptYXhpbXVtX21vdW50ZWRfd29ya3NwYWNlcxgHIAEoDRIUCgxhbGxvd191bmJvcm4YCCABKAgSDwoHcmVjb3ZlchgJIAEoCBJCChRjdXN0b2R5X2JyZWFrX3BvbGljeRgKIAEoDjIkLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUJyZWFrUG9saWN5EhsKE2hhc19yZXN0b3JlX2N1c3RvZHkYCyABKAhCCgoIX3Nlc3Npb25CCAoGX2Nsb3VkIosBCglDb25uZWN0ZWQSEQoJd29ya3NwYWNlGAEgASgJEg8KB3Nlc3Npb24YAiABKAkSEwoLY2xvdWRfYm91bmQYAyABKAgSOAoIcmVjb3ZlcnkYBCABKAsyIS5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlSZWNvdmVyeUgAiAEBQgsKCV9yZWNvdmVyeSJbCg9DdXN0b2R5UmVjb3ZlcnkSFQoNcHJldmlvdXNfaGVhZBgBIAEoCRIWCg5yZWNvdmVyZWRfaGVhZBgCIAEoCRIZChFyZWNvdmVyZWRfaW50ZW50cxgDIAEoBCIXChVMaXN0V29ya3NwYWNlc1JlcXVlc3QirQEKEFdvcmtzcGFjZVN1bW1hcnkSDwoHc2Vzc2lvbhgBIAEoCRIRCgl3b3Jrc3BhY2UYAiABKAkSNwoJcmVzaWRlbmN5GAMgASgOMiQubm9tb3MucnVudGltZS52Mi5Xb3Jrc3BhY2VSZXNpZGVuY3kSPAoMc3luY19wb3N0dXJlGAQgASgOMiYubm9tb3MucnVudGltZS52Mi5Xb3Jrc3BhY2VTeW5jUG9zdHVyZSJHCg1Xb3Jrc3BhY2VMaXN0EjYKCndvcmtzcGFjZXMYASADKAsyIi5ub21vcy5ydW50aW1lLnYyLldvcmtzcGFjZVN1bW1hcnkiTQoYU25hcHNob3RXb3Jrc3BhY2VSZXF1ZXN0Eg8KB3Nlc3Npb24YASABKAkSFAoHaWZfaGVhZBgCIAEoCUgAiAEBQgoKCF9pZl9oZWFkIlwKEVdvcmtzcGFjZVNuYXBzaG90EhEKCXdvcmtzcGFjZRgBIAEoCRIMCgRoZWFkGAIgASgJEhEKCXVuY2hhbmdlZBgDIAEoCBITCgtoYXNfY3VzdG9keRgEIAEoCCI2ChRTeW5jV29ya3NwYWNlUmVxdWVzdBIPCgdzZXNzaW9uGAEgASgJEg0KBWFkbWl0GAIgASgIIrwFChVTeW5jV29ya3NwYWNlUmVzcG9uc2USEQoJd29ya3NwYWNlGAEgASgJEhoKDXByZXZpb3VzX2hlYWQYAiABKAlIAIgBARIZCgxjdXJyZW50X2hlYWQYAyABKAlIAYgBARIQCghhZG1pdHRlZBgEIAEoBBIPCgdyZWZ1c2VkGAUgASgEEhAKCGRlZmVycmVkGAYgASgEEhIKCmxvY2FsX29ubHkYByABKAgSDgoGcHVsbGVkGAggASgIEhAKCGRpdmVyZ2VkGAkgASgIEhoKEnJlY29ubmVjdF9yZXF1aXJlZBgKIAEoCBITCgtzdGlsbF9haGVhZBgLIAEoCBIPCgdvZmZsaW5lGAwgASgIEhMKC3B1c2hfZmFpbGVkGA0gASgIEh0KFWRpcmVjdF9vZmZlcl9kZWZlcnJlZBgOIAEoCBI1Cg5iaXJ0aF9vdXRjb21lcxgPIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSGwoTYWRtaXR0ZWRfaW50ZW50X2lkcxgQIAMoCRIcChRjb252ZXJnZWRfaW50ZW50X2lkcxgRIAMoCRJCCgpwdXNoX2Vycm9yGBIgASgLMikubm9tb3MucnVudGltZS52Mi5SdW50aW1lVHJhbnNwb3J0RmFpbHVyZUgCiAEBEkcKD2Rpc2NvdmVyeV9lcnJvchgTIAEoCzIpLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZVRyYW5zcG9ydEZhaWx1cmVIA4gBARIzCgd0aW1pbmdzGBQgASgLMiIubm9tb3MucnVudGltZS52Mi5TeW5jUGhhc2VUaW1pbmdzQhAKDl9wcmV2aW91c19oZWFkQg8KDV9jdXJyZW50X2hlYWRCDQoLX3B1c2hfZXJyb3JCEgoQX2Rpc2NvdmVyeV9lcnJvciJdChdSdW50aW1lVHJhbnNwb3J0RmFpbHVyZRIQCghlbmRwb2ludBgBIAEoCRIOCgZzdGF0dXMYAiABKBESDwoHcmVmdXNlZBgDIAEoCBIPCgdtZXNzYWdlGAQgASgJIrEBChBTeW5jUGhhc2VUaW1pbmdzEhMKC3B1c2hfbWlsbGlzGAEgASgBEhQKDGFkbWl0X21pbGxpcxgCIAEoARIXCg9wcmVmZXRjaF9taWxsaXMYAyABKAESFwoPY29udmVyZ2VfbWlsbGlzGAQgASgBEhIKCnB1c2hfYnl0ZXMYBSABKAQSFQoNc2VydmVyX21pbGxpcxgGIAEoARIVCg1vZmZlcl9pbl9wdXNoGAcgASgIIt8BChRTdGFydEF1dG9TeW5jUmVxdWVzdBIPCgdzZXNzaW9uGAEgASgJEhwKD2RlYm91bmNlX21pbGxpcxgCIAEoDUgAiAEBEhwKD2ZhbGxiYWNrX21pbGxpcxgDIAEoDUgBiAEBEhoKDXNpZ25hbF9taWxsaXMYBCABKA1IAogBARIWCglzaWduYWxfaWQYBSABKAlIA4gBAUISChBfZGVib3VuY2VfbWlsbGlzQhIKEF9mYWxsYmFja19taWxsaXNCEAoOX3NpZ25hbF9taWxsaXNCDAoKX3NpZ25hbF9pZCIiCg9BdXRvU3luY1N0YXJ0ZWQSDwoHc2Vzc2lvbhgBIAEoCSImChNTdG9wQXV0b1N5bmNSZXF1ZXN0Eg8KB3Nlc3Npb24YASABKAkiIgoPQXV0b1N5bmNTdG9wcGVkEg8KB3Nlc3Npb24YASABKAkiqgEKDFdhdGNoUmVxdWVzdBIPCgdzZXNzaW9uGAEgASgJEhcKD3N1YnNjcmlwdGlvbl9pZBgCIAEoCRIpCgRraW5kGAMgASgOMhsubm9tb3MucnVudGltZS52Mi5XYXRjaEtpbmQSLAoFcXVlcnkYBCABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0EhcKD2ludGVydmFsX21pbGxpcxgFIAEoDSInCgxXYXRjaFN0YXJ0ZWQSFwoPc3Vic2NyaXB0aW9uX2lkGAEgASgJIikKDlVud2F0Y2hSZXF1ZXN0EhcKD3N1YnNjcmlwdGlvbl9pZBgBIAEoCSInCgxXYXRjaFN0b3BwZWQSFwoPc3Vic2NyaXB0aW9uX2lkGAEgASgJInUKFFByZXBhcmVEb21haW5SZXF1ZXN0Eg8KB3Nlc3Npb24YASABKAkSDgoGZG9tYWluGAIgASgJEhYKDnBhY2thZ2Vfc2hhMjU2GAMgASgJEhYKCWRpcmVjdGl2ZRgEIAEoCUgAiAEBQgwKCl9kaXJlY3RpdmUiUgoORG9tYWluUHJlcGFyZWQSDgoGZG9tYWluGAEgASgJEhYKDnBhY2thZ2Vfc2hhMjU2GAIgASgJEhgKEGFscmVhZHlfcmVzaWRlbnQYAyABKAgi9gEKFU1vZGVsTGlmZWN5Y2xlUmVxdWVzdBIPCgdzZXNzaW9uGAEgASgJEj0KBXN0YWdlGAogASgLMiwubm9tb3MucnVudGltZS52Mi5TdGFnZUdlbmVyYXRlZE1vZGVsUmVxdWVzdEgAEj0KBWFkb3B0GAsgASgLMiwubm9tb3MucnVudGltZS52Mi5BZG9wdEdlbmVyYXRlZE1vZGVsUmVxdWVzdEgAEkEKB3Jlc3RvcmUYDCABKAsyLi5ub21vcy5ydW50aW1lLnYyLlJlc3RvcmVHZW5lcmF0ZWRNb2RlbFJlcXVlc3RIAEILCglvcGVyYXRpb24ihgEKGlN0YWdlR2VuZXJhdGVkTW9kZWxSZXF1ZXN0Eg4KBmRvbWFpbhgBIAEoCRIWCg5jYW5kaWRhdGVfaGFzaBgCIAEoCRIQCghsYXdfdXNkehgDIAEoDBIbCg5zb3VyY2Vfc2Vzc2lvbhgEIAEoCUgAiAEBQhEKD19zb3VyY2Vfc2Vzc2lvbiJ6ChpBZG9wdEdlbmVyYXRlZE1vZGVsUmVxdWVzdBIOCgZkb21haW4YASABKAkSFgoOY2FuZGlkYXRlX2hhc2gYAiABKAkSHgoRYWNjZXB0YW5jZV9yZWFzb24YAyABKAlIAIgBAUIUChJfYWNjZXB0YW5jZV9yZWFzb24iegocUmVzdG9yZUdlbmVyYXRlZE1vZGVsUmVxdWVzdBIOCgZkb21haW4YASABKAkSFAoMY3VycmVudF9oYXNoGAIgASgJEh4KEWFjY2VwdGFuY2VfcmVhc29uGAMgASgJSACIAQFCFAoSX2FjY2VwdGFuY2VfcmVhc29uIpMBCg9Nb2RlbERpZmZlcmVuY2USMwoEa2luZBgBIAEoDjIlLm5vbW9zLnJ1bnRpbWUudjIuTW9kZWxEaWZmZXJlbmNlS2luZBIRCgRhcmVhGAIgASgJSACIAQESEwoGYWN0aW9uGAMgASgJSAGIAQESDwoHc3VtbWFyeRgEIAEoCUIHCgVfYXJlYUIJCgdfYWN0aW9uIqUBCgtNb2RlbFJldmlldxIXCg9jaGVja2VkX2FjdGlvbnMYASABKAQSGQoRY2FuZGlkYXRlX2FjdGlvbnMYAiABKAQSGQoMc2FtZV9vdXRjb21lGAMgASgISACIAQESNgoLZGlmZmVyZW5jZXMYBCADKAsyIS5ub21vcy5ydW50aW1lLnYyLk1vZGVsRGlmZmVyZW5jZUIPCg1fc2FtZV9vdXRjb21lIoUCChZNb2RlbExpZmVjeWNsZVJlc3BvbnNlEhAKCGFjY2VwdGVkGAEgASgIEjQKBXN0YWdlGAIgASgOMiUubm9tb3MucnVudGltZS52Mi5Nb2RlbExpZmVjeWNsZVN0YWdlEhQKB21lc3NhZ2UYAyABKAlIAIgBARIRCgRoZWFkGAQgASgJSAGIAQESFwoKcmVjZWlwdF9pZBgFIAEoCUgCiAEBEjIKBnJldmlldxgGIAEoCzIdLm5vbW9zLnJ1bnRpbWUudjIuTW9kZWxSZXZpZXdIA4gBAUIKCghfbWVzc2FnZUIHCgVfaGVhZEINCgtfcmVjZWlwdF9pZEIJCgdfcmV2aWV3ImcKGlJlc29sdmVDdXN0b2R5QnJlYWtSZXF1ZXN0Eg8KB3Nlc3Npb24YASABKAkSOAoIZGVjaXNpb24YAiABKA4yJi5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlCcmVha0RlY2lzaW9uImEKFEN1c3RvZHlCcmVha1Jlc29sdmVkEg8KB3Nlc3Npb24YASABKAkSOAoIZGVjaXNpb24YAiABKA4yJi5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlCcmVha0RlY2lzaW9uIhMKEUNsb3NlUmVhbG1SZXF1ZXN0Ig0KC1JlYWxtQ2xvc2VkIuUBChFEZWFkTGV0dGVyUmVxdWVzdBIPCgdzZXNzaW9uGAEgASgJEjgKBGxpc3QYCiABKAsyKC5ub21vcy5ydW50aW1lLnYyLkxpc3REZWFkTGV0dGVyc1JlcXVlc3RIABI5CgVyZXRyeRgLIAEoCzIoLm5vbW9zLnJ1bnRpbWUudjIuUmV0cnlEZWFkTGV0dGVyUmVxdWVzdEgAEj0KB2Rpc2NhcmQYDCABKAsyKi5ub21vcy5ydW50aW1lLnYyLkRpc2NhcmREZWFkTGV0dGVyUmVxdWVzdEgAQgsKCW9wZXJhdGlvbiIYChZMaXN0RGVhZExldHRlcnNSZXF1ZXN0IisKFlJldHJ5RGVhZExldHRlclJlcXVlc3QSEQoJaW50ZW50X2lkGAEgASgJIi0KGERpc2NhcmREZWFkTGV0dGVyUmVxdWVzdBIRCglpbnRlbnRfaWQYASABKAkivQEKEkRlYWRMZXR0ZXJSZXNwb25zZRIwCgRsaXN0GAogASgLMiAubm9tb3MucnVudGltZS52Mi5EZWFkTGV0dGVyTGlzdEgAEjIKBXJldHJ5GAsgASgLMiEubm9tb3MucnVudGltZS52Mi5EZWFkTGV0dGVyUmV0cnlIABI2CgdkaXNjYXJkGAwgASgLMiMubm9tb3MucnVudGltZS52Mi5EZWFkTGV0dGVyRGlzY2FyZEgAQgkKB291dGNvbWUiRAoORGVhZExldHRlckxpc3QSMgoHZW50cmllcxgBIAMoCzIhLm5vbW9zLnJ1bnRpbWUudjIuRGVhZExldHRlckVudHJ5IrkBCg9EZWFkTGV0dGVyRW50cnkSDwoCaWQYASABKAlIAIgBARISCgpjb21taXRfb2lkGAIgASgJEg4KBnNvdXJjZRgDIAEoCRIPCgdtZXNzYWdlGAQgASgJEhMKBmRvbWFpbhgFIAEoCUgBiAEBEhYKCWRpcmVjdGl2ZRgGIAEoCUgCiAEBEhMKC3JlY29yZGVkX2F0GAcgASgJQgUKA19pZEIJCgdfZG9tYWluQgwKCl9kaXJlY3RpdmUieQoPRGVhZExldHRlclJldHJ5Eg8KB3JldHJpZWQYASABKAgSEQoEaGVhZBgCIAEoCUgAiAEBEhcKD2FscmVhZHlfb25fbWFpbhgDIAEoCBIUCgdtZXNzYWdlGAQgASgJSAGIAQFCBwoFX2hlYWRCCgoIX21lc3NhZ2UiJAoRRGVhZExldHRlckRpc2NhcmQSDwoHcmVtb3ZlZBgBIAEoBCLNBQoMUnVudGltZUV2ZW50EhAKCHNlcXVlbmNlGAEgASgEEhQKB3Nlc3Npb24YAiABKAlIAYgBARIvCgVyZWFkeRgKIAEoCzIeLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZVJlYWR5SAASNwoNd2F0Y2hfY2hhbmdlZBgLIAEoCzIeLm5vbW9zLnJ1bnRpbWUudjIuV2F0Y2hDaGFuZ2VkSAASOQoOc3luY19jb21wbGV0ZWQYDCABKAsyHy5ub21vcy5ydW50aW1lLnYyLlN5bmNDb21wbGV0ZWRIABI1CgxsaW5rX2NoYW5nZWQYDSABKAsyHS5ub21vcy5ydW50aW1lLnYyLkxpbmtDaGFuZ2VkSAASOQoOc2lnbmFsX2NoYW5nZWQYDiABKAsyHy5ub21vcy5ydW50aW1lLnYyLlNpZ25hbENoYW5nZWRIABI7Cg9jdXN0b2R5X2NoYW5nZWQYDyABKAsyIC5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlDaGFuZ2VkSAASQgoTbG9jYWxfd29ya19yZWplY3RlZBgQIAEoCzIjLm5vbW9zLnJ1bnRpbWUudjIuTG9jYWxXb3JrUmVqZWN0ZWRIABIzCgtsYXdfY2hhbmdlZBgRIAEoCzIcLm5vbW9zLnJ1bnRpbWUudjIuTGF3Q2hhbmdlZEgAEkMKD2tlcm5lbF9wcm9ncmVzcxgSIAEoCzIoLm5vbW9zLnJ1bnRpbWUudjIuS2VybmVsUHJvZ3Jlc3NPYnNlcnZlZEgAEi0KBHNwYW4YEyABKAsyHS5ub21vcy5ydW50aW1lLnYyLlJ1bnRpbWVTcGFuSAASPwoRdHJhbnNmZXJfcHJvZ3Jlc3MYFCABKAsyIi5ub21vcy5ydW50aW1lLnYyLlRyYW5zZmVyUHJvZ3Jlc3NIAEIHCgVldmVudEIKCghfc2Vzc2lvbiI+CgxSdW50aW1lUmVhZHkSFwoPcnVudGltZV92ZXJzaW9uGAEgASgJEhUKDWtlcm5lbF9zaGEyNTYYAiABKAwigAEKDFdhdGNoQ2hhbmdlZBIXCg9zdWJzY3JpcHRpb25faWQYASABKAkSEwoLcmVzdWx0X3VzZGEYAiABKAwSNgoHZmFpbHVyZRgDIAEoCzIgLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZUZhaWx1cmVIAIgBAUIKCghfZmFpbHVyZSKcAQoNU3luY0NvbXBsZXRlZBIOCgZyZWFzb24YASABKAkSNwoGcmVzdWx0GAIgASgLMicubm9tb3MucnVudGltZS52Mi5TeW5jV29ya3NwYWNlUmVzcG9uc2USNgoHZmFpbHVyZRgDIAEoCzIgLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZUZhaWx1cmVIAIgBAUIKCghfZmFpbHVyZSI7CgtMaW5rQ2hhbmdlZBIsCgZzdGF0dXMYASABKA4yHC5ub21vcy5ydW50aW1lLnYyLkxpbmtTdGF0dXMiOAoNU2lnbmFsQ2hhbmdlZBIOCgZkb21haW4YASABKAkSFwoPcHJvamVjdGlvbl91c2RhGAIgASgMIvQBCg5DdXN0b2R5Q2hhbmdlZBIxCgRraW5kGAEgASgOMiMubm9tb3MucnVudGltZS52Mi5DdXN0b2R5Q2hhbmdlS2luZBI1Cg1jdXN0b2R5X2JyZWFrGAIgASgLMh4ubm9tb3MucnVudGltZS52Mi5DdXN0b2R5QnJlYWsSFgoJb3BlcmF0aW9uGAMgASgJSACIAQESFQoIcmVjbG9uZWQYBCABKAhIAYgBARIbCg5wYXJrZWRfaW50ZW50cxgFIAEoBEgCiAEBQgwKCl9vcGVyYXRpb25CCwoJX3JlY2xvbmVkQhEKD19wYXJrZWRfaW50ZW50cyLhAQoRTG9jYWxXb3JrUmVqZWN0ZWQSEQoJd29ya3NwYWNlGAEgASgJEjYKB3JlZnVzZWQYAiADKAsyJS5ub21vcy5ydW50aW1lLnYyLlJlamVjdGVkTG9jYWxJbnRlbnQSDgoGcGFya2VkGAMgASgIEhUKCHJlc2V0X3RvGAQgASgJSACIAQESEQoJcmV0cnlhYmxlGAUgASgIEjoKBnNvdXJjZRgGIAEoDjIqLm5vbW9zLnJ1bnRpbWUudjIuTG9jYWxXb3JrUmVqZWN0aW9uU291cmNlQgsKCV9yZXNldF90byJjChNDdXN0b2R5U3VwZXJzZXNzaW9uEhoKDXN1cGVyc2VkZWRfYXQYASABKAlIAIgBARITCgZyZWFzb24YAiABKAlIAYgBAUIQCg5fc3VwZXJzZWRlZF9hdEIJCgdfcmVhc29uIrgCCgxDdXN0b2R5QnJlYWsSMAoEa2luZBgBIAEoDjIiLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUJyZWFrS2luZBIVCg1sb2NhbF9nZW5lc2lzGAIgASgJEhYKDnJlbW90ZV9nZW5lc2lzGAMgASgJEhoKEnJlbW90ZV9pbmNhcm5hdGlvbhgEIAEoCRJACgxzdXBlcnNlc3Npb24YBSABKAsyJS5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlTdXBlcnNlc3Npb25IAIgBARIaChJsb2NhbF9vbmx5X2ludGVudHMYBiABKAQSIgoVbGFzdF9zeW5jZWRfYXRfbWlsbGlzGAcgASgESAGIAQFCDwoNX3N1cGVyc2Vzc2lvbkIYChZfbGFzdF9zeW5jZWRfYXRfbWlsbGlzIs0BChNSZWplY3RlZExvY2FsSW50ZW50EhYKCWludGVudF9pZBgBIAEoCUgAiAEBEhcKCmNvbW1pdF9vaWQYAiABKAlIAYgBARITCgZkb21haW4YAyABKAlIAogBARIWCglkaXJlY3RpdmUYBCABKAlIA4gBARIPCgdtZXNzYWdlGAUgASgJEhEKCXJldHJ5YWJsZRgGIAEoCEIMCgpfaW50ZW50X2lkQg0KC19jb21taXRfb2lkQgkKB19kb21haW5CDAoKX2RpcmVjdGl2ZSJQCgpMYXdDaGFuZ2VkEg4KBmRvbWFpbhgBIAEoCRIWCg5wYWNrYWdlX3NoYTI1NhgCIAEoCRIaChJjb21wYXRpYmlsaXR5X3VzZGEYAyABKAwi3QEKC1J1bnRpbWVTcGFuEhAKCHRyYWNlX2lkGAEgASgMEg8KB3NwYW5faWQYAiABKAwSGwoOcGFyZW50X3NwYW5faWQYAyABKAxIAIgBARIMCgRuYW1lGAQgASgJEhoKEnN0YXJ0ZWRfdW5peF9uYW5vcxgFIAEoBBIWCg5kdXJhdGlvbl9uYW5vcxgGIAEoBBI5CgphdHRyaWJ1dGVzGAcgAygLMiUubm9tb3MucnVudGltZS52Mi5EaWFnbm9zdGljQXR0cmlidXRlQhEKD19wYXJlbnRfc3Bhbl9pZCLqAQoWS2VybmVsUHJvZ3Jlc3NPYnNlcnZlZBI5CghzbmFwc2hvdBgBIAEoCzInLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxQcm9ncmVzc1NuYXBzaG90EiQKHGhvc3Rfb2JzZXJ2ZWRfZWxhcHNlZF9taWNyb3MYAiABKAQSKgoiaG9zdF9vYnNlcnZlZF9waGFzZV9lbGFwc2VkX21pY3JvcxgDIAEoBBIeChZwcm9jZXNzX3Jlc2lkZW50X2J5dGVzGAQgASgEEiMKG3Byb2Nlc3NfcGVha19yZXNpZGVudF9ieXRlcxgFIAEoBCKCAQoQVHJhbnNmZXJQcm9ncmVzcxIWCg5yZWNlaXZlZF9ieXRlcxgBIAEoBBIYCgt0b3RhbF9ieXRlcxgCIAEoBEgAiAEBEiwKBGtpbmQYAyABKA4yHi5ub21vcy5ydW50aW1lLnYyLlRyYW5zZmVyS2luZEIOCgxfdG90YWxfYnl0ZXMqmQEKEkN1c3RvZHlCcmVha1BvbGljeRIkCiBDVVNUT0RZX0JSRUFLX1BPTElDWV9VTlNQRUNJRklFRBAAEhwKGENVU1RPRFlfQlJFQUtfUE9MSUNZX0FTSxABEh4KGkNVU1RPRFlfQlJFQUtfUE9MSUNZX0FET1BUEAISHwobQ1VTVE9EWV9CUkVBS19QT0xJQ1lfUkVKRUNUEAMqoAEKEldvcmtzcGFjZVJlc2lkZW5jeRIjCh9XT1JLU1BBQ0VfUkVTSURFTkNZX1VOU1BFQ0lGSUVEEAASHwobV09SS1NQQUNFX1JFU0lERU5DWV9NT1VOVEVEEAESHgoaV09SS1NQQUNFX1JFU0lERU5DWV9QQVJLRUQQAhIkCiBXT1JLU1BBQ0VfUkVTSURFTkNZX0NVU1RPRFlfT05MWRADKo0BChRXb3Jrc3BhY2VTeW5jUG9zdHVyZRImCiJXT1JLU1BBQ0VfU1lOQ19QT1NUVVJFX1VOU1BFQ0lGSUVEEAASJQohV09SS1NQQUNFX1NZTkNfUE9TVFVSRV9MT0NBTF9PTkxZEAESJgoiV09SS1NQQUNFX1NZTkNfUE9TVFVSRV9DTE9VRF9CT1VORBACKqgBCglXYXRjaEtpbmQSGgoWV0FUQ0hfS0lORF9VTlNQRUNJRklFRBAAEhQKEFdBVENIX0tJTkRfUVVFUlkQARIUChBXQVRDSF9LSU5EX0JZX0lEEAISFgoSV0FUQ0hfS0lORF9TUEFUSUFMEAMSFwoTV0FUQ0hfS0lORF9BQ1RJVklUWRAEIgQIBRAFKhxXQVRDSF9LSU5EX1BFTkRJTkdfQ09ORkxJQ1RTKqQDChNNb2RlbExpZmVjeWNsZVN0YWdlEiUKIU1PREVMX0xJRkVDWUNMRV9TVEFHRV9VTlNQRUNJRklFRBAAEisKJ01PREVMX0xJRkVDWUNMRV9TVEFHRV9JREVOVElUWV9SRVFVSVJFRBABEioKJk1PREVMX0xJRkVDWUNMRV9TVEFHRV9TVEFHSU5HX1JFUVVJUkVEEAISIwofTU9ERUxfTElGRUNZQ0xFX1NUQUdFX1BSRUZMSUdIVBADEi0KKU1PREVMX0xJRkVDWUNMRV9TVEFHRV9BQ0NFUFRBTkNFX1JFUVVJUkVEEAQSIwofTU9ERUxfTElGRUNZQ0xFX1NUQUdFX0FETUlTU0lPThAFEiEKHU1PREVMX0xJRkVDWUNMRV9TVEFHRV9QRU5ESU5HEAYSIgoeTU9ERUxfTElGRUNZQ0xFX1NUQUdFX1BST01PVEVEEAcSIgoeTU9ERUxfTElGRUNZQ0xFX1NUQUdFX1JFU1RPUkVEEAgSKQolTU9ERUxfTElGRUNZQ0xFX1NUQUdFX0FMUkVBRFlfQ1VSUkVOVBAJKqQBChNNb2RlbERpZmZlcmVuY2VLaW5kEiUKIU1PREVMX0RJRkZFUkVOQ0VfS0lORF9VTlNQRUNJRklFRBAAEh8KG01PREVMX0RJRkZFUkVOQ0VfS0lORF9SVUxFUxABEiEKHU1PREVMX0RJRkZFUkVOQ0VfS0lORF9PVVRDT01FEAISIgoeTU9ERUxfRElGRkVSRU5DRV9LSU5EX0VWSURFTkNFEAMqgwEKFEN1c3RvZHlCcmVha0RlY2lzaW9uEiYKIkNVU1RPRFlfQlJFQUtfREVDSVNJT05fVU5TUEVDSUZJRUQQABIgChxDVVNUT0RZX0JSRUFLX0RFQ0lTSU9OX0FET1BUEAESIQodQ1VTVE9EWV9CUkVBS19ERUNJU0lPTl9SRUpFQ1QQAipXCgpMaW5rU3RhdHVzEhsKF0xJTktfU1RBVFVTX1VOU1BFQ0lGSUVEEAASFAoQTElOS19TVEFUVVNfT1BFThABEhYKEkxJTktfU1RBVFVTX0NMT1NFRBACKuIBChFDdXN0b2R5Q2hhbmdlS2luZBIjCh9DVVNUT0RZX0NIQU5HRV9LSU5EX1VOU1BFQ0lGSUVEEAASIAocQ1VTVE9EWV9DSEFOR0VfS0lORF9ERVRFQ1RFRBABEiAKHENVU1RPRFlfQ0hBTkdFX0tJTkRfUkVKRUNURUQQAhIgChxDVVNUT0RZX0NIQU5HRV9LSU5EX0FET1BUSU5HEAMSJQohQ1VTVE9EWV9DSEFOR0VfS0lORF9BRE9QVF9SRUZVU0VEEAQSGwoXQ1VTVE9EWV9DSEFOR0VfS0lORF9BU0sQBSp6ChBDdXN0b2R5QnJlYWtLaW5kEiIKHkNVU1RPRFlfQlJFQUtfS0lORF9VTlNQRUNJRklFRBAAEiEKHUNVU1RPRFlfQlJFQUtfS0lORF9TVVBFUlNFREVEEAESHwobQ1VTVE9EWV9CUkVBS19LSU5EX0RJVkVSR0VEEAIqmAEKGExvY2FsV29ya1JlamVjdGlvblNvdXJjZRIrCidMT0NBTF9XT1JLX1JFSkVDVElPTl9TT1VSQ0VfVU5TUEVDSUZJRUQQABIpCiVMT0NBTF9XT1JLX1JFSkVDVElPTl9TT1VSQ0VfQURNSVNTSU9OEAESJAogTE9DQUxfV09SS19SRUpFQ1RJT05fU09VUkNFX1NZTkMQAip2CgxUcmFuc2ZlcktpbmQSHQoZVFJBTlNGRVJfS0lORF9VTlNQRUNJRklFRBAAEhcKE1RSQU5TRkVSX0tJTkRfREVMVEEQARIWChJUUkFOU0ZFUl9LSU5EX0ZVTEwQAhIWChJUUkFOU0ZFUl9LSU5EX1BVU0gQAzJkChNOb21vc1J1bnRpbWVTZXJ2aWNlEk0KBkludm9rZRIgLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZVJlcXVlc3QaIS5ub21vcy5ydW50aW1lLnYyLlJ1bnRpbWVSZXNwb25zZWIGcHJvdG8z", [file_nomos_kernel_v1_kernel, file_nomos_kernel_v1_progress]);
|
|
7709
|
-
var CustodyOfferBatchRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_runtime,
|
|
7710
|
-
var CustodyIntentOfferSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_runtime,
|
|
7711
|
-
var CustodyInlineOffersSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_runtime,
|
|
7712
|
-
var CustodySessionCandidateSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_runtime,
|
|
7713
|
-
var CustodyOfferBatchResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_runtime,
|
|
7720
|
+
var file_nomos_runtime_v2_runtime = /* @__PURE__ */ fileDesc("Ch5ub21vcy9ydW50aW1lL3YyL3J1bnRpbWUucHJvdG8SEG5vbW9zLnJ1bnRpbWUudjIitwoKDlJ1bnRpbWVSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoBBIyCgV0cmFjZRgDIAEoCzIeLm5vbW9zLnJ1bnRpbWUudjIuVHJhY2VDb250ZXh0SAGIAQESOgoLa2VybmVsX2NhbGwYCiABKAsyIy5ub21vcy5ydW50aW1lLnYyLktlcm5lbENhbGxSZXF1ZXN0SAASMwoHY29ubmVjdBgLIAEoCzIgLm5vbW9zLnJ1bnRpbWUudjIuQ29ubmVjdFJlcXVlc3RIABJCCg9saXN0X3dvcmtzcGFjZXMYDCABKAsyJy5ub21vcy5ydW50aW1lLnYyLkxpc3RXb3Jrc3BhY2VzUmVxdWVzdEgAEkgKEnNuYXBzaG90X3dvcmtzcGFjZRgNIAEoCzIqLm5vbW9zLnJ1bnRpbWUudjIuU25hcHNob3RXb3Jrc3BhY2VSZXF1ZXN0SAASQAoOc3luY193b3Jrc3BhY2UYDiABKAsyJi5ub21vcy5ydW50aW1lLnYyLlN5bmNXb3Jrc3BhY2VSZXF1ZXN0SAASQQoPc3RhcnRfYXV0b19zeW5jGA8gASgLMiYubm9tb3MucnVudGltZS52Mi5TdGFydEF1dG9TeW5jUmVxdWVzdEgAEj8KDnN0b3BfYXV0b19zeW5jGBAgASgLMiUubm9tb3MucnVudGltZS52Mi5TdG9wQXV0b1N5bmNSZXF1ZXN0SAASLwoFd2F0Y2gYESABKAsyHi5ub21vcy5ydW50aW1lLnYyLldhdGNoUmVxdWVzdEgAEjMKB3Vud2F0Y2gYEiABKAsyIC5ub21vcy5ydW50aW1lLnYyLlVud2F0Y2hSZXF1ZXN0SAASQAoOcHJlcGFyZV9kb21haW4YEyABKAsyJi5ub21vcy5ydW50aW1lLnYyLlByZXBhcmVEb21haW5SZXF1ZXN0SAASTQoVcmVzb2x2ZV9jdXN0b2R5X2JyZWFrGBQgASgLMiwubm9tb3MucnVudGltZS52Mi5SZXNvbHZlQ3VzdG9keUJyZWFrUmVxdWVzdEgAEjoKC2Nsb3NlX3JlYWxtGBUgASgLMiMubm9tb3MucnVudGltZS52Mi5DbG9zZVJlYWxtUmVxdWVzdEgAEjoKC2RlYWRfbGV0dGVyGBYgASgLMiMubm9tb3MucnVudGltZS52Mi5EZWFkTGV0dGVyUmVxdWVzdEgAEkAKDmhpc3RvcmljX3F1ZXJ5GBcgASgLMiYubm9tb3MucnVudGltZS52Mi5IaXN0b3JpY1F1ZXJ5UmVxdWVzdEgAEkIKD21vZGVsX2xpZmVjeWNsZRgYIAEoCzInLm5vbW9zLnJ1bnRpbWUudjIuTW9kZWxMaWZlY3ljbGVSZXF1ZXN0SAASXQodZXN0YWJsaXNoX2FwcGxpY2F0aW9uX2N1c3RvZHkYGSABKAsyNC5ub21vcy5ydW50aW1lLnYyLkVzdGFibGlzaEFwcGxpY2F0aW9uQ3VzdG9keVJlcXVlc3RIABJEChB3b3Jrc3BhY2Vfc3RhdHVzGBogASgLMigubm9tb3MucnVudGltZS52Mi5Xb3Jrc3BhY2VTdGF0dXNSZXF1ZXN0SAASTwoWcmVtb3RlX2dlbmVyYXRlZF9vZmZlchgbIAEoCzItLm5vbW9zLnJ1bnRpbWUudjIuUmVtb3RlR2VuZXJhdGVkT2ZmZXJSZXF1ZXN0SABCCQoHY29tbWFuZEIICgZfdHJhY2UiUwoRS2VybmVsQ2FsbFJlcXVlc3QSDwoHc2Vzc2lvbhgBIAEoCRItCgdyZXF1ZXN0GAIgASgLMhwubm9tb3Mua2VybmVsLnYxLkNhbGxSZXF1ZXN0IvECCiJFc3RhYmxpc2hBcHBsaWNhdGlvbkN1c3RvZHlSZXF1ZXN0Eg8KB3Nlc3Npb24YASABKAkSDgoGcGFyZW50GAIgASgJEhEKCXByaW5jaXBhbBgDIAEoCRIPCgdzdWJqZWN0GAQgASgJEhUKDWRldmljZV9zZWNyZXQYBSABKAwSFQoNZGV2aWNlX3B1YmxpYxgGIAEoDBISCgphdXRoX3Rva2VuGAcgASgJEhAKCGlkX3Rva2VuGAggASgJEhQKDHZlcmlmaWVkX3ZpYRgJIAEoCRIPCgdib3JuX2F0GAogASgJEjsKE2Vucm9sbF9maXJzdF9kZXZpY2UYCyABKAsyHi5ub21vcy5rZXJuZWwudjEuRGlyZWN0aXZlQ2FsbBI9ChViaXJ0aF9yZWNlaXZpbmdfZ3JvdXAYDCABKAsyHi5ub21vcy5rZXJuZWwudjEuRGlyZWN0aXZlQ2FsbBIPCgdjb25maXJtGA0gASgIIp8BCh1BcHBsaWNhdGlvbkN1c3RvZHlFc3RhYmxpc2hlZBIMCgRob21lGAEgASgJEhcKCmNoaWxkX2hlYWQYAiABKAlIAIgBARIQCgh2ZXJpZmllZBgDIAEoCBIfChJ2ZXJpZmljYXRpb25fZXJyb3IYBCABKAlIAYgBAUINCgtfY2hpbGRfaGVhZEIVChNfdmVyaWZpY2F0aW9uX2Vycm9yImUKFEhpc3RvcmljUXVlcnlSZXF1ZXN0Eg8KB3Nlc3Npb24YASABKAkSDgoGbW9tZW50GAIgASgJEiwKBXF1ZXJ5GAMgASgLMh0ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5UmVxdWVzdCLGCgoPUnVudGltZVJlc3BvbnNlEhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoBBIzCgdmYWlsdXJlGAogASgLMiAubm9tb3MucnVudGltZS52Mi5SdW50aW1lRmFpbHVyZUgAEjQKC2tlcm5lbF9jYWxsGAsgASgLMh0ubm9tb3Mua2VybmVsLnYxLkNhbGxSZXNwb25zZUgAEjAKCWNvbm5lY3RlZBgMIAEoCzIbLm5vbW9zLnJ1bnRpbWUudjIuQ29ubmVjdGVkSAASOQoOd29ya3NwYWNlX2xpc3QYDSABKAsyHy5ub21vcy5ydW50aW1lLnYyLldvcmtzcGFjZUxpc3RIABJBChJ3b3Jrc3BhY2Vfc25hcHNob3QYDiABKAsyIy5ub21vcy5ydW50aW1lLnYyLldvcmtzcGFjZVNuYXBzaG90SAASQQoOc3luY193b3Jrc3BhY2UYDyABKAsyJy5ub21vcy5ydW50aW1lLnYyLlN5bmNXb3Jrc3BhY2VSZXNwb25zZUgAEj4KEWF1dG9fc3luY19zdGFydGVkGBAgASgLMiEubm9tb3MucnVudGltZS52Mi5BdXRvU3luY1N0YXJ0ZWRIABI+ChFhdXRvX3N5bmNfc3RvcHBlZBgRIAEoCzIhLm5vbW9zLnJ1bnRpbWUudjIuQXV0b1N5bmNTdG9wcGVkSAASNwoNd2F0Y2hfc3RhcnRlZBgSIAEoCzIeLm5vbW9zLnJ1bnRpbWUudjIuV2F0Y2hTdGFydGVkSAASNwoNd2F0Y2hfc3RvcHBlZBgTIAEoCzIeLm5vbW9zLnJ1bnRpbWUudjIuV2F0Y2hTdG9wcGVkSAASOwoPZG9tYWluX3ByZXBhcmVkGBQgASgLMiAubm9tb3MucnVudGltZS52Mi5Eb21haW5QcmVwYXJlZEgAEkgKFmN1c3RvZHlfYnJlYWtfcmVzb2x2ZWQYFSABKAsyJi5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlCcmVha1Jlc29sdmVkSAASNQoMcmVhbG1fY2xvc2VkGBYgASgLMh0ubm9tb3MucnVudGltZS52Mi5SZWFsbUNsb3NlZEgAEjMKB2Jsb2NrZWQYFyABKAsyIC5ub21vcy5ydW50aW1lLnYyLlJ1bnRpbWVCbG9ja2VkSAASSAoWcmVtb3RlX29mZmVyX2FkbWlzc2lvbhgYIAEoCzImLm5vbW9zLnJ1bnRpbWUudjIuUmVtb3RlT2ZmZXJBZG1pc3Npb25IABI7CgtkZWFkX2xldHRlchgZIAEoCzIkLm5vbW9zLnJ1bnRpbWUudjIuRGVhZExldHRlclJlc3BvbnNlSAASQwoPbW9kZWxfbGlmZWN5Y2xlGBogASgLMigubm9tb3MucnVudGltZS52Mi5Nb2RlbExpZmVjeWNsZVJlc3BvbnNlSAASWgofYXBwbGljYXRpb25fY3VzdG9keV9lc3RhYmxpc2hlZBgbIAEoCzIvLm5vbW9zLnJ1bnRpbWUudjIuQXBwbGljYXRpb25DdXN0b2R5RXN0YWJsaXNoZWRIABI9ChB3b3Jrc3BhY2Vfc3RhdHVzGBwgASgLMiEubm9tb3MucnVudGltZS52Mi5Xb3Jrc3BhY2VTdGF0dXNIABJQChZyZW1vdGVfZ2VuZXJhdGVkX29mZmVyGB0gASgLMi4ubm9tb3MucnVudGltZS52Mi5SZW1vdGVHZW5lcmF0ZWRPZmZlckFjY2VwdGVkSABCCQoHb3V0Y29tZSK3AQobUmVtb3RlR2VuZXJhdGVkT2ZmZXJSZXF1ZXN0EhYKDnNvdXJjZV9zZXNzaW9uGAEgASgJEhgKEHRhcmdldF93b3Jrc3BhY2UYAiABKAkSDQoFYWN0b3IYAyABKAkSFQoNYXV0aG9yX3NlY3JldBgEIAEoDBISCgphdXRoX3Rva2VuGAUgASgMEiwKBGNhbGwYBiABKAsyHi5ub21vcy5rZXJuZWwudjEuRGlyZWN0aXZlQ2FsbCI/ChxSZW1vdGVHZW5lcmF0ZWRPZmZlckFjY2VwdGVkEhEKCXdvcmtzcGFjZRgBIAEoCRIMCgRoZWFkGAIgASgJIp8BCg5SdW50aW1lQmxvY2tlZBJBCgl3b3Jrc3BhY2UYASABKAsyLC5ub21vcy5ydW50aW1lLnYyLldvcmtzcGFjZVJlc2lkZW5jeVJlcXVpcmVkSAASQAoIc2libGluZ3MYAiABKAsyLC5ub21vcy5ydW50aW1lLnYyLlNpYmxpbmdSZXNpZGVuY2llc1JlcXVpcmVkSABCCAoGcmVhc29uIi8KGldvcmtzcGFjZVJlc2lkZW5jeVJlcXVpcmVkEhEKCXdvcmtzcGFjZRgBIAEoCSJVChhTaWJsaW5nUmVzaWRlbmN5UmVxdWlyZWQSEQoJd29ya3NwYWNlGAEgASgJEhMKC3NvdXJjZV9oZWFkGAIgASgJEhEKCWZvbGRfcm9vdBgDIAEoCSJdChpTaWJsaW5nUmVzaWRlbmNpZXNSZXF1aXJlZBI/CgtyZXNpZGVuY2llcxgBIAMoCzIqLm5vbW9zLnJ1bnRpbWUudjIuU2libGluZ1Jlc2lkZW5jeVJlcXVpcmVkIoYCChRSZW1vdGVPZmZlckFkbWlzc2lvbhIRCgl3b3Jrc3BhY2UYASABKAkSDAoEbWFpbhgCIAEoCRIYCgtzZWFsZWRfbWFpbhgDIAEoCUgAiAEBEi8KB3ZlcmRpY3QYBCABKAsyHi5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXNwb25zZRIzCgxib3JuX2N1c3RvZHkYBSADKAsyHS5ub21vcy5ydW50aW1lLnYyLkJvcm5DdXN0b2R5EhMKC3Jlc3VsdF9wYWNrGAYgASgMEhgKC3Jlc3VsdF9iYXNlGAcgASgJSAGIAQFCDgoMX3NlYWxlZF9tYWluQg4KDF9yZXN1bHRfYmFzZSJKCgtCb3JuQ3VzdG9keRItCgVjaGlsZBgBIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5Cb3JuV29ya3NwYWNlEgwKBHBhY2sYAiABKAwi+QEKGEN1c3RvZHlPZmZlckJhdGNoUmVxdWVzdBIYChBwcm90b2NvbF92ZXJzaW9uGAEgASgNEhIKCnJlcXVlc3RfaWQYAiABKAkSNwoGaW5saW5lGAMgASgLMiUubm9tb3MucnVudGltZS52Mi5DdXN0b2R5SW5saW5lT2ZmZXJzSAASRgoRc2Vzc2lvbl9jYW5kaWRhdGUYBCABKAsyKS5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlTZXNzaW9uQ2FuZGlkYXRlSAASFgoJYmFzZV9oZWFkGAUgASgJSAGIAQFCCAoGc291cmNlQgwKCl9iYXNlX2hlYWQiTgoSQ3VzdG9keUludGVudE9mZmVyEg8KB3Nlc3Npb24YASABKAkSEgoKY29tbWl0X29pZBgCIAEoCRITCgtjaGFuZ2VfdXNkYRgDIAEoDCJLChNDdXN0b2R5SW5saW5lT2ZmZXJzEjQKBm9mZmVycxgBIAMoCzIkLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUludGVudE9mZmVyIiwKF0N1c3RvZHlTZXNzaW9uQ2FuZGlkYXRlEhEKCXJlZmVyZW5jZRgBIAEoCSL3AQoZQ3VzdG9keU9mZmVyQmF0Y2hSZXNwb25zZRIYChBwcm90b2NvbF92ZXJzaW9uGAEgASgNEhIKCnJlcXVlc3RfaWQYAiABKAkSNwoJYWRtaXNzaW9uGAogASgLMiIubm9tb3MucnVudGltZS52Mi5DdXN0b2R5QWRtaXNzaW9uSAASMwoHZmFpbHVyZRgLIAEoCzIgLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZUZhaWx1cmVIABIzCgdibG9ja2VkGAwgASgLMiAubm9tb3MucnVudGltZS52Mi5SdW50aW1lQmxvY2tlZEgAQgkKB291dGNvbWUi7gIKEEN1c3RvZHlBZG1pc3Npb24SDAoEbWFpbhgBIAEoCRIYCgtzZWFsZWRfbWFpbhgCIAEoCUgAiAEBEjsKCHNlc3Npb25zGAMgAygLMikubm9tb3MucnVudGltZS52Mi5DdXN0b2R5U2Vzc2lvbkFkbWlzc2lvbhI1Cg5iaXJ0aF9vdXRjb21lcxgEIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5CaXJ0aE91dGNvbWUSMwoMYm9ybl9jdXN0b2R5GAUgAygLMh0ubm9tb3MucnVudGltZS52Mi5Cb3JuQ3VzdG9keRITCgtyZXN1bHRfcGFjaxgGIAEoDBIYCgtyZXN1bHRfYmFzZRgHIAEoCUgBiAEBEjoKB3RpbWluZ3MYCCABKAsyKS5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlBZG1pc3Npb25UaW1pbmdzQg4KDF9zZWFsZWRfbWFpbkIOCgxfcmVzdWx0X2Jhc2UiZQoXQ3VzdG9keVNlc3Npb25BZG1pc3Npb24SDwoHc2Vzc2lvbhgBIAEoCRI5CgdpbnRlbnRzGAIgAygLMigubm9tb3MucnVudGltZS52Mi5DdXN0b2R5SW50ZW50QWRtaXNzaW9uIpACChZDdXN0b2R5SW50ZW50QWRtaXNzaW9uEhIKCmNvbW1pdF9vaWQYASABKAkSFgoJaW50ZW50X2lkGAIgASgJSAGIAQESOwoIYWRtaXR0ZWQYCiABKAsyJy5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlJbnRlbnRBZG1pdHRlZEgAEjkKB3NraXBwZWQYCyABKAsyJi5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlJbnRlbnRTa2lwcGVkSAASOQoHcmVmdXNlZBgMIAEoCzImLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUludGVudFJlZnVzZWRIAEIJCgdvdXRjb21lQgwKCl9pbnRlbnRfaWQikAEKFUN1c3RvZHlJbnRlbnRBZG1pdHRlZBIMCgRoZWFkGAEgASgJEjMKB2NyZWF0ZWQYAiADKAsyIi5ub21vcy5rZXJuZWwudjEuT2ZmZXJBZ2dyZWdhdGVSZWYSNAoIYWZmZWN0ZWQYAyADKAsyIi5ub21vcy5rZXJuZWwudjEuT2ZmZXJBZ2dyZWdhdGVSZWYiLwoUQ3VzdG9keUludGVudFNraXBwZWQSFwoPYWxyZWFkeV9vbl9tYWluGAEgASgIIloKFEN1c3RvZHlJbnRlbnRSZWZ1c2VkEg8KB21lc3NhZ2UYASABKAkSFQoNZGVhZF9sZXR0ZXJlZBgCIAEoCBIRCgRoaW50GAMgASgJSACIAQFCBwoFX2hpbnQi7QEKF0N1c3RvZHlBZG1pc3Npb25UaW1pbmdzEhQKDHRvdGFsX21pbGxpcxgBIAEoARITCgtzY2FuX21pbGxpcxgCIAEoARIUCgxmZXRjaF9taWxsaXMYAyABKAESEwoLc2VhbF9taWxsaXMYBCABKAESGAoQZ2F0ZV9mb2xkX21pbGxpcxgFIAEoARIUCgxpbnRlbnRfY291bnQYBiABKA0SFQoNc2Vzc2lvbl9jb3VudBgHIAEoDRI1CgVzcGFucxgIIAMoCzImLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUFkbWlzc2lvblNwYW4ilwEKFEN1c3RvZHlBZG1pc3Npb25TcGFuEgoKAmlkGAEgASgJEg0KBXRyYWNrGAIgASgJEgwKBG5hbWUYAyABKAkSDAoEa2luZBgEIAEoCRINCgVkZXB0aBgFIAEoDRIbChNzdGFydGVkX3VuaXhfbWlsbGlzGAYgASgBEhwKFGZpbmlzaGVkX3VuaXhfbWlsbGlzGAcgASgBIkIKDFRyYWNlQ29udGV4dBIQCgh0cmFjZV9pZBgBIAEoDBIPCgdzcGFuX2lkGAIgASgMEg8KB3NhbXBsZWQYAyABKAgi6QEKDlJ1bnRpbWVGYWlsdXJlEgwKBGNvZGUYASABKAkSDwoHbWVzc2FnZRgCIAEoCRIRCgljb21wb25lbnQYAyABKAkSFgoJd29ya3NwYWNlGAQgASgJSACIAQESEwoGZG9tYWluGAUgASgJSAGIAQESFgoJZGlyZWN0aXZlGAYgASgJSAKIAQESOQoKYXR0cmlidXRlcxgHIAMoCzIlLm5vbW9zLnJ1bnRpbWUudjIuRGlhZ25vc3RpY0F0dHJpYnV0ZUIMCgpfd29ya3NwYWNlQgkKB19kb21haW5CDAoKX2RpcmVjdGl2ZSKlAQoTRGlhZ25vc3RpY0F0dHJpYnV0ZRIMCgRuYW1lGAEgASgJEhYKDHN0cmluZ192YWx1ZRgCIAEoCUgAEhcKDWludGVnZXJfdmFsdWUYAyABKBJIABIWCgxkb3VibGVfdmFsdWUYBCABKAFIABIXCg1ib29sZWFuX3ZhbHVlGAUgASgISAASFQoLYnl0ZXNfdmFsdWUYBiABKAxIAEIHCgV2YWx1ZSLNAgoOQ29ubmVjdFJlcXVlc3QSEQoJd29ya3NwYWNlGAEgASgJEhEKCWNsaWVudF9pZBgCIAEoCRIUCgdzZXNzaW9uGAMgASgJSACIAQESEgoFY2xvdWQYBCABKAlIAYgBARISCgphdXRoX3Rva2VuGAUgASgMEhUKDWF1dGhvcl9zZWNyZXQYBiABKAwSIgoabWF4aW11bV9tb3VudGVkX3dvcmtzcGFjZXMYByABKA0SFAoMYWxsb3dfdW5ib3JuGAggASgIEg8KB3JlY292ZXIYCSABKAgSQgoUY3VzdG9keV9icmVha19wb2xpY3kYCiABKA4yJC5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlCcmVha1BvbGljeRIbChNoYXNfcmVzdG9yZV9jdXN0b2R5GAsgASgIQgoKCF9zZXNzaW9uQggKBl9jbG91ZCKLAQoJQ29ubmVjdGVkEhEKCXdvcmtzcGFjZRgBIAEoCRIPCgdzZXNzaW9uGAIgASgJEhMKC2Nsb3VkX2JvdW5kGAMgASgIEjgKCHJlY292ZXJ5GAQgASgLMiEubm9tb3MucnVudGltZS52Mi5DdXN0b2R5UmVjb3ZlcnlIAIgBAUILCglfcmVjb3ZlcnkiWwoPQ3VzdG9keVJlY292ZXJ5EhUKDXByZXZpb3VzX2hlYWQYASABKAkSFgoOcmVjb3ZlcmVkX2hlYWQYAiABKAkSGQoRcmVjb3ZlcmVkX2ludGVudHMYAyABKAQiFwoVTGlzdFdvcmtzcGFjZXNSZXF1ZXN0Iq0BChBXb3Jrc3BhY2VTdW1tYXJ5Eg8KB3Nlc3Npb24YASABKAkSEQoJd29ya3NwYWNlGAIgASgJEjcKCXJlc2lkZW5jeRgDIAEoDjIkLm5vbW9zLnJ1bnRpbWUudjIuV29ya3NwYWNlUmVzaWRlbmN5EjwKDHN5bmNfcG9zdHVyZRgEIAEoDjImLm5vbW9zLnJ1bnRpbWUudjIuV29ya3NwYWNlU3luY1Bvc3R1cmUiRwoNV29ya3NwYWNlTGlzdBI2Cgp3b3Jrc3BhY2VzGAEgAygLMiIubm9tb3MucnVudGltZS52Mi5Xb3Jrc3BhY2VTdW1tYXJ5IikKFldvcmtzcGFjZVN0YXR1c1JlcXVlc3QSDwoHc2Vzc2lvbhgBIAEoCSJACg9Xb3Jrc3BhY2VTdGF0dXMSEQoJd29ya3NwYWNlGAEgASgJEhEKBGhlYWQYAiABKAlIAIgBAUIHCgVfaGVhZCJNChhTbmFwc2hvdFdvcmtzcGFjZVJlcXVlc3QSDwoHc2Vzc2lvbhgBIAEoCRIUCgdpZl9oZWFkGAIgASgJSACIAQFCCgoIX2lmX2hlYWQiXAoRV29ya3NwYWNlU25hcHNob3QSEQoJd29ya3NwYWNlGAEgASgJEgwKBGhlYWQYAiABKAkSEQoJdW5jaGFuZ2VkGAMgASgIEhMKC2hhc19jdXN0b2R5GAQgASgIIjYKFFN5bmNXb3Jrc3BhY2VSZXF1ZXN0Eg8KB3Nlc3Npb24YASABKAkSDQoFYWRtaXQYAiABKAgivAUKFVN5bmNXb3Jrc3BhY2VSZXNwb25zZRIRCgl3b3Jrc3BhY2UYASABKAkSGgoNcHJldmlvdXNfaGVhZBgCIAEoCUgAiAEBEhkKDGN1cnJlbnRfaGVhZBgDIAEoCUgBiAEBEhAKCGFkbWl0dGVkGAQgASgEEg8KB3JlZnVzZWQYBSABKAQSEAoIZGVmZXJyZWQYBiABKAQSEgoKbG9jYWxfb25seRgHIAEoCBIOCgZwdWxsZWQYCCABKAgSEAoIZGl2ZXJnZWQYCSABKAgSGgoScmVjb25uZWN0X3JlcXVpcmVkGAogASgIEhMKC3N0aWxsX2FoZWFkGAsgASgIEg8KB29mZmxpbmUYDCABKAgSEwoLcHVzaF9mYWlsZWQYDSABKAgSHQoVZGlyZWN0X29mZmVyX2RlZmVycmVkGA4gASgIEjUKDmJpcnRoX291dGNvbWVzGA8gAygLMh0ubm9tb3Mua2VybmVsLnYxLkJpcnRoT3V0Y29tZRIbChNhZG1pdHRlZF9pbnRlbnRfaWRzGBAgAygJEhwKFGNvbnZlcmdlZF9pbnRlbnRfaWRzGBEgAygJEkIKCnB1c2hfZXJyb3IYEiABKAsyKS5ub21vcy5ydW50aW1lLnYyLlJ1bnRpbWVUcmFuc3BvcnRGYWlsdXJlSAKIAQESRwoPZGlzY292ZXJ5X2Vycm9yGBMgASgLMikubm9tb3MucnVudGltZS52Mi5SdW50aW1lVHJhbnNwb3J0RmFpbHVyZUgDiAEBEjMKB3RpbWluZ3MYFCABKAsyIi5ub21vcy5ydW50aW1lLnYyLlN5bmNQaGFzZVRpbWluZ3NCEAoOX3ByZXZpb3VzX2hlYWRCDwoNX2N1cnJlbnRfaGVhZEINCgtfcHVzaF9lcnJvckISChBfZGlzY292ZXJ5X2Vycm9yIl0KF1J1bnRpbWVUcmFuc3BvcnRGYWlsdXJlEhAKCGVuZHBvaW50GAEgASgJEg4KBnN0YXR1cxgCIAEoERIPCgdyZWZ1c2VkGAMgASgIEg8KB21lc3NhZ2UYBCABKAkisQEKEFN5bmNQaGFzZVRpbWluZ3MSEwoLcHVzaF9taWxsaXMYASABKAESFAoMYWRtaXRfbWlsbGlzGAIgASgBEhcKD3ByZWZldGNoX21pbGxpcxgDIAEoARIXCg9jb252ZXJnZV9taWxsaXMYBCABKAESEgoKcHVzaF9ieXRlcxgFIAEoBBIVCg1zZXJ2ZXJfbWlsbGlzGAYgASgBEhUKDW9mZmVyX2luX3B1c2gYByABKAgi3wEKFFN0YXJ0QXV0b1N5bmNSZXF1ZXN0Eg8KB3Nlc3Npb24YASABKAkSHAoPZGVib3VuY2VfbWlsbGlzGAIgASgNSACIAQESHAoPZmFsbGJhY2tfbWlsbGlzGAMgASgNSAGIAQESGgoNc2lnbmFsX21pbGxpcxgEIAEoDUgCiAEBEhYKCXNpZ25hbF9pZBgFIAEoCUgDiAEBQhIKEF9kZWJvdW5jZV9taWxsaXNCEgoQX2ZhbGxiYWNrX21pbGxpc0IQCg5fc2lnbmFsX21pbGxpc0IMCgpfc2lnbmFsX2lkIiIKD0F1dG9TeW5jU3RhcnRlZBIPCgdzZXNzaW9uGAEgASgJIiYKE1N0b3BBdXRvU3luY1JlcXVlc3QSDwoHc2Vzc2lvbhgBIAEoCSIiCg9BdXRvU3luY1N0b3BwZWQSDwoHc2Vzc2lvbhgBIAEoCSKqAQoMV2F0Y2hSZXF1ZXN0Eg8KB3Nlc3Npb24YASABKAkSFwoPc3Vic2NyaXB0aW9uX2lkGAIgASgJEikKBGtpbmQYAyABKA4yGy5ub21vcy5ydW50aW1lLnYyLldhdGNoS2luZBIsCgVxdWVyeRgEIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5RdWVyeVJlcXVlc3QSFwoPaW50ZXJ2YWxfbWlsbGlzGAUgASgNIicKDFdhdGNoU3RhcnRlZBIXCg9zdWJzY3JpcHRpb25faWQYASABKAkiKQoOVW53YXRjaFJlcXVlc3QSFwoPc3Vic2NyaXB0aW9uX2lkGAEgASgJIicKDFdhdGNoU3RvcHBlZBIXCg9zdWJzY3JpcHRpb25faWQYASABKAkidQoUUHJlcGFyZURvbWFpblJlcXVlc3QSDwoHc2Vzc2lvbhgBIAEoCRIOCgZkb21haW4YAiABKAkSFgoOcGFja2FnZV9zaGEyNTYYAyABKAkSFgoJZGlyZWN0aXZlGAQgASgJSACIAQFCDAoKX2RpcmVjdGl2ZSJSCg5Eb21haW5QcmVwYXJlZBIOCgZkb21haW4YASABKAkSFgoOcGFja2FnZV9zaGEyNTYYAiABKAkSGAoQYWxyZWFkeV9yZXNpZGVudBgDIAEoCCL2AQoVTW9kZWxMaWZlY3ljbGVSZXF1ZXN0Eg8KB3Nlc3Npb24YASABKAkSPQoFc3RhZ2UYCiABKAsyLC5ub21vcy5ydW50aW1lLnYyLlN0YWdlR2VuZXJhdGVkTW9kZWxSZXF1ZXN0SAASPQoFYWRvcHQYCyABKAsyLC5ub21vcy5ydW50aW1lLnYyLkFkb3B0R2VuZXJhdGVkTW9kZWxSZXF1ZXN0SAASQQoHcmVzdG9yZRgMIAEoCzIuLm5vbW9zLnJ1bnRpbWUudjIuUmVzdG9yZUdlbmVyYXRlZE1vZGVsUmVxdWVzdEgAQgsKCW9wZXJhdGlvbiKGAQoaU3RhZ2VHZW5lcmF0ZWRNb2RlbFJlcXVlc3QSDgoGZG9tYWluGAEgASgJEhYKDmNhbmRpZGF0ZV9oYXNoGAIgASgJEhAKCGxhd191c2R6GAMgASgMEhsKDnNvdXJjZV9zZXNzaW9uGAQgASgJSACIAQFCEQoPX3NvdXJjZV9zZXNzaW9uInoKGkFkb3B0R2VuZXJhdGVkTW9kZWxSZXF1ZXN0Eg4KBmRvbWFpbhgBIAEoCRIWCg5jYW5kaWRhdGVfaGFzaBgCIAEoCRIeChFhY2NlcHRhbmNlX3JlYXNvbhgDIAEoCUgAiAEBQhQKEl9hY2NlcHRhbmNlX3JlYXNvbiJ6ChxSZXN0b3JlR2VuZXJhdGVkTW9kZWxSZXF1ZXN0Eg4KBmRvbWFpbhgBIAEoCRIUCgxjdXJyZW50X2hhc2gYAiABKAkSHgoRYWNjZXB0YW5jZV9yZWFzb24YAyABKAlIAIgBAUIUChJfYWNjZXB0YW5jZV9yZWFzb24ikwEKD01vZGVsRGlmZmVyZW5jZRIzCgRraW5kGAEgASgOMiUubm9tb3MucnVudGltZS52Mi5Nb2RlbERpZmZlcmVuY2VLaW5kEhEKBGFyZWEYAiABKAlIAIgBARITCgZhY3Rpb24YAyABKAlIAYgBARIPCgdzdW1tYXJ5GAQgASgJQgcKBV9hcmVhQgkKB19hY3Rpb24ipQEKC01vZGVsUmV2aWV3EhcKD2NoZWNrZWRfYWN0aW9ucxgBIAEoBBIZChFjYW5kaWRhdGVfYWN0aW9ucxgCIAEoBBIZCgxzYW1lX291dGNvbWUYAyABKAhIAIgBARI2CgtkaWZmZXJlbmNlcxgEIAMoCzIhLm5vbW9zLnJ1bnRpbWUudjIuTW9kZWxEaWZmZXJlbmNlQg8KDV9zYW1lX291dGNvbWUihQIKFk1vZGVsTGlmZWN5Y2xlUmVzcG9uc2USEAoIYWNjZXB0ZWQYASABKAgSNAoFc3RhZ2UYAiABKA4yJS5ub21vcy5ydW50aW1lLnYyLk1vZGVsTGlmZWN5Y2xlU3RhZ2USFAoHbWVzc2FnZRgDIAEoCUgAiAEBEhEKBGhlYWQYBCABKAlIAYgBARIXCgpyZWNlaXB0X2lkGAUgASgJSAKIAQESMgoGcmV2aWV3GAYgASgLMh0ubm9tb3MucnVudGltZS52Mi5Nb2RlbFJldmlld0gDiAEBQgoKCF9tZXNzYWdlQgcKBV9oZWFkQg0KC19yZWNlaXB0X2lkQgkKB19yZXZpZXciZwoaUmVzb2x2ZUN1c3RvZHlCcmVha1JlcXVlc3QSDwoHc2Vzc2lvbhgBIAEoCRI4CghkZWNpc2lvbhgCIAEoDjImLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUJyZWFrRGVjaXNpb24iYQoUQ3VzdG9keUJyZWFrUmVzb2x2ZWQSDwoHc2Vzc2lvbhgBIAEoCRI4CghkZWNpc2lvbhgCIAEoDjImLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUJyZWFrRGVjaXNpb24iEwoRQ2xvc2VSZWFsbVJlcXVlc3QiDQoLUmVhbG1DbG9zZWQi5QEKEURlYWRMZXR0ZXJSZXF1ZXN0Eg8KB3Nlc3Npb24YASABKAkSOAoEbGlzdBgKIAEoCzIoLm5vbW9zLnJ1bnRpbWUudjIuTGlzdERlYWRMZXR0ZXJzUmVxdWVzdEgAEjkKBXJldHJ5GAsgASgLMigubm9tb3MucnVudGltZS52Mi5SZXRyeURlYWRMZXR0ZXJSZXF1ZXN0SAASPQoHZGlzY2FyZBgMIAEoCzIqLm5vbW9zLnJ1bnRpbWUudjIuRGlzY2FyZERlYWRMZXR0ZXJSZXF1ZXN0SABCCwoJb3BlcmF0aW9uIhgKFkxpc3REZWFkTGV0dGVyc1JlcXVlc3QiKwoWUmV0cnlEZWFkTGV0dGVyUmVxdWVzdBIRCglpbnRlbnRfaWQYASABKAkiLQoYRGlzY2FyZERlYWRMZXR0ZXJSZXF1ZXN0EhEKCWludGVudF9pZBgBIAEoCSK9AQoSRGVhZExldHRlclJlc3BvbnNlEjAKBGxpc3QYCiABKAsyIC5ub21vcy5ydW50aW1lLnYyLkRlYWRMZXR0ZXJMaXN0SAASMgoFcmV0cnkYCyABKAsyIS5ub21vcy5ydW50aW1lLnYyLkRlYWRMZXR0ZXJSZXRyeUgAEjYKB2Rpc2NhcmQYDCABKAsyIy5ub21vcy5ydW50aW1lLnYyLkRlYWRMZXR0ZXJEaXNjYXJkSABCCQoHb3V0Y29tZSJECg5EZWFkTGV0dGVyTGlzdBIyCgdlbnRyaWVzGAEgAygLMiEubm9tb3MucnVudGltZS52Mi5EZWFkTGV0dGVyRW50cnkiuQEKD0RlYWRMZXR0ZXJFbnRyeRIPCgJpZBgBIAEoCUgAiAEBEhIKCmNvbW1pdF9vaWQYAiABKAkSDgoGc291cmNlGAMgASgJEg8KB21lc3NhZ2UYBCABKAkSEwoGZG9tYWluGAUgASgJSAGIAQESFgoJZGlyZWN0aXZlGAYgASgJSAKIAQESEwoLcmVjb3JkZWRfYXQYByABKAlCBQoDX2lkQgkKB19kb21haW5CDAoKX2RpcmVjdGl2ZSJ5Cg9EZWFkTGV0dGVyUmV0cnkSDwoHcmV0cmllZBgBIAEoCBIRCgRoZWFkGAIgASgJSACIAQESFwoPYWxyZWFkeV9vbl9tYWluGAMgASgIEhQKB21lc3NhZ2UYBCABKAlIAYgBAUIHCgVfaGVhZEIKCghfbWVzc2FnZSIkChFEZWFkTGV0dGVyRGlzY2FyZBIPCgdyZW1vdmVkGAEgASgEIs0FCgxSdW50aW1lRXZlbnQSEAoIc2VxdWVuY2UYASABKAQSFAoHc2Vzc2lvbhgCIAEoCUgBiAEBEi8KBXJlYWR5GAogASgLMh4ubm9tb3MucnVudGltZS52Mi5SdW50aW1lUmVhZHlIABI3Cg13YXRjaF9jaGFuZ2VkGAsgASgLMh4ubm9tb3MucnVudGltZS52Mi5XYXRjaENoYW5nZWRIABI5Cg5zeW5jX2NvbXBsZXRlZBgMIAEoCzIfLm5vbW9zLnJ1bnRpbWUudjIuU3luY0NvbXBsZXRlZEgAEjUKDGxpbmtfY2hhbmdlZBgNIAEoCzIdLm5vbW9zLnJ1bnRpbWUudjIuTGlua0NoYW5nZWRIABI5Cg5zaWduYWxfY2hhbmdlZBgOIAEoCzIfLm5vbW9zLnJ1bnRpbWUudjIuU2lnbmFsQ2hhbmdlZEgAEjsKD2N1c3RvZHlfY2hhbmdlZBgPIAEoCzIgLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUNoYW5nZWRIABJCChNsb2NhbF93b3JrX3JlamVjdGVkGBAgASgLMiMubm9tb3MucnVudGltZS52Mi5Mb2NhbFdvcmtSZWplY3RlZEgAEjMKC2xhd19jaGFuZ2VkGBEgASgLMhwubm9tb3MucnVudGltZS52Mi5MYXdDaGFuZ2VkSAASQwoPa2VybmVsX3Byb2dyZXNzGBIgASgLMigubm9tb3MucnVudGltZS52Mi5LZXJuZWxQcm9ncmVzc09ic2VydmVkSAASLQoEc3BhbhgTIAEoCzIdLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZVNwYW5IABI/ChF0cmFuc2Zlcl9wcm9ncmVzcxgUIAEoCzIiLm5vbW9zLnJ1bnRpbWUudjIuVHJhbnNmZXJQcm9ncmVzc0gAQgcKBWV2ZW50QgoKCF9zZXNzaW9uIj4KDFJ1bnRpbWVSZWFkeRIXCg9ydW50aW1lX3ZlcnNpb24YASABKAkSFQoNa2VybmVsX3NoYTI1NhgCIAEoDCKAAQoMV2F0Y2hDaGFuZ2VkEhcKD3N1YnNjcmlwdGlvbl9pZBgBIAEoCRITCgtyZXN1bHRfdXNkYRgCIAEoDBI2CgdmYWlsdXJlGAMgASgLMiAubm9tb3MucnVudGltZS52Mi5SdW50aW1lRmFpbHVyZUgAiAEBQgoKCF9mYWlsdXJlIpwBCg1TeW5jQ29tcGxldGVkEg4KBnJlYXNvbhgBIAEoCRI3CgZyZXN1bHQYAiABKAsyJy5ub21vcy5ydW50aW1lLnYyLlN5bmNXb3Jrc3BhY2VSZXNwb25zZRI2CgdmYWlsdXJlGAMgASgLMiAubm9tb3MucnVudGltZS52Mi5SdW50aW1lRmFpbHVyZUgAiAEBQgoKCF9mYWlsdXJlIjsKC0xpbmtDaGFuZ2VkEiwKBnN0YXR1cxgBIAEoDjIcLm5vbW9zLnJ1bnRpbWUudjIuTGlua1N0YXR1cyI4Cg1TaWduYWxDaGFuZ2VkEg4KBmRvbWFpbhgBIAEoCRIXCg9wcm9qZWN0aW9uX3VzZGEYAiABKAwi9AEKDkN1c3RvZHlDaGFuZ2VkEjEKBGtpbmQYASABKA4yIy5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlDaGFuZ2VLaW5kEjUKDWN1c3RvZHlfYnJlYWsYAiABKAsyHi5ub21vcy5ydW50aW1lLnYyLkN1c3RvZHlCcmVhaxIWCglvcGVyYXRpb24YAyABKAlIAIgBARIVCghyZWNsb25lZBgEIAEoCEgBiAEBEhsKDnBhcmtlZF9pbnRlbnRzGAUgASgESAKIAQFCDAoKX29wZXJhdGlvbkILCglfcmVjbG9uZWRCEQoPX3BhcmtlZF9pbnRlbnRzIuEBChFMb2NhbFdvcmtSZWplY3RlZBIRCgl3b3Jrc3BhY2UYASABKAkSNgoHcmVmdXNlZBgCIAMoCzIlLm5vbW9zLnJ1bnRpbWUudjIuUmVqZWN0ZWRMb2NhbEludGVudBIOCgZwYXJrZWQYAyABKAgSFQoIcmVzZXRfdG8YBCABKAlIAIgBARIRCglyZXRyeWFibGUYBSABKAgSOgoGc291cmNlGAYgASgOMioubm9tb3MucnVudGltZS52Mi5Mb2NhbFdvcmtSZWplY3Rpb25Tb3VyY2VCCwoJX3Jlc2V0X3RvImMKE0N1c3RvZHlTdXBlcnNlc3Npb24SGgoNc3VwZXJzZWRlZF9hdBgBIAEoCUgAiAEBEhMKBnJlYXNvbhgCIAEoCUgBiAEBQhAKDl9zdXBlcnNlZGVkX2F0QgkKB19yZWFzb24iuAIKDEN1c3RvZHlCcmVhaxIwCgRraW5kGAEgASgOMiIubm9tb3MucnVudGltZS52Mi5DdXN0b2R5QnJlYWtLaW5kEhUKDWxvY2FsX2dlbmVzaXMYAiABKAkSFgoOcmVtb3RlX2dlbmVzaXMYAyABKAkSGgoScmVtb3RlX2luY2FybmF0aW9uGAQgASgJEkAKDHN1cGVyc2Vzc2lvbhgFIAEoCzIlLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keVN1cGVyc2Vzc2lvbkgAiAEBEhoKEmxvY2FsX29ubHlfaW50ZW50cxgGIAEoBBIiChVsYXN0X3N5bmNlZF9hdF9taWxsaXMYByABKARIAYgBAUIPCg1fc3VwZXJzZXNzaW9uQhgKFl9sYXN0X3N5bmNlZF9hdF9taWxsaXMizQEKE1JlamVjdGVkTG9jYWxJbnRlbnQSFgoJaW50ZW50X2lkGAEgASgJSACIAQESFwoKY29tbWl0X29pZBgCIAEoCUgBiAEBEhMKBmRvbWFpbhgDIAEoCUgCiAEBEhYKCWRpcmVjdGl2ZRgEIAEoCUgDiAEBEg8KB21lc3NhZ2UYBSABKAkSEQoJcmV0cnlhYmxlGAYgASgIQgwKCl9pbnRlbnRfaWRCDQoLX2NvbW1pdF9vaWRCCQoHX2RvbWFpbkIMCgpfZGlyZWN0aXZlIlAKCkxhd0NoYW5nZWQSDgoGZG9tYWluGAEgASgJEhYKDnBhY2thZ2Vfc2hhMjU2GAIgASgJEhoKEmNvbXBhdGliaWxpdHlfdXNkYRgDIAEoDCLdAQoLUnVudGltZVNwYW4SEAoIdHJhY2VfaWQYASABKAwSDwoHc3Bhbl9pZBgCIAEoDBIbCg5wYXJlbnRfc3Bhbl9pZBgDIAEoDEgAiAEBEgwKBG5hbWUYBCABKAkSGgoSc3RhcnRlZF91bml4X25hbm9zGAUgASgEEhYKDmR1cmF0aW9uX25hbm9zGAYgASgEEjkKCmF0dHJpYnV0ZXMYByADKAsyJS5ub21vcy5ydW50aW1lLnYyLkRpYWdub3N0aWNBdHRyaWJ1dGVCEQoPX3BhcmVudF9zcGFuX2lkIuoBChZLZXJuZWxQcm9ncmVzc09ic2VydmVkEjkKCHNuYXBzaG90GAEgASgLMicubm9tb3Mua2VybmVsLnYxLktlcm5lbFByb2dyZXNzU25hcHNob3QSJAocaG9zdF9vYnNlcnZlZF9lbGFwc2VkX21pY3JvcxgCIAEoBBIqCiJob3N0X29ic2VydmVkX3BoYXNlX2VsYXBzZWRfbWljcm9zGAMgASgEEh4KFnByb2Nlc3NfcmVzaWRlbnRfYnl0ZXMYBCABKAQSIwobcHJvY2Vzc19wZWFrX3Jlc2lkZW50X2J5dGVzGAUgASgEIoIBChBUcmFuc2ZlclByb2dyZXNzEhYKDnJlY2VpdmVkX2J5dGVzGAEgASgEEhgKC3RvdGFsX2J5dGVzGAIgASgESACIAQESLAoEa2luZBgDIAEoDjIeLm5vbW9zLnJ1bnRpbWUudjIuVHJhbnNmZXJLaW5kQg4KDF90b3RhbF9ieXRlcyqZAQoSQ3VzdG9keUJyZWFrUG9saWN5EiQKIENVU1RPRFlfQlJFQUtfUE9MSUNZX1VOU1BFQ0lGSUVEEAASHAoYQ1VTVE9EWV9CUkVBS19QT0xJQ1lfQVNLEAESHgoaQ1VTVE9EWV9CUkVBS19QT0xJQ1lfQURPUFQQAhIfChtDVVNUT0RZX0JSRUFLX1BPTElDWV9SRUpFQ1QQAyqgAQoSV29ya3NwYWNlUmVzaWRlbmN5EiMKH1dPUktTUEFDRV9SRVNJREVOQ1lfVU5TUEVDSUZJRUQQABIfChtXT1JLU1BBQ0VfUkVTSURFTkNZX01PVU5URUQQARIeChpXT1JLU1BBQ0VfUkVTSURFTkNZX1BBUktFRBACEiQKIFdPUktTUEFDRV9SRVNJREVOQ1lfQ1VTVE9EWV9PTkxZEAMqjQEKFFdvcmtzcGFjZVN5bmNQb3N0dXJlEiYKIldPUktTUEFDRV9TWU5DX1BPU1RVUkVfVU5TUEVDSUZJRUQQABIlCiFXT1JLU1BBQ0VfU1lOQ19QT1NUVVJFX0xPQ0FMX09OTFkQARImCiJXT1JLU1BBQ0VfU1lOQ19QT1NUVVJFX0NMT1VEX0JPVU5EEAIqqAEKCVdhdGNoS2luZBIaChZXQVRDSF9LSU5EX1VOU1BFQ0lGSUVEEAASFAoQV0FUQ0hfS0lORF9RVUVSWRABEhQKEFdBVENIX0tJTkRfQllfSUQQAhIWChJXQVRDSF9LSU5EX1NQQVRJQUwQAxIXChNXQVRDSF9LSU5EX0FDVElWSVRZEAQiBAgFEAUqHFdBVENIX0tJTkRfUEVORElOR19DT05GTElDVFMqpAMKE01vZGVsTGlmZWN5Y2xlU3RhZ2USJQohTU9ERUxfTElGRUNZQ0xFX1NUQUdFX1VOU1BFQ0lGSUVEEAASKwonTU9ERUxfTElGRUNZQ0xFX1NUQUdFX0lERU5USVRZX1JFUVVJUkVEEAESKgomTU9ERUxfTElGRUNZQ0xFX1NUQUdFX1NUQUdJTkdfUkVRVUlSRUQQAhIjCh9NT0RFTF9MSUZFQ1lDTEVfU1RBR0VfUFJFRkxJR0hUEAMSLQopTU9ERUxfTElGRUNZQ0xFX1NUQUdFX0FDQ0VQVEFOQ0VfUkVRVUlSRUQQBBIjCh9NT0RFTF9MSUZFQ1lDTEVfU1RBR0VfQURNSVNTSU9OEAUSIQodTU9ERUxfTElGRUNZQ0xFX1NUQUdFX1BFTkRJTkcQBhIiCh5NT0RFTF9MSUZFQ1lDTEVfU1RBR0VfUFJPTU9URUQQBxIiCh5NT0RFTF9MSUZFQ1lDTEVfU1RBR0VfUkVTVE9SRUQQCBIpCiVNT0RFTF9MSUZFQ1lDTEVfU1RBR0VfQUxSRUFEWV9DVVJSRU5UEAkqpAEKE01vZGVsRGlmZmVyZW5jZUtpbmQSJQohTU9ERUxfRElGRkVSRU5DRV9LSU5EX1VOU1BFQ0lGSUVEEAASHwobTU9ERUxfRElGRkVSRU5DRV9LSU5EX1JVTEVTEAESIQodTU9ERUxfRElGRkVSRU5DRV9LSU5EX09VVENPTUUQAhIiCh5NT0RFTF9ESUZGRVJFTkNFX0tJTkRfRVZJREVOQ0UQAyqDAQoUQ3VzdG9keUJyZWFrRGVjaXNpb24SJgoiQ1VTVE9EWV9CUkVBS19ERUNJU0lPTl9VTlNQRUNJRklFRBAAEiAKHENVU1RPRFlfQlJFQUtfREVDSVNJT05fQURPUFQQARIhCh1DVVNUT0RZX0JSRUFLX0RFQ0lTSU9OX1JFSkVDVBACKlcKCkxpbmtTdGF0dXMSGwoXTElOS19TVEFUVVNfVU5TUEVDSUZJRUQQABIUChBMSU5LX1NUQVRVU19PUEVOEAESFgoSTElOS19TVEFUVVNfQ0xPU0VEEAIq4gEKEUN1c3RvZHlDaGFuZ2VLaW5kEiMKH0NVU1RPRFlfQ0hBTkdFX0tJTkRfVU5TUEVDSUZJRUQQABIgChxDVVNUT0RZX0NIQU5HRV9LSU5EX0RFVEVDVEVEEAESIAocQ1VTVE9EWV9DSEFOR0VfS0lORF9SRUpFQ1RFRBACEiAKHENVU1RPRFlfQ0hBTkdFX0tJTkRfQURPUFRJTkcQAxIlCiFDVVNUT0RZX0NIQU5HRV9LSU5EX0FET1BUX1JFRlVTRUQQBBIbChdDVVNUT0RZX0NIQU5HRV9LSU5EX0FTSxAFKnoKEEN1c3RvZHlCcmVha0tpbmQSIgoeQ1VTVE9EWV9CUkVBS19LSU5EX1VOU1BFQ0lGSUVEEAASIQodQ1VTVE9EWV9CUkVBS19LSU5EX1NVUEVSU0VERUQQARIfChtDVVNUT0RZX0JSRUFLX0tJTkRfRElWRVJHRUQQAiqYAQoYTG9jYWxXb3JrUmVqZWN0aW9uU291cmNlEisKJ0xPQ0FMX1dPUktfUkVKRUNUSU9OX1NPVVJDRV9VTlNQRUNJRklFRBAAEikKJUxPQ0FMX1dPUktfUkVKRUNUSU9OX1NPVVJDRV9BRE1JU1NJT04QARIkCiBMT0NBTF9XT1JLX1JFSkVDVElPTl9TT1VSQ0VfU1lOQxACKnYKDFRyYW5zZmVyS2luZBIdChlUUkFOU0ZFUl9LSU5EX1VOU1BFQ0lGSUVEEAASFwoTVFJBTlNGRVJfS0lORF9ERUxUQRABEhYKElRSQU5TRkVSX0tJTkRfRlVMTBACEhYKElRSQU5TRkVSX0tJTkRfUFVTSBADMmQKE05vbW9zUnVudGltZVNlcnZpY2USTQoGSW52b2tlEiAubm9tb3MucnVudGltZS52Mi5SdW50aW1lUmVxdWVzdBohLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZVJlc3BvbnNlYgZwcm90bzM", [file_nomos_kernel_v1_kernel, file_nomos_kernel_v1_progress]);
|
|
7721
|
+
var CustodyOfferBatchRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_runtime, 14);
|
|
7722
|
+
var CustodyIntentOfferSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_runtime, 15);
|
|
7723
|
+
var CustodyInlineOffersSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_runtime, 16);
|
|
7724
|
+
var CustodySessionCandidateSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_runtime, 17);
|
|
7725
|
+
var CustodyOfferBatchResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_runtime, 18);
|
|
7714
7726
|
|
|
7715
7727
|
// ../cloud/web-client/src/custody_sync.ts
|
|
7716
7728
|
function presentCanonicalCustodyConvergence(convergence, context) {
|
|
@@ -7757,7 +7769,7 @@ function presentCanonicalCustodyConvergence(convergence, context) {
|
|
|
7757
7769
|
endpoint: `/v2/workspaces/${context.workspace}`,
|
|
7758
7770
|
status: 0,
|
|
7759
7771
|
refused: false,
|
|
7760
|
-
error: String(convergence.error instanceof Error ? convergence.error.message : convergence.error).slice(0,
|
|
7772
|
+
error: String(convergence.error instanceof Error ? convergence.error.message : convergence.error).slice(0, 1200)
|
|
7761
7773
|
};
|
|
7762
7774
|
return {
|
|
7763
7775
|
result: {
|
|
@@ -7835,7 +7847,10 @@ async function convergeCanonicalCustody(options) {
|
|
|
7835
7847
|
return { kind: "custodyBreak", custodyBreak: converged.custodyBreak };
|
|
7836
7848
|
}
|
|
7837
7849
|
pulled = converged.upToDate !== true;
|
|
7838
|
-
} catch {
|
|
7850
|
+
} catch (error) {
|
|
7851
|
+
console.error(
|
|
7852
|
+
`[nomos-sync-convergence] remote=${remoteHead} base=${syncedBase ?? "none"}: ` + (error instanceof Error ? error.message : String(error))
|
|
7853
|
+
);
|
|
7839
7854
|
diverged = true;
|
|
7840
7855
|
}
|
|
7841
7856
|
}
|
|
@@ -8283,6 +8298,16 @@ function prepareManagedPromotion(report, candidateHash, domain, opts = {}) {
|
|
|
8283
8298
|
error: `the package-wide report does not cover the generated business area '${domain}'`
|
|
8284
8299
|
};
|
|
8285
8300
|
}
|
|
8301
|
+
const dispositions = report.dispositions;
|
|
8302
|
+
const changesStableIdentity = dispositions !== void 0 && (dispositions.retired.length > 0 || Object.keys(dispositions.retyped).length > 0 || Object.keys(dispositions.rebinds).length > 0);
|
|
8303
|
+
if (changesStableIdentity && !acceptanceReason) {
|
|
8304
|
+
return {
|
|
8305
|
+
ok: false,
|
|
8306
|
+
stage: "acceptance",
|
|
8307
|
+
report,
|
|
8308
|
+
error: "the current-frontier transition changes stable business identities and needs an attributed acceptance reason"
|
|
8309
|
+
};
|
|
8310
|
+
}
|
|
8286
8311
|
const preflight = {
|
|
8287
8312
|
candidateHash,
|
|
8288
8313
|
// A package may be reached through any one of its generated domain clients. The
|
|
@@ -13088,8 +13113,24 @@ function firstDeviceDelegationPayload(route, certificate, typedPayload) {
|
|
|
13088
13113
|
if (declared.has("delegationCertificate")) {
|
|
13089
13114
|
return { delegationCertificate: typedPayload };
|
|
13090
13115
|
}
|
|
13091
|
-
throw new
|
|
13092
|
-
`Nomos application route '${route.domain}${route.path}' does not declare the typed 'delegationCertificate' contract
|
|
13116
|
+
throw new NomosClientError(
|
|
13117
|
+
`Nomos application route '${route.domain}${route.path}' does not declare the typed 'delegationCertificate' contract`,
|
|
13118
|
+
{
|
|
13119
|
+
code: "nomos.application.contract_missing",
|
|
13120
|
+
operation: "enrollFirstDevice",
|
|
13121
|
+
recommendedAction: NomosRecommendedAction.redeployLaw,
|
|
13122
|
+
info: {
|
|
13123
|
+
code: "nomos.application.contract_missing",
|
|
13124
|
+
message: `Nomos application route '${route.domain}${route.path}' does not declare the typed 'delegationCertificate' contract`,
|
|
13125
|
+
component: "nomos.application",
|
|
13126
|
+
domain: route.domain,
|
|
13127
|
+
operation: "enrollFirstDevice",
|
|
13128
|
+
attributes: {
|
|
13129
|
+
"nomos.application.missing_contract": "delegationCertificate",
|
|
13130
|
+
"nomos.recovery.action": "repeat-parent-authorized-birth"
|
|
13131
|
+
}
|
|
13132
|
+
}
|
|
13133
|
+
}
|
|
13093
13134
|
);
|
|
13094
13135
|
}
|
|
13095
13136
|
var GIT_OBJECT_ID = /^[0-9a-f]{40}$/;
|
|
@@ -13107,7 +13148,7 @@ function jwtClaimOf(token, claim) {
|
|
|
13107
13148
|
}
|
|
13108
13149
|
}
|
|
13109
13150
|
function createGovernanceOffers(ctx) {
|
|
13110
|
-
const { offerDirective, offerCall, offerModelLifecycle, serialize, queryById, queryRows, attestationSignKernel, _fetch, base, workspace, deviceSecret, authHeaders, receivingGroupNameOf: receivingGroupNameOf2, sha256hexBytes: sha256hexBytes2, bytesUnb64: bytesUnb642, birthCertificateLawPayload, actorForShareQuote: actorForShareQuote2, installedInterfaceInner, mintKeylessDelegation: mintKeylessDelegation2, signWorkspaceOffer, resolveFrameworkRoute } = ctx;
|
|
13151
|
+
const { offerDirective, offerCall, offerModelLifecycle, serialize, queryById, queryRows, attestationSignKernel, _fetch, base, workspace, deviceSecret, authHeaders, connectionAuthToken, connectionFrameworkCalls, receivingGroupNameOf: receivingGroupNameOf2, sha256hexBytes: sha256hexBytes2, bytesUnb64: bytesUnb642, birthCertificateLawPayload, actorForShareQuote: actorForShareQuote2, installedInterfaceInner, mintKeylessDelegation: mintKeylessDelegation2, signWorkspaceOffer, resolveFrameworkRoute } = ctx;
|
|
13111
13152
|
const g = {
|
|
13112
13153
|
/**
|
|
13113
13154
|
* AUTHOR a SIGNED governance/framework intent locally and return the sealed offer bytes (base64) ready to
|
|
@@ -13212,6 +13253,54 @@ function createGovernanceOffers(ctx) {
|
|
|
13212
13253
|
});
|
|
13213
13254
|
return g.postGovernanceOffer({ directiveId: call.directive, intentBytes: sealed.intentBytes, ws: parent, authToken, domain: call.domain });
|
|
13214
13255
|
},
|
|
13256
|
+
/**
|
|
13257
|
+
* Offer one exact compiler-generated call to another workspace without
|
|
13258
|
+
* mounting or replaying that target locally. The source holon's kernel
|
|
13259
|
+
* signs only the target-kernel-prepared USDA; the host receives neither a
|
|
13260
|
+
* tenant object nor authority to invent an operation.
|
|
13261
|
+
*/
|
|
13262
|
+
offerRemoteGeneratedCall: async ({
|
|
13263
|
+
call,
|
|
13264
|
+
target,
|
|
13265
|
+
actor,
|
|
13266
|
+
authorSecret,
|
|
13267
|
+
authToken
|
|
13268
|
+
}) => {
|
|
13269
|
+
const signingSecret = authorSecret || deviceSecret;
|
|
13270
|
+
if (!target) throw new TypeError("a remote generated offer requires its target workspace");
|
|
13271
|
+
if (!actor) throw new TypeError("a remote generated offer requires its attributable actor");
|
|
13272
|
+
if (!signingSecret) throw new TypeError("a remote generated offer requires an enrolled device key");
|
|
13273
|
+
const sealed = await signWorkspaceOffer({
|
|
13274
|
+
target,
|
|
13275
|
+
call,
|
|
13276
|
+
actor,
|
|
13277
|
+
authorSecret: signingSecret,
|
|
13278
|
+
authToken
|
|
13279
|
+
});
|
|
13280
|
+
const verdict = await g.postGovernanceOffer({
|
|
13281
|
+
directiveId: call.directive,
|
|
13282
|
+
intentBytes: sealed.intentBytes,
|
|
13283
|
+
ws: target,
|
|
13284
|
+
authToken,
|
|
13285
|
+
domain: call.domain
|
|
13286
|
+
});
|
|
13287
|
+
if (!verdict.ok || verdict.body && typeof verdict.body === "object" && (verdict.body.ok === false || verdict.body.refused)) {
|
|
13288
|
+
const detail = typeof verdict.body === "string" ? verdict.body : JSON.stringify(verdict.body ?? "remote offer refused");
|
|
13289
|
+
throw new NomosClientError(
|
|
13290
|
+
`Remote generated call '${call.domain}/${call.directive}' was refused by '${target}': ${detail.slice(0, 500)}`,
|
|
13291
|
+
{
|
|
13292
|
+
code: "nomos.offer.remote_refused",
|
|
13293
|
+
workspace: target,
|
|
13294
|
+
operation: call.directive,
|
|
13295
|
+
recommendedAction: NomosRecommendedAction.retry,
|
|
13296
|
+
info: verdict.errorInfo
|
|
13297
|
+
}
|
|
13298
|
+
);
|
|
13299
|
+
}
|
|
13300
|
+
const body = verdict.body && typeof verdict.body === "object" ? verdict.body : void 0;
|
|
13301
|
+
const head = verdict.head ?? (typeof body?.head === "string" ? body.head : "");
|
|
13302
|
+
return { workspace: target, head };
|
|
13303
|
+
},
|
|
13215
13304
|
/**
|
|
13216
13305
|
* Derive the device key's base64 PUBLIC half from its base64 SECRET seed, IN the local wasm (the
|
|
13217
13306
|
* kernel `attestation_sign` op returns the public half; the secret never leaves this process).
|
|
@@ -13398,7 +13487,10 @@ function createGovernanceOffers(ctx) {
|
|
|
13398
13487
|
*/
|
|
13399
13488
|
ensureParentSignerEnrollment: async (args = {}) => {
|
|
13400
13489
|
const { parent, device, domain, grantedAt, authToken, idToken, signIn, verifiedVia, validFromEpoch = 0, frameworkCalls } = args;
|
|
13401
|
-
const
|
|
13490
|
+
const effectiveAuthToken = authToken || connectionAuthToken();
|
|
13491
|
+
const effectiveIdToken = idToken || effectiveAuthToken;
|
|
13492
|
+
const effectiveFrameworkCalls = frameworkCalls ?? connectionFrameworkCalls;
|
|
13493
|
+
const keyless = !!(effectiveIdToken || typeof signIn === "function");
|
|
13402
13494
|
const directiveId = args.directiveId || (keyless ? "enrollFirstDevice" : "enrollSigner");
|
|
13403
13495
|
const principal = canonicalPrincipal(args.principal);
|
|
13404
13496
|
let publicKey = device && device.public || args.publicKey;
|
|
@@ -13408,13 +13500,13 @@ function createGovernanceOffers(ctx) {
|
|
|
13408
13500
|
if (!publicKey && authorSecret) publicKey = await g.devicePublicOf(authorSecret);
|
|
13409
13501
|
if (!publicKey) throw new Error("ensureParentSignerEnrollment requires the device `publicKey` (pass `device`/`publicKey`, or a secret it can be derived from)");
|
|
13410
13502
|
const keyHash = await sha256hexBytes2(bytesUnb642(publicKey));
|
|
13411
|
-
const posture = await g.parentSignerEnrollment({ parent, principal, keyHash, authToken });
|
|
13503
|
+
const posture = await g.parentSignerEnrollment({ parent, principal, keyHash, authToken: effectiveAuthToken });
|
|
13412
13504
|
if (posture.enrolled) return { parent, principal, keyHash, enrolled: true, repaired: false, checkedAt: posture.checkedAt };
|
|
13413
13505
|
if (posture.revoked) {
|
|
13414
13506
|
throw new Error(`ensureParentSignerEnrollment: key ${keyHash.slice(0, 16)}\u2026 was REVOKED on ${parent} (${signerObjectOf(principal)}#signer is remove-wins) \u2014 mint a new device key and enroll it; a revoked key cannot be lawfully re-enrolled [nomos.authz.signer_revoked]`);
|
|
13415
13507
|
}
|
|
13416
13508
|
if (!authorSecret) throw new Error("ensureParentSignerEnrollment: the signer tuple is absent on the parent and no `authorSecret`/`device.secret` was supplied to lawfully re-enroll it");
|
|
13417
|
-
const token = keyless ? typeof signIn === "function" ? await signIn(keyHash) :
|
|
13509
|
+
const token = keyless ? typeof signIn === "function" ? await signIn(keyHash) : effectiveIdToken : null;
|
|
13418
13510
|
let resolved = domain ? { domain, directiveId } : null;
|
|
13419
13511
|
let enrollmentRoute;
|
|
13420
13512
|
if (!resolved && parent === workspace && typeof installedInterfaceInner === "function") {
|
|
@@ -13439,7 +13531,7 @@ function createGovernanceOffers(ctx) {
|
|
|
13439
13531
|
}
|
|
13440
13532
|
resolved = { domain: enrollmentRoute.domain, directiveId };
|
|
13441
13533
|
}
|
|
13442
|
-
if (!resolved) resolved = await g.discoverDirectiveDomain({ ws: parent, directiveId, authToken });
|
|
13534
|
+
if (!resolved) resolved = await g.discoverDirectiveDomain({ ws: parent, directiveId, authToken: effectiveAuthToken });
|
|
13443
13535
|
let delegationPayload;
|
|
13444
13536
|
if (keyless) {
|
|
13445
13537
|
if (typeof mintKeylessDelegation2 !== "function") throw new Error("ensureParentSignerEnrollment: the keyless lane needs a signing holon (mintKeylessDelegation) to build the delegation cert \u2014 open the holon with a device key");
|
|
@@ -13461,12 +13553,29 @@ function createGovernanceOffers(ctx) {
|
|
|
13461
13553
|
}
|
|
13462
13554
|
const issuerClaim = verifiedVia || (token ? jwtClaimOf(token, "iss") : void 0);
|
|
13463
13555
|
const payload = keyless ? { keyHash, verifiedVia: issuerClaim, validFromEpoch, grantedAt: (/* @__PURE__ */ new Date()).toISOString(), idpToken: token, ...delegationPayload ?? {} } : { keyHash, grantedBy: principal, grantedAt: typeof grantedAt === "number" ? grantedAt : Date.now() };
|
|
13464
|
-
if (
|
|
13465
|
-
|
|
13556
|
+
if (effectiveFrameworkCalls === void 0) {
|
|
13557
|
+
const message = "The installed client cannot author the typed enrollFirstDevice call required to seat this device";
|
|
13558
|
+
throw new NomosClientError(message, {
|
|
13559
|
+
code: "nomos.application.contract_missing",
|
|
13560
|
+
workspace: parent,
|
|
13561
|
+
operation: "enrollFirstDevice",
|
|
13562
|
+
recommendedAction: NomosRecommendedAction.redeployLaw,
|
|
13563
|
+
info: {
|
|
13564
|
+
code: "nomos.application.contract_missing",
|
|
13565
|
+
message,
|
|
13566
|
+
component: "nomos.application",
|
|
13567
|
+
workspace: parent,
|
|
13568
|
+
operation: "enrollFirstDevice",
|
|
13569
|
+
attributes: {
|
|
13570
|
+
"nomos.application.missing_contract": "generatedFrameworkCalls.identity.enrollFirstDevice",
|
|
13571
|
+
"nomos.recovery.action": "request-parent-authorized-device-recovery"
|
|
13572
|
+
}
|
|
13573
|
+
}
|
|
13574
|
+
});
|
|
13466
13575
|
}
|
|
13467
13576
|
const call = keyless ? (() => {
|
|
13468
13577
|
if (typeof issuerClaim !== "string" || !issuerClaim || !token) throw new Error("verified first-device enrollment needs its typed issuer and identity proof");
|
|
13469
|
-
return
|
|
13578
|
+
return effectiveFrameworkCalls.identity.enrollFirstDevice({
|
|
13470
13579
|
domain: resolved.domain,
|
|
13471
13580
|
workspace: parent,
|
|
13472
13581
|
keyHash,
|
|
@@ -13476,7 +13585,7 @@ function createGovernanceOffers(ctx) {
|
|
|
13476
13585
|
idpToken: token,
|
|
13477
13586
|
...delegationPayload ?? {}
|
|
13478
13587
|
});
|
|
13479
|
-
})() :
|
|
13588
|
+
})() : effectiveFrameworkCalls.identity.enrollSigner({
|
|
13480
13589
|
domain: resolved.domain,
|
|
13481
13590
|
workspace: parent,
|
|
13482
13591
|
keyHash,
|
|
@@ -13488,7 +13597,7 @@ function createGovernanceOffers(ctx) {
|
|
|
13488
13597
|
const res = await offerCall(call, { actor: principal, signWith: authorSecret });
|
|
13489
13598
|
verdict = { ok: true, status: 200, body: res };
|
|
13490
13599
|
} else {
|
|
13491
|
-
const bearer =
|
|
13600
|
+
const bearer = effectiveAuthToken || token;
|
|
13492
13601
|
const sealed = await signWorkspaceOffer({
|
|
13493
13602
|
target: parent,
|
|
13494
13603
|
call,
|
|
@@ -13873,13 +13982,17 @@ function installedLawOfRows(rows) {
|
|
|
13873
13982
|
}
|
|
13874
13983
|
return out;
|
|
13875
13984
|
}
|
|
13876
|
-
function lawStatusOf(installed, clientHash) {
|
|
13985
|
+
function lawStatusOf(installed, clientHash, current) {
|
|
13877
13986
|
const known = Array.isArray(installed);
|
|
13878
13987
|
const list = known ? installed : [];
|
|
13988
|
+
const currentSupplied = current !== void 0;
|
|
13989
|
+
const currentKnown = currentSupplied ? Array.isArray(current) : known;
|
|
13990
|
+
const serving = currentSupplied ? Array.isArray(current) ? current : [] : list;
|
|
13879
13991
|
return {
|
|
13880
13992
|
installed: list,
|
|
13881
13993
|
...clientHash !== void 0 ? { clientHash } : {},
|
|
13882
|
-
|
|
13994
|
+
...currentSupplied ? { current } : {},
|
|
13995
|
+
drifted: !!(clientHash !== void 0 && currentKnown && !serving.includes(clientHash))
|
|
13883
13996
|
};
|
|
13884
13997
|
}
|
|
13885
13998
|
function lawDriftMessage({
|
|
@@ -14128,6 +14241,25 @@ ${String(commit).toLowerCase()}`;
|
|
|
14128
14241
|
}
|
|
14129
14242
|
};
|
|
14130
14243
|
};
|
|
14244
|
+
if (!restoreFrom && !mountInPlace && !localOnly && !salvageOnly && !recover) {
|
|
14245
|
+
const _coldSnapshot = span(
|
|
14246
|
+
"receive",
|
|
14247
|
+
"boot: fetch checkpointed custody snapshot",
|
|
14248
|
+
"cfetch"
|
|
14249
|
+
);
|
|
14250
|
+
try {
|
|
14251
|
+
const response = await _fetch(
|
|
14252
|
+
`${base}/v2/workspaces/${workspace}/snapshot`,
|
|
14253
|
+
{ headers: authHeaders }
|
|
14254
|
+
);
|
|
14255
|
+
if (response.ok && response.headers.get("x-nomos-layout") === "local-custody-v3") {
|
|
14256
|
+
restoreFrom = new Uint8Array(await response.arrayBuffer());
|
|
14257
|
+
}
|
|
14258
|
+
} catch {
|
|
14259
|
+
} finally {
|
|
14260
|
+
_coldSnapshot.end({ restored: !!restoreFrom });
|
|
14261
|
+
}
|
|
14262
|
+
}
|
|
14131
14263
|
const repoArg = `/work/ws/${workspace}`;
|
|
14132
14264
|
const provider = kernelProvider || createWasmKernelProvider({ span });
|
|
14133
14265
|
const readRemoteInfo = async () => ({
|
|
@@ -14397,10 +14529,12 @@ ${String(commit).toLowerCase()}`;
|
|
|
14397
14529
|
const watchStops = /* @__PURE__ */ new Set();
|
|
14398
14530
|
let installedLawRowsCache;
|
|
14399
14531
|
let installedLawCurrentCache;
|
|
14532
|
+
let installedLawCurrentError = "";
|
|
14400
14533
|
let installedInterfaceCache;
|
|
14401
14534
|
const invalidateInstalledLawMetadata = () => {
|
|
14402
14535
|
installedLawRowsCache = void 0;
|
|
14403
14536
|
installedLawCurrentCache = void 0;
|
|
14537
|
+
installedLawCurrentError = "";
|
|
14404
14538
|
installedInterfaceCache = void 0;
|
|
14405
14539
|
};
|
|
14406
14540
|
let _disposed = false;
|
|
@@ -14447,17 +14581,19 @@ ${String(commit).toLowerCase()}`;
|
|
|
14447
14581
|
scheduleMaintenanceSoon();
|
|
14448
14582
|
};
|
|
14449
14583
|
const prepareDomainReady = async (domain, packageHash, directiveId) => {
|
|
14450
|
-
|
|
14584
|
+
const currentPackage = currentLawInner()?.[domain];
|
|
14585
|
+
const servingPackage = typeof currentPackage === "string" && currentPackage.length > 0 ? currentPackage : packageHash;
|
|
14586
|
+
requestDomainMaintenance(domain, servingPackage, directiveId);
|
|
14451
14587
|
const readiness = await prepareDomainUntilReady({
|
|
14452
14588
|
domain,
|
|
14453
|
-
packageHash,
|
|
14589
|
+
packageHash: servingPackage,
|
|
14454
14590
|
directiveId,
|
|
14455
14591
|
warm: () => serialize(
|
|
14456
14592
|
async () => namedQueryTyped(QueryOperation.WARM, {
|
|
14457
14593
|
interactiveOnly: true,
|
|
14458
14594
|
requestedDomain: domain,
|
|
14459
14595
|
...directiveId ? { requestedDirective: directiveId } : {},
|
|
14460
|
-
requestedPackage:
|
|
14596
|
+
requestedPackage: servingPackage
|
|
14461
14597
|
}),
|
|
14462
14598
|
"prepare generated domain",
|
|
14463
14599
|
false
|
|
@@ -14470,7 +14606,7 @@ ${String(commit).toLowerCase()}`;
|
|
|
14470
14606
|
});
|
|
14471
14607
|
if (readiness.prepared) {
|
|
14472
14608
|
const index = _maintenanceTargets.findIndex(
|
|
14473
|
-
(target) => target.domain === domain && target.packageHash ===
|
|
14609
|
+
(target) => target.domain === domain && target.packageHash === servingPackage && target.directiveId === directiveId
|
|
14474
14610
|
);
|
|
14475
14611
|
if (index >= 0) _maintenanceTargets.splice(index, 1);
|
|
14476
14612
|
}
|
|
@@ -15145,7 +15281,9 @@ ${String(commit).toLowerCase()}`;
|
|
|
15145
15281
|
const answer = namedQueryTyped(QueryOperation.INSTALLED_LAW);
|
|
15146
15282
|
if (Array.isArray(answer?.domains)) {
|
|
15147
15283
|
const currentLaw = answer?.currentLaw;
|
|
15148
|
-
|
|
15284
|
+
if (currentLaw && typeof currentLaw === "object" && !Array.isArray(currentLaw)) {
|
|
15285
|
+
installedLawCurrentCache = currentLaw;
|
|
15286
|
+
}
|
|
15149
15287
|
installedLawRowsCache = answer.domains.map(
|
|
15150
15288
|
(domain) => ({
|
|
15151
15289
|
id: domain.installationId,
|
|
@@ -15189,21 +15327,36 @@ ${String(commit).toLowerCase()}`;
|
|
|
15189
15327
|
return installedLawRowsCache;
|
|
15190
15328
|
};
|
|
15191
15329
|
const currentLawInner = () => {
|
|
15192
|
-
installRowsInner();
|
|
15193
15330
|
if (installedLawCurrentCache !== void 0) return installedLawCurrentCache;
|
|
15194
15331
|
try {
|
|
15195
15332
|
const answer = namedQueryTyped(QueryOperation.CURRENT_LAW);
|
|
15196
15333
|
const current = answer?.keyMap ?? answer?.currentLaw ?? answer;
|
|
15197
|
-
|
|
15198
|
-
|
|
15199
|
-
|
|
15334
|
+
if (current && typeof current === "object" && !Array.isArray(current)) {
|
|
15335
|
+
installedLawCurrentError = "";
|
|
15336
|
+
installedLawCurrentCache = current;
|
|
15337
|
+
return installedLawCurrentCache;
|
|
15338
|
+
}
|
|
15339
|
+
installedLawCurrentError = "kernel current-law read returned no typed domain map";
|
|
15340
|
+
} catch (error) {
|
|
15341
|
+
installedLawCurrentError = String(
|
|
15342
|
+
error?.message || error || "kernel current-law read failed"
|
|
15343
|
+
);
|
|
15200
15344
|
}
|
|
15201
|
-
return
|
|
15345
|
+
return null;
|
|
15202
15346
|
};
|
|
15203
15347
|
const installedLawInner = () => {
|
|
15204
15348
|
const rows = installRowsInner();
|
|
15205
15349
|
return rows === null ? null : installedLawOfRows(rows);
|
|
15206
15350
|
};
|
|
15351
|
+
const currentLawHashesInner = () => {
|
|
15352
|
+
const current = currentLawInner();
|
|
15353
|
+
if (current === null) return null;
|
|
15354
|
+
return [...new Set(
|
|
15355
|
+
Object.values(current).filter(
|
|
15356
|
+
(identity) => typeof identity === "string" && identity.length > 0
|
|
15357
|
+
)
|
|
15358
|
+
)];
|
|
15359
|
+
};
|
|
15207
15360
|
const recomputeCompat = ({ silent = false } = {}) => {
|
|
15208
15361
|
if (!compatState) return null;
|
|
15209
15362
|
const installRows = installRowsInner();
|
|
@@ -15357,16 +15510,28 @@ ${String(commit).toLowerCase()}`;
|
|
|
15357
15510
|
);
|
|
15358
15511
|
}
|
|
15359
15512
|
let pack = null;
|
|
15513
|
+
const packErrors = [];
|
|
15360
15514
|
for (const base2 of bases) {
|
|
15361
15515
|
try {
|
|
15362
15516
|
pack = provider.packDelta(base2, head);
|
|
15363
|
-
} catch {
|
|
15517
|
+
} catch (error) {
|
|
15518
|
+
packErrors.push(`${base2 ?? "<full>"}: ${String(error)}`);
|
|
15364
15519
|
pack = null;
|
|
15365
15520
|
}
|
|
15366
15521
|
if (pack) break;
|
|
15367
15522
|
}
|
|
15368
|
-
if (!pack)
|
|
15369
|
-
|
|
15523
|
+
if (!pack) {
|
|
15524
|
+
const missingOid = packErrors.join(" ").match(/(?:object with id|find commit) ([0-9a-f]{40})/i)?.[1];
|
|
15525
|
+
const objectBytes = (oid) => ["nomos.git/objects", "objects", ".git/objects"].map((root) => {
|
|
15526
|
+
const bytes = provider.readWsFile(
|
|
15527
|
+
`${root}/${oid.slice(0, 2)}/${oid.slice(2)}`
|
|
15528
|
+
);
|
|
15529
|
+
return `${root}=${bytes?.byteLength ?? 0}B`;
|
|
15530
|
+
}).join(",");
|
|
15531
|
+
throw new Error(
|
|
15532
|
+
`the kernel could not build the candidate custody pack${packErrors.length === 0 ? "" : ` (${packErrors[0]})`}; head[${objectBytes(head)}]${missingOid ? `; missing[${objectBytes(missingOid)}]` : ""}`
|
|
15533
|
+
);
|
|
15534
|
+
}
|
|
15370
15535
|
await pushPack(
|
|
15371
15536
|
remote,
|
|
15372
15537
|
authHeaders,
|
|
@@ -16514,6 +16679,10 @@ ${String(commit).toLowerCase()}`;
|
|
|
16514
16679
|
error: "the generated model identity is missing"
|
|
16515
16680
|
};
|
|
16516
16681
|
}
|
|
16682
|
+
const currentHash = String(currentLawInner()?.[domain] ?? "");
|
|
16683
|
+
if (currentHash === candidateHash) {
|
|
16684
|
+
return { ok: true, stage: "already-current" };
|
|
16685
|
+
}
|
|
16517
16686
|
const candidateInstallation = (installRowsInner() ?? []).find(
|
|
16518
16687
|
(row) => row?.id === `domain-installation:${candidateHash}`
|
|
16519
16688
|
);
|
|
@@ -16527,23 +16696,8 @@ ${String(commit).toLowerCase()}`;
|
|
|
16527
16696
|
error: candidatePhase.length === 0 ? `model '${candidateHash}' is not staged in this workspace; deploy the generated USDA package before opening this application` : `model '${candidateHash}' is '${candidatePhase}', so it cannot become current`
|
|
16528
16697
|
};
|
|
16529
16698
|
}
|
|
16530
|
-
const currentHash = String(currentLawInner()?.[domain] ?? "");
|
|
16531
16699
|
if (candidatePhase === "Active") {
|
|
16532
|
-
|
|
16533
|
-
const readiness = await prepareDomainReady(domain, candidateHash);
|
|
16534
|
-
if (readiness.prepared !== true) {
|
|
16535
|
-
throw new Error(
|
|
16536
|
-
`the admitted model '${candidateHash}' authenticated '${domain}' USDA slice did not become ready (${readiness.reason} after ${readiness.quanta} maintenance quanta)`
|
|
16537
|
-
);
|
|
16538
|
-
}
|
|
16539
|
-
return { ok: true, stage: "already-current" };
|
|
16540
|
-
} catch (error) {
|
|
16541
|
-
return {
|
|
16542
|
-
ok: false,
|
|
16543
|
-
stage: "preflight",
|
|
16544
|
-
error: String(error?.message || error)
|
|
16545
|
-
};
|
|
16546
|
-
}
|
|
16700
|
+
return { ok: true, stage: "already-current" };
|
|
16547
16701
|
}
|
|
16548
16702
|
let report;
|
|
16549
16703
|
let transition;
|
|
@@ -16682,12 +16836,13 @@ ${String(commit).toLowerCase()}`;
|
|
|
16682
16836
|
);
|
|
16683
16837
|
const data = row?.data;
|
|
16684
16838
|
const domainKeys = Array.isArray(data?.["spec.domainKeys"]) ? data["spec.domainKeys"].map(String) : [];
|
|
16685
|
-
|
|
16839
|
+
const exactSingleDomain = String(data?.["spec.domainHash"] ?? "") === candidateHash && String(currentLawInner()?.[domain] ?? "") === candidateHash && domainKeys.length === 0;
|
|
16840
|
+
if (!data || !domainKeys.includes(domain) && !exactSingleDomain) return null;
|
|
16686
16841
|
return {
|
|
16687
16842
|
hash: candidateHash,
|
|
16688
16843
|
phase: String(data["status.phase"] ?? ""),
|
|
16689
16844
|
dependencies: Array.isArray(data["spec.dependencies"]) ? data["spec.dependencies"].map(String) : [],
|
|
16690
|
-
domainKeys
|
|
16845
|
+
domainKeys: exactSingleDomain ? [domain] : domainKeys
|
|
16691
16846
|
};
|
|
16692
16847
|
};
|
|
16693
16848
|
const _nomosStageGeneratedModel = async (domain, candidateHash, lawUsdz, dependencies) => {
|
|
@@ -16711,14 +16866,10 @@ ${String(commit).toLowerCase()}`;
|
|
|
16711
16866
|
`generated model '${candidateHash}' has no USDZ transport asset`
|
|
16712
16867
|
);
|
|
16713
16868
|
}
|
|
16714
|
-
const
|
|
16715
|
-
const data = entry?.data;
|
|
16716
|
-
return String(data?.["status.phase"] ?? "") === "Active" && Array.isArray(data?.["spec.domainKeys"]) && data["spec.domainKeys"].map(String).includes(domain);
|
|
16717
|
-
});
|
|
16718
|
-
const priorHash = String(predecessor?.data?.["spec.domainHash"] ?? "");
|
|
16869
|
+
const priorHash = String(currentLawInner()?.[domain] ?? "");
|
|
16719
16870
|
if (!priorHash) {
|
|
16720
16871
|
throw new Error(
|
|
16721
|
-
`generated application cannot identify the active '${domain}' model it would supersede`
|
|
16872
|
+
`generated application cannot identify the active '${domain}' model it would supersede` + (installedLawCurrentError ? `: ${installedLawCurrentError}` : "")
|
|
16722
16873
|
);
|
|
16723
16874
|
}
|
|
16724
16875
|
const head = await offerDirective(
|
|
@@ -18409,6 +18560,8 @@ ${String(commit).toLowerCase()}`;
|
|
|
18409
18560
|
workspace,
|
|
18410
18561
|
deviceSecret,
|
|
18411
18562
|
authHeaders,
|
|
18563
|
+
connectionAuthToken: () => activeAuthToken,
|
|
18564
|
+
connectionFrameworkCalls: frameworkCalls,
|
|
18412
18565
|
receivingGroupNameOf,
|
|
18413
18566
|
sha256hexBytes,
|
|
18414
18567
|
bytesUnb64,
|
|
@@ -19812,6 +19965,7 @@ ${String(commit).toLowerCase()}`;
|
|
|
19812
19965
|
"application-open"
|
|
19813
19966
|
);
|
|
19814
19967
|
let requiredParentCustodyHead;
|
|
19968
|
+
let requiredDelegationKeyHash;
|
|
19815
19969
|
try {
|
|
19816
19970
|
if (spec.idToken || typeof spec.signIn === "function") {
|
|
19817
19971
|
const enrollment = await api.enrollFirstDevice({
|
|
@@ -19828,6 +19982,7 @@ ${String(commit).toLowerCase()}`;
|
|
|
19828
19982
|
enrollFirstDeviceCall: spec.enrollFirstDeviceCall
|
|
19829
19983
|
});
|
|
19830
19984
|
requiredParentCustodyHead = enrollment.verdict?.head;
|
|
19985
|
+
requiredDelegationKeyHash = enrollment.keyHash;
|
|
19831
19986
|
if (!requiredParentCustodyHead || !OID40_RE.test(requiredParentCustodyHead)) {
|
|
19832
19987
|
throw new Error(
|
|
19833
19988
|
`enrollFirstDevice at '${parent}' admitted without an exact custody head; refusing to prepare birth against an unbound resident frontier`
|
|
@@ -19878,9 +20033,16 @@ ${String(commit).toLowerCase()}`;
|
|
|
19878
20033
|
}
|
|
19879
20034
|
);
|
|
19880
20035
|
if (dq.ok) {
|
|
19881
|
-
const
|
|
19882
|
-
const
|
|
19883
|
-
|
|
20036
|
+
const response = await dq.json().catch(() => null);
|
|
20037
|
+
const rows = Array.isArray(response) ? response : response && Array.isArray(response.rows) ? response.rows : [];
|
|
20038
|
+
const hasExactDeviceDelegation = rows.some((row) => {
|
|
20039
|
+
if (!row || typeof row !== "object") return false;
|
|
20040
|
+
const data = row.data;
|
|
20041
|
+
if (!data || typeof data !== "object") return false;
|
|
20042
|
+
const fields = data;
|
|
20043
|
+
return fields.certificateParentKey === device.public && (requiredDelegationKeyHash === void 0 || fields.deviceKey === `key:${requiredDelegationKeyHash}`);
|
|
20044
|
+
});
|
|
20045
|
+
if (hasExactDeviceDelegation) {
|
|
19884
20046
|
sawDelegation = true;
|
|
19885
20047
|
break;
|
|
19886
20048
|
}
|
|
@@ -19891,7 +20053,7 @@ ${String(commit).toLowerCase()}`;
|
|
|
19891
20053
|
}
|
|
19892
20054
|
if (!sawDelegation) {
|
|
19893
20055
|
const err = new Error(
|
|
19894
|
-
`receiving-group setup: parent '${parent}' still holds NO SignerDelegation for '${owner}' after ${pollTimeoutMs}ms. enrollFirstDevice seated the device SIGNER, but the home cert chain's links[1] (the platform-signed delegation) never surfaced \u2014 the birth would
|
|
20056
|
+
`receiving-group setup: parent '${parent}' still holds NO SignerDelegation for '${owner}' after ${pollTimeoutMs}ms. enrollFirstDevice seated the device SIGNER, but the home cert chain's links[1] (the platform-signed delegation for device '${String(requiredDelegationKeyHash ?? "unknown").slice(0, 12)}\u2026') never surfaced \u2014 the birth would combine different device generations and fail its certificate chain. The enroll must record the keyless delegation (enrollFirstDevice.delegationCert) BEFORE birth. [ParentSignerDelegationMissing]`
|
|
19895
20057
|
);
|
|
19896
20058
|
err.code = "ParentSignerDelegationMissing";
|
|
19897
20059
|
throw err;
|
|
@@ -20105,7 +20267,22 @@ ${String(commit).toLowerCase()}`;
|
|
|
20105
20267
|
* lifecycle view: active = served now; superseded/retired = replayable, not served.
|
|
20106
20268
|
* `drifted` is true ONLY on the word of a successful read.
|
|
20107
20269
|
*/
|
|
20108
|
-
lawStatus: () => serialize(async () =>
|
|
20270
|
+
lawStatus: () => serialize(async () => {
|
|
20271
|
+
const currentLaw = currentLawInner();
|
|
20272
|
+
const current = currentLawHashesInner();
|
|
20273
|
+
const status = lawStatusOf(
|
|
20274
|
+
installedLawRowsCache === void 0 ? null : installedLawInner(),
|
|
20275
|
+
clientLawHash,
|
|
20276
|
+
current
|
|
20277
|
+
);
|
|
20278
|
+
console.error(
|
|
20279
|
+
`[nomos-law-status] workspace=${workspace} client=${status.clientHash ?? "unregistered"} current=${status.current?.join(",") ?? "unknown"} installed=${status.installed.join(",")} drifted=${status.drifted}`
|
|
20280
|
+
);
|
|
20281
|
+
return {
|
|
20282
|
+
...status,
|
|
20283
|
+
currentDomains: currentLaw === null ? null : Object.keys(currentLaw).sort()
|
|
20284
|
+
};
|
|
20285
|
+
}),
|
|
20109
20286
|
/**
|
|
20110
20287
|
* Register the BAKED law hash this client was generated under — the soft-warn lane:
|
|
20111
20288
|
* if the workspace's installed law doesn't carry it, ONE console.warn names the drift
|
|
@@ -20119,7 +20296,16 @@ ${String(commit).toLowerCase()}`;
|
|
|
20119
20296
|
"registerLawHash(hash) requires the generated client's baked law hash (the 64-hex sha256 of its package)"
|
|
20120
20297
|
);
|
|
20121
20298
|
clientLawHash = hash;
|
|
20122
|
-
const
|
|
20299
|
+
const currentLaw = currentLawInner();
|
|
20300
|
+
const current = currentLawHashesInner();
|
|
20301
|
+
const status = lawStatusOf(
|
|
20302
|
+
installedLawRowsCache === void 0 ? null : installedLawInner(),
|
|
20303
|
+
clientLawHash,
|
|
20304
|
+
current
|
|
20305
|
+
);
|
|
20306
|
+
console.error(
|
|
20307
|
+
`[nomos-law-status] workspace=${workspace} client=${status.clientHash ?? "unregistered"} current=${status.current?.join(",") ?? "unknown"} installed=${status.installed.join(",")} drifted=${status.drifted}`
|
|
20308
|
+
);
|
|
20123
20309
|
if (status.drifted && !warnedDrift) {
|
|
20124
20310
|
warnedDrift = true;
|
|
20125
20311
|
console.warn(
|
|
@@ -20127,11 +20313,14 @@ ${String(commit).toLowerCase()}`;
|
|
|
20127
20313
|
what: "connect",
|
|
20128
20314
|
workspace,
|
|
20129
20315
|
clientHash: hash,
|
|
20130
|
-
installed: status.installed
|
|
20316
|
+
installed: status.current ?? status.installed
|
|
20131
20317
|
})
|
|
20132
20318
|
);
|
|
20133
20319
|
}
|
|
20134
|
-
return
|
|
20320
|
+
return {
|
|
20321
|
+
...status,
|
|
20322
|
+
currentDomains: currentLaw === null ? null : Object.keys(currentLaw).sort()
|
|
20323
|
+
};
|
|
20135
20324
|
}),
|
|
20136
20325
|
/**
|
|
20137
20326
|
* THE COMPAT SUPERPOWER (#72b): the generated client factory hands over its baked `nomosCompat`
|
|
@@ -20710,7 +20899,7 @@ ${String(commit).toLowerCase()}`;
|
|
|
20710
20899
|
if (result?.offline === true || result?.pushFailed === true || result?.reconnectRequired === true)
|
|
20711
20900
|
return result;
|
|
20712
20901
|
const localHead = await serialize(async () => resolveBranchHead());
|
|
20713
|
-
if (localHead === syncedBase) return result;
|
|
20902
|
+
if (localHead === syncedBase && !discoverRemote) return result;
|
|
20714
20903
|
return api.sync({ admit, discoverRemote });
|
|
20715
20904
|
});
|
|
20716
20905
|
}
|
|
@@ -21564,6 +21753,33 @@ async function openRealm(opts = {}) {
|
|
|
21564
21753
|
rebindWatches(name, holon);
|
|
21565
21754
|
return holon;
|
|
21566
21755
|
}
|
|
21756
|
+
async function deviceIdentity(secret) {
|
|
21757
|
+
const scratch = `nomos-device-${realmClientId}`;
|
|
21758
|
+
const holon = await mount(scratch, {
|
|
21759
|
+
allowUnborn: true,
|
|
21760
|
+
authToken: "",
|
|
21761
|
+
principal: "",
|
|
21762
|
+
clientId: `${realmClientId}:device-identity`
|
|
21763
|
+
}, { evict: false });
|
|
21764
|
+
try {
|
|
21765
|
+
if (typeof secret === "string" && secret.length > 0) {
|
|
21766
|
+
return { secret, public: await holon.devicePublicOf(secret) };
|
|
21767
|
+
}
|
|
21768
|
+
const created = await holon.authorKeygen();
|
|
21769
|
+
if (!created?.ok || !created.secret || !created.public) {
|
|
21770
|
+
throw new Error("the kernel did not return a complete device identity");
|
|
21771
|
+
}
|
|
21772
|
+
return { secret: created.secret, public: created.public };
|
|
21773
|
+
} finally {
|
|
21774
|
+
try {
|
|
21775
|
+
holon._dispose();
|
|
21776
|
+
} catch {
|
|
21777
|
+
}
|
|
21778
|
+
mounted.delete(scratch);
|
|
21779
|
+
parked.delete(scratch);
|
|
21780
|
+
plane.drop(scratch);
|
|
21781
|
+
}
|
|
21782
|
+
}
|
|
21567
21783
|
return {
|
|
21568
21784
|
/** The realm's stable client id (each workspace gets `${clientId}:${name}` unless overridden). */
|
|
21569
21785
|
clientId: realmClientId,
|
|
@@ -21571,6 +21787,8 @@ async function openRealm(opts = {}) {
|
|
|
21571
21787
|
plane,
|
|
21572
21788
|
/** Open (or mount-on-demand) a holon bound to `name` IN this plane. Same surface as `connect()` returns. */
|
|
21573
21789
|
workspace: (name, wsOpts = {}) => withGate(() => mount(name, wsOpts)),
|
|
21790
|
+
/** Kernel-owned device identity, prepared without reading or creating remote custody. */
|
|
21791
|
+
deviceIdentity: (secret) => withGate(() => deviceIdentity(secret)),
|
|
21574
21792
|
/** The realm's workspaces + their posture (mounted / parked / has-custody). */
|
|
21575
21793
|
list: () => {
|
|
21576
21794
|
const names = /* @__PURE__ */ new Set([
|
|
@@ -22439,20 +22657,34 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
|
|
|
22439
22657
|
...environment?.NOMOS_TEST_K_ROOT_PUBLIC ? { __testKRootPublic: environment.NOMOS_TEST_K_ROOT_PUBLIC } : {}
|
|
22440
22658
|
});
|
|
22441
22659
|
try {
|
|
22442
|
-
let authorityHolon = await measureOpen("open private application custody", () => mountAuthority(secret, authToken));
|
|
22443
22660
|
const storedJournal = await measureOpen("load application bootstrap state", () => store.loadText(journalState));
|
|
22444
22661
|
const completed = storedJournal === "complete";
|
|
22662
|
+
const prepareDeviceIdentity = async (durableSecret) => {
|
|
22663
|
+
if (realm.deviceIdentity !== void 0) return realm.deviceIdentity(durableSecret);
|
|
22664
|
+
const legacy = await mountAuthority(durableSecret ?? null, authToken);
|
|
22665
|
+
if (durableSecret !== void 0) {
|
|
22666
|
+
return { secret: durableSecret, public: await legacy.devicePublicOf(durableSecret) };
|
|
22667
|
+
}
|
|
22668
|
+
const created = await legacy.authorKeygen();
|
|
22669
|
+
if (!created?.ok || !created.secret || !created.public) {
|
|
22670
|
+
throw new Error("the runtime did not create a device identity");
|
|
22671
|
+
}
|
|
22672
|
+
return { secret: created.secret, public: created.public };
|
|
22673
|
+
};
|
|
22445
22674
|
let publicKey;
|
|
22446
22675
|
if (secret === null) {
|
|
22447
|
-
const device = await measureOpen("create application device identity", () =>
|
|
22448
|
-
if (!device.
|
|
22676
|
+
const device = await measureOpen("create application device identity", () => prepareDeviceIdentity());
|
|
22677
|
+
if (!device.secret || !device.public) throw new Error("the runtime did not create a device identity");
|
|
22449
22678
|
await measureOpen("make application device identity durable", () => store.saveText(keyState, device.secret));
|
|
22450
22679
|
secret = device.secret;
|
|
22451
22680
|
publicKey = device.public;
|
|
22452
22681
|
await measureOpen("save application bootstrap progress", () => store.saveText(journalState, "identity-durable"));
|
|
22453
22682
|
} else {
|
|
22454
22683
|
const durableSecret = secret;
|
|
22455
|
-
publicKey = await measureOpen(
|
|
22684
|
+
publicKey = await measureOpen(
|
|
22685
|
+
"restore application device identity",
|
|
22686
|
+
async () => (await prepareDeviceIdentity(durableSecret)).public
|
|
22687
|
+
);
|
|
22456
22688
|
}
|
|
22457
22689
|
const deviceChallengeBytes = Uint8Array.from(bytesFromBase64(publicKey));
|
|
22458
22690
|
const deviceChallenge = await crypto.subtle.digest("SHA-256", deviceChallengeBytes.buffer).then((digest) => [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, "0")).join(""));
|
|
@@ -22462,7 +22694,7 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
|
|
|
22462
22694
|
throw applicationError("Sign in changed authority while preparing this application device.", "nomos.authority.changed_during_open");
|
|
22463
22695
|
}
|
|
22464
22696
|
authToken = deviceToken;
|
|
22465
|
-
authorityHolon = await measureOpen("
|
|
22697
|
+
let authorityHolon = await measureOpen("open private application custody", () => mountAuthority(secret, authToken));
|
|
22466
22698
|
const birthOrRepeat = async () => {
|
|
22467
22699
|
const birth = await measureOpen("establish private application custody", () => authorityHolon.nomosInternalBirthReceivingGroup({
|
|
22468
22700
|
parent: application,
|
|
@@ -22497,17 +22729,17 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
|
|
|
22497
22729
|
try {
|
|
22498
22730
|
await measureOpen("confirm private-custody signer enrolment", enroll);
|
|
22499
22731
|
} catch (error) {
|
|
22500
|
-
|
|
22732
|
+
const errorCode = typeof error === "object" && error !== null && "code" in error ? String(error.code ?? "") : "";
|
|
22733
|
+
const parentAuthorizedMigrationRequired = errorCode === "nomos.application.contract_missing" || String(error).includes("receiving-group-additional-device-requires-current-device-or-guardian");
|
|
22734
|
+
if (!parentAuthorizedMigrationRequired) throw error;
|
|
22501
22735
|
await birthOrRepeat();
|
|
22502
22736
|
await measureOpen("verify recovered private-custody signer enrolment", enroll);
|
|
22503
22737
|
}
|
|
22504
22738
|
};
|
|
22505
22739
|
if (!completed) {
|
|
22506
|
-
|
|
22507
|
-
|
|
22508
|
-
|
|
22509
|
-
} catch {
|
|
22510
|
-
}
|
|
22740
|
+
const homeAvailable = Boolean(
|
|
22741
|
+
await measureOpen("check private application custody", () => authorityHolon.head())
|
|
22742
|
+
);
|
|
22511
22743
|
if (!homeAvailable) {
|
|
22512
22744
|
await birthOrRepeat();
|
|
22513
22745
|
}
|