footprintjs 9.44.2 → 9.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CLAUDE.md +4 -3
  2. package/dist/esm/lib/memory/DiagnosticCollector.js +2 -2
  3. package/dist/esm/lib/memory/EventLog.d.ts +1 -1
  4. package/dist/esm/lib/memory/EventLog.js +2 -2
  5. package/dist/esm/lib/memory/SharedMemory.d.ts +11 -10
  6. package/dist/esm/lib/memory/SharedMemory.js +19 -20
  7. package/dist/esm/lib/memory/StageContext.d.ts +11 -34
  8. package/dist/esm/lib/memory/StageContext.js +44 -94
  9. package/dist/esm/lib/memory/TransactionBuffer.d.ts +4 -3
  10. package/dist/esm/lib/memory/TransactionBuffer.js +6 -5
  11. package/dist/esm/lib/memory/recordCommit.d.ts +43 -0
  12. package/dist/esm/lib/memory/recordCommit.js +59 -0
  13. package/dist/esm/lib/memory/redaction.d.ts +1 -1
  14. package/dist/esm/lib/memory/redaction.js +2 -2
  15. package/dist/esm/lib/memory/utils.d.ts +11 -7
  16. package/dist/esm/lib/memory/utils.js +46 -28
  17. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +2 -2
  18. package/dist/esm/lib/runner/ExecutionRuntime.js +3 -3
  19. package/dist/lib/memory/DiagnosticCollector.js +2 -2
  20. package/dist/lib/memory/EventLog.js +2 -2
  21. package/dist/lib/memory/SharedMemory.js +19 -20
  22. package/dist/lib/memory/StageContext.js +43 -93
  23. package/dist/lib/memory/TransactionBuffer.js +6 -5
  24. package/dist/lib/memory/recordCommit.js +63 -0
  25. package/dist/lib/memory/redaction.js +2 -2
  26. package/dist/lib/memory/utils.js +46 -28
  27. package/dist/lib/runner/ExecutionRuntime.js +3 -3
  28. package/dist/types/lib/memory/EventLog.d.ts +1 -1
  29. package/dist/types/lib/memory/SharedMemory.d.ts +11 -10
  30. package/dist/types/lib/memory/StageContext.d.ts +11 -34
  31. package/dist/types/lib/memory/TransactionBuffer.d.ts +4 -3
  32. package/dist/types/lib/memory/recordCommit.d.ts +43 -0
  33. package/dist/types/lib/memory/redaction.d.ts +1 -1
  34. package/dist/types/lib/memory/utils.d.ts +11 -7
  35. package/dist/types/lib/runner/ExecutionRuntime.d.ts +2 -2
  36. package/package.json +1 -1
@@ -3,8 +3,11 @@
3
3
  * SharedMemory — The shared state container for all flowchart execution
4
4
  *
5
5
  * Like a runtime heap with namespace isolation:
