footprintjs 4.17.2 → 5.0.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.
- package/CLAUDE.md +39 -1
- package/dist/advanced.js +1 -1
- package/dist/esm/advanced.js +1 -1
- package/dist/esm/index.js +3 -3
- package/dist/esm/lib/builder/FlowChartBuilder.js +32 -7
- package/dist/esm/lib/decide/decide.js +9 -9
- package/dist/esm/lib/decide/evidence.js +2 -2
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +3 -3
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +3 -3
- package/dist/esm/lib/engine/narrative/types.js +1 -1
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +20 -3
- package/dist/esm/lib/memory/StageContext.js +3 -3
- package/dist/esm/lib/memory/backtrack.js +1 -1
- package/dist/esm/lib/reactive/createTypedScope.js +5 -5
- package/dist/esm/lib/reactive/types.js +7 -7
- package/dist/esm/lib/recorder/BoundaryStateStore.js +167 -0
- package/dist/esm/lib/recorder/BoundaryStateTracker.js +4 -4
- package/dist/esm/lib/recorder/CombinedRecorder.js +9 -9
- package/dist/esm/lib/recorder/CommitRangeIndex.js +207 -0
- package/dist/esm/lib/recorder/CompositeRecorder.js +6 -6
- package/dist/esm/lib/recorder/EmitRecorder.js +3 -3
- package/dist/esm/lib/recorder/InOutRecorder.js +1 -1
- package/dist/esm/lib/recorder/KeyedStore.js +113 -0
- package/dist/esm/lib/recorder/QualityRecorder.js +2 -2
- package/dist/esm/lib/recorder/SequenceRecorder.js +2 -2
- package/dist/esm/lib/recorder/SequenceStore.js +195 -0
- package/dist/esm/lib/recorder/TopologyRecorder.js +1 -1
- package/dist/esm/lib/recorder/index.js +13 -3
- package/dist/esm/lib/runner/ExecutionRuntime.js +1 -1
- package/dist/esm/lib/runner/FlowChartExecutor.js +72 -28
- package/dist/esm/lib/runner/RunContext.js +2 -2
- package/dist/esm/lib/runner/RunnableChart.js +1 -1
- package/dist/esm/lib/runner/runId.js +65 -0
- package/dist/esm/lib/scope/ScopeFacade.js +6 -6
- package/dist/esm/lib/scope/index.js +1 -1
- package/dist/esm/lib/scope/recorders/DebugRecorder.js +4 -4
- package/dist/esm/lib/scope/recorders/MetricRecorder.js +2 -2
- package/dist/esm/lib/scope/recorders/index.js +1 -1
- package/dist/esm/lib/scope/types.js +1 -1
- package/dist/esm/recorders.js +1 -1
- package/dist/esm/trace.js +13 -1
- package/dist/index.js +3 -3
- package/dist/lib/builder/FlowChartBuilder.js +32 -7
- package/dist/lib/decide/decide.js +9 -9
- package/dist/lib/decide/evidence.js +2 -2
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +3 -3
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +3 -3
- package/dist/lib/engine/narrative/types.js +1 -1
- package/dist/lib/engine/traversal/FlowchartTraverser.js +20 -3
- package/dist/lib/memory/StageContext.js +3 -3
- package/dist/lib/memory/backtrack.js +1 -1
- package/dist/lib/reactive/createTypedScope.js +5 -5
- package/dist/lib/reactive/types.js +7 -7
- package/dist/lib/recorder/BoundaryStateStore.js +171 -0
- package/dist/lib/recorder/BoundaryStateTracker.js +4 -4
- package/dist/lib/recorder/CombinedRecorder.js +9 -9
- package/dist/lib/recorder/CommitRangeIndex.js +211 -0
- package/dist/lib/recorder/CompositeRecorder.js +6 -6
- package/dist/lib/recorder/EmitRecorder.js +3 -3
- package/dist/lib/recorder/InOutRecorder.js +1 -1
- package/dist/lib/recorder/KeyedStore.js +117 -0
- package/dist/lib/recorder/QualityRecorder.js +2 -2
- package/dist/lib/recorder/SequenceRecorder.js +2 -2
- package/dist/lib/recorder/SequenceStore.js +199 -0
- package/dist/lib/recorder/TopologyRecorder.js +1 -1
- package/dist/lib/recorder/index.js +19 -6
- package/dist/lib/runner/ExecutionRuntime.js +1 -1
- package/dist/lib/runner/FlowChartExecutor.js +72 -28
- package/dist/lib/runner/RunContext.js +2 -2
- package/dist/lib/runner/RunnableChart.js +1 -1
- package/dist/lib/runner/runId.js +70 -0
- package/dist/lib/scope/ScopeFacade.js +6 -6
- package/dist/lib/scope/index.js +1 -1
- package/dist/lib/scope/recorders/DebugRecorder.js +4 -4
- package/dist/lib/scope/recorders/MetricRecorder.js +2 -2
- package/dist/lib/scope/recorders/index.js +1 -1
- package/dist/lib/scope/types.js +1 -1
- package/dist/recorders.js +1 -1
- package/dist/trace.js +18 -2
- package/dist/types/index.d.ts +4 -4
- package/dist/types/lib/decide/evidence.d.ts +3 -3
- package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
- package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +2 -2
- package/dist/types/lib/engine/narrative/types.d.ts +19 -2
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +11 -0
- package/dist/types/lib/memory/StageContext.d.ts +2 -2
- package/dist/types/lib/memory/backtrack.d.ts +1 -1
- package/dist/types/lib/reactive/types.d.ts +7 -7
- package/dist/types/lib/recorder/BoundaryStateStore.d.ts +115 -0
- package/dist/types/lib/recorder/BoundaryStateTracker.d.ts +3 -3
- package/dist/types/lib/recorder/CombinedRecorder.d.ts +11 -11
- package/dist/types/lib/recorder/CommitRangeIndex.d.ts +147 -0
- package/dist/types/lib/recorder/CompositeRecorder.d.ts +8 -8
- package/dist/types/lib/recorder/EmitRecorder.d.ts +2 -2
- package/dist/types/lib/recorder/InOutRecorder.d.ts +1 -1
- package/dist/types/lib/recorder/KeyedStore.d.ts +70 -0
- package/dist/types/lib/recorder/QualityRecorder.d.ts +4 -4
- package/dist/types/lib/recorder/SequenceRecorder.d.ts +1 -1
- package/dist/types/lib/recorder/SequenceStore.d.ts +120 -0
- package/dist/types/lib/recorder/TopologyRecorder.d.ts +1 -1
- package/dist/types/lib/recorder/index.d.ts +5 -2
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +1 -1
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +36 -14
- package/dist/types/lib/runner/RunContext.d.ts +2 -2
- package/dist/types/lib/runner/RunnableChart.d.ts +2 -2
- package/dist/types/lib/runner/runId.d.ts +45 -0
- package/dist/types/lib/scope/ScopeFacade.d.ts +4 -4
- package/dist/types/lib/scope/index.d.ts +1 -1
- package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +4 -4
- package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +4 -4
- package/dist/types/lib/scope/recorders/index.d.ts +1 -1
- package/dist/types/lib/scope/types.d.ts +1 -1
- package/dist/types/recorders.d.ts +1 -1
- package/dist/types/trace.d.ts +5 -0
- package/package.json +1 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KeyedStore = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* KeyedStore<T> — concrete, composable 1:1 storage keyed by string id.
|
|
6
|
+
*
|
|
7
|
+
* Pattern: COMPOSITION primitive. Concrete class — instantiate with
|
|
8
|
+
* `new KeyedStore<T>()` and own it as a field on your
|
|
9
|
+
* recorder. Replaces the abstract `KeyedRecorder<T>` base
|
|
10
|
+
* class for the v5 "one purpose per recorder" rule.
|
|
11
|
+
* Role: 1:1 Map keyed by `runtimeStageId` (or any string).
|
|
12
|
+
* Insertion-ordered iteration.
|
|
13
|
+
*
|
|
14
|
+
* **Contrast with `SequenceStore<T>`:** KeyedStore is 1:1 — one entry
|
|
15
|
+
* per key. Use SequenceStore for 1:N (multiple entries per
|
|
16
|
+
* runtimeStageId, ordering matters).
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { KeyedStore } from 'footprintjs/trace';
|
|
21
|
+
*
|
|
22
|
+
* interface TokenEntry { input: number; output: number; }
|
|
23
|
+
*
|
|
24
|
+
* // ONE PURPOSE: typed-event handler. Storage is composed in.
|
|
25
|
+
* class TokenRecorder {
|
|
26
|
+
* readonly id = 'tokens';
|
|
27
|
+
* private readonly store = new KeyedStore<TokenEntry>();
|
|
28
|
+
*
|
|
29
|
+
* onLLMCall(event: LLMCallEvent) {
|
|
30
|
+
* this.store.set(event.runtimeStageId, event.usage);
|
|
31
|
+
* }
|
|
32
|
+
*
|
|
33
|
+
* getForStep(id: string) { return this.store.get(id); }
|
|
34
|
+
* getTotalTokens() { return this.store.aggregate((s, e) => s + e.input + e.output, 0); }
|
|
35
|
+
* getTokensUpTo(keys: Set<string>) {
|
|
36
|
+
* return this.store.accumulate((s, e) => s + e.input + e.output, 0, keys);
|
|
37
|
+
* }
|
|
38
|
+
*
|
|
39
|
+
* clear() { this.store.clear(); }
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
class KeyedStore {
|
|
44
|
+
data = new Map();
|
|
45
|
+
// ── Write ────────────────────────────────────────────────────────────
|
|
46
|
+
/** Store a single entry. Replaces any existing entry for the same key. */
|
|
47
|
+
set(key, entry) {
|
|
48
|
+
this.data.set(key, entry);
|
|
49
|
+
}
|
|
50
|
+
/** Remove an entry. Returns true if the key existed, false otherwise. */
|
|
51
|
+
delete(key) {
|
|
52
|
+
return this.data.delete(key);
|
|
53
|
+
}
|
|
54
|
+
// ── Translate (raw per-key) ──────────────────────────────────────────
|
|
55
|
+
/** O(1) lookup. */
|
|
56
|
+
get(key) {
|
|
57
|
+
return this.data.get(key);
|
|
58
|
+
}
|
|
59
|
+
/** True if a value exists for the key. */
|
|
60
|
+
has(key) {
|
|
61
|
+
return this.data.has(key);
|
|
62
|
+
}
|
|
63
|
+
/** All entries as a read-only Map (insertion-ordered). */
|
|
64
|
+
getMap() {
|
|
65
|
+
return this.data;
|
|
66
|
+
}
|
|
67
|
+
/** All values as an array (insertion-ordered). */
|
|
68
|
+
values() {
|
|
69
|
+
return [...this.data.values()];
|
|
70
|
+
}
|
|
71
|
+
/** Number of entries stored. */
|
|
72
|
+
get size() {
|
|
73
|
+
return this.data.size;
|
|
74
|
+
}
|
|
75
|
+
// ── Aggregate (reduce all entries) ───────────────────────────────────
|
|
76
|
+
/** Reduce ALL entries to a single value. For dashboards, totals, summaries. */
|
|
77
|
+
aggregate(fn, initial) {
|
|
78
|
+
let acc = initial;
|
|
79
|
+
for (const [key, entry] of this.data)
|
|
80
|
+
acc = fn(acc, entry, key);
|
|
81
|
+
return acc;
|
|
82
|
+
}
|
|
83
|
+
// ── Accumulate (progressive reduce) ──────────────────────────────────
|
|
84
|
+
/**
|
|
85
|
+
* Reduce entries, optionally filtered by a set of keys.
|
|
86
|
+
* For time-travel progressive view: pass the keys visible at the
|
|
87
|
+
* current slider position. Without keys, reduces all entries (same
|
|
88
|
+
* as `aggregate`).
|
|
89
|
+
*/
|
|
90
|
+
accumulate(fn, initial, keys) {
|
|
91
|
+
let acc = initial;
|
|
92
|
+
for (const [key, entry] of this.data) {
|
|
93
|
+
if (keys && !keys.has(key))
|
|
94
|
+
continue;
|
|
95
|
+
acc = fn(acc, entry, key);
|
|
96
|
+
}
|
|
97
|
+
return acc;
|
|
98
|
+
}
|
|
99
|
+
// ── Filter (subset by keys) ──────────────────────────────────────────
|
|
100
|
+
/** Return entries whose keys are in the set, preserving insertion order. */
|
|
101
|
+
filterByKeys(keys) {
|
|
102
|
+
const result = [];
|
|
103
|
+
for (const [key, entry] of this.data) {
|
|
104
|
+
if (keys.has(key))
|
|
105
|
+
result.push(entry);
|
|
106
|
+
}
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
109
|
+
// ── Lifecycle ────────────────────────────────────────────────────────
|
|
110
|
+
/** Clear all stored data. Recorders typically call this from their own
|
|
111
|
+
* `clear()` method, which the executor invokes before each run. */
|
|
112
|
+
clear() {
|
|
113
|
+
this.data.clear();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.KeyedStore = KeyedStore;
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS2V5ZWRTdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvS2V5ZWRTdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ0c7QUFDSCxNQUFhLFVBQVU7SUFDSixJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQWEsQ0FBQztJQUU3Qyx3RUFBd0U7SUFFeEUsMEVBQTBFO0lBQzFFLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBUTtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSxNQUFNLENBQUMsR0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCx3RUFBd0U7SUFFeEUsbUJBQW1CO0lBQ25CLEdBQUcsQ0FBQyxHQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsMENBQTBDO0lBQzFDLEdBQUcsQ0FBQyxHQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsMERBQTBEO0lBQzFELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxNQUFNO1FBQ0osT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsd0VBQXdFO0lBRXhFLCtFQUErRTtJQUMvRSxTQUFTLENBQUksRUFBd0MsRUFBRSxPQUFVO1FBQy9ELElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQztRQUNsQixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUk7WUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEUsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsd0VBQXdFO0lBRXhFOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFJLEVBQXdDLEVBQUUsT0FBVSxFQUFFLElBQTBCO1FBQzVGLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQztRQUNsQixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsU0FBUztZQUNyQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELHdFQUF3RTtJQUV4RSw0RUFBNEU7SUFDNUUsWUFBWSxDQUFDLElBQXlCO1FBQ3BDLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztRQUN2QixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELHdFQUF3RTtJQUV4RTt3RUFDb0U7SUFDcEUsS0FBSztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDcEIsQ0FBQztDQUNGO0FBdEZELGdDQXNGQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogS2V5ZWRTdG9yZTxUPiDigJQgY29uY3JldGUsIGNvbXBvc2FibGUgMToxIHN0b3JhZ2Uga2V5ZWQgYnkgc3RyaW5nIGlkLlxuICpcbiAqIFBhdHRlcm46IENPTVBPU0lUSU9OIHByaW1pdGl2ZS4gQ29uY3JldGUgY2xhc3Mg4oCUIGluc3RhbnRpYXRlIHdpdGhcbiAqICAgICAgICAgIGBuZXcgS2V5ZWRTdG9yZTxUPigpYCBhbmQgb3duIGl0IGFzIGEgZmllbGQgb24geW91clxuICogICAgICAgICAgcmVjb3JkZXIuIFJlcGxhY2VzIHRoZSBhYnN0cmFjdCBgS2V5ZWRSZWNvcmRlcjxUPmAgYmFzZVxuICogICAgICAgICAgY2xhc3MgZm9yIHRoZSB2NSBcIm9uZSBwdXJwb3NlIHBlciByZWNvcmRlclwiIHJ1bGUuXG4gKiBSb2xlOiAgICAxOjEgTWFwIGtleWVkIGJ5IGBydW50aW1lU3RhZ2VJZGAgKG9yIGFueSBzdHJpbmcpLlxuICogICAgICAgICAgSW5zZXJ0aW9uLW9yZGVyZWQgaXRlcmF0aW9uLlxuICpcbiAqICoqQ29udHJhc3Qgd2l0aCBgU2VxdWVuY2VTdG9yZTxUPmA6KiogS2V5ZWRTdG9yZSBpcyAxOjEg4oCUIG9uZSBlbnRyeVxuICogcGVyIGtleS4gVXNlIFNlcXVlbmNlU3RvcmUgZm9yIDE6TiAobXVsdGlwbGUgZW50cmllcyBwZXJcbiAqIHJ1bnRpbWVTdGFnZUlkLCBvcmRlcmluZyBtYXR0ZXJzKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgS2V5ZWRTdG9yZSB9IGZyb20gJ2Zvb3RwcmludGpzL3RyYWNlJztcbiAqXG4gKiBpbnRlcmZhY2UgVG9rZW5FbnRyeSB7IGlucHV0OiBudW1iZXI7IG91dHB1dDogbnVtYmVyOyB9XG4gKlxuICogLy8gT05FIFBVUlBPU0U6IHR5cGVkLWV2ZW50IGhhbmRsZXIuIFN0b3JhZ2UgaXMgY29tcG9zZWQgaW4uXG4gKiBjbGFzcyBUb2tlblJlY29yZGVyIHtcbiAqICAgcmVhZG9ubHkgaWQgPSAndG9rZW5zJztcbiAqICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IG5ldyBLZXllZFN0b3JlPFRva2VuRW50cnk+KCk7XG4gKlxuICogICBvbkxMTUNhbGwoZXZlbnQ6IExMTUNhbGxFdmVudCkge1xuICogICAgIHRoaXMuc3RvcmUuc2V0KGV2ZW50LnJ1bnRpbWVTdGFnZUlkLCBldmVudC51c2FnZSk7XG4gKiAgIH1cbiAqXG4gKiAgIGdldEZvclN0ZXAoaWQ6IHN0cmluZykgICAgeyByZXR1cm4gdGhpcy5zdG9yZS5nZXQoaWQpOyB9XG4gKiAgIGdldFRvdGFsVG9rZW5zKCkgICAgICAgICAgIHsgcmV0dXJuIHRoaXMuc3RvcmUuYWdncmVnYXRlKChzLCBlKSA9PiBzICsgZS5pbnB1dCArIGUub3V0cHV0LCAwKTsgfVxuICogICBnZXRUb2tlbnNVcFRvKGtleXM6IFNldDxzdHJpbmc+KSB7XG4gKiAgICAgcmV0dXJuIHRoaXMuc3RvcmUuYWNjdW11bGF0ZSgocywgZSkgPT4gcyArIGUuaW5wdXQgKyBlLm91dHB1dCwgMCwga2V5cyk7XG4gKiAgIH1cbiAqXG4gKiAgIGNsZWFyKCkgeyB0aGlzLnN0b3JlLmNsZWFyKCk7IH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgS2V5ZWRTdG9yZTxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YSA9IG5ldyBNYXA8c3RyaW5nLCBUPigpO1xuXG4gIC8vIOKUgOKUgCBXcml0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogU3RvcmUgYSBzaW5nbGUgZW50cnkuIFJlcGxhY2VzIGFueSBleGlzdGluZyBlbnRyeSBmb3IgdGhlIHNhbWUga2V5LiAqL1xuICBzZXQoa2V5OiBzdHJpbmcsIGVudHJ5OiBUKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhLnNldChrZXksIGVudHJ5KTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgYW4gZW50cnkuIFJldHVybnMgdHJ1ZSBpZiB0aGUga2V5IGV4aXN0ZWQsIGZhbHNlIG90aGVyd2lzZS4gKi9cbiAgZGVsZXRlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5kZWxldGUoa2V5KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBUcmFuc2xhdGUgKHJhdyBwZXIta2V5KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogTygxKSBsb29rdXAuICovXG4gIGdldChrZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0KGtleSk7XG4gIH1cblxuICAvKiogVHJ1ZSBpZiBhIHZhbHVlIGV4aXN0cyBmb3IgdGhlIGtleS4gKi9cbiAgaGFzKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5oYXMoa2V5KTtcbiAgfVxuXG4gIC8qKiBBbGwgZW50cmllcyBhcyBhIHJlYWQtb25seSBNYXAgKGluc2VydGlvbi1vcmRlcmVkKS4gKi9cbiAgZ2V0TWFwKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgVD4ge1xuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cblxuICAvKiogQWxsIHZhbHVlcyBhcyBhbiBhcnJheSAoaW5zZXJ0aW9uLW9yZGVyZWQpLiAqL1xuICB2YWx1ZXMoKTogVFtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZGF0YS52YWx1ZXMoKV07XG4gIH1cblxuICAvKiogTnVtYmVyIG9mIGVudHJpZXMgc3RvcmVkLiAqL1xuICBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRhdGEuc2l6ZTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBBZ2dyZWdhdGUgKHJlZHVjZSBhbGwgZW50cmllcykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIFJlZHVjZSBBTEwgZW50cmllcyB0byBhIHNpbmdsZSB2YWx1ZS4gRm9yIGRhc2hib2FyZHMsIHRvdGFscywgc3VtbWFyaWVzLiAqL1xuICBhZ2dyZWdhdGU8Uj4oZm46IChhY2M6IFIsIGVudHJ5OiBULCBrZXk6IHN0cmluZykgPT4gUiwgaW5pdGlhbDogUik6IFIge1xuICAgIGxldCBhY2MgPSBpbml0aWFsO1xuICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIHRoaXMuZGF0YSkgYWNjID0gZm4oYWNjLCBlbnRyeSwga2V5KTtcbiAgICByZXR1cm4gYWNjO1xuICB9XG5cbiAgLy8g4pSA4pSAIEFjY3VtdWxhdGUgKHByb2dyZXNzaXZlIHJlZHVjZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFJlZHVjZSBlbnRyaWVzLCBvcHRpb25hbGx5IGZpbHRlcmVkIGJ5IGEgc2V0IG9mIGtleXMuXG4gICAqIEZvciB0aW1lLXRyYXZlbCBwcm9ncmVzc2l2ZSB2aWV3OiBwYXNzIHRoZSBrZXlzIHZpc2libGUgYXQgdGhlXG4gICAqIGN1cnJlbnQgc2xpZGVyIHBvc2l0aW9uLiBXaXRob3V0IGtleXMsIHJlZHVjZXMgYWxsIGVudHJpZXMgKHNhbWVcbiAgICogYXMgYGFnZ3JlZ2F0ZWApLlxuICAgKi9cbiAgYWNjdW11bGF0ZTxSPihmbjogKGFjYzogUiwgZW50cnk6IFQsIGtleTogc3RyaW5nKSA9PiBSLCBpbml0aWFsOiBSLCBrZXlzPzogUmVhZG9ubHlTZXQ8c3RyaW5nPik6IFIge1xuICAgIGxldCBhY2MgPSBpbml0aWFsO1xuICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIHRoaXMuZGF0YSkge1xuICAgICAgaWYgKGtleXMgJiYgIWtleXMuaGFzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgYWNjID0gZm4oYWNjLCBlbnRyeSwga2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfVxuXG4gIC8vIOKUgOKUgCBGaWx0ZXIgKHN1YnNldCBieSBrZXlzKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogUmV0dXJuIGVudHJpZXMgd2hvc2Uga2V5cyBhcmUgaW4gdGhlIHNldCwgcHJlc2VydmluZyBpbnNlcnRpb24gb3JkZXIuICovXG4gIGZpbHRlckJ5S2V5cyhrZXlzOiBSZWFkb25seVNldDxzdHJpbmc+KTogVFtdIHtcbiAgICBjb25zdCByZXN1bHQ6IFRbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIHRoaXMuZGF0YSkge1xuICAgICAgaWYgKGtleXMuaGFzKGtleSkpIHJlc3VsdC5wdXNoKGVudHJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIENsZWFyIGFsbCBzdG9yZWQgZGF0YS4gUmVjb3JkZXJzIHR5cGljYWxseSBjYWxsIHRoaXMgZnJvbSB0aGVpciBvd25cbiAgICogIGBjbGVhcigpYCBtZXRob2QsIHdoaWNoIHRoZSBleGVjdXRvciBpbnZva2VzIGJlZm9yZSBlYWNoIHJ1bi4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhLmNsZWFyKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* if (event.stageName.includes('llm')) return 0.7;
|
|
18
18
|
* return 1.0;
|
|
19
19
|
* });
|
|
20
|
-
* executor.
|
|
20
|
+
* executor.attachScopeRecorder(quality);
|
|
21
21
|
* await executor.run();
|
|
22
22
|
*
|
|
23
23
|
* // Per-step score
|
|
@@ -134,4 +134,4 @@ class QualityRecorder extends KeyedRecorder_js_1.KeyedRecorder {
|
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
136
|
exports.QualityRecorder = QualityRecorder;
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVhbGl0eVJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9RdWFsaXR5UmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7OztBQUdILHlEQUFtRDtBQTJDbkQsTUFBYSxlQUFnQixTQUFRLGdDQUEyQjtJQUN0RCxNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUVuQixFQUFFLENBQVM7SUFDWCxrQkFBa0IsQ0FBb0I7SUFDOUIsU0FBUyxDQUFtQjtJQUU3QywrQ0FBK0M7SUFDdkMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO0lBQzNCLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDcEIsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLGVBQWUsR0FBYSxFQUFFLENBQUM7SUFDL0Isa0JBQWtCLEdBQWEsRUFBRSxDQUFDO0lBRTFDLFlBQVksU0FBMkIsRUFBRSxPQUFnQztRQUN2RSxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsSUFBSSxXQUFXLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLEVBQUUsa0JBQWtCLElBQUksWUFBWSxDQUFDO0lBQ3hFLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBaUI7UUFDNUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDbEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFC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QUssR0FBNEIsRUFBRSxDQUFDO1FBQzFDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUN6QyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQUUsNkRBQTZEO1lBQzFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDM0MsSUFBSSxFQUFFO2dCQUNKLFlBQVksRUFBRSxPQUFPO2dCQUNyQixZQUFZLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDcEMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxjQUFjO2dCQUM1QyxLQUFLO2FBQ047U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVRLEtBQUs7UUFDWixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDOztBQWpISCwwQ0FrSEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFF1YWxpdHlSZWNvcmRlciDigJQgcGVyLXN0ZXAgcXVhbGl0eSBzY29yaW5nIGtleWVkIGJ5IHJ1bnRpbWVTdGFnZUlkLlxuICpcbiAqIENvbGxlY3RzIHF1YWxpdHkgc2NvcmVzIGR1cmluZyB0cmF2ZXJzYWwgKGFjY3VtdWxhdGUgcGF0dGVybikuXG4gKiBBZnRlciBleGVjdXRpb24sIHVzZSBxdWFsaXR5VHJhY2UoKSB0byBiYWNrdHJhY2sgZnJvbSBhbnkgbG93LXNjb3Jpbmcgc3RlcC5cbiAqXG4gKiBFeHRlbmRzIEtleWVkUmVjb3JkZXI8UXVhbGl0eUVudHJ5PiBmb3IgTygxKSBsb29rdXAgYW5kIHN0YW5kYXJkIG9wZXJhdGlvbnM6XG4gKiAgIC0gKipUcmFuc2xhdGUqKjogYGdldEJ5S2V5KCdjYWxsLWxsbSM1JylgIOKAlCBxdWFsaXR5IGF0IHRoaXMgc3RlcFxuICogICAtICoqQWNjdW11bGF0ZSoqOiBwcm9ncmVzc2l2ZSBxdWFsaXR5IHVwIHRvIHNsaWRlciBwb3NpdGlvblxuICogICAtICoqQWdncmVnYXRlKio6IG92ZXJhbGwgcGlwZWxpbmUgcXVhbGl0eSBzY29yZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBxdWFsaXR5ID0gbmV3IFF1YWxpdHlSZWNvcmRlcigocnVudGltZVN0YWdlSWQsIGV2ZW50KSA9PiB7XG4gKiAgIC8vIEN1c3RvbSBzY29yaW5nIGZ1bmN0aW9uIOKAlCByZXR1cm4gMC4w4oCTMS4wXG4gKiAgIGlmIChldmVudC5zdGFnZU5hbWUuaW5jbHVkZXMoJ2xsbScpKSByZXR1cm4gMC43O1xuICogICByZXR1cm4gMS4wO1xuICogfSk7XG4gKiBleGVjdXRvci5hdHRhY2hSZWNvcmRlcihxdWFsaXR5KTtcbiAqIGF3YWl0IGV4ZWN1dG9yLnJ1bigpO1xuICpcbiAqIC8vIFBlci1zdGVwIHNjb3JlXG4gKiBxdWFsaXR5LmdldEJ5S2V5KCdjYWxsLWxsbSM1Jyk7ICAvLyB7IHNjb3JlOiAwLjcsIHN0YWdlTmFtZTogJ0NhbGxMTE0nLCBmYWN0b3JzOiBbLi4uXSB9XG4gKlxuICogLy8gT3ZlcmFsbCBxdWFsaXR5XG4gKiBxdWFsaXR5LmdldE92ZXJhbGxTY29yZSgpOyAgLy8gMC44NVxuICpcbiAqIC8vIExvd2VzdC1zY29yaW5nIHN0ZXBcbiAqIHF1YWxpdHkuZ2V0TG93ZXN0KCk7ICAvLyB7IHJ1bnRpbWVTdGFnZUlkOiAnY2FsbC1sbG0jNScsIGVudHJ5OiB7IHNjb3JlOiAwLjcsIC4uLiB9IH1cbiAqIGBgYFxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVhZEV2ZW50LCBSZWNvcmRlciwgU3RhZ2VFdmVudCwgV3JpdGVFdmVudCB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB7IEtleWVkUmVjb3JkZXIgfSBmcm9tICcuL0tleWVkUmVjb3JkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRlck9wZXJhdGlvbiB9IGZyb20gJy4vUmVjb3JkZXJPcGVyYXRpb24uanMnO1xuXG4vKiogUGVyLXN0ZXAgcXVhbGl0eSBkYXRhIHN0b3JlZCBieSBRdWFsaXR5UmVjb3JkZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1YWxpdHlFbnRyeSB7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdGFnZSBuYW1lLiAqL1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZGVudGlmaWVyLiAqL1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBRdWFsaXR5IHNjb3JlIGZvciB0aGlzIHN0ZXAgKDAuMCA9IHdvcnN0LCAxLjAgPSBiZXN0KS4gKi9cbiAgc2NvcmU6IG51bWJlcjtcbiAgLyoqIFdoYXQgY29udHJpYnV0ZWQgdG8gdGhpcyBzY29yZS4gKi9cbiAgZmFjdG9yczogc3RyaW5nW107XG4gIC8qKiBLZXlzIHJlYWQgZHVyaW5nIHRoaXMgc3RlcCAoZm9yIGJhY2t0cmFja2luZykuICovXG4gIGtleXNSZWFkOiBzdHJpbmdbXTtcbiAgLyoqIEtleXMgd3JpdHRlbiBkdXJpbmcgdGhpcyBzdGVwIChmb3IgYmFja3RyYWNraW5nKS4gKi9cbiAga2V5c1dyaXR0ZW46IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFNjb3JpbmcgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBzdGFnZS5cbiAqIFJlY2VpdmVzIHRoZSBydW50aW1lU3RhZ2VJZCwgc3RhZ2UgZXZlbnQsIGFuZCBhIHN1bW1hcnkgb2YgcmVhZHMvd3JpdGVzLlxuICogUmV0dXJuIGEgc2NvcmUgKDAuMOKAkzEuMCkgYW5kIG9wdGlvbmFsIGZhY3RvcnMgZXhwbGFpbmluZyB0aGUgc2NvcmUuXG4gKi9cbmV4cG9ydCB0eXBlIFF1YWxpdHlTY29yaW5nRm4gPSAoXG4gIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsXG4gIGNvbnRleHQ6IHtcbiAgICBzdGFnZU5hbWU6IHN0cmluZztcbiAgICBzdGFnZUlkOiBzdHJpbmc7XG4gICAga2V5c1JlYWQ6IHN0cmluZ1tdO1xuICAgIGtleXNXcml0dGVuOiBzdHJpbmdbXTtcbiAgICBkdXJhdGlvbj86IG51bWJlcjtcbiAgfSxcbikgPT4geyBzY29yZTogbnVtYmVyOyBmYWN0b3JzPzogc3RyaW5nW10gfTtcblxuLyoqIE9wdGlvbnMgZm9yIFF1YWxpdHlSZWNvcmRlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVhbGl0eVJlY29yZGVyT3B0aW9ucyB7XG4gIC8qKiBSZWNvcmRlciBJRC4gRGVmYXVsdHMgdG8gYXV0by1pbmNyZW1lbnQuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogUHJlZmVycmVkIFVJIG9wZXJhdGlvbi4gRGVmYXVsdHMgdG8gJ2FjY3VtdWxhdGUnIChwcm9ncmVzc2l2ZSBxdWFsaXR5KS4gKi9cbiAgcHJlZmVycmVkT3BlcmF0aW9uPzogUmVjb3JkZXJPcGVyYXRpb247XG59XG5cbmV4cG9ydCBjbGFzcyBRdWFsaXR5UmVjb3JkZXIgZXh0ZW5kcyBLZXllZFJlY29yZGVyPFF1YWxpdHlFbnRyeT4gaW1wbGVtZW50cyBSZWNvcmRlciB7XG4gIHByaXZhdGUgc3RhdGljIF9jb3VudGVyID0gMDtcblxuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBwcmVmZXJyZWRPcGVyYXRpb246IFJlY29yZGVyT3BlcmF0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IHNjb3JpbmdGbjogUXVhbGl0eVNjb3JpbmdGbjtcblxuICAvLyBQZXItc3RhZ2UgYnVmZmVycyAocmVzZXQgb24gZWFjaCBzdGFnZVN0YXJ0KVxuICBwcml2YXRlIGN1cnJlbnRSdW50aW1lU3RhZ2VJZCA9ICcnO1xuICBwcml2YXRlIGN1cnJlbnRTdGFnZUlkID0gJyc7XG4gIHByaXZhdGUgY3VycmVudFN0YWdlTmFtZSA9ICcnO1xuICBwcml2YXRlIGN1cnJlbnRLZXlzUmVhZDogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBjdXJyZW50S2V5c1dyaXR0ZW46IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcmluZ0ZuOiBRdWFsaXR5U2NvcmluZ0ZuLCBvcHRpb25zPzogUXVhbGl0eVJlY29yZGVyT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zY29yaW5nRm4gPSBzY29yaW5nRm47XG4gICAgdGhpcy5pZCA9IG9wdGlvbnM/LmlkID8/IGBxdWFsaXR5LSR7KytRdWFsaXR5UmVjb3JkZXIuX2NvdW50ZXJ9YDtcbiAgICB0aGlzLnByZWZlcnJlZE9wZXJhdGlvbiA9IG9wdGlvbnM/LnByZWZlcnJlZE9wZXJhdGlvbiA/PyAnYWNjdW11bGF0ZSc7XG4gIH1cblxuICBvblN0YWdlU3RhcnQoZXZlbnQ6IFN0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRSdW50aW1lU3RhZ2VJZCA9IGV2ZW50LnJ1bnRpbWVTdGFnZUlkO1xuICAgIHRoaXMuY3VycmVudFN0YWdlSWQgPSBldmVudC5zdGFnZUlkO1xuICAgIHRoaXMuY3VycmVudFN0YWdlTmFtZSA9IGV2ZW50LnN0YWdlTmFtZTtcbiAgICB0aGlzLmN1cnJlbnRLZXlzUmVhZCA9IFtdO1xuICAgIHRoaXMuY3VycmVudEtleXNXcml0dGVuID0gW107XG4gIH1cblxuICBvblJlYWQoZXZlbnQ6IFJlYWRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkpIHRoaXMuY3VycmVudEtleXNSZWFkLnB1c2goZXZlbnQua2V5KTtcbiAgfVxuXG4gIG9uV3JpdGUoZXZlbnQ6IFdyaXRlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRLZXlzV3JpdHRlbi5wdXNoKGV2ZW50LmtleSk7XG4gIH1cblxuICBvblN0YWdlRW5kKGV2ZW50OiBTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgeyBzY29yZSwgZmFjdG9ycyB9ID0gdGhpcy5zY29yaW5nRm4odGhpcy5jdXJyZW50UnVudGltZVN0YWdlSWQsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5jdXJyZW50U3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogdGhpcy5jdXJyZW50U3RhZ2VJZCxcbiAgICAgIGtleXNSZWFkOiB0aGlzLmN1cnJlbnRLZXlzUmVhZCxcbiAgICAgIGtleXNXcml0dGVuOiB0aGlzLmN1cnJlbnRLZXlzV3JpdHRlbixcbiAgICAgIGR1cmF0aW9uOiBldmVudC5kdXJhdGlvbixcbiAgICB9KTtcblxuICAgIHRoaXMuc3RvcmUodGhpcy5jdXJyZW50UnVudGltZVN0YWdlSWQsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5jdXJyZW50U3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogdGhpcy5jdXJyZW50U3RhZ2VJZCxcbiAgICAgIHNjb3JlOiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBzY29yZSkpLFxuICAgICAgZmFjdG9yczogZmFjdG9ycyA/PyBbXSxcbiAgICAgIGtleXNSZWFkOiBbLi4udGhpcy5jdXJyZW50S2V5c1JlYWRdLFxuICAgICAga2V5c1dyaXR0ZW46IFsuLi50aGlzLmN1cnJlbnRLZXlzV3JpdHRlbl0sXG4gICAgfSk7XG4gIH1cblxuICAvKiogT3ZlcmFsbCBxdWFsaXR5IHNjb3JlIOKAlCBhdmVyYWdlIG9mIGFsbCBzdGVwIHNjb3Jlcy4gKi9cbiAgZ2V0T3ZlcmFsbFNjb3JlKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gMCkgcmV0dXJuIDEuMDtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMuYWdncmVnYXRlKChzdW0sIGUpID0+IHN1bSArIGUuc2NvcmUsIDApO1xuICAgIHJldHVybiB0b3RhbCAvIHRoaXMuc2l6ZTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBsb3dlc3Qtc2NvcmluZyBzdGVwLiAqL1xuICBnZXRMb3dlc3QoKTogeyBydW50aW1lU3RhZ2VJZDogc3RyaW5nOyBlbnRyeTogUXVhbGl0eUVudHJ5IH0gfCB1bmRlZmluZWQge1xuICAgIGxldCBsb3dlc3Q6IHsgcnVudGltZVN0YWdlSWQ6IHN0cmluZzsgZW50cnk6IFF1YWxpdHlFbnRyeSB9IHwgdW5kZWZpbmVkO1xuICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIHRoaXMuZ2V0TWFwKCkpIHtcbiAgICAgIGlmICghbG93ZXN0IHx8IGVudHJ5LnNjb3JlIDwgbG93ZXN0LmVudHJ5LnNjb3JlKSB7XG4gICAgICAgIGxvd2VzdCA9IHsgcnVudGltZVN0YWdlSWQ6IGtleSwgZW50cnkgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxvd2VzdDtcbiAgfVxuXG4gIC8qKiBQcm9ncmVzc2l2ZSBxdWFsaXR5IHNjb3JlIHVwIHRvIGEgc2xpZGVyIHBvc2l0aW9uLiAqL1xuICBnZXRTY29yZVVwVG8odmlzaWJsZUtleXM6IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgY29uc3QgdG90YWwgPSB0aGlzLmFjY3VtdWxhdGUoXG4gICAgICAoc3VtLCBlKSA9PiB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIHJldHVybiBzdW0gKyBlLnNjb3JlO1xuICAgICAgfSxcbiAgICAgIDAsXG4gICAgICB2aXNpYmxlS2V5cyxcbiAgICApO1xuICAgIHJldHVybiBjb3VudCA9PT0gMCA/IDEuMCA6IHRvdGFsIC8gY291bnQ7XG4gIH1cblxuICB0b1NuYXBzaG90KCkge1xuICAgIGNvbnN0IHN0ZXBzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuZ2V0TWFwKCkpIHtcbiAgICAgIHN0ZXBzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdRdWFsaXR5JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnUXVhbGl0eSBzY29yZXMgcGVyIGV4ZWN1dGlvbiBzdGVwIHdpdGggYmFja3RyYWNraW5nIHN1cHBvcnQnLFxuICAgICAgcHJlZmVycmVkT3BlcmF0aW9uOiB0aGlzLnByZWZlcnJlZE9wZXJhdGlvbixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbnVtZXJpY0ZpZWxkOiAnc2NvcmUnLFxuICAgICAgICBvdmVyYWxsU2NvcmU6IHRoaXMuZ2V0T3ZlcmFsbFNjb3JlKCksXG4gICAgICAgIGxvd2VzdFN0ZXA6IHRoaXMuZ2V0TG93ZXN0KCk/LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICBzdGVwcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNsZWFyKCk6IHZvaWQge1xuICAgIHN1cGVyLmNsZWFyKCk7XG4gICAgdGhpcy5jdXJyZW50UnVudGltZVN0YWdlSWQgPSAnJztcbiAgICB0aGlzLmN1cnJlbnRTdGFnZUlkID0gJyc7XG4gICAgdGhpcy5jdXJyZW50U3RhZ2VOYW1lID0gJyc7XG4gICAgdGhpcy5jdXJyZW50S2V5c1JlYWQgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRLZXlzV3JpdHRlbiA9IFtdO1xuICB9XG59XG4iXX0=
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVhbGl0eVJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9RdWFsaXR5UmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7OztBQUdILHlEQUFtRDtBQTJDbkQsTUFBYSxlQUFnQixTQUFRLGdDQUEyQjtJQUN0RCxNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUVuQixFQUFFLENBQVM7SUFDWCxrQkFBa0IsQ0FBb0I7SUFDOUIsU0FBUyxDQUFtQjtJQUU3QywrQ0FBK0M7SUFDdkMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO0lBQzNCLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDcEIsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLGVBQWUsR0FBYSxFQUFFLENBQUM7SUFDL0Isa0JBQWtCLEdBQWEsRUFBRSxDQUFDO0lBRTFDLFlBQVksU0FBMkIsRUFBRSxPQUFnQztRQUN2RSxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsSUFBSSxXQUFXLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLEVBQUUsa0JBQWtCLElBQUksWUFBWSxDQUFDO0lBQ3hFLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBaUI7UUFDNUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDbEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFC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QUssR0FBNEIsRUFBRSxDQUFDO1FBQzFDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUN6QyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQUUsNkRBQTZEO1lBQzFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDM0MsSUFBSSxFQUFFO2dCQUNKLFlBQVksRUFBRSxPQUFPO2dCQUNyQixZQUFZLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDcEMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxjQUFjO2dCQUM1QyxLQUFLO2FBQ047U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVRLEtBQUs7UUFDWixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDOztBQWpISCwwQ0FrSEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFF1YWxpdHlSZWNvcmRlciDigJQgcGVyLXN0ZXAgcXVhbGl0eSBzY29yaW5nIGtleWVkIGJ5IHJ1bnRpbWVTdGFnZUlkLlxuICpcbiAqIENvbGxlY3RzIHF1YWxpdHkgc2NvcmVzIGR1cmluZyB0cmF2ZXJzYWwgKGFjY3VtdWxhdGUgcGF0dGVybikuXG4gKiBBZnRlciBleGVjdXRpb24sIHVzZSBxdWFsaXR5VHJhY2UoKSB0byBiYWNrdHJhY2sgZnJvbSBhbnkgbG93LXNjb3Jpbmcgc3RlcC5cbiAqXG4gKiBFeHRlbmRzIEtleWVkUmVjb3JkZXI8UXVhbGl0eUVudHJ5PiBmb3IgTygxKSBsb29rdXAgYW5kIHN0YW5kYXJkIG9wZXJhdGlvbnM6XG4gKiAgIC0gKipUcmFuc2xhdGUqKjogYGdldEJ5S2V5KCdjYWxsLWxsbSM1JylgIOKAlCBxdWFsaXR5IGF0IHRoaXMgc3RlcFxuICogICAtICoqQWNjdW11bGF0ZSoqOiBwcm9ncmVzc2l2ZSBxdWFsaXR5IHVwIHRvIHNsaWRlciBwb3NpdGlvblxuICogICAtICoqQWdncmVnYXRlKio6IG92ZXJhbGwgcGlwZWxpbmUgcXVhbGl0eSBzY29yZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBxdWFsaXR5ID0gbmV3IFF1YWxpdHlSZWNvcmRlcigocnVudGltZVN0YWdlSWQsIGV2ZW50KSA9PiB7XG4gKiAgIC8vIEN1c3RvbSBzY29yaW5nIGZ1bmN0aW9uIOKAlCByZXR1cm4gMC4w4oCTMS4wXG4gKiAgIGlmIChldmVudC5zdGFnZU5hbWUuaW5jbHVkZXMoJ2xsbScpKSByZXR1cm4gMC43O1xuICogICByZXR1cm4gMS4wO1xuICogfSk7XG4gKiBleGVjdXRvci5hdHRhY2hTY29wZVJlY29yZGVyKHF1YWxpdHkpO1xuICogYXdhaXQgZXhlY3V0b3IucnVuKCk7XG4gKlxuICogLy8gUGVyLXN0ZXAgc2NvcmVcbiAqIHF1YWxpdHkuZ2V0QnlLZXkoJ2NhbGwtbGxtIzUnKTsgIC8vIHsgc2NvcmU6IDAuNywgc3RhZ2VOYW1lOiAnQ2FsbExMTScsIGZhY3RvcnM6IFsuLi5dIH1cbiAqXG4gKiAvLyBPdmVyYWxsIHF1YWxpdHlcbiAqIHF1YWxpdHkuZ2V0T3ZlcmFsbFNjb3JlKCk7ICAvLyAwLjg1XG4gKlxuICogLy8gTG93ZXN0LXNjb3Jpbmcgc3RlcFxuICogcXVhbGl0eS5nZXRMb3dlc3QoKTsgIC8vIHsgcnVudGltZVN0YWdlSWQ6ICdjYWxsLWxsbSM1JywgZW50cnk6IHsgc2NvcmU6IDAuNywgLi4uIH0gfVxuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZWFkRXZlbnQsIFNjb3BlUmVjb3JkZXIsIFN0YWdlRXZlbnQsIFdyaXRlRXZlbnQgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgeyBLZXllZFJlY29yZGVyIH0gZnJvbSAnLi9LZXllZFJlY29yZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkZXJPcGVyYXRpb24gfSBmcm9tICcuL1JlY29yZGVyT3BlcmF0aW9uLmpzJztcblxuLyoqIFBlci1zdGVwIHF1YWxpdHkgZGF0YSBzdG9yZWQgYnkgUXVhbGl0eVJlY29yZGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWFsaXR5RW50cnkge1xuICAvKiogSHVtYW4tcmVhZGFibGUgc3RhZ2UgbmFtZS4gKi9cbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIC8qKiBTdGFibGUgc3RhZ2UgaWRlbnRpZmllci4gKi9cbiAgc3RhZ2VJZDogc3RyaW5nO1xuICAvKiogUXVhbGl0eSBzY29yZSBmb3IgdGhpcyBzdGVwICgwLjAgPSB3b3JzdCwgMS4wID0gYmVzdCkuICovXG4gIHNjb3JlOiBudW1iZXI7XG4gIC8qKiBXaGF0IGNvbnRyaWJ1dGVkIHRvIHRoaXMgc2NvcmUuICovXG4gIGZhY3RvcnM6IHN0cmluZ1tdO1xuICAvKiogS2V5cyByZWFkIGR1cmluZyB0aGlzIHN0ZXAgKGZvciBiYWNrdHJhY2tpbmcpLiAqL1xuICBrZXlzUmVhZDogc3RyaW5nW107XG4gIC8qKiBLZXlzIHdyaXR0ZW4gZHVyaW5nIHRoaXMgc3RlcCAoZm9yIGJhY2t0cmFja2luZykuICovXG4gIGtleXNXcml0dGVuOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBTY29yaW5nIGZ1bmN0aW9uIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGVhY2ggc3RhZ2UuXG4gKiBSZWNlaXZlcyB0aGUgcnVudGltZVN0YWdlSWQsIHN0YWdlIGV2ZW50LCBhbmQgYSBzdW1tYXJ5IG9mIHJlYWRzL3dyaXRlcy5cbiAqIFJldHVybiBhIHNjb3JlICgwLjDigJMxLjApIGFuZCBvcHRpb25hbCBmYWN0b3JzIGV4cGxhaW5pbmcgdGhlIHNjb3JlLlxuICovXG5leHBvcnQgdHlwZSBRdWFsaXR5U2NvcmluZ0ZuID0gKFxuICBydW50aW1lU3RhZ2VJZDogc3RyaW5nLFxuICBjb250ZXh0OiB7XG4gICAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gICAgc3RhZ2VJZDogc3RyaW5nO1xuICAgIGtleXNSZWFkOiBzdHJpbmdbXTtcbiAgICBrZXlzV3JpdHRlbjogc3RyaW5nW107XG4gICAgZHVyYXRpb24/OiBudW1iZXI7XG4gIH0sXG4pID0+IHsgc2NvcmU6IG51bWJlcjsgZmFjdG9ycz86IHN0cmluZ1tdIH07XG5cbi8qKiBPcHRpb25zIGZvciBRdWFsaXR5UmVjb3JkZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1YWxpdHlSZWNvcmRlck9wdGlvbnMge1xuICAvKiogU2NvcGVSZWNvcmRlciBJRC4gRGVmYXVsdHMgdG8gYXV0by1pbmNyZW1lbnQuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogUHJlZmVycmVkIFVJIG9wZXJhdGlvbi4gRGVmYXVsdHMgdG8gJ2FjY3VtdWxhdGUnIChwcm9ncmVzc2l2ZSBxdWFsaXR5KS4gKi9cbiAgcHJlZmVycmVkT3BlcmF0aW9uPzogUmVjb3JkZXJPcGVyYXRpb247XG59XG5cbmV4cG9ydCBjbGFzcyBRdWFsaXR5UmVjb3JkZXIgZXh0ZW5kcyBLZXllZFJlY29yZGVyPFF1YWxpdHlFbnRyeT4gaW1wbGVtZW50cyBTY29wZVJlY29yZGVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvdW50ZXIgPSAwO1xuXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByZWZlcnJlZE9wZXJhdGlvbjogUmVjb3JkZXJPcGVyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgc2NvcmluZ0ZuOiBRdWFsaXR5U2NvcmluZ0ZuO1xuXG4gIC8vIFBlci1zdGFnZSBidWZmZXJzIChyZXNldCBvbiBlYWNoIHN0YWdlU3RhcnQpXG4gIHByaXZhdGUgY3VycmVudFJ1bnRpbWVTdGFnZUlkID0gJyc7XG4gIHByaXZhdGUgY3VycmVudFN0YWdlSWQgPSAnJztcbiAgcHJpdmF0ZSBjdXJyZW50U3RhZ2VOYW1lID0gJyc7XG4gIHByaXZhdGUgY3VycmVudEtleXNSZWFkOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGN1cnJlbnRLZXlzV3JpdHRlbjogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzY29yaW5nRm46IFF1YWxpdHlTY29yaW5nRm4sIG9wdGlvbnM/OiBRdWFsaXR5UmVjb3JkZXJPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnNjb3JpbmdGbiA9IHNjb3JpbmdGbjtcbiAgICB0aGlzLmlkID0gb3B0aW9ucz8uaWQgPz8gYHF1YWxpdHktJHsrK1F1YWxpdHlSZWNvcmRlci5fY291bnRlcn1gO1xuICAgIHRoaXMucHJlZmVycmVkT3BlcmF0aW9uID0gb3B0aW9ucz8ucHJlZmVycmVkT3BlcmF0aW9uID8/ICdhY2N1bXVsYXRlJztcbiAgfVxuXG4gIG9uU3RhZ2VTdGFydChldmVudDogU3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFJ1bnRpbWVTdGFnZUlkID0gZXZlbnQucnVudGltZVN0YWdlSWQ7XG4gICAgdGhpcy5jdXJyZW50U3RhZ2VJZCA9IGV2ZW50LnN0YWdlSWQ7XG4gICAgdGhpcy5jdXJyZW50U3RhZ2VOYW1lID0gZXZlbnQuc3RhZ2VOYW1lO1xuICAgIHRoaXMuY3VycmVudEtleXNSZWFkID0gW107XG4gICAgdGhpcy5jdXJyZW50S2V5c1dyaXR0ZW4gPSBbXTtcbiAgfVxuXG4gIG9uUmVhZChldmVudDogUmVhZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSkgdGhpcy5jdXJyZW50S2V5c1JlYWQucHVzaChldmVudC5rZXkpO1xuICB9XG5cbiAgb25Xcml0ZShldmVudDogV3JpdGVFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEtleXNXcml0dGVuLnB1c2goZXZlbnQua2V5KTtcbiAgfVxuXG4gIG9uU3RhZ2VFbmQoZXZlbnQ6IFN0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB7IHNjb3JlLCBmYWN0b3JzIH0gPSB0aGlzLnNjb3JpbmdGbih0aGlzLmN1cnJlbnRSdW50aW1lU3RhZ2VJZCwge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLmN1cnJlbnRTdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiB0aGlzLmN1cnJlbnRTdGFnZUlkLFxuICAgICAga2V5c1JlYWQ6IHRoaXMuY3VycmVudEtleXNSZWFkLFxuICAgICAga2V5c1dyaXR0ZW46IHRoaXMuY3VycmVudEtleXNXcml0dGVuLFxuICAgICAgZHVyYXRpb246IGV2ZW50LmR1cmF0aW9uLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zdG9yZSh0aGlzLmN1cnJlbnRSdW50aW1lU3RhZ2VJZCwge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLmN1cnJlbnRTdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiB0aGlzLmN1cnJlbnRTdGFnZUlkLFxuICAgICAgc2NvcmU6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHNjb3JlKSksXG4gICAgICBmYWN0b3JzOiBmYWN0b3JzID8/IFtdLFxuICAgICAga2V5c1JlYWQ6IFsuLi50aGlzLmN1cnJlbnRLZXlzUmVhZF0sXG4gICAgICBrZXlzV3JpdHRlbjogWy4uLnRoaXMuY3VycmVudEtleXNXcml0dGVuXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBPdmVyYWxsIHF1YWxpdHkgc2NvcmUg4oCUIGF2ZXJhZ2Ugb2YgYWxsIHN0ZXAgc2NvcmVzLiAqL1xuICBnZXRPdmVyYWxsU2NvcmUoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5zaXplID09PSAwKSByZXR1cm4gMS4wO1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy5hZ2dyZWdhdGUoKHN1bSwgZSkgPT4gc3VtICsgZS5zY29yZSwgMCk7XG4gICAgcmV0dXJuIHRvdGFsIC8gdGhpcy5zaXplO1xuICB9XG5cbiAgLyoqIEZpbmQgdGhlIGxvd2VzdC1zY29yaW5nIHN0ZXAuICovXG4gIGdldExvd2VzdCgpOiB7IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7IGVudHJ5OiBRdWFsaXR5RW50cnkgfSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGxvd2VzdDogeyBydW50aW1lU3RhZ2VJZDogc3RyaW5nOyBlbnRyeTogUXVhbGl0eUVudHJ5IH0gfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBba2V5LCBlbnRyeV0gb2YgdGhpcy5nZXRNYXAoKSkge1xuICAgICAgaWYgKCFsb3dlc3QgfHwgZW50cnkuc2NvcmUgPCBsb3dlc3QuZW50cnkuc2NvcmUpIHtcbiAgICAgICAgbG93ZXN0ID0geyBydW50aW1lU3RhZ2VJZDoga2V5LCBlbnRyeSB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbG93ZXN0O1xuICB9XG5cbiAgLyoqIFByb2dyZXNzaXZlIHF1YWxpdHkgc2NvcmUgdXAgdG8gYSBzbGlkZXIgcG9zaXRpb24uICovXG4gIGdldFNjb3JlVXBUbyh2aXNpYmxlS2V5czogUmVhZG9ubHlTZXQ8c3RyaW5nPik6IG51bWJlciB7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMuYWNjdW11bGF0ZShcbiAgICAgIChzdW0sIGUpID0+IHtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgcmV0dXJuIHN1bSArIGUuc2NvcmU7XG4gICAgICB9LFxuICAgICAgMCxcbiAgICAgIHZpc2libGVLZXlzLFxuICAgICk7XG4gICAgcmV0dXJuIGNvdW50ID09PSAwID8gMS4wIDogdG90YWwgLyBjb3VudDtcbiAgfVxuXG4gIHRvU25hcHNob3QoKSB7XG4gICAgY29uc3Qgc3RlcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5nZXRNYXAoKSkge1xuICAgICAgc3RlcHNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ1F1YWxpdHknLFxuICAgICAgZGVzY3JpcHRpb246ICdRdWFsaXR5IHNjb3JlcyBwZXIgZXhlY3V0aW9uIHN0ZXAgd2l0aCBiYWNrdHJhY2tpbmcgc3VwcG9ydCcsXG4gICAgICBwcmVmZXJyZWRPcGVyYXRpb246IHRoaXMucHJlZmVycmVkT3BlcmF0aW9uLFxuICAgICAgZGF0YToge1xuICAgICAgICBudW1lcmljRmllbGQ6ICdzY29yZScsXG4gICAgICAgIG92ZXJhbGxTY29yZTogdGhpcy5nZXRPdmVyYWxsU2NvcmUoKSxcbiAgICAgICAgbG93ZXN0U3RlcDogdGhpcy5nZXRMb3dlc3QoKT8ucnVudGltZVN0YWdlSWQsXG4gICAgICAgIHN0ZXBzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgb3ZlcnJpZGUgY2xlYXIoKTogdm9pZCB7XG4gICAgc3VwZXIuY2xlYXIoKTtcbiAgICB0aGlzLmN1cnJlbnRSdW50aW1lU3RhZ2VJZCA9ICcnO1xuICAgIHRoaXMuY3VycmVudFN0YWdlSWQgPSAnJztcbiAgICB0aGlzLmN1cnJlbnRTdGFnZU5hbWUgPSAnJztcbiAgICB0aGlzLmN1cnJlbnRLZXlzUmVhZCA9IFtdO1xuICAgIHRoaXMuY3VycmVudEtleXNXcml0dGVuID0gW107XG4gIH1cbn1cbiJdfQ==
|
|
@@ -6,7 +6,7 @@ exports.SequenceRecorder = void 0;
|
|
|
6
6
|
*
|
|
7
7
|
* Provides dual-indexed storage: a flat array preserving insertion order plus a
|
|
8
8
|
* Map<runtimeStageId, T[]> for O(1) per-step lookup. One entry type, multiple entries
|
|
9
|
-
* per step. Designed for recorders that implement BOTH
|
|
9
|
+
* per step. Designed for recorders that implement BOTH ScopeRecorder and FlowRecorder
|
|
10
10
|
* (merging data ops and control flow into a single interleaved sequence).
|
|
11
11
|
*
|
|
12
12
|
* **Contrast with KeyedRecorder<T>:**
|
|
@@ -194,4 +194,4 @@ class SequenceRecorder {
|
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
exports.SequenceRecorder = SequenceRecorder;
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VxdWVuY2VSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvU2VxdWVuY2VSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVERztBQUNILE1BQXNCLGdCQUFnQjtJQUdwQyx5REFBeUQ7SUFDeEMsT0FBTyxHQUFRLEVBQUUsQ0FBQztJQUNuQyx5RkFBeUY7SUFDeEUsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztJQUMzRDttR0FDK0Y7SUFDOUUsV0FBVyxHQUFHLElBQUksR0FBRyxFQUFnRCxDQUFDO0lBQ3ZGLCtHQUErRztJQUN2RyxhQUFhLENBQXFCO0lBRTFDLHlFQUF5RTtJQUV6RTs7O09BR0c7SUFDTyxJQUFJLENBQUMsS0FBUTtRQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQ2hDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDUCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFFLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDMUIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzlCLDRFQUE0RTtZQUM1RSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFFLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNILENBQUM7SUFFRCx5RUFBeUU7SUFFekUsMEZBQTBGO0lBQzFGLFVBQVU7UUFDUixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzdCLENBQUM7SUFFRCx1RkFBdUY7SUFDN0UsWUFBWSxDQUFDLEVBQXNCO1FBQzNDLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQseUVBQXlFO0lBRXpFLCtFQUErRTtJQUMvRSxpQkFBaUIsQ0FBQyxjQUFzQjtRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsMERBQTBEO0lBQzFELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELHlFQUF5RTtJQUV6RSwrRUFBK0U7SUFDL0UsU0FBUyxDQUFJLEVBQTJCLEVBQUUsT0FBVTtRQUNsRCxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUM7UUFDbEIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELHVFQUF1RTtJQUV2RTs7Ozs7T0FLRztJQUNILFVBQVUsQ0FBSSxFQUEyQixFQUFFLE9BQVUsRUFBRSxJQUEwQjtRQUMvRSxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUM7UUFDbEIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztvQkFBRSxTQUFTO1lBQ3pFLENBQUM7WUFDRCxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQseUVBQXlFO0lBRXpFOzs7OztPQUtHO0lBQ0gsY0FBYyxDQUFDLFVBQStCO1FBQzVDLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztRQUN2QixJQUFJLGNBQWMsR0FBUSxFQUFFLENBQUM7UUFDN0IsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUNoQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ1IsaUdBQWlHO2dCQUNqRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BELENBQUM7aUJBQU0sSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLGtGQUFrRjtnQkFDbEYsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7b0JBQy9CLGNBQWMsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLENBQUM7Z0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixDQUFDO1lBQ0QsbUZBQW1GO1lBQ25GLDBFQUEwRTtRQUM1RSxDQUFDO1FBQ0QsdUVBQXVFO1FBQ3ZFLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCx5RUFBeUU7SUFFekUsbUVBQW1FO0lBQ25FLEtBQUs7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBdEpELDRDQXNKQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2VxdWVuY2VSZWNvcmRlcjxUPiDigJQgYmFzZSBjbGFzcyBmb3Igb3JkZXJlZCBzZXF1ZW5jZSByZWNvcmRlcnMgd2l0aCBrZXllZCBpbmRleC5cbiAqXG4gKiBQcm92aWRlcyBkdWFsLWluZGV4ZWQgc3RvcmFnZTogYSBmbGF0IGFycmF5IHByZXNlcnZpbmcgaW5zZXJ0aW9uIG9yZGVyIHBsdXMgYVxuICogTWFwPHJ1bnRpbWVTdGFnZUlkLCBUW10+IGZvciBPKDEpIHBlci1zdGVwIGxvb2t1cC4gT25lIGVudHJ5IHR5cGUsIG11bHRpcGxlIGVudHJpZXNcbiAqIHBlciBzdGVwLiBEZXNpZ25lZCBmb3IgcmVjb3JkZXJzIHRoYXQgaW1wbGVtZW50IEJPVEggUmVjb3JkZXIgYW5kIEZsb3dSZWNvcmRlclxuICogKG1lcmdpbmcgZGF0YSBvcHMgYW5kIGNvbnRyb2wgZmxvdyBpbnRvIGEgc2luZ2xlIGludGVybGVhdmVkIHNlcXVlbmNlKS5cbiAqXG4gKiAqKkNvbnRyYXN0IHdpdGggS2V5ZWRSZWNvcmRlcjxUPjoqKlxuICogLSBgS2V5ZWRSZWNvcmRlcjxUPmAg4oCUIDE6MSBNYXAuIE9uZSBlbnRyeSBwZXIgcnVudGltZVN0YWdlSWQuIEZvciBzaW5nbGUtdmFsdWUgcmVjb3JkZXJzXG4gKiAgIGxpa2UgTWV0cmljUmVjb3JkZXIgKG9uZSBTdGVwTWV0cmljcyBwZXIgc3RhZ2UgZXhlY3V0aW9uKS5cbiAqIC0gYFNlcXVlbmNlUmVjb3JkZXI8VD5gIOKAlCAxOk4gc2VxdWVuY2UgKyBNYXAuIE11bHRpcGxlIGVudHJpZXMgcGVyIHJ1bnRpbWVTdGFnZUlkLFxuICogICBwbHVzIG9yZGVyaW5nIG1hdHRlcnMuIEZvciByZWNvcmRlcnMgdGhhdCBwcm9kdWNlIGEgcHJvc2UgbmFycmF0aXZlIG9yIGV2ZW50IGxvZ1xuICogICB3aGVyZSBhIHNpbmdsZSBzdGVwIGdlbmVyYXRlcyBzdGFnZSArIGRhdGEgKyBkZWNpc2lvbiBlbnRyaWVzLlxuICpcbiAqICoqSG93IHRvIGNob29zZToqKlxuICogLSBJZiBlYWNoIHN0ZXAgcHJvZHVjZXMgZXhhY3RseSBvbmUgcmVjb3JkIOKGkiBleHRlbmQgYEtleWVkUmVjb3JkZXI8VD5gXG4gKiAtIElmIGVhY2ggc3RlcCBwcm9kdWNlcyBtdWx0aXBsZSByZWNvcmRzIG9yIG9yZGVyaW5nIG1hdHRlcnMg4oaSIGV4dGVuZCBgU2VxdWVuY2VSZWNvcmRlcjxUPmBcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgU2VxdWVuY2VSZWNvcmRlciB9IGZyb20gJ2Zvb3RwcmludGpzL3RyYWNlJztcbiAqXG4gKiBpbnRlcmZhY2UgQXVkaXRFbnRyeSB7XG4gKiAgIHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xuICogICB0eXBlOiAncmVhZCcgfCAnd3JpdGUnIHwgJ2RlY2lzaW9uJztcbiAqICAgZGV0YWlsOiBzdHJpbmc7XG4gKiB9XG4gKlxuICogY2xhc3MgQXVkaXRSZWNvcmRlciBleHRlbmRzIFNlcXVlbmNlUmVjb3JkZXI8QXVkaXRFbnRyeT4ge1xuICogICByZWFkb25seSBpZCA9ICdhdWRpdCc7XG4gKlxuICogICAvLyBTY29wZSBob29rcyAoZmlyZXMgZHVyaW5nIHN0YWdlIGV4ZWN1dGlvbilcbiAqICAgb25SZWFkKGV2ZW50OiBSZWFkRXZlbnQpIHtcbiAqICAgICB0aGlzLmVtaXQoeyBydW50aW1lU3RhZ2VJZDogZXZlbnQucnVudGltZVN0YWdlSWQsIHR5cGU6ICdyZWFkJywgZGV0YWlsOiBldmVudC5rZXkgfSk7XG4gKiAgIH1cbiAqICAgb25Xcml0ZShldmVudDogV3JpdGVFdmVudCkge1xuICogICAgIHRoaXMuZW1pdCh7IHJ1bnRpbWVTdGFnZUlkOiBldmVudC5ydW50aW1lU3RhZ2VJZCwgdHlwZTogJ3dyaXRlJywgZGV0YWlsOiBldmVudC5rZXkgfSk7XG4gKiAgIH1cbiAqXG4gKiAgIC8vIEZsb3cgaG9va3MgKGZpcmVzIGFmdGVyIHN0YWdlIGV4ZWN1dGlvbilcbiAqICAgb25EZWNpc2lvbihldmVudDogRmxvd0RlY2lzaW9uRXZlbnQpIHtcbiAqICAgICB0aGlzLmVtaXQoe1xuICogICAgICAgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkLFxuICogICAgICAgdHlwZTogJ2RlY2lzaW9uJyxcbiAqICAgICAgIGRldGFpbDogYCR7ZXZlbnQuZGVjaWRlcn0gY2hvc2UgJHtldmVudC5jaG9zZW59YCxcbiAqICAgICB9KTtcbiAqICAgfVxuICpcbiAqICAgLy8gVGltZS10cmF2ZWw6IGVudHJpZXMgdXAgdG8gc2xpZGVyIHBvc2l0aW9uXG4gKiAgIGdldEF1ZGl0VXBUbyh2aXNpYmxlSWRzOiBSZWFkb25seVNldDxzdHJpbmc+KSB7XG4gKiAgICAgcmV0dXJuIHRoaXMuZ2V0RW50cmllc1VwVG8odmlzaWJsZUlkcyk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2VxdWVuY2VSZWNvcmRlcjxUIGV4dGVuZHMgeyBydW50aW1lU3RhZ2VJZD86IHN0cmluZyB9PiB7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqIE9yZGVyZWQgc2VxdWVuY2Ugb2YgYWxsIGVudHJpZXMgKGluc2VydGlvbiBvcmRlcikuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZW50cmllczogVFtdID0gW107XG4gIC8qKiBQZXItc3RlcCBpbmRleDogcnVudGltZVN0YWdlSWQg4oaSIGVudHJpZXMgZm9yIHRoYXQgc3RlcC4gU2FtZSBvYmplY3RzIGFzIGVudHJpZXNbXS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBieVJ1bnRpbWVTdGFnZUlkID0gbmV3IE1hcDxzdHJpbmcsIFRbXT4oKTtcbiAgLyoqIFBlci1zdGVwIHJhbmdlIGluZGV4OiBydW50aW1lU3RhZ2VJZCDihpIgW2ZpcnN0SWR4LCBlbmRJZHgpIGluIGVudHJpZXMgYXJyYXkuXG4gICAqICBlbmRJZHggaW5jbHVkZXMgdHJhaWxpbmcga2V5bGVzcyBlbnRyaWVzIChzdHJ1Y3R1cmFsIG1hcmtlcnMpLiBNYWludGFpbmVkIGR1cmluZyBlbWl0KCkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZW50cnlSYW5nZXMgPSBuZXcgTWFwPHN0cmluZywgeyBmaXJzdElkeDogbnVtYmVyOyBlbmRJZHg6IG51bWJlciB9PigpO1xuICAvKiogVGhlIHJ1bnRpbWVTdGFnZUlkIG9mIHRoZSBtb3N0IHJlY2VudGx5IGVtaXR0ZWQga2V5ZWQgZW50cnkuIFVzZWQgdG8gZXh0ZW5kIHJhbmdlcyBmb3IgdHJhaWxpbmcgbWFya2Vycy4gKi9cbiAgcHJpdmF0ZSBsYXN0RW1pdHRlZElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLy8g4pSA4pSAIFdyaXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBBcHBlbmQgYW4gZW50cnkgdG8gYm90aCB0aGUgb3JkZXJlZCBzZXF1ZW5jZSwga2V5ZWQgaW5kZXgsIGFuZCByYW5nZSBpbmRleC5cbiAgICogQWxsIHJlZmVyZW5jZSB0aGUgc2FtZSBlbnRyeSBvYmplY3Qg4oCUIG5vIGR1cGxpY2F0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGVtaXQoZW50cnk6IFQpOiB2b2lkIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLmVudHJpZXMubGVuZ3RoO1xuICAgIHRoaXMuZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICBjb25zdCBpZCA9IGVudHJ5LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGlmIChpZCkge1xuICAgICAgbGV0IGFyciA9IHRoaXMuYnlSdW50aW1lU3RhZ2VJZC5nZXQoaWQpO1xuICAgICAgaWYgKCFhcnIpIHtcbiAgICAgICAgYXJyID0gW107XG4gICAgICAgIHRoaXMuYnlSdW50aW1lU3RhZ2VJZC5zZXQoaWQsIGFycik7XG4gICAgICAgIHRoaXMuZW50cnlSYW5nZXMuc2V0KGlkLCB7IGZpcnN0SWR4OiBpZHgsIGVuZElkeDogaWR4ICsgMSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW50cnlSYW5nZXMuZ2V0KGlkKSEuZW5kSWR4ID0gaWR4ICsgMTtcbiAgICAgIH1cbiAgICAgIGFyci5wdXNoKGVudHJ5KTtcbiAgICAgIHRoaXMubGFzdEVtaXR0ZWRJZCA9IGlkO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sYXN0RW1pdHRlZElkKSB7XG4gICAgICAvLyBTdHJ1Y3R1cmFsIG1hcmtlciAobm8gcnVudGltZVN0YWdlSWQpIOKAlCBleHRlbmQgdGhlIHByZWNlZGluZyBzdGVwJ3MgcmFuZ2VcbiAgICAgIHRoaXMuZW50cnlSYW5nZXMuZ2V0KHRoaXMubGFzdEVtaXR0ZWRJZCkhLmVuZElkeCA9IGlkeCArIDE7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIE9yZGVyZWQgYWNjZXNzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBBbGwgZW50cmllcyBpbiBpbnNlcnRpb24gb3JkZXIgKHJldHVybnMgYSBzaGFsbG93IGNvcHkg4oCUIGVudHJ5IG9iamVjdHMgYXJlIHNoYXJlZCkuICovXG4gIGdldEVudHJpZXMoKTogVFtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZW50cmllc107XG4gIH1cblxuICAvKiogTnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHNlcXVlbmNlLiAqL1xuICBnZXQgZW50cnlDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMubGVuZ3RoO1xuICB9XG5cbiAgLyoqIFplcm8tY29weSBpdGVyYXRpb24gZm9yIHN1YmNsYXNzIHJlbmRlcmluZyBtZXRob2RzIChhdm9pZHMgZ2V0RW50cmllcygpIHNwcmVhZCkuICovXG4gIHByb3RlY3RlZCBmb3JFYWNoRW50cnkoZm46IChlbnRyeTogVCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzKSB7XG4gICAgICBmbihlbnRyeSk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIEtleWVkIGFjY2VzcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogTygxKSBsb29rdXA6IGFsbCBlbnRyaWVzIGZvciBhIHNwZWNpZmljIGV4ZWN1dGlvbiBzdGVwIChyZXR1cm5zIGEgY29weSkuICovXG4gIGdldEVudHJpZXNGb3JTdGVwKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBUW10ge1xuICAgIHJldHVybiBbLi4uKHRoaXMuYnlSdW50aW1lU3RhZ2VJZC5nZXQocnVudGltZVN0YWdlSWQpID8/IFtdKV07XG4gIH1cblxuICAvKiogTnVtYmVyIG9mIHVuaXF1ZSBleGVjdXRpb24gc3RlcHMgdGhhdCBoYXZlIGVudHJpZXMuICovXG4gIGdldCBzdGVwQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ieVJ1bnRpbWVTdGFnZUlkLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogUHJlLWJ1aWx0IHJhbmdlIGluZGV4OiBydW50aW1lU3RhZ2VJZCDihpIgaGFsZi1vcGVuIHJhbmdlIFtmaXJzdElkeCwgZW5kSWR4KSBpbiBlbnRyaWVzIGFycmF5LlxuICAgKiBNYWludGFpbmVkIGR1cmluZyBlbWl0KCkg4oCUIG5vIHJlYnVpbGQgbmVlZGVkLiBVc2UgZm9yIE8oMSkgcGVyLXN0ZXAgbG9va3VwcyBkdXJpbmcgdGltZS10cmF2ZWwuXG4gICAqIGVuZElkeCBpbmNsdWRlcyB0cmFpbGluZyBrZXlsZXNzIGVudHJpZXMgKHN0cnVjdHVyYWwgbWFya2VycyBmb2xsb3dpbmcgYSBzdGVwKS5cbiAgICovXG4gIGdldEVudHJ5UmFuZ2VzKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgeyByZWFkb25seSBmaXJzdElkeDogbnVtYmVyOyByZWFkb25seSBlbmRJZHg6IG51bWJlciB9PiB7XG4gICAgcmV0dXJuIHRoaXMuZW50cnlSYW5nZXM7XG4gIH1cblxuICAvLyDilIDilIAgQWdncmVnYXRlIChyZWR1Y2UgYWxsIGVudHJpZXMpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBSZWR1Y2UgQUxMIGVudHJpZXMgdG8gYSBzaW5nbGUgdmFsdWUuIEZvciBkYXNoYm9hcmRzLCB0b3RhbHMsIHN1bW1hcmllcy4gKi9cbiAgYWdncmVnYXRlPFI+KGZuOiAoYWNjOiBSLCBlbnRyeTogVCkgPT4gUiwgaW5pdGlhbDogUik6IFIge1xuICAgIGxldCBhY2MgPSBpbml0aWFsO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzKSB7XG4gICAgICBhY2MgPSBmbihhY2MsIGVudHJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfVxuXG4gIC8vIOKUgOKUgCBBY2N1bXVsYXRlIChwcm9ncmVzc2l2ZSByZWR1Y2UpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBSZWR1Y2UgZW50cmllcywgb3B0aW9uYWxseSBmaWx0ZXJlZCBieSBhIHNldCBvZiBydW50aW1lU3RhZ2VJZHMuXG4gICAqIEZvciB0aW1lLXRyYXZlbCBwcm9ncmVzc2l2ZSB2aWV3OiBwYXNzIHRoZSBydW50aW1lU3RhZ2VJZHMgdmlzaWJsZSBhdCB0aGUgY3VycmVudCBzbGlkZXIgcG9zaXRpb24uXG4gICAqIEVudHJpZXMgd2l0aG91dCBydW50aW1lU3RhZ2VJZCAoc3RydWN0dXJhbCBtYXJrZXJzKSBhcmUgZXhjbHVkZWQgd2hlbiBrZXlzIGFyZSBwcm92aWRlZC5cbiAgICogV2l0aG91dCBrZXlzLCByZWR1Y2VzIGFsbCBlbnRyaWVzIChzYW1lIGFzIGFnZ3JlZ2F0ZSkuXG4gICAqL1xuICBhY2N1bXVsYXRlPFI+KGZuOiAoYWNjOiBSLCBlbnRyeTogVCkgPT4gUiwgaW5pdGlhbDogUiwga2V5cz86IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBSIHtcbiAgICBsZXQgYWNjID0gaW5pdGlhbDtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgaWYgKGtleXMpIHtcbiAgICAgICAgaWYgKCFlbnRyeS5ydW50aW1lU3RhZ2VJZCB8fCAha2V5cy5oYXMoZW50cnkucnVudGltZVN0YWdlSWQpKSBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGFjYyA9IGZuKGFjYywgZW50cnkpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9XG5cbiAgLy8g4pSA4pSAIFRpbWUtdHJhdmVsIHF1ZXJpZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFByb2dyZXNzaXZlIHJldmVhbDogZW50cmllcyB3aG9zZSBydW50aW1lU3RhZ2VJZCBpcyBpbiB0aGUgdmlzaWJsZSBzZXQuXG4gICAqIFByZXNlcnZlcyBpbnNlcnRpb24gb3JkZXIuIEVudHJpZXMgd2l0aG91dCBydW50aW1lU3RhZ2VJZCAoc3RydWN0dXJhbCBtYXJrZXJzKVxuICAgKiBhcmUgYnVmZmVyZWQgYW5kIGluY2x1ZGVkIG9ubHkgd2hlbiBzdXJyb3VuZGVkIGJ5IHZpc2libGUgc3RlcHMgb24gYm90aCBzaWRlcyDigJRcbiAgICogdHJhaWxpbmcgbWFya2VycyBhZnRlciB0aGUgbGFzdCB2aXNpYmxlIHN0ZXAgYXJlIGRpc2NhcmRlZC5cbiAgICovXG4gIGdldEVudHJpZXNVcFRvKHZpc2libGVJZHM6IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBUW10ge1xuICAgIGNvbnN0IHJlc3VsdDogVFtdID0gW107XG4gICAgbGV0IHBlbmRpbmdNYXJrZXJzOiBUW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgY29uc3QgaWQgPSBlbnRyeS5ydW50aW1lU3RhZ2VJZDtcbiAgICAgIGlmICghaWQpIHtcbiAgICAgICAgLy8gU3RydWN0dXJhbCBtYXJrZXIg4oCUIGJ1ZmZlciB1bnRpbCBuZXh0IHZpc2libGUga2V5ZWQgZW50cnkgY29uZmlybXMgaXQncyBiZXR3ZWVuIHZpc2libGUgc3RlcHMuXG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkgcGVuZGluZ01hcmtlcnMucHVzaChlbnRyeSk7XG4gICAgICB9IGVsc2UgaWYgKHZpc2libGVJZHMuaGFzKGlkKSkge1xuICAgICAgICAvLyBGbHVzaCBidWZmZXJlZCBtYXJrZXJzIOKAlCB0aGV5IHNpdCBiZXR3ZWVuIGEgcHJldmlvdXMgdmlzaWJsZSBzdGVwIGFuZCB0aGlzIG9uZS5cbiAgICAgICAgaWYgKHBlbmRpbmdNYXJrZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaCguLi5wZW5kaW5nTWFya2Vycyk7XG4gICAgICAgICAgcGVuZGluZ01hcmtlcnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgICAvLyBOb24tdmlzaWJsZSBrZXllZCBlbnRyaWVzOiBkb24ndCBkaXNjYXJkIHBlbmRpbmcgbWFya2VycyDigJQgYSBsYXRlciB2aXNpYmxlIGVudHJ5XG4gICAgICAvLyBtYXkgc3RpbGwgZmx1c2ggdGhlbS4gTWFya2VycyBhcmUgb25seSBkaXNjYXJkZWQgYXQgdGhlIGVuZCAodHJhaWxpbmcpLlxuICAgIH1cbiAgICAvLyBEaXNjYXJkIHJlbWFpbmluZyBwZW5kaW5nTWFya2VycyDigJQgdGhleSB0cmFpbCB0aGUgbGFzdCB2aXNpYmxlIHN0ZXAuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIENsZWFyIGFsbCBzdG9yZWQgZGF0YS4gQ2FsbGVkIGJ5IGV4ZWN1dG9yIGJlZm9yZSBlYWNoIHJ1bigpLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmVudHJpZXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmJ5UnVudGltZVN0YWdlSWQuY2xlYXIoKTtcbiAgICB0aGlzLmVudHJ5UmFuZ2VzLmNsZWFyKCk7XG4gICAgdGhpcy5sYXN0RW1pdHRlZElkID0gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VxdWVuY2VSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvU2VxdWVuY2VSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVERztBQUNILE1BQXNCLGdCQUFnQjtJQUdwQyx5REFBeUQ7SUFDeEMsT0FBTyxHQUFRLEVBQUUsQ0FBQztJQUNuQyx5RkFBeUY7SUFDeEUsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztJQUMzRDttR0FDK0Y7SUFDOUUsV0FBVyxHQUFHLElBQUksR0FBRyxFQUFnRCxDQUFDO0lBQ3ZGLCtHQUErRztJQUN2RyxhQUFhLENBQXFCO0lBRTFDLHlFQUF5RTtJQUV6RTs7O09BR0c7SUFDTyxJQUFJLENBQUMsS0FBUTtRQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQ2hDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDUCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFFLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDMUIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzlCLDRFQUE0RTtZQUM1RSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFFLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNILENBQUM7SUFFRCx5RUFBeUU7SUFFekUsMEZBQTBGO0lBQzFGLFVBQVU7UUFDUixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzdCLENBQUM7SUFFRCx1RkFBdUY7SUFDN0UsWUFBWSxDQUFDLEVBQXNCO1FBQzNDLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQseUVBQXlFO0lBRXpFLCtFQUErRTtJQUMvRSxpQkFBaUIsQ0FBQyxjQUFzQjtRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsMERBQTBEO0lBQzFELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELHlFQUF5RTtJQUV6RSwrRUFBK0U7SUFDL0UsU0FBUyxDQUFJLEVBQTJCLEVBQUUsT0FBVTtRQUNsRCxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUM7UUFDbEIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELHVFQUF1RTtJQUV2RTs7Ozs7T0FLRztJQUNILFVBQVUsQ0FBSSxFQUEyQixFQUFFLE9BQVUsRUFBRSxJQUEwQjtRQUMvRSxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUM7UUFDbEIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztvQkFBRSxTQUFTO1lBQ3pFLENBQUM7WUFDRCxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQseUVBQXlFO0lBRXpFOzs7OztPQUtHO0lBQ0gsY0FBYyxDQUFDLFVBQStCO1FBQzVDLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztRQUN2QixJQUFJLGNBQWMsR0FBUSxFQUFFLENBQUM7UUFDN0IsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUNoQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ1IsaUdBQWlHO2dCQUNqRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BELENBQUM7aUJBQU0sSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLGtGQUFrRjtnQkFDbEYsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7b0JBQy9CLGNBQWMsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLENBQUM7Z0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixDQUFDO1lBQ0QsbUZBQW1GO1lBQ25GLDBFQUEwRTtRQUM1RSxDQUFDO1FBQ0QsdUVBQXVFO1FBQ3ZFLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCx5RUFBeUU7SUFFekUsbUVBQW1FO0lBQ25FLEtBQUs7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBdEpELDRDQXNKQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2VxdWVuY2VSZWNvcmRlcjxUPiDigJQgYmFzZSBjbGFzcyBmb3Igb3JkZXJlZCBzZXF1ZW5jZSByZWNvcmRlcnMgd2l0aCBrZXllZCBpbmRleC5cbiAqXG4gKiBQcm92aWRlcyBkdWFsLWluZGV4ZWQgc3RvcmFnZTogYSBmbGF0IGFycmF5IHByZXNlcnZpbmcgaW5zZXJ0aW9uIG9yZGVyIHBsdXMgYVxuICogTWFwPHJ1bnRpbWVTdGFnZUlkLCBUW10+IGZvciBPKDEpIHBlci1zdGVwIGxvb2t1cC4gT25lIGVudHJ5IHR5cGUsIG11bHRpcGxlIGVudHJpZXNcbiAqIHBlciBzdGVwLiBEZXNpZ25lZCBmb3IgcmVjb3JkZXJzIHRoYXQgaW1wbGVtZW50IEJPVEggU2NvcGVSZWNvcmRlciBhbmQgRmxvd1JlY29yZGVyXG4gKiAobWVyZ2luZyBkYXRhIG9wcyBhbmQgY29udHJvbCBmbG93IGludG8gYSBzaW5nbGUgaW50ZXJsZWF2ZWQgc2VxdWVuY2UpLlxuICpcbiAqICoqQ29udHJhc3Qgd2l0aCBLZXllZFJlY29yZGVyPFQ+OioqXG4gKiAtIGBLZXllZFJlY29yZGVyPFQ+YCDigJQgMToxIE1hcC4gT25lIGVudHJ5IHBlciBydW50aW1lU3RhZ2VJZC4gRm9yIHNpbmdsZS12YWx1ZSByZWNvcmRlcnNcbiAqICAgbGlrZSBNZXRyaWNSZWNvcmRlciAob25lIFN0ZXBNZXRyaWNzIHBlciBzdGFnZSBleGVjdXRpb24pLlxuICogLSBgU2VxdWVuY2VSZWNvcmRlcjxUPmAg4oCUIDE6TiBzZXF1ZW5jZSArIE1hcC4gTXVsdGlwbGUgZW50cmllcyBwZXIgcnVudGltZVN0YWdlSWQsXG4gKiAgIHBsdXMgb3JkZXJpbmcgbWF0dGVycy4gRm9yIHJlY29yZGVycyB0aGF0IHByb2R1Y2UgYSBwcm9zZSBuYXJyYXRpdmUgb3IgZXZlbnQgbG9nXG4gKiAgIHdoZXJlIGEgc2luZ2xlIHN0ZXAgZ2VuZXJhdGVzIHN0YWdlICsgZGF0YSArIGRlY2lzaW9uIGVudHJpZXMuXG4gKlxuICogKipIb3cgdG8gY2hvb3NlOioqXG4gKiAtIElmIGVhY2ggc3RlcCBwcm9kdWNlcyBleGFjdGx5IG9uZSByZWNvcmQg4oaSIGV4dGVuZCBgS2V5ZWRSZWNvcmRlcjxUPmBcbiAqIC0gSWYgZWFjaCBzdGVwIHByb2R1Y2VzIG11bHRpcGxlIHJlY29yZHMgb3Igb3JkZXJpbmcgbWF0dGVycyDihpIgZXh0ZW5kIGBTZXF1ZW5jZVJlY29yZGVyPFQ+YFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBTZXF1ZW5jZVJlY29yZGVyIH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuICpcbiAqIGludGVyZmFjZSBBdWRpdEVudHJ5IHtcbiAqICAgcnVudGltZVN0YWdlSWQ/OiBzdHJpbmc7XG4gKiAgIHR5cGU6ICdyZWFkJyB8ICd3cml0ZScgfCAnZGVjaXNpb24nO1xuICogICBkZXRhaWw6IHN0cmluZztcbiAqIH1cbiAqXG4gKiBjbGFzcyBBdWRpdFJlY29yZGVyIGV4dGVuZHMgU2VxdWVuY2VSZWNvcmRlcjxBdWRpdEVudHJ5PiB7XG4gKiAgIHJlYWRvbmx5IGlkID0gJ2F1ZGl0JztcbiAqXG4gKiAgIC8vIFNjb3BlIGhvb2tzIChmaXJlcyBkdXJpbmcgc3RhZ2UgZXhlY3V0aW9uKVxuICogICBvblJlYWQoZXZlbnQ6IFJlYWRFdmVudCkge1xuICogICAgIHRoaXMuZW1pdCh7IHJ1bnRpbWVTdGFnZUlkOiBldmVudC5ydW50aW1lU3RhZ2VJZCwgdHlwZTogJ3JlYWQnLCBkZXRhaWw6IGV2ZW50LmtleSB9KTtcbiAqICAgfVxuICogICBvbldyaXRlKGV2ZW50OiBXcml0ZUV2ZW50KSB7XG4gKiAgICAgdGhpcy5lbWl0KHsgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnJ1bnRpbWVTdGFnZUlkLCB0eXBlOiAnd3JpdGUnLCBkZXRhaWw6IGV2ZW50LmtleSB9KTtcbiAqICAgfVxuICpcbiAqICAgLy8gRmxvdyBob29rcyAoZmlyZXMgYWZ0ZXIgc3RhZ2UgZXhlY3V0aW9uKVxuICogICBvbkRlY2lzaW9uKGV2ZW50OiBGbG93RGVjaXNpb25FdmVudCkge1xuICogICAgIHRoaXMuZW1pdCh7XG4gKiAgICAgICBydW50aW1lU3RhZ2VJZDogZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQsXG4gKiAgICAgICB0eXBlOiAnZGVjaXNpb24nLFxuICogICAgICAgZGV0YWlsOiBgJHtldmVudC5kZWNpZGVyfSBjaG9zZSAke2V2ZW50LmNob3Nlbn1gLFxuICogICAgIH0pO1xuICogICB9XG4gKlxuICogICAvLyBUaW1lLXRyYXZlbDogZW50cmllcyB1cCB0byBzbGlkZXIgcG9zaXRpb25cbiAqICAgZ2V0QXVkaXRVcFRvKHZpc2libGVJZHM6IFJlYWRvbmx5U2V0PHN0cmluZz4pIHtcbiAqICAgICByZXR1cm4gdGhpcy5nZXRFbnRyaWVzVXBUbyh2aXNpYmxlSWRzKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTZXF1ZW5jZVJlY29yZGVyPFQgZXh0ZW5kcyB7IHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nIH0+IHtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKiogT3JkZXJlZCBzZXF1ZW5jZSBvZiBhbGwgZW50cmllcyAoaW5zZXJ0aW9uIG9yZGVyKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBlbnRyaWVzOiBUW10gPSBbXTtcbiAgLyoqIFBlci1zdGVwIGluZGV4OiBydW50aW1lU3RhZ2VJZCDihpIgZW50cmllcyBmb3IgdGhhdCBzdGVwLiBTYW1lIG9iamVjdHMgYXMgZW50cmllc1tdLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGJ5UnVudGltZVN0YWdlSWQgPSBuZXcgTWFwPHN0cmluZywgVFtdPigpO1xuICAvKiogUGVyLXN0ZXAgcmFuZ2UgaW5kZXg6IHJ1bnRpbWVTdGFnZUlkIOKGkiBbZmlyc3RJZHgsIGVuZElkeCkgaW4gZW50cmllcyBhcnJheS5cbiAgICogIGVuZElkeCBpbmNsdWRlcyB0cmFpbGluZyBrZXlsZXNzIGVudHJpZXMgKHN0cnVjdHVyYWwgbWFya2VycykuIE1haW50YWluZWQgZHVyaW5nIGVtaXQoKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBlbnRyeVJhbmdlcyA9IG5ldyBNYXA8c3RyaW5nLCB7IGZpcnN0SWR4OiBudW1iZXI7IGVuZElkeDogbnVtYmVyIH0+KCk7XG4gIC8qKiBUaGUgcnVudGltZVN0YWdlSWQgb2YgdGhlIG1vc3QgcmVjZW50bHkgZW1pdHRlZCBrZXllZCBlbnRyeS4gVXNlZCB0byBleHRlbmQgcmFuZ2VzIGZvciB0cmFpbGluZyBtYXJrZXJzLiAqL1xuICBwcml2YXRlIGxhc3RFbWl0dGVkSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvLyDilIDilIAgV3JpdGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIEFwcGVuZCBhbiBlbnRyeSB0byBib3RoIHRoZSBvcmRlcmVkIHNlcXVlbmNlLCBrZXllZCBpbmRleCwgYW5kIHJhbmdlIGluZGV4LlxuICAgKiBBbGwgcmVmZXJlbmNlIHRoZSBzYW1lIGVudHJ5IG9iamVjdCDigJQgbm8gZHVwbGljYXRpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZW1pdChlbnRyeTogVCk6IHZvaWQge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMuZW50cmllcy5sZW5ndGg7XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goZW50cnkpO1xuICAgIGNvbnN0IGlkID0gZW50cnkucnVudGltZVN0YWdlSWQ7XG4gICAgaWYgKGlkKSB7XG4gICAgICBsZXQgYXJyID0gdGhpcy5ieVJ1bnRpbWVTdGFnZUlkLmdldChpZCk7XG4gICAgICBpZiAoIWFycikge1xuICAgICAgICBhcnIgPSBbXTtcbiAgICAgICAgdGhpcy5ieVJ1bnRpbWVTdGFnZUlkLnNldChpZCwgYXJyKTtcbiAgICAgICAgdGhpcy5lbnRyeVJhbmdlcy5zZXQoaWQsIHsgZmlyc3RJZHg6IGlkeCwgZW5kSWR4OiBpZHggKyAxIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnRyeVJhbmdlcy5nZXQoaWQpIS5lbmRJZHggPSBpZHggKyAxO1xuICAgICAgfVxuICAgICAgYXJyLnB1c2goZW50cnkpO1xuICAgICAgdGhpcy5sYXN0RW1pdHRlZElkID0gaWQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxhc3RFbWl0dGVkSWQpIHtcbiAgICAgIC8vIFN0cnVjdHVyYWwgbWFya2VyIChubyBydW50aW1lU3RhZ2VJZCkg4oCUIGV4dGVuZCB0aGUgcHJlY2VkaW5nIHN0ZXAncyByYW5nZVxuICAgICAgdGhpcy5lbnRyeVJhbmdlcy5nZXQodGhpcy5sYXN0RW1pdHRlZElkKSEuZW5kSWR4ID0gaWR4ICsgMTtcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgT3JkZXJlZCBhY2Nlc3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIEFsbCBlbnRyaWVzIGluIGluc2VydGlvbiBvcmRlciAocmV0dXJucyBhIHNoYWxsb3cgY29weSDigJQgZW50cnkgb2JqZWN0cyBhcmUgc2hhcmVkKS4gKi9cbiAgZ2V0RW50cmllcygpOiBUW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5lbnRyaWVzXTtcbiAgfVxuXG4gIC8qKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgc2VxdWVuY2UuICovXG4gIGdldCBlbnRyeUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGg7XG4gIH1cblxuICAvKiogWmVyby1jb3B5IGl0ZXJhdGlvbiBmb3Igc3ViY2xhc3MgcmVuZGVyaW5nIG1ldGhvZHMgKGF2b2lkcyBnZXRFbnRyaWVzKCkgc3ByZWFkKS4gKi9cbiAgcHJvdGVjdGVkIGZvckVhY2hFbnRyeShmbjogKGVudHJ5OiBUKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIGZuKGVudHJ5KTtcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgS2V5ZWQgYWNjZXNzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBPKDEpIGxvb2t1cDogYWxsIGVudHJpZXMgZm9yIGEgc3BlY2lmaWMgZXhlY3V0aW9uIHN0ZXAgKHJldHVybnMgYSBjb3B5KS4gKi9cbiAgZ2V0RW50cmllc0ZvclN0ZXAocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IFRbXSB7XG4gICAgcmV0dXJuIFsuLi4odGhpcy5ieVJ1bnRpbWVTdGFnZUlkLmdldChydW50aW1lU3RhZ2VJZCkgPz8gW10pXTtcbiAgfVxuXG4gIC8qKiBOdW1iZXIgb2YgdW5pcXVlIGV4ZWN1dGlvbiBzdGVwcyB0aGF0IGhhdmUgZW50cmllcy4gKi9cbiAgZ2V0IHN0ZXBDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmJ5UnVudGltZVN0YWdlSWQuc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmUtYnVpbHQgcmFuZ2UgaW5kZXg6IHJ1bnRpbWVTdGFnZUlkIOKGkiBoYWxmLW9wZW4gcmFuZ2UgW2ZpcnN0SWR4LCBlbmRJZHgpIGluIGVudHJpZXMgYXJyYXkuXG4gICAqIE1haW50YWluZWQgZHVyaW5nIGVtaXQoKSDigJQgbm8gcmVidWlsZCBuZWVkZWQuIFVzZSBmb3IgTygxKSBwZXItc3RlcCBsb29rdXBzIGR1cmluZyB0aW1lLXRyYXZlbC5cbiAgICogZW5kSWR4IGluY2x1ZGVzIHRyYWlsaW5nIGtleWxlc3MgZW50cmllcyAoc3RydWN0dXJhbCBtYXJrZXJzIGZvbGxvd2luZyBhIHN0ZXApLlxuICAgKi9cbiAgZ2V0RW50cnlSYW5nZXMoKTogUmVhZG9ubHlNYXA8c3RyaW5nLCB7IHJlYWRvbmx5IGZpcnN0SWR4OiBudW1iZXI7IHJlYWRvbmx5IGVuZElkeDogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4gdGhpcy5lbnRyeVJhbmdlcztcbiAgfVxuXG4gIC8vIOKUgOKUgCBBZ2dyZWdhdGUgKHJlZHVjZSBhbGwgZW50cmllcykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIFJlZHVjZSBBTEwgZW50cmllcyB0byBhIHNpbmdsZSB2YWx1ZS4gRm9yIGRhc2hib2FyZHMsIHRvdGFscywgc3VtbWFyaWVzLiAqL1xuICBhZ2dyZWdhdGU8Uj4oZm46IChhY2M6IFIsIGVudHJ5OiBUKSA9PiBSLCBpbml0aWFsOiBSKTogUiB7XG4gICAgbGV0IGFjYyA9IGluaXRpYWw7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIGFjYyA9IGZuKGFjYywgZW50cnkpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9XG5cbiAgLy8g4pSA4pSAIEFjY3VtdWxhdGUgKHByb2dyZXNzaXZlIHJlZHVjZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFJlZHVjZSBlbnRyaWVzLCBvcHRpb25hbGx5IGZpbHRlcmVkIGJ5IGEgc2V0IG9mIHJ1bnRpbWVTdGFnZUlkcy5cbiAgICogRm9yIHRpbWUtdHJhdmVsIHByb2dyZXNzaXZlIHZpZXc6IHBhc3MgdGhlIHJ1bnRpbWVTdGFnZUlkcyB2aXNpYmxlIGF0IHRoZSBjdXJyZW50IHNsaWRlciBwb3NpdGlvbi5cbiAgICogRW50cmllcyB3aXRob3V0IHJ1bnRpbWVTdGFnZUlkIChzdHJ1Y3R1cmFsIG1hcmtlcnMpIGFyZSBleGNsdWRlZCB3aGVuIGtleXMgYXJlIHByb3ZpZGVkLlxuICAgKiBXaXRob3V0IGtleXMsIHJlZHVjZXMgYWxsIGVudHJpZXMgKHNhbWUgYXMgYWdncmVnYXRlKS5cbiAgICovXG4gIGFjY3VtdWxhdGU8Uj4oZm46IChhY2M6IFIsIGVudHJ5OiBUKSA9PiBSLCBpbml0aWFsOiBSLCBrZXlzPzogUmVhZG9ubHlTZXQ8c3RyaW5nPik6IFIge1xuICAgIGxldCBhY2MgPSBpbml0aWFsO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzKSB7XG4gICAgICBpZiAoa2V5cykge1xuICAgICAgICBpZiAoIWVudHJ5LnJ1bnRpbWVTdGFnZUlkIHx8ICFrZXlzLmhhcyhlbnRyeS5ydW50aW1lU3RhZ2VJZCkpIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYWNjID0gZm4oYWNjLCBlbnRyeSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH1cblxuICAvLyDilIDilIAgVGltZS10cmF2ZWwgcXVlcmllcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogUHJvZ3Jlc3NpdmUgcmV2ZWFsOiBlbnRyaWVzIHdob3NlIHJ1bnRpbWVTdGFnZUlkIGlzIGluIHRoZSB2aXNpYmxlIHNldC5cbiAgICogUHJlc2VydmVzIGluc2VydGlvbiBvcmRlci4gRW50cmllcyB3aXRob3V0IHJ1bnRpbWVTdGFnZUlkIChzdHJ1Y3R1cmFsIG1hcmtlcnMpXG4gICAqIGFyZSBidWZmZXJlZCBhbmQgaW5jbHVkZWQgb25seSB3aGVuIHN1cnJvdW5kZWQgYnkgdmlzaWJsZSBzdGVwcyBvbiBib3RoIHNpZGVzIOKAlFxuICAgKiB0cmFpbGluZyBtYXJrZXJzIGFmdGVyIHRoZSBsYXN0IHZpc2libGUgc3RlcCBhcmUgZGlzY2FyZGVkLlxuICAgKi9cbiAgZ2V0RW50cmllc1VwVG8odmlzaWJsZUlkczogUmVhZG9ubHlTZXQ8c3RyaW5nPik6IFRbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBUW10gPSBbXTtcbiAgICBsZXQgcGVuZGluZ01hcmtlcnM6IFRbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzKSB7XG4gICAgICBjb25zdCBpZCA9IGVudHJ5LnJ1bnRpbWVTdGFnZUlkO1xuICAgICAgaWYgKCFpZCkge1xuICAgICAgICAvLyBTdHJ1Y3R1cmFsIG1hcmtlciDigJQgYnVmZmVyIHVudGlsIG5leHQgdmlzaWJsZSBrZXllZCBlbnRyeSBjb25maXJtcyBpdCdzIGJldHdlZW4gdmlzaWJsZSBzdGVwcy5cbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSBwZW5kaW5nTWFya2Vycy5wdXNoKGVudHJ5KTtcbiAgICAgIH0gZWxzZSBpZiAodmlzaWJsZUlkcy5oYXMoaWQpKSB7XG4gICAgICAgIC8vIEZsdXNoIGJ1ZmZlcmVkIG1hcmtlcnMg4oCUIHRoZXkgc2l0IGJldHdlZW4gYSBwcmV2aW91cyB2aXNpYmxlIHN0ZXAgYW5kIHRoaXMgb25lLlxuICAgICAgICBpZiAocGVuZGluZ01hcmtlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnBlbmRpbmdNYXJrZXJzKTtcbiAgICAgICAgICBwZW5kaW5nTWFya2VycyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICAgIC8vIE5vbi12aXNpYmxlIGtleWVkIGVudHJpZXM6IGRvbid0IGRpc2NhcmQgcGVuZGluZyBtYXJrZXJzIOKAlCBhIGxhdGVyIHZpc2libGUgZW50cnlcbiAgICAgIC8vIG1heSBzdGlsbCBmbHVzaCB0aGVtLiBNYXJrZXJzIGFyZSBvbmx5IGRpc2NhcmRlZCBhdCB0aGUgZW5kICh0cmFpbGluZykuXG4gICAgfVxuICAgIC8vIERpc2NhcmQgcmVtYWluaW5nIHBlbmRpbmdNYXJrZXJzIOKAlCB0aGV5IHRyYWlsIHRoZSBsYXN0IHZpc2libGUgc3RlcC5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8g4pSA4pSAIExpZmVjeWNsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogQ2xlYXIgYWxsIHN0b3JlZCBkYXRhLiBDYWxsZWQgYnkgZXhlY3V0b3IgYmVmb3JlIGVhY2ggcnVuKCkuICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuZW50cmllcy5sZW5ndGggPSAwO1xuICAgIHRoaXMuYnlSdW50aW1lU3RhZ2VJZC5jbGVhcigpO1xuICAgIHRoaXMuZW50cnlSYW5nZXMuY2xlYXIoKTtcbiAgICB0aGlzLmxhc3RFbWl0dGVkSWQgPSB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SequenceStore = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* SequenceStore<T> — concrete, composable storage for ordered sequence data.
|
|
6
|
+
*
|
|
7
|
+
* Pattern: COMPOSITION primitive. Concrete class — instantiate with
|
|
8
|
+
* `new SequenceStore<T>()` and own it as a field on your
|
|
9
|
+
* recorder. Replaces the abstract `SequenceRecorder<T>` base
|
|
10
|
+
* class for the v5 "one purpose per recorder" rule:
|
|
11
|
+
* stores ARE storage; recorders ARE event handlers; consumers
|
|
12
|
+
* COMPOSE.
|
|
13
|
+
* Role: Dual-indexed append-only sequence: a flat array preserving
|
|
14
|
+
* insertion order plus a `Map<runtimeStageId, T[]>` for O(1)
|
|
15
|
+
* per-step lookup. Plus a precomputed range index for time-
|
|
16
|
+
* travel scrubbing.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { SequenceStore } from 'footprintjs/trace';
|
|
21
|
+
* import type { ScopeRecorder } from 'footprintjs';
|
|
22
|
+
*
|
|
23
|
+
* interface AuditEntry {
|
|
24
|
+
* runtimeStageId?: string;
|
|
25
|
+
* type: 'read' | 'write' | 'decision';
|
|
26
|
+
* detail: string;
|
|
27
|
+
* }
|
|
28
|
+
*
|
|
29
|
+
* // ONE PURPOSE: scope-event handler. Storage is composed in.
|
|
30
|
+
* class AuditRecorder implements ScopeRecorder {
|
|
31
|
+
* readonly id = 'audit';
|
|
32
|
+
* private readonly store = new SequenceStore<AuditEntry>();
|
|
33
|
+
*
|
|
34
|
+
* onRead(event: ReadEvent) {
|
|
35
|
+
* this.store.push({
|
|
36
|
+
* runtimeStageId: event.runtimeStageId,
|
|
37
|
+
* type: 'read',
|
|
38
|
+
* detail: event.key,
|
|
39
|
+
* });
|
|
40
|
+
* }
|
|
41
|
+
* onWrite(event: WriteEvent) {
|
|
42
|
+
* this.store.push({
|
|
43
|
+
* runtimeStageId: event.runtimeStageId,
|
|
44
|
+
* type: 'write',
|
|
45
|
+
* detail: event.key,
|
|
46
|
+
* });
|
|
47
|
+
* }
|
|
48
|
+
*
|
|
49
|
+
* getAudit() { return this.store.getAll(); }
|
|
50
|
+
* getAuditUpTo(ids: ReadonlySet<string>) {
|
|
51
|
+
* return this.store.getEntriesUpTo(ids);
|
|
52
|
+
* }
|
|
53
|
+
*
|
|
54
|
+
* clear() { this.store.clear(); }
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* **Contrast with `KeyedStore<T>`:** SequenceStore stores 1:N entries
|
|
59
|
+
* per runtimeStageId in insertion order. Use KeyedStore for 1:1
|
|
60
|
+
* (one record per step — token counts, metric snapshots).
|
|
61
|
+
*/
|
|
62
|
+
class SequenceStore {
|
|
63
|
+
/** Ordered sequence of all entries (insertion order). */
|
|
64
|
+
entries = [];
|
|
65
|
+
/** Per-step index: runtimeStageId → entries for that step. Same objects as `entries[]`. */
|
|
66
|
+
byRuntimeStageId = new Map();
|
|
67
|
+
/** Per-step range index: runtimeStageId → [firstIdx, endIdx) in entries array.
|
|
68
|
+
* endIdx includes trailing keyless entries (structural markers). Maintained during push(). */
|
|
69
|
+
entryRanges = new Map();
|
|
70
|
+
/** The runtimeStageId of the most recently emitted keyed entry. Used to extend
|
|
71
|
+
* ranges for trailing markers (entries without runtimeStageId attached after a step). */
|
|
72
|
+
lastEmittedId;
|
|
73
|
+
// ── Write ────────────────────────────────────────────────────────────
|
|
74
|
+
/**
|
|
75
|
+
* Append an entry to both the ordered sequence, keyed index, and range index.
|
|
76
|
+
* All three reference the SAME entry object — no duplication.
|
|
77
|
+
*/
|
|
78
|
+
push(entry) {
|
|
79
|
+
const idx = this.entries.length;
|
|
80
|
+
this.entries.push(entry);
|
|
81
|
+
const id = entry.runtimeStageId;
|
|
82
|
+
if (id) {
|
|
83
|
+
let arr = this.byRuntimeStageId.get(id);
|
|
84
|
+
if (!arr) {
|
|
85
|
+
arr = [];
|
|
86
|
+
this.byRuntimeStageId.set(id, arr);
|
|
87
|
+
this.entryRanges.set(id, { firstIdx: idx, endIdx: idx + 1 });
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
this.entryRanges.get(id).endIdx = idx + 1;
|
|
91
|
+
}
|
|
92
|
+
arr.push(entry);
|
|
93
|
+
this.lastEmittedId = id;
|
|
94
|
+
}
|
|
95
|
+
else if (this.lastEmittedId) {
|
|
96
|
+
// Structural marker (no runtimeStageId) — extend the preceding step's range.
|
|
97
|
+
this.entryRanges.get(this.lastEmittedId).endIdx = idx + 1;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// ── Ordered access ───────────────────────────────────────────────────
|
|
101
|
+
/** All entries in insertion order. Returns a shallow copy — entry objects are shared. */
|
|
102
|
+
getAll() {
|
|
103
|
+
return [...this.entries];
|
|
104
|
+
}
|
|
105
|
+
/** Number of entries in the sequence. */
|
|
106
|
+
get size() {
|
|
107
|
+
return this.entries.length;
|
|
108
|
+
}
|
|
109
|
+
/** Zero-copy iteration. Avoids the `getAll()` spread when the caller just needs
|
|
110
|
+
* to walk the entries (e.g., aggregating, rendering). */
|
|
111
|
+
forEach(fn) {
|
|
112
|
+
for (const entry of this.entries)
|
|
113
|
+
fn(entry);
|
|
114
|
+
}
|
|
115
|
+
// ── Keyed access ─────────────────────────────────────────────────────
|
|
116
|
+
/** O(1) lookup: all entries for a specific execution step. Returns a copy. */
|
|
117
|
+
getByKey(runtimeStageId) {
|
|
118
|
+
return [...(this.byRuntimeStageId.get(runtimeStageId) ?? [])];
|
|
119
|
+
}
|
|
120
|
+
/** Number of distinct execution steps that have at least one entry. */
|
|
121
|
+
get keyCount() {
|
|
122
|
+
return this.byRuntimeStageId.size;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Pre-built range index: runtimeStageId → half-open `[firstIdx, endIdx)`
|
|
126
|
+
* range in the entries array. Maintained during `push()` — no rebuild
|
|
127
|
+
* needed. Use for O(1) per-step lookups during time-travel scrubbing.
|
|
128
|
+
* `endIdx` includes trailing keyless entries (structural markers
|
|
129
|
+
* following a step).
|
|
130
|
+
*/
|
|
131
|
+
getEntryRanges() {
|
|
132
|
+
return this.entryRanges;
|
|
133
|
+
}
|
|
134
|
+
// ── Aggregate (reduce all entries) ───────────────────────────────────
|
|
135
|
+
/** Reduce ALL entries to a single value. For dashboards, totals, summaries. */
|
|
136
|
+
aggregate(fn, initial) {
|
|
137
|
+
let acc = initial;
|
|
138
|
+
for (const entry of this.entries)
|
|
139
|
+
acc = fn(acc, entry);
|
|
140
|
+
return acc;
|
|
141
|
+
}
|
|
142
|
+
// ── Accumulate (progressive reduce) ──────────────────────────────────
|
|
143
|
+
/**
|
|
144
|
+
* Reduce entries, optionally filtered by a set of `runtimeStageIds`.
|
|
145
|
+
* For time-travel progressive view: pass the runtimeStageIds visible
|
|
146
|
+
* at the current slider position. Entries without `runtimeStageId`
|
|
147
|
+
* (structural markers) are excluded when keys are provided. Without
|
|
148
|
+
* keys, reduces all entries (same as `aggregate`).
|
|
149
|
+
*/
|
|
150
|
+
accumulate(fn, initial, keys) {
|
|
151
|
+
let acc = initial;
|
|
152
|
+
for (const entry of this.entries) {
|
|
153
|
+
if (keys) {
|
|
154
|
+
if (!entry.runtimeStageId || !keys.has(entry.runtimeStageId))
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
acc = fn(acc, entry);
|
|
158
|
+
}
|
|
159
|
+
return acc;
|
|
160
|
+
}
|
|
161
|
+
// ── Time-travel ──────────────────────────────────────────────────────
|
|
162
|
+
/**
|
|
163
|
+
* Progressive reveal: entries whose `runtimeStageId` is in the visible
|
|
164
|
+
* set. Preserves insertion order. Entries without `runtimeStageId`
|
|
165
|
+
* (structural markers) are buffered and included only when surrounded
|
|
166
|
+
* by visible steps on both sides — trailing markers after the last
|
|
167
|
+
* visible step are discarded.
|
|
168
|
+
*/
|
|
169
|
+
getEntriesUpTo(visibleIds) {
|
|
170
|
+
const result = [];
|
|
171
|
+
let pendingMarkers = [];
|
|
172
|
+
for (const entry of this.entries) {
|
|
173
|
+
const id = entry.runtimeStageId;
|
|
174
|
+
if (!id) {
|
|
175
|
+
if (result.length > 0)
|
|
176
|
+
pendingMarkers.push(entry);
|
|
177
|
+
}
|
|
178
|
+
else if (visibleIds.has(id)) {
|
|
179
|
+
if (pendingMarkers.length > 0) {
|
|
180
|
+
result.push(...pendingMarkers);
|
|
181
|
+
pendingMarkers = [];
|
|
182
|
+
}
|
|
183
|
+
result.push(entry);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
188
|
+
// ── Lifecycle ────────────────────────────────────────────────────────
|
|
189
|
+
/** Clear all stored data. Recorders typically call this from their own
|
|
190
|
+
* `clear()` method, which the executor invokes before each run. */
|
|
191
|
+
clear() {
|
|
192
|
+
this.entries.length = 0;
|
|
193
|
+
this.byRuntimeStageId.clear();
|
|
194
|
+
this.entryRanges.clear();
|
|
195
|
+
this.lastEmittedId = undefined;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
exports.SequenceStore = SequenceStore;
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VxdWVuY2VTdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvU2VxdWVuY2VTdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeURHO0FBQ0gsTUFBYSxhQUFhO0lBQ3hCLHlEQUF5RDtJQUN4QyxPQUFPLEdBQVEsRUFBRSxDQUFDO0lBQ25DLDJGQUEyRjtJQUMxRSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO0lBQzNEO21HQUMrRjtJQUM5RSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQWdELENBQUM7SUFDdkY7OEZBQzBGO0lBQ2xGLGFBQWEsQ0FBcUI7SUFFMUMsd0VBQXdFO0lBRXhFOzs7T0FHRztJQUNILElBQUksQ0FBQyxLQUFRO1FBQ1gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUNoQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ1AsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ1QsR0FBRyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENB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O29CQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEQsQ0FBQztpQkFBTSxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7b0JBQy9CLGNBQWMsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLENBQUM7Z0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCx3RUFBd0U7SUFFeEU7d0VBQ29FO0lBQ3BFLEtBQUs7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBbEpELHNDQWtKQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2VxdWVuY2VTdG9yZTxUPiDigJQgY29uY3JldGUsIGNvbXBvc2FibGUgc3RvcmFnZSBmb3Igb3JkZXJlZCBzZXF1ZW5jZSBkYXRhLlxuICpcbiAqIFBhdHRlcm46IENPTVBPU0lUSU9OIHByaW1pdGl2ZS4gQ29uY3JldGUgY2xhc3Mg4oCUIGluc3RhbnRpYXRlIHdpdGhcbiAqICAgICAgICAgIGBuZXcgU2VxdWVuY2VTdG9yZTxUPigpYCBhbmQgb3duIGl0IGFzIGEgZmllbGQgb24geW91clxuICogICAgICAgICAgcmVjb3JkZXIuIFJlcGxhY2VzIHRoZSBhYnN0cmFjdCBgU2VxdWVuY2VSZWNvcmRlcjxUPmAgYmFzZVxuICogICAgICAgICAgY2xhc3MgZm9yIHRoZSB2NSBcIm9uZSBwdXJwb3NlIHBlciByZWNvcmRlclwiIHJ1bGU6XG4gKiAgICAgICAgICBzdG9yZXMgQVJFIHN0b3JhZ2U7IHJlY29yZGVycyBBUkUgZXZlbnQgaGFuZGxlcnM7IGNvbnN1bWVyc1xuICogICAgICAgICAgQ09NUE9TRS5cbiAqIFJvbGU6ICAgIER1YWwtaW5kZXhlZCBhcHBlbmQtb25seSBzZXF1ZW5jZTogYSBmbGF0IGFycmF5IHByZXNlcnZpbmdcbiAqICAgICAgICAgIGluc2VydGlvbiBvcmRlciBwbHVzIGEgYE1hcDxydW50aW1lU3RhZ2VJZCwgVFtdPmAgZm9yIE8oMSlcbiAqICAgICAgICAgIHBlci1zdGVwIGxvb2t1cC4gUGx1cyBhIHByZWNvbXB1dGVkIHJhbmdlIGluZGV4IGZvciB0aW1lLVxuICogICAgICAgICAgdHJhdmVsIHNjcnViYmluZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgU2VxdWVuY2VTdG9yZSB9IGZyb20gJ2Zvb3RwcmludGpzL3RyYWNlJztcbiAqIGltcG9ydCB0eXBlIHsgU2NvcGVSZWNvcmRlciB9IGZyb20gJ2Zvb3RwcmludGpzJztcbiAqXG4gKiBpbnRlcmZhY2UgQXVkaXRFbnRyeSB7XG4gKiAgIHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xuICogICB0eXBlOiAncmVhZCcgfCAnd3JpdGUnIHwgJ2RlY2lzaW9uJztcbiAqICAgZGV0YWlsOiBzdHJpbmc7XG4gKiB9XG4gKlxuICogLy8gT05FIFBVUlBPU0U6IHNjb3BlLWV2ZW50IGhhbmRsZXIuIFN0b3JhZ2UgaXMgY29tcG9zZWQgaW4uXG4gKiBjbGFzcyBBdWRpdFJlY29yZGVyIGltcGxlbWVudHMgU2NvcGVSZWNvcmRlciB7XG4gKiAgIHJlYWRvbmx5IGlkID0gJ2F1ZGl0JztcbiAqICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IG5ldyBTZXF1ZW5jZVN0b3JlPEF1ZGl0RW50cnk+KCk7XG4gKlxuICogICBvblJlYWQoZXZlbnQ6IFJlYWRFdmVudCkge1xuICogICAgIHRoaXMuc3RvcmUucHVzaCh7XG4gKiAgICAgICBydW50aW1lU3RhZ2VJZDogZXZlbnQucnVudGltZVN0YWdlSWQsXG4gKiAgICAgICB0eXBlOiAncmVhZCcsXG4gKiAgICAgICBkZXRhaWw6IGV2ZW50LmtleSxcbiAqICAgICB9KTtcbiAqICAgfVxuICogICBvbldyaXRlKGV2ZW50OiBXcml0ZUV2ZW50KSB7XG4gKiAgICAgdGhpcy5zdG9yZS5wdXNoKHtcbiAqICAgICAgIHJ1bnRpbWVTdGFnZUlkOiBldmVudC5ydW50aW1lU3RhZ2VJZCxcbiAqICAgICAgIHR5cGU6ICd3cml0ZScsXG4gKiAgICAgICBkZXRhaWw6IGV2ZW50LmtleSxcbiAqICAgICB9KTtcbiAqICAgfVxuICpcbiAqICAgZ2V0QXVkaXQoKSB7IHJldHVybiB0aGlzLnN0b3JlLmdldEFsbCgpOyB9XG4gKiAgIGdldEF1ZGl0VXBUbyhpZHM6IFJlYWRvbmx5U2V0PHN0cmluZz4pIHtcbiAqICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRFbnRyaWVzVXBUbyhpZHMpO1xuICogICB9XG4gKlxuICogICBjbGVhcigpIHsgdGhpcy5zdG9yZS5jbGVhcigpOyB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAqKkNvbnRyYXN0IHdpdGggYEtleWVkU3RvcmU8VD5gOioqIFNlcXVlbmNlU3RvcmUgc3RvcmVzIDE6TiBlbnRyaWVzXG4gKiBwZXIgcnVudGltZVN0YWdlSWQgaW4gaW5zZXJ0aW9uIG9yZGVyLiBVc2UgS2V5ZWRTdG9yZSBmb3IgMToxXG4gKiAob25lIHJlY29yZCBwZXIgc3RlcCDigJQgdG9rZW4gY291bnRzLCBtZXRyaWMgc25hcHNob3RzKS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlcXVlbmNlU3RvcmU8VCBleHRlbmRzIHsgcnVudGltZVN0YWdlSWQ/OiBzdHJpbmcgfT4ge1xuICAvKiogT3JkZXJlZCBzZXF1ZW5jZSBvZiBhbGwgZW50cmllcyAoaW5zZXJ0aW9uIG9yZGVyKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBlbnRyaWVzOiBUW10gPSBbXTtcbiAgLyoqIFBlci1zdGVwIGluZGV4OiBydW50aW1lU3RhZ2VJZCDihpIgZW50cmllcyBmb3IgdGhhdCBzdGVwLiBTYW1lIG9iamVjdHMgYXMgYGVudHJpZXNbXWAuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYnlSdW50aW1lU3RhZ2VJZCA9IG5ldyBNYXA8c3RyaW5nLCBUW10+KCk7XG4gIC8qKiBQZXItc3RlcCByYW5nZSBpbmRleDogcnVudGltZVN0YWdlSWQg4oaSIFtmaXJzdElkeCwgZW5kSWR4KSBpbiBlbnRyaWVzIGFycmF5LlxuICAgKiAgZW5kSWR4IGluY2x1ZGVzIHRyYWlsaW5nIGtleWxlc3MgZW50cmllcyAoc3RydWN0dXJhbCBtYXJrZXJzKS4gTWFpbnRhaW5lZCBkdXJpbmcgcHVzaCgpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGVudHJ5UmFuZ2VzID0gbmV3IE1hcDxzdHJpbmcsIHsgZmlyc3RJZHg6IG51bWJlcjsgZW5kSWR4OiBudW1iZXIgfT4oKTtcbiAgLyoqIFRoZSBydW50aW1lU3RhZ2VJZCBvZiB0aGUgbW9zdCByZWNlbnRseSBlbWl0dGVkIGtleWVkIGVudHJ5LiBVc2VkIHRvIGV4dGVuZFxuICAgKiAgcmFuZ2VzIGZvciB0cmFpbGluZyBtYXJrZXJzIChlbnRyaWVzIHdpdGhvdXQgcnVudGltZVN0YWdlSWQgYXR0YWNoZWQgYWZ0ZXIgYSBzdGVwKS4gKi9cbiAgcHJpdmF0ZSBsYXN0RW1pdHRlZElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLy8g4pSA4pSAIFdyaXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBBcHBlbmQgYW4gZW50cnkgdG8gYm90aCB0aGUgb3JkZXJlZCBzZXF1ZW5jZSwga2V5ZWQgaW5kZXgsIGFuZCByYW5nZSBpbmRleC5cbiAgICogQWxsIHRocmVlIHJlZmVyZW5jZSB0aGUgU0FNRSBlbnRyeSBvYmplY3Qg4oCUIG5vIGR1cGxpY2F0aW9uLlxuICAgKi9cbiAgcHVzaChlbnRyeTogVCk6IHZvaWQge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMuZW50cmllcy5sZW5ndGg7XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goZW50cnkpO1xuICAgIGNvbnN0IGlkID0gZW50cnkucnVudGltZVN0YWdlSWQ7XG4gICAgaWYgKGlkKSB7XG4gICAgICBsZXQgYXJyID0gdGhpcy5ieVJ1bnRpbWVTdGFnZUlkLmdldChpZCk7XG4gICAgICBpZiAoIWFycikge1xuICAgICAgICBhcnIgPSBbXTtcbiAgICAgICAgdGhpcy5ieVJ1bnRpbWVTdGFnZUlkLnNldChpZCwgYXJyKTtcbiAgICAgICAgdGhpcy5lbnRyeVJhbmdlcy5zZXQoaWQsIHsgZmlyc3RJZHg6IGlkeCwgZW5kSWR4OiBpZHggKyAxIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnRyeVJhbmdlcy5nZXQoaWQpIS5lbmRJZHggPSBpZHggKyAxO1xuICAgICAgfVxuICAgICAgYXJyLnB1c2goZW50cnkpO1xuICAgICAgdGhpcy5sYXN0RW1pdHRlZElkID0gaWQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxhc3RFbWl0dGVkSWQpIHtcbiAgICAgIC8vIFN0cnVjdHVyYWwgbWFya2VyIChubyBydW50aW1lU3RhZ2VJZCkg4oCUIGV4dGVuZCB0aGUgcHJlY2VkaW5nIHN0ZXAncyByYW5nZS5cbiAgICAgIHRoaXMuZW50cnlSYW5nZXMuZ2V0KHRoaXMubGFzdEVtaXR0ZWRJZCkhLmVuZElkeCA9IGlkeCArIDE7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIE9yZGVyZWQgYWNjZXNzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBBbGwgZW50cmllcyBpbiBpbnNlcnRpb24gb3JkZXIuIFJldHVybnMgYSBzaGFsbG93IGNvcHkg4oCUIGVudHJ5IG9iamVjdHMgYXJlIHNoYXJlZC4gKi9cbiAgZ2V0QWxsKCk6IFRbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmVudHJpZXNdO1xuICB9XG5cbiAgLyoqIE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzZXF1ZW5jZS4gKi9cbiAgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiBaZXJvLWNvcHkgaXRlcmF0aW9uLiBBdm9pZHMgdGhlIGBnZXRBbGwoKWAgc3ByZWFkIHdoZW4gdGhlIGNhbGxlciBqdXN0IG5lZWRzXG4gICAqICB0byB3YWxrIHRoZSBlbnRyaWVzIChlLmcuLCBhZ2dyZWdhdGluZywgcmVuZGVyaW5nKS4gKi9cbiAgZm9yRWFjaChmbjogKGVudHJ5OiBUKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMpIGZuKGVudHJ5KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBLZXllZCBhY2Nlc3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIE8oMSkgbG9va3VwOiBhbGwgZW50cmllcyBmb3IgYSBzcGVjaWZpYyBleGVjdXRpb24gc3RlcC4gUmV0dXJucyBhIGNvcHkuICovXG4gIGdldEJ5S2V5KHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBUW10ge1xuICAgIHJldHVybiBbLi4uKHRoaXMuYnlSdW50aW1lU3RhZ2VJZC5nZXQocnVudGltZVN0YWdlSWQpID8/IFtdKV07XG4gIH1cblxuICAvKiogTnVtYmVyIG9mIGRpc3RpbmN0IGV4ZWN1dGlvbiBzdGVwcyB0aGF0IGhhdmUgYXQgbGVhc3Qgb25lIGVudHJ5LiAqL1xuICBnZXQga2V5Q291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ieVJ1bnRpbWVTdGFnZUlkLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogUHJlLWJ1aWx0IHJhbmdlIGluZGV4OiBydW50aW1lU3RhZ2VJZCDihpIgaGFsZi1vcGVuIGBbZmlyc3RJZHgsIGVuZElkeClgXG4gICAqIHJhbmdlIGluIHRoZSBlbnRyaWVzIGFycmF5LiBNYWludGFpbmVkIGR1cmluZyBgcHVzaCgpYCDigJQgbm8gcmVidWlsZFxuICAgKiBuZWVkZWQuIFVzZSBmb3IgTygxKSBwZXItc3RlcCBsb29rdXBzIGR1cmluZyB0aW1lLXRyYXZlbCBzY3J1YmJpbmcuXG4gICAqIGBlbmRJZHhgIGluY2x1ZGVzIHRyYWlsaW5nIGtleWxlc3MgZW50cmllcyAoc3RydWN0dXJhbCBtYXJrZXJzXG4gICAqIGZvbGxvd2luZyBhIHN0ZXApLlxuICAgKi9cbiAgZ2V0RW50cnlSYW5nZXMoKTogUmVhZG9ubHlNYXA8c3RyaW5nLCB7IHJlYWRvbmx5IGZpcnN0SWR4OiBudW1iZXI7IHJlYWRvbmx5IGVuZElkeDogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4gdGhpcy5lbnRyeVJhbmdlcztcbiAgfVxuXG4gIC8vIOKUgOKUgCBBZ2dyZWdhdGUgKHJlZHVjZSBhbGwgZW50cmllcykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIFJlZHVjZSBBTEwgZW50cmllcyB0byBhIHNpbmdsZSB2YWx1ZS4gRm9yIGRhc2hib2FyZHMsIHRvdGFscywgc3VtbWFyaWVzLiAqL1xuICBhZ2dyZWdhdGU8Uj4oZm46IChhY2M6IFIsIGVudHJ5OiBUKSA9PiBSLCBpbml0aWFsOiBSKTogUiB7XG4gICAgbGV0IGFjYyA9IGluaXRpYWw7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMpIGFjYyA9IGZuKGFjYywgZW50cnkpO1xuICAgIHJldHVybiBhY2M7XG4gIH1cblxuICAvLyDilIDilIAgQWNjdW11bGF0ZSAocHJvZ3Jlc3NpdmUgcmVkdWNlKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogUmVkdWNlIGVudHJpZXMsIG9wdGlvbmFsbHkgZmlsdGVyZWQgYnkgYSBzZXQgb2YgYHJ1bnRpbWVTdGFnZUlkc2AuXG4gICAqIEZvciB0aW1lLXRyYXZlbCBwcm9ncmVzc2l2ZSB2aWV3OiBwYXNzIHRoZSBydW50aW1lU3RhZ2VJZHMgdmlzaWJsZVxuICAgKiBhdCB0aGUgY3VycmVudCBzbGlkZXIgcG9zaXRpb24uIEVudHJpZXMgd2l0aG91dCBgcnVudGltZVN0YWdlSWRgXG4gICAqIChzdHJ1Y3R1cmFsIG1hcmtlcnMpIGFyZSBleGNsdWRlZCB3aGVuIGtleXMgYXJlIHByb3ZpZGVkLiBXaXRob3V0XG4gICAqIGtleXMsIHJlZHVjZXMgYWxsIGVudHJpZXMgKHNhbWUgYXMgYGFnZ3JlZ2F0ZWApLlxuICAgKi9cbiAgYWNjdW11bGF0ZTxSPihmbjogKGFjYzogUiwgZW50cnk6IFQpID0+IFIsIGluaXRpYWw6IFIsIGtleXM/OiBSZWFkb25seVNldDxzdHJpbmc+KTogUiB7XG4gICAgbGV0IGFjYyA9IGluaXRpYWw7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIGlmIChrZXlzKSB7XG4gICAgICAgIGlmICghZW50cnkucnVudGltZVN0YWdlSWQgfHwgIWtleXMuaGFzKGVudHJ5LnJ1bnRpbWVTdGFnZUlkKSkgY29udGludWU7XG4gICAgICB9XG4gICAgICBhY2MgPSBmbihhY2MsIGVudHJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfVxuXG4gIC8vIOKUgOKUgCBUaW1lLXRyYXZlbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogUHJvZ3Jlc3NpdmUgcmV2ZWFsOiBlbnRyaWVzIHdob3NlIGBydW50aW1lU3RhZ2VJZGAgaXMgaW4gdGhlIHZpc2libGVcbiAgICogc2V0LiBQcmVzZXJ2ZXMgaW5zZXJ0aW9uIG9yZGVyLiBFbnRyaWVzIHdpdGhvdXQgYHJ1bnRpbWVTdGFnZUlkYFxuICAgKiAoc3RydWN0dXJhbCBtYXJrZXJzKSBhcmUgYnVmZmVyZWQgYW5kIGluY2x1ZGVkIG9ubHkgd2hlbiBzdXJyb3VuZGVkXG4gICAqIGJ5IHZpc2libGUgc3RlcHMgb24gYm90aCBzaWRlcyDigJQgdHJhaWxpbmcgbWFya2VycyBhZnRlciB0aGUgbGFzdFxuICAgKiB2aXNpYmxlIHN0ZXAgYXJlIGRpc2NhcmRlZC5cbiAgICovXG4gIGdldEVudHJpZXNVcFRvKHZpc2libGVJZHM6IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBUW10ge1xuICAgIGNvbnN0IHJlc3VsdDogVFtdID0gW107XG4gICAgbGV0IHBlbmRpbmdNYXJrZXJzOiBUW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgY29uc3QgaWQgPSBlbnRyeS5ydW50aW1lU3RhZ2VJZDtcbiAgICAgIGlmICghaWQpIHtcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSBwZW5kaW5nTWFya2Vycy5wdXNoKGVudHJ5KTtcbiAgICAgIH0gZWxzZSBpZiAodmlzaWJsZUlkcy5oYXMoaWQpKSB7XG4gICAgICAgIGlmIChwZW5kaW5nTWFya2Vycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goLi4ucGVuZGluZ01hcmtlcnMpO1xuICAgICAgICAgIHBlbmRpbmdNYXJrZXJzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8g4pSA4pSAIExpZmVjeWNsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogQ2xlYXIgYWxsIHN0b3JlZCBkYXRhLiBSZWNvcmRlcnMgdHlwaWNhbGx5IGNhbGwgdGhpcyBmcm9tIHRoZWlyIG93blxuICAgKiAgYGNsZWFyKClgIG1ldGhvZCwgd2hpY2ggdGhlIGV4ZWN1dG9yIGludm9rZXMgYmVmb3JlIGVhY2ggcnVuLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmVudHJpZXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmJ5UnVudGltZVN0YWdlSWQuY2xlYXIoKTtcbiAgICB0aGlzLmVudHJ5UmFuZ2VzLmNsZWFyKCk7XG4gICAgdGhpcy5sYXN0RW1pdHRlZElkID0gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
|