footprintjs 9.4.0 → 9.5.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/dist/esm/lib/builder/FlowChartBuilder.js +15 -2
- package/dist/esm/lib/capture/envelope.js +187 -0
- package/dist/esm/lib/engine/handlers/ContinuationResolver.js +23 -4
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/observer-queue/deferredDispatcher.js +226 -0
- package/dist/esm/lib/observer-queue/flushDriver.js +163 -0
- package/dist/esm/lib/observer-queue/index.js +22 -0
- package/dist/esm/lib/observer-queue/mergedQueue.js +91 -0
- package/dist/esm/lib/observer-queue/ring.js +122 -0
- package/dist/lib/builder/FlowChartBuilder.js +15 -2
- package/dist/lib/capture/envelope.js +192 -0
- package/dist/lib/engine/handlers/ContinuationResolver.js +23 -4
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/observer-queue/deferredDispatcher.js +230 -0
- package/dist/lib/observer-queue/flushDriver.js +167 -0
- package/dist/lib/observer-queue/index.js +36 -0
- package/dist/lib/observer-queue/mergedQueue.js +95 -0
- package/dist/lib/observer-queue/ring.js +126 -0
- package/dist/types/lib/capture/envelope.d.ts +169 -0
- package/dist/types/lib/engine/handlers/ContinuationResolver.d.ts +15 -2
- package/dist/types/lib/engine/types.d.ts +3 -0
- package/dist/types/lib/observer-queue/deferredDispatcher.d.ts +169 -0
- package/dist/types/lib/observer-queue/flushDriver.d.ts +124 -0
- package/dist/types/lib/observer-queue/index.d.ts +25 -0
- package/dist/types/lib/observer-queue/mergedQueue.d.ts +85 -0
- package/dist/types/lib/observer-queue/ring.d.ts +99 -0
- package/package.json +1 -1
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* capture/envelope.ts — RFC-001 Block 1: capture envelopes + payload summarizer.
|
|
4
|
+
*
|
|
5
|
+
* Pattern: Point-in-time capture. An observer event is snapshotted into a
|
|
6
|
+
* self-contained, immutable envelope at the moment it happens, so
|
|
7
|
+
* DELIVERY can be deferred (RFC-001 "one beat behind") without the
|
|
8
|
+
* payload drifting under later engine mutations.
|
|
9
|
+
* Role: The capture tier of the deferred-observer pipeline
|
|
10
|
+
* (`src/lib/observer-queue/`). Pure module — ZERO engine imports
|
|
11
|
+
* (only `capture/` internals); the engine wiring is RFC-001
|
|
12
|
+
* Blocks 6–10.
|
|
13
|
+
*
|
|
14
|
+
* Capture policies (RFC-001 §5):
|
|
15
|
+
* - `'summary'` — bounded, reference-free summarization via
|
|
16
|
+
* {@link summarizePayload}. Built on the SAME classification path as the
|
|
17
|
+
* retention markers in `summarize.ts` (#14 / #13c-A), extended with
|
|
18
|
+
* bounded structural descent. Structured-clone-safe by construction.
|
|
19
|
+
* - `'clone'` — `structuredClone` at capture time (the capture-tier
|
|
20
|
+
* spelling of retention `'full'` — see the mapping notes in
|
|
21
|
+
* `policies.ts`). If the payload is not clonable (functions, symbols,
|
|
22
|
+
* live handles), capture DEGRADES to `'summary'` and reports through the
|
|
23
|
+
* `warn` hook — a capture must never throw into the producer.
|
|
24
|
+
* - `'ref'` — pass-through of the live reference. The CALLER asserts
|
|
25
|
+
* immutability for the delivery window (safe e.g. for committed-state
|
|
26
|
+
* reads, proven immutable-after-swap in #13/#13b). Exempt from the
|
|
27
|
+
* clone-safety guarantee — see the dev-warn seam below.
|
|
28
|
+
*
|
|
29
|
+
* Dev-warn seam (resolves the isDevMode-would-be-an-engine-import problem):
|
|
30
|
+
* This module must not import `scope/detectCircular` (engine territory).
|
|
31
|
+
* Instead, `capture()` accepts {@link CaptureHooks} with an optional
|
|
32
|
+
* `warn` callback and invokes it on every `'ref'` capture and every
|
|
33
|
+
* `'clone'` degradation. The WIRING layer (Block 6) binds `warn` to an
|
|
34
|
+
* `isDevMode()`-gated, deduplicated console warner; the pure module stays
|
|
35
|
+
* engine-free and silent by default (no hooks ⇒ no warning, zero cost).
|
|
36
|
+
*
|
|
37
|
+
* Summarizer bounds (documented contract, exported as constants):
|
|
38
|
+
* - depth ≤ {@link PAYLOAD_SUMMARY_MAX_DEPTH} (3) — deeper structure
|
|
39
|
+
* collapses to a classified leaf with `depthClipped: true`.
|
|
40
|
+
* - breadth ≤ {@link PAYLOAD_SUMMARY_MAX_ENTRIES} (16) per object/array —
|
|
41
|
+
* the remainder is dropped and flagged `truncated: true` (the honest
|
|
42
|
+
* `size` still reports the real count).
|
|
43
|
+
* - total ≤ {@link PAYLOAD_SUMMARY_MAX_NODES} (128) summary nodes per
|
|
44
|
+
* payload — a global budget so wide×deep payloads stay O(1)-bounded.
|
|
45
|
+
* - string previews ≤ `SUMMARY_PREVIEW_LENGTH` (80) chars.
|
|
46
|
+
* Cycles are detected (ancestor set) and flagged `circular: true`;
|
|
47
|
+
* throwing getters yield a `'unreadable'` leaf; symbol-keyed properties
|
|
48
|
+
* are ignored (same as JSON / `Object.keys`); `Map`/`Set` are leaves with
|
|
49
|
+
* their REAL entry count (no descent — matches `summarize.ts`).
|
|
50
|
+
*/
|
|
51
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
|
+
exports.capture = exports.summarizePayload = exports.PAYLOAD_SUMMARY_MAX_NODES = exports.PAYLOAD_SUMMARY_MAX_ENTRIES = exports.PAYLOAD_SUMMARY_MAX_DEPTH = void 0;
|
|
53
|
+
const summarize_js_1 = require("./summarize.js");
|
|
54
|
+
/** Max nesting depth a payload summary descends before clipping. */
|
|
55
|
+
exports.PAYLOAD_SUMMARY_MAX_DEPTH = 3;
|
|
56
|
+
/** Max entries summarized per object/array level before truncating. */
|
|
57
|
+
exports.PAYLOAD_SUMMARY_MAX_ENTRIES = 16;
|
|
58
|
+
/** Global per-payload budget of summary nodes (wide×deep hard bound). */
|
|
59
|
+
exports.PAYLOAD_SUMMARY_MAX_NODES = 128;
|
|
60
|
+
/**
|
|
61
|
+
* Classify one value through the ONE classification path shared with the
|
|
62
|
+
* retention markers. GATE NOTE: Block 1 may not modify `summarize.ts`, so
|
|
63
|
+
* the module-private `classifyValue` is reached through its exported facade
|
|
64
|
+
* and the brand field is dropped by explicit copy — Block 6 may export
|
|
65
|
+
* `classifyValue` directly and inline this hop.
|
|
66
|
+
*/
|
|
67
|
+
function classifyLeaf(value) {
|
|
68
|
+
const marker = (0, summarize_js_1.summarizeWriteValue)(value);
|
|
69
|
+
const leaf = { type: marker.type };
|
|
70
|
+
if (marker.size !== undefined)
|
|
71
|
+
leaf.size = marker.size;
|
|
72
|
+
if (marker.preview !== undefined)
|
|
73
|
+
leaf.preview = marker.preview;
|
|
74
|
+
return leaf;
|
|
75
|
+
}
|
|
76
|
+
/** Read one child property, converting throwing getters into a leaf. */
|
|
77
|
+
function summarizeChild(parent, key, depth, budget, ancestors) {
|
|
78
|
+
let child;
|
|
79
|
+
try {
|
|
80
|
+
child = parent[key];
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return { type: 'unreadable', preview: '[getter threw during capture]' };
|
|
84
|
+
}
|
|
85
|
+
return summarizeNode(child, depth, budget, ancestors);
|
|
86
|
+
}
|
|
87
|
+
function summarizeNode(value, depth, budget, ancestors) {
|
|
88
|
+
budget.nodesLeft -= 1;
|
|
89
|
+
const leaf = classifyLeaf(value);
|
|
90
|
+
// Only plain containers descend. Map/Set stay leaves (real entry count
|
|
91
|
+
// already on `size` — matches summarize.ts); everything else is a leaf.
|
|
92
|
+
const container = (leaf.type === 'object' || leaf.type === 'array') && typeof value === 'object' && value !== null;
|
|
93
|
+
if (!container || value instanceof Map || value instanceof Set)
|
|
94
|
+
return leaf;
|
|
95
|
+
const obj = value;
|
|
96
|
+
if (ancestors.has(obj))
|
|
97
|
+
return { ...leaf, circular: true };
|
|
98
|
+
if (depth >= exports.PAYLOAD_SUMMARY_MAX_DEPTH)
|
|
99
|
+
return { ...leaf, depthClipped: true };
|
|
100
|
+
if (budget.nodesLeft <= 0)
|
|
101
|
+
return { ...leaf, truncated: true };
|
|
102
|
+
ancestors.add(obj);
|
|
103
|
+
try {
|
|
104
|
+
if (Array.isArray(value)) {
|
|
105
|
+
const limit = Math.min(value.length, exports.PAYLOAD_SUMMARY_MAX_ENTRIES);
|
|
106
|
+
const items = [];
|
|
107
|
+
let clipped = value.length > limit;
|
|
108
|
+
for (let i = 0; i < limit; i++) {
|
|
109
|
+
if (budget.nodesLeft <= 0) {
|
|
110
|
+
clipped = true;
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
items.push(summarizeChild(value, i, depth + 1, budget, ancestors));
|
|
114
|
+
}
|
|
115
|
+
return clipped ? { ...leaf, items, truncated: true } : { ...leaf, items };
|
|
116
|
+
}
|
|
117
|
+
const keys = Object.keys(obj);
|
|
118
|
+
const limit = Math.min(keys.length, exports.PAYLOAD_SUMMARY_MAX_ENTRIES);
|
|
119
|
+
// Built via entries + fromEntries so hostile keys ('__proto__', ...)
|
|
120
|
+
// become own data properties — never prototype writes.
|
|
121
|
+
const entries = [];
|
|
122
|
+
let clipped = keys.length > limit;
|
|
123
|
+
for (let i = 0; i < limit; i++) {
|
|
124
|
+
if (budget.nodesLeft <= 0) {
|
|
125
|
+
clipped = true;
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
entries.push([keys[i], summarizeChild(obj, keys[i], depth + 1, budget, ancestors)]);
|
|
129
|
+
}
|
|
130
|
+
const fields = Object.fromEntries(entries);
|
|
131
|
+
return clipped ? { ...leaf, fields, truncated: true } : { ...leaf, fields };
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
ancestors.delete(obj);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Produce a bounded, reference-free, structured-clone-safe summary of an
|
|
139
|
+
* arbitrary payload. Never throws; never holds a reference into the source
|
|
140
|
+
* value (every node is a fresh object whose fields are primitives). Bounds
|
|
141
|
+
* are documented in the module header.
|
|
142
|
+
*/
|
|
143
|
+
function summarizePayload(payload) {
|
|
144
|
+
const budget = { nodesLeft: exports.PAYLOAD_SUMMARY_MAX_NODES };
|
|
145
|
+
const root = summarizeNode(payload, 0, budget, new Set());
|
|
146
|
+
return { __payloadSummary: true, ...root };
|
|
147
|
+
}
|
|
148
|
+
exports.summarizePayload = summarizePayload;
|
|
149
|
+
/** Materialize the payload per policy — see the module header contract. */
|
|
150
|
+
function capturePayload(request, policy, hooks) {
|
|
151
|
+
if (policy === 'ref') {
|
|
152
|
+
hooks?.warn?.(`[footprintjs capture] 'ref' capture for ${request.channel}.${request.method} passes a LIVE reference ` +
|
|
153
|
+
'through deferred delivery — the caller asserts the payload is immutable until delivered.');
|
|
154
|
+
return request.payload;
|
|
155
|
+
}
|
|
156
|
+
if (policy === 'clone') {
|
|
157
|
+
try {
|
|
158
|
+
return structuredClone(request.payload);
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
hooks?.warn?.(`[footprintjs capture] 'clone' capture for ${request.channel}.${request.method} failed ` +
|
|
162
|
+
"(structuredClone threw — unclonable payload); degraded to 'summary'.");
|
|
163
|
+
return summarizePayload(request.payload);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return summarizePayload(request.payload);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Capture one observer event into an immutable {@link CaptureEnvelope}.
|
|
170
|
+
*
|
|
171
|
+
* Guarantees:
|
|
172
|
+
* - Never throws into the producer (`'clone'` degradation, summarizer
|
|
173
|
+
* never-throws contract).
|
|
174
|
+
* - The returned envelope is shallow-frozen — `seq`/`channel`/... cannot
|
|
175
|
+
* be reassigned. Under `'summary'`/`'clone'` the payload holds no live
|
|
176
|
+
* reference into the source; under `'ref'` it intentionally does.
|
|
177
|
+
* - Default policy is `'summary'` (cheapest safe tier).
|
|
178
|
+
*/
|
|
179
|
+
function capture(request, policy = 'summary', hooks) {
|
|
180
|
+
const capturedAt = hooks?.now !== undefined ? hooks.now() : Date.now();
|
|
181
|
+
return Object.freeze({
|
|
182
|
+
seq: request.seq,
|
|
183
|
+
channel: request.channel,
|
|
184
|
+
method: request.method,
|
|
185
|
+
runtimeStageId: request.runtimeStageId,
|
|
186
|
+
runId: request.runId,
|
|
187
|
+
payload: capturePayload(request, policy, hooks),
|
|
188
|
+
capturedAt,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
exports.capture = capture;
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52ZWxvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvZW52ZWxvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnREc7OztBQUVILGlEQUE0RTtBQWlFNUUsb0VBQW9FO0FBQ3ZELFFBQUEseUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0FBRTNDLHVFQUF1RTtBQUMxRCxRQUFBLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztBQUU5Qyx5RUFBeUU7QUFDNUQsUUFBQSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUEwRDdDOzs7Ozs7R0FNRztBQUNILFNBQVMsWUFBWSxDQUFDLEtBQWM7SUFDbEMsTUFBTSxNQUFNLEdBQUcsSUFBQSxrQ0FBbUIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxNQUFNLElBQUksR0FBcUIsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JELElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTO1FBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ3ZELElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFTO1FBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQ2hFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELHdFQUF3RTtBQUN4RSxTQUFTLGNBQWMsQ0FDckIsTUFBYyxFQUNkLEdBQW9CLEVBQ3BCLEtBQWEsRUFDYixNQUF1QixFQUN2QixTQUFzQjtJQUV0QixJQUFJLEtBQWMsQ0FBQztJQUNuQixJQUFJLENBQUM7UUFDSCxLQUFLLEdBQUksTUFBMkMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxFQUFFLElBQUksRUFBRSxZ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LEVBQUUsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO1FBQy9DLFVBQVU7S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBZkQsMEJBZUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGNhcHR1cmUvZW52ZWxvcGUudHMg4oCUIFJGQy0wMDEgQmxvY2sgMTogY2FwdHVyZSBlbnZlbG9wZXMgKyBwYXlsb2FkIHN1bW1hcml6ZXIuXG4gKlxuICogUGF0dGVybjogIFBvaW50LWluLXRpbWUgY2FwdHVyZS4gQW4gb2JzZXJ2ZXIgZXZlbnQgaXMgc25hcHNob3R0ZWQgaW50byBhXG4gKiAgICAgICAgICAgc2VsZi1jb250YWluZWQsIGltbXV0YWJsZSBlbnZlbG9wZSBhdCB0aGUgbW9tZW50IGl0IGhhcHBlbnMsIHNvXG4gKiAgICAgICAgICAgREVMSVZFUlkgY2FuIGJlIGRlZmVycmVkIChSRkMtMDAxIFwib25lIGJlYXQgYmVoaW5kXCIpIHdpdGhvdXQgdGhlXG4gKiAgICAgICAgICAgcGF5bG9hZCBkcmlmdGluZyB1bmRlciBsYXRlciBlbmdpbmUgbXV0YXRpb25zLlxuICogUm9sZTogICAgIFRoZSBjYXB0dXJlIHRpZXIgb2YgdGhlIGRlZmVycmVkLW9ic2VydmVyIHBpcGVsaW5lXG4gKiAgICAgICAgICAgKGBzcmMvbGliL29ic2VydmVyLXF1ZXVlL2ApLiBQdXJlIG1vZHVsZSDigJQgWkVSTyBlbmdpbmUgaW1wb3J0c1xuICogICAgICAgICAgIChvbmx5IGBjYXB0dXJlL2AgaW50ZXJuYWxzKTsgdGhlIGVuZ2luZSB3aXJpbmcgaXMgUkZDLTAwMVxuICogICAgICAgICAgIEJsb2NrcyA24oCTMTAuXG4gKlxuICogQ2FwdHVyZSBwb2xpY2llcyAoUkZDLTAwMSDCpzUpOlxuICogICAtIGAnc3VtbWFyeSdgIOKAlCBib3VuZGVkLCByZWZlcmVuY2UtZnJlZSBzdW1tYXJpemF0aW9uIHZpYVxuICogICAgIHtAbGluayBzdW1tYXJpemVQYXlsb2FkfS4gQnVpbHQgb24gdGhlIFNBTUUgY2xhc3NpZmljYXRpb24gcGF0aCBhcyB0aGVcbiAqICAgICByZXRlbnRpb24gbWFya2VycyBpbiBgc3VtbWFyaXplLnRzYCAoIzE0IC8gIzEzYy1BKSwgZXh0ZW5kZWQgd2l0aFxuICogICAgIGJvdW5kZWQgc3RydWN0dXJhbCBkZXNjZW50LiBTdHJ1Y3R1cmVkLWNsb25lLXNhZmUgYnkgY29uc3RydWN0aW9uLlxuICogICAtIGAnY2xvbmUnYCAgIOKAlCBgc3RydWN0dXJlZENsb25lYCBhdCBjYXB0dXJlIHRpbWUgKHRoZSBjYXB0dXJlLXRpZXJcbiAqICAgICBzcGVsbGluZyBvZiByZXRlbnRpb24gYCdmdWxsJ2Ag4oCUIHNlZSB0aGUgbWFwcGluZyBub3RlcyBpblxuICogICAgIGBwb2xpY2llcy50c2ApLiBJZiB0aGUgcGF5bG9hZCBpcyBub3QgY2xvbmFibGUgKGZ1bmN0aW9ucywgc3ltYm9scyxcbiAqICAgICBsaXZlIGhhbmRsZXMpLCBjYXB0dXJlIERFR1JBREVTIHRvIGAnc3VtbWFyeSdgIGFuZCByZXBvcnRzIHRocm91Z2ggdGhlXG4gKiAgICAgYHdhcm5gIGhvb2sg4oCUIGEgY2FwdHVyZSBtdXN0IG5ldmVyIHRocm93IGludG8gdGhlIHByb2R1Y2VyLlxuICogICAtIGAncmVmJ2AgICAgIOKAlCBwYXNzLXRocm91Z2ggb2YgdGhlIGxpdmUgcmVmZXJlbmNlLiBUaGUgQ0FMTEVSIGFzc2VydHNcbiAqICAgICBpbW11dGFiaWxpdHkgZm9yIHRoZSBkZWxpdmVyeSB3aW5kb3cgKHNhZmUgZS5nLiBmb3IgY29tbWl0dGVkLXN0YXRlXG4gKiAgICAgcmVhZHMsIHByb3ZlbiBpbW11dGFibGUtYWZ0ZXItc3dhcCBpbiAjMTMvIzEzYikuIEV4ZW1wdCBmcm9tIHRoZVxuICogICAgIGNsb25lLXNhZmV0eSBndWFyYW50ZWUg4oCUIHNlZSB0aGUgZGV2LXdhcm4gc2VhbSBiZWxvdy5cbiAqXG4gKiBEZXYtd2FybiBzZWFtIChyZXNvbHZlcyB0aGUgaXNEZXZNb2RlLXdvdWxkLWJlLWFuLWVuZ2luZS1pbXBvcnQgcHJvYmxlbSk6XG4gKiAgIFRoaXMgbW9kdWxlIG11c3Qgbm90IGltcG9ydCBgc2NvcGUvZGV0ZWN0Q2lyY3VsYXJgIChlbmdpbmUgdGVycml0b3J5KS5cbiAqICAgSW5zdGVhZCwgYGNhcHR1cmUoKWAgYWNjZXB0cyB7QGxpbmsgQ2FwdHVyZUhvb2tzfSB3aXRoIGFuIG9wdGlvbmFsXG4gKiAgIGB3YXJuYCBjYWxsYmFjayBhbmQgaW52b2tlcyBpdCBvbiBldmVyeSBgJ3JlZidgIGNhcHR1cmUgYW5kIGV2ZXJ5XG4gKiAgIGAnY2xvbmUnYCBkZWdyYWRhdGlvbi4gVGhlIFdJUklORyBsYXllciAoQmxvY2sgNikgYmluZHMgYHdhcm5gIHRvIGFuXG4gKiAgIGBpc0Rldk1vZGUoKWAtZ2F0ZWQsIGRlZHVwbGljYXRlZCBjb25zb2xlIHdhcm5lcjsgdGhlIHB1cmUgbW9kdWxlIHN0YXlzXG4gKiAgIGVuZ2luZS1mcmVlIGFuZCBzaWxlbnQgYnkgZGVmYXVsdCAobm8gaG9va3Mg4oeSIG5vIHdhcm5pbmcsIHplcm8gY29zdCkuXG4gKlxuICogU3VtbWFyaXplciBib3VuZHMgKGRvY3VtZW50ZWQgY29udHJhY3QsIGV4cG9ydGVkIGFzIGNvbnN0YW50cyk6XG4gKiAgIC0gZGVwdGggICDiiaQge0BsaW5rIFBBWUxPQURfU1VNTUFSWV9NQVhfREVQVEh9ICAgKDMpIOKAlCBkZWVwZXIgc3RydWN0dXJlXG4gKiAgICAgY29sbGFwc2VzIHRvIGEgY2xhc3NpZmllZCBsZWFmIHdpdGggYGRlcHRoQ2xpcHBlZDogdHJ1ZWAuXG4gKiAgIC0gYnJlYWR0aCDiiaQge0BsaW5rIFBBWUxPQURfU1VNTUFSWV9NQVhfRU5UUklFU30gKDE2KSBwZXIgb2JqZWN0L2FycmF5IOKAlFxuICogICAgIHRoZSByZW1haW5kZXIgaXMgZHJvcHBlZCBhbmQgZmxhZ2dlZCBgdHJ1bmNhdGVkOiB0cnVlYCAodGhlIGhvbmVzdFxuICogICAgIGBzaXplYCBzdGlsbCByZXBvcnRzIHRoZSByZWFsIGNvdW50KS5cbiAqICAgLSB0b3RhbCAgIOKJpCB7QGxpbmsgUEFZTE9BRF9TVU1NQVJZX01BWF9OT0RFU30gICAoMTI4KSBzdW1tYXJ5IG5vZGVzIHBlclxuICogICAgIHBheWxvYWQg4oCUIGEgZ2xvYmFsIGJ1ZGdldCBzbyB3aWRlw5dkZWVwIHBheWxvYWRzIHN0YXkgTygxKS1ib3VuZGVkLlxuICogICAtIHN0cmluZyBwcmV2aWV3cyDiiaQgYFNVTU1BUllfUFJFVklFV19MRU5HVEhgICg4MCkgY2hhcnMuXG4gKiAgIEN5Y2xlcyBhcmUgZGV0ZWN0ZWQgKGFuY2VzdG9yIHNldCkgYW5kIGZsYWdnZWQgYGNpcmN1bGFyOiB0cnVlYDtcbiAqICAgdGhyb3dpbmcgZ2V0dGVycyB5aWVsZCBhIGAndW5yZWFkYWJsZSdgIGxlYWY7IHN5bWJvbC1rZXllZCBwcm9wZXJ0aWVzXG4gKiAgIGFyZSBpZ25vcmVkIChzYW1lIGFzIEpTT04gLyBgT2JqZWN0LmtleXNgKTsgYE1hcGAvYFNldGAgYXJlIGxlYXZlcyB3aXRoXG4gKiAgIHRoZWlyIFJFQUwgZW50cnkgY291bnQgKG5vIGRlc2NlbnQg4oCUIG1hdGNoZXMgYHN1bW1hcml6ZS50c2ApLlxuICovXG5cbmltcG9ydCB7IHR5cGUgU3VtbWFyeVZhbHVlVHlwZSwgc3VtbWFyaXplV3JpdGVWYWx1ZSB9IGZyb20gJy4vc3VtbWFyaXplLmpzJztcblxuLyoqIFdoaWNoIG9ic2VydmVyIGNoYW5uZWwgcHJvZHVjZWQgYSBjYXB0dXJlZCBldmVudCAoUkZDLTAwMSDCpzUpLiAqL1xuZXhwb3J0IHR5cGUgQ2FwdHVyZUNoYW5uZWwgPSAnc2NvcGUnIHwgJ2Zsb3cnIHwgJ2VtaXQnO1xuXG4vKipcbiAqIEhvdyBhbiBldmVudCBwYXlsb2FkIGlzIG1hdGVyaWFsaXplZCBpbnRvIHRoZSBlbnZlbG9wZSAoUkZDLTAwMSDCpzUpLlxuICogU2VlIHRoZSBtb2R1bGUgaGVhZGVyIGZvciB0aGUgZnVsbCBwZXItcG9saWN5IGNvbnRyYWN0LlxuICovXG5leHBvcnQgdHlwZSBDYXB0dXJlUG9saWN5ID0gJ3N1bW1hcnknIHwgJ2Nsb25lJyB8ICdyZWYnO1xuXG4vKipcbiAqIEEgY2FwdHVyZWQgb2JzZXJ2ZXIgZXZlbnQg4oCUIHNlbGYtY29udGFpbmVkIGFuZCBpbW11dGFibGUgKHNoYWxsb3ctZnJvemVuXG4gKiBhdCBjcmVhdGlvbikuIGBzZXFgIGlzIHRoZSBhcnJpdmFsIHN0YW1wIGFzc2lnbmVkIGF0IGNhcHR1cmUgdW5kZXIgdGhlXG4gKiBzaW5nbGUgSlMgdGhyZWFkOiBpdCB0b3RhbGx5IG9yZGVycyBldmVudHMgQUNST1NTIGFsbCB0aHJlZSBjaGFubmVscywgaXNcbiAqIG1vbm90b25pYywgYW5kIGlzIGdhcC1kZXRlY3RhYmxlIChhIGRyb3BwZWQgZXZlbnQgbGVhdmVzIGEgdmlzaWJsZSBob2xlXG4gKiBpbiB0aGUgZGVsaXZlcmVkIGBzZXFgIHNlcXVlbmNlIOKAlCBob25lc3QgbG9zcyBhY2NvdW50aW5nKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXB0dXJlRW52ZWxvcGUge1xuICAvKiogQXJyaXZhbCBzdGFtcCDigJQgdG90YWwgb3JkZXIgYWNyb3NzIGNoYW5uZWxzOyBnYXBzIHJldmVhbCBkcm9wcy4gKi9cbiAgcmVhZG9ubHkgc2VxOiBudW1iZXI7XG4gIC8qKiBQcm9kdWNpbmcgb2JzZXJ2ZXIgY2hhbm5lbC4gKi9cbiAgcmVhZG9ubHkgY2hhbm5lbDogQ2FwdHVyZUNoYW5uZWw7XG4gIC8qKiBQcm9kdWNpbmcgaG9vayBuYW1lIOKAlCBgJ29uV3JpdGUnYCwgYCdvblN0YWdlRXhlY3V0ZWQnYCwgYCdvbkVtaXQnYCwgLi4uICovXG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICAvKiogVGhlIGV4ZWN1dGlvbiBzdGVwIHRoYXQgcHJvZHVjZWQgdGhlIGV2ZW50IChgc3RhZ2VJZCNleGVjdXRpb25JbmRleGApLiAqL1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICAvKiogVGhlIHJ1biB0aGF0IHByb2R1Y2VkIHRoZSBldmVudCAoQ29udmVudGlvbiA0IHBlci1ydW4gc2NvcGluZykuICovXG4gIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQZXIge0BsaW5rIENhcHR1cmVQb2xpY3l9IOKAlCBORVZFUiBhIGxpdmUgZW5naW5lIHJlZmVyZW5jZSB1bmRlclxuICAgKiBgJ3N1bW1hcnknYCAvIGAnY2xvbmUnYDsgdW5kZXIgYCdyZWYnYCB0aGUgY2FsbGVyIGFzc2VydGVkIGltbXV0YWJpbGl0eS5cbiAgICovXG4gIHJlYWRvbmx5IHBheWxvYWQ6IHVua25vd247XG4gIC8qKiBDYXB0dXJlIHdhbGwtY2xvY2sgKG1zIGVwb2NoIGJ5IGRlZmF1bHQ7IGluamVjdGFibGUgdmlhIGhvb2tzLm5vdykuICovXG4gIHJlYWRvbmx5IGNhcHR1cmVkQXQ6IG51bWJlcjtcbn1cblxuLyoqIFRoZSByYXcgZXZlbnQgZGVzY3JpcHRpb24gaGFuZGVkIHRvIHtAbGluayBjYXB0dXJlfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwdHVyZVJlcXVlc3Qge1xuICAvKiogQXJyaXZhbCBzdGFtcCDigJQgYXNzaWduZWQgYnkgdGhlIG1lcmdlZCBxdWV1ZSdzIGNvdW50ZXIgKEJsb2NrIDMpLiAqL1xuICByZWFkb25seSBzZXE6IG51bWJlcjtcbiAgcmVhZG9ubHkgY2hhbm5lbDogQ2FwdHVyZUNoYW5uZWw7XG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICAvKiogVGhlIExJVkUgcGF5bG9hZCDigJQgYGNhcHR1cmUoKWAgbWF0ZXJpYWxpemVzIGl0IHBlciBwb2xpY3kuICovXG4gIHJlYWRvbmx5IHBheWxvYWQ6IHVua25vd247XG59XG5cbi8qKlxuICogRW5naW5lLWZyZWUgc2VhbXMgaW5qZWN0ZWQgYnkgdGhlIHdpcmluZyBsYXllciAoQmxvY2sgNikuIFRoZSBwdXJlIG1vZHVsZVxuICogbmV2ZXIgaW1wb3J0cyBkZXYtbW9kZSBvciBjbG9jayBpbmZyYXN0cnVjdHVyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXB0dXJlSG9va3Mge1xuICAvKipcbiAgICogRGlhZ25vc3RpYyBzaW5rIOKAlCBpbnZva2VkIG9uIGV2ZXJ5IGAncmVmJ2AgY2FwdHVyZSAoY2FsbGVyLWFzc2VydGVkXG4gICAqIGltbXV0YWJpbGl0eSkgYW5kIGV2ZXJ5IGAnY2xvbmUnYCDihpIgYCdzdW1tYXJ5J2AgZGVncmFkYXRpb24uIEJsb2NrIDZcbiAgICogYmluZHMgdGhpcyB0byBhbiBgaXNEZXZNb2RlKClgLWdhdGVkLCBkZWR1cGxpY2F0ZWQgd2FybmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgd2Fybj86IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBDbG9jayBmb3IgYGNhcHR1cmVkQXRgIOKAlCBkZWZhdWx0cyB0byBgRGF0ZS5ub3dgLiBJbmplY3RhYmxlIGZvciB0ZXN0cy4gKi9cbiAgcmVhZG9ubHkgbm93PzogKCkgPT4gbnVtYmVyO1xufVxuXG4vKiogTWF4IG5lc3RpbmcgZGVwdGggYSBwYXlsb2FkIHN1bW1hcnkgZGVzY2VuZHMgYmVmb3JlIGNsaXBwaW5nLiAqL1xuZXhwb3J0IGNvbnN0IFBBWUxPQURfU1VNTUFSWV9NQVhfREVQVEggPSAzO1xuXG4vKiogTWF4IGVudHJpZXMgc3VtbWFyaXplZCBwZXIgb2JqZWN0L2FycmF5IGxldmVsIGJlZm9yZSB0cnVuY2F0aW5nLiAqL1xuZXhwb3J0IGNvbnN0IFBBWUxPQURfU1VNTUFSWV9NQVhfRU5UUklFUyA9IDE2O1xuXG4vKiogR2xvYmFsIHBlci1wYXlsb2FkIGJ1ZGdldCBvZiBzdW1tYXJ5IG5vZGVzICh3aWRlw5dkZWVwIGhhcmQgYm91bmQpLiAqL1xuZXhwb3J0IGNvbnN0IFBBWUxPQURfU1VNTUFSWV9NQVhfTk9ERVMgPSAxMjg7XG5cbi8qKlxuICogTGVhZiBjbGFzc2lmaWNhdGlvbiBmb3IgYSBzdW1tYXJ5IG5vZGUg4oCUIHRoZSBgc3VtbWFyaXplLnRzYCBmYW1pbHkgcGx1c1xuICogYCd1bnJlYWRhYmxlJ2AgZm9yIHByb3BlcnRpZXMgd2hvc2UgZ2V0dGVyIHRocmV3IGR1cmluZyBjYXB0dXJlLlxuICovXG5leHBvcnQgdHlwZSBQYXlsb2FkU3VtbWFyeVR5cGUgPSBTdW1tYXJ5VmFsdWVUeXBlIHwgJ3VucmVhZGFibGUnO1xuXG4vKipcbiAqIE9uZSBub2RlIG9mIGEgcGF5bG9hZCBzdW1tYXJ5IHRyZWUuIEV2ZXJ5IGZpZWxkIGlzIGEgcHJpbWl0aXZlLCBhIHBsYWluXG4gKiBvYmplY3QsIG9yIGEgcGxhaW4gYXJyYXkg4oCUIHN0cnVjdHVyZWQtY2xvbmUtc2FmZSBieSBjb25zdHJ1Y3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF5bG9hZFN1bW1hcnlOb2RlIHtcbiAgLyoqIENsYXNzaWZpY2F0aW9uIOKAlCBzYW1lIHJ1bGVzIGFzIHRoZSByZXRlbnRpb24gbWFya2VycyAob25lIGNvZGUgcGF0aCkuICovXG4gIHJlYWRvbmx5IHR5cGU6IFBheWxvYWRTdW1tYXJ5VHlwZTtcbiAgLyoqIEhvbmVzdCBzaXplIHByb3h5OiBzdHJpbmcgbGVuZ3RoLCBhcnJheSBsZW5ndGgsIG9yIGtleS9lbnRyeSBjb3VudC4gKi9cbiAgcmVhZG9ubHkgc2l6ZT86IG51bWJlcjtcbiAgLyoqIEZpcnN0IGBTVU1NQVJZX1BSRVZJRVdfTEVOR1RIYCBjaGFycyDigJQgcHJpbWl0aXZlcy9zdHJpbmdzIG9ubHkuICovXG4gIHJlYWRvbmx5IHByZXZpZXc/OiBzdHJpbmc7XG4gIC8qKiBTdW1tYXJpemVkIG93biBlbnVtZXJhYmxlIHN0cmluZy1rZXllZCBwcm9wZXJ0aWVzIChvYmplY3RzKS4gKi9cbiAgcmVhZG9ubHkgZmllbGRzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgUGF5bG9hZFN1bW1hcnlOb2RlPj47XG4gIC8qKiBTdW1tYXJpemVkIGxlYWRpbmcgaXRlbXMgKGFycmF5cykuICovXG4gIHJlYWRvbmx5IGl0ZW1zPzogcmVhZG9ubHkgUGF5bG9hZFN1bW1hcnlOb2RlW107XG4gIC8qKiBFbnRyaWVzIHdlcmUgb21pdHRlZCBoZXJlIChicmVhZHRoIGNhcCBvciBub2RlIGJ1ZGdldCkuICovXG4gIHJlYWRvbmx5IHRydW5jYXRlZD86IGJvb2xlYW47XG4gIC8qKiBUaGlzIHZhbHVlIGlzIGFuIGFuY2VzdG9yIG9mIGl0c2VsZiDigJQgZGVzY2VudCBzdG9wcGVkLiAqL1xuICByZWFkb25seSBjaXJjdWxhcj86IHRydWU7XG4gIC8qKiB7QGxpbmsgUEFZTE9BRF9TVU1NQVJZX01BWF9ERVBUSH0gcmVhY2hlZCDigJQgY2hpbGRyZW4gbm90IGRlc2NlbmRlZC4gKi9cbiAgcmVhZG9ubHkgZGVwdGhDbGlwcGVkPzogdHJ1ZTtcbn1cblxuLyoqXG4gKiBSb290IG9mIGEgcGF5bG9hZCBzdW1tYXJ5IOKAlCBicmFuZGVkIHNvIGNvbnN1bWVycyAoYW5kIHRlc3RzKSBjYW4gZGV0ZWN0XG4gKiB0aGF0IGEgcGF5bG9hZCB3YXMgc3VtbWFyaXplZCByYXRoZXIgdGhhbiBjbG9uZWQuIFNpYmxpbmcgb2YgdGhlXG4gKiBgX19yZWFkU3VtbWFyeWAgLyBgX193cml0ZVN1bW1hcnlgIHJldGVudGlvbiBtYXJrZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBheWxvYWRTdW1tYXJ5IGV4dGVuZHMgUGF5bG9hZFN1bW1hcnlOb2RlIHtcbiAgLyoqIERpc2NyaW1pbmFudCDigJQgYCdzdW1tYXJ5J2AtcG9saWN5IGVudmVsb3BlIHBheWxvYWRzIGNhcnJ5IHRoaXMuICovXG4gIHJlYWRvbmx5IF9fcGF5bG9hZFN1bW1hcnk6IHRydWU7XG59XG5cbi8qKiBNdXRhYmxlIGNvbnN0cnVjdGlvbiBzaGFwZSBmb3Ige0BsaW5rIFBheWxvYWRTdW1tYXJ5Tm9kZX0uICovXG5pbnRlcmZhY2UgU3VtbWFyeU5vZGVEcmFmdCB7XG4gIHR5cGU6IFBheWxvYWRTdW1tYXJ5VHlwZTtcbiAgc2l6ZT86IG51bWJlcjtcbiAgcHJldmlldz86IHN0cmluZztcbiAgZmllbGRzPzogUmVjb3JkPHN0cmluZywgUGF5bG9hZFN1bW1hcnlOb2RlPjtcbiAgaXRlbXM/OiBQYXlsb2FkU3VtbWFyeU5vZGVbXTtcbiAgdHJ1bmNhdGVkPzogYm9vbGVhbjtcbiAgY2lyY3VsYXI/OiB0cnVlO1xuICBkZXB0aENsaXBwZWQ/OiB0cnVlO1xufVxuXG4vKiogU2hhcmVkIG11dGFibGUgbm9kZSBidWRnZXQgZm9yIG9uZSB7QGxpbmsgc3VtbWFyaXplUGF5bG9hZH0gY2FsbC4gKi9cbmludGVyZmFjZSBTdW1tYXJpemVCdWRnZXQge1xuICBub2Rlc0xlZnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDbGFzc2lmeSBvbmUgdmFsdWUgdGhyb3VnaCB0aGUgT05FIGNsYXNzaWZpY2F0aW9uIHBhdGggc2hhcmVkIHdpdGggdGhlXG4gKiByZXRlbnRpb24gbWFya2Vycy4gR0FURSBOT1RFOiBCbG9jayAxIG1heSBub3QgbW9kaWZ5IGBzdW1tYXJpemUudHNgLCBzb1xuICogdGhlIG1vZHVsZS1wcml2YXRlIGBjbGFzc2lmeVZhbHVlYCBpcyByZWFjaGVkIHRocm91Z2ggaXRzIGV4cG9ydGVkIGZhY2FkZVxuICogYW5kIHRoZSBicmFuZCBmaWVsZCBpcyBkcm9wcGVkIGJ5IGV4cGxpY2l0IGNvcHkg4oCUIEJsb2NrIDYgbWF5IGV4cG9ydFxuICogYGNsYXNzaWZ5VmFsdWVgIGRpcmVjdGx5IGFuZCBpbmxpbmUgdGhpcyBob3AuXG4gKi9cbmZ1bmN0aW9uIGNsYXNzaWZ5TGVhZih2YWx1ZTogdW5rbm93bik6IFN1bW1hcnlOb2RlRHJhZnQge1xuICBjb25zdCBtYXJrZXIgPSBzdW1tYXJpemVXcml0ZVZhbHVlKHZhbHVlKTtcbiAgY29uc3QgbGVhZjogU3VtbWFyeU5vZGVEcmFmdCA9IHsgdHlwZTogbWFya2VyLnR5cGUgfTtcbiAgaWYgKG1hcmtlci5zaXplICE9PSB1bmRlZmluZWQpIGxlYWYuc2l6ZSA9IG1hcmtlci5zaXplO1xuICBpZiAobWFya2VyLnByZXZpZXcgIT09IHVuZGVmaW5lZCkgbGVhZi5wcmV2aWV3ID0gbWFya2VyLnByZXZpZXc7XG4gIHJldHVybiBsZWFmO1xufVxuXG4vKiogUmVhZCBvbmUgY2hpbGQgcHJvcGVydHksIGNvbnZlcnRpbmcgdGhyb3dpbmcgZ2V0dGVycyBpbnRvIGEgbGVhZi4gKi9cbmZ1bmN0aW9uIHN1bW1hcml6ZUNoaWxkKFxuICBwYXJlbnQ6IG9iamVjdCxcbiAga2V5OiBzdHJpbmcgfCBudW1iZXIsXG4gIGRlcHRoOiBudW1iZXIsXG4gIGJ1ZGdldDogU3VtbWFyaXplQnVkZ2V0LFxuICBhbmNlc3RvcnM6IFNldDxvYmplY3Q+LFxuKTogUGF5bG9hZFN1bW1hcnlOb2RlIHtcbiAgbGV0IGNoaWxkOiB1bmtub3duO1xuICB0cnkge1xuICAgIGNoaWxkID0gKHBhcmVudCBhcyBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCB1bmtub3duPilba2V5XTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgdHlwZTogJ3VucmVhZGFibGUnLCBwcmV2aWV3OiAnW2dldHRlciB0aHJldyBkdXJpbmcgY2FwdHVyZV0nIH07XG4gIH1cbiAgcmV0dXJuIHN1bW1hcml6ZU5vZGUoY2hpbGQsIGRlcHRoLCBidWRnZXQsIGFuY2VzdG9ycyk7XG59XG5cbmZ1bmN0aW9uIHN1bW1hcml6ZU5vZGUoXG4gIHZhbHVlOiB1bmtub3duLFxuICBkZXB0aDogbnVtYmVyLFxuICBidWRnZXQ6IFN1bW1hcml6ZUJ1ZGdldCxcbiAgYW5jZXN0b3JzOiBTZXQ8b2JqZWN0Pixcbik6IFBheWxvYWRTdW1tYXJ5Tm9kZSB7XG4gIGJ1ZGdldC5ub2Rlc0xlZnQgLT0gMTtcbiAgY29uc3QgbGVhZiA9IGNsYXNzaWZ5TGVhZih2YWx1ZSk7XG5cbiAgLy8gT25seSBwbGFpbiBjb250YWluZXJzIGRlc2NlbmQuIE1hcC9TZXQgc3RheSBsZWF2ZXMgKHJlYWwgZW50cnkgY291bnRcbiAgLy8gYWxyZWFkeSBvbiBgc2l6ZWAg4oCUIG1hdGNoZXMgc3VtbWFyaXplLnRzKTsgZXZlcnl0aGluZyBlbHNlIGlzIGEgbGVhZi5cbiAgY29uc3QgY29udGFpbmVyID0gKGxlYWYudHlwZSA9PT0gJ29iamVjdCcgfHwgbGVhZi50eXBlID09PSAnYXJyYXknKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsO1xuICBpZiAoIWNvbnRhaW5lciB8fCB2YWx1ZSBpbnN0YW5jZW9mIE1hcCB8fCB2YWx1ZSBpbnN0YW5jZW9mIFNldCkgcmV0dXJuIGxlYWY7XG5cbiAgY29uc3Qgb2JqID0gdmFsdWUgYXMgb2JqZWN0O1xuICBpZiAoYW5jZXN0b3JzLmhhcyhvYmopKSByZXR1cm4geyAuLi5sZWFmLCBjaXJjdWxhcjogdHJ1ZSB9O1xuICBpZiAoZGVwdGggPj0gUEFZTE9BRF9TVU1NQVJZX01BWF9ERVBUSCkgcmV0dXJuIHsgLi4ubGVhZiwgZGVwdGhDbGlwcGVkOiB0cnVlIH07XG4gIGlmIChidWRnZXQubm9kZXNMZWZ0IDw9IDApIHJldHVybiB7IC4uLmxlYWYsIHRydW5jYXRlZDogdHJ1ZSB9O1xuXG4gIGFuY2VzdG9ycy5hZGQob2JqKTtcbiAgdHJ5IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IGxpbWl0ID0gTWF0aC5taW4odmFsdWUubGVuZ3RoLCBQQVlMT0FEX1NVTU1BUllfTUFYX0VOVFJJRVMpO1xuICAgICAgY29uc3QgaXRlbXM6IFBheWxvYWRTdW1tYXJ5Tm9kZVtdID0gW107XG4gICAgICBsZXQgY2xpcHBlZCA9IHZhbHVlLmxlbmd0aCA+IGxpbWl0O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW1pdDsgaSsrKSB7XG4gICAgICAgIGlmIChidWRnZXQubm9kZXNMZWZ0IDw9IDApIHtcbiAgICAgICAgICBjbGlwcGVkID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpdGVtcy5wdXNoKHN1bW1hcml6ZUNoaWxkKHZhbHVlLCBpLCBkZXB0aCArIDEsIGJ1ZGdldCwgYW5jZXN0b3JzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xpcHBlZCA/IHsgLi4ubGVhZiwgaXRlbXMsIHRydW5jYXRlZDogdHJ1ZSB9IDogeyAuLi5sZWFmLCBpdGVtcyB9O1xuICAgIH1cblxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGNvbnN0IGxpbWl0ID0gTWF0aC5taW4oa2V5cy5sZW5ndGgsIFBBWUxPQURfU1VNTUFSWV9NQVhfRU5UUklFUyk7XG4gICAgLy8gQnVpbHQgdmlhIGVudHJpZXMgKyBmcm9tRW50cmllcyBzbyBob3N0aWxlIGtleXMgKCdfX3Byb3RvX18nLCAuLi4pXG4gICAgLy8gYmVjb21lIG93biBkYXRhIHByb3BlcnRpZXMg4oCUIG5ldmVyIHByb3RvdHlwZSB3cml0ZXMuXG4gICAgY29uc3QgZW50cmllczogQXJyYXk8W3N0cmluZywgUGF5bG9hZFN1bW1hcnlOb2RlXT4gPSBbXTtcbiAgICBsZXQgY2xpcHBlZCA9IGtleXMubGVuZ3RoID4gbGltaXQ7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW1pdDsgaSsrKSB7XG4gICAgICBpZiAoYnVkZ2V0Lm5vZGVzTGVmdCA8PSAwKSB7XG4gICAgICAgIGNsaXBwZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGVudHJpZXMucHVzaChba2V5c1tpXSwgc3VtbWFyaXplQ2hpbGQob2JqLCBrZXlzW2ldLCBkZXB0aCArIDEsIGJ1ZGdldCwgYW5jZXN0b3JzKV0pO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcyk7XG4gICAgcmV0dXJuIGNsaXBwZWQgPyB7IC4uLmxlYWYsIGZpZWxkcywgdHJ1bmNhdGVkOiB0cnVlIH0gOiB7IC4uLmxlYWYsIGZpZWxkcyB9O1xuICB9IGZpbmFsbHkge1xuICAgIGFuY2VzdG9ycy5kZWxldGUob2JqKTtcbiAgfVxufVxuXG4vKipcbiAqIFByb2R1Y2UgYSBib3VuZGVkLCByZWZlcmVuY2UtZnJlZSwgc3RydWN0dXJlZC1jbG9uZS1zYWZlIHN1bW1hcnkgb2YgYW5cbiAqIGFyYml0cmFyeSBwYXlsb2FkLiBOZXZlciB0aHJvd3M7IG5ldmVyIGhvbGRzIGEgcmVmZXJlbmNlIGludG8gdGhlIHNvdXJjZVxuICogdmFsdWUgKGV2ZXJ5IG5vZGUgaXMgYSBmcmVzaCBvYmplY3Qgd2hvc2UgZmllbGRzIGFyZSBwcmltaXRpdmVzKS4gQm91bmRzXG4gKiBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgbW9kdWxlIGhlYWRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1bW1hcml6ZVBheWxvYWQocGF5bG9hZDogdW5rbm93bik6IFBheWxvYWRTdW1tYXJ5IHtcbiAgY29uc3QgYnVkZ2V0OiBTdW1tYXJpemVCdWRnZXQgPSB7IG5vZGVzTGVmdDogUEFZTE9BRF9TVU1NQVJZX01BWF9OT0RFUyB9O1xuICBjb25zdCByb290ID0gc3VtbWFyaXplTm9kZShwYXlsb2FkLCAwLCBidWRnZXQsIG5ldyBTZXQ8b2JqZWN0PigpKTtcbiAgcmV0dXJuIHsgX19wYXlsb2FkU3VtbWFyeTogdHJ1ZSwgLi4ucm9vdCB9O1xufVxuXG4vKiogTWF0ZXJpYWxpemUgdGhlIHBheWxvYWQgcGVyIHBvbGljeSDigJQgc2VlIHRoZSBtb2R1bGUgaGVhZGVyIGNvbnRyYWN0LiAqL1xuZnVuY3Rpb24gY2FwdHVyZVBheWxvYWQocmVxdWVzdDogQ2FwdHVyZVJlcXVlc3QsIHBvbGljeTogQ2FwdHVyZVBvbGljeSwgaG9va3M/OiBDYXB0dXJlSG9va3MpOiB1bmtub3duIHtcbiAgaWYgKHBvbGljeSA9PT0gJ3JlZicpIHtcbiAgICBob29rcz8ud2Fybj8uKFxuICAgICAgYFtmb290cHJpbnRqcyBjYXB0dXJlXSAncmVmJyBjYXB0dXJlIGZvciAke3JlcXVlc3QuY2hhbm5lbH0uJHtyZXF1ZXN0Lm1ldGhvZH0gcGFzc2VzIGEgTElWRSByZWZlcmVuY2UgYCArXG4gICAgICAgICd0aHJvdWdoIGRlZmVycmVkIGRlbGl2ZXJ5IOKAlCB0aGUgY2FsbGVyIGFzc2VydHMgdGhlIHBheWxvYWQgaXMgaW1tdXRhYmxlIHVudGlsIGRlbGl2ZXJlZC4nLFxuICAgICk7XG4gICAgcmV0dXJuIHJlcXVlc3QucGF5bG9hZDtcbiAgfVxuICBpZiAocG9saWN5ID09PSAnY2xvbmUnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUocmVxdWVzdC5wYXlsb2FkKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGhvb2tzPy53YXJuPy4oXG4gICAgICAgIGBbZm9vdHByaW50anMgY2FwdHVyZV0gJ2Nsb25lJyBjYXB0dXJlIGZvciAke3JlcXVlc3QuY2hhbm5lbH0uJHtyZXF1ZXN0Lm1ldGhvZH0gZmFpbGVkIGAgK1xuICAgICAgICAgIFwiKHN0cnVjdHVyZWRDbG9uZSB0aHJldyDigJQgdW5jbG9uYWJsZSBwYXlsb2FkKTsgZGVncmFkZWQgdG8gJ3N1bW1hcnknLlwiLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBzdW1tYXJpemVQYXlsb2FkKHJlcXVlc3QucGF5bG9hZCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdW1tYXJpemVQYXlsb2FkKHJlcXVlc3QucGF5bG9hZCk7XG59XG5cbi8qKlxuICogQ2FwdHVyZSBvbmUgb2JzZXJ2ZXIgZXZlbnQgaW50byBhbiBpbW11dGFibGUge0BsaW5rIENhcHR1cmVFbnZlbG9wZX0uXG4gKlxuICogR3VhcmFudGVlczpcbiAqICAgLSBOZXZlciB0aHJvd3MgaW50byB0aGUgcHJvZHVjZXIgKGAnY2xvbmUnYCBkZWdyYWRhdGlvbiwgc3VtbWFyaXplclxuICogICAgIG5ldmVyLXRocm93cyBjb250cmFjdCkuXG4gKiAgIC0gVGhlIHJldHVybmVkIGVudmVsb3BlIGlzIHNoYWxsb3ctZnJvemVuIOKAlCBgc2VxYC9gY2hhbm5lbGAvLi4uIGNhbm5vdFxuICogICAgIGJlIHJlYXNzaWduZWQuIFVuZGVyIGAnc3VtbWFyeSdgL2AnY2xvbmUnYCB0aGUgcGF5bG9hZCBob2xkcyBubyBsaXZlXG4gKiAgICAgcmVmZXJlbmNlIGludG8gdGhlIHNvdXJjZTsgdW5kZXIgYCdyZWYnYCBpdCBpbnRlbnRpb25hbGx5IGRvZXMuXG4gKiAgIC0gRGVmYXVsdCBwb2xpY3kgaXMgYCdzdW1tYXJ5J2AgKGNoZWFwZXN0IHNhZmUgdGllcikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXB0dXJlKFxuICByZXF1ZXN0OiBDYXB0dXJlUmVxdWVzdCxcbiAgcG9saWN5OiBDYXB0dXJlUG9saWN5ID0gJ3N1bW1hcnknLFxuICBob29rcz86IENhcHR1cmVIb29rcyxcbik6IENhcHR1cmVFbnZlbG9wZSB7XG4gIGNvbnN0IGNhcHR1cmVkQXQgPSBob29rcz8ubm93ICE9PSB1bmRlZmluZWQgPyBob29rcy5ub3coKSA6IERhdGUubm93KCk7XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICBzZXE6IHJlcXVlc3Quc2VxLFxuICAgIGNoYW5uZWw6IHJlcXVlc3QuY2hhbm5lbCxcbiAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgIHJ1bnRpbWVTdGFnZUlkOiByZXF1ZXN0LnJ1bnRpbWVTdGFnZUlkLFxuICAgIHJ1bklkOiByZXF1ZXN0LnJ1bklkLFxuICAgIHBheWxvYWQ6IGNhcHR1cmVQYXlsb2FkKHJlcXVlc3QsIHBvbGljeSwgaG9va3MpLFxuICAgIGNhcHR1cmVkQXQsXG4gIH0pO1xufVxuIl19
|
|
@@ -30,6 +30,18 @@ class ContinuationResolver {
|
|
|
30
30
|
* Key: node.id, Value: visit count (0 = first visit).
|
|
31
31
|
*/
|
|
32
32
|
iterationCounters = new Map();
|
|
33
|
+
/**
|
|
34
|
+
* Total fn-bearing dynamic-next hops this traverser has followed.
|
|
35
|
+
*
|
|
36
|
+
* Fresh fn-bearing nodes bypass the per-node-id iteration counter (they
|
|
37
|
+
* are new nodes, often without stable ids — there is no back-edge to
|
|
38
|
+
* count). Without a bound, a stage that keeps returning a function-bearing
|
|
39
|
+
* dynamic `next` runs FOREVER on the flat trampoline (no stack overflow
|
|
40
|
+
* brakes it either). This run-total counter puts such chains under the
|
|
41
|
+
* same `maxIterations` budget (default 1000, tuned via
|
|
42
|
+
* `RunOptions.maxIterations`) that bounds loop edges.
|
|
43
|
+
*/
|
|
44
|
+
dynamicNextHops = 0;
|
|
33
45
|
onIterationUpdate;
|
|
34
46
|
maxIterations;
|
|
35
47
|
constructor(deps, nodeResolver, onIterationUpdate, maxIterations) {
|
|
@@ -55,14 +67,21 @@ class ContinuationResolver {
|
|
|
55
67
|
* `onLoop` narrative), in the same order.
|
|
56
68
|
*
|
|
57
69
|
* Three dynamicNext patterns:
|
|
58
|
-
* - StageNode with fn → truly dynamic node, returned as-is (no
|
|
59
|
-
* tracking — it is a fresh node, not a back-edge
|
|
70
|
+
* - StageNode with fn → truly dynamic node, returned as-is (no per-node
|
|
71
|
+
* iteration tracking — it is a fresh node, not a back-edge — but the
|
|
72
|
+
* run-total dynamic-hop budget applies; see `dynamicNextHops`).
|
|
60
73
|
* - String ID → reference to an existing node, resolved via NodeResolver.
|
|
61
74
|
* - StageNode without fn → reference by ID, resolved via NodeResolver.
|
|
62
75
|
*/
|
|
63
76
|
resolveTarget(dynamicNext, currentNode, context, branchPath, traversalContext) {
|
|
64
|
-
// Truly dynamic node (has fn) → execute directly, no iteration
|
|
77
|
+
// Truly dynamic node (has fn) → execute directly, no per-node iteration
|
|
78
|
+
// tracking (fresh node, not a back-edge) — but the CHAIN of such hops is
|
|
79
|
+
// bounded by the run-total guard below, mirroring the loop budget.
|
|
65
80
|
if (typeof dynamicNext !== 'string' && dynamicNext.fn) {
|
|
81
|
+
if (this.dynamicNextHops >= this.maxIterations) {
|
|
82
|
+
throw new Error(`Maximum dynamic-next continuations (${this.maxIterations}) exceeded at stage '${currentNode.id ?? currentNode.name}' ` + `(dynamic target '${dynamicNext.name}'). Set maxIterations to increase the limit.`);
|
|
83
|
+
}
|
|
84
|
+
this.dynamicNextHops++;
|
|
66
85
|
context.addLog('dynamicNextDirect', true);
|
|
67
86
|
context.addLog('dynamicNextName', dynamicNext.name);
|
|
68
87
|
context.addFlowDebugMessage('next', `Moving to ${dynamicNext.name} stage (dynamic)`, {
|
|
@@ -124,4 +143,4 @@ class ContinuationResolver {
|
|
|
124
143
|
}
|
|
125
144
|
}
|
|
126
145
|
exports.ContinuationResolver = ContinuationResolver;
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGludWF0aW9uUmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9Db250aW51YXRpb25SZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7OztBQVNVLFFBQUEsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0FBYTNDLE1BQWEsb0JBQW9CO0lBV1o7SUFDQTtJQVhuQjs7O09BR0c7SUFDSyxpQkFBaUIsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUUxQyxpQkFBaUIsQ0FBMkM7SUFDNUQsYUFBYSxDQUFTO0lBRXZDLFlBQ21CLElBQStCLEVBQy9CLFlBQXdDLEVBQ3pELGlCQUEyRCxFQUMzRCxhQUFzQjtRQUhMLFNBQUksR0FBSixJQUFJLENBQTJCO1FBQy9CLGlCQUFZLEdBQVosWUFBWSxDQUE0QjtRQUl6RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7UUFDM0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLElBQUksOEJBQXNCLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FDWCxXQUE2QyxFQUM3QyxJQUE2QixFQUM3QixPQUFxQixFQUNyQixTQUFtQyxFQUNuQyxVQUE4QixFQUM5QixXQUF3QyxFQUN4QyxnQkFBbUM7UUFFbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM1RixPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILGFBQWEsQ0FDWCxXQUE2QyxFQUM3QyxXQUFvQyxFQUNwQyxPQUFxQixFQUNyQixVQUE4QixFQUM5QixnQkFBbUM7UUFFbkMseUVBQXlFO1FBQ3pFLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN0RCxPQUFPLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXBELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsYUFBYSxXQUFXLENBQUMsSUFBSSxrQkFBa0IsRUFBRTtnQkFDbkYsV0FBVyxFQUFFLFdBQVcsQ0FBQyxJQUFJO2FBQzlCLENBQUMsQ0FBQztZQUVILE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFvQixFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BHLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFELENBQUM7UUFFRCxzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLHNFQUFzRTtRQUN0RSxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN2RCxNQUFNLFlBQVksR0FBRyx5REFBeUQsQ0FBQztZQUMvRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLFVBQVUsWUFBWSxXQUFXLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUNsSCxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxPQUFPLFdBQVcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUcsQ0FBQztRQUVuRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsTUFBTSxZQUFZLEdBQUcsc0NBQXNDLFVBQVUsRUFBRSxDQUFDO1lBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsVUFBVSxZQUFZLFdBQVcsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQ2xILE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1RCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUVsRCxPQUFPLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLG1CQUFtQixVQUFVLENBQUMsSUFBSSxlQUFlLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNyRyxXQUFXLEVBQUUsVUFBVSxDQUFDLElBQUk7WUFDNUIsU0FBUyxFQUFFLFNBQVMsR0FBRyxDQUFDO1NBQ3pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFOUcsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQW9CLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsd0JBQXdCLENBQUMsTUFBYztRQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FDYiw0QkFBNEIsSUFBSSxDQUFDLGFBQWEsd0JBQXdCLE1BQU0sS0FBSztnQkFDL0UsMENBQTBDLENBQzdDLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWhELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxvQkFBb0IsQ0FBQyxRQUFnQixFQUFFLFNBQWlCO1FBQ3RELE9BQU8sU0FBUyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0NBQ0Y7QUFySUQsb0RBcUlDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250aW51YXRpb25SZXNvbHZlciDigJQgQmFjay1lZGdlIHJlc29sdXRpb24gKyBpdGVyYXRpb24gY291bnRpbmcuXG4gKlxuICogUmVzb2x2ZXMgZHluYW1pYyBjb250aW51YXRpb25zIChsb29wLWJhY2tzLCBkeW5hbWljIG5leHQpIGFuZCB0cmFja3NcbiAqIHBlci1ub2RlIGl0ZXJhdGlvbiBjb3VudHMgZm9yIGNvbnRleHQgdHJlZSBuYW1pbmcuXG4gKlxuICogU3VwcG9ydHMgdGhyZWUgZHluYW1pY05leHQgcGF0dGVybnM6XG4gKiAtIFN0cmluZyBJRCDihpIgcmVmZXJlbmNlIHRvIGV4aXN0aW5nIG5vZGUgKHJlc29sdmUgdmlhIE5vZGVSZXNvbHZlcilcbiAqIC0gU3RhZ2VOb2RlIHdpdGggZm4g4oaSIHRydWx5IGR5bmFtaWMgbm9kZSAoZXhlY3V0ZSBkaXJlY3RseSlcbiAqIC0gU3RhZ2VOb2RlIHdpdGhvdXQgZm4g4oaSIHJlZmVyZW5jZSBieSBJRCAocmVzb2x2ZSB2aWEgTm9kZVJlc29sdmVyKVxuICpcbiAqIFR3byBlbnRyeSBwb2ludHM6XG4gKiAtIGByZXNvbHZlVGFyZ2V0YCDigJQgcmVzb2x2ZXMgdGhlIGNvbnRpbnVhdGlvbiB0byBgeyBub2RlLCBjb250ZXh0IH1gIGFuZFxuICogICBmaXJlcyBldmVyeSBzaWRlIGVmZmVjdCAoaXRlcmF0aW9uIGNvdW50aW5nLCBkZWJ1ZyBsb2dzLCBgb25Mb29wYFxuICogICBuYXJyYXRpdmUpIFdJVEhPVVQgZXhlY3V0aW5nLiBUaGUgdHJhdmVyc2VyJ3MgdHJhbXBvbGluZSBkcml2ZXIgdXNlc1xuICogICB0aGlzIHRvIGZvbGxvdyBsb29wIGVkZ2VzIGl0ZXJhdGl2ZWx5IOKAlCBmbGF0IHN0YWNrLCBzbyB0aGUgaXRlcmF0aW9uXG4gKiAgIGxpbWl0IChub3QgY2FsbC1zdGFjayBkZXB0aCkgaXMgd2hhdCBib3VuZHMgYSBsb29wLlxuICogLSBgcmVzb2x2ZWAg4oCUIHJlc29sdmVUYXJnZXQgKyBpbW1lZGlhdGUgZXhlY3V0aW9uIHZpYSB0aGUgcHJvdmlkZWRcbiAqICAgYGV4ZWN1dGVOb2RlYCBjYWxsYmFjay4gS2VwdCBmb3IgZGlyZWN0L2FkdmFuY2VkIGNhbGxlcnMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VOb2RlIH0gZnJvbSAnLi4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgVHJhdmVyc2FsQ29udGV4dCB9IGZyb20gJy4uL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEhhbmRsZXJEZXBzIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBOb2RlUmVzb2x2ZXIgfSBmcm9tICcuL05vZGVSZXNvbHZlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGVOb2RlRm4gfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYX0lURVJBVElPTlMgPSAxMDAwO1xuXG4vKipcbiAqIEEgcmVzb2x2ZWQgY29udGludWF0aW9uIHRhcmdldCDigJQgdGhlIG5vZGUgdG8gZXhlY3V0ZSBuZXh0IHBsdXMgdGhlXG4gKiBTdGFnZUNvbnRleHQgdG8gZXhlY3V0ZSBpdCBpbi4gQWxsIHNpZGUgZWZmZWN0cyAoaXRlcmF0aW9uIGNvdW50aW5nLFxuICogZGVidWcgbG9ncywgYG9uTG9vcGAgbmFycmF0aXZlKSBoYXZlIGFscmVhZHkgZmlyZWQgYnkgdGhlIHRpbWUgdGhpc1xuICogaXMgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRDb250aW51YXRpb248VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICBjb250ZXh0OiBTdGFnZUNvbnRleHQ7XG59XG5cbmV4cG9ydCBjbGFzcyBDb250aW51YXRpb25SZXNvbHZlcjxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqXG4gICAqIEl0ZXJhdGlvbiBjb3VudGVyIHBlciBub2RlIElELlxuICAgKiBLZXk6IG5vZGUuaWQsIFZhbHVlOiB2aXNpdCBjb3VudCAoMCA9IGZpcnN0IHZpc2l0KS5cbiAgICovXG4gIHByaXZhdGUgaXRlcmF0aW9uQ291bnRlcnM6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvbkl0ZXJhdGlvblVwZGF0ZT86IChub2RlSWQ6IHN0cmluZywgY291bnQ6IG51bWJlcikgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXhJdGVyYXRpb25zOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXBzOiBIYW5kbGVyRGVwczxUT3V0LCBUU2NvcGU+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbm9kZVJlc29sdmVyOiBOb2RlUmVzb2x2ZXI8VE91dCwgVFNjb3BlPixcbiAgICBvbkl0ZXJhdGlvblVwZGF0ZT86IChub2RlSWQ6IHN0cmluZywgY291bnQ6IG51bWJlcikgPT4gdm9pZCxcbiAgICBtYXhJdGVyYXRpb25zPzogbnVtYmVyLFxuICApIHtcbiAgICB0aGlzLm9uSXRlcmF0aW9uVXBkYXRlID0gb25JdGVyYXRpb25VcGRhdGU7XG4gICAgdGhpcy5tYXhJdGVyYXRpb25zID0gbWF4SXRlcmF0aW9ucyA/PyBERUZBVUxUX01BWF9JVEVSQVRJT05TO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYSBkeW5hbWljIGNvbnRpbnVhdGlvbiBhbmQgZXhlY3V0ZSBpdCBpbW1lZGlhdGVseS5cbiAgICogRXF1aXZhbGVudCB0byBgZXhlY3V0ZU5vZGUoLi4ucmVzb2x2ZVRhcmdldCguLi4pKWAg4oCUIHRoZSB0cmF2ZXJzZXInc1xuICAgKiBkcml2ZXIgbG9vcCBjYWxscyBgcmVzb2x2ZVRhcmdldGAgZGlyZWN0bHkgaW5zdGVhZCBzbyB0aGUgY29udGludWF0aW9uXG4gICAqIGJlY29tZXMgYSBmbGF0IHRyYW1wb2xpbmUgaG9wIHJhdGhlciB0aGFuIGEgcmV0YWluZWQgcmVjdXJzaXZlIGZyYW1lLlxuICAgKi9cbiAgYXN5bmMgcmVzb2x2ZShcbiAgICBkeW5hbWljTmV4dDogc3RyaW5nIHwgU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgY29udGV4dDogU3RhZ2VDb250ZXh0LFxuICAgIGJyZWFrRmxhZzogeyBzaG91bGRCcmVhazogYm9vbGVhbiB9LFxuICAgIGJyYW5jaFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBleGVjdXRlTm9kZTogRXhlY3V0ZU5vZGVGbjxUT3V0LCBUU2NvcGU+LFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMucmVzb2x2ZVRhcmdldChkeW5hbWljTmV4dCwgbm9kZSwgY29udGV4dCwgYnJhbmNoUGF0aCwgdHJhdmVyc2FsQ29udGV4dCk7XG4gICAgcmV0dXJuIGV4ZWN1dGVOb2RlKHRhcmdldC5ub2RlLCB0YXJnZXQuY29udGV4dCwgYnJlYWtGbGFnLCBicmFuY2hQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGEgZHluYW1pYyBjb250aW51YXRpb24gdG8gaXRzIHRhcmdldCBub2RlICsgbmV4dCBTdGFnZUNvbnRleHRcbiAgICogV0lUSE9VVCBleGVjdXRpbmcgaXQuIEZpcmVzIHRoZSBzYW1lIHNpZGUgZWZmZWN0cyBgcmVzb2x2ZWAgYWx3YXlzIGRpZFxuICAgKiAoaXRlcmF0aW9uIGNvdW50aW5nICsgbGltaXQsIGBkeW5hbWljTmV4dCpgIGxvZ3MsIGxvb3AgZGVidWcgbWVzc2FnZSxcbiAgICogYG9uTG9vcGAgbmFycmF0aXZlKSwgaW4gdGhlIHNhbWUgb3JkZXIuXG4gICAqXG4gICAqIFRocmVlIGR5bmFtaWNOZXh0IHBhdHRlcm5zOlxuICAgKiAtIFN0YWdlTm9kZSB3aXRoIGZuIOKGkiB0cnVseSBkeW5hbWljIG5vZGUsIHJldHVybmVkIGFzLWlzIChubyBpdGVyYXRpb25cbiAgICogICB0cmFja2luZyDigJQgaXQgaXMgYSBmcmVzaCBub2RlLCBub3QgYSBiYWNrLWVkZ2UpLlxuICAgKiAtIFN0cmluZyBJRCDihpIgcmVmZXJlbmNlIHRvIGFuIGV4aXN0aW5nIG5vZGUsIHJlc29sdmVkIHZpYSBOb2RlUmVzb2x2ZXIuXG4gICAqIC0gU3RhZ2VOb2RlIHdpdGhvdXQgZm4g4oaSIHJlZmVyZW5jZSBieSBJRCwgcmVzb2x2ZWQgdmlhIE5vZGVSZXNvbHZlci5cbiAgICovXG4gIHJlc29sdmVUYXJnZXQoXG4gICAgZHluYW1pY05leHQ6IHN0cmluZyB8IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIGN1cnJlbnROb2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gICAgYnJhbmNoUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiBSZXNvbHZlZENvbnRpbnVhdGlvbjxUT3V0LCBUU2NvcGU+IHtcbiAgICAvLyBUcnVseSBkeW5hbWljIG5vZGUgKGhhcyBmbikg4oaSIGV4ZWN1dGUgZGlyZWN0bHksIG5vIGl0ZXJhdGlvbiB0cmFja2luZy5cbiAgICBpZiAodHlwZW9mIGR5bmFtaWNOZXh0ICE9PSAnc3RyaW5nJyAmJiBkeW5hbWljTmV4dC5mbikge1xuICAgICAgY29udGV4dC5hZGRMb2coJ2R5bmFtaWNOZXh0RGlyZWN0JywgdHJ1ZSk7XG4gICAgICBjb250ZXh0LmFkZExvZygnZHluYW1pY05leHROYW1lJywgZHluYW1pY05leHQubmFtZSk7XG5cbiAgICAgIGNvbnRleHQuYWRkRmxvd0RlYnVnTWVzc2FnZSgnbmV4dCcsIGBNb3ZpbmcgdG8gJHtkeW5hbWljTmV4dC5uYW1lfSBzdGFnZSAoZHluYW1pYylgLCB7XG4gICAgICAgIHRhcmdldFN0YWdlOiBkeW5hbWljTmV4dC5uYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG5leHRTdGFnZUNvbnRleHQgPSBjb250ZXh0LmNyZWF0ZU5leHQoYnJhbmNoUGF0aCBhcyBzdHJpbmcsIGR5bmFtaWNOZXh0Lm5hbWUsIGR5bmFtaWNOZXh0LmlkKTtcbiAgICAgIHJldHVybiB7IG5vZGU6IGR5bmFtaWNOZXh0LCBjb250ZXh0OiBuZXh0U3RhZ2VDb250ZXh0IH07XG4gICAgfVxuXG4gICAgLy8gUmVmZXJlbmNlIOKAlCBieSBzdHJpbmcgSUQgb3IgYnkgbm9kZS13aXRob3V0LWZuIElELiBBIG5vZGUgcmVmZXJlbmNlXG4gICAgLy8gd2l0aG91dCBhbiBpZCBpcyBhIHVzYWdlIGVycm9yOyBhIHN0cmluZyByZWZlcmVuY2UgaXMgcGFzc2VkIHRocm91Z2hcbiAgICAvLyB2ZXJiYXRpbSAoYW4gdW5rbm93biBpZCBzdXJmYWNlcyBhcyBcInRhcmdldCBub2RlIG5vdCBmb3VuZFwiIGJlbG93KS5cbiAgICBpZiAodHlwZW9mIGR5bmFtaWNOZXh0ICE9PSAnc3RyaW5nJyAmJiAhZHluYW1pY05leHQuaWQpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9ICdkeW5hbWljTmV4dCBub2RlIG11c3QgaGF2ZSBhbiBpZCB3aGVuIHVzZWQgYXMgcmVmZXJlbmNlJztcbiAgICAgIHRoaXMuZGVwcy5sb2dnZXIuZXJyb3IoYEVycm9yIGluIHBpcGVsaW5lICgke2JyYW5jaFBhdGh9KSBzdGFnZSBbJHtjdXJyZW50Tm9kZS5uYW1lfV06YCwgeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuICAgIGNvbnN0IG5leHROb2RlSWQgPSB0eXBlb2YgZHluYW1pY05leHQgPT09ICdzdHJpbmcnID8gZHluYW1pY05leHQgOiBkeW5hbWljTmV4dC5pZCE7XG5cbiAgICBjb25zdCB0YXJnZXROb2RlID0gdGhpcy5ub2RlUmVzb2x2ZXIuZmluZE5vZGVCeUlkKG5leHROb2RlSWQpO1xuICAgIGlmICghdGFyZ2V0Tm9kZSkge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYGR5bmFtaWNOZXh0IHRhcmdldCBub2RlIG5vdCBmb3VuZDogJHtuZXh0Tm9kZUlkfWA7XG4gICAgICB0aGlzLmRlcHMubG9nZ2VyLmVycm9yKGBFcnJvciBpbiBwaXBlbGluZSAoJHticmFuY2hQYXRofSkgc3RhZ2UgWyR7Y3VycmVudE5vZGUubmFtZX1dOmAsIHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZXJhdGlvbiA9IHRoaXMuZ2V0QW5kSW5jcmVtZW50SXRlcmF0aW9uKG5leHROb2RlSWQpO1xuICAgIGNvbnN0IGl0ZXJhdGVkU3RhZ2VOYW1lID0gdGhpcy5nZXRJdGVyYXRlZFN0YWdlTmFtZSh0YXJnZXROb2RlLm5hbWUsIGl0ZXJhdGlvbik7XG4gICAgY29udGV4dC5hZGRMb2coJ2R5bmFtaWNOZXh0VGFyZ2V0JywgbmV4dE5vZGVJZCk7XG4gICAgY29udGV4dC5hZGRMb2coJ2R5bmFtaWNOZXh0SXRlcmF0aW9uJywgaXRlcmF0aW9uKTtcblxuICAgIGNvbnRleHQuYWRkRmxvd0RlYnVnTWVzc2FnZSgnbG9vcCcsIGBMb29waW5nIGJhY2sgdG8gJHt0YXJnZXROb2RlLm5hbWV9IChpdGVyYXRpb24gJHtpdGVyYXRpb24gKyAxfSlgLCB7XG4gICAgICB0YXJnZXRTdGFnZTogdGFyZ2V0Tm9kZS5uYW1lLFxuICAgICAgaXRlcmF0aW9uOiBpdGVyYXRpb24gKyAxLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kZXBzLm5hcnJhdGl2ZUdlbmVyYXRvci5vbkxvb3AodGFyZ2V0Tm9kZS5uYW1lLCBpdGVyYXRpb24gKyAxLCB0YXJnZXROb2RlLmRlc2NyaXB0aW9uLCB0cmF2ZXJzYWxDb250ZXh0KTtcblxuICAgIGNvbnN0IG5leHRTdGFnZUNvbnRleHQgPSBjb250ZXh0LmNyZWF0ZU5leHQoYnJhbmNoUGF0aCBhcyBzdHJpbmcsIGl0ZXJhdGVkU3RhZ2VOYW1lLCB0YXJnZXROb2RlLmlkKTtcbiAgICByZXR1cm4geyBub2RlOiB0YXJnZXROb2RlLCBjb250ZXh0OiBuZXh0U3RhZ2VDb250ZXh0IH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBuZXh0IGl0ZXJhdGlvbiBudW1iZXIgZm9yIGEgbm9kZSBhbmQgaW5jcmVtZW50LlxuICAgKiBSZXR1cm5zIDAgZm9yIGZpcnN0IHZpc2l0LCAxIGZvciBzZWNvbmQsIGV0Yy5cbiAgICogVGhyb3dzIGlmIG1heEl0ZXJhdGlvbnMgZXhjZWVkZWQgKGluZmluaXRlIGxvb3AgZ3VhcmQpLlxuICAgKi9cbiAgZ2V0QW5kSW5jcmVtZW50SXRlcmF0aW9uKG5vZGVJZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5pdGVyYXRpb25Db3VudGVycy5nZXQobm9kZUlkKSA/PyAwO1xuICAgIGlmIChjdXJyZW50ID49IHRoaXMubWF4SXRlcmF0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTWF4aW11bSBsb29wIGl0ZXJhdGlvbnMgKCR7dGhpcy5tYXhJdGVyYXRpb25zfSkgZXhjZWVkZWQgZm9yIG5vZGUgJyR7bm9kZUlkfScuIGAgK1xuICAgICAgICAgICdTZXQgbWF4SXRlcmF0aW9ucyB0byBpbmNyZWFzZSB0aGUgbGltaXQuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuaXRlcmF0aW9uQ291bnRlcnMuc2V0KG5vZGVJZCwgY3VycmVudCArIDEpO1xuXG4gICAgaWYgKHRoaXMub25JdGVyYXRpb25VcGRhdGUpIHtcbiAgICAgIHRoaXMub25JdGVyYXRpb25VcGRhdGUobm9kZUlkLCBjdXJyZW50ICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYW4gaXRlcmF0ZWQgc3RhZ2UgbmFtZSBmb3IgY29udGV4dCB0cmVlLlxuICAgKiBGaXJzdCB2aXNpdDogXCJhc2tMTE1cIiwgc2Vjb25kOiBcImFza0xMTS4xXCIsIHRoaXJkOiBcImFza0xMTS4yXCIuXG4gICAqL1xuICBnZXRJdGVyYXRlZFN0YWdlTmFtZShiYXNlTmFtZTogc3RyaW5nLCBpdGVyYXRpb246IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZXJhdGlvbiA9PT0gMCA/IGJhc2VOYW1lIDogYCR7YmFzZU5hbWV9LiR7aXRlcmF0aW9ufWA7XG4gIH1cbn1cbiJdfQ==
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGludWF0aW9uUmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9Db250aW51YXRpb25SZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7OztBQVNVLFFBQUEsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0FBYTNDLE1BQWEsb0JBQW9CO0lBd0JaO0lBQ0E7SUF4Qm5COzs7T0FHRztJQUNLLGlCQUFpQixHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTNEOzs7Ozs7Ozs7O09BVUc7SUFDSyxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBRVgsaUJBQWlCLENBQTJDO0lBQzVELGFBQWEsQ0FBUztJQUV2QyxZQUNtQixJQUErQixFQUMvQixZQUF3QyxFQUN6RCxpQkFBMkQsRUFDM0QsYUFBc0I7UUFITCxTQUFJLEdBQUosSUFBSSxDQUEyQjtRQUMvQixpQkFBWSxHQUFaLFlBQVksQ0FBNEI7UUFJekQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQzNDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxJQUFJLDhCQUFzQixDQUFDO0lBQy9ELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQ1gsV0FBNkMsRUFDN0MsSUFBNkIsRUFDN0IsT0FBcUIsRUFDckIsU0FBbUMsRUFDbkMsVUFBOEIsRUFDOUIsV0FBd0MsRUFDeEMsZ0JBQW1DO1FBRW5DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDNUYsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN6RSxD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QUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7T0FHRztJQUNILG9CQUFvQixDQUFDLFFBQWdCLEVBQUUsU0FBaUI7UUFDdEQsT0FBTyxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDO0lBQ2pFLENBQUM7Q0FDRjtBQTlKRCxvREE4SkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRpbnVhdGlvblJlc29sdmVyIOKAlCBCYWNrLWVkZ2UgcmVzb2x1dGlvbiArIGl0ZXJhdGlvbiBjb3VudGluZy5cbiAqXG4gKiBSZXNvbHZlcyBkeW5hbWljIGNvbnRpbnVhdGlvbnMgKGxvb3AtYmFja3MsIGR5bmFtaWMgbmV4dCkgYW5kIHRyYWNrc1xuICogcGVyLW5vZGUgaXRlcmF0aW9uIGNvdW50cyBmb3IgY29udGV4dCB0cmVlIG5hbWluZy5cbiAqXG4gKiBTdXBwb3J0cyB0aHJlZSBkeW5hbWljTmV4dCBwYXR0ZXJuczpcbiAqIC0gU3RyaW5nIElEIOKGkiByZWZlcmVuY2UgdG8gZXhpc3Rpbmcgbm9kZSAocmVzb2x2ZSB2aWEgTm9kZVJlc29sdmVyKVxuICogLSBTdGFnZU5vZGUgd2l0aCBmbiDihpIgdHJ1bHkgZHluYW1pYyBub2RlIChleGVjdXRlIGRpcmVjdGx5KVxuICogLSBTdGFnZU5vZGUgd2l0aG91dCBmbiDihpIgcmVmZXJlbmNlIGJ5IElEIChyZXNvbHZlIHZpYSBOb2RlUmVzb2x2ZXIpXG4gKlxuICogVHdvIGVudHJ5IHBvaW50czpcbiAqIC0gYHJlc29sdmVUYXJnZXRgIOKAlCByZXNvbHZlcyB0aGUgY29udGludWF0aW9uIHRvIGB7IG5vZGUsIGNvbnRleHQgfWAgYW5kXG4gKiAgIGZpcmVzIGV2ZXJ5IHNpZGUgZWZmZWN0IChpdGVyYXRpb24gY291bnRpbmcsIGRlYnVnIGxvZ3MsIGBvbkxvb3BgXG4gKiAgIG5hcnJhdGl2ZSkgV0lUSE9VVCBleGVjdXRpbmcuIFRoZSB0cmF2ZXJzZXIncyB0cmFtcG9saW5lIGRyaXZlciB1c2VzXG4gKiAgIHRoaXMgdG8gZm9sbG93IGxvb3AgZWRnZXMgaXRlcmF0aXZlbHkg4oCUIGZsYXQgc3RhY2ssIHNvIHRoZSBpdGVyYXRpb25cbiAqICAgbGltaXQgKG5vdCBjYWxsLXN0YWNrIGRlcHRoKSBpcyB3aGF0IGJvdW5kcyBhIGxvb3AuXG4gKiAtIGByZXNvbHZlYCDigJQgcmVzb2x2ZVRhcmdldCArIGltbWVkaWF0ZSBleGVjdXRpb24gdmlhIHRoZSBwcm92aWRlZFxuICogICBgZXhlY3V0ZU5vZGVgIGNhbGxiYWNrLiBLZXB0IGZvciBkaXJlY3QvYWR2YW5jZWQgY2FsbGVycy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4uLy4uL21lbW9yeS9TdGFnZUNvbnRleHQuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBUcmF2ZXJzYWxDb250ZXh0IH0gZnJvbSAnLi4vbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgSGFuZGxlckRlcHMgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE5vZGVSZXNvbHZlciB9IGZyb20gJy4vTm9kZVJlc29sdmVyLmpzJztcbmltcG9ydCB0eXBlIHsgRXhlY3V0ZU5vZGVGbiB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVhfSVRFUkFUSU9OUyA9IDEwMDA7XG5cbi8qKlxuICogQSByZXNvbHZlZCBjb250aW51YXRpb24gdGFyZ2V0IOKAlCB0aGUgbm9kZSB0byBleGVjdXRlIG5leHQgcGx1cyB0aGVcbiAqIFN0YWdlQ29udGV4dCB0byBleGVjdXRlIGl0IGluLiBBbGwgc2lkZSBlZmZlY3RzIChpdGVyYXRpb24gY291bnRpbmcsXG4gKiBkZWJ1ZyBsb2dzLCBgb25Mb29wYCBuYXJyYXRpdmUpIGhhdmUgYWxyZWFkeSBmaXJlZCBieSB0aGUgdGltZSB0aGlzXG4gKiBpcyByZXR1cm5lZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZENvbnRpbnVhdGlvbjxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIGNvbnRleHQ6IFN0YWdlQ29udGV4dDtcbn1cblxuZXhwb3J0IGNsYXNzIENvbnRpbnVhdGlvblJlc29sdmVyPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICAvKipcbiAgICogSXRlcmF0aW9uIGNvdW50ZXIgcGVyIG5vZGUgSUQuXG4gICAqIEtleTogbm9kZS5pZCwgVmFsdWU6IHZpc2l0IGNvdW50ICgwID0gZmlyc3QgdmlzaXQpLlxuICAgKi9cbiAgcHJpdmF0ZSBpdGVyYXRpb25Db3VudGVyczogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogVG90YWwgZm4tYmVhcmluZyBkeW5hbWljLW5leHQgaG9wcyB0aGlzIHRyYXZlcnNlciBoYXMgZm9sbG93ZWQuXG4gICAqXG4gICAqIEZyZXNoIGZuLWJlYXJpbmcgbm9kZXMgYnlwYXNzIHRoZSBwZXItbm9kZS1pZCBpdGVyYXRpb24gY291bnRlciAodGhleVxuICAgKiBhcmUgbmV3IG5vZGVzLCBvZnRlbiB3aXRob3V0IHN0YWJsZSBpZHMg4oCUIHRoZXJlIGlzIG5vIGJhY2stZWRnZSB0b1xuICAgKiBjb3VudCkuIFdpdGhvdXQgYSBib3VuZCwgYSBzdGFnZSB0aGF0IGtlZXBzIHJldHVybmluZyBhIGZ1bmN0aW9uLWJlYXJpbmdcbiAgICogZHluYW1pYyBgbmV4dGAgcnVucyBGT1JFVkVSIG9uIHRoZSBmbGF0IHRyYW1wb2xpbmUgKG5vIHN0YWNrIG92ZXJmbG93XG4gICAqIGJyYWtlcyBpdCBlaXRoZXIpLiBUaGlzIHJ1bi10b3RhbCBjb3VudGVyIHB1dHMgc3VjaCBjaGFpbnMgdW5kZXIgdGhlXG4gICAqIHNhbWUgYG1heEl0ZXJhdGlvbnNgIGJ1ZGdldCAoZGVmYXVsdCAxMDAwLCB0dW5lZCB2aWFcbiAgICogYFJ1bk9wdGlvbnMubWF4SXRlcmF0aW9uc2ApIHRoYXQgYm91bmRzIGxvb3AgZWRnZXMuXG4gICAqL1xuICBwcml2YXRlIGR5bmFtaWNOZXh0SG9wcyA9IDA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvbkl0ZXJhdGlvblVwZGF0ZT86IChub2RlSWQ6IHN0cmluZywgY291bnQ6IG51bWJlcikgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXhJdGVyYXRpb25zOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXBzOiBIYW5kbGVyRGVwczxUT3V0LCBUU2NvcGU+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbm9kZVJlc29sdmVyOiBOb2RlUmVzb2x2ZXI8VE91dCwgVFNjb3BlPixcbiAgICBvbkl0ZXJhdGlvblVwZGF0ZT86IChub2RlSWQ6IHN0cmluZywgY291bnQ6IG51bWJlcikgPT4gdm9pZCxcbiAgICBtYXhJdGVyYXRpb25zPzogbnVtYmVyLFxuICApIHtcbiAgICB0aGlzLm9uSXRlcmF0aW9uVXBkYXRlID0gb25JdGVyYXRpb25VcGRhdGU7XG4gICAgdGhpcy5tYXhJdGVyYXRpb25zID0gbWF4SXRlcmF0aW9ucyA/PyBERUZBVUxUX01BWF9JVEVSQVRJT05TO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYSBkeW5hbWljIGNvbnRpbnVhdGlvbiBhbmQgZXhlY3V0ZSBpdCBpbW1lZGlhdGVseS5cbiAgICogRXF1aXZhbGVudCB0byBgZXhlY3V0ZU5vZGUoLi4ucmVzb2x2ZVRhcmdldCguLi4pKWAg4oCUIHRoZSB0cmF2ZXJzZXInc1xuICAgKiBkcml2ZXIgbG9vcCBjYWxscyBgcmVzb2x2ZVRhcmdldGAgZGlyZWN0bHkgaW5zdGVhZCBzbyB0aGUgY29udGludWF0aW9uXG4gICAqIGJlY29tZXMgYSBmbGF0IHRyYW1wb2xpbmUgaG9wIHJhdGhlciB0aGFuIGEgcmV0YWluZWQgcmVjdXJzaXZlIGZyYW1lLlxuICAgKi9cbiAgYXN5bmMgcmVzb2x2ZShcbiAgICBkeW5hbWljTmV4dDogc3RyaW5nIHwgU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgY29udGV4dDogU3RhZ2VDb250ZXh0LFxuICAgIGJyZWFrRmxhZzogeyBzaG91bGRCcmVhazogYm9vbGVhbiB9LFxuICAgIGJyYW5jaFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBleGVjdXRlTm9kZTogRXhlY3V0ZU5vZGVGbjxUT3V0LCBUU2NvcGU+LFxuICAgIHRyYXZlcnNhbENvbnRleHQ/OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMucmVzb2x2ZVRhcmdldChkeW5hbWljTmV4dCwgbm9kZSwgY29udGV4dCwgYnJhbmNoUGF0aCwgdHJhdmVyc2FsQ29udGV4dCk7XG4gICAgcmV0dXJuIGV4ZWN1dGVOb2RlKHRhcmdldC5ub2RlLCB0YXJnZXQuY29udGV4dCwgYnJlYWtGbGFnLCBicmFuY2hQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGEgZHluYW1pYyBjb250aW51YXRpb24gdG8gaXRzIHRhcmdldCBub2RlICsgbmV4dCBTdGFnZUNvbnRleHRcbiAgICogV0lUSE9VVCBleGVjdXRpbmcgaXQuIEZpcmVzIHRoZSBzYW1lIHNpZGUgZWZmZWN0cyBgcmVzb2x2ZWAgYWx3YXlzIGRpZFxuICAgKiAoaXRlcmF0aW9uIGNvdW50aW5nICsgbGltaXQsIGBkeW5hbWljTmV4dCpgIGxvZ3MsIGxvb3AgZGVidWcgbWVzc2FnZSxcbiAgICogYG9uTG9vcGAgbmFycmF0aXZlKSwgaW4gdGhlIHNhbWUgb3JkZXIuXG4gICAqXG4gICAqIFRocmVlIGR5bmFtaWNOZXh0IHBhdHRlcm5zOlxuICAgKiAtIFN0YWdlTm9kZSB3aXRoIGZuIOKGkiB0cnVseSBkeW5hbWljIG5vZGUsIHJldHVybmVkIGFzLWlzIChubyBwZXItbm9kZVxuICAgKiAgIGl0ZXJhdGlvbiB0cmFja2luZyDigJQgaXQgaXMgYSBmcmVzaCBub2RlLCBub3QgYSBiYWNrLWVkZ2Ug4oCUIGJ1dCB0aGVcbiAgICogICBydW4tdG90YWwgZHluYW1pYy1ob3AgYnVkZ2V0IGFwcGxpZXM7IHNlZSBgZHluYW1pY05leHRIb3BzYCkuXG4gICAqIC0gU3RyaW5nIElEIOKGkiByZWZlcmVuY2UgdG8gYW4gZXhpc3Rpbmcgbm9kZSwgcmVzb2x2ZWQgdmlhIE5vZGVSZXNvbHZlci5cbiAgICogLSBTdGFnZU5vZGUgd2l0aG91dCBmbiDihpIgcmVmZXJlbmNlIGJ5IElELCByZXNvbHZlZCB2aWEgTm9kZVJlc29sdmVyLlxuICAgKi9cbiAgcmVzb2x2ZVRhcmdldChcbiAgICBkeW5hbWljTmV4dDogc3RyaW5nIHwgU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgY3VycmVudE5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIGNvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgICBicmFuY2hQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgdHJhdmVyc2FsQ29udGV4dD86IFRyYXZlcnNhbENvbnRleHQsXG4gICk6IFJlc29sdmVkQ29udGludWF0aW9uPFRPdXQsIFRTY29wZT4ge1xuICAgIC8vIFRydWx5IGR5bmFtaWMgbm9kZSAoaGFzIGZuKSDihpIgZXhlY3V0ZSBkaXJlY3RseSwgbm8gcGVyLW5vZGUgaXRlcmF0aW9uXG4gICAgLy8gdHJhY2tpbmcgKGZyZXNoIG5vZGUsIG5vdCBhIGJhY2stZWRnZSkg4oCUIGJ1dCB0aGUgQ0hBSU4gb2Ygc3VjaCBob3BzIGlzXG4gICAgLy8gYm91bmRlZCBieSB0aGUgcnVuLXRvdGFsIGd1YXJkIGJlbG93LCBtaXJyb3JpbmcgdGhlIGxvb3AgYnVkZ2V0LlxuICAgIGlmICh0eXBlb2YgZHluYW1pY05leHQgIT09ICdzdHJpbmcnICYmIGR5bmFtaWNOZXh0LmZuKSB7XG4gICAgICBpZiAodGhpcy5keW5hbWljTmV4dEhvcHMgPj0gdGhpcy5tYXhJdGVyYXRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTWF4aW11bSBkeW5hbWljLW5leHQgY29udGludWF0aW9ucyAoJHt0aGlzLm1heEl0ZXJhdGlvbnN9KSBleGNlZWRlZCBhdCBzdGFnZSAnJHtcbiAgICAgICAgICAgIGN1cnJlbnROb2RlLmlkID8/IGN1cnJlbnROb2RlLm5hbWVcbiAgICAgICAgICB9JyBgICsgYChkeW5hbWljIHRhcmdldCAnJHtkeW5hbWljTmV4dC5uYW1lfScpLiBTZXQgbWF4SXRlcmF0aW9ucyB0byBpbmNyZWFzZSB0aGUgbGltaXQuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZHluYW1pY05leHRIb3BzKys7XG5cbiAgICAgIGNvbnRleHQuYWRkTG9nKCdkeW5hbWljTmV4dERpcmVjdCcsIHRydWUpO1xuICAgICAgY29udGV4dC5hZGRMb2coJ2R5bmFtaWNOZXh0TmFtZScsIGR5bmFtaWNOZXh0Lm5hbWUpO1xuXG4gICAgICBjb250ZXh0LmFkZEZsb3dEZWJ1Z01lc3NhZ2UoJ25leHQnLCBgTW92aW5nIHRvICR7ZHluYW1pY05leHQubmFtZX0gc3RhZ2UgKGR5bmFtaWMpYCwge1xuICAgICAgICB0YXJnZXRTdGFnZTogZHluYW1pY05leHQubmFtZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBuZXh0U3RhZ2VDb250ZXh0ID0gY29udGV4dC5jcmVhdGVOZXh0KGJyYW5jaFBhdGggYXMgc3RyaW5nLCBkeW5hbWljTmV4dC5uYW1lLCBkeW5hbWljTmV4dC5pZCk7XG4gICAgICByZXR1cm4geyBub2RlOiBkeW5hbWljTmV4dCwgY29udGV4dDogbmV4dFN0YWdlQ29udGV4dCB9O1xuICAgIH1cblxuICAgIC8vIFJlZmVyZW5jZSDigJQgYnkgc3RyaW5nIElEIG9yIGJ5IG5vZGUtd2l0aG91dC1mbiBJRC4gQSBub2RlIHJlZmVyZW5jZVxuICAgIC8vIHdpdGhvdXQgYW4gaWQgaXMgYSB1c2FnZSBlcnJvcjsgYSBzdHJpbmcgcmVmZXJlbmNlIGlzIHBhc3NlZCB0aHJvdWdoXG4gICAgLy8gdmVyYmF0aW0gKGFuIHVua25vd24gaWQgc3VyZmFjZXMgYXMgXCJ0YXJnZXQgbm9kZSBub3QgZm91bmRcIiBiZWxvdykuXG4gICAgaWYgKHR5cGVvZiBkeW5hbWljTmV4dCAhPT0gJ3N0cmluZycgJiYgIWR5bmFtaWNOZXh0LmlkKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSAnZHluYW1pY05leHQgbm9kZSBtdXN0IGhhdmUgYW4gaWQgd2hlbiB1c2VkIGFzIHJlZmVyZW5jZSc7XG4gICAgICB0aGlzLmRlcHMubG9nZ2VyLmVycm9yKGBFcnJvciBpbiBwaXBlbGluZSAoJHticmFuY2hQYXRofSkgc3RhZ2UgWyR7Y3VycmVudE5vZGUubmFtZX1dOmAsIHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgICBjb25zdCBuZXh0Tm9kZUlkID0gdHlwZW9mIGR5bmFtaWNOZXh0ID09PSAnc3RyaW5nJyA/IGR5bmFtaWNOZXh0IDogZHluYW1pY05leHQuaWQhO1xuXG4gICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMubm9kZVJlc29sdmVyLmZpbmROb2RlQnlJZChuZXh0Tm9kZUlkKTtcbiAgICBpZiAoIXRhcmdldE5vZGUpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBkeW5hbWljTmV4dCB0YXJnZXQgbm9kZSBub3QgZm91bmQ6ICR7bmV4dE5vZGVJZH1gO1xuICAgICAgdGhpcy5kZXBzLmxvZ2dlci5lcnJvcihgRXJyb3IgaW4gcGlwZWxpbmUgKCR7YnJhbmNoUGF0aH0pIHN0YWdlIFske2N1cnJlbnROb2RlLm5hbWV9XTpgLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVyYXRpb24gPSB0aGlzLmdldEFuZEluY3JlbWVudEl0ZXJhdGlvbihuZXh0Tm9kZUlkKTtcbiAgICBjb25zdCBpdGVyYXRlZFN0YWdlTmFtZSA9IHRoaXMuZ2V0SXRlcmF0ZWRTdGFnZU5hbWUodGFyZ2V0Tm9kZS5uYW1lLCBpdGVyYXRpb24pO1xuICAgIGNvbnRleHQuYWRkTG9nKCdkeW5hbWljTmV4dFRhcmdldCcsIG5leHROb2RlSWQpO1xuICAgIGNvbnRleHQuYWRkTG9nKCdkeW5hbWljTmV4dEl0ZXJhdGlvbicsIGl0ZXJhdGlvbik7XG5cbiAgICBjb250ZXh0LmFkZEZsb3dEZWJ1Z01lc3NhZ2UoJ2xvb3AnLCBgTG9vcGluZyBiYWNrIHRvICR7dGFyZ2V0Tm9kZS5uYW1lfSAoaXRlcmF0aW9uICR7aXRlcmF0aW9uICsgMX0pYCwge1xuICAgICAgdGFyZ2V0U3RhZ2U6IHRhcmdldE5vZGUubmFtZSxcbiAgICAgIGl0ZXJhdGlvbjogaXRlcmF0aW9uICsgMSxcbiAgICB9KTtcblxuICAgIHRoaXMuZGVwcy5uYXJyYXRpdmVHZW5lcmF0b3Iub25Mb29wKHRhcmdldE5vZGUubmFtZSwgaXRlcmF0aW9uICsgMSwgdGFyZ2V0Tm9kZS5kZXNjcmlwdGlvbiwgdHJhdmVyc2FsQ29udGV4dCk7XG5cbiAgICBjb25zdCBuZXh0U3RhZ2VDb250ZXh0ID0gY29udGV4dC5jcmVhdGVOZXh0KGJyYW5jaFBhdGggYXMgc3RyaW5nLCBpdGVyYXRlZFN0YWdlTmFtZSwgdGFyZ2V0Tm9kZS5pZCk7XG4gICAgcmV0dXJuIHsgbm9kZTogdGFyZ2V0Tm9kZSwgY29udGV4dDogbmV4dFN0YWdlQ29udGV4dCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmV4dCBpdGVyYXRpb24gbnVtYmVyIGZvciBhIG5vZGUgYW5kIGluY3JlbWVudC5cbiAgICogUmV0dXJucyAwIGZvciBmaXJzdCB2aXNpdCwgMSBmb3Igc2Vjb25kLCBldGMuXG4gICAqIFRocm93cyBpZiBtYXhJdGVyYXRpb25zIGV4Y2VlZGVkIChpbmZpbml0ZSBsb29wIGd1YXJkKS5cbiAgICovXG4gIGdldEFuZEluY3JlbWVudEl0ZXJhdGlvbihub2RlSWQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuaXRlcmF0aW9uQ291bnRlcnMuZ2V0KG5vZGVJZCkgPz8gMDtcbiAgICBpZiAoY3VycmVudCA+PSB0aGlzLm1heEl0ZXJhdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1heGltdW0gbG9vcCBpdGVyYXRpb25zICgke3RoaXMubWF4SXRlcmF0aW9uc30pIGV4Y2VlZGVkIGZvciBub2RlICcke25vZGVJZH0nLiBgICtcbiAgICAgICAgICAnU2V0IG1heEl0ZXJhdGlvbnMgdG8gaW5jcmVhc2UgdGhlIGxpbWl0LicsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLml0ZXJhdGlvbkNvdW50ZXJzLnNldChub2RlSWQsIGN1cnJlbnQgKyAxKTtcblxuICAgIGlmICh0aGlzLm9uSXRlcmF0aW9uVXBkYXRlKSB7XG4gICAgICB0aGlzLm9uSXRlcmF0aW9uVXBkYXRlKG5vZGVJZCwgY3VycmVudCArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGFuIGl0ZXJhdGVkIHN0YWdlIG5hbWUgZm9yIGNvbnRleHQgdHJlZS5cbiAgICogRmlyc3QgdmlzaXQ6IFwiYXNrTExNXCIsIHNlY29uZDogXCJhc2tMTE0uMVwiLCB0aGlyZDogXCJhc2tMTE0uMlwiLlxuICAgKi9cbiAgZ2V0SXRlcmF0ZWRTdGFnZU5hbWUoYmFzZU5hbWU6IHN0cmluZywgaXRlcmF0aW9uOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBpdGVyYXRpb24gPT09IDAgPyBiYXNlTmFtZSA6IGAke2Jhc2VOYW1lfS4ke2l0ZXJhdGlvbn1gO1xuICB9XG59XG4iXX0=
|
package/dist/lib/engine/types.js
CHANGED
|
@@ -33,4 +33,4 @@ var ArrayMergeMode;
|
|
|
33
33
|
/** Overwrite parent array with subflow output. Use for Dynamic loops. */
|
|
34
34
|
ArrayMergeMode["Replace"] = "replace";
|
|
35
35
|
})(ArrayMergeMode || (exports.ArrayMergeMode = ArrayMergeMode = {}));
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7OztBQWFILDhDQUE4RTtBQUFyRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSx1R0FBQSxXQUFXLE9BQUE7QUFlbEQsb0NBQW9DO0FBQ3BDLHdEQUF3RDtBQUMzQyxRQUFBLGFBQWEsR0FBWTtJQUNwQyxJQUFJLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3ZFLEdBQUcsRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDckUsS0FBSyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN6RSxLQUFLLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pFLElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDeEUsQ0FBQztBQW1ERiw4RUFBOEU7QUFDOUUsVUFBVTtBQUNWLDhFQUE4RTtBQUU5RTs7R0FFRztBQUNILElBQVksY0FLWDtBQUxELFdBQVksY0FBYztJQUN4Qix3RkFBd0Y7SUFDeEYsbUNBQWlCLENBQUE7SUFDakIseUVBQXlFO0lBQ3pFLHFDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFMVyxjQUFjLDhCQUFkLGNBQWMsUUFLekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHR5cGVzLnRzIOKAlCBBbGwgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIGVuZ2luZSBsaWJyYXJ5LlxuICpcbiAqIENlbnRyYWxpemVzIHR5cGUgZGVmaW5pdGlvbnMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICogRXZlcnkgaGFuZGxlciByZWNlaXZlcyBIYW5kbGVyRGVwcyAodGhlIERJIGJhZykgaW5zdGVhZCBvZiBpbXBvcnRpbmcgdGhlIHRyYXZlcnNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4uL21lbW9yeS9TdGFnZUNvbnRleHQuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93Q29udHJvbFR5cGUsIEZsb3dNZXNzYWdlIH0gZnJvbSAnLi4vbWVtb3J5L3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVQcm90ZWN0aW9uTW9kZSB9IGZyb20gJy4uL3Njb3BlL3Byb3RlY3Rpb24vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBEZWNpZGVyLCBTZWxlY3RvciwgU3RhZ2VOb2RlIH0gZnJvbSAnLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBJQ29udHJvbEZsb3dOYXJyYXRpdmUgfSBmcm9tICcuL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5cbi8vIFJlLWV4cG9ydCBTdGFnZU5vZGUgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IERlY2lkZXIsIFNlbGVjdG9yLCBTdGFnZU5vZGUgfSBmcm9tICcuL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5cbi8vIFJlLWV4cG9ydCBwYXVzZSB0eXBlcyBmcm9tIHBhdXNlLyBsaWJyYXJ5XG5leHBvcnQgdHlwZSB7IEZsb3djaGFydENoZWNrcG9pbnQsIFBhdXNhYmxlSGFuZGxlciwgUGF1c2VSZXN1bHQgfSBmcm9tICcuLi9wYXVzZS9pbmRleC5qcyc7XG5leHBvcnQgeyBpc1BhdXNlUmVzdWx0LCBpc1BhdXNlU2lnbmFsLCBQYXVzZVNpZ25hbCB9IGZyb20gJy4uL3BhdXNlL2luZGV4LmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2dnZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogTWluaW1hbCBsb2dnaW5nIGNvbnRyYWN0LiBNaXJyb3JzIENvbnNvbGUgQVBJIHN1YnNldC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ2dlciB7XG4gIGluZm8obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgbG9nKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGRlYnVnKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGVycm9yKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIHdhcm4obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbn1cblxuLyoqIERlZmF1bHQgY29uc29sZS1iYXNlZCBsb2dnZXIuICovXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtLSB0cml2aWFsIGNvbnNvbGUgZGVsZWdhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMb2dnZXI6IElMb2dnZXIgPSB7XG4gIGluZm86IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5pbmZvKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBsb2c6IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5sb2cobWVzc2FnZSwgLi4uYXJncyksXG4gIGRlYnVnOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZGVidWcobWVzc2FnZSwgLi4uYXJncyksXG4gIGVycm9yOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZXJyb3IobWVzc2FnZSwgLi4uYXJncyksXG4gIHdhcm46IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS53YXJuKG1lc3NhZ2UsIC4uLmFyZ3MpLFxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdGFnZSBGdW5jdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBDYWxsYmFjayB0aGF0IHJlY2VpdmVzIHRva2VucyBkdXJpbmcgc3RyZWFtaW5nLiAqL1xuZXhwb3J0IHR5cGUgU3RyZWFtQ2FsbGJhY2sgPSAodG9rZW46IHN0cmluZykgPT4gdm9pZDtcblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciBzdGFnZSBoYW5kbGVycy5cbiAqIC0gVE91dDogcmV0dXJuIHR5cGUgcHJvZHVjZWQgYnkgdGhlIHN0YWdlXG4gKiAtIFRTY29wZTogdGhlIHNjb3BlIG9iamVjdCBwYXNzZWQgdG8gdGhlIHN0YWdlXG4gKiAtIE9wdGlvbmFsIDNyZCBwYXJhbWV0ZXIgYHN0cmVhbUNhbGxiYWNrYCBpbmplY3RlZCBmb3Igc3RyZWFtaW5nIHN0YWdlcy5cbiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VGdW5jdGlvbjxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0gKFxuICBzY29wZTogVFNjb3BlLFxuICBicmVha1BpcGVsaW5lOiAoKSA9PiB2b2lkLFxuICBzdHJlYW1DYWxsYmFjaz86IFN0cmVhbUNhbGxiYWNrLFxuKSA9PiBQcm9taXNlPFRPdXQgfCB2b2lkPiB8IFRPdXQgfCB2b2lkO1xuXG4vKipcbiAqIFN0YWdlIGZ1bmN0aW9uIGZvciBwYXVzYWJsZSBzdGFnZXMg4oCUIHJldHVybiB2YWx1ZSBpcyB0aGUgcGF1c2UgZGF0YSAoYW55IHR5cGUpLlxuICogUmV0dXJuIG5vbi12b2lkIHRvIHBhdXNlLCByZXR1cm4gdm9pZCB0byBjb250aW51ZSBub3JtYWxseS5cbiAqL1xuZXhwb3J0IHR5cGUgUGF1c2FibGVTdGFnZUZ1bmN0aW9uPFRTY29wZSA9IGFueT4gPSAoXG4gIHNjb3BlOiBUU2NvcGUsXG4gIGJyZWFrUGlwZWxpbmU6ICgpID0+IHZvaWQsXG4pID0+IFByb21pc2U8dW5rbm93bj4gfCB1bmtub3duO1xuXG4vKiogRmFjdG9yeSB0aGF0IGNyZWF0ZXMgYSBzY29wZSBpbnN0YW5jZSBmb3IgZWFjaCBzdGFnZS4gKi9cbmV4cG9ydCB0eXBlIFNjb3BlRmFjdG9yeTxUU2NvcGUgPSBhbnk+ID0gKFxuICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gIHN0YWdlTmFtZTogc3RyaW5nLFxuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duLFxuICBleGVjdXRpb25FbnY/OiBFeGVjdXRpb25FbnYsXG4pID0+IFRTY29wZTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdHJlYW1pbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBTdHJlYW1Ub2tlbkhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgZnVsbFRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtSGFuZGxlcnMge1xuICBvblRva2VuPzogU3RyZWFtVG9rZW5IYW5kbGVyO1xuICBvblN0YXJ0PzogU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcjtcbiAgb25FbmQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN1YmZsb3dcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENvbnRyb2xzIGhvdyBhcnJheSB2YWx1ZXMgZnJvbSBvdXRwdXRNYXBwZXIgYXJlIG1lcmdlZCBpbnRvIHBhcmVudCBzY29wZS5cbiAqL1xuZXhwb3J0IGVudW0gQXJyYXlNZXJnZU1vZGUge1xuICAvKiogQXBwZW5kIHN1YmZsb3cgb3V0cHV0IHRvIGV4aXN0aW5nIHBhcmVudCBhcnJheTogWy4uLmV4aXN0aW5nLCAuLi52YWx1ZV0uIERlZmF1bHQuICovXG4gIENvbmNhdCA9ICdjb25jYXQnLFxuICAvKiogT3ZlcndyaXRlIHBhcmVudCBhcnJheSB3aXRoIHN1YmZsb3cgb3V0cHV0LiBVc2UgZm9yIER5bmFtaWMgbG9vcHMuICovXG4gIFJlcGxhY2UgPSAncmVwbGFjZScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUgPSBhbnksIFRTdWJmbG93SW5wdXQgPSBhbnksIFRTdWJmbG93T3V0cHV0ID0gYW55PiB7XG4gIGlucHV0TWFwcGVyPzogKHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUpID0+IFRTdWJmbG93SW5wdXQ7XG4gIC8qKlxuICAgKiBNYXBzIHN1YmZsb3cgb3V0cHV0IGJhY2sgaW50byBwYXJlbnQgc2NvcGUuXG4gICAqXG4gICAqICoqQXJyYXkgbWVyZ2UgYmVoYXZpb3IqKiBpcyBjb250cm9sbGVkIGJ5IGBhcnJheU1lcmdlYDpcbiAgICogLSBgJ2NvbmNhdCdgIChkZWZhdWx0KTogYFsuLi5leGlzdGluZywgLi4udmFsdWVdYCDigJQgcmV0dXJuIG9ubHkgKipkZWx0YSoqIGl0ZW1zXG4gICAqIC0gYCdyZXBsYWNlJ2A6IG92ZXJ3cml0ZXMgdGhlIHBhcmVudCB2YWx1ZSDigJQgcmV0dXJuIHRoZSBmdWxsIGFycmF5XG4gICAqXG4gICAqIFNjYWxhciB2YWx1ZXMgYXJlIGFsd2F5cyByZXBsYWNlZCByZWdhcmRsZXNzIG9mIGBhcnJheU1lcmdlYC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBEZWx0YSBtb2RlIChkZWZhdWx0KSDigJQgcmV0dXJuIG9ubHkgbmV3IGl0ZW1zLCBjb25jYXQgYXBwZW5kc1xuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgbWVzc2FnZXM6IHNmLm5ld01lc3NhZ2VzIH0pXG4gICAqXG4gICAqIC8vIFJlcGxhY2UgbW9kZSDigJQgcmV0dXJuIGZ1bGwgYXJyYXksIHBhcmVudCB2YWx1ZSBpcyBvdmVyd3JpdHRlblxuICAgKiAvLyBVc2VmdWwgaW4gRHluYW1pYyBsb29wcyB3aGVyZSB0aGUgc3ViZmxvdyByZWNvbXB1dGVzIHRoZSBmdWxsIHZhbHVlIGVhY2ggaXRlcmF0aW9uXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyB0b29sRGVzY3JpcHRpb25zOiBzZi50b29sRGVzY3JpcHRpb25zIH0pLFxuICAgKiBhcnJheU1lcmdlOiBBcnJheU1lcmdlTW9kZS5SZXBsYWNlLFxuICAgKlxuICAgKiAvLyBTY2FsYXJzIGFyZSBmaW5lIGluIGJvdGggbW9kZXMg4oCUIGFsd2F5cyByZXBsYWNlZFxuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgc3RhdHVzOiBzZi5yZXN1bHQsIGNvdW50OiBzZi50b3RhbCB9KVxuICAgKiBgYGBcbiAgICovXG4gIG91dHB1dE1hcHBlcj86IChzdWJmbG93T3V0cHV0OiBUU3ViZmxvd091dHB1dCwgcGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBDb250cm9scyBob3cgYXJyYXkgdmFsdWVzIGZyb20gb3V0cHV0TWFwcGVyIGFyZSBtZXJnZWQgaW50byBwYXJlbnQgc2NvcGUuXG4gICAqIEFwcGxpZXMgb25seSB0byB0b3AtbGV2ZWwgYXJyYXkga2V5cy4gTmVzdGVkIGFycmF5cyBpbnNpZGUgb2JqZWN0c1xuICAgKiBhbHdheXMgdXNlIGFwcGVuZCAoYXBwZW5kVG9BcnJheSkgcmVnYXJkbGVzcyBvZiB0aGlzIHNldHRpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFycmF5TWVyZ2VNb2RlLkNvbmNhdFxuICAgKi9cbiAgYXJyYXlNZXJnZT86IEFycmF5TWVyZ2VNb2RlO1xuXG4gIC8qKlxuICAgKiBTVFJVQ1RVUkUtT05MWTogdGhlIGRvd25zdHJlYW0gc3RhZ2UgaWQgdGhpcyBicmFuY2gncyBjb252ZXJnZW5jZSBlZGdlXG4gICAqIHBvaW50cyB0bywgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBcImNvbnZlcmdlIGF0IHRoZSBuZXh0IGxpbmVhciBzdGFnZS5cIlxuICAgKlxuICAgKiBXaGVuIGEgZm9yay9zZWxlY3Rvci9kZWNpZGVyIGJyYW5jaCBjYXJyaWVzIGBjb252ZXJnZUF0YCwgaXRzIHZpc3VhbGl6ZWRcbiAgICogYG5leHRgIGVkZ2UgaXMgZmlyZWQgdG8gdGhlIG5hbWVkIHN0YWdlIGluc3RlYWQgb2YgdG8gdGhlIHNoYXJlZFxuICAgKiBjb252ZXJnZW5jZSBub2RlIGl0cyBzaWJsaW5ncyB1c2UuIFRoaXMgZXhwcmVzc2VzIGFuIHVuZXF1YWwtZGVwdGggbWVyZ2VcbiAgICog4oCUIGUuZy4gYSBgdG9vbHNgIHNsb3QgdGhhdCBieXBhc3NlcyB0aGUgYG1lc3NhZ2VBUElgIGFzc2VtYmx5IG5vZGUgYW5kXG4gICAqIHBhaXJzIHdpdGggaXRzIG91dHB1dCBhdCBgY2FsbC1sbG1gIChzbyBgY2FsbC1sbG1gIHJlYWRzIGFzIGEgMi1wYXJlbnRcbiAgICogbWVyZ2UpLCBmYWl0aGZ1bCB0byB0aGUgQW50aHJvcGljIHdpcmUgcHJvdG9jb2wgKHN5c3RlbSttZXNzYWdlcyA9IHRoZVxuICAgKiBtZXNzYWdlIHBheWxvYWQ7IHRvb2xzID0gYSBzZXBhcmF0ZSB0b3AtbGV2ZWwgZmllbGQpLlxuICAgKlxuICAgKiAqKlRoaXMgYWZmZWN0cyB0aGUgU1RSVUNUVVJFL3RvcG9sb2d5IGdyYXBoIG9ubHkqKiDigJQgdGhlIHJ1bnRpbWUgaXNcbiAgICogdW5jaGFuZ2VkICh0aGUgYnJhbmNoJ3Mgb3V0cHV0cyByaWRlIHNoYXJlZCBzY29wZTsgdGhlIG5hbWVkIHRhcmdldCByZWFkc1xuICAgKiB0aGVtIHdoZW4gaXQgcnVucykuIEl0IGRvZXMgTk9UIGludHJvZHVjZSBhIGpvaW4gYmFycmllci4gVGhlIHRhcmdldCBpcyBhXG4gICAqIEZPUldBUkQgc3RhZ2UgKGFkZGVkIGxhdGVyIGluIHRoZSBjaGFpbiksIHNvIGl0IGlzIG5vdCB2YWxpZGF0ZWQgYXRcbiAgICogYnJhbmNoLWRlY2xhcmF0aW9uIHRpbWUuXG4gICAqL1xuICBjb252ZXJnZUF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgYW4gaW5uZXIgYHNjb3BlLiRicmVhayhyZWFzb24pYCBjYWxsIGluc2lkZSB0aGlzIHN1YmZsb3dcbiAgICogcHJvcGFnYXRlcyB1cCB0byB0aGUgcGFyZW50IOKAlCBpLmUuLCB0aGUgcGFyZW50J3MgYGJyZWFrRmxhZ2AgaXMgc2V0XG4gICAqIGFmdGVyIHRoZSBzdWJmbG93IGV4aXRzLCB0ZXJtaW5hdGluZyB0aGUgcGFyZW50J3Mgb3V0ZXIgbG9vcCB0b28uXG4gICAqXG4gICAqICoqRGVmYXVsdDogYGZhbHNlYCoqIChjdXJyZW50IGJlaGF2aW91ciDigJQgaW5uZXIgYnJlYWsgc3RvcHMgb25seSB0aGVcbiAgICogc3ViZmxvdzsgcGFyZW50IGNvbnRpbnVlcykuXG4gICAqXG4gICAqICMjIFdoZW4gdG8gdXNlXG4gICAqXG4gICAqIFNldCBgcHJvcGFnYXRlQnJlYWs6IHRydWVgIG9uIHN1YmZsb3cgbW91bnRzIHRoYXQgcmVwcmVzZW50XG4gICAqICoqdGVybWluYWwqKiBicmFuY2hlcyDigJQgXCJpZiB0aGlzIHN1YmZsb3cgZmlyZXMsIHRoZSBvdXRlciBsb29wIGlzXG4gICAqIGRvbmVcIi4gRXhhbXBsZXM6XG4gICAqXG4gICAqIC0gQSBodW1hbi1yZXZpZXcgcnVubmVyIHRoYXQgdGFrZXMgb3ZlciBmcm9tIGFuIGFnZW50J3MgdG9vbC1jYWxsaW5nXG4gICAqICAgbG9vcCBhbmQgcHJvZHVjZXMgdGhlIGZpbmFsIHJlc3BvbnNlLlxuICAgKiAtIEEgc2FmZXR5LWdhdGUgc3ViZmxvdyB0aGF0IGhhbHRzIHRoZSBvdXRlciB3b3JrZmxvdyB3aGVuIGEgcG9saWN5XG4gICAqICAgdmlvbGF0aW9uIGlzIGRldGVjdGVkLlxuICAgKiAtIEFuIGVycm9yLXJlY292ZXJ5IHN1YmZsb3cgdGhhdCByZXN0b3JlcyBzdGF0ZSBhbmQgdGhlbiB0ZXJtaW5hdGVzLlxuICAgKlxuICAgKiAjIyBTZW1hbnRpY3NcbiAgICpcbiAgICogMS4gSW5zaWRlIHRoZSBzdWJmbG93LCBhIHN0YWdlIGNhbGxzIGBzY29wZS4kYnJlYWsocmVhc29uKWAuXG4gICAqIDIuIFRoZSBzdWJmbG93J3Mgb3duIGV4ZWN1dGlvbiBzdG9wcyAobm9ybWFsIGAkYnJlYWtgIGJlaGF2aW91cikuXG4gICAqIDMuIGBTdWJmbG93RXhlY3V0b3JgIGluc3BlY3RzIHRoZSBzdWJmbG93J3MgZXhpdCBzdGF0ZS4gSWZcbiAgICogICAgYHByb3BhZ2F0ZUJyZWFrID09PSB0cnVlYCBBTkQgdGhlIGlubmVyIGJyZWFrIGZpcmVkLCBpdCBmb3J3YXJkc1xuICAgKiAgICB0aGUgYnJlYWsgKGFuZCBpdHMgcmVhc29uKSB0byB0aGUgcGFyZW50J3MgYGJyZWFrRmxhZ2AuXG4gICAqIDQuIFRoZSBwYXJlbnQgdHJhdmVyc2VyIHNlZXMgYHNob3VsZEJyZWFrYCBvbiBpdHMgbmV4dCBzdGVwIGFuZCBleGl0cy5cbiAgICogNS4gQSBgRmxvd1JlY29yZGVyLm9uQnJlYWtgIGV2ZW50IGZpcmVzIGF0IHRoZSBwYXJlbnQtbW91bnQgbGV2ZWwgd2l0aFxuICAgKiAgICBgcHJvcGFnYXRlZEZyb21TdWJmbG93YCA9IHRoZSBzdWJmbG93J3MgaWQgYW5kIHRoZSBpbm5lciByZWFzb24uXG4gICAqXG4gICAqICMjIFBhcmFsbGVsL2Zhbi1vdXRcbiAgICpcbiAgICogRm9sbG93cyB0aGUgZXhpc3RpbmcgbGlicmFyeSBydWxlIGluIGBDaGlsZHJlbkV4ZWN1dG9yYDogdGhlIHBhcmVudFxuICAgKiBicmVha3Mgb25seSB3aGVuICoqZXZlcnkqKiBjaGlsZCBvZiBhIGZvcmsgYnJva2UuIEEgc2luZ2xlXG4gICAqIGBwcm9wYWdhdGVCcmVhazogdHJ1ZWAgc3ViZmxvdyBjb250cmlidXRpbmcgaXRzIGJyZWFrIHRvIHRoZSBjb3VudFxuICAgKiBkb2VzIG5vdCBvbiBpdHMgb3duIHRlcm1pbmF0ZSB0aGUgcGFyZW50IGZhbi1vdXQuXG4gICAqXG4gICAqICMjIG91dHB1dE1hcHBlciBzdGlsbCBydW5zXG4gICAqXG4gICAqIFRoZSBzdWJmbG93J3MgYG91dHB1dE1hcHBlcmAgKGlmIHN1cHBsaWVkKSBBTFdBWVMgcnVucyBiZWZvcmUgdGhlXG4gICAqIGJyZWFrIHByb3BhZ2F0ZXMsIHNvIHRoZSBzdWJmbG93J3MgcGFydGlhbCBzdGF0ZSBpcyBzdGlsbCB3cml0dGVuIHRvXG4gICAqIHRoZSBwYXJlbnQgc2NvcGUuIFRoaXMgaXMgaW50ZW50aW9uYWwg4oCUIHRoZSB0eXBpY2FsIHVzZSBjYXNlIGlzIGFuXG4gICAqIFwiZXNjYWxhdGlvblwiIHN1YmZsb3cgd2hvc2Ugb3V0cHV0IElTIHRoZSBmaW5hbCBhbnN3ZXIgdGhhdCBuZWVkcyB0b1xuICAgKiBsYW5kIGluIHRoZSBwYXJlbnQgc2NvcGUgYmVmb3JlIHRoZSBvdXRlciBsb29wIHRlcm1pbmF0ZXMuIElmIHlvdVxuICAgKiB3YW50IHRvIHN1cHByZXNzIG91dHB1dCBtYXBwaW5nIG9uIGJyZWFrLCBjaGVjayB0aGUgYnJlYWsgc3RhdGVcbiAgICogaW5zaWRlIHlvdXIgYG91dHB1dE1hcHBlcmAgYW5kIHJldHVybiBge31gIGVhcmx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHJvcGFnYXRlQnJlYWs/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dSZXN1bHQge1xuICBzdWJmbG93SWQ6IHN0cmluZztcbiAgc3ViZmxvd05hbWU6IHN0cmluZztcbiAgdHJlZUNvbnRleHQ6IHtcbiAgICBnbG9iYWxDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBzdGFnZUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBoaXN0b3J5OiB1bmtub3duW107XG4gIH07XG4gIHBhcmVudFN0YWdlSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVTdHJ1Y3R1cmU/OiB1bmtub3duO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN1YmZsb3cgVHJhdmVyc2VyIEZhY3Rvcnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5IOKAlCBDcmVhdGVzIGEgRmxvd2NoYXJ0VHJhdmVyc2VyIGZvciBzdWJmbG93IGV4ZWN1dGlvbi5cbiAqXG4gKiBJbmplY3RlZCBpbnRvIFN1YmZsb3dFeGVjdXRvciB0byBicmVhayB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeTpcbiAqIEZsb3djaGFydFRyYXZlcnNlciDihpIgU3ViZmxvd0V4ZWN1dG9yIOKGkiBGbG93Y2hhcnRUcmF2ZXJzZXIuXG4gKlxuICogVGhlIGZhY3RvcnkgY2FwdHVyZXMgcGFyZW50IHRyYXZlcnNlciBjb25maWcgKHN0YWdlTWFwLCBzY29wZUZhY3RvcnksIG5hcnJhdGl2ZSwgZXRjLilcbiAqIGluIGEgY2xvc3VyZS4gU3ViZmxvd0V4ZWN1dG9yIGNhbGxzIGl0IHdpdGggc3ViZmxvdy1zcGVjaWZpYyBvdmVycmlkZXMgKHJvb3QsIHJ1bnRpbWUsIGlucHV0KS5cbiAqIFRoZSByZXR1cm5lZCB0cmF2ZXJzZXIgdXNlcyB0aGUgU0FNRSA3LXBoYXNlIGFsZ29yaXRobSBhcyB0aGUgdG9wLWxldmVsIHRyYXZlcnNlcixcbiAqIHNvIGRlY2lkZXJzLCBzZWxlY3RvcnMsIGxvb3BzLCBsYXp5IHN1YmZsb3dzLCBhbmQgYWJvcnQgc2lnbmFscyBhbGwgd29yayBpbnNpZGUgc3ViZmxvd3MuXG4gKi9cbmV4cG9ydCB0eXBlIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAob3B0aW9uczoge1xuICAvKiogUm9vdCBub2RlIG9mIHRoZSBzdWJmbG93ICh3aXRoIGlzU3ViZmxvd1Jvb3Qgc3RyaXBwZWQpLiAqL1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgLyoqIElzb2xhdGVkIGV4ZWN1dGlvbiBydW50aW1lIGZvciB0aGUgc3ViZmxvdy4gKi9cbiAgZXhlY3V0aW9uUnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWU7XG4gIC8qKiBNYXBwZWQgaW5wdXQgZnJvbSBwYXJlbnQgc2NvcGUgKGJlY29tZXMgcmVhZE9ubHlDb250ZXh0IGZvciBzdGFnZXMpLiAqL1xuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duO1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIOKAlCB1c2VkIGFzIGJyYW5jaFBhdGggZm9yIG5hcnJhdGl2ZSBjb250ZXh0LiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG59KSA9PiBTdWJmbG93VHJhdmVyc2VySGFuZGxlPFRPdXQsIFRTY29wZT47XG5cbi8qKlxuICogSGFuZGxlIHJldHVybmVkIGJ5IFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5LlxuICogUHJvdmlkZXMgZXhlY3V0ZSgpICsgYWNjZXNzIHRvIG5lc3RlZCBzdWJmbG93IHJlc3VsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1RyYXZlcnNlckhhbmRsZTxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqIEV4ZWN1dGUgdGhlIHN1YmZsb3cncyBncmFwaCB1c2luZyB0aGUgZnVsbCA3LXBoYXNlIHRyYXZlcnNhbCBhbGdvcml0aG0uICovXG4gIGV4ZWN1dGUoKTogUHJvbWlzZTxUcmF2ZXJzYWxSZXN1bHQ+O1xuICAvKiogQ29sbGVjdCBuZXN0ZWQgc3ViZmxvdyByZXN1bHRzIChmcm9tIHN1YmZsb3dzIG1vdW50ZWQgaW5zaWRlIHRoaXMgc3ViZmxvdykuICovXG4gIGdldFN1YmZsb3dSZXN1bHRzKCk6IE1hcDxzdHJpbmcsIFN1YmZsb3dSZXN1bHQ+O1xuICAvKipcbiAgICogRmluYWwgYnJlYWsgc3RhdGUgb2YgdGhlIHN1YmZsb3cgYWZ0ZXIgYGV4ZWN1dGUoKWAgcmV0dXJucy5cbiAgICpcbiAgICogICAtIGBzaG91bGRCcmVhazogdHJ1ZWAgIOKGkiBhIHN0YWdlIGluc2lkZSB0aGUgc3ViZmxvdyBjYWxsZWRcbiAgICogICAgIGBzY29wZS4kYnJlYWsocmVhc29uKWAsIHN0b3BwaW5nIHRoZSBzdWJmbG93J3Mgb3duIHRyYXZlcnNhbC5cbiAgICogICAtIGByZWFzb25gICAgICAgICAgICAgIOKGkiB0aGUgb3B0aW9uYWwgc3RyaW5nIHBhc3NlZCB0byBgJGJyZWFrYC5cbiAgICpcbiAgICogVXNlZCBieSBgU3ViZmxvd0V4ZWN1dG9yYCB0byBpbXBsZW1lbnQgYFN1YmZsb3dNb3VudE9wdGlvbnMucHJvcGFnYXRlQnJlYWtgOlxuICAgKiBpZiB0aGUgbW91bnQgb3B0cyBpbiBBTkQgdGhlIHN1YmZsb3cgYnJva2UsIHRoZSBwYXJlbnQncyBicmVhayBmbGFnIGlzXG4gICAqIGZvcndhcmRlZC5cbiAgICovXG4gIGdldEJyZWFrU3RhdGUoKTogeyBzaG91bGRCcmVhazogYm9vbGVhbjsgcmVhc29uPzogc3RyaW5nIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIFJ1bnRpbWUgSW50ZXJmYWNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBJRXhlY3V0aW9uUnVudGltZSDigJQgSW50ZXJmYWNlIGZvciB0aGUgcnVudGltZSBlbnZpcm9ubWVudC5cbiAqXG4gKiBEZWZpbmVzIHRoZSBjb250cmFjdCB0aGF0IGVuZ2luZSBoYW5kbGVycyBuZWVkIGZyb20gdGhlIHJ1bm5lciBsYXllcixcbiAqIGF2b2lkaW5nIGNpcmN1bGFyIGltcG9ydHMgYmV0d2VlbiBlbmdpbmUvIGFuZCBydW5uZXIvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFeGVjdXRpb25SdW50aW1lIHtcbiAgZ2xvYmFsU3RvcmU6IHsgZ2V0U3RhdGUoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcbiAgcm9vdFN0YWdlQ29udGV4dDogU3RhZ2VDb250ZXh0O1xuICBleGVjdXRpb25IaXN0b3J5OiB7IGxpc3QoKTogdW5rbm93bltdIH07XG4gIGdldFNuYXBzaG90KG9wdGlvbnM/OiB7IHJlZGFjdD86IGJvb2xlYW4gfSk6IHtcbiAgICBzaGFyZWRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZXhlY3V0aW9uVHJlZTogdW5rbm93bjtcbiAgICBjb21taXRMb2c6IHVua25vd25bXTtcbiAgICBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJlY29yZGVycz86IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0+O1xuICB9O1xuICBzZXRSb290T2JqZWN0KHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICBnZXRQaXBlbGluZXMoKTogc3RyaW5nW107XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIEVudmlyb25tZW50IOKAlCByZWFkLW9ubHksIHByb3BhZ2F0ZXMgdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFeGVjdXRpb25FbnYg4oCUIGluZnJhc3RydWN0dXJlIHZhbHVlcyB0aGF0IHByb3BhZ2F0ZSB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnMuXG4gKlxuICogTGlrZSBgcHJvY2Vzcy5lbnZgIGZvciBmbG93Y2hhcnRzOiByZWFkLW9ubHksIGluaGVyaXRlZCBieSBjaGlsZCBleGVjdXRvcnMsXG4gKiBpbmZyYXN0cnVjdHVyZS1vbmx5IChub3QgYnVzaW5lc3MgbG9naWMpLlxuICpcbiAqIExpdG11cyB0ZXN0OiBDcmVhdGVkIGV4dGVybmFsIHRvIHRoZSBmbG93Y2hhcnQgKyBwYXNzZWQgaW4gZm9yIGV4ZWN1dGlvbiA9IGVudi5cbiAqIEJ1c2luZXNzIGNvbmZpZyBmb3IgYSBzcGVjaWZpYyBmbG93Y2hhcnQgPSBhcmdzIChnZXRBcmdzKCkpLlxuICpcbiAqIEludGVudGlvbmFsbHkgYSBjbG9zZWQgdHlwZSDigJQgbm90IGV4dGVuc2libGUgdG8gcHJldmVudCBjb3VwbGluZyBiZXR3ZWVuXG4gKiBwYXJlbnQgYW5kIGNoaWxkIGZsb3djaGFydHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0aW9uRW52IHtcbiAgLyoqIEFib3J0U2lnbmFsIGZvciBjb29wZXJhdGl2ZSBjYW5jZWxsYXRpb24gYWNyb3NzIG5lc3RlZCBleGVjdXRvcnMuICovXG4gIHJlYWRvbmx5IHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKiogVGltZW91dCBidWRnZXQgaW4gbWlsbGlzZWNvbmRzLiAqL1xuICByZWFkb25seSB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBUcmFjZSBpZGVudGlmaWVyIGZvciBkaXN0cmlidXRlZCB0cmFjaW5nIC8gb2JzZXJ2YWJpbGl0eS4gKi9cbiAgcmVhZG9ubHkgdHJhY2VJZD86IHN0cmluZztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIYW5kbGVyIERlcGVuZGVuY2llcyAoREkgYmFnKSDigJQgd2FzIFBpcGVsaW5lQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogSGFuZGxlckRlcHMg4oCUIERlcGVuZGVuY3kgaW5qZWN0aW9uIGJhZyBwYXNzZWQgdG8gYWxsIGhhbmRsZXIgbW9kdWxlcy5cbiAqXG4gKiBQcm92aWRlcyBzaGFyZWQgc3RhdGUgKHN0YWdlTWFwLCBydW50aW1lLCBzY29wZUZhY3RvcnksIGV0Yy4pIHdpdGhvdXRcbiAqIGhhbmRsZXJzIG5lZWRpbmcgdG8gaW1wb3J0IHRoZSB0cmF2ZXJzZXIgZGlyZWN0bHkuIEF2b2lkcyBjaXJjdWxhciBkZXBzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXJEZXBzPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBzdGFnZU1hcDogTWFwPHN0cmluZywgU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PjtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIGV4ZWN1dGlvblJ1bnRpbWU6IElFeGVjdXRpb25SdW50aW1lO1xuICBzY29wZUZhY3Rvcnk6IFNjb3BlRmFjdG9yeTxUU2NvcGU+O1xuICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT47XG4gIHRocm90dGxpbmdFcnJvckNoZWNrZXI/OiAoZXJyb3I6IHVua25vd24pID0+IGJvb2xlYW47XG4gIHN0cmVhbUhhbmRsZXJzPzogU3RyZWFtSGFuZGxlcnM7XG4gIHNjb3BlUHJvdGVjdGlvbk1vZGU6IFNjb3BlUHJvdGVjdGlvbk1vZGU7XG4gIHJlYWRPbmx5Q29udGV4dD86IHVua25vd247XG4gIC8qKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHByb3BhZ2F0ZXMgdG8gc3ViZmxvd3MgYXV0b21hdGljYWxseS4gKi9cbiAgZXhlY3V0aW9uRW52PzogRXhlY3V0aW9uRW52O1xuICBuYXJyYXRpdmVHZW5lcmF0b3I6IElDb250cm9sRmxvd05hcnJhdGl2ZTtcbiAgbG9nZ2VyOiBJTG9nZ2VyO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqXG4gICAqIE9uIHJlc3VtZSwgdGhlIHBlci1zdWJmbG93IHNjb3BlIGNhcHR1cmVzIGZyb20gdGhlIGNoZWNrcG9pbnQuXG4gICAqIEtleWVkIGJ5IHBhdGgtcHJlZml4ZWQgYHN1YmZsb3dJZGAgKG1hdGNoZXMgYFBhdXNlU2lnbmFsLnN1YmZsb3dQYXRoYCkuXG4gICAqXG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIGNvbnN1bHRzIHRoaXMgb24gZW50cnk6IGlmIGEga2V5IG1hdGNoZXMgdGhlXG4gICAqIGN1cnJlbnQgc3ViZmxvdyBpZCwgdGhlIG5lc3RlZCBydW50aW1lIGlzIHNlZWRlZCBmcm9tIHRoaXMgc3RhdGVcbiAgICogYW5kIHRoZSBpbnB1dE1hcHBlciBpcyBTS0lQUEVEICh0aGUgY2FwdHVyZWQgc3RhdGUgYWxyZWFkeVxuICAgKiByZWZsZWN0cyBwb3N0LWlucHV0IHByZS1wYXVzZSBtZW1vcnkpLiBUaGlzIGlzIHdoYXQgbWFrZXNcbiAgICogY3Jvc3MtZXhlY3V0b3IgcmVzdW1lIHdvcmsgZm9yIHBhdXNlcyBJTlNJREUgYSBzdWJmbG93LlxuICAgKlxuICAgKiBVbmRlZmluZWQgb24gbm9ybWFsIGBydW4oKWAgcGF0aHMg4oCUIG9ubHkgdGhlIHJlc3VtZSBwYXRoIHNldHMgaXQuXG4gICAqL1xuICBzdWJmbG93U3RhdGVzRm9yUmVzdW1lPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufVxuXG4vKiogT3B0aW9ucyBmb3IgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bk9wdGlvbnMge1xuICAvKiogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbi4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gQ3JlYXRlcyBhbiBpbnRlcm5hbCBBYm9ydENvbnRyb2xsZXIuICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFJ1bnRpbWUgaW5wdXQgZGF0YSBmb3IgdGhlIHBpcGVsaW5lLlxuICAgKiBCZWNvbWVzIHRoZSByZWFkT25seUNvbnRleHQgYWNjZXNzaWJsZSB2aWEgYHNjb3BlLmdldEFyZ3MoKWAuXG4gICAqIFN0YWdlcyBjYW5ub3Qgb3ZlcndyaXRlIHRoZXNlIGtleXMgd2l0aCBgc2V0VmFsdWUoKWAuXG4gICAqL1xuICBpbnB1dD86IHVua25vd247XG4gIC8qKlxuICAgKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSBpbmZyYXN0cnVjdHVyZSB2YWx1ZXMgdGhhdCBwcm9wYWdhdGVcbiAgICogdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzIChsaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHMpLlxuICAgKiBBY2Nlc3NpYmxlIHZpYSBgc2NvcGUuZ2V0RW52KClgLiBJbmhlcml0ZWQgYnkgc3ViZmxvd3MgYXV0b21hdGljYWxseS5cbiAgICovXG4gIGVudj86IEV4ZWN1dGlvbkVudjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBtYXhpbXVtIG5lc3RlZCBgZXhlY3V0ZU5vZGVgIGRlcHRoIGZvciB0aGlzIHJ1bi5cbiAgICogRGVmYXVsdHMgdG8gYEZsb3djaGFydFRyYXZlcnNlci5NQVhfRVhFQ1VURV9ERVBUSGAgKDUwMCkuXG4gICAqXG4gICAqIERlcHRoIGNvdW50cyBUUkVFIG5lc3Rpbmcgb25seSDigJQgZm9yayBjaGlsZHJlbiwgZGVjaWRlci9zZWxlY3RvciBicmFuY2hcbiAgICogZGlzcGF0Y2gsIHJlY3Vyc2l2ZSBjb21wb3NpdGlvbi4gTGluZWFyIGNoYWlucyBhbmQgbG9vcCBpdGVyYXRpb25zIHJ1blxuICAgKiBvbiBhIGZsYXQgdHJhbXBvbGluZSBhbmQgbmV2ZXIgY29uc3VtZSBkZXB0aCwgc28gdGhpcyByYXJlbHkgbmVlZHNcbiAgICogcmFpc2luZy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4RGVwdGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgbWF4aW11bSBsb29wIGl0ZXJhdGlvbnMgcGVyIG5vZGUgZm9yIHRoaXMgcnVuICh0aGVcbiAgICogYENvbnRpbnVhdGlvblJlc29sdmVyYCBpbmZpbml0ZS1sb29wIGd1YXJkKS4gRGVmYXVsdHMgdG8gMTAwMC5cbiAgICogVGhpcyBpcyB0aGUgYmluZGluZyBjb25zdHJhaW50IGZvciBsb29wLWhlYXZ5IHBpcGVsaW5lcyDigJQgcmFpc2UgaXQgZm9yXG4gICAqIGxlZ2l0aW1hdGVseSBsb25nIGxvb3BzIChgbG9vcFRvYCBjaGFpbnMgcnVuIHdpdGggYSBmbGF0IHN0YWNrLCBzbyBoaWdoXG4gICAqIHZhbHVlcyBhcmUgc2FmZTsgbWVtb3J5IGZvciBzdGF0ZS9uYXJyYXRpdmUgc3RpbGwgZ3Jvd3MgcGVyIGl0ZXJhdGlvbikuXG4gICAqIFByb3BhZ2F0ZXMgdG8gc3ViZmxvd3MuIE11c3QgYmUgPj0gMS5cbiAgICovXG4gIG1heEl0ZXJhdGlvbnM/OiBudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRmxvdyBDb250cm9sIE5hcnJhdGl2ZSDigJQgY2Fub25pY2FsIGRlZmluaXRpb25zIGxpdmUgaW4gbWVtb3J5L3R5cGVzLnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgeyBGbG93Q29udHJvbFR5cGUsIEZsb3dNZXNzYWdlIH07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVudGltZSBTdHJ1Y3R1cmUgTWV0YWRhdGEgKHVzZWQgYnkgUnVudGltZVN0cnVjdHVyZU1hbmFnZXIpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBSdW50aW1lU3RydWN0dXJlTWV0YWRhdGEge1xuICB0eXBlOiAnc3RhZ2UnIHwgJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJyB8ICdmb3JrJyB8ICdzdHJlYW1pbmcnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0R5bmFtaWM/OiBib29sZWFuO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBOb2RlIFJlc3VsdFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIE5vZGVSZXN1bHRUeXBlID0ge1xuICBpZDogc3RyaW5nO1xuICByZXN1bHQ6IHVua25vd247XG4gIGlzRXJyb3I/OiBib29sZWFuO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gUmVzcG9uc2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHQgPSB7XG4gIHJlc3VsdDogc3RyaW5nIHwgRXJyb3I7XG4gIGlzRXJyb3I6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHRzID0geyBbYnJhbmNoSWQ6IHN0cmluZ106IEJyYW5jaFJlc3VsdCB9O1xuZXhwb3J0IHR5cGUgVHJhdmVyc2FsUmVzdWx0ID0gQnJhbmNoUmVzdWx0cyB8IHN0cmluZyB8IEVycm9yO1xuXG4vKiogUmV0dXJuZWQgYnkgcnVuKCkvcmVzdW1lKCkgd2hlbiBleGVjdXRpb24gcGF1c2VzLiAqL1xuZXhwb3J0IHR5cGUgUGF1c2VkUmVzdWx0ID0ge1xuICByZWFkb25seSBwYXVzZWQ6IHRydWU7XG4gIHJlYWRvbmx5IGNoZWNrcG9pbnQ6IGltcG9ydCgnLi4vcGF1c2UvdHlwZXMuanMnKS5GbG93Y2hhcnRDaGVja3BvaW50O1xufTtcblxuLyoqIEZ1bGwgcmV0dXJuIHR5cGUgb2YgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkgYW5kIHJlc3VtZSgpLiAqL1xuZXhwb3J0IHR5cGUgRXhlY3V0b3JSZXN1bHQgPSBUcmF2ZXJzYWxSZXN1bHQgfCBQYXVzZWRSZXN1bHQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VyaWFsaXplZCBQaXBlbGluZSBTdHJ1Y3R1cmUgKGZvciB2aXN1YWxpemF0aW9uKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFBpcGVsaW5lTm9kZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgdHlwZT86XG4gICAgfCAnc3RhZ2UnXG4gICAgfCAnZGVjaWRlcidcbiAgICB8ICdzZWxlY3RvcidcbiAgICB8ICdmb3JrJ1xuICAgIHwgJ3N0cmVhbWluZydcbiAgICB8ICdzdWJmbG93J1xuICAgIHwgJ2xvb3AnXG4gICAgfCAndXNlcidcbiAgICB8ICd0b29sJ1xuICAgIHwgJ2Z1bmN0aW9uJ1xuICAgIHwgJ3NlcXVlbmNlJztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZVtdO1xuICBuZXh0PzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZTtcbiAgYnJhbmNoZXM/OiBSZWNvcmQ8c3RyaW5nLCBTZXJpYWxpemVkUGlwZWxpbmVOb2RlPjtcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgaGFzU3VidHJlZT86IGJvb2xlYW47XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzRHluYW1pYz86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIHRoaXMgc3RhZ2UgY2FuIHBhdXNlIGV4ZWN1dGlvbiAoUGF1c2FibGVIYW5kbGVyIHBhdHRlcm4pLiAqL1xuICBpc1BhdXNhYmxlPzogYm9vbGVhbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGbG93Q2hhcnQgaXMgZGVmaW5lZCBpbiBgLi4vYnVpbGRlci90eXBlcy50c2AuIFRoZSBlbmdpbmUgbGF5ZXIgY29uc3VtZXMgaXRcbi8vIHZpYSBpbXBvcnQgZnJvbSB0aGVyZS4gQSBkdXBsaWNhdGUgbWluaW1hbCBkZWZpbml0aW9uIHByZXZpb3VzbHkgbGl2ZWQgaGVyZVxuLy8gYW5kIGNhdXNlZCBUUyBjb25mdXNpb24gYXQgY29tcG9zaXRpb24gYm91bmRhcmllcyAoQ29tcG9zYWJsZVJ1bm5lciB2c1xuLy8gYWRkU3ViRmxvd0NoYXJ0IHBhcmFtZXRlcikuIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggbm93IGxpdmVzIGluIGJ1aWxkZXIvLlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBBbGlhcyBmb3IgU2VyaWFsaXplZFBpcGVsaW5lTm9kZSB1c2VkIGFzIGZ1bGwgc3RydWN0dXJlICovXG5leHBvcnQgdHlwZSBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgPSBTZXJpYWxpemVkUGlwZWxpbmVOb2RlICYge1xuICBicmFuY2hJZHM/OiBzdHJpbmdbXTtcbiAgc3ViZmxvd1N0cnVjdHVyZT86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaXRlcmF0aW9uQ291bnQ/OiBudW1iZXI7XG59O1xuIl19
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7OztBQWFILDhDQUE4RTtBQUFyRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSx1R0FBQSxXQUFXLE9BQUE7QUFlbEQsb0NBQW9DO0FBQ3BDLHdEQUF3RDtBQUMzQyxRQUFBLGFBQWEsR0FBWTtJQUNwQyxJQUFJLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3ZFLEdBQUcsRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDckUsS0FBSyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN6RSxLQUFLLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pFLElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDeEUsQ0FBQztBQW1ERiw4RUFBOEU7QUFDOUUsVUFBVTtBQUNWLDhFQUE4RTtBQUU5RTs7R0FFRztBQUNILElBQVksY0FLWDtBQUxELFdBQVksY0FBYztJQUN4Qix3RkFBd0Y7SUFDeEYsbUNBQWlCLENBQUE7SUFDakIseUVBQXlFO0lBQ3pFLHFDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFMVyxjQUFjLDhCQUFkLGNBQWMsUUFLekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHR5cGVzLnRzIOKAlCBBbGwgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIGVuZ2luZSBsaWJyYXJ5LlxuICpcbiAqIENlbnRyYWxpemVzIHR5cGUgZGVmaW5pdGlvbnMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICogRXZlcnkgaGFuZGxlciByZWNlaXZlcyBIYW5kbGVyRGVwcyAodGhlIERJIGJhZykgaW5zdGVhZCBvZiBpbXBvcnRpbmcgdGhlIHRyYXZlcnNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4uL21lbW9yeS9TdGFnZUNvbnRleHQuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93Q29udHJvbFR5cGUsIEZsb3dNZXNzYWdlIH0gZnJvbSAnLi4vbWVtb3J5L3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVQcm90ZWN0aW9uTW9kZSB9IGZyb20gJy4uL3Njb3BlL3Byb3RlY3Rpb24vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBEZWNpZGVyLCBTZWxlY3RvciwgU3RhZ2VOb2RlIH0gZnJvbSAnLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBJQ29udHJvbEZsb3dOYXJyYXRpdmUgfSBmcm9tICcuL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5cbi8vIFJlLWV4cG9ydCBTdGFnZU5vZGUgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IERlY2lkZXIsIFNlbGVjdG9yLCBTdGFnZU5vZGUgfSBmcm9tICcuL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5cbi8vIFJlLWV4cG9ydCBwYXVzZSB0eXBlcyBmcm9tIHBhdXNlLyBsaWJyYXJ5XG5leHBvcnQgdHlwZSB7IEZsb3djaGFydENoZWNrcG9pbnQsIFBhdXNhYmxlSGFuZGxlciwgUGF1c2VSZXN1bHQgfSBmcm9tICcuLi9wYXVzZS9pbmRleC5qcyc7XG5leHBvcnQgeyBpc1BhdXNlUmVzdWx0LCBpc1BhdXNlU2lnbmFsLCBQYXVzZVNpZ25hbCB9IGZyb20gJy4uL3BhdXNlL2luZGV4LmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2dnZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogTWluaW1hbCBsb2dnaW5nIGNvbnRyYWN0LiBNaXJyb3JzIENvbnNvbGUgQVBJIHN1YnNldC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ2dlciB7XG4gIGluZm8obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgbG9nKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGRlYnVnKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGVycm9yKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIHdhcm4obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbn1cblxuLyoqIERlZmF1bHQgY29uc29sZS1iYXNlZCBsb2dnZXIuICovXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtLSB0cml2aWFsIGNvbnNvbGUgZGVsZWdhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMb2dnZXI6IElMb2dnZXIgPSB7XG4gIGluZm86IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5pbmZvKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBsb2c6IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5sb2cobWVzc2FnZSwgLi4uYXJncyksXG4gIGRlYnVnOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZGVidWcobWVzc2FnZSwgLi4uYXJncyksXG4gIGVycm9yOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZXJyb3IobWVzc2FnZSwgLi4uYXJncyksXG4gIHdhcm46IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS53YXJuKG1lc3NhZ2UsIC4uLmFyZ3MpLFxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdGFnZSBGdW5jdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBDYWxsYmFjayB0aGF0IHJlY2VpdmVzIHRva2VucyBkdXJpbmcgc3RyZWFtaW5nLiAqL1xuZXhwb3J0IHR5cGUgU3RyZWFtQ2FsbGJhY2sgPSAodG9rZW46IHN0cmluZykgPT4gdm9pZDtcblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciBzdGFnZSBoYW5kbGVycy5cbiAqIC0gVE91dDogcmV0dXJuIHR5cGUgcHJvZHVjZWQgYnkgdGhlIHN0YWdlXG4gKiAtIFRTY29wZTogdGhlIHNjb3BlIG9iamVjdCBwYXNzZWQgdG8gdGhlIHN0YWdlXG4gKiAtIE9wdGlvbmFsIDNyZCBwYXJhbWV0ZXIgYHN0cmVhbUNhbGxiYWNrYCBpbmplY3RlZCBmb3Igc3RyZWFtaW5nIHN0YWdlcy5cbiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VGdW5jdGlvbjxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0gKFxuICBzY29wZTogVFNjb3BlLFxuICBicmVha1BpcGVsaW5lOiAoKSA9PiB2b2lkLFxuICBzdHJlYW1DYWxsYmFjaz86IFN0cmVhbUNhbGxiYWNrLFxuKSA9PiBQcm9taXNlPFRPdXQgfCB2b2lkPiB8IFRPdXQgfCB2b2lkO1xuXG4vKipcbiAqIFN0YWdlIGZ1bmN0aW9uIGZvciBwYXVzYWJsZSBzdGFnZXMg4oCUIHJldHVybiB2YWx1ZSBpcyB0aGUgcGF1c2UgZGF0YSAoYW55IHR5cGUpLlxuICogUmV0dXJuIG5vbi12b2lkIHRvIHBhdXNlLCByZXR1cm4gdm9pZCB0byBjb250aW51ZSBub3JtYWxseS5cbiAqL1xuZXhwb3J0IHR5cGUgUGF1c2FibGVTdGFnZUZ1bmN0aW9uPFRTY29wZSA9IGFueT4gPSAoXG4gIHNjb3BlOiBUU2NvcGUsXG4gIGJyZWFrUGlwZWxpbmU6ICgpID0+IHZvaWQsXG4pID0+IFByb21pc2U8dW5rbm93bj4gfCB1bmtub3duO1xuXG4vKiogRmFjdG9yeSB0aGF0IGNyZWF0ZXMgYSBzY29wZSBpbnN0YW5jZSBmb3IgZWFjaCBzdGFnZS4gKi9cbmV4cG9ydCB0eXBlIFNjb3BlRmFjdG9yeTxUU2NvcGUgPSBhbnk+ID0gKFxuICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gIHN0YWdlTmFtZTogc3RyaW5nLFxuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duLFxuICBleGVjdXRpb25FbnY/OiBFeGVjdXRpb25FbnYsXG4pID0+IFRTY29wZTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdHJlYW1pbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBTdHJlYW1Ub2tlbkhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgZnVsbFRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtSGFuZGxlcnMge1xuICBvblRva2VuPzogU3RyZWFtVG9rZW5IYW5kbGVyO1xuICBvblN0YXJ0PzogU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcjtcbiAgb25FbmQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN1YmZsb3dcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENvbnRyb2xzIGhvdyBhcnJheSB2YWx1ZXMgZnJvbSBvdXRwdXRNYXBwZXIgYXJlIG1lcmdlZCBpbnRvIHBhcmVudCBzY29wZS5cbiAqL1xuZXhwb3J0IGVudW0gQXJyYXlNZXJnZU1vZGUge1xuICAvKiogQXBwZW5kIHN1YmZsb3cgb3V0cHV0IHRvIGV4aXN0aW5nIHBhcmVudCBhcnJheTogWy4uLmV4aXN0aW5nLCAuLi52YWx1ZV0uIERlZmF1bHQuICovXG4gIENvbmNhdCA9ICdjb25jYXQnLFxuICAvKiogT3ZlcndyaXRlIHBhcmVudCBhcnJheSB3aXRoIHN1YmZsb3cgb3V0cHV0LiBVc2UgZm9yIER5bmFtaWMgbG9vcHMuICovXG4gIFJlcGxhY2UgPSAncmVwbGFjZScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUgPSBhbnksIFRTdWJmbG93SW5wdXQgPSBhbnksIFRTdWJmbG93T3V0cHV0ID0gYW55PiB7XG4gIGlucHV0TWFwcGVyPzogKHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUpID0+IFRTdWJmbG93SW5wdXQ7XG4gIC8qKlxuICAgKiBNYXBzIHN1YmZsb3cgb3V0cHV0IGJhY2sgaW50byBwYXJlbnQgc2NvcGUuXG4gICAqXG4gICAqICoqQXJyYXkgbWVyZ2UgYmVoYXZpb3IqKiBpcyBjb250cm9sbGVkIGJ5IGBhcnJheU1lcmdlYDpcbiAgICogLSBgJ2NvbmNhdCdgIChkZWZhdWx0KTogYFsuLi5leGlzdGluZywgLi4udmFsdWVdYCDigJQgcmV0dXJuIG9ubHkgKipkZWx0YSoqIGl0ZW1zXG4gICAqIC0gYCdyZXBsYWNlJ2A6IG92ZXJ3cml0ZXMgdGhlIHBhcmVudCB2YWx1ZSDigJQgcmV0dXJuIHRoZSBmdWxsIGFycmF5XG4gICAqXG4gICAqIFNjYWxhciB2YWx1ZXMgYXJlIGFsd2F5cyByZXBsYWNlZCByZWdhcmRsZXNzIG9mIGBhcnJheU1lcmdlYC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBEZWx0YSBtb2RlIChkZWZhdWx0KSDigJQgcmV0dXJuIG9ubHkgbmV3IGl0ZW1zLCBjb25jYXQgYXBwZW5kc1xuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgbWVzc2FnZXM6IHNmLm5ld01lc3NhZ2VzIH0pXG4gICAqXG4gICAqIC8vIFJlcGxhY2UgbW9kZSDigJQgcmV0dXJuIGZ1bGwgYXJyYXksIHBhcmVudCB2YWx1ZSBpcyBvdmVyd3JpdHRlblxuICAgKiAvLyBVc2VmdWwgaW4gRHluYW1pYyBsb29wcyB3aGVyZSB0aGUgc3ViZmxvdyByZWNvbXB1dGVzIHRoZSBmdWxsIHZhbHVlIGVhY2ggaXRlcmF0aW9uXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyB0b29sRGVzY3JpcHRpb25zOiBzZi50b29sRGVzY3JpcHRpb25zIH0pLFxuICAgKiBhcnJheU1lcmdlOiBBcnJheU1lcmdlTW9kZS5SZXBsYWNlLFxuICAgKlxuICAgKiAvLyBTY2FsYXJzIGFyZSBmaW5lIGluIGJvdGggbW9kZXMg4oCUIGFsd2F5cyByZXBsYWNlZFxuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgc3RhdHVzOiBzZi5yZXN1bHQsIGNvdW50OiBzZi50b3RhbCB9KVxuICAgKiBgYGBcbiAgICovXG4gIG91dHB1dE1hcHBlcj86IChzdWJmbG93T3V0cHV0OiBUU3ViZmxvd091dHB1dCwgcGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBDb250cm9scyBob3cgYXJyYXkgdmFsdWVzIGZyb20gb3V0cHV0TWFwcGVyIGFyZSBtZXJnZWQgaW50byBwYXJlbnQgc2NvcGUuXG4gICAqIEFwcGxpZXMgb25seSB0byB0b3AtbGV2ZWwgYXJyYXkga2V5cy4gTmVzdGVkIGFycmF5cyBpbnNpZGUgb2JqZWN0c1xuICAgKiBhbHdheXMgdXNlIGFwcGVuZCAoYXBwZW5kVG9BcnJheSkgcmVnYXJkbGVzcyBvZiB0aGlzIHNldHRpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFycmF5TWVyZ2VNb2RlLkNvbmNhdFxuICAgKi9cbiAgYXJyYXlNZXJnZT86IEFycmF5TWVyZ2VNb2RlO1xuXG4gIC8qKlxuICAgKiBTVFJVQ1RVUkUtT05MWTogdGhlIGRvd25zdHJlYW0gc3RhZ2UgaWQgdGhpcyBicmFuY2gncyBjb252ZXJnZW5jZSBlZGdlXG4gICAqIHBvaW50cyB0bywgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBcImNvbnZlcmdlIGF0IHRoZSBuZXh0IGxpbmVhciBzdGFnZS5cIlxuICAgKlxuICAgKiBXaGVuIGEgZm9yay9zZWxlY3Rvci9kZWNpZGVyIGJyYW5jaCBjYXJyaWVzIGBjb252ZXJnZUF0YCwgaXRzIHZpc3VhbGl6ZWRcbiAgICogYG5leHRgIGVkZ2UgaXMgZmlyZWQgdG8gdGhlIG5hbWVkIHN0YWdlIGluc3RlYWQgb2YgdG8gdGhlIHNoYXJlZFxuICAgKiBjb252ZXJnZW5jZSBub2RlIGl0cyBzaWJsaW5ncyB1c2UuIFRoaXMgZXhwcmVzc2VzIGFuIHVuZXF1YWwtZGVwdGggbWVyZ2VcbiAgICog4oCUIGUuZy4gYSBgdG9vbHNgIHNsb3QgdGhhdCBieXBhc3NlcyB0aGUgYG1lc3NhZ2VBUElgIGFzc2VtYmx5IG5vZGUgYW5kXG4gICAqIHBhaXJzIHdpdGggaXRzIG91dHB1dCBhdCBgY2FsbC1sbG1gIChzbyBgY2FsbC1sbG1gIHJlYWRzIGFzIGEgMi1wYXJlbnRcbiAgICogbWVyZ2UpLCBmYWl0aGZ1bCB0byB0aGUgQW50aHJvcGljIHdpcmUgcHJvdG9jb2wgKHN5c3RlbSttZXNzYWdlcyA9IHRoZVxuICAgKiBtZXNzYWdlIHBheWxvYWQ7IHRvb2xzID0gYSBzZXBhcmF0ZSB0b3AtbGV2ZWwgZmllbGQpLlxuICAgKlxuICAgKiAqKlRoaXMgYWZmZWN0cyB0aGUgU1RSVUNUVVJFL3RvcG9sb2d5IGdyYXBoIG9ubHkqKiDigJQgdGhlIHJ1bnRpbWUgaXNcbiAgICogdW5jaGFuZ2VkICh0aGUgYnJhbmNoJ3Mgb3V0cHV0cyByaWRlIHNoYXJlZCBzY29wZTsgdGhlIG5hbWVkIHRhcmdldCByZWFkc1xuICAgKiB0aGVtIHdoZW4gaXQgcnVucykuIEl0IGRvZXMgTk9UIGludHJvZHVjZSBhIGpvaW4gYmFycmllci4gVGhlIHRhcmdldCBpcyBhXG4gICAqIEZPUldBUkQgc3RhZ2UgKGFkZGVkIGxhdGVyIGluIHRoZSBjaGFpbiksIHNvIGl0IGlzIG5vdCB2YWxpZGF0ZWQgYXRcbiAgICogYnJhbmNoLWRlY2xhcmF0aW9uIHRpbWUuXG4gICAqL1xuICBjb252ZXJnZUF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgYW4gaW5uZXIgYHNjb3BlLiRicmVhayhyZWFzb24pYCBjYWxsIGluc2lkZSB0aGlzIHN1YmZsb3dcbiAgICogcHJvcGFnYXRlcyB1cCB0byB0aGUgcGFyZW50IOKAlCBpLmUuLCB0aGUgcGFyZW50J3MgYGJyZWFrRmxhZ2AgaXMgc2V0XG4gICAqIGFmdGVyIHRoZSBzdWJmbG93IGV4aXRzLCB0ZXJtaW5hdGluZyB0aGUgcGFyZW50J3Mgb3V0ZXIgbG9vcCB0b28uXG4gICAqXG4gICAqICoqRGVmYXVsdDogYGZhbHNlYCoqIChjdXJyZW50IGJlaGF2aW91ciDigJQgaW5uZXIgYnJlYWsgc3RvcHMgb25seSB0aGVcbiAgICogc3ViZmxvdzsgcGFyZW50IGNvbnRpbnVlcykuXG4gICAqXG4gICAqICMjIFdoZW4gdG8gdXNlXG4gICAqXG4gICAqIFNldCBgcHJvcGFnYXRlQnJlYWs6IHRydWVgIG9uIHN1YmZsb3cgbW91bnRzIHRoYXQgcmVwcmVzZW50XG4gICAqICoqdGVybWluYWwqKiBicmFuY2hlcyDigJQgXCJpZiB0aGlzIHN1YmZsb3cgZmlyZXMsIHRoZSBvdXRlciBsb29wIGlzXG4gICAqIGRvbmVcIi4gRXhhbXBsZXM6XG4gICAqXG4gICAqIC0gQSBodW1hbi1yZXZpZXcgcnVubmVyIHRoYXQgdGFrZXMgb3ZlciBmcm9tIGFuIGFnZW50J3MgdG9vbC1jYWxsaW5nXG4gICAqICAgbG9vcCBhbmQgcHJvZHVjZXMgdGhlIGZpbmFsIHJlc3BvbnNlLlxuICAgKiAtIEEgc2FmZXR5LWdhdGUgc3ViZmxvdyB0aGF0IGhhbHRzIHRoZSBvdXRlciB3b3JrZmxvdyB3aGVuIGEgcG9saWN5XG4gICAqICAgdmlvbGF0aW9uIGlzIGRldGVjdGVkLlxuICAgKiAtIEFuIGVycm9yLXJlY292ZXJ5IHN1YmZsb3cgdGhhdCByZXN0b3JlcyBzdGF0ZSBhbmQgdGhlbiB0ZXJtaW5hdGVzLlxuICAgKlxuICAgKiAjIyBTZW1hbnRpY3NcbiAgICpcbiAgICogMS4gSW5zaWRlIHRoZSBzdWJmbG93LCBhIHN0YWdlIGNhbGxzIGBzY29wZS4kYnJlYWsocmVhc29uKWAuXG4gICAqIDIuIFRoZSBzdWJmbG93J3Mgb3duIGV4ZWN1dGlvbiBzdG9wcyAobm9ybWFsIGAkYnJlYWtgIGJlaGF2aW91cikuXG4gICAqIDMuIGBTdWJmbG93RXhlY3V0b3JgIGluc3BlY3RzIHRoZSBzdWJmbG93J3MgZXhpdCBzdGF0ZS4gSWZcbiAgICogICAgYHByb3BhZ2F0ZUJyZWFrID09PSB0cnVlYCBBTkQgdGhlIGlubmVyIGJyZWFrIGZpcmVkLCBpdCBmb3J3YXJkc1xuICAgKiAgICB0aGUgYnJlYWsgKGFuZCBpdHMgcmVhc29uKSB0byB0aGUgcGFyZW50J3MgYGJyZWFrRmxhZ2AuXG4gICAqIDQuIFRoZSBwYXJlbnQgdHJhdmVyc2VyIHNlZXMgYHNob3VsZEJyZWFrYCBvbiBpdHMgbmV4dCBzdGVwIGFuZCBleGl0cy5cbiAgICogNS4gQSBgRmxvd1JlY29yZGVyLm9uQnJlYWtgIGV2ZW50IGZpcmVzIGF0IHRoZSBwYXJlbnQtbW91bnQgbGV2ZWwgd2l0aFxuICAgKiAgICBgcHJvcGFnYXRlZEZyb21TdWJmbG93YCA9IHRoZSBzdWJmbG93J3MgaWQgYW5kIHRoZSBpbm5lciByZWFzb24uXG4gICAqXG4gICAqICMjIFBhcmFsbGVsL2Zhbi1vdXRcbiAgICpcbiAgICogRm9sbG93cyB0aGUgZXhpc3RpbmcgbGlicmFyeSBydWxlIGluIGBDaGlsZHJlbkV4ZWN1dG9yYDogdGhlIHBhcmVudFxuICAgKiBicmVha3Mgb25seSB3aGVuICoqZXZlcnkqKiBjaGlsZCBvZiBhIGZvcmsgYnJva2UuIEEgc2luZ2xlXG4gICAqIGBwcm9wYWdhdGVCcmVhazogdHJ1ZWAgc3ViZmxvdyBjb250cmlidXRpbmcgaXRzIGJyZWFrIHRvIHRoZSBjb3VudFxuICAgKiBkb2VzIG5vdCBvbiBpdHMgb3duIHRlcm1pbmF0ZSB0aGUgcGFyZW50IGZhbi1vdXQuXG4gICAqXG4gICAqICMjIG91dHB1dE1hcHBlciBzdGlsbCBydW5zXG4gICAqXG4gICAqIFRoZSBzdWJmbG93J3MgYG91dHB1dE1hcHBlcmAgKGlmIHN1cHBsaWVkKSBBTFdBWVMgcnVucyBiZWZvcmUgdGhlXG4gICAqIGJyZWFrIHByb3BhZ2F0ZXMsIHNvIHRoZSBzdWJmbG93J3MgcGFydGlhbCBzdGF0ZSBpcyBzdGlsbCB3cml0dGVuIHRvXG4gICAqIHRoZSBwYXJlbnQgc2NvcGUuIFRoaXMgaXMgaW50ZW50aW9uYWwg4oCUIHRoZSB0eXBpY2FsIHVzZSBjYXNlIGlzIGFuXG4gICAqIFwiZXNjYWxhdGlvblwiIHN1YmZsb3cgd2hvc2Ugb3V0cHV0IElTIHRoZSBmaW5hbCBhbnN3ZXIgdGhhdCBuZWVkcyB0b1xuICAgKiBsYW5kIGluIHRoZSBwYXJlbnQgc2NvcGUgYmVmb3JlIHRoZSBvdXRlciBsb29wIHRlcm1pbmF0ZXMuIElmIHlvdVxuICAgKiB3YW50IHRvIHN1cHByZXNzIG91dHB1dCBtYXBwaW5nIG9uIGJyZWFrLCBjaGVjayB0aGUgYnJlYWsgc3RhdGVcbiAgICogaW5zaWRlIHlvdXIgYG91dHB1dE1hcHBlcmAgYW5kIHJldHVybiBge31gIGVhcmx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHJvcGFnYXRlQnJlYWs/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dSZXN1bHQge1xuICBzdWJmbG93SWQ6IHN0cmluZztcbiAgc3ViZmxvd05hbWU6IHN0cmluZztcbiAgdHJlZUNvbnRleHQ6IHtcbiAgICBnbG9iYWxDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBzdGFnZUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBoaXN0b3J5OiB1bmtub3duW107XG4gIH07XG4gIHBhcmVudFN0YWdlSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVTdHJ1Y3R1cmU/OiB1bmtub3duO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN1YmZsb3cgVHJhdmVyc2VyIEZhY3Rvcnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5IOKAlCBDcmVhdGVzIGEgRmxvd2NoYXJ0VHJhdmVyc2VyIGZvciBzdWJmbG93IGV4ZWN1dGlvbi5cbiAqXG4gKiBJbmplY3RlZCBpbnRvIFN1YmZsb3dFeGVjdXRvciB0byBicmVhayB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeTpcbiAqIEZsb3djaGFydFRyYXZlcnNlciDihpIgU3ViZmxvd0V4ZWN1dG9yIOKGkiBGbG93Y2hhcnRUcmF2ZXJzZXIuXG4gKlxuICogVGhlIGZhY3RvcnkgY2FwdHVyZXMgcGFyZW50IHRyYXZlcnNlciBjb25maWcgKHN0YWdlTWFwLCBzY29wZUZhY3RvcnksIG5hcnJhdGl2ZSwgZXRjLilcbiAqIGluIGEgY2xvc3VyZS4gU3ViZmxvd0V4ZWN1dG9yIGNhbGxzIGl0IHdpdGggc3ViZmxvdy1zcGVjaWZpYyBvdmVycmlkZXMgKHJvb3QsIHJ1bnRpbWUsIGlucHV0KS5cbiAqIFRoZSByZXR1cm5lZCB0cmF2ZXJzZXIgdXNlcyB0aGUgU0FNRSA3LXBoYXNlIGFsZ29yaXRobSBhcyB0aGUgdG9wLWxldmVsIHRyYXZlcnNlcixcbiAqIHNvIGRlY2lkZXJzLCBzZWxlY3RvcnMsIGxvb3BzLCBsYXp5IHN1YmZsb3dzLCBhbmQgYWJvcnQgc2lnbmFscyBhbGwgd29yayBpbnNpZGUgc3ViZmxvd3MuXG4gKi9cbmV4cG9ydCB0eXBlIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAob3B0aW9uczoge1xuICAvKiogUm9vdCBub2RlIG9mIHRoZSBzdWJmbG93ICh3aXRoIGlzU3ViZmxvd1Jvb3Qgc3RyaXBwZWQpLiAqL1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgLyoqIElzb2xhdGVkIGV4ZWN1dGlvbiBydW50aW1lIGZvciB0aGUgc3ViZmxvdy4gKi9cbiAgZXhlY3V0aW9uUnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWU7XG4gIC8qKiBNYXBwZWQgaW5wdXQgZnJvbSBwYXJlbnQgc2NvcGUgKGJlY29tZXMgcmVhZE9ubHlDb250ZXh0IGZvciBzdGFnZXMpLiAqL1xuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duO1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIOKAlCB1c2VkIGFzIGJyYW5jaFBhdGggZm9yIG5hcnJhdGl2ZSBjb250ZXh0LiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG59KSA9PiBTdWJmbG93VHJhdmVyc2VySGFuZGxlPFRPdXQsIFRTY29wZT47XG5cbi8qKlxuICogSGFuZGxlIHJldHVybmVkIGJ5IFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5LlxuICogUHJvdmlkZXMgZXhlY3V0ZSgpICsgYWNjZXNzIHRvIG5lc3RlZCBzdWJmbG93IHJlc3VsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1RyYXZlcnNlckhhbmRsZTxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqIEV4ZWN1dGUgdGhlIHN1YmZsb3cncyBncmFwaCB1c2luZyB0aGUgZnVsbCA3LXBoYXNlIHRyYXZlcnNhbCBhbGdvcml0aG0uICovXG4gIGV4ZWN1dGUoKTogUHJvbWlzZTxUcmF2ZXJzYWxSZXN1bHQ+O1xuICAvKiogQ29sbGVjdCBuZXN0ZWQgc3ViZmxvdyByZXN1bHRzIChmcm9tIHN1YmZsb3dzIG1vdW50ZWQgaW5zaWRlIHRoaXMgc3ViZmxvdykuICovXG4gIGdldFN1YmZsb3dSZXN1bHRzKCk6IE1hcDxzdHJpbmcsIFN1YmZsb3dSZXN1bHQ+O1xuICAvKipcbiAgICogRmluYWwgYnJlYWsgc3RhdGUgb2YgdGhlIHN1YmZsb3cgYWZ0ZXIgYGV4ZWN1dGUoKWAgcmV0dXJucy5cbiAgICpcbiAgICogICAtIGBzaG91bGRCcmVhazogdHJ1ZWAgIOKGkiBhIHN0YWdlIGluc2lkZSB0aGUgc3ViZmxvdyBjYWxsZWRcbiAgICogICAgIGBzY29wZS4kYnJlYWsocmVhc29uKWAsIHN0b3BwaW5nIHRoZSBzdWJmbG93J3Mgb3duIHRyYXZlcnNhbC5cbiAgICogICAtIGByZWFzb25gICAgICAgICAgICAgIOKGkiB0aGUgb3B0aW9uYWwgc3RyaW5nIHBhc3NlZCB0byBgJGJyZWFrYC5cbiAgICpcbiAgICogVXNlZCBieSBgU3ViZmxvd0V4ZWN1dG9yYCB0byBpbXBsZW1lbnQgYFN1YmZsb3dNb3VudE9wdGlvbnMucHJvcGFnYXRlQnJlYWtgOlxuICAgKiBpZiB0aGUgbW91bnQgb3B0cyBpbiBBTkQgdGhlIHN1YmZsb3cgYnJva2UsIHRoZSBwYXJlbnQncyBicmVhayBmbGFnIGlzXG4gICAqIGZvcndhcmRlZC5cbiAgICovXG4gIGdldEJyZWFrU3RhdGUoKTogeyBzaG91bGRCcmVhazogYm9vbGVhbjsgcmVhc29uPzogc3RyaW5nIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIFJ1bnRpbWUgSW50ZXJmYWNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBJRXhlY3V0aW9uUnVudGltZSDigJQgSW50ZXJmYWNlIGZvciB0aGUgcnVudGltZSBlbnZpcm9ubWVudC5cbiAqXG4gKiBEZWZpbmVzIHRoZSBjb250cmFjdCB0aGF0IGVuZ2luZSBoYW5kbGVycyBuZWVkIGZyb20gdGhlIHJ1bm5lciBsYXllcixcbiAqIGF2b2lkaW5nIGNpcmN1bGFyIGltcG9ydHMgYmV0d2VlbiBlbmdpbmUvIGFuZCBydW5uZXIvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFeGVjdXRpb25SdW50aW1lIHtcbiAgZ2xvYmFsU3RvcmU6IHsgZ2V0U3RhdGUoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcbiAgcm9vdFN0YWdlQ29udGV4dDogU3RhZ2VDb250ZXh0O1xuICBleGVjdXRpb25IaXN0b3J5OiB7IGxpc3QoKTogdW5rbm93bltdIH07XG4gIGdldFNuYXBzaG90KG9wdGlvbnM/OiB7IHJlZGFjdD86IGJvb2xlYW4gfSk6IHtcbiAgICBzaGFyZWRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZXhlY3V0aW9uVHJlZTogdW5rbm93bjtcbiAgICBjb21taXRMb2c6IHVua25vd25bXTtcbiAgICBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJlY29yZGVycz86IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0+O1xuICB9O1xuICBzZXRSb290T2JqZWN0KHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICBnZXRQaXBlbGluZXMoKTogc3RyaW5nW107XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIEVudmlyb25tZW50IOKAlCByZWFkLW9ubHksIHByb3BhZ2F0ZXMgdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFeGVjdXRpb25FbnYg4oCUIGluZnJhc3RydWN0dXJlIHZhbHVlcyB0aGF0IHByb3BhZ2F0ZSB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnMuXG4gKlxuICogTGlrZSBgcHJvY2Vzcy5lbnZgIGZvciBmbG93Y2hhcnRzOiByZWFkLW9ubHksIGluaGVyaXRlZCBieSBjaGlsZCBleGVjdXRvcnMsXG4gKiBpbmZyYXN0cnVjdHVyZS1vbmx5IChub3QgYnVzaW5lc3MgbG9naWMpLlxuICpcbiAqIExpdG11cyB0ZXN0OiBDcmVhdGVkIGV4dGVybmFsIHRvIHRoZSBmbG93Y2hhcnQgKyBwYXNzZWQgaW4gZm9yIGV4ZWN1dGlvbiA9IGVudi5cbiAqIEJ1c2luZXNzIGNvbmZpZyBmb3IgYSBzcGVjaWZpYyBmbG93Y2hhcnQgPSBhcmdzIChnZXRBcmdzKCkpLlxuICpcbiAqIEludGVudGlvbmFsbHkgYSBjbG9zZWQgdHlwZSDigJQgbm90IGV4dGVuc2libGUgdG8gcHJldmVudCBjb3VwbGluZyBiZXR3ZWVuXG4gKiBwYXJlbnQgYW5kIGNoaWxkIGZsb3djaGFydHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0aW9uRW52IHtcbiAgLyoqIEFib3J0U2lnbmFsIGZvciBjb29wZXJhdGl2ZSBjYW5jZWxsYXRpb24gYWNyb3NzIG5lc3RlZCBleGVjdXRvcnMuICovXG4gIHJlYWRvbmx5IHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKiogVGltZW91dCBidWRnZXQgaW4gbWlsbGlzZWNvbmRzLiAqL1xuICByZWFkb25seSB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBUcmFjZSBpZGVudGlmaWVyIGZvciBkaXN0cmlidXRlZCB0cmFjaW5nIC8gb2JzZXJ2YWJpbGl0eS4gKi9cbiAgcmVhZG9ubHkgdHJhY2VJZD86IHN0cmluZztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIYW5kbGVyIERlcGVuZGVuY2llcyAoREkgYmFnKSDigJQgd2FzIFBpcGVsaW5lQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogSGFuZGxlckRlcHMg4oCUIERlcGVuZGVuY3kgaW5qZWN0aW9uIGJhZyBwYXNzZWQgdG8gYWxsIGhhbmRsZXIgbW9kdWxlcy5cbiAqXG4gKiBQcm92aWRlcyBzaGFyZWQgc3RhdGUgKHN0YWdlTWFwLCBydW50aW1lLCBzY29wZUZhY3RvcnksIGV0Yy4pIHdpdGhvdXRcbiAqIGhhbmRsZXJzIG5lZWRpbmcgdG8gaW1wb3J0IHRoZSB0cmF2ZXJzZXIgZGlyZWN0bHkuIEF2b2lkcyBjaXJjdWxhciBkZXBzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXJEZXBzPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBzdGFnZU1hcDogTWFwPHN0cmluZywgU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PjtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIGV4ZWN1dGlvblJ1bnRpbWU6IElFeGVjdXRpb25SdW50aW1lO1xuICBzY29wZUZhY3Rvcnk6IFNjb3BlRmFjdG9yeTxUU2NvcGU+O1xuICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT47XG4gIHRocm90dGxpbmdFcnJvckNoZWNrZXI/OiAoZXJyb3I6IHVua25vd24pID0+IGJvb2xlYW47XG4gIHN0cmVhbUhhbmRsZXJzPzogU3RyZWFtSGFuZGxlcnM7XG4gIHNjb3BlUHJvdGVjdGlvbk1vZGU6IFNjb3BlUHJvdGVjdGlvbk1vZGU7XG4gIHJlYWRPbmx5Q29udGV4dD86IHVua25vd247XG4gIC8qKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHByb3BhZ2F0ZXMgdG8gc3ViZmxvd3MgYXV0b21hdGljYWxseS4gKi9cbiAgZXhlY3V0aW9uRW52PzogRXhlY3V0aW9uRW52O1xuICBuYXJyYXRpdmVHZW5lcmF0b3I6IElDb250cm9sRmxvd05hcnJhdGl2ZTtcbiAgbG9nZ2VyOiBJTG9nZ2VyO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqXG4gICAqIE9uIHJlc3VtZSwgdGhlIHBlci1zdWJmbG93IHNjb3BlIGNhcHR1cmVzIGZyb20gdGhlIGNoZWNrcG9pbnQuXG4gICAqIEtleWVkIGJ5IHBhdGgtcHJlZml4ZWQgYHN1YmZsb3dJZGAgKG1hdGNoZXMgYFBhdXNlU2lnbmFsLnN1YmZsb3dQYXRoYCkuXG4gICAqXG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIGNvbnN1bHRzIHRoaXMgb24gZW50cnk6IGlmIGEga2V5IG1hdGNoZXMgdGhlXG4gICAqIGN1cnJlbnQgc3ViZmxvdyBpZCwgdGhlIG5lc3RlZCBydW50aW1lIGlzIHNlZWRlZCBmcm9tIHRoaXMgc3RhdGVcbiAgICogYW5kIHRoZSBpbnB1dE1hcHBlciBpcyBTS0lQUEVEICh0aGUgY2FwdHVyZWQgc3RhdGUgYWxyZWFkeVxuICAgKiByZWZsZWN0cyBwb3N0LWlucHV0IHByZS1wYXVzZSBtZW1vcnkpLiBUaGlzIGlzIHdoYXQgbWFrZXNcbiAgICogY3Jvc3MtZXhlY3V0b3IgcmVzdW1lIHdvcmsgZm9yIHBhdXNlcyBJTlNJREUgYSBzdWJmbG93LlxuICAgKlxuICAgKiBVbmRlZmluZWQgb24gbm9ybWFsIGBydW4oKWAgcGF0aHMg4oCUIG9ubHkgdGhlIHJlc3VtZSBwYXRoIHNldHMgaXQuXG4gICAqL1xuICBzdWJmbG93U3RhdGVzRm9yUmVzdW1lPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufVxuXG4vKiogT3B0aW9ucyBmb3IgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bk9wdGlvbnMge1xuICAvKiogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbi4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gQ3JlYXRlcyBhbiBpbnRlcm5hbCBBYm9ydENvbnRyb2xsZXIuICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFJ1bnRpbWUgaW5wdXQgZGF0YSBmb3IgdGhlIHBpcGVsaW5lLlxuICAgKiBCZWNvbWVzIHRoZSByZWFkT25seUNvbnRleHQgYWNjZXNzaWJsZSB2aWEgYHNjb3BlLmdldEFyZ3MoKWAuXG4gICAqIFN0YWdlcyBjYW5ub3Qgb3ZlcndyaXRlIHRoZXNlIGtleXMgd2l0aCBgc2V0VmFsdWUoKWAuXG4gICAqL1xuICBpbnB1dD86IHVua25vd247XG4gIC8qKlxuICAgKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSBpbmZyYXN0cnVjdHVyZSB2YWx1ZXMgdGhhdCBwcm9wYWdhdGVcbiAgICogdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzIChsaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHMpLlxuICAgKiBBY2Nlc3NpYmxlIHZpYSBgc2NvcGUuZ2V0RW52KClgLiBJbmhlcml0ZWQgYnkgc3ViZmxvd3MgYXV0b21hdGljYWxseS5cbiAgICovXG4gIGVudj86IEV4ZWN1dGlvbkVudjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBtYXhpbXVtIG5lc3RlZCBgZXhlY3V0ZU5vZGVgIGRlcHRoIGZvciB0aGlzIHJ1bi5cbiAgICogRGVmYXVsdHMgdG8gYEZsb3djaGFydFRyYXZlcnNlci5NQVhfRVhFQ1VURV9ERVBUSGAgKDUwMCkuXG4gICAqXG4gICAqIERlcHRoIGNvdW50cyBUUkVFIG5lc3Rpbmcgb25seSDigJQgZm9yayBjaGlsZHJlbiwgZGVjaWRlci9zZWxlY3RvciBicmFuY2hcbiAgICogZGlzcGF0Y2gsIHJlY3Vyc2l2ZSBjb21wb3NpdGlvbi4gTGluZWFyIGNoYWlucyBhbmQgbG9vcCBpdGVyYXRpb25zIHJ1blxuICAgKiBvbiBhIGZsYXQgdHJhbXBvbGluZSBhbmQgbmV2ZXIgY29uc3VtZSBkZXB0aCwgc28gdGhpcyByYXJlbHkgbmVlZHNcbiAgICogcmFpc2luZy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4RGVwdGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgbWF4aW11bSBsb29wIGl0ZXJhdGlvbnMgcGVyIG5vZGUgZm9yIHRoaXMgcnVuICh0aGVcbiAgICogYENvbnRpbnVhdGlvblJlc29sdmVyYCBpbmZpbml0ZS1sb29wIGd1YXJkKS4gRGVmYXVsdHMgdG8gMTAwMC5cbiAgICogVGhpcyBpcyB0aGUgYmluZGluZyBjb25zdHJhaW50IGZvciBsb29wLWhlYXZ5IHBpcGVsaW5lcyDigJQgcmFpc2UgaXQgZm9yXG4gICAqIGxlZ2l0aW1hdGVseSBsb25nIGxvb3BzIChgbG9vcFRvYCBjaGFpbnMgcnVuIHdpdGggYSBmbGF0IHN0YWNrLCBzbyBoaWdoXG4gICAqIHZhbHVlcyBhcmUgc2FmZTsgbWVtb3J5IGZvciBzdGF0ZS9uYXJyYXRpdmUgc3RpbGwgZ3Jvd3MgcGVyIGl0ZXJhdGlvbikuXG4gICAqIEFsc28gYm91bmRzIHRoZSBydW4tdG90YWwgY2hhaW4gb2YgZnVuY3Rpb24tYmVhcmluZyBkeW5hbWljIGBuZXh0YFxuICAgKiBjb250aW51YXRpb25zIChmcmVzaCBub2RlcyByZXR1cm5lZCBmcm9tIHN0YWdlcykg4oCUIGEgcnVuYXdheSBkeW5hbWljXG4gICAqIGNoYWluIGVycm9ycyBpbnN0ZWFkIG9mIHJ1bm5pbmcgZm9yZXZlci5cbiAgICogUHJvcGFnYXRlcyB0byBzdWJmbG93cy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4SXRlcmF0aW9ucz86IG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGbG93IENvbnRyb2wgTmFycmF0aXZlIOKAlCBjYW5vbmljYWwgZGVmaW5pdGlvbnMgbGl2ZSBpbiBtZW1vcnkvdHlwZXMudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdW50aW1lIFN0cnVjdHVyZSBNZXRhZGF0YSAodXNlZCBieSBSdW50aW1lU3RydWN0dXJlTWFuYWdlcilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVTdHJ1Y3R1cmVNZXRhZGF0YSB7XG4gIHR5cGU6ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzRHluYW1pYz86IGJvb2xlYW47XG4gIGlzTG9vcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIE5vZGUgUmVzdWx0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgTm9kZVJlc3VsdFR5cGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHJlc3VsdDogdW5rbm93bjtcbiAgaXNFcnJvcj86IGJvb2xlYW47XG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV4ZWN1dGlvbiBSZXNwb25zZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIEJyYW5jaFJlc3VsdCA9IHtcbiAgcmVzdWx0OiBzdHJpbmcgfCBFcnJvcjtcbiAgaXNFcnJvcjogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEJyYW5jaFJlc3VsdHMgPSB7IFticmFuY2hJZDogc3RyaW5nXTogQnJhbmNoUmVzdWx0IH07XG5leHBvcnQgdHlwZSBUcmF2ZXJzYWxSZXN1bHQgPSBCcmFuY2hSZXN1bHRzIHwgc3RyaW5nIHwgRXJyb3I7XG5cbi8qKiBSZXR1cm5lZCBieSBydW4oKS9yZXN1bWUoKSB3aGVuIGV4ZWN1dGlvbiBwYXVzZXMuICovXG5leHBvcnQgdHlwZSBQYXVzZWRSZXN1bHQgPSB7XG4gIHJlYWRvbmx5IHBhdXNlZDogdHJ1ZTtcbiAgcmVhZG9ubHkgY2hlY2twb2ludDogaW1wb3J0KCcuLi9wYXVzZS90eXBlcy5qcycpLkZsb3djaGFydENoZWNrcG9pbnQ7XG59O1xuXG4vKiogRnVsbCByZXR1cm4gdHlwZSBvZiBGbG93Q2hhcnRFeGVjdXRvci5ydW4oKSBhbmQgcmVzdW1lKCkuICovXG5leHBvcnQgdHlwZSBFeGVjdXRvclJlc3VsdCA9IFRyYXZlcnNhbFJlc3VsdCB8IFBhdXNlZFJlc3VsdDtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZXJpYWxpemVkIFBpcGVsaW5lIFN0cnVjdHVyZSAoZm9yIHZpc3VhbGl6YXRpb24pXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVkUGlwZWxpbmVOb2RlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICB0eXBlPzpcbiAgICB8ICdzdGFnZSdcbiAgICB8ICdkZWNpZGVyJ1xuICAgIHwgJ3NlbGVjdG9yJ1xuICAgIHwgJ2ZvcmsnXG4gICAgfCAnc3RyZWFtaW5nJ1xuICAgIHwgJ3N1YmZsb3cnXG4gICAgfCAnbG9vcCdcbiAgICB8ICd1c2VyJ1xuICAgIHwgJ3Rvb2wnXG4gICAgfCAnZnVuY3Rpb24nXG4gICAgfCAnc2VxdWVuY2UnO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBTZXJpYWxpemVkUGlwZWxpbmVOb2RlW107XG4gIG5leHQ/OiBTZXJpYWxpemVkUGlwZWxpbmVOb2RlO1xuICBicmFuY2hlcz86IFJlY29yZDxzdHJpbmcsIFNlcmlhbGl6ZWRQaXBlbGluZU5vZGU+O1xuICBoYXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaGFzU2VsZWN0b3I/OiBib29sZWFuO1xuICBoYXNTdWJ0cmVlPzogYm9vbGVhbjtcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzTG9vcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgaXNEeW5hbWljPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgdGhpcyBzdGFnZSBjYW4gcGF1c2UgZXhlY3V0aW9uIChQYXVzYWJsZUhhbmRsZXIgcGF0dGVybikuICovXG4gIGlzUGF1c2FibGU/OiBib29sZWFuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEZsb3dDaGFydCBpcyBkZWZpbmVkIGluIGAuLi9idWlsZGVyL3R5cGVzLnRzYC4gVGhlIGVuZ2luZSBsYXllciBjb25zdW1lcyBpdFxuLy8gdmlhIGltcG9ydCBmcm9tIHRoZXJlLiBBIGR1cGxpY2F0ZSBtaW5pbWFsIGRlZmluaXRpb24gcHJldmlvdXNseSBsaXZlZCBoZXJlXG4vLyBhbmQgY2F1c2VkIFRTIGNvbmZ1c2lvbiBhdCBjb21wb3NpdGlvbiBib3VuZGFyaWVzIChDb21wb3NhYmxlUnVubmVyIHZzXG4vLyBhZGRTdWJGbG93Q2hhcnQgcGFyYW1ldGVyKS4gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBub3cgbGl2ZXMgaW4gYnVpbGRlci8uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEFsaWFzIGZvciBTZXJpYWxpemVkUGlwZWxpbmVOb2RlIHVzZWQgYXMgZnVsbCBzdHJ1Y3R1cmUgKi9cbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGUgJiB7XG4gIGJyYW5jaElkcz86IHN0cmluZ1tdO1xuICBzdWJmbG93U3RydWN0dXJlPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBpdGVyYXRpb25Db3VudD86IG51bWJlcjtcbn07XG4iXX0=
|