6
- * - Each run gets its own namespace (runs/{id}/)
7
- * - Default values can be initialised and preserved
6
+ * - A value is written at an ADDRESS — a path prefix the caller computed
7
+ * (C2: the engine's frame decides it, `StageContext · address`) — and read
8
+ * there first, then at the root
9
+ * - Default values seed the root, and the container at an address when a
10
+ * write creates it
8
11
  * - Accepts commit bundles from TransactionBuffer
9
12
  *
10
13
  * COPY-ON-WRITE (9.29.0 — docs/design/2026-10-copy-on-write-commit.md):
@@ -38,39 +41,35 @@ class SharedMemory {
38
41
  getDefaultValues() {
39
42
  return this._defaultValues ? structuredClone(this._defaultValues) : undefined;
40
43
  }
41
- /** Gets all run namespaces. */
42
- getRuns() {
43
- return this.context.runs;
44
- }
45
- /** Updates a value using merge semantics, as a new generation (path copy + swap). */
46
- updateValue(runId, path, key, value) {
47
- const next = this.ownedPathTo(runId, path, key);
48
- (0, utils_js_1.updateNestedValue)(next, runId, path, key, value, this.getDefaultValues());
44
+ /** Updates a value at `address` + `path` using merge semantics, as a new generation (path copy + swap). */
45
+ updateValue(address, path, key, value) {
46
+ const next = this.ownedPathTo(address, path, key);
47
+ (0, utils_js_1.updateNestedValue)(next, address, path, key, value, this.getDefaultValues());
49
48
  this.context = next;
50
49
  }
51
- /** Sets a value using overwrite semantics, as a new generation (path copy + swap). */
52
- setValue(runId, path, key, value) {
53
- const next = this.ownedPathTo(runId, path, key);
54
- (0, utils_js_1.setNestedValue)(next, runId, path, key, value, this.getDefaultValues());
50
+ /** Sets a value at `address` + `path` using overwrite semantics, as a new generation (path copy + swap). */
51
+ setValue(address, path, key, value) {
52
+ const next = this.ownedPathTo(address, path, key);
53
+ (0, utils_js_1.setNestedValue)(next, address, path, key, value, this.getDefaultValues());
55
54
  this.context = next;
56
55
  }
57
56
  /**
58
57
  * A copy of the current generation's root whose containers on the way to
59
58
  * `key` are owned — the in-place helpers above then edit only copies.
60
59
  */
61
- ownedPathTo(runId, path, key) {
60
+ ownedPathTo(address, path, key) {
62
61
  const owned = new WeakSet();
63
62
  const root = (0, pathOps_js_1.ownedRootOf)(this.context, owned);
64
- const { runPath, globalPath } = (0, utils_js_1.getRunAndGlobalPaths)(runId, path);
63
+ const { runPath, globalPath } = (0, utils_js_1.getRunAndGlobalPaths)(address, path);
65
64
  (0, pathOps_js_1.ownSpine)(root, [...(runPath || globalPath), key], owned);
66
65
  return root;
67
66
  }
68
67
  /**
69
68
  * Reads a value from the store.
70
- * Looks up in run namespace first, falls back to global.
69
+ * Looks up at `address` first, falls back to the root.
71
70
  */
72
- getValue(runId, path, key) {
73
- const { globalPath, runPath } = (0, utils_js_1.getRunAndGlobalPaths)(runId, path);
71
+ getValue(address, path, key) {
72
+ const { globalPath, runPath } = (0, utils_js_1.getRunAndGlobalPaths)(address, path);
74
73
  const value = runPath ? (0, utils_js_1.getNestedValue)(this.context, runPath, key) : undefined;
75
74
  return typeof value !== 'undefined' ? value : (0, utils_js_1.getNestedValue)(this.context, globalPath, key);
76
75
  }
@@ -84,4 +83,4 @@ class SharedMemory {
84
83
  }
85
84
  }
86
85
  exports.SharedMemory = SharedMemory;
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhcmVkTWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvU2hhcmVkTWVtb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRzs7O0FBRUgsNkNBQXVFO0FBRXZFLHlDQUFxSDtBQUVySCxNQUFhLFlBQVk7SUFDZixPQUFPLEdBQTJCLEVBQUUsQ0FBQztJQUNyQyxjQUFjLENBQVc7SUFFakMsWUFBWSxhQUF1QixFQUFFLGNBQXdCO1FBQzNELElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUEsNkJBQWdCLEVBQUMsY0FBYyxJQUFJLEVBQUUsRUFBRSxhQUFhLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekUsd0VBQXdFO1FBQ3hFLHVFQUF1RTtRQUN2RSx1RUFBdUU7UUFDdkUsd0VBQXdFO1FBQ3hFLG1FQUFtRTtRQUNuRSw0REFBNEQ7UUFDNUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzdFLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEYsQ0FBQztJQUVELCtCQUErQjtJQUMvQixPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQscUZBQXFGO0lBQ3JGLFdBQVcsQ0FBQyxLQUFhLEVBQUUsSUFBYyxFQUFFLEdBQVcsRUFBRSxLQUFjO1FBQ3BFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoRCxJQUFBLDRCQUFpQixFQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBRUQsc0ZBQXNGO0lBQ3RGLFFBQVEsQ0FBQyxLQUFhLEVBQUUsSUFBYyxFQUFFLEdBQVcsRUFBRSxLQUFjO1FBQ2pFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoRCxJQUFBLHlCQUFjLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxXQUFXLENBQUMsS0FBYSxFQUFFLElBQWMsRUFBRSxHQUFXO1FBQzVELE1BQU0sS0FBSyxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBQSx3QkFBVyxFQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFBLCtCQUFvQixFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRSxJQUFBLHFCQUFRLEVBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRLENBQUMsS0FBYyxFQUFFLElBQWUsRUFBRSxHQUFZO1FBQ3BELE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBQSwrQkFBb0IsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFBLHlCQUFjLEVBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMvRSxPQUFPLE9BQU8sS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFBLHlCQUFjLEVBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELHNHQUFzRztJQUN0RyxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxrR0FBa0c7SUFDbEcsVUFBVSxDQUFDLFNBQXNCLEVBQUUsT0FBb0IsRUFBRSxLQUFtQjtRQUMxRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUEseUJBQWMsRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekUsQ0FBQztDQUNGO0FBdkVELG9DQXVFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2hhcmVkTWVtb3J5IOKAlCBUaGUgc2hhcmVkIHN0YXRlIGNvbnRhaW5lciBmb3IgYWxsIGZsb3djaGFydCBleGVjdXRpb25cbiAqXG4gKiBMaWtlIGEgcnVudGltZSBoZWFwIHdpdGggbmFtZXNwYWNlIGlzb2xhdGlvbjpcbiAqIC0gRWFjaCBydW4gZ2V0cyBpdHMgb3duIG5hbWVzcGFjZSAocnVucy97aWR9LylcbiAqIC0gRGVmYXVsdCB2YWx1ZXMgY2FuIGJlIGluaXRpYWxpc2VkIGFuZCBwcmVzZXJ2ZWRcbiAqIC0gQWNjZXB0cyBjb21taXQgYnVuZGxlcyBmcm9tIFRyYW5zYWN0aW9uQnVmZmVyXG4gKlxuICogQ09QWS1PTi1XUklURSAoOS4yOS4wIOKAlCBkb2NzL2Rlc2lnbi8yMDI2LTEwLWNvcHktb24td3JpdGUtY29tbWl0Lm1kKTpcbiAqIGBjb250ZXh0YCBpcyBhIEdFTkVSQVRJT04sIGFuZCBhIGdlbmVyYXRpb24gaXMgbmV2ZXIgZWRpdGVkLiBFdmVyeSB3cml0ZSDigJRcbiAqIGBhcHBseVBhdGNoYCAoYSBzdGFnZSBjb21taXQpLCBgc2V0VmFsdWVgLCBgdXBkYXRlVmFsdWVgIOKAlCBidWlsZHMgdGhlIG5leHRcbiAqIGdlbmVyYXRpb24gYnkgY29weWluZyB0aGUgcm9vdCBhbmQgdGhlIGNvbnRhaW5lcnMgb24gZWFjaCB3cml0dGVuIHBhdGgsXG4gKiBzaGFyZXMgZXZlcnkgb3RoZXIgc3VidHJlZSB3aXRoIHRoZSBnZW5lcmF0aW9uIGJlZm9yZSBpdCwgYW5kIHN3YXBzLiBTbyBhXG4gKiBnZW5lcmF0aW9uIGEgc3RhZ2UgY2FwdHVyZWQgKGl0cyBmaXJzdC10b3VjaCB2aWV3LCBpdHMgdHJhbnNhY3Rpb25cbiAqIGJ1ZmZlcidzIGRpZmYgYmFzZSkgc3RheXMgZXhhY3RseSB3aGF0IGl0IHdhcywgYW5kIGEgd3JpdGUgY29zdHMgTyh3aGF0IGl0XG4gKiB3cm90ZSksIG5vdCBPKHN0YXRlKS5cbiAqL1xuXG5pbXBvcnQgeyBtZXJnZUNvbnRleHRXaW5zLCBvd25lZFJvb3RPZiwgb3duU3BpbmUgfSBmcm9tICcuL3BhdGhPcHMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlQYXRjaCwgVHJhY2VFbnRyeSB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgZ2V0TmVzdGVkVmFsdWUsIGdldFJ1bkFuZEdsb2JhbFBhdGhzLCBuZXh0R2VuZXJhdGlvbiwgc2V0TmVzdGVkVmFsdWUsIHVwZGF0ZU5lc3RlZFZhbHVlIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBTaGFyZWRNZW1vcnkge1xuICBwcml2YXRlIGNvbnRleHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgcHJpdmF0ZSBfZGVmYXVsdFZhbHVlcz86IHVua25vd247XG5cbiAgY29uc3RydWN0b3IoZGVmYXVsdFZhbHVlcz86IHVua25vd24sIGluaXRpYWxDb250ZXh0PzogdW5rbm93bikge1xuICAgIHRoaXMuX2RlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0VmFsdWVzO1xuICAgIGNvbnN0IHNlZWQgPSBtZXJnZUNvbnRleHRXaW5zKGluaXRpYWxDb250ZXh0IHx8IHt9LCBkZWZhdWx0VmFsdWVzIHx8IHt9KTtcbiAgICAvLyBEZXRhY2hlZCBPTkNFLCBoZXJlOiBgbWVyZ2VDb250ZXh0V2luc2AgY29waWVzIG9ubHkgdGhlIHRvcCBsZXZlbCwgc29cbiAgICAvLyB0aGUgc2VlZCdzIG5lc3RlZCB2YWx1ZXMgYXJlIHRoZSBjYWxsZXIncyBvd24gb2JqZWN0cy4gQmVmb3JlIDkuMjkuMFxuICAgIC8vIHRoZSBmaXJzdCBjb21taXQncyB3aG9sZS1zdGF0ZSBjbG9uZSBkZXRhY2hlZCB0aGVtIChhbmQgdW50aWwgdGhlbiBhXG4gICAgLy8gY2FsbGVyIG11dGF0aW5nIGl0cyBgaW5pdGlhbENvbnRleHRgIGNoYW5nZWQgbGl2ZSBzdGF0ZSB3aXRoIG5vIHJvdyk7XG4gICAgLy8gbm90aGluZyByZS1jbG9uZXMgdGhlIHN0YXRlIGFueSBtb3JlLCBzbyB0aGUgc2VlZCBpcyBkZXRhY2hlZCBhdFxuICAgIC8vIGNvbnN0cnVjdGlvbiDigJQgb25lIGNsb25lIHBlciBydW50aW1lLCBub3Qgb25lIHBlciBjb21taXQuXG4gICAgdGhpcy5jb250ZXh0ID0gT2JqZWN0LmtleXMoc2VlZCkubGVuZ3RoID4gMCA/IHN0cnVjdHVyZWRDbG9uZShzZWVkKSA6IHNlZWQ7XG4gIH1cblxuICAvKiogR2V0cyBhIGNsb25lIG9mIHRoZSBkZWZhdWx0IHZhbHVlcy4gKi9cbiAgZ2V0RGVmYXVsdFZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlcyA/IHN0cnVjdHVyZWRDbG9uZSh0aGlzLl9kZWZhdWx0VmFsdWVzKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBHZXRzIGFsbCBydW4gbmFtZXNwYWNlcy4gKi9cbiAgZ2V0UnVucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0LnJ1bnM7XG4gIH1cblxuICAvKiogVXBkYXRlcyBhIHZhbHVlIHVzaW5nIG1lcmdlIHNlbWFudGljcywgYXMgYSBuZXcgZ2VuZXJhdGlvbiAocGF0aCBjb3B5ICsgc3dhcCkuICovXG4gIHVwZGF0ZVZhbHVlKHJ1bklkOiBzdHJpbmcsIHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5vd25lZFBhdGhUbyhydW5JZCwgcGF0aCwga2V5KTtcbiAgICB1cGRhdGVOZXN0ZWRWYWx1ZShuZXh0LCBydW5JZCwgcGF0aCwga2V5LCB2YWx1ZSwgdGhpcy5nZXREZWZhdWx0VmFsdWVzKCkpO1xuICAgIHRoaXMuY29udGV4dCA9IG5leHQ7XG4gIH1cblxuICAvKiogU2V0cyBhIHZhbHVlIHVzaW5nIG92ZXJ3cml0ZSBzZW1hbnRpY3MsIGFzIGEgbmV3IGdlbmVyYXRpb24gKHBhdGggY29weSArIHN3YXApLiAqL1xuICBzZXRWYWx1ZShydW5JZDogc3RyaW5nLCBwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMub3duZWRQYXRoVG8ocnVuSWQsIHBhdGgsIGtleSk7XG4gICAgc2V0TmVzdGVkVmFsdWUobmV4dCwgcnVuSWQsIHBhdGgsIGtleSwgdmFsdWUsIHRoaXMuZ2V0RGVmYXVsdFZhbHVlcygpKTtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgY29weSBvZiB0aGUgY3VycmVudCBnZW5lcmF0aW9uJ3Mgcm9vdCB3aG9zZSBjb250YWluZXJzIG9uIHRoZSB3YXkgdG9cbiAgICogYGtleWAgYXJlIG93bmVkIOKAlCB0aGUgaW4tcGxhY2UgaGVscGVycyBhYm92ZSB0aGVuIGVkaXQgb25seSBjb3BpZXMuXG4gICAqL1xuICBwcml2YXRlIG93bmVkUGF0aFRvKHJ1bklkOiBzdHJpbmcsIHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGNvbnN0IG93bmVkID0gbmV3IFdlYWtTZXQ8b2JqZWN0PigpO1xuICAgIGNvbnN0IHJvb3QgPSBvd25lZFJvb3RPZih0aGlzLmNvbnRleHQsIG93bmVkKTtcbiAgICBjb25zdCB7IHJ1blBhdGgsIGdsb2JhbFBhdGggfSA9IGdldFJ1bkFuZEdsb2JhbFBhdGhzKHJ1bklkLCBwYXRoKTtcbiAgICBvd25TcGluZShyb290LCBbLi4uKHJ1blBhdGggfHwgZ2xvYmFsUGF0aCksIGtleV0sIG93bmVkKTtcbiAgICByZXR1cm4gcm9vdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhIHZhbHVlIGZyb20gdGhlIHN0b3JlLlxuICAgKiBMb29rcyB1cCBpbiBydW4gbmFtZXNwYWNlIGZpcnN0LCBmYWxscyBiYWNrIHRvIGdsb2JhbC5cbiAgICovXG4gIGdldFZhbHVlKHJ1bklkPzogc3RyaW5nLCBwYXRoPzogc3RyaW5nW10sIGtleT86IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgeyBnbG9iYWxQYXRoLCBydW5QYXRoIH0gPSBnZXRSdW5BbmRHbG9iYWxQYXRocyhydW5JZCwgcGF0aCk7XG4gICAgY29uc3QgdmFsdWUgPSBydW5QYXRoID8gZ2V0TmVzdGVkVmFsdWUodGhpcy5jb250ZXh0LCBydW5QYXRoLCBrZXkpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnID8gdmFsdWUgOiBnZXROZXN0ZWRWYWx1ZSh0aGlzLmNvbnRleHQsIGdsb2JhbFBhdGgsIGtleSk7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgZW50aXJlIHN0YXRlIGFzIGEgSlNPTiBvYmplY3Qg4oCUIHRoZSBjdXJyZW50IGdlbmVyYXRpb24sIGJ5IHJlZmVyZW5jZS4gTmV2ZXIgbXV0YXRlIGl0LiAqL1xuICBnZXRTdGF0ZSgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgfVxuXG4gIC8qKiBBcHBsaWVzIGEgY29tbWl0IGJ1bmRsZSBmcm9tIFRyYW5zYWN0aW9uQnVmZmVyOiBidWlsZHMgdGhlIG5leHQgZ2VuZXJhdGlvbiBhbmQgc3dhcHMgaXQgaW4uICovXG4gIGFwcGx5UGF0Y2gob3ZlcndyaXRlOiBNZW1vcnlQYXRjaCwgdXBkYXRlczogTWVtb3J5UGF0Y2gsIHRyYWNlOiBUcmFjZUVudHJ5W10pOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXh0R2VuZXJhdGlvbih0aGlzLmNvbnRleHQsIHVwZGF0ZXMsIG92ZXJ3cml0ZSwgdHJhY2UpO1xuICB9XG59XG4iXX0=
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhcmVkTWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvU2hhcmVkTWVtb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRzs7O0FBRUgsNkNBQXVFO0FBRXZFLHlDQUFxSDtBQUVySCxNQUFhLFlBQVk7SUFDZixPQUFPLEdBQTJCLEVBQUUsQ0FBQztJQUNyQyxjQUFjLENBQVc7SUFFakMsWUFBWSxhQUF1QixFQUFFLGNBQXdCO1FBQzNELElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUEsNkJBQWdCLEVBQUMsY0FBYyxJQUFJLEVBQUUsRUFBRSxhQUFhLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekUsd0VBQXdFO1FBQ3hFLHVFQUF1RTtRQUN2RSx1RUFBdUU7UUFDdkUsd0VBQXdFO1FBQ3hFLG1FQUFtRTtRQUNuRSw0REFBNEQ7UUFDNUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzdFLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEYsQ0FBQztJQUVELDJHQUEyRztJQUMzRyxXQUFXLENBQUMsT0FBMEIsRUFBRSxJQUFjLEVBQUUsR0FBVyxFQUFFLEtBQWM7UUFDakYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELElBQUEsNEJBQWlCLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRCw0R0FBNEc7SUFDNUcsUUFBUSxDQUFDLE9BQTBCLEVBQUUsSUFBYyxFQUFFLEdBQVcsRUFBRSxLQUFjO1FBQzlFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRCxJQUFBLHlCQUFjLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxXQUFXLENBQUMsT0FBMEIsRUFBRSxJQUFjLEVBQUUsR0FBVztRQUN6RSxNQUFNLEtBQUssR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUEsd0JBQVcsRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBQSwrQkFBb0IsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEUsSUFBQSxxQkFBUSxFQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLE9BQTJCLEVBQUUsSUFBZSxFQUFFLEdBQVk7UUFDakUsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFBLCtCQUFvQixFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUEseUJBQWMsRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQy9FLE9BQU8sT0FBTyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUEseUJBQWMsRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsc0dBQXNHO0lBQ3RHLFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELGtHQUFrRztJQUNsRyxVQUFVLENBQUMsU0FBc0IsRUFBRSxPQUFvQixFQUFFLEtBQW1CO1FBQzFFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBQSx5QkFBYyxFQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6RSxDQUFDO0NBQ0Y7QUFsRUQsb0NBa0VDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTaGFyZWRNZW1vcnkg4oCUIFRoZSBzaGFyZWQgc3RhdGUgY29udGFpbmVyIGZvciBhbGwgZmxvd2NoYXJ0IGV4ZWN1dGlvblxuICpcbiAqIExpa2UgYSBydW50aW1lIGhlYXAgd2l0aCBuYW1lc3BhY2UgaXNvbGF0aW9uOlxuICogLSBBIHZhbHVlIGlzIHdyaXR0ZW4gYXQgYW4gQUREUkVTUyDigJQgYSBwYXRoIHByZWZpeCB0aGUgY2FsbGVyIGNvbXB1dGVkXG4gKiAgIChDMjogdGhlIGVuZ2luZSdzIGZyYW1lIGRlY2lkZXMgaXQsIGBTdGFnZUNvbnRleHQgwrcgYWRkcmVzc2ApIOKAlCBhbmQgcmVhZFxuICogICB0aGVyZSBmaXJzdCwgdGhlbiBhdCB0aGUgcm9vdFxuICogLSBEZWZhdWx0IHZhbHVlcyBzZWVkIHRoZSByb290LCBhbmQgdGhlIGNvbnRhaW5lciBhdCBhbiBhZGRyZXNzIHdoZW4gYVxuICogICB3cml0ZSBjcmVhdGVzIGl0XG4gKiAtIEFjY2VwdHMgY29tbWl0IGJ1bmRsZXMgZnJvbSBUcmFuc2FjdGlvbkJ1ZmZlclxuICpcbiAqIENPUFktT04tV1JJVEUgKDkuMjkuMCDigJQgZG9jcy9kZXNpZ24vMjAyNi0xMC1jb3B5LW9uLXdyaXRlLWNvbW1pdC5tZCk6XG4gKiBgY29udGV4dGAgaXMgYSBHRU5FUkFUSU9OLCBhbmQgYSBnZW5lcmF0aW9uIGlzIG5ldmVyIGVkaXRlZC4gRXZlcnkgd3JpdGUg4oCUXG4gKiBgYXBwbHlQYXRjaGAgKGEgc3RhZ2UgY29tbWl0KSwgYHNldFZhbHVlYCwgYHVwZGF0ZVZhbHVlYCDigJQgYnVpbGRzIHRoZSBuZXh0XG4gKiBnZW5lcmF0aW9uIGJ5IGNvcHlpbmcgdGhlIHJvb3QgYW5kIHRoZSBjb250YWluZXJzIG9uIGVhY2ggd3JpdHRlbiBwYXRoLFxuICogc2hhcmVzIGV2ZXJ5IG90aGVyIHN1YnRyZWUgd2l0aCB0aGUgZ2VuZXJhdGlvbiBiZWZvcmUgaXQsIGFuZCBzd2Fwcy4gU28gYVxuICogZ2VuZXJhdGlvbiBhIHN0YWdlIGNhcHR1cmVkIChpdHMgZmlyc3QtdG91Y2ggdmlldywgaXRzIHRyYW5zYWN0aW9uXG4gKiBidWZmZXIncyBkaWZmIGJhc2UpIHN0YXlzIGV4YWN0bHkgd2hhdCBpdCB3YXMsIGFuZCBhIHdyaXRlIGNvc3RzIE8od2hhdCBpdFxuICogd3JvdGUpLCBub3QgTyhzdGF0ZSkuXG4gKi9cblxuaW1wb3J0IHsgbWVyZ2VDb250ZXh0V2lucywgb3duZWRSb290T2YsIG93blNwaW5lIH0gZnJvbSAnLi9wYXRoT3BzLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5UGF0Y2gsIFRyYWNlRW50cnkgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGdldE5lc3RlZFZhbHVlLCBnZXRSdW5BbmRHbG9iYWxQYXRocywgbmV4dEdlbmVyYXRpb24sIHNldE5lc3RlZFZhbHVlLCB1cGRhdGVOZXN0ZWRWYWx1ZSB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG5leHBvcnQgY2xhc3MgU2hhcmVkTWVtb3J5IHtcbiAgcHJpdmF0ZSBjb250ZXh0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHByaXZhdGUgX2RlZmF1bHRWYWx1ZXM/OiB1bmtub3duO1xuXG4gIGNvbnN0cnVjdG9yKGRlZmF1bHRWYWx1ZXM/OiB1bmtub3duLCBpbml0aWFsQ29udGV4dD86IHVua25vd24pIHtcbiAgICB0aGlzLl9kZWZhdWx0VmFsdWVzID0gZGVmYXVsdFZhbHVlcztcbiAgICBjb25zdCBzZWVkID0gbWVyZ2VDb250ZXh0V2lucyhpbml0aWFsQ29udGV4dCB8fCB7fSwgZGVmYXVsdFZhbHVlcyB8fCB7fSk7XG4gICAgLy8gRGV0YWNoZWQgT05DRSwgaGVyZTogYG1lcmdlQ29udGV4dFdpbnNgIGNvcGllcyBvbmx5IHRoZSB0b3AgbGV2ZWwsIHNvXG4gICAgLy8gdGhlIHNlZWQncyBuZXN0ZWQgdmFsdWVzIGFyZSB0aGUgY2FsbGVyJ3Mgb3duIG9iamVjdHMuIEJlZm9yZSA5LjI5LjBcbiAgICAvLyB0aGUgZmlyc3QgY29tbWl0J3Mgd2hvbGUtc3RhdGUgY2xvbmUgZGV0YWNoZWQgdGhlbSAoYW5kIHVudGlsIHRoZW4gYVxuICAgIC8vIGNhbGxlciBtdXRhdGluZyBpdHMgYGluaXRpYWxDb250ZXh0YCBjaGFuZ2VkIGxpdmUgc3RhdGUgd2l0aCBubyByb3cpO1xuICAgIC8vIG5vdGhpbmcgcmUtY2xvbmVzIHRoZSBzdGF0ZSBhbnkgbW9yZSwgc28gdGhlIHNlZWQgaXMgZGV0YWNoZWQgYXRcbiAgICAvLyBjb25zdHJ1Y3Rpb24g4oCUIG9uZSBjbG9uZSBwZXIgcnVudGltZSwgbm90IG9uZSBwZXIgY29tbWl0LlxuICAgIHRoaXMuY29udGV4dCA9IE9iamVjdC5rZXlzKHNlZWQpLmxlbmd0aCA+IDAgPyBzdHJ1Y3R1cmVkQ2xvbmUoc2VlZCkgOiBzZWVkO1xuICB9XG5cbiAgLyoqIEdldHMgYSBjbG9uZSBvZiB0aGUgZGVmYXVsdCB2YWx1ZXMuICovXG4gIGdldERlZmF1bHRWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZXMgPyBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5fZGVmYXVsdFZhbHVlcykgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVXBkYXRlcyBhIHZhbHVlIGF0IGBhZGRyZXNzYCArIGBwYXRoYCB1c2luZyBtZXJnZSBzZW1hbnRpY3MsIGFzIGEgbmV3IGdlbmVyYXRpb24gKHBhdGggY29weSArIHN3YXApLiAqL1xuICB1cGRhdGVWYWx1ZShhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSwgcGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLm93bmVkUGF0aFRvKGFkZHJlc3MsIHBhdGgsIGtleSk7XG4gICAgdXBkYXRlTmVzdGVkVmFsdWUobmV4dCwgYWRkcmVzcywgcGF0aCwga2V5LCB2YWx1ZSwgdGhpcy5nZXREZWZhdWx0VmFsdWVzKCkpO1xuICAgIHRoaXMuY29udGV4dCA9IG5leHQ7XG4gIH1cblxuICAvKiogU2V0cyBhIHZhbHVlIGF0IGBhZGRyZXNzYCArIGBwYXRoYCB1c2luZyBvdmVyd3JpdGUgc2VtYW50aWNzLCBhcyBhIG5ldyBnZW5lcmF0aW9uIChwYXRoIGNvcHkgKyBzd2FwKS4gKi9cbiAgc2V0VmFsdWUoYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10sIHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5vd25lZFBhdGhUbyhhZGRyZXNzLCBwYXRoLCBrZXkpO1xuICAgIHNldE5lc3RlZFZhbHVlKG5leHQsIGFkZHJlc3MsIHBhdGgsIGtleSwgdmFsdWUsIHRoaXMuZ2V0RGVmYXVsdFZhbHVlcygpKTtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgY29weSBvZiB0aGUgY3VycmVudCBnZW5lcmF0aW9uJ3Mgcm9vdCB3aG9zZSBjb250YWluZXJzIG9uIHRoZSB3YXkgdG9cbiAgICogYGtleWAgYXJlIG93bmVkIOKAlCB0aGUgaW4tcGxhY2UgaGVscGVycyBhYm92ZSB0aGVuIGVkaXQgb25seSBjb3BpZXMuXG4gICAqL1xuICBwcml2YXRlIG93bmVkUGF0aFRvKGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdLCBwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBjb25zdCBvd25lZCA9IG5ldyBXZWFrU2V0PG9iamVjdD4oKTtcbiAgICBjb25zdCByb290ID0gb3duZWRSb290T2YodGhpcy5jb250ZXh0LCBvd25lZCk7XG4gICAgY29uc3QgeyBydW5QYXRoLCBnbG9iYWxQYXRoIH0gPSBnZXRSdW5BbmRHbG9iYWxQYXRocyhhZGRyZXNzLCBwYXRoKTtcbiAgICBvd25TcGluZShyb290LCBbLi4uKHJ1blBhdGggfHwgZ2xvYmFsUGF0aCksIGtleV0sIG93bmVkKTtcbiAgICByZXR1cm4gcm9vdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhIHZhbHVlIGZyb20gdGhlIHN0b3JlLlxuICAgKiBMb29rcyB1cCBhdCBgYWRkcmVzc2AgZmlyc3QsIGZhbGxzIGJhY2sgdG8gdGhlIHJvb3QuXG4gICAqL1xuICBnZXRWYWx1ZShhZGRyZXNzPzogcmVhZG9ubHkgc3RyaW5nW10sIHBhdGg/OiBzdHJpbmdbXSwga2V5Pzogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCB7IGdsb2JhbFBhdGgsIHJ1blBhdGggfSA9IGdldFJ1bkFuZEdsb2JhbFBhdGhzKGFkZHJlc3MsIHBhdGgpO1xuICAgIGNvbnN0IHZhbHVlID0gcnVuUGF0aCA/IGdldE5lc3RlZFZhbHVlKHRoaXMuY29udGV4dCwgcnVuUGF0aCwga2V5KSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyA/IHZhbHVlIDogZ2V0TmVzdGVkVmFsdWUodGhpcy5jb250ZXh0LCBnbG9iYWxQYXRoLCBrZXkpO1xuICB9XG5cbiAgLyoqIEdldHMgdGhlIGVudGlyZSBzdGF0ZSBhcyBhIEpTT04gb2JqZWN0IOKAlCB0aGUgY3VycmVudCBnZW5lcmF0aW9uLCBieSByZWZlcmVuY2UuIE5ldmVyIG11dGF0ZSBpdC4gKi9cbiAgZ2V0U3RhdGUoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQ7XG4gIH1cblxuICAvKiogQXBwbGllcyBhIGNvbW1pdCBidW5kbGUgZnJvbSBUcmFuc2FjdGlvbkJ1ZmZlcjogYnVpbGRzIHRoZSBuZXh0IGdlbmVyYXRpb24gYW5kIHN3YXBzIGl0IGluLiAqL1xuICBhcHBseVBhdGNoKG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2gsIHVwZGF0ZXM6IE1lbW9yeVBhdGNoLCB0cmFjZTogVHJhY2VFbnRyeVtdKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0ID0gbmV4dEdlbmVyYXRpb24odGhpcy5jb250ZXh0LCB1cGRhdGVzLCBvdmVyd3JpdGUsIHRyYWNlKTtcbiAgfVxufVxuIl19