footprintjs 9.5.0 → 9.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +4 -1
- package/README.md +14 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/capture/index.js +2 -2
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +10 -1
- package/dist/esm/lib/memory/SharedMemory.js +1 -1
- package/dist/esm/lib/memory/StageContext.js +40 -3
- package/dist/esm/lib/memory/TransactionBuffer.js +166 -9
- package/dist/esm/lib/memory/commitLogUtils.js +71 -1
- package/dist/esm/lib/memory/index.js +1 -1
- package/dist/esm/lib/memory/pathOps.js +28 -1
- package/dist/esm/lib/memory/types.js +1 -1
- package/dist/esm/lib/memory/utils.js +29 -3
- package/dist/esm/lib/recorder/CombinedRecorder.js +4 -4
- package/dist/esm/lib/recorder/invokeHook.js +38 -0
- package/dist/esm/lib/runner/DeferredObserverTier.js +366 -0
- package/dist/esm/lib/runner/ExecutionRuntime.js +19 -1
- package/dist/esm/lib/runner/FlowChartExecutor.js +173 -22
- package/dist/esm/lib/runner/index.js +1 -1
- package/dist/esm/lib/scope/ScopeFacade.js +11 -8
- package/dist/esm/trace.js +6 -3
- package/dist/index.js +1 -1
- package/dist/lib/capture/index.js +3 -3
- package/dist/lib/engine/handlers/SubflowExecutor.js +10 -1
- package/dist/lib/memory/SharedMemory.js +1 -1
- package/dist/lib/memory/StageContext.js +40 -3
- package/dist/lib/memory/TransactionBuffer.js +166 -9
- package/dist/lib/memory/commitLogUtils.js +73 -2
- package/dist/lib/memory/index.js +1 -1
- package/dist/lib/memory/pathOps.js +30 -2
- package/dist/lib/memory/types.js +1 -1
- package/dist/lib/memory/utils.js +28 -2
- package/dist/lib/recorder/CombinedRecorder.js +8 -8
- package/dist/lib/recorder/invokeHook.js +42 -0
- package/dist/lib/runner/DeferredObserverTier.js +370 -0
- package/dist/lib/runner/ExecutionRuntime.js +19 -1
- package/dist/lib/runner/FlowChartExecutor.js +173 -22
- package/dist/lib/runner/index.js +1 -1
- package/dist/lib/scope/ScopeFacade.js +11 -8
- package/dist/trace.js +7 -3
- package/dist/types/index.d.ts +41 -0
- package/dist/types/lib/capture/index.d.ts +1 -1
- package/dist/types/lib/memory/SharedMemory.d.ts +2 -5
- package/dist/types/lib/memory/StageContext.d.ts +23 -1
- package/dist/types/lib/memory/TransactionBuffer.d.ts +70 -10
- package/dist/types/lib/memory/commitLogUtils.d.ts +28 -0
- package/dist/types/lib/memory/index.d.ts +1 -1
- package/dist/types/lib/memory/pathOps.d.ts +10 -0
- package/dist/types/lib/memory/types.d.ts +56 -3
- package/dist/types/lib/memory/utils.d.ts +21 -6
- package/dist/types/lib/recorder/CombinedRecorder.d.ts +36 -0
- package/dist/types/lib/recorder/invokeHook.d.ts +32 -0
- package/dist/types/lib/runner/DeferredObserverTier.d.ts +204 -0
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +31 -1
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +90 -13
- package/dist/types/lib/runner/index.d.ts +1 -0
- package/dist/types/trace.d.ts +1 -1
- package/package.json +2 -1
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Provides consistent path traversal and value manipulation for the memory system.
|
|
5
5
|
* Zero external dependencies.
|
|
6
6
|
*/
|
|
7
|
-
import { nativeGet as _get, nativeHas as _has, nativeSet as _set } from './pathOps.js';
|
|
7
|
+
import { nativeDelete, nativeGet as _get, nativeHas as _has, nativeSet as _set } from './pathOps.js';
|
|
8
8
|
/** ASCII Unit-Separator — cannot appear in JS identifiers, invisible in logs. */
|
|
9
9
|
export const DELIM = '\u001F';
|
|
10
10
|
/**
|
|
@@ -213,8 +213,26 @@ export function deepSmartMerge(dst, src) {
|
|
|
213
213
|
}
|
|
214
214
|
/**
|
|
215
215
|
* Applies a commit bundle to a base state by replaying operations in order.
|
|
216
|
-
* Two-phase: UPDATE (union-merge) then OVERWRITE (direct set).
|
|
217
216
|
* Guarantees "last writer wins" semantics.
|
|
217
|
+
*
|
|
218
|
+
* The single replay primitive — three consumers inherit every verb from it:
|
|
219
|
+
* live state (`SharedMemory.applyPatch`), time travel
|
|
220
|
+
* (`EventLog.materialise`), and the redacted mirror
|
|
221
|
+
* (`StageContext.commit`'s second `applyPatch`).
|
|
222
|
+
*
|
|
223
|
+
* Verb arms:
|
|
224
|
+
* - `'set'` — overwrite with `overwrite[path]` (the full final value).
|
|
225
|
+
* - `'merge'` — `deepSmartMerge` the accumulated `updates[path]` delta in.
|
|
226
|
+
* - `'append'` — (#13c-B delta mode) `overwrite[path]` holds ONLY the tail;
|
|
227
|
+
* reconstruct by concatenating it onto the current array. When the
|
|
228
|
+
* current value or the recorded tail is not an array (out-of-order
|
|
229
|
+
* replay base, or a REDACTED tail — `redactPatch` replaces matched
|
|
230
|
+
* payloads with the `'REDACTED'` string), degrade to a direct set of the
|
|
231
|
+
* recorded value — the same terminal value a redacted/corrupt `'set'`
|
|
232
|
+
* produces.
|
|
233
|
+
* - `'delete'` — (#13c-B delta mode) remove the key (`nativeDelete`,
|
|
234
|
+
* prototype-pollution-safe). The path stays enumerated in `overwrite`
|
|
235
|
+
* (value `undefined`) for key-set consumers; replay ignores that value.
|
|
218
236
|
*/
|
|
219
237
|
export function applySmartMerge(base, updates, overwrite, trace) {
|
|
220
238
|
const out = structuredClone(base);
|
|
@@ -223,6 +241,14 @@ export function applySmartMerge(base, updates, overwrite, trace) {
|
|
|
223
241
|
if (verb === 'set') {
|
|
224
242
|
_set(out, segs, structuredClone(_get(overwrite, segs)));
|
|
225
243
|
}
|
|
244
|
+
else if (verb === 'append') {
|
|
245
|
+
const tail = structuredClone(_get(overwrite, segs));
|
|
246
|
+
const current = _get(out, segs);
|
|
247
|
+
_set(out, segs, Array.isArray(current) && Array.isArray(tail) ? [...current, ...tail] : tail);
|
|
248
|
+
}
|
|
249
|
+
else if (verb === 'delete') {
|
|
250
|
+
nativeDelete(out, segs);
|
|
251
|
+
}
|
|
226
252
|
else {
|
|
227
253
|
const current = _get(out, segs) ?? {};
|
|
228
254
|
_set(out, segs, deepSmartMerge(current, _get(updates, segs)));
|
|
@@ -230,4 +256,4 @@ export function applySmartMerge(base, updates, overwrite, trace) {
|
|
|
230
256
|
}
|
|
231
257
|
return out;
|
|
232
258
|
}
|
|
233
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFLFNBQVMsSUFBSSxJQUFJLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd2RixpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQztBQUk5Qjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBYyxFQUFFLE9BQTRCLEVBQUU7SUFDakYsT0FBTztRQUNMLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ3JELFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQ3RCLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUM1QixHQUFpQixFQUNqQixLQUFhLEVBQ2IsS0FBZSxFQUNmLEtBQWEsRUFDYixLQUFRLEVBQ1IsYUFBdUI7SUFFdkIsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkUsTUFBTSxJQUFJLEdBQUcsT0FBTyxJQUFJLFVBQVUsQ0FBQztJQUNuQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDM0IsSUFBSSxPQUFPLEdBQWlCLEdBQUcsQ0FBQztJQUNoQyxPQUFPLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDM0IsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBWSxDQUFDO1FBQ3ZDLElBQUksQ0FB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Q0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB1dGlscy50cyDigJQgSGVscGVyIGZ1bmN0aW9ucyBmb3IgbmVzdGVkIG9iamVjdCBtYW5pcHVsYXRpb25cbiAqXG4gKiBQcm92aWRlcyBjb25zaXN0ZW50IHBhdGggdHJhdmVyc2FsIGFuZCB2YWx1ZSBtYW5pcHVsYXRpb24gZm9yIHRoZSBtZW1vcnkgc3lzdGVtLlxuICogWmVybyBleHRlcm5hbCBkZXBlbmRlbmNpZXMuXG4gKi9cblxuaW1wb3J0IHsgbmF0aXZlR2V0IGFzIF9nZXQsIG5hdGl2ZUhhcyBhcyBfaGFzLCBuYXRpdmVTZXQgYXMgX3NldCB9IGZyb20gJy4vcGF0aE9wcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeVBhdGNoIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKiBBU0NJSSBVbml0LVNlcGFyYXRvciDigJQgY2Fubm90IGFwcGVhciBpbiBKUyBpZGVudGlmaWVycywgaW52aXNpYmxlIGluIGxvZ3MuICovXG5leHBvcnQgY29uc3QgREVMSU0gPSAnXFx1MDAxRic7XG5cbnR5cGUgTmVzdGVkT2JqZWN0ID0geyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuLyoqXG4gKiBSZXNvbHZlcyBydW4tbmFtZXNwYWNlZCBhbmQgZ2xvYmFsIHBhdGhzLlxuICogRWFjaCBmbG93Y2hhcnQgZXhlY3V0aW9uIChydW4pIHN0b3JlcyBkYXRhIHVuZGVyIGBydW5zL3tpZH0vYCB0byBwcmV2ZW50IGNvbGxpc2lvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSdW5BbmRHbG9iYWxQYXRocyhydW5JZD86IHN0cmluZywgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXSA9IFtdKSB7XG4gIHJldHVybiB7XG4gICAgcnVuUGF0aDogcnVuSWQgPyBbJ3J1bnMnLCBydW5JZCwgLi4ucGF0aF0gOiB1bmRlZmluZWQsXG4gICAgZ2xvYmFsUGF0aDogWy4uLnBhdGhdLFxuICB9O1xufVxuXG4vKipcbiAqIFNldHMgYSB2YWx1ZSBhdCBhIG5lc3RlZCBwYXRoLCBjcmVhdGluZyBpbnRlcm1lZGlhdGUgb2JqZWN0cyBhcyBuZWVkZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXROZXN0ZWRWYWx1ZTxUPihcbiAgb2JqOiBOZXN0ZWRPYmplY3QsXG4gIHJ1bklkOiBzdHJpbmcsXG4gIF9wYXRoOiBzdHJpbmdbXSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgdmFsdWU6IFQsXG4gIGRlZmF1bHRWYWx1ZXM/OiB1bmtub3duLFxuKTogTmVzdGVkT2JqZWN0IHtcbiAgY29uc3QgeyBydW5QYXRoLCBnbG9iYWxQYXRoIH0gPSBnZXRSdW5BbmRHbG9iYWxQYXRocyhydW5JZCwgX3BhdGgpO1xuICBjb25zdCBwYXRoID0gcnVuUGF0aCB8fCBnbG9iYWxQYXRoO1xuICBjb25zdCBwYXRoQ29weSA9IFsuLi5wYXRoXTtcbiAgbGV0IGN1cnJlbnQ6IE5lc3RlZE9iamVjdCA9IG9iajtcbiAgd2hpbGUgKHBhdGhDb3B5Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBrZXkgPSBwYXRoQ29weS5zaGlmdCgpIGFzIHN0cmluZztcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjdXJyZW50LCBrZXkpKSB7XG4gICAgICBjdXJyZW50W2tleV0gPSBrZXkgPT09IHJ1bklkICYmIGRlZmF1bHRWYWx1ZXMgPyBkZWZhdWx0VmFsdWVzIDoge307XG4gICAgfVxuICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleV07XG4gIH1cbiAgY3VycmVudFtmaWVsZF0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBEZWVwLW1lcmdlcyBhIHZhbHVlIGludG8gdGhlIG9iamVjdCBhdCB0aGUgc3BlY2lmaWVkIHBhdGguXG4gKiAtIEFycmF5czogY29uY2F0ZW5hdGVcbiAqIC0gT2JqZWN0czogc2hhbGxvdyBtZXJnZSBhdCBlYWNoIGxldmVsXG4gKiAtIFByaW1pdGl2ZXM6IHJlcGxhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZU5lc3RlZFZhbHVlPFQ+KFxuICBvYmo6IGFueSxcbiAgcnVuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgX3BhdGg6IChzdHJpbmcgfCBudW1iZXIpW10sXG4gIGZpZWxkOiBzdHJpbmcgfCBudW1iZXIsXG4gIHZhbHVlOiBULFxuICBkZWZhdWx0VmFsdWVzPzogdW5rbm93bixcbik6IGFueSB7XG4gIGNvbnN0IHsgcnVuUGF0aCwgZ2xvYmFsUGF0aCB9ID0gZ2V0UnVuQW5kR2xvYmFsUGF0aHMocnVuSWQsIF9wYXRoKTtcbiAgY29uc3QgcGF0aCA9IHJ1blBhdGggfHwgZ2xvYmFsUGF0aDtcbiAgY29uc3QgcGF0aENvcHkgPSBbLi4ucGF0aF07XG4gIGxldCBjdXJyZW50OiBOZXN0ZWRPYmplY3QgPSBvYmo7XG4gIHdoaWxlIChwYXRoQ29weS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qga2V5ID0gcGF0aENvcHkuc2hpZnQoKSBhcyBzdHJpbmc7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY3VycmVudCwga2V5KSkge1xuICAgICAgY3VycmVudFtrZXldID0ga2V5ID09PSBydW5JZCAmJiBkZWZhdWx0VmFsdWVzID8gZGVmYXVsdFZhbHVlcyA6IHt9O1xuICAgIH1cbiAgICBjdXJyZW50ID0gY3VycmVudFtrZXldO1xuICB9XG4gIHVwZGF0ZVZhbHVlKGN1cnJlbnQsIGZpZWxkLCB2YWx1ZSk7XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSW4tcGxhY2UgdmFsdWUgdXBkYXRlIHdpdGggbWVyZ2Ugc2VtYW50aWNzLlxuICogLSBBcnJheXMgKG5vbi1lbXB0eSk6IGNvbmNhdGVuYXRlIG9udG8gZXhpc3RpbmdcbiAqIC0gQXJyYXlzIChlbXB0eSk6ICAgICBkaXJlY3QgcmVwbGFjZSDigJQgd3JpdGluZyBgW11gIGNsZWFycyB0aGUgZmllbGRcbiAqIC0gT2JqZWN0cyAobm9uLWVtcHR5KTogc2hhbGxvdyBtZXJnZSAoc3ByZWFkKVxuICogLSBPYmplY3RzIChlbXB0eSk6ICAgIGRpcmVjdCByZXBsYWNlIOKAlCB3cml0aW5nIGB7fWAgY2xlYXJzIHRoZSBmaWVsZFxuICogLSBQcmltaXRpdmVzOiBkaXJlY3QgYXNzaWdubWVudFxuICpcbiAqIE5vdGUgb24gZW1wdHkgYXJyYXlzOiBib3RoIGB2YWx1ZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKWAgYW5kXG4gKiBgQXJyYXkuaXNBcnJheSh2YWx1ZSlgIGV2YWx1YXRlIHRoZSBzYW1lIGZvciBhcnJheXMg4oCUIGBbXWAgaXMgdHJ1dGh5IGluXG4gKiBKYXZhU2NyaXB0LCBzbyB0aGUgYCYmYCBndWFyZCB3YXMgbmV2ZXIgdGhlIGlzc3VlLiBUaGUgYWN0dWFsIGJ1ZyB3YXMgdGhlXG4gKiBjb25jYXQgcGF0aDogYFsuLi5jdXIsIC4uLltdXWAgc2lsZW50bHkgcmV0dXJuZWQgYGN1cmAgdW5jaGFuZ2VkIHdoZW4gYHZhbHVlYFxuICogd2FzIGBbXWAsIG1ha2luZyBgdXBkYXRlVmFsdWUob2JqLCAndGFncycsIFtdKWAgYSBuby1vcCBpbnN0ZWFkIG9mIGEgY2xlYXIuXG4gKiBUaGUgZml4IGlzIHRoZSBleHBsaWNpdCBgdmFsdWUubGVuZ3RoID09PSAwYCBlYXJseS1yZXR1cm4gYnJhbmNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVmFsdWUob2JqZWN0OiBhbnksIGtleTogc3RyaW5nIHwgbnVtYmVyLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7IC8vIGNsZWFyOiBbXSByZXBsYWNlcyB3aGF0ZXZlciB3YXMgdGhlcmVcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY3VyID0gb2JqZWN0W2tleV0gYXMgYW55O1xuICAgICAgb2JqZWN0W2tleV0gPSBjdXIgPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogWy4uLmN1ciwgLi4udmFsdWVdO1xuICAgIH1cbiAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGgpIHtcbiAgICBjb25zdCBjdXIgPSBvYmplY3Rba2V5XSBhcyBhbnk7XG4gICAgb2JqZWN0W2tleV0gPSBjdXIgPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogeyAuLi5jdXIsIC4uLnZhbHVlIH07XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgYSB2YWx1ZSBhdCBhIG5lc3RlZCBwYXRoIHdpdGggcHJvdG90eXBlLXBvbGx1dGlvbiBwcm90ZWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmVzdGVkVmFsdWUocm9vdDogYW55LCBwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdLCBmaWVsZD86IHN0cmluZyB8IG51bWJlcik6IGFueSB7XG4gIGNvbnN0IG5vZGUgPSBwYXRoICYmIHBhdGgubGVuZ3RoID4gMCA/IF9nZXQocm9vdCwgcGF0aCkgOiByb290O1xuICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCB8fCBub2RlID09PSB1bmRlZmluZWQpIHJldHVybiBub2RlO1xuICBpZiAobm9kZSAhPT0gbnVsbCAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIGZpZWxkKSkge1xuICAgIHJldHVybiBub2RlW2ZpZWxkXTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlZGFjdHMgc2Vuc2l0aXZlIHZhbHVlcyBpbiBhIHBhdGNoIGZvciBsb2dnaW5nL2RlYnVnZ2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZGFjdFBhdGNoKHBhdGNoOiBNZW1vcnlQYXRjaCwgcmVkYWN0ZWRTZXQ6IFNldDxzdHJpbmc+KTogTWVtb3J5UGF0Y2gge1xuICBjb25zdCBvdXQgPSBzdHJ1Y3R1cmVkQ2xvbmUocGF0Y2gpO1xuICBmb3IgKGNvbnN0IGZsYXQgb2YgcmVkYWN0ZWRTZXQpIHtcbiAgICBjb25zdCBwYXRoQXJyID0gZmxhdC5zcGxpdChERUxJTSk7XG4gICAgaWYgKF9oYXMob3V0LCBwYXRoQXJyKSkge1xuICAgICAgY29uc3QgY3VyciA9IF9nZXQob3V0LCBwYXRoQXJyKTtcbiAgICAgIGlmICh0eXBlb2YgY3VyciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgX3NldChvdXQsIHBhdGhBcnIsICdSRURBQ1RFRCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIE5vcm1hbGlzZXMgYW4gYXJyYXkgcGF0aCBpbnRvIGEgc3RhYmxlIHN0cmluZyBrZXkgdXNpbmcgREVMSU0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpc2VQYXRoKHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10pOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5tYXAoU3RyaW5nKS5qb2luKERFTElNKTtcbn1cblxuLyoqXG4gKiBTdHJ1Y3R1cmFsIGRlZXAgZXF1YWxpdHkgZm9yIGNvbW1pdHRlZC1zdGF0ZSB2YWx1ZXMuXG4gKlxuICogVXNlZCBieSB7QGxpbmsgVHJhbnNhY3Rpb25CdWZmZXJ9IHRvIGRlY2lkZSB3aGV0aGVyIGEgc3RhZ2UgYWN0dWFsbHkgQ0hBTkdFRFxuICogYSBwYXRoIG9yIG1lcmVseSByZS13cm90ZSAvIHJldmVydGVkIGl0IHRvIHRoZSB2YWx1ZSBpdCBhbHJlYWR5IGhlbGQgKGFcbiAqIFwibm8tb3Agd3JpdGVcIikuIENvbW1pdHRlZCBzdGF0ZSBpcyBKU09OLXNoYXBlZCDigJQgaXQgbXVzdCBzdXJ2aXZlXG4gKiBgc3RydWN0dXJlZENsb25lYCDigJQgc28gdGhpcyBvbmx5IG5lZWRzIHRvIGhhbmRsZSB0aGUgc2hhcGVzIHRoYXQgY2FuIHJlYWNoIGFcbiAqIGNvbW1pdDogcHJpbWl0aXZlcywgYXJyYXlzLCBhbmQgcGxhaW4gb2JqZWN0cy5cbiAqXG4gKiBTZW1hbnRpY3M6XG4gKiAgIC0gcmVmZXJlbmNlIC8gaWRlbnRpY2FsLXByaW1pdGl2ZSBzaG9ydC1jaXJjdWl0cyBmaXJzdCAoY2hlYXAgZmFzdCBwYXRoKVxuICogICAtIGBOYU5gIGVxdWFscyBgTmFOYCAocHJpbWl0aXZlIGNvbXBhcmUgZmFsbHMgYmFjayB0byBgT2JqZWN0LmlzYClcbiAqICAgLSBhcnJheXM6IGVxdWFsIGxlbmd0aCBBTkQgZGVlcC1lcXVhbCBlbGVtZW50LXdpc2UgKG9yZGVyLXNlbnNpdGl2ZSlcbiAqICAgLSBvYmplY3RzOiBpZGVudGljYWwgb3duLWtleSBzZXQgQU5EIGRlZXAtZXF1YWwgcGVyIGtleVxuICogICAtIG1pc21hdGNoZWQga2luZHMgKGFycmF5IHZzIG9iamVjdCwgb2JqZWN0IHZzIG51bGwpIOKGkiBub3QgZXF1YWxcbiAqXG4gKiBDb3N0ICYgc2FmZXR5OlxuICogICAtIEFsbG9jYXRlcyBOT1RISU5HIGJ1dCB0cmFuc2llbnQgYE9iamVjdC5rZXlzYCBhcnJheXMg4oCUIG5vIGNsb25lcy4gSXQgaXNcbiAqICAgICBzdHJpY3RseSBjaGVhcGVyIHRoYW4gdGhlIGBzdHJ1Y3R1cmVkQ2xvbmVgIHRoZSBjb21taXQgYWxyZWFkeSBwZXJmb3Jtcy5cbiAqICAgLSBQcmltaXRpdmUgY29tcGFyaXNvbnMgKHRoZSBidWxrIG9mIHN0YXRlKSBhcmUgTygxKSB2aWEgdGhlIGA9PT1gIC9cbiAqICAgICBgT2JqZWN0LmlzYCBmYXN0IHBhdGhzOyBvbmx5IG5lc3RlZCBvYmplY3RzL2FycmF5cyBpbmN1ciBhIHdhbGssIGJvdW5kZWRcbiAqICAgICBieSB0aGUgdmFsdWUncyBvd24gc2l6ZS5cbiAqICAgLSBBc3N1bWVzIEFDWUNMSUMsIEpTT04tc2hhcGVkIHZhbHVlcyDigJQgdGhlIHNhbWUgY29udHJhY3QgdGhlIG1lbW9yeSBsYXllclxuICogICAgIGFscmVhZHkgcmVsaWVzIG9uIChjb21taXR0ZWQgc3RhdGUgaXMgYHN0cnVjdHVyZWRDbG9uZWBkIGFuZCBtdXN0IGJlXG4gKiAgICAgSlNPTi1zZXJpYWxpc2FibGUgZm9yIGNoZWNrcG9pbnRzKS4gQSBjeWNsaWMgdmFsdWUgaXMgb3V0IG9mIGNvbnRyYWN0XG4gKiAgICAgaGVyZSBleGFjdGx5IGFzIGl0IGlzIGZvciBjaGVja3BvaW50aW5nOyBkZXYgbW9kZSBmbGFncyBjeWNsZXMgYXQgd3JpdGVcbiAqICAgICB0aW1lIHZpYSBgU2NvcGVGYWNhZGUuc2V0VmFsdWVgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVlcEVxdWFsKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTsgLy8gc2FtZSByZWZlcmVuY2Ugb3IgaWRlbnRpY2FsIHByaW1pdGl2ZVxuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSByZXR1cm4gZmFsc2U7XG4gIGlmIChhID09PSBudWxsIHx8IGIgPT09IG51bGwpIHJldHVybiBhID09PSBiOyAvLyBvbmUgaXMgbnVsbCwgdGhlIG90aGVyIGlzbid0XG4gIGlmICh0eXBlb2YgYSAhPT0gJ29iamVjdCcpIHJldHVybiBPYmplY3QuaXMoYSwgYik7IC8vIE5hTi1zYWZlIHByaW1pdGl2ZSBjb21wYXJlXG5cbiAgY29uc3QgYUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGEpO1xuICBpZiAoYUlzQXJyYXkgIT09IEFycmF5LmlzQXJyYXkoYikpIHJldHVybiBmYWxzZTsgLy8gYXJyYXkgdnMgcGxhaW4gb2JqZWN0XG5cbiAgaWYgKGFJc0FycmF5KSB7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFkZWVwRXF1YWwoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICBjb25zdCBiS2V5cyA9IE9iamVjdC5rZXlzKGIpO1xuICBpZiAoYUtleXMubGVuZ3RoICE9PSBiS2V5cy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgZm9yIChjb25zdCBrZXkgb2YgYUtleXMpIHtcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogRGVlcCB1bmlvbiBtZXJnZSBoZWxwZXIuXG4gKiAtIEFycmF5cyAobm9uLWVtcHR5KTogdW5pb24gd2l0aG91dCBkdXBsaWNhdGVzIChlbmNvdW50ZXIgb3JkZXIgcHJlc2VydmVkKVxuICogLSBBcnJheXMgKGVtcHR5KTogICAgIHJlcGxhY2Ug4oCUIHNyYyBgW11gIGNsZWFycyB0aGUgZGVzdGluYXRpb24gYXJyYXkuXG4gKiAgIFJhdGlvbmFsZTogd3JpdGluZyBgc2NvcGUudGFncyA9IFtdYCBtZWFucyBcImNsZWFyIHRhZ3NcIiwgbm90IFwiYXBwZW5kIG5vdGhpbmdcIi5cbiAqICAgV2l0aG91dCB0aGlzIHJ1bGUsIGFuIGVtcHR5LWFycmF5IHdyaXRlIHNpbGVudGx5IGJlY29tZXMgYSBuby1vcCB3aGljaCBpc1xuICogICBpbXBvc3NpYmxlIHRvIGRpc3Rpbmd1aXNoIGZyb20gYSBidWcuXG4gKiAtIE9iamVjdHM6IHJlY3Vyc2l2ZSBtZXJnZVxuICogLSBQcmltaXRpdmVzOiBzb3VyY2Ugd2luc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVlcFNtYXJ0TWVyZ2UoZHN0OiBhbnksIHNyYzogYW55KTogYW55IHtcbiAgaWYgKHNyYyA9PT0gbnVsbCB8fCB0eXBlb2Ygc3JjICE9PSAnb2JqZWN0JykgcmV0dXJuIHNyYztcblxuICBpZiAoQXJyYXkuaXNBcnJheShzcmMpKSB7XG4gICAgaWYgKHNyYy5sZW5ndGggPT09IDApIHJldHVybiBbXTsgLy8gZW1wdHkgc3JjID0gY2xlYXIsIG5vdCBuby1vcFxuICAgIGlmIChBcnJheS5pc0FycmF5KGRzdCkpIHJldHVybiBbLi4ubmV3IFNldChbLi4uZHN0LCAuLi5zcmNdKV07XG4gICAgcmV0dXJuIFsuLi5zcmNdO1xuICB9XG5cbiAgY29uc3Qgb3V0OiBhbnkgPSB7IC4uLihkc3QgJiYgdHlwZW9mIGRzdCA9PT0gJ29iamVjdCcgPyBkc3QgOiB7fSkgfTtcbiAgLy8gT2JqZWN0LmtleXMoKSBpcyBvd24tZW51bWVyYWJsZS1vbmx5IGJ5IHNwZWMg4oCUIG5vIERFTklFRCBjaGVjayBuZWVkZWQgaGVyZS5cbiAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHNyYykpIHtcbiAgICBvdXRba10gPSBkZWVwU21hcnRNZXJnZShvdXRba10sIHNyY1trXSk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgY29tbWl0IGJ1bmRsZSB0byBhIGJhc2Ugc3RhdGUgYnkgcmVwbGF5aW5nIG9wZXJhdGlvbnMgaW4gb3JkZXIuXG4gKiBUd28tcGhhc2U6IFVQREFURSAodW5pb24tbWVyZ2UpIHRoZW4gT1ZFUldSSVRFIChkaXJlY3Qgc2V0KS5cbiAqIEd1YXJhbnRlZXMgXCJsYXN0IHdyaXRlciB3aW5zXCIgc2VtYW50aWNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlTbWFydE1lcmdlKFxuICBiYXNlOiBhbnksXG4gIHVwZGF0ZXM6IE1lbW9yeVBhdGNoLFxuICBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoLFxuICB0cmFjZTogeyBwYXRoOiBzdHJpbmc7IHZlcmI6ICdzZXQnIHwgJ21lcmdlJyB9W10sXG4pOiBhbnkge1xuICBjb25zdCBvdXQgPSBzdHJ1Y3R1cmVkQ2xvbmUoYmFzZSk7XG4gIGZvciAoY29uc3QgeyBwYXRoLCB2ZXJiIH0gb2YgdHJhY2UpIHtcbiAgICBjb25zdCBzZWdzID0gcGF0aC5zcGxpdChERUxJTSk7XG4gICAgaWYgKHZlcmIgPT09ICdzZXQnKSB7XG4gICAgICBfc2V0KG91dCwgc2Vncywgc3RydWN0dXJlZENsb25lKF9nZXQob3ZlcndyaXRlLCBzZWdzKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gX2dldChvdXQsIHNlZ3MpID8/IHt9O1xuICAgICAgX3NldChvdXQsIHNlZ3MsIGRlZXBTbWFydE1lcmdlKGN1cnJlbnQsIF9nZXQodXBkYXRlcywgc2VncykpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiJdfQ==
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFLFNBQVMsSUFBSSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHckcsaUZBQWlGO0FBQ2pGLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUM7QUFJOUI7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEtBQWMsRUFBRSxPQUE0QixFQUFFO0lBQ2pGLE9BQU87UUFDTCxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNyRCxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztLQUN0QixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsR0FBaUIsRUFDakIsS0FBYSxFQUNiLEtBQWUsRUFDZixLQUFhLEVBQ2IsS0FBUSxFQUNSLGFBQXVCO0lBRXZCLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLE1BQU0sSUFBSSxHQUFHLE9BQU8sSUFBSSxVQUFVLENBQUM7SUFDbkMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzNCLElBQUksT0FBTyxHQUFpQixHQUFHLENBQUM7SUFDaEMsT0FBTyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQVksQ0FBQztRQUN2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RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRyxDQUFDO2FBQU0sSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0IsWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHV0aWxzLnRzIOKAlCBIZWxwZXIgZnVuY3Rpb25zIGZvciBuZXN0ZWQgb2JqZWN0IG1hbmlwdWxhdGlvblxuICpcbiAqIFByb3ZpZGVzIGNvbnNpc3RlbnQgcGF0aCB0cmF2ZXJzYWwgYW5kIHZhbHVlIG1hbmlwdWxhdGlvbiBmb3IgdGhlIG1lbW9yeSBzeXN0ZW0uXG4gKiBaZXJvIGV4dGVybmFsIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5pbXBvcnQgeyBuYXRpdmVEZWxldGUsIG5hdGl2ZUdldCBhcyBfZ2V0LCBuYXRpdmVIYXMgYXMgX2hhcywgbmF0aXZlU2V0IGFzIF9zZXQgfSBmcm9tICcuL3BhdGhPcHMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlQYXRjaCwgVHJhY2VFbnRyeSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKiogQVNDSUkgVW5pdC1TZXBhcmF0b3Ig4oCUIGNhbm5vdCBhcHBlYXIgaW4gSlMgaWRlbnRpZmllcnMsIGludmlzaWJsZSBpbiBsb2dzLiAqL1xuZXhwb3J0IGNvbnN0IERFTElNID0gJ1xcdTAwMUYnO1xuXG50eXBlIE5lc3RlZE9iamVjdCA9IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbi8qKlxuICogUmVzb2x2ZXMgcnVuLW5hbWVzcGFjZWQgYW5kIGdsb2JhbCBwYXRocy5cbiAqIEVhY2ggZmxvd2NoYXJ0IGV4ZWN1dGlvbiAocnVuKSBzdG9yZXMgZGF0YSB1bmRlciBgcnVucy97aWR9L2AgdG8gcHJldmVudCBjb2xsaXNpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UnVuQW5kR2xvYmFsUGF0aHMocnVuSWQ/OiBzdHJpbmcsIHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXSkge1xuICByZXR1cm4ge1xuICAgIHJ1blBhdGg6IHJ1bklkID8gWydydW5zJywgcnVuSWQsIC4uLnBhdGhdIDogdW5kZWZpbmVkLFxuICAgIGdsb2JhbFBhdGg6IFsuLi5wYXRoXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBTZXRzIGEgdmFsdWUgYXQgYSBuZXN0ZWQgcGF0aCwgY3JlYXRpbmcgaW50ZXJtZWRpYXRlIG9iamVjdHMgYXMgbmVlZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TmVzdGVkVmFsdWU8VD4oXG4gIG9iajogTmVzdGVkT2JqZWN0LFxuICBydW5JZDogc3RyaW5nLFxuICBfcGF0aDogc3RyaW5nW10sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHZhbHVlOiBULFxuICBkZWZhdWx0VmFsdWVzPzogdW5rbm93bixcbik6IE5lc3RlZE9iamVjdCB7XG4gIGNvbnN0IHsgcnVuUGF0aCwgZ2xvYmFsUGF0aCB9ID0gZ2V0UnVuQW5kR2xvYmFsUGF0aHMocnVuSWQsIF9wYXRoKTtcbiAgY29uc3QgcGF0aCA9IHJ1blBhdGggfHwgZ2xvYmFsUGF0aDtcbiAgY29uc3QgcGF0aENvcHkgPSBbLi4ucGF0aF07XG4gIGxldCBjdXJyZW50OiBOZXN0ZWRPYmplY3QgPSBvYmo7XG4gIHdoaWxlIChwYXRoQ29weS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qga2V5ID0gcGF0aENvcHkuc2hpZnQoKSBhcyBzdHJpbmc7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY3VycmVudCwga2V5KSkge1xuICAgICAgY3VycmVudFtrZXldID0ga2V5ID09PSBydW5JZCAmJiBkZWZhdWx0VmFsdWVzID8gZGVmYXVsdFZhbHVlcyA6IHt9O1xuICAgIH1cbiAgICBjdXJyZW50ID0gY3VycmVudFtrZXldO1xuICB9XG4gIGN1cnJlbnRbZmllbGRdID0gdmFsdWU7XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogRGVlcC1tZXJnZXMgYSB2YWx1ZSBpbnRvIHRoZSBvYmplY3QgYXQgdGhlIHNwZWNpZmllZCBwYXRoLlxuICogLSBBcnJheXM6IGNvbmNhdGVuYXRlXG4gKiAtIE9iamVjdHM6IHNoYWxsb3cgbWVyZ2UgYXQgZWFjaCBsZXZlbFxuICogLSBQcmltaXRpdmVzOiByZXBsYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVOZXN0ZWRWYWx1ZTxUPihcbiAgb2JqOiBhbnksXG4gIHJ1bklkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIF9wYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdLFxuICBmaWVsZDogc3RyaW5nIHwgbnVtYmVyLFxuICB2YWx1ZTogVCxcbiAgZGVmYXVsdFZhbHVlcz86IHVua25vd24sXG4pOiBhbnkge1xuICBjb25zdCB7IHJ1blBhdGgsIGdsb2JhbFBhdGggfSA9IGdldFJ1bkFuZEdsb2JhbFBhdGhzKHJ1bklkLCBfcGF0aCk7XG4gIGNvbnN0IHBhdGggPSBydW5QYXRoIHx8IGdsb2JhbFBhdGg7XG4gIGNvbnN0IHBhdGhDb3B5ID0gWy4uLnBhdGhdO1xuICBsZXQgY3VycmVudDogTmVzdGVkT2JqZWN0ID0gb2JqO1xuICB3aGlsZSAocGF0aENvcHkubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGtleSA9IHBhdGhDb3B5LnNoaWZ0KCkgYXMgc3RyaW5nO1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnJlbnQsIGtleSkpIHtcbiAgICAgIGN1cnJlbnRba2V5XSA9IGtleSA9PT0gcnVuSWQgJiYgZGVmYXVsdFZhbHVlcyA/IGRlZmF1bHRWYWx1ZXMgOiB7fTtcbiAgICB9XG4gICAgY3VycmVudCA9IGN1cnJlbnRba2V5XTtcbiAgfVxuICB1cGRhdGVWYWx1ZShjdXJyZW50LCBmaWVsZCwgdmFsdWUpO1xuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEluLXBsYWNlIHZhbHVlIHVwZGF0ZSB3aXRoIG1lcmdlIHNlbWFudGljcy5cbiAqIC0gQXJyYXlzIChub24tZW1wdHkpOiBjb25jYXRlbmF0ZSBvbnRvIGV4aXN0aW5nXG4gKiAtIEFycmF5cyAoZW1wdHkpOiAgICAgZGlyZWN0IHJlcGxhY2Ug4oCUIHdyaXRpbmcgYFtdYCBjbGVhcnMgdGhlIGZpZWxkXG4gKiAtIE9iamVjdHMgKG5vbi1lbXB0eSk6IHNoYWxsb3cgbWVyZ2UgKHNwcmVhZClcbiAqIC0gT2JqZWN0cyAoZW1wdHkpOiAgICBkaXJlY3QgcmVwbGFjZSDigJQgd3JpdGluZyBge31gIGNsZWFycyB0aGUgZmllbGRcbiAqIC0gUHJpbWl0aXZlczogZGlyZWN0IGFzc2lnbm1lbnRcbiAqXG4gKiBOb3RlIG9uIGVtcHR5IGFycmF5czogYm90aCBgdmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSlgIGFuZFxuICogYEFycmF5LmlzQXJyYXkodmFsdWUpYCBldmFsdWF0ZSB0aGUgc2FtZSBmb3IgYXJyYXlzIOKAlCBgW11gIGlzIHRydXRoeSBpblxuICogSmF2YVNjcmlwdCwgc28gdGhlIGAmJmAgZ3VhcmQgd2FzIG5ldmVyIHRoZSBpc3N1ZS4gVGhlIGFjdHVhbCBidWcgd2FzIHRoZVxuICogY29uY2F0IHBhdGg6IGBbLi4uY3VyLCAuLi5bXV1gIHNpbGVudGx5IHJldHVybmVkIGBjdXJgIHVuY2hhbmdlZCB3aGVuIGB2YWx1ZWBcbiAqIHdhcyBgW11gLCBtYWtpbmcgYHVwZGF0ZVZhbHVlKG9iaiwgJ3RhZ3MnLCBbXSlgIGEgbm8tb3AgaW5zdGVhZCBvZiBhIGNsZWFyLlxuICogVGhlIGZpeCBpcyB0aGUgZXhwbGljaXQgYHZhbHVlLmxlbmd0aCA9PT0gMGAgZWFybHktcmV0dXJuIGJyYW5jaC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZhbHVlKG9iamVjdDogYW55LCBrZXk6IHN0cmluZyB8IG51bWJlciwgdmFsdWU6IGFueSk6IHZvaWQge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICBvYmplY3Rba2V5XSA9IHZhbHVlOyAvLyBjbGVhcjogW10gcmVwbGFjZXMgd2hhdGV2ZXIgd2FzIHRoZXJlXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN1ciA9IG9iamVjdFtrZXldIGFzIGFueTtcbiAgICAgIG9iamVjdFtrZXldID0gY3VyID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IFsuLi5jdXIsIC4uLnZhbHVlXTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKSB7XG4gICAgY29uc3QgY3VyID0gb2JqZWN0W2tleV0gYXMgYW55O1xuICAgIG9iamVjdFtrZXldID0gY3VyID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHsgLi4uY3VyLCAuLi52YWx1ZSB9O1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIGEgdmFsdWUgYXQgYSBuZXN0ZWQgcGF0aCB3aXRoIHByb3RvdHlwZS1wb2xsdXRpb24gcHJvdGVjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5lc3RlZFZhbHVlKHJvb3Q6IGFueSwgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXSwgZmllbGQ/OiBzdHJpbmcgfCBudW1iZXIpOiBhbnkge1xuICBjb25zdCBub2RlID0gcGF0aCAmJiBwYXRoLmxlbmd0aCA+IDAgPyBfZ2V0KHJvb3QsIHBhdGgpIDogcm9vdDtcbiAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgfHwgbm9kZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbm9kZTtcbiAgaWYgKG5vZGUgIT09IG51bGwgJiYgdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBmaWVsZCkpIHtcbiAgICByZXR1cm4gbm9kZVtmaWVsZF07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZWRhY3RzIHNlbnNpdGl2ZSB2YWx1ZXMgaW4gYSBwYXRjaCBmb3IgbG9nZ2luZy9kZWJ1Z2dpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWRhY3RQYXRjaChwYXRjaDogTWVtb3J5UGF0Y2gsIHJlZGFjdGVkU2V0OiBTZXQ8c3RyaW5nPik6IE1lbW9yeVBhdGNoIHtcbiAgY29uc3Qgb3V0ID0gc3RydWN0dXJlZENsb25lKHBhdGNoKTtcbiAgZm9yIChjb25zdCBmbGF0IG9mIHJlZGFjdGVkU2V0KSB7XG4gICAgY29uc3QgcGF0aEFyciA9IGZsYXQuc3BsaXQoREVMSU0pO1xuICAgIGlmIChfaGFzKG91dCwgcGF0aEFycikpIHtcbiAgICAgIGNvbnN0IGN1cnIgPSBfZ2V0KG91dCwgcGF0aEFycik7XG4gICAgICBpZiAodHlwZW9mIGN1cnIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIF9zZXQob3V0LCBwYXRoQXJyLCAnUkVEQUNURUQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBOb3JtYWxpc2VzIGFuIGFycmF5IHBhdGggaW50byBhIHN0YWJsZSBzdHJpbmcga2V5IHVzaW5nIERFTElNLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXNlUGF0aChwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGgubWFwKFN0cmluZykuam9pbihERUxJTSk7XG59XG5cbi8qKlxuICogU3RydWN0dXJhbCBkZWVwIGVxdWFsaXR5IGZvciBjb21taXR0ZWQtc3RhdGUgdmFsdWVzLlxuICpcbiAqIFVzZWQgYnkge0BsaW5rIFRyYW5zYWN0aW9uQnVmZmVyfSB0byBkZWNpZGUgd2hldGhlciBhIHN0YWdlIGFjdHVhbGx5IENIQU5HRURcbiAqIGEgcGF0aCBvciBtZXJlbHkgcmUtd3JvdGUgLyByZXZlcnRlZCBpdCB0byB0aGUgdmFsdWUgaXQgYWxyZWFkeSBoZWxkIChhXG4gKiBcIm5vLW9wIHdyaXRlXCIpLiBDb21taXR0ZWQgc3RhdGUgaXMgSlNPTi1zaGFwZWQg4oCUIGl0IG11c3Qgc3Vydml2ZVxuICogYHN0cnVjdHVyZWRDbG9uZWAg4oCUIHNvIHRoaXMgb25seSBuZWVkcyB0byBoYW5kbGUgdGhlIHNoYXBlcyB0aGF0IGNhbiByZWFjaCBhXG4gKiBjb21taXQ6IHByaW1pdGl2ZXMsIGFycmF5cywgYW5kIHBsYWluIG9iamVjdHMuXG4gKlxuICogU2VtYW50aWNzOlxuICogICAtIHJlZmVyZW5jZSAvIGlkZW50aWNhbC1wcmltaXRpdmUgc2hvcnQtY2lyY3VpdHMgZmlyc3QgKGNoZWFwIGZhc3QgcGF0aClcbiAqICAgLSBgTmFOYCBlcXVhbHMgYE5hTmAgKHByaW1pdGl2ZSBjb21wYXJlIGZhbGxzIGJhY2sgdG8gYE9iamVjdC5pc2ApXG4gKiAgIC0gYXJyYXlzOiBlcXVhbCBsZW5ndGggQU5EIGRlZXAtZXF1YWwgZWxlbWVudC13aXNlIChvcmRlci1zZW5zaXRpdmUpXG4gKiAgIC0gb2JqZWN0czogaWRlbnRpY2FsIG93bi1rZXkgc2V0IEFORCBkZWVwLWVxdWFsIHBlciBrZXlcbiAqICAgLSBtaXNtYXRjaGVkIGtpbmRzIChhcnJheSB2cyBvYmplY3QsIG9iamVjdCB2cyBudWxsKSDihpIgbm90IGVxdWFsXG4gKlxuICogQ29zdCAmIHNhZmV0eTpcbiAqICAgLSBBbGxvY2F0ZXMgTk9USElORyBidXQgdHJhbnNpZW50IGBPYmplY3Qua2V5c2AgYXJyYXlzIOKAlCBubyBjbG9uZXMuIEl0IGlzXG4gKiAgICAgc3RyaWN0bHkgY2hlYXBlciB0aGFuIHRoZSBgc3RydWN0dXJlZENsb25lYCB0aGUgY29tbWl0IGFscmVhZHkgcGVyZm9ybXMuXG4gKiAgIC0gUHJpbWl0aXZlIGNvbXBhcmlzb25zICh0aGUgYnVsayBvZiBzdGF0ZSkgYXJlIE8oMSkgdmlhIHRoZSBgPT09YCAvXG4gKiAgICAgYE9iamVjdC5pc2AgZmFzdCBwYXRoczsgb25seSBuZXN0ZWQgb2JqZWN0cy9hcnJheXMgaW5jdXIgYSB3YWxrLCBib3VuZGVkXG4gKiAgICAgYnkgdGhlIHZhbHVlJ3Mgb3duIHNpemUuXG4gKiAgIC0gQXNzdW1lcyBBQ1lDTElDLCBKU09OLXNoYXBlZCB2YWx1ZXMg4oCUIHRoZSBzYW1lIGNvbnRyYWN0IHRoZSBtZW1vcnkgbGF5ZXJcbiAqICAgICBhbHJlYWR5IHJlbGllcyBvbiAoY29tbWl0dGVkIHN0YXRlIGlzIGBzdHJ1Y3R1cmVkQ2xvbmVgZCBhbmQgbXVzdCBiZVxuICogICAgIEpTT04tc2VyaWFsaXNhYmxlIGZvciBjaGVja3BvaW50cykuIEEgY3ljbGljIHZhbHVlIGlzIG91dCBvZiBjb250cmFjdFxuICogICAgIGhlcmUgZXhhY3RseSBhcyBpdCBpcyBmb3IgY2hlY2twb2ludGluZzsgZGV2IG1vZGUgZmxhZ3MgY3ljbGVzIGF0IHdyaXRlXG4gKiAgICAgdGltZSB2aWEgYFNjb3BlRmFjYWRlLnNldFZhbHVlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBFcXVhbChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7IC8vIHNhbWUgcmVmZXJlbmNlIG9yIGlkZW50aWNhbCBwcmltaXRpdmVcbiAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikgcmV0dXJuIGZhbHNlO1xuICBpZiAoYSA9PT0gbnVsbCB8fCBiID09PSBudWxsKSByZXR1cm4gYSA9PT0gYjsgLy8gb25lIGlzIG51bGwsIHRoZSBvdGhlciBpc24ndFxuICBpZiAodHlwZW9mIGEgIT09ICdvYmplY3QnKSByZXR1cm4gT2JqZWN0LmlzKGEsIGIpOyAvLyBOYU4tc2FmZSBwcmltaXRpdmUgY29tcGFyZVxuXG4gIGNvbnN0IGFJc0FycmF5ID0gQXJyYXkuaXNBcnJheShhKTtcbiAgaWYgKGFJc0FycmF5ICE9PSBBcnJheS5pc0FycmF5KGIpKSByZXR1cm4gZmFsc2U7IC8vIGFycmF5IHZzIHBsYWluIG9iamVjdFxuXG4gIGlmIChhSXNBcnJheSkge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghZGVlcEVxdWFsKGFbaV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhhKTtcbiAgY29uc3QgYktleXMgPSBPYmplY3Qua2V5cyhiKTtcbiAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIGZvciAoY29uc3Qga2V5IG9mIGFLZXlzKSB7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwga2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghZGVlcEVxdWFsKGFba2V5XSwgYltrZXldKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIERlZXAgdW5pb24gbWVyZ2UgaGVscGVyLlxuICogLSBBcnJheXMgKG5vbi1lbXB0eSk6IHVuaW9uIHdpdGhvdXQgZHVwbGljYXRlcyAoZW5jb3VudGVyIG9yZGVyIHByZXNlcnZlZClcbiAqIC0gQXJyYXlzIChlbXB0eSk6ICAgICByZXBsYWNlIOKAlCBzcmMgYFtdYCBjbGVhcnMgdGhlIGRlc3RpbmF0aW9uIGFycmF5LlxuICogICBSYXRpb25hbGU6IHdyaXRpbmcgYHNjb3BlLnRhZ3MgPSBbXWAgbWVhbnMgXCJjbGVhciB0YWdzXCIsIG5vdCBcImFwcGVuZCBub3RoaW5nXCIuXG4gKiAgIFdpdGhvdXQgdGhpcyBydWxlLCBhbiBlbXB0eS1hcnJheSB3cml0ZSBzaWxlbnRseSBiZWNvbWVzIGEgbm8tb3Agd2hpY2ggaXNcbiAqICAgaW1wb3NzaWJsZSB0byBkaXN0aW5ndWlzaCBmcm9tIGEgYnVnLlxuICogLSBPYmplY3RzOiByZWN1cnNpdmUgbWVyZ2VcbiAqIC0gUHJpbWl0aXZlczogc291cmNlIHdpbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBTbWFydE1lcmdlKGRzdDogYW55LCBzcmM6IGFueSk6IGFueSB7XG4gIGlmIChzcmMgPT09IG51bGwgfHwgdHlwZW9mIHNyYyAhPT0gJ29iamVjdCcpIHJldHVybiBzcmM7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgIGlmIChzcmMubGVuZ3RoID09PSAwKSByZXR1cm4gW107IC8vIGVtcHR5IHNyYyA9IGNsZWFyLCBub3Qgbm8tb3BcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkc3QpKSByZXR1cm4gWy4uLm5ldyBTZXQoWy4uLmRzdCwgLi4uc3JjXSldO1xuICAgIHJldHVybiBbLi4uc3JjXTtcbiAgfVxuXG4gIGNvbnN0IG91dDogYW55ID0geyAuLi4oZHN0ICYmIHR5cGVvZiBkc3QgPT09ICdvYmplY3QnID8gZHN0IDoge30pIH07XG4gIC8vIE9iamVjdC5rZXlzKCkgaXMgb3duLWVudW1lcmFibGUtb25seSBieSBzcGVjIOKAlCBubyBERU5JRUQgY2hlY2sgbmVlZGVkIGhlcmUuXG4gIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhzcmMpKSB7XG4gICAgb3V0W2tdID0gZGVlcFNtYXJ0TWVyZ2Uob3V0W2tdLCBzcmNba10pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogQXBwbGllcyBhIGNvbW1pdCBidW5kbGUgdG8gYSBiYXNlIHN0YXRlIGJ5IHJlcGxheWluZyBvcGVyYXRpb25zIGluIG9yZGVyLlxuICogR3VhcmFudGVlcyBcImxhc3Qgd3JpdGVyIHdpbnNcIiBzZW1hbnRpY3MuXG4gKlxuICogVGhlIHNpbmdsZSByZXBsYXkgcHJpbWl0aXZlIOKAlCB0aHJlZSBjb25zdW1lcnMgaW5oZXJpdCBldmVyeSB2ZXJiIGZyb20gaXQ6XG4gKiBsaXZlIHN0YXRlIChgU2hhcmVkTWVtb3J5LmFwcGx5UGF0Y2hgKSwgdGltZSB0cmF2ZWxcbiAqIChgRXZlbnRMb2cubWF0ZXJpYWxpc2VgKSwgYW5kIHRoZSByZWRhY3RlZCBtaXJyb3JcbiAqIChgU3RhZ2VDb250ZXh0LmNvbW1pdGAncyBzZWNvbmQgYGFwcGx5UGF0Y2hgKS5cbiAqXG4gKiBWZXJiIGFybXM6XG4gKiAgIC0gYCdzZXQnYCAgICDigJQgb3ZlcndyaXRlIHdpdGggYG92ZXJ3cml0ZVtwYXRoXWAgKHRoZSBmdWxsIGZpbmFsIHZhbHVlKS5cbiAqICAgLSBgJ21lcmdlJ2AgIOKAlCBgZGVlcFNtYXJ0TWVyZ2VgIHRoZSBhY2N1bXVsYXRlZCBgdXBkYXRlc1twYXRoXWAgZGVsdGEgaW4uXG4gKiAgIC0gYCdhcHBlbmQnYCDigJQgKCMxM2MtQiBkZWx0YSBtb2RlKSBgb3ZlcndyaXRlW3BhdGhdYCBob2xkcyBPTkxZIHRoZSB0YWlsO1xuICogICAgIHJlY29uc3RydWN0IGJ5IGNvbmNhdGVuYXRpbmcgaXQgb250byB0aGUgY3VycmVudCBhcnJheS4gV2hlbiB0aGVcbiAqICAgICBjdXJyZW50IHZhbHVlIG9yIHRoZSByZWNvcmRlZCB0YWlsIGlzIG5vdCBhbiBhcnJheSAob3V0LW9mLW9yZGVyXG4gKiAgICAgcmVwbGF5IGJhc2UsIG9yIGEgUkVEQUNURUQgdGFpbCDigJQgYHJlZGFjdFBhdGNoYCByZXBsYWNlcyBtYXRjaGVkXG4gKiAgICAgcGF5bG9hZHMgd2l0aCB0aGUgYCdSRURBQ1RFRCdgIHN0cmluZyksIGRlZ3JhZGUgdG8gYSBkaXJlY3Qgc2V0IG9mIHRoZVxuICogICAgIHJlY29yZGVkIHZhbHVlIOKAlCB0aGUgc2FtZSB0ZXJtaW5hbCB2YWx1ZSBhIHJlZGFjdGVkL2NvcnJ1cHQgYCdzZXQnYFxuICogICAgIHByb2R1Y2VzLlxuICogICAtIGAnZGVsZXRlJ2Ag4oCUICgjMTNjLUIgZGVsdGEgbW9kZSkgcmVtb3ZlIHRoZSBrZXkgKGBuYXRpdmVEZWxldGVgLFxuICogICAgIHByb3RvdHlwZS1wb2xsdXRpb24tc2FmZSkuIFRoZSBwYXRoIHN0YXlzIGVudW1lcmF0ZWQgaW4gYG92ZXJ3cml0ZWBcbiAqICAgICAodmFsdWUgYHVuZGVmaW5lZGApIGZvciBrZXktc2V0IGNvbnN1bWVyczsgcmVwbGF5IGlnbm9yZXMgdGhhdCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5U21hcnRNZXJnZShiYXNlOiBhbnksIHVwZGF0ZXM6IE1lbW9yeVBhdGNoLCBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoLCB0cmFjZTogVHJhY2VFbnRyeVtdKTogYW55IHtcbiAgY29uc3Qgb3V0ID0gc3RydWN0dXJlZENsb25lKGJhc2UpO1xuICBmb3IgKGNvbnN0IHsgcGF0aCwgdmVyYiB9IG9mIHRyYWNlKSB7XG4gICAgY29uc3Qgc2VncyA9IHBhdGguc3BsaXQoREVMSU0pO1xuICAgIGlmICh2ZXJiID09PSAnc2V0Jykge1xuICAgICAgX3NldChvdXQsIHNlZ3MsIHN0cnVjdHVyZWRDbG9uZShfZ2V0KG92ZXJ3cml0ZSwgc2VncykpKTtcbiAgICB9IGVsc2UgaWYgKHZlcmIgPT09ICdhcHBlbmQnKSB7XG4gICAgICBjb25zdCB0YWlsID0gc3RydWN0dXJlZENsb25lKF9nZXQob3ZlcndyaXRlLCBzZWdzKSk7XG4gICAgICBjb25zdCBjdXJyZW50ID0gX2dldChvdXQsIHNlZ3MpO1xuICAgICAgX3NldChvdXQsIHNlZ3MsIEFycmF5LmlzQXJyYXkoY3VycmVudCkgJiYgQXJyYXkuaXNBcnJheSh0YWlsKSA/IFsuLi5jdXJyZW50LCAuLi50YWlsXSA6IHRhaWwpO1xuICAgIH0gZWxzZSBpZiAodmVyYiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIG5hdGl2ZURlbGV0ZShvdXQsIHNlZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gX2dldChvdXQsIHNlZ3MpID8/IHt9O1xuICAgICAgX3NldChvdXQsIHNlZ3MsIGRlZXBTbWFydE1lcmdlKGN1cnJlbnQsIF9nZXQodXBkYXRlcywgc2VncykpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiJdfQ==
|
|
@@ -100,7 +100,7 @@ export function isFlowEvent(event) {
|
|
|
100
100
|
* in sync with the interface. If a method is added to `ScopeRecorder`, adding it
|
|
101
101
|
* here is the ONLY change required to route combined-recorders correctly.
|
|
102
102
|
*/
|
|
103
|
-
const RECORDER_EVENT_METHODS = [
|
|
103
|
+
export const RECORDER_EVENT_METHODS = [
|
|
104
104
|
'onRead',
|
|
105
105
|
'onWrite',
|
|
106
106
|
'onCommit',
|
|
@@ -120,7 +120,7 @@ const RECORDER_EVENT_METHODS = [
|
|
|
120
120
|
* care about the distinction discriminate with `isFlowEvent()` (explicit
|
|
121
121
|
* `channel` discriminant, legacy pipelineId-absence fallback).
|
|
122
122
|
*/
|
|
123
|
-
const FLOW_RECORDER_EVENT_METHODS = [
|
|
123
|
+
export const FLOW_RECORDER_EVENT_METHODS = [
|
|
124
124
|
'onStageExecuted',
|
|
125
125
|
'onNext',
|
|
126
126
|
'onDecision',
|
|
@@ -147,7 +147,7 @@ const FLOW_RECORDER_EVENT_METHODS = [
|
|
|
147
147
|
* interface. Same convention as the other two arrays above — kept as
|
|
148
148
|
* the single source of truth for duck-type detection.
|
|
149
149
|
*/
|
|
150
|
-
const EMIT_RECORDER_EVENT_METHODS = ['onEmit'];
|
|
150
|
+
export const EMIT_RECORDER_EVENT_METHODS = ['onEmit'];
|
|
151
151
|
/**
|
|
152
152
|
* True iff the recorder declares a method named `m` either as an own
|
|
153
153
|
* property OR on its class-prototype chain — but NOT inherited from
|
|
@@ -225,4 +225,4 @@ export function hasFlowRecorderMethods(r) {
|
|
|
225
225
|
export function hasEmitRecorderMethods(r) {
|
|
226
226
|
return EMIT_RECORDER_EVENT_METHODS.some((m) => hasOwnOrClassMethod(r, m));
|
|
227
227
|
}
|
|
228
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tYmluZWRSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvQ29tYmluZWRSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVERztBQXFGSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFJLEtBQVE7SUFDckMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUk7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5RCxNQUFNLENBQUMsR0FBRyxLQUFnQyxDQUFDO0lBQzNDLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxNQUFNO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdEMsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU87UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN4QyxPQUFPLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDO0FBQ3BDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sc0JBQXNCLEdBQUc7SUFDN0IsUUFBUTtJQUNSLFNBQVM7SUFDVCxVQUFVO0lBQ1YsU0FBUztJQUNULGNBQWM7SUFDZCxZQUFZO0lBQ1osU0FBUztJQUNULFVBQVU7Q0FDRixDQUFDO0FBRVg7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSwyQkFBMkIsR0FBRztJQUNsQyxpQkFBaUI7SUFDakIsUUFBUTtJQUNSLFlBQVk7SUFDWixRQUFRO0lBQ1IsWUFBWTtJQUNaLGdCQUFnQjtJQUNoQixlQUFlO0lBQ2YscUJBQXFCO0lBQ3JCLFFBQVE7SUFDUixTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxVQUFVO0lBQ1Ysc0VBQXNFO0lBQ3RFLDREQUE0RDtJQUM1RCx1RUFBdUU7SUFDdkUscUVBQXFFO0lBQ3JFLFlBQVk7SUFDWixVQUFVO0lBQ1YsYUFBYTtDQUNMLENBQUM7QUFFWDs7OztHQUlHO0FBQ0gsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLFFBQVEsQ0FBVSxDQUFDO0FBRXhEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxDQUFVLEVBQUUsQ0FBUztJQUNoRCxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3RELElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9DLE9BQU8sT0FBUSxDQUE2QixDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsSUFBSSxLQUFLLEdBQVksTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxPQUFPLE9BQVEsS0FBaUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUM7UUFDckUsQ0FBQztRQUNELEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsQ0FBbUI7SUFDcEQsT0FBTyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsQ0FBbUI7SUFDeEQsT0FBTywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLENBQW1CO0lBQ3hELE9BQU8sMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb21iaW5lZFJlY29yZGVyIOKAlCBhIHNpbmdsZSBvYnNlcnZlciB0aGF0IGNhbiBob29rIGludG8gTVVMVElQTEUgZXZlbnRcbiAqIHN0cmVhbXMgKGN1cnJlbnRseTogc2NvcGUgZGF0YS1mbG93ICsgY29udHJvbC1mbG93KS4gT25lIG9iamVjdCwgb25lIGBpZGAsXG4gKiBvbmUgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBleGVjdXRpb24uXG4gKlxuICogIyMgV2h5IHRoaXMgZXhpc3RzXG4gKlxuICogQmVmb3JlIGBDb21iaW5lZFJlY29yZGVyYCwgYSBjb25zdW1lciB3aG8gd2FudGVkIHRvIG9ic2VydmUgYm90aCBzdHJlYW1zXG4gKiBoYWQgdG86XG4gKiAgIDEuIEltcGxlbWVudCBib3RoIGBTY29wZVJlY29yZGVyYCAoOCBtZXRob2RzKSBhbmQgYEZsb3dSZWNvcmRlcmAgKDEyIG1ldGhvZHMpXG4gKiAgICAgIGZ1bGx5IOKAlCBzdHViYmluZyBldmVyeSBldmVudCB0aGV5IGRpZG4ndCBjYXJlIGFib3V0LlxuICogICAyLiBSZW1lbWJlciB0byBjYWxsIEJPVEggYGF0dGFjaFNjb3BlUmVjb3JkZXIocilgIEFORCBgYXR0YWNoRmxvd1JlY29yZGVyKHIpYC5cbiAqICAgICAgRm9yZ2V0dGluZyB0aGUgc2Vjb25kIGNhbGwgc2lsZW50bHkgZHJvcHBlZCBoYWxmIHRoZWlyIGV2ZW50cyDigJQgbm9cbiAqICAgICAgd2FybmluZywgbm8gcnVudGltZSBlcnJvci5cbiAqICAgMy4gUmUtaW1wbGVtZW50IGNvb3JkaW5hdGlvbiBsb2dpYyAoYnVmZmVyaW5nLCBvcmRlcmluZykgdGhlbXNlbHZlcy5cbiAqXG4gKiBgQ29tYmluZWRSZWNvcmRlcmAgY29sbGFwc2VzIHRoYXQgaW50byBhIHNpbmdsZSB0eXBlIGFuZCBhIHNpbmdsZSBhdHRhY2hcbiAqIGNhbGwgKGBleGVjdXRvci5hdHRhY2hDb21iaW5lZFJlY29yZGVyKHIpYCksIHdpdGggdGhlIGxpYnJhcnkgaGFuZGxpbmcgdGhlXG4gKiByb3V0aW5nIGludGVybmFsbHkuIENvbnN1bWVycyBpbXBsZW1lbnQgb25seSB0aGUgZXZlbnRzIHRoZXkgY2FyZSBhYm91dFxuICogKGBQYXJ0aWFsPC4uLj5gKSBhbmQgdGhlIGF0dGFjaCBtZXRob2QgZHVjay10eXBlcyBhdCBydW50aW1lIHRvIGRpc3BhdGNoXG4gKiB0byB0aGUgcmVsZXZhbnQgY2hhbm5lbHMuXG4gKlxuICogIyMgRm9yd2FyZCBjb21wYXRpYmlsaXR5XG4gKlxuICogV2hlbiBhIHRoaXJkIG9ic2VydmVyIHR5cGUgaXMgYWRkZWQgKGUuZy4gYW4gYE9wZXJhdGlvblJlY29yZGVyYCksIHRoZVxuICogYENvbWJpbmVkUmVjb3JkZXJgIHR5cGUgZ2FpbnMgYW4gYCYgUGFydGlhbDxPcGVyYXRpb25SZWNvcmRlcj5gIGNsYXVzZSBhbmRcbiAqIGBhdHRhY2hDb21iaW5lZFJlY29yZGVyYCBnYWlucyBvbmUgbW9yZSBydW50aW1lIGJyYW5jaCBpbiBpdHMgZGlzcGF0Y2guXG4gKiBDb25zdW1lcnMgd3JpdGluZyBhIGBDb21iaW5lZFJlY29yZGVyYCB0b2RheSBhcmUgTk9UIGFmZmVjdGVkIOKAlCB0aGVpclxuICogY29kZSBrZWVwcyBjb21waWxpbmcgYW5kIGF0dGFjaGluZyBjb3JyZWN0bHksIGJlY2F1c2UgZXZlcnkgbmV3IGxheWVyIGlzXG4gKiBvcHRpb25hbC5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHR5cGUgeyBDb21iaW5lZFJlY29yZGVyIH0gZnJvbSAnZm9vdHByaW50anMnO1xuICpcbiAqIGNvbnN0IGF1ZGl0OiBDb21iaW5lZFJlY29yZGVyID0ge1xuICogICBpZDogJ2F1ZGl0JyxcbiAqICAgb25Xcml0ZTogKGUpID0+IGxvZ1dyaXRlKGUua2V5LCBlLnZhbHVlKSwgICAgICAgIC8vIFNjb3BlUmVjb3JkZXIgbWV0aG9kXG4gKiAgIG9uRGVjaXNpb246IChlKSA9PiBsb2dEZWNpc2lvbihlLmNob3NlbiksICAgICAgICAvLyBGbG93UmVjb3JkZXIgbWV0aG9kXG4gKiB9O1xuICpcbiAqIGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIoYXVkaXQpO1xuICogLy8gXiBpbnRlcm5hbGx5OiBkZXRlY3RzIGJvdGggc2V0cyBvZiBtZXRob2RzLCByb3V0ZXMgdG8gYm90aCBjaGFubmVscy5cbiAqIGBgYFxuICpcbiAqICMjIENvbnRyYWN0IHdpdGggZXhpc3RpbmcgQVBJc1xuICpcbiAqIC0gYGF0dGFjaFNjb3BlUmVjb3JkZXIocilgIGFuZCBgYXR0YWNoRmxvd1JlY29yZGVyKHIpYCByZW1haW4gdW5jaGFuZ2VkLlxuICogICBDb25zdW1lcnMgd2hvIHdhbnQgb25seSBPTkUgY2hhbm5lbCBrZWVwIHVzaW5nIHRoZW0g4oCUIGV4cGxpY2l0IGlzIGdvb2QuXG4gKiAtIGBhdHRhY2hDb21iaW5lZFJlY29yZGVyKHIpYCBpcyB0aGUgT05MWSB3YXkgdG8gZ3VhcmFudGVlIGFuIG9iamVjdCBpc1xuICogICBob29rZWQgaW50byBldmVyeSBzdHJlYW0gaXQgaGFzIG1ldGhvZHMgZm9yLCB3aXRob3V0IG1haW50YWluaW5nIHR3b1xuICogICBhdHRhY2ggY2FsbHMgYXQgdGhlIGNhbGwgc2l0ZS5cbiAqIC0gSWRlbXBvdGVuY3kgYnkgYGlkYCBpcyBwcmVzZXJ2ZWQgYWNyb3NzIGNoYW5uZWxzOiByZS1hdHRhY2hpbmcgd2l0aCB0aGVcbiAqICAgc2FtZSBgaWRgIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBpbnN0YW5jZSBvbiBCT1RIIGNoYW5uZWxzLCBub3QganVzdCBvbmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93RXJyb3JFdmVudCwgRmxvd1BhdXNlRXZlbnQsIEZsb3dSZWNvcmRlciwgRmxvd1Jlc3VtZUV2ZW50IH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRXZlbnQsIFBhdXNlRXZlbnQsIFJlc3VtZUV2ZW50LCBTY29wZVJlY29yZGVyIH0gZnJvbSAnLi4vc2NvcGUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBFbWl0UmVjb3JkZXIgfSBmcm9tICcuL0VtaXRSZWNvcmRlci5qcyc7XG5cbi8qKlxuICogTWV0aG9kIG5hbWVzIHRoYXQgYXBwZWFyIG9uIEJPVEggYFNjb3BlUmVjb3JkZXJgIGFuZCBgRmxvd1JlY29yZGVyYCBidXQgd2l0aFxuICogZGlmZmVyZW50IGV2ZW50IHBheWxvYWQgdHlwZXMuIEZvciB0aGVzZSwgYSBgQ29tYmluZWRSZWNvcmRlcmAgZGVjbGFyZXNcbiAqIE9ORSBoYW5kbGVyIHRoYXQgcmVjZWl2ZXMgdGhlIHVuaW9uIG9mIGJvdGggcGF5bG9hZHMg4oCUIGNvbnN1bWVyc1xuICogZGlzY3JpbWluYXRlIHdpdGggdGhlIGV4cG9ydGVkIGBpc0Zsb3dFdmVudCgpYCBoZWxwZXIgKGV4cGxpY2l0IGBjaGFubmVsYFxuICogZGlzY3JpbWluYW50LCB3aXRoIGEgbGVnYWN5IHBpcGVsaW5lSWQtYWJzZW5jZSBmYWxsYmFjaykuXG4gKi9cbnR5cGUgU2hhcmVkTGlmZWN5Y2xlT3ZlcmxhcCA9ICdvbkVycm9yJyB8ICdvblBhdXNlJyB8ICdvblJlc3VtZSc7XG5cbi8qKiBMaWZlY3ljbGUgaG9va3MgKG5vdCBldmVudC1zcGVjaWZpYykgdGhhdCBib3RoIGludGVyZmFjZXMgc2hhcmUgaWRlbnRpY2FsbHkuICovXG50eXBlIFNoYXJlZExpZmVjeWNsZSA9ICdpZCcgfCAnY2xlYXInIHwgJ3RvU25hcHNob3QnO1xuXG4vKipcbiAqIEEgcmVjb3JkZXIgdGhhdCBNQVkgb2JzZXJ2ZSBhbnkgY29tYmluYXRpb24gb2Ygc3VwcG9ydGVkIGV2ZW50IHN0cmVhbXMuXG4gKlxuICogVG9kYXkncyBzdHJlYW1zOlxuICogICAtIFNjb3BlIGRhdGEtZmxvdyAoYFNjb3BlUmVjb3JkZXJgOiBvblJlYWQvb25Xcml0ZS9vbkNvbW1pdC9vblN0YWdlU3RhcnQv4oCmKVxuICogICAtIENvbnRyb2wtZmxvdyAoYEZsb3dSZWNvcmRlcmA6IG9uRGVjaXNpb24vb25TdWJmbG93RW50cnkvb25Mb29wL+KApilcbiAqXG4gKiBBbGwgZXZlbnQgaGFuZGxlcnMgYXJlIG9wdGlvbmFsIOKAlCBpbXBsZW1lbnQgb25seSB3aGF0IHlvdSBjYXJlIGFib3V0LlxuICogYGlkYCBpcyByZXF1aXJlZCBzbyB0aGUgbGlicmFyeSBjYW4gZGVkdXBsaWNhdGUgcmUtYXR0YWNoZXMuXG4gKlxuICogIyMgU2hhcmVkIG1ldGhvZCBuYW1lcyAob25FcnJvciAvIG9uUGF1c2UgLyBvblJlc3VtZSlcbiAqXG4gKiBCb3RoIGBTY29wZVJlY29yZGVyYCBhbmQgYEZsb3dSZWNvcmRlcmAgZGVjbGFyZSB0aGVzZSB3aXRoIERJRkZFUkVOVCBwYXlsb2FkXG4gKiBzaGFwZXMuIEluIGEgY29tYmluZWQgcmVjb3JkZXIsIGVhY2ggc3VjaCBoYW5kbGVyIGlzIGNhbGxlZCBieSBCT1RIXG4gKiBjaGFubmVscyB3aXRoIGl0cyBvd24gdmFyaWFudC4gVGhlIHBhcmFtZXRlciB0eXBlIGlzIGEgdW5pb24g4oCUIGNvbnN1bWVyc1xuICogY2FuIGVpdGhlciBoYW5kbGUgYm90aCB2YXJpYW50cyB1bmlmb3JtbHksIG9yIGRpc2NyaW1pbmF0ZSB3aXRoXG4gKiBgaXNGbG93RXZlbnQoKWAgKGV4cGxpY2l0IGBjaGFubmVsYCBkaXNjcmltaW5hbnQgc3RhbXBlZCBieSB0aGUgZW5naW5lKS5cbiAqXG4gKiAjIyBGb3J3YXJkIGNvbXBhdGliaWxpdHlcbiAqXG4gKiBXaGVuIGEgdGhpcmQgb2JzZXJ2ZXIgdHlwZSBzaGlwcyAoZS5nLiBgT3BlcmF0aW9uUmVjb3JkZXJgKSwgdGhlIHR5cGVcbiAqIGdhaW5zIGFub3RoZXIgYCYgUGFydGlhbDzigKY+YCBjbGF1c2UuIEJlY2F1c2UgZXZlcnkgY2xhdXNlIGlzIGBQYXJ0aWFsYCxcbiAqIGV4aXN0aW5nIGBDb21iaW5lZFJlY29yZGVyYCBpbXBsZW1lbnRhdGlvbnMgcmVtYWluIHR5cGUtdmFsaWQuXG4gKi9cbmV4cG9ydCB0eXBlIENvbWJpbmVkUmVjb3JkZXIgPSBQYXJ0aWFsPE9taXQ8U2NvcGVSZWNvcmRlciwgU2hhcmVkTGlmZWN5Y2xlT3ZlcmxhcCB8IFNoYXJlZExpZmVjeWNsZT4+ICZcbiAgUGFydGlhbDxPbWl0PEZsb3dSZWNvcmRlciwgU2hhcmVkTGlmZWN5Y2xlT3ZlcmxhcCB8IFNoYXJlZExpZmVjeWNsZT4+ICZcbiAgLy8gRW1pdCBjaGFubmVsIOKAlCBuZXcgdGhpcmQgc3RyZWFtIChQaGFzZSAzKS4gTm8gbWV0aG9kLW5hbWUgb3ZlcmxhcCB3aXRoXG4gIC8vIHRoZSBvdGhlciB0d28gaW50ZXJmYWNlcywgc28gYSBwbGFpbiBpbnRlcnNlY3Rpb24gaXMgc291bmQg4oCUIG5vXG4gIC8vIHVuaW9uLXBheWxvYWQgZGlzY3JpbWluYXRvciBuZWVkZWQuXG4gIFBhcnRpYWw8T21pdDxFbWl0UmVjb3JkZXIsIFNoYXJlZExpZmVjeWNsZT4+ICYge1xuICAgIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgICAvLyBTaGFyZWQgbGlmZWN5Y2xlIGhvb2tzIOKAlCBzYW1lIG9uIGJvdGggaW50ZXJmYWNlcywgc2hhcGUgY29tcGF0aWJsZS5cbiAgICBjbGVhcj8oKTogdm9pZDtcbiAgICB0b1NuYXBzaG90PygpOiB7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgIHByZWZlcnJlZE9wZXJhdGlvbj86ICd0cmFuc2xhdGUnIHwgJ2FjY3VtdWxhdGUnIHwgJ2FnZ3JlZ2F0ZSc7XG4gICAgICBkYXRhOiB1bmtub3duO1xuICAgIH07XG5cbiAgICAvLyBTaGFyZWQgZXZlbnQgbWV0aG9kIG5hbWVzIHdpdGggRElWRVJHRU5UIHBheWxvYWRzIOKAlCBkZWNsYXJlZCBhcyB1bmlvbnMuXG4gICAgLy8gQ29uc3VtZXJzIGVpdGhlciBoYW5kbGUgYm90aCB2YXJpYW50cywgb3IgZGlzY3JpbWluYXRlIHVzaW5nIHRoZVxuICAgIC8vIGV4cG9ydGVkIGhlbHBlciBgaXNGbG93RXZlbnQoKWAgKHdoaWNoIGNoZWNrcyB0aGUgZXhwbGljaXQgYGNoYW5uZWxgXG4gICAgLy8gZGlzY3JpbWluYW50IHN0YW1wZWQgYnkgdGhlIGVuZ2luZSwgZmFsbGluZyBiYWNrIHRvIHBpcGVsaW5lSWRcbiAgICAvLyBhYnNlbmNlIGZvciB1bnN0YW1wZWQgZXZlbnRzKS5cbiAgICAvL1xuICAgIC8vIEBleGFtcGxlXG4gICAgLy8gYGBgdHNcbiAgICAvLyBjb25zdCBhdWRpdDogQ29tYmluZWRSZWNvcmRlciA9IHtcbiAgICAvLyAgIGlkOiAnYXVkaXQnLFxuICAgIC8vICAgb25FcnJvcjogKGUpID0+IHtcbiAgICAvLyAgICAgaWYgKGlzRmxvd0V2ZW50KGUpKSB7XG4gICAgLy8gICAgICAgLy8gZSBpcyBGbG93RXJyb3JFdmVudCDigJQgaGFzIHN0YWdlTmFtZSwgbWVzc2FnZSwgc3RydWN0dXJlZEVycm9yXG4gICAgLy8gICAgICAgbG9nKCdmbG93IGVycm9yIGluIHN0YWdlJywgZS5zdGFnZU5hbWUpO1xuICAgIC8vICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgIC8vIGUgaXMgRXJyb3JFdmVudCDigJQgaGFzIGVycm9yLCBvcGVyYXRpb24sIGtleT9cbiAgICAvLyAgICAgICBsb2coJ3Njb3BlIGVycm9yIGR1cmluZycsIGUub3BlcmF0aW9uLCBlLmVycm9yLm1lc3NhZ2UpO1xuICAgIC8vICAgICB9XG4gICAgLy8gICB9LFxuICAgIC8vIH07XG4gICAgLy8gYGBgXG4gICAgb25FcnJvcj8oZXZlbnQ6IEVycm9yRXZlbnQgfCBGbG93RXJyb3JFdmVudCk6IHZvaWQ7XG4gICAgb25QYXVzZT8oZXZlbnQ6IFBhdXNlRXZlbnQgfCBGbG93UGF1c2VFdmVudCk6IHZvaWQ7XG4gICAgb25SZXN1bWU/KGV2ZW50OiBSZXN1bWVFdmVudCB8IEZsb3dSZXN1bWVFdmVudCk6IHZvaWQ7XG4gIH07XG5cbi8qKlxuICogRGlzY3JpbWluYXRvciBmb3IgdGhlIHVuaW9uIHBheWxvYWQgdHlwZXMgb24gYENvbWJpbmVkUmVjb3JkZXJgJ3Mgc2hhcmVkXG4gKiBtZXRob2RzIChgb25FcnJvcmAsIGBvblBhdXNlYCwgYG9uUmVzdW1lYCkuIFJldHVybnMgYHRydWVgIGlmIHRoZSBldmVudFxuICogd2FzIGVtaXR0ZWQgZnJvbSB0aGUgY29udHJvbC1mbG93IGNoYW5uZWwgKEZsb3dSZWNvcmRlcikuXG4gKlxuICogIyMgSG93IGl0IGRpc2NyaW1pbmF0ZXNcbiAqXG4gKiAxLiAqKkV4cGxpY2l0IGBjaGFubmVsYCBmaWVsZCBmaXJzdCoqIChiYWNrbG9nIEIzKTogZXZlcnkgZW5naW5lLWRpc3BhdGNoZWRcbiAqICAgIHNoYXJlZC1tZXRob2QgZXZlbnQgaXMgc3RhbXBlZCBgY2hhbm5lbDogJ2Zsb3cnYCAoY29udHJvbC1mbG93KSBvclxuICogICAgYGNoYW5uZWw6ICdzY29wZSdgIChkYXRhLWZsb3cpIGF0IGNvbnN0cnVjdGlvbi4gVGhpcyBpcyB0aGUgcG9zaXRpdmUsXG4gKiAgICBzY2hlbWEtcm9idXN0IHNpZ25hbCDigJQgaXQgc3Vydml2ZXMgd3JhcHBlcnMgdGhhdCBhZGQvc3RyaXAgZmllbGRzLlxuICogMi4gKipMZWdhY3kgZmFsbGJhY2sqKiBmb3IgdW5zdGFtcGVkIGV2ZW50cyAoY29uc3VtZXItZmFicmljYXRlZCB0ZXN0cyxcbiAqICAgIHBlcnNpc3RlZCB0cmFjZXMgZnJvbSA8OS4yKTogc2NvcGUtY2hhbm5lbCBldmVudHMgZXh0ZW5kXG4gKiAgICBgUmVjb3JkZXJDb250ZXh0YCwgd2hpY2ggY2FycmllcyBgcGlwZWxpbmVJZGA7IGZsb3ctY2hhbm5lbCBldmVudHMgZG9cbiAqICAgIG5vdC4gVGhlIGZsb3cgdmFyaWFudCBpcyBkZXRlY3RlZCBieSB0aGUgQUJTRU5DRSBvZiBgcGlwZWxpbmVJZGAg4oCUXG4gKiAgICBzY2hlbWEtc3RhYmxlIGFzIGxvbmcgYXMgc2NvcGUgZXZlbnRzIGNvbnRpbnVlIHRvIGV4dGVuZFxuICogICAgYFJlY29yZGVyQ29udGV4dGAsIGJ1dCBmcmFnaWxlIGFnYWluc3QgZmllbGQtc3RyaXBwaW5nIHdyYXBwZXJzLCB3aGljaFxuICogICAgaXMgd2h5IHRoZSBleHBsaWNpdCBkaXNjcmltaW5hbnQgbm93IGV4aXN0cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIG9uRXJyb3I6IChlKSA9PiB7XG4gKiAgIGlmIChpc0Zsb3dFdmVudChlKSkge1xuICogICAgIC8vIE5hcnJvd2VkIHRvIEZsb3dFcnJvckV2ZW50OiBoYXMgc3RhZ2VOYW1lLCBtZXNzYWdlLCBzdHJ1Y3R1cmVkRXJyb3JcbiAqICAgfSBlbHNlIHtcbiAqICAgICAvLyBOYXJyb3dlZCB0byBFcnJvckV2ZW50OiBoYXMgZXJyb3IsIG9wZXJhdGlvbiwga2V5P1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRmxvd0V2ZW50PFQ+KGV2ZW50OiBUKTogZXZlbnQgaXMgRXhjbHVkZTxULCB7IHBpcGVsaW5lSWQ6IHN0cmluZyB9PiB7XG4gIGlmICh0eXBlb2YgZXZlbnQgIT09ICdvYmplY3QnIHx8IGV2ZW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGUgPSBldmVudCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKGUuY2hhbm5lbCA9PT0gJ2Zsb3cnKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGUuY2hhbm5lbCA9PT0gJ3Njb3BlJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZS5waXBlbGluZUlkID09PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTWV0aG9kIG5hbWVzIGJlbG9uZ2luZyB0byB0aGUgYFNjb3BlUmVjb3JkZXJgIChkYXRhLWZsb3cpIGludGVyZmFjZS5cbiAqIEtlcHQgYXMgYSBzaW5nbGUgc291cmNlIG9mIHRydXRoIHNvIHRoZSBydW50aW1lIGR1Y2stdHlwZSBkZXRlY3RvciBzdGF5c1xuICogaW4gc3luYyB3aXRoIHRoZSBpbnRlcmZhY2UuIElmIGEgbWV0aG9kIGlzIGFkZGVkIHRvIGBTY29wZVJlY29yZGVyYCwgYWRkaW5nIGl0XG4gKiBoZXJlIGlzIHRoZSBPTkxZIGNoYW5nZSByZXF1aXJlZCB0byByb3V0ZSBjb21iaW5lZC1yZWNvcmRlcnMgY29ycmVjdGx5LlxuICovXG5jb25zdCBSRUNPUkRFUl9FVkVOVF9NRVRIT0RTID0gW1xuICAnb25SZWFkJyxcbiAgJ29uV3JpdGUnLFxuICAnb25Db21taXQnLFxuICAnb25FcnJvcicsXG4gICdvblN0YWdlU3RhcnQnLFxuICAnb25TdGFnZUVuZCcsXG4gICdvblBhdXNlJyxcbiAgJ29uUmVzdW1lJyxcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogTWV0aG9kIG5hbWVzIGJlbG9uZ2luZyB0byB0aGUgYEZsb3dSZWNvcmRlcmAgKGNvbnRyb2wtZmxvdykgaW50ZXJmYWNlLlxuICogU2VlIHRoZSBub3RlIG9uIGBSRUNPUkRFUl9FVkVOVF9NRVRIT0RTYC5cbiAqXG4gKiBOT1RFOiB0aGUgYG9uRXJyb3JgLCBgb25QYXVzZWAsIGBvblJlc3VtZWAgbWV0aG9kcyBleGlzdCBvbiBCT1RIIGludGVyZmFjZXNcbiAqIHdpdGggRElGRkVSRU5UIGV2ZW50IHBheWxvYWQgc2hhcGVzLiBBIGBDb21iaW5lZFJlY29yZGVyYCB0aGF0IGltcGxlbWVudHNcbiAqIGFueSBvZiB0aGVzZSByZWNlaXZlcyBib3RoIHZhcmlhbnRzIChvbmUgZnJvbSBlYWNoIGNoYW5uZWwpLiBDb25zdW1lcnMgd2hvXG4gKiBjYXJlIGFib3V0IHRoZSBkaXN0aW5jdGlvbiBkaXNjcmltaW5hdGUgd2l0aCBgaXNGbG93RXZlbnQoKWAgKGV4cGxpY2l0XG4gKiBgY2hhbm5lbGAgZGlzY3JpbWluYW50LCBsZWdhY3kgcGlwZWxpbmVJZC1hYnNlbmNlIGZhbGxiYWNrKS5cbiAqL1xuY29uc3QgRkxPV19SRUNPUkRFUl9FVkVOVF9NRVRIT0RTID0gW1xuICAnb25TdGFnZUV4ZWN1dGVkJyxcbiAgJ29uTmV4dCcsXG4gICdvbkRlY2lzaW9uJyxcbiAgJ29uRm9yaycsXG4gICdvblNlbGVjdGVkJyxcbiAgJ29uU3ViZmxvd0VudHJ5JyxcbiAgJ29uU3ViZmxvd0V4aXQnLFxuICAnb25TdWJmbG93UmVnaXN0ZXJlZCcsXG4gICdvbkxvb3AnLFxuICAnb25CcmVhaycsXG4gICdvbkVycm9yJyxcbiAgJ29uUGF1c2UnLFxuICAnb25SZXN1bWUnLFxuICAvLyBSdW4tYm91bmRhcnkgbWV0aG9kcyDigJQgaW5jbHVkZWQgc28gYSByZWNvcmRlciB3aG9zZSBPTkxZIGV2ZW50IGhvb2tcbiAgLy8gaXMgYSBydW4gYm91bmRhcnkgKGUuZy4gYW4gZXJyb3IgYnJpZGdlIGltcGxlbWVudGluZyBqdXN0XG4gIC8vIGBvblJ1bkZhaWxlZGApIGlzIHN0aWxsIGRldGVjdGVkIGFzIGEgRmxvd1JlY29yZGVyIGFuZCByb3V0ZWQgdG8gdGhlXG4gIC8vIGZsb3cgY2hhbm5lbC4gUHJldmlvdXNseSBhIHJ1bi1vbmx5IHJlY29yZGVyIHdhcyBzaWxlbnRseSBkcm9wcGVkLlxuICAnb25SdW5TdGFydCcsXG4gICdvblJ1bkVuZCcsXG4gICdvblJ1bkZhaWxlZCcsXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIE1ldGhvZCBuYW1lcyBiZWxvbmdpbmcgdG8gdGhlIGBFbWl0UmVjb3JkZXJgICh1c2VyLWVtaXR0ZWQgZXZlbnRzKVxuICogaW50ZXJmYWNlLiBTYW1lIGNvbnZlbnRpb24gYXMgdGhlIG90aGVyIHR3byBhcnJheXMgYWJvdmUg4oCUIGtlcHQgYXNcbiAqIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciBkdWNrLXR5cGUgZGV0ZWN0aW9uLlxuICovXG5jb25zdCBFTUlUX1JFQ09SREVSX0VWRU5UX01FVEhPRFMgPSBbJ29uRW1pdCddIGFzIGNvbnN0O1xuXG4vKipcbiAqIFRydWUgaWZmIHRoZSByZWNvcmRlciBkZWNsYXJlcyBhIG1ldGhvZCBuYW1lZCBgbWAgZWl0aGVyIGFzIGFuIG93blxuICogcHJvcGVydHkgT1Igb24gaXRzIGNsYXNzLXByb3RvdHlwZSBjaGFpbiDigJQgYnV0IE5PVCBpbmhlcml0ZWQgZnJvbVxuICogYE9iamVjdC5wcm90b3R5cGVgLlxuICpcbiAqICMjIFdoeSB0aGlzIGxheWVyZWQgY2hlY2tcbiAqXG4gKiBBIGBDb21iaW5lZFJlY29yZGVyYCBjYW4gYmUgZWl0aGVyIGEgcGxhaW4gb2JqZWN0IGxpdGVyYWwgKGhhbmRsZXJzIGFzXG4gKiBvd24gcHJvcGVydGllcykgT1IgYSBjbGFzcyBpbnN0YW5jZSAoaGFuZGxlcnMgYXMgY2xhc3MtcHJvdG90eXBlXG4gKiBtZXRob2RzKS4gQm90aCBhcmUgbGVnaXRpbWF0ZSBjb25zdW1lciBwYXR0ZXJucyBhbmQgYm90aCBNVVNUIGF0dGFjaC5cbiAqXG4gKiBCdXQgaGFuZGxlcnMgaW5oZXJpdGVkIGZyb20gYE9iamVjdC5wcm90b3R5cGVgIGFyZSBBTFdBWVMgYWNjaWRlbnRhbCBvclxuICogbWFsaWNpb3VzIChub2JvZHkgbGVnaXRpbWF0ZWx5IGF0dGFjaGVzIHJlY29yZGVyIG1ldGhvZHMgdGhlcmUpLiBTbyB3ZVxuICogd2FsayB0aGUgcHJvdG90eXBlIGNoYWluLCBTVE9QUElORyBiZWZvcmUgYE9iamVjdC5wcm90b3R5cGVgLiBUaGlzXG4gKiBhY2NlcHRzIGNsYXNzIG1ldGhvZHMgd2hpbGUgc3RpbGwgYmxvY2tpbmcgYE9iamVjdC5wcm90b3R5cGVgXG4gKiBwb2xsdXRpb24gYXR0YWNrcy5cbiAqL1xuZnVuY3Rpb24gaGFzT3duT3JDbGFzc01ldGhvZChyOiB1bmtub3duLCBtOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHIgPT09IG51bGwgfHwgdHlwZW9mIHIgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwgbSkpIHtcbiAgICByZXR1cm4gdHlwZW9mIChyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVttXSA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuICBsZXQgcHJvdG86IHVua25vd24gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yocik7XG4gIHdoaWxlIChwcm90byAhPT0gbnVsbCAmJiBwcm90byAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvdG8sIG0pKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIChwcm90byBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbV0gPT09ICdmdW5jdGlvbic7XG4gICAgfVxuICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVHJ1ZSBpZmYgdGhlIHJlY29yZGVyIGltcGxlbWVudHMgYXQgbGVhc3Qgb25lIGRhdGEtZmxvdyBldmVudCBtZXRob2QuXG4gKiBVc2VkIGJ5IGBleGVjdXRvci5hdHRhY2hDb21iaW5lZFJlY29yZGVyYCB0byBkZWNpZGUgd2hldGhlciB0byBob29rIGludG9cbiAqIHRoZSBzY29wZSBkYXRhLWZsb3cgY2hhbm5lbC5cbiAqXG4gKiAjIyBEZXRlY3Rpb24gcnVsZVxuICpcbiAqIEFjY2VwdHMgYm90aCBvYmplY3QtbGl0ZXJhbCByZWNvcmRlcnMgKG93bi1wcm9wZXJ0eSBoYW5kbGVycykgQU5EIGNsYXNzXG4gKiBpbnN0YW5jZXMgKGhhbmRsZXJzIGRlY2xhcmVkIG9uIHRoZSBjbGFzcyBwcm90b3R5cGUpLiBSZWplY3RzIGhhbmRsZXJzXG4gKiBpbmhlcml0ZWQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAg4oCUIHRoYXQncyBhbHdheXMgYWNjaWRlbnRhbCBvclxuICogbWFsaWNpb3VzIHBvbGx1dGlvbiwgbmV2ZXIgYSBsZWdpdGltYXRlIHJlY29yZGVyLlxuICpcbiAqICMjIExpZmVjeWNsZSBleGNsdXNpb25zXG4gKlxuICogYGNsZWFyYCBhbmQgYHRvU25hcHNob3RgIGFyZSBOT1QgY291bnRlZCBhcyBldmVudCBtZXRob2RzIOKAlCBhIHJlY29yZGVyXG4gKiB0aGF0IG9ubHkgaW1wbGVtZW50cyB0aG9zZSBoYXMgbm90aGluZyB0byBvYnNlcnZlIGFuZCB3b3VsZCBiZSBhIG5vLW9wXG4gKiBvbiBlaXRoZXIgY2hhbm5lbC5cbiAqXG4gKiAjIyBSZXR1cm4gdHlwZVxuICpcbiAqIFJldHVybnMgcGxhaW4gYGJvb2xlYW5gIChub3QgYSB0eXBlIHByZWRpY2F0ZSkuIFRoZSBmdWxsIGBTY29wZVJlY29yZGVyYFxuICogaW50ZXJmYWNlIGhhcyBwYXlsb2FkIHR5cGVzIHRoYXQgZGl2ZXJnZSBmcm9tIGBDb21iaW5lZFJlY29yZGVyYCdzIHVuaW9uXG4gKiB2YXJpYW50cyBmb3Igc2hhcmVkIG1ldGhvZHMsIHNvIGEgbmFycm93aW5nIHByZWRpY2F0ZSB3b3VsZCBiZSB1bnNvdW5kLlxuICogQ2FsbGVycyB0aGF0IG5lZWQgdG8gdHJlYXQgdGhlIHJlY29yZGVyIGFzIGEgYFNjb3BlUmVjb3JkZXJgIGRvIHNvIGV4cGxpY2l0bHlcbiAqIGF0IHRoZSBhdHRhY2ggc2l0ZSDigJQgdGhlIGNhc3QgaXMgdGhlIGNvbnRyYWN0IHRoYXQgZWFjaCBjaGFubmVsIHBhc3Nlc1xuICogaXRzIG93biBwYXlsb2FkIHZhcmlhbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZWNvcmRlck1ldGhvZHMocjogQ29tYmluZWRSZWNvcmRlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gUkVDT1JERVJfRVZFTlRfTUVUSE9EUy5zb21lKChtKSA9PiBoYXNPd25PckNsYXNzTWV0aG9kKHIsIG0pKTtcbn1cblxuLyoqXG4gKiBUcnVlIGlmZiB0aGUgcmVjb3JkZXIgaW1wbGVtZW50cyBhdCBsZWFzdCBvbmUgY29udHJvbC1mbG93IGV2ZW50IG1ldGhvZC5cbiAqIFNlZSBgaGFzUmVjb3JkZXJNZXRob2RzYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0Zsb3dSZWNvcmRlck1ldGhvZHMocjogQ29tYmluZWRSZWNvcmRlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gRkxPV19SRUNPUkRFUl9FVkVOVF9NRVRIT0RTLnNvbWUoKG0pID0+IGhhc093bk9yQ2xhc3NNZXRob2QociwgbSkpO1xufVxuXG4vKipcbiAqIFRydWUgaWZmIHRoZSByZWNvcmRlciBpbXBsZW1lbnRzIGF0IGxlYXN0IG9uZSBlbWl0LWNoYW5uZWwgZXZlbnQgbWV0aG9kLlxuICogU2VlIGBoYXNSZWNvcmRlck1ldGhvZHNgIGZvciB0aGUgb3duZXJzaGlwLWRldGVjdGlvbiBydWxlcyAob3duIG9yXG4gKiBjbGFzcy1wcm90b3R5cGUgbWV0aG9kcyBjb3VudDsgYE9iamVjdC5wcm90b3R5cGVgIHBvbGx1dGlvbiBkb2VzIG5vdCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNFbWl0UmVjb3JkZXJNZXRob2RzKHI6IENvbWJpbmVkUmVjb3JkZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIEVNSVRfUkVDT1JERVJfRVZFTlRfTUVUSE9EUy5zb21lKChtKSA9PiBoYXNPd25PckNsYXNzTWV0aG9kKHIsIG0pKTtcbn1cbiJdfQ==
|
|
228
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tYmluZWRSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvQ29tYmluZWRSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVERztBQWtHSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFJLEtBQVE7SUFDckMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUk7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5RCxNQUFNLENBQUMsR0FBRyxLQUFnQyxDQUFDO0lBQzNDLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxNQUFNO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdEMsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU87UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN4QyxPQUFPLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDO0FBQ3BDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHO0lBQ3BDLFFBQVE7SUFDUixTQUFTO0lBQ1QsVUFBVTtJQUNWLFNBQVM7SUFDVCxjQUFjO0lBQ2QsWUFBWTtJQUNaLFNBQVM7SUFDVCxVQUFVO0NBQ0YsQ0FBQztBQUVYOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHO0lBQ3pDLGlCQUFpQjtJQUNqQixRQUFRO0lBQ1IsWUFBWTtJQUNaLFFBQVE7SUFDUixZQUFZO0lBQ1osZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixxQkFBcUI7SUFDckIsUUFBUTtJQUNSLFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFVBQVU7SUFDVixzRUFBc0U7SUFDdEUsNERBQTREO0lBQzVELHVFQUF1RTtJQUN2RSxxRUFBcUU7SUFDckUsWUFBWTtJQUNaLFVBQVU7SUFDVixhQUFhO0NBQ0wsQ0FBQztBQUVYOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLFFBQVEsQ0FBVSxDQUFDO0FBRS9EOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxDQUFVLEVBQUUsQ0FBUztJQUNoRCxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3RELElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9DLE9BQU8sT0FBUSxDQUE2QixDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsSUFBSSxLQUFLLEdBQVksTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxPQUFPLE9BQVEsS0FBaUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUM7UUFDckUsQ0FBQztRQUNELEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsQ0FBbUI7SUFDcEQsT0FBTyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsQ0FBbUI7SUFDeEQsT0FBTywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLENBQW1CO0lBQ3hELE9BQU8sMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb21iaW5lZFJlY29yZGVyIOKAlCBhIHNpbmdsZSBvYnNlcnZlciB0aGF0IGNhbiBob29rIGludG8gTVVMVElQTEUgZXZlbnRcbiAqIHN0cmVhbXMgKGN1cnJlbnRseTogc2NvcGUgZGF0YS1mbG93ICsgY29udHJvbC1mbG93KS4gT25lIG9iamVjdCwgb25lIGBpZGAsXG4gKiBvbmUgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBleGVjdXRpb24uXG4gKlxuICogIyMgV2h5IHRoaXMgZXhpc3RzXG4gKlxuICogQmVmb3JlIGBDb21iaW5lZFJlY29yZGVyYCwgYSBjb25zdW1lciB3aG8gd2FudGVkIHRvIG9ic2VydmUgYm90aCBzdHJlYW1zXG4gKiBoYWQgdG86XG4gKiAgIDEuIEltcGxlbWVudCBib3RoIGBTY29wZVJlY29yZGVyYCAoOCBtZXRob2RzKSBhbmQgYEZsb3dSZWNvcmRlcmAgKDEyIG1ldGhvZHMpXG4gKiAgICAgIGZ1bGx5IOKAlCBzdHViYmluZyBldmVyeSBldmVudCB0aGV5IGRpZG4ndCBjYXJlIGFib3V0LlxuICogICAyLiBSZW1lbWJlciB0byBjYWxsIEJPVEggYGF0dGFjaFNjb3BlUmVjb3JkZXIocilgIEFORCBgYXR0YWNoRmxvd1JlY29yZGVyKHIpYC5cbiAqICAgICAgRm9yZ2V0dGluZyB0aGUgc2Vjb25kIGNhbGwgc2lsZW50bHkgZHJvcHBlZCBoYWxmIHRoZWlyIGV2ZW50cyDigJQgbm9cbiAqICAgICAgd2FybmluZywgbm8gcnVudGltZSBlcnJvci5cbiAqICAgMy4gUmUtaW1wbGVtZW50IGNvb3JkaW5hdGlvbiBsb2dpYyAoYnVmZmVyaW5nLCBvcmRlcmluZykgdGhlbXNlbHZlcy5cbiAqXG4gKiBgQ29tYmluZWRSZWNvcmRlcmAgY29sbGFwc2VzIHRoYXQgaW50byBhIHNpbmdsZSB0eXBlIGFuZCBhIHNpbmdsZSBhdHRhY2hcbiAqIGNhbGwgKGBleGVjdXRvci5hdHRhY2hDb21iaW5lZFJlY29yZGVyKHIpYCksIHdpdGggdGhlIGxpYnJhcnkgaGFuZGxpbmcgdGhlXG4gKiByb3V0aW5nIGludGVybmFsbHkuIENvbnN1bWVycyBpbXBsZW1lbnQgb25seSB0aGUgZXZlbnRzIHRoZXkgY2FyZSBhYm91dFxuICogKGBQYXJ0aWFsPC4uLj5gKSBhbmQgdGhlIGF0dGFjaCBtZXRob2QgZHVjay10eXBlcyBhdCBydW50aW1lIHRvIGRpc3BhdGNoXG4gKiB0byB0aGUgcmVsZXZhbnQgY2hhbm5lbHMuXG4gKlxuICogIyMgRm9yd2FyZCBjb21wYXRpYmlsaXR5XG4gKlxuICogV2hlbiBhIHRoaXJkIG9ic2VydmVyIHR5cGUgaXMgYWRkZWQgKGUuZy4gYW4gYE9wZXJhdGlvblJlY29yZGVyYCksIHRoZVxuICogYENvbWJpbmVkUmVjb3JkZXJgIHR5cGUgZ2FpbnMgYW4gYCYgUGFydGlhbDxPcGVyYXRpb25SZWNvcmRlcj5gIGNsYXVzZSBhbmRcbiAqIGBhdHRhY2hDb21iaW5lZFJlY29yZGVyYCBnYWlucyBvbmUgbW9yZSBydW50aW1lIGJyYW5jaCBpbiBpdHMgZGlzcGF0Y2guXG4gKiBDb25zdW1lcnMgd3JpdGluZyBhIGBDb21iaW5lZFJlY29yZGVyYCB0b2RheSBhcmUgTk9UIGFmZmVjdGVkIOKAlCB0aGVpclxuICogY29kZSBrZWVwcyBjb21waWxpbmcgYW5kIGF0dGFjaGluZyBjb3JyZWN0bHksIGJlY2F1c2UgZXZlcnkgbmV3IGxheWVyIGlzXG4gKiBvcHRpb25hbC5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHR5cGUgeyBDb21iaW5lZFJlY29yZGVyIH0gZnJvbSAnZm9vdHByaW50anMnO1xuICpcbiAqIGNvbnN0IGF1ZGl0OiBDb21iaW5lZFJlY29yZGVyID0ge1xuICogICBpZDogJ2F1ZGl0JyxcbiAqICAgb25Xcml0ZTogKGUpID0+IGxvZ1dyaXRlKGUua2V5LCBlLnZhbHVlKSwgICAgICAgIC8vIFNjb3BlUmVjb3JkZXIgbWV0aG9kXG4gKiAgIG9uRGVjaXNpb246IChlKSA9PiBsb2dEZWNpc2lvbihlLmNob3NlbiksICAgICAgICAvLyBGbG93UmVjb3JkZXIgbWV0aG9kXG4gKiB9O1xuICpcbiAqIGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIoYXVkaXQpO1xuICogLy8gXiBpbnRlcm5hbGx5OiBkZXRlY3RzIGJvdGggc2V0cyBvZiBtZXRob2RzLCByb3V0ZXMgdG8gYm90aCBjaGFubmVscy5cbiAqIGBgYFxuICpcbiAqICMjIENvbnRyYWN0IHdpdGggZXhpc3RpbmcgQVBJc1xuICpcbiAqIC0gYGF0dGFjaFNjb3BlUmVjb3JkZXIocilgIGFuZCBgYXR0YWNoRmxvd1JlY29yZGVyKHIpYCByZW1haW4gdW5jaGFuZ2VkLlxuICogICBDb25zdW1lcnMgd2hvIHdhbnQgb25seSBPTkUgY2hhbm5lbCBrZWVwIHVzaW5nIHRoZW0g4oCUIGV4cGxpY2l0IGlzIGdvb2QuXG4gKiAtIGBhdHRhY2hDb21iaW5lZFJlY29yZGVyKHIpYCBpcyB0aGUgT05MWSB3YXkgdG8gZ3VhcmFudGVlIGFuIG9iamVjdCBpc1xuICogICBob29rZWQgaW50byBldmVyeSBzdHJlYW0gaXQgaGFzIG1ldGhvZHMgZm9yLCB3aXRob3V0IG1haW50YWluaW5nIHR3b1xuICogICBhdHRhY2ggY2FsbHMgYXQgdGhlIGNhbGwgc2l0ZS5cbiAqIC0gSWRlbXBvdGVuY3kgYnkgYGlkYCBpcyBwcmVzZXJ2ZWQgYWNyb3NzIGNoYW5uZWxzOiByZS1hdHRhY2hpbmcgd2l0aCB0aGVcbiAqICAgc2FtZSBgaWRgIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBpbnN0YW5jZSBvbiBCT1RIIGNoYW5uZWxzLCBub3QganVzdCBvbmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93RXJyb3JFdmVudCwgRmxvd1BhdXNlRXZlbnQsIEZsb3dSZWNvcmRlciwgRmxvd1Jlc3VtZUV2ZW50IH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRXZlbnQsIFBhdXNlRXZlbnQsIFJlc3VtZUV2ZW50LCBTY29wZVJlY29yZGVyIH0gZnJvbSAnLi4vc2NvcGUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBFbWl0UmVjb3JkZXIgfSBmcm9tICcuL0VtaXRSZWNvcmRlci5qcyc7XG5cbi8qKlxuICogTWV0aG9kIG5hbWVzIHRoYXQgYXBwZWFyIG9uIEJPVEggYFNjb3BlUmVjb3JkZXJgIGFuZCBgRmxvd1JlY29yZGVyYCBidXQgd2l0aFxuICogZGlmZmVyZW50IGV2ZW50IHBheWxvYWQgdHlwZXMuIEZvciB0aGVzZSwgYSBgQ29tYmluZWRSZWNvcmRlcmAgZGVjbGFyZXNcbiAqIE9ORSBoYW5kbGVyIHRoYXQgcmVjZWl2ZXMgdGhlIHVuaW9uIG9mIGJvdGggcGF5bG9hZHMg4oCUIGNvbnN1bWVyc1xuICogZGlzY3JpbWluYXRlIHdpdGggdGhlIGV4cG9ydGVkIGBpc0Zsb3dFdmVudCgpYCBoZWxwZXIgKGV4cGxpY2l0IGBjaGFubmVsYFxuICogZGlzY3JpbWluYW50LCB3aXRoIGEgbGVnYWN5IHBpcGVsaW5lSWQtYWJzZW5jZSBmYWxsYmFjaykuXG4gKi9cbnR5cGUgU2hhcmVkTGlmZWN5Y2xlT3ZlcmxhcCA9ICdvbkVycm9yJyB8ICdvblBhdXNlJyB8ICdvblJlc3VtZSc7XG5cbi8qKiBMaWZlY3ljbGUgaG9va3MgKG5vdCBldmVudC1zcGVjaWZpYykgdGhhdCBib3RoIGludGVyZmFjZXMgc2hhcmUgaWRlbnRpY2FsbHkuICovXG50eXBlIFNoYXJlZExpZmVjeWNsZSA9ICdpZCcgfCAnY2xlYXInIHwgJ3RvU25hcHNob3QnO1xuXG4vKipcbiAqIEEgcmVjb3JkZXIgdGhhdCBNQVkgb2JzZXJ2ZSBhbnkgY29tYmluYXRpb24gb2Ygc3VwcG9ydGVkIGV2ZW50IHN0cmVhbXMuXG4gKlxuICogVG9kYXkncyBzdHJlYW1zOlxuICogICAtIFNjb3BlIGRhdGEtZmxvdyAoYFNjb3BlUmVjb3JkZXJgOiBvblJlYWQvb25Xcml0ZS9vbkNvbW1pdC9vblN0YWdlU3RhcnQv4oCmKVxuICogICAtIENvbnRyb2wtZmxvdyAoYEZsb3dSZWNvcmRlcmA6IG9uRGVjaXNpb24vb25TdWJmbG93RW50cnkvb25Mb29wL+KApilcbiAqXG4gKiBBbGwgZXZlbnQgaGFuZGxlcnMgYXJlIG9wdGlvbmFsIOKAlCBpbXBsZW1lbnQgb25seSB3aGF0IHlvdSBjYXJlIGFib3V0LlxuICogYGlkYCBpcyByZXF1aXJlZCBzbyB0aGUgbGlicmFyeSBjYW4gZGVkdXBsaWNhdGUgcmUtYXR0YWNoZXMuXG4gKlxuICogIyMgU2hhcmVkIG1ldGhvZCBuYW1lcyAob25FcnJvciAvIG9uUGF1c2UgLyBvblJlc3VtZSlcbiAqXG4gKiBCb3RoIGBTY29wZVJlY29yZGVyYCBhbmQgYEZsb3dSZWNvcmRlcmAgZGVjbGFyZSB0aGVzZSB3aXRoIERJRkZFUkVOVCBwYXlsb2FkXG4gKiBzaGFwZXMuIEluIGEgY29tYmluZWQgcmVjb3JkZXIsIGVhY2ggc3VjaCBoYW5kbGVyIGlzIGNhbGxlZCBieSBCT1RIXG4gKiBjaGFubmVscyB3aXRoIGl0cyBvd24gdmFyaWFudC4gVGhlIHBhcmFtZXRlciB0eXBlIGlzIGEgdW5pb24g4oCUIGNvbnN1bWVyc1xuICogY2FuIGVpdGhlciBoYW5kbGUgYm90aCB2YXJpYW50cyB1bmlmb3JtbHksIG9yIGRpc2NyaW1pbmF0ZSB3aXRoXG4gKiBgaXNGbG93RXZlbnQoKWAgKGV4cGxpY2l0IGBjaGFubmVsYCBkaXNjcmltaW5hbnQgc3RhbXBlZCBieSB0aGUgZW5naW5lKS5cbiAqXG4gKiAjIyBGb3J3YXJkIGNvbXBhdGliaWxpdHlcbiAqXG4gKiBXaGVuIGEgdGhpcmQgb2JzZXJ2ZXIgdHlwZSBzaGlwcyAoZS5nLiBgT3BlcmF0aW9uUmVjb3JkZXJgKSwgdGhlIHR5cGVcbiAqIGdhaW5zIGFub3RoZXIgYCYgUGFydGlhbDzigKY+YCBjbGF1c2UuIEJlY2F1c2UgZXZlcnkgY2xhdXNlIGlzIGBQYXJ0aWFsYCxcbiAqIGV4aXN0aW5nIGBDb21iaW5lZFJlY29yZGVyYCBpbXBsZW1lbnRhdGlvbnMgcmVtYWluIHR5cGUtdmFsaWQuXG4gKi9cbmV4cG9ydCB0eXBlIENvbWJpbmVkUmVjb3JkZXIgPSBQYXJ0aWFsPE9taXQ8U2NvcGVSZWNvcmRlciwgU2hhcmVkTGlmZWN5Y2xlT3ZlcmxhcCB8IFNoYXJlZExpZmVjeWNsZT4+ICZcbiAgUGFydGlhbDxPbWl0PEZsb3dSZWNvcmRlciwgU2hhcmVkTGlmZWN5Y2xlT3ZlcmxhcCB8IFNoYXJlZExpZmVjeWNsZT4+ICZcbiAgLy8gRW1pdCBjaGFubmVsIOKAlCBuZXcgdGhpcmQgc3RyZWFtIChQaGFzZSAzKS4gTm8gbWV0aG9kLW5hbWUgb3ZlcmxhcCB3aXRoXG4gIC8vIHRoZSBvdGhlciB0d28gaW50ZXJmYWNlcywgc28gYSBwbGFpbiBpbnRlcnNlY3Rpb24gaXMgc291bmQg4oCUIG5vXG4gIC8vIHVuaW9uLXBheWxvYWQgZGlzY3JpbWluYXRvciBuZWVkZWQuXG4gIFBhcnRpYWw8T21pdDxFbWl0UmVjb3JkZXIsIFNoYXJlZExpZmVjeWNsZT4+ICYge1xuICAgIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBEZWxpdmVyeSB0aWVyIGZvciB0aGlzIHJlY29yZGVyIChSRkMtMDAxKSDigJQgdGhlIEZJRUxEIGZvcm0gb2YgdGhlXG4gICAgICogYGF0dGFjaENvbWJpbmVkUmVjb3JkZXIociwgeyBkZWxpdmVyeSB9KWAgb3B0aW9ucyBiYWcsIHNvIGEgcmVjb3JkZXJcbiAgICAgKiBjYW4gREVDTEFSRSBpdHMgdGllciAoYHsgaWQsIGRlbGl2ZXJ5OiAnZGVmZXJyZWQnLCAuLi5ob29rcyB9YCkgYW5kXG4gICAgICogZXZlcnkgYXR0YWNoIHNpdGUgaG9ub3JzIGl0LiBgJ2RlZmVycmVkJ2Agcm91dGVzIHRoZSByZWNvcmRlcidzXG4gICAgICogZXZlbnRzIHRocm91Z2ggdGhlIGV4ZWN1dG9yJ3MgYm91bmRlZCBjYXB0dXJlIHF1ZXVlIChcIm9uZSBiZWF0XG4gICAgICogYmVoaW5kXCIpOyBhYnNlbnQgLyBgJ2lubGluZSdgIGtlZXBzIHRoZSBoaXN0b3JpY2FsIHN5bmNocm9ub3VzIGNhbGwuXG4gICAgICogTk9UIGFuIGV2ZW50IG1ldGhvZCDigJQgY2hhbm5lbCByb3V0aW5nIGRldGVjdGlvbiBjb3VudHMgZXZlbnQtTUVUSE9EXG4gICAgICogcHJvcGVydGllcyBvbmx5LCBzbyB0aGlzIHN0cmluZyBmaWVsZCBuZXZlciBhZmZlY3RzIHdoaWNoIGNoYW5uZWxzXG4gICAgICogdGhlIHJlY29yZGVyIGxhbmRzIG9uLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGRlbGl2ZXJ5PzogJ2lubGluZScgfCAnZGVmZXJyZWQnO1xuXG4gICAgLy8gU2hhcmVkIGxpZmVjeWNsZSBob29rcyDigJQgc2FtZSBvbiBib3RoIGludGVyZmFjZXMsIHNoYXBlIGNvbXBhdGlibGUuXG4gICAgY2xlYXI/KCk6IHZvaWQ7XG4gICAgdG9TbmFwc2hvdD8oKToge1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgICBwcmVmZXJyZWRPcGVyYXRpb24/OiAndHJhbnNsYXRlJyB8ICdhY2N1bXVsYXRlJyB8ICdhZ2dyZWdhdGUnO1xuICAgICAgZGF0YTogdW5rbm93bjtcbiAgICB9O1xuXG4gICAgLy8gU2hhcmVkIGV2ZW50IG1ldGhvZCBuYW1lcyB3aXRoIERJVkVSR0VOVCBwYXlsb2FkcyDigJQgZGVjbGFyZWQgYXMgdW5pb25zLlxuICAgIC8vIENvbnN1bWVycyBlaXRoZXIgaGFuZGxlIGJvdGggdmFyaWFudHMsIG9yIGRpc2NyaW1pbmF0ZSB1c2luZyB0aGVcbiAgICAvLyBleHBvcnRlZCBoZWxwZXIgYGlzRmxvd0V2ZW50KClgICh3aGljaCBjaGVja3MgdGhlIGV4cGxpY2l0IGBjaGFubmVsYFxuICAgIC8vIGRpc2NyaW1pbmFudCBzdGFtcGVkIGJ5IHRoZSBlbmdpbmUsIGZhbGxpbmcgYmFjayB0byBwaXBlbGluZUlkXG4gICAgLy8gYWJzZW5jZSBmb3IgdW5zdGFtcGVkIGV2ZW50cykuXG4gICAgLy9cbiAgICAvLyBAZXhhbXBsZVxuICAgIC8vIGBgYHRzXG4gICAgLy8gY29uc3QgYXVkaXQ6IENvbWJpbmVkUmVjb3JkZXIgPSB7XG4gICAgLy8gICBpZDogJ2F1ZGl0JyxcbiAgICAvLyAgIG9uRXJyb3I6IChlKSA9PiB7XG4gICAgLy8gICAgIGlmIChpc0Zsb3dFdmVudChlKSkge1xuICAgIC8vICAgICAgIC8vIGUgaXMgRmxvd0Vycm9yRXZlbnQg4oCUIGhhcyBzdGFnZU5hbWUsIG1lc3NhZ2UsIHN0cnVjdHVyZWRFcnJvclxuICAgIC8vICAgICAgIGxvZygnZmxvdyBlcnJvciBpbiBzdGFnZScsIGUuc3RhZ2VOYW1lKTtcbiAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAvLyBlIGlzIEVycm9yRXZlbnQg4oCUIGhhcyBlcnJvciwgb3BlcmF0aW9uLCBrZXk/XG4gICAgLy8gICAgICAgbG9nKCdzY29wZSBlcnJvciBkdXJpbmcnLCBlLm9wZXJhdGlvbiwgZS5lcnJvci5tZXNzYWdlKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSxcbiAgICAvLyB9O1xuICAgIC8vIGBgYFxuICAgIG9uRXJyb3I/KGV2ZW50OiBFcnJvckV2ZW50IHwgRmxvd0Vycm9yRXZlbnQpOiB2b2lkO1xuICAgIG9uUGF1c2U/KGV2ZW50OiBQYXVzZUV2ZW50IHwgRmxvd1BhdXNlRXZlbnQpOiB2b2lkO1xuICAgIG9uUmVzdW1lPyhldmVudDogUmVzdW1lRXZlbnQgfCBGbG93UmVzdW1lRXZlbnQpOiB2b2lkO1xuICB9O1xuXG4vKipcbiAqIERpc2NyaW1pbmF0b3IgZm9yIHRoZSB1bmlvbiBwYXlsb2FkIHR5cGVzIG9uIGBDb21iaW5lZFJlY29yZGVyYCdzIHNoYXJlZFxuICogbWV0aG9kcyAoYG9uRXJyb3JgLCBgb25QYXVzZWAsIGBvblJlc3VtZWApLiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZXZlbnRcbiAqIHdhcyBlbWl0dGVkIGZyb20gdGhlIGNvbnRyb2wtZmxvdyBjaGFubmVsIChGbG93UmVjb3JkZXIpLlxuICpcbiAqICMjIEhvdyBpdCBkaXNjcmltaW5hdGVzXG4gKlxuICogMS4gKipFeHBsaWNpdCBgY2hhbm5lbGAgZmllbGQgZmlyc3QqKiAoYmFja2xvZyBCMyk6IGV2ZXJ5IGVuZ2luZS1kaXNwYXRjaGVkXG4gKiAgICBzaGFyZWQtbWV0aG9kIGV2ZW50IGlzIHN0YW1wZWQgYGNoYW5uZWw6ICdmbG93J2AgKGNvbnRyb2wtZmxvdykgb3JcbiAqICAgIGBjaGFubmVsOiAnc2NvcGUnYCAoZGF0YS1mbG93KSBhdCBjb25zdHJ1Y3Rpb24uIFRoaXMgaXMgdGhlIHBvc2l0aXZlLFxuICogICAgc2NoZW1hLXJvYnVzdCBzaWduYWwg4oCUIGl0IHN1cnZpdmVzIHdyYXBwZXJzIHRoYXQgYWRkL3N0cmlwIGZpZWxkcy5cbiAqIDIuICoqTGVnYWN5IGZhbGxiYWNrKiogZm9yIHVuc3RhbXBlZCBldmVudHMgKGNvbnN1bWVyLWZhYnJpY2F0ZWQgdGVzdHMsXG4gKiAgICBwZXJzaXN0ZWQgdHJhY2VzIGZyb20gPDkuMik6IHNjb3BlLWNoYW5uZWwgZXZlbnRzIGV4dGVuZFxuICogICAgYFJlY29yZGVyQ29udGV4dGAsIHdoaWNoIGNhcnJpZXMgYHBpcGVsaW5lSWRgOyBmbG93LWNoYW5uZWwgZXZlbnRzIGRvXG4gKiAgICBub3QuIFRoZSBmbG93IHZhcmlhbnQgaXMgZGV0ZWN0ZWQgYnkgdGhlIEFCU0VOQ0Ugb2YgYHBpcGVsaW5lSWRgIOKAlFxuICogICAgc2NoZW1hLXN0YWJsZSBhcyBsb25nIGFzIHNjb3BlIGV2ZW50cyBjb250aW51ZSB0byBleHRlbmRcbiAqICAgIGBSZWNvcmRlckNvbnRleHRgLCBidXQgZnJhZ2lsZSBhZ2FpbnN0IGZpZWxkLXN0cmlwcGluZyB3cmFwcGVycywgd2hpY2hcbiAqICAgIGlzIHdoeSB0aGUgZXhwbGljaXQgZGlzY3JpbWluYW50IG5vdyBleGlzdHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBvbkVycm9yOiAoZSkgPT4ge1xuICogICBpZiAoaXNGbG93RXZlbnQoZSkpIHtcbiAqICAgICAvLyBOYXJyb3dlZCB0byBGbG93RXJyb3JFdmVudDogaGFzIHN0YWdlTmFtZSwgbWVzc2FnZSwgc3RydWN0dXJlZEVycm9yXG4gKiAgIH0gZWxzZSB7XG4gKiAgICAgLy8gTmFycm93ZWQgdG8gRXJyb3JFdmVudDogaGFzIGVycm9yLCBvcGVyYXRpb24sIGtleT9cbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zsb3dFdmVudDxUPihldmVudDogVCk6IGV2ZW50IGlzIEV4Y2x1ZGU8VCwgeyBwaXBlbGluZUlkOiBzdHJpbmcgfT4ge1xuICBpZiAodHlwZW9mIGV2ZW50ICE9PSAnb2JqZWN0JyB8fCBldmVudCA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBlID0gZXZlbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmIChlLmNoYW5uZWwgPT09ICdmbG93JykgcmV0dXJuIHRydWU7XG4gIGlmIChlLmNoYW5uZWwgPT09ICdzY29wZScpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGUucGlwZWxpbmVJZCA9PT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIE1ldGhvZCBuYW1lcyBiZWxvbmdpbmcgdG8gdGhlIGBTY29wZVJlY29yZGVyYCAoZGF0YS1mbG93KSBpbnRlcmZhY2UuXG4gKiBLZXB0IGFzIGEgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBzbyB0aGUgcnVudGltZSBkdWNrLXR5cGUgZGV0ZWN0b3Igc3RheXNcbiAqIGluIHN5bmMgd2l0aCB0aGUgaW50ZXJmYWNlLiBJZiBhIG1ldGhvZCBpcyBhZGRlZCB0byBgU2NvcGVSZWNvcmRlcmAsIGFkZGluZyBpdFxuICogaGVyZSBpcyB0aGUgT05MWSBjaGFuZ2UgcmVxdWlyZWQgdG8gcm91dGUgY29tYmluZWQtcmVjb3JkZXJzIGNvcnJlY3RseS5cbiAqL1xuZXhwb3J0IGNvbnN0IFJFQ09SREVSX0VWRU5UX01FVEhPRFMgPSBbXG4gICdvblJlYWQnLFxuICAnb25Xcml0ZScsXG4gICdvbkNvbW1pdCcsXG4gICdvbkVycm9yJyxcbiAgJ29uU3RhZ2VTdGFydCcsXG4gICdvblN0YWdlRW5kJyxcbiAgJ29uUGF1c2UnLFxuICAnb25SZXN1bWUnLFxuXSBhcyBjb25zdDtcblxuLyoqXG4gKiBNZXRob2QgbmFtZXMgYmVsb25naW5nIHRvIHRoZSBgRmxvd1JlY29yZGVyYCAoY29udHJvbC1mbG93KSBpbnRlcmZhY2UuXG4gKiBTZWUgdGhlIG5vdGUgb24gYFJFQ09SREVSX0VWRU5UX01FVEhPRFNgLlxuICpcbiAqIE5PVEU6IHRoZSBgb25FcnJvcmAsIGBvblBhdXNlYCwgYG9uUmVzdW1lYCBtZXRob2RzIGV4aXN0IG9uIEJPVEggaW50ZXJmYWNlc1xuICogd2l0aCBESUZGRVJFTlQgZXZlbnQgcGF5bG9hZCBzaGFwZXMuIEEgYENvbWJpbmVkUmVjb3JkZXJgIHRoYXQgaW1wbGVtZW50c1xuICogYW55IG9mIHRoZXNlIHJlY2VpdmVzIGJvdGggdmFyaWFudHMgKG9uZSBmcm9tIGVhY2ggY2hhbm5lbCkuIENvbnN1bWVycyB3aG9cbiAqIGNhcmUgYWJvdXQgdGhlIGRpc3RpbmN0aW9uIGRpc2NyaW1pbmF0ZSB3aXRoIGBpc0Zsb3dFdmVudCgpYCAoZXhwbGljaXRcbiAqIGBjaGFubmVsYCBkaXNjcmltaW5hbnQsIGxlZ2FjeSBwaXBlbGluZUlkLWFic2VuY2UgZmFsbGJhY2spLlxuICovXG5leHBvcnQgY29uc3QgRkxPV19SRUNPUkRFUl9FVkVOVF9NRVRIT0RTID0gW1xuICAnb25TdGFnZUV4ZWN1dGVkJyxcbiAgJ29uTmV4dCcsXG4gICdvbkRlY2lzaW9uJyxcbiAgJ29uRm9yaycsXG4gICdvblNlbGVjdGVkJyxcbiAgJ29uU3ViZmxvd0VudHJ5JyxcbiAgJ29uU3ViZmxvd0V4aXQnLFxuICAnb25TdWJmbG93UmVnaXN0ZXJlZCcsXG4gICdvbkxvb3AnLFxuICAnb25CcmVhaycsXG4gICdvbkVycm9yJyxcbiAgJ29uUGF1c2UnLFxuICAnb25SZXN1bWUnLFxuICAvLyBSdW4tYm91bmRhcnkgbWV0aG9kcyDigJQgaW5jbHVkZWQgc28gYSByZWNvcmRlciB3aG9zZSBPTkxZIGV2ZW50IGhvb2tcbiAgLy8gaXMgYSBydW4gYm91bmRhcnkgKGUuZy4gYW4gZXJyb3IgYnJpZGdlIGltcGxlbWVudGluZyBqdXN0XG4gIC8vIGBvblJ1bkZhaWxlZGApIGlzIHN0aWxsIGRldGVjdGVkIGFzIGEgRmxvd1JlY29yZGVyIGFuZCByb3V0ZWQgdG8gdGhlXG4gIC8vIGZsb3cgY2hhbm5lbC4gUHJldmlvdXNseSBhIHJ1bi1vbmx5IHJlY29yZGVyIHdhcyBzaWxlbnRseSBkcm9wcGVkLlxuICAnb25SdW5TdGFydCcsXG4gICdvblJ1bkVuZCcsXG4gICdvblJ1bkZhaWxlZCcsXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIE1ldGhvZCBuYW1lcyBiZWxvbmdpbmcgdG8gdGhlIGBFbWl0UmVjb3JkZXJgICh1c2VyLWVtaXR0ZWQgZXZlbnRzKVxuICogaW50ZXJmYWNlLiBTYW1lIGNvbnZlbnRpb24gYXMgdGhlIG90aGVyIHR3byBhcnJheXMgYWJvdmUg4oCUIGtlcHQgYXNcbiAqIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciBkdWNrLXR5cGUgZGV0ZWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgRU1JVF9SRUNPUkRFUl9FVkVOVF9NRVRIT0RTID0gWydvbkVtaXQnXSBhcyBjb25zdDtcblxuLyoqXG4gKiBUcnVlIGlmZiB0aGUgcmVjb3JkZXIgZGVjbGFyZXMgYSBtZXRob2QgbmFtZWQgYG1gIGVpdGhlciBhcyBhbiBvd25cbiAqIHByb3BlcnR5IE9SIG9uIGl0cyBjbGFzcy1wcm90b3R5cGUgY2hhaW4g4oCUIGJ1dCBOT1QgaW5oZXJpdGVkIGZyb21cbiAqIGBPYmplY3QucHJvdG90eXBlYC5cbiAqXG4gKiAjIyBXaHkgdGhpcyBsYXllcmVkIGNoZWNrXG4gKlxuICogQSBgQ29tYmluZWRSZWNvcmRlcmAgY2FuIGJlIGVpdGhlciBhIHBsYWluIG9iamVjdCBsaXRlcmFsIChoYW5kbGVycyBhc1xuICogb3duIHByb3BlcnRpZXMpIE9SIGEgY2xhc3MgaW5zdGFuY2UgKGhhbmRsZXJzIGFzIGNsYXNzLXByb3RvdHlwZVxuICogbWV0aG9kcykuIEJvdGggYXJlIGxlZ2l0aW1hdGUgY29uc3VtZXIgcGF0dGVybnMgYW5kIGJvdGggTVVTVCBhdHRhY2guXG4gKlxuICogQnV0IGhhbmRsZXJzIGluaGVyaXRlZCBmcm9tIGBPYmplY3QucHJvdG90eXBlYCBhcmUgQUxXQVlTIGFjY2lkZW50YWwgb3JcbiAqIG1hbGljaW91cyAobm9ib2R5IGxlZ2l0aW1hdGVseSBhdHRhY2hlcyByZWNvcmRlciBtZXRob2RzIHRoZXJlKS4gU28gd2VcbiAqIHdhbGsgdGhlIHByb3RvdHlwZSBjaGFpbiwgU1RPUFBJTkcgYmVmb3JlIGBPYmplY3QucHJvdG90eXBlYC4gVGhpc1xuICogYWNjZXB0cyBjbGFzcyBtZXRob2RzIHdoaWxlIHN0aWxsIGJsb2NraW5nIGBPYmplY3QucHJvdG90eXBlYFxuICogcG9sbHV0aW9uIGF0dGFja3MuXG4gKi9cbmZ1bmN0aW9uIGhhc093bk9yQ2xhc3NNZXRob2QocjogdW5rbm93biwgbTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChyID09PSBudWxsIHx8IHR5cGVvZiByICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG0pKSB7XG4gICAgcmV0dXJuIHR5cGVvZiAociBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbV0gPT09ICdmdW5jdGlvbic7XG4gIH1cbiAgbGV0IHByb3RvOiB1bmtub3duID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHIpO1xuICB3aGlsZSAocHJvdG8gIT09IG51bGwgJiYgcHJvdG8gIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCBtKSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiAocHJvdG8gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW21dID09PSAnZnVuY3Rpb24nO1xuICAgIH1cbiAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFRydWUgaWZmIHRoZSByZWNvcmRlciBpbXBsZW1lbnRzIGF0IGxlYXN0IG9uZSBkYXRhLWZsb3cgZXZlbnQgbWV0aG9kLlxuICogVXNlZCBieSBgZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcmAgdG8gZGVjaWRlIHdoZXRoZXIgdG8gaG9vayBpbnRvXG4gKiB0aGUgc2NvcGUgZGF0YS1mbG93IGNoYW5uZWwuXG4gKlxuICogIyMgRGV0ZWN0aW9uIHJ1bGVcbiAqXG4gKiBBY2NlcHRzIGJvdGggb2JqZWN0LWxpdGVyYWwgcmVjb3JkZXJzIChvd24tcHJvcGVydHkgaGFuZGxlcnMpIEFORCBjbGFzc1xuICogaW5zdGFuY2VzIChoYW5kbGVycyBkZWNsYXJlZCBvbiB0aGUgY2xhc3MgcHJvdG90eXBlKS4gUmVqZWN0cyBoYW5kbGVyc1xuICogaW5oZXJpdGVkIGZyb20gYE9iamVjdC5wcm90b3R5cGVgIOKAlCB0aGF0J3MgYWx3YXlzIGFjY2lkZW50YWwgb3JcbiAqIG1hbGljaW91cyBwb2xsdXRpb24sIG5ldmVyIGEgbGVnaXRpbWF0ZSByZWNvcmRlci5cbiAqXG4gKiAjIyBMaWZlY3ljbGUgZXhjbHVzaW9uc1xuICpcbiAqIGBjbGVhcmAgYW5kIGB0b1NuYXBzaG90YCBhcmUgTk9UIGNvdW50ZWQgYXMgZXZlbnQgbWV0aG9kcyDigJQgYSByZWNvcmRlclxuICogdGhhdCBvbmx5IGltcGxlbWVudHMgdGhvc2UgaGFzIG5vdGhpbmcgdG8gb2JzZXJ2ZSBhbmQgd291bGQgYmUgYSBuby1vcFxuICogb24gZWl0aGVyIGNoYW5uZWwuXG4gKlxuICogIyMgUmV0dXJuIHR5cGVcbiAqXG4gKiBSZXR1cm5zIHBsYWluIGBib29sZWFuYCAobm90IGEgdHlwZSBwcmVkaWNhdGUpLiBUaGUgZnVsbCBgU2NvcGVSZWNvcmRlcmBcbiAqIGludGVyZmFjZSBoYXMgcGF5bG9hZCB0eXBlcyB0aGF0IGRpdmVyZ2UgZnJvbSBgQ29tYmluZWRSZWNvcmRlcmAncyB1bmlvblxuICogdmFyaWFudHMgZm9yIHNoYXJlZCBtZXRob2RzLCBzbyBhIG5hcnJvd2luZyBwcmVkaWNhdGUgd291bGQgYmUgdW5zb3VuZC5cbiAqIENhbGxlcnMgdGhhdCBuZWVkIHRvIHRyZWF0IHRoZSByZWNvcmRlciBhcyBhIGBTY29wZVJlY29yZGVyYCBkbyBzbyBleHBsaWNpdGx5XG4gKiBhdCB0aGUgYXR0YWNoIHNpdGUg4oCUIHRoZSBjYXN0IGlzIHRoZSBjb250cmFjdCB0aGF0IGVhY2ggY2hhbm5lbCBwYXNzZXNcbiAqIGl0cyBvd24gcGF5bG9hZCB2YXJpYW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVjb3JkZXJNZXRob2RzKHI6IENvbWJpbmVkUmVjb3JkZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIFJFQ09SREVSX0VWRU5UX01FVEhPRFMuc29tZSgobSkgPT4gaGFzT3duT3JDbGFzc01ldGhvZChyLCBtKSk7XG59XG5cbi8qKlxuICogVHJ1ZSBpZmYgdGhlIHJlY29yZGVyIGltcGxlbWVudHMgYXQgbGVhc3Qgb25lIGNvbnRyb2wtZmxvdyBldmVudCBtZXRob2QuXG4gKiBTZWUgYGhhc1JlY29yZGVyTWV0aG9kc2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNGbG93UmVjb3JkZXJNZXRob2RzKHI6IENvbWJpbmVkUmVjb3JkZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIEZMT1dfUkVDT1JERVJfRVZFTlRfTUVUSE9EUy5zb21lKChtKSA9PiBoYXNPd25PckNsYXNzTWV0aG9kKHIsIG0pKTtcbn1cblxuLyoqXG4gKiBUcnVlIGlmZiB0aGUgcmVjb3JkZXIgaW1wbGVtZW50cyBhdCBsZWFzdCBvbmUgZW1pdC1jaGFubmVsIGV2ZW50IG1ldGhvZC5cbiAqIFNlZSBgaGFzUmVjb3JkZXJNZXRob2RzYCBmb3IgdGhlIG93bmVyc2hpcC1kZXRlY3Rpb24gcnVsZXMgKG93biBvclxuICogY2xhc3MtcHJvdG90eXBlIG1ldGhvZHMgY291bnQ7IGBPYmplY3QucHJvdG90eXBlYCBwb2xsdXRpb24gZG9lcyBub3QpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzRW1pdFJlY29yZGVyTWV0aG9kcyhyOiBDb21iaW5lZFJlY29yZGVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBFTUlUX1JFQ09SREVSX0VWRU5UX01FVEhPRFMuc29tZSgobSkgPT4gaGFzT3duT3JDbGFzc01ldGhvZChyLCBtKSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* recorder/invokeHook.ts — the ONE per-listener invoke helper (RFC-001 §9 mitigation).
|
|
3
|
+
*
|
|
4
|
+
* Pattern: Single shared "look up the hook, bind `this`, call it" primitive
|
|
5
|
+
* used by BOTH delivery tiers:
|
|
6
|
+
* - inline: `ScopeFacade._invokeHook` / `ScopeFacade.emitEvent`
|
|
7
|
+
* call it per recorder per event (the historical direct call);
|
|
8
|
+
* - deferred: `DeferredObserverTier`'s dispatcher listener calls
|
|
9
|
+
* it per envelope at the flush checkpoint.
|
|
10
|
+
* Because both tiers route through the SAME lookup + `.call(this)`
|
|
11
|
+
* semantics, the two paths cannot drift: a recorder that works
|
|
12
|
+
* inline is invoked identically one beat behind.
|
|
13
|
+
* Role: Invocation primitive only. NO error handling here — the two
|
|
14
|
+
* tiers isolate failures differently by design (inline routes a
|
|
15
|
+
* throw to sibling recorders' `onError` at the dispatch site;
|
|
16
|
+
* deferred routes sync throws AND async rejections through
|
|
17
|
+
* `DeferredDispatcher`'s injected error callback).
|
|
18
|
+
*
|
|
19
|
+
* Lookup semantics: NORMAL property lookup (prototype chain included), the
|
|
20
|
+
* same as the historical `recorder[hook]` read in `ScopeFacade._invokeHook` —
|
|
21
|
+
* class-based recorders declare hooks on their prototype. (The own-property
|
|
22
|
+
* restriction in `hasRecorderMethods` applies only to CHANNEL ROUTING
|
|
23
|
+
* detection, not to invocation.)
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Invoke `recorder[method](event)` with `this` bound to the recorder, iff
|
|
27
|
+
* `method` resolves to a function. Returns the hook's return value (a
|
|
28
|
+
* deferred listener may return a Promise the dispatcher tracks); returns
|
|
29
|
+
* `undefined` when the hook is absent. Throws whatever the hook throws —
|
|
30
|
+
* callers own error isolation.
|
|
31
|
+
*/
|
|
32
|
+
export function invokeRecorderHook(recorder, method, event) {
|
|
33
|
+
const hook = recorder[method];
|
|
34
|
+
if (typeof hook !== 'function')
|
|
35
|
+
return undefined;
|
|
36
|
+
return hook.call(recorder, event);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2tlSG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvaW52b2tlSG9vay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYztJQUNqRixNQUFNLElBQUksR0FBSSxRQUFvQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNELElBQUksT0FBTyxJQUFJLEtBQUssVUFBVTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2pELE9BQVEsSUFBZ0MsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlY29yZGVyL2ludm9rZUhvb2sudHMg4oCUIHRoZSBPTkUgcGVyLWxpc3RlbmVyIGludm9rZSBoZWxwZXIgKFJGQy0wMDEgwqc5IG1pdGlnYXRpb24pLlxuICpcbiAqIFBhdHRlcm46ICBTaW5nbGUgc2hhcmVkIFwibG9vayB1cCB0aGUgaG9vaywgYmluZCBgdGhpc2AsIGNhbGwgaXRcIiBwcmltaXRpdmVcbiAqICAgICAgICAgICB1c2VkIGJ5IEJPVEggZGVsaXZlcnkgdGllcnM6XG4gKiAgICAgICAgICAgICAtIGlubGluZTogICBgU2NvcGVGYWNhZGUuX2ludm9rZUhvb2tgIC8gYFNjb3BlRmFjYWRlLmVtaXRFdmVudGBcbiAqICAgICAgICAgICAgICAgY2FsbCBpdCBwZXIgcmVjb3JkZXIgcGVyIGV2ZW50ICh0aGUgaGlzdG9yaWNhbCBkaXJlY3QgY2FsbCk7XG4gKiAgICAgICAgICAgICAtIGRlZmVycmVkOiBgRGVmZXJyZWRPYnNlcnZlclRpZXJgJ3MgZGlzcGF0Y2hlciBsaXN0ZW5lciBjYWxsc1xuICogICAgICAgICAgICAgICBpdCBwZXIgZW52ZWxvcGUgYXQgdGhlIGZsdXNoIGNoZWNrcG9pbnQuXG4gKiAgICAgICAgICAgQmVjYXVzZSBib3RoIHRpZXJzIHJvdXRlIHRocm91Z2ggdGhlIFNBTUUgbG9va3VwICsgYC5jYWxsKHRoaXMpYFxuICogICAgICAgICAgIHNlbWFudGljcywgdGhlIHR3byBwYXRocyBjYW5ub3QgZHJpZnQ6IGEgcmVjb3JkZXIgdGhhdCB3b3Jrc1xuICogICAgICAgICAgIGlubGluZSBpcyBpbnZva2VkIGlkZW50aWNhbGx5IG9uZSBiZWF0IGJlaGluZC5cbiAqIFJvbGU6ICAgICBJbnZvY2F0aW9uIHByaW1pdGl2ZSBvbmx5LiBOTyBlcnJvciBoYW5kbGluZyBoZXJlIOKAlCB0aGUgdHdvXG4gKiAgICAgICAgICAgdGllcnMgaXNvbGF0ZSBmYWlsdXJlcyBkaWZmZXJlbnRseSBieSBkZXNpZ24gKGlubGluZSByb3V0ZXMgYVxuICogICAgICAgICAgIHRocm93IHRvIHNpYmxpbmcgcmVjb3JkZXJzJyBgb25FcnJvcmAgYXQgdGhlIGRpc3BhdGNoIHNpdGU7XG4gKiAgICAgICAgICAgZGVmZXJyZWQgcm91dGVzIHN5bmMgdGhyb3dzIEFORCBhc3luYyByZWplY3Rpb25zIHRocm91Z2hcbiAqICAgICAgICAgICBgRGVmZXJyZWREaXNwYXRjaGVyYCdzIGluamVjdGVkIGVycm9yIGNhbGxiYWNrKS5cbiAqXG4gKiBMb29rdXAgc2VtYW50aWNzOiBOT1JNQUwgcHJvcGVydHkgbG9va3VwIChwcm90b3R5cGUgY2hhaW4gaW5jbHVkZWQpLCB0aGVcbiAqIHNhbWUgYXMgdGhlIGhpc3RvcmljYWwgYHJlY29yZGVyW2hvb2tdYCByZWFkIGluIGBTY29wZUZhY2FkZS5faW52b2tlSG9va2Ag4oCUXG4gKiBjbGFzcy1iYXNlZCByZWNvcmRlcnMgZGVjbGFyZSBob29rcyBvbiB0aGVpciBwcm90b3R5cGUuIChUaGUgb3duLXByb3BlcnR5XG4gKiByZXN0cmljdGlvbiBpbiBgaGFzUmVjb3JkZXJNZXRob2RzYCBhcHBsaWVzIG9ubHkgdG8gQ0hBTk5FTCBST1VUSU5HXG4gKiBkZXRlY3Rpb24sIG5vdCB0byBpbnZvY2F0aW9uLilcbiAqL1xuXG4vKipcbiAqIEludm9rZSBgcmVjb3JkZXJbbWV0aG9kXShldmVudClgIHdpdGggYHRoaXNgIGJvdW5kIHRvIHRoZSByZWNvcmRlciwgaWZmXG4gKiBgbWV0aG9kYCByZXNvbHZlcyB0byBhIGZ1bmN0aW9uLiBSZXR1cm5zIHRoZSBob29rJ3MgcmV0dXJuIHZhbHVlIChhXG4gKiBkZWZlcnJlZCBsaXN0ZW5lciBtYXkgcmV0dXJuIGEgUHJvbWlzZSB0aGUgZGlzcGF0Y2hlciB0cmFja3MpOyByZXR1cm5zXG4gKiBgdW5kZWZpbmVkYCB3aGVuIHRoZSBob29rIGlzIGFic2VudC4gVGhyb3dzIHdoYXRldmVyIHRoZSBob29rIHRocm93cyDigJRcbiAqIGNhbGxlcnMgb3duIGVycm9yIGlzb2xhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludm9rZVJlY29yZGVySG9vayhyZWNvcmRlcjogb2JqZWN0LCBtZXRob2Q6IHN0cmluZywgZXZlbnQ6IHVua25vd24pOiB1bmtub3duIHtcbiAgY29uc3QgaG9vayA9IChyZWNvcmRlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbWV0aG9kXTtcbiAgaWYgKHR5cGVvZiBob29rICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gKGhvb2sgYXMgKGU6IHVua25vd24pID0+IHVua25vd24pLmNhbGwocmVjb3JkZXIsIGV2ZW50KTtcbn1cbiJdfQ==
|