@githolon/dsl 0.103.12 → 0.103.14
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 +5 -0
- package/dart/lib/src/runner/node-entry.mjs +244 -173
- package/dart/lib/src/runner/offline-install.mjs +87 -112
- package/dart/lib/src/session_bound.dart +7 -4
- package/dart/lib/src/webview_bridge.dart +13 -11
- package/dart/pubspec.yaml +1 -1
- package/dart/test/webview_bridge_test.dart +10 -7
- package/dart_types/CHANGELOG.md +2 -2
- package/dart_types/lib/nomos_types.dart +4 -4
- package/dart_types/lib/src/versioned_nomos_ref.dart +13 -11
- package/dart_types/pubspec.yaml +1 -1
- package/package.json +1 -1
- package/runtime/generated-application-host.js +433 -239
- package/src/aggregate.ts +3 -1
- package/src/build_package.ts +77 -6
- package/src/check_package_main.ts +39 -16
- package/src/codegen_dart.ts +189 -52
- package/src/codegen_dart_application.ts +82 -16
- package/src/codegen_dart_client.ts +42 -14
- package/src/codegen_dot.ts +3 -3
- package/src/codegen_proof.ts +24 -2
- package/src/codegen_ts.ts +32 -19
- package/src/compile_package_main.ts +68 -11
- package/src/derived.ts +17 -0
- package/src/directive.ts +65 -0
- package/src/engine_entry.ts +22 -2
- package/src/enum_type.ts +71 -0
- package/src/fields.ts +135 -5
- package/src/flow_gate.ts +2 -1
- package/src/framework/workspaces.ts +73 -0
- package/src/idof_lint.ts +5 -1
- package/src/index.ts +20 -0
- package/src/kernel_capabilities.ts +12 -1
- package/src/law_check.ts +107 -28
- package/src/law_graph.ts +151 -20
- package/src/law_graph_usda.ts +23 -0
- package/src/law_value_type.ts +10 -3
- package/src/lsp_server.ts +26 -16
- package/src/package_config.ts +112 -9
- package/src/package_feature_topology.ts +174 -0
- package/src/plan_source_slice.ts +6 -0
- package/src/report.ts +6 -0
- package/src/stable_ids_for_module.ts +9 -4
- package/src/value_object.ts +9 -2
- package/src/workspace_sharding.ts +4 -4
|
@@ -5341,48 +5341,47 @@ function writeTypeOfScalar(type) {
|
|
|
5341
5341
|
}
|
|
5342
5342
|
|
|
5343
5343
|
// ../cloud/web-client/src/_adapter/proto/nomos/kernel/v1/kernel_pb.js
|
|
5344
|
-
var file_nomos_kernel_v1_kernel = /* @__PURE__ */ fileDesc("Chxub21vcy9rZXJuZWwvdjEva2VybmVsLnByb3RvEg9ub21vcy5rZXJuZWwudjEimAMKC0NhbGxSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIsCgRvcGVuGAogASgLMhwubm9tb3Mua2VybmVsLnYxLk9wZW5SZXF1ZXN0SAASLgoFb2ZmZXIYCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXF1ZXN0SAASLgoFcXVlcnkYDCABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0SAASMAoGb3V0Ym94GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlcXVlc3RIABIsCgRzeW5jGA4gASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZXF1ZXN0SAASMgoHY3VzdG9keRgPIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVxdWVzdEgAEiwKBHRlc3QYECABKAsyHC5ub21vcy5rZXJuZWwudjEuVGVzdFJlcXVlc3RIAEILCglvcGVyYXRpb24iywMKDENhbGxSZXNwb25zZRIYChBwcm90b2NvbF92ZXJzaW9uGAEgASgNEhIKCnJlcXVlc3RfaWQYAiABKAkSKwoHZmFpbHVyZRgKIAEoCzIYLm5vbW9zLmtlcm5lbC52MS5GYWlsdXJlSAASLQoEb3BlbhgLIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5PcGVuUmVzcG9uc2VIABIvCgVvZmZlchgMIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5PZmZlclJlc3BvbnNlSAASLwoFcXVlcnkYDSABKAsyHi5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXNwb25zZUgAEjEKBm91dGJveBgOIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5PdXRib3hSZXNwb25zZUgAEi0KBHN5bmMYDyABKAsyHS5ub21vcy5rZXJuZWwudjEuU3luY1Jlc3BvbnNlSAASMwoHY3VzdG9keRgQIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVzcG9uc2VIABItCgR0ZXN0GBEgASgLMh0ubm9tb3Mua2VybmVsLnYxLlRlc3RSZXNwb25zZUgAQgkKB291dGNvbWUiVwoHRmFpbHVyZRIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSLQoHZGV0YWlscxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCI8CgxPcGVuUmVzcG9uc2USLAoGcmVzdWx0GAEgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IsMCCg1PZmZlclJlc3BvbnNlEjIKCGFkbWl0dGVkGAEgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyQWRtaXR0ZWRIABIwCgdyZWZ1c2VkGAIgASgLMh0ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVmdXNlZEgAEjsKDWRlYWRfbGV0dGVyZWQYAyABKAsyIi5ub21vcy5rZXJuZWwudjEuT2ZmZXJEZWFkTGV0dGVyZWRIABI4CgtxdWFyYW50aW5lZBgEIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5PZmZlclF1YXJhbnRpbmVkSAASSgoVYmxvY2tlZF9vbl9kZXBlbmRlbmN5GAUgASgLMikubm9tb3Mua2VybmVsLnYxLk9mZmVyQmxvY2tlZE9uRGVwZW5kZW5jeUgAQgkKB291dGNvbWUiPQoNT2ZmZXJBZG1pdHRlZBIsCgZyZXN1bHQYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QilgEKDE9mZmVyUmVmdXNlZBIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEi8KB3JlZnVzYWwYAiABKAsyHi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbBIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQiegoRT2ZmZXJEZWFkTGV0dGVyZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZyZWFzb24YAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIq4BChBPZmZlclF1YXJhbnRpbmVkEhUKCG9mZmVyX2lkGAEgASgJSACIAQESGQoRYXV0aG9yZWRfbGF3X2hhc2gYAiABKAkSGAoQY3VycmVudF9sYXdfaGFzaBgDIAEoCRIOCgZyZWFzb24YBCABKAkSMQoLZGlhZ25vc3RpY3MYBSABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIoEBChhPZmZlckJsb2NrZWRPbkRlcGVuZGVuY3kSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZkZXRhaWwYAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIoEBCg1LZXJuZWxSZWZ1c2FsEjAKBGNvZGUYASABKA4yIi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbENvZGUSDwoHbWVzc2FnZRgCIAEoCRItCgdkZXRhaWxzGAMgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0Iu8CCg1RdWVyeVJlc3BvbnNlEiwKBXZhbHVlGAEgASgLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWVIABJBChBhcHBsaWNhdGlvbl9qc29uGAIgASgLMiUubm9tb3Mua2VybmVsLnYxLkFwcGxpY2F0aW9uSnNvblZhbHVlSAASSgoTYXV0aG9yaXphdGlvbl9jaGVjaxgKIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZUgAEkwKFGF1dGhvcml6YXRpb25fZXhwYW5kGAsgASgLMiwubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBhbmRSZXNwb25zZUgAEkkKGHZlcmlmeV9jaGFpbl9kaWFnbm9zdGljcxgUIAEoCzInLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkRpYWdub3N0aWNzQggKBnJlc3VsdCLnAQoTVmVyaWZ5Q2hhaW5TdGVwU3BhbhINCgVpbmRleBgBIAEoBBISCgpjb21taXRfb2lkGAIgASgJEg4KBmRvbWFpbhgDIAEoCRIRCglkaXJlY3RpdmUYBCABKAkSEAoIdG90YWxfdXMYBSABKAQSNgoGcGhhc2VzGAYgASgLMiYubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFBoYXNlcxJACg5lbmdpbmVfdGltaW5ncxgHIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkVuZ2luZVRpbWluZyKYAgoVVmVyaWZ5Q2hhaW5TdGVwUGhhc2VzEh4KFnJ1bnRpbWVfbGF3X3JlZnJlc2hfdXMYASABKAQSEwoLbWFuaWZlc3RfdXMYAiABKAQSGQoRbGF3X3Jlc29sdXRpb25fdXMYAyABKAQSHQoVbWFuYWdlZF90cmFuc2l0aW9uX3VzGAQgASgEEhQKDHByaW5jaXBhbF91cxgFIAEoBBIUCgxldm9sdXRpb25fdXMYBiABKAQSGgoSY29sb2NhdGVkX3JlYWRzX3VzGAcgASgEEiEKGXR5cGVkX2luc3RhbGxfdmVyaWZpZXJfdXMYCCABKAQSFAoMYWRtaXNzaW9uX3VzGAkgASgEEg8KB2ZvbGRfdXMYCiABKAQipAMKFlZlcmlmeUNoYWluRGlhZ25vc3RpY3MSLgoEd2FsaxgBIAEoDjIgLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbldhbGsSEAoIdG90YWxfdXMYAiABKAQSGwoTcmVmZXJlbmNlX2xvb2t1cF91cxgDIAEoBBIaChJyZXBvc2l0b3J5X29wZW5fdXMYBCABKAQSFQoNY2hhaW5fcmVhZF91cxgFIAEoBBIWCg5lbmdpbmVfaW5pdF91cxgGIAEoBBIYChB0aW1lbGluZV9yZWFkX3VzGAcgASgEEhgKEGxhd19oeWRyYXRpb25fdXMYCCABKAQSGwoTcmVjb3ZlcnlfcHJlc2Nhbl91cxgJIAEoBBIYChBmb2xkX2Zyb250aWVyX3VzGAogASgEEjMKBXN0ZXBzGAsgAygLMiQubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFNwYW4SQAoOZW5naW5lX3RpbWluZ3MYDCADKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5FbmdpbmVUaW1pbmciOgoXVmVyaWZ5Q2hhaW5FbmdpbmVUaW1pbmcSDQoFcGhhc2UYASABKAkSEAoIdG90YWxfdXMYAiABKAQiJAoUQXBwbGljYXRpb25Kc29uVmFsdWUSDAoEdXRmOBgBIAEoDCI+Cg5PdXRib3hSZXNwb25zZRIsCgZyZXN1bHQYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QiPAoMU3luY1Jlc3BvbnNlEiwKBnJlc3VsdBgBIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCJCCg9Xb3Jrc3BhY2VUYXJnZXQSDAoEcmVwbxgBIAEoCRIRCgl3b3Jrc3BhY2UYAiABKAkSDgoGYnJhbmNoGAMgASgJIk4KC09wZW5SZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDQoFc3BhbnMYAiABKAgiYQoNRGlyZWN0aXZlQ2FsbBIOCgZkb21haW4YASABKAkSEQoJZGlyZWN0aXZlGAIgASgJEi0KB3BheWxvYWQYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QiwAIKEEF1dGhvcmluZ09wdGlvbnMSDQoFYWN0b3IYASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIVCg1hdXRob3Jfc2VjcmV0GAMgASgMEh0KEHZhbGlkX2Zyb21fZXBvY2gYBCABKARIAIgBARIfChJwcmluY2lwYWxfdmVyaWZpZWQYBSABKAhIAYgBARILCgNybmcYBiADKAESGAoQZGVmZXJfcHJvamVjdGlvbhgHIAEoCBINCgVzcGFucxgIIAEoCBIPCgdkcnlfcnVuGAkgASgIEhAKCHNlcXVlbmNlGAogASgEEi0KBWNsb2NrGAsgASgLMh4ubm9tb3Mua2VybmVsLnYxLkNhcHR1cmVkQ2xvY2tCEwoRX3ZhbGlkX2Zyb21fZXBvY2hCFQoTX3ByaW5jaXBhbF92ZXJpZmllZCJKCg1DYXB0dXJlZENsb2NrEhcKD3BoeXNpY2FsX21pbGxpcxgBIAEoBBIPCgdsb2dpY2FsGAIgASgNEg8KB3JlcGxpY2EYAyABKAQiwwMKEEJpcnRoQ2VydGlmaWNhdGUSDQoFY2hpbGQYASABKAkSDwoHZm91bmRlchgCIAEoCRIQCgh2ZXJpZmllZBgDIAEoCBISCgpwYXJlbnRfa2V5GAQgASgMEhEKCXBhcmVudF9pZBgFIAEoCRINCgVlcG9jaBgGIAEoAxIRCglzaWduYXR1cmUYByABKAwSGQoMdmVyaWZpZWRfdmlhGAggASgJSACIAQESFgoJaWRwX3Rva2VuGAkgASgJSAGIAQESGwoOY2FwdHVyZWRfY2xvY2sYCiABKANIAogBARIhChRhdXRoX3Byb3ZpZGVyX2lzc3VlchgLIAEoCUgDiAEBEh8KEmF1dGhfcHJvdmlkZXJfandrcxgMIAEoCUgEiAEBEiMKFmF1dGhfcHJvdmlkZXJfYXVkaWVuY2UYDSABKAlIBYgBAUIPCg1fdmVyaWZpZWRfdmlhQgwKCl9pZHBfdG9rZW5CEQoPX2NhcHR1cmVkX2Nsb2NrQhcKFV9hdXRoX3Byb3ZpZGVyX2lzc3VlckIVChNfYXV0aF9wcm92aWRlcl9qd2tzQhkKF19hdXRoX3Byb3ZpZGVyX2F1ZGllbmNlIpwECgxPZmZlclJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIuCgRjYWxsGAIgASgLMh4ubm9tb3Mua2VybmVsLnYxLkRpcmVjdGl2ZUNhbGxIABIcChJzZWFsZWRfY2hhbmdlX3VzZGEYByABKAxIABI0CglhdXRob3JpbmcYAyABKAsyIS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaW5nT3B0aW9ucxIQCghsYXdfdXNkehgEIAEoDBIzCgxhdHRlc3RhdGlvbnMYBSADKAsyHS5ub21vcy5rZXJuZWwudjEuQXR0ZXN0ZWRSZWFkEj0KEmNvbmZsaWN0X3NuYXBzaG90cxgGIAMoCzIhLm5vbW9zLmtlcm5lbC52MS5Db25mbGljdFNuYXBzaG90EhoKEmV4ZWN1dGlvbl9sYXdfdXNkehgIIAEoDBIgChNjb250cm9sbGVyX2xhd19oYXNoGAkgASgJSAGIAQESHQoQY2FuZGlkYXRlX2NvbW1pdBgKIAEoCUgCiAEBEjwKEWJpcnRoX2NlcnRpZmljYXRlGAsgASgLMiEubm9tb3Mua2VybmVsLnYxLkJpcnRoQ2VydGlmaWNhdGVCCAoGaW50ZW50QhYKFF9jb250cm9sbGVyX2xhd19oYXNoQhMKEV9jYW5kaWRhdGVfY29tbWl0IpMBCgxBdHRlc3RlZFJlYWQSEAoIcXVlcnlfaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EisKBnJlc3VsdBgDIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlEhMKC2F0dGVzdGF0aW9uGAQgASgMInUKEENvbmZsaWN0U25hcHNob3QSFgoOYWdncmVnYXRlX3R5cGUYASABKAkSFAoMYWdncmVnYXRlX2lkGAIgASgJEg0KBWZpZWxkGAMgASgJEhUKDXRhcmdldF9zY2hlbWEYBCABKAkSDQoFdG9rZW4YBSABKAki2wUKDFF1ZXJ5UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EjIKCWF1dGhvcml0eRgCIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5RdWVyeUF1dGhvcml0eRINCgVzcGFucxgDIAEoCBIqCgRyb3dzGAogASgLMhoubm9tb3Mua2VybmVsLnYxLlJvd3NRdWVyeUgAEioKBHBhZ2UYCyABKAsyGi5ub21vcy5rZXJuZWwudjEuUGFnZVF1ZXJ5SAASKwoFYnlfaWQYDCABKAsyGi5ub21vcy5rZXJuZWwudjEuQnlJZFF1ZXJ5SAASOQoMcmVzb2x2ZV9yZWZzGA0gASgLMiEubm9tb3Mua2VybmVsLnYxLlJlc29sdmVSZWZzUXVlcnlIABI7Cg1yZWZfZnJlc2huZXNzGA4gASgLMiIubm9tb3Mua2VybmVsLnYxLlJlZkZyZXNobmVzc1F1ZXJ5SAASLAoFY291bnQYDyABKAsyGy5ub21vcy5rZXJuZWwudjEuVGFsbHlRdWVyeUgAEioKA3N1bRgQIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5UYWxseVF1ZXJ5SAASMAoHc3BhdGlhbBgRIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5TcGF0aWFsUXVlcnlIABIsCgVuYW1lZBgSIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5OYW1lZFF1ZXJ5SAASSQoTYXV0aG9yaXphdGlvbl9jaGVjaxgTIAEoCzIqLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXF1ZXN0SAASSwoUYXV0aG9yaXphdGlvbl9leHBhbmQYFCABKAsyKy5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGFuZFJlcXVlc3RIAEIHCgVxdWVyeSKSAQoOUXVlcnlBdXRob3JpdHkSFwoPcHJpbmNpcGFsX2NsYWltGAEgASgJEhIKCmF1dGhfdG9rZW4YAiABKAwSEAoIbm93X3VuaXgYAyABKAQSFQoNYXV0aG9yX3NlY3JldBgEIAEoDBIqCgRrZXlzGAUgAygLMhwubm9tb3Mua2VybmVsLnYxLkluamVjdGVkS2V5IjgKC0luamVjdGVkS2V5Eg0KBXNjb3BlGAEgASgJEg0KBWVwb2NoGAIgASgEEgsKA2tleRgDIAEoDCJbCglSb3dzUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCXByaW5jaXBhbBgDIAEoCSJ5CglQYWdlUXVlcnkSCgoCaWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0Eg0KBWxpbWl0GAMgASgNEg0KBWFmdGVyGAQgASgJEhEKCXByaW5jaXBhbBgFIAEoCSJMCglCeUlkUXVlcnkSFgoOYWdncmVnYXRlX3R5cGUYASABKAkSFAoMYWdncmVnYXRlX2lkGAIgASgJEhEKCXByaW5jaXBhbBgDIAEoCSJcCghOb21vc1JlZhIRCgl3b3Jrc3BhY2UYASABKAkSFgoOYWdncmVnYXRlX3R5cGUYAiABKAkSFAoMYWdncmVnYXRlX2lkGAMgASgJEg8KB3ZlcnNpb24YBCABKAkiTgoQUmVzb2x2ZVJlZnNRdWVyeRInCgRyZWZzGAEgAygLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEhEKCXByaW5jaXBhbBgCIAEoCSJFChFSZWZGcmVzaG5lc3NRdWVyeRIwCgRyZWZzGAEgAygLMiIubm9tb3Mua2VybmVsLnYxLlJlZkZyZXNobmVzc0NoZWNrIoABChFSZWZGcmVzaG5lc3NDaGVjaxIpCgZwaW5uZWQYASABKAsyGS5ub21vcy5rZXJuZWwudjEuTm9tb3NSZWYSKQoGc2VyaWVzGAIgASgLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEhUKDWN1cnJlbnRfZmllbGQYAyABKAkiXAoKVGFsbHlRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJcHJpbmNpcGFsGAMgASgJIl4KDFNwYXRpYWxRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJcHJpbmNpcGFsGAMgASgJInEKCk5hbWVkUXVlcnkSMgoJb3BlcmF0aW9uGAEgASgOMh8ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5T3BlcmF0aW9uEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCIvChNBdXRob3JpemF0aW9uT2JqZWN0EgwKBHR5cGUYASABKAkSCgoCaWQYAiABKAkiVAoUQXV0aG9yaXphdGlvblN1YmplY3QSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCRIVCghyZWxhdGlvbhgDIAEoCUgAiAEBQgsKCV9yZWxhdGlvbiKcAQoYUmVsYXRpb25zaGlwVHVwbGVBZGRyZXNzEjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEAoIcmVsYXRpb24YAiABKAkSNgoHc3ViamVjdBgDIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uU3ViamVjdCKBAQoYQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5EiMKGWN1cnJlbnRfdmVyaWZpZWRfZnJvbnRpZXIYASABKAhIABIZCg9hdF9sZWFzdF9jb21taXQYAiABKAlIABIWCgxleGFjdF9jb21taXQYAyABKAlIAEINCgtyZXF1aXJlbWVudCJmCh1BdXRob3JpemF0aW9uQ29uZGl0aW9uQ29udGV4dBIUCgxjb25kaXRpb25faWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IvcCChlBdXRob3JpemF0aW9uQ2hlY2tSZXF1ZXN0EjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEgoKcGVybWlzc2lvbhgCIAEoCRI2CgdzdWJqZWN0GAMgASgLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0Ej4KC2NvbnNpc3RlbmN5GAQgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25Db25zaXN0ZW5jeRI/Cgdjb250ZXh0GAUgAygLMi4ubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25Db25kaXRpb25Db250ZXh0EiAKE2V4cGVjdGVkX21vZGVsX2hhc2gYBiABKAlIAIgBARIbChNpbmNsdWRlX2V4cGxhbmF0aW9uGAcgASgIQhYKFF9leHBlY3RlZF9tb2RlbF9oYXNoIu0CChpBdXRob3JpemF0aW9uRXhwYW5kUmVxdWVzdBI2CghyZXNvdXJjZRgBIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uT2JqZWN0EhIKCnBlcm1pc3Npb24YAiABKAkSPgoLY29uc2lzdGVuY3kYAyABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5Ej8KB2NvbnRleHQYBCADKAsyLi5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbmRpdGlvbkNvbnRleHQSIAoTZXhwZWN0ZWRfbW9kZWxfaGFzaBgFIAEoCUgAiAEBEg0KBWxpbWl0GAYgASgNEhIKBWFmdGVyGAcgASgJSAGIAQESGwoTaW5jbHVkZV9leHBsYW5hdGlvbhgIIAEoCEIWChRfZXhwZWN0ZWRfbW9kZWxfaGFzaEIICgZfYWZ0ZXIivQEKGVJlbGF0aW9uc2hpcFR1cGxlRXZpZGVuY2USOAoFdHVwbGUYASABKAsyKS5ub21vcy5rZXJuZWwudjEuUmVsYXRpb25zaGlwVHVwbGVBZGRyZXNzEhAKCHR1cGxlX2lkGAIgASgJEhoKEmFzc2VydGlvbl9ldmVudF9pZBgDIAEoCRIgChNyZXZvY2F0aW9uX2V2ZW50X2lkGAQgASgJSACIAQFCFgoUX3Jldm9jYXRpb25fZXZlbnRfaWQi4QMKGEF1dGhvcml6YXRpb25FeHBsYW5hdGlvbhJGCglvcGVyYXRpb24YASABKA4yMy5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uLk9wZXJhdGlvbhIQCghyZWxhdGlvbhgCIAEoCRIOCgZyZXN1bHQYAyABKAgSPAoIZXZpZGVuY2UYBCADKAsyKi5ub21vcy5rZXJuZWwudjEuUmVsYXRpb25zaGlwVHVwbGVFdmlkZW5jZRI7CghjaGlsZHJlbhgFIAMoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb24i3wEKCU9wZXJhdGlvbhIZChVPUEVSQVRJT05fVU5TUEVDSUZJRUQQABIUChBPUEVSQVRJT05fRElSRUNUEAESHgoaT1BFUkFUSU9OX0NPTVBVVEVEX1VTRVJTRVQQAhIeChpPUEVSQVRJT05fVFVQTEVfVE9fVVNFUlNFVBADEhMKD09QRVJBVElPTl9VTklPThAEEhoKFk9QRVJBVElPTl9JTlRFUlNFQ1RJT04QBRIXChNPUEVSQVRJT05fRVhDTFVTSU9OEAYSFwoTT1BFUkFUSU9OX0NPTkRJVElPThAHIncKGkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEiAKGGF1dGhvcml6YXRpb25fbW9kZWxfaGFzaBgBIAEoCRIhChlyZWxhdGlvbnNoaXBfc3RhdGVfY29tbWl0GAIgASgJEhQKDGNvbnRleHRfaGFzaBgDIAEoDCK+AQoaQXV0aG9yaXphdGlvbkNoZWNrUmVzcG9uc2USDwoHYWxsb3dlZBgBIAEoCBI6CgViYXNpcxgCIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRGVjaXNpb25CYXNpcxJDCgtleHBsYW5hdGlvbhgDIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb25IAIgBAUIOCgxfZXhwbGFuYXRpb24igwIKG0F1dGhvcml6YXRpb25FeHBhbmRSZXNwb25zZRI3CghzdWJqZWN0cxgBIAMoCzIlLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uU3ViamVjdBI6CgViYXNpcxgCIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRGVjaXNpb25CYXNpcxIRCgRuZXh0GAMgASgJSACIAQESQwoLZXhwbGFuYXRpb24YBCABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uSAGIAQFCBwoFX25leHRCDgoMX2V4cGxhbmF0aW9uIkEKDU91dGJveFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldCJjCgtTeW5jUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhEKCWZyb21fYmFzZRgCIAEoCRIPCgd0b19oZWFkGAMgASgJIlMKC1Rlc3RSZXF1ZXN0EjcKCHNldF9yb290GAEgASgLMiMubm9tb3Mua2VybmVsLnYxLlNldFRlc3RSb290UmVxdWVzdEgAQgsKCW9wZXJhdGlvbiIoChJTZXRUZXN0Um9vdFJlcXVlc3QSEgoKcHVibGljX2tleRgBIAEoDCI9CgxUZXN0UmVzcG9uc2USLQoGcmVzdWx0GAEgASgLMh0ubm9tb3Mua2VybmVsLnYxLkFja25vd2xlZGdlZCLtCQoOQ3VzdG9keVJlcXVlc3QSNwoKcGFja19kZWx0YRgKIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5QYWNrRGVsdGFSZXF1ZXN0SAASNwoKYXBwbHlfcGFjaxgLIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5BcHBseVBhY2tSZXF1ZXN0SAASNwoKcmVwb19zdGF0cxgMIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZXBvU3RhdHNSZXF1ZXN0SAASPQoNaW50ZW50c19hYm92ZRgNIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRzQWJvdmVSZXF1ZXN0SAASPwoOaW5zcGVjdF9jaGFuZ2UYDiABKAsyJS5ub21vcy5rZXJuZWwudjEuSW5zcGVjdENoYW5nZVJlcXVlc3RIABJOChZlbmNvZGVfcmVmdXNhbF92ZXJkaWN0GA8gASgLMiwubm9tb3Mua2VybmVsLnYxLkVuY29kZVJlZnVzYWxWZXJkaWN0UmVxdWVzdEgAElAKF2luc3BlY3RfcmVmdXNhbF92ZXJkaWN0GBAgASgLMi0ubm9tb3Mua2VybmVsLnYxLkluc3BlY3RSZWZ1c2FsVmVyZGljdFJlcXVlc3RIABI1CglyZWFkX2Jsb2IYESABKAsyIC5ub21vcy5rZXJuZWwudjEuUmVhZEJsb2JSZXF1ZXN0SAASOQoLcmVzb2x2ZV9yZWYYEiABKAsyIi5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVJlZlJlcXVlc3RIABI1CglsaXN0X3JlZnMYEyABKAsyIC5ub21vcy5rZXJuZWwudjEuTGlzdFJlZnNSZXF1ZXN0SAASNQoJd3JpdGVfcmVmGBQgASgLMiAubm9tb3Mua2VybmVsLnYxLldyaXRlUmVmUmVxdWVzdEgAEjcKCmRlbGV0ZV9yZWYYFSABKAsyIS5ub21vcy5rZXJuZWwudjEuRGVsZXRlUmVmUmVxdWVzdEgAEkQKEXdyaXRlX21ldGFfY29tbWl0GBYgASgLMicubm9tb3Mua2VybmVsLnYxLldyaXRlTWV0YUNvbW1pdFJlcXVlc3RIABJCChBsYXdfY2xvc3VyZV9pbmZvGBcgASgLMiYubm9tb3Mua2VybmVsLnYxLkxhd0Nsb3N1cmVJbmZvUmVxdWVzdEgAEkUKEWNoZWNrcG9pbnRfZXhwb3J0GBggASgLMigubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRFeHBvcnRSZXF1ZXN0SAASRQoRY2hlY2twb2ludF9pbXBvcnQYGSABKAsyKC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEltcG9ydFJlcXVlc3RIABJDChBjYXBhY2l0eV9yZXNlcnZlGBogASgLMicubm9tb3Mua2VybmVsLnYxLkNhcGFjaXR5UmVzZXJ2ZVJlcXVlc3RIABI7CgxyZXN0b3JlX21haW4YGyABKAsyIy5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5SZXF1ZXN0SAASTgoWcmVzb2x2ZV9zdGF0ZV9wb3NpdGlvbhgcIAEoCzIsLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlU3RhdGVQb3NpdGlvblJlcXVlc3RIAEILCglvcGVyYXRpb24inAEKEFBhY2tEZWx0YVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESEQoEYmFzZRgDIAEoCUgBiAEBEg4KBmJyYW5jaBgEIAEoCRIdChBzdGFnZWRfcGFja19maWxlGAUgASgJSAKIAQFCBwoFX2hlYWRCBwoFX2Jhc2VCEwoRX3N0YWdlZF9wYWNrX2ZpbGUicgoQQXBwbHlQYWNrUmVxdWVzdBIMCgRyZXBvGAEgASgJEg4KBHBhY2sYAiABKAxIABIaChBzdGFnZWRfcGFja19maWxlGAQgASgJSAASEQoEaGVhZBgDIAEoCUgBiAEBQggKBnNvdXJjZUIHCgVfaGVhZCIgChBSZXBvU3RhdHNSZXF1ZXN0EgwKBHJlcG8YASABKAkirAEKE0ludGVudHNBYm92ZVJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgRoZWFkGAIgASgJSACIAQESEQoEYmFzZRgDIAEoCUgBiAEBEg4KBmJyYW5jaBgEIAEoCRINCgVsaW1pdBgFIAEoBBIYChBjb21wbGV0ZV9sb2dpY2FsGAYgASgIEhYKDmNvbXBhY3Rfc3RvcmVkGAcgASgIQgcKBV9oZWFkQgcKBV9iYXNlIisKFEluc3BlY3RDaGFuZ2VSZXF1ZXN0EhMKC2NoYW5nZV91c2RhGAEgASgMIt8BCg5SZWZ1c2FsVmVyZGljdBIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEhAKA29pZBgCIAEoCUgBiAEBEhMKBmRvbWFpbhgDIAEoCUgCiAEBEhkKDGRpcmVjdGl2ZV9pZBgEIAEoCUgDiAEBEhQKB3Nlc3Npb24YBSABKAlIBIgBARIRCglwYXJrZWRfYXQYBiABKAkSDgoGcmVhc29uGAcgASgJQgsKCV9vZmZlcl9pZEIGCgRfb2lkQgkKB19kb21haW5CDwoNX2RpcmVjdGl2ZV9pZEIKCghfc2Vzc2lvbiJPChtFbmNvZGVSZWZ1c2FsVmVyZGljdFJlcXVlc3QSMAoHdmVyZGljdBgBIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5SZWZ1c2FsVmVyZGljdCI0ChxJbnNwZWN0UmVmdXNhbFZlcmRpY3RSZXF1ZXN0EhQKDHZlcmRpY3RfdXNkYRgBIAEoDCI6Cg9SZWFkQmxvYlJlcXVlc3QSDAoEcmVwbxgBIAEoCRILCgNvaWQYAiABKAkSDAoEcGF0aBgDIAEoCSI0ChFSZXNvbHZlUmVmUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKCXJlZmVyZW5jZRgCIAEoCSIvCg9MaXN0UmVmc1JlcXVlc3QSDAoEcmVwbxgBIAEoCRIOCgZwcmVmaXgYAiABKAkiQgoPV3JpdGVSZWZSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoJcmVmZXJlbmNlGAIgASgJEg4KBnRhcmdldBgDIAEoCSIzChBEZWxldGVSZWZSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoJcmVmZXJlbmNlGAIgASgJIikKCE1ldGFGaWxlEgwKBHBhdGgYASABKAkSDwoHY29udGVudBgCIAEoDCKuAQoWV3JpdGVNZXRhQ29tbWl0UmVxdWVzdBIMCgRyZXBvGAEgASgJEg8KB3BhcmVudHMYAiADKAkSKAoFZmlsZXMYAyADKAsyGS5ub21vcy5rZXJuZWwudjEuTWV0YUZpbGUSDwoHbWVzc2FnZRgEIAEoCRIUCgx0aW1lX3NlY29uZHMYBSABKBISFgoJcmVmZXJlbmNlGAYgASgJSACIAQFCDAoKX3JlZmVyZW5jZSJnChVMYXdDbG9zdXJlSW5mb1JlcXVlc3QSFAoMY2xvc3VyZV9maWxlGAEgASgJEjgKCmNhcGFiaWxpdHkYAiABKA4yJC5ub21vcy5rZXJuZWwudjEuS2VybmVsTGF3Q2FwYWJpbGl0eSKHAQoXQ2hlY2twb2ludEV4cG9ydFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIhChRzdGFnZWRfZnJvbnRpZXJfZmlsZRgCIAEoCUgAiAEBQhcKFV9zdGFnZWRfZnJvbnRpZXJfZmlsZSLpAQoXQ2hlY2twb2ludEltcG9ydFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBISCghmcm9udGllchgCIAEoDEgAEh4KFHN0YWdlZF9mcm9udGllcl9maWxlGAYgASgJSAASEwoGY3Vyc29yGAMgASgJSAGIAQESFwoKc3RhdGVfcm9vdBgEIAEoCUgCiAEBEg0KBXNwYW5zGAUgASgIQhEKD2Zyb250aWVyX3NvdXJjZUIJCgdfY3Vyc29yQg0KC19zdGF0ZV9yb290IjEKFkNhcGFjaXR5UmVzZXJ2ZVJlcXVlc3QSFwoPYWdncmVnYXRlX2NvdW50GAEgASgEIlQKElJlc3RvcmVNYWluUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EgwKBGhlYWQYAiABKAkiaQobUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoJbWFpbl9oZWFkGAIgASgJEhUKDWhpbnRlZF9jb21taXQYAyABKAkSEgoKc3RhdGVfcm9vdBgEIAEoCSL4CQoPQ3VzdG9keVJlc3BvbnNlEjgKCnBhY2tfZGVsdGEYCiABKAsyIi5ub21vcy5rZXJuZWwudjEuUGFja0RlbHRhUmVzcG9uc2VIABI4CgphcHBseV9wYWNrGAsgASgLMiIubm9tb3Mua2VybmVsLnYxLkFwcGx5UGFja1Jlc3BvbnNlSAASOAoKcmVwb19zdGF0cxgMIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXBvU3RhdHNSZXNwb25zZUgAEj4KDWludGVudHNfYWJvdmUYDSABKAsyJS5ub21vcy5rZXJuZWwudjEuSW50ZW50c0Fib3ZlUmVzcG9uc2VIABJACg5pbnNwZWN0X2NoYW5nZRgOIAEoCzImLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q2hhbmdlUmVzcG9uc2VIABJPChZlbmNvZGVfcmVmdXNhbF92ZXJkaWN0GA8gASgLMi0ubm9tb3Mua2VybmVsLnYxLkVuY29kZVJlZnVzYWxWZXJkaWN0UmVzcG9uc2VIABJRChdpbnNwZWN0X3JlZnVzYWxfdmVyZGljdBgQIAEoCzIuLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0UmVmdXNhbFZlcmRpY3RSZXNwb25zZUgAEjYKCXJlYWRfYmxvYhgRIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZWFkQmxvYlJlc3BvbnNlSAASOgoLcmVzb2x2ZV9yZWYYEiABKAsyIy5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVJlZlJlc3BvbnNlSAASNgoJbGlzdF9yZWZzGBMgASgLMiEubm9tb3Mua2VybmVsLnYxLkxpc3RSZWZzUmVzcG9uc2VIABIyCgl3cml0ZV9yZWYYFCABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkSAASMwoKZGVsZXRlX3JlZhgVIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWRIABJFChF3cml0ZV9tZXRhX2NvbW1pdBgWIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5Xcml0ZU1ldGFDb21taXRSZXNwb25zZUgAEkMKEGxhd19jbG9zdXJlX2luZm8YFyABKAsyJy5ub21vcy5rZXJuZWwudjEuTGF3Q2xvc3VyZUluZm9SZXNwb25zZUgAEkYKEWNoZWNrcG9pbnRfZXhwb3J0GBggASgLMikubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRFeHBvcnRSZXNwb25zZUgAEkYKEWNoZWNrcG9pbnRfaW1wb3J0GBkgASgLMikubm9tb3Mua2VybmVsLnYxLkNoZWNrcG9pbnRJbXBvcnRSZXNwb25zZUgAEkQKEGNhcGFjaXR5X3Jlc2VydmUYGiABKAsyKC5ub21vcy5rZXJuZWwudjEuQ2FwYWNpdHlSZXNlcnZlUmVzcG9uc2VIABI8CgxyZXN0b3JlX21haW4YGyABKAsyJC5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5SZXNwb25zZUgAEk8KFnJlc29sdmVfc3RhdGVfcG9zaXRpb24YHCABKAsyLS5ub21vcy5rZXJuZWwudjEuUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXNwb25zZUgAQgsKCW9wZXJhdGlvbiIwChFQYWNrRGVsdGFSZXNwb25zZRIMCgRwYWNrGAEgASgMEg0KBWJ5dGVzGAIgASgEIjwKEUFwcGx5UGFja1Jlc3BvbnNlEhQKDG9iamVjdF9jb3VudBgBIAEoBBIRCglwYWNrX2hhc2gYAiABKAkipwEKEVJlcG9TdGF0c1Jlc3BvbnNlEhMKC3RvdGFsX2J5dGVzGAEgASgEEhQKDG9iamVjdF9ieXRlcxgCIAEoBBIVCg1sb29zZV9vYmplY3RzGAMgASgEEhMKC2xvb3NlX2J5dGVzGAQgASgEEhIKCnBhY2tfZmlsZXMYBSABKAQSEgoKcGFja19ieXRlcxgGIAEoBBITCgtpbmRleF9ieXRlcxgHIAEoBCLiAQoMSW50ZW50UmVjb3JkEgsKA29pZBgBIAEoCRIRCglpbnRlbnRfaWQYAiABKAkSDgoGZG9tYWluGAMgASgJEhEKCWRpcmVjdGl2ZRgEIAEoCRITCgtjaGFuZ2VfdXNkYRgFIAEoDBIuCghzZW1hbnRpYxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBJKChV0cmFuc3BvcnRfcmVxdWlyZW1lbnQYByABKA4yKy5ub21vcy5rZXJuZWwudjEuSW50ZW50VHJhbnNwb3J0UmVxdWlyZW1lbnQiRgoUSW50ZW50c0Fib3ZlUmVzcG9uc2USLgoHaW50ZW50cxgBIAMoCzIdLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRSZWNvcmQiQgoTTm9taW5hbENhbGxJZGVudGl0eRITCgtkb21haW5fcGF0aBgBIAEoCRIWCg5kaXJlY3RpdmVfcGF0aBgCIAEoCSKIAQoYTGlmZWN5Y2xlSW5zdGFsbElkZW50aXR5Eh8KF3RhcmdldF9jbG9zdXJlX2lkZW50aXR5GAEgASgJEhQKDGluc3RhbGxlZF9ieRgCIAEoCRI1CgVwaGFzZRgDIAEoDjImLm5vbW9zLmtlcm5lbC52MS5MaWZlY3ljbGVJbnN0YWxsUGhhc2UiWgodV29ya3NwYWNlUmVzaWRlbmN5UmVxdWlyZW1lbnQSEQoJd29ya3NwYWNlGAEgASgJEhMKC3NvdXJjZV9oZWFkGAIgASgJEhEKCWZvbGRfcm9vdBgDIAEoCSK0AgoVSW5zcGVjdENoYW5nZVJlc3BvbnNlEi4KCHNlbWFudGljGAEgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EhEKCWludGVudF9pZBgCIAEoCRIyCgRjYWxsGAMgASgLMiQubm9tb3Mua2VybmVsLnYxLk5vbWluYWxDYWxsSWRlbnRpdHkSEAoIYXV0aG9yZWQYBCABKAgSRAoRbGlmZWN5Y2xlX2luc3RhbGwYBSABKAsyKS5ub21vcy5rZXJuZWwudjEuTGlmZWN5Y2xlSW5zdGFsbElkZW50aXR5EkwKFHJlcXVpcmVkX3Jlc2lkZW5jaWVzGAYgAygLMi4ubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVJlc2lkZW5jeVJlcXVpcmVtZW50IkwKHFJlc29sdmVTdGF0ZVBvc2l0aW9uUmVzcG9uc2USGgoNcmVzb2x2ZWRfaGVhZBgBIAEoCUgAiAEBQhAKDl9yZXNvbHZlZF9oZWFkIjQKHEVuY29kZVJlZnVzYWxWZXJkaWN0UmVzcG9uc2USFAoMdmVyZGljdF91c2RhGAEgASgMIlEKHUluc3BlY3RSZWZ1c2FsVmVyZGljdFJlc3BvbnNlEjAKB3ZlcmRpY3QYASABKAsyHy5ub21vcy5rZXJuZWwudjEuUmVmdXNhbFZlcmRpY3QiLwoQUmVhZEJsb2JSZXNwb25zZRINCgVmb3VuZBgBIAEoCBIMCgRibG9iGAIgASgMIi4KElJlc29sdmVSZWZSZXNwb25zZRIQCgNvaWQYASABKAlIAIgBAUIGCgRfb2lkIisKCVJlZlJlY29yZBIRCglyZWZlcmVuY2UYASABKAkSCwoDb2lkGAIgASgJIjwKEExpc3RSZWZzUmVzcG9uc2USKAoEcmVmcxgBIAMoCzIaLm5vbW9zLmtlcm5lbC52MS5SZWZSZWNvcmQiDgoMQWNrbm93bGVkZ2VkIiYKF1dyaXRlTWV0YUNvbW1pdFJlc3BvbnNlEgsKA29pZBgBIAEoCSKDAQoWTGF3Q2xvc3VyZUluZm9SZXNwb25zZRIQCghpZGVudGl0eRgBIAEoCRIZChFyb290X2xvZ2ljYWxfcGF0aBgCIAEoCRITCgthc3NldF9jb3VudBgDIAEoBBISCgpwcmltX2NvdW50GAQgASgEEhMKC2RvbWFpbl9rZXlzGAUgAygJIu8CChhDaGVja3BvaW50RXhwb3J0UmVzcG9uc2USDQoFZW1wdHkYASABKAgSEwoGY3Vyc29yGAIgASgJSACIAQESEAoIZnJvbnRpZXIYAyABKAwSFwoKc3RhdGVfcm9vdBgEIAEoCUgBiAEBEhIKCnN0YXRlX3RyZWUYBSABKAgSDgoGcGlubmVkGAYgASgIEhsKE3JlYWRfaW5kZXhfc25hcHNob3QYByABKAgSIwobcmVhZF9pbmRleF9zbmFwc2hvdF9wZW5kaW5nGAggASgIEiQKF3JlYWRfaW5kZXhfc3FsaXRlX2J5dGVzGAkgASgESAKIAQESJQoYcmVhZF9pbmRleF9jdXN0b2R5X2J5dGVzGAogASgESAOIAQFCCQoHX2N1cnNvckINCgtfc3RhdGVfcm9vdEIaChhfcmVhZF9pbmRleF9zcWxpdGVfYnl0ZXNCGwoZX3JlYWRfaW5kZXhfY3VzdG9keV9ieXRlcyKeAgoYQ2hlY2twb2ludEltcG9ydFJlc3BvbnNlEhAKCHJlc3RvcmVkGAEgASgIEhMKBnJlYXNvbhgCIAEoCUgAiAEBEhcKD2Zyb250aWVyX3NlZWRlZBgDIAEoCBIlCh1mcm9udGllcl92ZXJpZmljYXRpb25fcGVuZGluZxgEIAEoCBIXCg9hZ2dyZWdhdGVfY291bnQYBSABKAQSKwoFc3BhbnMYBiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEwoGY3Vyc29yGAcgASgJSAGIAQESEQoJcmVhZF9vbmx5GAggASgIEhcKD2xhenlfcmVhZF9pbmRleBgJIAEoCEIJCgdfcmVhc29uQgkKB19jdXJzb3IiSgoXQ2FwYWNpdHlSZXNlcnZlUmVzcG9uc2USFwoPYWdncmVnYXRlX2NvdW50GAEgASgEEhYKDnJlc2VydmVkX2J5dGVzGAIgASgEIvkCChBSZXN0b3JlTWFpblNwYW5zEhAKCHRvdGFsX3VzGAEgASgEEhoKEmxpdmVfcmVmX2xvb2t1cF91cxgCIAEoBBIYChB0YXJnZXRfZGVjb2RlX3VzGAMgASgEEiQKHGN1c3RvZHlfY29tcGxldGVuZXNzX3JlYWRfdXMYBCABKAQSGQoRcXVhcmFudGluZV9yZWZfdXMYBSABKAQSJQodY2hhaW5fc2lnbmF0dXJlX2xhd19yZXBsYXlfdXMYBiABKAQSGQoRdmVyZGljdF9kZWNvZGVfdXMYByABKAQSIwobcHJvbW90ZV9hbmRfY2xlYW51cF9yZWZzX3VzGAggASgEEhsKE2Zyb250aWVyX3JlYnVpbGRfdXMYCSABKAQSGQoRZnJvbnRpZXJfc3RvcmVfdXMYCiABKAQSPQoMdmVyaWZpY2F0aW9uGAsgASgLMicubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluRGlhZ25vc3RpY3MipAEKE1Jlc3RvcmVNYWluUmVzcG9uc2USDAoEaGVhZBgBIAEoCRIQCgh2ZXJpZmllZBgCIAEoCBIMCgR3YWxrGAMgASgJEjAKBXNwYW5zGAQgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlc3RvcmVNYWluU3BhbnMSLQoHdmVyZGljdBgFIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCKbAgoKTm9tb3NWYWx1ZRIlCgRudWxsGAEgASgLMhUubm9tb3Mua2VybmVsLnYxLk51bGxIABIRCgdib29sZWFuGAIgASgISAASGAoOc2lnbmVkX2ludGVnZXIYAyABKBJIABIaChB1bnNpZ25lZF9pbnRlZ2VyGAQgASgESAASGAoOZmxvYXRpbmdfcG9pbnQYBSABKAFIABIOCgR0ZXh0GAYgASgJSAASDwoFYnl0ZXMYByABKAxIABIqCgRsaXN0GAggASgLMhoubm9tb3Mua2VybmVsLnYxLk5vbW9zTGlzdEgAEi4KBm9iamVjdBgJIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEgAQgYKBGtpbmQiBgoETnVsbCI4CglOb21vc0xpc3QSKwoGdmFsdWVzGAEgAygLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWUikwEKC05vbW9zU3RydWN0EjgKBmZpZWxkcxgBIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdC5GaWVsZHNFbnRyeRpKCgtGaWVsZHNFbnRyeRILCgNrZXkYASABKAkSKgoFdmFsdWUYAiABKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZToCOAEq6RIKEUtlcm5lbFJlZnVzYWxDb2RlEiMKH0tFUk5FTF9SRUZVU0FMX0NPREVfVU5TUEVDSUZJRUQQABIlCiFLRVJORUxfUkVGVVNBTF9DT0RFX0JBRF9TSUdOQVRVUkUQARIkCiBLRVJORUxfUkVGVVNBTF9DT0RFX1VOQVVUSE9SSVpFRBACEicKI0tFUk5FTF9SRUZVU0FMX0NPREVfUE9MSUNZX0RJU0FCTEVEEAMSKgomS0VSTkVMX1JFRlVTQUxfQ09ERV9VTkNFUlRJRklFRF9QT0xJQ1kQBBIjCh9LRVJORUxfUkVGVVNBTF9DT0RFX1JFRkVSRU5USUFMEAUSLworS0VSTkVMX1JFRlVTQUxfQ09ERV9QT0lOVF9TVEFURV9VTkFWQUlMQUJMRRAGEiQKIEtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQX0VYQ0VFREVEEAcSLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBfQ09VTlRfVU5BVkFJTEFCTEUQCBIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX0VWSURFTkNFX1VOQkFDS0VEEAkSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9PUlBIQU5fUkVDRUlQVBAKEjYKMktFUk5FTF9SRUZVU0FMX0NPREVfUkVDRUlQVF9PTl9URVJNSU5BTF9PQkxJR0FUSU9OEAsSIgoeS0VSTkVMX1JFRlVTQUxfQ09ERV9OT1RfTUlOVEVEEAwSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9ET01BSU5fTElGRUNZQ0xFEA0SKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9UWVBFX1RBR19NSVNNQVRDSBAOEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfUkVUSVJFRF9SRUFEX1NVUkZBQ0UQDxIwCixLRVJORUxfUkVGVVNBTF9DT0RFX0NST1NTX1dPUktTUEFDRV9ERUNMSU5FRBAQEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfQUdHUkVHQVRFX0lOVkFSSUFOVBAREisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfV09SS1NQQUNFX0lOVkFSSUFOVBASEi4KKktFUk5FTF9SRUZVU0FMX0NPREVfQ0FQVFVSRURfUkVBRF9DT05GTElDVBATEjIKLktFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfUkVRVUlSRUQQFBI0CjBLRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1VOREVDTEFSRUQQFRIxCi1LRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX0lOVkFMSUQQFhIvCitLRVJORUxfUkVGVVNBTF9DT0RFX0NPTkZMSUNUX1NOQVBTSE9UX1NUQUxFEBcSMAosS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBUVVJFRF9SRUFEX1VOREVDTEFSRUQQGBItCilLRVJORUxfUkVGVVNBTF9DT0RFX0NBUFRVUkVEX1JFQURfUFJJVkFURRAZEjAKLEtFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9VTkRFQ0xBUkVEEBoSMwovS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1VOVFJVU1RFRF9LRVkQGxI2CjJLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfVU5UUlVTVEVEX1NPVVJDRRAcEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9GT1JHRUQQHRIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfU1RBTEUQHhIuCipLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfT1ZFUlNJWkUQHxI3CjNLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfRElTSE9OT1JFRF9TT1VSQ0UQIBI1CjFLRVJORUxfUkVGVVNBTF9DT0RFX0VRVUlWT0NBVElPTl9FVklERU5DRV9JTlZBTElEECESMwovS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RBVElPTl9SRUNFSVBUX0lOVkFMSUQQIhIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0tFWV9ST1NURVJfTUlTTUFUQ0gQIxIvCitLRVJORUxfUkVGVVNBTF9DT0RFX0tFWV9FUE9DSF9OT1RfTU9OT1RPTklDECQSKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9XUklURV9FUE9DSF9TVEFMRRAlEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfRU5WRUxPUEVfU0lEX01JU01BVENIECYSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9SRVZPS0VEX01FTUJFUl9SRVNVUlJFQ1RFRBAnEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfRk9SR0VEX1BSSU5DSVBBTBAoEigKJEtFUk5FTF9SRUZVU0FMX0NPREVfT1dORURfS0VZX0FOQ0hPUhApEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfT1dORURfUkVDT1ZFUlkQKhIsCihLRVJORUxfUkVGVVNBTF9DT0RFX1NVUkZBQ0VEX0JBU0lTX0FIRUFEECsSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9TSUdORVJfRVBPQ0hfT1VUX09GX1dJTkRPVxAsEiYKIktFUk5FTF9SRUZVU0FMX0NPREVfRVZPTFZFX1JFRlVTRUQQLRIrCidLRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEFUSU9OX0lOVkFMSUQQLhItCilLRVJORUxfUkVGVVNBTF9DT0RFX1BBUkVOVF9ESURfTk9UX0FUVEVTVBAvEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfQ0VSVF9DSEFJTl9CUk9LRU4QMBIqCiZLRVJORUxfUkVGVVNBTF9DT0RFX05PVF9ST09URURfQVRfUk9PVBAxEioKJktFUk5FTF9SRUZVU0FMX0NPREVfREVMRUdBVElPTl9JTlZBTElEEDISJQohS0VSTkVMX1JFRlVTQUxfQ09ERV9QTEFOX1JFSkVDVEVEEDMqigEKD1ZlcmlmeUNoYWluV2FsaxIhCh1WRVJJRllfQ0hBSU5fV0FMS19VTlNQRUNJRklFRBAAEhoKFlZFUklGWV9DSEFJTl9XQUxLX0ZVTEwQARIcChhWRVJJRllfQ0hBSU5fV0FMS19TVUZGSVgQAhIaChZWRVJJRllfQ0hBSU5fV0FMS19NRU1PEAMqhQwKDlF1ZXJ5T3BlcmF0aW9uEh8KG1FVRVJZX09QRVJBVElPTl9VTlNQRUNJRklFRBAAEhwKGFFVRVJZX09QRVJBVElPTl9FWFRSRU1VTRABEiUKIVFVRVJZX09QRVJBVElPTl9QRU5ESU5HX0NPTkZMSUNUUxACEiwKKFFVRVJZX09QRVJBVElPTl9QRU5ESU5HX0NPTkZMSUNUX1NVTU1BUlkQAxIgChxRVUVSWV9PUEVSQVRJT05fUkVBRF9QT1NUVVJFEAQSHwobUVVFUllfT1BFUkFUSU9OX0NVUlJFTlRfTEFXEAUSIwofUVVFUllfT1BFUkFUSU9OX0lOVEVSRkFDRV9PRkZFUhAGEicKI1FVRVJZX09QRVJBVElPTl9SRUxBVElPTl9HQVRFX09GRkVSEAcSHQoZUVVFUllfT1BFUkFUSU9OX1NDRU5FX0xBVxAIEiEKHVFVRVJZX09QRVJBVElPTl9JTlNUQUxMRURfTEFXEAkSHAoYUVVFUllfT1BFUkFUSU9OX0RFU0NSSUJFEAoSIAocUVVFUllfT1BFUkFUSU9OX0tFUk5FTF9TVEFNUBALEiMKH1FVRVJZX09QRVJBVElPTl9ERVZFTE9QRVJfU1BBTlMQDBIpCiVRVUVSWV9PUEVSQVRJT05fREVDTEFSRURfQ0FQQUJJTElUSUVTEA0SHQoZUVVFUllfT1BFUkFUSU9OX1JFQURJTkVTUxAOEiQKIFFVRVJZX09QRVJBVElPTl9QUk9KRUNUSU9OX1NUQVRTEA8SJQohUVVFUllfT1BFUkFUSU9OX01FTU9SWV9EUk9QX1BST0JFEBASGAoUUVVFUllfT1BFUkFUSU9OX1dBUk0QERIbChdRVUVSWV9PUEVSQVRJT05fUkVGUkVTSBASEiAKHFFVRVJZX09QRVJBVElPTl9WRVJJRllfQ0hBSU4QExIlCiFRVUVSWV9PUEVSQVRJT05fSElTVE9SWV9QUkVGTElHSFQQFBIZChVRVUVSWV9PUEVSQVRJT05fUk9VVEUQFRIYChRRVUVSWV9PUEVSQVRJT05fTUlOVBAWEiEKHVFVRVJZX09QRVJBVElPTl9DUllQVE9fS0VZR0VOEBcSJQohUVVFUllfT1BFUkFUSU9OX0NSWVBUT19TRUFMX0ZJRUxEEBgSLAooUVVFUllfT1BFUkFUSU9OX0NSWVBUT19CTElORF9JTkRFWF9UT0tFThAZEioKJlFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfU0NPUEVfS0VZEBoSLworUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9ERVZJQ0VfUkVRVUVTVBAbEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9BUFBST1ZBTBAcEjEKLVFVRVJZX09QRVJBVElPTl9DUllQVE9fT1dORURfUFJFUEFSRV9SRUNPVkVSWRAdEiMKH1FVRVJZX09QRVJBVElPTl9DUllQVE9fV1JBUF9LRVkQHhIlCiFRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1VOV1JBUF9LRVkQHxIhCh1RVUVSWV9PUEVSQVRJT05fQVVUSE9SX0tFWUdFThAgEiQKIFFVRVJZX09QRVJBVElPTl9BVFRFU1RBVElPTl9TSUdOECESIAocUVVFUllfT1BFUkFUSU9OX1JFQ0VJUFRfUEFUSBAiEh0KGVFVRVJZX09QRVJBVElPTl9DRVJUX1NJR04QIxIlCiFRVUVSWV9PUEVSQVRJT05fQklSVEhfVFJVU1RfU1RBVEUQJBIhCh1RVUVSWV9PUEVSQVRJT05fRVJBX0NFUlRfU0lHThAlEigKJFFVRVJZX09QRVJBVElPTl9ERUxFR0FUSU9OX0NFUlRfU0lHThAmEikKJVFVRVJZX09QRVJBVElPTl9DQU5PTklDQUxJWkVfRlJPTlRJRVIQJxIrCidRVUVSWV9PUEVSQVRJT05fQ0FOT05JQ0FMSVpFX1BST0pFQ1RJT04QKCpsChNLZXJuZWxMYXdDYXBhYmlsaXR5EiUKIUtFUk5FTF9MQVdfQ0FQQUJJTElUWV9VTlNQRUNJRklFRBAAEi4KKktFUk5FTF9MQVdfQ0FQQUJJTElUWV9TVEFHRV9aRVJPX0JPT1RTVFJBUBABKqgBChpJbnRlbnRUcmFuc3BvcnRSZXF1aXJlbWVudBIsCihJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX1VOU1BFQ0lGSUVEEAASLgoqSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9TRUFMRURfQ0hBTkdFEAESLAooSU5URU5UX1RSQU5TUE9SVF9SRVFVSVJFTUVOVF9DT01NSVRfVFJFRRACKokBChVMaWZlY3ljbGVJbnN0YWxsUGhhc2USJwojTElGRUNZQ0xFX0lOU1RBTExfUEhBU0VfVU5TUEVDSUZJRUQQABIiCh5MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9BQ1RJVkUQARIjCh9MSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9QRU5ESU5HEAIyWQoSTm9tb3NLZXJuZWxTZXJ2aWNlEkMKBENhbGwSHC5ub21vcy5rZXJuZWwudjEuQ2FsbFJlcXVlc3QaHS5ub21vcy5rZXJuZWwudjEuQ2FsbFJlc3BvbnNlYgZwcm90bzM");
|
|
5344
|
+
var file_nomos_kernel_v1_kernel = /* @__PURE__ */ fileDesc("Chxub21vcy9rZXJuZWwvdjEva2VybmVsLnByb3RvEg9ub21vcy5rZXJuZWwudjEimAMKC0NhbGxSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SEgoKcmVxdWVzdF9pZBgCIAEoCRIsCgRvcGVuGAogASgLMhwubm9tb3Mua2VybmVsLnYxLk9wZW5SZXF1ZXN0SAASLgoFb2ZmZXIYCyABKAsyHS5ub21vcy5rZXJuZWwudjEuT2ZmZXJSZXF1ZXN0SAASLgoFcXVlcnkYDCABKAsyHS5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXF1ZXN0SAASMAoGb3V0Ym94GA0gASgLMh4ubm9tb3Mua2VybmVsLnYxLk91dGJveFJlcXVlc3RIABIsCgRzeW5jGA4gASgLMhwubm9tb3Mua2VybmVsLnYxLlN5bmNSZXF1ZXN0SAASMgoHY3VzdG9keRgPIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVxdWVzdEgAEiwKBHRlc3QYECABKAsyHC5ub21vcy5rZXJuZWwudjEuVGVzdFJlcXVlc3RIAEILCglvcGVyYXRpb24iywMKDENhbGxSZXNwb25zZRIYChBwcm90b2NvbF92ZXJzaW9uGAEgASgNEhIKCnJlcXVlc3RfaWQYAiABKAkSKwoHZmFpbHVyZRgKIAEoCzIYLm5vbW9zLmtlcm5lbC52MS5GYWlsdXJlSAASLQoEb3BlbhgLIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5PcGVuUmVzcG9uc2VIABIvCgVvZmZlchgMIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5PZmZlclJlc3BvbnNlSAASLwoFcXVlcnkYDSABKAsyHi5ub21vcy5rZXJuZWwudjEuUXVlcnlSZXNwb25zZUgAEjEKBm91dGJveBgOIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5PdXRib3hSZXNwb25zZUgAEi0KBHN5bmMYDyABKAsyHS5ub21vcy5rZXJuZWwudjEuU3luY1Jlc3BvbnNlSAASMwoHY3VzdG9keRgQIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5DdXN0b2R5UmVzcG9uc2VIABItCgR0ZXN0GBEgASgLMh0ubm9tb3Mua2VybmVsLnYxLlRlc3RSZXNwb25zZUgAQgkKB291dGNvbWUiVwoHRmFpbHVyZRIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSLQoHZGV0YWlscxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCI8CgxPcGVuUmVzcG9uc2USLAoGcmVzdWx0GAEgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IsMCCg1PZmZlclJlc3BvbnNlEjIKCGFkbWl0dGVkGAEgASgLMh4ubm9tb3Mua2VybmVsLnYxLk9mZmVyQWRtaXR0ZWRIABIwCgdyZWZ1c2VkGAIgASgLMh0ubm9tb3Mua2VybmVsLnYxLk9mZmVyUmVmdXNlZEgAEjsKDWRlYWRfbGV0dGVyZWQYAyABKAsyIi5ub21vcy5rZXJuZWwudjEuT2ZmZXJEZWFkTGV0dGVyZWRIABI4CgtxdWFyYW50aW5lZBgEIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5PZmZlclF1YXJhbnRpbmVkSAASSgoVYmxvY2tlZF9vbl9kZXBlbmRlbmN5GAUgASgLMikubm9tb3Mua2VybmVsLnYxLk9mZmVyQmxvY2tlZE9uRGVwZW5kZW5jeUgAQgkKB291dGNvbWUiPQoNT2ZmZXJBZG1pdHRlZBIsCgZyZXN1bHQYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QilgEKDE9mZmVyUmVmdXNlZBIVCghvZmZlcl9pZBgBIAEoCUgAiAEBEi8KB3JlZnVzYWwYAiABKAsyHi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbBIxCgtkaWFnbm9zdGljcxgDIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdEILCglfb2ZmZXJfaWQiegoRT2ZmZXJEZWFkTGV0dGVyZWQSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZyZWFzb24YAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIq4BChBPZmZlclF1YXJhbnRpbmVkEhUKCG9mZmVyX2lkGAEgASgJSACIAQESGQoRYXV0aG9yZWRfbGF3X2hhc2gYAiABKAkSGAoQY3VycmVudF9sYXdfaGFzaBgDIAEoCRIOCgZyZWFzb24YBCABKAkSMQoLZGlhZ25vc3RpY3MYBSABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIoEBChhPZmZlckJsb2NrZWRPbkRlcGVuZGVuY3kSFQoIb2ZmZXJfaWQYASABKAlIAIgBARIOCgZkZXRhaWwYAiABKAkSMQoLZGlhZ25vc3RpY3MYAyABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3RCCwoJX29mZmVyX2lkIoEBCg1LZXJuZWxSZWZ1c2FsEjAKBGNvZGUYASABKA4yIi5ub21vcy5rZXJuZWwudjEuS2VybmVsUmVmdXNhbENvZGUSDwoHbWVzc2FnZRgCIAEoCRItCgdkZXRhaWxzGAMgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0Iu8CCg1RdWVyeVJlc3BvbnNlEiwKBXZhbHVlGAEgASgLMhsubm9tb3Mua2VybmVsLnYxLk5vbW9zVmFsdWVIABJBChBhcHBsaWNhdGlvbl9qc29uGAIgASgLMiUubm9tb3Mua2VybmVsLnYxLkFwcGxpY2F0aW9uSnNvblZhbHVlSAASSgoTYXV0aG9yaXphdGlvbl9jaGVjaxgKIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uQ2hlY2tSZXNwb25zZUgAEkwKFGF1dGhvcml6YXRpb25fZXhwYW5kGAsgASgLMiwubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25FeHBhbmRSZXNwb25zZUgAEkkKGHZlcmlmeV9jaGFpbl9kaWFnbm9zdGljcxgUIAEoCzInLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkRpYWdub3N0aWNzQggKBnJlc3VsdCLnAQoTVmVyaWZ5Q2hhaW5TdGVwU3BhbhINCgVpbmRleBgBIAEoBBISCgpjb21taXRfb2lkGAIgASgJEg4KBmRvbWFpbhgDIAEoCRIRCglkaXJlY3RpdmUYBCABKAkSEAoIdG90YWxfdXMYBSABKAQSNgoGcGhhc2VzGAYgASgLMiYubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFBoYXNlcxJACg5lbmdpbmVfdGltaW5ncxgHIAMoCzIoLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbkVuZ2luZVRpbWluZyKYAgoVVmVyaWZ5Q2hhaW5TdGVwUGhhc2VzEh4KFnJ1bnRpbWVfbGF3X3JlZnJlc2hfdXMYASABKAQSEwoLbWFuaWZlc3RfdXMYAiABKAQSGQoRbGF3X3Jlc29sdXRpb25fdXMYAyABKAQSHQoVbWFuYWdlZF90cmFuc2l0aW9uX3VzGAQgASgEEhQKDHByaW5jaXBhbF91cxgFIAEoBBIUCgxldm9sdXRpb25fdXMYBiABKAQSGgoSY29sb2NhdGVkX3JlYWRzX3VzGAcgASgEEiEKGXR5cGVkX2luc3RhbGxfdmVyaWZpZXJfdXMYCCABKAQSFAoMYWRtaXNzaW9uX3VzGAkgASgEEg8KB2ZvbGRfdXMYCiABKAQi0AQKFlZlcmlmeUNoYWluRGlhZ25vc3RpY3MSLgoEd2FsaxgBIAEoDjIgLm5vbW9zLmtlcm5lbC52MS5WZXJpZnlDaGFpbldhbGsSEAoIdG90YWxfdXMYAiABKAQSGwoTcmVmZXJlbmNlX2xvb2t1cF91cxgDIAEoBBIaChJyZXBvc2l0b3J5X29wZW5fdXMYBCABKAQSFQoNY2hhaW5fcmVhZF91cxgFIAEoBBIWCg5lbmdpbmVfaW5pdF91cxgGIAEoBBIYChB0aW1lbGluZV9yZWFkX3VzGAcgASgEEhgKEGxhd19oeWRyYXRpb25fdXMYCCABKAQSGwoTcmVjb3ZlcnlfcHJlc2Nhbl91cxgJIAEoBBIYChBmb2xkX2Zyb250aWVyX3VzGAogASgEEjMKBXN0ZXBzGAsgAygLMiQubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluU3RlcFNwYW4SQAoOZW5naW5lX3RpbWluZ3MYDCADKAsyKC5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5FbmdpbmVUaW1pbmcSTQoVbGF3X2h5ZHJhdGlvbl90aW1pbmdzGA0gAygLMi4ubm9tb3Mua2VybmVsLnYxLlZlcmlmeUNoYWluTGF3SHlkcmF0aW9uVGltaW5nEhkKEWxhd19jbG9zdXJlX2NvdW50GA4gASgEEh4KFmxhd19jbG9zdXJlX2NhY2hlX2hpdHMYDyABKAQSIAoYbGF3X2Nsb3N1cmVfY2FjaGVfbWlzc2VzGBAgASgEIjoKF1ZlcmlmeUNoYWluRW5naW5lVGltaW5nEg0KBXBoYXNlGAEgASgJEhAKCHRvdGFsX3VzGAIgASgEIkAKHVZlcmlmeUNoYWluTGF3SHlkcmF0aW9uVGltaW5nEg0KBXBoYXNlGAEgASgJEhAKCHRvdGFsX3VzGAIgASgEIiQKFEFwcGxpY2F0aW9uSnNvblZhbHVlEgwKBHV0ZjgYASABKAwinwIKDU91dGJvdW5kT2ZmZXISCgoCaWQYASABKAkSEwoLZGVzdGluYXRpb24YAiABKAkSFAoMc2VhbGVkX29mZmVyGAMgASgMEhQKDGNvbnRlbnRfdHlwZRgEIAEoCRIYChBzb3VyY2Vfd29ya3NwYWNlGAUgASgJEhQKDGN1c3RvZHlfaGVhZBgGIAEoCRIXCg9jYXVzZWRfYnlfb2ZmZXIYByABKAkSGwoTc2NoZWR1bGVkX2F0X21pbGxpcxgIIAEoBBIaChJkZWFkbGluZV9hdF9taWxsaXMYCSABKAQSFAoMY3VzdG9keV9wYXRoGAogASgJEhMKC2N1c3RvZHlfb2lkGAsgASgJEhQKDGRlbGl2ZXJ5X3JlZhgMIAEoCSJ4Cg5PdXRib3hSZXNwb25zZRIuCgZvZmZlcnMYASADKAsyHi5ub21vcy5rZXJuZWwudjEuT3V0Ym91bmRPZmZlchIfChJuZXh0X2R1ZV9hdF9taWxsaXMYAiABKARIAIgBAUIVChNfbmV4dF9kdWVfYXRfbWlsbGlzIjwKDFN5bmNSZXNwb25zZRIsCgZyZXN1bHQYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QiQgoPV29ya3NwYWNlVGFyZ2V0EgwKBHJlcG8YASABKAkSEQoJd29ya3NwYWNlGAIgASgJEg4KBmJyYW5jaBgDIAEoCSJOCgtPcGVuUmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0Eg0KBXNwYW5zGAIgASgIImEKDURpcmVjdGl2ZUNhbGwSDgoGZG9tYWluGAEgASgJEhEKCWRpcmVjdGl2ZRgCIAEoCRItCgdwYXlsb2FkGAMgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IsACChBBdXRob3JpbmdPcHRpb25zEg0KBWFjdG9yGAEgASgJEhIKCmF1dGhfdG9rZW4YAiABKAwSFQoNYXV0aG9yX3NlY3JldBgDIAEoDBIdChB2YWxpZF9mcm9tX2Vwb2NoGAQgASgESACIAQESHwoScHJpbmNpcGFsX3ZlcmlmaWVkGAUgASgISAGIAQESCwoDcm5nGAYgAygBEhgKEGRlZmVyX3Byb2plY3Rpb24YByABKAgSDQoFc3BhbnMYCCABKAgSDwoHZHJ5X3J1bhgJIAEoCBIQCghzZXF1ZW5jZRgKIAEoBBItCgVjbG9jaxgLIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5DYXB0dXJlZENsb2NrQhMKEV92YWxpZF9mcm9tX2Vwb2NoQhUKE19wcmluY2lwYWxfdmVyaWZpZWQiSgoNQ2FwdHVyZWRDbG9jaxIXCg9waHlzaWNhbF9taWxsaXMYASABKAQSDwoHbG9naWNhbBgCIAEoDRIPCgdyZXBsaWNhGAMgASgEIsMDChBCaXJ0aENlcnRpZmljYXRlEg0KBWNoaWxkGAEgASgJEg8KB2ZvdW5kZXIYAiABKAkSEAoIdmVyaWZpZWQYAyABKAgSEgoKcGFyZW50X2tleRgEIAEoDBIRCglwYXJlbnRfaWQYBSABKAkSDQoFZXBvY2gYBiABKAMSEQoJc2lnbmF0dXJlGAcgASgMEhkKDHZlcmlmaWVkX3ZpYRgIIAEoCUgAiAEBEhYKCWlkcF90b2tlbhgJIAEoCUgBiAEBEhsKDmNhcHR1cmVkX2Nsb2NrGAogASgDSAKIAQESIQoUYXV0aF9wcm92aWRlcl9pc3N1ZXIYCyABKAlIA4gBARIfChJhdXRoX3Byb3ZpZGVyX2p3a3MYDCABKAlIBIgBARIjChZhdXRoX3Byb3ZpZGVyX2F1ZGllbmNlGA0gASgJSAWIAQFCDwoNX3ZlcmlmaWVkX3ZpYUIMCgpfaWRwX3Rva2VuQhEKD19jYXB0dXJlZF9jbG9ja0IXChVfYXV0aF9wcm92aWRlcl9pc3N1ZXJCFQoTX2F1dGhfcHJvdmlkZXJfandrc0IZChdfYXV0aF9wcm92aWRlcl9hdWRpZW5jZSKcBAoMT2ZmZXJSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSLgoEY2FsbBgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5EaXJlY3RpdmVDYWxsSAASHAoSc2VhbGVkX2NoYW5nZV91c2RhGAcgASgMSAASNAoJYXV0aG9yaW5nGAMgASgLMiEubm9tb3Mua2VybmVsLnYxLkF1dGhvcmluZ09wdGlvbnMSEAoIbGF3X3VzZHoYBCABKAwSMwoMYXR0ZXN0YXRpb25zGAUgAygLMh0ubm9tb3Mua2VybmVsLnYxLkF0dGVzdGVkUmVhZBI9ChJjb25mbGljdF9zbmFwc2hvdHMYBiADKAsyIS5ub21vcy5rZXJuZWwudjEuQ29uZmxpY3RTbmFwc2hvdBIaChJleGVjdXRpb25fbGF3X3VzZHoYCCABKAwSIAoTY29udHJvbGxlcl9sYXdfaGFzaBgJIAEoCUgBiAEBEh0KEGNhbmRpZGF0ZV9jb21taXQYCiABKAlIAogBARI8ChFiaXJ0aF9jZXJ0aWZpY2F0ZRgLIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5CaXJ0aENlcnRpZmljYXRlQggKBmludGVudEIWChRfY29udHJvbGxlcl9sYXdfaGFzaEITChFfY2FuZGlkYXRlX2NvbW1pdCKTAQoMQXR0ZXN0ZWRSZWFkEhAKCHF1ZXJ5X2lkGAEgASgJEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBIrCgZyZXN1bHQYAyABKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZRITCgthdHRlc3RhdGlvbhgEIAEoDCJ1ChBDb25mbGljdFNuYXBzaG90EhYKDmFnZ3JlZ2F0ZV90eXBlGAEgASgJEhQKDGFnZ3JlZ2F0ZV9pZBgCIAEoCRINCgVmaWVsZBgDIAEoCRIVCg10YXJnZXRfc2NoZW1hGAQgASgJEg0KBXRva2VuGAUgASgJIuUFCgxRdWVyeVJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBIyCglhdXRob3JpdHkYAiABKAsyHy5ub21vcy5rZXJuZWwudjEuUXVlcnlBdXRob3JpdHkSDQoFc3BhbnMYAyABKAgSKgoEcm93cxgKIAEoCzIaLm5vbW9zLmtlcm5lbC52MS5Sb3dzUXVlcnlIABIqCgRwYWdlGAsgASgLMhoubm9tb3Mua2VybmVsLnYxLlBhZ2VRdWVyeUgAEisKBWJ5X2lkGAwgASgLMhoubm9tb3Mua2VybmVsLnYxLkJ5SWRRdWVyeUgAEjkKDHJlc29sdmVfcmVmcxgNIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmc1F1ZXJ5SAASRQoScmVmZXJlbmNlX3ZlcnNpb25zGA4gASgLMicubm9tb3Mua2VybmVsLnYxLlJlZmVyZW5jZVZlcnNpb25zUXVlcnlIABIsCgVjb3VudBgPIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5UYWxseVF1ZXJ5SAASKgoDc3VtGBAgASgLMhsubm9tb3Mua2VybmVsLnYxLlRhbGx5UXVlcnlIABIwCgdzcGF0aWFsGBEgASgLMh0ubm9tb3Mua2VybmVsLnYxLlNwYXRpYWxRdWVyeUgAEiwKBW5hbWVkGBIgASgLMhsubm9tb3Mua2VybmVsLnYxLk5hbWVkUXVlcnlIABJJChNhdXRob3JpemF0aW9uX2NoZWNrGBMgASgLMioubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25DaGVja1JlcXVlc3RIABJLChRhdXRob3JpemF0aW9uX2V4cGFuZBgUIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwYW5kUmVxdWVzdEgAQgcKBXF1ZXJ5IpIBCg5RdWVyeUF1dGhvcml0eRIXCg9wcmluY2lwYWxfY2xhaW0YASABKAkSEgoKYXV0aF90b2tlbhgCIAEoDBIQCghub3dfdW5peBgDIAEoBBIVCg1hdXRob3Jfc2VjcmV0GAQgASgMEioKBGtleXMYBSADKAsyHC5ub21vcy5rZXJuZWwudjEuSW5qZWN0ZWRLZXkiOAoLSW5qZWN0ZWRLZXkSDQoFc2NvcGUYASABKAkSDQoFZXBvY2gYAiABKAQSCwoDa2V5GAMgASgMIlsKCVJvd3NRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJcHJpbmNpcGFsGAMgASgJInkKCVBhZ2VRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSDQoFbGltaXQYAyABKA0SDQoFYWZ0ZXIYBCABKAkSEQoJcHJpbmNpcGFsGAUgASgJIkwKCUJ5SWRRdWVyeRIWCg5hZ2dyZWdhdGVfdHlwZRgBIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAiABKAkSEQoJcHJpbmNpcGFsGAMgASgJIlwKCE5vbW9zUmVmEhEKCXdvcmtzcGFjZRgBIAEoCRIWCg5hZ2dyZWdhdGVfdHlwZRgCIAEoCRIUCgxhZ2dyZWdhdGVfaWQYAyABKAkSDwoHdmVyc2lvbhgEIAEoCSJOChBSZXNvbHZlUmVmc1F1ZXJ5EicKBHJlZnMYASADKAsyGS5ub21vcy5rZXJuZWwudjEuTm9tb3NSZWYSEQoJcHJpbmNpcGFsGAIgASgJIk4KFlJlZmVyZW5jZVZlcnNpb25zUXVlcnkSNAoEcmVmcxgBIAMoCzImLm5vbW9zLmtlcm5lbC52MS5SZWZlcmVuY2VWZXJzaW9uQ2hlY2sihAEKFVJlZmVyZW5jZVZlcnNpb25DaGVjaxIpCgZwaW5uZWQYASABKAsyGS5ub21vcy5rZXJuZWwudjEuTm9tb3NSZWYSKQoGc2VyaWVzGAIgASgLMhkubm9tb3Mua2VybmVsLnYxLk5vbW9zUmVmEhUKDWN1cnJlbnRfZmllbGQYAyABKAkiXAoKVGFsbHlRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJcHJpbmNpcGFsGAMgASgJIl4KDFNwYXRpYWxRdWVyeRIKCgJpZBgBIAEoCRIvCglhcmd1bWVudHMYAiABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJcHJpbmNpcGFsGAMgASgJInEKCk5hbWVkUXVlcnkSMgoJb3BlcmF0aW9uGAEgASgOMh8ubm9tb3Mua2VybmVsLnYxLlF1ZXJ5T3BlcmF0aW9uEi8KCWFyZ3VtZW50cxgCIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdCIvChNBdXRob3JpemF0aW9uT2JqZWN0EgwKBHR5cGUYASABKAkSCgoCaWQYAiABKAkiVAoUQXV0aG9yaXphdGlvblN1YmplY3QSDAoEdHlwZRgBIAEoCRIKCgJpZBgCIAEoCRIVCghyZWxhdGlvbhgDIAEoCUgAiAEBQgsKCV9yZWxhdGlvbiKcAQoYUmVsYXRpb25zaGlwVHVwbGVBZGRyZXNzEjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEAoIcmVsYXRpb24YAiABKAkSNgoHc3ViamVjdBgDIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uU3ViamVjdCKBAQoYQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5EiMKGWN1cnJlbnRfdmVyaWZpZWRfZnJvbnRpZXIYASABKAhIABIZCg9hdF9sZWFzdF9jb21taXQYAiABKAlIABIWCgxleGFjdF9jb21taXQYAyABKAlIAEINCgtyZXF1aXJlbWVudCJmCh1BdXRob3JpemF0aW9uQ29uZGl0aW9uQ29udGV4dBIUCgxjb25kaXRpb25faWQYASABKAkSLwoJYXJndW1lbnRzGAIgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IvcCChlBdXRob3JpemF0aW9uQ2hlY2tSZXF1ZXN0EjYKCHJlc291cmNlGAEgASgLMiQubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25PYmplY3QSEgoKcGVybWlzc2lvbhgCIAEoCRI2CgdzdWJqZWN0GAMgASgLMiUubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25TdWJqZWN0Ej4KC2NvbnNpc3RlbmN5GAQgASgLMikubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25Db25zaXN0ZW5jeRI/Cgdjb250ZXh0GAUgAygLMi4ubm9tb3Mua2VybmVsLnYxLkF1dGhvcml6YXRpb25Db25kaXRpb25Db250ZXh0EiAKE2V4cGVjdGVkX21vZGVsX2hhc2gYBiABKAlIAIgBARIbChNpbmNsdWRlX2V4cGxhbmF0aW9uGAcgASgIQhYKFF9leHBlY3RlZF9tb2RlbF9oYXNoIu0CChpBdXRob3JpemF0aW9uRXhwYW5kUmVxdWVzdBI2CghyZXNvdXJjZRgBIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uT2JqZWN0EhIKCnBlcm1pc3Npb24YAiABKAkSPgoLY29uc2lzdGVuY3kYAyABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbnNpc3RlbmN5Ej8KB2NvbnRleHQYBCADKAsyLi5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkNvbmRpdGlvbkNvbnRleHQSIAoTZXhwZWN0ZWRfbW9kZWxfaGFzaBgFIAEoCUgAiAEBEg0KBWxpbWl0GAYgASgNEhIKBWFmdGVyGAcgASgJSAGIAQESGwoTaW5jbHVkZV9leHBsYW5hdGlvbhgIIAEoCEIWChRfZXhwZWN0ZWRfbW9kZWxfaGFzaEIICgZfYWZ0ZXIivQEKGVJlbGF0aW9uc2hpcFR1cGxlRXZpZGVuY2USOAoFdHVwbGUYASABKAsyKS5ub21vcy5rZXJuZWwudjEuUmVsYXRpb25zaGlwVHVwbGVBZGRyZXNzEhAKCHR1cGxlX2lkGAIgASgJEhoKEmFzc2VydGlvbl9ldmVudF9pZBgDIAEoCRIgChNyZXZvY2F0aW9uX2V2ZW50X2lkGAQgASgJSACIAQFCFgoUX3Jldm9jYXRpb25fZXZlbnRfaWQi4QMKGEF1dGhvcml6YXRpb25FeHBsYW5hdGlvbhJGCglvcGVyYXRpb24YASABKA4yMy5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uLk9wZXJhdGlvbhIQCghyZWxhdGlvbhgCIAEoCRIOCgZyZXN1bHQYAyABKAgSPAoIZXZpZGVuY2UYBCADKAsyKi5ub21vcy5rZXJuZWwudjEuUmVsYXRpb25zaGlwVHVwbGVFdmlkZW5jZRI7CghjaGlsZHJlbhgFIAMoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb24i3wEKCU9wZXJhdGlvbhIZChVPUEVSQVRJT05fVU5TUEVDSUZJRUQQABIUChBPUEVSQVRJT05fRElSRUNUEAESHgoaT1BFUkFUSU9OX0NPTVBVVEVEX1VTRVJTRVQQAhIeChpPUEVSQVRJT05fVFVQTEVfVE9fVVNFUlNFVBADEhMKD09QRVJBVElPTl9VTklPThAEEhoKFk9QRVJBVElPTl9JTlRFUlNFQ1RJT04QBRIXChNPUEVSQVRJT05fRVhDTFVTSU9OEAYSFwoTT1BFUkFUSU9OX0NPTkRJVElPThAHIncKGkF1dGhvcml6YXRpb25EZWNpc2lvbkJhc2lzEiAKGGF1dGhvcml6YXRpb25fbW9kZWxfaGFzaBgBIAEoCRIhChlyZWxhdGlvbnNoaXBfc3RhdGVfY29tbWl0GAIgASgJEhQKDGNvbnRleHRfaGFzaBgDIAEoDCK+AQoaQXV0aG9yaXphdGlvbkNoZWNrUmVzcG9uc2USDwoHYWxsb3dlZBgBIAEoCBI6CgViYXNpcxgCIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRGVjaXNpb25CYXNpcxJDCgtleHBsYW5hdGlvbhgDIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRXhwbGFuYXRpb25IAIgBAUIOCgxfZXhwbGFuYXRpb24igwIKG0F1dGhvcml6YXRpb25FeHBhbmRSZXNwb25zZRI3CghzdWJqZWN0cxgBIAMoCzIlLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uU3ViamVjdBI6CgViYXNpcxgCIAEoCzIrLm5vbW9zLmtlcm5lbC52MS5BdXRob3JpemF0aW9uRGVjaXNpb25CYXNpcxIRCgRuZXh0GAMgASgJSACIAQESQwoLZXhwbGFuYXRpb24YBCABKAsyKS5ub21vcy5rZXJuZWwudjEuQXV0aG9yaXphdGlvbkV4cGxhbmF0aW9uSAGIAQFCBwoFX25leHRCDgoMX2V4cGxhbmF0aW9uInAKDU91dGJveFJlcXVlc3QSMAoGdGFyZ2V0GAEgASgLMiAubm9tb3Mua2VybmVsLnYxLldvcmtzcGFjZVRhcmdldBItCgVjbG9jaxgCIAEoCzIeLm5vbW9zLmtlcm5lbC52MS5DYXB0dXJlZENsb2NrImMKC1N5bmNSZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSEQoJZnJvbV9iYXNlGAIgASgJEg8KB3RvX2hlYWQYAyABKAkiUwoLVGVzdFJlcXVlc3QSNwoIc2V0X3Jvb3QYASABKAsyIy5ub21vcy5rZXJuZWwudjEuU2V0VGVzdFJvb3RSZXF1ZXN0SABCCwoJb3BlcmF0aW9uIigKElNldFRlc3RSb290UmVxdWVzdBISCgpwdWJsaWNfa2V5GAEgASgMIj0KDFRlc3RSZXNwb25zZRItCgZyZXN1bHQYASABKAsyHS5ub21vcy5rZXJuZWwudjEuQWNrbm93bGVkZ2VkIu0JCg5DdXN0b2R5UmVxdWVzdBI3CgpwYWNrX2RlbHRhGAogASgLMiEubm9tb3Mua2VybmVsLnYxLlBhY2tEZWx0YVJlcXVlc3RIABI3CgphcHBseV9wYWNrGAsgASgLMiEubm9tb3Mua2VybmVsLnYxLkFwcGx5UGFja1JlcXVlc3RIABI3CgpyZXBvX3N0YXRzGAwgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlcG9TdGF0c1JlcXVlc3RIABI9Cg1pbnRlbnRzX2Fib3ZlGA0gASgLMiQubm9tb3Mua2VybmVsLnYxLkludGVudHNBYm92ZVJlcXVlc3RIABI/Cg5pbnNwZWN0X2NoYW5nZRgOIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5JbnNwZWN0Q2hhbmdlUmVxdWVzdEgAEk4KFmVuY29kZV9yZWZ1c2FsX3ZlcmRpY3QYDyABKAsyLC5ub21vcy5rZXJuZWwudjEuRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXF1ZXN0SAASUAoXaW5zcGVjdF9yZWZ1c2FsX3ZlcmRpY3QYECABKAsyLS5ub21vcy5rZXJuZWwudjEuSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVxdWVzdEgAEjUKCXJlYWRfYmxvYhgRIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5SZWFkQmxvYlJlcXVlc3RIABI5CgtyZXNvbHZlX3JlZhgSIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmUmVxdWVzdEgAEjUKCWxpc3RfcmVmcxgTIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5MaXN0UmVmc1JlcXVlc3RIABI1Cgl3cml0ZV9yZWYYFCABKAsyIC5ub21vcy5rZXJuZWwudjEuV3JpdGVSZWZSZXF1ZXN0SAASNwoKZGVsZXRlX3JlZhgVIAEoCzIhLm5vbW9zLmtlcm5lbC52MS5EZWxldGVSZWZSZXF1ZXN0SAASRAoRd3JpdGVfbWV0YV9jb21taXQYFiABKAsyJy5ub21vcy5rZXJuZWwudjEuV3JpdGVNZXRhQ29tbWl0UmVxdWVzdEgAEkIKEGxhd19jbG9zdXJlX2luZm8YFyABKAsyJi5ub21vcy5rZXJuZWwudjEuTGF3Q2xvc3VyZUluZm9SZXF1ZXN0SAASRQoRY2hlY2twb2ludF9leHBvcnQYGCABKAsyKC5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEV4cG9ydFJlcXVlc3RIABJFChFjaGVja3BvaW50X2ltcG9ydBgZIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DaGVja3BvaW50SW1wb3J0UmVxdWVzdEgAEkMKEGNhcGFjaXR5X3Jlc2VydmUYGiABKAsyJy5ub21vcy5rZXJuZWwudjEuQ2FwYWNpdHlSZXNlcnZlUmVxdWVzdEgAEjsKDHJlc3RvcmVfbWFpbhgbIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5SZXN0b3JlTWFpblJlcXVlc3RIABJOChZyZXNvbHZlX3N0YXRlX3Bvc2l0aW9uGBwgASgLMiwubm9tb3Mua2VybmVsLnYxLlJlc29sdmVTdGF0ZVBvc2l0aW9uUmVxdWVzdEgAQgsKCW9wZXJhdGlvbiKcAQoQUGFja0RlbHRhUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKBGhlYWQYAiABKAlIAIgBARIRCgRiYXNlGAMgASgJSAGIAQESDgoGYnJhbmNoGAQgASgJEh0KEHN0YWdlZF9wYWNrX2ZpbGUYBSABKAlIAogBAUIHCgVfaGVhZEIHCgVfYmFzZUITChFfc3RhZ2VkX3BhY2tfZmlsZSJyChBBcHBseVBhY2tSZXF1ZXN0EgwKBHJlcG8YASABKAkSDgoEcGFjaxgCIAEoDEgAEhoKEHN0YWdlZF9wYWNrX2ZpbGUYBCABKAlIABIRCgRoZWFkGAMgASgJSAGIAQFCCAoGc291cmNlQgcKBV9oZWFkIiAKEFJlcG9TdGF0c1JlcXVlc3QSDAoEcmVwbxgBIAEoCSKsAQoTSW50ZW50c0Fib3ZlUmVxdWVzdBIMCgRyZXBvGAEgASgJEhEKBGhlYWQYAiABKAlIAIgBARIRCgRiYXNlGAMgASgJSAGIAQESDgoGYnJhbmNoGAQgASgJEg0KBWxpbWl0GAUgASgEEhgKEGNvbXBsZXRlX2xvZ2ljYWwYBiABKAgSFgoOY29tcGFjdF9zdG9yZWQYByABKAhCBwoFX2hlYWRCBwoFX2Jhc2UiKwoUSW5zcGVjdENoYW5nZVJlcXVlc3QSEwoLY2hhbmdlX3VzZGEYASABKAwi3wEKDlJlZnVzYWxWZXJkaWN0EhUKCG9mZmVyX2lkGAEgASgJSACIAQESEAoDb2lkGAIgASgJSAGIAQESEwoGZG9tYWluGAMgASgJSAKIAQESGQoMZGlyZWN0aXZlX2lkGAQgASgJSAOIAQESFAoHc2Vzc2lvbhgFIAEoCUgEiAEBEhEKCXBhcmtlZF9hdBgGIAEoCRIOCgZyZWFzb24YByABKAlCCwoJX29mZmVyX2lkQgYKBF9vaWRCCQoHX2RvbWFpbkIPCg1fZGlyZWN0aXZlX2lkQgoKCF9zZXNzaW9uIk8KG0VuY29kZVJlZnVzYWxWZXJkaWN0UmVxdWVzdBIwCgd2ZXJkaWN0GAEgASgLMh8ubm9tb3Mua2VybmVsLnYxLlJlZnVzYWxWZXJkaWN0IjQKHEluc3BlY3RSZWZ1c2FsVmVyZGljdFJlcXVlc3QSFAoMdmVyZGljdF91c2RhGAEgASgMIjoKD1JlYWRCbG9iUmVxdWVzdBIMCgRyZXBvGAEgASgJEgsKA29pZBgCIAEoCRIMCgRwYXRoGAMgASgJIjQKEVJlc29sdmVSZWZSZXF1ZXN0EgwKBHJlcG8YASABKAkSEQoJcmVmZXJlbmNlGAIgASgJIi8KD0xpc3RSZWZzUmVxdWVzdBIMCgRyZXBvGAEgASgJEg4KBnByZWZpeBgCIAEoCSJCCg9Xcml0ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkSDgoGdGFyZ2V0GAMgASgJIjMKEERlbGV0ZVJlZlJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkiKQoITWV0YUZpbGUSDAoEcGF0aBgBIAEoCRIPCgdjb250ZW50GAIgASgMIq4BChZXcml0ZU1ldGFDb21taXRSZXF1ZXN0EgwKBHJlcG8YASABKAkSDwoHcGFyZW50cxgCIAMoCRIoCgVmaWxlcxgDIAMoCzIZLm5vbW9zLmtlcm5lbC52MS5NZXRhRmlsZRIPCgdtZXNzYWdlGAQgASgJEhQKDHRpbWVfc2Vjb25kcxgFIAEoEhIWCglyZWZlcmVuY2UYBiABKAlIAIgBAUIMCgpfcmVmZXJlbmNlImcKFUxhd0Nsb3N1cmVJbmZvUmVxdWVzdBIUCgxjbG9zdXJlX2ZpbGUYASABKAkSOAoKY2FwYWJpbGl0eRgCIAEoDjIkLm5vbW9zLmtlcm5lbC52MS5LZXJuZWxMYXdDYXBhYmlsaXR5IocBChdDaGVja3BvaW50RXhwb3J0UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EiEKFHN0YWdlZF9mcm9udGllcl9maWxlGAIgASgJSACIAQFCFwoVX3N0YWdlZF9mcm9udGllcl9maWxlIukBChdDaGVja3BvaW50SW1wb3J0UmVxdWVzdBIwCgZ0YXJnZXQYASABKAsyIC5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlVGFyZ2V0EhIKCGZyb250aWVyGAIgASgMSAASHgoUc3RhZ2VkX2Zyb250aWVyX2ZpbGUYBiABKAlIABITCgZjdXJzb3IYAyABKAlIAYgBARIXCgpzdGF0ZV9yb290GAQgASgJSAKIAQESDQoFc3BhbnMYBSABKAhCEQoPZnJvbnRpZXJfc291cmNlQgkKB19jdXJzb3JCDQoLX3N0YXRlX3Jvb3QiMQoWQ2FwYWNpdHlSZXNlcnZlUmVxdWVzdBIXCg9hZ2dyZWdhdGVfY291bnQYASABKAQiVAoSUmVzdG9yZU1haW5SZXF1ZXN0EjAKBnRhcmdldBgBIAEoCzIgLm5vbW9zLmtlcm5lbC52MS5Xb3Jrc3BhY2VUYXJnZXQSDAoEaGVhZBgCIAEoCSJpChtSZXNvbHZlU3RhdGVQb3NpdGlvblJlcXVlc3QSDAoEcmVwbxgBIAEoCRIRCgltYWluX2hlYWQYAiABKAkSFQoNaGludGVkX2NvbW1pdBgDIAEoCRISCgpzdGF0ZV9yb290GAQgASgJIvgJCg9DdXN0b2R5UmVzcG9uc2USOAoKcGFja19kZWx0YRgKIAEoCzIiLm5vbW9zLmtlcm5lbC52MS5QYWNrRGVsdGFSZXNwb25zZUgAEjgKCmFwcGx5X3BhY2sYCyABKAsyIi5ub21vcy5rZXJuZWwudjEuQXBwbHlQYWNrUmVzcG9uc2VIABI4CgpyZXBvX3N0YXRzGAwgASgLMiIubm9tb3Mua2VybmVsLnYxLlJlcG9TdGF0c1Jlc3BvbnNlSAASPgoNaW50ZW50c19hYm92ZRgNIAEoCzIlLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRzQWJvdmVSZXNwb25zZUgAEkAKDmluc3BlY3RfY2hhbmdlGA4gASgLMiYubm9tb3Mua2VybmVsLnYxLkluc3BlY3RDaGFuZ2VSZXNwb25zZUgAEk8KFmVuY29kZV9yZWZ1c2FsX3ZlcmRpY3QYDyABKAsyLS5ub21vcy5rZXJuZWwudjEuRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXNwb25zZUgAElEKF2luc3BlY3RfcmVmdXNhbF92ZXJkaWN0GBAgASgLMi4ubm9tb3Mua2VybmVsLnYxLkluc3BlY3RSZWZ1c2FsVmVyZGljdFJlc3BvbnNlSAASNgoJcmVhZF9ibG9iGBEgASgLMiEubm9tb3Mua2VybmVsLnYxLlJlYWRCbG9iUmVzcG9uc2VIABI6CgtyZXNvbHZlX3JlZhgSIAEoCzIjLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlUmVmUmVzcG9uc2VIABI2CglsaXN0X3JlZnMYEyABKAsyIS5ub21vcy5rZXJuZWwudjEuTGlzdFJlZnNSZXNwb25zZUgAEjIKCXdyaXRlX3JlZhgUIAEoCzIdLm5vbW9zLmtlcm5lbC52MS5BY2tub3dsZWRnZWRIABIzCgpkZWxldGVfcmVmGBUgASgLMh0ubm9tb3Mua2VybmVsLnYxLkFja25vd2xlZGdlZEgAEkUKEXdyaXRlX21ldGFfY29tbWl0GBYgASgLMigubm9tb3Mua2VybmVsLnYxLldyaXRlTWV0YUNvbW1pdFJlc3BvbnNlSAASQwoQbGF3X2Nsb3N1cmVfaW5mbxgXIAEoCzInLm5vbW9zLmtlcm5lbC52MS5MYXdDbG9zdXJlSW5mb1Jlc3BvbnNlSAASRgoRY2hlY2twb2ludF9leHBvcnQYGCABKAsyKS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEV4cG9ydFJlc3BvbnNlSAASRgoRY2hlY2twb2ludF9pbXBvcnQYGSABKAsyKS5ub21vcy5rZXJuZWwudjEuQ2hlY2twb2ludEltcG9ydFJlc3BvbnNlSAASRAoQY2FwYWNpdHlfcmVzZXJ2ZRgaIAEoCzIoLm5vbW9zLmtlcm5lbC52MS5DYXBhY2l0eVJlc2VydmVSZXNwb25zZUgAEjwKDHJlc3RvcmVfbWFpbhgbIAEoCzIkLm5vbW9zLmtlcm5lbC52MS5SZXN0b3JlTWFpblJlc3BvbnNlSAASTwoWcmVzb2x2ZV9zdGF0ZV9wb3NpdGlvbhgcIAEoCzItLm5vbW9zLmtlcm5lbC52MS5SZXNvbHZlU3RhdGVQb3NpdGlvblJlc3BvbnNlSABCCwoJb3BlcmF0aW9uIjAKEVBhY2tEZWx0YVJlc3BvbnNlEgwKBHBhY2sYASABKAwSDQoFYnl0ZXMYAiABKAQiPAoRQXBwbHlQYWNrUmVzcG9uc2USFAoMb2JqZWN0X2NvdW50GAEgASgEEhEKCXBhY2tfaGFzaBgCIAEoCSKnAQoRUmVwb1N0YXRzUmVzcG9uc2USEwoLdG90YWxfYnl0ZXMYASABKAQSFAoMb2JqZWN0X2J5dGVzGAIgASgEEhUKDWxvb3NlX29iamVjdHMYAyABKAQSEwoLbG9vc2VfYnl0ZXMYBCABKAQSEgoKcGFja19maWxlcxgFIAEoBBISCgpwYWNrX2J5dGVzGAYgASgEEhMKC2luZGV4X2J5dGVzGAcgASgEIuIBCgxJbnRlbnRSZWNvcmQSCwoDb2lkGAEgASgJEhEKCWludGVudF9pZBgCIAEoCRIOCgZkb21haW4YAyABKAkSEQoJZGlyZWN0aXZlGAQgASgJEhMKC2NoYW5nZV91c2RhGAUgASgMEi4KCHNlbWFudGljGAYgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0EkoKFXRyYW5zcG9ydF9yZXF1aXJlbWVudBgHIAEoDjIrLm5vbW9zLmtlcm5lbC52MS5JbnRlbnRUcmFuc3BvcnRSZXF1aXJlbWVudCJGChRJbnRlbnRzQWJvdmVSZXNwb25zZRIuCgdpbnRlbnRzGAEgAygLMh0ubm9tb3Mua2VybmVsLnYxLkludGVudFJlY29yZCJCChNOb21pbmFsQ2FsbElkZW50aXR5EhMKC2RvbWFpbl9wYXRoGAEgASgJEhYKDmRpcmVjdGl2ZV9wYXRoGAIgASgJIogBChhMaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSHwoXdGFyZ2V0X2Nsb3N1cmVfaWRlbnRpdHkYASABKAkSFAoMaW5zdGFsbGVkX2J5GAIgASgJEjUKBXBoYXNlGAMgASgOMiYubm9tb3Mua2VybmVsLnYxLkxpZmVjeWNsZUluc3RhbGxQaGFzZSJaCh1Xb3Jrc3BhY2VSZXNpZGVuY3lSZXF1aXJlbWVudBIRCgl3b3Jrc3BhY2UYASABKAkSEwoLc291cmNlX2hlYWQYAiABKAkSEQoJZm9sZF9yb290GAMgASgJIrQCChVJbnNwZWN0Q2hhbmdlUmVzcG9uc2USLgoIc2VtYW50aWMYASABKAsyHC5ub21vcy5rZXJuZWwudjEuTm9tb3NTdHJ1Y3QSEQoJaW50ZW50X2lkGAIgASgJEjIKBGNhbGwYAyABKAsyJC5ub21vcy5rZXJuZWwudjEuTm9taW5hbENhbGxJZGVudGl0eRIQCghhdXRob3JlZBgEIAEoCBJEChFsaWZlY3ljbGVfaW5zdGFsbBgFIAEoCzIpLm5vbW9zLmtlcm5lbC52MS5MaWZlY3ljbGVJbnN0YWxsSWRlbnRpdHkSTAoUcmVxdWlyZWRfcmVzaWRlbmNpZXMYBiADKAsyLi5ub21vcy5rZXJuZWwudjEuV29ya3NwYWNlUmVzaWRlbmN5UmVxdWlyZW1lbnQiTAocUmVzb2x2ZVN0YXRlUG9zaXRpb25SZXNwb25zZRIaCg1yZXNvbHZlZF9oZWFkGAEgASgJSACIAQFCEAoOX3Jlc29sdmVkX2hlYWQiNAocRW5jb2RlUmVmdXNhbFZlcmRpY3RSZXNwb25zZRIUCgx2ZXJkaWN0X3VzZGEYASABKAwiUQodSW5zcGVjdFJlZnVzYWxWZXJkaWN0UmVzcG9uc2USMAoHdmVyZGljdBgBIAEoCzIfLm5vbW9zLmtlcm5lbC52MS5SZWZ1c2FsVmVyZGljdCIvChBSZWFkQmxvYlJlc3BvbnNlEg0KBWZvdW5kGAEgASgIEgwKBGJsb2IYAiABKAwiLgoSUmVzb2x2ZVJlZlJlc3BvbnNlEhAKA29pZBgBIAEoCUgAiAEBQgYKBF9vaWQiKwoJUmVmUmVjb3JkEhEKCXJlZmVyZW5jZRgBIAEoCRILCgNvaWQYAiABKAkiPAoQTGlzdFJlZnNSZXNwb25zZRIoCgRyZWZzGAEgAygLMhoubm9tb3Mua2VybmVsLnYxLlJlZlJlY29yZCIOCgxBY2tub3dsZWRnZWQiJgoXV3JpdGVNZXRhQ29tbWl0UmVzcG9uc2USCwoDb2lkGAEgASgJIoMBChZMYXdDbG9zdXJlSW5mb1Jlc3BvbnNlEhAKCGlkZW50aXR5GAEgASgJEhkKEXJvb3RfbG9naWNhbF9wYXRoGAIgASgJEhMKC2Fzc2V0X2NvdW50GAMgASgEEhIKCnByaW1fY291bnQYBCABKAQSEwoLZG9tYWluX2tleXMYBSADKAki7wIKGENoZWNrcG9pbnRFeHBvcnRSZXNwb25zZRINCgVlbXB0eRgBIAEoCBITCgZjdXJzb3IYAiABKAlIAIgBARIQCghmcm9udGllchgDIAEoDBIXCgpzdGF0ZV9yb290GAQgASgJSAGIAQESEgoKc3RhdGVfdHJlZRgFIAEoCBIOCgZwaW5uZWQYBiABKAgSGwoTcmVhZF9pbmRleF9zbmFwc2hvdBgHIAEoCBIjChtyZWFkX2luZGV4X3NuYXBzaG90X3BlbmRpbmcYCCABKAgSJAoXcmVhZF9pbmRleF9zcWxpdGVfYnl0ZXMYCSABKARIAogBARIlChhyZWFkX2luZGV4X2N1c3RvZHlfYnl0ZXMYCiABKARIA4gBAUIJCgdfY3Vyc29yQg0KC19zdGF0ZV9yb290QhoKGF9yZWFkX2luZGV4X3NxbGl0ZV9ieXRlc0IbChlfcmVhZF9pbmRleF9jdXN0b2R5X2J5dGVzIp4CChhDaGVja3BvaW50SW1wb3J0UmVzcG9uc2USEAoIcmVzdG9yZWQYASABKAgSEwoGcmVhc29uGAIgASgJSACIAQESFwoPZnJvbnRpZXJfc2VlZGVkGAMgASgIEiUKHWZyb250aWVyX3ZlcmlmaWNhdGlvbl9wZW5kaW5nGAQgASgIEhcKD2FnZ3JlZ2F0ZV9jb3VudBgFIAEoBBIrCgVzcGFucxgGIAEoCzIcLm5vbW9zLmtlcm5lbC52MS5Ob21vc1N0cnVjdBITCgZjdXJzb3IYByABKAlIAYgBARIRCglyZWFkX29ubHkYCCABKAgSFwoPbGF6eV9yZWFkX2luZGV4GAkgASgIQgkKB19yZWFzb25CCQoHX2N1cnNvciJKChdDYXBhY2l0eVJlc2VydmVSZXNwb25zZRIXCg9hZ2dyZWdhdGVfY291bnQYASABKAQSFgoOcmVzZXJ2ZWRfYnl0ZXMYAiABKAQi+QIKEFJlc3RvcmVNYWluU3BhbnMSEAoIdG90YWxfdXMYASABKAQSGgoSbGl2ZV9yZWZfbG9va3VwX3VzGAIgASgEEhgKEHRhcmdldF9kZWNvZGVfdXMYAyABKAQSJAocY3VzdG9keV9jb21wbGV0ZW5lc3NfcmVhZF91cxgEIAEoBBIZChFxdWFyYW50aW5lX3JlZl91cxgFIAEoBBIlCh1jaGFpbl9zaWduYXR1cmVfbGF3X3JlcGxheV91cxgGIAEoBBIZChF2ZXJkaWN0X2RlY29kZV91cxgHIAEoBBIjChtwcm9tb3RlX2FuZF9jbGVhbnVwX3JlZnNfdXMYCCABKAQSGwoTZnJvbnRpZXJfcmVidWlsZF91cxgJIAEoBBIZChFmcm9udGllcl9zdG9yZV91cxgKIAEoBBI9Cgx2ZXJpZmljYXRpb24YCyABKAsyJy5ub21vcy5rZXJuZWwudjEuVmVyaWZ5Q2hhaW5EaWFnbm9zdGljcyKkAQoTUmVzdG9yZU1haW5SZXNwb25zZRIMCgRoZWFkGAEgASgJEhAKCHZlcmlmaWVkGAIgASgIEgwKBHdhbGsYAyABKAkSMAoFc3BhbnMYBCABKAsyIS5ub21vcy5rZXJuZWwudjEuUmVzdG9yZU1haW5TcGFucxItCgd2ZXJkaWN0GAUgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0IpsCCgpOb21vc1ZhbHVlEiUKBG51bGwYASABKAsyFS5ub21vcy5rZXJuZWwudjEuTnVsbEgAEhEKB2Jvb2xlYW4YAiABKAhIABIYCg5zaWduZWRfaW50ZWdlchgDIAEoEkgAEhoKEHVuc2lnbmVkX2ludGVnZXIYBCABKARIABIYCg5mbG9hdGluZ19wb2ludBgFIAEoAUgAEg4KBHRleHQYBiABKAlIABIPCgVieXRlcxgHIAEoDEgAEioKBGxpc3QYCCABKAsyGi5ub21vcy5rZXJuZWwudjEuTm9tb3NMaXN0SAASLgoGb2JqZWN0GAkgASgLMhwubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0SABCBgoEa2luZCIGCgROdWxsIjgKCU5vbW9zTGlzdBIrCgZ2YWx1ZXMYASADKAsyGy5ub21vcy5rZXJuZWwudjEuTm9tb3NWYWx1ZSKTAQoLTm9tb3NTdHJ1Y3QSOAoGZmllbGRzGAEgAygLMigubm9tb3Mua2VybmVsLnYxLk5vbW9zU3RydWN0LkZpZWxkc0VudHJ5GkoKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIqCgV2YWx1ZRgCIAEoCzIbLm5vbW9zLmtlcm5lbC52MS5Ob21vc1ZhbHVlOgI4ASrpEgoRS2VybmVsUmVmdXNhbENvZGUSIwofS0VSTkVMX1JFRlVTQUxfQ09ERV9VTlNQRUNJRklFRBAAEiUKIUtFUk5FTF9SRUZVU0FMX0NPREVfQkFEX1NJR05BVFVSRRABEiQKIEtFUk5FTF9SRUZVU0FMX0NPREVfVU5BVVRIT1JJWkVEEAISJwojS0VSTkVMX1JFRlVTQUxfQ09ERV9QT0xJQ1lfRElTQUJMRUQQAxIqCiZLRVJORUxfUkVGVVNBTF9DT0RFX1VOQ0VSVElGSUVEX1BPTElDWRAEEiMKH0tFUk5FTF9SRUZVU0FMX0NPREVfUkVGRVJFTlRJQUwQBRIvCitLRVJORUxfUkVGVVNBTF9DT0RFX1BPSU5UX1NUQVRFX1VOQVZBSUxBQkxFEAYSJAogS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBfRVhDRUVERUQQBxItCilLRVJORUxfUkVGVVNBTF9DT0RFX0NBUF9DT1VOVF9VTkFWQUlMQUJMRRAIEikKJUtFUk5FTF9SRUZVU0FMX0NPREVfRVZJREVOQ0VfVU5CQUNLRUQQCRImCiJLRVJORUxfUkVGVVNBTF9DT0RFX09SUEhBTl9SRUNFSVBUEAoSNgoyS0VSTkVMX1JFRlVTQUxfQ09ERV9SRUNFSVBUX09OX1RFUk1JTkFMX09CTElHQVRJT04QCxIiCh5LRVJORUxfUkVGVVNBTF9DT0RFX05PVF9NSU5URUQQDBIoCiRLRVJORUxfUkVGVVNBTF9DT0RFX0RPTUFJTl9MSUZFQ1lDTEUQDRIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX1RZUEVfVEFHX01JU01BVENIEA4SLAooS0VSTkVMX1JFRlVTQUxfQ09ERV9SRVRJUkVEX1JFQURfU1VSRkFDRRAPEjAKLEtFUk5FTF9SRUZVU0FMX0NPREVfQ1JPU1NfV09SS1NQQUNFX0RFQ0xJTkVEEBASKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9BR0dSRUdBVEVfSU5WQVJJQU5UEBESKwonS0VSTkVMX1JFRlVTQUxfQ09ERV9XT1JLU1BBQ0VfSU5WQVJJQU5UEBISLgoqS0VSTkVMX1JFRlVTQUxfQ09ERV9DQVBUVVJFRF9SRUFEX0NPTkZMSUNUEBMSMgouS0VSTkVMX1JFRlVTQUxfQ09ERV9DT05GTElDVF9TTkFQU0hPVF9SRVFVSVJFRBAUEjQKMEtFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfVU5ERUNMQVJFRBAVEjEKLUtFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfSU5WQUxJRBAWEi8KK0tFUk5FTF9SRUZVU0FMX0NPREVfQ09ORkxJQ1RfU05BUFNIT1RfU1RBTEUQFxIwCixLRVJORUxfUkVGVVNBTF9DT0RFX0NBUFRVUkVEX1JFQURfVU5ERUNMQVJFRBAYEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfQ0FQVFVSRURfUkVBRF9QUklWQVRFEBkSMAosS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX1VOREVDTEFSRUQQGhIzCi9LRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEVEX1JFQURfVU5UUlVTVEVEX0tFWRAbEjYKMktFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9VTlRSVVNURURfU09VUkNFEBwSLAooS0VSTkVMX1JFRlVTQUxfQ09ERV9BVFRFU1RFRF9SRUFEX0ZPUkdFRBAdEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9TVEFMRRAeEi4KKktFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9PVkVSU0laRRAfEjcKM0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNURURfUkVBRF9ESVNIT05PUkVEX1NPVVJDRRAgEjUKMUtFUk5FTF9SRUZVU0FMX0NPREVfRVFVSVZPQ0FUSU9OX0VWSURFTkNFX0lOVkFMSUQQIRIzCi9LRVJORUxfUkVGVVNBTF9DT0RFX0FUVEVTVEFUSU9OX1JFQ0VJUFRfSU5WQUxJRBAiEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfS0VZX1JPU1RFUl9NSVNNQVRDSBAjEi8KK0tFUk5FTF9SRUZVU0FMX0NPREVfS0VZX0VQT0NIX05PVF9NT05PVE9OSUMQJBIpCiVLRVJORUxfUkVGVVNBTF9DT0RFX1dSSVRFX0VQT0NIX1NUQUxFECUSLQopS0VSTkVMX1JFRlVTQUxfQ09ERV9FTlZFTE9QRV9TSURfTUlTTUFUQ0gQJhIyCi5LRVJORUxfUkVGVVNBTF9DT0RFX1JFVk9LRURfTUVNQkVSX1JFU1VSUkVDVEVEECcSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9GT1JHRURfUFJJTkNJUEFMECgSKAokS0VSTkVMX1JFRlVTQUxfQ09ERV9PV05FRF9LRVlfQU5DSE9SECkSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9PV05FRF9SRUNPVkVSWRAqEiwKKEtFUk5FTF9SRUZVU0FMX0NPREVfU1VSRkFDRURfQkFTSVNfQUhFQUQQKxIyCi5LRVJORUxfUkVGVVNBTF9DT0RFX1NJR05FUl9FUE9DSF9PVVRfT0ZfV0lORE9XECwSJgoiS0VSTkVMX1JFRlVTQUxfQ09ERV9FVk9MVkVfUkVGVVNFRBAtEisKJ0tFUk5FTF9SRUZVU0FMX0NPREVfQVRURVNUQVRJT05fSU5WQUxJRBAuEi0KKUtFUk5FTF9SRUZVU0FMX0NPREVfUEFSRU5UX0RJRF9OT1RfQVRURVNUEC8SKQolS0VSTkVMX1JFRlVTQUxfQ09ERV9DRVJUX0NIQUlOX0JST0tFThAwEioKJktFUk5FTF9SRUZVU0FMX0NPREVfTk9UX1JPT1RFRF9BVF9ST09UEDESKgomS0VSTkVMX1JFRlVTQUxfQ09ERV9ERUxFR0FUSU9OX0lOVkFMSUQQMhIlCiFLRVJORUxfUkVGVVNBTF9DT0RFX1BMQU5fUkVKRUNURUQQMyqKAQoPVmVyaWZ5Q2hhaW5XYWxrEiEKHVZFUklGWV9DSEFJTl9XQUxLX1VOU1BFQ0lGSUVEEAASGgoWVkVSSUZZX0NIQUlOX1dBTEtfRlVMTBABEhwKGFZFUklGWV9DSEFJTl9XQUxLX1NVRkZJWBACEhoKFlZFUklGWV9DSEFJTl9XQUxLX01FTU8QAyqFDAoOUXVlcnlPcGVyYXRpb24SHwobUVVFUllfT1BFUkFUSU9OX1VOU1BFQ0lGSUVEEAASHAoYUVVFUllfT1BFUkFUSU9OX0VYVFJFTVVNEAESJQohUVVFUllfT1BFUkFUSU9OX1BFTkRJTkdfQ09ORkxJQ1RTEAISLAooUVVFUllfT1BFUkFUSU9OX1BFTkRJTkdfQ09ORkxJQ1RfU1VNTUFSWRADEiAKHFFVRVJZX09QRVJBVElPTl9SRUFEX1BPU1RVUkUQBBIfChtRVUVSWV9PUEVSQVRJT05fQ1VSUkVOVF9MQVcQBRIjCh9RVUVSWV9PUEVSQVRJT05fSU5URVJGQUNFX09GRkVSEAYSJwojUVVFUllfT1BFUkFUSU9OX1JFTEFUSU9OX0dBVEVfT0ZGRVIQBxIdChlRVUVSWV9PUEVSQVRJT05fU0NFTkVfTEFXEAgSIQodUVVFUllfT1BFUkFUSU9OX0lOU1RBTExFRF9MQVcQCRIcChhRVUVSWV9PUEVSQVRJT05fREVTQ1JJQkUQChIgChxRVUVSWV9PUEVSQVRJT05fS0VSTkVMX1NUQU1QEAsSIwofUVVFUllfT1BFUkFUSU9OX0RFVkVMT1BFUl9TUEFOUxAMEikKJVFVRVJZX09QRVJBVElPTl9ERUNMQVJFRF9DQVBBQklMSVRJRVMQDRIdChlRVUVSWV9PUEVSQVRJT05fUkVBRElORVNTEA4SJAogUVVFUllfT1BFUkFUSU9OX1BST0pFQ1RJT05fU1RBVFMQDxIlCiFRVUVSWV9PUEVSQVRJT05fTUVNT1JZX0RST1BfUFJPQkUQEBIYChRRVUVSWV9PUEVSQVRJT05fV0FSTRAREhsKF1FVRVJZX09QRVJBVElPTl9SRUZSRVNIEBISIAocUVVFUllfT1BFUkFUSU9OX1ZFUklGWV9DSEFJThATEiUKIVFVRVJZX09QRVJBVElPTl9ISVNUT1JZX1BSRUZMSUdIVBAUEhkKFVFVRVJZX09QRVJBVElPTl9ST1VURRAVEhgKFFFVRVJZX09QRVJBVElPTl9NSU5UEBYSIQodUVVFUllfT1BFUkFUSU9OX0NSWVBUT19LRVlHRU4QFxIlCiFRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX1NFQUxfRklFTEQQGBIsCihRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX0JMSU5EX0lOREVYX1RPS0VOEBkSKgomUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9TQ09QRV9LRVkQGhIvCitRVUVSWV9PUEVSQVRJT05fQ1JZUFRPX09XTkVEX0RFVklDRV9SRVFVRVNUEBsSMQotUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9QUkVQQVJFX0FQUFJPVkFMEBwSMQotUVVFUllfT1BFUkFUSU9OX0NSWVBUT19PV05FRF9QUkVQQVJFX1JFQ09WRVJZEB0SIwofUVVFUllfT1BFUkFUSU9OX0NSWVBUT19XUkFQX0tFWRAeEiUKIVFVRVJZX09QRVJBVElPTl9DUllQVE9fVU5XUkFQX0tFWRAfEiEKHVFVRVJZX09QRVJBVElPTl9BVVRIT1JfS0VZR0VOECASJAogUVVFUllfT1BFUkFUSU9OX0FUVEVTVEFUSU9OX1NJR04QIRIgChxRVUVSWV9PUEVSQVRJT05fUkVDRUlQVF9QQVRIECISHQoZUVVFUllfT1BFUkFUSU9OX0NFUlRfU0lHThAjEiUKIVFVRVJZX09QRVJBVElPTl9CSVJUSF9UUlVTVF9TVEFURRAkEiEKHVFVRVJZX09QRVJBVElPTl9FUkFfQ0VSVF9TSUdOECUSKAokUVVFUllfT1BFUkFUSU9OX0RFTEVHQVRJT05fQ0VSVF9TSUdOECYSKQolUVVFUllfT1BFUkFUSU9OX0NBTk9OSUNBTElaRV9GUk9OVElFUhAnEisKJ1FVRVJZX09QRVJBVElPTl9DQU5PTklDQUxJWkVfUFJPSkVDVElPThAoKmwKE0tlcm5lbExhd0NhcGFiaWxpdHkSJQohS0VSTkVMX0xBV19DQVBBQklMSVRZX1VOU1BFQ0lGSUVEEAASLgoqS0VSTkVMX0xBV19DQVBBQklMSVRZX1NUQUdFX1pFUk9fQk9PVFNUUkFQEAEqqAEKGkludGVudFRyYW5zcG9ydFJlcXVpcmVtZW50EiwKKElOVEVOVF9UUkFOU1BPUlRfUkVRVUlSRU1FTlRfVU5TUEVDSUZJRUQQABIuCipJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX1NFQUxFRF9DSEFOR0UQARIsCihJTlRFTlRfVFJBTlNQT1JUX1JFUVVJUkVNRU5UX0NPTU1JVF9UUkVFEAIqiQEKFUxpZmVjeWNsZUluc3RhbGxQaGFzZRInCiNMSUZFQ1lDTEVfSU5TVEFMTF9QSEFTRV9VTlNQRUNJRklFRBAAEiIKHkxJRkVDWUNMRV9JTlNUQUxMX1BIQVNFX0FDVElWRRABEiMKH0xJRkVDWUNMRV9JTlNUQUxMX1BIQVNFX1BFTkRJTkcQAjJZChJOb21vc0tlcm5lbFNlcnZpY2USQwoEQ2FsbBIcLm5vbW9zLmtlcm5lbC52MS5DYWxsUmVxdWVzdBodLm5vbW9zLmtlcm5lbC52MS5DYWxsUmVzcG9uc2ViBnByb3RvMw");
|
|
5345
5345
|
var CallRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 0);
|
|
5346
5346
|
var CallResponseSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 1);
|
|
5347
|
-
var WorkspaceTargetSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5348
|
-
var DirectiveCallSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5349
|
-
var AuthoringOptionsSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5350
|
-
var CapturedClockSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5351
|
-
var BirthCertificateSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5352
|
-
var OfferRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5353
|
-
var QueryRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5354
|
-
var QueryAuthoritySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5355
|
-
var RowsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5356
|
-
var PageQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5357
|
-
var ByIdQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5358
|
-
var NomosRefSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5359
|
-
var ResolveRefsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5360
|
-
var
|
|
5361
|
-
var
|
|
5362
|
-
var TallyQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5363
|
-
var SpatialQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5364
|
-
var NamedQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5365
|
-
var AuthorizationObjectSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5366
|
-
var AuthorizationSubjectSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5367
|
-
var AuthorizationConsistencySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5368
|
-
var AuthorizationCheckRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel,
|
|
5369
|
-
var
|
|
5370
|
-
var
|
|
5371
|
-
var
|
|
5372
|
-
var
|
|
5373
|
-
var
|
|
5374
|
-
var
|
|
5375
|
-
var
|
|
5376
|
-
var
|
|
5377
|
-
var
|
|
5378
|
-
var
|
|
5379
|
-
var
|
|
5380
|
-
var
|
|
5381
|
-
var
|
|
5382
|
-
var
|
|
5383
|
-
var
|
|
5384
|
-
var
|
|
5385
|
-
var NomosStructSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 108);
|
|
5347
|
+
var WorkspaceTargetSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 21);
|
|
5348
|
+
var DirectiveCallSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 23);
|
|
5349
|
+
var AuthoringOptionsSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 24);
|
|
5350
|
+
var CapturedClockSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 25);
|
|
5351
|
+
var BirthCertificateSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 26);
|
|
5352
|
+
var OfferRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 27);
|
|
5353
|
+
var QueryRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 30);
|
|
5354
|
+
var QueryAuthoritySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 31);
|
|
5355
|
+
var RowsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 33);
|
|
5356
|
+
var PageQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 34);
|
|
5357
|
+
var ByIdQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 35);
|
|
5358
|
+
var NomosRefSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 36);
|
|
5359
|
+
var ResolveRefsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 37);
|
|
5360
|
+
var ReferenceVersionsQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 38);
|
|
5361
|
+
var ReferenceVersionCheckSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 39);
|
|
5362
|
+
var TallyQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 40);
|
|
5363
|
+
var SpatialQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 41);
|
|
5364
|
+
var NamedQuerySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 42);
|
|
5365
|
+
var AuthorizationObjectSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 43);
|
|
5366
|
+
var AuthorizationSubjectSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 44);
|
|
5367
|
+
var AuthorizationConsistencySchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 46);
|
|
5368
|
+
var AuthorizationCheckRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 48);
|
|
5369
|
+
var SyncRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 56);
|
|
5370
|
+
var TestRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 57);
|
|
5371
|
+
var SetTestRootRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 58);
|
|
5372
|
+
var CustodyRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 60);
|
|
5373
|
+
var PackDeltaRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 61);
|
|
5374
|
+
var ApplyPackRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 62);
|
|
5375
|
+
var RepoStatsRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 63);
|
|
5376
|
+
var IntentsAboveRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 64);
|
|
5377
|
+
var WriteRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 72);
|
|
5378
|
+
var DeleteRefRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 73);
|
|
5379
|
+
var LawClosureInfoRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 76);
|
|
5380
|
+
var CheckpointExportRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 77);
|
|
5381
|
+
var CheckpointImportRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 78);
|
|
5382
|
+
var RestoreMainRequestSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 80);
|
|
5383
|
+
var NomosValueSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 107);
|
|
5384
|
+
var NomosStructSchema = /* @__PURE__ */ messageDesc(file_nomos_kernel_v1_kernel, 110);
|
|
5386
5385
|
var VerifyChainWalkSchema = /* @__PURE__ */ enumDesc(file_nomos_kernel_v1_kernel, 1);
|
|
5387
5386
|
var VerifyChainWalk = /* @__PURE__ */ tsEnum(VerifyChainWalkSchema);
|
|
5388
5387
|
var QueryOperationSchema = /* @__PURE__ */ enumDesc(file_nomos_kernel_v1_kernel, 2);
|
|
@@ -5697,10 +5696,10 @@ var applicationQuery = (body, fields) => {
|
|
|
5697
5696
|
principal: String(fields.principal ?? "")
|
|
5698
5697
|
})
|
|
5699
5698
|
};
|
|
5700
|
-
if (op === "
|
|
5701
|
-
case: "
|
|
5702
|
-
value: create(
|
|
5703
|
-
refs: Array.isArray(body.refs) ? body.refs.map((check) => create(
|
|
5699
|
+
if (op === "checkReferenceVersions") return {
|
|
5700
|
+
case: "referenceVersions",
|
|
5701
|
+
value: create(ReferenceVersionsQuerySchema, {
|
|
5702
|
+
refs: Array.isArray(body.refs) ? body.refs.map((check) => create(ReferenceVersionCheckSchema, {
|
|
5704
5703
|
pinned: refValue(check.pinned),
|
|
5705
5704
|
series: refValue(check.series),
|
|
5706
5705
|
currentField: String(check.currentField ?? "")
|
|
@@ -5833,7 +5832,6 @@ function providerOperation(mode, rawFields, workBytes) {
|
|
|
5833
5832
|
case: "sync",
|
|
5834
5833
|
value: create(SyncRequestSchema, { target, fromBase: String(fields.fromBase ?? ""), toHead: String(fields.toHead ?? "") })
|
|
5835
5834
|
};
|
|
5836
|
-
if (mode === "outbox") return { case: "outbox", value: create(OutboxRequestSchema, { target }) };
|
|
5837
5835
|
if (mode === "set_test_k_root") return {
|
|
5838
5836
|
case: "test",
|
|
5839
5837
|
value: create(TestRequestSchema, { operation: {
|
|
@@ -5940,7 +5938,7 @@ function nmsInternalDecodeProviderResponse(bytes, requestId, stderr = []) {
|
|
|
5940
5938
|
case "open":
|
|
5941
5939
|
return JSON.stringify(jsStruct(response.outcome.value.result));
|
|
5942
5940
|
case "outbox":
|
|
5943
|
-
|
|
5941
|
+
throw new Error("outbox is a typed adapter transport operation, not a generic provider call");
|
|
5944
5942
|
case "sync":
|
|
5945
5943
|
return JSON.stringify(jsStruct(response.outcome.value.result));
|
|
5946
5944
|
case "test":
|
|
@@ -6015,6 +6013,12 @@ function jsVerifyChainDiagnostics(diagnostics) {
|
|
|
6015
6013
|
engineInitUs: Number(diagnostics.engineInitUs),
|
|
6016
6014
|
timelineReadUs: Number(diagnostics.timelineReadUs),
|
|
6017
6015
|
lawHydrationUs: Number(diagnostics.lawHydrationUs),
|
|
6016
|
+
lawHydrationTimings: Object.fromEntries(
|
|
6017
|
+
diagnostics.lawHydrationTimings.map((timing) => [timing.phase, Number(timing.totalUs)])
|
|
6018
|
+
),
|
|
6019
|
+
lawClosureCount: Number(diagnostics.lawClosureCount),
|
|
6020
|
+
lawClosureCacheHits: Number(diagnostics.lawClosureCacheHits),
|
|
6021
|
+
lawClosureCacheMisses: Number(diagnostics.lawClosureCacheMisses),
|
|
6018
6022
|
recoveryPrescanUs: Number(diagnostics.recoveryPrescanUs),
|
|
6019
6023
|
foldFrontierUs: Number(diagnostics.foldFrontierUs),
|
|
6020
6024
|
steps: diagnostics.steps.map((step) => ({
|
|
@@ -6320,6 +6324,7 @@ function createWasmEnginePlane({ span } = {}) {
|
|
|
6320
6324
|
if (resolved !== head) {
|
|
6321
6325
|
throw new Error(`${why}: custody mount failed, wanted ${head}, resolved ${resolved}`);
|
|
6322
6326
|
}
|
|
6327
|
+
return { kernelSpans: verdict.kernelSpans };
|
|
6323
6328
|
},
|
|
6324
6329
|
// THE HOLON RPC. activeHolonCall re-entry detection stays in index.mjs (it serializes ops); here we just
|
|
6325
6330
|
// shuttle the bytes + surface a wasm trap's stderr panic message. `repoArg` routes to THIS workspace.
|
|
@@ -7033,7 +7038,7 @@ function jwtClaimOf(token, claim) {
|
|
|
7033
7038
|
}
|
|
7034
7039
|
}
|
|
7035
7040
|
function createGovernanceOffers(ctx) {
|
|
7036
|
-
const { offerDirective, serialize, call, qBytes: qBytes2, _fetch, base, workspace, deviceSecret, authHeaders, receivingGroupNameOf: receivingGroupNameOf2, sha256hexBytes: sha256hexBytes2, bytesUnb64: bytesUnb642, actorForShareQuote: actorForShareQuote2, installedInterfaceInner, mintKeylessDelegation: mintKeylessDelegation2, signWorkspaceOffer } = ctx;
|
|
7041
|
+
const { offerDirective, serialize, call, qBytes: qBytes2, _fetch, base, workspace, deviceSecret, authHeaders, receivingGroupNameOf: receivingGroupNameOf2, sha256hexBytes: sha256hexBytes2, bytesUnb64: bytesUnb642, actorForShareQuote: actorForShareQuote2, installedInterfaceInner, mintKeylessDelegation: mintKeylessDelegation2, signWorkspaceOffer, resolveFrameworkRoute } = ctx;
|
|
7037
7042
|
const g = {
|
|
7038
7043
|
/**
|
|
7039
7044
|
* AUTHOR a SIGNED governance/framework intent locally and return the sealed offer bytes (base64) ready to
|
|
@@ -7309,6 +7314,7 @@ function createGovernanceOffers(ctx) {
|
|
|
7309
7314
|
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]`);
|
|
7310
7315
|
}
|
|
7311
7316
|
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");
|
|
7317
|
+
const token = keyless ? typeof signIn === "function" ? await signIn(keyHash) : idToken : null;
|
|
7312
7318
|
let resolved = domain ? { domain, directiveId } : null;
|
|
7313
7319
|
if (!resolved && parent === workspace && typeof installedInterfaceInner === "function") {
|
|
7314
7320
|
const offer = installedInterfaceInner();
|
|
@@ -7317,10 +7323,16 @@ function createGovernanceOffers(ctx) {
|
|
|
7317
7323
|
else if (declaring.length > 1) throw new Error(`ensureParentSignerEnrollment: '${directiveId}' is declared by ${declaring.length} installed domains on ${parent} (${declaring.join(", ")}) \u2014 pass { domain } explicitly`);
|
|
7318
7324
|
}
|
|
7319
7325
|
if (!resolved && parent !== workspace && keyless && directiveId === "enrollFirstDevice") {
|
|
7320
|
-
|
|
7326
|
+
const route = await resolveFrameworkRoute({
|
|
7327
|
+
parent,
|
|
7328
|
+
operationId: directiveId,
|
|
7329
|
+
method: "post",
|
|
7330
|
+
token: token || void 0,
|
|
7331
|
+
principal
|
|
7332
|
+
});
|
|
7333
|
+
resolved = { domain: route.domain, directiveId };
|
|
7321
7334
|
}
|
|
7322
7335
|
if (!resolved) resolved = await g.discoverDirectiveDomain({ ws: parent, directiveId, authToken });
|
|
7323
|
-
const token = keyless ? typeof signIn === "function" ? await signIn(keyHash) : idToken : null;
|
|
7324
7336
|
let delegationCert;
|
|
7325
7337
|
if (keyless) {
|
|
7326
7338
|
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");
|
|
@@ -7504,7 +7516,7 @@ function normalizeAddressTransport(refs) {
|
|
|
7504
7516
|
}
|
|
7505
7517
|
return { unique, order };
|
|
7506
7518
|
}
|
|
7507
|
-
function
|
|
7519
|
+
function normalizeReferenceVersionTransport(refs) {
|
|
7508
7520
|
const unique = [];
|
|
7509
7521
|
const order = [];
|
|
7510
7522
|
const indexes = /* @__PURE__ */ new Map();
|
|
@@ -7877,7 +7889,9 @@ ${String(commit).toLowerCase()}`;
|
|
|
7877
7889
|
lastSyncedAt
|
|
7878
7890
|
};
|
|
7879
7891
|
}
|
|
7880
|
-
const
|
|
7892
|
+
const bootLedgerName = restoreFrom ? "boot: open restored ledger" : mountInPlace ? "boot: mount resident ledger" : "boot: clone remote ledger (custody \u2192 local)";
|
|
7893
|
+
const _bootLedger = span("receive", bootLedgerName, "boot");
|
|
7894
|
+
let bootKernelSpans;
|
|
7881
7895
|
let remoteMain;
|
|
7882
7896
|
let restoredSyncedBase = null;
|
|
7883
7897
|
if (restoreFrom) {
|
|
@@ -7903,10 +7917,13 @@ ${String(commit).toLowerCase()}`;
|
|
|
7903
7917
|
if (!allowUnborn) throw new Error(`workspace '${workspace}' has no ledger main \u2014 create it first (POST /v2/workspaces/${workspace})`);
|
|
7904
7918
|
} else {
|
|
7905
7919
|
await fetchAndApplyPack("", "boot: fetch full pack");
|
|
7906
|
-
await mountBranchHead(remoteMain, "boot restore");
|
|
7920
|
+
const mounted = await mountBranchHead(remoteMain, "boot restore");
|
|
7921
|
+
if (mounted && typeof mounted === "object" && mounted.kernelSpans) {
|
|
7922
|
+
bootKernelSpans = mounted.kernelSpans;
|
|
7923
|
+
}
|
|
7907
7924
|
}
|
|
7908
7925
|
}
|
|
7909
|
-
_bootLedger.end();
|
|
7926
|
+
_bootLedger.end(bootKernelSpans ? { kernelSpans: bootKernelSpans } : {});
|
|
7910
7927
|
const serializedScheduler = createSerializedScheduler();
|
|
7911
7928
|
const serialize = serializedScheduler.serialize;
|
|
7912
7929
|
let seq = 0;
|
|
@@ -8153,12 +8170,11 @@ ${String(commit).toLowerCase()}`;
|
|
|
8153
8170
|
typeof principal === "string" && principal ? principal : typeof tokenSubject === "string" ? tokenSubject : ""
|
|
8154
8171
|
);
|
|
8155
8172
|
const readAuthFields = (keys, p) => {
|
|
8156
|
-
const out = {};
|
|
8173
|
+
const out = { nowUnix: Math.floor(Date.now() / 1e3) };
|
|
8157
8174
|
const pr = typeof p === "string" && p ? p : connectionPrincipal;
|
|
8158
8175
|
if (pr) out.principal = pr;
|
|
8159
8176
|
if (activeAuthToken) {
|
|
8160
8177
|
out.authToken = activeAuthToken;
|
|
8161
|
-
out.nowUnix = Math.floor(Date.now() / 1e3);
|
|
8162
8178
|
}
|
|
8163
8179
|
if (deviceSecret) out.authorSecret = deviceSecret;
|
|
8164
8180
|
if (Array.isArray(keys) && keys.length) out.keys = keys;
|
|
@@ -8252,13 +8268,14 @@ ${String(commit).toLowerCase()}`;
|
|
|
8252
8268
|
};
|
|
8253
8269
|
const recomputeCompat = ({ silent = false } = {}) => {
|
|
8254
8270
|
if (!compatState) return null;
|
|
8255
|
-
const offer = installedInterfaceInner();
|
|
8256
8271
|
const installRows = installRowsInner();
|
|
8272
|
+
const installed = installedLawOfRows(installRows) || [];
|
|
8273
|
+
const exactInstalledModel = installed.includes(String(compatState.generatedFor || ""));
|
|
8257
8274
|
const next = computeCompat({
|
|
8258
8275
|
generatedFor: compatState.generatedFor,
|
|
8259
|
-
installed
|
|
8276
|
+
installed,
|
|
8260
8277
|
requirement: compatRequirement,
|
|
8261
|
-
offer,
|
|
8278
|
+
offer: exactInstalledModel ? compatRequirement : installedInterfaceInner(),
|
|
8262
8279
|
installRows
|
|
8263
8280
|
});
|
|
8264
8281
|
const offerKey = JSON.stringify(next.members) + "|" + next.verdict + "|" + next.install.phase;
|
|
@@ -9121,7 +9138,13 @@ ${String(commit).toLowerCase()}`;
|
|
|
9121
9138
|
const atHash = await resolveBranchHead();
|
|
9122
9139
|
if (!atHash) throw new Error("workspace has no history to prove");
|
|
9123
9140
|
return JSON.parse(call("query", {
|
|
9124
|
-
queryBytes: qBytes({
|
|
9141
|
+
queryBytes: qBytes({
|
|
9142
|
+
op: "historyPreflight",
|
|
9143
|
+
domain,
|
|
9144
|
+
candidateHash,
|
|
9145
|
+
atHash,
|
|
9146
|
+
...opts.dispositions ? { dispositions: opts.dispositions } : {}
|
|
9147
|
+
})
|
|
9125
9148
|
}));
|
|
9126
9149
|
});
|
|
9127
9150
|
} catch (error) {
|
|
@@ -9133,7 +9156,8 @@ ${String(commit).toLowerCase()}`;
|
|
|
9133
9156
|
}
|
|
9134
9157
|
const prepared = prepareManagedPromotion(report, candidateHash, domain, {
|
|
9135
9158
|
...currentHash && currentHash !== candidateHash ? { replaces: currentHash } : {},
|
|
9136
|
-
...opts.because !== void 0 ? { acceptanceReason: opts.because } : {}
|
|
9159
|
+
...opts.because !== void 0 ? { acceptanceReason: opts.because } : {},
|
|
9160
|
+
...opts.dispositions ? { dispositions: opts.dispositions } : {}
|
|
9137
9161
|
});
|
|
9138
9162
|
if (!prepared.ok) return prepared;
|
|
9139
9163
|
try {
|
|
@@ -9740,26 +9764,6 @@ ${String(commit).toLowerCase()}`;
|
|
|
9740
9764
|
if (temporary) sourceHolon?._dispose?.();
|
|
9741
9765
|
}
|
|
9742
9766
|
};
|
|
9743
|
-
const governanceOffers = createGovernanceOffers({
|
|
9744
|
-
offerDirective,
|
|
9745
|
-
serialize,
|
|
9746
|
-
call,
|
|
9747
|
-
qBytes,
|
|
9748
|
-
_fetch,
|
|
9749
|
-
base,
|
|
9750
|
-
workspace,
|
|
9751
|
-
deviceSecret,
|
|
9752
|
-
authHeaders,
|
|
9753
|
-
receivingGroupNameOf,
|
|
9754
|
-
sha256hexBytes,
|
|
9755
|
-
bytesUnb64,
|
|
9756
|
-
actorForShareQuote,
|
|
9757
|
-
installedInterfaceInner,
|
|
9758
|
-
signWorkspaceOffer,
|
|
9759
|
-
// Build the keyless delegation cert through the kernel cert_sign op (the SAME single-source-of-truth path
|
|
9760
|
-
// as the holon method below) so the keyless enroll can seed the user's SignerDelegation.
|
|
9761
|
-
mintKeylessDelegation: (spec, secret) => mintKeylessDelegation((args) => JSON.parse(call("query", { queryBytes: qBytes({ op: "certSign", ...args }) })).cert, spec, secret)
|
|
9762
|
-
});
|
|
9763
9767
|
const ownedTupleData = (aggregateId) => {
|
|
9764
9768
|
const raw = JSON.parse(call("query", {
|
|
9765
9769
|
queryBytes: qBytes({ op: "byId", aggregateId }),
|
|
@@ -10281,6 +10285,31 @@ ${String(commit).toLowerCase()}`;
|
|
|
10281
10285
|
`Nomos application '${parent}' exposes ambiguous private '${operationId}' routes (${chosen.map((candidate) => `${candidate.domain}${candidate.path}`).join(", ")}); its law must declare exactly one application/home domain [nomos.application.contract_ambiguous]`
|
|
10282
10286
|
);
|
|
10283
10287
|
};
|
|
10288
|
+
const governanceOffers = createGovernanceOffers({
|
|
10289
|
+
offerDirective,
|
|
10290
|
+
serialize,
|
|
10291
|
+
call,
|
|
10292
|
+
qBytes,
|
|
10293
|
+
_fetch,
|
|
10294
|
+
base,
|
|
10295
|
+
workspace,
|
|
10296
|
+
deviceSecret,
|
|
10297
|
+
authHeaders,
|
|
10298
|
+
receivingGroupNameOf,
|
|
10299
|
+
sha256hexBytes,
|
|
10300
|
+
bytesUnb64,
|
|
10301
|
+
actorForShareQuote,
|
|
10302
|
+
installedInterfaceInner,
|
|
10303
|
+
signWorkspaceOffer,
|
|
10304
|
+
resolveFrameworkRoute: frameworkRoute,
|
|
10305
|
+
// Build the keyless delegation cert through the kernel cert_sign op (the SAME single-source-of-truth path
|
|
10306
|
+
// as the holon method below) so the keyless enroll can seed the user's SignerDelegation.
|
|
10307
|
+
mintKeylessDelegation: (spec, secret) => mintKeylessDelegation(
|
|
10308
|
+
(args) => JSON.parse(call("query", { queryBytes: qBytes({ op: "certSign", ...args }) })).cert,
|
|
10309
|
+
spec,
|
|
10310
|
+
secret
|
|
10311
|
+
)
|
|
10312
|
+
});
|
|
10284
10313
|
const measuredApplicationRead = async (name, read) => {
|
|
10285
10314
|
const performance2 = span("submit", name, "read");
|
|
10286
10315
|
try {
|
|
@@ -10459,15 +10488,15 @@ ${String(commit).toLowerCase()}`;
|
|
|
10459
10488
|
}), `resolveRefs:${refs.length}`),
|
|
10460
10489
|
/** Compare immutable version pins with their series' one current pointer. This never resolves
|
|
10461
10490
|
* the pinned version and never walks history. `currentField` is compiler/law supplied. */
|
|
10462
|
-
|
|
10491
|
+
checkReferenceVersions: (refs, keys, principal2) => serialize(async () => measuredApplicationRead("read: reference version status", async () => {
|
|
10463
10492
|
assertLive();
|
|
10464
|
-
const normalized =
|
|
10465
|
-
const result = throwIfRefused(await readProjectionWithRepair("
|
|
10466
|
-
queryBytes: qBytes({ op: "
|
|
10493
|
+
const normalized = normalizeReferenceVersionTransport(refs);
|
|
10494
|
+
const result = throwIfRefused(await readProjectionWithRepair("check_reference_versions", () => call("query", {
|
|
10495
|
+
queryBytes: qBytes({ op: "checkReferenceVersions", refs: normalized?.unique ?? refs }),
|
|
10467
10496
|
...readAuthFields(keys, principal2)
|
|
10468
10497
|
})));
|
|
10469
10498
|
return normalized === null ? result : { ...result, order: normalized.order };
|
|
10470
|
-
}), `
|
|
10499
|
+
}), `checkReferenceVersions:${refs.length}`),
|
|
10471
10500
|
/** Framework-private background lane used only by watch polling. */
|
|
10472
10501
|
_watchQueryById: (aggregateId, keys, principal2, cancelled) => serialize(async () => {
|
|
10473
10502
|
assertLive();
|
|
@@ -11153,6 +11182,7 @@ ${String(commit).toLowerCase()}`;
|
|
|
11153
11182
|
let frameworkHash = typeof spec.frameworkHash === "string" ? spec.frameworkHash : "";
|
|
11154
11183
|
let lawHash = typeof spec.lawHash === "string" ? spec.lawHash : "";
|
|
11155
11184
|
let parentDomains = null;
|
|
11185
|
+
const profileSpan = span("receive", "application custody: discover parent law", "application-open");
|
|
11156
11186
|
try {
|
|
11157
11187
|
const dr = await _fetch(`${base}/v2/workspaces/${parent}/domains`, {
|
|
11158
11188
|
headers: at ? packAuthHeaders({ authToken: at, principal: principal2 }) : authHeaders
|
|
@@ -11179,8 +11209,11 @@ ${String(commit).toLowerCase()}`;
|
|
|
11179
11209
|
unavailable.code = "nomos.application.unavailable";
|
|
11180
11210
|
unavailable.cause = e;
|
|
11181
11211
|
throw unavailable;
|
|
11212
|
+
} finally {
|
|
11213
|
+
profileSpan.end();
|
|
11182
11214
|
}
|
|
11183
11215
|
const currentLaw = parentDomains?.currentLaw && typeof parentDomains.currentLaw === "object" ? parentDomains.currentLaw : {};
|
|
11216
|
+
const routeSpan = span("receive", "application custody: resolve birth route", "application-open");
|
|
11184
11217
|
const homeRoute = await frameworkRoute({
|
|
11185
11218
|
parent,
|
|
11186
11219
|
operationId: directiveId,
|
|
@@ -11188,7 +11221,7 @@ ${String(commit).toLowerCase()}`;
|
|
|
11188
11221
|
token: at,
|
|
11189
11222
|
principal: principal2,
|
|
11190
11223
|
...typeof spec.domain === "string" && spec.domain ? { preferredDomain: spec.domain } : {}
|
|
11191
|
-
});
|
|
11224
|
+
}).finally(() => routeSpan.end());
|
|
11192
11225
|
const homeDomain = homeRoute.domain;
|
|
11193
11226
|
frameworkHash ||= typeof currentLaw.nomos === "string" ? currentLaw.nomos : "";
|
|
11194
11227
|
lawHash ||= typeof currentLaw[homeDomain] === "string" ? currentLaw[homeDomain] : "";
|
|
@@ -11226,67 +11259,84 @@ ${String(commit).toLowerCase()}`;
|
|
|
11226
11259
|
}
|
|
11227
11260
|
}
|
|
11228
11261
|
const device = spec.device && spec.device.secret && spec.device.public ? spec.device : JSON.parse(call("query", { queryBytes: qBytes({ op: "authorKeygen" }) }));
|
|
11229
|
-
|
|
11230
|
-
|
|
11231
|
-
|
|
11232
|
-
|
|
11233
|
-
|
|
11234
|
-
|
|
11235
|
-
|
|
11236
|
-
|
|
11237
|
-
|
|
11238
|
-
|
|
11239
|
-
|
|
11240
|
-
|
|
11241
|
-
|
|
11242
|
-
|
|
11243
|
-
|
|
11244
|
-
|
|
11245
|
-
|
|
11246
|
-
|
|
11262
|
+
const enrolSpan = span("receive", "application custody: enrol first device", "application-open");
|
|
11263
|
+
try {
|
|
11264
|
+
if (spec.idToken || typeof spec.signIn === "function") {
|
|
11265
|
+
await api.enrollFirstDevice({
|
|
11266
|
+
parent,
|
|
11267
|
+
principal: principal2,
|
|
11268
|
+
device,
|
|
11269
|
+
idToken: spec.idToken,
|
|
11270
|
+
signIn: spec.signIn,
|
|
11271
|
+
authToken: at,
|
|
11272
|
+
verifiedVia: spec.verifiedVia,
|
|
11273
|
+
domain: spec.enrollDomain || homeDomain,
|
|
11274
|
+
validFromEpoch: spec.validFromEpoch
|
|
11275
|
+
});
|
|
11276
|
+
} else {
|
|
11277
|
+
try {
|
|
11278
|
+
await api.enrollDevice({ principal: principal2, publicKey: device.public, authToken: at });
|
|
11279
|
+
} catch (e) {
|
|
11280
|
+
const msg = String(e && e.message || e);
|
|
11281
|
+
if (!/already|exists|duplicate|no active installed law declares domain 'home'|deploy the domain package first/i.test(msg)) throw e;
|
|
11282
|
+
}
|
|
11247
11283
|
}
|
|
11284
|
+
} finally {
|
|
11285
|
+
enrolSpan.end();
|
|
11248
11286
|
}
|
|
11249
11287
|
if (spec.assertParentDelegation !== false) {
|
|
11250
|
-
const
|
|
11251
|
-
|
|
11252
|
-
|
|
11253
|
-
|
|
11254
|
-
|
|
11255
|
-
|
|
11256
|
-
|
|
11257
|
-
|
|
11258
|
-
|
|
11259
|
-
|
|
11260
|
-
|
|
11261
|
-
|
|
11262
|
-
|
|
11263
|
-
|
|
11264
|
-
|
|
11265
|
-
|
|
11266
|
-
|
|
11267
|
-
|
|
11268
|
-
|
|
11269
|
-
|
|
11270
|
-
|
|
11288
|
+
const delegationSpan = span("receive", "application custody: await signer delegation", "application-open");
|
|
11289
|
+
try {
|
|
11290
|
+
const delegDeadline = Date.now() + pollTimeoutMs;
|
|
11291
|
+
let sawDelegation = false;
|
|
11292
|
+
const delegationRoute = await frameworkRoute({
|
|
11293
|
+
parent,
|
|
11294
|
+
operationId: "signerDelegationByUser",
|
|
11295
|
+
method: "get",
|
|
11296
|
+
token: at,
|
|
11297
|
+
principal: principal2,
|
|
11298
|
+
preferredDomain: homeDomain
|
|
11299
|
+
});
|
|
11300
|
+
while (Date.now() < delegDeadline) {
|
|
11301
|
+
try {
|
|
11302
|
+
const dq = await _fetch(`${base}/v2/workspaces/${parent}${delegationRoute.path}?user=${encodeURIComponent(owner)}`, {
|
|
11303
|
+
headers: at ? packAuthHeaders({ authToken: at, principal: principal2 }) : authHeaders
|
|
11304
|
+
});
|
|
11305
|
+
if (dq.ok) {
|
|
11306
|
+
const rows = await dq.json().catch(() => null);
|
|
11307
|
+
const has = Array.isArray(rows) ? rows.length > 0 : rows && Array.isArray(rows.rows) ? rows.rows.length > 0 : false;
|
|
11308
|
+
if (has) {
|
|
11309
|
+
sawDelegation = true;
|
|
11310
|
+
break;
|
|
11311
|
+
}
|
|
11271
11312
|
}
|
|
11313
|
+
} catch {
|
|
11272
11314
|
}
|
|
11273
|
-
|
|
11315
|
+
await sleep(pollMs);
|
|
11274
11316
|
}
|
|
11275
|
-
|
|
11276
|
-
|
|
11277
|
-
|
|
11278
|
-
|
|
11279
|
-
|
|
11280
|
-
|
|
11281
|
-
|
|
11282
|
-
|
|
11317
|
+
if (!sawDelegation) {
|
|
11318
|
+
const err = new Error(
|
|
11319
|
+
`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 come up UNWARRANTED/headless (birth-cert-not-seeded). The enroll must record the keyless delegation (enrollFirstDevice.delegationCert) BEFORE birth. [ParentSignerDelegationMissing]`
|
|
11320
|
+
);
|
|
11321
|
+
err.code = "ParentSignerDelegationMissing";
|
|
11322
|
+
throw err;
|
|
11323
|
+
}
|
|
11324
|
+
} finally {
|
|
11325
|
+
delegationSpan.end();
|
|
11283
11326
|
}
|
|
11284
11327
|
}
|
|
11285
|
-
const
|
|
11286
|
-
|
|
11287
|
-
|
|
11288
|
-
|
|
11328
|
+
const certSpan = span("receive", "application custody: sign birth certificate", "application-open");
|
|
11329
|
+
let homeCert;
|
|
11330
|
+
try {
|
|
11331
|
+
homeCert = await api.signBirthCert(
|
|
11332
|
+
{ child: home, founder: owner, verified: true, parentKey: device.public, parentId: parent, epoch: 0 },
|
|
11333
|
+
device.secret
|
|
11334
|
+
);
|
|
11335
|
+
} finally {
|
|
11336
|
+
certSpan.end();
|
|
11337
|
+
}
|
|
11289
11338
|
const birthPayload = { owner, frameworkHash, lawHash, bornAt };
|
|
11339
|
+
const sealSpan = span("receive", "application custody: seal birth offer", "application-open");
|
|
11290
11340
|
const sealedBirth = await signWorkspaceOffer({
|
|
11291
11341
|
target: parent,
|
|
11292
11342
|
domain: homeDomain,
|
|
@@ -11296,14 +11346,15 @@ ${String(commit).toLowerCase()}`;
|
|
|
11296
11346
|
authorSecret: device.secret,
|
|
11297
11347
|
authToken: typeof at === "string" ? at : void 0,
|
|
11298
11348
|
birthCertificate: homeCert
|
|
11299
|
-
});
|
|
11349
|
+
}).finally(() => sealSpan.end());
|
|
11350
|
+
const admissionSpan = span("receive", "application custody: admit birth remotely", "application-open");
|
|
11300
11351
|
const offerBody = await governanceOffers.postGovernanceOffer({
|
|
11301
11352
|
directiveId,
|
|
11302
11353
|
intentBytes: sealedBirth.intentBytes,
|
|
11303
11354
|
ws: parent,
|
|
11304
11355
|
authToken: typeof at === "string" ? at : void 0,
|
|
11305
11356
|
domain: homeDomain
|
|
11306
|
-
});
|
|
11357
|
+
}).finally(() => admissionSpan.end());
|
|
11307
11358
|
if (!offerBody.ok) throw new Error(`receiving-group setup at ${parent} refused (${offerBody.status || 422}): ${typeof offerBody.body === "string" ? offerBody.body : JSON.stringify(offerBody.body)}`);
|
|
11308
11359
|
{
|
|
11309
11360
|
const b = offerBody.body && typeof offerBody.body === "object" ? offerBody.body : null;
|
|
@@ -11312,45 +11363,61 @@ ${String(commit).toLowerCase()}`;
|
|
|
11312
11363
|
}
|
|
11313
11364
|
let born = null, verify = null;
|
|
11314
11365
|
if (confirm) {
|
|
11366
|
+
const custodySpan = span("receive", "application custody: await readable child custody", "application-open");
|
|
11315
11367
|
const deadline = Date.now() + pollTimeoutMs;
|
|
11316
|
-
|
|
11317
|
-
|
|
11318
|
-
|
|
11319
|
-
|
|
11320
|
-
|
|
11321
|
-
|
|
11322
|
-
|
|
11368
|
+
try {
|
|
11369
|
+
while (Date.now() < deadline) {
|
|
11370
|
+
const sr = await _fetch(`${base}/v2/workspaces/${home}`, { headers: at ? packAuthHeaders({ authToken: at, principal: principal2 }) : authHeaders }).catch(() => null);
|
|
11371
|
+
if (sr && sr.ok) {
|
|
11372
|
+
const st = await sr.json().catch(() => null);
|
|
11373
|
+
if (ledgerHeadOfStatus(st)) {
|
|
11374
|
+
born = st;
|
|
11375
|
+
break;
|
|
11376
|
+
}
|
|
11323
11377
|
}
|
|
11378
|
+
await sleep(pollMs);
|
|
11324
11379
|
}
|
|
11325
|
-
|
|
11380
|
+
} finally {
|
|
11381
|
+
custodySpan.end();
|
|
11326
11382
|
}
|
|
11327
11383
|
if (!born) throw new Error(`receiving-group setup: ${home} did not come up with a ledger head within ${pollTimeoutMs}ms`);
|
|
11328
11384
|
let peer;
|
|
11329
11385
|
let temporaryPeer = false;
|
|
11386
|
+
const peerSpan = span("receive", "application custody: open child in kernel plane", "application-open");
|
|
11330
11387
|
if (typeof openWorkspaceInPlane === "function") {
|
|
11331
|
-
|
|
11332
|
-
|
|
11333
|
-
|
|
11334
|
-
|
|
11335
|
-
|
|
11336
|
-
|
|
11388
|
+
try {
|
|
11389
|
+
peer = await openWorkspaceInPlane(home, {
|
|
11390
|
+
authToken: at,
|
|
11391
|
+
principal: owner,
|
|
11392
|
+
__testKRootPublic,
|
|
11393
|
+
__testRootSecret
|
|
11394
|
+
});
|
|
11395
|
+
} finally {
|
|
11396
|
+
peerSpan.end();
|
|
11397
|
+
}
|
|
11337
11398
|
} else {
|
|
11338
11399
|
const peerKernelProvider = typeof kernelProvider?.fork === "function" ? kernelProvider.fork() : void 0;
|
|
11339
|
-
|
|
11340
|
-
|
|
11341
|
-
|
|
11342
|
-
|
|
11343
|
-
|
|
11344
|
-
|
|
11345
|
-
|
|
11346
|
-
|
|
11347
|
-
|
|
11348
|
-
|
|
11400
|
+
try {
|
|
11401
|
+
peer = await connectSingle({
|
|
11402
|
+
cloud,
|
|
11403
|
+
workspace: home,
|
|
11404
|
+
clientId: `${cid}-verify`,
|
|
11405
|
+
authToken: at,
|
|
11406
|
+
fetchImpl,
|
|
11407
|
+
__testKRootPublic,
|
|
11408
|
+
__testRootSecret,
|
|
11409
|
+
...peerKernelProvider ? { kernelProvider: peerKernelProvider } : {}
|
|
11410
|
+
});
|
|
11411
|
+
} finally {
|
|
11412
|
+
peerSpan.end();
|
|
11413
|
+
}
|
|
11349
11414
|
temporaryPeer = true;
|
|
11350
11415
|
}
|
|
11416
|
+
const verifySpan = span("receive", "application custody: verify child custody", "application-open");
|
|
11351
11417
|
try {
|
|
11352
11418
|
verify = await peer.verifyChain();
|
|
11353
11419
|
} finally {
|
|
11420
|
+
verifySpan.end();
|
|
11354
11421
|
if (temporaryPeer) peer?._dispose?.();
|
|
11355
11422
|
}
|
|
11356
11423
|
if (!verify || verify.valid !== true) throw new Error(`receiving-group setup: ${home} failed replay verification: ${verify && verify.error}`);
|
|
@@ -11415,13 +11482,16 @@ ${String(commit).toLowerCase()}`;
|
|
|
11415
11482
|
*/
|
|
11416
11483
|
checkCompat: (nomosCompat, requirement) => {
|
|
11417
11484
|
if (!nomosCompat || typeof nomosCompat.lawHash !== "string") return null;
|
|
11485
|
+
if (compatState?.generatedFor === nomosCompat.lawHash && (requirement === void 0 || requirement === compatRequirement)) return compatState;
|
|
11418
11486
|
compatRequirement = requirement !== void 0 ? requirement : compatRequirement;
|
|
11419
11487
|
const installRows = installRowsInner();
|
|
11488
|
+
const installed = installedLawOfRows(installRows) || [];
|
|
11489
|
+
const exactInstalledModel = installed.includes(nomosCompat.lawHash);
|
|
11420
11490
|
const base2 = computeCompat({
|
|
11421
11491
|
generatedFor: nomosCompat.lawHash,
|
|
11422
|
-
installed
|
|
11492
|
+
installed,
|
|
11423
11493
|
requirement: compatRequirement,
|
|
11424
|
-
offer: installedInterfaceInner(),
|
|
11494
|
+
offer: exactInstalledModel ? compatRequirement : installedInterfaceInner(),
|
|
11425
11495
|
installRows
|
|
11426
11496
|
});
|
|
11427
11497
|
compatLastOfferKey = JSON.stringify(base2.members) + "|" + base2.verdict + "|" + base2.install.phase;
|
|
@@ -12879,11 +12949,12 @@ async function openRealm(opts = {}) {
|
|
|
12879
12949
|
}
|
|
12880
12950
|
}
|
|
12881
12951
|
watchReg.clear();
|
|
12882
|
-
for (const [, m] of mounted) {
|
|
12952
|
+
for (const [name, m] of mounted) {
|
|
12883
12953
|
try {
|
|
12884
12954
|
m.holon._dispose();
|
|
12885
12955
|
} catch {
|
|
12886
12956
|
}
|
|
12957
|
+
plane.drop(name);
|
|
12887
12958
|
}
|
|
12888
12959
|
mounted.clear();
|
|
12889
12960
|
parked.clear();
|
|
@@ -12908,20 +12979,84 @@ function reportApplicationPerformance(callback, span) {
|
|
|
12908
12979
|
const kind = typeof span.kind === "string" ? span.kind : "";
|
|
12909
12980
|
const name = typeof span.name === "string" && span.name.trim() ? span.name : kind || "Nomos work";
|
|
12910
12981
|
const born = Array.isArray(span.born) && span.born.length > 0;
|
|
12911
|
-
const operation = kind === "gate-fold" ? born ? "birth" : "offer" : kind === "boot" || kind === "cloud-status" ? "open" : kind === "sql" || kind === "query" || kind === "read" ? "read" : kind === "cfetch" || kind === "push" || kind === "converge" ? "sync" : "maintenance";
|
|
12982
|
+
const operation = kind === "gate-fold" ? born ? "birth" : "offer" : kind === "boot" || kind === "cloud-status" || kind === "application-open" ? "open" : kind === "sql" || kind === "query" || kind === "read" ? "read" : kind === "cfetch" || kind === "push" || kind === "converge" ? "sync" : "maintenance";
|
|
12912
12983
|
const sample = {
|
|
12913
12984
|
operation,
|
|
12914
12985
|
name,
|
|
12915
12986
|
durationMs: t1 - t0,
|
|
12916
12987
|
...typeof span.domain === "string" ? { domain: span.domain } : {},
|
|
12917
|
-
...typeof span.directiveId === "string" ? { directive: span.directiveId } : {}
|
|
12988
|
+
...typeof span.directiveId === "string" ? { directive: span.directiveId } : {},
|
|
12989
|
+
...span.kernelSpans !== null && typeof span.kernelSpans === "object" && !Array.isArray(span.kernelSpans) ? { kernel: span.kernelSpans } : {}
|
|
12918
12990
|
};
|
|
12919
12991
|
try {
|
|
12920
12992
|
callback(sample);
|
|
12921
12993
|
} catch {
|
|
12922
12994
|
}
|
|
12923
12995
|
}
|
|
12996
|
+
async function prepareGeneratedEntryCommands(holon, commands, report) {
|
|
12997
|
+
if (commands === void 0 || commands.length === 0) return;
|
|
12998
|
+
if (typeof holon.prepareDomainReady !== "function") {
|
|
12999
|
+
throw applicationError(
|
|
13000
|
+
"The installed Nomos runtime cannot prepare this generated application's entry commands.",
|
|
13001
|
+
"nomos.application.command_readiness_missing"
|
|
13002
|
+
);
|
|
13003
|
+
}
|
|
13004
|
+
for (const command of commands) {
|
|
13005
|
+
const started = performance.now();
|
|
13006
|
+
let result;
|
|
13007
|
+
try {
|
|
13008
|
+
result = await holon.prepareDomainReady(command.domain, command.packageHash, command.directiveId);
|
|
13009
|
+
} finally {
|
|
13010
|
+
try {
|
|
13011
|
+
report?.({
|
|
13012
|
+
operation: "open",
|
|
13013
|
+
name: "prepare generated entry command",
|
|
13014
|
+
durationMs: performance.now() - started,
|
|
13015
|
+
domain: command.domain,
|
|
13016
|
+
directive: command.directiveId
|
|
13017
|
+
});
|
|
13018
|
+
} catch {
|
|
13019
|
+
}
|
|
13020
|
+
}
|
|
13021
|
+
if (result?.prepared !== true) {
|
|
13022
|
+
throw applicationError(
|
|
13023
|
+
`Nomos could not prepare the generated '${command.domain}/${command.directiveId}' entry command.`,
|
|
13024
|
+
"nomos.application.command_not_ready"
|
|
13025
|
+
);
|
|
13026
|
+
}
|
|
13027
|
+
}
|
|
13028
|
+
}
|
|
12924
13029
|
var generatedChildApplicationContexts = /* @__PURE__ */ new WeakMap();
|
|
13030
|
+
var idleApplicationPlanes = /* @__PURE__ */ new Map();
|
|
13031
|
+
function acquireApplicationPlane(cloud) {
|
|
13032
|
+
const environment = typeof process === "object" && process !== null ? process.env : void 0;
|
|
13033
|
+
const key = [
|
|
13034
|
+
cloud,
|
|
13035
|
+
environment?.NOMOS_LOCAL_WASM ?? "",
|
|
13036
|
+
environment?.NOMOS_LOCAL_RUNTIME_DIR ?? ""
|
|
13037
|
+
].join("|");
|
|
13038
|
+
if (environment?.NOMOS_FORCE_COLD_APPLICATION_PLANE === "1") idleApplicationPlanes.delete(key);
|
|
13039
|
+
const idle = idleApplicationPlanes.get(key);
|
|
13040
|
+
const plane = idle?.pop() ?? createWasmEnginePlane();
|
|
13041
|
+
if (idle?.length === 0) idleApplicationPlanes.delete(key);
|
|
13042
|
+
let released = false;
|
|
13043
|
+
return {
|
|
13044
|
+
plane,
|
|
13045
|
+
release: () => {
|
|
13046
|
+
if (released) return;
|
|
13047
|
+
released = true;
|
|
13048
|
+
const available = idleApplicationPlanes.get(key) ?? [];
|
|
13049
|
+
available.push(plane);
|
|
13050
|
+
idleApplicationPlanes.delete(key);
|
|
13051
|
+
idleApplicationPlanes.set(key, available.slice(-1));
|
|
13052
|
+
while (idleApplicationPlanes.size > 4) {
|
|
13053
|
+
const oldest = idleApplicationPlanes.keys().next().value;
|
|
13054
|
+
if (oldest === void 0) break;
|
|
13055
|
+
idleApplicationPlanes.delete(oldest);
|
|
13056
|
+
}
|
|
13057
|
+
}
|
|
13058
|
+
};
|
|
13059
|
+
}
|
|
12925
13060
|
async function nomosInternalOpenGeneratedChildApplication(parent, workspace, bind) {
|
|
12926
13061
|
if (typeof parent !== "object" || parent === null) {
|
|
12927
13062
|
throw applicationError("Nomos could not follow this business application from its parent.", "nomos.application.parent_missing");
|
|
@@ -13189,9 +13324,7 @@ function applicationError(message, code, cause) {
|
|
|
13189
13324
|
if (cause !== void 0) error.cause = cause;
|
|
13190
13325
|
return error;
|
|
13191
13326
|
}
|
|
13192
|
-
async function ensureGeneratedModelCurrent(application
|
|
13193
|
-
const status = await holon.lawStatus();
|
|
13194
|
-
if (status.installed.includes(generatedLawHash)) return;
|
|
13327
|
+
async function ensureGeneratedModelCurrent(application) {
|
|
13195
13328
|
if (application.model?.adopt === void 0) {
|
|
13196
13329
|
throw applicationError(
|
|
13197
13330
|
"This generated application has no model lifecycle surface and cannot prove its plans are current.",
|
|
@@ -13228,6 +13361,28 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
|
|
|
13228
13361
|
if (!/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/.test(application)) {
|
|
13229
13362
|
throw applicationError("This generated application has an invalid deployed application name.", "nomos.application.name_invalid");
|
|
13230
13363
|
}
|
|
13364
|
+
const measureOpen = async (name, work) => {
|
|
13365
|
+
const started = performance.now();
|
|
13366
|
+
try {
|
|
13367
|
+
return await work();
|
|
13368
|
+
} finally {
|
|
13369
|
+
try {
|
|
13370
|
+
options.onPerformance?.({ operation: "open", name, durationMs: performance.now() - started });
|
|
13371
|
+
} catch {
|
|
13372
|
+
}
|
|
13373
|
+
}
|
|
13374
|
+
};
|
|
13375
|
+
const measureOpenSync = (name, work) => {
|
|
13376
|
+
const started = performance.now();
|
|
13377
|
+
try {
|
|
13378
|
+
return work();
|
|
13379
|
+
} finally {
|
|
13380
|
+
try {
|
|
13381
|
+
options.onPerformance?.({ operation: "open", name, durationMs: performance.now() - started });
|
|
13382
|
+
} catch {
|
|
13383
|
+
}
|
|
13384
|
+
}
|
|
13385
|
+
};
|
|
13231
13386
|
const environment = typeof process === "object" && process !== null ? process.env : void 0;
|
|
13232
13387
|
const lifecycleTrace = (event, detail = {}) => {
|
|
13233
13388
|
if (environment?.NOMOS_APPLICATION_LIFECYCLE_TRACE === "1") {
|
|
@@ -13235,7 +13390,7 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
|
|
|
13235
13390
|
}
|
|
13236
13391
|
};
|
|
13237
13392
|
const managedProof = environment?.NOMOS_PROOF_MANAGED === "1" && Boolean(environment.NOMOS_WS) && Boolean(environment.NOMOS_AUTHOR_SECRET);
|
|
13238
|
-
let authToken = (managedProof ? environment?.NOMOS_AUTH_TOKEN ?? "" : await options.signIn()).trim();
|
|
13393
|
+
let authToken = (managedProof ? environment?.NOMOS_AUTH_TOKEN ?? "" : await measureOpen("authenticate signed-in user", () => options.signIn())).trim();
|
|
13239
13394
|
if (!authToken && !managedProof) throw applicationError("Sign in did not supply an authority credential.", "nomos.authority.credential_missing");
|
|
13240
13395
|
const rawSubject = tokenClaim(authToken, "sub") ?? (managedProof ? environment?.NOMOS_PRINCIPAL ?? null : null);
|
|
13241
13396
|
const issuer = tokenClaim(authToken, "iss") ?? (managedProof ? "nomos-generated-proof" : null);
|
|
@@ -13247,12 +13402,13 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
|
|
|
13247
13402
|
const runtime = internals.runtime ?? { receivingGroupNameOf, openRealm };
|
|
13248
13403
|
const store = internals.store ?? privateStateStore();
|
|
13249
13404
|
const now = internals.now ?? (() => /* @__PURE__ */ new Date());
|
|
13250
|
-
const receivingGroup = await runtime.receivingGroupNameOf(subject);
|
|
13405
|
+
const receivingGroup = await measureOpen("resolve private application identity", () => runtime.receivingGroupNameOf(subject));
|
|
13251
13406
|
const user = {
|
|
13252
13407
|
identityId: receivingGroup,
|
|
13253
13408
|
identityAddress: `nomos-identity:${encodeURIComponent(receivingGroup)}`
|
|
13254
13409
|
};
|
|
13255
13410
|
if (managedProof) {
|
|
13411
|
+
const planeLease2 = internals.runtime === void 0 ? acquireApplicationPlane(cloud) : null;
|
|
13256
13412
|
const workspace = environment.NOMOS_WS;
|
|
13257
13413
|
const authorSecret = environment.NOMOS_AUTHOR_SECRET;
|
|
13258
13414
|
let phase2 = "current";
|
|
@@ -13268,23 +13424,40 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
|
|
|
13268
13424
|
}
|
|
13269
13425
|
}
|
|
13270
13426
|
};
|
|
13271
|
-
|
|
13272
|
-
|
|
13273
|
-
|
|
13274
|
-
|
|
13275
|
-
|
|
13276
|
-
|
|
13277
|
-
|
|
13278
|
-
|
|
13427
|
+
let realm2;
|
|
13428
|
+
try {
|
|
13429
|
+
realm2 = await measureOpen("prepare kernel plane", () => runtime.openRealm({
|
|
13430
|
+
cloud,
|
|
13431
|
+
authToken,
|
|
13432
|
+
...planeLease2 === null ? {} : { enginePlane: planeLease2.plane },
|
|
13433
|
+
onSpan: (span) => {
|
|
13434
|
+
reportApplicationPerformance(options.onPerformance, span);
|
|
13435
|
+
if (span.phase === "begin" && span.kind === "gate-fold") {
|
|
13436
|
+
phase2 = "saving";
|
|
13437
|
+
emit2();
|
|
13438
|
+
}
|
|
13279
13439
|
}
|
|
13440
|
+
}));
|
|
13441
|
+
} catch (cause) {
|
|
13442
|
+
planeLease2?.release();
|
|
13443
|
+
throw cause;
|
|
13444
|
+
}
|
|
13445
|
+
const closeRealm2 = async () => {
|
|
13446
|
+
try {
|
|
13447
|
+
return await realm2.dispose();
|
|
13448
|
+
} finally {
|
|
13449
|
+
planeLease2?.release();
|
|
13280
13450
|
}
|
|
13281
|
-
}
|
|
13451
|
+
};
|
|
13282
13452
|
const holon2 = await realm2.workspace(workspace, {
|
|
13283
13453
|
authToken,
|
|
13284
13454
|
principal: subject,
|
|
13285
13455
|
authorSecret,
|
|
13286
13456
|
...environment?.NOMOS_TEST_K_ROOT_PUBLIC ? { __testKRootPublic: environment.NOMOS_TEST_K_ROOT_PUBLIC } : {}
|
|
13287
13457
|
});
|
|
13458
|
+
const applicationObject = measureOpenSync("bind generated business API", () => bind(holon2, user));
|
|
13459
|
+
await ensureGeneratedModelCurrent(applicationObject);
|
|
13460
|
+
await measureOpen("prepare generated entry commands", () => prepareGeneratedEntryCommands(holon2, options.readyCommands, options.onPerformance));
|
|
13288
13461
|
const stop = holon2.autoSync({
|
|
13289
13462
|
onResult: (result) => {
|
|
13290
13463
|
lastResult2 = result;
|
|
@@ -13316,8 +13489,6 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
|
|
|
13316
13489
|
return () => listeners2.delete(listener);
|
|
13317
13490
|
}
|
|
13318
13491
|
};
|
|
13319
|
-
const applicationObject = bind(holon2, user);
|
|
13320
|
-
await ensureGeneratedModelCurrent(applicationObject, holon2, options.lawHash);
|
|
13321
13492
|
for (const name of Object.keys(lifecycle)) {
|
|
13322
13493
|
if (name in applicationObject) throw applicationError(`The business model declares '${name}', which is reserved by the generated application.`, "nomos.application.name_collision");
|
|
13323
13494
|
Object.defineProperty(applicationObject, name, { value: lifecycle[name], enumerable: true, configurable: false, writable: false });
|
|
@@ -13327,7 +13498,7 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
|
|
|
13327
13498
|
value: async () => {
|
|
13328
13499
|
childApplications.stop();
|
|
13329
13500
|
stop();
|
|
13330
|
-
await
|
|
13501
|
+
await closeRealm2();
|
|
13331
13502
|
}
|
|
13332
13503
|
});
|
|
13333
13504
|
return applicationObject;
|
|
@@ -13339,9 +13510,11 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
|
|
|
13339
13510
|
let secret;
|
|
13340
13511
|
let authoritySnapshot;
|
|
13341
13512
|
try {
|
|
13342
|
-
secret = await
|
|
13343
|
-
|
|
13344
|
-
|
|
13513
|
+
[secret, authoritySnapshot] = await measureOpen("load private restart state", async () => {
|
|
13514
|
+
const loadedSecret = await store.loadText(keyState);
|
|
13515
|
+
const encodedAuthority = await store.loadText(authoritySnapshotState);
|
|
13516
|
+
return [loadedSecret, encodedAuthority ? bytesFromBase64(encodedAuthority) : void 0];
|
|
13517
|
+
});
|
|
13345
13518
|
} catch (cause) {
|
|
13346
13519
|
throw applicationError("Nomos could not read its durable private application state and refused to guess.", "nomos.application.state_unavailable", cause);
|
|
13347
13520
|
}
|
|
@@ -13444,32 +13617,47 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
|
|
|
13444
13617
|
}, 75);
|
|
13445
13618
|
saveTimer.unref?.();
|
|
13446
13619
|
};
|
|
13447
|
-
const
|
|
13448
|
-
|
|
13449
|
-
|
|
13450
|
-
|
|
13451
|
-
|
|
13452
|
-
|
|
13453
|
-
|
|
13454
|
-
|
|
13455
|
-
|
|
13456
|
-
|
|
13457
|
-
|
|
13458
|
-
|
|
13459
|
-
|
|
13460
|
-
|
|
13461
|
-
if (!committed) {
|
|
13462
|
-
phase = "current";
|
|
13463
|
-
autoSync?.resume?.("author-ended-without-commit");
|
|
13620
|
+
const planeLease = internals.runtime === void 0 ? acquireApplicationPlane(cloud) : null;
|
|
13621
|
+
let realm;
|
|
13622
|
+
try {
|
|
13623
|
+
realm = await measureOpen("prepare kernel plane", () => runtime.openRealm({
|
|
13624
|
+
cloud,
|
|
13625
|
+
authToken,
|
|
13626
|
+
...planeLease === null ? {} : { enginePlane: planeLease.plane },
|
|
13627
|
+
onSpan: (span) => {
|
|
13628
|
+
reportApplicationPerformance(options.onPerformance, span);
|
|
13629
|
+
if (autoSync === null) return;
|
|
13630
|
+
if (span.phase === "begin" && span.kind === "gate-fold") {
|
|
13631
|
+
lifecycleTrace("author-begin", { id: span.id });
|
|
13632
|
+
autoSync?.pause?.();
|
|
13633
|
+
phase = "saving";
|
|
13464
13634
|
emit();
|
|
13465
|
-
|
|
13635
|
+
} else if (span.phase === "end" && span.kind === "gate-fold") {
|
|
13636
|
+
const committed = typeof span.domain === "string" && typeof span.directiveId === "string";
|
|
13637
|
+
lifecycleTrace("author-end", { id: span.id, committed, domain: span.domain, directiveId: span.directiveId });
|
|
13638
|
+
if (!committed) {
|
|
13639
|
+
phase = "current";
|
|
13640
|
+
autoSync?.resume?.("author-ended-without-commit");
|
|
13641
|
+
emit();
|
|
13642
|
+
return;
|
|
13643
|
+
}
|
|
13644
|
+
locallyDurableRemoteDebt += 1;
|
|
13645
|
+
syncAfterLocalSave = true;
|
|
13646
|
+
scheduleSave();
|
|
13466
13647
|
}
|
|
13467
|
-
locallyDurableRemoteDebt += 1;
|
|
13468
|
-
syncAfterLocalSave = true;
|
|
13469
|
-
scheduleSave();
|
|
13470
13648
|
}
|
|
13649
|
+
}));
|
|
13650
|
+
} catch (cause) {
|
|
13651
|
+
planeLease?.release();
|
|
13652
|
+
throw cause;
|
|
13653
|
+
}
|
|
13654
|
+
const closeRealm = async () => {
|
|
13655
|
+
try {
|
|
13656
|
+
return await realm.dispose();
|
|
13657
|
+
} finally {
|
|
13658
|
+
planeLease?.release();
|
|
13471
13659
|
}
|
|
13472
|
-
}
|
|
13660
|
+
};
|
|
13473
13661
|
const mountAuthority = async (authorSecret, token) => realm.workspace(receivingGroup, {
|
|
13474
13662
|
authToken: token,
|
|
13475
13663
|
principal: subject,
|
|
@@ -13480,24 +13668,25 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
|
|
|
13480
13668
|
...environment?.NOMOS_TEST_K_ROOT_PUBLIC ? { __testKRootPublic: environment.NOMOS_TEST_K_ROOT_PUBLIC } : {}
|
|
13481
13669
|
});
|
|
13482
13670
|
try {
|
|
13483
|
-
let authorityHolon = await mountAuthority(secret, authToken);
|
|
13484
|
-
const storedJournal = await store.loadText(journalState);
|
|
13671
|
+
let authorityHolon = await measureOpen("open private application custody", () => mountAuthority(secret, authToken));
|
|
13672
|
+
const storedJournal = await measureOpen("load application bootstrap state", () => store.loadText(journalState));
|
|
13485
13673
|
const completed = storedJournal === "complete";
|
|
13486
13674
|
const hadDurableSecret = secret !== null;
|
|
13487
13675
|
let publicKey;
|
|
13488
13676
|
if (secret === null) {
|
|
13489
|
-
const device = await authorityHolon.authorKeygen();
|
|
13677
|
+
const device = await measureOpen("create application device identity", () => authorityHolon.authorKeygen());
|
|
13490
13678
|
if (!device.ok || !device.secret || !device.public) throw new Error("the runtime did not create a device identity");
|
|
13491
|
-
await store.saveText(keyState, device.secret);
|
|
13679
|
+
await measureOpen("make application device identity durable", () => store.saveText(keyState, device.secret));
|
|
13492
13680
|
secret = device.secret;
|
|
13493
13681
|
publicKey = device.public;
|
|
13494
|
-
await store.saveText(journalState, "identity-durable");
|
|
13682
|
+
await measureOpen("save application bootstrap progress", () => store.saveText(journalState, "identity-durable"));
|
|
13495
13683
|
} else {
|
|
13496
|
-
|
|
13684
|
+
const durableSecret = secret;
|
|
13685
|
+
publicKey = await measureOpen("restore application device identity", () => authorityHolon.devicePublicOf(durableSecret));
|
|
13497
13686
|
}
|
|
13498
13687
|
const deviceChallengeBytes = Uint8Array.from(bytesFromBase64(publicKey));
|
|
13499
13688
|
const deviceChallenge = await crypto.subtle.digest("SHA-256", deviceChallengeBytes.buffer).then((digest) => [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, "0")).join(""));
|
|
13500
|
-
const deviceToken = (await options.signIn({ deviceChallenge })).trim();
|
|
13689
|
+
const deviceToken = (await measureOpen("attest application device", () => options.signIn({ deviceChallenge }))).trim();
|
|
13501
13690
|
if (!deviceToken) throw applicationError("Sign in did not attest this application device.", "nomos.authority.device_attestation_missing");
|
|
13502
13691
|
if (tokenClaim(deviceToken, "sub") !== rawSubject) {
|
|
13503
13692
|
throw applicationError("Sign in changed authority while preparing this application device.", "nomos.authority.changed_during_open");
|
|
@@ -13506,11 +13695,11 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
|
|
|
13506
13695
|
if (!completed) {
|
|
13507
13696
|
let homeAvailable = false;
|
|
13508
13697
|
try {
|
|
13509
|
-
homeAvailable = Boolean(await authorityHolon.head());
|
|
13698
|
+
homeAvailable = Boolean(await measureOpen("check private application custody", () => authorityHolon.head()));
|
|
13510
13699
|
} catch {
|
|
13511
13700
|
}
|
|
13512
13701
|
if (!homeAvailable) {
|
|
13513
|
-
const birth = await authorityHolon.nomosInternalBirthReceivingGroup({
|
|
13702
|
+
const birth = await measureOpen("establish private application custody", () => authorityHolon.nomosInternalBirthReceivingGroup({
|
|
13514
13703
|
parent: application,
|
|
13515
13704
|
principal,
|
|
13516
13705
|
subject,
|
|
@@ -13521,11 +13710,11 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
|
|
|
13521
13710
|
verifiedVia: issuer,
|
|
13522
13711
|
bornAt: now().toISOString(),
|
|
13523
13712
|
confirm: true
|
|
13524
|
-
});
|
|
13713
|
+
}));
|
|
13525
13714
|
const verdict = birth.verify;
|
|
13526
13715
|
if (verdict !== void 0 && verdict.valid !== true) throw new Error(`the born application failed replay verification: ${String(verdict.error ?? "unknown")}`);
|
|
13527
13716
|
} else if (!hadDurableSecret) {
|
|
13528
|
-
await authorityHolon.ensureParentSignerEnrollment({
|
|
13717
|
+
await measureOpen("enrol application device with its parent", () => authorityHolon.ensureParentSignerEnrollment({
|
|
13529
13718
|
parent: application,
|
|
13530
13719
|
principal,
|
|
13531
13720
|
publicKey,
|
|
@@ -13533,41 +13722,48 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
|
|
|
13533
13722
|
authToken,
|
|
13534
13723
|
idToken: authToken,
|
|
13535
13724
|
verifiedVia: issuer
|
|
13536
|
-
});
|
|
13725
|
+
}));
|
|
13537
13726
|
}
|
|
13538
|
-
await store.saveText(journalState, "home-available");
|
|
13539
|
-
authorityHolon = await mountAuthority(secret, authToken);
|
|
13727
|
+
await measureOpen("save application bootstrap progress", () => store.saveText(journalState, "home-available"));
|
|
13728
|
+
authorityHolon = await measureOpen("rebind durable application authority", () => mountAuthority(secret, authToken));
|
|
13540
13729
|
try {
|
|
13541
|
-
lastResult = await authorityHolon.sync();
|
|
13730
|
+
lastResult = await measureOpen("converge new application custody", () => authorityHolon.sync());
|
|
13542
13731
|
} catch {
|
|
13543
13732
|
phase = "offline";
|
|
13544
13733
|
}
|
|
13545
|
-
await store.saveText(journalState, "sync-attempted");
|
|
13546
|
-
const verified = await authorityHolon.verifyChain();
|
|
13734
|
+
await measureOpen("save application bootstrap progress", () => store.saveText(journalState, "sync-attempted"));
|
|
13735
|
+
const verified = await measureOpen("verify new application custody", () => authorityHolon.verifyChain());
|
|
13547
13736
|
if (verified.valid !== true) throw new Error(`the private authority context failed replay verification: ${String(verified.error ?? "unknown")}`);
|
|
13548
|
-
await store.saveText(journalState, "verified");
|
|
13737
|
+
await measureOpen("save application bootstrap progress", () => store.saveText(journalState, "verified"));
|
|
13549
13738
|
try {
|
|
13550
|
-
await authorityHolon.ensureParentSignerEnrollment({
|
|
13739
|
+
await measureOpen("confirm parent signer enrolment", () => authorityHolon.ensureParentSignerEnrollment({
|
|
13551
13740
|
parent: application,
|
|
13552
13741
|
principal: subject,
|
|
13553
13742
|
authorSecret: secret,
|
|
13554
13743
|
authToken,
|
|
13555
13744
|
idToken: authToken,
|
|
13556
13745
|
verifiedVia: issuer
|
|
13557
|
-
});
|
|
13746
|
+
}));
|
|
13558
13747
|
} catch (error) {
|
|
13559
13748
|
if (/revoked/i.test(String(error))) throw error;
|
|
13560
13749
|
}
|
|
13561
|
-
await
|
|
13562
|
-
|
|
13750
|
+
await measureOpen("complete application bootstrap journal", async () => {
|
|
13751
|
+
await store.saveText(journalState, "complete");
|
|
13752
|
+
await store.remove(journalState);
|
|
13753
|
+
});
|
|
13563
13754
|
}
|
|
13564
13755
|
holon = authorityHolon;
|
|
13565
|
-
const authorityVerified = await holon.verifyChain();
|
|
13756
|
+
const authorityVerified = await measureOpen("verify application custody", () => holon.verifyChain());
|
|
13566
13757
|
if (authorityVerified.valid !== true) throw new Error(`the private authority context failed replay verification: ${String(authorityVerified.error ?? "unknown")}`);
|
|
13567
13758
|
try {
|
|
13568
|
-
await
|
|
13759
|
+
await measureOpen("save restart-ready application state", async () => {
|
|
13760
|
+
await store.saveText(authoritySnapshotState, bytesToBase64(await holon.export()));
|
|
13761
|
+
});
|
|
13569
13762
|
} catch {
|
|
13570
13763
|
}
|
|
13764
|
+
const applicationObject = measureOpenSync("bind generated business API", () => bind(holon, user));
|
|
13765
|
+
await measureOpen("confirm generated model is current", () => ensureGeneratedModelCurrent(applicationObject));
|
|
13766
|
+
await measureOpen("prepare generated entry commands", () => prepareGeneratedEntryCommands(holon, options.readyCommands, options.onPerformance));
|
|
13571
13767
|
phase = "current";
|
|
13572
13768
|
autoSync = holon.autoSync({
|
|
13573
13769
|
onResult: (result) => {
|
|
@@ -13622,8 +13818,6 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
|
|
|
13622
13818
|
return () => listeners.delete(listener);
|
|
13623
13819
|
}
|
|
13624
13820
|
};
|
|
13625
|
-
const applicationObject = bind(holon, user);
|
|
13626
|
-
await ensureGeneratedModelCurrent(applicationObject, holon, options.lawHash);
|
|
13627
13821
|
for (const name of Object.keys(lifecycle)) {
|
|
13628
13822
|
if (name in applicationObject) throw applicationError(`The business model declares '${name}', which is reserved by the generated application.`, "nomos.application.name_collision");
|
|
13629
13823
|
Object.defineProperty(applicationObject, name, { value: lifecycle[name], enumerable: true, configurable: false, writable: false });
|
|
@@ -13639,13 +13833,13 @@ async function nomosInternalOpenGeneratedApplication(options, bind, internals =
|
|
|
13639
13833
|
lifecycleTrace("dispose-background-stopped");
|
|
13640
13834
|
await save();
|
|
13641
13835
|
lifecycleTrace("dispose-final-save-complete");
|
|
13642
|
-
await
|
|
13836
|
+
await closeRealm();
|
|
13643
13837
|
lifecycleTrace("dispose-complete");
|
|
13644
13838
|
}
|
|
13645
13839
|
});
|
|
13646
13840
|
return applicationObject;
|
|
13647
13841
|
} catch (cause) {
|
|
13648
|
-
await
|
|
13842
|
+
await closeRealm().catch(() => {
|
|
13649
13843
|
});
|
|
13650
13844
|
throw applicationError("Nomos could not finish preparing the signed-in business application.", "nomos.application.open_failed", cause);
|
|
13651
13845
|
}
|