footprintjs 9.44.1 → 9.44.3
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 +6 -5
- package/dist/esm/lib/capture/freeze.d.ts +51 -7
- package/dist/esm/lib/capture/freeze.js +289 -24
- package/dist/esm/lib/capture/valueKinds.d.ts +57 -0
- package/dist/esm/lib/capture/valueKinds.js +142 -0
- package/dist/esm/lib/memory/EventLog.d.ts +25 -7
- package/dist/esm/lib/memory/EventLog.js +31 -11
- package/dist/esm/lib/memory/StageContext.d.ts +4 -33
- package/dist/esm/lib/memory/StageContext.js +18 -81
- package/dist/esm/lib/memory/TransactionBuffer.js +2 -2
- package/dist/esm/lib/memory/admission.js +4 -3
- package/dist/esm/lib/memory/borrowedMutation.js +2 -2
- package/dist/esm/lib/memory/equality.d.ts +55 -19
- package/dist/esm/lib/memory/equality.js +154 -51
- package/dist/esm/lib/memory/logModel.js +11 -4
- package/dist/esm/lib/memory/recordCommit.d.ts +43 -0
- package/dist/esm/lib/memory/recordCommit.js +59 -0
- package/dist/esm/lib/memory/redaction.d.ts +1 -1
- package/dist/esm/lib/memory/redaction.js +2 -2
- package/dist/esm/lib/runner/ExecutionRuntime.d.ts +6 -3
- package/dist/esm/lib/runner/ExecutionRuntime.js +17 -12
- package/dist/esm/lib/runner/snapshot.js +17 -3
- package/dist/esm/lib/slice/elementProvenance.js +2 -2
- package/dist/esm/lib/time-travel/chain.js +28 -26
- package/dist/lib/capture/freeze.js +292 -25
- package/dist/lib/capture/valueKinds.js +146 -0
- package/dist/lib/memory/EventLog.js +30 -10
- package/dist/lib/memory/StageContext.js +17 -80
- package/dist/lib/memory/TransactionBuffer.js +2 -2
- package/dist/lib/memory/admission.js +4 -3
- package/dist/lib/memory/borrowedMutation.js +2 -2
- package/dist/lib/memory/equality.js +154 -51
- package/dist/lib/memory/logModel.js +11 -4
- package/dist/lib/memory/recordCommit.js +63 -0
- package/dist/lib/memory/redaction.js +2 -2
- package/dist/lib/runner/ExecutionRuntime.js +16 -11
- package/dist/lib/runner/snapshot.js +16 -2
- package/dist/lib/slice/elementProvenance.js +2 -2
- package/dist/lib/time-travel/chain.js +27 -25
- package/dist/types/lib/capture/freeze.d.ts +51 -7
- package/dist/types/lib/capture/valueKinds.d.ts +57 -0
- package/dist/types/lib/memory/EventLog.d.ts +25 -7
- package/dist/types/lib/memory/StageContext.d.ts +4 -33
- package/dist/types/lib/memory/equality.d.ts +55 -19
- package/dist/types/lib/memory/recordCommit.d.ts +43 -0
- package/dist/types/lib/memory/redaction.d.ts +1 -1
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +6 -3
- package/package.json +2 -1
|
@@ -128,8 +128,8 @@ export type RuntimeSnapshot = {
|
|
|
128
128
|
export declare class ExecutionRuntime {
|
|
129
129
|
globalStore: SharedMemory;
|
|
130
130
|
/**
|
|
131
|
-
* Parallel redacted mirror of `globalStore`. Populated
|
|
132
|
-
* `
|
|
131
|
+
* Parallel redacted mirror of `globalStore`. Populated by every commit that
|
|
132
|
+
* staged a write (`memory/recordCommit.ts · recordCommit`), with the already-computed redacted patches.
|
|
133
133
|
* Only exists when the run's policy keeps a mirror (`RunPolicy.mirror` —
|
|
134
134
|
* `FlowChartExecutor` sets it when a `RedactionPolicy` is configured).
|
|
135
135
|
* Otherwise undefined and zero cost.
|
|
@@ -187,7 +187,10 @@ export declare class ExecutionRuntime {
|
|
|
187
187
|
* The frozen, detached fold base served as {@link RuntimeSnapshot.initialState}.
|
|
188
188
|
* Computed once (the base never changes after construction) and shared —
|
|
189
189
|
* safe because it is deeply frozen, so no holder can mutate it or reach the
|
|
190
|
-
* engine through it
|
|
190
|
+
* engine through it; a base holding a Date, Map, buffer … (what freezing
|
|
191
|
+
* cannot seal) is served by the public snapshot as a copy of its open paths
|
|
192
|
+
* (`runner/snapshot.ts · servedSnapshot`, `capture/freeze.ts · serveRecord`,
|
|
193
|
+
* 9.44.2).
|
|
191
194
|
*/
|
|
192
195
|
private getFoldBase;
|
|
193
196
|
getPipelines(): string[];
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* The engine (FlowchartTraverser) receives this as its runtime parameter.
|
|
10
10
|
* After execution, consumers query it for the full execution state.
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
12
|
+
import { freezeRecord } from '../capture/freeze.js';
|
|
13
13
|
import { EventLog } from '../memory/EventLog.js';
|
|
14
14
|
import { LOG_PLACEHOLDER } from '../memory/placeholders.js';
|
|
15
15
|
import { DEFAULT_RUN_POLICY } from '../memory/runPolicy.js';
|
|
@@ -18,8 +18,8 @@ import { StageContext } from '../memory/StageContext.js';
|
|
|
18
18
|
export class ExecutionRuntime {
|
|
19
19
|
globalStore;
|
|
20
20
|
/**
|
|
21
|
-
* Parallel redacted mirror of `globalStore`. Populated
|
|
22
|
-
* `
|
|
21
|
+
* Parallel redacted mirror of `globalStore`. Populated by every commit that
|
|
22
|
+
* staged a write (`memory/recordCommit.ts · recordCommit`), with the already-computed redacted patches.
|
|
23
23
|
* Only exists when the run's policy keeps a mirror (`RunPolicy.mirror` —
|
|
24
24
|
* `FlowChartExecutor` sets it when a `RedactionPolicy` is configured).
|
|
25
25
|
* Otherwise undefined and zero cost.
|
|
@@ -110,12 +110,15 @@ export class ExecutionRuntime {
|
|
|
110
110
|
* The frozen, detached fold base served as {@link RuntimeSnapshot.initialState}.
|
|
111
111
|
* Computed once (the base never changes after construction) and shared —
|
|
112
112
|
* safe because it is deeply frozen, so no holder can mutate it or reach the
|
|
113
|
-
* engine through it
|
|
113
|
+
* engine through it; a base holding a Date, Map, buffer … (what freezing
|
|
114
|
+
* cannot seal) is served by the public snapshot as a copy of its open paths
|
|
115
|
+
* (`runner/snapshot.ts · servedSnapshot`, `capture/freeze.ts · serveRecord`,
|
|
116
|
+
* 9.44.2).
|
|
114
117
|
*/
|
|
115
118
|
getFoldBase() {
|
|
116
119
|
if (!this._foldBase) {
|
|
117
120
|
const base = this.executionHistory.getInitialState();
|
|
118
|
-
this._foldBase =
|
|
121
|
+
this._foldBase = freezeRecord(base && typeof base === 'object' ? base : {});
|
|
119
122
|
}
|
|
120
123
|
return this._foldBase;
|
|
121
124
|
}
|
|
@@ -171,16 +174,18 @@ export class ExecutionRuntime {
|
|
|
171
174
|
// rather than leak it — `stateAt` degrades to `basis: 'log-only'`.
|
|
172
175
|
...(useRedacted ? {} : { initialState: this.getFoldBase() }),
|
|
173
176
|
// DETACHED: the engine keeps its live EventLog; the snapshot gets a
|
|
174
|
-
// frozen
|
|
175
|
-
// internal array, so a snapshot taken mid-run kept growing
|
|
176
|
-
// holder and a consumer could splice the engine's own history.
|
|
177
|
-
// bundles in it are the log's own, frozen at `EventLog · record`
|
|
178
|
-
// The
|
|
179
|
-
|
|
177
|
+
// frozen array of its own (`recorded()` builds a new one). Serving the
|
|
178
|
+
// internal array aliased it, so a snapshot taken mid-run kept growing
|
|
179
|
+
// under its holder and a consumer could splice the engine's own history.
|
|
180
|
+
// The bundles in it are the log's own, frozen at `EventLog · record`
|
|
181
|
+
// (F3). The public snapshot serves them (`runner/snapshot.ts ·
|
|
182
|
+
// servedSnapshot`, 9.44.2); this one is also the engine's own — a
|
|
183
|
+
// subflow mount takes it once per mount — so the run path serves nothing.
|
|
184
|
+
commitLog: Object.freeze(this.executionHistory.recorded()),
|
|
180
185
|
...(this.executionHistory.address === undefined ? {} : { logAddress: this.executionHistory.address }),
|
|
181
186
|
commitValues: this.policy.commitValues,
|
|
182
187
|
writeProvenance: this.policy.writeProvenance,
|
|
183
188
|
};
|
|
184
189
|
}
|
|
185
190
|
}
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhlY3V0aW9uUnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcnVubmVyL0V4ZWN1dGlvblJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFtSHpELE1BQU0sT0FBTyxnQkFBZ0I7SUFDcEIsV0FBVyxDQUFlO0lBQ2pDOzs7Ozs7OztPQVFHO0lBQ0ksYUFBYSxDQUFnQjtJQUM3QixnQkFBZ0IsQ0FBZTtJQUMvQixnQkFBZ0IsQ0FBVztJQUNsQyxvRkFBb0Y7SUFDNUUsYUFBYSxDQUFnQjtJQUM3QixhQUFhLENBQVU7SUFDdkIsY0FBYyxDQUFVO0lBQ2hDO21GQUMrRTtJQUN2RSxNQUFNLENBQVk7SUFFMUIsNEVBQTRFO0lBQ3BFLFNBQVMsQ0FBMkI7SUFFNUM7Ozs7OztPQU1HO0lBQ0gsWUFDRSxRQUFnQixFQUNoQixNQUFjLEVBQ2QsYUFBdUIsRUFDdkIsWUFBc0IsRUFDdEIsU0FBb0Isa0JBQWtCO1FBRXRDLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLHlFQUF5RTtRQUN6RSwwRUFBMEU7UUFDMUUsMkVBQTJFO1FBQzNFLDBFQUEwRTtRQUMxRSx3RUFBd0U7UUFDeEUsOERBQThEO1FBQzlELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLElBQVksRUFBRSxFQUFVO1FBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFTLENBQUMsTUFBaUI7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNLLGFBQWEsQ0FBQyxJQUFrQjtRQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxZQUFZLENBQ25DLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUNuRixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FDbEYsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCx5RkFBeUY7SUFDekYsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFdBQVc7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQTRCLENBQUM7UUFDdkcsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUMsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN4RixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQWMsRUFBRSxHQUFXLEVBQUUsS0FBYztRQUN2RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQ0c7SUFDSCxXQUFXLENBQUMsT0FBOEI7UUFDeEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDakUsTUFBTSxXQUFXLEdBQUcsT0FBTyxFQUFFLE1BQU0sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQUM7UUFDakYsT0FBTztZQUNMLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO1lBQ3ZGLGFBQWEsRUFBRSxZQUFZLENBQUMsV0FBVyxFQUFFO1lBQ3pDLHNFQUFzRTtZQUN0RSxzRUFBc0U7WUFDdEUsbUVBQW1FO1lBQ25FLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDNUQsb0VBQW9FO1lBQ3BFLGtFQUFrRTtZQUNsRSxxRUFBcUU7WUFDckUsbUVBQW1FO1lBQ25FLHVFQUF1RTtZQUN2RSxrRUFBa0U7WUFDbEUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFtQjtZQUNoRixHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JHLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7WUFDdEMsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZTtTQUM3QyxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFeGVjdXRpb25SdW50aW1lIOKAlCBUaGUgcnVudGltZSBlbnZpcm9ubWVudCBmb3Igb25lIGZsb3djaGFydCBleGVjdXRpb24uXG4gKlxuICogV2lyZXMgdXAgdGhlIHRocmVlIG1lbW9yeSBwcmltaXRpdmVzIGludG8gYSBzaW5nbGUgY29udGFpbmVyOlxuICogICAtIFNoYXJlZE1lbW9yeSAodGhlIGhlYXAg4oCUIHNoYXJlZCBzdGF0ZSBhY3Jvc3MgYWxsIHN0YWdlcylcbiAqICAgLSBTdGFnZUNvbnRleHQgICh0aGUgY2FsbCBzdGFjayDigJQgcGVyLXN0YWdlIGV4ZWN1dGlvbiB0cmVlKVxuICogICAtIEV2ZW50TG9nICAgICAgKHRoZSB0cmFuc2FjdGlvbiBsb2cg4oCUIGNvbW1pdCBoaXN0b3J5IGZvciByZXBsYXkpXG4gKlxuICogVGhlIGVuZ2luZSAoRmxvd2NoYXJ0VHJhdmVyc2VyKSByZWNlaXZlcyB0aGlzIGFzIGl0cyBydW50aW1lIHBhcmFtZXRlci5cbiAqIEFmdGVyIGV4ZWN1dGlvbiwgY29uc3VtZXJzIHF1ZXJ5IGl0IGZvciB0aGUgZnVsbCBleGVjdXRpb24gc3RhdGUuXG4gKi9cblxuaW1wb3J0IHsgZGVlcEZyZWV6ZSB9IGZyb20gJy4uL2NhcHR1cmUvZnJlZXplLmpzJztcbmltcG9ydCB7IEV2ZW50TG9nIH0gZnJvbSAnLi4vbWVtb3J5L0V2ZW50TG9nLmpzJztcbmltcG9ydCB0eXBlIHsgTG9nQWRkcmVzcyB9IGZyb20gJy4uL21lbW9yeS9ldmVudFBvc2l0aW9uLmpzJztcbmltcG9ydCB7IExPR19QTEFDRUhPTERFUiB9IGZyb20gJy4uL21lbW9yeS9wbGFjZWhvbGRlcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBSdW5Qb2xpY3kgfSBmcm9tICcuLi9tZW1vcnkvcnVuUG9saWN5LmpzJztcbmltcG9ydCB7IERFRkFVTFRfUlVOX1BPTElDWSB9IGZyb20gJy4uL21lbW9yeS9ydW5Qb2xpY3kuanMnO1xuaW1wb3J0IHsgU2hhcmVkTWVtb3J5IH0gZnJvbSAnLi4vbWVtb3J5L1NoYXJlZE1lbW9yeS5qcyc7XG5pbXBvcnQgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlLCBDb21taXRWYWx1ZXNNb2RlLCBTdGFnZVNuYXBzaG90LCBXcml0ZVByb3ZlbmFuY2VNb2RlIH0gZnJvbSAnLi4vbWVtb3J5L3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgT2JzZXJ2ZXJTdGF0cyB9IGZyb20gJy4vRGVmZXJyZWRPYnNlcnZlclRpZXIuanMnO1xuXG4vKiogU25hcHNob3Qgb2YgYSBzaW5nbGUgcmVjb3JkZXIncyBjb2xsZWN0ZWQgZGF0YS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkZXJTbmFwc2hvdCB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFNjb3BlUmVjb3JkZXIgdHlwZSBhbmQgcGF0dGVybiBkZXNjcmlwdGlvbiAoZS5nLiwgXCJUcmFuc2xhdG9yIChLZXllZFN0b3JlKSDigJQgcGVyLXN0ZXAgdG9rZW4gdXNhZ2VcIikuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogUHJlZmVycmVkIHJlYWQtdGltZSBvcGVyYXRpb24g4oCUIGhpbnRzIHRoZSBVSSBhYm91dCB3aGljaCB2aWV3IHRvIHNob3cgcHJvbWluZW50bHkuICovXG4gIHByZWZlcnJlZE9wZXJhdGlvbj86ICd0cmFuc2xhdGUnIHwgJ2FjY3VtdWxhdGUnIHwgJ2FnZ3JlZ2F0ZSc7XG4gIGRhdGE6IHVua25vd247XG4gIC8qKlxuICAgKiBTbWFsbCBtYWNoaW5lLXJlYWRhYmxlIGZhY3RzIGFib3V0IHRoZSBCVU5ETEUg4oCUIGhvdyBpdCB3YXMgcHJvZHVjZWQsXG4gICAqIHdoaWNoIHByb2plY3Rpb24gb2YgdGhlIHJlY29yZGVyJ3MgZGF0YSBpdCBpcywgd2hhdCBpdCBkZWxpYmVyYXRlbHlcbiAgICogbGVmdCBvdXQuIFdoYXRldmVyIHRoZSByZWNvcmRlcidzIGB0b1NuYXBzaG90KClgIHB1dCBoZXJlLCBjb3BpZWRcbiAgICogdGhyb3VnaCB1bmNoYW5nZWQuXG4gICAqXG4gICAqIFRoZSBzcGxpdCB3aXRoIGBkZXNjcmlwdGlvbmA6IGBkZXNjcmlwdGlvbmAgaXMgdGhlIHNlbnRlbmNlIGEgaHVtYW5cbiAgICogcmVhZHM7IGBtZXRhYCBpcyB3aGF0IGFuIG9mZmxpbmUgY29uc3VtZXIgQlJBTkNIRVMgb24uIEEgcmVjb3JkZXIgd2l0aFxuICAgKiBhIFwiZnVsbFwiIGFuZCBhIFwibGVhblwiIGJ1bmRsZSBzaGFwZSB0aGF0IHNheXMgc28gb25seSBpbiBpdHNcbiAgICogZGVzY3JpcHRpb24gZm9yY2VzIGV2ZXJ5IHJlYWRlciB0byBzdHJpbmctbWF0Y2ggcHJvc2Ug4oCUIGFuZCBhIHJlYWRlclxuICAgKiB0aGF0IGRvZXNuJ3QgcmVuZGVycyBhbiBlbXB0eSBwYW5lbCBpbnN0ZWFkIG9mIHNheWluZyBcInRoaXMgcmVjb3JkaW5nXG4gICAqIGNhcnJpZXMgc3RydWN0dXJlIG9ubHlcIi5cbiAgICpcbiAgICogTm90IGludGVycHJldGVkIGJ5IHRoZSBlbmdpbmUsIHNvIGtleXMgYXJlIHRoZSByZWNvcmRlcidzIHRvIGNob29zZTtcbiAgICoga2VlcCB0aGUgdmFsdWVzIEpTT04tc2FmZSwgc2luY2UgdGhpcyByaWRlcyB0aGUgc25hcHNob3Qgb3V0IHRvIGRpc2suXG4gICAqL1xuICBtZXRhPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufVxuXG5leHBvcnQgdHlwZSBSdW50aW1lU25hcHNob3QgPSB7XG4gIC8qKlxuICAgKiBUaGUgcnVuIHRoaXMgc25hcHNob3QgYmVsb25ncyB0byDigJQgdGhlIHNhbWUgYHJ1bklkYCBzdGFtcGVkIG9uIGV2ZXJ5XG4gICAqIGBUcmF2ZXJzYWxDb250ZXh0YCAoYW5kIHRodXMgZXZlcnkgcmVjb3JkZXIgZXZlbnQpIG9mIHRoZSBydW4sIHNvIGFcbiAgICogc25hcHNob3QgY2FuIGJlIGpvaW5lZCBhZ2FpbnN0IGFuIGV2ZW50IHN0cmVhbSBvciBhbiBleHRlcm5hbFxuICAgKiBjb3JyZWxhdGlvbiB0YWJsZS4gUmVhZC1vbmx5IGJ5IGNvbnRyYWN0OiBnZW5lcmF0ZWQgYnkgdGhlIGV4ZWN1dG9yXG4gICAqIChgcnVubmVyL3J1bklkLnRzYCksIG5ldmVyIGRlcml2ZWQgZnJvbSBzbmFwc2hvdCBjb250ZW50cy5cbiAgICpcbiAgICogTGlmZWN5Y2xlIChtYXRjaGVzIHRoZSBldmVudCBtb2RlbCk6IGZyZXNoIHBlciBgcnVuKClgIEFORCBwZXJcbiAgICogYHJlc3VtZSgpYCDigJQgcmVzdW1lIGlzIGxvZ2ljYWxseSBhIGRpc3RpbmN0IHJ1biwgc28gYSBwb3N0LXJlc3VtZVxuICAgKiBzbmFwc2hvdCBjYXJyaWVzIGEgRElGRkVSRU5UIHJ1bklkIHRoYW4gdGhlIHBhdXNlZCBydW4ncyBzbmFwc2hvdC5cbiAgICovXG4gIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gIHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXhlY3V0aW9uVHJlZTogU3RhZ2VTbmFwc2hvdDtcbiAgLyoqXG4gICAqIFRoZSBjb21taXQgbG9nJ3MgZm9sZCBCQVNFIOKAlCB0aGUgcnVuJ3Mgc3RhdGUgYmVmb3JlIGl0cyBmaXJzdCBjb21taXRcbiAgICogKGBpbml0aWFsQ29udGV4dGAgbWVyZ2VkIHdpdGggYGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0YDsgb24gYSByZXN1bWUsIHRoZVxuICAgKiBjaGVja3BvaW50J3Mgc3RhdGUpLiBEZWVwbHkgZnJvemVuIGFuZCBmdWxseSBkZXRhY2hlZCBmcm9tIHRoZSBlbmdpbmUuXG4gICAqXG4gICAqIENvbW1pdCBidW5kbGVzIGFyZSBESUZGUywgc28gdGhlIGxvZyBhbG9uZSBjYW5ub3QgcmVidWlsZCBhIHZhbHVlIHRoYXRcbiAgICogd2FzIHNlZWRlZCBiZWZvcmUgdGhlIHJ1biBhbmQgb25seSBldmVyIG1lcmdlZCBhZnRlcndhcmRzLiBTaGlwcGluZyB0aGVcbiAgICogYmFzZSBXSVRIIHRoZSBsb2cgaXMgd2hhdCBtYWtlcyBhbiBvZmZsaW5lIGZvbGQg4oCUIGBzdGF0ZUF0KHNuYXBzaG90LCBpKWBcbiAgICogZnJvbSBgZm9vdHByaW50anMvdHJhY2VgIOKAlCByZXByb2R1Y2UgdGhlIHN0YXRlIGEgc3RhZ2UgYWN0dWFsbHkgc2F3LlxuICAgKlxuICAgKiBPUFRJT05BTCBCWSBUWVBFLCBhbmQgYWJzZW50IGluIGV4YWN0bHkgdHdvIGNhc2VzLiBBIHBsYWluIGBnZXRTbmFwc2hvdCgpYFxuICAgKiBhbHdheXMgY2FycmllcyBpdCwgc28gYSBsaXZlIGZvbGQgcmVwb3J0cyBgYmFzaXM6ICdpbml0aWFsK2xvZydgLiBVbmRlclxuICAgKiBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgIGl0IGlzIE9NSVRURUQg4oCUIHRoZSBiYXNlIGlzIHRoZSByYXcgcHJlLXJ1blxuICAgKiBzZWVkIGFuZCB0aGUgcmVkYWN0aW9uIHBvbGljeSBpcyBub3QgcGx1bWJlZCBpbnRvIHRoZSBmb2xkIOKAlCBzbyBhIGZvbGQgb2ZcbiAgICogYSByZWRhY3RlZCBzbmFwc2hvdCBkZWdyYWRlcyBob25lc3RseSB0byBgYmFzaXM6ICdsb2ctb25seSdgLiBBbmQgaXQgaXNcbiAgICogZGVjbGFyZWQgb3B0aW9uYWwgc28gdGhhdCBjb2RlIHdyaXR0ZW4gYWdhaW5zdCA5LjE2Lngg4oCUIGEgdGVzdCBmaXh0dXJlIG9yXG4gICAqIGEgVUkgbW9jayB0aGF0IENPTlNUUlVDVFMgYSBgUnVudGltZVNuYXBzaG90YCBsaXRlcmFsIOKAlCBzdGlsbCBjb21waWxlcy5cbiAgICogYHN0YXRlQXRgIGhhbmRsZXMgYWJzZW5jZSBieSBzYXlpbmcgc28sIG5ldmVyIGJ5IGZvbGRpbmcgYSBsaWUuXG4gICAqL1xuICByZWFkb25seSBpbml0aWFsU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIFRoZSBydW4ncyBjb21taXQgYnVuZGxlcywgb25lIHBlciBleGVjdXRlZCBzdGFnZSwgaW4gZXhlY3V0aW9uIG9yZGVyIOKAlFxuICAgKiBhIERFVEFDSEVELCBmcm96ZW4gY29weSBvZiB0aGUgZW5naW5lJ3MgbGl2ZSBsb2cgKGEgc25hcHNob3QgaXMgYSBmb2xkXG4gICAqIHJlc3VsdDogaXQgbXVzdCBub3Qga2VlcCBjaGFuZ2luZyB1bmRlciB0aGUgY29uc3VtZXIgdGhhdCBob2xkcyBpdCkuXG4gICAqIFRoZSBidW5kbGVzIGluc2lkZSBhcmUgdGhlIGVuZ2luZSdzIG93biBvYmplY3RzLCBpbW11dGFibGUgYWZ0ZXIgcmVjb3JkLlxuICAgKi9cbiAgY29tbWl0TG9nOiBDb21taXRCdW5kbGVbXTtcbiAgLyoqIElkZW50aXR5IG9mIHRoaXMgbG9nLCBzdGFibGUgYWNyb3NzIHNhbWUtZXhlY3V0b3IgcmVzdW1lLiBBYnNlbnQgYmVmb3JlIGJpbmRpbmcgb3IgaW4gb2xkZXIgc291cmNlcy4gKi9cbiAgcmVhZG9ubHkgbG9nQWRkcmVzcz86IExvZ0FkZHJlc3M7XG4gIC8qKlxuICAgKiBFbmNvZGluZyBkaXNjcmltaW5hbnQgZm9yIGBjb21taXRMb2dgICgjMTNjLUIpOiBgJ2Z1bGwnYCDigJQgZXZlcnkgYHNldGBcbiAgICogYnVuZGxlIHN0b3JlcyB0aGUgZnVsbCBmaW5hbCB2YWx1ZSAoaGlzdG9yaWNhbCk7IGAnZGVsdGEnYCDigJQgYnVuZGxlcyBtYXlcbiAgICogY2FycnkgYGFwcGVuZGAvYGRlbGV0ZWAgdHJhY2UgdmVyYnMgd2l0aCB2ZXJiLXF1YWxpZmllZCBgb3ZlcndyaXRlYFxuICAgKiBwYXlsb2FkcyAodGFpbHMpLiBPZmZsaW5lIHRvb2xpbmcga2V5cyBvbiB0aGlzIGZpZWxkOyBhIGJ1bmRsZSBzdHJlYW1cbiAgICogd2l0aG91dCBjb250ZXh0IHJlbWFpbnMgc2VsZi1kZXNjcmliaW5nIHZpYSB0aGUgdmVyYnMgdGhlbXNlbHZlcy5cbiAgICovXG4gIGNvbW1pdFZhbHVlczogQ29tbWl0VmFsdWVzTW9kZTtcbiAgLyoqIFBlci13cml0ZSByZWFkLXByb3ZlbmFuY2UgZGlhbCAoI1AxKSB0aGUgcnVuIGV4ZWN1dGVkIHVuZGVyIOKAlCB0aGVcbiAgICogIG9mZmxpbmUtdG9vbGluZyBkaXNjcmltaW5hbnQgZm9yIGBUcmFjZUVudHJ5LnJlYWRLZXlzYCBhdmFpbGFiaWxpdHkuICovXG4gIHdyaXRlUHJvdmVuYW5jZTogV3JpdGVQcm92ZW5hbmNlTW9kZTtcbiAgLyoqXG4gICAqIFBlci1zdWJmbG93IGV4ZWN1dGlvbiByZXN1bHRzLCBEVUFMLUtFWUVEIChkZXNpZ246IGRvY3MvZGVzaWduL3N1YmZsb3ctY29tbWl0LXZpc2liaWxpdHkubWQpOlxuICAgKiAgIC0gYnkgc3ViZmxvdyBQQVRIIChgc3ViZmxvd0lkYCwgZS5nLiBgJ3NmLXBheSdgKSDihpIgdGhlIExBU1QgaXRlcmF0aW9uIChiYWNrLWNvbXBhdCk7IHRoaXNcbiAgICogICAgIGlzIHdoYXQgYGdldFN1YnRyZWVTbmFwc2hvdChwYXRoKWAgYW5kIGBsaXN0U3ViZmxvd1BhdGhzKClgIHJlc29sdmUuXG4gICAqICAgLSBieSBwZXItZXhlY3V0aW9uIG1vdW50IGBydW50aW1lU3RhZ2VJZGAgKGUuZy4gYCdzZi1wYXkjNSdgKSDihpIgVEhBVCBpdGVyYXRpb24ncyByZXN1bHQsIHNvXG4gICAqICAgICBhIExPT1BJTkcgc3ViZmxvdyByZXRhaW5zIEVWRVJZIGl0ZXJhdGlvbiAobm90IGp1c3QgdGhlIGxhc3QpLiBMb29rIHVwIGEgc3BlY2lmaWNcbiAgICogICAgIGl0ZXJhdGlvbiBhcyBgc3ViZmxvd1Jlc3VsdHNbbm9kZS5ydW50aW1lU3RhZ2VJZF0gPz8gc3ViZmxvd1Jlc3VsdHNbbm9kZS5zdWJmbG93SWRdYC5cbiAgICogQm90aCBrZXlzIHBvaW50IGF0IHRoZSBzYW1lIG9iamVjdCBmb3IgYSBzaW5nbGUgbW91bnQ7IGl0ZXJhdGUgd2l0aCBjYXJlIChjb3VudCB2aWEgdGhlXG4gICAqIHBhdGgga2V5cyDigJQgdGhvc2Ugd2l0aG91dCBgJyMnYCkuIFRoZSBwYXVzZSBjaGVja3BvaW50IGNhcnJpZXMgb25seSB0aGUgcGF0aCBrZXlzLCBsZWFuLlxuICAgKlxuICAgKiBVbmRlciBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgIGVhY2ggZW50cnkncyBgdHJlZUNvbnRleHQuZ2xvYmFsQ29udGV4dGAgaXMgdGhhdFxuICAgKiBzdWJmbG93J3MgT1dOIHJlZGFjdGVkIG1pcnJvciAoOS4yMC4wKSDigJQgdGhlIGZvbGQgb2YgaXRzIHNjcnViYmVkIGBoaXN0b3J5YCDigJQgc2VydmVkIGFzXG4gICAqIG9uZSBzdWJzdGl0dXRlZCBvYmplY3QgcGVyIG1vdW50IChib3RoIGtleXMgc3RpbGwgYWdyZWUpIOKAlCB0aGUgd3JhcHBlciBpcyBmcmVzaCBwZXJcbiAgICogYGdldFNuYXBzaG90YCBjYWxsLCB0aGUgYGdsb2JhbENvbnRleHRgIGluc2lkZSBpdCBpcyB0aGUgc3RhYmxlIG1pcnJvcjsgcGxhaW4sIGl0IGlzIHRoZSBzdWJmbG93J3NcbiAgICogbGl2ZSBoZWFwLiBXaXRob3V0IGEgcG9saWN5IHRoZXJlIGlzIG5vIG1pcnJvciBhbmQgdGhlIHR3byB2aWV3cyBhcmUgdGhlIHNhbWUgb2JqZWN0cy5cbiAgICovXG4gIHN1YmZsb3dSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBTbmFwc2hvdCBkYXRhIGZyb20gcmVjb3JkZXJzIHRoYXQgaW1wbGVtZW50IHRvU25hcHNob3QoKS4gKi9cbiAgcmVjb3JkZXJzPzogUmVjb3JkZXJTbmFwc2hvdFtdO1xuICAvKipcbiAgICogRGVmZXJyZWQtb2JzZXJ2ZXIgYWNjb3VudGluZyAoUkZDLTAwMSBCbG9jayA5KSDigJQgcXVldWUgZGVwdGgsIGRyb3BzLFxuICAgKiBmbHVzaC9idWRnZXQgY291bnRlcnMsIHBlci1saXN0ZW5lciB0aW1lIGF0dHJpYnV0aW9uLCBhbmQgdGhlXG4gICAqIHRlcm1pbmFsLWZsdXNoIHN0cmFuZGluZyBjb3VudC4gQUJTRU5UIHVubGVzcyBhIHJlY29yZGVyIHdhcyBhdHRhY2hlZFxuICAgKiB3aXRoIGB7IGRlbGl2ZXJ5OiAnZGVmZXJyZWQnIH1gIG9uIHRoaXMgZXhlY3V0b3IgKHplcm8tY29zdCBkaXNjaXBsaW5lKS5cbiAgICovXG4gIG9ic2VydmVyU3RhdHM/OiBPYnNlcnZlclN0YXRzO1xufTtcblxuZXhwb3J0IGNsYXNzIEV4ZWN1dGlvblJ1bnRpbWUge1xuICBwdWJsaWMgZ2xvYmFsU3RvcmU6IFNoYXJlZE1lbW9yeTtcbiAgLyoqXG4gICAqIFBhcmFsbGVsIHJlZGFjdGVkIG1pcnJvciBvZiBgZ2xvYmFsU3RvcmVgLiBQb3B1bGF0ZWQgZHVyaW5nIHRyYXZlcnNhbCB2aWFcbiAgICogYFN0YWdlQ29udGV4dC5jb21taXQoKWAgdXNpbmcgdGhlIGFscmVhZHktY29tcHV0ZWQgcmVkYWN0ZWQgcGF0Y2hlcy5cbiAgICogT25seSBleGlzdHMgd2hlbiB0aGUgcnVuJ3MgcG9saWN5IGtlZXBzIGEgbWlycm9yIChgUnVuUG9saWN5Lm1pcnJvcmAg4oCUXG4gICAqIGBGbG93Q2hhcnRFeGVjdXRvcmAgc2V0cyBpdCB3aGVuIGEgYFJlZGFjdGlvblBvbGljeWAgaXMgY29uZmlndXJlZCkuXG4gICAqIE90aGVyd2lzZSB1bmRlZmluZWQgYW5kIHplcm8gY29zdC5cbiAgICpcbiAgICogUmVhZCB2aWEgYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYC5cbiAgICovXG4gIHB1YmxpYyByZWRhY3RlZFN0b3JlPzogU2hhcmVkTWVtb3J5O1xuICBwdWJsaWMgcm9vdFN0YWdlQ29udGV4dDogU3RhZ2VDb250ZXh0O1xuICBwdWJsaWMgZXhlY3V0aW9uSGlzdG9yeTogRXZlbnRMb2c7XG4gIC8qKiBPcmlnaW5hbCByb290IGZvciBnZXRTbmFwc2hvdCgpIOKAlCBzZXQgYmVmb3JlIHJlc3VtZSBjaGFuZ2VzIHJvb3RTdGFnZUNvbnRleHQuICovXG4gIHByaXZhdGUgX3NuYXBzaG90Um9vdD86IFN0YWdlQ29udGV4dDtcbiAgcHJpdmF0ZSBfaW5pdGlhbFN0YXRlOiB1bmtub3duO1xuICBwcml2YXRlIF9kZWZhdWx0VmFsdWVzOiB1bmtub3duO1xuICAvKiogVGhlIHJ1bidzIHBvbGljeSAoYG1lbW9yeS9ydW5Qb2xpY3kudHNgKSDigJQgaW5zdGFsbGVkIG9uIHRoZSByb290IGZyYW1lO1xuICAgKiAgaXRzIGBjb21taXRWYWx1ZXNgIGFuZCBgd3JpdGVQcm92ZW5hbmNlYCBhcmUgdGhlIHNuYXBzaG90IGRpc2NyaW1pbmFudHMuICovXG4gIHByaXZhdGUgcG9saWN5OiBSdW5Qb2xpY3k7XG5cbiAgLyoqIE1lbW9pemVkIGZyb3plbiBmb2xkIGJhc2Ug4oCUIHNlZSB7QGxpbmsgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZX0uICovXG4gIHByaXZhdGUgX2ZvbGRCYXNlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwb2xpY3kgVGhlIHJ1bidzIHBvbGljeSAoYHJ1blBvbGljeS50c2AsIEY1KSDigJQgdGhlIGZvdXIgZGlhbHMsIHRoZVxuICAgKiAgIHJlZGFjdGlvbiBydWxlLCB0aGUgbWlycm9yIGZsYWcuIEluc3RhbGxlZCBvbiB0aGUgcm9vdCBmcmFtZSBoZXJlLCBzb1xuICAgKiAgIHRoZSBGSVJTVCBjb21taXQgKGEgc3ViZmxvdydzIHNlZWQsIGBoaXN0b3J5WzBdYCkgYWxyZWFkeSBydW5zIHVuZGVyIGl0O1xuICAgKiAgIGV2ZXJ5IGZyYW1lIGFmdGVyIGluaGVyaXRzIHRoZSBzYW1lIHJlZmVyZW5jZS4gRGVmYXVsdDogZXZlcnkgZGlhbCBhdFxuICAgKiAgIGl0cyBkZWZhdWx0LCBubyBydWxlLCBubyBtaXJyb3IuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICByb290TmFtZTogc3RyaW5nLFxuICAgIHJvb3RJZDogc3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZXM/OiB1bmtub3duLFxuICAgIGluaXRpYWxTdGF0ZT86IHVua25vd24sXG4gICAgcG9saWN5OiBSdW5Qb2xpY3kgPSBERUZBVUxUX1JVTl9QT0xJQ1ksXG4gICkge1xuICAgIHRoaXMuX2luaXRpYWxTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgICB0aGlzLl9kZWZhdWx0VmFsdWVzID0gZGVmYXVsdFZhbHVlcztcbiAgICB0aGlzLmdsb2JhbFN0b3JlID0gbmV3IFNoYXJlZE1lbW9yeShkZWZhdWx0VmFsdWVzLCBpbml0aWFsU3RhdGUpO1xuICAgIC8vIFRoZSBldmVudCBsb2cncyBmb2xkIGJhc2UgbXVzdCBiZSB0aGUgU0FNRSBzdGF0ZSB0aGUgc3RvcmUgc3RhcnRzIGZyb21cbiAgICAvLyDigJQgYGluaXRpYWxDb250ZXh0YCBtZXJnZWQgd2l0aCBgZGVmYXVsdFZhbHVlc0ZvckNvbnRleHRgLCB3aGljaCBpcyB3aGF0XG4gICAgLy8gYFNoYXJlZE1lbW9yeWAgY29tcHV0ZWQgYWJvdmUuIFNlZWRpbmcgdGhlIGxvZyBmcm9tIGBpbml0aWFsU3RhdGVgIGFsb25lXG4gICAgLy8gbGVmdCBgZGVmYXVsdFZhbHVlc2Agb3V0IG9mIGV2ZXJ5IHJlcGxheSwgc28gYSBmb2xkIGNvdWxkIG5vdCByZXByb2R1Y2VcbiAgICAvLyB0aGUgc3RhdGUgYSBzdGFnZSBhY3R1YWxseSBzYXcuIGBnZXRTdGF0ZSgpYCBpcyB0aGUgbGl2ZSBjb250ZXh0OyB0aGVcbiAgICAvLyBFdmVudExvZyBjb25zdHJ1Y3RvciBjbG9uZXMgaXQsIHNvIHRoZSBiYXNlIHN0YXlzIGRldGFjaGVkLlxuICAgIHRoaXMuZXhlY3V0aW9uSGlzdG9yeSA9IG5ldyBFdmVudExvZyh0aGlzLmdsb2JhbFN0b3JlLmdldFN0YXRlKCkpO1xuICAgIHRoaXMucG9saWN5ID0gcG9saWN5O1xuICAgIHRoaXMucm9vdFN0YWdlQ29udGV4dCA9IHRoaXMubmV3Um9vdChyb290TmFtZSwgcm9vdElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZyZXNoIHJvb3QgZnJhbWUgZm9yIHRoaXMgcnVudGltZSDigJQgYGdsb2JhbFN0b3JlYCwgYGV4ZWN1dGlvbkhpc3RvcnlgLFxuICAgKiB0aGUgcnVuJ3MgcG9saWN5IGFuZCAod2hlbiBrZXB0KSB0aGUgbWlycm9yLiBBbHNvIGhvdyBgU3ViZmxvd0V4ZWN1dG9yYFxuICAgKiByZXBsYWNlcyBhIHN1YmZsb3cncyBzZWVkIGZyYW1lIHdpdGggdGhlIGZyYW1lIGl0cyBmaXJzdCBzdGFnZSBydW5zIG9uLlxuICAgKi9cbiAgbmV3Um9vdChuYW1lOiBzdHJpbmcsIGlkOiBzdHJpbmcpOiBTdGFnZUNvbnRleHQge1xuICAgIGNvbnN0IHJvb3QgPSBuZXcgU3RhZ2VDb250ZXh0KCcnLCBuYW1lLCBpZCwgdGhpcy5nbG9iYWxTdG9yZSwgJycsIHRoaXMuZXhlY3V0aW9uSGlzdG9yeSk7XG4gICAgdGhpcy5pbnN0YWxsUG9saWN5KHJvb3QpO1xuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbGwgdGhlIHJ1bidzIHBvbGljeSBvbiB0aGUgQ1VSUkVOVCByb290IGZyYW1lIOKAlCBhIHNhbWUtZXhlY3V0b3JcbiAgICogcmVzdW1lLCB3aG9zZSBjb250aW51YXRpb24gcm9vdCAoYGxlYWYuY3JlYXRlTmV4dGApIGlzIGFkdmFuY2VkIGJlZm9yZVxuICAgKiB0aGUgZXhlY3V0b3IgYnVpbGRzIHRoaXMgbGVnJ3MgcG9saWN5IChhIGZyZXNoIHJ1bGUgcGVyIGxlZykuIEV2ZXJ5XG4gICAqIGRlc2NlbmRhbnQgdGFrZXMgdGhlIHJlZmVyZW5jZSBmcm9tIHRoZXJlLlxuICAgKi9cbiAgdXNlUG9saWN5KHBvbGljeTogUnVuUG9saWN5KTogdm9pZCB7XG4gICAgdGhpcy5wb2xpY3kgPSBwb2xpY3k7XG4gICAgdGhpcy5pbnN0YWxsUG9saWN5KHRoaXMucm9vdFN0YWdlQ29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHBvbGljeSBvbiBgcm9vdGAsIGFuZCB0aGUgbWlycm9yIHN0b3JlIHdoZW4gdGhlIHBvbGljeSBrZWVwcyBvbmUuXG4gICAqIFRoZSBtaXJyb3IgaXMgYSBTRVJWRUQgc3VyZmFjZSwgc28gaXRzIHNlZWQgbXVzdCBhbHJlYWR5IGJlIHRoZSBwb2xpY3knc1xuICAgKiB2aWV3IG9mIHRoZSBzdGFydGluZyBzdGF0ZTogYSBwb2xpY3kga2V5IHRoYXQgYXJyaXZlcyBieSBgaW5pdGlhbENvbnRleHRgXG4gICAqIC8gYGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0YCAob3IsIG9uIGEgY3Jvc3MtZXhlY3V0b3IgcmVzdW1lLCBieSB0aGVcbiAgICogY2hlY2twb2ludCdzIGBzaGFyZWRTdGF0ZWApIGFuZCBpcyBuZXZlciByZS13cml0dGVuIHdvdWxkIG90aGVyd2lzZSBzaXRcbiAgICogaW4gYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCBpbiBwbGFpbnRleHQg4oCUIHNvIHRoZSBzZWVkIGlzIHNjcnViYmVkXG4gICAqIHdpdGggdGhlIExPRydzIHBsYWNlaG9sZGVyLCB0aGUgc2FtZSBzdHJpbmcgdGhlIHJlZGFjdGVkIHBhdGNoZXMgY2FycnkuXG4gICAqIENyZWF0ZWQgb25jZSBwZXIgcnVudGltZSAoYSBzdWJmbG93J3MgcnVudGltZSBrZWVwcyBpdHMgb3duOyBpdHMgc2VlZCBpc1xuICAgKiBlbXB0eSDigJQgdGhlIGlucHV0IGFycml2ZXMgYXMgYSBjb21taXQpLlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsUG9saWN5KHJvb3Q6IFN0YWdlQ29udGV4dCk6IHZvaWQge1xuICAgIHJvb3QudXNlUG9saWN5KHRoaXMucG9saWN5KTtcbiAgICBpZiAoIXRoaXMucG9saWN5Lm1pcnJvcikgcmV0dXJuO1xuICAgIGlmICghdGhpcy5yZWRhY3RlZFN0b3JlKSB7XG4gICAgICBjb25zdCBydWxlID0gdGhpcy5wb2xpY3kucmVkYWN0aW9uO1xuICAgICAgdGhpcy5yZWRhY3RlZFN0b3JlID0gbmV3IFNoYXJlZE1lbW9yeShcbiAgICAgICAgcnVsZSA/IHJ1bGUucmV0YWluU3RhdGUodGhpcy5fZGVmYXVsdFZhbHVlcywgTE9HX1BMQUNFSE9MREVSKSA6IHRoaXMuX2RlZmF1bHRWYWx1ZXMsXG4gICAgICAgIHJ1bGUgPyBydWxlLnJldGFpblN0YXRlKHRoaXMuX2luaXRpYWxTdGF0ZSwgTE9HX1BMQUNFSE9MREVSKSA6IHRoaXMuX2luaXRpYWxTdGF0ZSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJvb3QudXNlUmVkYWN0ZWRNaXJyb3IodGhpcy5yZWRhY3RlZFN0b3JlKTtcbiAgfVxuXG4gIC8qKiBQcmVzZXJ2ZSB0aGUgY3VycmVudCByb290U3RhZ2VDb250ZXh0IGZvciBzbmFwc2hvdHMgYmVmb3JlIGNoYW5naW5nIGl0IGZvciByZXN1bWUuICovXG4gIHByZXNlcnZlU25hcHNob3RSb290KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fc25hcHNob3RSb290KSB7XG4gICAgICB0aGlzLl9zbmFwc2hvdFJvb3QgPSB0aGlzLnJvb3RTdGFnZUNvbnRleHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmcm96ZW4sIGRldGFjaGVkIGZvbGQgYmFzZSBzZXJ2ZWQgYXMge0BsaW5rIFJ1bnRpbWVTbmFwc2hvdC5pbml0aWFsU3RhdGV9LlxuICAgKiBDb21wdXRlZCBvbmNlICh0aGUgYmFzZSBuZXZlciBjaGFuZ2VzIGFmdGVyIGNvbnN0cnVjdGlvbikgYW5kIHNoYXJlZCDigJRcbiAgICogc2FmZSBiZWNhdXNlIGl0IGlzIGRlZXBseSBmcm96ZW4sIHNvIG5vIGhvbGRlciBjYW4gbXV0YXRlIGl0IG9yIHJlYWNoIHRoZVxuICAgKiBlbmdpbmUgdGhyb3VnaCBpdC5cbiAgICovXG4gIHByaXZhdGUgZ2V0Rm9sZEJhc2UoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGlmICghdGhpcy5fZm9sZEJhc2UpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkuZ2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICB0aGlzLl9mb2xkQmFzZSA9IGRlZXBGcmVlemUoYmFzZSAmJiB0eXBlb2YgYmFzZSA9PT0gJ29iamVjdCcgPyBiYXNlIDoge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZm9sZEJhc2U7XG4gIH1cblxuICBnZXRQaXBlbGluZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nbG9iYWxTdG9yZS5nZXRTdGF0ZSgpO1xuICAgIHJldHVybiBzdGF0ZS5waXBlbGluZXMgPyBPYmplY3Qua2V5cyhzdGF0ZS5waXBlbGluZXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIDogW107XG4gIH1cblxuICBzZXRSb290T2JqZWN0KHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLnJvb3RTdGFnZUNvbnRleHQuc2V0T2JqZWN0KHBhdGgsIGtleSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcnVudGltZSBzbmFwc2hvdC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMucmVkYWN0ICBXaGVuIGB0cnVlYCwgcmV0dXJucyBgc2hhcmVkU3RhdGVgIGZyb20gdGhlXG4gICAqICAgcGFyYWxsZWwgcmVkYWN0ZWQgbWlycm9yIChpZiBvbmUgd2FzIGVuYWJsZWQpLiBUaGlzIGlzIHRoZSBzYWZlIHZpZXdcbiAgICogICBmb3Igc2hhcmluZyB0cmFjZXMgZXh0ZXJuYWxseSDigJQgcGFzdGUgaW50byBhIHZpZXdlciwgc2hpcCB0byBzdXBwb3J0LFxuICAgKiAgIGV0Yy4gV2hlbiB0aGUgbWlycm9yIHdhcyBuZXZlciBlbmFibGVkLCBmYWxscyBiYWNrIHRvIHJhdyBgZ2xvYmFsU3RvcmVgXG4gICAqICAgYW5kIGEgZGV2LW1vZGUgd2FybmluZyBpcyBlbWl0dGVkIChzaWxlbnQgaW4gcHJvZHVjdGlvbikuXG4gICAqXG4gICAqICAgRGVmYXVsdCBgZmFsc2VgIHByZXNlcnZlcyB0aGUgcnVudGltZSB2aWV3IOKAlCBuZWNlc3NhcnkgZm9yIHBhdXNlIC9cbiAgICogICByZXN1bWUgKHJlc3VtcHRpb24gbXVzdCByZXBsYXkgYWdhaW5zdCB0aGUgcmVhbCB2YWx1ZXMsIG5vdFxuICAgKiAgICdbUkVEQUNURURdJykuXG4gICAqXG4gICAqIE90aGVyIGZpZWxkcyAoYGV4ZWN1dGlvblRyZWVgLCBgY29tbWl0TG9nYCkgYXJlIHRoZSBzYW1lIGVpdGhlciB3YXkg4oCUXG4gICAqIHRoZSBjb21taXQgbG9nIGlzIGFscmVhZHkgcmVkYWN0ZWQgYXQgd3JpdGUtdGltZSwgYW5kIHRoZSBleGVjdXRpb25cbiAgICogdHJlZSBvbmx5IGNhcnJpZXMgc3RydWN0dXJhbCBtZXRhZGF0YS5cbiAgICpcbiAgICogYGluaXRpYWxTdGF0ZWAgKHRoZSBmb2xkIGJhc2UpIGlzIE9NSVRURUQgdW5kZXIgYHJlZGFjdDogdHJ1ZWAuIEl0IGlzIHRoZVxuICAgKiBydW4ncyByYXcgcHJlLXJ1biBzZWVkIOKAlCBgaW5pdGlhbENvbnRleHRgIG1lcmdlZCB3aXRoXG4gICAqIGBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dGAg4oCUIGFuZCBpdCBuZXZlciBwYXNzZWQgdGhyb3VnaCBhIHJlZGFjdGlvblxuICAgKiBwb2xpY3k6IHRoZSBwb2xpY3kgc2NydWJzIFdSSVRFUyBhdCB0aGUgc2NvcGUgZmFjYWRlLCBhbmQgdGhlIGJhc2Ugd2FzXG4gICAqIG5ldmVyIHdyaXR0ZW4gYnkgYSBzdGFnZS4gU2VydmluZyBpdCBvbiB0aGUgcmVkYWN0ZWQgc3VyZmFjZSB3b3VsZCBoYW5kXG4gICAqIGJhY2sgdGhlIG9yaWdpbmFsIHZhbHVlIG9mIGEgc2VlZGVkIHNlY3JldCB0aGF0IGEgbGF0ZXIgY29tbWl0IGhhZFxuICAgKiBzY3J1YmJlZC4gQSBjb25zdW1lciBmb2xkaW5nIHdpdGhvdXQgaXQgZ2V0cyBgYmFzaXM6ICdsb2ctb25seSdgIGZyb21cbiAgICogYHN0YXRlQXRgLCB3aGljaCBpcyB0aGUgaG9uZXN0IHNpZ25hbCB0aGF0IHRoZSBiYXNlIGRpZCBub3QgdHJhdmVsIHdpdGhcbiAgICogdGhpcyBsb2cg4oCUIGEgcGFydGlhbCBhbnN3ZXIgdGhhdCBzYXlzIGl0IGlzIHBhcnRpYWwsIG5ldmVyIGEgc2lsZW50IG9uZS5cbiAgICpcbiAgICogUmV0dXJucyBgT21pdDxSdW50aW1lU25hcHNob3QsICdydW5JZCc+YDogdGhlIHJ1bnRpbWUgaXMgdGhlIG1lbW9yeVxuICAgKiBjb250YWluZXIgYW5kIGRvZXNuJ3Qga25vdyB3aGljaCBydW4gaXQgc2VydmVzIOKAlCBgcnVuSWRgIGlzIHBlci1ydW5cbiAgICogZXhlY3V0b3Igc3RhdGUsIHN0YW1wZWQgYnkgYEZsb3djaGFydFRyYXZlcnNlci5nZXRTbmFwc2hvdCgpYCAod2hpY2hcbiAgICogb3ducyB0aGUgcnVuJ3MgaWQgYW5kIGFscmVhZHkgc3RhbXBzIGl0IG9uIGV2ZXJ5IGV2ZW50KS4gU3ViZmxvd3MnXG4gICAqIG5lc3RlZCBydW50aW1lcyBkZWxpYmVyYXRlbHkgaGF2ZSBOTyBydW5JZCBvZiB0aGVpciBvd24gKGEgc3ViZmxvdyBpc1xuICAgKiBwYXJ0IG9mIHRoZSBwYXJlbnQncyBsb2dpY2FsIHJ1bikuXG4gICAqL1xuICBnZXRTbmFwc2hvdChvcHRpb25zPzogeyByZWRhY3Q/OiBib29sZWFuIH0pOiBPbWl0PFJ1bnRpbWVTbmFwc2hvdCwgJ3J1bklkJz4ge1xuICAgIGNvbnN0IHNuYXBzaG90Um9vdCA9IHRoaXMuX3NuYXBzaG90Um9vdCA/PyB0aGlzLnJvb3RTdGFnZUNvbnRleHQ7XG4gICAgY29uc3QgdXNlUmVkYWN0ZWQgPSBvcHRpb25zPy5yZWRhY3QgPT09IHRydWUgJiYgdGhpcy5yZWRhY3RlZFN0b3JlICE9PSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNoYXJlZFN0YXRlOiB1c2VSZWRhY3RlZCA/IHRoaXMucmVkYWN0ZWRTdG9yZSEuZ2V0U3RhdGUoKSA6IHRoaXMuZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKSxcbiAgICAgIGV4ZWN1dGlvblRyZWU6IHNuYXBzaG90Um9vdC5nZXRTbmFwc2hvdCgpLFxuICAgICAgLy8gUkVEQUNUSU9OOiB0aGUgZm9sZCBiYXNlIGlzIHRoZSByYXcgcHJlLXJ1biBzZWVkIGFuZCBubyBwb2xpY3kgZXZlclxuICAgICAgLy8gdG91Y2hlZCBpdCAocG9saWNpZXMgc2NydWIgd3JpdGVzOyBub3RoaW5nIHdyb3RlIHRoZSBiYXNlKS4gT21pdCBpdFxuICAgICAgLy8gcmF0aGVyIHRoYW4gbGVhayBpdCDigJQgYHN0YXRlQXRgIGRlZ3JhZGVzIHRvIGBiYXNpczogJ2xvZy1vbmx5J2AuXG4gICAgICAuLi4odXNlUmVkYWN0ZWQgPyB7fSA6IHsgaW5pdGlhbFN0YXRlOiB0aGlzLmdldEZvbGRCYXNlKCkgfSksXG4gICAgICAvLyBERVRBQ0hFRDogdGhlIGVuZ2luZSBrZWVwcyBpdHMgbGl2ZSBFdmVudExvZzsgdGhlIHNuYXBzaG90IGdldHMgYVxuICAgICAgLy8gZnJvemVuIGNvcHkgb2YgdGhlIGFycmF5LiBTZXJ2aW5nIGBsaXN0KClgIGRpcmVjdGx5IGFsaWFzZWQgdGhlXG4gICAgICAvLyBpbnRlcm5hbCBhcnJheSwgc28gYSBzbmFwc2hvdCB0YWtlbiBtaWQtcnVuIGtlcHQgZ3Jvd2luZyB1bmRlciBpdHNcbiAgICAgIC8vIGhvbGRlciBhbmQgYSBjb25zdW1lciBjb3VsZCBzcGxpY2UgdGhlIGVuZ2luZSdzIG93biBoaXN0b3J5LiBUaGVcbiAgICAgIC8vIGJ1bmRsZXMgaW4gaXQgYXJlIHRoZSBsb2cncyBvd24sIGZyb3plbiBhdCBgRXZlbnRMb2cgwrcgcmVjb3JkYCAoRjMpLlxuICAgICAgLy8gVGhlIGNvcHkgc3RheXM6IGl0IGlzIHdoYXQga2VlcHMgYSBob2xkZXIncyBhcnJheSBmcm9tIGdyb3dpbmcuXG4gICAgICBjb21taXRMb2c6IE9iamVjdC5mcmVlemUodGhpcy5leGVjdXRpb25IaXN0b3J5Lmxpc3QoKS5zbGljZSgpKSBhcyBDb21taXRCdW5kbGVbXSxcbiAgICAgIC4uLih0aGlzLmV4ZWN1dGlvbkhpc3RvcnkuYWRkcmVzcyA9PT0gdW5kZWZpbmVkID8ge30gOiB7IGxvZ0FkZHJlc3M6IHRoaXMuZXhlY3V0aW9uSGlzdG9yeS5hZGRyZXNzIH0pLFxuICAgICAgY29tbWl0VmFsdWVzOiB0aGlzLnBvbGljeS5jb21taXRWYWx1ZXMsXG4gICAgICB3cml0ZVByb3ZlbmFuY2U6IHRoaXMucG9saWN5LndyaXRlUHJvdmVuYW5jZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhlY3V0aW9uUnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcnVubmVyL0V4ZWN1dGlvblJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFtSHpELE1BQU0sT0FBTyxnQkFBZ0I7SUFDcEIsV0FBVyxDQUFlO0lBQ2pDOzs7Ozs7OztPQVFHO0lBQ0ksYUFBYSxDQUFnQjtJQUM3QixnQkFBZ0IsQ0FBZTtJQUMvQixnQkFBZ0IsQ0FBVztJQUNsQyxvRkFBb0Y7SUFDNUUsYUFBYSxDQUFnQjtJQUM3QixhQUFhLENBQVU7SUFDdkIsY0FBYyxDQUFVO0lBQ2hDO21GQUMrRTtJQUN2RSxNQUFNLENBQVk7SUFFMUIsNEVBQTRFO0lBQ3BFLFNBQVMsQ0FBMkI7SUFFNUM7Ozs7OztPQU1HO0lBQ0gsWUFDRSxRQUFnQixFQUNoQixNQUFjLEVBQ2QsYUFBdUIsRUFDdkIsWUFBc0IsRUFDdEIsU0FBb0Isa0JBQWtCO1FBRXRDLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLHlFQUF5RTtRQUN6RSwwRUFBMEU7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QyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckcsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtZQUN0QyxlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlO1NBQzdDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV4ZWN1dGlvblJ1bnRpbWUg4oCUIFRoZSBydW50aW1lIGVudmlyb25tZW50IGZvciBvbmUgZmxvd2NoYXJ0IGV4ZWN1dGlvbi5cbiAqXG4gKiBXaXJlcyB1cCB0aGUgdGhyZWUgbWVtb3J5IHByaW1pdGl2ZXMgaW50byBhIHNpbmdsZSBjb250YWluZXI6XG4gKiAgIC0gU2hhcmVkTWVtb3J5ICh0aGUgaGVhcCDigJQgc2hhcmVkIHN0YXRlIGFjcm9zcyBhbGwgc3RhZ2VzKVxuICogICAtIFN0YWdlQ29udGV4dCAgKHRoZSBjYWxsIHN0YWNrIOKAlCBwZXItc3RhZ2UgZXhlY3V0aW9uIHRyZWUpXG4gKiAgIC0gRXZlbnRMb2cgICAgICAodGhlIHRyYW5zYWN0aW9uIGxvZyDigJQgY29tbWl0IGhpc3RvcnkgZm9yIHJlcGxheSlcbiAqXG4gKiBUaGUgZW5naW5lIChGbG93Y2hhcnRUcmF2ZXJzZXIpIHJlY2VpdmVzIHRoaXMgYXMgaXRzIHJ1bnRpbWUgcGFyYW1ldGVyLlxuICogQWZ0ZXIgZXhlY3V0aW9uLCBjb25zdW1lcnMgcXVlcnkgaXQgZm9yIHRoZSBmdWxsIGV4ZWN1dGlvbiBzdGF0ZS5cbiAqL1xuXG5pbXBvcnQgeyBmcmVlemVSZWNvcmQgfSBmcm9tICcuLi9jYXB0dXJlL2ZyZWV6ZS5qcyc7XG5pbXBvcnQgeyBFdmVudExvZyB9IGZyb20gJy4uL21lbW9yeS9FdmVudExvZy5qcyc7XG5pbXBvcnQgdHlwZSB7IExvZ0FkZHJlc3MgfSBmcm9tICcuLi9tZW1vcnkvZXZlbnRQb3NpdGlvbi5qcyc7XG5pbXBvcnQgeyBMT0dfUExBQ0VIT0xERVIgfSBmcm9tICcuLi9tZW1vcnkvcGxhY2Vob2xkZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgUnVuUG9saWN5IH0gZnJvbSAnLi4vbWVtb3J5L3J1blBvbGljeS5qcyc7XG5pbXBvcnQgeyBERUZBVUxUX1JVTl9QT0xJQ1kgfSBmcm9tICcuLi9tZW1vcnkvcnVuUG9saWN5LmpzJztcbmltcG9ydCB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4uL21lbW9yeS9TaGFyZWRNZW1vcnkuanMnO1xuaW1wb3J0IHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgQ29tbWl0VmFsdWVzTW9kZSwgU3RhZ2VTbmFwc2hvdCwgV3JpdGVQcm92ZW5hbmNlTW9kZSB9IGZyb20gJy4uL21lbW9yeS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2VydmVyU3RhdHMgfSBmcm9tICcuL0RlZmVycmVkT2JzZXJ2ZXJUaWVyLmpzJztcblxuLyoqIFNuYXBzaG90IG9mIGEgc2luZ2xlIHJlY29yZGVyJ3MgY29sbGVjdGVkIGRhdGEuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGVyU25hcHNob3Qge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTY29wZVJlY29yZGVyIHR5cGUgYW5kIHBhdHRlcm4gZGVzY3JpcHRpb24gKGUuZy4sIFwiVHJhbnNsYXRvciAoS2V5ZWRTdG9yZSkg4oCUIHBlci1zdGVwIHRva2VuIHVzYWdlXCIpLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFByZWZlcnJlZCByZWFkLXRpbWUgb3BlcmF0aW9uIOKAlCBoaW50cyB0aGUgVUkgYWJvdXQgd2hpY2ggdmlldyB0byBzaG93IHByb21pbmVudGx5LiAqL1xuICBwcmVmZXJyZWRPcGVyYXRpb24/OiAndHJhbnNsYXRlJyB8ICdhY2N1bXVsYXRlJyB8ICdhZ2dyZWdhdGUnO1xuICBkYXRhOiB1bmtub3duO1xuICAvKipcbiAgICogU21hbGwgbWFjaGluZS1yZWFkYWJsZSBmYWN0cyBhYm91dCB0aGUgQlVORExFIOKAlCBob3cgaXQgd2FzIHByb2R1Y2VkLFxuICAgKiB3aGljaCBwcm9qZWN0aW9uIG9mIHRoZSByZWNvcmRlcidzIGRhdGEgaXQgaXMsIHdoYXQgaXQgZGVsaWJlcmF0ZWx5XG4gICAqIGxlZnQgb3V0LiBXaGF0ZXZlciB0aGUgcmVjb3JkZXIncyBgdG9TbmFwc2hvdCgpYCBwdXQgaGVyZSwgY29waWVkXG4gICAqIHRocm91Z2ggdW5jaGFuZ2VkLlxuICAgKlxuICAgKiBUaGUgc3BsaXQgd2l0aCBgZGVzY3JpcHRpb25gOiBgZGVzY3JpcHRpb25gIGlzIHRoZSBzZW50ZW5jZSBhIGh1bWFuXG4gICAqIHJlYWRzOyBgbWV0YWAgaXMgd2hhdCBhbiBvZmZsaW5lIGNvbnN1bWVyIEJSQU5DSEVTIG9uLiBBIHJlY29yZGVyIHdpdGhcbiAgICogYSBcImZ1bGxcIiBhbmQgYSBcImxlYW5cIiBidW5kbGUgc2hhcGUgdGhhdCBzYXlzIHNvIG9ubHkgaW4gaXRzXG4gICAqIGRlc2NyaXB0aW9uIGZvcmNlcyBldmVyeSByZWFkZXIgdG8gc3RyaW5nLW1hdGNoIHByb3NlIOKAlCBhbmQgYSByZWFkZXJcbiAgICogdGhhdCBkb2Vzbid0IHJlbmRlcnMgYW4gZW1wdHkgcGFuZWwgaW5zdGVhZCBvZiBzYXlpbmcgXCJ0aGlzIHJlY29yZGluZ1xuICAgKiBjYXJyaWVzIHN0cnVjdHVyZSBvbmx5XCIuXG4gICAqXG4gICAqIE5vdCBpbnRlcnByZXRlZCBieSB0aGUgZW5naW5lLCBzbyBrZXlzIGFyZSB0aGUgcmVjb3JkZXIncyB0byBjaG9vc2U7XG4gICAqIGtlZXAgdGhlIHZhbHVlcyBKU09OLXNhZmUsIHNpbmNlIHRoaXMgcmlkZXMgdGhlIHNuYXBzaG90IG91dCB0byBkaXNrLlxuICAgKi9cbiAgbWV0YT86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcbn1cblxuZXhwb3J0IHR5cGUgUnVudGltZVNuYXBzaG90ID0ge1xuICAvKipcbiAgICogVGhlIHJ1biB0aGlzIHNuYXBzaG90IGJlbG9uZ3MgdG8g4oCUIHRoZSBzYW1lIGBydW5JZGAgc3RhbXBlZCBvbiBldmVyeVxuICAgKiBgVHJhdmVyc2FsQ29udGV4dGAgKGFuZCB0aHVzIGV2ZXJ5IHJlY29yZGVyIGV2ZW50KSBvZiB0aGUgcnVuLCBzbyBhXG4gICAqIHNuYXBzaG90IGNhbiBiZSBqb2luZWQgYWdhaW5zdCBhbiBldmVudCBzdHJlYW0gb3IgYW4gZXh0ZXJuYWxcbiAgICogY29ycmVsYXRpb24gdGFibGUuIFJlYWQtb25seSBieSBjb250cmFjdDogZ2VuZXJhdGVkIGJ5IHRoZSBleGVjdXRvclxuICAgKiAoYHJ1bm5lci9ydW5JZC50c2ApLCBuZXZlciBkZXJpdmVkIGZyb20gc25hcHNob3QgY29udGVudHMuXG4gICAqXG4gICAqIExpZmVjeWNsZSAobWF0Y2hlcyB0aGUgZXZlbnQgbW9kZWwpOiBmcmVzaCBwZXIgYHJ1bigpYCBBTkQgcGVyXG4gICAqIGByZXN1bWUoKWAg4oCUIHJlc3VtZSBpcyBsb2dpY2FsbHkgYSBkaXN0aW5jdCBydW4sIHNvIGEgcG9zdC1yZXN1bWVcbiAgICogc25hcHNob3QgY2FycmllcyBhIERJRkZFUkVOVCBydW5JZCB0aGFuIHRoZSBwYXVzZWQgcnVuJ3Mgc25hcHNob3QuXG4gICAqL1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICBzaGFyZWRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGV4ZWN1dGlvblRyZWU6IFN0YWdlU25hcHNob3Q7XG4gIC8qKlxuICAgKiBUaGUgY29tbWl0IGxvZydzIGZvbGQgQkFTRSDigJQgdGhlIHJ1bidzIHN0YXRlIGJlZm9yZSBpdHMgZmlyc3QgY29tbWl0XG4gICAqIChgaW5pdGlhbENvbnRleHRgIG1lcmdlZCB3aXRoIGBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dGA7IG9uIGEgcmVzdW1lLCB0aGVcbiAgICogY2hlY2twb2ludCdzIHN0YXRlKS4gRGVlcGx5IGZyb3plbiBhbmQgZnVsbHkgZGV0YWNoZWQgZnJvbSB0aGUgZW5naW5lLlxuICAgKlxuICAgKiBDb21taXQgYnVuZGxlcyBhcmUgRElGRlMsIHNvIHRoZSBsb2cgYWxvbmUgY2Fubm90IHJlYnVpbGQgYSB2YWx1ZSB0aGF0XG4gICAqIHdhcyBzZWVkZWQgYmVmb3JlIHRoZSBydW4gYW5kIG9ubHkgZXZlciBtZXJnZWQgYWZ0ZXJ3YXJkcy4gU2hpcHBpbmcgdGhlXG4gICAqIGJhc2UgV0lUSCB0aGUgbG9nIGlzIHdoYXQgbWFrZXMgYW4gb2ZmbGluZSBmb2xkIOKAlCBgc3RhdGVBdChzbmFwc2hvdCwgaSlgXG4gICAqIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYCDigJQgcmVwcm9kdWNlIHRoZSBzdGF0ZSBhIHN0YWdlIGFjdHVhbGx5IHNhdy5cbiAgICpcbiAgICogT1BUSU9OQUwgQlkgVFlQRSwgYW5kIGFic2VudCBpbiBleGFjdGx5IHR3byBjYXNlcy4gQSBwbGFpbiBgZ2V0U25hcHNob3QoKWBcbiAgICogYWx3YXlzIGNhcnJpZXMgaXQsIHNvIGEgbGl2ZSBmb2xkIHJlcG9ydHMgYGJhc2lzOiAnaW5pdGlhbCtsb2cnYC4gVW5kZXJcbiAgICogYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCBpdCBpcyBPTUlUVEVEIOKAlCB0aGUgYmFzZSBpcyB0aGUgcmF3IHByZS1ydW5cbiAgICogc2VlZCBhbmQgdGhlIHJlZGFjdGlvbiBwb2xpY3kgaXMgbm90IHBsdW1iZWQgaW50byB0aGUgZm9sZCDigJQgc28gYSBmb2xkIG9mXG4gICAqIGEgcmVkYWN0ZWQgc25hcHNob3QgZGVncmFkZXMgaG9uZXN0bHkgdG8gYGJhc2lzOiAnbG9nLW9ubHknYC4gQW5kIGl0IGlzXG4gICAqIGRlY2xhcmVkIG9wdGlvbmFsIHNvIHRoYXQgY29kZSB3cml0dGVuIGFnYWluc3QgOS4xNi54IOKAlCBhIHRlc3QgZml4dHVyZSBvclxuICAgKiBhIFVJIG1vY2sgdGhhdCBDT05TVFJVQ1RTIGEgYFJ1bnRpbWVTbmFwc2hvdGAgbGl0ZXJhbCDigJQgc3RpbGwgY29tcGlsZXMuXG4gICAqIGBzdGF0ZUF0YCBoYW5kbGVzIGFic2VuY2UgYnkgc2F5aW5nIHNvLCBuZXZlciBieSBmb2xkaW5nIGEgbGllLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBUaGUgcnVuJ3MgY29tbWl0IGJ1bmRsZXMsIG9uZSBwZXIgZXhlY3V0ZWQgc3RhZ2UsIGluIGV4ZWN1dGlvbiBvcmRlciDigJRcbiAgICogYSBERVRBQ0hFRCwgZnJvemVuIGNvcHkgb2YgdGhlIGVuZ2luZSdzIGxpdmUgbG9nIChhIHNuYXBzaG90IGlzIGEgZm9sZFxuICAgKiByZXN1bHQ6IGl0IG11c3Qgbm90IGtlZXAgY2hhbmdpbmcgdW5kZXIgdGhlIGNvbnN1bWVyIHRoYXQgaG9sZHMgaXQpLlxuICAgKiBUaGUgYnVuZGxlcyBpbnNpZGUgYXJlIHRoZSBlbmdpbmUncyBvd24gb2JqZWN0cywgaW1tdXRhYmxlIGFmdGVyIHJlY29yZC5cbiAgICovXG4gIGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW107XG4gIC8qKiBJZGVudGl0eSBvZiB0aGlzIGxvZywgc3RhYmxlIGFjcm9zcyBzYW1lLWV4ZWN1dG9yIHJlc3VtZS4gQWJzZW50IGJlZm9yZSBiaW5kaW5nIG9yIGluIG9sZGVyIHNvdXJjZXMuICovXG4gIHJlYWRvbmx5IGxvZ0FkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICAvKipcbiAgICogRW5jb2RpbmcgZGlzY3JpbWluYW50IGZvciBgY29tbWl0TG9nYCAoIzEzYy1CKTogYCdmdWxsJ2Ag4oCUIGV2ZXJ5IGBzZXRgXG4gICAqIGJ1bmRsZSBzdG9yZXMgdGhlIGZ1bGwgZmluYWwgdmFsdWUgKGhpc3RvcmljYWwpOyBgJ2RlbHRhJ2Ag4oCUIGJ1bmRsZXMgbWF5XG4gICAqIGNhcnJ5IGBhcHBlbmRgL2BkZWxldGVgIHRyYWNlIHZlcmJzIHdpdGggdmVyYi1xdWFsaWZpZWQgYG92ZXJ3cml0ZWBcbiAgICogcGF5bG9hZHMgKHRhaWxzKS4gT2ZmbGluZSB0b29saW5nIGtleXMgb24gdGhpcyBmaWVsZDsgYSBidW5kbGUgc3RyZWFtXG4gICAqIHdpdGhvdXQgY29udGV4dCByZW1haW5zIHNlbGYtZGVzY3JpYmluZyB2aWEgdGhlIHZlcmJzIHRoZW1zZWx2ZXMuXG4gICAqL1xuICBjb21taXRWYWx1ZXM6IENvbW1pdFZhbHVlc01vZGU7XG4gIC8qKiBQZXItd3JpdGUgcmVhZC1wcm92ZW5hbmNlIGRpYWwgKCNQMSkgdGhlIHJ1biBleGVjdXRlZCB1bmRlciDigJQgdGhlXG4gICAqICBvZmZsaW5lLXRvb2xpbmcgZGlzY3JpbWluYW50IGZvciBgVHJhY2VFbnRyeS5yZWFkS2V5c2AgYXZhaWxhYmlsaXR5LiAqL1xuICB3cml0ZVByb3ZlbmFuY2U6IFdyaXRlUHJvdmVuYW5jZU1vZGU7XG4gIC8qKlxuICAgKiBQZXItc3ViZmxvdyBleGVjdXRpb24gcmVzdWx0cywgRFVBTC1LRVlFRCAoZGVzaWduOiBkb2NzL2Rlc2lnbi9zdWJmbG93LWNvbW1pdC12aXNpYmlsaXR5Lm1kKTpcbiAgICogICAtIGJ5IHN1YmZsb3cgUEFUSCAoYHN1YmZsb3dJZGAsIGUuZy4gYCdzZi1wYXknYCkg4oaSIHRoZSBMQVNUIGl0ZXJhdGlvbiAoYmFjay1jb21wYXQpOyB0aGlzXG4gICAqICAgICBpcyB3aGF0IGBnZXRTdWJ0cmVlU25hcHNob3QocGF0aClgIGFuZCBgbGlzdFN1YmZsb3dQYXRocygpYCByZXNvbHZlLlxuICAgKiAgIC0gYnkgcGVyLWV4ZWN1dGlvbiBtb3VudCBgcnVudGltZVN0YWdlSWRgIChlLmcuIGAnc2YtcGF5IzUnYCkg4oaSIFRIQVQgaXRlcmF0aW9uJ3MgcmVzdWx0LCBzb1xuICAgKiAgICAgYSBMT09QSU5HIHN1YmZsb3cgcmV0YWlucyBFVkVSWSBpdGVyYXRpb24gKG5vdCBqdXN0IHRoZSBsYXN0KS4gTG9vayB1cCBhIHNwZWNpZmljXG4gICAqICAgICBpdGVyYXRpb24gYXMgYHN1YmZsb3dSZXN1bHRzW25vZGUucnVudGltZVN0YWdlSWRdID8/IHN1YmZsb3dSZXN1bHRzW25vZGUuc3ViZmxvd0lkXWAuXG4gICAqIEJvdGgga2V5cyBwb2ludCBhdCB0aGUgc2FtZSBvYmplY3QgZm9yIGEgc2luZ2xlIG1vdW50OyBpdGVyYXRlIHdpdGggY2FyZSAoY291bnQgdmlhIHRoZVxuICAgKiBwYXRoIGtleXMg4oCUIHRob3NlIHdpdGhvdXQgYCcjJ2ApLiBUaGUgcGF1c2UgY2hlY2twb2ludCBjYXJyaWVzIG9ubHkgdGhlIHBhdGgga2V5cywgbGVhbi5cbiAgICpcbiAgICogVW5kZXIgYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCBlYWNoIGVudHJ5J3MgYHRyZWVDb250ZXh0Lmdsb2JhbENvbnRleHRgIGlzIHRoYXRcbiAgICogc3ViZmxvdydzIE9XTiByZWRhY3RlZCBtaXJyb3IgKDkuMjAuMCkg4oCUIHRoZSBmb2xkIG9mIGl0cyBzY3J1YmJlZCBgaGlzdG9yeWAg4oCUIHNlcnZlZCBhc1xuICAgKiBvbmUgc3Vic3RpdHV0ZWQgb2JqZWN0IHBlciBtb3VudCAoYm90aCBrZXlzIHN0aWxsIGFncmVlKSDigJQgdGhlIHdyYXBwZXIgaXMgZnJlc2ggcGVyXG4gICAqIGBnZXRTbmFwc2hvdGAgY2FsbCwgdGhlIGBnbG9iYWxDb250ZXh0YCBpbnNpZGUgaXQgaXMgdGhlIHN0YWJsZSBtaXJyb3I7IHBsYWluLCBpdCBpcyB0aGUgc3ViZmxvdydzXG4gICAqIGxpdmUgaGVhcC4gV2l0aG91dCBhIHBvbGljeSB0aGVyZSBpcyBubyBtaXJyb3IgYW5kIHRoZSB0d28gdmlld3MgYXJlIHRoZSBzYW1lIG9iamVjdHMuXG4gICAqL1xuICBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogU25hcHNob3QgZGF0YSBmcm9tIHJlY29yZGVycyB0aGF0IGltcGxlbWVudCB0b1NuYXBzaG90KCkuICovXG4gIHJlY29yZGVycz86IFJlY29yZGVyU25hcHNob3RbXTtcbiAgLyoqXG4gICAqIERlZmVycmVkLW9ic2VydmVyIGFjY291bnRpbmcgKFJGQy0wMDEgQmxvY2sgOSkg4oCUIHF1ZXVlIGRlcHRoLCBkcm9wcyxcbiAgICogZmx1c2gvYnVkZ2V0IGNvdW50ZXJzLCBwZXItbGlzdGVuZXIgdGltZSBhdHRyaWJ1dGlvbiwgYW5kIHRoZVxuICAgKiB0ZXJtaW5hbC1mbHVzaCBzdHJhbmRpbmcgY291bnQuIEFCU0VOVCB1bmxlc3MgYSByZWNvcmRlciB3YXMgYXR0YWNoZWRcbiAgICogd2l0aCBgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9YCBvbiB0aGlzIGV4ZWN1dG9yICh6ZXJvLWNvc3QgZGlzY2lwbGluZSkuXG4gICAqL1xuICBvYnNlcnZlclN0YXRzPzogT2JzZXJ2ZXJTdGF0cztcbn07XG5cbmV4cG9ydCBjbGFzcyBFeGVjdXRpb25SdW50aW1lIHtcbiAgcHVibGljIGdsb2JhbFN0b3JlOiBTaGFyZWRNZW1vcnk7XG4gIC8qKlxuICAgKiBQYXJhbGxlbCByZWRhY3RlZCBtaXJyb3Igb2YgYGdsb2JhbFN0b3JlYC4gUG9wdWxhdGVkIGJ5IGV2ZXJ5IGNvbW1pdCB0aGF0XG4gICAqIHN0YWdlZCBhIHdyaXRlIChgbWVtb3J5L3JlY29yZENvbW1pdC50cyDCtyByZWNvcmRDb21taXRgKSwgd2l0aCB0aGUgYWxyZWFkeS1jb21wdXRlZCByZWRhY3RlZCBwYXRjaGVzLlxuICAgKiBPbmx5IGV4aXN0cyB3aGVuIHRoZSBydW4ncyBwb2xpY3kga2VlcHMgYSBtaXJyb3IgKGBSdW5Qb2xpY3kubWlycm9yYCDigJRcbiAgICogYEZsb3dDaGFydEV4ZWN1dG9yYCBzZXRzIGl0IHdoZW4gYSBgUmVkYWN0aW9uUG9saWN5YCBpcyBjb25maWd1cmVkKS5cbiAgICogT3RoZXJ3aXNlIHVuZGVmaW5lZCBhbmQgemVybyBjb3N0LlxuICAgKlxuICAgKiBSZWFkIHZpYSBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgLlxuICAgKi9cbiAgcHVibGljIHJlZGFjdGVkU3RvcmU/OiBTaGFyZWRNZW1vcnk7XG4gIHB1YmxpYyByb290U3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIHB1YmxpYyBleGVjdXRpb25IaXN0b3J5OiBFdmVudExvZztcbiAgLyoqIE9yaWdpbmFsIHJvb3QgZm9yIGdldFNuYXBzaG90KCkg4oCUIHNldCBiZWZvcmUgcmVzdW1lIGNoYW5nZXMgcm9vdFN0YWdlQ29udGV4dC4gKi9cbiAgcHJpdmF0ZSBfc25hcHNob3RSb290PzogU3RhZ2VDb250ZXh0O1xuICBwcml2YXRlIF9pbml0aWFsU3RhdGU6IHVua25vd247XG4gIHByaXZhdGUgX2RlZmF1bHRWYWx1ZXM6IHVua25vd247XG4gIC8qKiBUaGUgcnVuJ3MgcG9saWN5IChgbWVtb3J5L3J1blBvbGljeS50c2ApIOKAlCBpbnN0YWxsZWQgb24gdGhlIHJvb3QgZnJhbWU7XG4gICAqICBpdHMgYGNvbW1pdFZhbHVlc2AgYW5kIGB3cml0ZVByb3ZlbmFuY2VgIGFyZSB0aGUgc25hcHNob3QgZGlzY3JpbWluYW50cy4gKi9cbiAgcHJpdmF0ZSBwb2xpY3k6IFJ1blBvbGljeTtcblxuICAvKiogTWVtb2l6ZWQgZnJvemVuIGZvbGQgYmFzZSDigJQgc2VlIHtAbGluayBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlfS4gKi9cbiAgcHJpdmF0ZSBfZm9sZEJhc2U/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKipcbiAgICogQHBhcmFtIHBvbGljeSBUaGUgcnVuJ3MgcG9saWN5IChgcnVuUG9saWN5LnRzYCwgRjUpIOKAlCB0aGUgZm91ciBkaWFscywgdGhlXG4gICAqICAgcmVkYWN0aW9uIHJ1bGUsIHRoZSBtaXJyb3IgZmxhZy4gSW5zdGFsbGVkIG9uIHRoZSByb290IGZyYW1lIGhlcmUsIHNvXG4gICAqICAgdGhlIEZJUlNUIGNvbW1pdCAoYSBzdWJmbG93J3Mgc2VlZCwgYGhpc3RvcnlbMF1gKSBhbHJlYWR5IHJ1bnMgdW5kZXIgaXQ7XG4gICAqICAgZXZlcnkgZnJhbWUgYWZ0ZXIgaW5oZXJpdHMgdGhlIHNhbWUgcmVmZXJlbmNlLiBEZWZhdWx0OiBldmVyeSBkaWFsIGF0XG4gICAqICAgaXRzIGRlZmF1bHQsIG5vIHJ1bGUsIG5vIG1pcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJvb3ROYW1lOiBzdHJpbmcsXG4gICAgcm9vdElkOiBzdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlcz86IHVua25vd24sXG4gICAgaW5pdGlhbFN0YXRlPzogdW5rbm93bixcbiAgICBwb2xpY3k6IFJ1blBvbGljeSA9IERFRkFVTFRfUlVOX1BPTElDWSxcbiAgKSB7XG4gICAgdGhpcy5faW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgIHRoaXMuX2RlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0VmFsdWVzO1xuICAgIHRoaXMuZ2xvYmFsU3RvcmUgPSBuZXcgU2hhcmVkTWVtb3J5KGRlZmF1bHRWYWx1ZXMsIGluaXRpYWxTdGF0ZSk7XG4gICAgLy8gVGhlIGV2ZW50IGxvZydzIGZvbGQgYmFzZSBtdXN0IGJlIHRoZSBTQU1FIHN0YXRlIHRoZSBzdG9yZSBzdGFydHMgZnJvbVxuICAgIC8vIOKAlCBgaW5pdGlhbENvbnRleHRgIG1lcmdlZCB3aXRoIGBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dGAsIHdoaWNoIGlzIHdoYXRcbiAgICAvLyBgU2hhcmVkTWVtb3J5YCBjb21wdXRlZCBhYm92ZS4gU2VlZGluZyB0aGUgbG9nIGZyb20gYGluaXRpYWxTdGF0ZWAgYWxvbmVcbiAgICAvLyBsZWZ0IGBkZWZhdWx0VmFsdWVzYCBvdXQgb2YgZXZlcnkgcmVwbGF5LCBzbyBhIGZvbGQgY291bGQgbm90IHJlcHJvZHVjZVxuICAgIC8vIHRoZSBzdGF0ZSBhIHN0YWdlIGFjdHVhbGx5IHNhdy4gYGdldFN0YXRlKClgIGlzIHRoZSBsaXZlIGNvbnRleHQ7IHRoZVxuICAgIC8vIEV2ZW50TG9nIGNvbnN0cnVjdG9yIGNsb25lcyBpdCwgc28gdGhlIGJhc2Ugc3RheXMgZGV0YWNoZWQuXG4gICAgdGhpcy5leGVjdXRpb25IaXN0b3J5ID0gbmV3IEV2ZW50TG9nKHRoaXMuZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKSk7XG4gICAgdGhpcy5wb2xpY3kgPSBwb2xpY3k7XG4gICAgdGhpcy5yb290U3RhZ2VDb250ZXh0ID0gdGhpcy5uZXdSb290KHJvb3ROYW1lLCByb290SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnJlc2ggcm9vdCBmcmFtZSBmb3IgdGhpcyBydW50aW1lIOKAlCBgZ2xvYmFsU3RvcmVgLCBgZXhlY3V0aW9uSGlzdG9yeWAsXG4gICAqIHRoZSBydW4ncyBwb2xpY3kgYW5kICh3aGVuIGtlcHQpIHRoZSBtaXJyb3IuIEFsc28gaG93IGBTdWJmbG93RXhlY3V0b3JgXG4gICAqIHJlcGxhY2VzIGEgc3ViZmxvdydzIHNlZWQgZnJhbWUgd2l0aCB0aGUgZnJhbWUgaXRzIGZpcnN0IHN0YWdlIHJ1bnMgb24uXG4gICAqL1xuICBuZXdSb290KG5hbWU6IHN0cmluZywgaWQ6IHN0cmluZyk6IFN0YWdlQ29udGV4dCB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBTdGFnZUNvbnRleHQoJycsIG5hbWUsIGlkLCB0aGlzLmdsb2JhbFN0b3JlLCAnJywgdGhpcy5leGVjdXRpb25IaXN0b3J5KTtcbiAgICB0aGlzLmluc3RhbGxQb2xpY3kocm9vdCk7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbCB0aGUgcnVuJ3MgcG9saWN5IG9uIHRoZSBDVVJSRU5UIHJvb3QgZnJhbWUg4oCUIGEgc2FtZS1leGVjdXRvclxuICAgKiByZXN1bWUsIHdob3NlIGNvbnRpbnVhdGlvbiByb290IChgbGVhZi5jcmVhdGVOZXh0YCkgaXMgYWR2YW5jZWQgYmVmb3JlXG4gICAqIHRoZSBleGVjdXRvciBidWlsZHMgdGhpcyBsZWcncyBwb2xpY3kgKGEgZnJlc2ggcnVsZSBwZXIgbGVnKS4gRXZlcnlcbiAgICogZGVzY2VuZGFudCB0YWtlcyB0aGUgcmVmZXJlbmNlIGZyb20gdGhlcmUuXG4gICAqL1xuICB1c2VQb2xpY3kocG9saWN5OiBSdW5Qb2xpY3kpOiB2b2lkIHtcbiAgICB0aGlzLnBvbGljeSA9IHBvbGljeTtcbiAgICB0aGlzLmluc3RhbGxQb2xpY3kodGhpcy5yb290U3RhZ2VDb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IG9uIGByb290YCwgYW5kIHRoZSBtaXJyb3Igc3RvcmUgd2hlbiB0aGUgcG9saWN5IGtlZXBzIG9uZS5cbiAgICogVGhlIG1pcnJvciBpcyBhIFNFUlZFRCBzdXJmYWNlLCBzbyBpdHMgc2VlZCBtdXN0IGFscmVhZHkgYmUgdGhlIHBvbGljeSdzXG4gICAqIHZpZXcgb2YgdGhlIHN0YXJ0aW5nIHN0YXRlOiBhIHBvbGljeSBrZXkgdGhhdCBhcnJpdmVzIGJ5IGBpbml0aWFsQ29udGV4dGBcbiAgICogLyBgZGVmYXVsdFZhbHVlc0ZvckNvbnRleHRgIChvciwgb24gYSBjcm9zcy1leGVjdXRvciByZXN1bWUsIGJ5IHRoZVxuICAgKiBjaGVja3BvaW50J3MgYHNoYXJlZFN0YXRlYCkgYW5kIGlzIG5ldmVyIHJlLXdyaXR0ZW4gd291bGQgb3RoZXJ3aXNlIHNpdFxuICAgKiBpbiBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgIGluIHBsYWludGV4dCDigJQgc28gdGhlIHNlZWQgaXMgc2NydWJiZWRcbiAgICogd2l0aCB0aGUgTE9HJ3MgcGxhY2Vob2xkZXIsIHRoZSBzYW1lIHN0cmluZyB0aGUgcmVkYWN0ZWQgcGF0Y2hlcyBjYXJyeS5cbiAgICogQ3JlYXRlZCBvbmNlIHBlciBydW50aW1lIChhIHN1YmZsb3cncyBydW50aW1lIGtlZXBzIGl0cyBvd247IGl0cyBzZWVkIGlzXG4gICAqIGVtcHR5IOKAlCB0aGUgaW5wdXQgYXJyaXZlcyBhcyBhIGNvbW1pdCkuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxQb2xpY3kocm9vdDogU3RhZ2VDb250ZXh0KTogdm9pZCB7XG4gICAgcm9vdC51c2VQb2xpY3kodGhpcy5wb2xpY3kpO1xuICAgIGlmICghdGhpcy5wb2xpY3kubWlycm9yKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLnJlZGFjdGVkU3RvcmUpIHtcbiAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLnBvbGljeS5yZWRhY3Rpb247XG4gICAgICB0aGlzLnJlZGFjdGVkU3RvcmUgPSBuZXcgU2hhcmVkTWVtb3J5KFxuICAgICAgICBydWxlID8gcnVsZS5yZXRhaW5TdGF0ZSh0aGlzLl9kZWZhdWx0VmFsdWVzLCBMT0dfUExBQ0VIT0xERVIpIDogdGhpcy5fZGVmYXVsdFZhbHVlcyxcbiAgICAgICAgcnVsZSA/IHJ1bGUucmV0YWluU3RhdGUodGhpcy5faW5pdGlhbFN0YXRlLCBMT0dfUExBQ0VIT0xERVIpIDogdGhpcy5faW5pdGlhbFN0YXRlLFxuICAgICAgKTtcbiAgICB9XG4gICAgcm9vdC51c2VSZWRhY3RlZE1pcnJvcih0aGlzLnJlZGFjdGVkU3RvcmUpO1xuICB9XG5cbiAgLyoqIFByZXNlcnZlIHRoZSBjdXJyZW50IHJvb3RTdGFnZUNvbnRleHQgZm9yIHNuYXBzaG90cyBiZWZvcmUgY2hhbmdpbmcgaXQgZm9yIHJlc3VtZS4gKi9cbiAgcHJlc2VydmVTbmFwc2hvdFJvb3QoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zbmFwc2hvdFJvb3QpIHtcbiAgICAgIHRoaXMuX3NuYXBzaG90Um9vdCA9IHRoaXMucm9vdFN0YWdlQ29udGV4dDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZyb3plbiwgZGV0YWNoZWQgZm9sZCBiYXNlIHNlcnZlZCBhcyB7QGxpbmsgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZX0uXG4gICAqIENvbXB1dGVkIG9uY2UgKHRoZSBiYXNlIG5ldmVyIGNoYW5nZXMgYWZ0ZXIgY29uc3RydWN0aW9uKSBhbmQgc2hhcmVkIOKAlFxuICAgKiBzYWZlIGJlY2F1c2UgaXQgaXMgZGVlcGx5IGZyb3plbiwgc28gbm8gaG9sZGVyIGNhbiBtdXRhdGUgaXQgb3IgcmVhY2ggdGhlXG4gICAqIGVuZ2luZSB0aHJvdWdoIGl0OyBhIGJhc2UgaG9sZGluZyBhIERhdGUsIE1hcCwgYnVmZmVyIOKApiAod2hhdCBmcmVlemluZ1xuICAgKiBjYW5ub3Qgc2VhbCkgaXMgc2VydmVkIGJ5IHRoZSBwdWJsaWMgc25hcHNob3QgYXMgYSBjb3B5IG9mIGl0cyBvcGVuIHBhdGhzXG4gICAqIChgcnVubmVyL3NuYXBzaG90LnRzIMK3IHNlcnZlZFNuYXBzaG90YCwgYGNhcHR1cmUvZnJlZXplLnRzIMK3IHNlcnZlUmVjb3JkYCxcbiAgICogOS40NC4yKS5cbiAgICovXG4gIHByaXZhdGUgZ2V0Rm9sZEJhc2UoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGlmICghdGhpcy5fZm9sZEJhc2UpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkuZ2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICB0aGlzLl9mb2xkQmFzZSA9IGZyZWV6ZVJlY29yZChiYXNlICYmIHR5cGVvZiBiYXNlID09PSAnb2JqZWN0JyA/IGJhc2UgOiB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mb2xkQmFzZTtcbiAgfVxuXG4gIGdldFBpcGVsaW5lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdsb2JhbFN0b3JlLmdldFN0YXRlKCk7XG4gICAgcmV0dXJuIHN0YXRlLnBpcGVsaW5lcyA/IE9iamVjdC5rZXlzKHN0YXRlLnBpcGVsaW5lcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgOiBbXTtcbiAgfVxuXG4gIHNldFJvb3RPYmplY3QocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMucm9vdFN0YWdlQ29udGV4dC5zZXRPYmplY3QocGF0aCwga2V5LCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBydW50aW1lIHNuYXBzaG90LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5yZWRhY3QgIFdoZW4gYHRydWVgLCByZXR1cm5zIGBzaGFyZWRTdGF0ZWAgZnJvbSB0aGVcbiAgICogICBwYXJhbGxlbCByZWRhY3RlZCBtaXJyb3IgKGlmIG9uZSB3YXMgZW5hYmxlZCkuIFRoaXMgaXMgdGhlIHNhZmUgdmlld1xuICAgKiAgIGZvciBzaGFyaW5nIHRyYWNlcyBleHRlcm5hbGx5IOKAlCBwYXN0ZSBpbnRvIGEgdmlld2VyLCBzaGlwIHRvIHN1cHBvcnQsXG4gICAqICAgZXRjLiBXaGVuIHRoZSBtaXJyb3Igd2FzIG5ldmVyIGVuYWJsZWQsIGZhbGxzIGJhY2sgdG8gcmF3IGBnbG9iYWxTdG9yZWBcbiAgICogICBhbmQgYSBkZXYtbW9kZSB3YXJuaW5nIGlzIGVtaXR0ZWQgKHNpbGVudCBpbiBwcm9kdWN0aW9uKS5cbiAgICpcbiAgICogICBEZWZhdWx0IGBmYWxzZWAgcHJlc2VydmVzIHRoZSBydW50aW1lIHZpZXcg4oCUIG5lY2Vzc2FyeSBmb3IgcGF1c2UgL1xuICAgKiAgIHJlc3VtZSAocmVzdW1wdGlvbiBtdXN0IHJlcGxheSBhZ2FpbnN0IHRoZSByZWFsIHZhbHVlcywgbm90XG4gICAqICAgJ1tSRURBQ1RFRF0nKS5cbiAgICpcbiAgICogT3RoZXIgZmllbGRzIChgZXhlY3V0aW9uVHJlZWAsIGBjb21taXRMb2dgKSBhcmUgdGhlIHNhbWUgZWl0aGVyIHdheSDigJRcbiAgICogdGhlIGNvbW1pdCBsb2cgaXMgYWxyZWFkeSByZWRhY3RlZCBhdCB3cml0ZS10aW1lLCBhbmQgdGhlIGV4ZWN1dGlvblxuICAgKiB0cmVlIG9ubHkgY2FycmllcyBzdHJ1Y3R1cmFsIG1ldGFkYXRhLlxuICAgKlxuICAgKiBgaW5pdGlhbFN0YXRlYCAodGhlIGZvbGQgYmFzZSkgaXMgT01JVFRFRCB1bmRlciBgcmVkYWN0OiB0cnVlYC4gSXQgaXMgdGhlXG4gICAqIHJ1bidzIHJhdyBwcmUtcnVuIHNlZWQg4oCUIGBpbml0aWFsQ29udGV4dGAgbWVyZ2VkIHdpdGhcbiAgICogYGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0YCDigJQgYW5kIGl0IG5ldmVyIHBhc3NlZCB0aHJvdWdoIGEgcmVkYWN0aW9uXG4gICAqIHBvbGljeTogdGhlIHBvbGljeSBzY3J1YnMgV1JJVEVTIGF0IHRoZSBzY29wZSBmYWNhZGUsIGFuZCB0aGUgYmFzZSB3YXNcbiAgICogbmV2ZXIgd3JpdHRlbiBieSBhIHN0YWdlLiBTZXJ2aW5nIGl0IG9uIHRoZSByZWRhY3RlZCBzdXJmYWNlIHdvdWxkIGhhbmRcbiAgICogYmFjayB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgYSBzZWVkZWQgc2VjcmV0IHRoYXQgYSBsYXRlciBjb21taXQgaGFkXG4gICAqIHNjcnViYmVkLiBBIGNvbnN1bWVyIGZvbGRpbmcgd2l0aG91dCBpdCBnZXRzIGBiYXNpczogJ2xvZy1vbmx5J2AgZnJvbVxuICAgKiBgc3RhdGVBdGAsIHdoaWNoIGlzIHRoZSBob25lc3Qgc2lnbmFsIHRoYXQgdGhlIGJhc2UgZGlkIG5vdCB0cmF2ZWwgd2l0aFxuICAgKiB0aGlzIGxvZyDigJQgYSBwYXJ0aWFsIGFuc3dlciB0aGF0IHNheXMgaXQgaXMgcGFydGlhbCwgbmV2ZXIgYSBzaWxlbnQgb25lLlxuICAgKlxuICAgKiBSZXR1cm5zIGBPbWl0PFJ1bnRpbWVTbmFwc2hvdCwgJ3J1bklkJz5gOiB0aGUgcnVudGltZSBpcyB0aGUgbWVtb3J5XG4gICAqIGNvbnRhaW5lciBhbmQgZG9lc24ndCBrbm93IHdoaWNoIHJ1biBpdCBzZXJ2ZXMg4oCUIGBydW5JZGAgaXMgcGVyLXJ1blxuICAgKiBleGVjdXRvciBzdGF0ZSwgc3RhbXBlZCBieSBgRmxvd2NoYXJ0VHJhdmVyc2VyLmdldFNuYXBzaG90KClgICh3aGljaFxuICAgKiBvd25zIHRoZSBydW4ncyBpZCBhbmQgYWxyZWFkeSBzdGFtcHMgaXQgb24gZXZlcnkgZXZlbnQpLiBTdWJmbG93cydcbiAgICogbmVzdGVkIHJ1bnRpbWVzIGRlbGliZXJhdGVseSBoYXZlIE5PIHJ1bklkIG9mIHRoZWlyIG93biAoYSBzdWJmbG93IGlzXG4gICAqIHBhcnQgb2YgdGhlIHBhcmVudCdzIGxvZ2ljYWwgcnVuKS5cbiAgICovXG4gIGdldFNuYXBzaG90KG9wdGlvbnM/OiB7IHJlZGFjdD86IGJvb2xlYW4gfSk6IE9taXQ8UnVudGltZVNuYXBzaG90LCAncnVuSWQnPiB7XG4gICAgY29uc3Qgc25hcHNob3RSb290ID0gdGhpcy5fc25hcHNob3RSb290ID8/IHRoaXMucm9vdFN0YWdlQ29udGV4dDtcbiAgICBjb25zdCB1c2VSZWRhY3RlZCA9IG9wdGlvbnM/LnJlZGFjdCA9PT0gdHJ1ZSAmJiB0aGlzLnJlZGFjdGVkU3RvcmUgIT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgc2hhcmVkU3RhdGU6IHVzZVJlZGFjdGVkID8gdGhpcy5yZWRhY3RlZFN0b3JlIS5nZXRTdGF0ZSgpIDogdGhpcy5nbG9iYWxTdG9yZS5nZXRTdGF0ZSgpLFxuICAgICAgZXhlY3V0aW9uVHJlZTogc25hcHNob3RSb290LmdldFNuYXBzaG90KCksXG4gICAgICAvLyBSRURBQ1RJT046IHRoZSBmb2xkIGJhc2UgaXMgdGhlIHJhdyBwcmUtcnVuIHNlZWQgYW5kIG5vIHBvbGljeSBldmVyXG4gICAgICAvLyB0b3VjaGVkIGl0IChwb2xpY2llcyBzY3J1YiB3cml0ZXM7IG5vdGhpbmcgd3JvdGUgdGhlIGJhc2UpLiBPbWl0IGl0XG4gICAgICAvLyByYXRoZXIgdGhhbiBsZWFrIGl0IOKAlCBgc3RhdGVBdGAgZGVncmFkZXMgdG8gYGJhc2lzOiAnbG9nLW9ubHknYC5cbiAgICAgIC4uLih1c2VSZWRhY3RlZCA/IHt9IDogeyBpbml0aWFsU3RhdGU6IHRoaXMuZ2V0Rm9sZEJhc2UoKSB9KSxcbiAgICAgIC8vIERFVEFDSEVEOiB0aGUgZW5naW5lIGtlZXBzIGl0cyBsaXZlIEV2ZW50TG9nOyB0aGUgc25hcHNob3QgZ2V0cyBhXG4gICAgICAvLyBmcm96ZW4gYXJyYXkgb2YgaXRzIG93biAoYHJlY29yZGVkKClgIGJ1aWxkcyBhIG5ldyBvbmUpLiBTZXJ2aW5nIHRoZVxuICAgICAgLy8gaW50ZXJuYWwgYXJyYXkgYWxpYXNlZCBpdCwgc28gYSBzbmFwc2hvdCB0YWtlbiBtaWQtcnVuIGtlcHQgZ3Jvd2luZ1xuICAgICAgLy8gdW5kZXIgaXRzIGhvbGRlciBhbmQgYSBjb25zdW1lciBjb3VsZCBzcGxpY2UgdGhlIGVuZ2luZSdzIG93biBoaXN0b3J5LlxuICAgICAgLy8gVGhlIGJ1bmRsZXMgaW4gaXQgYXJlIHRoZSBsb2cncyBvd24sIGZyb3plbiBhdCBgRXZlbnRMb2cgwrcgcmVjb3JkYFxuICAgICAgLy8gKEYzKS4gVGhlIHB1YmxpYyBzbmFwc2hvdCBzZXJ2ZXMgdGhlbSAoYHJ1bm5lci9zbmFwc2hvdC50cyDCt1xuICAgICAgLy8gc2VydmVkU25hcHNob3RgLCA5LjQ0LjIpOyB0aGlzIG9uZSBpcyBhbHNvIHRoZSBlbmdpbmUncyBvd24g4oCUIGFcbiAgICAgIC8vIHN1YmZsb3cgbW91bnQgdGFrZXMgaXQgb25jZSBwZXIgbW91bnQg4oCUIHNvIHRoZSBydW4gcGF0aCBzZXJ2ZXMgbm90aGluZy5cbiAgICAgIGNvbW1pdExvZzogT2JqZWN0LmZyZWV6ZSh0aGlzLmV4ZWN1dGlvbkhpc3RvcnkucmVjb3JkZWQoKSkgYXMgQ29tbWl0QnVuZGxlW10sXG4gICAgICAuLi4odGhpcy5leGVjdXRpb25IaXN0b3J5LmFkZHJlc3MgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBsb2dBZGRyZXNzOiB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkuYWRkcmVzcyB9KSxcbiAgICAgIGNvbW1pdFZhbHVlczogdGhpcy5wb2xpY3kuY29tbWl0VmFsdWVzLFxuICAgICAgd3JpdGVQcm92ZW5hbmNlOiB0aGlzLnBvbGljeS53cml0ZVByb3ZlbmFuY2UsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* served subflow results (each subflow's own mirror under `redact: true`), one
|
|
6
6
|
* recorder row per recorder id, and the deferred tier's accounting.
|
|
7
7
|
*/
|
|
8
|
-
import { deepFreeze } from '../capture/freeze.js';
|
|
8
|
+
import { deepFreeze, serveRecord } from '../capture/freeze.js';
|
|
9
9
|
import { isDevMode } from '../devMode.js';
|
|
10
10
|
import { servedSubflowResults } from '../engine/handlers/servedSubflowResults.js';
|
|
11
11
|
import { copyBundle } from '../recorder/snapshot.js';
|
|
@@ -15,7 +15,7 @@ import { copyBundle } from '../recorder/snapshot.js';
|
|
|
15
15
|
* instead of corrupting engine state.
|
|
16
16
|
*/
|
|
17
17
|
export function servedSnapshot(traverser, observers, options) {
|
|
18
|
-
const snapshot = traverser.getSnapshot(options);
|
|
18
|
+
const snapshot = servedLog(traverser.getSnapshot(options));
|
|
19
19
|
if (isDevMode()) {
|
|
20
20
|
// Dev-mode mutation guard: freeze a CLONE, never the live engine
|
|
21
21
|
// state — `snapshot.sharedState` IS SharedMemory's current generation,
|
|
@@ -47,6 +47,20 @@ export function servedSnapshot(traverser, observers, options) {
|
|
|
47
47
|
}
|
|
48
48
|
return snapshot;
|
|
49
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* The commit log and the fold base as a reader may hold them (9.44.2): a record freezing sealed whole
|
|
52
|
+
* is served as itself; one holding what freezing cannot seal — a Date, a Map, a buffer … — as a copy
|
|
53
|
+
* of its open paths, the reader's own (`capture/freeze.ts · serveRecord`). Here, at the public door:
|
|
54
|
+
* the engine's own snapshot of a log (a subflow mount's) is not served, so the run pays nothing.
|
|
55
|
+
*/
|
|
56
|
+
function servedLog(snapshot) {
|
|
57
|
+
const { initialState } = snapshot;
|
|
58
|
+
return {
|
|
59
|
+
...snapshot,
|
|
60
|
+
commitLog: Object.freeze(snapshot.commitLog.map(serveRecord)),
|
|
61
|
+
...(initialState === undefined ? {} : { initialState: serveRecord(initialState) }),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
50
64
|
/**
|
|
51
65
|
* Collect `toSnapshot()` bundles from every attached recorder — ONE entry
|
|
52
66
|
* per recorder id, across all channels and both delivery tiers.
|
|
@@ -90,4 +104,4 @@ export function collectRecorderSnapshots(observers) {
|
|
|
90
104
|
}
|
|
91
105
|
return out;
|
|
92
106
|
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3J1bm5lci9zbmFwc2hvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUdsRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFLckQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQzVCLFNBQXVDLEVBQ3ZDLFNBQXVCLEVBQ3ZCLE9BQThCO0lBRTlCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFvQixDQUFDO0lBQ25FLElBQUksU0FBUyxFQUFFLEVBQUUsQ0FBQztRQUNoQixpRUFBaUU7UUFDakUsdUVBQXVFO1FBQ3ZFLHlEQUF5RDtRQUN6RCwyQkFBMkI7UUFDM0Isa0VBQWtFO1FBQ2xFLDhEQUE4RDtRQUM5RCxtRUFBbUU7UUFDbkUsc0VBQXNFO1FBQ3RFLDJEQUEyRDtRQUMzRCxRQUFRLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ2hELElBQUksU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2Qix3RUFBd0U7UUFDeEUsd0RBQXdEO1FBQ3hELDRFQUE0RTtRQUM1RSxRQUFRLENBQUMsY0FBYyxHQUFHLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxNQUFNLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlELElBQUksaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2pDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUM7SUFDekMsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxnRUFBZ0U7SUFDaEUsMENBQTBDO0lBQzFDLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNCLFFBQVEsQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsU0FBdUI7SUFDOUQsTUFBTSxHQUFHLEdBQXVCLEVBQUUsQ0FBQztJQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQy9CLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBK0IsRUFBUSxFQUFFO1FBQ3hELElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUFFLE9BQU87UUFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQyxDQUFDO0lBQ0YsS0FBSyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsY0FBYztRQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxhQUFhO1FBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNCLEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRTtZQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUU7WUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogc25hcHNob3Qg4oCUIHdoYXQgYEZsb3dDaGFydEV4ZWN1dG9yLmdldFNuYXBzaG90KClgIHNlcnZlcyAoRjkpLlxuICpcbiAqIFRoZSB0cmF2ZXJzZXIncyBydW50aW1lIHNuYXBzaG90LCBwbHVzIHdoYXQgb25seSB0aGUgZXhlY3V0b3Iga25vd3M6IHRoZVxuICogc2VydmVkIHN1YmZsb3cgcmVzdWx0cyAoZWFjaCBzdWJmbG93J3Mgb3duIG1pcnJvciB1bmRlciBgcmVkYWN0OiB0cnVlYCksIG9uZVxuICogcmVjb3JkZXIgcm93IHBlciByZWNvcmRlciBpZCwgYW5kIHRoZSBkZWZlcnJlZCB0aWVyJ3MgYWNjb3VudGluZy5cbiAqL1xuXG5pbXBvcnQgeyBkZWVwRnJlZXplIH0gZnJvbSAnLi4vY2FwdHVyZS9mcmVlemUuanMnO1xuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vZGV2TW9kZS5qcyc7XG5pbXBvcnQgeyBzZXJ2ZWRTdWJmbG93UmVzdWx0cyB9IGZyb20gJy4uL2VuZ2luZS9oYW5kbGVycy9zZXJ2ZWRTdWJmbG93UmVzdWx0cy5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dSZWNvcmRlciB9IGZyb20gJy4uL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93Y2hhcnRUcmF2ZXJzZXIgfSBmcm9tICcuLi9lbmdpbmUvdHJhdmVyc2FsL0Zsb3djaGFydFRyYXZlcnNlci5qcyc7XG5pbXBvcnQgeyBjb3B5QnVuZGxlIH0gZnJvbSAnLi4vcmVjb3JkZXIvc25hcHNob3QuanMnO1xuaW1wb3J0IHR5cGUgeyBTY29wZVJlY29yZGVyIH0gZnJvbSAnLi4vc2NvcGUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBSdW5PYnNlcnZlcnMgfSBmcm9tICcuL2F0dGFjaC5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlY29yZGVyU25hcHNob3QsIFJ1bnRpbWVTbmFwc2hvdCB9IGZyb20gJy4vRXhlY3V0aW9uUnVudGltZS5qcyc7XG5cbi8qKlxuICogVGhlIHNlcnZlZCBzbmFwc2hvdC4gYHNoYXJlZFN0YXRlYCBpcyB0aGUgTElWRSB2aWV3IGluIHByb2R1Y3Rpb24gKHplcm9cbiAqIGNvcHkpOyBpbiBkZXYgbW9kZSBpdCBpcyBhIGRlZXAtZnJvemVuIENMT05FLCBzbyBhIGNvbnN1bWVyIG11dGF0aW9uIHRocm93c1xuICogaW5zdGVhZCBvZiBjb3JydXB0aW5nIGVuZ2luZSBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlZFNuYXBzaG90KFxuICB0cmF2ZXJzZXI6IEZsb3djaGFydFRyYXZlcnNlcjxhbnksIGFueT4sXG4gIG9ic2VydmVyczogUnVuT2JzZXJ2ZXJzLFxuICBvcHRpb25zPzogeyByZWRhY3Q/OiBib29sZWFuIH0sXG4pOiBSdW50aW1lU25hcHNob3Qge1xuICBjb25zdCBzbmFwc2hvdCA9IHRyYXZlcnNlci5nZXRTbmFwc2hvdChvcHRpb25zKSBhcyBSdW50aW1lU25hcHNob3Q7XG4gIGlmIChpc0Rldk1vZGUoKSkge1xuICAgIC8vIERldi1tb2RlIG11dGF0aW9uIGd1YXJkOiBmcmVlemUgYSBDTE9ORSwgbmV2ZXIgdGhlIGxpdmUgZW5naW5lXG4gICAgLy8gc3RhdGUg4oCUIGBzbmFwc2hvdC5zaGFyZWRTdGF0ZWAgSVMgU2hhcmVkTWVtb3J5J3MgY3VycmVudCBnZW5lcmF0aW9uLFxuICAgIC8vIHdob3NlIHVuY2hhbmdlZCBzdWJ0cmVlcyBldmVyeSBsYXRlciBnZW5lcmF0aW9uIHNoYXJlc1xuICAgIC8vIChjb3B5LW9uLXdyaXRlLCA5LjI5LjApLlxuICAgIC8vIFByb2R1Y3Rpb24gc3RheXMgemVyby1jb3B5OyBjbG9uZS1hbHdheXMgaXMgYSBtZWFzdXJlZCBkZWNpc2lvblxuICAgIC8vIGRlZmVycmVkIHVudGlsIHRoZSBiZW5jaCBzYXlzIGl0J3MgYWZmb3JkYWJsZSAoQkFDS0xPRyAjOCkuXG4gICAgLy8gTk9URTogZGVlcEZyZWV6ZSAoY2FwdHVyZS9mcmVlemUudHMg4oCUIHRoZSBvbmUgd2FsaykgY2Fubm90IHJlYWNoXG4gICAgLy8gTWFwL1NldCBJTlRFUk5BTFMgKGBtYXAuc2V0KClgIG9uIHRoZSBmcm96ZW4gY2xvbmUgd29uJ3QgdGhyb3cpIGFuZFxuICAgIC8vIHNraXBzIHR5cGVkIGFycmF5cy4gVGhlIENMT05FIHN0aWxsIGlzb2xhdGVzIHRoZSBlbmdpbmUuXG4gICAgc25hcHNob3Quc2hhcmVkU3RhdGUgPSBkZWVwRnJlZXplKHN0cnVjdHVyZWRDbG9uZShzbmFwc2hvdC5zaGFyZWRTdGF0ZSkpO1xuICB9XG4gIGNvbnN0IHNmUmVzdWx0cyA9IHRyYXZlcnNlci5nZXRTdWJmbG93UmVzdWx0cygpO1xuICBpZiAoc2ZSZXN1bHRzLnNpemUgPiAwKSB7XG4gICAgLy8gVW5kZXIgYHJlZGFjdDogdHJ1ZWAgZWFjaCBzdWJmbG93J3MgYGdsb2JhbENvbnRleHRgIGlzIGl0cyBvd24gbWlycm9yXG4gICAgLy8gKDkuMjAuMCkg4oCUIHNlcnZlZCwgbmV2ZXIgd3JpdHRlbiBpbnRvIHRoZSByZWNvcmQgKHNlZVxuICAgIC8vIGVuZ2luZS9oYW5kbGVycy9zZXJ2ZWRTdWJmbG93UmVzdWx0cy50cykuIFBsYWluOiB0aGUgcmVjb3JkcyBhcyB0aGV5IGFyZS5cbiAgICBzbmFwc2hvdC5zdWJmbG93UmVzdWx0cyA9IHNlcnZlZFN1YmZsb3dSZXN1bHRzKHNmUmVzdWx0cywgb3B0aW9ucz8ucmVkYWN0ID09PSB0cnVlKTtcbiAgfVxuXG4gIGNvbnN0IHJlY29yZGVyU25hcHNob3RzID0gY29sbGVjdFJlY29yZGVyU25hcHNob3RzKG9ic2VydmVycyk7XG4gIGlmIChyZWNvcmRlclNuYXBzaG90cy5sZW5ndGggPiAwKSB7XG4gICAgc25hcHNob3QucmVjb3JkZXJzID0gcmVjb3JkZXJTbmFwc2hvdHM7XG4gIH1cblxuICAvLyBSRkMtMDAxIEJsb2NrIDk6IHRoZSBkZWZlcnJlZC1vYnNlcnZlciBhY2NvdW50aW5nIHN1cmZhY2UuIFByZXNlbnRcbiAgLy8gT05MWSB3aGVuIGEgZGVmZXJyZWQgb2JzZXJ2ZXIgd2FzIGF0dGFjaGVkIG9uIHRoaXMgZXhlY3V0b3Ig4oCUXG4gIC8vIHplcm8tY29zdCBkaXNjaXBsaW5lIGZvciBldmVyeW9uZSBlbHNlLlxuICBpZiAob2JzZXJ2ZXJzLmRlZmVycmVkVGllcikge1xuICAgIHNuYXBzaG90Lm9ic2VydmVyU3RhdHMgPSBvYnNlcnZlcnMuZGVmZXJyZWRUaWVyLmdldFN0YXRzKCk7XG4gIH1cblxuICByZXR1cm4gc25hcHNob3Q7XG59XG5cbi8qKlxuICogQ29sbGVjdCBgdG9TbmFwc2hvdCgpYCBidW5kbGVzIGZyb20gZXZlcnkgYXR0YWNoZWQgcmVjb3JkZXIg4oCUIE9ORSBlbnRyeVxuICogcGVyIHJlY29yZGVyIGlkLCBhY3Jvc3MgYWxsIGNoYW5uZWxzIGFuZCBib3RoIGRlbGl2ZXJ5IHRpZXJzLlxuICpcbiAqIFRoZSBkZWR1cGUgaXMgbG9hZC1iZWFyaW5nLCBub3QgdGlkaW5lc3MuIEEgcmVjb3JkZXIgdGhhdCBpbXBsZW1lbnRzIGFcbiAqIHNoYXJlZC1uYW1lIGhvb2sgKGBvbkVycm9yYCAvIGBvblBhdXNlYCAvIGBvblJlc3VtZWAg4oCUIGRlY2xhcmVkIG9uIEJPVEhcbiAqIHRoZSBzY29wZSBhbmQgZmxvdyBpbnRlcmZhY2VzKSBpcyBsZWdpdGltYXRlbHkgcmVnaXN0ZXJlZCBvbiBCT1RIIGlubGluZVxuICogbGlzdHMgYnkgYGF0dGFjaENvbWJpbmVkUmVjb3JkZXJgLCBhbmQgdGhhdCBpcyBieSBkZXNpZ246IGVhY2ggY2hhbm5lbFxuICogY2FsbHMgdGhlIGhvb2sgd2l0aCBpdHMgb3duIHBheWxvYWQgdmFyaWFudC4gYE1ldHJpY1JlY29yZGVyLm9uUGF1c2VgIGlzXG4gKiB0aGUgZXZlcnlkYXkgY2FzZS4gV2Fsa2luZyB0aGUgbGlzdHMgd2l0aG91dCBhIHNoYXJlZCBgc2VlbmAgc2V0IHR1cm5lZFxuICogdGhhdCBpbnRvIGEgRFVQTElDQVRFRCBzbmFwc2hvdCBlbnRyeSAoc2FtZSBpZCB0d2ljZSksIHdoaWNoIGJyZWFrcyBldmVyeVxuICogY29uc3VtZXIgdGhhdCBpbmRleGVzIGBzbmFwc2hvdC5yZWNvcmRlcnNgIGJ5IGlkLlxuICpcbiAqIE9yZGVyaW5nIGlzIHNjb3BlIGxpc3Qg4oaSIGZsb3cgbGlzdCDihpIgZGVmZXJyZWQgdGllciwgYW5kIHRoZSBGSVJTVCBidW5kbGVcbiAqIGZvciBhbiBpZCB3aW5zLiBBIHJlY29yZGVyIHdpdGggbm8gYHRvU25hcHNob3RgIG5ldmVyIGNsYWltcyBhbiBpZCwgc28gaXRcbiAqIGNhbm5vdCBzaGFkb3cgYSBzYW1lLWlkIHJlY29yZGVyIHRoYXQgZG9lcyBoYXZlIG9uZS5cbiAqXG4gKiBUaGUgcm93IGlzIFJFQlVJTFQgZmllbGQgYnkgZmllbGQgYnkgdGhlIG9uZSBjb3BpZXIgKGByZWNvcmRlci9zbmFwc2hvdC50c1xuICogwrcgY29weUJ1bmRsZWAsIHNoYXJlZCB3aXRoIGBDb21wb3NpdGVSZWNvcmRlcmApIHJhdGhlciB0aGFuIHNwcmVhZCwgc28gYVxuICogcmVjb3JkZXIgY2Fubm90IHNtdWdnbGUgYW4gYGlkYCBvZiBpdHMgb3duIGNob29zaW5nIGludG8gdGhlIHNuYXBzaG90ICh0aGVcbiAqIGlkIGlzIHRoZSBleGVjdXRvcidzLCBhbmQgY29uc3VtZXJzIGluZGV4IGJ5IGl0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RSZWNvcmRlclNuYXBzaG90cyhvYnNlcnZlcnM6IFJ1bk9ic2VydmVycyk6IFJlY29yZGVyU25hcHNob3RbXSB7XG4gIGNvbnN0IG91dDogUmVjb3JkZXJTbmFwc2hvdFtdID0gW107XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgY29sbGVjdCA9IChyOiBTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyKTogdm9pZCA9PiB7XG4gICAgaWYgKCFyLnRvU25hcHNob3QgfHwgc2Vlbi5oYXMoci5pZCkpIHJldHVybjtcbiAgICBzZWVuLmFkZChyLmlkKTtcbiAgICBvdXQucHVzaChjb3B5QnVuZGxlKHIuaWQsIHIudG9TbmFwc2hvdCgpKSk7XG4gIH07XG4gIGZvciAoY29uc3QgciBvZiBvYnNlcnZlcnMuc2NvcGVSZWNvcmRlcnMpIGNvbGxlY3Qocik7XG4gIGZvciAoY29uc3QgciBvZiBvYnNlcnZlcnMuZmxvd1JlY29yZGVycykgY29sbGVjdChyKTtcbiAgaWYgKG9ic2VydmVycy5kZWZlcnJlZFRpZXIpIHtcbiAgICBmb3IgKGNvbnN0IHIgb2Ygb2JzZXJ2ZXJzLmRlZmVycmVkVGllci5zY29wZUxpc3RSZWNvcmRlcnMoKSkgY29sbGVjdChyKTtcbiAgICBmb3IgKGNvbnN0IHIgb2Ygb2JzZXJ2ZXJzLmRlZmVycmVkVGllci5mbG93TGlzdFJlY29yZGVycygpKSBjb2xsZWN0KHIpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iXX0=
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3J1bm5lci9zbmFwc2hvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFJbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS3JEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUM1QixTQUF1QyxFQUN2QyxTQUF1QixFQUN2QixPQUE4QjtJQUU5QixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQW9CLENBQUMsQ0FBQztJQUM5RSxJQUFJLFNBQVMsRUFBRSxFQUFFLENBQUM7UUFDaEIsaUVBQWlFO1FBQ2pFLHVFQUF1RTtRQUN2RSx5REFBeUQ7UUFDekQsMkJBQTJCO1FBQzNCLGtFQUFrRTtRQUNsRSw4REFBOEQ7UUFDOUQsbUVBQW1FO1FBQ25FLHNFQUFzRTtRQUN0RSwyREFBMkQ7UUFDM0QsUUFBUSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNoRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdkIsd0VBQXdFO1FBQ3hFLHdEQUF3RDtRQUN4RCw0RUFBNEU7UUFDNUUsUUFBUSxDQUFDLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsTUFBTSxpQkFBaUIsR0FBRyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RCxJQUFJLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxRQUFRLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDO0lBQ3pDLENBQUM7SUFFRCxxRUFBcUU7SUFDckUsZ0VBQWdFO0lBQ2hFLDBDQUEwQztJQUMxQyxJQUFJLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQixRQUFRLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsU0FBUyxDQUFDLFFBQXlCO0lBQzFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxRQUFRLENBQUM7SUFDbEMsT0FBTztRQUNMLEdBQUcsUUFBUTtRQUNYLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFtQjtRQUMvRSxHQUFHLENBQUMsWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztLQUNuRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsU0FBdUI7SUFDOUQsTUFBTSxHQUFHLEdBQXVCLEVBQUUsQ0FBQztJQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQy9CLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBK0IsRUFBUSxFQUFFO1FBQ3hELElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUFFLE9BQU87UUFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQyxDQUFDO0lBQ0YsS0FBSyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsY0FBYztRQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxhQUFhO1FBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNCLEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRTtZQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUU7WUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogc25hcHNob3Qg4oCUIHdoYXQgYEZsb3dDaGFydEV4ZWN1dG9yLmdldFNuYXBzaG90KClgIHNlcnZlcyAoRjkpLlxuICpcbiAqIFRoZSB0cmF2ZXJzZXIncyBydW50aW1lIHNuYXBzaG90LCBwbHVzIHdoYXQgb25seSB0aGUgZXhlY3V0b3Iga25vd3M6IHRoZVxuICogc2VydmVkIHN1YmZsb3cgcmVzdWx0cyAoZWFjaCBzdWJmbG93J3Mgb3duIG1pcnJvciB1bmRlciBgcmVkYWN0OiB0cnVlYCksIG9uZVxuICogcmVjb3JkZXIgcm93IHBlciByZWNvcmRlciBpZCwgYW5kIHRoZSBkZWZlcnJlZCB0aWVyJ3MgYWNjb3VudGluZy5cbiAqL1xuXG5pbXBvcnQgeyBkZWVwRnJlZXplLCBzZXJ2ZVJlY29yZCB9IGZyb20gJy4uL2NhcHR1cmUvZnJlZXplLmpzJztcbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uL2Rldk1vZGUuanMnO1xuaW1wb3J0IHsgc2VydmVkU3ViZmxvd1Jlc3VsdHMgfSBmcm9tICcuLi9lbmdpbmUvaGFuZGxlcnMvc2VydmVkU3ViZmxvd1Jlc3VsdHMuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93UmVjb3JkZXIgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd2NoYXJ0VHJhdmVyc2VyIH0gZnJvbSAnLi4vZW5naW5lL3RyYXZlcnNhbC9GbG93Y2hhcnRUcmF2ZXJzZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBDb21taXRCdW5kbGUgfSBmcm9tICcuLi9tZW1vcnkvdHlwZXMuanMnO1xuaW1wb3J0IHsgY29weUJ1bmRsZSB9IGZyb20gJy4uL3JlY29yZGVyL3NuYXBzaG90LmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVSZWNvcmRlciB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUnVuT2JzZXJ2ZXJzIH0gZnJvbSAnLi9hdHRhY2guanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRlclNuYXBzaG90LCBSdW50aW1lU25hcHNob3QgfSBmcm9tICcuL0V4ZWN1dGlvblJ1bnRpbWUuanMnO1xuXG4vKipcbiAqIFRoZSBzZXJ2ZWQgc25hcHNob3QuIGBzaGFyZWRTdGF0ZWAgaXMgdGhlIExJVkUgdmlldyBpbiBwcm9kdWN0aW9uICh6ZXJvXG4gKiBjb3B5KTsgaW4gZGV2IG1vZGUgaXQgaXMgYSBkZWVwLWZyb3plbiBDTE9ORSwgc28gYSBjb25zdW1lciBtdXRhdGlvbiB0aHJvd3NcbiAqIGluc3RlYWQgb2YgY29ycnVwdGluZyBlbmdpbmUgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2ZWRTbmFwc2hvdChcbiAgdHJhdmVyc2VyOiBGbG93Y2hhcnRUcmF2ZXJzZXI8YW55LCBhbnk+LFxuICBvYnNlcnZlcnM6IFJ1bk9ic2VydmVycyxcbiAgb3B0aW9ucz86IHsgcmVkYWN0PzogYm9vbGVhbiB9LFxuKTogUnVudGltZVNuYXBzaG90IHtcbiAgY29uc3Qgc25hcHNob3QgPSBzZXJ2ZWRMb2codHJhdmVyc2VyLmdldFNuYXBzaG90KG9wdGlvbnMpIGFzIFJ1bnRpbWVTbmFwc2hvdCk7XG4gIGlmIChpc0Rldk1vZGUoKSkge1xuICAgIC8vIERldi1tb2RlIG11dGF0aW9uIGd1YXJkOiBmcmVlemUgYSBDTE9ORSwgbmV2ZXIgdGhlIGxpdmUgZW5naW5lXG4gICAgLy8gc3RhdGUg4oCUIGBzbmFwc2hvdC5zaGFyZWRTdGF0ZWAgSVMgU2hhcmVkTWVtb3J5J3MgY3VycmVudCBnZW5lcmF0aW9uLFxuICAgIC8vIHdob3NlIHVuY2hhbmdlZCBzdWJ0cmVlcyBldmVyeSBsYXRlciBnZW5lcmF0aW9uIHNoYXJlc1xuICAgIC8vIChjb3B5LW9uLXdyaXRlLCA5LjI5LjApLlxuICAgIC8vIFByb2R1Y3Rpb24gc3RheXMgemVyby1jb3B5OyBjbG9uZS1hbHdheXMgaXMgYSBtZWFzdXJlZCBkZWNpc2lvblxuICAgIC8vIGRlZmVycmVkIHVudGlsIHRoZSBiZW5jaCBzYXlzIGl0J3MgYWZmb3JkYWJsZSAoQkFDS0xPRyAjOCkuXG4gICAgLy8gTk9URTogZGVlcEZyZWV6ZSAoY2FwdHVyZS9mcmVlemUudHMg4oCUIHRoZSBvbmUgd2FsaykgY2Fubm90IHJlYWNoXG4gICAgLy8gTWFwL1NldCBJTlRFUk5BTFMgKGBtYXAuc2V0KClgIG9uIHRoZSBmcm96ZW4gY2xvbmUgd29uJ3QgdGhyb3cpIGFuZFxuICAgIC8vIHNraXBzIHR5cGVkIGFycmF5cy4gVGhlIENMT05FIHN0aWxsIGlzb2xhdGVzIHRoZSBlbmdpbmUuXG4gICAgc25hcHNob3Quc2hhcmVkU3RhdGUgPSBkZWVwRnJlZXplKHN0cnVjdHVyZWRDbG9uZShzbmFwc2hvdC5zaGFyZWRTdGF0ZSkpO1xuICB9XG4gIGNvbnN0IHNmUmVzdWx0cyA9IHRyYXZlcnNlci5nZXRTdWJmbG93UmVzdWx0cygpO1xuICBpZiAoc2ZSZXN1bHRzLnNpemUgPiAwKSB7XG4gICAgLy8gVW5kZXIgYHJlZGFjdDogdHJ1ZWAgZWFjaCBzdWJmbG93J3MgYGdsb2JhbENvbnRleHRgIGlzIGl0cyBvd24gbWlycm9yXG4gICAgLy8gKDkuMjAuMCkg4oCUIHNlcnZlZCwgbmV2ZXIgd3JpdHRlbiBpbnRvIHRoZSByZWNvcmQgKHNlZVxuICAgIC8vIGVuZ2luZS9oYW5kbGVycy9zZXJ2ZWRTdWJmbG93UmVzdWx0cy50cykuIFBsYWluOiB0aGUgcmVjb3JkcyBhcyB0aGV5IGFyZS5cbiAgICBzbmFwc2hvdC5zdWJmbG93UmVzdWx0cyA9IHNlcnZlZFN1YmZsb3dSZXN1bHRzKHNmUmVzdWx0cywgb3B0aW9ucz8ucmVkYWN0ID09PSB0cnVlKTtcbiAgfVxuXG4gIGNvbnN0IHJlY29yZGVyU25hcHNob3RzID0gY29sbGVjdFJlY29yZGVyU25hcHNob3RzKG9ic2VydmVycyk7XG4gIGlmIChyZWNvcmRlclNuYXBzaG90cy5sZW5ndGggPiAwKSB7XG4gICAgc25hcHNob3QucmVjb3JkZXJzID0gcmVjb3JkZXJTbmFwc2hvdHM7XG4gIH1cblxuICAvLyBSRkMtMDAxIEJsb2NrIDk6IHRoZSBkZWZlcnJlZC1vYnNlcnZlciBhY2NvdW50aW5nIHN1cmZhY2UuIFByZXNlbnRcbiAgLy8gT05MWSB3aGVuIGEgZGVmZXJyZWQgb2JzZXJ2ZXIgd2FzIGF0dGFjaGVkIG9uIHRoaXMgZXhlY3V0b3Ig4oCUXG4gIC8vIHplcm8tY29zdCBkaXNjaXBsaW5lIGZvciBldmVyeW9uZSBlbHNlLlxuICBpZiAob2JzZXJ2ZXJzLmRlZmVycmVkVGllcikge1xuICAgIHNuYXBzaG90Lm9ic2VydmVyU3RhdHMgPSBvYnNlcnZlcnMuZGVmZXJyZWRUaWVyLmdldFN0YXRzKCk7XG4gIH1cblxuICByZXR1cm4gc25hcHNob3Q7XG59XG5cbi8qKlxuICogVGhlIGNvbW1pdCBsb2cgYW5kIHRoZSBmb2xkIGJhc2UgYXMgYSByZWFkZXIgbWF5IGhvbGQgdGhlbSAoOS40NC4yKTogYSByZWNvcmQgZnJlZXppbmcgc2VhbGVkIHdob2xlXG4gKiBpcyBzZXJ2ZWQgYXMgaXRzZWxmOyBvbmUgaG9sZGluZyB3aGF0IGZyZWV6aW5nIGNhbm5vdCBzZWFsIOKAlCBhIERhdGUsIGEgTWFwLCBhIGJ1ZmZlciDigKYg4oCUIGFzIGEgY29weVxuICogb2YgaXRzIG9wZW4gcGF0aHMsIHRoZSByZWFkZXIncyBvd24gKGBjYXB0dXJlL2ZyZWV6ZS50cyDCtyBzZXJ2ZVJlY29yZGApLiBIZXJlLCBhdCB0aGUgcHVibGljIGRvb3I6XG4gKiB0aGUgZW5naW5lJ3Mgb3duIHNuYXBzaG90IG9mIGEgbG9nIChhIHN1YmZsb3cgbW91bnQncykgaXMgbm90IHNlcnZlZCwgc28gdGhlIHJ1biBwYXlzIG5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIHNlcnZlZExvZyhzbmFwc2hvdDogUnVudGltZVNuYXBzaG90KTogUnVudGltZVNuYXBzaG90IHtcbiAgY29uc3QgeyBpbml0aWFsU3RhdGUgfSA9IHNuYXBzaG90O1xuICByZXR1cm4ge1xuICAgIC4uLnNuYXBzaG90LFxuICAgIGNvbW1pdExvZzogT2JqZWN0LmZyZWV6ZShzbmFwc2hvdC5jb21taXRMb2cubWFwKHNlcnZlUmVjb3JkKSkgYXMgQ29tbWl0QnVuZGxlW10sXG4gICAgLi4uKGluaXRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkID8ge30gOiB7IGluaXRpYWxTdGF0ZTogc2VydmVSZWNvcmQoaW5pdGlhbFN0YXRlKSB9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGB0b1NuYXBzaG90KClgIGJ1bmRsZXMgZnJvbSBldmVyeSBhdHRhY2hlZCByZWNvcmRlciDigJQgT05FIGVudHJ5XG4gKiBwZXIgcmVjb3JkZXIgaWQsIGFjcm9zcyBhbGwgY2hhbm5lbHMgYW5kIGJvdGggZGVsaXZlcnkgdGllcnMuXG4gKlxuICogVGhlIGRlZHVwZSBpcyBsb2FkLWJlYXJpbmcsIG5vdCB0aWRpbmVzcy4gQSByZWNvcmRlciB0aGF0IGltcGxlbWVudHMgYVxuICogc2hhcmVkLW5hbWUgaG9vayAoYG9uRXJyb3JgIC8gYG9uUGF1c2VgIC8gYG9uUmVzdW1lYCDigJQgZGVjbGFyZWQgb24gQk9USFxuICogdGhlIHNjb3BlIGFuZCBmbG93IGludGVyZmFjZXMpIGlzIGxlZ2l0aW1hdGVseSByZWdpc3RlcmVkIG9uIEJPVEggaW5saW5lXG4gKiBsaXN0cyBieSBgYXR0YWNoQ29tYmluZWRSZWNvcmRlcmAsIGFuZCB0aGF0IGlzIGJ5IGRlc2lnbjogZWFjaCBjaGFubmVsXG4gKiBjYWxscyB0aGUgaG9vayB3aXRoIGl0cyBvd24gcGF5bG9hZCB2YXJpYW50LiBgTWV0cmljUmVjb3JkZXIub25QYXVzZWAgaXNcbiAqIHRoZSBldmVyeWRheSBjYXNlLiBXYWxraW5nIHRoZSBsaXN0cyB3aXRob3V0IGEgc2hhcmVkIGBzZWVuYCBzZXQgdHVybmVkXG4gKiB0aGF0IGludG8gYSBEVVBMSUNBVEVEIHNuYXBzaG90IGVudHJ5IChzYW1lIGlkIHR3aWNlKSwgd2hpY2ggYnJlYWtzIGV2ZXJ5XG4gKiBjb25zdW1lciB0aGF0IGluZGV4ZXMgYHNuYXBzaG90LnJlY29yZGVyc2AgYnkgaWQuXG4gKlxuICogT3JkZXJpbmcgaXMgc2NvcGUgbGlzdCDihpIgZmxvdyBsaXN0IOKGkiBkZWZlcnJlZCB0aWVyLCBhbmQgdGhlIEZJUlNUIGJ1bmRsZVxuICogZm9yIGFuIGlkIHdpbnMuIEEgcmVjb3JkZXIgd2l0aCBubyBgdG9TbmFwc2hvdGAgbmV2ZXIgY2xhaW1zIGFuIGlkLCBzbyBpdFxuICogY2Fubm90IHNoYWRvdyBhIHNhbWUtaWQgcmVjb3JkZXIgdGhhdCBkb2VzIGhhdmUgb25lLlxuICpcbiAqIFRoZSByb3cgaXMgUkVCVUlMVCBmaWVsZCBieSBmaWVsZCBieSB0aGUgb25lIGNvcGllciAoYHJlY29yZGVyL3NuYXBzaG90LnRzXG4gKiDCtyBjb3B5QnVuZGxlYCwgc2hhcmVkIHdpdGggYENvbXBvc2l0ZVJlY29yZGVyYCkgcmF0aGVyIHRoYW4gc3ByZWFkLCBzbyBhXG4gKiByZWNvcmRlciBjYW5ub3Qgc211Z2dsZSBhbiBgaWRgIG9mIGl0cyBvd24gY2hvb3NpbmcgaW50byB0aGUgc25hcHNob3QgKHRoZVxuICogaWQgaXMgdGhlIGV4ZWN1dG9yJ3MsIGFuZCBjb25zdW1lcnMgaW5kZXggYnkgaXQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFJlY29yZGVyU25hcHNob3RzKG9ic2VydmVyczogUnVuT2JzZXJ2ZXJzKTogUmVjb3JkZXJTbmFwc2hvdFtdIHtcbiAgY29uc3Qgb3V0OiBSZWNvcmRlclNuYXBzaG90W10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBjb2xsZWN0ID0gKHI6IFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXIpOiB2b2lkID0+IHtcbiAgICBpZiAoIXIudG9TbmFwc2hvdCB8fCBzZWVuLmhhcyhyLmlkKSkgcmV0dXJuO1xuICAgIHNlZW4uYWRkKHIuaWQpO1xuICAgIG91dC5wdXNoKGNvcHlCdW5kbGUoci5pZCwgci50b1NuYXBzaG90KCkpKTtcbiAgfTtcbiAgZm9yIChjb25zdCByIG9mIG9ic2VydmVycy5zY29wZVJlY29yZGVycykgY29sbGVjdChyKTtcbiAgZm9yIChjb25zdCByIG9mIG9ic2VydmVycy5mbG93UmVjb3JkZXJzKSBjb2xsZWN0KHIpO1xuICBpZiAob2JzZXJ2ZXJzLmRlZmVycmVkVGllcikge1xuICAgIGZvciAoY29uc3QgciBvZiBvYnNlcnZlcnMuZGVmZXJyZWRUaWVyLnNjb3BlTGlzdFJlY29yZGVycygpKSBjb2xsZWN0KHIpO1xuICAgIGZvciAoY29uc3QgciBvZiBvYnNlcnZlcnMuZGVmZXJyZWRUaWVyLmZsb3dMaXN0UmVjb3JkZXJzKCkpIGNvbGxlY3Qocik7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiJdfQ==
|
|
@@ -57,7 +57,7 @@ function isStrictPrefix(prev, next) {
|
|
|
57
57
|
if (prev.length > next.length)
|
|
58
58
|
return false;
|
|
59
59
|
for (let i = 0; i < prev.length; i++) {
|
|
60
|
-
if (!deepEqual(prev[i], next[i]))
|
|
60
|
+
if (!deepEqual(prev[i], next[i], 'copies'))
|
|
61
61
|
return false;
|
|
62
62
|
}
|
|
63
63
|
return true;
|
|
@@ -187,4 +187,4 @@ export function elementProvenance(commitLog, key, index, options) {
|
|
|
187
187
|
const birth = prov.births[index];
|
|
188
188
|
return prov.basis === undefined ? birth : { ...birth, valueBasis: prov.basis };
|
|
189
189
|
}
|
|
190
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudFByb3ZlbmFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NsaWNlL2VsZW1lbnRQcm92ZW5hbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaURHO0FBRUgsT0FBTyxFQUFtQixzQkFBc0IsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFaEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQWMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR3JELG9FQUFvRTtBQUNwRSxTQUFTLGNBQWMsQ0FBQyxJQUFlLEVBQUUsSUFBZTtJQUN0RCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2pELENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxLQUFhLEVBQUUsS0FBWSxFQUFFLEtBQXVCLEVBQUUsS0FBYztJQUNuRixPQUFPO1FBQ0wsS0FBSztRQUNMLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztRQUMxQixjQUFjLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxj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LENBQUMsQ0FBQztJQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMvRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHNsaWNlL2VsZW1lbnRQcm92ZW5hbmNlLnRzIOKAlCBBUFBFTkQtRk9MRCBQUk9WRU5BTkNFLlxuICpcbiAqIFRIRSBQUk9CTEVNICh3aHkgdGhpcyBmaWxlIGV4aXN0cyk6IGluIGFnZW50IGNoYXJ0cywgYWxtb3N0IGFsbCBkYXRhZmxvd1xuICogZnVubmVscyB0aHJvdWdoIE9ORSBhcnJheSBrZXkgKGBoaXN0b3J5YCkuIEEga2V5LWxldmVsIHNsaWNlIG9uIGl0XG4gKiBkZWdlbmVyYXRlcyB0byBcImV2ZXJ5dGhpbmcgZGVwZW5kcyBvbiBoaXN0b3J5XCIg4oCUIHRydWUgYW5kIHVzZWxlc3MuIFRoZVxuICogcXVlc3Rpb24gdGhhdCBhY3R1YWxseSB0cmlhZ2VzIGFuIGFnZW50IHJ1biBpcyBlbGVtZW50LWxldmVsOlxuICogXCJ3aGljaCBzdGFnZSBwcm9kdWNlZCBoaXN0b3J5WzddP1wiLlxuICpcbiAqIFRIRSBJTlNJR0hUOiB0aGUgY29tbWl0IGxvZyBhbHJlYWR5IGNvbnRhaW5zIHRoZSBhbnN3ZXIuIFVuZGVyXG4gKiBgY29tbWl0VmFsdWVzOiAnZGVsdGEnYCBldmVyeSBhcnJheSBncm93dGggaXMgcmVjb3JkZWQgYXMgYW4gYGFwcGVuZGAgdmVyYlxuICogd2hvc2UgYG92ZXJ3cml0ZVtrZXldYCBob2xkcyBleGFjdGx5IHRoZSBuZXcgdGFpbCDigJQgZWFjaCBlbGVtZW50IGhhcyBhblxuICogZXhwbGljaXQgYmlydGggcmVjb3JkLiBVbmRlciBgJ2Z1bGwnYCBtb2RlLCBwdXNoLXN0eWxlIGdyb3d0aCBhcHBlYXJzIGFzXG4gKiBjb25zZWN1dGl2ZSBgc2V0YHMgd2hlcmUgdGhlIHByZXZpb3VzIGFycmF5IGlzIGEgc3RyaWN0IHByZWZpeCBvZiB0aGUgbmV4dFxuICog4oCUIHRoZSB0YWlsIGlzIGF0dHJpYnV0YWJsZSBieSBpbmZlcmVuY2UuIE5vIG5ldyBjYXB0dXJlIGlzIG5lZWRlZDsgdGhpcyBpc1xuICogYSBwdXJlIHBvc3QtaG9jIHF1ZXJ5LlxuICpcbiAqIFRIRSBBTEdPUklUSE0gKGFwcGVuZC1mb2xkKTogV0FUQ0ggdGhlIHBlci1rZXkgdmVyYiBmb2xkIOKAlCB0aGUgU0FNRSBmb2xkXG4gKiBgY29tbWl0VmFsdWVBdGAgcnVucyAoYG1lbW9yeS92ZXJicy50c2AgwrcgYGZvbGRLZXlgOiBvbmUgc3RlcCwgYGFwcGx5VmVyYmAsXG4gKiBmb3IgZXZlcnkgdmVyYjsgdGhpcyBmaWxlIGhhcyBubyB2ZXJiIHN3aXRjaCBvZiBpdHMgb3duKSDigJQgd2hpbGUgY2FycnlpbmcgYVxuICogYmlydGhzIGFycmF5IGtlcHQgaW5kZXgtYWxpZ25lZCB3aXRoIHRoZSB2YWx1ZS4gVGhlIG9ic2VydmVyIGlzIHRvbGQsIGFmdGVyXG4gKiBlYWNoIHJvdyBvbiwgaW5zaWRlIG9yIGFyb3VuZCB0aGUga2V5LCB0aGUgdmFsdWUgYXQgdGhlIGtleSBiZWZvcmUgaXQgYW5kXG4gKiBhZnRlciBpdCwgYW5kIGtlZXBzIHRoZSBiaXJ0aHMg4oCUIGZvciB0aGUgY29tbWl0cyB0aGF0IFdST1RFIHRoZSBrZXkgdW5kZXJcbiAqIHRoZSB3cml0ZXIgcnVsZSAoYGNvbW1pdExvZ1V0aWxzIMK3IHdyaXRlcnNPZmA7IHNpbmNlIDkuMzMuMCBhIHdyaXRlIGluc2lkZVxuICogdGhlIGtleSBvciBhcm91bmQgaXQgY291bnRzLCBhcyBpdCBkb2VzIGZvciBldmVyeSBrZXkgcXVlcnkpOiBhIHJvdyB0aGF0XG4gKiByZWNvcmRzIG9ubHkgaXRzIHRhaWwgKGBhcHBlbmRgKSBlYXJucyBhbiBleGFjdCBhdHRyaWJ1dGlvbjsgZXZlcnkgb3RoZXIgcm93XG4gKiBpcyBhIHdob2xlLXZhbHVlIHRyYW5zaXRpb24gYXR0cmlidXRlZCBieSBpbmZlcmVuY2UuIE9uZSBkaWZmZXJlbmNlIGZyb21cbiAqIGBjb21taXRWYWx1ZUF0YDogdGhhdCBoZWxwZXIgQU5DSE9SUyBhdCB0aGUgbGF0ZXN0IGBzZXRgL2BkZWxldGVgIGFzIGEgc2tpcFxuICogb3B0aW1pemF0aW9uIChlYXJsaWVyIGNvbW1pdHMgY2Fubm90IGNoYW5nZSB0aGUgZmluYWwgVkFMVUUpLiBQcm92ZW5hbmNlXG4gKiBtdXN0IGZvbGQgZnJvbSB0aGUgRklSU1QgdG91Y2gsIGJlY2F1c2UgZnVsbC1tb2RlIGdyb3d0aCBpcyBhIGNoYWluIG9mXG4gKiBgc2V0YHMgYW5kIHRoZSBhbmNob3Igd291bGQgZXJhc2UgZXZlcnkgYmlydGggYnV0IHRoZSBsYXN0LiBUaGUgZmluYWwgdmFsdWVcbiAqIGlzIGlkZW50aWNhbCBlaXRoZXIgd2F5ICh0aGUgZm9sZCBpcyBkZXRlcm1pbmlzdGljIGxlZnQtdG8tcmlnaHQpIOKAlCBhXG4gKiBwcm9wZXJ0eSB0ZXN0IHBpbnMgdGhpcyBlcXVpdmFsZW5jZS5cbiAqXG4gKiBJTlZBUklBTlQgKG1haW50YWluZWQgb24gZXZlcnkgYnJhbmNoKTogd2hlbiB0aGUgZm9sZGVkIHZhbHVlIGlzIGFuIGFycmF5LFxuICogYGJpcnRocy5sZW5ndGggPT09IHZhbHVlLmxlbmd0aGAgYW5kIGBiaXJ0aHNbaV1gIGRlc2NyaWJlcyBgdmFsdWVbaV1gLlxuICpcbiAqIEhPTkVTVFk6IGV2ZXJ5IGJpcnRoIGlzIGxhYmVsZWQgd2l0aCBob3cgaXQgd2FzIGRldGVybWluZWRcbiAqICh7QGxpbmsgQXR0cmlidXRpb25CYXNpc30pIOKAlCBgJ2FwcGVuZC12ZXJiJ2AgaXMgZW5naW5lLXJlY29yZGVkIHRydXRoLFxuICogYCdwcmVmaXgtaW5mZXJlbmNlJ2AgaXMgYSBoZXVyaXN0aWMgKGEgd2hvbGVzYWxlIHJlcGxhY2VtZW50IHRoYXQgaGFwcGVuc1xuICogdG8gc2hhcmUgdGhlIG9sZCBwcmVmaXggaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBhcHBlbmQpLCBhbmRcbiAqIGAnd2hvbGUtdmFsdWUnYCBpcyBhbiBleHBsaWNpdCByZXNldC4gQWJzZW5jZSBpcyBob25lc3QgdG9vOiBhIG1pc3NpbmdcbiAqIHByb3ZlbmFuY2UgY2FycmllcyBhIHtAbGluayBNaXNzaW5nUHJvdmVuYW5jZVJlYXNvbn0sIG1pcnJvcmluZ1xuICogYFZhcmlhYmxlU2xpY2UubWlzc2luZ2Ag4oCUIG9uZSBhYnNlbmNlIHBhdHRlcm4gbW9kdWxlLXdpZGUuXG4gKlxuICogQ09NUExFWElUWTogZGVsdGEtbW9kZSBsb2dzIG5lZWQgbm8gZXF1YWxpdHkgY2hlY2tzIOKAlCBPKHRvdGFsIGVsZW1lbnRzKS5cbiAqIEZ1bGwtbW9kZSBsb2dzIHBheSBhIHN0cmljdC1wcmVmaXggY2hlY2sgKGRlZXBFcXVhbCBwZXIgZWxlbWVudCkgcGVyXG4gKiBmdWxsLXZhbHVlIHRvdWNoOiBPKHRvdWNoZXMgw5cgbGVuZ3RoKSBlbGVtZW50IGNvbXBhcmlzb25zIHdvcnN0IGNhc2UuXG4gKiBQb3N0LWhvYyBxdWVyeSwgb2ZmIHRoZSBob3QgcGF0aCDigJQgYWNjZXB0YWJsZTsgbWVhc3VyZWQgaW4gdGhlIHBlcmYgdGVzdHMuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBWYWx1ZUJhc2lzLCBjb21taXRWYWx1ZUF0V2l0aEJhc2lzLCByb3dzVW5kZXJSb290LCB3cml0ZXJzT2YgfSBmcm9tICcuLi9tZW1vcnkvY29tbWl0TG9nVXRpbHMuanMnO1xuaW1wb3J0IHR5cGUgeyBDb21taXRCdW5kbGUgfSBmcm9tICcuLi9tZW1vcnkvdHlwZXMuanMnO1xuaW1wb3J0IHsgZGVlcEVxdWFsLCBERUxJTSB9IGZyb20gJy4uL21lbW9yeS91dGlscy5qcyc7XG5pbXBvcnQgeyB0eXBlIFRvdWNoLCBmb2xkS2V5LCByZWNvcmRzVGFpbCB9IGZyb20gJy4uL21lbW9yeS92ZXJicy5qcyc7XG5pbXBvcnQgeyBub3JtYWxpc2VTdGF0ZUtleSB9IGZyb20gJy4vc2xpY2VGb3JLZXkuanMnO1xuaW1wb3J0IHR5cGUgeyBBcnJheVByb3ZlbmFuY2UsIEF0dHJpYnV0aW9uQmFzaXMsIEVsZW1lbnRCaXJ0aCwgU3RhdGVLZXkgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIGBwcmV2YCBpcyBhIHN0cmljdCAobGVhZGluZywgZWxlbWVudC1lcXVhbCkgcHJlZml4IG9mIGBuZXh0YC4gKi9cbmZ1bmN0aW9uIGlzU3RyaWN0UHJlZml4KHByZXY6IHVua25vd25bXSwgbmV4dDogdW5rbm93bltdKTogYm9vbGVhbiB7XG4gIGlmIChwcmV2Lmxlbmd0aCA+IG5leHQubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldi5sZW5ndGg7IGkrKykge1xuICAgIGlmICghZGVlcEVxdWFsKHByZXZbaV0sIG5leHRbaV0pKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGJpcnRoT2YoaW5kZXg6IG51bWJlciwgdG91Y2g6IFRvdWNoLCBiYXNpczogQXR0cmlidXRpb25CYXNpcywgdmFsdWU6IHVua25vd24pOiBFbGVtZW50QmlydGgge1xuICByZXR1cm4ge1xuICAgIGluZGV4LFxuICAgIGNvbW1pdElkeDogdG91Y2guY29tbWl0SWR4LFxuICAgIHJ1bnRpbWVTdGFnZUlkOiB0b3VjaC5idW5kbGUucnVudGltZVN0YWdlSWQsXG4gICAgc3RhZ2VJZDogdG91Y2guYnVuZGxlLnN0YWdlSWQsXG4gICAgc3RhZ2VOYW1lOiB0b3VjaC5idW5kbGUuc3RhZ2UsXG4gICAgdmVyYjogdG91Y2gudmVyYixcbiAgICBiYXNpcyxcbiAgICB2YWx1ZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBFbGVtZW50LWxldmVsIHByb3ZlbmFuY2UgZm9yIG9uZSBhcnJheS12YWx1ZWQga2V5OiBmb2xkIHRoZSBrZXkncyBjb21taXRzXG4gKiBhbmQgcmV0dXJuIGluZGV4LWFsaWduZWQgYmlydGggcmVjb3JkcyBmb3IgZXZlcnkgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ga2V5IEEge0BsaW5rIFN0YXRlS2V5fTogdGhlIHRvcC1sZXZlbCBrZXkgc3RyaW5nLCBvciBhIHBhdGggYXJyYXlcbiAqICAgZm9yIG5lc3RlZCBrZXlzIChub3JtYWxpc2VkIGludGVybmFsbHkg4oCUIG5vIGVuZ2luZSBkZWxpbWl0ZXJzIG5lZWRlZCkuXG4gKiBAcGFyYW0gb3B0aW9ucy5hdElkeCBJbmNsdXNpdmUgY29tbWl0IGFycmF5IGluZGV4IHRvIGZvbGQgdG8gKGRlZmF1bHQ6IHRoZVxuICogICB3aG9sZSBsb2cpLiBOT1QgdGhlIGV4ZWN1dGlvbkluZGV4IGZyb20gYSBydW50aW1lU3RhZ2VJZC5cbiAqIEByZXR1cm5zIEFsd2F5cyBhbiB7QGxpbmsgQXJyYXlQcm92ZW5hbmNlfTsgb24gZmFpbHVyZSBgbWlzc2luZ2Agc2F5cyB3aHlcbiAqICAgKGAnbm90LWFuLWFycmF5J2AgZm9yIHNjYWxhci9kZWxldGVkL2RlZ3JhZGVkIGtleXMg4oCUIHRob3NlIGFyZVxuICogICBgc2xpY2VGb3JLZXlgIHRlcnJpdG9yeSkuIEJsaW5kIHNwb3Qgc2hhcmVkIHdpdGggdGhlIHdob2xlIGNvbW1pdC1sb2dcbiAqICAgZmFtaWx5OiBlbGVtZW50cyBwcmVzZW50IGluIHRoZSBydW4ncyBJTklUSUFMIHN0YXRlIChzZWVkZWQsIG5ldmVyXG4gKiAgIHJlLXNldCBpbiByYW5nZSkgYXJlIGludmlzaWJsZSBoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlQcm92ZW5hbmNlKFxuICBjb21taXRMb2c6IENvbW1pdEJ1bmRsZVtdLFxuICBrZXk6IFN0YXRlS2V5LFxuICBvcHRpb25zPzogeyBhdElkeD86IG51bWJlciB9LFxuKTogQXJyYXlQcm92ZW5hbmNlIHtcbiAgY29uc3Qgbm9ybWFsaXNlZEtleSA9IG5vcm1hbGlzZVN0YXRlS2V5KGtleSk7XG4gIGlmIChjb21taXRMb2cubGVuZ3RoID09PSAwKSByZXR1cm4geyBrZXk6IG5vcm1hbGlzZWRLZXksIG1pc3Npbmc6ICdlbXB0eS1sb2cnIH07XG4gIGNvbnN0IGVuZCA9IE1hdGgubWluKG9wdGlvbnM/LmF0SWR4ID8/IGNvbW1pdExvZy5sZW5ndGggLSAxLCBjb21taXRMb2cubGVuZ3RoIC0gMSk7XG4gIGNvbnN0IHNlZ3MgPSBub3JtYWxpc2VkS2V5LnNwbGl0KERFTElNKTtcblxuICAvLyBFdmVyeSByb3cgdW5kZXIgdGhlIGtleSdzIHRvcC1sZXZlbCBrZXkgdXAgdG8gYGVuZGAsIGluIGNvbW1pdCBvcmRlciDigJQgdGhlXG4gIC8vIHJvd3MgY29tbWl0VmFsdWVBdCBmb2xkcyAocmVmdXNpbmcgYSB2ZXJiIHRoZSBsYXcgZG9lcyBub3Qga25vdyksIHdpdGggdGhlXG4gIC8vIGNvbW1pdCBwb3NpdGlvbiB0aGUgYmlydGggcmVjb3JkcyBuZWVkLlxuICBjb25zdCByb3dzID0gcm93c1VuZGVyUm9vdChjb21taXRMb2csIG5vcm1hbGlzZWRLZXksIGVuZCk7XG4gIC8vIFRoZSBjb21taXRzIHRoYXQgV1JPVEUgdGhlIGtleSDigJQgdGhlIHdyaXRlciBydWxlIGV2ZXJ5IGtleSBxdWVyeSBzaGFyZXMuXG4gIGNvbnN0IHdyaXRlcnMgPSBuZXcgU2V0KHdyaXRlcnNPZihjb21taXRMb2csIG5vcm1hbGlzZWRLZXksIHsgZW5kIH0pKTtcbiAgLy8gRjRiOiB3aGF0IHRoZSB2YWx1ZSBhdCBgZW5kYCByZXN0cyBvbiDigJQgdGhlIGJhc2lzIHR3aW4ncyBjb2RlcywgbGVzcyB3aGF0IGBtaXNzaW5nYCBhbHJlYWR5IHNheXMuXG4gIGNvbnN0IHsgYmFzaXMgfSA9IGNvbW1pdFZhbHVlQXRXaXRoQmFzaXMoY29tbWl0TG9nLCBlbmQsIG5vcm1hbGlzZWRLZXkpO1xuICBjb25zdCBzYWlkID0gKGFsc286IFZhbHVlQmFzaXNbXSkgPT4ge1xuICAgIGNvbnN0IHJlc3QgPSBiYXNpcy5maWx0ZXIoKGMpID0+ICFhbHNvLmluY2x1ZGVzKGMpKTtcbiAgICByZXR1cm4gcmVzdC5sZW5ndGggPiAwID8geyBiYXNpczogcmVzdCB9IDoge307XG4gIH07XG4gIGlmICh3cml0ZXJzLnNpemUgPT09IDApXG4gICAgcmV0dXJuIHsga2V5OiBub3JtYWxpc2VkS2V5LCBtaXNzaW5nOiAnbmV2ZXItd3JpdHRlbicsIC4uLnNhaWQoWyduZXZlci13cml0dGVuJywgJ2Zyb20taW5pdGlhbC1zdGF0ZSddKSB9O1xuXG4gIC8vIFRoZSBhcHBlbmQtZm9sZDogdGhlIGtleSdzIG9uZSBmb2xkLCB3YXRjaGVkLiBgYmlydGhzYCBpcyB0aGUgYWRkZWRcbiAgLy8gcHJvdmVuYW5jZSB0cmFjaywgaW5kZXgtYWxpZ25lZCB3aGVuZXZlciB0aGUgdmFsdWUgaXMgYW4gYXJyYXkgKHRoZVxuICAvLyBtb2R1bGUgaW52YXJpYW50KS4gQSByb3cgb2YgYSBjb21taXQgdGhhdCBkaWQgbm90IHdyaXRlIHRoZSBrZXkgKGEgbWVyZ2VcbiAgLy8gYXJvdW5kIGl0IHRoYXQgbmV2ZXIgcmVhY2hlZCBpdCkgbW92ZXMgbm8gYmlydGguXG4gIGxldCBiaXJ0aHM6IEVsZW1lbnRCaXJ0aFtdID0gW107XG4gIGNvbnN0IHZhbHVlID0gZm9sZEtleShyb3dzLCBzZWdzLCB7XG4gICAgb2JzZXJ2ZTogKHRvdWNoLCBiZWZvcmUsIGFmdGVyKSA9PiB7XG4gICAgICBpZiAod3JpdGVycy5oYXModG91Y2guY29tbWl0SWR4KSkgYmlydGhzID0gbmV4dEJpcnRocyhiaXJ0aHMsIHRvdWNoLCBiZWZvcmUsIGFmdGVyKTtcbiAgICB9LFxuICB9KTtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4geyBrZXk6IG5vcm1hbGlzZWRLZXksIG1pc3Npbmc6ICdub3QtYW4tYXJyYXknLCAuLi5zYWlkKFtdKSB9O1xuICByZXR1cm4geyBrZXk6IG5vcm1hbGlzZWRLZXksIGF0SWR4OiBlbmQsIGxlbmd0aDogdmFsdWUubGVuZ3RoLCBiaXJ0aHMsIC4uLnNhaWQoW10pIH07XG59XG5cbi8qKlxuICogVGhlIGJpcnRocyBhZnRlciBvbmUgcm93IG9mIHRoZSBmb2xkLCBmcm9tIHRoZSB2YWx1ZSBiZWZvcmUgaXQgYW5kIGFmdGVyIGl0LlxuICpcbiAqIEEgcm93IHRoYXQgcmVjb3JkcyBvbmx5IGl0cyBUQUlMIChgYXBwZW5kYCkga25vd3MgZXhhY3RseSB3aGF0IGl0IGFkZGVkIOKAlFxuICogYCdhcHBlbmQtdmVyYidgLCBubyBlcXVhbGl0eSBjaGVja3MsIE8odGFpbCkuIEV2ZXJ5IG90aGVyIHJvdyDigJQgYSBgc2V0YCwgYVxuICogYG1lcmdlYCwgYSBgZGVsZXRlYCDigJQgaXMgYSB3aG9sZS12YWx1ZSB0cmFuc2l0aW9uOiBhdHRyaWJ1dGVkIGJ5IGluZmVyZW5jZVxuICogKHtAbGluayByZWJhc2VCaXJ0aHN9KSwgYW5kIGEgbm9uLWFycmF5IHJlc3VsdCAoYSBgZGVsZXRlYCBsZWF2ZXMgbm9uZSkgZW5kc1xuICogdGhlIHRyYWNrLlxuICovXG5mdW5jdGlvbiBuZXh0QmlydGhzKGJpcnRoczogRWxlbWVudEJpcnRoW10sIHRvdWNoOiBUb3VjaCwgYmVmb3JlOiB1bmtub3duLCBhZnRlcjogdW5rbm93bik6IEVsZW1lbnRCaXJ0aFtdIHtcbiAgLy8gQW4gYGFwcGVuZGAgcmVjb3JkcyB0aGUgdGFpbCBvZiBJVFMgT1dOIHBhdGguIE9uIGEgY29udGFpbmVyIGFyb3VuZCB0aGUga2V5IChvciBhIHBhdGggaW5zaWRlIGl0KSB0aGVcbiAgLy8ga2V5J3MgdmFsdWUgY2hhbmdlZCB3aG9sZXNhbGUg4oCUIGBhcHBlbmQgYWAgd2l0aCBhIG5vbi1hcnJheSB0YWlsIHJlcGxhY2VzIGBhYCwgYW5kIGBh4pCfYmAgd2l0aCBpdCDigJQgc29cbiAgLy8gb25seSBhbiBhcHBlbmQgT04gdGhlIGtleSBlYXJucyBleGFjdCB0YWlsIGF0dHJpYnV0aW9uLlxuICBpZiAoIXJlY29yZHNUYWlsKHRvdWNoLnZlcmIpIHx8IHRvdWNoLnJlbGF0aW9uICE9PSAnZXhhY3QnKSB7XG4gICAgcmV0dXJuIHJlYmFzZUJpcnRocyhiZWZvcmUsIGFmdGVyLCBiaXJ0aHMsIHRvdWNoLCAncHJlZml4LWluZmVyZW5jZScpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KGJlZm9yZSkgJiYgQXJyYXkuaXNBcnJheShhZnRlcikpIHtcbiAgICAvLyBUaGUgc3RlcCBleHRlbmRlZCB0aGUgYXJyYXk6IHRoZSBlbGVtZW50cyBwYXN0IHRoZSBvbGQgbGVuZ3RoIGFyZSB0aGVcbiAgICAvLyByZWNvcmRlZCB0YWlsIOKAlCBleGFjdCBhdHRyaWJ1dGlvbi5cbiAgICBmb3IgKGxldCBqID0gYmVmb3JlLmxlbmd0aDsgaiA8IGFmdGVyLmxlbmd0aDsgaisrKSB7XG4gICAgICBiaXJ0aHMucHVzaChiaXJ0aE9mKGosIHRvdWNoLCAnYXBwZW5kLXZlcmInLCBhZnRlcltqXSkpO1xuICAgIH1cbiAgICByZXR1cm4gYmlydGhzO1xuICB9XG4gIC8vIERlZ2VuZXJhdGUgYXBwZW5kOiBvbnRvIGEgbm9uLWFycmF5LCBvciBhIG5vbi1hcnJheSB0YWlsIChlLmcuIGEgcmVkYWN0ZWRcbiAgLy8gdGFpbCByZXBsYWNlZCBieSB0aGUgJ1JFREFDVEVEJyBzdHJpbmcpLiBUaGUgdGFpbCBCRUNBTUUgdGhlIHZhbHVlIOKAlFxuICAvLyB0aGUgc3RlcCdzIG93biBydWxlIOKAlCBhbmQgYXR0cmlidXRpb24gc3RheXMgZXhhY3QuXG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFmdGVyKSA/IGFmdGVyLm1hcCgoZWwsIGopID0+IGJpcnRoT2YoaiwgdG91Y2gsICdhcHBlbmQtdmVyYicsIGVsKSkgOiBbXTtcbn1cblxuLyoqXG4gKiBSZS1kZXJpdmUgYmlydGhzIGFmdGVyIGEgZnVsbC12YWx1ZSB0cmFuc2l0aW9uIChgc2V0YC9gbWVyZ2VgKTpcbiAqIC0gbm9uLWFycmF5IHJlc3VsdCDihpIgbm8gYmlydGhzIChpbnZhcmlhbnQ6IGJpcnRocyB0cmFjayBhcnJheXMgb25seSlcbiAqIC0gcHJldmlvdXMgYXJyYXkgaXMgYSBzdHJpY3QgcHJlZml4IOKGkiBrZWVwIG9sZCBiaXJ0aHMsIGF0dHJpYnV0ZSB0aGUgdGFpbFxuICogICB0byB0aGlzIHRvdWNoIHdpdGggdGhlIGdpdmVuIChoZXVyaXN0aWMpIGJhc2lzXG4gKiAtIG90aGVyd2lzZSDihpIgd2hvbGVzYWxlIHJlcGxhY2VtZW50OiBldmVyeSBlbGVtZW50IHJlYm9ybiAnd2hvbGUtdmFsdWUnXG4gKi9cbmZ1bmN0aW9uIHJlYmFzZUJpcnRocyhcbiAgcHJldjogdW5rbm93bixcbiAgbmV4dDogdW5rbm93bixcbiAgYmlydGhzOiBFbGVtZW50QmlydGhbXSxcbiAgdG91Y2g6IFRvdWNoLFxuICB0YWlsQmFzaXM6IEF0dHJpYnV0aW9uQmFzaXMsXG4pOiBFbGVtZW50QmlydGhbXSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShuZXh0KSkgcmV0dXJuIFtdO1xuICBpZiAoQXJyYXkuaXNBcnJheShwcmV2KSAmJiBpc1N0cmljdFByZWZpeChwcmV2LCBuZXh0KSkge1xuICAgIGNvbnN0IGtlcHQgPSBiaXJ0aHMuc2xpY2UoMCwgcHJldi5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSBwcmV2Lmxlbmd0aDsgaSA8IG5leHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtlcHQucHVzaChiaXJ0aE9mKGksIHRvdWNoLCB0YWlsQmFzaXMsIG5leHRbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGtlcHQ7XG4gIH1cbiAgcmV0dXJuIG5leHQubWFwKChlbCwgaSkgPT4gYmlydGhPZihpLCB0b3VjaCwgJ3dob2xlLXZhbHVlJywgZWwpKTtcbn1cblxuLyoqXG4gKiBDb252ZW5pZW5jZSBvdmVyIHtAbGluayBhcnJheVByb3ZlbmFuY2V9OiB0aGUgYmlydGggb2YgT05FIGVsZW1lbnQuXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdGhlIGtleSBoYXMgbm8gYXJyYXkgcHJvdmVuYW5jZSAoYW55XG4gKiB7QGxpbmsgTWlzc2luZ1Byb3ZlbmFuY2VSZWFzb259KSBvciBgaW5kZXhgIGlzIG91dCBvZiByYW5nZSBhdCBgYXRJZHhgIOKAlFxuICogTWFwLmdldC1saWtlIHNlbWFudGljczsgdXNlIHtAbGluayBhcnJheVByb3ZlbmFuY2V9IGRpcmVjdGx5IHdoZW4geW91IG5lZWRcbiAqIHRoZSBtaXNzaW5nIHJlYXNvbi5cbiAqXG4gKiBAc2VlIEVsZW1lbnRCaXJ0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudFByb3ZlbmFuY2UoXG4gIGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW10sXG4gIGtleTogU3RhdGVLZXksXG4gIGluZGV4OiBudW1iZXIsXG4gIG9wdGlvbnM/OiB7IGF0SWR4PzogbnVtYmVyIH0sXG4pOiBFbGVtZW50QmlydGggfCB1bmRlZmluZWQge1xuICBjb25zdCBwcm92ID0gYXJyYXlQcm92ZW5hbmNlKGNvbW1pdExvZywga2V5LCBvcHRpb25zKTtcbiAgaWYgKCFwcm92LmJpcnRocyB8fCBpbmRleCA8IDAgfHwgaW5kZXggPj0gcHJvdi5iaXJ0aHMubGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBiaXJ0aCA9IHByb3YuYmlydGhzW2luZGV4XTtcbiAgcmV0dXJuIHByb3YuYmFzaXMgPT09IHVuZGVmaW5lZCA/IGJpcnRoIDogeyAuLi5iaXJ0aCwgdmFsdWVCYXNpczogcHJvdi5iYXNpcyB9O1xufVxuIl19
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudFByb3ZlbmFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NsaWNlL2VsZW1lbnRQcm92ZW5hbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaURHO0FBRUgsT0FBTyxFQUFtQixzQkFBc0IsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFaEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQWMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR3JELG9FQUFvRTtBQUNwRSxTQUFTLGNBQWMsQ0FBQyxJQUFlLEVBQUUsSUFBZTtJQUN0RCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztJQUMzRCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYSxFQUFFLEtBQVksRUFBRSxLQUF1QixFQUFFLEtBQWM7SUFDbkYsT0FBTztRQUNMLEtBQUs7UUFDTCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDMUIsY0FBYyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYztRQUMzQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPO1FBQzdCLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUs7UUFDN0IsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ2hCLEtBQUs7UUFDTCxLQUFLO0tBQ04sQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsU0FBeUIsRUFDekIsR0FBYSxFQUNiLE9BQTRCO0lBRTVCLE1BQU0sYUFBYSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ2hGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25GLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEMsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUM3RSwwQ0FBMEM7SUFDMUMsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUQsMkVBQTJFO0lBQzNFLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLG9HQUFvRztJQUNwRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN4RSxNQUFNLElBQUksR0FBRyxDQUFDLElBQWtCLEVBQUUsRUFBRTtRQUNsQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2hELENBQUMsQ0FBQztJQUNGLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFNUcsc0VBQXNFO0lBQ3RFLHNFQUFzRTtJQUN0RSwyRUFBMkU7SUFDM0UsbURBQW1EO0lBQ25ELElBQUksTUFBTSxHQUFtQixFQUFFLENBQUM7SUFDaEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7UUFDaEMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNoQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFBRSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RGLENBQUM7S0FDRixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDL0YsT0FBTyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN2RixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLFVBQVUsQ0FBQyxNQUFzQixFQUFFLEtBQVksRUFBRSxNQUFlLEVBQUUsS0FBYztJQUN2Rix3R0FBd0c7SUFDeEcsd0dBQXdHO0lBQ3hHLDBEQUEwRDtJQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzNELE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xELHdFQUF3RTtRQUN4RSxxQ0FBcUM7UUFDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEQsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUNELDRFQUE0RTtJQUM1RSx1RUFBdUU7SUFDdkUscURBQXFEO0lBQ3JELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEcsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsWUFBWSxDQUNuQixJQUFhLEVBQ2IsSUFBYSxFQUNiLE1BQXNCLEVBQ3RCLEtBQVksRUFDWixTQUEyQjtJQUUzQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNwQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3RELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLFNBQXlCLEVBQ3pCLEdBQWEsRUFDYixLQUFhLEVBQ2IsT0FBNEI7SUFFNUIsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDL0UsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBzbGljZS9lbGVtZW50UHJvdmVuYW5jZS50cyDigJQgQVBQRU5ELUZPTEQgUFJPVkVOQU5DRS5cbiAqXG4gKiBUSEUgUFJPQkxFTSAod2h5IHRoaXMgZmlsZSBleGlzdHMpOiBpbiBhZ2VudCBjaGFydHMsIGFsbW9zdCBhbGwgZGF0YWZsb3dcbiAqIGZ1bm5lbHMgdGhyb3VnaCBPTkUgYXJyYXkga2V5IChgaGlzdG9yeWApLiBBIGtleS1sZXZlbCBzbGljZSBvbiBpdFxuICogZGVnZW5lcmF0ZXMgdG8gXCJldmVyeXRoaW5nIGRlcGVuZHMgb24gaGlzdG9yeVwiIOKAlCB0cnVlIGFuZCB1c2VsZXNzLiBUaGVcbiAqIHF1ZXN0aW9uIHRoYXQgYWN0dWFsbHkgdHJpYWdlcyBhbiBhZ2VudCBydW4gaXMgZWxlbWVudC1sZXZlbDpcbiAqIFwid2hpY2ggc3RhZ2UgcHJvZHVjZWQgaGlzdG9yeVs3XT9cIi5cbiAqXG4gKiBUSEUgSU5TSUdIVDogdGhlIGNvbW1pdCBsb2cgYWxyZWFkeSBjb250YWlucyB0aGUgYW5zd2VyLiBVbmRlclxuICogYGNvbW1pdFZhbHVlczogJ2RlbHRhJ2AgZXZlcnkgYXJyYXkgZ3Jvd3RoIGlzIHJlY29yZGVkIGFzIGFuIGBhcHBlbmRgIHZlcmJcbiAqIHdob3NlIGBvdmVyd3JpdGVba2V5XWAgaG9sZHMgZXhhY3RseSB0aGUgbmV3IHRhaWwg4oCUIGVhY2ggZWxlbWVudCBoYXMgYW5cbiAqIGV4cGxpY2l0IGJpcnRoIHJlY29yZC4gVW5kZXIgYCdmdWxsJ2AgbW9kZSwgcHVzaC1zdHlsZSBncm93dGggYXBwZWFycyBhc1xuICogY29uc2VjdXRpdmUgYHNldGBzIHdoZXJlIHRoZSBwcmV2aW91cyBhcnJheSBpcyBhIHN0cmljdCBwcmVmaXggb2YgdGhlIG5leHRcbiAqIOKAlCB0aGUgdGFpbCBpcyBhdHRyaWJ1dGFibGUgYnkgaW5mZXJlbmNlLiBObyBuZXcgY2FwdHVyZSBpcyBuZWVkZWQ7IHRoaXMgaXNcbiAqIGEgcHVyZSBwb3N0LWhvYyBxdWVyeS5cbiAqXG4gKiBUSEUgQUxHT1JJVEhNIChhcHBlbmQtZm9sZCk6IFdBVENIIHRoZSBwZXIta2V5IHZlcmIgZm9sZCDigJQgdGhlIFNBTUUgZm9sZFxuICogYGNvbW1pdFZhbHVlQXRgIHJ1bnMgKGBtZW1vcnkvdmVyYnMudHNgIMK3IGBmb2xkS2V5YDogb25lIHN0ZXAsIGBhcHBseVZlcmJgLFxuICogZm9yIGV2ZXJ5IHZlcmI7IHRoaXMgZmlsZSBoYXMgbm8gdmVyYiBzd2l0Y2ggb2YgaXRzIG93bikg4oCUIHdoaWxlIGNhcnJ5aW5nIGFcbiAqIGJpcnRocyBhcnJheSBrZXB0IGluZGV4LWFsaWduZWQgd2l0aCB0aGUgdmFsdWUuIFRoZSBvYnNlcnZlciBpcyB0b2xkLCBhZnRlclxuICogZWFjaCByb3cgb24sIGluc2lkZSBvciBhcm91bmQgdGhlIGtleSwgdGhlIHZhbHVlIGF0IHRoZSBrZXkgYmVmb3JlIGl0IGFuZFxuICogYWZ0ZXIgaXQsIGFuZCBrZWVwcyB0aGUgYmlydGhzIOKAlCBmb3IgdGhlIGNvbW1pdHMgdGhhdCBXUk9URSB0aGUga2V5IHVuZGVyXG4gKiB0aGUgd3JpdGVyIHJ1bGUgKGBjb21taXRMb2dVdGlscyDCtyB3cml0ZXJzT2ZgOyBzaW5jZSA5LjMzLjAgYSB3cml0ZSBpbnNpZGVcbiAqIHRoZSBrZXkgb3IgYXJvdW5kIGl0IGNvdW50cywgYXMgaXQgZG9lcyBmb3IgZXZlcnkga2V5IHF1ZXJ5KTogYSByb3cgdGhhdFxuICogcmVjb3JkcyBvbmx5IGl0cyB0YWlsIChgYXBwZW5kYCkgZWFybnMgYW4gZXhhY3QgYXR0cmlidXRpb247IGV2ZXJ5IG90aGVyIHJvd1xuICogaXMgYSB3aG9sZS12YWx1ZSB0cmFuc2l0aW9uIGF0dHJpYnV0ZWQgYnkgaW5mZXJlbmNlLiBPbmUgZGlmZmVyZW5jZSBmcm9tXG4gKiBgY29tbWl0VmFsdWVBdGA6IHRoYXQgaGVscGVyIEFOQ0hPUlMgYXQgdGhlIGxhdGVzdCBgc2V0YC9gZGVsZXRlYCBhcyBhIHNraXBcbiAqIG9wdGltaXphdGlvbiAoZWFybGllciBjb21taXRzIGNhbm5vdCBjaGFuZ2UgdGhlIGZpbmFsIFZBTFVFKS4gUHJvdmVuYW5jZVxuICogbXVzdCBmb2xkIGZyb20gdGhlIEZJUlNUIHRvdWNoLCBiZWNhdXNlIGZ1bGwtbW9kZSBncm93dGggaXMgYSBjaGFpbiBvZlxuICogYHNldGBzIGFuZCB0aGUgYW5jaG9yIHdvdWxkIGVyYXNlIGV2ZXJ5IGJpcnRoIGJ1dCB0aGUgbGFzdC4gVGhlIGZpbmFsIHZhbHVlXG4gKiBpcyBpZGVudGljYWwgZWl0aGVyIHdheSAodGhlIGZvbGQgaXMgZGV0ZXJtaW5pc3RpYyBsZWZ0LXRvLXJpZ2h0KSDigJQgYVxuICogcHJvcGVydHkgdGVzdCBwaW5zIHRoaXMgZXF1aXZhbGVuY2UuXG4gKlxuICogSU5WQVJJQU5UIChtYWludGFpbmVkIG9uIGV2ZXJ5IGJyYW5jaCk6IHdoZW4gdGhlIGZvbGRlZCB2YWx1ZSBpcyBhbiBhcnJheSxcbiAqIGBiaXJ0aHMubGVuZ3RoID09PSB2YWx1ZS5sZW5ndGhgIGFuZCBgYmlydGhzW2ldYCBkZXNjcmliZXMgYHZhbHVlW2ldYC5cbiAqXG4gKiBIT05FU1RZOiBldmVyeSBiaXJ0aCBpcyBsYWJlbGVkIHdpdGggaG93IGl0IHdhcyBkZXRlcm1pbmVkXG4gKiAoe0BsaW5rIEF0dHJpYnV0aW9uQmFzaXN9KSDigJQgYCdhcHBlbmQtdmVyYidgIGlzIGVuZ2luZS1yZWNvcmRlZCB0cnV0aCxcbiAqIGAncHJlZml4LWluZmVyZW5jZSdgIGlzIGEgaGV1cmlzdGljIChhIHdob2xlc2FsZSByZXBsYWNlbWVudCB0aGF0IGhhcHBlbnNcbiAqIHRvIHNoYXJlIHRoZSBvbGQgcHJlZml4IGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYW4gYXBwZW5kKSwgYW5kXG4gKiBgJ3dob2xlLXZhbHVlJ2AgaXMgYW4gZXhwbGljaXQgcmVzZXQuIEFic2VuY2UgaXMgaG9uZXN0IHRvbzogYSBtaXNzaW5nXG4gKiBwcm92ZW5hbmNlIGNhcnJpZXMgYSB7QGxpbmsgTWlzc2luZ1Byb3ZlbmFuY2VSZWFzb259LCBtaXJyb3JpbmdcbiAqIGBWYXJpYWJsZVNsaWNlLm1pc3NpbmdgIOKAlCBvbmUgYWJzZW5jZSBwYXR0ZXJuIG1vZHVsZS13aWRlLlxuICpcbiAqIENPTVBMRVhJVFk6IGRlbHRhLW1vZGUgbG9ncyBuZWVkIG5vIGVxdWFsaXR5IGNoZWNrcyDigJQgTyh0b3RhbCBlbGVtZW50cykuXG4gKiBGdWxsLW1vZGUgbG9ncyBwYXkgYSBzdHJpY3QtcHJlZml4IGNoZWNrIChkZWVwRXF1YWwgcGVyIGVsZW1lbnQpIHBlclxuICogZnVsbC12YWx1ZSB0b3VjaDogTyh0b3VjaGVzIMOXIGxlbmd0aCkgZWxlbWVudCBjb21wYXJpc29ucyB3b3JzdCBjYXNlLlxuICogUG9zdC1ob2MgcXVlcnksIG9mZiB0aGUgaG90IHBhdGgg4oCUIGFjY2VwdGFibGU7IG1lYXN1cmVkIGluIHRoZSBwZXJmIHRlc3RzLlxuICovXG5cbmltcG9ydCB7IHR5cGUgVmFsdWVCYXNpcywgY29tbWl0VmFsdWVBdFdpdGhCYXNpcywgcm93c1VuZGVyUm9vdCwgd3JpdGVyc09mIH0gZnJvbSAnLi4vbWVtb3J5L2NvbW1pdExvZ1V0aWxzLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlIH0gZnJvbSAnLi4vbWVtb3J5L3R5cGVzLmpzJztcbmltcG9ydCB7IGRlZXBFcXVhbCwgREVMSU0gfSBmcm9tICcuLi9tZW1vcnkvdXRpbHMuanMnO1xuaW1wb3J0IHsgdHlwZSBUb3VjaCwgZm9sZEtleSwgcmVjb3Jkc1RhaWwgfSBmcm9tICcuLi9tZW1vcnkvdmVyYnMuanMnO1xuaW1wb3J0IHsgbm9ybWFsaXNlU3RhdGVLZXkgfSBmcm9tICcuL3NsaWNlRm9yS2V5LmpzJztcbmltcG9ydCB0eXBlIHsgQXJyYXlQcm92ZW5hbmNlLCBBdHRyaWJ1dGlvbkJhc2lzLCBFbGVtZW50QmlydGgsIFN0YXRlS2V5IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKiBgcHJldmAgaXMgYSBzdHJpY3QgKGxlYWRpbmcsIGVsZW1lbnQtZXF1YWwpIHByZWZpeCBvZiBgbmV4dGAuICovXG5mdW5jdGlvbiBpc1N0cmljdFByZWZpeChwcmV2OiB1bmtub3duW10sIG5leHQ6IHVua25vd25bXSk6IGJvb2xlYW4ge1xuICBpZiAocHJldi5sZW5ndGggPiBuZXh0Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXYubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWRlZXBFcXVhbChwcmV2W2ldLCBuZXh0W2ldLCAnY29waWVzJykpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gYmlydGhPZihpbmRleDogbnVtYmVyLCB0b3VjaDogVG91Y2gsIGJhc2lzOiBBdHRyaWJ1dGlvbkJhc2lzLCB2YWx1ZTogdW5rbm93bik6IEVsZW1lbnRCaXJ0aCB7XG4gIHJldHVybiB7XG4gICAgaW5kZXgsXG4gICAgY29tbWl0SWR4OiB0b3VjaC5jb21taXRJZHgsXG4gICAgcnVudGltZVN0YWdlSWQ6IHRvdWNoLmJ1bmRsZS5ydW50aW1lU3RhZ2VJZCxcbiAgICBzdGFnZUlkOiB0b3VjaC5idW5kbGUuc3RhZ2VJZCxcbiAgICBzdGFnZU5hbWU6IHRvdWNoLmJ1bmRsZS5zdGFnZSxcbiAgICB2ZXJiOiB0b3VjaC52ZXJiLFxuICAgIGJhc2lzLFxuICAgIHZhbHVlLFxuICB9O1xufVxuXG4vKipcbiAqIEVsZW1lbnQtbGV2ZWwgcHJvdmVuYW5jZSBmb3Igb25lIGFycmF5LXZhbHVlZCBrZXk6IGZvbGQgdGhlIGtleSdzIGNvbW1pdHNcbiAqIGFuZCByZXR1cm4gaW5kZXgtYWxpZ25lZCBiaXJ0aCByZWNvcmRzIGZvciBldmVyeSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBrZXkgQSB7QGxpbmsgU3RhdGVLZXl9OiB0aGUgdG9wLWxldmVsIGtleSBzdHJpbmcsIG9yIGEgcGF0aCBhcnJheVxuICogICBmb3IgbmVzdGVkIGtleXMgKG5vcm1hbGlzZWQgaW50ZXJuYWxseSDigJQgbm8gZW5naW5lIGRlbGltaXRlcnMgbmVlZGVkKS5cbiAqIEBwYXJhbSBvcHRpb25zLmF0SWR4IEluY2x1c2l2ZSBjb21taXQgYXJyYXkgaW5kZXggdG8gZm9sZCB0byAoZGVmYXVsdDogdGhlXG4gKiAgIHdob2xlIGxvZykuIE5PVCB0aGUgZXhlY3V0aW9uSW5kZXggZnJvbSBhIHJ1bnRpbWVTdGFnZUlkLlxuICogQHJldHVybnMgQWx3YXlzIGFuIHtAbGluayBBcnJheVByb3ZlbmFuY2V9OyBvbiBmYWlsdXJlIGBtaXNzaW5nYCBzYXlzIHdoeVxuICogICAoYCdub3QtYW4tYXJyYXknYCBmb3Igc2NhbGFyL2RlbGV0ZWQvZGVncmFkZWQga2V5cyDigJQgdGhvc2UgYXJlXG4gKiAgIGBzbGljZUZvcktleWAgdGVycml0b3J5KS4gQmxpbmQgc3BvdCBzaGFyZWQgd2l0aCB0aGUgd2hvbGUgY29tbWl0LWxvZ1xuICogICBmYW1pbHk6IGVsZW1lbnRzIHByZXNlbnQgaW4gdGhlIHJ1bidzIElOSVRJQUwgc3RhdGUgKHNlZWRlZCwgbmV2ZXJcbiAqICAgcmUtc2V0IGluIHJhbmdlKSBhcmUgaW52aXNpYmxlIGhlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheVByb3ZlbmFuY2UoXG4gIGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW10sXG4gIGtleTogU3RhdGVLZXksXG4gIG9wdGlvbnM/OiB7IGF0SWR4PzogbnVtYmVyIH0sXG4pOiBBcnJheVByb3ZlbmFuY2Uge1xuICBjb25zdCBub3JtYWxpc2VkS2V5ID0gbm9ybWFsaXNlU3RhdGVLZXkoa2V5KTtcbiAgaWYgKGNvbW1pdExvZy5sZW5ndGggPT09IDApIHJldHVybiB7IGtleTogbm9ybWFsaXNlZEtleSwgbWlzc2luZzogJ2VtcHR5LWxvZycgfTtcbiAgY29uc3QgZW5kID0gTWF0aC5taW4ob3B0aW9ucz8uYXRJZHggPz8gY29tbWl0TG9nLmxlbmd0aCAtIDEsIGNvbW1pdExvZy5sZW5ndGggLSAxKTtcbiAgY29uc3Qgc2VncyA9IG5vcm1hbGlzZWRLZXkuc3BsaXQoREVMSU0pO1xuXG4gIC8vIEV2ZXJ5IHJvdyB1bmRlciB0aGUga2V5J3MgdG9wLWxldmVsIGtleSB1cCB0byBgZW5kYCwgaW4gY29tbWl0IG9yZGVyIOKAlCB0aGVcbiAgLy8gcm93cyBjb21taXRWYWx1ZUF0IGZvbGRzIChyZWZ1c2luZyBhIHZlcmIgdGhlIGxhdyBkb2VzIG5vdCBrbm93KSwgd2l0aCB0aGVcbiAgLy8gY29tbWl0IHBvc2l0aW9uIHRoZSBiaXJ0aCByZWNvcmRzIG5lZWQuXG4gIGNvbnN0IHJvd3MgPSByb3dzVW5kZXJSb290KGNvbW1pdExvZywgbm9ybWFsaXNlZEtleSwgZW5kKTtcbiAgLy8gVGhlIGNvbW1pdHMgdGhhdCBXUk9URSB0aGUga2V5IOKAlCB0aGUgd3JpdGVyIHJ1bGUgZXZlcnkga2V5IHF1ZXJ5IHNoYXJlcy5cbiAgY29uc3Qgd3JpdGVycyA9IG5ldyBTZXQod3JpdGVyc09mKGNvbW1pdExvZywgbm9ybWFsaXNlZEtleSwgeyBlbmQgfSkpO1xuICAvLyBGNGI6IHdoYXQgdGhlIHZhbHVlIGF0IGBlbmRgIHJlc3RzIG9uIOKAlCB0aGUgYmFzaXMgdHdpbidzIGNvZGVzLCBsZXNzIHdoYXQgYG1pc3NpbmdgIGFscmVhZHkgc2F5cy5cbiAgY29uc3QgeyBiYXNpcyB9ID0gY29tbWl0VmFsdWVBdFdpdGhCYXNpcyhjb21taXRMb2csIGVuZCwgbm9ybWFsaXNlZEtleSk7XG4gIGNvbnN0IHNhaWQgPSAoYWxzbzogVmFsdWVCYXNpc1tdKSA9PiB7XG4gICAgY29uc3QgcmVzdCA9IGJhc2lzLmZpbHRlcigoYykgPT4gIWFsc28uaW5jbHVkZXMoYykpO1xuICAgIHJldHVybiByZXN0Lmxlbmd0aCA+IDAgPyB7IGJhc2lzOiByZXN0IH0gOiB7fTtcbiAgfTtcbiAgaWYgKHdyaXRlcnMuc2l6ZSA9PT0gMClcbiAgICByZXR1cm4geyBrZXk6IG5vcm1hbGlzZWRLZXksIG1pc3Npbmc6ICduZXZlci13cml0dGVuJywgLi4uc2FpZChbJ25ldmVyLXdyaXR0ZW4nLCAnZnJvbS1pbml0aWFsLXN0YXRlJ10pIH07XG5cbiAgLy8gVGhlIGFwcGVuZC1mb2xkOiB0aGUga2V5J3Mgb25lIGZvbGQsIHdhdGNoZWQuIGBiaXJ0aHNgIGlzIHRoZSBhZGRlZFxuICAvLyBwcm92ZW5hbmNlIHRyYWNrLCBpbmRleC1hbGlnbmVkIHdoZW5ldmVyIHRoZSB2YWx1ZSBpcyBhbiBhcnJheSAodGhlXG4gIC8vIG1vZHVsZSBpbnZhcmlhbnQpLiBBIHJvdyBvZiBhIGNvbW1pdCB0aGF0IGRpZCBub3Qgd3JpdGUgdGhlIGtleSAoYSBtZXJnZVxuICAvLyBhcm91bmQgaXQgdGhhdCBuZXZlciByZWFjaGVkIGl0KSBtb3ZlcyBubyBiaXJ0aC5cbiAgbGV0IGJpcnRoczogRWxlbWVudEJpcnRoW10gPSBbXTtcbiAgY29uc3QgdmFsdWUgPSBmb2xkS2V5KHJvd3MsIHNlZ3MsIHtcbiAgICBvYnNlcnZlOiAodG91Y2gsIGJlZm9yZSwgYWZ0ZXIpID0+IHtcbiAgICAgIGlmICh3cml0ZXJzLmhhcyh0b3VjaC5jb21taXRJZHgpKSBiaXJ0aHMgPSBuZXh0QmlydGhzKGJpcnRocywgdG91Y2gsIGJlZm9yZSwgYWZ0ZXIpO1xuICAgIH0sXG4gIH0pO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB7IGtleTogbm9ybWFsaXNlZEtleSwgbWlzc2luZzogJ25vdC1hbi1hcnJheScsIC4uLnNhaWQoW10pIH07XG4gIHJldHVybiB7IGtleTogbm9ybWFsaXNlZEtleSwgYXRJZHg6IGVuZCwgbGVuZ3RoOiB2YWx1ZS5sZW5ndGgsIGJpcnRocywgLi4uc2FpZChbXSkgfTtcbn1cblxuLyoqXG4gKiBUaGUgYmlydGhzIGFmdGVyIG9uZSByb3cgb2YgdGhlIGZvbGQsIGZyb20gdGhlIHZhbHVlIGJlZm9yZSBpdCBhbmQgYWZ0ZXIgaXQuXG4gKlxuICogQSByb3cgdGhhdCByZWNvcmRzIG9ubHkgaXRzIFRBSUwgKGBhcHBlbmRgKSBrbm93cyBleGFjdGx5IHdoYXQgaXQgYWRkZWQg4oCUXG4gKiBgJ2FwcGVuZC12ZXJiJ2AsIG5vIGVxdWFsaXR5IGNoZWNrcywgTyh0YWlsKS4gRXZlcnkgb3RoZXIgcm93IOKAlCBhIGBzZXRgLCBhXG4gKiBgbWVyZ2VgLCBhIGBkZWxldGVgIOKAlCBpcyBhIHdob2xlLXZhbHVlIHRyYW5zaXRpb246IGF0dHJpYnV0ZWQgYnkgaW5mZXJlbmNlXG4gKiAoe0BsaW5rIHJlYmFzZUJpcnRoc30pLCBhbmQgYSBub24tYXJyYXkgcmVzdWx0IChhIGBkZWxldGVgIGxlYXZlcyBub25lKSBlbmRzXG4gKiB0aGUgdHJhY2suXG4gKi9cbmZ1bmN0aW9uIG5leHRCaXJ0aHMoYmlydGhzOiBFbGVtZW50QmlydGhbXSwgdG91Y2g6IFRvdWNoLCBiZWZvcmU6IHVua25vd24sIGFmdGVyOiB1bmtub3duKTogRWxlbWVudEJpcnRoW10ge1xuICAvLyBBbiBgYXBwZW5kYCByZWNvcmRzIHRoZSB0YWlsIG9mIElUUyBPV04gcGF0aC4gT24gYSBjb250YWluZXIgYXJvdW5kIHRoZSBrZXkgKG9yIGEgcGF0aCBpbnNpZGUgaXQpIHRoZVxuICAvLyBrZXkncyB2YWx1ZSBjaGFuZ2VkIHdob2xlc2FsZSDigJQgYGFwcGVuZCBhYCB3aXRoIGEgbm9uLWFycmF5IHRhaWwgcmVwbGFjZXMgYGFgLCBhbmQgYGHikJ9iYCB3aXRoIGl0IOKAlCBzb1xuICAvLyBvbmx5IGFuIGFwcGVuZCBPTiB0aGUga2V5IGVhcm5zIGV4YWN0IHRhaWwgYXR0cmlidXRpb24uXG4gIGlmICghcmVjb3Jkc1RhaWwodG91Y2gudmVyYikgfHwgdG91Y2gucmVsYXRpb24gIT09ICdleGFjdCcpIHtcbiAgICByZXR1cm4gcmViYXNlQmlydGhzKGJlZm9yZSwgYWZ0ZXIsIGJpcnRocywgdG91Y2gsICdwcmVmaXgtaW5mZXJlbmNlJyk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoYmVmb3JlKSAmJiBBcnJheS5pc0FycmF5KGFmdGVyKSkge1xuICAgIC8vIFRoZSBzdGVwIGV4dGVuZGVkIHRoZSBhcnJheTogdGhlIGVsZW1lbnRzIHBhc3QgdGhlIG9sZCBsZW5ndGggYXJlIHRoZVxuICAgIC8vIHJlY29yZGVkIHRhaWwg4oCUIGV4YWN0IGF0dHJpYnV0aW9uLlxuICAgIGZvciAobGV0IGogPSBiZWZvcmUubGVuZ3RoOyBqIDwgYWZ0ZXIubGVuZ3RoOyBqKyspIHtcbiAgICAgIGJpcnRocy5wdXNoKGJpcnRoT2YoaiwgdG91Y2gsICdhcHBlbmQtdmVyYicsIGFmdGVyW2pdKSk7XG4gICAgfVxuICAgIHJldHVybiBiaXJ0aHM7XG4gIH1cbiAgLy8gRGVnZW5lcmF0ZSBhcHBlbmQ6IG9udG8gYSBub24tYXJyYXksIG9yIGEgbm9uLWFycmF5IHRhaWwgKGUuZy4gYSByZWRhY3RlZFxuICAvLyB0YWlsIHJlcGxhY2VkIGJ5IHRoZSAnUkVEQUNURUQnIHN0cmluZykuIFRoZSB0YWlsIEJFQ0FNRSB0aGUgdmFsdWUg4oCUXG4gIC8vIHRoZSBzdGVwJ3Mgb3duIHJ1bGUg4oCUIGFuZCBhdHRyaWJ1dGlvbiBzdGF5cyBleGFjdC5cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYWZ0ZXIpID8gYWZ0ZXIubWFwKChlbCwgaikgPT4gYmlydGhPZihqLCB0b3VjaCwgJ2FwcGVuZC12ZXJiJywgZWwpKSA6IFtdO1xufVxuXG4vKipcbiAqIFJlLWRlcml2ZSBiaXJ0aHMgYWZ0ZXIgYSBmdWxsLXZhbHVlIHRyYW5zaXRpb24gKGBzZXRgL2BtZXJnZWApOlxuICogLSBub24tYXJyYXkgcmVzdWx0IOKGkiBubyBiaXJ0aHMgKGludmFyaWFudDogYmlydGhzIHRyYWNrIGFycmF5cyBvbmx5KVxuICogLSBwcmV2aW91cyBhcnJheSBpcyBhIHN0cmljdCBwcmVmaXgg4oaSIGtlZXAgb2xkIGJpcnRocywgYXR0cmlidXRlIHRoZSB0YWlsXG4gKiAgIHRvIHRoaXMgdG91Y2ggd2l0aCB0aGUgZ2l2ZW4gKGhldXJpc3RpYykgYmFzaXNcbiAqIC0gb3RoZXJ3aXNlIOKGkiB3aG9sZXNhbGUgcmVwbGFjZW1lbnQ6IGV2ZXJ5IGVsZW1lbnQgcmVib3JuICd3aG9sZS12YWx1ZSdcbiAqL1xuZnVuY3Rpb24gcmViYXNlQmlydGhzKFxuICBwcmV2OiB1bmtub3duLFxuICBuZXh0OiB1bmtub3duLFxuICBiaXJ0aHM6IEVsZW1lbnRCaXJ0aFtdLFxuICB0b3VjaDogVG91Y2gsXG4gIHRhaWxCYXNpczogQXR0cmlidXRpb25CYXNpcyxcbik6IEVsZW1lbnRCaXJ0aFtdIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KG5leHQpKSByZXR1cm4gW107XG4gIGlmIChBcnJheS5pc0FycmF5KHByZXYpICYmIGlzU3RyaWN0UHJlZml4KHByZXYsIG5leHQpKSB7XG4gICAgY29uc3Qga2VwdCA9IGJpcnRocy5zbGljZSgwLCBwcmV2Lmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IHByZXYubGVuZ3RoOyBpIDwgbmV4dC5sZW5ndGg7IGkrKykge1xuICAgICAga2VwdC5wdXNoKGJpcnRoT2YoaSwgdG91Y2gsIHRhaWxCYXNpcywgbmV4dFtpXSkpO1xuICAgIH1cbiAgICByZXR1cm4ga2VwdDtcbiAgfVxuICByZXR1cm4gbmV4dC5tYXAoKGVsLCBpKSA9PiBiaXJ0aE9mKGksIHRvdWNoLCAnd2hvbGUtdmFsdWUnLCBlbCkpO1xufVxuXG4vKipcbiAqIENvbnZlbmllbmNlIG92ZXIge0BsaW5rIGFycmF5UHJvdmVuYW5jZX06IHRoZSBiaXJ0aCBvZiBPTkUgZWxlbWVudC5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiB0aGUga2V5IGhhcyBubyBhcnJheSBwcm92ZW5hbmNlIChhbnlcbiAqIHtAbGluayBNaXNzaW5nUHJvdmVuYW5jZVJlYXNvbn0pIG9yIGBpbmRleGAgaXMgb3V0IG9mIHJhbmdlIGF0IGBhdElkeGAg4oCUXG4gKiBNYXAuZ2V0LWxpa2Ugc2VtYW50aWNzOyB1c2Uge0BsaW5rIGFycmF5UHJvdmVuYW5jZX0gZGlyZWN0bHkgd2hlbiB5b3UgbmVlZFxuICogdGhlIG1pc3NpbmcgcmVhc29uLlxuICpcbiAqIEBzZWUgRWxlbWVudEJpcnRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbGVtZW50UHJvdmVuYW5jZShcbiAgY29tbWl0TG9nOiBDb21taXRCdW5kbGVbXSxcbiAga2V5OiBTdGF0ZUtleSxcbiAgaW5kZXg6IG51bWJlcixcbiAgb3B0aW9ucz86IHsgYXRJZHg/OiBudW1iZXIgfSxcbik6IEVsZW1lbnRCaXJ0aCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHByb3YgPSBhcnJheVByb3ZlbmFuY2UoY29tbWl0TG9nLCBrZXksIG9wdGlvbnMpO1xuICBpZiAoIXByb3YuYmlydGhzIHx8IGluZGV4IDwgMCB8fCBpbmRleCA+PSBwcm92LmJpcnRocy5sZW5ndGgpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGJpcnRoID0gcHJvdi5iaXJ0aHNbaW5kZXhdO1xuICByZXR1cm4gcHJvdi5iYXNpcyA9PT0gdW5kZWZpbmVkID8gYmlydGggOiB7IC4uLmJpcnRoLCB2YWx1ZUJhc2lzOiBwcm92LmJhc2lzIH07XG59XG4iXX0=
|
|
@@ -41,8 +41,9 @@
|
|
|
41
41
|
* on. That degradation is documented on `refuseChain`, on `timeTravel`'s
|
|
42
42
|
* `@throws`, and in the README.
|
|
43
43
|
*/
|
|
44
|
+
import { kindOf } from '../capture/valueKinds.js';
|
|
44
45
|
import { parseRuntimeStageId } from '../ids/runtimeStageId.js';
|
|
45
|
-
import { DELIM } from '../memory/utils.js';
|
|
46
|
+
import { deepEqual, DELIM } from '../memory/utils.js';
|
|
46
47
|
import { foldLegs } from './stateAt.js';
|
|
47
48
|
/** The execution-index span of one leg, read off its `runtimeStageId`s. */
|
|
48
49
|
export function spanOf(log) {
|
|
@@ -70,44 +71,45 @@ export function spanOf(log) {
|
|
|
70
71
|
*
|
|
71
72
|
* The fold reproduces `'REDACTED'` wherever the engine scrubbed a write, while
|
|
72
73
|
* the checkpoint that seeded the resumed leg holds the real value — so those
|
|
73
|
-
* paths CANNOT agree, and are not asked to. Everything else
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
74
|
+
* paths CANNOT agree, and are not asked to. Everything else is decided by the
|
|
75
|
+
* ONE equality law (`memory/equality.ts · deepEqual`, every value kind compared
|
|
76
|
+
* as the record holds it; 9.44.2 — this walk had a law of its own, which held
|
|
77
|
+
* any two RegExps, Errors or buffers equal). Both sides are copies of one
|
|
78
|
+
* record, so an opaque value compares as `'copies'`. Only the containers above
|
|
79
|
+
* a redacted path are walked here.
|
|
78
80
|
*/
|
|
79
81
|
function sameState(a, b, redacted, path) {
|
|
80
|
-
if (
|
|
81
|
-
return
|
|
82
|
-
if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null)
|
|
83
|
-
return false;
|
|
84
|
-
if (a instanceof Date || b instanceof Date) {
|
|
85
|
-
return a instanceof Date && b instanceof Date && a.getTime() === b.getTime();
|
|
86
|
-
}
|
|
87
|
-
if (a instanceof Map || b instanceof Map || a instanceof Set || b instanceof Set) {
|
|
88
|
-
if (!(a instanceof Map && b instanceof Map) && !(a instanceof Set && b instanceof Set))
|
|
89
|
-
return false;
|
|
90
|
-
return sameState([...a.entries()], [...b.entries()], redacted, path);
|
|
91
|
-
}
|
|
92
|
-
if (Array.isArray(a) !== Array.isArray(b))
|
|
93
|
-
return false;
|
|
82
|
+
if (!redactedBelow(path, redacted))
|
|
83
|
+
return deepEqual(a, b, 'copies');
|
|
94
84
|
if (Array.isArray(a) && Array.isArray(b)) {
|
|
95
85
|
if (a.length !== b.length)
|
|
96
86
|
return false;
|
|
97
87
|
return a.every((item, i) => sameState(item, b[i], redacted, path === '' ? String(i) : `${path}${DELIM}${i}`));
|
|
98
88
|
}
|
|
99
|
-
const
|
|
100
|
-
|
|
89
|
+
const plain = (v) => v !== null && typeof v === 'object' && !Array.isArray(v) && kindOf(v) === 'plain';
|
|
90
|
+
if (!plain(a) || !plain(b))
|
|
91
|
+
return deepEqual(a, b, 'copies');
|
|
101
92
|
const present = (o) => Object.keys(o).filter((k) => o[k] !== undefined);
|
|
102
|
-
const leftKeys = present(
|
|
103
|
-
const rightKeys = new Set(present(
|
|
93
|
+
const leftKeys = present(a);
|
|
94
|
+
const rightKeys = new Set(present(b));
|
|
104
95
|
if (leftKeys.length !== rightKeys.size || !leftKeys.every((k) => rightKeys.has(k)))
|
|
105
96
|
return false;
|
|
106
97
|
return leftKeys.every((k) => {
|
|
107
98
|
const childPath = path === '' ? k : `${path}${DELIM}${k}`;
|
|
108
|
-
return redacted.has(childPath) || sameState(
|
|
99
|
+
return redacted.has(childPath) || sameState(a[k], b[k], redacted, childPath);
|
|
109
100
|
});
|
|
110
101
|
}
|
|
102
|
+
/** Is `path`, or a path below it, one the log was redacted at? */
|
|
103
|
+
function redactedBelow(path, redacted) {
|
|
104
|
+
if (redacted.size === 0)
|
|
105
|
+
return false;
|
|
106
|
+
if (path === '')
|
|
107
|
+
return true;
|
|
108
|
+
for (const r of redacted)
|
|
109
|
+
if (r === path || r.startsWith(`${path}${DELIM}`))
|
|
110
|
+
return true;
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
111
113
|
/**
|
|
112
114
|
* Check that `legs` really are one run read in order, and say why not.
|
|
113
115
|
*
|
|
@@ -183,4 +185,4 @@ export function refuseChain(legs) {
|
|
|
183
185
|
}
|
|
184
186
|
return undefined;
|
|
185
187
|
}
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RpbWUtdHJhdmVsL2NoYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFFSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFtQixRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFhekQsMkVBQTJFO0FBQzNFLE1BQU0sVUFBVSxNQUFNLENBQUMsR0FBNEI7SUFLakQsSUFBSSxLQUF5QixDQUFDO0lBQzlCLElBQUksSUFBd0IsQ0FBQztJQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQzlCLEtBQUssTUFBTSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7UUFDekIsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUNqQyxJQUFJLENBQUMsRUFBRTtZQUFFLFNBQVM7UUFDbEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNaLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQUUsU0FBUztRQUMzQyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksY0FBYyxHQUFHLEtBQUs7WUFBRSxLQUFLLEdBQUcsY0FBYyxDQUFDO1FBQzFFLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxjQUFjLEdBQUcsSUFBSTtZQUFFLElBQUksR0FBRyxjQUFjLENBQUM7SUFDekUsQ0FBQztJQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFD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QUFLLGFBQWEsSUFBSSxNQUFNLENBQUMsT0FBTztZQUFFLFNBQVMsQ0FBQyx5Q0FBeUM7UUFDekcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN0RSxPQUFPLENBQ0wsc0JBQXNCLENBQUMsMkNBQTJDLENBQUMsR0FBRyxDQUFDLHlCQUF5QjtnQkFDaEcsZ0dBQWdHO2dCQUNoRyxpR0FBaUc7Z0JBQ2pHLDhCQUE4QixDQUMvQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBjaGFpbi50cyDigJQgcmVhZGluZyBhIHBhdXNlL3Jlc3VtZSBhcyBPTkUgYXhpcy5cbiAqXG4gKiBXSFkgVEhJUyBGSUxFIEVYSVNUUy4gQSBwYXVzZSBhbmQgaXRzIHJlc3VtZSBwcm9kdWNlIFRXTyBzbmFwc2hvdHMuIE9uIGFcbiAqIGNyb3NzLWV4ZWN1dG9yIHJlc3VtZSAodGhlIGNoZWNrcG9pbnQgd2FzIHBlcnNpc3RlZCBhbmQgYSBmcmVzaCBleGVjdXRvclxuICogcGlja2VkIGl0IHVwKSB0aGUgc2Vjb25kIHJ1biBnZXRzIGEgZnJlc2ggcnVudGltZTogaXRzIGBjb21taXRMb2dgIHN0YXJ0cyBhdFxuICogaW5kZXggMCBhbmQgaG9sZHMgb25seSB0aGUgcG9zdC1yZXN1bWUgY29tbWl0cywgYW5kIGl0cyBgaW5pdGlhbFN0YXRlYCBpc1xuICogdGhlIHN0YXRlIGF0IHRoZSBwYXVzZS4gVHdvIGxvZ3MsIHR3byBkaXNqb2ludCBheGVzIOKAlCBzbyBhIHJlYWRlciBzY3J1YmJpbmdcbiAqIGEgcmVzdW1lZCBydW4gc2F3IG9ubHkgdGhlIHNlY29uZCBoYWxmIHVubGVzcyB0aGUgYXBwbGljYXRpb24gaGFkIGtlcHQgdGhlXG4gKiBwYXVzZWQgc25hcHNob3QgYW5kIHN0aXRjaGVkIHRoZSBoYWx2ZXMgaXRzZWxmLiBFdmVyeSBhcHBsaWNhdGlvbiB0aGF0XG4gKiBwYXVzZXMgd291bGQgd3JpdGUgdGhhdCBzdGl0Y2hpbmcsIGFuZCBub25lIG9mIHRoZW0gb3duIHRoZSBhcml0aG1ldGljLlxuICpcbiAqIFRIRSBIT05FU1QgQklULCB1cCBmcm9udDogQ09NTUlUIElORElDRVMgQVJFIFJVTi1MT0NBTC4gVGhlcmUgaXMgbm8gZ2xvYmFsXG4gKiBpbmRleCBhY3Jvc3MgYSBjaGFpbiBhbmQgdGhpcyBmaWxlIGRvZXMgbm90IGludmVudCBvbmUg4oCUIGBjb21taXRJZHhgIGFuZFxuICogYGxhc3RDb21taXRJZHhgIGtlZXAgaW5kZXhpbmcgdGhlaXIgb3duIHNvdXJjZSwgYW5kIGV2ZXJ5IHN0b3AgY2FycmllcyB0aGVcbiAqIHtAbGluayBTdG9wLnNvdXJjZUlkeH0gdGhleSBiZWxvbmcgdG8uIFRoZSBjdXJzb3IncyBTVEVQUyBhcmUgd2hhdCBydW5cbiAqIGFjcm9zcyB0aGUgd2hvbGUgY2hhaW4uXG4gKlxuICogQU5EIFRIRSBSRUZVU0FMOiBhIGNoYWluIHRoYXQgaXMgbm90IG9yZGVyZWQsIG9yIHdob3NlIGxlZ3MgYXJlIG5vdCBmcm9tIG9uZVxuICogbGluZWFnZSwgaXMgUkVGVVNFRCByYXRoZXIgdGhhbiBndWVzc2VkIGF0LiBUaGUgcmVjb3JkIGNhcnJpZXMgVFdPIHNpZ25hbHNcbiAqIGFuZCB0aGlzIGZpbGUgcmVhZHMgYm90aDpcbiAqXG4gKiAtIFRoZSBleGVjdXRpb24gaW5kZXggdGhlIGVuZ2luZSBzdGFtcHMgaW50byBldmVyeSBgcnVudGltZVN0YWdlSWRgIOKAlFxuICogICBnbG9iYWxseSBtb25vdG9uaWMgcGVyIHJ1biBhbmQsIGRlbGliZXJhdGVseSwgTk9UIHJlc2V0IG9uIHJlc3VtZS4gU28gYVxuICogICBsYXRlciBsZWcncyBmaXJzdCBleGVjdXRpb24gaW5kZXggbXVzdCBiZSBwYXN0IHRoZSBlYXJsaWVyIGxlZydzIGxhc3QsIGFuZFxuICogICBubyBzdGFnZSBtYXkgYXBwZWFyIGluIHR3byBsZWdzLiBUaGlzIGNhdGNoZXMgYSBiYWNrd2FyZHMgY2hhaW4sIGEgZnJlc2hcbiAqICAgcnVuICh3aGljaCByZXN0YXJ0cyBhdCAwKSBhbmQgYSBzYW1lLWV4ZWN1dG9yIHJlc3VtZSAod2hvc2Ugb25lIHNuYXBzaG90XG4gKiAgIGFscmVhZHkgaG9sZHMgYm90aCBoYWx2ZXMpLlxuICogLSBUaGUgbGF0ZXIgbGVnJ3MgYGluaXRpYWxTdGF0ZWAuIE9uIGEgcmVzdW1lIHRoZSBmcmVzaCBydW50aW1lIGlzIHNlZWRlZFxuICogICBmcm9tIHRoZSBjaGVja3BvaW50LCBzbyB0aGF0IGJhc2UgSVMgdGhlIHN0YXRlIGF0IHRoZSBwYXVzZSDigJQgYW5kIHRoZVxuICogICBzdGF0ZSB0aGUgZWFybGllciBsZWdzIEZPTEQgVE8gbXVzdCBkZWVwLWVxdWFsIGl0LiBUaGlzIGlzIHdoYXQgY2F0Y2hlcyBhXG4gKiAgIGxlZyBmcm9tIHNvbWUgT1RIRVIgbGluZWFnZSB3aG9zZSBpbmRpY2VzIG1lcmVseSBoYXBwZW4gdG8gYmUgaGlnaGVyOiB0aGVcbiAqICAgY291bnRlcnMgbGluZSB1cCBieSBhY2NpZGVudCwgdGhlIHN0YXRlIG5ldmVyIGRvZXMuXG4gKlxuICogQSBjaGFydCBpZGVudGl0eSBvciBhIGxpbmVhZ2UgaWQgaXMgTk9UIG9uIHRoZSByZWNvcmQsIHNvIG5vdGhpbmcgaGVyZVxuICogcHJldGVuZHMgdG8gY2hlY2sgb25lLiBBbmQgd2hlcmUgdGhlIHN0YXRlIHNpZ25hbCBpcyBub3Qgb24gdGhlIHJlY29yZFxuICogZWl0aGVyIOKAlCBhIGxlZyByZWNvcmRlZCBiZWZvcmUgOS4xNyBjYXJyaWVzIG5vIGBpbml0aWFsU3RhdGVgOyBhbiBlYXJsaWVyXG4gKiBsZWcgd2l0aCBubyBiYXNlIGZvbGRzIGAnbG9nLW9ubHknYDsgYSBsZWcgd2l0aCB1bnJlYWRhYmxlIHJvd3MgZm9sZHMgYW5cbiAqIGluY29tcGxldGUgc3RhdGUg4oCUIHRoYXQgY2hlY2sgaXMgU0tJUFBFRCwgbm90IGZha2VkOiB0aGUgY2hhaW4gdGhlbiByZXN0cyBvblxuICogdGhlIGluZGV4IGNoZWNrcyBhbG9uZSwgYW5kIGV2ZXJ5IGZvbGQncyBgYmFzaXNgIHN0aWxsIHNheXMgd2hhdCBpdCBzdG9vZFxuICogb24uIFRoYXQgZGVncmFkYXRpb24gaXMgZG9jdW1lbnRlZCBvbiBgcmVmdXNlQ2hhaW5gLCBvbiBgdGltZVRyYXZlbGAnc1xuICogYEB0aHJvd3NgLCBhbmQgaW4gdGhlIFJFQURNRS5cbiAqL1xuXG5pbXBvcnQgeyBwYXJzZVJ1bnRpbWVTdGFnZUlkIH0gZnJvbSAnLi4vaWRzL3J1bnRpbWVTdGFnZUlkLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlIH0gZnJvbSAnLi4vbWVtb3J5L3R5cGVzLmpzJztcbmltcG9ydCB7IERFTElNIH0gZnJvbSAnLi4vbWVtb3J5L3V0aWxzLmpzJztcbmltcG9ydCB7IHR5cGUgUmVhZFNvdXJjZSwgZm9sZExlZ3MgfSBmcm9tICcuL3N0YXRlQXQuanMnO1xuaW1wb3J0IHR5cGUgeyBUaW1lVHJhdmVsU291cmNlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKiBPbmUgbGVnIG9mIGEgY2hhaW46IGEgc291cmNlLCBpdHMgcmVhZCBsb2csIGFuZCB3aGVyZSBpdCBzaXRzIGluIHRoZSBydW4uICovXG5leHBvcnQgaW50ZXJmYWNlIENoYWluTGVnIHtcbiAgcmVhZG9ubHkgc291cmNlOiBUaW1lVHJhdmVsU291cmNlO1xuICByZWFkb25seSBsb2c6IHJlYWRvbmx5IENvbW1pdEJ1bmRsZVtdO1xuICAvKiogTG93ZXN0IGV4ZWN1dGlvbiBpbmRleCBzdGFtcGVkIGluIHRoaXMgbGVnOyBgdW5kZWZpbmVkYCBmb3IgYW4gaWQtbGVzcyBsb2cuICovXG4gIHJlYWRvbmx5IGZpcnN0RXhlY3V0aW9uSW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgLyoqIEhpZ2hlc3QgZXhlY3V0aW9uIGluZGV4IHN0YW1wZWQgaW4gdGhpcyBsZWcuICovXG4gIHJlYWRvbmx5IGxhc3RFeGVjdXRpb25JbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkO1xufVxuXG4vKiogVGhlIGV4ZWN1dGlvbi1pbmRleCBzcGFuIG9mIG9uZSBsZWcsIHJlYWQgb2ZmIGl0cyBgcnVudGltZVN0YWdlSWRgcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGFuT2YobG9nOiByZWFkb25seSBDb21taXRCdW5kbGVbXSk6IHtcbiAgZmlyc3Q6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGFzdDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBpZHM6IFNldDxzdHJpbmc+O1xufSB7XG4gIGxldCBmaXJzdDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBsZXQgbGFzdDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBjb25zdCBpZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBidW5kbGUgb2YgbG9nKSB7XG4gICAgY29uc3QgaWQgPSBidW5kbGUucnVudGltZVN0YWdlSWQ7XG4gICAgaWYgKCFpZCkgY29udGludWU7XG4gICAgaWRzLmFkZChpZCk7XG4gICAgY29uc3QgeyBleGVjdXRpb25JbmRleCB9ID0gcGFyc2VSdW50aW1lU3RhZ2VJZChpZCk7XG4gICAgaWYgKE51bWJlci5pc05hTihleGVjdXRpb25JbmRleCkpIGNvbnRpbnVlO1xuICAgIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGV4ZWN1dGlvbkluZGV4IDwgZmlyc3QpIGZpcnN0ID0gZXhlY3V0aW9uSW5kZXg7XG4gICAgaWYgKGxhc3QgPT09IHVuZGVmaW5lZCB8fCBleGVjdXRpb25JbmRleCA+IGxhc3QpIGxhc3QgPSBleGVjdXRpb25JbmRleDtcbiAgfVxuICByZXR1cm4geyBmaXJzdCwgbGFzdCwgaWRzIH07XG59XG5cbi8qKlxuICogU3RydWN0dXJhbCBlcXVhbGl0eSBvZiB0d28gZm9sZGVkIHN0YXRlcywgaWdub3JpbmcgdGhlIHBhdGhzIHRoZSBsb2cgd2FzXG4gKiByZWRhY3RlZCBhdC5cbiAqXG4gKiBUaGUgZm9sZCByZXByb2R1Y2VzIGAnUkVEQUNURUQnYCB3aGVyZXZlciB0aGUgZW5naW5lIHNjcnViYmVkIGEgd3JpdGUsIHdoaWxlXG4gKiB0aGUgY2hlY2twb2ludCB0aGF0IHNlZWRlZCB0aGUgcmVzdW1lZCBsZWcgaG9sZHMgdGhlIHJlYWwgdmFsdWUg4oCUIHNvIHRob3NlXG4gKiBwYXRocyBDQU5OT1QgYWdyZWUsIGFuZCBhcmUgbm90IGFza2VkIHRvLiBFdmVyeXRoaW5nIGVsc2UgbXVzdDogc2FtZSBrZXlzXG4gKiAoYSBrZXkgaG9sZGluZyBgdW5kZWZpbmVkYCBjb3VudHMgYXMgYWJzZW50LCBhcyBpdCBkb2VzIHRocm91Z2ggSlNPTiksIHNhbWVcbiAqIGFycmF5IGxlbmd0aHMsIHNhbWUgbGVhdmVzIGJ5IGBPYmplY3QuaXNgLCBEYXRlcyBieSB0aGVpciBpbnN0YW50LiBWYWx1ZXNcbiAqIGFyZSB3aGF0ZXZlciBzdXJ2aXZlZCBgc3RydWN0dXJlZENsb25lYCwgd2hpY2ggaXMgdGhlIGxpYnJhcnkncyBvd24gbGF3IG9uXG4gKiBzdGF0ZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHNhbWVTdGF0ZShhOiB1bmtub3duLCBiOiB1bmtub3duLCByZWRhY3RlZDogUmVhZG9ubHlTZXQ8c3RyaW5nPiwgcGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChPYmplY3QuaXMoYSwgYikpIHJldHVybiB0cnVlO1xuICBpZiAodHlwZW9mIGEgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9PSAnb2JqZWN0JyB8fCBhID09PSBudWxsIHx8IGIgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlIHx8IGIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlICYmIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcbiAgfVxuICBpZiAoYSBpbnN0YW5jZW9mIE1hcCB8fCBiIGluc3RhbmNlb2YgTWFwIHx8IGEgaW5zdGFuY2VvZiBTZXQgfHwgYiBpbnN0YW5jZW9mIFNldCkge1xuICAgIGlmICghKGEgaW5zdGFuY2VvZiBNYXAgJiYgYiBpbnN0YW5jZW9mIE1hcCkgJiYgIShhIGluc3RhbmNlb2YgU2V0ICYmIGIgaW5zdGFuY2VvZiBTZXQpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHNhbWVTdGF0ZShbLi4uYS5lbnRyaWVzKCldLCBbLi4uYi5lbnRyaWVzKCldLCByZWRhY3RlZCwgcGF0aCk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoYSkgIT09IEFycmF5LmlzQXJyYXkoYikpIHJldHVybiBmYWxzZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYSkgJiYgQXJyYXkuaXNBcnJheShiKSkge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gYS5ldmVyeSgoaXRlbSwgaSkgPT4gc2FtZVN0YXRlKGl0ZW0sIGJbaV0sIHJlZGFjdGVkLCBwYXRoID09PSAnJyA/IFN0cmluZyhpKSA6IGAke3BhdGh9JHtERUxJTX0ke2l9YCkpO1xuICB9XG4gIGNvbnN0IGxlZnQgPSBhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCByaWdodCA9IGIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHByZXNlbnQgPSAobzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IE9iamVjdC5rZXlzKG8pLmZpbHRlcigoaykgPT4gb1trXSAhPT0gdW5kZWZpbmVkKTtcbiAgY29uc3QgbGVmdEtleXMgPSBwcmVzZW50KGxlZnQpO1xuICBjb25zdCByaWdodEtleXMgPSBuZXcgU2V0KHByZXNlbnQocmlnaHQpKTtcbiAgaWYgKGxlZnRLZXlzLmxlbmd0aCAhPT0gcmlnaHRLZXlzLnNpemUgfHwgIWxlZnRLZXlzLmV2ZXJ5KChrKSA9PiByaWdodEtleXMuaGFzKGspKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gbGVmdEtleXMuZXZlcnkoKGspID0+IHtcbiAgICBjb25zdCBjaGlsZFBhdGggPSBwYXRoID09PSAnJyA/IGsgOiBgJHtwYXRofSR7REVMSU19JHtrfWA7XG4gICAgcmV0dXJuIHJlZGFjdGVkLmhhcyhjaGlsZFBhdGgpIHx8IHNhbWVTdGF0ZShsZWZ0W2tdLCByaWdodFtrXSwgcmVkYWN0ZWQsIGNoaWxkUGF0aCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENoZWNrIHRoYXQgYGxlZ3NgIHJlYWxseSBhcmUgb25lIHJ1biByZWFkIGluIG9yZGVyLCBhbmQgc2F5IHdoeSBub3QuXG4gKlxuICogUmV0dXJucyB0aGUgcmVmdXNhbCBtZXNzYWdlLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSBjaGFpbiBpcyBzb3VuZC4gVGhyZWVcbiAqIGRpc3RpbmN0IGZhaWx1cmVzLCBiZWNhdXNlIHRoZXkgYXJlIHRocmVlIGRpZmZlcmVudCBtaXN0YWtlcywgY2hlY2tlZCBpblxuICogdGhpcyBvcmRlcjpcbiAqXG4gKiAtIFJFUEVBVEVEIFNUQUdFIOKAlCBvbmUgYHJ1bnRpbWVTdGFnZUlkYCBhcHBlYXJzIGluIHR3byBsZWdzLiBJZHMgYXJlIHVuaXF1ZVxuICogICB3aXRoaW4gYSBydW4sIHNvIGEgcmVwZWF0IG1lYW5zIHRoZSBzYW1lIGV4ZWN1dGlvbiB3YXMgcmVjb3JkZWQgdHdpY2U6IGFcbiAqICAgc2FtZS1leGVjdXRvciByZXN1bWUsIHdob3NlIHNuYXBzaG90IEFMUkVBRFkgaG9sZHMgdGhlIHdob2xlIGxvZyBhbmQgbmVlZHNcbiAqICAgbm8gY2hhaW5pbmcsIGlzIHRoZSB1c3VhbCBjYXVzZS5cbiAqIC0gT1VUIE9GIE9SREVSIOKAlCBhIGxhdGVyIGxlZydzIGZpcnN0IGV4ZWN1dGlvbiBpbmRleCBpcyBub3QgcGFzdCB0aGUgZWFybGllclxuICogICBsZWcncyBsYXN0LiBFaXRoZXIgdGhlIHNvdXJjZXMgd2VyZSBoYW5kZWQgb3ZlciBiYWNrd2FyZHMsIG9yIHRoZSBzZWNvbmRcbiAqICAgaXMgbm90IGEgY29udGludWF0aW9uIGF0IGFsbCAoYSBmcmVzaCBydW4gcmVzdGFydHMgdGhlIGNvdW50ZXIgYXQgMCwgc28gYW5cbiAqICAgdW5yZWxhdGVkIHNuYXBzaG90IGZhaWxzIGhlcmUgcmF0aGVyIHRoYW4gc2lsZW50bHkgaW50ZXJsZWF2aW5nKS5cbiAqIC0gV1JPTkcgTElORUFHRSDigJQgbGVnIGsncyBgaW5pdGlhbFN0YXRlYCBpcyBub3QgdGhlIHN0YXRlIGxlZ3MgMC4uay0xIGZvbGRcbiAqICAgdG8uIE9uIGEgcmVzdW1lIHRoZSBsYXRlciBsZWcgaXMgc2VlZGVkIGZyb20gdGhlIGNoZWNrcG9pbnQsIHNvIGl0cyBiYXNlXG4gKiAgIElTIHRoZSBzdGF0ZSBhdCB0aGUgcGF1c2U7IGEgbGVnIHRoYXQgYmVnaW5zIGFueXdoZXJlIGVsc2UgaXMgZnJvbSBzb21lXG4gKiAgIG90aGVyIHJ1biwgaG93ZXZlciBpdHMgaW5kaWNlcyBoYXBwZW4gdG8gbGluZSB1cC5cbiAqXG4gKiBUSEUgTElORUFHRSBDSEVDSyBSVU5TIE9OTFkgV0hFUkUgVEhFIFJFQ09SRCBBTExPV1MgSVQsIGFuZCBpcyBza2lwcGVkIOKAlFxuICogbmV2ZXIgZmFrZWQg4oCUIG90aGVyd2lzZTogbGVnIGsgbXVzdCBjYXJyeSBhbiBgaW5pdGlhbFN0YXRlYCAoYSByZWNvcmRpbmdcbiAqIG1hZGUgYmVmb3JlIDkuMTcgaGFzIG5vbmUpLCBhbmQgdGhlIGZvbGQgb2YgdGhlIGxlZ3MgYmVmb3JlIGl0IG11c3Qgc3RhbmQgb25cbiAqIGEgcmVhbCBiYXNlIChgYmFzaXM6ICdpbml0aWFsK2xvZydgKSB3aXRoIG5vIHVucmVhZGFibGUgcm93cyAoYHNraXBwZWRgXG4gKiBhYnNlbnQpIOKAlCBhIGxvZy1vbmx5IG9yIGdhcHBlZCBmb2xkIGlzIG5vdCBhIHN0YXRlIGEgcmVhbCBiYXNlIG1heSBiZSBoZWxkXG4gKiBhZ2FpbnN0LiBPbiBzdWNoIGEgY2hhaW4gdGhlIHR3byBpbmRleCBjaGVja3MgYXJlIHRoZSB3aG9sZSBkZWZlbmNlLCBhbmRcbiAqIGBmb2xkTGVnc2AnIGxlZyBydWxlIHRoZW4gQ09OVElOVUVTIHRoZSBmb2xkIGFjcm9zcyB0aGUgc2VhbSwgd2hpY2ggaXMgdGhlXG4gKiByaWdodCBzdGF0ZSBmb3IgYSByZWFsIHJlc3VtZSBhbmQgaXMgd2hhdCBgYmFzaXNgIHJlcG9ydHMuIFBhdGhzIHRoZSBsb2dcbiAqIHdhcyByZWRhY3RlZCBhdCBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgY29tcGFyaXNvbjogdGhlIGZvbGQgaG9sZHNcbiAqIGAnUkVEQUNURUQnYCB0aGVyZSBhbmQgdGhlIGNoZWNrcG9pbnQgaG9sZHMgdGhlIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmdXNlQ2hhaW4obGVnczogcmVhZG9ubHkgUmVhZFNvdXJjZVtdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGxlZ3MubGVuZ3RoID09PSAwKSByZXR1cm4gJ3RpbWVUcmF2ZWw6IGEgY2hhaW4gbmVlZHMgYXQgbGVhc3Qgb25lIHNvdXJjZSwgZ290IGFuIGVtcHR5IGFycmF5Lic7XG5cbiAgY29uc3Qgc3BhbnMgPSBsZWdzLm1hcCgobGVnKSA9PiBzcGFuT2YobGVnLmxvZykpO1xuICBjb25zdCBzZWVuID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCBbaSwgc3Bhbl0gb2Ygc3BhbnMuZW50cmllcygpKSB7XG4gICAgZm9yIChjb25zdCBpZCBvZiBzcGFuLmlkcykge1xuICAgICAgY29uc3QgZWFybGllciA9IHNlZW4uZ2V0KGlkKTtcbiAgICAgIGlmIChlYXJsaWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBgdGltZVRyYXZlbDogc291cmNlcyAke2VhcmxpZXJ9IGFuZCAke2l9IGJvdGggcmVjb3JkICcke2lkfScuIEEgcnVudGltZVN0YWdlSWQgaXMgdW5pcXVlIGAgK1xuICAgICAgICAgICd3aXRoaW4gYSBydW4sIHNvIHRoZXNlIGFyZSBub3QgdHdvIGxlZ3Mgb2Ygb25lIHJ1biDigJQgYSBzYW1lLWV4ZWN1dG9yIHJlc3VtZSBhbHJlYWR5ICcgK1xuICAgICAgICAgICdjYXJyaWVzIHRoZSB3aG9sZSBsb2cgaW4gT05FIHNuYXBzaG90IGFuZCBtdXN0IG5vdCBiZSBjaGFpbmVkIHdpdGggdGhlIHBhdXNlZCBvbmUuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc2Vlbi5zZXQoaWQsIGkpO1xuICAgIH1cbiAgfVxuXG4gIGxldCBwcmV2aW91czogeyBpZHg6IG51bWJlcjsgbGFzdDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgW2ksIHNwYW5dIG9mIHNwYW5zLmVudHJpZXMoKSkge1xuICAgIGlmIChzcGFuLmZpcnN0ID09PSB1bmRlZmluZWQgfHwgc3Bhbi5sYXN0ID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgIGlmIChwcmV2aW91cyAmJiBzcGFuLmZpcnN0IDw9IHByZXZpb3VzLmxhc3QpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGB0aW1lVHJhdmVsOiBzb3VyY2UgJHtpfSBzdGFydHMgYXQgZXhlY3V0aW9uIGluZGV4ICR7c3Bhbi5maXJzdH0sIHdoaWNoIGlzIG5vdCBwYXN0IGAgK1xuICAgICAgICBgc291cmNlICR7cHJldmlvdXMuaWR4fSdzIGxhc3QgKCR7cHJldmlvdXMubGFzdH0pLiBDaGFpbiB0aGUgc291cmNlcyBpbiBydW4gb3JkZXIsIGFuZCBgICtcbiAgICAgICAgJ29ubHkgc291cmNlcyBmcm9tIE9ORSBsaW5lYWdlIOKAlCB0aGUgZW5naW5lIG5ldmVyIHJlc2V0cyB0aGUgZXhlY3V0aW9uIGNvdW50ZXIgYWNyb3NzIGEgJyArXG4gICAgICAgICdyZXN1bWUsIHNvIGEgZnJlc2ggcnVuIHJlc3RhcnRpbmcgYXQgMCBpcyBhIGRpZmZlcmVudCBydW4sIG5vdCBhIGNvbnRpbnVhdGlvbi4nXG4gICAgICApO1xuICAgIH1cbiAgICBwcmV2aW91cyA9IHsgaWR4OiBpLCBsYXN0OiBzcGFuLmxhc3QgfTtcbiAgfVxuXG4gIGZvciAobGV0IGsgPSAxOyBrIDwgbGVncy5sZW5ndGg7IGsrKykge1xuICAgIGNvbnN0IGJhc2UgPSBsZWdzW2tdLmJhc2U7XG4gICAgaWYgKCFiYXNlIHx8IHR5cGVvZiBiYXNlICE9PSAnb2JqZWN0JykgY29udGludWU7IC8vIG5vIHNpZ25hbCBvbiB0aGUgcmVjb3JkIOKAlCBkb2N1bWVudGVkIGRlZ3JhZGF0aW9uXG4gICAgY29uc3QgYmVmb3JlID0gZm9sZExlZ3MobGVncywgayAtIDEsIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gICAgaWYgKGJlZm9yZS5iYXNpcyAhPT0gJ2luaXRpYWwrbG9nJyB8fCBiZWZvcmUuc2tpcHBlZCkgY29udGludWU7IC8vIG5vdCBhIHN0YXRlIGEgcmVhbCBiYXNlIGNhbiBiZSBoZWxkIHRvXG4gICAgaWYgKCFzYW1lU3RhdGUoYmVmb3JlLnN0YXRlLCBiYXNlLCBuZXcgU2V0KGJlZm9yZS5yZWRhY3RlZFBhdGhzKSwgJycpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBgdGltZVRyYXZlbDogc291cmNlICR7a30ncyBpbml0aWFsU3RhdGUgaXMgbm90IHRoZSBzdGF0ZSBzb3VyY2UgJHtrIC0gMX0gZm9sZHMgdG8uIE9uIGEgcmVzdW1lIGAgK1xuICAgICAgICBcInRoZSBsYXRlciBsZWcncyBpbml0aWFsU3RhdGUgSVMgdGhlIHN0YXRlIGF0IHRoZSBwYXVzZSwgc28gYSBsZWcgdGhhdCBiZWdpbnMgYW55d2hlcmUgZWxzZSBpcyBcIiArXG4gICAgICAgICdub3QgZnJvbSBvbmUgbGluZWFnZSDigJQgYSBkaWZmZXJlbnQgY2hhcnQsIG9yIGFub3RoZXIgcnVuIG9mIHRoaXMgb25lIOKAlCBldmVuIHdoZW4gaXRzIGV4ZWN1dGlvbiAnICtcbiAgICAgICAgJ2luZGljZXMgaGFwcGVuIHRvIGJlIGhpZ2hlci4nXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RpbWUtdHJhdmVsL2NoYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQW1CLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQWF6RCwyRUFBMkU7QUFDM0UsTUFBTSxVQUFVLE1BQU0sQ0FBQyxHQUE0QjtJQUtqRCxJQUFJLEtBQXlCLENBQUM7SUFDOUIsSUFBSSxJQUF3QixDQUFDO0lBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDOUIsS0FBSyxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN6QixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxFQUFFO1lBQUUsU0FBUztRQUNsQixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ1osTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFBRSxTQUFTO1FBQzNDLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxjQUFjLEdBQUcsS0FBSztZQUFFLEtBQUssR0FBRyxjQUFjLENBQUM7UUFDMUUsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLGNBQWMsR0FBRyxJQUFJO1lBQUUsSUFBSSxHQUFHLGNBQWMsQ0FBQztJQUN6RSxD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TSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDdEUsT0FBTyxDQUNMLHNCQUFzQixDQUFDLDJDQUEyQyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUI7Z0JBQ2hHLGdHQUFnRztnQkFDaEcsaUdBQWlHO2dCQUNqRyw4QkFBOEIsQ0FDL0IsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY2hhaW4udHMg4oCUIHJlYWRpbmcgYSBwYXVzZS9yZXN1bWUgYXMgT05FIGF4aXMuXG4gKlxuICogV0hZIFRISVMgRklMRSBFWElTVFMuIEEgcGF1c2UgYW5kIGl0cyByZXN1bWUgcHJvZHVjZSBUV08gc25hcHNob3RzLiBPbiBhXG4gKiBjcm9zcy1leGVjdXRvciByZXN1bWUgKHRoZSBjaGVja3BvaW50IHdhcyBwZXJzaXN0ZWQgYW5kIGEgZnJlc2ggZXhlY3V0b3JcbiAqIHBpY2tlZCBpdCB1cCkgdGhlIHNlY29uZCBydW4gZ2V0cyBhIGZyZXNoIHJ1bnRpbWU6IGl0cyBgY29tbWl0TG9nYCBzdGFydHMgYXRcbiAqIGluZGV4IDAgYW5kIGhvbGRzIG9ubHkgdGhlIHBvc3QtcmVzdW1lIGNvbW1pdHMsIGFuZCBpdHMgYGluaXRpYWxTdGF0ZWAgaXNcbiAqIHRoZSBzdGF0ZSBhdCB0aGUgcGF1c2UuIFR3byBsb2dzLCB0d28gZGlzam9pbnQgYXhlcyDigJQgc28gYSByZWFkZXIgc2NydWJiaW5nXG4gKiBhIHJlc3VtZWQgcnVuIHNhdyBvbmx5IHRoZSBzZWNvbmQgaGFsZiB1bmxlc3MgdGhlIGFwcGxpY2F0aW9uIGhhZCBrZXB0IHRoZVxuICogcGF1c2VkIHNuYXBzaG90IGFuZCBzdGl0Y2hlZCB0aGUgaGFsdmVzIGl0c2VsZi4gRXZlcnkgYXBwbGljYXRpb24gdGhhdFxuICogcGF1c2VzIHdvdWxkIHdyaXRlIHRoYXQgc3RpdGNoaW5nLCBhbmQgbm9uZSBvZiB0aGVtIG93biB0aGUgYXJpdGhtZXRpYy5cbiAqXG4gKiBUSEUgSE9ORVNUIEJJVCwgdXAgZnJvbnQ6IENPTU1JVCBJTkRJQ0VTIEFSRSBSVU4tTE9DQUwuIFRoZXJlIGlzIG5vIGdsb2JhbFxuICogaW5kZXggYWNyb3NzIGEgY2hhaW4gYW5kIHRoaXMgZmlsZSBkb2VzIG5vdCBpbnZlbnQgb25lIOKAlCBgY29tbWl0SWR4YCBhbmRcbiAqIGBsYXN0Q29tbWl0SWR4YCBrZWVwIGluZGV4aW5nIHRoZWlyIG93biBzb3VyY2UsIGFuZCBldmVyeSBzdG9wIGNhcnJpZXMgdGhlXG4gKiB7QGxpbmsgU3RvcC5zb3VyY2VJZHh9IHRoZXkgYmVsb25nIHRvLiBUaGUgY3Vyc29yJ3MgU1RFUFMgYXJlIHdoYXQgcnVuXG4gKiBhY3Jvc3MgdGhlIHdob2xlIGNoYWluLlxuICpcbiAqIEFORCBUSEUgUkVGVVNBTDogYSBjaGFpbiB0aGF0IGlzIG5vdCBvcmRlcmVkLCBvciB3aG9zZSBsZWdzIGFyZSBub3QgZnJvbSBvbmVcbiAqIGxpbmVhZ2UsIGlzIFJFRlVTRUQgcmF0aGVyIHRoYW4gZ3Vlc3NlZCBhdC4gVGhlIHJlY29yZCBjYXJyaWVzIFRXTyBzaWduYWxzXG4gKiBhbmQgdGhpcyBmaWxlIHJlYWRzIGJvdGg6XG4gKlxuICogLSBUaGUgZXhlY3V0aW9uIGluZGV4IHRoZSBlbmdpbmUgc3RhbXBzIGludG8gZXZlcnkgYHJ1bnRpbWVTdGFnZUlkYCDigJRcbiAqICAgZ2xvYmFsbHkgbW9ub3RvbmljIHBlciBydW4gYW5kLCBkZWxpYmVyYXRlbHksIE5PVCByZXNldCBvbiByZXN1bWUuIFNvIGFcbiAqICAgbGF0ZXIgbGVnJ3MgZmlyc3QgZXhlY3V0aW9uIGluZGV4IG11c3QgYmUgcGFzdCB0aGUgZWFybGllciBsZWcncyBsYXN0LCBhbmRcbiAqICAgbm8gc3RhZ2UgbWF5IGFwcGVhciBpbiB0d28gbGVncy4gVGhpcyBjYXRjaGVzIGEgYmFja3dhcmRzIGNoYWluLCBhIGZyZXNoXG4gKiAgIHJ1biAod2hpY2ggcmVzdGFydHMgYXQgMCkgYW5kIGEgc2FtZS1leGVjdXRvciByZXN1bWUgKHdob3NlIG9uZSBzbmFwc2hvdFxuICogICBhbHJlYWR5IGhvbGRzIGJvdGggaGFsdmVzKS5cbiAqIC0gVGhlIGxhdGVyIGxlZydzIGBpbml0aWFsU3RhdGVgLiBPbiBhIHJlc3VtZSB0aGUgZnJlc2ggcnVudGltZSBpcyBzZWVkZWRcbiAqICAgZnJvbSB0aGUgY2hlY2twb2ludCwgc28gdGhhdCBiYXNlIElTIHRoZSBzdGF0ZSBhdCB0aGUgcGF1c2Ug4oCUIGFuZCB0aGVcbiAqICAgc3RhdGUgdGhlIGVhcmxpZXIgbGVncyBGT0xEIFRPIG11c3QgZGVlcC1lcXVhbCBpdC4gVGhpcyBpcyB3aGF0IGNhdGNoZXMgYVxuICogICBsZWcgZnJvbSBzb21lIE9USEVSIGxpbmVhZ2Ugd2hvc2UgaW5kaWNlcyBtZXJlbHkgaGFwcGVuIHRvIGJlIGhpZ2hlcjogdGhlXG4gKiAgIGNvdW50ZXJzIGxpbmUgdXAgYnkgYWNjaWRlbnQsIHRoZSBzdGF0ZSBuZXZlciBkb2VzLlxuICpcbiAqIEEgY2hhcnQgaWRlbnRpdHkgb3IgYSBsaW5lYWdlIGlkIGlzIE5PVCBvbiB0aGUgcmVjb3JkLCBzbyBub3RoaW5nIGhlcmVcbiAqIHByZXRlbmRzIHRvIGNoZWNrIG9uZS4gQW5kIHdoZXJlIHRoZSBzdGF0ZSBzaWduYWwgaXMgbm90IG9uIHRoZSByZWNvcmRcbiAqIGVpdGhlciDigJQgYSBsZWcgcmVjb3JkZWQgYmVmb3JlIDkuMTcgY2FycmllcyBubyBgaW5pdGlhbFN0YXRlYDsgYW4gZWFybGllclxuICogbGVnIHdpdGggbm8gYmFzZSBmb2xkcyBgJ2xvZy1vbmx5J2A7IGEgbGVnIHdpdGggdW5yZWFkYWJsZSByb3dzIGZvbGRzIGFuXG4gKiBpbmNvbXBsZXRlIHN0YXRlIOKAlCB0aGF0IGNoZWNrIGlzIFNLSVBQRUQsIG5vdCBmYWtlZDogdGhlIGNoYWluIHRoZW4gcmVzdHMgb25cbiAqIHRoZSBpbmRleCBjaGVja3MgYWxvbmUsIGFuZCBldmVyeSBmb2xkJ3MgYGJhc2lzYCBzdGlsbCBzYXlzIHdoYXQgaXQgc3Rvb2RcbiAqIG9uLiBUaGF0IGRlZ3JhZGF0aW9uIGlzIGRvY3VtZW50ZWQgb24gYHJlZnVzZUNoYWluYCwgb24gYHRpbWVUcmF2ZWxgJ3NcbiAqIGBAdGhyb3dzYCwgYW5kIGluIHRoZSBSRUFETUUuXG4gKi9cblxuaW1wb3J0IHsga2luZE9mIH0gZnJvbSAnLi4vY2FwdHVyZS92YWx1ZUtpbmRzLmpzJztcbmltcG9ydCB7IHBhcnNlUnVudGltZVN0YWdlSWQgfSBmcm9tICcuLi9pZHMvcnVudGltZVN0YWdlSWQuanMnO1xuaW1wb3J0IHR5cGUgeyBDb21taXRCdW5kbGUgfSBmcm9tICcuLi9tZW1vcnkvdHlwZXMuanMnO1xuaW1wb3J0IHsgZGVlcEVxdWFsLCBERUxJTSB9IGZyb20gJy4uL21lbW9yeS91dGlscy5qcyc7XG5pbXBvcnQgeyB0eXBlIFJlYWRTb3VyY2UsIGZvbGRMZWdzIH0gZnJvbSAnLi9zdGF0ZUF0LmpzJztcbmltcG9ydCB0eXBlIHsgVGltZVRyYXZlbFNvdXJjZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKiogT25lIGxlZyBvZiBhIGNoYWluOiBhIHNvdXJjZSwgaXRzIHJlYWQgbG9nLCBhbmQgd2hlcmUgaXQgc2l0cyBpbiB0aGUgcnVuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFpbkxlZyB7XG4gIHJlYWRvbmx5IHNvdXJjZTogVGltZVRyYXZlbFNvdXJjZTtcbiAgcmVhZG9ubHkgbG9nOiByZWFkb25seSBDb21taXRCdW5kbGVbXTtcbiAgLyoqIExvd2VzdCBleGVjdXRpb24gaW5kZXggc3RhbXBlZCBpbiB0aGlzIGxlZzsgYHVuZGVmaW5lZGAgZm9yIGFuIGlkLWxlc3MgbG9nLiAqL1xuICByZWFkb25seSBmaXJzdEV4ZWN1dGlvbkluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIC8qKiBIaWdoZXN0IGV4ZWN1dGlvbiBpbmRleCBzdGFtcGVkIGluIHRoaXMgbGVnLiAqL1xuICByZWFkb25seSBsYXN0RXhlY3V0aW9uSW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIFRoZSBleGVjdXRpb24taW5kZXggc3BhbiBvZiBvbmUgbGVnLCByZWFkIG9mZiBpdHMgYHJ1bnRpbWVTdGFnZUlkYHMuICovXG5leHBvcnQgZnVuY3Rpb24gc3Bhbk9mKGxvZzogcmVhZG9ubHkgQ29tbWl0QnVuZGxlW10pOiB7XG4gIGZpcnN0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGxhc3Q6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgaWRzOiBTZXQ8c3RyaW5nPjtcbn0ge1xuICBsZXQgZmlyc3Q6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbGV0IGxhc3Q6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgY29uc3QgaWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgYnVuZGxlIG9mIGxvZykge1xuICAgIGNvbnN0IGlkID0gYnVuZGxlLnJ1bnRpbWVTdGFnZUlkO1xuICAgIGlmICghaWQpIGNvbnRpbnVlO1xuICAgIGlkcy5hZGQoaWQpO1xuICAgIGNvbnN0IHsgZXhlY3V0aW9uSW5kZXggfSA9IHBhcnNlUnVudGltZVN0YWdlSWQoaWQpO1xuICAgIGlmIChOdW1iZXIuaXNOYU4oZXhlY3V0aW9uSW5kZXgpKSBjb250aW51ZTtcbiAgICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBleGVjdXRpb25JbmRleCA8IGZpcnN0KSBmaXJzdCA9IGV4ZWN1dGlvbkluZGV4O1xuICAgIGlmIChsYXN0ID09PSB1bmRlZmluZWQgfHwgZXhlY3V0aW9uSW5kZXggPiBsYXN0KSBsYXN0ID0gZXhlY3V0aW9uSW5kZXg7XG4gIH1cbiAgcmV0dXJuIHsgZmlyc3QsIGxhc3QsIGlkcyB9O1xufVxuXG4vKipcbiAqIFN0cnVjdHVyYWwgZXF1YWxpdHkgb2YgdHdvIGZvbGRlZCBzdGF0ZXMsIGlnbm9yaW5nIHRoZSBwYXRocyB0aGUgbG9nIHdhc1xuICogcmVkYWN0ZWQgYXQuXG4gKlxuICogVGhlIGZvbGQgcmVwcm9kdWNlcyBgJ1JFREFDVEVEJ2Agd2hlcmV2ZXIgdGhlIGVuZ2luZSBzY3J1YmJlZCBhIHdyaXRlLCB3aGlsZVxuICogdGhlIGNoZWNrcG9pbnQgdGhhdCBzZWVkZWQgdGhlIHJlc3VtZWQgbGVnIGhvbGRzIHRoZSByZWFsIHZhbHVlIOKAlCBzbyB0aG9zZVxuICogcGF0aHMgQ0FOTk9UIGFncmVlLCBhbmQgYXJlIG5vdCBhc2tlZCB0by4gRXZlcnl0aGluZyBlbHNlIGlzIGRlY2lkZWQgYnkgdGhlXG4gKiBPTkUgZXF1YWxpdHkgbGF3IChgbWVtb3J5L2VxdWFsaXR5LnRzIMK3IGRlZXBFcXVhbGAsIGV2ZXJ5IHZhbHVlIGtpbmQgY29tcGFyZWRcbiAqIGFzIHRoZSByZWNvcmQgaG9sZHMgaXQ7IDkuNDQuMiDigJQgdGhpcyB3YWxrIGhhZCBhIGxhdyBvZiBpdHMgb3duLCB3aGljaCBoZWxkXG4gKiBhbnkgdHdvIFJlZ0V4cHMsIEVycm9ycyBvciBidWZmZXJzIGVxdWFsKS4gQm90aCBzaWRlcyBhcmUgY29waWVzIG9mIG9uZVxuICogcmVjb3JkLCBzbyBhbiBvcGFxdWUgdmFsdWUgY29tcGFyZXMgYXMgYCdjb3BpZXMnYC4gT25seSB0aGUgY29udGFpbmVycyBhYm92ZVxuICogYSByZWRhY3RlZCBwYXRoIGFyZSB3YWxrZWQgaGVyZS5cbiAqL1xuZnVuY3Rpb24gc2FtZVN0YXRlKGE6IHVua25vd24sIGI6IHVua25vd24sIHJlZGFjdGVkOiBSZWFkb25seVNldDxzdHJpbmc+LCBwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFyZWRhY3RlZEJlbG93KHBhdGgsIHJlZGFjdGVkKSkgcmV0dXJuIGRlZXBFcXVhbChhLCBiLCAnY29waWVzJyk7XG4gIGlmIChBcnJheS5pc0FycmF5KGEpICYmIEFycmF5LmlzQXJyYXkoYikpIHtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGEuZXZlcnkoKGl0ZW0sIGkpID0+IHNhbWVTdGF0ZShpdGVtLCBiW2ldLCByZWRhY3RlZCwgcGF0aCA9PT0gJycgPyBTdHJpbmcoaSkgOiBgJHtwYXRofSR7REVMSU19JHtpfWApKTtcbiAgfVxuICBjb25zdCBwbGFpbiA9ICh2OiB1bmtub3duKTogdiBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PlxuICAgIHYgIT09IG51bGwgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHYpICYmIGtpbmRPZih2KSA9PT0gJ3BsYWluJztcbiAgaWYgKCFwbGFpbihhKSB8fCAhcGxhaW4oYikpIHJldHVybiBkZWVwRXF1YWwoYSwgYiwgJ2NvcGllcycpO1xuICBjb25zdCBwcmVzZW50ID0gKG86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBPYmplY3Qua2V5cyhvKS5maWx0ZXIoKGspID0+IG9ba10gIT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGxlZnRLZXlzID0gcHJlc2VudChhKTtcbiAgY29uc3QgcmlnaHRLZXlzID0gbmV3IFNldChwcmVzZW50KGIpKTtcbiAgaWYgKGxlZnRLZXlzLmxlbmd0aCAhPT0gcmlnaHRLZXlzLnNpemUgfHwgIWxlZnRLZXlzLmV2ZXJ5KChrKSA9PiByaWdodEtleXMuaGFzKGspKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gbGVmdEtleXMuZXZlcnkoKGspID0+IHtcbiAgICBjb25zdCBjaGlsZFBhdGggPSBwYXRoID09PSAnJyA/IGsgOiBgJHtwYXRofSR7REVMSU19JHtrfWA7XG4gICAgcmV0dXJuIHJlZGFjdGVkLmhhcyhjaGlsZFBhdGgpIHx8IHNhbWVTdGF0ZShhW2tdLCBiW2tdLCByZWRhY3RlZCwgY2hpbGRQYXRoKTtcbiAgfSk7XG59XG5cbi8qKiBJcyBgcGF0aGAsIG9yIGEgcGF0aCBiZWxvdyBpdCwgb25lIHRoZSBsb2cgd2FzIHJlZGFjdGVkIGF0PyAqL1xuZnVuY3Rpb24gcmVkYWN0ZWRCZWxvdyhwYXRoOiBzdHJpbmcsIHJlZGFjdGVkOiBSZWFkb25seVNldDxzdHJpbmc+KTogYm9vbGVhbiB7XG4gIGlmIChyZWRhY3RlZC5zaXplID09PSAwKSByZXR1cm4gZmFsc2U7XG4gIGlmIChwYXRoID09PSAnJykgcmV0dXJuIHRydWU7XG4gIGZvciAoY29uc3QgciBvZiByZWRhY3RlZCkgaWYgKHIgPT09IHBhdGggfHwgci5zdGFydHNXaXRoKGAke3BhdGh9JHtERUxJTX1gKSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVjayB0aGF0IGBsZWdzYCByZWFsbHkgYXJlIG9uZSBydW4gcmVhZCBpbiBvcmRlciwgYW5kIHNheSB3aHkgbm90LlxuICpcbiAqIFJldHVybnMgdGhlIHJlZnVzYWwgbWVzc2FnZSwgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGUgY2hhaW4gaXMgc291bmQuIFRocmVlXG4gKiBkaXN0aW5jdCBmYWlsdXJlcywgYmVjYXVzZSB0aGV5IGFyZSB0aHJlZSBkaWZmZXJlbnQgbWlzdGFrZXMsIGNoZWNrZWQgaW5cbiAqIHRoaXMgb3JkZXI6XG4gKlxuICogLSBSRVBFQVRFRCBTVEFHRSDigJQgb25lIGBydW50aW1lU3RhZ2VJZGAgYXBwZWFycyBpbiB0d28gbGVncy4gSWRzIGFyZSB1bmlxdWVcbiAqICAgd2l0aGluIGEgcnVuLCBzbyBhIHJlcGVhdCBtZWFucyB0aGUgc2FtZSBleGVjdXRpb24gd2FzIHJlY29yZGVkIHR3aWNlOiBhXG4gKiAgIHNhbWUtZXhlY3V0b3IgcmVzdW1lLCB3aG9zZSBzbmFwc2hvdCBBTFJFQURZIGhvbGRzIHRoZSB3aG9sZSBsb2cgYW5kIG5lZWRzXG4gKiAgIG5vIGNoYWluaW5nLCBpcyB0aGUgdXN1YWwgY2F1c2UuXG4gKiAtIE9VVCBPRiBPUkRFUiDigJQgYSBsYXRlciBsZWcncyBmaXJzdCBleGVjdXRpb24gaW5kZXggaXMgbm90IHBhc3QgdGhlIGVhcmxpZXJcbiAqICAgbGVnJ3MgbGFzdC4gRWl0aGVyIHRoZSBzb3VyY2VzIHdlcmUgaGFuZGVkIG92ZXIgYmFja3dhcmRzLCBvciB0aGUgc2Vjb25kXG4gKiAgIGlzIG5vdCBhIGNvbnRpbnVhdGlvbiBhdCBhbGwgKGEgZnJlc2ggcnVuIHJlc3RhcnRzIHRoZSBjb3VudGVyIGF0IDAsIHNvIGFuXG4gKiAgIHVucmVsYXRlZCBzbmFwc2hvdCBmYWlscyBoZXJlIHJhdGhlciB0aGFuIHNpbGVudGx5IGludGVybGVhdmluZykuXG4gKiAtIFdST05HIExJTkVBR0Ug4oCUIGxlZyBrJ3MgYGluaXRpYWxTdGF0ZWAgaXMgbm90IHRoZSBzdGF0ZSBsZWdzIDAuLmstMSBmb2xkXG4gKiAgIHRvLiBPbiBhIHJlc3VtZSB0aGUgbGF0ZXIgbGVnIGlzIHNlZWRlZCBmcm9tIHRoZSBjaGVja3BvaW50LCBzbyBpdHMgYmFzZVxuICogICBJUyB0aGUgc3RhdGUgYXQgdGhlIHBhdXNlOyBhIGxlZyB0aGF0IGJlZ2lucyBhbnl3aGVyZSBlbHNlIGlzIGZyb20gc29tZVxuICogICBvdGhlciBydW4sIGhvd2V2ZXIgaXRzIGluZGljZXMgaGFwcGVuIHRvIGxpbmUgdXAuXG4gKlxuICogVEhFIExJTkVBR0UgQ0hFQ0sgUlVOUyBPTkxZIFdIRVJFIFRIRSBSRUNPUkQgQUxMT1dTIElULCBhbmQgaXMgc2tpcHBlZCDigJRcbiAqIG5ldmVyIGZha2VkIOKAlCBvdGhlcndpc2U6IGxlZyBrIG11c3QgY2FycnkgYW4gYGluaXRpYWxTdGF0ZWAgKGEgcmVjb3JkaW5nXG4gKiBtYWRlIGJlZm9yZSA5LjE3IGhhcyBub25lKSwgYW5kIHRoZSBmb2xkIG9mIHRoZSBsZWdzIGJlZm9yZSBpdCBtdXN0IHN0YW5kIG9uXG4gKiBhIHJlYWwgYmFzZSAoYGJhc2lzOiAnaW5pdGlhbCtsb2cnYCkgd2l0aCBubyB1bnJlYWRhYmxlIHJvd3MgKGBza2lwcGVkYFxuICogYWJzZW50KSDigJQgYSBsb2ctb25seSBvciBnYXBwZWQgZm9sZCBpcyBub3QgYSBzdGF0ZSBhIHJlYWwgYmFzZSBtYXkgYmUgaGVsZFxuICogYWdhaW5zdC4gT24gc3VjaCBhIGNoYWluIHRoZSB0d28gaW5kZXggY2hlY2tzIGFyZSB0aGUgd2hvbGUgZGVmZW5jZSwgYW5kXG4gKiBgZm9sZExlZ3NgJyBsZWcgcnVsZSB0aGVuIENPTlRJTlVFUyB0aGUgZm9sZCBhY3Jvc3MgdGhlIHNlYW0sIHdoaWNoIGlzIHRoZVxuICogcmlnaHQgc3RhdGUgZm9yIGEgcmVhbCByZXN1bWUgYW5kIGlzIHdoYXQgYGJhc2lzYCByZXBvcnRzLiBQYXRocyB0aGUgbG9nXG4gKiB3YXMgcmVkYWN0ZWQgYXQgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGNvbXBhcmlzb246IHRoZSBmb2xkIGhvbGRzXG4gKiBgJ1JFREFDVEVEJ2AgdGhlcmUgYW5kIHRoZSBjaGVja3BvaW50IGhvbGRzIHRoZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnVzZUNoYWluKGxlZ3M6IHJlYWRvbmx5IFJlYWRTb3VyY2VbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChsZWdzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICd0aW1lVHJhdmVsOiBhIGNoYWluIG5lZWRzIGF0IGxlYXN0IG9uZSBzb3VyY2UsIGdvdCBhbiBlbXB0eSBhcnJheS4nO1xuXG4gIGNvbnN0IHNwYW5zID0gbGVncy5tYXAoKGxlZykgPT4gc3Bhbk9mKGxlZy5sb2cpKTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgW2ksIHNwYW5dIG9mIHNwYW5zLmVudHJpZXMoKSkge1xuICAgIGZvciAoY29uc3QgaWQgb2Ygc3Bhbi5pZHMpIHtcbiAgICAgIGNvbnN0IGVhcmxpZXIgPSBzZWVuLmdldChpZCk7XG4gICAgICBpZiAoZWFybGllciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgYHRpbWVUcmF2ZWw6IHNvdXJjZXMgJHtlYXJsaWVyfSBhbmQgJHtpfSBib3RoIHJlY29yZCAnJHtpZH0nLiBBIHJ1bnRpbWVTdGFnZUlkIGlzIHVuaXF1ZSBgICtcbiAgICAgICAgICAnd2l0aGluIGEgcnVuLCBzbyB0aGVzZSBhcmUgbm90IHR3byBsZWdzIG9mIG9uZSBydW4g4oCUIGEgc2FtZS1leGVjdXRvciByZXN1bWUgYWxyZWFkeSAnICtcbiAgICAgICAgICAnY2FycmllcyB0aGUgd2hvbGUgbG9nIGluIE9ORSBzbmFwc2hvdCBhbmQgbXVzdCBub3QgYmUgY2hhaW5lZCB3aXRoIHRoZSBwYXVzZWQgb25lLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHNlZW4uc2V0KGlkLCBpKTtcbiAgICB9XG4gIH1cblxuICBsZXQgcHJldmlvdXM6IHsgaWR4OiBudW1iZXI7IGxhc3Q6IG51bWJlciB9IHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IFtpLCBzcGFuXSBvZiBzcGFucy5lbnRyaWVzKCkpIHtcbiAgICBpZiAoc3Bhbi5maXJzdCA9PT0gdW5kZWZpbmVkIHx8IHNwYW4ubGFzdCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICBpZiAocHJldmlvdXMgJiYgc3Bhbi5maXJzdCA8PSBwcmV2aW91cy5sYXN0KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBgdGltZVRyYXZlbDogc291cmNlICR7aX0gc3RhcnRzIGF0IGV4ZWN1dGlvbiBpbmRleCAke3NwYW4uZmlyc3R9LCB3aGljaCBpcyBub3QgcGFzdCBgICtcbiAgICAgICAgYHNvdXJjZSAke3ByZXZpb3VzLmlkeH0ncyBsYXN0ICgke3ByZXZpb3VzLmxhc3R9KS4gQ2hhaW4gdGhlIHNvdXJjZXMgaW4gcnVuIG9yZGVyLCBhbmQgYCArXG4gICAgICAgICdvbmx5IHNvdXJjZXMgZnJvbSBPTkUgbGluZWFnZSDigJQgdGhlIGVuZ2luZSBuZXZlciByZXNldHMgdGhlIGV4ZWN1dGlvbiBjb3VudGVyIGFjcm9zcyBhICcgK1xuICAgICAgICAncmVzdW1lLCBzbyBhIGZyZXNoIHJ1biByZXN0YXJ0aW5nIGF0IDAgaXMgYSBkaWZmZXJlbnQgcnVuLCBub3QgYSBjb250aW51YXRpb24uJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcHJldmlvdXMgPSB7IGlkeDogaSwgbGFzdDogc3Bhbi5sYXN0IH07XG4gIH1cblxuICBmb3IgKGxldCBrID0gMTsgayA8IGxlZ3MubGVuZ3RoOyBrKyspIHtcbiAgICBjb25zdCBiYXNlID0gbGVnc1trXS5iYXNlO1xuICAgIGlmICghYmFzZSB8fCB0eXBlb2YgYmFzZSAhPT0gJ29iamVjdCcpIGNvbnRpbnVlOyAvLyBubyBzaWduYWwgb24gdGhlIHJlY29yZCDigJQgZG9jdW1lbnRlZCBkZWdyYWRhdGlvblxuICAgIGNvbnN0IGJlZm9yZSA9IGZvbGRMZWdzKGxlZ3MsIGsgLSAxLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgIGlmIChiZWZvcmUuYmFzaXMgIT09ICdpbml0aWFsK2xvZycgfHwgYmVmb3JlLnNraXBwZWQpIGNvbnRpbnVlOyAvLyBub3QgYSBzdGF0ZSBhIHJlYWwgYmFzZSBjYW4gYmUgaGVsZCB0b1xuICAgIGlmICghc2FtZVN0YXRlKGJlZm9yZS5zdGF0ZSwgYmFzZSwgbmV3IFNldChiZWZvcmUucmVkYWN0ZWRQYXRocyksICcnKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgYHRpbWVUcmF2ZWw6IHNvdXJjZSAke2t9J3MgaW5pdGlhbFN0YXRlIGlzIG5vdCB0aGUgc3RhdGUgc291cmNlICR7ayAtIDF9IGZvbGRzIHRvLiBPbiBhIHJlc3VtZSBgICtcbiAgICAgICAgXCJ0aGUgbGF0ZXIgbGVnJ3MgaW5pdGlhbFN0YXRlIElTIHRoZSBzdGF0ZSBhdCB0aGUgcGF1c2UsIHNvIGEgbGVnIHRoYXQgYmVnaW5zIGFueXdoZXJlIGVsc2UgaXMgXCIgK1xuICAgICAgICAnbm90IGZyb20gb25lIGxpbmVhZ2Ug4oCUIGEgZGlmZmVyZW50IGNoYXJ0LCBvciBhbm90aGVyIHJ1biBvZiB0aGlzIG9uZSDigJQgZXZlbiB3aGVuIGl0cyBleGVjdXRpb24gJyArXG4gICAgICAgICdpbmRpY2VzIGhhcHBlbiB0byBiZSBoaWdoZXIuJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
|