@pipeline-builder/pipeline-core 3.4.143 → 3.4.144
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.
|
@@ -121,8 +121,8 @@ export function loadBillingConfig() {
|
|
|
121
121
|
|| 'For individual power users and production workloads',
|
|
122
122
|
tier: 'pro',
|
|
123
123
|
prices: {
|
|
124
|
-
monthly: envCents(process.env.BILLING_PLAN_PRO_MONTHLY,
|
|
125
|
-
annual: envCents(process.env.BILLING_PLAN_PRO_ANNUAL,
|
|
124
|
+
monthly: envCents(process.env.BILLING_PLAN_PRO_MONTHLY, 3900),
|
|
125
|
+
annual: envCents(process.env.BILLING_PLAN_PRO_ANNUAL, 39000),
|
|
126
126
|
},
|
|
127
127
|
features: parseFeatures(process.env.BILLING_PLAN_PRO_FEATURES, DEFAULT_PRO_FEATURES),
|
|
128
128
|
isActive: true,
|
|
@@ -136,8 +136,8 @@ export function loadBillingConfig() {
|
|
|
136
136
|
|| 'For teams collaborating on shared pipelines',
|
|
137
137
|
tier: 'team',
|
|
138
138
|
prices: {
|
|
139
|
-
monthly: envCents(process.env.BILLING_PLAN_TEAM_MONTHLY,
|
|
140
|
-
annual: envCents(process.env.BILLING_PLAN_TEAM_ANNUAL,
|
|
139
|
+
monthly: envCents(process.env.BILLING_PLAN_TEAM_MONTHLY, 7900),
|
|
140
|
+
annual: envCents(process.env.BILLING_PLAN_TEAM_ANNUAL, 79000),
|
|
141
141
|
},
|
|
142
142
|
features: parseFeatures(process.env.BILLING_PLAN_TEAM_FEATURES, DEFAULT_TEAM_FEATURES),
|
|
143
143
|
isActive: true,
|
|
@@ -196,8 +196,10 @@ export function loadBillingConfig() {
|
|
|
196
196
|
* Defaults:
|
|
197
197
|
* - "Analytics Suite" — Advanced Reporting (DORA) + Team Usage Analytics, each
|
|
198
198
|
* $30/mo, together $42/mo ($420/yr) → a $18/mo credit (~30% off).
|
|
199
|
-
* - "Team Growth Bundle" — ≥
|
|
200
|
-
* together $
|
|
199
|
+
* - "Team Growth Bundle" — ≥5 Seats ($19.99 ea) + Team Usage Analytics ($30),
|
|
200
|
+
* basket $129.95/mo → together $90.99/mo ($909.90/yr) → a ~$38.96/mo credit (~30% off).
|
|
201
|
+
* - "Scale Bundle" — API Pack ($19.99) + Storage Pack ($19.99), basket $39.98/mo
|
|
202
|
+
* → together $27.99/mo ($279.90/yr) → a ~$11.99/mo credit (~30% off).
|
|
201
203
|
* Prices env-overridable via `BILLING_COMBO_<ID>_MONTHLY` / `_ANNUAL`.
|
|
202
204
|
*/
|
|
203
205
|
function loadComboDiscounts(bundles) {
|
|
@@ -215,9 +217,14 @@ function loadComboDiscounts(bundles) {
|
|
|
215
217
|
});
|
|
216
218
|
const combos = [
|
|
217
219
|
c('analytics_suite', 'Analytics Suite', ['advanced_reporting', 'team_usage_analytics'], 4200, 42000, 0),
|
|
218
|
-
|
|
220
|
+
// Team Growth — ≥5 Seats ($19.99 ea) + Team Usage Analytics ($30). Basket
|
|
221
|
+
// 5×$19.99 + $30 = $129.95/mo → bundled $90.99/mo (~30% off, ~$38.96 credit).
|
|
222
|
+
c('team_growth', 'Team Growth Bundle', ['seat', 'team_usage_analytics'], 9099, 90990, 1, { seat: 5 }),
|
|
219
223
|
// Compliance Suite — Standard + Advanced at 30% off ($908.60/yr vs $1,298 list).
|
|
220
224
|
c('compliance_suite', 'Compliance Suite', ['compliance_standard', 'compliance_advanced'], 9086, 90860, 2),
|
|
225
|
+
// Scale Bundle — API Pack ($19.99) + Storage Pack ($19.99). Basket $39.98/mo →
|
|
226
|
+
// bundled $27.99/mo (~30% off, ~$11.99 credit). Both members all-tier.
|
|
227
|
+
c('scale_bundle', 'Scale Bundle', ['api_pack', 'storage_pack'], 2799, 27990, 3),
|
|
221
228
|
];
|
|
222
229
|
warnOnNonDiscountCombos(combos, bundles);
|
|
223
230
|
return combos;
|
|
@@ -244,7 +251,7 @@ const BUNDLE_GB = 1024 * 1024 * 1024;
|
|
|
244
251
|
/**
|
|
245
252
|
* Apply a per-bundle grant override. Each stackable pack grants exactly one
|
|
246
253
|
* quota dimension, so `BILLING_BUNDLE_<ID>_GRANT` retunes that amount (e.g. make
|
|
247
|
-
* the
|
|
254
|
+
* the Plugin Pack grant +50 instead of +25) — parallel to the price overrides.
|
|
248
255
|
* Ignored for multi-dimension or feature-only (empty-grant) bundles, and for a
|
|
249
256
|
* malformed/negative value.
|
|
250
257
|
*/
|
|
@@ -280,6 +287,31 @@ function applyTiersOverride(id, defaultTiers) {
|
|
|
280
287
|
return defaultTiers;
|
|
281
288
|
}
|
|
282
289
|
}
|
|
290
|
+
/**
|
|
291
|
+
* Apply a per-bundle volume-tier override. `BILLING_BUNDLE_<ID>_VOLUME_TIERS` is a
|
|
292
|
+
* JSON array of `{ minQuantity, discountPercent }` (e.g.
|
|
293
|
+
* `[{"minQuantity":5,"discountPercent":10}]`) — parallel to the price/grant/tier
|
|
294
|
+
* overrides. Falls back to `defaultTiers` when unset, malformed, or containing an
|
|
295
|
+
* invalid entry (minQuantity ≥ 1, 0 < discountPercent ≤ 100). Sorted ascending by
|
|
296
|
+
* minQuantity so the "highest matching tier wins" lookup is deterministic.
|
|
297
|
+
*/
|
|
298
|
+
function applyVolumeTiersOverride(id, defaultTiers) {
|
|
299
|
+
const raw = process.env[`BILLING_BUNDLE_${id.toUpperCase()}_VOLUME_TIERS`];
|
|
300
|
+
const sortAsc = (t) => [...t].sort((a, b) => a.minQuantity - b.minQuantity);
|
|
301
|
+
if (!raw)
|
|
302
|
+
return defaultTiers ? sortAsc(defaultTiers) : undefined;
|
|
303
|
+
try {
|
|
304
|
+
const parsed = JSON.parse(raw);
|
|
305
|
+
if (!Array.isArray(parsed) || parsed.length === 0)
|
|
306
|
+
return defaultTiers ? sortAsc(defaultTiers) : undefined;
|
|
307
|
+
const valid = parsed.filter((t) => t && typeof t.minQuantity === 'number' && t.minQuantity >= 1
|
|
308
|
+
&& typeof t.discountPercent === 'number' && t.discountPercent > 0 && t.discountPercent <= 100);
|
|
309
|
+
return valid.length === parsed.length ? sortAsc(valid) : (defaultTiers ? sortAsc(defaultTiers) : undefined);
|
|
310
|
+
}
|
|
311
|
+
catch {
|
|
312
|
+
return defaultTiers ? sortAsc(defaultTiers) : undefined;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
283
315
|
/**
|
|
284
316
|
* Purchasable add-on bundles (docs/billing-bundles.md §3). Grants are per-unit
|
|
285
317
|
* deltas on QuotaTierLimits; prices (cents, `BILLING_BUNDLE_<ID>_MONTHLY` /
|
|
@@ -292,6 +324,7 @@ function loadBundles() {
|
|
|
292
324
|
// Resolve monthly first so the annual fallback tracks a `_MONTHLY` override
|
|
293
325
|
// (annual ≈ 10× the *effective* monthly, not the hardcoded default).
|
|
294
326
|
const resolvedMonthly = envCents(process.env[`BILLING_BUNDLE_${id.toUpperCase()}_MONTHLY`], monthly);
|
|
327
|
+
const volumeTiers = applyVolumeTiersOverride(id, extra.volumeTiers);
|
|
295
328
|
return {
|
|
296
329
|
id,
|
|
297
330
|
name,
|
|
@@ -300,6 +333,7 @@ function loadBundles() {
|
|
|
300
333
|
...(extra.features ? { features: extra.features } : {}),
|
|
301
334
|
...(extra.maxQuantity !== undefined ? { maxQuantity: extra.maxQuantity } : {}),
|
|
302
335
|
...(extra.requires ? { requires: extra.requires } : {}),
|
|
336
|
+
...(volumeTiers ? { volumeTiers } : {}),
|
|
303
337
|
prices: {
|
|
304
338
|
monthly: resolvedMonthly,
|
|
305
339
|
annual: envCents(process.env[`BILLING_BUNDLE_${id.toUpperCase()}_ANNUAL`], resolvedMonthly * 10),
|
|
@@ -314,18 +348,17 @@ function loadBundles() {
|
|
|
314
348
|
// is the billing-off tier and buys nothing) — so this is exactly STANDARD_TIERS.
|
|
315
349
|
const ALL = [...STANDARD_TIERS];
|
|
316
350
|
const bundles = [
|
|
317
|
-
//
|
|
318
|
-
//
|
|
319
|
-
// (
|
|
320
|
-
//
|
|
321
|
-
//
|
|
322
|
-
|
|
323
|
-
b('
|
|
324
|
-
b('
|
|
325
|
-
b('
|
|
326
|
-
b('
|
|
327
|
-
b('
|
|
328
|
-
b('storage_pack', 'Storage Pack (+50 GB)', '50 GB additional registry storage', { storageBytes: 50 * BUNDLE_GB }, 2500, ALL, 5),
|
|
351
|
+
// `seat` and `pipeline_pack` are the tier differentiators, so both are Team+
|
|
352
|
+
// ONLY — a single-seat Developer/Pro can't cheaply stack seats/pipelines to
|
|
353
|
+
// undercut Team (3 seats / 6 pipelines); they must upgrade. `seat` is granular
|
|
354
|
+
// (per-seat) with volume tiers (5/15/40 → 10/20/30%). The other capacity packs
|
|
355
|
+
// (plugin/api/ai/storage) are NOT differentiators, so they stay all-tier.
|
|
356
|
+
b('seat', 'Member Seat', '1 additional member seat', { seats: 1 }, 1999, ['team', 'enterprise'], 0, { volumeTiers: [{ minQuantity: 5, discountPercent: 10 }, { minQuantity: 15, discountPercent: 20 }, { minQuantity: 40, discountPercent: 30 }] }),
|
|
357
|
+
b('pipeline_pack', 'Pipeline Pack (+5)', '5 additional pipelines', { pipelines: 5 }, 1500, ['team', 'enterprise'], 1),
|
|
358
|
+
b('plugin_pack', 'Plugin Pack (+25)', '25 additional plugins', { plugins: 25 }, 1000, ALL, 2),
|
|
359
|
+
b('api_pack', 'API Pack (+100k)', '100,000 additional API calls / period', { apiCalls: 100_000 }, 1999, ALL, 3),
|
|
360
|
+
b('ai_pack', 'AI Pack (+2.5k)', '2,500 additional AI calls / period', { aiCalls: 2500 }, 1999, ALL, 4),
|
|
361
|
+
b('storage_pack', 'Storage Pack (+10 GB)', '10 GB additional registry storage', { storageBytes: 10 * BUNDLE_GB }, 1999, ALL, 5),
|
|
329
362
|
b('audit_log', 'Audit Log', 'Audit log capability', {}, 2000, ['pro'], 6, { features: ['audit_log'], stackable: false }),
|
|
330
363
|
// SSO is INCLUDED in Team (see TIER_FEATURES.team), so the add-on is Pro-only.
|
|
331
364
|
b('sso', 'SSO / IdP', 'SSO + up to 5 IdP configs', { idpConfigs: 5 }, 4000, ['pro'], 7, { features: ['sso'], stackable: false }),
|
|
@@ -404,4 +437,4 @@ export function assertBundleRequiresValid(bundles) {
|
|
|
404
437
|
visit(bundle, []);
|
|
405
438
|
}
|
|
406
439
|
}
|
|
407
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGluZy1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2JpbGxpbmctY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQXdDLE1BQU0sNEJBQTRCLENBQUM7QUFPMUssZ0ZBQWdGO0FBQ2hGLDhFQUE4RTtBQUM5RSxrREFBa0Q7QUFDbEQsa0ZBQWtGO0FBQ2xGLGlEQUFpRDtBQUNqRCx3RUFBd0U7QUFDeEUsMkVBQTJFO0FBQzNFLDZFQUE2RTtBQUM3RSwrRUFBK0U7QUFDL0UsaUZBQWlGO0FBQ2pGLDRFQUE0RTtBQUU1RSx3RkFBd0Y7QUFDeEYsU0FBUyxTQUFTLENBQUMsS0FBYSxFQUFFLFFBQWdCLEVBQUUsTUFBYztJQUNoRSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7UUFBRSxPQUFPLGFBQWEsTUFBTSxFQUFFLENBQUM7SUFDL0MsT0FBTyxTQUFTLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNyRixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsSUFBZSxFQUFFLEtBQWU7SUFDdkQsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNuQyxPQUFPO1FBQ0wsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUNuQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDO1FBQ3pDLFNBQVMsQ0FBQyxDQUFDLENBQUMs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QUFDLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbkIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRSxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7UUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4QixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ25ELEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0QixDQUFDLENBQUM7SUFFRixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ25DLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBMb2FkIGJpbGxpbmcgcGxhbiBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqIFBlci1wbGFuIHByaWNlcyBhcmUgdGhlIG1vc3QgbGlrZWx5IHRvIHZhcnkgYmV0d2VlbiBlbnZpcm9ubWVudHM6XG4gKiAgIEJJTExJTkdfUExBTl97VElFUn1fTU9OVEhMWSAvIEJJTExJTkdfUExBTl97VElFUn1fQU5OVUFMICAoaW4gY2VudHMpXG4gKlxuICogT3B0aW9uYWwgb3ZlcnJpZGVzIGZvciBkZXNjcmlwdGlvbnMgYW5kIGZlYXR1cmVzOlxuICogICBCSUxMSU5HX1BMQU5fe1RJRVJ9X05BTUUgICAgICAgICAgKHBsYWluIHN0cmluZywgZGlzcGxheSBuYW1lKVxuICogICBCSUxMSU5HX1BMQU5fe1RJRVJ9X0RFU0NSSVBUSU9OICAgKHBsYWluIHN0cmluZylcbiAqICAgQklMTElOR19QTEFOX3tUSUVSfV9GRUFUVVJFUyAgICAgIChKU09OIHN0cmluZyBhcnJheSlcbiAqXG4gKiBBbGwgZGVmYXVsdHMgbWF0Y2ggdGhlIG9yaWdpbmFsIGhhcmRjb2RlZCBzZWVkIGRhdGEuXG4gKi9cbmltcG9ydCB7IFFVT1RBX1RJRVJTLCBUSUVSX0ZFQVRVUkVTLCBGRUFUVVJFX01FVEFEQVRBLCBWQUxJRF9USUVSUywgU1RBTkRBUkRfVElFUlMsIGlzVmFsaWRUaWVyLCB0eXBlIFF1b3RhVGllciwgdHlwZSBRdW90YVRpZXJMaW1pdHMgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IEJpbGxpbmdDb25maWcsIEJpbGxpbmdQbGFuQ29uZmlnLCBCdW5kbGVDb25maWcsIENvbWJvRGlzY291bnRDb25maWcgfSBmcm9tICcuL2NvbmZpZy10eXBlcy5qcyc7XG5cbi8qKiBQZXItdW5pdCBxdW90YSBkZWx0YXMgZm9yIGEgYnVuZGxlIOKAlCBrZXlzIGNvbnN0cmFpbmVkIHRvIHJlYWwgcXVvdGEgZmllbGRzXG4gKiAgKG1hdGNoZXMgYEJ1bmRsZUNvbmZpZy5ncmFudHNgKSwgc28gYSB0eXBvJ2QgZGltZW5zaW9uIGZhaWxzIHRvIGNvbXBpbGUuICovXG50eXBlIEdyYW50TWFwID0gUGFydGlhbDxSZWNvcmQ8a2V5b2YgUXVvdGFUaWVyTGltaXRzLCBudW1iZXI+PjtcblxuLy8gLS0gRGVmYXVsdCBmZWF0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoZSBtYXJrZXRlZCBmZWF0dXJlIGxpc3QgaXMgYnVpbHQgZnJvbSB0d28gZGVyaXZlZCBzb3VyY2VzIHNvIGl0IGNhbiBuZXZlclxuLy8gZHJpZnQgZnJvbSB3aGF0IHRoZSBwbGF0Zm9ybSBhY3R1YWxseSBlbmZvcmNlczpcbi8vICAgMS4gTElNSVQgbGluZXMgZGVyaXZlZCBmcm9tIGVhY2ggdGllcidzIEVGRkVDVElWRSBxdW90YSBsaW1pdHMgKFFVT1RBX1RJRVJTKSxcbi8vICAgICAgc28gdGhleSB0cmFjayBRVU9UQV9USUVSXyogZW52IG92ZXJyaWRlcy5cbi8vICAgMi4gSU5DTFVERUQtRkVBVFVSRSBsaW5lcyBkZXJpdmVkIGZyb20gdGhlIGVuZm9yY2VkIGVudGl0bGVtZW50IHNldFxuLy8gICAgICAoVElFUl9GRUFUVVJFUykgdmlhIEZFQVRVUkVfTUVUQURBVEEgbGFiZWxzIOKAlCBzbyBhbiBhZHZlcnRpc2VkIGJhc2Vcbi8vICAgICAgZmVhdHVyZSBpcyBhbHdheXMgb25lIGByZXF1aXJlRmVhdHVyZWAgYWN0dWFsbHkgZ3JhbnRzIGZvciB0aGF0IHRpZXIuXG4vLyBPbmx5IGdlbnVpbmVseSBub24tZ2F0ZWQgbWFya2V0aW5nIGNvcHkgKHN1cHBvcnQgbGV2ZWwsIGRhc2hib2FyZHMsIFJCQUMpIGlzXG4vLyBoYW5kLWF1dGhvcmVkLCBwYXNzZWQgYXMgYHBlcmtzYC4gUHVyY2hhc2FibGUgYWRkLW9ucyAoc3NvLCBhdWRpdF9sb2cpIGFyZSBOT1Rcbi8vIGxpc3RlZCBhcyBiYXNlIHBlcmtzIGhlcmUg4oCUIHRoZXkgYXJlIHNvbGQgYXMgYnVuZGxlcyAoc2VlIGxvYWRCdW5kbGVzKCkpLlxuXG4vKiogXCJVcCB0byBOIHBsdWdpbnNcIiAvIFwiVW5saW1pdGVkIHBsdWdpbnNcIiBmcm9tIGFuIGVmZmVjdGl2ZSBsaW1pdCAoLTEgPSB1bmxpbWl0ZWQpLiAqL1xuZnVuY3Rpb24gbGltaXRMaW5lKGxpbWl0OiBudW1iZXIsIHNpbmd1bGFyOiBzdHJpbmcsIHBsdXJhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGxpbWl0ID09PSAtMSkgcmV0dXJuIGBVbmxpbWl0ZWQgJHtwbHVyYWx9YDtcbiAgcmV0dXJuIGBVcCB0byAke2xpbWl0LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycpfSAke2xpbWl0ID09PSAxID8gc2luZ3VsYXIgOiBwbHVyYWx9YDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZlYXR1cmVzKHRpZXI6IFF1b3RhVGllciwgcGVya3M6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBjb25zdCBsID0gUVVPVEFfVElFUlNbdGllcl0ubGltaXRzO1xuICByZXR1cm4gW1xuICAgIGxpbWl0TGluZShsLnNlYXRzLCAnc2VhdCcsICdzZWF0cycpLFxuICAgIGxpbWl0TGluZShsLnBsdWdpbnMsICdwbHVnaW4nLCAncGx1Z2lucycpLFxuICAgIGxpbWl0TGluZShsLnBpcGVsaW5lcywgJ3BpcGVsaW5lJywgJ3BpcGVsaW5lcycpLFxuICAgIGxpbWl0TGluZShsLmFwaUNhbGxzLCAnQVBJIGNhbGwnLCAnQVBJIGNhbGxzJyksXG4gICAgbGltaXRMaW5lKGwuYWlDYWxscywgJ0FJIGNhbGwnLCAnQUkgY2FsbHMnKSxcbiAgICAvLyBFbmZvcmNlZCBlbnRpdGxlbWVudHMg4oaSIGN1c3RvbWVyLWZhY2luZyBsYWJlbHMgKHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGgpLlxuICAgIC4uLlRJRVJfRkVBVFVSRVNbdGllcl0ubWFwKChmKSA9PiBGRUFUVVJFX01FVEFEQVRBW2ZdLmxhYmVsKSxcbiAgICAuLi5wZXJrcyxcbiAgXTtcbn1cblxuLy8gTm90ZTogYHBlcmtzYCBhcmUgbm9uLWdhdGVkIG1hcmtldGluZyBsaW5lcyBvbmx5LiBFbmZvcmNlZCBmZWF0dXJlcyAoaW5jbC5cbi8vIFByaW9yaXR5IFN1cHBvcnQgZm9yIHByby90ZWFtL2VudGVycHJpc2UpIGNvbWUgZnJvbSBUSUVSX0ZFQVRVUkVTIGFib3ZlLlxuY29uc3QgREVGQVVMVF9ERVZFTE9QRVJfRkVBVFVSRVMgPSBkZWZhdWx0RmVhdHVyZXMoJ2RldmVsb3BlcicsIFsnQ29tbXVuaXR5IHN1cHBvcnQnXSk7XG5jb25zdCBERUZBVUxUX1BST19GRUFUVVJFUyA9IGRlZmF1bHRGZWF0dXJlcygncHJvJywgWydSZXBvcnRpbmcgZGFzaGJvYXJkJ10pO1xuY29uc3QgREVGQVVMVF9URUFNX0ZFQVRVUkVTID0gZGVmYXVsdEZlYXR1cmVzKCd0ZWFtJywgWydSQkFDICYgdGVhbSByb2xlcyddKTtcbmNvbnN0IERFRkFVTFRfRU5URVJQUklTRV9GRUFUVVJFUyA9IGRlZmF1bHRGZWF0dXJlcygnZW50ZXJwcmlzZScsIFtcbiAgJ1JCQUMgJiB0ZWFtIHJvbGVzJywgJ1JlcG9ydGluZyBkYXNoYm9hcmQnLFxuXSk7XG4vLyBVbmxpbWl0ZWQgaW5jbHVkZXMgZXZlcnkgZmVhdHVyZSAoVElFUl9GRUFUVVJFUy51bmxpbWl0ZWQgPSBhbGwpLlxuY29uc3QgREVGQVVMVF9VTkxJTUlURURfRkVBVFVSRVMgPSBkZWZhdWx0RmVhdHVyZXMoJ3VubGltaXRlZCcsIFtcbiAgJ1VubGltaXRlZCBldmVyeXRoaW5nJywgJ1JCQUMgJiB0ZWFtIHJvbGVzJywgJ1JlcG9ydGluZyBkYXNoYm9hcmQnLFxuXSk7XG5cbi8qKlxuICogUGFyc2UgYSBwcmljZSAoaW4gY2VudHMpIGZyb20gYW4gZW52IHZhciwgZmFsbGluZyBiYWNrIHRvIHRoZSBkZWZhdWx0IHdoZW5cbiAqIHVuc2V0IE9SIG1hbGZvcm1lZC4gQSBOYU4gKGUuZy4gYEJJTExJTkdfUExBTl9QUk9fTU9OVEhMWT1hYmNgKSBtdXN0IG5ldmVyXG4gKiBmbG93IGludG8gdGhlIHJldHVybmVkIGNvbmZpZyBhcyBhIHByaWNlLlxuICovXG5mdW5jdGlvbiBlbnZDZW50cyhlbnZWYXI6IHN0cmluZyB8IHVuZGVmaW5lZCwgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChlbnZWYXIgPT09IHVuZGVmaW5lZCB8fCBlbnZWYXIgPT09ICcnKSByZXR1cm4gZmFsbGJhY2s7XG4gIC8vIGBwYXJzZUludGAgaXMgdG9vIGxlbmllbnQgaGVyZTogJzQ5Ljk5J+KGkjQ5LCAnNDlhYmMn4oaSNDksICctMTAwJ+KGki0xMDAgd291bGQgYWxsXG4gIC8vIGZsb3cgdGhyb3VnaCBhcyBhIFwicHJpY2VcIi4gUmVxdWlyZSBhIGNsZWFuLCBub24tbmVnYXRpdmUgaW50ZWdlciAoY2VudHMpLFxuICAvLyBtYXRjaGluZyBgYXBwbHlHcmFudE92ZXJyaWRlYCdzIHJpZ29yIOKAlCBhbnl0aGluZyBlbHNlIGZhbGxzIGJhY2suXG4gIGNvbnN0IG4gPSBOdW1iZXIoZW52VmFyKTtcbiAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIobikgJiYgbiA+PSAwID8gbiA6IGZhbGxiYWNrO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgSlNPTiBhcnJheSBmcm9tIGFuIGVudiB2YXIsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LlxuICovXG5mdW5jdGlvbiBwYXJzZUZlYXR1cmVzKGVudlZhcjogc3RyaW5nIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGlmICghZW52VmFyKSByZXR1cm4gZmFsbGJhY2s7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShlbnZWYXIpO1xuICAgIC8vIEFycmF5LW9mLXN0cmluZ3Mgb25seSDigJQgYSBKU09OIGFycmF5IG9mIG5vbi1zdHJpbmdzIChlLmcuIGBbMSwyXWApIG11c3Qgbm90XG4gICAgLy8gc2hpcCBudW1iZXJzIGFzIGZlYXR1cmUgbGFiZWxzLiBGaWx0ZXIgdG8gc3RyaW5ncyAobWlycm9ycyBhcHBseVRpZXJzT3ZlcnJpZGUpLlxuICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJzZWQpKSByZXR1cm4gZmFsbGJhY2s7XG4gICAgY29uc3Qgc3RyaW5ncyA9IHBhcnNlZC5maWx0ZXIoKHgpOiB4IGlzIHN0cmluZyA9PiB0eXBlb2YgeCA9PT0gJ3N0cmluZycpO1xuICAgIHJldHVybiBzdHJpbmdzLmxlbmd0aCA9PT0gcGFyc2VkLmxlbmd0aCA/IHN0cmluZ3MgOiBmYWxsYmFjaztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbGxiYWNrO1xuICB9XG59XG5cbi8qKlxuICogTG9hZCBiaWxsaW5nIHBsYW4gY29uZmlndXJhdGlvbiBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRCaWxsaW5nQ29uZmlnKCk6IEJpbGxpbmdDb25maWcge1xuICAvLyBLZXllZCBieSBRdW90YVRpZXIgc28gdGhlIGNvbXBpbGVyIGZvcmNlcyBhIHBsYW4gZm9yIEVWRVJZIHRpZXIg4oCUIGFkZGluZyBhXG4gIC8vIDV0aCBRdW90YVRpZXIgd2l0aG91dCBhIHBsYW4gaGVyZSBpcyBub3cgYSBjb21waWxlIGVycm9yICh3YXMgYSBoYW5kLWtlcHRcbiAgLy8gNC1lbGVtZW50IGFycmF5IHRoYXQgc2lsZW50bHkgc2hpcHBlZCBubyBwbGFuL3ByaWNlIGZvciBhIG5ldyB0aWVyKS4gVGhlXG4gIC8vIHB1YmxpYyBgY29uZmlnLnBsYW5zYCBzaGFwZSBzdGF5cyBhbiBhcnJheSwgZGVyaXZlZCBiZWxvdyBpbiBWQUxJRF9USUVSU1xuICAvLyBvcmRlciAoZGV2ZWxvcGVyLCBwcm8sIHRlYW0sIGVudGVycHJpc2UsIHVubGltaXRlZCkgdG8gcHJlc2VydmUgY29uc3VtZXIgb3JkZXJpbmcuXG4gIGNvbnN0IHBsYW5CeVRpZXI6IFJlY29yZDxRdW90YVRpZXIsIEJpbGxpbmdQbGFuQ29uZmlnPiA9IHtcbiAgICBkZXZlbG9wZXI6IHtcbiAgICAgIGlkOiAnZGV2ZWxvcGVyJyxcbiAgICAgIG5hbWU6IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9ERVZFTE9QRVJfTkFNRSB8fCAnRGV2ZWxvcGVyJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fREVWRUxPUEVSX0RFU0NSSVBUSU9OXG4gICAgICAgIHx8ICdGcmVlIHN0YXJ0ZXIgdGllciBmb3IgaW5kaXZpZHVhbCBkZXZlbG9wZXJzJyxcbiAgICAgIHRpZXI6ICdkZXZlbG9wZXInLFxuICAgICAgcHJpY2VzOiB7XG4gICAgICAgIG1vbnRobHk6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9ERVZFTE9QRVJfTU9OVEhMWSwgMCksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0RFVkVMT1BFUl9BTk5VQUwsIDApLFxuICAgICAgfSxcbiAgICAgIGZlYXR1cmVzOiBwYXJzZUZlYXR1cmVzKFxuICAgICAgICBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fREVWRUxPUEVSX0ZFQVRVUkVTLFxuICAgICAgICBERUZBVUxUX0RFVkVMT1BFUl9GRUFUVVJFUyxcbiAgICAgICksXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogdHJ1ZSxcbiAgICAgIHNvcnRPcmRlcjogMCxcbiAgICB9LFxuICAgIHBybzoge1xuICAgICAgaWQ6ICdwcm8nLFxuICAgICAgbmFtZTogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1BST19OQU1FIHx8ICdQcm8nLFxuICAgICAgZGVzY3JpcHRpb246IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9QUk9fREVTQ1JJUFRJT05cbiAgICAgICAgfHwgJ0ZvciBpbmRpdmlkdWFsIHBvd2VyIHVzZXJzIGFuZCBwcm9kdWN0aW9uIHdvcmtsb2FkcycsXG4gICAgICB0aWVyOiAncHJvJyxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBtb250aGx5OiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fUFJPX01PTlRITFksIDQ5MDApLFxuICAgICAgICBhbm51YWw6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9QUk9fQU5OVUFMLCA0OTAwMCksXG4gICAgICB9LFxuICAgICAgZmVhdHVyZXM6IHBhcnNlRmVhdHVyZXMoXG4gICAgICAgIHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9QUk9fRkVBVFVSRVMsXG4gICAgICAgIERFRkFVTFRfUFJPX0ZFQVRVUkVTLFxuICAgICAgKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICAgIHNvcnRPcmRlcjogMSxcbiAgICB9LFxuICAgIHRlYW06IHtcbiAgICAgIGlkOiAndGVhbScsXG4gICAgICBuYW1lOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVEVBTV9OQU1FIHx8ICdUZWFtJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVEVBTV9ERVNDUklQVElPTlxuICAgICAgICB8fCAnRm9yIHRlYW1zIGNvbGxhYm9yYXRpbmcgb24gc2hhcmVkIHBpcGVsaW5lcycsXG4gICAgICB0aWVyOiAndGVhbScsXG4gICAgICBwcmljZXM6IHtcbiAgICAgICAgbW9udGhseTogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1RFQU1fTU9OVEhMWSwgMTQ5MDApLFxuICAgICAgICBhbm51YWw6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9URUFNX0FOTlVBTCwgMTQ5MDAwKSxcbiAgICAgIH0sXG4gICAgICBmZWF0dXJlczogcGFyc2VGZWF0dXJlcyhcbiAgICAgICAgcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1RFQU1fRkVBVFVSRVMsXG4gICAgICAgIERFRkFVTFRfVEVBTV9GRUFUVVJFUyxcbiAgICAgICksXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogZmFsc2UsXG4gICAgICBzb3J0T3JkZXI6IDIsXG4gICAgfSxcbiAgICBlbnRlcnByaXNlOiB7XG4gICAgICBpZDogJ2VudGVycHJpc2UnLFxuICAgICAgbmFtZTogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0VOVEVSUFJJU0VfTkFNRSB8fCAnRW50ZXJwcmlzZScsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0VOVEVSUFJJU0VfREVTQ1JJUFRJT05cbiAgICAgICAgfHwgJ09yZy13aWRlIHNjYWxlIHdpdGggdW5saW1pdGVkIHNlYXRzIGFuZCBwcmlvcml0eSBzdXBwb3J0JyxcbiAgICAgIHRpZXI6ICdlbnRlcnByaXNlJyxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBtb250aGx5OiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fRU5URVJQUklTRV9NT05USExZLCA1OTkwMCksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0VOVEVSUFJJU0VfQU5OVUFMLCA1OTkwMDApLFxuICAgICAgfSxcbiAgICAgIGZlYXR1cmVzOiBwYXJzZUZlYXR1cmVzKFxuICAgICAgICBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fRU5URVJQUklTRV9GRUFUVVJFUyxcbiAgICAgICAgREVGQVVMVF9FTlRFUlBSSVNFX0ZFQVRVUkVTLFxuICAgICAgKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICAgIHNvcnRPcmRlcjogMyxcbiAgICB9LFxuICAgIC8vIFRoZSBiaWxsaW5nLURJU0FCTEVEIGRlZmF1bHQgcGxhbjogZXZlcnl0aGluZyB1bmNhcHBlZCwgYWxsIGZlYXR1cmVzLCBmcmVlLlxuICAgIC8vIFNlZWRlZCBzbyB0aGUgdGllcuKGknBsYW4gbWFwcGluZyByZXNvbHZlcywgYnV0IG5ldmVyIG9mZmVyZWQgZm9yIHNhbGUg4oCUIHRoZVxuICAgIC8vIHJlYWQtcGxhbnMgcm91dGUgZmlsdGVycyBpdCBvdXQgKHNlZSBjcmVhdGVSZWFkUGxhblJvdXRlcyksIHNvIGl0J3MgaGlkZGVuXG4gICAgLy8gd2hlbmV2ZXIgYmlsbGluZyBpcyBlbmFibGVkICh0aGUgb25seSB0aW1lIC9wbGFucyBpcyBzZXJ2ZWQpLlxuICAgIHVubGltaXRlZDoge1xuICAgICAgaWQ6ICd1bmxpbWl0ZWQnLFxuICAgICAgbmFtZTogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1VOTElNSVRFRF9OQU1FIHx8ICdVbmxpbWl0ZWQnLFxuICAgICAgZGVzY3JpcHRpb246IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9VTkxJTUlURURfREVTQ1JJUFRJT05cbiAgICAgICAgfHwgJ0V2ZXJ5dGhpbmcgdW5jYXBwZWQg4oCUIHRoZSBkZWZhdWx0IHdoZW4gYmlsbGluZyBpcyBkaXNhYmxlZCcsXG4gICAgICB0aWVyOiAndW5saW1pdGVkJyxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBtb250aGx5OiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVU5MSU1JVEVEX01PTlRITFksIDApLFxuICAgICAgICBhbm51YWw6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9VTkxJTUlURURfQU5OVUFMLCAwKSxcbiAgICAgIH0sXG4gICAgICBmZWF0dXJlczogcGFyc2VGZWF0dXJlcyhcbiAgICAgICAgcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1VOTElNSVRFRF9GRUFUVVJFUyxcbiAgICAgICAgREVGQVVMVF9VTkxJTUlURURfRkVBVFVSRVMsXG4gICAgICApLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBpc0RlZmF1bHQ6IGZhbHNlLFxuICAgICAgc29ydE9yZGVyOiA0LFxuICAgIH0sXG4gIH07XG5cbiAgLy8gRGVyaXZlIHRoZSBhcnJheSBjb25zdW1lcnMgcmVhZCAoYGNvbmZpZy5wbGFuc2ApIGluIGNhbm9uaWNhbCB0aWVyIG9yZGVyLlxuICBjb25zdCBwbGFuczogQmlsbGluZ1BsYW5Db25maWdbXSA9IFZBTElEX1RJRVJTLm1hcCgodGllcikgPT4gcGxhbkJ5VGllclt0aWVyXSk7XG5cbiAgLy8gQnVpbGQgYnVuZGxlcyBPTkNFIGFuZCB0aHJlYWQgdGhlbSBpbnRvIHRoZSBjb21ibyBsb2FkZXIgKHdoaWNoIG5lZWRzIHRoZWlyXG4gIC8vIGVudi1lZmZlY3RpdmUgcHJpY2VzKSDigJQgYXZvaWRzIHBhcnNpbmcgdGhlIHdob2xlIGJ1bmRsZSBjYXRhbG9nIHR3aWNlIHBlciBsb2FkLlxuICBjb25zdCBidW5kbGVzID0gbG9hZEJ1bmRsZXMoKTtcbiAgcmV0dXJuIHsgcGxhbnMsIGJ1bmRsZXMsIGNvbWJvRGlzY291bnRzOiBsb2FkQ29tYm9EaXNjb3VudHMoYnVuZGxlcykgfTtcbn1cblxuLyoqXG4gKiBDb21ibyBkaXNjb3VudHMgKGRvY3MvYmlsbGluZy1idW5kbGVzLm1kIMKnQ29tYm8gcHJpY2luZykuIFdoZW4gYW4gYWNjb3VudCBvd25zXG4gKiBldmVyeSBtZW1iZXIgYnVuZGxlIChlYWNoIGF0IOKJpSBpdHMgbWluaW11bSBxdWFudGl0eSksIHRoZSBzZXQgaXMgYmlsbGVkIGF0IHRoZVxuICogY29tYmluZWQgcHJpY2UgaW5zdGVhZCBvZiB0aGUgc3VtIG9mIHRoZSBtZW1iZXJzIOKAlCByZWFsaXplZCBhcyBhIHJlY3VycmluZyB1c2FnZVxuICogY3JlZGl0IGZvciB0aGUgZGlmZmVyZW5jZS4gT3ZlcmxhcHBpbmcgY29tYm9zIGFyZSByZXNvbHZlZCBieSBtYXgtd2VpZ2h0IHBhY2tpbmdcbiAqIChhIHNoYXJlZCBhZGQtb24gaXMgbmV2ZXIgZGlzY291bnRlZCB0d2ljZSk7IGBzb3J0T3JkZXJgIGJyZWFrcyBlcXVhbC10b3RhbCB0aWVzLlxuICpcbiAqIERlZmF1bHRzOlxuICogIC0gXCJBbmFseXRpY3MgU3VpdGVcIiDigJQgQWR2YW5jZWQgUmVwb3J0aW5nIChET1JBKSArIFRlYW0gVXNhZ2UgQW5hbHl0aWNzLCBlYWNoXG4gKiAgICAkMzAvbW8sIHRvZ2V0aGVyICQ0Mi9tbyAoJDQyMC95cikg4oaSIGEgJDE4L21vIGNyZWRpdCAofjMwJSBvZmYpLlxuICogIC0gXCJUZWFtIEdyb3d0aCBCdW5kbGVcIiDigJQg4omlMSBTZWF0IFBhY2sgKCQyNSkgKyBUZWFtIFVzYWdlIEFuYWx5dGljcyAoJDMwKSxcbiAqICAgIHRvZ2V0aGVyICQzOC41MC9tbyAoJDM4NS95cikg4oaSIGEgJDE2LjUwL21vIGNyZWRpdCAofjMwJSBvZmYpLlxuICogUHJpY2VzIGVudi1vdmVycmlkYWJsZSB2aWEgYEJJTExJTkdfQ09NQk9fPElEPl9NT05USExZYCAvIGBfQU5OVUFMYC5cbiAqL1xuZnVuY3Rpb24gbG9hZENvbWJvRGlzY291bnRzKGJ1bmRsZXM6IEJ1bmRsZUNvbmZpZ1tdKTogQ29tYm9EaXNjb3VudENvbmZpZ1tdIHtcbiAgY29uc3QgYyA9IChcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBidW5kbGVJZHM6IHN0cmluZ1tdLFxuICAgIG1vbnRobHk6IG51bWJlcixcbiAgICBhbm51YWw6IG51bWJlcixcbiAgICBzb3J0T3JkZXI6IG51bWJlcixcbiAgICBtaW5RdWFudGl0aWVzPzogUmVjb3JkPHN0cmluZywgbnVtYmVyPixcbiAgKTogQ29tYm9EaXNjb3VudENvbmZpZyA9PiAoe1xuICAgIGlkLFxuICAgIG5hbWUsXG4gICAgYnVuZGxlSWRzLFxuICAgIC4uLihtaW5RdWFudGl0aWVzID8geyBtaW5RdWFudGl0aWVzIH0gOiB7fSksXG4gICAgcHJpY2VzOiB7XG4gICAgICBtb250aGx5OiBlbnZDZW50cyhwcm9jZXNzLmVudltgQklMTElOR19DT01CT18ke2lkLnRvVXBwZXJDYXNlKCl9X01PTlRITFlgXSwgbW9udGhseSksXG4gICAgICBhbm51YWw6IGVudkNlbnRzKHByb2Nlc3MuZW52W2BCSUxMSU5HX0NPTUJPXyR7aWQudG9VcHBlckNhc2UoKX1fQU5OVUFMYF0sIGFubnVhbCksXG4gICAgfSxcbiAgICBzb3J0T3JkZXIsXG4gICAgaXNBY3RpdmU6IHRydWUsXG4gIH0pO1xuXG4gIGNvbnN0IGNvbWJvcyA9IFtcbiAgICBjKCdhbmFseXRpY3Nfc3VpdGUnLCAnQW5hbHl0aWNzIFN1aXRlJywgWydhZHZhbmNlZF9yZXBvcnRpbmcnLCAndGVhbV91c2FnZV9hbmFseXRpY3MnXSwgNDIwMCwgNDIwMDAsIDApLFxuICAgIGMoJ3RlYW1fZ3Jvd3RoJywgJ1RlYW0gR3Jvd3RoIEJ1bmRsZScsIFsnc2VhdF9wYWNrJywgJ3RlYW1fdXNhZ2VfYW5hbHl0aWNzJ10sIDM4NTAsIDM4NTAwLCAxLCB7IHNlYXRfcGFjazogMSB9KSxcbiAgICAvLyBDb21wbGlhbmNlIFN1aXRlIOKAlCBTdGFuZGFyZCArIEFkdmFuY2VkIGF0IDMwJSBvZmYgKCQ5MDguNjAveXIgdnMgJDEsMjk4IGxpc3QpLlxuICAgIGMoJ2NvbXBsaWFuY2Vfc3VpdGUnLCAnQ29tcGxpYW5jZSBTdWl0ZScsIFsnY29tcGxpYW5jZV9zdGFuZGFyZCcsICdjb21wbGlhbmNlX2FkdmFuY2VkJ10sIDkwODYsIDkwODYwLCAyKSxcbiAgXTtcbiAgd2Fybk9uTm9uRGlzY291bnRDb21ib3MoY29tYm9zLCBidW5kbGVzKTtcbiAgcmV0dXJuIGNvbWJvcztcbn1cblxuLyoqXG4gKiBHdWFyZHJhaWw6IGEgY29tYm8gd2hvc2UgY29tYmluZWQgcHJpY2UgaXMg4omlIGl0cyBtaW5pbXVtLWNvbXBvc2l0aW9uIGJhc2tldCBncmFudHNcbiAqIG5vIGNyZWRpdCAodGhlIGNyZWRpdCBjbGFtcHMgdG8gJDApIGFuZCBpcyBzaWxlbnRseSBpbmVydC4gV2FybiBsb3VkbHkgaW5zdGVhZCBzbyBhXG4gKiBtaXNjb25maWd1cmVkIGBCSUxMSU5HX0NPTUJPXypgIG92ZXJyaWRlIGlzIGNhdWdodC4gTm9uLWZhdGFsLlxuICovXG5mdW5jdGlvbiB3YXJuT25Ob25EaXNjb3VudENvbWJvcyhjb21ib3M6IENvbWJvRGlzY291bnRDb25maWdbXSwgYnVuZGxlczogQnVuZGxlQ29uZmlnW10pOiB2b2lkIHtcbiAgLy8gQ29tYm8gbWVtYmVycyBhcmUgYWx3YXlzIGJ1bmRsZXM7IHJlc29sdmUgdGhlaXIgKGVudi1lZmZlY3RpdmUpIHVuaXQgcHJpY2VzIG9uY2UuXG4gIGNvbnN0IGJ5SWQgPSBuZXcgTWFwKGJ1bmRsZXMubWFwKChiKSA9PiBbYi5pZCwgYl0pKTtcbiAgZm9yIChjb25zdCBjb21ibyBvZiBjb21ib3MpIHtcbiAgICBmb3IgKGNvbnN0IGludGVydmFsIG9mIFsnbW9udGhseScsICdhbm51YWwnXSBhcyBjb25zdCkge1xuICAgICAgY29uc3QgYmFza2V0ID0gY29tYm8uYnVuZGxlSWRzLnJlZHVjZSgocywgaWQpID0+IHMgKyAoYnlJZC5nZXQoaWQpPy5wcmljZXNbaW50ZXJ2YWxdID8/IDApICogKGNvbWJvLm1pblF1YW50aXRpZXM/LltpZF0gPz8gMSksIDApO1xuICAgICAgaWYgKGNvbWJvLnByaWNlc1tpbnRlcnZhbF0gPj0gYmFza2V0KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihgW2JpbGxpbmctY29uZmlnXSBDb21ibyBcIiR7Y29tYm8uaWR9XCIgJHtpbnRlcnZhbH0gcHJpY2UgJHtjb21iby5wcmljZXNbaW50ZXJ2YWxdfSDiiaUgbWVtYmVyIGJhc2tldCAke2Jhc2tldH07IGl0IGdyYW50cyBubyBkaXNjb3VudC5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgQlVORExFX0dCID0gMTAyNCAqIDEwMjQgKiAxMDI0O1xuXG4vKipcbiAqIEFwcGx5IGEgcGVyLWJ1bmRsZSBncmFudCBvdmVycmlkZS4gRWFjaCBzdGFja2FibGUgcGFjayBncmFudHMgZXhhY3RseSBvbmVcbiAqIHF1b3RhIGRpbWVuc2lvbiwgc28gYEJJTExJTkdfQlVORExFXzxJRD5fR1JBTlRgIHJldHVuZXMgdGhhdCBhbW91bnQgKGUuZy4gbWFrZVxuICogdGhlIFNlYXQgUGFjayBncmFudCArMTAgaW5zdGVhZCBvZiArNSkg4oCUIHBhcmFsbGVsIHRvIHRoZSBwcmljZSBvdmVycmlkZXMuXG4gKiBJZ25vcmVkIGZvciBtdWx0aS1kaW1lbnNpb24gb3IgZmVhdHVyZS1vbmx5IChlbXB0eS1ncmFudCkgYnVuZGxlcywgYW5kIGZvciBhXG4gKiBtYWxmb3JtZWQvbmVnYXRpdmUgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5R3JhbnRPdmVycmlkZShpZDogc3RyaW5nLCBncmFudHM6IEdyYW50TWFwKTogR3JhbnRNYXAge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltgQklMTElOR19CVU5ETEVfJHtpZC50b1VwcGVyQ2FzZSgpfV9HUkFOVGBdO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZ3JhbnRzKTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdyA9PT0gJycgfHwga2V5cy5sZW5ndGggIT09IDEpIHJldHVybiBncmFudHM7XG4gIGNvbnN0IG4gPSBwYXJzZUludChyYXcsIDEwKTtcbiAgaWYgKE51bWJlci5pc05hTihuKSB8fCBuIDwgMCkgcmV0dXJuIGdyYW50cztcbiAgLy8gYGtleXNgIGNhbWUgZnJvbSBhIEdyYW50TWFwLCBzbyBpdHMgc29sZSBrZXkgaXMgYSBRdW90YVRpZXJMaW1pdHMgZmllbGQuXG4gIHJldHVybiB7IFtrZXlzWzBdIGFzIGtleW9mIFF1b3RhVGllckxpbWl0c106IG4gfTtcbn1cblxuLyoqXG4gKiBBcHBseSBhIHBlci1idW5kbGUgdGllci1hdmFpbGFiaWxpdHkgb3ZlcnJpZGUuIGBCSUxMSU5HX0JVTkRMRV88SUQ+X1RJRVJTYCBpcyBhXG4gKiBKU09OIGFycmF5IG9mIHRpZXIgSURzIHRoYXQgbWF5IHB1cmNoYXNlIHRoZSBidW5kbGUgKGUuZy4gYFtcImRldmVsb3BlclwiLFwicHJvXCJdYClcbiAqIOKAlCBwYXJhbGxlbCB0byB0aGUgcHJpY2UvZ3JhbnQgb3ZlcnJpZGVzLiBGYWxscyBiYWNrIHRvIGBkZWZhdWx0VGllcnNgIHdoZW5cbiAqIHVuc2V0LCBtYWxmb3JtZWQsIGVtcHR5LCBvciBjb250YWluaW5nIGFuIHVua25vd24gdGllci5cbiAqL1xuZnVuY3Rpb24gYXBwbHlUaWVyc092ZXJyaWRlKGlkOiBzdHJpbmcsIGRlZmF1bHRUaWVyczogUXVvdGFUaWVyW10pOiBRdW90YVRpZXJbXSB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52W2BCSUxMSU5HX0JVTkRMRV8ke2lkLnRvVXBwZXJDYXNlKCl9X1RJRVJTYF07XG4gIGlmICghcmF3KSByZXR1cm4gZGVmYXVsdFRpZXJzO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyc2VkKSB8fCBwYXJzZWQubGVuZ3RoID09PSAwKSByZXR1cm4gZGVmYXVsdFRpZXJzO1xuICAgIGNvbnN0IHZhbGlkID0gcGFyc2VkLmZpbHRlcigodCk6IHQgaXMgUXVvdGFUaWVyID0+IHR5cGVvZiB0ID09PSAnc3RyaW5nJyAmJiBpc1ZhbGlkVGllcih0KSk7XG4gICAgcmV0dXJuIHZhbGlkLmxlbmd0aCA9PT0gcGFyc2VkLmxlbmd0aCA/IHZhbGlkIDogZGVmYXVsdFRpZXJzO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFRpZXJzO1xuICB9XG59XG5cbi8qKlxuICogUHVyY2hhc2FibGUgYWRkLW9uIGJ1bmRsZXMgKGRvY3MvYmlsbGluZy1idW5kbGVzLm1kIMKnMykuIEdyYW50cyBhcmUgcGVyLXVuaXRcbiAqIGRlbHRhcyBvbiBRdW90YVRpZXJMaW1pdHM7IHByaWNlcyAoY2VudHMsIGBCSUxMSU5HX0JVTkRMRV88SUQ+X01PTlRITFlgIC9cbiAqIGBfQU5OVUFMYCksIHRoZSBzaW5nbGUtZGltZW5zaW9uIGdyYW50IGFtb3VudCAoYEJJTExJTkdfQlVORExFXzxJRD5fR1JBTlRgKSxcbiAqIGFuZCB0aGUgcHVyY2hhc2FibGUtdGllciBsaXN0IChgQklMTElOR19CVU5ETEVfPElEPl9USUVSU2ApIGFyZSBhbGxcbiAqIGVudi1vdmVycmlkYWJsZS4gQW5udWFsIOKJiCAxMMOXIG1vbnRobHkuXG4gKi9cbmZ1bmN0aW9uIGxvYWRCdW5kbGVzKCk6IEJ1bmRsZUNvbmZpZ1tdIHtcbiAgY29uc3QgYiA9IChcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgIGdyYW50czogR3JhbnRNYXAsXG4gICAgbW9udGhseTogbnVtYmVyLFxuICAgIGF2YWlsYWJsZUZvclRpZXJzOiBRdW90YVRpZXJbXSxcbiAgICBzb3J0T3JkZXI6IG51bWJlcixcbiAgICBleHRyYTogeyBmZWF0dXJlcz86IHN0cmluZ1tdOyBzdGFja2FibGU/OiBib29sZWFuOyBtYXhRdWFudGl0eT86IG51bWJlcjsgcmVxdWlyZXM/OiBzdHJpbmdbXSB9ID0ge30sXG4gICk6IEJ1bmRsZUNvbmZpZyA9PiB7XG4gICAgLy8gUmVzb2x2ZSBtb250aGx5IGZpcnN0IHNvIHRoZSBhbm51YWwgZmFsbGJhY2sgdHJhY2tzIGEgYF9NT05USExZYCBvdmVycmlkZVxuICAgIC8vIChhbm51YWwg4omIIDEww5cgdGhlICplZmZlY3RpdmUqIG1vbnRobHksIG5vdCB0aGUgaGFyZGNvZGVkIGRlZmF1bHQpLlxuICAgIGNvbnN0IHJlc29sdmVkTW9udGhseSA9IGVudkNlbnRzKHByb2Nlc3MuZW52W2BCSUxMSU5HX0JVTkRMRV8ke2lkLnRvVXBwZXJDYXNlKCl9X01PTlRITFlgXSwgbW9udGhseSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgbmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZ3JhbnRzOiBhcHBseUdyYW50T3ZlcnJpZGUoaWQsIGdyYW50cyksXG4gICAgICAuLi4oZXh0cmEuZmVhdHVyZXMgPyB7IGZlYXR1cmVzOiBleHRyYS5mZWF0dXJlcyB9IDoge30pLFxuICAgICAgLi4uKGV4dHJhLm1heFF1YW50aXR5ICE9PSB1bmRlZmluZWQgPyB7IG1heFF1YW50aXR5OiBleHRyYS5tYXhRdWFudGl0eSB9IDoge30pLFxuICAgICAgLi4uKGV4dHJhLnJlcXVpcmVzID8geyByZXF1aXJlczogZXh0cmEucmVxdWlyZXMgfSA6IHt9KSxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBtb250aGx5OiByZXNvbHZlZE1vbnRobHksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnZbYEJJTExJTkdfQlVORExFXyR7aWQudG9VcHBlckNhc2UoKX1fQU5OVUFMYF0sIHJlc29sdmVkTW9udGhseSAqIDEwKSxcbiAgICAgIH0sXG4gICAgICBzdGFja2FibGU6IGV4dHJhLnN0YWNrYWJsZSA/PyB0cnVlLFxuICAgICAgYXZhaWxhYmxlRm9yVGllcnM6IGFwcGx5VGllcnNPdmVycmlkZShpZCwgYXZhaWxhYmxlRm9yVGllcnMpLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBzb3J0T3JkZXIsXG4gICAgfTtcbiAgfTtcblxuICAvLyBCdW5kbGVzIGFyZSBwdXJjaGFzYWJsZSBvbiBldmVyeSBTRUxFQ1RBQkxFIHRpZXIgKGV4Y2x1ZGVzIGB1bmxpbWl0ZWRgLCB3aGljaFxuICAvLyBpcyB0aGUgYmlsbGluZy1vZmYgdGllciBhbmQgYnV5cyBub3RoaW5nKSDigJQgc28gdGhpcyBpcyBleGFjdGx5IFNUQU5EQVJEX1RJRVJTLlxuICBjb25zdCBBTEw6IFF1b3RhVGllcltdID0gWy4uLlNUQU5EQVJEX1RJRVJTXTtcbiAgY29uc3QgYnVuZGxlczogQnVuZGxlQ29uZmlnW10gPSBbXG4gICAgLy8gQ2FwYWNpdHkgcGFja3MgKHBpcGVsaW5lcy9wbHVnaW5zKSBhcmUgYXZhaWxhYmxlIG9uIEVWRVJZIHRpZXIgc28gYW55XG4gICAgLy8gYWNjb3VudCDigJQgaW5jbHVkaW5nIGZyZWUgKGRldmVsb3Blcikg4oCUIGNhbiBleHBhbmQgaW4gcGxhY2UuIEZlYXR1cmUgYnVuZGxlc1xuICAgIC8vIChhdWRpdF9sb2cvc3NvKSBhbmQgcmF0ZSBwYWNrcyBzdGF5IHRpZXItc2NvcGVkIGJ5IGRlZmF1bHQuXG4gICAgLy8gU2VhdCBQYWNrIGlzIHRoZSBFWENFUFRJT04g4oCUIFRlYW0rIG9ubHkuIEEgc2luZ2xlLXNlYXQgRGV2ZWxvcGVyL1BybyBjb3VsZFxuICAgIC8vIG90aGVyd2lzZSBhZGQgY2hlYXAgc2VhdHMgKCQ1L3NlYXQpIGFuZCB1bmRlcmN1dCBUZWFtICh3aG9zZSAxMCBzZWF0cyBhcmUgdGhlXG4gICAgLy8gdGllciBkaWZmZXJlbnRpYXRvcik7IHJlc3RyaWN0aW5nIGl0IGZvcmNlcyBcIm5lZWQgPjEgc2VhdCDihpIgdXBncmFkZSB0byBUZWFtXCIuXG4gICAgYignc2VhdF9wYWNrJywgJ1NlYXQgUGFjayAoKzUpJywgJzUgYWRkaXRpb25hbCBtZW1iZXIgc2VhdHMnLCB7IHNlYXRzOiA1IH0sIDI1MDAsIFsndGVhbScsICdlbnRlcnByaXNlJ10sIDApLFxuICAgIGIoJ3BpcGVsaW5lX3BhY2snLCAnUGlwZWxpbmUgUGFjayAoKzEwKScsICcxMCBhZGRpdGlvbmFsIHBpcGVsaW5lcycsIHsgcGlwZWxpbmVzOiAxMCB9LCAxNTAwLCBBTEwsIDEpLFxuICAgIGIoJ3BsdWdpbl9wYWNrJywgJ1BsdWdpbiBQYWNrICgrMTAwKScsICcxMDAgYWRkaXRpb25hbCBwbHVnaW5zJywgeyBwbHVnaW5zOiAxMDAgfSwgMTUwMCwgQUxMLCAyKSxcbiAgICBiKCdhcGlfcGFjaycsICdBUEkgUGFjayAoKzFNKScsICcxLDAwMCwwMDAgYWRkaXRpb25hbCBBUEkgY2FsbHMgLyBwZXJpb2QnLCB7IGFwaUNhbGxzOiAxXzAwMF8wMDAgfSwgMjAwMCwgQUxMLCAzKSxcbiAgICBiKCdhaV9wYWNrJywgJ0FJIFBhY2sgKCs1ayknLCAnNSwwMDAgYWRkaXRpb25hbCBBSSBjYWxscyAvIHBlcmlvZCcsIHsgYWlDYWxsczogNTAwMCB9LCA3NTAwLCBBTEwsIDQpLFxuICAgIGIoJ3N0b3JhZ2VfcGFjaycsICdTdG9yYWdlIFBhY2sgKCs1MCBHQiknLCAnNTAgR0IgYWRkaXRpb25hbCByZWdpc3RyeSBzdG9yYWdlJywgeyBzdG9yYWdlQnl0ZXM6IDUwICogQlVORExFX0dCIH0sIDI1MDAsIEFMTCwgNSksXG4gICAgYignYXVkaXRfbG9nJywgJ0F1ZGl0IExvZycsICdBdWRpdCBsb2cgY2FwYWJpbGl0eScsIHt9LCAyMDAwLCBbJ3BybyddLCA2LCB7IGZlYXR1cmVzOiBbJ2F1ZGl0X2xvZyddLCBzdGFja2FibGU6IGZhbHNlIH0pLFxuICAgIC8vIFNTTyBpcyBJTkNMVURFRCBpbiBUZWFtIChzZWUgVElFUl9GRUFUVVJFUy50ZWFtKSwgc28gdGhlIGFkZC1vbiBpcyBQcm8tb25seS5cbiAgICBiKCdzc28nLCAnU1NPIC8gSWRQJywgJ1NTTyArIHVwIHRvIDUgSWRQIGNvbmZpZ3MnLCB7IGlkcENvbmZpZ3M6IDUgfSwgNDAwMCwgWydwcm8nXSwgNywgeyBmZWF0dXJlczogWydzc28nXSwgc3RhY2thYmxlOiBmYWxzZSB9KSxcbiAgICAvLyBET1JBIC8gYWR2YW5jZWQgZGVsaXZlcnkgYW5hbHl0aWNzLiBJTkNMVURFRCBpbiBFbnRlcnByaXNlIChUSUVSX0ZFQVRVUkVTKSxcbiAgICAvLyBzbyB0aGUgYWRkLW9uIGlzIG9mZmVyZWQgdG8gZXZlcnkgb3RoZXIgdGllciAoZGV2ZWxvcGVyL3Byby90ZWFtKS4gUHJpY2VkXG4gICAgLy8gYmV0d2VlbiBBdWRpdCBMb2cgKCQyMCkgYW5kIFNTTyAoJDQwKSDigJQgYSBoaWdoZXItdmFsdWUsIGFjdGl2ZWx5LXVzZWRcbiAgICAvLyBhbmFseXRpY3Mgc3VyZmFjZSB0aGFuIHRoZSBhdWRpdCBsb2csIGJ1dCBiZWxvdyB0aGUgU1NPIGVudGVycHJpc2UgZ2F0ZS5cbiAgICBiKCdhZHZhbmNlZF9yZXBvcnRpbmcnLCAnQWR2YW5jZWQgUmVwb3J0aW5nIChET1JBKScsICdET1JBIGRlbGl2ZXJ5IG1ldHJpY3Mg4oCUIGRlcGxveW1lbnQgZnJlcXVlbmN5LCBjaGFuZ2UgZmFpbHVyZSByYXRlLCBNVFRSLCBsZWFkLXRpbWUgcHJveHksIHBlcmZvcm1hbmNlIGJhbmRzICsgdHJlbmQnLCB7fSwgMzAwMCwgWydkZXZlbG9wZXInLCAncHJvJywgJ3RlYW0nXSwgOCwgeyBmZWF0dXJlczogWydhZHZhbmNlZF9yZXBvcnRpbmcnXSwgc3RhY2thYmxlOiBmYWxzZSB9KSxcbiAgICAvLyBQZXItdGVhbSB1c2FnZSBicmVha2Rvd24gYWNyb3NzIHRoZSBvcmcg4oaSIHRlYW0gc3VidHJlZS4gSU5DTFVERUQgaW5cbiAgICAvLyBFbnRlcnByaXNlIChUSUVSX0ZFQVRVUkVTKTsgdGhlIGFkZC1vbiBpcyBvZmZlcmVkIHRvIFByby9UZWFtIChkZXZlbG9wZXIgaGFzXG4gICAgLy8gbm8gdGVhbXMgdG8gYnJlYWsgZG93bikuIFByaWNlZCBhdCAkMzAvbW8gKCQzMDAveXIpIOKAlCBwYXJpdHkgd2l0aCBET1JBLCBpdHNcbiAgICAvLyBhbmFseXRpY3Mgc2libGluZy4gT3ZlcnJpZGFibGUgdmlhIEJJTExJTkdfQlVORExFX1RFQU1fVVNBR0VfQU5BTFlUSUNTX01PTlRITFkvX0FOTlVBTC5cbiAgICBiKCd0ZWFtX3VzYWdlX2FuYWx5dGljcycsICdUZWFtIFVzYWdlIEFuYWx5dGljcycsICdQZXItdGVhbSB1c2FnZSBicmVha2Rvd24gYWNyb3NzIHRoZSBvcmcg4oaSIHRlYW0gc3VidHJlZSAoYWxsIHF1b3RhIGRpbWVuc2lvbnMpJywge30sIDMwMDAsIFsncHJvJywgJ3RlYW0nXSwgOSwgeyBmZWF0dXJlczogWyd0ZWFtX3VzYWdlX2FuYWx5dGljcyddLCBzdGFja2FibGU6IGZhbHNlIH0pLFxuICAgIC8vIFJldGVudGlvbiBwYWNrcyAoZG9jcy9iaWxsaW5nLWJ1bmRsZXMubWQpLiBTdGFja2FibGUgY2FwYWNpdHkgcGFja3MgdGhhdFxuICAgIC8vIHJhaXNlIHRoZSByZXBvcnRpbmcgcmV0ZW50aW9uIGVudGl0bGVtZW50IGJpbGxpbmcgc3luY3MgdG8gcmVwb3J0aW5nJ3NcbiAgICAvLyBgZG9yYV9zZXR0aW5nc2AuIE5PVCBxdW90YS1tZXRlcmVkIGZsb3cg4oCUIGBldmVudFJldGVudGlvbkRheXNgL2Bkb3JhUmV0ZW50aW9uRGF5c2BcbiAgICAvLyBhcmUgYWJzZW50IGZyb20gVkFMSURfUVVPVEFfVFlQRVMsIHNvIHRoZXkgbmV2ZXIgcmlkZSB0aGUgcXVvdGEtc2VydmljZSBsZWcuXG4gICAgLy8gU3RhbmRhcmQgUmV0ZW50aW9uIFBhY2s6ICs5MGQgc3RhbmRhcmQtZXZlbnQgcmV0ZW50aW9uIChiYXNlIDMwIOKGkiAxMjAg4oaSIDIxMOKApikuXG4gICAgLy8gQ2FwcGVkIGF0IDcgKDMwICsgN8OXOTAgPSA2NjAg4omkIHRoZSA3MzAtZGF5IHJldGVudGlvbiBjZWlsaW5nKS5cbiAgICBiKCdyZXRlbnRpb25fcGFjaycsICdTdGFuZGFyZCBSZXRlbnRpb24gUGFjayAoKzkwZCknLCAnOTAgYWRkaXRpb25hbCBkYXlzIG9mIHN0YW5kYXJkIHBpcGVsaW5lLWV2ZW50IHJldGVudGlvbicsIHsgZXZlbnRSZXRlbnRpb25EYXlzOiA5MCB9LCAxNTAwLCBBTEwsIDEwLCB7IG1heFF1YW50aXR5OiA3IH0pLFxuICAgIC8vIERPUkEgSGlzdG9yeSBQYWNrOiArMzY1ZCBET1JBIHJldGVudGlvbiBBTkQgcGVyLW9yZyByZXBvcnQtcXVlcnkgd2luZG93ICh0aGVcbiAgICAvLyB3aW5kb3cgY2FwIHRyYWNrcyBkb3JhUmV0ZW50aW9uRGF5cykuIE9ubHkgbWVhbmluZ2Z1bCB3aXRoIEFkdmFuY2VkIFJlcG9ydGluZ1xuICAgIC8vIOKAlCBJTkNMVURFRCBpbiBFbnRlcnByaXNlLCBhbiBhZGQtb24gb24gZGV2ZWxvcGVyL3Byby90ZWFtLiBDYXBwZWQgYXQgMVxuICAgIC8vICgxODAgKyAzNjUgPSA1NDUg4omkIHRoZSA3MzAtZGF5IHJldGVudGlvbiBjZWlsaW5nKS5cbiAgICBiKCdkb3JhX2hpc3RvcnlfcGFjaycsICdET1JBIEhpc3RvcnkgUGFjayAoKzM2NWQpJywgJzM2NSBhZGRpdGlvbmFsIGRheXMgb2YgRE9SQSBoaXN0b3J5ICsgcmVwb3J0LXF1ZXJ5IHdpbmRvdyAocmVxdWlyZXMgQWR2YW5jZWQgUmVwb3J0aW5nKScsIHsgZG9yYVJldGVudGlvbkRheXM6IDM2NSB9LCAzMDAwLCBBTEwsIDExLCB7IG1heFF1YW50aXR5OiAxIH0pLFxuICAgIC8vIENvbXBsaWFuY2UgY29udGVudCBhZGQtb25zIChkb2NzL3BsYW5zL2NvbXBsaWFuY2UtYWRkb25zLm1kKS4gRmVhdHVyZSBidW5kbGVzXG4gICAgLy8gZ2F0aW5nIGFjY2VzcyB0byBjdXJhdGVkIHN5c3RlbS1vcmcgcHVibGlzaGVkIHJ1bGUgc2V0cy4gSU5DTFVERUQgaW5cbiAgICAvLyBFbnRlcnByaXNlL1VubGltaXRlZCAodmlhIEFMTF9GRUFUVVJFX0ZMQUdTKTsgc29sZCB0byBEZXZlbG9wZXIvUHJvL1RlYW0uXG4gICAgLy8gU3RhbmRhcmQgPSB+MjAgQ0kvQ0QgYmVzdC1wcmFjdGljZSBydWxlcy4gQWR2YW5jZWQgPSBTT0MyL1BDSS9DSVMgZnJhbWV3b3JrXG4gICAgLy8gbGlicmFyaWVzOyBSRVFVSVJFUyBTdGFuZGFyZCAob3IgYnV5IHRoZSBTdWl0ZSBjb21ibyBmb3IgYm90aCBhdCAzMCUgb2ZmKS5cbiAgICBiKCdjb21wbGlhbmNlX3N0YW5kYXJkJywgJ1N0YW5kYXJkIENvbXBsaWFuY2UnLCAnQ3VyYXRlZCBDSS9DRCBiZXN0LXByYWN0aWNlIGNvbXBsaWFuY2UgcnVsZXMnLCB7fSwgMjk5MCwgWydkZXZlbG9wZXInLCAncHJvJywgJ3RlYW0nXSwgMTIsIHsgZmVhdHVyZXM6IFsnY29tcGxpYW5jZV9zdGFuZGFyZCddLCBzdGFja2FibGU6IGZhbHNlIH0pLFxuICAgIGIoJ2NvbXBsaWFuY2VfYWR2YW5jZWQnLCAnQWR2YW5jZWQgQ29tcGxpYW5jZScsICdDdXJhdGVkIGZyYW1ld29yayBjb21wbGlhbmNlIGxpYnJhcmllcyAoU09DMiAvIFBDSS1EU1MgLyBDSVMpJywge30sIDk5OTAsIFsnZGV2ZWxvcGVyJywgJ3BybycsICd0ZWFtJ10sIDEzLCB7IGZlYXR1cmVzOiBbJ2NvbXBsaWFuY2VfYWR2YW5jZWQnXSwgc3RhY2thYmxlOiBmYWxzZSwgcmVxdWlyZXM6IFsnY29tcGxpYW5jZV9zdGFuZGFyZCddIH0pLFxuICBdO1xuICBhc3NlcnRCdW5kbGVSZXF1aXJlc1ZhbGlkKGJ1bmRsZXMpO1xuICByZXR1cm4gYnVuZGxlcztcbn1cblxuLyoqXG4gKiBDb25maWctbG9hZCBndWFyZHJhaWwgZm9yIHRoZSBgcmVxdWlyZXNgIHByZXJlcXVpc2l0ZSBncmFwaC4gQSBgcmVxdWlyZXNgIGVudHJ5XG4gKiB0aGF0IGRvZXNuJ3QgcmVzb2x2ZSB0byBhbiBBQ1RJVkUgYnVuZGxlIOKAlCBvciB0aGF0IHBhcnRpY2lwYXRlcyBpbiBhIGN5Y2xlIOKAlFxuICogc2lsZW50bHkgbWFrZXMgdGhlIHJlZmVyZW5jaW5nIGJ1bmRsZSB1bnB1cmNoYXNhYmxlICh0aGUgYWRkb24gcm91dGUgcmVqZWN0c1xuICogd2l0aCA0MDAgZm9yZXZlciBiZWNhdXNlIHRoZSBwcmVyZXF1aXNpdGUgY2FuIG5ldmVyIGJlIHNhdGlzZmllZCkuIENhdGNoIGl0IGF0XG4gKiBsb2FkIHdpdGggYSBjbGVhciBlcnJvciByYXRoZXIgdGhhbiBzaGlwcGluZyBhIGRlYWQgU0tVLlxuICpcbiAqICAtIEV2ZXJ5IGlkIGluIGEgYnVuZGxlJ3MgYHJlcXVpcmVzYCBNVVNUIG5hbWUgYW4gYWN0aXZlIGJ1bmRsZSBpbiB0aGUgY2F0YWxvZy5cbiAqICAtIFRoZSBgcmVxdWlyZXNgIGdyYXBoIE1VU1QgYmUgYWN5Y2xpYyAoYSDihpIgYiDihpIgYSBjYW4gbmV2ZXIgYmUgc2F0aXNmaWVkKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEJ1bmRsZVJlcXVpcmVzVmFsaWQoYnVuZGxlczogQnVuZGxlQ29uZmlnW10pOiB2b2lkIHtcbiAgY29uc3QgYWN0aXZlID0gbmV3IE1hcChidW5kbGVzLmZpbHRlcigoYikgPT4gYi5pc0FjdGl2ZSkubWFwKChiKSA9PiBbYi5pZCwgYl0pKTtcblxuICAvLyAxLiBWYWxpZGl0eTogZXZlcnkgcmVxdWlyZXMgaWQgcmVzb2x2ZXMgdG8gYW4gYWN0aXZlIGJ1bmRsZS5cbiAgZm9yIChjb25zdCBidW5kbGUgb2YgYnVuZGxlcykge1xuICAgIGZvciAoY29uc3QgcmVxSWQgb2YgYnVuZGxlLnJlcXVpcmVzID8/IFtdKSB7XG4gICAgICBpZiAoIWFjdGl2ZS5oYXMocmVxSWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgW2JpbGxpbmctY29uZmlnXSBCdW5kbGUgXCIke2J1bmRsZS5pZH1cIiByZXF1aXJlcyBcIiR7cmVxSWR9XCIsIHdoaWNoIGlzIG5vdCBhbiBhY3RpdmUgYnVuZGxlIGluIHRoZSBjYXRhbG9nIOKAlCBpdCB3b3VsZCBiZSBwZXJtYW5lbnRseSB1bnB1cmNoYXNhYmxlLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gMi4gQWN5Y2xpY2l0eTogREZTIG92ZXIgdGhlIHJlcXVpcmVzIGVkZ2VzLCB0cmFja2luZyB0aGUgY3VycmVudCBwYXRoLlxuICBjb25zdCBWSVNJVElORyA9IDE7XG4gIGNvbnN0IERPTkUgPSAyO1xuICBjb25zdCBzdGF0ZSA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoaWQ6IHN0cmluZywgcGF0aDogc3RyaW5nW10pOiB2b2lkID0+IHtcbiAgICBjb25zdCBzID0gc3RhdGUuZ2V0KGlkKTtcbiAgICBpZiAocyA9PT0gRE9ORSkgcmV0dXJuO1xuICAgIGlmIChzID09PSBWSVNJVElORykge1xuICAgICAgY29uc3QgY3ljbGUgPSBbLi4ucGF0aC5zbGljZShwYXRoLmluZGV4T2YoaWQpKSwgaWRdLmpvaW4oJyAtPiAnKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgW2JpbGxpbmctY29uZmlnXSBCdW5kbGUgXCJyZXF1aXJlc1wiIGN5Y2xlIGRldGVjdGVkOiAke2N5Y2xlfS5gKTtcbiAgICB9XG4gICAgc3RhdGUuc2V0KGlkLCBWSVNJVElORyk7XG4gICAgZm9yIChjb25zdCByZXFJZCBvZiBhY3RpdmUuZ2V0KGlkKT8ucmVxdWlyZXMgPz8gW10pIHtcbiAgICAgIHZpc2l0KHJlcUlkLCBbLi4ucGF0aCwgaWRdKTtcbiAgICB9XG4gICAgc3RhdGUuc2V0KGlkLCBET05FKTtcbiAgfTtcblxuICBmb3IgKGNvbnN0IGJ1bmRsZSBvZiBhY3RpdmUua2V5cygpKSB7XG4gICAgdmlzaXQoYnVuZGxlLCBbXSk7XG4gIH1cbn1cbiJdfQ==
|
|
440
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGluZy1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2JpbGxpbmctY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQXdDLE1BQU0sNEJBQTRCLENBQUM7QUFPMUssZ0ZBQWdGO0FBQ2hGLDhFQUE4RTtBQUM5RSxrREFBa0Q7QUFDbEQsa0ZBQWtGO0FBQ2xGLGlEQUFpRDtBQUNqRCx3RUFBd0U7QUFDeEUsMkVBQTJFO0FBQzNFLDZFQUE2RTtBQUM3RSwrRUFBK0U7QUFDL0UsaUZBQWlGO0FBQ2pGLDRFQUE0RTtBQUU1RSx3RkFBd0Y7QUFDeEYsU0FBUyxTQUFTLENBQUMsS0FBYSxFQUFFLFFBQWdCLEVBQUUsTUFBYztJQUNoRSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7UUFBRSxPQUFPLGFBQWEsTUFBTSxFQUFFLENBQUM7SUFDL0MsT0FBTyxTQUFTLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNyRixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsSUFBZSxFQUFFLEtBQWU7SUFDdkQsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNuQyxPQUFPO1FBQ0wsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUNuQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDO1FBQ3pDLFNBQVMsQ0FBQyxDQUFDLENBQUMs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LElBQUksS0FBSyxDQUFDLHNEQUFzRCxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7UUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4QixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ25ELEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0QixDQUFDLENBQUM7SUFFRixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ25DLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBMb2FkIGJpbGxpbmcgcGxhbiBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqIFBlci1wbGFuIHByaWNlcyBhcmUgdGhlIG1vc3QgbGlrZWx5IHRvIHZhcnkgYmV0d2VlbiBlbnZpcm9ubWVudHM6XG4gKiAgIEJJTExJTkdfUExBTl97VElFUn1fTU9OVEhMWSAvIEJJTExJTkdfUExBTl97VElFUn1fQU5OVUFMICAoaW4gY2VudHMpXG4gKlxuICogT3B0aW9uYWwgb3ZlcnJpZGVzIGZvciBkZXNjcmlwdGlvbnMgYW5kIGZlYXR1cmVzOlxuICogICBCSUxMSU5HX1BMQU5fe1RJRVJ9X05BTUUgICAgICAgICAgKHBsYWluIHN0cmluZywgZGlzcGxheSBuYW1lKVxuICogICBCSUxMSU5HX1BMQU5fe1RJRVJ9X0RFU0NSSVBUSU9OICAgKHBsYWluIHN0cmluZylcbiAqICAgQklMTElOR19QTEFOX3tUSUVSfV9GRUFUVVJFUyAgICAgIChKU09OIHN0cmluZyBhcnJheSlcbiAqXG4gKiBBbGwgZGVmYXVsdHMgbWF0Y2ggdGhlIG9yaWdpbmFsIGhhcmRjb2RlZCBzZWVkIGRhdGEuXG4gKi9cbmltcG9ydCB7IFFVT1RBX1RJRVJTLCBUSUVSX0ZFQVRVUkVTLCBGRUFUVVJFX01FVEFEQVRBLCBWQUxJRF9USUVSUywgU1RBTkRBUkRfVElFUlMsIGlzVmFsaWRUaWVyLCB0eXBlIFF1b3RhVGllciwgdHlwZSBRdW90YVRpZXJMaW1pdHMgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IEJpbGxpbmdDb25maWcsIEJpbGxpbmdQbGFuQ29uZmlnLCBCdW5kbGVDb25maWcsIENvbWJvRGlzY291bnRDb25maWcgfSBmcm9tICcuL2NvbmZpZy10eXBlcy5qcyc7XG5cbi8qKiBQZXItdW5pdCBxdW90YSBkZWx0YXMgZm9yIGEgYnVuZGxlIOKAlCBrZXlzIGNvbnN0cmFpbmVkIHRvIHJlYWwgcXVvdGEgZmllbGRzXG4gKiAgKG1hdGNoZXMgYEJ1bmRsZUNvbmZpZy5ncmFudHNgKSwgc28gYSB0eXBvJ2QgZGltZW5zaW9uIGZhaWxzIHRvIGNvbXBpbGUuICovXG50eXBlIEdyYW50TWFwID0gUGFydGlhbDxSZWNvcmQ8a2V5b2YgUXVvdGFUaWVyTGltaXRzLCBudW1iZXI+PjtcblxuLy8gLS0gRGVmYXVsdCBmZWF0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoZSBtYXJrZXRlZCBmZWF0dXJlIGxpc3QgaXMgYnVpbHQgZnJvbSB0d28gZGVyaXZlZCBzb3VyY2VzIHNvIGl0IGNhbiBuZXZlclxuLy8gZHJpZnQgZnJvbSB3aGF0IHRoZSBwbGF0Zm9ybSBhY3R1YWxseSBlbmZvcmNlczpcbi8vICAgMS4gTElNSVQgbGluZXMgZGVyaXZlZCBmcm9tIGVhY2ggdGllcidzIEVGRkVDVElWRSBxdW90YSBsaW1pdHMgKFFVT1RBX1RJRVJTKSxcbi8vICAgICAgc28gdGhleSB0cmFjayBRVU9UQV9USUVSXyogZW52IG92ZXJyaWRlcy5cbi8vICAgMi4gSU5DTFVERUQtRkVBVFVSRSBsaW5lcyBkZXJpdmVkIGZyb20gdGhlIGVuZm9yY2VkIGVudGl0bGVtZW50IHNldFxuLy8gICAgICAoVElFUl9GRUFUVVJFUykgdmlhIEZFQVRVUkVfTUVUQURBVEEgbGFiZWxzIOKAlCBzbyBhbiBhZHZlcnRpc2VkIGJhc2Vcbi8vICAgICAgZmVhdHVyZSBpcyBhbHdheXMgb25lIGByZXF1aXJlRmVhdHVyZWAgYWN0dWFsbHkgZ3JhbnRzIGZvciB0aGF0IHRpZXIuXG4vLyBPbmx5IGdlbnVpbmVseSBub24tZ2F0ZWQgbWFya2V0aW5nIGNvcHkgKHN1cHBvcnQgbGV2ZWwsIGRhc2hib2FyZHMsIFJCQUMpIGlzXG4vLyBoYW5kLWF1dGhvcmVkLCBwYXNzZWQgYXMgYHBlcmtzYC4gUHVyY2hhc2FibGUgYWRkLW9ucyAoc3NvLCBhdWRpdF9sb2cpIGFyZSBOT1Rcbi8vIGxpc3RlZCBhcyBiYXNlIHBlcmtzIGhlcmUg4oCUIHRoZXkgYXJlIHNvbGQgYXMgYnVuZGxlcyAoc2VlIGxvYWRCdW5kbGVzKCkpLlxuXG4vKiogXCJVcCB0byBOIHBsdWdpbnNcIiAvIFwiVW5saW1pdGVkIHBsdWdpbnNcIiBmcm9tIGFuIGVmZmVjdGl2ZSBsaW1pdCAoLTEgPSB1bmxpbWl0ZWQpLiAqL1xuZnVuY3Rpb24gbGltaXRMaW5lKGxpbWl0OiBudW1iZXIsIHNpbmd1bGFyOiBzdHJpbmcsIHBsdXJhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGxpbWl0ID09PSAtMSkgcmV0dXJuIGBVbmxpbWl0ZWQgJHtwbHVyYWx9YDtcbiAgcmV0dXJuIGBVcCB0byAke2xpbWl0LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycpfSAke2xpbWl0ID09PSAxID8gc2luZ3VsYXIgOiBwbHVyYWx9YDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZlYXR1cmVzKHRpZXI6IFF1b3RhVGllciwgcGVya3M6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBjb25zdCBsID0gUVVPVEFfVElFUlNbdGllcl0ubGltaXRzO1xuICByZXR1cm4gW1xuICAgIGxpbWl0TGluZShsLnNlYXRzLCAnc2VhdCcsICdzZWF0cycpLFxuICAgIGxpbWl0TGluZShsLnBsdWdpbnMsICdwbHVnaW4nLCAncGx1Z2lucycpLFxuICAgIGxpbWl0TGluZShsLnBpcGVsaW5lcywgJ3BpcGVsaW5lJywgJ3BpcGVsaW5lcycpLFxuICAgIGxpbWl0TGluZShsLmFwaUNhbGxzLCAnQVBJIGNhbGwnLCAnQVBJIGNhbGxzJyksXG4gICAgbGltaXRMaW5lKGwuYWlDYWxscywgJ0FJIGNhbGwnLCAnQUkgY2FsbHMnKSxcbiAgICAvLyBFbmZvcmNlZCBlbnRpdGxlbWVudHMg4oaSIGN1c3RvbWVyLWZhY2luZyBsYWJlbHMgKHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGgpLlxuICAgIC4uLlRJRVJfRkVBVFVSRVNbdGllcl0ubWFwKChmKSA9PiBGRUFUVVJFX01FVEFEQVRBW2ZdLmxhYmVsKSxcbiAgICAuLi5wZXJrcyxcbiAgXTtcbn1cblxuLy8gTm90ZTogYHBlcmtzYCBhcmUgbm9uLWdhdGVkIG1hcmtldGluZyBsaW5lcyBvbmx5LiBFbmZvcmNlZCBmZWF0dXJlcyAoaW5jbC5cbi8vIFByaW9yaXR5IFN1cHBvcnQgZm9yIHByby90ZWFtL2VudGVycHJpc2UpIGNvbWUgZnJvbSBUSUVSX0ZFQVRVUkVTIGFib3ZlLlxuY29uc3QgREVGQVVMVF9ERVZFTE9QRVJfRkVBVFVSRVMgPSBkZWZhdWx0RmVhdHVyZXMoJ2RldmVsb3BlcicsIFsnQ29tbXVuaXR5IHN1cHBvcnQnXSk7XG5jb25zdCBERUZBVUxUX1BST19GRUFUVVJFUyA9IGRlZmF1bHRGZWF0dXJlcygncHJvJywgWydSZXBvcnRpbmcgZGFzaGJvYXJkJ10pO1xuY29uc3QgREVGQVVMVF9URUFNX0ZFQVRVUkVTID0gZGVmYXVsdEZlYXR1cmVzKCd0ZWFtJywgWydSQkFDICYgdGVhbSByb2xlcyddKTtcbmNvbnN0IERFRkFVTFRfRU5URVJQUklTRV9GRUFUVVJFUyA9IGRlZmF1bHRGZWF0dXJlcygnZW50ZXJwcmlzZScsIFtcbiAgJ1JCQUMgJiB0ZWFtIHJvbGVzJywgJ1JlcG9ydGluZyBkYXNoYm9hcmQnLFxuXSk7XG4vLyBVbmxpbWl0ZWQgaW5jbHVkZXMgZXZlcnkgZmVhdHVyZSAoVElFUl9GRUFUVVJFUy51bmxpbWl0ZWQgPSBhbGwpLlxuY29uc3QgREVGQVVMVF9VTkxJTUlURURfRkVBVFVSRVMgPSBkZWZhdWx0RmVhdHVyZXMoJ3VubGltaXRlZCcsIFtcbiAgJ1VubGltaXRlZCBldmVyeXRoaW5nJywgJ1JCQUMgJiB0ZWFtIHJvbGVzJywgJ1JlcG9ydGluZyBkYXNoYm9hcmQnLFxuXSk7XG5cbi8qKlxuICogUGFyc2UgYSBwcmljZSAoaW4gY2VudHMpIGZyb20gYW4gZW52IHZhciwgZmFsbGluZyBiYWNrIHRvIHRoZSBkZWZhdWx0IHdoZW5cbiAqIHVuc2V0IE9SIG1hbGZvcm1lZC4gQSBOYU4gKGUuZy4gYEJJTExJTkdfUExBTl9QUk9fTU9OVEhMWT1hYmNgKSBtdXN0IG5ldmVyXG4gKiBmbG93IGludG8gdGhlIHJldHVybmVkIGNvbmZpZyBhcyBhIHByaWNlLlxuICovXG5mdW5jdGlvbiBlbnZDZW50cyhlbnZWYXI6IHN0cmluZyB8IHVuZGVmaW5lZCwgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChlbnZWYXIgPT09IHVuZGVmaW5lZCB8fCBlbnZWYXIgPT09ICcnKSByZXR1cm4gZmFsbGJhY2s7XG4gIC8vIGBwYXJzZUludGAgaXMgdG9vIGxlbmllbnQgaGVyZTogJzQ5Ljk5J+KGkjQ5LCAnNDlhYmMn4oaSNDksICctMTAwJ+KGki0xMDAgd291bGQgYWxsXG4gIC8vIGZsb3cgdGhyb3VnaCBhcyBhIFwicHJpY2VcIi4gUmVxdWlyZSBhIGNsZWFuLCBub24tbmVnYXRpdmUgaW50ZWdlciAoY2VudHMpLFxuICAvLyBtYXRjaGluZyBgYXBwbHlHcmFudE92ZXJyaWRlYCdzIHJpZ29yIOKAlCBhbnl0aGluZyBlbHNlIGZhbGxzIGJhY2suXG4gIGNvbnN0IG4gPSBOdW1iZXIoZW52VmFyKTtcbiAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIobikgJiYgbiA+PSAwID8gbiA6IGZhbGxiYWNrO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgSlNPTiBhcnJheSBmcm9tIGFuIGVudiB2YXIsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LlxuICovXG5mdW5jdGlvbiBwYXJzZUZlYXR1cmVzKGVudlZhcjogc3RyaW5nIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGlmICghZW52VmFyKSByZXR1cm4gZmFsbGJhY2s7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShlbnZWYXIpO1xuICAgIC8vIEFycmF5LW9mLXN0cmluZ3Mgb25seSDigJQgYSBKU09OIGFycmF5IG9mIG5vbi1zdHJpbmdzIChlLmcuIGBbMSwyXWApIG11c3Qgbm90XG4gICAgLy8gc2hpcCBudW1iZXJzIGFzIGZlYXR1cmUgbGFiZWxzLiBGaWx0ZXIgdG8gc3RyaW5ncyAobWlycm9ycyBhcHBseVRpZXJzT3ZlcnJpZGUpLlxuICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJzZWQpKSByZXR1cm4gZmFsbGJhY2s7XG4gICAgY29uc3Qgc3RyaW5ncyA9IHBhcnNlZC5maWx0ZXIoKHgpOiB4IGlzIHN0cmluZyA9PiB0eXBlb2YgeCA9PT0gJ3N0cmluZycpO1xuICAgIHJldHVybiBzdHJpbmdzLmxlbmd0aCA9PT0gcGFyc2VkLmxlbmd0aCA/IHN0cmluZ3MgOiBmYWxsYmFjaztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbGxiYWNrO1xuICB9XG59XG5cbi8qKlxuICogTG9hZCBiaWxsaW5nIHBsYW4gY29uZmlndXJhdGlvbiBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRCaWxsaW5nQ29uZmlnKCk6IEJpbGxpbmdDb25maWcge1xuICAvLyBLZXllZCBieSBRdW90YVRpZXIgc28gdGhlIGNvbXBpbGVyIGZvcmNlcyBhIHBsYW4gZm9yIEVWRVJZIHRpZXIg4oCUIGFkZGluZyBhXG4gIC8vIDV0aCBRdW90YVRpZXIgd2l0aG91dCBhIHBsYW4gaGVyZSBpcyBub3cgYSBjb21waWxlIGVycm9yICh3YXMgYSBoYW5kLWtlcHRcbiAgLy8gNC1lbGVtZW50IGFycmF5IHRoYXQgc2lsZW50bHkgc2hpcHBlZCBubyBwbGFuL3ByaWNlIGZvciBhIG5ldyB0aWVyKS4gVGhlXG4gIC8vIHB1YmxpYyBgY29uZmlnLnBsYW5zYCBzaGFwZSBzdGF5cyBhbiBhcnJheSwgZGVyaXZlZCBiZWxvdyBpbiBWQUxJRF9USUVSU1xuICAvLyBvcmRlciAoZGV2ZWxvcGVyLCBwcm8sIHRlYW0sIGVudGVycHJpc2UsIHVubGltaXRlZCkgdG8gcHJlc2VydmUgY29uc3VtZXIgb3JkZXJpbmcuXG4gIGNvbnN0IHBsYW5CeVRpZXI6IFJlY29yZDxRdW90YVRpZXIsIEJpbGxpbmdQbGFuQ29uZmlnPiA9IHtcbiAgICBkZXZlbG9wZXI6IHtcbiAgICAgIGlkOiAnZGV2ZWxvcGVyJyxcbiAgICAgIG5hbWU6IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9ERVZFTE9QRVJfTkFNRSB8fCAnRGV2ZWxvcGVyJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fREVWRUxPUEVSX0RFU0NSSVBUSU9OXG4gICAgICAgIHx8ICdGcmVlIHN0YXJ0ZXIgdGllciBmb3IgaW5kaXZpZHVhbCBkZXZlbG9wZXJzJyxcbiAgICAgIHRpZXI6ICdkZXZlbG9wZXInLFxuICAgICAgcHJpY2VzOiB7XG4gICAgICAgIG1vbnRobHk6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9ERVZFTE9QRVJfTU9OVEhMWSwgMCksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0RFVkVMT1BFUl9BTk5VQUwsIDApLFxuICAgICAgfSxcbiAgICAgIGZlYXR1cmVzOiBwYXJzZUZlYXR1cmVzKFxuICAgICAgICBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fREVWRUxPUEVSX0ZFQVRVUkVTLFxuICAgICAgICBERUZBVUxUX0RFVkVMT1BFUl9GRUFUVVJFUyxcbiAgICAgICksXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogdHJ1ZSxcbiAgICAgIHNvcnRPcmRlcjogMCxcbiAgICB9LFxuICAgIHBybzoge1xuICAgICAgaWQ6ICdwcm8nLFxuICAgICAgbmFtZTogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1BST19OQU1FIHx8ICdQcm8nLFxuICAgICAgZGVzY3JpcHRpb246IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9QUk9fREVTQ1JJUFRJT05cbiAgICAgICAgfHwgJ0ZvciBpbmRpdmlkdWFsIHBvd2VyIHVzZXJzIGFuZCBwcm9kdWN0aW9uIHdvcmtsb2FkcycsXG4gICAgICB0aWVyOiAncHJvJyxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBtb250aGx5OiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fUFJPX01PTlRITFksIDM5MDApLFxuICAgICAgICBhbm51YWw6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9QUk9fQU5OVUFMLCAzOTAwMCksXG4gICAgICB9LFxuICAgICAgZmVhdHVyZXM6IHBhcnNlRmVhdHVyZXMoXG4gICAgICAgIHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9QUk9fRkVBVFVSRVMsXG4gICAgICAgIERFRkFVTFRfUFJPX0ZFQVRVUkVTLFxuICAgICAgKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICAgIHNvcnRPcmRlcjogMSxcbiAgICB9LFxuICAgIHRlYW06IHtcbiAgICAgIGlkOiAndGVhbScsXG4gICAgICBuYW1lOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVEVBTV9OQU1FIHx8ICdUZWFtJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVEVBTV9ERVNDUklQVElPTlxuICAgICAgICB8fCAnRm9yIHRlYW1zIGNvbGxhYm9yYXRpbmcgb24gc2hhcmVkIHBpcGVsaW5lcycsXG4gICAgICB0aWVyOiAndGVhbScsXG4gICAgICBwcmljZXM6IHtcbiAgICAgICAgbW9udGhseTogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1RFQU1fTU9OVEhMWSwgNzkwMCksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1RFQU1fQU5OVUFMLCA3OTAwMCksXG4gICAgICB9LFxuICAgICAgZmVhdHVyZXM6IHBhcnNlRmVhdHVyZXMoXG4gICAgICAgIHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9URUFNX0ZFQVRVUkVTLFxuICAgICAgICBERUZBVUxUX1RFQU1fRkVBVFVSRVMsXG4gICAgICApLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBpc0RlZmF1bHQ6IGZhbHNlLFxuICAgICAgc29ydE9yZGVyOiAyLFxuICAgIH0sXG4gICAgZW50ZXJwcmlzZToge1xuICAgICAgaWQ6ICdlbnRlcnByaXNlJyxcbiAgICAgIG5hbWU6IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9FTlRFUlBSSVNFX05BTUUgfHwgJ0VudGVycHJpc2UnLFxuICAgICAgZGVzY3JpcHRpb246IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9FTlRFUlBSSVNFX0RFU0NSSVBUSU9OXG4gICAgICAgIHx8ICdPcmctd2lkZSBzY2FsZSB3aXRoIHVubGltaXRlZCBzZWF0cyBhbmQgcHJpb3JpdHkgc3VwcG9ydCcsXG4gICAgICB0aWVyOiAnZW50ZXJwcmlzZScsXG4gICAgICBwcmljZXM6IHtcbiAgICAgICAgbW9udGhseTogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0VOVEVSUFJJU0VfTU9OVEhMWSwgNTk5MDApLFxuICAgICAgICBhbm51YWw6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9FTlRFUlBSSVNFX0FOTlVBTCwgNTk5MDAwKSxcbiAgICAgIH0sXG4gICAgICBmZWF0dXJlczogcGFyc2VGZWF0dXJlcyhcbiAgICAgICAgcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0VOVEVSUFJJU0VfRkVBVFVSRVMsXG4gICAgICAgIERFRkFVTFRfRU5URVJQUklTRV9GRUFUVVJFUyxcbiAgICAgICksXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogZmFsc2UsXG4gICAgICBzb3J0T3JkZXI6IDMsXG4gICAgfSxcbiAgICAvLyBUaGUgYmlsbGluZy1ESVNBQkxFRCBkZWZhdWx0IHBsYW46IGV2ZXJ5dGhpbmcgdW5jYXBwZWQsIGFsbCBmZWF0dXJlcywgZnJlZS5cbiAgICAvLyBTZWVkZWQgc28gdGhlIHRpZXLihpJwbGFuIG1hcHBpbmcgcmVzb2x2ZXMsIGJ1dCBuZXZlciBvZmZlcmVkIGZvciBzYWxlIOKAlCB0aGVcbiAgICAvLyByZWFkLXBsYW5zIHJvdXRlIGZpbHRlcnMgaXQgb3V0IChzZWUgY3JlYXRlUmVhZFBsYW5Sb3V0ZXMpLCBzbyBpdCdzIGhpZGRlblxuICAgIC8vIHdoZW5ldmVyIGJpbGxpbmcgaXMgZW5hYmxlZCAodGhlIG9ubHkgdGltZSAvcGxhbnMgaXMgc2VydmVkKS5cbiAgICB1bmxpbWl0ZWQ6IHtcbiAgICAgIGlkOiAndW5saW1pdGVkJyxcbiAgICAgIG5hbWU6IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9VTkxJTUlURURfTkFNRSB8fCAnVW5saW1pdGVkJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVU5MSU1JVEVEX0RFU0NSSVBUSU9OXG4gICAgICAgIHx8ICdFdmVyeXRoaW5nIHVuY2FwcGVkIOKAlCB0aGUgZGVmYXVsdCB3aGVuIGJpbGxpbmcgaXMgZGlzYWJsZWQnLFxuICAgICAgdGllcjogJ3VubGltaXRlZCcsXG4gICAgICBwcmljZXM6IHtcbiAgICAgICAgbW9udGhseTogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1VOTElNSVRFRF9NT05USExZLCAwKSxcbiAgICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVU5MSU1JVEVEX0FOTlVBTCwgMCksXG4gICAgICB9LFxuICAgICAgZmVhdHVyZXM6IHBhcnNlRmVhdHVyZXMoXG4gICAgICAgIHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9VTkxJTUlURURfRkVBVFVSRVMsXG4gICAgICAgIERFRkFVTFRfVU5MSU1JVEVEX0ZFQVRVUkVTLFxuICAgICAgKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICAgIHNvcnRPcmRlcjogNCxcbiAgICB9LFxuICB9O1xuXG4gIC8vIERlcml2ZSB0aGUgYXJyYXkgY29uc3VtZXJzIHJlYWQgKGBjb25maWcucGxhbnNgKSBpbiBjYW5vbmljYWwgdGllciBvcmRlci5cbiAgY29uc3QgcGxhbnM6IEJpbGxpbmdQbGFuQ29uZmlnW10gPSBWQUxJRF9USUVSUy5tYXAoKHRpZXIpID0+IHBsYW5CeVRpZXJbdGllcl0pO1xuXG4gIC8vIEJ1aWxkIGJ1bmRsZXMgT05DRSBhbmQgdGhyZWFkIHRoZW0gaW50byB0aGUgY29tYm8gbG9hZGVyICh3aGljaCBuZWVkcyB0aGVpclxuICAvLyBlbnYtZWZmZWN0aXZlIHByaWNlcykg4oCUIGF2b2lkcyBwYXJzaW5nIHRoZSB3aG9sZSBidW5kbGUgY2F0YWxvZyB0d2ljZSBwZXIgbG9hZC5cbiAgY29uc3QgYnVuZGxlcyA9IGxvYWRCdW5kbGVzKCk7XG4gIHJldHVybiB7IHBsYW5zLCBidW5kbGVzLCBjb21ib0Rpc2NvdW50czogbG9hZENvbWJvRGlzY291bnRzKGJ1bmRsZXMpIH07XG59XG5cbi8qKlxuICogQ29tYm8gZGlzY291bnRzIChkb2NzL2JpbGxpbmctYnVuZGxlcy5tZCDCp0NvbWJvIHByaWNpbmcpLiBXaGVuIGFuIGFjY291bnQgb3duc1xuICogZXZlcnkgbWVtYmVyIGJ1bmRsZSAoZWFjaCBhdCDiiaUgaXRzIG1pbmltdW0gcXVhbnRpdHkpLCB0aGUgc2V0IGlzIGJpbGxlZCBhdCB0aGVcbiAqIGNvbWJpbmVkIHByaWNlIGluc3RlYWQgb2YgdGhlIHN1bSBvZiB0aGUgbWVtYmVycyDigJQgcmVhbGl6ZWQgYXMgYSByZWN1cnJpbmcgdXNhZ2VcbiAqIGNyZWRpdCBmb3IgdGhlIGRpZmZlcmVuY2UuIE92ZXJsYXBwaW5nIGNvbWJvcyBhcmUgcmVzb2x2ZWQgYnkgbWF4LXdlaWdodCBwYWNraW5nXG4gKiAoYSBzaGFyZWQgYWRkLW9uIGlzIG5ldmVyIGRpc2NvdW50ZWQgdHdpY2UpOyBgc29ydE9yZGVyYCBicmVha3MgZXF1YWwtdG90YWwgdGllcy5cbiAqXG4gKiBEZWZhdWx0czpcbiAqICAtIFwiQW5hbHl0aWNzIFN1aXRlXCIg4oCUIEFkdmFuY2VkIFJlcG9ydGluZyAoRE9SQSkgKyBUZWFtIFVzYWdlIEFuYWx5dGljcywgZWFjaFxuICogICAgJDMwL21vLCB0b2dldGhlciAkNDIvbW8gKCQ0MjAveXIpIOKGkiBhICQxOC9tbyBjcmVkaXQgKH4zMCUgb2ZmKS5cbiAqICAtIFwiVGVhbSBHcm93dGggQnVuZGxlXCIg4oCUIOKJpTUgU2VhdHMgKCQxOS45OSBlYSkgKyBUZWFtIFVzYWdlIEFuYWx5dGljcyAoJDMwKSxcbiAqICAgIGJhc2tldCAkMTI5Ljk1L21vIOKGkiB0b2dldGhlciAkOTAuOTkvbW8gKCQ5MDkuOTAveXIpIOKGkiBhIH4kMzguOTYvbW8gY3JlZGl0ICh+MzAlIG9mZikuXG4gKiAgLSBcIlNjYWxlIEJ1bmRsZVwiIOKAlCBBUEkgUGFjayAoJDE5Ljk5KSArIFN0b3JhZ2UgUGFjayAoJDE5Ljk5KSwgYmFza2V0ICQzOS45OC9tb1xuICogICAg4oaSIHRvZ2V0aGVyICQyNy45OS9tbyAoJDI3OS45MC95cikg4oaSIGEgfiQxMS45OS9tbyBjcmVkaXQgKH4zMCUgb2ZmKS5cbiAqIFByaWNlcyBlbnYtb3ZlcnJpZGFibGUgdmlhIGBCSUxMSU5HX0NPTUJPXzxJRD5fTU9OVEhMWWAgLyBgX0FOTlVBTGAuXG4gKi9cbmZ1bmN0aW9uIGxvYWRDb21ib0Rpc2NvdW50cyhidW5kbGVzOiBCdW5kbGVDb25maWdbXSk6IENvbWJvRGlzY291bnRDb25maWdbXSB7XG4gIGNvbnN0IGMgPSAoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgYnVuZGxlSWRzOiBzdHJpbmdbXSxcbiAgICBtb250aGx5OiBudW1iZXIsXG4gICAgYW5udWFsOiBudW1iZXIsXG4gICAgc29ydE9yZGVyOiBudW1iZXIsXG4gICAgbWluUXVhbnRpdGllcz86IFJlY29yZDxzdHJpbmcsIG51bWJlcj4sXG4gICk6IENvbWJvRGlzY291bnRDb25maWcgPT4gKHtcbiAgICBpZCxcbiAgICBuYW1lLFxuICAgIGJ1bmRsZUlkcyxcbiAgICAuLi4obWluUXVhbnRpdGllcyA/IHsgbWluUXVhbnRpdGllcyB9IDoge30pLFxuICAgIHByaWNlczoge1xuICAgICAgbW9udGhseTogZW52Q2VudHMocHJvY2Vzcy5lbnZbYEJJTExJTkdfQ09NQk9fJHtpZC50b1VwcGVyQ2FzZSgpfV9NT05USExZYF0sIG1vbnRobHkpLFxuICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudltgQklMTElOR19DT01CT18ke2lkLnRvVXBwZXJDYXNlKCl9X0FOTlVBTGBdLCBhbm51YWwpLFxuICAgIH0sXG4gICAgc29ydE9yZGVyLFxuICAgIGlzQWN0aXZlOiB0cnVlLFxuICB9KTtcblxuICBjb25zdCBjb21ib3MgPSBbXG4gICAgYygnYW5hbHl0aWNzX3N1aXRlJywgJ0FuYWx5dGljcyBTdWl0ZScsIFsnYWR2YW5jZWRfcmVwb3J0aW5nJywgJ3RlYW1fdXNhZ2VfYW5hbHl0aWNzJ10sIDQyMDAsIDQyMDAwLCAwKSxcbiAgICAvLyBUZWFtIEdyb3d0aCDigJQg4omlNSBTZWF0cyAoJDE5Ljk5IGVhKSArIFRlYW0gVXNhZ2UgQW5hbHl0aWNzICgkMzApLiBCYXNrZXRcbiAgICAvLyA1w5ckMTkuOTkgKyAkMzAgPSAkMTI5Ljk1L21vIOKGkiBidW5kbGVkICQ5MC45OS9tbyAofjMwJSBvZmYsIH4kMzguOTYgY3JlZGl0KS5cbiAgICBjKCd0ZWFtX2dyb3d0aCcsICdUZWFtIEdyb3d0aCBCdW5kbGUnLCBbJ3NlYXQnLCAndGVhbV91c2FnZV9hbmFseXRpY3MnXSwgOTA5OSwgOTA5OTAsIDEsIHsgc2VhdDogNSB9KSxcbiAgICAvLyBDb21wbGlhbmNlIFN1aXRlIOKAlCBTdGFuZGFyZCArIEFkdmFuY2VkIGF0IDMwJSBvZmYgKCQ5MDguNjAveXIgdnMgJDEsMjk4IGxpc3QpLlxuICAgIGMoJ2NvbXBsaWFuY2Vfc3VpdGUnLCAnQ29tcGxpYW5jZSBTdWl0ZScsIFsnY29tcGxpYW5jZV9zdGFuZGFyZCcsICdjb21wbGlhbmNlX2FkdmFuY2VkJ10sIDkwODYsIDkwODYwLCAyKSxcbiAgICAvLyBTY2FsZSBCdW5kbGUg4oCUIEFQSSBQYWNrICgkMTkuOTkpICsgU3RvcmFnZSBQYWNrICgkMTkuOTkpLiBCYXNrZXQgJDM5Ljk4L21vIOKGklxuICAgIC8vIGJ1bmRsZWQgJDI3Ljk5L21vICh+MzAlIG9mZiwgfiQxMS45OSBjcmVkaXQpLiBCb3RoIG1lbWJlcnMgYWxsLXRpZXIuXG4gICAgYygnc2NhbGVfYnVuZGxlJywgJ1NjYWxlIEJ1bmRsZScsIFsnYXBpX3BhY2snLCAnc3RvcmFnZV9wYWNrJ10sIDI3OTksIDI3OTkwLCAzKSxcbiAgXTtcbiAgd2Fybk9uTm9uRGlzY291bnRDb21ib3MoY29tYm9zLCBidW5kbGVzKTtcbiAgcmV0dXJuIGNvbWJvcztcbn1cblxuLyoqXG4gKiBHdWFyZHJhaWw6IGEgY29tYm8gd2hvc2UgY29tYmluZWQgcHJpY2UgaXMg4omlIGl0cyBtaW5pbXVtLWNvbXBvc2l0aW9uIGJhc2tldCBncmFudHNcbiAqIG5vIGNyZWRpdCAodGhlIGNyZWRpdCBjbGFtcHMgdG8gJDApIGFuZCBpcyBzaWxlbnRseSBpbmVydC4gV2FybiBsb3VkbHkgaW5zdGVhZCBzbyBhXG4gKiBtaXNjb25maWd1cmVkIGBCSUxMSU5HX0NPTUJPXypgIG92ZXJyaWRlIGlzIGNhdWdodC4gTm9uLWZhdGFsLlxuICovXG5mdW5jdGlvbiB3YXJuT25Ob25EaXNjb3VudENvbWJvcyhjb21ib3M6IENvbWJvRGlzY291bnRDb25maWdbXSwgYnVuZGxlczogQnVuZGxlQ29uZmlnW10pOiB2b2lkIHtcbiAgLy8gQ29tYm8gbWVtYmVycyBhcmUgYWx3YXlzIGJ1bmRsZXM7IHJlc29sdmUgdGhlaXIgKGVudi1lZmZlY3RpdmUpIHVuaXQgcHJpY2VzIG9uY2UuXG4gIGNvbnN0IGJ5SWQgPSBuZXcgTWFwKGJ1bmRsZXMubWFwKChiKSA9PiBbYi5pZCwgYl0pKTtcbiAgZm9yIChjb25zdCBjb21ibyBvZiBjb21ib3MpIHtcbiAgICBmb3IgKGNvbnN0IGludGVydmFsIG9mIFsnbW9udGhseScsICdhbm51YWwnXSBhcyBjb25zdCkge1xuICAgICAgY29uc3QgYmFza2V0ID0gY29tYm8uYnVuZGxlSWRzLnJlZHVjZSgocywgaWQpID0+IHMgKyAoYnlJZC5nZXQoaWQpPy5wcmljZXNbaW50ZXJ2YWxdID8/IDApICogKGNvbWJvLm1pblF1YW50aXRpZXM/LltpZF0gPz8gMSksIDApO1xuICAgICAgaWYgKGNvbWJvLnByaWNlc1tpbnRlcnZhbF0gPj0gYmFza2V0KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihgW2JpbGxpbmctY29uZmlnXSBDb21ibyBcIiR7Y29tYm8uaWR9XCIgJHtpbnRlcnZhbH0gcHJpY2UgJHtjb21iby5wcmljZXNbaW50ZXJ2YWxdfSDiiaUgbWVtYmVyIGJhc2tldCAke2Jhc2tldH07IGl0IGdyYW50cyBubyBkaXNjb3VudC5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgQlVORExFX0dCID0gMTAyNCAqIDEwMjQgKiAxMDI0O1xuXG4vKipcbiAqIEFwcGx5IGEgcGVyLWJ1bmRsZSBncmFudCBvdmVycmlkZS4gRWFjaCBzdGFja2FibGUgcGFjayBncmFudHMgZXhhY3RseSBvbmVcbiAqIHF1b3RhIGRpbWVuc2lvbiwgc28gYEJJTExJTkdfQlVORExFXzxJRD5fR1JBTlRgIHJldHVuZXMgdGhhdCBhbW91bnQgKGUuZy4gbWFrZVxuICogdGhlIFBsdWdpbiBQYWNrIGdyYW50ICs1MCBpbnN0ZWFkIG9mICsyNSkg4oCUIHBhcmFsbGVsIHRvIHRoZSBwcmljZSBvdmVycmlkZXMuXG4gKiBJZ25vcmVkIGZvciBtdWx0aS1kaW1lbnNpb24gb3IgZmVhdHVyZS1vbmx5IChlbXB0eS1ncmFudCkgYnVuZGxlcywgYW5kIGZvciBhXG4gKiBtYWxmb3JtZWQvbmVnYXRpdmUgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5R3JhbnRPdmVycmlkZShpZDogc3RyaW5nLCBncmFudHM6IEdyYW50TWFwKTogR3JhbnRNYXAge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltgQklMTElOR19CVU5ETEVfJHtpZC50b1VwcGVyQ2FzZSgpfV9HUkFOVGBdO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZ3JhbnRzKTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdyA9PT0gJycgfHwga2V5cy5sZW5ndGggIT09IDEpIHJldHVybiBncmFudHM7XG4gIGNvbnN0IG4gPSBwYXJzZUludChyYXcsIDEwKTtcbiAgaWYgKE51bWJlci5pc05hTihuKSB8fCBuIDwgMCkgcmV0dXJuIGdyYW50cztcbiAgLy8gYGtleXNgIGNhbWUgZnJvbSBhIEdyYW50TWFwLCBzbyBpdHMgc29sZSBrZXkgaXMgYSBRdW90YVRpZXJMaW1pdHMgZmllbGQuXG4gIHJldHVybiB7IFtrZXlzWzBdIGFzIGtleW9mIFF1b3RhVGllckxpbWl0c106IG4gfTtcbn1cblxuLyoqXG4gKiBBcHBseSBhIHBlci1idW5kbGUgdGllci1hdmFpbGFiaWxpdHkgb3ZlcnJpZGUuIGBCSUxMSU5HX0JVTkRMRV88SUQ+X1RJRVJTYCBpcyBhXG4gKiBKU09OIGFycmF5IG9mIHRpZXIgSURzIHRoYXQgbWF5IHB1cmNoYXNlIHRoZSBidW5kbGUgKGUuZy4gYFtcImRldmVsb3BlclwiLFwicHJvXCJdYClcbiAqIOKAlCBwYXJhbGxlbCB0byB0aGUgcHJpY2UvZ3JhbnQgb3ZlcnJpZGVzLiBGYWxscyBiYWNrIHRvIGBkZWZhdWx0VGllcnNgIHdoZW5cbiAqIHVuc2V0LCBtYWxmb3JtZWQsIGVtcHR5LCBvciBjb250YWluaW5nIGFuIHVua25vd24gdGllci5cbiAqL1xuZnVuY3Rpb24gYXBwbHlUaWVyc092ZXJyaWRlKGlkOiBzdHJpbmcsIGRlZmF1bHRUaWVyczogUXVvdGFUaWVyW10pOiBRdW90YVRpZXJbXSB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52W2BCSUxMSU5HX0JVTkRMRV8ke2lkLnRvVXBwZXJDYXNlKCl9X1RJRVJTYF07XG4gIGlmICghcmF3KSByZXR1cm4gZGVmYXVsdFRpZXJzO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyc2VkKSB8fCBwYXJzZWQubGVuZ3RoID09PSAwKSByZXR1cm4gZGVmYXVsdFRpZXJzO1xuICAgIGNvbnN0IHZhbGlkID0gcGFyc2VkLmZpbHRlcigodCk6IHQgaXMgUXVvdGFUaWVyID0+IHR5cGVvZiB0ID09PSAnc3RyaW5nJyAmJiBpc1ZhbGlkVGllcih0KSk7XG4gICAgcmV0dXJuIHZhbGlkLmxlbmd0aCA9PT0gcGFyc2VkLmxlbmd0aCA/IHZhbGlkIDogZGVmYXVsdFRpZXJzO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFRpZXJzO1xuICB9XG59XG5cbnR5cGUgVm9sdW1lVGllciA9IHsgbWluUXVhbnRpdHk6IG51bWJlcjsgZGlzY291bnRQZXJjZW50OiBudW1iZXIgfTtcblxuLyoqXG4gKiBBcHBseSBhIHBlci1idW5kbGUgdm9sdW1lLXRpZXIgb3ZlcnJpZGUuIGBCSUxMSU5HX0JVTkRMRV88SUQ+X1ZPTFVNRV9USUVSU2AgaXMgYVxuICogSlNPTiBhcnJheSBvZiBgeyBtaW5RdWFudGl0eSwgZGlzY291bnRQZXJjZW50IH1gIChlLmcuXG4gKiBgW3tcIm1pblF1YW50aXR5XCI6NSxcImRpc2NvdW50UGVyY2VudFwiOjEwfV1gKSDigJQgcGFyYWxsZWwgdG8gdGhlIHByaWNlL2dyYW50L3RpZXJcbiAqIG92ZXJyaWRlcy4gRmFsbHMgYmFjayB0byBgZGVmYXVsdFRpZXJzYCB3aGVuIHVuc2V0LCBtYWxmb3JtZWQsIG9yIGNvbnRhaW5pbmcgYW5cbiAqIGludmFsaWQgZW50cnkgKG1pblF1YW50aXR5IOKJpSAxLCAwIDwgZGlzY291bnRQZXJjZW50IOKJpCAxMDApLiBTb3J0ZWQgYXNjZW5kaW5nIGJ5XG4gKiBtaW5RdWFudGl0eSBzbyB0aGUgXCJoaWdoZXN0IG1hdGNoaW5nIHRpZXIgd2luc1wiIGxvb2t1cCBpcyBkZXRlcm1pbmlzdGljLlxuICovXG5mdW5jdGlvbiBhcHBseVZvbHVtZVRpZXJzT3ZlcnJpZGUoaWQ6IHN0cmluZywgZGVmYXVsdFRpZXJzPzogVm9sdW1lVGllcltdKTogVm9sdW1lVGllcltdIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZbYEJJTExJTkdfQlVORExFXyR7aWQudG9VcHBlckNhc2UoKX1fVk9MVU1FX1RJRVJTYF07XG4gIGNvbnN0IHNvcnRBc2MgPSAodDogVm9sdW1lVGllcltdKSA9PiBbLi4udF0uc29ydCgoYSwgYikgPT4gYS5taW5RdWFudGl0eSAtIGIubWluUXVhbnRpdHkpO1xuICBpZiAoIXJhdykgcmV0dXJuIGRlZmF1bHRUaWVycyA/IHNvcnRBc2MoZGVmYXVsdFRpZXJzKSA6IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcnNlZCkgfHwgcGFyc2VkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGRlZmF1bHRUaWVycyA/IHNvcnRBc2MoZGVmYXVsdFRpZXJzKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCB2YWxpZCA9IHBhcnNlZC5maWx0ZXIoKHQpOiB0IGlzIFZvbHVtZVRpZXIgPT5cbiAgICAgIHQgJiYgdHlwZW9mIHQubWluUXVhbnRpdHkgPT09ICdudW1iZXInICYmIHQubWluUXVhbnRpdHkgPj0gMVxuICAgICAgJiYgdHlwZW9mIHQuZGlzY291bnRQZXJjZW50ID09PSAnbnVtYmVyJyAmJiB0LmRpc2NvdW50UGVyY2VudCA+IDAgJiYgdC5kaXNjb3VudFBlcmNlbnQgPD0gMTAwKTtcbiAgICByZXR1cm4gdmFsaWQubGVuZ3RoID09PSBwYXJzZWQubGVuZ3RoID8gc29ydEFzYyh2YWxpZCkgOiAoZGVmYXVsdFRpZXJzID8gc29ydEFzYyhkZWZhdWx0VGllcnMpIDogdW5kZWZpbmVkKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGRlZmF1bHRUaWVycyA/IHNvcnRBc2MoZGVmYXVsdFRpZXJzKSA6IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFB1cmNoYXNhYmxlIGFkZC1vbiBidW5kbGVzIChkb2NzL2JpbGxpbmctYnVuZGxlcy5tZCDCpzMpLiBHcmFudHMgYXJlIHBlci11bml0XG4gKiBkZWx0YXMgb24gUXVvdGFUaWVyTGltaXRzOyBwcmljZXMgKGNlbnRzLCBgQklMTElOR19CVU5ETEVfPElEPl9NT05USExZYCAvXG4gKiBgX0FOTlVBTGApLCB0aGUgc2luZ2xlLWRpbWVuc2lvbiBncmFudCBhbW91bnQgKGBCSUxMSU5HX0JVTkRMRV88SUQ+X0dSQU5UYCksXG4gKiBhbmQgdGhlIHB1cmNoYXNhYmxlLXRpZXIgbGlzdCAoYEJJTExJTkdfQlVORExFXzxJRD5fVElFUlNgKSBhcmUgYWxsXG4gKiBlbnYtb3ZlcnJpZGFibGUuIEFubnVhbCDiiYggMTDDlyBtb250aGx5LlxuICovXG5mdW5jdGlvbiBsb2FkQnVuZGxlcygpOiBCdW5kbGVDb25maWdbXSB7XG4gIGNvbnN0IGIgPSAoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICBncmFudHM6IEdyYW50TWFwLFxuICAgIG1vbnRobHk6IG51bWJlcixcbiAgICBhdmFpbGFibGVGb3JUaWVyczogUXVvdGFUaWVyW10sXG4gICAgc29ydE9yZGVyOiBudW1iZXIsXG4gICAgZXh0cmE6IHsgZmVhdHVyZXM/OiBzdHJpbmdbXTsgc3RhY2thYmxlPzogYm9vbGVhbjsgbWF4UXVhbnRpdHk/OiBudW1iZXI7IHJlcXVpcmVzPzogc3RyaW5nW107IHZvbHVtZVRpZXJzPzogVm9sdW1lVGllcltdIH0gPSB7fSxcbiAgKTogQnVuZGxlQ29uZmlnID0+IHtcbiAgICAvLyBSZXNvbHZlIG1vbnRobHkgZmlyc3Qgc28gdGhlIGFubnVhbCBmYWxsYmFjayB0cmFja3MgYSBgX01PTlRITFlgIG92ZXJyaWRlXG4gICAgLy8gKGFubnVhbCDiiYggMTDDlyB0aGUgKmVmZmVjdGl2ZSogbW9udGhseSwgbm90IHRoZSBoYXJkY29kZWQgZGVmYXVsdCkuXG4gICAgY29uc3QgcmVzb2x2ZWRNb250aGx5ID0gZW52Q2VudHMocHJvY2Vzcy5lbnZbYEJJTExJTkdfQlVORExFXyR7aWQudG9VcHBlckNhc2UoKX1fTU9OVEhMWWBdLCBtb250aGx5KTtcbiAgICBjb25zdCB2b2x1bWVUaWVycyA9IGFwcGx5Vm9sdW1lVGllcnNPdmVycmlkZShpZCwgZXh0cmEudm9sdW1lVGllcnMpO1xuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIG5hbWUsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGdyYW50czogYXBwbHlHcmFudE92ZXJyaWRlKGlkLCBncmFudHMpLFxuICAgICAgLi4uKGV4dHJhLmZlYXR1cmVzID8geyBmZWF0dXJlczogZXh0cmEuZmVhdHVyZXMgfSA6IHt9KSxcbiAgICAgIC4uLihleHRyYS5tYXhRdWFudGl0eSAhPT0gdW5kZWZpbmVkID8geyBtYXhRdWFudGl0eTogZXh0cmEubWF4UXVhbnRpdHkgfSA6IHt9KSxcbiAgICAgIC4uLihleHRyYS5yZXF1aXJlcyA/IHsgcmVxdWlyZXM6IGV4dHJhLnJlcXVpcmVzIH0gOiB7fSksXG4gICAgICAuLi4odm9sdW1lVGllcnMgPyB7IHZvbHVtZVRpZXJzIH0gOiB7fSksXG4gICAgICBwcmljZXM6IHtcbiAgICAgICAgbW9udGhseTogcmVzb2x2ZWRNb250aGx5LFxuICAgICAgICBhbm51YWw6IGVudkNlbnRzKHByb2Nlc3MuZW52W2BCSUxMSU5HX0JVTkRMRV8ke2lkLnRvVXBwZXJDYXNlKCl9X0FOTlVBTGBdLCByZXNvbHZlZE1vbnRobHkgKiAxMCksXG4gICAgICB9LFxuICAgICAgc3RhY2thYmxlOiBleHRyYS5zdGFja2FibGUgPz8gdHJ1ZSxcbiAgICAgIGF2YWlsYWJsZUZvclRpZXJzOiBhcHBseVRpZXJzT3ZlcnJpZGUoaWQsIGF2YWlsYWJsZUZvclRpZXJzKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgc29ydE9yZGVyLFxuICAgIH07XG4gIH07XG5cbiAgLy8gQnVuZGxlcyBhcmUgcHVyY2hhc2FibGUgb24gZXZlcnkgU0VMRUNUQUJMRSB0aWVyIChleGNsdWRlcyBgdW5saW1pdGVkYCwgd2hpY2hcbiAgLy8gaXMgdGhlIGJpbGxpbmctb2ZmIHRpZXIgYW5kIGJ1eXMgbm90aGluZykg4oCUIHNvIHRoaXMgaXMgZXhhY3RseSBTVEFOREFSRF9USUVSUy5cbiAgY29uc3QgQUxMOiBRdW90YVRpZXJbXSA9IFsuLi5TVEFOREFSRF9USUVSU107XG4gIGNvbnN0IGJ1bmRsZXM6IEJ1bmRsZUNvbmZpZ1tdID0gW1xuICAgIC8vIGBzZWF0YCBhbmQgYHBpcGVsaW5lX3BhY2tgIGFyZSB0aGUgdGllciBkaWZmZXJlbnRpYXRvcnMsIHNvIGJvdGggYXJlIFRlYW0rXG4gICAgLy8gT05MWSDigJQgYSBzaW5nbGUtc2VhdCBEZXZlbG9wZXIvUHJvIGNhbid0IGNoZWFwbHkgc3RhY2sgc2VhdHMvcGlwZWxpbmVzIHRvXG4gICAgLy8gdW5kZXJjdXQgVGVhbSAoMyBzZWF0cyAvIDYgcGlwZWxpbmVzKTsgdGhleSBtdXN0IHVwZ3JhZGUuIGBzZWF0YCBpcyBncmFudWxhclxuICAgIC8vIChwZXItc2VhdCkgd2l0aCB2b2x1bWUgdGllcnMgKDUvMTUvNDAg4oaSIDEwLzIwLzMwJSkuIFRoZSBvdGhlciBjYXBhY2l0eSBwYWNrc1xuICAgIC8vIChwbHVnaW4vYXBpL2FpL3N0b3JhZ2UpIGFyZSBOT1QgZGlmZmVyZW50aWF0b3JzLCBzbyB0aGV5IHN0YXkgYWxsLXRpZXIuXG4gICAgYignc2VhdCcsICdNZW1iZXIgU2VhdCcsICcxIGFkZGl0aW9uYWwgbWVtYmVyIHNlYXQnLCB7IHNlYXRzOiAxIH0sIDE5OTksIFsndGVhbScsICdlbnRlcnByaXNlJ10sIDAsXG4gICAgICB7IHZvbHVtZVRpZXJzOiBbeyBtaW5RdWFudGl0eTogNSwgZGlzY291bnRQZXJjZW50OiAxMCB9LCB7IG1pblF1YW50aXR5OiAxNSwgZGlzY291bnRQZXJjZW50OiAyMCB9LCB7IG1pblF1YW50aXR5OiA0MCwgZGlzY291bnRQZXJjZW50OiAzMCB9XSB9KSxcbiAgICBiKCdwaXBlbGluZV9wYWNrJywgJ1BpcGVsaW5lIFBhY2sgKCs1KScsICc1IGFkZGl0aW9uYWwgcGlwZWxpbmVzJywgeyBwaXBlbGluZXM6IDUgfSwgMTUwMCwgWyd0ZWFtJywgJ2VudGVycHJpc2UnXSwgMSksXG4gICAgYigncGx1Z2luX3BhY2snLCAnUGx1Z2luIFBhY2sgKCsyNSknLCAnMjUgYWRkaXRpb25hbCBwbHVnaW5zJywgeyBwbHVnaW5zOiAyNSB9LCAxMDAwLCBBTEwsIDIpLFxuICAgIGIoJ2FwaV9wYWNrJywgJ0FQSSBQYWNrICgrMTAwayknLCAnMTAwLDAwMCBhZGRpdGlvbmFsIEFQSSBjYWxscyAvIHBlcmlvZCcsIHsgYXBpQ2FsbHM6IDEwMF8wMDAgfSwgMTk5OSwgQUxMLCAzKSxcbiAgICBiKCdhaV9wYWNrJywgJ0FJIFBhY2sgKCsyLjVrKScsICcyLDUwMCBhZGRpdGlvbmFsIEFJIGNhbGxzIC8gcGVyaW9kJywgeyBhaUNhbGxzOiAyNTAwIH0sIDE5OTksIEFMTCwgNCksXG4gICAgYignc3RvcmFnZV9wYWNrJywgJ1N0b3JhZ2UgUGFjayAoKzEwIEdCKScsICcxMCBHQiBhZGRpdGlvbmFsIHJlZ2lzdHJ5IHN0b3JhZ2UnLCB7IHN0b3JhZ2VCeXRlczogMTAgKiBCVU5ETEVfR0IgfSwgMTk5OSwgQUxMLCA1KSxcbiAgICBiKCdhdWRpdF9sb2cnLCAnQXVkaXQgTG9nJywgJ0F1ZGl0IGxvZyBjYXBhYmlsaXR5Jywge30sIDIwMDAsIFsncHJvJ10sIDYsIHsgZmVhdHVyZXM6IFsnYXVkaXRfbG9nJ10sIHN0YWNrYWJsZTogZmFsc2UgfSksXG4gICAgLy8gU1NPIGlzIElOQ0xVREVEIGluIFRlYW0gKHNlZSBUSUVSX0ZFQVRVUkVTLnRlYW0pLCBzbyB0aGUgYWRkLW9uIGlzIFByby1vbmx5LlxuICAgIGIoJ3NzbycsICdTU08gLyBJZFAnLCAnU1NPICsgdXAgdG8gNSBJZFAgY29uZmlncycsIHsgaWRwQ29uZmlnczogNSB9LCA0MDAwLCBbJ3BybyddLCA3LCB7IGZlYXR1cmVzOiBbJ3NzbyddLCBzdGFja2FibGU6IGZhbHNlIH0pLFxuICAgIC8vIERPUkEgLyBhZHZhbmNlZCBkZWxpdmVyeSBhbmFseXRpY3MuIElOQ0xVREVEIGluIEVudGVycHJpc2UgKFRJRVJfRkVBVFVSRVMpLFxuICAgIC8vIHNvIHRoZSBhZGQtb24gaXMgb2ZmZXJlZCB0byBldmVyeSBvdGhlciB0aWVyIChkZXZlbG9wZXIvcHJvL3RlYW0pLiBQcmljZWRcbiAgICAvLyBiZXR3ZWVuIEF1ZGl0IExvZyAoJDIwKSBhbmQgU1NPICgkNDApIOKAlCBhIGhpZ2hlci12YWx1ZSwgYWN0aXZlbHktdXNlZFxuICAgIC8vIGFuYWx5dGljcyBzdXJmYWNlIHRoYW4gdGhlIGF1ZGl0IGxvZywgYnV0IGJlbG93IHRoZSBTU08gZW50ZXJwcmlzZSBnYXRlLlxuICAgIGIoJ2FkdmFuY2VkX3JlcG9ydGluZycsICdBZHZhbmNlZCBSZXBvcnRpbmcgKERPUkEpJywgJ0RPUkEgZGVsaXZlcnkgbWV0cmljcyDigJQgZGVwbG95bWVudCBmcmVxdWVuY3ksIGNoYW5nZSBmYWlsdXJlIHJhdGUsIE1UVFIsIGxlYWQtdGltZSBwcm94eSwgcGVyZm9ybWFuY2UgYmFuZHMgKyB0cmVuZCcsIHt9LCAzMDAwLCBbJ2RldmVsb3BlcicsICdwcm8nLCAndGVhbSddLCA4LCB7IGZlYXR1cmVzOiBbJ2FkdmFuY2VkX3JlcG9ydGluZyddLCBzdGFja2FibGU6IGZhbHNlIH0pLFxuICAgIC8vIFBlci10ZWFtIHVzYWdlIGJyZWFrZG93biBhY3Jvc3MgdGhlIG9yZyDihpIgdGVhbSBzdWJ0cmVlLiBJTkNMVURFRCBpblxuICAgIC8vIEVudGVycHJpc2UgKFRJRVJfRkVBVFVSRVMpOyB0aGUgYWRkLW9uIGlzIG9mZmVyZWQgdG8gUHJvL1RlYW0gKGRldmVsb3BlciBoYXNcbiAgICAvLyBubyB0ZWFtcyB0byBicmVhayBkb3duKS4gUHJpY2VkIGF0ICQzMC9tbyAoJDMwMC95cikg4oCUIHBhcml0eSB3aXRoIERPUkEsIGl0c1xuICAgIC8vIGFuYWx5dGljcyBzaWJsaW5nLiBPdmVycmlkYWJsZSB2aWEgQklMTElOR19CVU5ETEVfVEVBTV9VU0FHRV9BTkFMWVRJQ1NfTU9OVEhMWS9fQU5OVUFMLlxuICAgIGIoJ3RlYW1fdXNhZ2VfYW5hbHl0aWNzJywgJ1RlYW0gVXNhZ2UgQW5hbHl0aWNzJywgJ1Blci10ZWFtIHVzYWdlIGJyZWFrZG93biBhY3Jvc3MgdGhlIG9yZyDihpIgdGVhbSBzdWJ0cmVlIChhbGwgcXVvdGEgZGltZW5zaW9ucyknLCB7fSwgMzAwMCwgWydwcm8nLCAndGVhbSddLCA5LCB7IGZlYXR1cmVzOiBbJ3RlYW1fdXNhZ2VfYW5hbHl0aWNzJ10sIHN0YWNrYWJsZTogZmFsc2UgfSksXG4gICAgLy8gUmV0ZW50aW9uIHBhY2tzIChkb2NzL2JpbGxpbmctYnVuZGxlcy5tZCkuIFN0YWNrYWJsZSBjYXBhY2l0eSBwYWNrcyB0aGF0XG4gICAgLy8gcmFpc2UgdGhlIHJlcG9ydGluZyByZXRlbnRpb24gZW50aXRsZW1lbnQgYmlsbGluZyBzeW5jcyB0byByZXBvcnRpbmcnc1xuICAgIC8vIGBkb3JhX3NldHRpbmdzYC4gTk9UIHF1b3RhLW1ldGVyZWQgZmxvdyDigJQgYGV2ZW50UmV0ZW50aW9uRGF5c2AvYGRvcmFSZXRlbnRpb25EYXlzYFxuICAgIC8vIGFyZSBhYnNlbnQgZnJvbSBWQUxJRF9RVU9UQV9UWVBFUywgc28gdGhleSBuZXZlciByaWRlIHRoZSBxdW90YS1zZXJ2aWNlIGxlZy5cbiAgICAvLyBTdGFuZGFyZCBSZXRlbnRpb24gUGFjazogKzkwZCBzdGFuZGFyZC1ldmVudCByZXRlbnRpb24gKGJhc2UgMzAg4oaSIDEyMCDihpIgMjEw4oCmKS5cbiAgICAvLyBDYXBwZWQgYXQgNyAoMzAgKyA3w5c5MCA9IDY2MCDiiaQgdGhlIDczMC1kYXkgcmV0ZW50aW9uIGNlaWxpbmcpLlxuICAgIGIoJ3JldGVudGlvbl9wYWNrJywgJ1N0YW5kYXJkIFJldGVudGlvbiBQYWNrICgrOTBkKScsICc5MCBhZGRpdGlvbmFsIGRheXMgb2Ygc3RhbmRhcmQgcGlwZWxpbmUtZXZlbnQgcmV0ZW50aW9uJywgeyBldmVudFJldGVudGlvbkRheXM6IDkwIH0sIDE1MDAsIEFMTCwgMTAsIHsgbWF4UXVhbnRpdHk6IDcgfSksXG4gICAgLy8gRE9SQSBIaXN0b3J5IFBhY2s6ICszNjVkIERPUkEgcmV0ZW50aW9uIEFORCBwZXItb3JnIHJlcG9ydC1xdWVyeSB3aW5kb3cgKHRoZVxuICAgIC8vIHdpbmRvdyBjYXAgdHJhY2tzIGRvcmFSZXRlbnRpb25EYXlzKS4gT25seSBtZWFuaW5nZnVsIHdpdGggQWR2YW5jZWQgUmVwb3J0aW5nXG4gICAgLy8g4oCUIElOQ0xVREVEIGluIEVudGVycHJpc2UsIGFuIGFkZC1vbiBvbiBkZXZlbG9wZXIvcHJvL3RlYW0uIENhcHBlZCBhdCAxXG4gICAgLy8gKDE4MCArIDM2NSA9IDU0NSDiiaQgdGhlIDczMC1kYXkgcmV0ZW50aW9uIGNlaWxpbmcpLlxuICAgIGIoJ2RvcmFfaGlzdG9yeV9wYWNrJywgJ0RPUkEgSGlzdG9yeSBQYWNrICgrMzY1ZCknLCAnMzY1IGFkZGl0aW9uYWwgZGF5cyBvZiBET1JBIGhpc3RvcnkgKyByZXBvcnQtcXVlcnkgd2luZG93IChyZXF1aXJlcyBBZHZhbmNlZCBSZXBvcnRpbmcpJywgeyBkb3JhUmV0ZW50aW9uRGF5czogMzY1IH0sIDMwMDAsIEFMTCwgMTEsIHsgbWF4UXVhbnRpdHk6IDEgfSksXG4gICAgLy8gQ29tcGxpYW5jZSBjb250ZW50IGFkZC1vbnMgKGRvY3MvcGxhbnMvY29tcGxpYW5jZS1hZGRvbnMubWQpLiBGZWF0dXJlIGJ1bmRsZXNcbiAgICAvLyBnYXRpbmcgYWNjZXNzIHRvIGN1cmF0ZWQgc3lzdGVtLW9yZyBwdWJsaXNoZWQgcnVsZSBzZXRzLiBJTkNMVURFRCBpblxuICAgIC8vIEVudGVycHJpc2UvVW5saW1pdGVkICh2aWEgQUxMX0ZFQVRVUkVfRkxBR1MpOyBzb2xkIHRvIERldmVsb3Blci9Qcm8vVGVhbS5cbiAgICAvLyBTdGFuZGFyZCA9IH4yMCBDSS9DRCBiZXN0LXByYWN0aWNlIHJ1bGVzLiBBZHZhbmNlZCA9IFNPQzIvUENJL0NJUyBmcmFtZXdvcmtcbiAgICAvLyBsaWJyYXJpZXM7IFJFUVVJUkVTIFN0YW5kYXJkIChvciBidXkgdGhlIFN1aXRlIGNvbWJvIGZvciBib3RoIGF0IDMwJSBvZmYpLlxuICAgIGIoJ2NvbXBsaWFuY2Vfc3RhbmRhcmQnLCAnU3RhbmRhcmQgQ29tcGxpYW5jZScsICdDdXJhdGVkIENJL0NEIGJlc3QtcHJhY3RpY2UgY29tcGxpYW5jZSBydWxlcycsIHt9LCAyOTkwLCBbJ2RldmVsb3BlcicsICdwcm8nLCAndGVhbSddLCAxMiwgeyBmZWF0dXJlczogWydjb21wbGlhbmNlX3N0YW5kYXJkJ10sIHN0YWNrYWJsZTogZmFsc2UgfSksXG4gICAgYignY29tcGxpYW5jZV9hZHZhbmNlZCcsICdBZHZhbmNlZCBDb21wbGlhbmNlJywgJ0N1cmF0ZWQgZnJhbWV3b3JrIGNvbXBsaWFuY2UgbGlicmFyaWVzIChTT0MyIC8gUENJLURTUyAvIENJUyknLCB7fSwgOTk5MCwgWydkZXZlbG9wZXInLCAncHJvJywgJ3RlYW0nXSwgMTMsIHsgZmVhdHVyZXM6IFsnY29tcGxpYW5jZV9hZHZhbmNlZCddLCBzdGFja2FibGU6IGZhbHNlLCByZXF1aXJlczogWydjb21wbGlhbmNlX3N0YW5kYXJkJ10gfSksXG4gIF07XG4gIGFzc2VydEJ1bmRsZVJlcXVpcmVzVmFsaWQoYnVuZGxlcyk7XG4gIHJldHVybiBidW5kbGVzO1xufVxuXG4vKipcbiAqIENvbmZpZy1sb2FkIGd1YXJkcmFpbCBmb3IgdGhlIGByZXF1aXJlc2AgcHJlcmVxdWlzaXRlIGdyYXBoLiBBIGByZXF1aXJlc2AgZW50cnlcbiAqIHRoYXQgZG9lc24ndCByZXNvbHZlIHRvIGFuIEFDVElWRSBidW5kbGUg4oCUIG9yIHRoYXQgcGFydGljaXBhdGVzIGluIGEgY3ljbGUg4oCUXG4gKiBzaWxlbnRseSBtYWtlcyB0aGUgcmVmZXJlbmNpbmcgYnVuZGxlIHVucHVyY2hhc2FibGUgKHRoZSBhZGRvbiByb3V0ZSByZWplY3RzXG4gKiB3aXRoIDQwMCBmb3JldmVyIGJlY2F1c2UgdGhlIHByZXJlcXVpc2l0ZSBjYW4gbmV2ZXIgYmUgc2F0aXNmaWVkKS4gQ2F0Y2ggaXQgYXRcbiAqIGxvYWQgd2l0aCBhIGNsZWFyIGVycm9yIHJhdGhlciB0aGFuIHNoaXBwaW5nIGEgZGVhZCBTS1UuXG4gKlxuICogIC0gRXZlcnkgaWQgaW4gYSBidW5kbGUncyBgcmVxdWlyZXNgIE1VU1QgbmFtZSBhbiBhY3RpdmUgYnVuZGxlIGluIHRoZSBjYXRhbG9nLlxuICogIC0gVGhlIGByZXF1aXJlc2AgZ3JhcGggTVVTVCBiZSBhY3ljbGljIChhIOKGkiBiIOKGkiBhIGNhbiBuZXZlciBiZSBzYXRpc2ZpZWQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0QnVuZGxlUmVxdWlyZXNWYWxpZChidW5kbGVzOiBCdW5kbGVDb25maWdbXSk6IHZvaWQge1xuICBjb25zdCBhY3RpdmUgPSBuZXcgTWFwKGJ1bmRsZXMuZmlsdGVyKChiKSA9PiBiLmlzQWN0aXZlKS5tYXAoKGIpID0+IFtiLmlkLCBiXSkpO1xuXG4gIC8vIDEuIFZhbGlkaXR5OiBldmVyeSByZXF1aXJlcyBpZCByZXNvbHZlcyB0byBhbiBhY3RpdmUgYnVuZGxlLlxuICBmb3IgKGNvbnN0IGJ1bmRsZSBvZiBidW5kbGVzKSB7XG4gICAgZm9yIChjb25zdCByZXFJZCBvZiBidW5kbGUucmVxdWlyZXMgPz8gW10pIHtcbiAgICAgIGlmICghYWN0aXZlLmhhcyhyZXFJZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBbYmlsbGluZy1jb25maWddIEJ1bmRsZSBcIiR7YnVuZGxlLmlkfVwiIHJlcXVpcmVzIFwiJHtyZXFJZH1cIiwgd2hpY2ggaXMgbm90IGFuIGFjdGl2ZSBidW5kbGUgaW4gdGhlIGNhdGFsb2cg4oCUIGl0IHdvdWxkIGJlIHBlcm1hbmVudGx5IHVucHVyY2hhc2FibGUuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAyLiBBY3ljbGljaXR5OiBERlMgb3ZlciB0aGUgcmVxdWlyZXMgZWRnZXMsIHRyYWNraW5nIHRoZSBjdXJyZW50IHBhdGguXG4gIGNvbnN0IFZJU0lUSU5HID0gMTtcbiAgY29uc3QgRE9ORSA9IDI7XG4gIGNvbnN0IHN0YXRlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICBjb25zdCB2aXNpdCA9IChpZDogc3RyaW5nLCBwYXRoOiBzdHJpbmdbXSk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHMgPSBzdGF0ZS5nZXQoaWQpO1xuICAgIGlmIChzID09PSBET05FKSByZXR1cm47XG4gICAgaWYgKHMgPT09IFZJU0lUSU5HKSB7XG4gICAgICBjb25zdCBjeWNsZSA9IFsuLi5wYXRoLnNsaWNlKHBhdGguaW5kZXhPZihpZCkpLCBpZF0uam9pbignIC0+ICcpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBbYmlsbGluZy1jb25maWddIEJ1bmRsZSBcInJlcXVpcmVzXCIgY3ljbGUgZGV0ZWN0ZWQ6ICR7Y3ljbGV9LmApO1xuICAgIH1cbiAgICBzdGF0ZS5zZXQoaWQsIFZJU0lUSU5HKTtcbiAgICBmb3IgKGNvbnN0IHJlcUlkIG9mIGFjdGl2ZS5nZXQoaWQpPy5yZXF1aXJlcyA/PyBbXSkge1xuICAgICAgdmlzaXQocmVxSWQsIFsuLi5wYXRoLCBpZF0pO1xuICAgIH1cbiAgICBzdGF0ZS5zZXQoaWQsIERPTkUpO1xuICB9O1xuXG4gIGZvciAoY29uc3QgYnVuZGxlIG9mIGFjdGl2ZS5rZXlzKCkpIHtcbiAgICB2aXNpdChidW5kbGUsIFtdKTtcbiAgfVxufVxuIl19
|
|
@@ -289,6 +289,18 @@ export interface BundleConfig {
|
|
|
289
289
|
* Retention Pack caps at 7 so 30 + 7×90 = 660 ≤ 730). Absent ⇒ unbounded.
|
|
290
290
|
*/
|
|
291
291
|
readonly maxQuantity?: number;
|
|
292
|
+
/**
|
|
293
|
+
* Optional per-unit volume discount tiers for a stackable pack: at ≥ `minQuantity`
|
|
294
|
+
* purchased units, `discountPercent` comes off the line subtotal (unit × quantity).
|
|
295
|
+
* The highest matching tier wins. Realized as a recurring usage credit (like a
|
|
296
|
+
* combo), so the provider still charges unit×qty and the credit offsets the
|
|
297
|
+
* balance. Env-overridable via `BILLING_BUNDLE_<ID>_VOLUME_TIERS` (JSON). Used by
|
|
298
|
+
* the per-seat `seat` bundle. Absent ⇒ no volume discount.
|
|
299
|
+
*/
|
|
300
|
+
readonly volumeTiers?: readonly {
|
|
301
|
+
readonly minQuantity: number;
|
|
302
|
+
readonly discountPercent: number;
|
|
303
|
+
}[];
|
|
292
304
|
/** Base tiers this bundle is offered to. */
|
|
293
305
|
readonly availableForTiers: readonly QuotaTier[];
|
|
294
306
|
/**
|
|
@@ -315,8 +327,8 @@ export interface ComboDiscountConfig {
|
|
|
315
327
|
/** The member bundle ids that must ALL be present for the combo to apply. */
|
|
316
328
|
readonly bundleIds: readonly string[];
|
|
317
329
|
/** Per-member minimum quantity (bundleId → count; absent ⇒ 1). Lets a stackable
|
|
318
|
-
* capacity pack anchor a combo — e.g. `{
|
|
319
|
-
*
|
|
330
|
+
* capacity pack anchor a combo — e.g. `{ seat: 5 }` = "≥ 5 seats". The credit
|
|
331
|
+
* basis uses this minimum, so extra units never inflate the discount. */
|
|
320
332
|
readonly minQuantities?: Readonly<Record<string, number>>;
|
|
321
333
|
/** The combined price for the minimum set (cents). The credit is
|
|
322
334
|
* `Σ member unit price × minQty − prices`, clamped ≥ 0. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
export {};
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9jb25maWctdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFF1b3RhVGllciwgUXVvdGFUaWVyTGltaXRzIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBBbGdvcml0aG0gfSBmcm9tICdqc29ud2VidG9rZW4nO1xuXG4vKipcbiAqIFR5cGUtc2FmZSBjb25maWd1cmF0aW9uIGludGVyZmFjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcENvbmZpZyB7XG4gIHJlYWRvbmx5IHNlcnZlcjogU2VydmVyQ29uZmlnO1xuICByZWFkb25seSBhdXRoOiBBdXRoQ29uZmlnO1xuICByZWFkb25seSBkYXRhYmFzZTogRGF0YWJhc2VDb25maWc7XG4gIHJlYWRvbmx5IHJlZ2lzdHJ5OiBSZWdpc3RyeUNvbmZpZztcbiAgcmVhZG9ubHkgcmVkaXM6IFJlZGlzQ29uZmlnO1xuICByZWFkb25seSBwbHVnaW5CdWlsZDogUGx1Z2luQnVpbGRDb25maWc7XG4gIHJlYWRvbmx5IGRvY2tlckNvbmZpZzogQnVpbGRDb25maWc7XG4gIHJlYWRvbmx5IG9ic2VydmFiaWxpdHk6IE9ic2VydmFiaWxpdHlDb25maWc7XG4gIHJlYWRvbmx5IGNvbXBsaWFuY2U6IENvbXBsaWFuY2VDb25maWc7XG4gIHJlYWRvbmx5IGF3czogQVdTQ29uZmlnO1xuICByZWFkb25seSByYXRlTGltaXQ6IFJhdGVMaW1pdENvbmZpZztcbiAgcmVhZG9ubHkgYmlsbGluZzogQmlsbGluZ0NvbmZpZztcbn1cblxuLyoqIEV4cHJlc3Mgc2VydmVyIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlckNvbmZpZyB7XG4gIC8qKiBIVFRQIGxpc3RlbiBwb3J0IChlbnY6IGBQT1JUYCkuICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29yczoge1xuICAgIC8qKiBXaGV0aGVyIHRvIGluY2x1ZGUgY3JlZGVudGlhbHMgaW4gQ09SUyByZXNwb25zZXMgKGVudjogYENPUlNfQ1JFREVOVElBTFNgKS4gKi9cbiAgICByZWFkb25seSBjcmVkZW50aWFsczogYm9vbGVhbjtcbiAgICAvKiogQWxsb3dlZCBvcmlnaW4ocykg4oCUIHNpbmdsZSBzdHJpbmcsIGFycmF5LCBvciBgJyonYCAoZW52OiBgQ09SU19PUklHSU5gKS4gKi9cbiAgICByZWFkb25seSBvcmlnaW46IHN0cmluZyB8IHN0cmluZ1tdO1xuICB9O1xuICAvKiogTnVtYmVyIG9mIHJldmVyc2UgcHJveHkgaG9wcyB0byB0cnVzdCAoZW52OiBgVFJVU1RfUFJPWFlgKS4gKi9cbiAgcmVhZG9ubHkgdHJ1c3RQcm94eTogbnVtYmVyO1xuICAvKiogRnJvbnRlbmQgYmFzZSBVUkwsIHVzZWQgYXMgQ09SUyBmYWxsYmFjayAoZW52OiBgUExBVEZPUk1fQkFTRV9VUkxgKS4gKi9cbiAgcmVhZG9ubHkgcGxhdGZvcm1Vcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgaHR0cENsaWVudDoge1xuICAgIC8qKiBEZWZhdWx0IEhUVFAgcmVxdWVzdCB0aW1lb3V0IGluIG1zIChlbnY6IGBIVFRQX0NMSUVOVF9USU1FT1VUYCkuICovXG4gICAgcmVhZG9ubHkgdGltZW91dDogbnVtYmVyO1xuICAgIC8qKiBNYXhpbXVtIHJldHJ5IGF0dGVtcHRzIGZvciBmYWlsZWQgcmVxdWVzdHMgKGVudjogYEhUVFBfQ0xJRU5UX01BWF9SRVRSSUVTYCkuICovXG4gICAgcmVhZG9ubHkgbWF4UmV0cmllczogbnVtYmVyO1xuICAgIC8qKiBCYXNlIGRlbGF5IGJldHdlZW4gcmV0cmllcyBpbiBtcyAoZW52OiBgSFRUUF9DTElFTlRfUkVUUllfREVMQVlfTVNgKS4gKi9cbiAgICByZWFkb25seSByZXRyeURlbGF5TXM6IG51bWJlcjtcbiAgfTtcbiAgcmVhZG9ubHkgc3NlOiB7XG4gICAgLyoqIE1heCBTU0UgY2xpZW50cyBwZXIgcmVxdWVzdCAoZW52OiBgU1NFX01BWF9DTElFTlRTX1BFUl9SRVFVRVNUYCkuICovXG4gICAgcmVhZG9ubHkgbWF4Q2xpZW50c1BlclJlcXVlc3Q6IG51bWJlcjtcbiAgICAvKiogU1NFIGNsaWVudCB0aW1lb3V0IGluIG1zIChlbnY6IGBTU0VfQ0xJRU5UX1RJTUVPVVRfTVNgKS4gKi9cbiAgICByZWFkb25seSBjbGllbnRUaW1lb3V0TXM6IG51bWJlcjtcbiAgICAvKiogU1NFIGNsZWFudXAgaW50ZXJ2YWwgaW4gbXMgKGVudjogYFNTRV9DTEVBTlVQX0lOVEVSVkFMX01TYCkuICovXG4gICAgcmVhZG9ubHkgY2xlYW51cEludGVydmFsTXM6IG51bWJlcjtcbiAgfTtcbiAgcmVhZG9ubHkgc2VydmljZXM6IHtcbiAgICByZWFkb25seSBwbHVnaW5Ib3N0OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcGx1Z2luUG9ydDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IHBpcGVsaW5lSG9zdDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHBpcGVsaW5lUG9ydDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IG1lc3NhZ2VIb3N0OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgbWVzc2FnZVBvcnQ6IG51bWJlcjtcbiAgICByZWFkb25seSBwbGF0Zm9ybUhvc3Q6IHN0cmluZztcbiAgICByZWFkb25seSBwbGF0Zm9ybVBvcnQ6IG51bWJlcjtcbiAgICByZWFkb25seSBjb21wbGlhbmNlSG9zdDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNvbXBsaWFuY2VQb3J0OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgYmlsbGluZ0hvc3Q6IHN0cmluZztcbiAgICByZWFkb25seSBiaWxsaW5nUG9ydDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGJpbGxpbmdUaW1lb3V0OiBudW1iZXI7XG4gIH07XG59XG5cbi8qKiBKV1QgYW5kIHJlZnJlc2ggdG9rZW4gYXV0aGVudGljYXRpb24gY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aENvbmZpZyB7XG4gIHJlYWRvbmx5IGp3dDoge1xuICAgIC8qKiBTaWduaW5nIHNlY3JldCBmb3IgYWNjZXNzIHRva2VucyAoZW52OiBgSldUX1NFQ1JFVGApLiAqL1xuICAgIHJlYWRvbmx5IHNlY3JldDogc3RyaW5nO1xuICAgIC8qKiBUb2tlbiBsaWZldGltZSBpbiBzZWNvbmRzIChlbnY6IGBKV1RfRVhQSVJFU19JTmApLiAqL1xuICAgIHJlYWRvbmx5IGV4cGlyZXNJbjogbnVtYmVyO1xuICAgIC8qKiBTaWduaW5nIGFsZ29yaXRobSwgZS5nLiBgJ0hTMjU2J2AgKGVudjogYEpXVF9BTEdPUklUSE1gKS4gKi9cbiAgICByZWFkb25seSBhbGdvcml0aG06IEFsZ29yaXRobTtcbiAgICAvKiogYmNyeXB0IHNhbHQgcm91bmRzIGZvciBwYXNzd29yZCBoYXNoaW5nIChlbnY6IGBCQ1JZUFRfU0FMVF9ST1VORFNgKS4gKi9cbiAgICByZWFkb25seSBzYWx0Um91bmRzOiBudW1iZXI7XG4gIH07XG4gIHJlYWRvbmx5IHJlZnJlc2hUb2tlbjoge1xuICAgIC8qKiBTaWduaW5nIHNlY3JldCBmb3IgcmVmcmVzaCB0b2tlbnMgKGVudjogYFJFRlJFU0hfVE9LRU5fU0VDUkVUYCkuICovXG4gICAgcmVhZG9ubHkgc2VjcmV0OiBzdHJpbmc7XG4gICAgLyoqIFRva2VuIGxpZmV0aW1lIGluIHNlY29uZHMgKGVudjogYFJFRlJFU0hfVE9LRU5fRVhQSVJFU19JTmApLiAqL1xuICAgIHJlYWRvbmx5IGV4cGlyZXNJbjogbnVtYmVyO1xuICB9O1xufVxuXG4vKiogUG9zdGdyZVNRTCBhbmQgRHJpenpsZSBPUk0gZGF0YWJhc2UgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VDb25maWcge1xuICByZWFkb25seSBwb3N0Z3Jlczoge1xuICAgIC8qKiBQb3N0Z3JlU1FMIGhvc3QgKGVudjogYERCX0hPU1RgKS4gKi9cbiAgICByZWFkb25seSBob3N0OiBzdHJpbmc7XG4gICAgLyoqIFBvc3RncmVTUUwgcG9ydCAoZW52OiBgREJfUE9SVGApLiAqL1xuICAgIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgICAvKiogRGF0YWJhc2UgbmFtZSAoZW52OiBgREFUQUJBU0VgKS4gKi9cbiAgICByZWFkb25seSBkYXRhYmFzZTogc3RyaW5nO1xuICAgIC8qKiBEYXRhYmFzZSB1c2VyIChlbnY6IGBEQl9VU0VSYCkuICovXG4gICAgcmVhZG9ubHkgdXNlcjogc3RyaW5nO1xuICAgIC8qKiBEYXRhYmFzZSBwYXNzd29yZCAoZW52OiBgREJfUEFTU1dPUkRgKS4gKi9cbiAgICByZWFkb25seSBwYXNzd29yZDogc3RyaW5nO1xuICB9O1xuICByZWFkb25seSBkcml6emxlOiB7XG4gICAgLyoqIE1heGltdW0gY29ubmVjdGlvbiBwb29sIHNpemUgKGVudjogYERSSVpaTEVfTUFYX1BPT0xfU0laRWApLiAqL1xuICAgIHJlYWRvbmx5IG1heFBvb2xTaXplOiBudW1iZXI7XG4gICAgLyoqIElkbGUgY29ubmVjdGlvbiB0aW1lb3V0IGluIG1zIChlbnY6IGBEUklaWkxFX0lETEVfVElNRU9VVF9NSUxMSVNgKS4gKi9cbiAgICByZWFkb25seSBpZGxlVGltZW91dE1pbGxpczogbnVtYmVyO1xuICAgIC8qKiBOZXcgY29ubmVjdGlvbiB0aW1lb3V0IGluIG1zIChlbnY6IGBEUklaWkxFX0NPTk5FQ1RJT05fVElNRU9VVF9NSUxMSVNgKS4gKi9cbiAgICByZWFkb25seSBjb25uZWN0aW9uVGltZW91dE1pbGxpczogbnVtYmVyO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJ5Q29uZmlnIHtcbiAgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gIC8qKlxuICAgKiBIb3N0L3BvcnQgYW4gT1VULU9GLUNMVVNURVIgY2xpZW50IChub3RhYmx5IEFXUyBDb2RlQnVpbGQpIHVzZXMgdG8gcHVsbFxuICAgKiBwbHVnaW4gaW1hZ2VzLCB3aGVuIGl0IGRpZmZlcnMgZnJvbSB0aGUgaW4tY2x1c3RlciBgaG9zdGAvYHBvcnRgLiBUaGVcbiAgICogaW4tY2x1c3RlciBgcmVnaXN0cnk6NTAwMGAgQ2x1c3RlcklQIGlzbid0IHJlc29sdmFibGUgZnJvbSB0aGUgVlBDLCBzbyB0aGVcbiAgICogc3ludGhlc2l6ZWQgQ29kZUJ1aWxkIGltYWdlIFVSSSBtdXN0IHBvaW50IGF0IHRoZSBwdWJsaWMgZ2F0ZXdheSBpbnN0ZWFkLlxuICAgKiBFbnY6IGBJTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1RgIC8gYElNQUdFX1JFR0lTVFJZX1BVTExfUE9SVGAuIE9wdGlvbmFsO1xuICAgKiBjb25zdW1lcnMgZmFsbCBiYWNrIHRvIGBob3N0YC9gcG9ydGAgd2hlbiB1bnNldCAoc2luZ2xlLWhvc3QgL1xuICAgKiBpbi1jbHVzdGVyLW9ubHkgZGVwbG95cykuIGBsb2FkUmVnaXN0cnlDb25maWdgIGFsd2F5cyBwb3B1bGF0ZXMgdGhlbS5cbiAgICovXG4gIHJlYWRvbmx5IHB1bGxIb3N0Pzogc3RyaW5nO1xuICByZWFkb25seSBwdWxsUG9ydD86IG51bWJlcjtcbiAgLyoqIERvY2tlciBuZXR3b3JrIGZvciBidWlsZC9wdXNoIChlbXB0eSBzdHJpbmcgPSBkZWZhdWx0KS4gKi9cbiAgcmVhZG9ubHkgbmV0d29yazogc3RyaW5nO1xuICAvKipcbiAgICogQnVpbGRLaXQgdGFsa3MgdG8gdGhlIHJlZ2lzdHJ5IG92ZXIgcGxhaW4gSFRUUCB3aGVuIHRydWU7IEhUVFBTIHdpdGggdGhlXG4gICAqIHN5c3RlbSBDQSBidW5kbGUgb3RoZXJ3aXNlLiBFbnY6IGBJTUFHRV9SRUdJU1RSWV9IVFRQYCAoZGVmYXVsdHMgdHJ1ZSDigJRcbiAgICogdGhlIGluLWNsdXN0ZXIgcmVnaXN0cnkgaGFzIG5vIFRMUykuXG4gICAqL1xuICByZWFkb25seSBodHRwOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZGlzQ29uZmlnIHtcbiAgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luQnVpbGRDb25maWcge1xuICByZWFkb25seSBjb25jdXJyZW5jeTogbnVtYmVyO1xuICByZWFkb25seSBtYXhBdHRlbXB0czogbnVtYmVyO1xuICByZWFkb25seSBiYWNrb2ZmRGVsYXlNczogbnVtYmVyO1xuICByZWFkb25seSB3b3JrZXJUaW1lb3V0TXM6IG51bWJlcjtcbiAgcmVhZG9ubHkgdGVtcERpck1heEFnZU1zOiBudW1iZXI7XG4gIHJlYWRvbmx5IGRscU1heEF0dGVtcHRzOiBudW1iZXI7XG4gIHJlYWRvbmx5IGRscUJhY2tvZmZCYXNlTXM6IG51bWJlcjtcbiAgcmVhZG9ubHkgZGxxTWF4U2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkQ29uZmlnIHtcbiAgLyoqIFJvb3QgZGlyZWN0b3J5IGZvciBidWlsZCB0ZW1wIGZpbGVzLiAqL1xuICByZWFkb25seSB0ZW1wUm9vdDogc3RyaW5nO1xuICAvKiogQnVpbGQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuICovXG4gIHJlYWRvbmx5IHRpbWVvdXRNczogbnVtYmVyO1xuICAvKiogUHVzaCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgcmVhZG9ubHkgcHVzaFRpbWVvdXRNczogbnVtYmVyO1xuICAvKipcbiAgICogUGF0aCB0byB0aGUgYnVpbGRraXRkIHNvY2tldCB0aGUgcGx1Z2luJ3MgYGJ1aWxkY3RsYCBjb25uZWN0cyB0by4gSW4gazhzXG4gICAqIGFuZCBjb21wb3NlIHRoaXMgaXMgYSBzaGFyZWQgZW1wdHlEaXIvdG1wZnMgdm9sdW1lIG1vdW50ZWQgZnJvbSB0aGVcbiAgICogYnVpbGRraXRkIHNpZGVjYXIuXG4gICAqL1xuICByZWFkb25seSBidWlsZGtpdEFkZHI6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPYnNlcnZhYmlsaXR5Q29uZmlnIHtcbiAgcmVhZG9ubHkgbG9nTGV2ZWw6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9nRm9ybWF0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRyYWNpbmc6IHtcbiAgICByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGVuZHBvaW50OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxpYW5jZUNvbmZpZyB7XG4gIHJlYWRvbmx5IHNjYW5TY2hlZHVsZXJJbnRlcnZhbE1zOiBudW1iZXI7XG4gIC8qKiBXaGVuIGZhbHNlLCB0aGUgc2NoZWR1bGVyIHNraXBzIHNjYW5zL3NjaGVkdWxlcyBmb3IgdGhlIHN5c3RlbSBvcmcuIERlZmF1bHQ6IGZhbHNlLiAqL1xuICByZWFkb25seSBzeXN0ZW1PcmdTY2Fuc0VuYWJsZWQ6IGJvb2xlYW47XG4gIC8qKiBDcm9zcy1wb2QgbGVhZGVyLWxvY2sgVFRMIGZvciB0aGUgc2NhbiBzY2hlZHVsZXIgKG1zKS4gRGVmYXVsdDogMzAwMDAwLiAqL1xuICByZWFkb25seSBzY2FuTG9ja1R0bE1zOiBudW1iZXI7XG4gIC8qKiBIb3cgb2Z0ZW4gdGhlIGRpZ2VzdCBzY2hlZHVsZXIgY2hlY2tzIGZvciBkdWUgZGlnZXN0cyAobXMpLiBEZWZhdWx0OiAzNjAwMDAwLiAqL1xuICByZWFkb25seSBkaWdlc3RTY2hlZHVsZXJJbnRlcnZhbE1zOiBudW1iZXI7XG4gIC8qKiBDcm9zcy1wb2QgbGVhZGVyLWxvY2sgVFRMIGZvciB0aGUgZGlnZXN0IHNjaGVkdWxlciAobXMpLiBEZWZhdWx0OiAzMDAwMDAuICovXG4gIHJlYWRvbmx5IGRpZ2VzdExvY2tUdGxNczogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFXUyBpbmZyYXN0cnVjdHVyZSBjb25maWd1cmF0aW9uLlxuICpcbiAqIERlbGliZXJhdGVseSBleHByZXNzZWQgaW4gUExBSU4gREFUQSAobnVtYmVycywgc3RyaW5ncywgc3RyaW5nIHVuaW9ucykgcmF0aGVyXG4gKiB0aGFuIENESyB2YWx1ZSBvYmplY3RzIChgRHVyYXRpb25gLCBgUnVudGltZWAsIGBSZXRlbnRpb25EYXlzYCwgLi4uKS4gQ29uZmlnIGlzXG4gKiBsb2FkZWQgYnkgZXZlcnkgc2VydmljZSwgYnV0IG9ubHkgdGhlIENESyBlbnRyeSBwb2ludCAoYEBwaXBlbGluZS1idWlsZGVyL1xuICogcGlwZWxpbmUtY29yZS9jZGtgKSBidWlsZHMgc3RhY2tzICB0eXBpbmcgdGhpcyBibG9jayB3aXRoIENESyBjbGFzc2VzIHB1dFxuICogYGF3cy1jZGstbGliYCBvbiB0aGUgaW1wb3J0IGdyYXBoIG9mIGBDb25maWdgLCBhbmQgdGhlcmVmb3JlIG9mIGV2ZXJ5IEFQSVxuICogc2VydmljZSB0aGF0IHJlYWRzIHNvIG11Y2ggYXMgYSBwb3J0IG51bWJlci4gQ29udmVyc2lvbiB0byBDREsgb2JqZWN0cyBoYXBwZW5zXG4gKiBhdCB0aGUgY29uc3RydWN0IGJvdW5kYXJ5IGluIGBjb25maWcvYXdzLWNvbmZpZy1jZGsudHNgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFXU0NvbmZpZyB7XG4gIHJlYWRvbmx5IGxhbWJkYToge1xuICAgIC8qKiBMYW1iZGEgcnVudGltZSBpZGVudGlmaWVyLCBlLmcuIGAnbm9kZWpzMjQueCdgIChlbnY6IGBMQU1CREFfUlVOVElNRWApLiAqL1xuICAgIHJlYWRvbmx5IHJ1bnRpbWU6IHN0cmluZztcbiAgICAvKiogRnVuY3Rpb24gdGltZW91dCBpbiBzZWNvbmRzIChlbnY6IGBMQU1CREFfVElNRU9VVGApLiAqL1xuICAgIHJlYWRvbmx5IHRpbWVvdXRTZWNvbmRzOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgbWVtb3J5U2l6ZTogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGFyY2hpdGVjdHVyZTogJ2FybTY0JyB8ICd4ODZfNjQnO1xuICAgIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIH07XG4gIHJlYWRvbmx5IGxvZ2dpbmc6IHtcbiAgICByZWFkb25seSBncm91cE5hbWU6IHN0cmluZztcbiAgICAvKiogQ2xvdWRXYXRjaCByZXRlbnRpb24gaW4gZGF5czsgYDBgIG1lYW5zIG5ldmVyIGV4cGlyZSAoZW52OiBgTE9HX1JFVEVOVElPTmApLiAqL1xuICAgIHJlYWRvbmx5IHJldGVudGlvbkRheXM6IG51bWJlcjtcbiAgICByZWFkb25seSByZW1vdmFsUG9saWN5OiAncmV0YWluJyB8ICdkZXN0cm95JztcbiAgfTtcbiAgcmVhZG9ubHkgY29kZUJ1aWxkOiB7XG4gICAgLyoqIENvZGVCdWlsZCBjb21wdXRlIHR5cGUgbmFtZSwgZS5nLiBgJ1NNQUxMJ2AgKGVudjogYENPREVCVUlMRF9DT01QVVRFX1RZUEVgKS4gKi9cbiAgICByZWFkb25seSBjb21wdXRlVHlwZTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEltYWdlIHVzZWQgZm9yIENvZGVCdWlsZCBzdGVwcyB0aGF0IGRvbid0IGhhdmUgYSBwbHVnaW4tYmFrZWQgaW1hZ2VcbiAgICAgKiAoY29sZC1zdGFydCBzeW50aCBib290c3RyYXAsIFNoZWxsU3RlcHMgd2l0aCBubyByZWdpc3RyeSwgYW5kXG4gICAgICogYG1ldGFkYXRhX29ubHlgIHBsdWdpbnMpLiBlbnY6IGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRWAuIERlZmF1bHRcbiAgICAgKiBgcGlwZWxpbmUtYm9vdHN0cmFwOjEuMGAg4oCUIHRoZSBsb2NhbCB0YWcgYnVpbHQgYnlcbiAgICAgKiBgZGVwbG95L2NvZGVidWlsZC9ib290c3RyYXAvRG9ja2VyZmlsZWAsIHdpdGggYHBpcGVsaW5lLW1hbmFnZXJgXG4gICAgICogYmFrZWQgaW4uXG4gICAgICpcbiAgICAgKiBDb250cmFjdDogdGhlIGltYWdlIE1VU1QgaGF2ZSBgcGlwZWxpbmUtbWFuYWdlcmAgb24gUEFUSC4gVGhlXG4gICAgICogYm9vdHN0cmFwIHN5bnRoIHBhdGggbm8gbG9uZ2VyIHNlbGYtaGVhbHMgdmlhIGBucG0gaW5zdGFsbCAtZ2A7XG4gICAgICogcG9pbnRpbmcgdGhpcyBhdCBhbiBpbWFnZSB3aXRob3V0IHRoZSB0b29sIGdldHMgZXhpdCAxMjcgb24gdGhlXG4gICAgICogZmlyc3QgY29sZC1zdGFydCBidWlsZC5cbiAgICAgKlxuICAgICAqIFJlc29sdXRpb246XG4gICAgICogLSBCYXJlIHRhZyAobm8gYC9gKSDihpIgYXV0by1wcmVmaXhlZCB0b1xuICAgICAqICAgYDxyZWdpc3RyeS1ob3N0Pjo8cG9ydD4vbGlicmFyeS88dGFnPmAgdXNpbmcgdGhlIHJlZ2lzdHJ5IGNvbmZpZyxcbiAgICAgKiAgIHdpdGggdGhlIHBlci1vcmcgcGxhdGZvcm0gU2VjcmV0IGFzIEJhc2ljIGF1dGggKHNhbWUgZmxvdyBhc1xuICAgICAqICAgcGx1Z2luIGltYWdlcykuXG4gICAgICogLSBGdWxseS1xdWFsaWZpZWQgcmVnaXN0cnkgVVJJIChjb250YWlucyBgL2ApIOKGkiB1c2VkIGFzLWlzLCBub1xuICAgICAqICAgYXV0aCB3aXJlZCAob3BlcmF0b3Igb3ducyBtYWtpbmcgaXQgcHVsbGFibGUpLlxuICAgICAqIC0gV2hlbiB0aGUgcmVnaXN0cnkgaXNuJ3QgY29uZmlndXJlZCBvciBwZXItb3JnIGF1dGggaXNuJ3RcbiAgICAgKiAgIGF2YWlsYWJsZSBhdCB0aGUgY2FsbCBzaXRlLCBmYWxscyBiYWNrIHRvXG4gICAgICogICBgYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo4LjBgIHdpdGggYSB3YXJuaW5nIOKAlCBjb2xkLXN0YXJ0IHN5bnRoXG4gICAgICogICB3aWxsIHRoZW4gZmFpbCBvbiBgcGlwZWxpbmUtbWFuYWdlcjogbm90IGZvdW5kYCwgc3VyZmFjaW5nIHRoZVxuICAgICAqICAgbWlzY29uZmlndXJhdGlvbiBsb3VkbHkgaW5zdGVhZCBvZiBzaWxlbnRseSBzd2FwcGluZyBpbWFnZXMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZGVmYXVsdEltYWdlOiBzdHJpbmc7XG4gIH07XG59XG5cbi8qKiBFeHByZXNzIHJhdGUgbGltaXRpbmcgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF0ZUxpbWl0Q29uZmlnIHtcbiAgLyoqIE1heGltdW0gcmVxdWVzdHMgcGVyIHdpbmRvdyAoZW52OiBgTElNSVRFUl9NQVhgKS4gKi9cbiAgcmVhZG9ubHkgbWF4OiBudW1iZXI7XG4gIC8qKiBSYXRlIGxpbWl0IHdpbmRvdyBpbiBtaWxsaXNlY29uZHMgKGVudjogYExJTUlURVJfV0lORE9XTVNgKS4gKi9cbiAgcmVhZG9ubHkgd2luZG93TXM6IG51bWJlcjtcbiAgLyoqIEluY2x1ZGUgbGVnYWN5IGBYLVJhdGVMaW1pdC0qYCBoZWFkZXJzLiAqL1xuICByZWFkb25seSBsZWdhY3lIZWFkZXJzOiBib29sZWFuO1xuICAvKiogSW5jbHVkZSBzdGFuZGFyZCBgUmF0ZUxpbWl0LSpgIGhlYWRlcnMgKFJGQyA2NTg1KS4gKi9cbiAgcmVhZG9ubHkgc3RhbmRhcmRIZWFkZXJzOiBib29sZWFuO1xufVxuXG4vKiogUHJpY2UgY29uZmlndXJhdGlvbiBmb3IgYSBzaW5nbGUgYmlsbGluZyBwbGFuIChpbiBjZW50cykuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbGxpbmdQbGFuUHJpY2VzIHtcbiAgcmVhZG9ubHkgbW9udGhseTogbnVtYmVyO1xuICByZWFkb25seSBhbm51YWw6IG51bWJlcjtcbn1cblxuLyoqIEZ1bGwgYmlsbGluZyBwbGFuIGRlZmluaXRpb24gdXNlZCBmb3Igc2VlZGluZyBhbmQgcnVudGltZSBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaWxsaW5nUGxhbkNvbmZpZyB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgdGllcjogUXVvdGFUaWVyO1xuICByZWFkb25seSBwcmljZXM6IEJpbGxpbmdQbGFuUHJpY2VzO1xuICByZWFkb25seSBmZWF0dXJlczogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IGlzQWN0aXZlOiBib29sZWFuO1xuICByZWFkb25seSBpc0RlZmF1bHQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNvcnRPcmRlcjogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgcHVyY2hhc2FibGUgYWRkLW9uIGJ1bmRsZTogYSBxdWFudGl0eS1zdGFja2FibGUgcGFjayB0aGF0IEFERFMgdG8gdGhlXG4gKiBhY2NvdW50J3MgYmFzZSAodGllcikgbGltaXRzIGFuZCBhZGRzIGEgcmVjdXJyaW5nIGxpbmUgaXRlbS4gU2VlXG4gKiBkb2NzL2JpbGxpbmctYnVuZGxlcy5tZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVDb25maWcge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBQZXItdW5pdCBkZWx0YXMgb24gYFF1b3RhVGllckxpbWl0c2AgZmllbGRzLCBlLmcuIGB7IHNlYXRzOiA1IH1gLiBLZXlzIGFyZVxuICAgKiAgY29uc3RyYWluZWQgdG8gcmVhbCBxdW90YSBmaWVsZHMgc28gYSB0eXBvIGlzIGEgY29tcGlsZSBlcnJvciAod2FzXG4gICAqICBgUmVjb3JkPHN0cmluZywgbnVtYmVyPmAsIHdoZXJlIGEgbWlzc3BlbGxlZCBrZXkgd2FzIHNpbGVudGx5IHVuZW5mb3JjZWFibGUpLiAqL1xuICByZWFkb25seSBncmFudHM6IFJlYWRvbmx5PFBhcnRpYWw8UmVjb3JkPGtleW9mIFF1b3RhVGllckxpbWl0cywgbnVtYmVyPj4+O1xuICAvKiogRmVhdHVyZSBmbGFncyBncmFudGVkIGJ5IGEgZmVhdHVyZSBidW5kbGUgKGUuZy4gYGF1ZGl0X2xvZ2ApLiAqL1xuICByZWFkb25seSBmZWF0dXJlcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogUGVyLXVuaXQgcHJpY2UgKGNlbnRzKS4gU3RyaXBlIG11bHRpcGxpZXMgYnkgcXVhbnRpdHkuICovXG4gIHJlYWRvbmx5IHByaWNlczogQmlsbGluZ1BsYW5QcmljZXM7XG4gIC8qKiBUcnVlIGZvciBzdGFja2FibGUgcmVzb3VyY2UgcGFja3M7IGZhbHNlIGZvciBhIGJvb2xlYW4gZmVhdHVyZSBidW5kbGUuICovXG4gIHJlYWRvbmx5IHN0YWNrYWJsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE1heGltdW0gcHVyY2hhc2FibGUgcXVhbnRpdHkgZm9yIGEgc3RhY2thYmxlIHBhY2suIEVuZm9yY2VkIGJ5IHRoZSBhZGRvblxuICAgKiBwdXJjaGFzZS9wcmV2aWV3IHJvdXRlIChgcXVhbnRpdHkg4omkIG1heFF1YW50aXR5YCwgcmVqZWN0IG92ZXItY2FwKS4gVXNlZCB0b1xuICAgKiBrZWVwIHJldGVudGlvbiBwYWNrcyB1bmRlciB0aGUgNzMwLWRheSByZXRlbnRpb24gY2VpbGluZyAoZS5nLiB0aGUgU3RhbmRhcmRcbiAgICogUmV0ZW50aW9uIFBhY2sgY2FwcyBhdCA3IHNvIDMwICsgN8OXOTAgPSA2NjAg4omkIDczMCkuIEFic2VudCDih5IgdW5ib3VuZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4UXVhbnRpdHk/OiBudW1iZXI7XG4gIC8qKiBCYXNlIHRpZXJzIHRoaXMgYnVuZGxlIGlzIG9mZmVyZWQgdG8uICovXG4gIHJlYWRvbmx5IGF2YWlsYWJsZUZvclRpZXJzOiByZWFkb25seSBRdW90YVRpZXJbXTtcbiAgLyoqXG4gICAqIFByZXJlcXVpc2l0ZSBidW5kbGUgaWRzIHRoYXQgbXVzdCBiZSBoZWxkIChvciBwdXJjaGFzZWQgaW4gdGhlIHNhbWUgYWN0aW9uKVxuICAgKiBiZWZvcmUgdGhpcyBidW5kbGUgY2FuIGJlIGFkZGVkLiBFbmZvcmNlZCBieSB0aGUgYWRkb24gcHVyY2hhc2UvcHJldmlldyByb3V0ZVxuICAgKiAocmVqZWN0IHdpdGggNDAwIHdoZW4gdW5tZXQpOyBhIGNvbWJvIHRoYXQgaW5jbHVkZXMgdGhlIHByZXJlcXVpc2l0ZSBzYXRpc2ZpZXNcbiAgICogaXQuIFVzZWQgYnkgYGNvbXBsaWFuY2VfYWR2YW5jZWRgIChgcmVxdWlyZXM6IFsnY29tcGxpYW5jZV9zdGFuZGFyZCddYCkuXG4gICAqIEFic2VudCDih5Igbm8gcHJlcmVxdWlzaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZXM/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgaXNBY3RpdmU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNvcnRPcmRlcjogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgY29tYm8gZGlzY291bnQ6IHdoZW4gYW4gYWNjb3VudCBob2xkcyBFVkVSWSBidW5kbGUgaW4gYGJ1bmRsZUlkc2AsIHRoZSBwYWlyXG4gKiBpcyBiaWxsZWQgYXQgYHByaWNlc2AgKHRoZSBjb21iaW5lZCBwcmljZSkgaW5zdGVhZCBvZiB0aGUgc3VtIG9mIHRoZSBtZW1iZXJzJ1xuICogaW5kaXZpZHVhbCBwcmljZXMuIFJlYWxpemVkIGFzIGEgcmVjdXJyaW5nIHVzYWdlIGNyZWRpdCBmb3IgdGhlIGRpZmZlcmVuY2Ug4oCUXG4gKiBuZXZlciBhIHByb3ZpZGVyIGNvdXBvbiDigJQgY29uc2lzdGVudCB3aXRoIHRoZSB1c2FnZS1jcmVkaXQgZGlzY291bnQgbW9kZWwuIFNlZVxuICogZG9jcy9iaWxsaW5nLWJ1bmRsZXMubWQgwqdDb21ibyBwcmljaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbWJvRGlzY291bnRDb25maWcge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKiBUaGUgbWVtYmVyIGJ1bmRsZSBpZHMgdGhhdCBtdXN0IEFMTCBiZSBwcmVzZW50IGZvciB0aGUgY29tYm8gdG8gYXBwbHkuICovXG4gIHJlYWRvbmx5IGJ1bmRsZUlkczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBQZXItbWVtYmVyIG1pbmltdW0gcXVhbnRpdHkgKGJ1bmRsZUlkIOKGkiBjb3VudDsgYWJzZW50IOKHkiAxKS4gTGV0cyBhIHN0YWNrYWJsZVxuICAgKiAgY2FwYWNpdHkgcGFjayBhbmNob3IgYSBjb21ibyDigJQgZS5nLiBgeyBzZWF0X3BhY2s6IDEgfWAgPSBcIuKJpSAxIFNlYXQgUGFja1wiLiBUaGVcbiAgICogIGNyZWRpdCBiYXNpcyB1c2VzIHRoaXMgbWluaW11bSwgc28gZXh0cmEgcGFja3MgbmV2ZXIgaW5mbGF0ZSB0aGUgZGlzY291bnQuICovXG4gIHJlYWRvbmx5IG1pblF1YW50aXRpZXM/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PjtcbiAgLyoqIFRoZSBjb21iaW5lZCBwcmljZSBmb3IgdGhlIG1pbmltdW0gc2V0IChjZW50cykuIFRoZSBjcmVkaXQgaXNcbiAgICogIGDOoyBtZW1iZXIgdW5pdCBwcmljZSDDlyBtaW5RdHkg4oiSIHByaWNlc2AsIGNsYW1wZWQg4omlIDAuICovXG4gIHJlYWRvbmx5IHByaWNlczogQmlsbGluZ1BsYW5QcmljZXM7XG4gIC8qKiBEZXRlcm1pbmlzdGljIHRpZS1icmVhayBhbW9uZyBlcXVhbC10b3RhbCBvcHRpbWFsIHBhY2tpbmdzIHdoZW4gY29tYm9zIG92ZXJsYXBcbiAgICogIChsb3dlciB3aW5zKS4gKi9cbiAgcmVhZG9ubHkgc29ydE9yZGVyOiBudW1iZXI7XG4gIHJlYWRvbmx5IGlzQWN0aXZlOiBib29sZWFuO1xufVxuXG4vKiogQmlsbGluZyBwbGFucyArIGFkZC1vbiBidW5kbGUgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmlsbGluZ0NvbmZpZyB7XG4gIHJlYWRvbmx5IHBsYW5zOiByZWFkb25seSBCaWxsaW5nUGxhbkNvbmZpZ1tdO1xuICByZWFkb25seSBidW5kbGVzOiByZWFkb25seSBCdW5kbGVDb25maWdbXTtcbiAgcmVhZG9ubHkgY29tYm9EaXNjb3VudHM6IHJlYWRvbmx5IENvbWJvRGlzY291bnRDb25maWdbXTtcbn1cbiJdfQ==
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9jb25maWctdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFF1b3RhVGllciwgUXVvdGFUaWVyTGltaXRzIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBBbGdvcml0aG0gfSBmcm9tICdqc29ud2VidG9rZW4nO1xuXG4vKipcbiAqIFR5cGUtc2FmZSBjb25maWd1cmF0aW9uIGludGVyZmFjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcENvbmZpZyB7XG4gIHJlYWRvbmx5IHNlcnZlcjogU2VydmVyQ29uZmlnO1xuICByZWFkb25seSBhdXRoOiBBdXRoQ29uZmlnO1xuICByZWFkb25seSBkYXRhYmFzZTogRGF0YWJhc2VDb25maWc7XG4gIHJlYWRvbmx5IHJlZ2lzdHJ5OiBSZWdpc3RyeUNvbmZpZztcbiAgcmVhZG9ubHkgcmVkaXM6IFJlZGlzQ29uZmlnO1xuICByZWFkb25seSBwbHVnaW5CdWlsZDogUGx1Z2luQnVpbGRDb25maWc7XG4gIHJlYWRvbmx5IGRvY2tlckNvbmZpZzogQnVpbGRDb25maWc7XG4gIHJlYWRvbmx5IG9ic2VydmFiaWxpdHk6IE9ic2VydmFiaWxpdHlDb25maWc7XG4gIHJlYWRvbmx5IGNvbXBsaWFuY2U6IENvbXBsaWFuY2VDb25maWc7XG4gIHJlYWRvbmx5IGF3czogQVdTQ29uZmlnO1xuICByZWFkb25seSByYXRlTGltaXQ6IFJhdGVMaW1pdENvbmZpZztcbiAgcmVhZG9ubHkgYmlsbGluZzogQmlsbGluZ0NvbmZpZztcbn1cblxuLyoqIEV4cHJlc3Mgc2VydmVyIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlckNvbmZpZyB7XG4gIC8qKiBIVFRQIGxpc3RlbiBwb3J0IChlbnY6IGBQT1JUYCkuICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29yczoge1xuICAgIC8qKiBXaGV0aGVyIHRvIGluY2x1ZGUgY3JlZGVudGlhbHMgaW4gQ09SUyByZXNwb25zZXMgKGVudjogYENPUlNfQ1JFREVOVElBTFNgKS4gKi9cbiAgICByZWFkb25seSBjcmVkZW50aWFsczogYm9vbGVhbjtcbiAgICAvKiogQWxsb3dlZCBvcmlnaW4ocykg4oCUIHNpbmdsZSBzdHJpbmcsIGFycmF5LCBvciBgJyonYCAoZW52OiBgQ09SU19PUklHSU5gKS4gKi9cbiAgICByZWFkb25seSBvcmlnaW46IHN0cmluZyB8IHN0cmluZ1tdO1xuICB9O1xuICAvKiogTnVtYmVyIG9mIHJldmVyc2UgcHJveHkgaG9wcyB0byB0cnVzdCAoZW52OiBgVFJVU1RfUFJPWFlgKS4gKi9cbiAgcmVhZG9ubHkgdHJ1c3RQcm94eTogbnVtYmVyO1xuICAvKiogRnJvbnRlbmQgYmFzZSBVUkwsIHVzZWQgYXMgQ09SUyBmYWxsYmFjayAoZW52OiBgUExBVEZPUk1fQkFTRV9VUkxgKS4gKi9cbiAgcmVhZG9ubHkgcGxhdGZvcm1Vcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgaHR0cENsaWVudDoge1xuICAgIC8qKiBEZWZhdWx0IEhUVFAgcmVxdWVzdCB0aW1lb3V0IGluIG1zIChlbnY6IGBIVFRQX0NMSUVOVF9USU1FT1VUYCkuICovXG4gICAgcmVhZG9ubHkgdGltZW91dDogbnVtYmVyO1xuICAgIC8qKiBNYXhpbXVtIHJldHJ5IGF0dGVtcHRzIGZvciBmYWlsZWQgcmVxdWVzdHMgKGVudjogYEhUVFBfQ0xJRU5UX01BWF9SRVRSSUVTYCkuICovXG4gICAgcmVhZG9ubHkgbWF4UmV0cmllczogbnVtYmVyO1xuICAgIC8qKiBCYXNlIGRlbGF5IGJldHdlZW4gcmV0cmllcyBpbiBtcyAoZW52OiBgSFRUUF9DTElFTlRfUkVUUllfREVMQVlfTVNgKS4gKi9cbiAgICByZWFkb25seSByZXRyeURlbGF5TXM6IG51bWJlcjtcbiAgfTtcbiAgcmVhZG9ubHkgc3NlOiB7XG4gICAgLyoqIE1heCBTU0UgY2xpZW50cyBwZXIgcmVxdWVzdCAoZW52OiBgU1NFX01BWF9DTElFTlRTX1BFUl9SRVFVRVNUYCkuICovXG4gICAgcmVhZG9ubHkgbWF4Q2xpZW50c1BlclJlcXVlc3Q6IG51bWJlcjtcbiAgICAvKiogU1NFIGNsaWVudCB0aW1lb3V0IGluIG1zIChlbnY6IGBTU0VfQ0xJRU5UX1RJTUVPVVRfTVNgKS4gKi9cbiAgICByZWFkb25seSBjbGllbnRUaW1lb3V0TXM6IG51bWJlcjtcbiAgICAvKiogU1NFIGNsZWFudXAgaW50ZXJ2YWwgaW4gbXMgKGVudjogYFNTRV9DTEVBTlVQX0lOVEVSVkFMX01TYCkuICovXG4gICAgcmVhZG9ubHkgY2xlYW51cEludGVydmFsTXM6IG51bWJlcjtcbiAgfTtcbiAgcmVhZG9ubHkgc2VydmljZXM6IHtcbiAgICByZWFkb25seSBwbHVnaW5Ib3N0OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcGx1Z2luUG9ydDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IHBpcGVsaW5lSG9zdDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHBpcGVsaW5lUG9ydDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IG1lc3NhZ2VIb3N0OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgbWVzc2FnZVBvcnQ6IG51bWJlcjtcbiAgICByZWFkb25seSBwbGF0Zm9ybUhvc3Q6IHN0cmluZztcbiAgICByZWFkb25seSBwbGF0Zm9ybVBvcnQ6IG51bWJlcjtcbiAgICByZWFkb25seSBjb21wbGlhbmNlSG9zdDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNvbXBsaWFuY2VQb3J0OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgYmlsbGluZ0hvc3Q6IHN0cmluZztcbiAgICByZWFkb25seSBiaWxsaW5nUG9ydDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGJpbGxpbmdUaW1lb3V0OiBudW1iZXI7XG4gIH07XG59XG5cbi8qKiBKV1QgYW5kIHJlZnJlc2ggdG9rZW4gYXV0aGVudGljYXRpb24gY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aENvbmZpZyB7XG4gIHJlYWRvbmx5IGp3dDoge1xuICAgIC8qKiBTaWduaW5nIHNlY3JldCBmb3IgYWNjZXNzIHRva2VucyAoZW52OiBgSldUX1NFQ1JFVGApLiAqL1xuICAgIHJlYWRvbmx5IHNlY3JldDogc3RyaW5nO1xuICAgIC8qKiBUb2tlbiBsaWZldGltZSBpbiBzZWNvbmRzIChlbnY6IGBKV1RfRVhQSVJFU19JTmApLiAqL1xuICAgIHJlYWRvbmx5IGV4cGlyZXNJbjogbnVtYmVyO1xuICAgIC8qKiBTaWduaW5nIGFsZ29yaXRobSwgZS5nLiBgJ0hTMjU2J2AgKGVudjogYEpXVF9BTEdPUklUSE1gKS4gKi9cbiAgICByZWFkb25seSBhbGdvcml0aG06IEFsZ29yaXRobTtcbiAgICAvKiogYmNyeXB0IHNhbHQgcm91bmRzIGZvciBwYXNzd29yZCBoYXNoaW5nIChlbnY6IGBCQ1JZUFRfU0FMVF9ST1VORFNgKS4gKi9cbiAgICByZWFkb25seSBzYWx0Um91bmRzOiBudW1iZXI7XG4gIH07XG4gIHJlYWRvbmx5IHJlZnJlc2hUb2tlbjoge1xuICAgIC8qKiBTaWduaW5nIHNlY3JldCBmb3IgcmVmcmVzaCB0b2tlbnMgKGVudjogYFJFRlJFU0hfVE9LRU5fU0VDUkVUYCkuICovXG4gICAgcmVhZG9ubHkgc2VjcmV0OiBzdHJpbmc7XG4gICAgLyoqIFRva2VuIGxpZmV0aW1lIGluIHNlY29uZHMgKGVudjogYFJFRlJFU0hfVE9LRU5fRVhQSVJFU19JTmApLiAqL1xuICAgIHJlYWRvbmx5IGV4cGlyZXNJbjogbnVtYmVyO1xuICB9O1xufVxuXG4vKiogUG9zdGdyZVNRTCBhbmQgRHJpenpsZSBPUk0gZGF0YWJhc2UgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VDb25maWcge1xuICByZWFkb25seSBwb3N0Z3Jlczoge1xuICAgIC8qKiBQb3N0Z3JlU1FMIGhvc3QgKGVudjogYERCX0hPU1RgKS4gKi9cbiAgICByZWFkb25seSBob3N0OiBzdHJpbmc7XG4gICAgLyoqIFBvc3RncmVTUUwgcG9ydCAoZW52OiBgREJfUE9SVGApLiAqL1xuICAgIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgICAvKiogRGF0YWJhc2UgbmFtZSAoZW52OiBgREFUQUJBU0VgKS4gKi9cbiAgICByZWFkb25seSBkYXRhYmFzZTogc3RyaW5nO1xuICAgIC8qKiBEYXRhYmFzZSB1c2VyIChlbnY6IGBEQl9VU0VSYCkuICovXG4gICAgcmVhZG9ubHkgdXNlcjogc3RyaW5nO1xuICAgIC8qKiBEYXRhYmFzZSBwYXNzd29yZCAoZW52OiBgREJfUEFTU1dPUkRgKS4gKi9cbiAgICByZWFkb25seSBwYXNzd29yZDogc3RyaW5nO1xuICB9O1xuICByZWFkb25seSBkcml6emxlOiB7XG4gICAgLyoqIE1heGltdW0gY29ubmVjdGlvbiBwb29sIHNpemUgKGVudjogYERSSVpaTEVfTUFYX1BPT0xfU0laRWApLiAqL1xuICAgIHJlYWRvbmx5IG1heFBvb2xTaXplOiBudW1iZXI7XG4gICAgLyoqIElkbGUgY29ubmVjdGlvbiB0aW1lb3V0IGluIG1zIChlbnY6IGBEUklaWkxFX0lETEVfVElNRU9VVF9NSUxMSVNgKS4gKi9cbiAgICByZWFkb25seSBpZGxlVGltZW91dE1pbGxpczogbnVtYmVyO1xuICAgIC8qKiBOZXcgY29ubmVjdGlvbiB0aW1lb3V0IGluIG1zIChlbnY6IGBEUklaWkxFX0NPTk5FQ1RJT05fVElNRU9VVF9NSUxMSVNgKS4gKi9cbiAgICByZWFkb25seSBjb25uZWN0aW9uVGltZW91dE1pbGxpczogbnVtYmVyO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJ5Q29uZmlnIHtcbiAgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gIC8qKlxuICAgKiBIb3N0L3BvcnQgYW4gT1VULU9GLUNMVVNURVIgY2xpZW50IChub3RhYmx5IEFXUyBDb2RlQnVpbGQpIHVzZXMgdG8gcHVsbFxuICAgKiBwbHVnaW4gaW1hZ2VzLCB3aGVuIGl0IGRpZmZlcnMgZnJvbSB0aGUgaW4tY2x1c3RlciBgaG9zdGAvYHBvcnRgLiBUaGVcbiAgICogaW4tY2x1c3RlciBgcmVnaXN0cnk6NTAwMGAgQ2x1c3RlcklQIGlzbid0IHJlc29sdmFibGUgZnJvbSB0aGUgVlBDLCBzbyB0aGVcbiAgICogc3ludGhlc2l6ZWQgQ29kZUJ1aWxkIGltYWdlIFVSSSBtdXN0IHBvaW50IGF0IHRoZSBwdWJsaWMgZ2F0ZXdheSBpbnN0ZWFkLlxuICAgKiBFbnY6IGBJTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1RgIC8gYElNQUdFX1JFR0lTVFJZX1BVTExfUE9SVGAuIE9wdGlvbmFsO1xuICAgKiBjb25zdW1lcnMgZmFsbCBiYWNrIHRvIGBob3N0YC9gcG9ydGAgd2hlbiB1bnNldCAoc2luZ2xlLWhvc3QgL1xuICAgKiBpbi1jbHVzdGVyLW9ubHkgZGVwbG95cykuIGBsb2FkUmVnaXN0cnlDb25maWdgIGFsd2F5cyBwb3B1bGF0ZXMgdGhlbS5cbiAgICovXG4gIHJlYWRvbmx5IHB1bGxIb3N0Pzogc3RyaW5nO1xuICByZWFkb25seSBwdWxsUG9ydD86IG51bWJlcjtcbiAgLyoqIERvY2tlciBuZXR3b3JrIGZvciBidWlsZC9wdXNoIChlbXB0eSBzdHJpbmcgPSBkZWZhdWx0KS4gKi9cbiAgcmVhZG9ubHkgbmV0d29yazogc3RyaW5nO1xuICAvKipcbiAgICogQnVpbGRLaXQgdGFsa3MgdG8gdGhlIHJlZ2lzdHJ5IG92ZXIgcGxhaW4gSFRUUCB3aGVuIHRydWU7IEhUVFBTIHdpdGggdGhlXG4gICAqIHN5c3RlbSBDQSBidW5kbGUgb3RoZXJ3aXNlLiBFbnY6IGBJTUFHRV9SRUdJU1RSWV9IVFRQYCAoZGVmYXVsdHMgdHJ1ZSDigJRcbiAgICogdGhlIGluLWNsdXN0ZXIgcmVnaXN0cnkgaGFzIG5vIFRMUykuXG4gICAqL1xuICByZWFkb25seSBodHRwOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZGlzQ29uZmlnIHtcbiAgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luQnVpbGRDb25maWcge1xuICByZWFkb25seSBjb25jdXJyZW5jeTogbnVtYmVyO1xuICByZWFkb25seSBtYXhBdHRlbXB0czogbnVtYmVyO1xuICByZWFkb25seSBiYWNrb2ZmRGVsYXlNczogbnVtYmVyO1xuICByZWFkb25seSB3b3JrZXJUaW1lb3V0TXM6IG51bWJlcjtcbiAgcmVhZG9ubHkgdGVtcERpck1heEFnZU1zOiBudW1iZXI7XG4gIHJlYWRvbmx5IGRscU1heEF0dGVtcHRzOiBudW1iZXI7XG4gIHJlYWRvbmx5IGRscUJhY2tvZmZCYXNlTXM6IG51bWJlcjtcbiAgcmVhZG9ubHkgZGxxTWF4U2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkQ29uZmlnIHtcbiAgLyoqIFJvb3QgZGlyZWN0b3J5IGZvciBidWlsZCB0ZW1wIGZpbGVzLiAqL1xuICByZWFkb25seSB0ZW1wUm9vdDogc3RyaW5nO1xuICAvKiogQnVpbGQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuICovXG4gIHJlYWRvbmx5IHRpbWVvdXRNczogbnVtYmVyO1xuICAvKiogUHVzaCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgcmVhZG9ubHkgcHVzaFRpbWVvdXRNczogbnVtYmVyO1xuICAvKipcbiAgICogUGF0aCB0byB0aGUgYnVpbGRraXRkIHNvY2tldCB0aGUgcGx1Z2luJ3MgYGJ1aWxkY3RsYCBjb25uZWN0cyB0by4gSW4gazhzXG4gICAqIGFuZCBjb21wb3NlIHRoaXMgaXMgYSBzaGFyZWQgZW1wdHlEaXIvdG1wZnMgdm9sdW1lIG1vdW50ZWQgZnJvbSB0aGVcbiAgICogYnVpbGRraXRkIHNpZGVjYXIuXG4gICAqL1xuICByZWFkb25seSBidWlsZGtpdEFkZHI6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPYnNlcnZhYmlsaXR5Q29uZmlnIHtcbiAgcmVhZG9ubHkgbG9nTGV2ZWw6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9nRm9ybWF0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRyYWNpbmc6IHtcbiAgICByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGVuZHBvaW50OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxpYW5jZUNvbmZpZyB7XG4gIHJlYWRvbmx5IHNjYW5TY2hlZHVsZXJJbnRlcnZhbE1zOiBudW1iZXI7XG4gIC8qKiBXaGVuIGZhbHNlLCB0aGUgc2NoZWR1bGVyIHNraXBzIHNjYW5zL3NjaGVkdWxlcyBmb3IgdGhlIHN5c3RlbSBvcmcuIERlZmF1bHQ6IGZhbHNlLiAqL1xuICByZWFkb25seSBzeXN0ZW1PcmdTY2Fuc0VuYWJsZWQ6IGJvb2xlYW47XG4gIC8qKiBDcm9zcy1wb2QgbGVhZGVyLWxvY2sgVFRMIGZvciB0aGUgc2NhbiBzY2hlZHVsZXIgKG1zKS4gRGVmYXVsdDogMzAwMDAwLiAqL1xuICByZWFkb25seSBzY2FuTG9ja1R0bE1zOiBudW1iZXI7XG4gIC8qKiBIb3cgb2Z0ZW4gdGhlIGRpZ2VzdCBzY2hlZHVsZXIgY2hlY2tzIGZvciBkdWUgZGlnZXN0cyAobXMpLiBEZWZhdWx0OiAzNjAwMDAwLiAqL1xuICByZWFkb25seSBkaWdlc3RTY2hlZHVsZXJJbnRlcnZhbE1zOiBudW1iZXI7XG4gIC8qKiBDcm9zcy1wb2QgbGVhZGVyLWxvY2sgVFRMIGZvciB0aGUgZGlnZXN0IHNjaGVkdWxlciAobXMpLiBEZWZhdWx0OiAzMDAwMDAuICovXG4gIHJlYWRvbmx5IGRpZ2VzdExvY2tUdGxNczogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFXUyBpbmZyYXN0cnVjdHVyZSBjb25maWd1cmF0aW9uLlxuICpcbiAqIERlbGliZXJhdGVseSBleHByZXNzZWQgaW4gUExBSU4gREFUQSAobnVtYmVycywgc3RyaW5ncywgc3RyaW5nIHVuaW9ucykgcmF0aGVyXG4gKiB0aGFuIENESyB2YWx1ZSBvYmplY3RzIChgRHVyYXRpb25gLCBgUnVudGltZWAsIGBSZXRlbnRpb25EYXlzYCwgLi4uKS4gQ29uZmlnIGlzXG4gKiBsb2FkZWQgYnkgZXZlcnkgc2VydmljZSwgYnV0IG9ubHkgdGhlIENESyBlbnRyeSBwb2ludCAoYEBwaXBlbGluZS1idWlsZGVyL1xuICogcGlwZWxpbmUtY29yZS9jZGtgKSBidWlsZHMgc3RhY2tzICB0eXBpbmcgdGhpcyBibG9jayB3aXRoIENESyBjbGFzc2VzIHB1dFxuICogYGF3cy1jZGstbGliYCBvbiB0aGUgaW1wb3J0IGdyYXBoIG9mIGBDb25maWdgLCBhbmQgdGhlcmVmb3JlIG9mIGV2ZXJ5IEFQSVxuICogc2VydmljZSB0aGF0IHJlYWRzIHNvIG11Y2ggYXMgYSBwb3J0IG51bWJlci4gQ29udmVyc2lvbiB0byBDREsgb2JqZWN0cyBoYXBwZW5zXG4gKiBhdCB0aGUgY29uc3RydWN0IGJvdW5kYXJ5IGluIGBjb25maWcvYXdzLWNvbmZpZy1jZGsudHNgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFXU0NvbmZpZyB7XG4gIHJlYWRvbmx5IGxhbWJkYToge1xuICAgIC8qKiBMYW1iZGEgcnVudGltZSBpZGVudGlmaWVyLCBlLmcuIGAnbm9kZWpzMjQueCdgIChlbnY6IGBMQU1CREFfUlVOVElNRWApLiAqL1xuICAgIHJlYWRvbmx5IHJ1bnRpbWU6IHN0cmluZztcbiAgICAvKiogRnVuY3Rpb24gdGltZW91dCBpbiBzZWNvbmRzIChlbnY6IGBMQU1CREFfVElNRU9VVGApLiAqL1xuICAgIHJlYWRvbmx5IHRpbWVvdXRTZWNvbmRzOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgbWVtb3J5U2l6ZTogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGFyY2hpdGVjdHVyZTogJ2FybTY0JyB8ICd4ODZfNjQnO1xuICAgIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIH07XG4gIHJlYWRvbmx5IGxvZ2dpbmc6IHtcbiAgICByZWFkb25seSBncm91cE5hbWU6IHN0cmluZztcbiAgICAvKiogQ2xvdWRXYXRjaCByZXRlbnRpb24gaW4gZGF5czsgYDBgIG1lYW5zIG5ldmVyIGV4cGlyZSAoZW52OiBgTE9HX1JFVEVOVElPTmApLiAqL1xuICAgIHJlYWRvbmx5IHJldGVudGlvbkRheXM6IG51bWJlcjtcbiAgICByZWFkb25seSByZW1vdmFsUG9saWN5OiAncmV0YWluJyB8ICdkZXN0cm95JztcbiAgfTtcbiAgcmVhZG9ubHkgY29kZUJ1aWxkOiB7XG4gICAgLyoqIENvZGVCdWlsZCBjb21wdXRlIHR5cGUgbmFtZSwgZS5nLiBgJ1NNQUxMJ2AgKGVudjogYENPREVCVUlMRF9DT01QVVRFX1RZUEVgKS4gKi9cbiAgICByZWFkb25seSBjb21wdXRlVHlwZTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEltYWdlIHVzZWQgZm9yIENvZGVCdWlsZCBzdGVwcyB0aGF0IGRvbid0IGhhdmUgYSBwbHVnaW4tYmFrZWQgaW1hZ2VcbiAgICAgKiAoY29sZC1zdGFydCBzeW50aCBib290c3RyYXAsIFNoZWxsU3RlcHMgd2l0aCBubyByZWdpc3RyeSwgYW5kXG4gICAgICogYG1ldGFkYXRhX29ubHlgIHBsdWdpbnMpLiBlbnY6IGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRWAuIERlZmF1bHRcbiAgICAgKiBgcGlwZWxpbmUtYm9vdHN0cmFwOjEuMGAg4oCUIHRoZSBsb2NhbCB0YWcgYnVpbHQgYnlcbiAgICAgKiBgZGVwbG95L2NvZGVidWlsZC9ib290c3RyYXAvRG9ja2VyZmlsZWAsIHdpdGggYHBpcGVsaW5lLW1hbmFnZXJgXG4gICAgICogYmFrZWQgaW4uXG4gICAgICpcbiAgICAgKiBDb250cmFjdDogdGhlIGltYWdlIE1VU1QgaGF2ZSBgcGlwZWxpbmUtbWFuYWdlcmAgb24gUEFUSC4gVGhlXG4gICAgICogYm9vdHN0cmFwIHN5bnRoIHBhdGggbm8gbG9uZ2VyIHNlbGYtaGVhbHMgdmlhIGBucG0gaW5zdGFsbCAtZ2A7XG4gICAgICogcG9pbnRpbmcgdGhpcyBhdCBhbiBpbWFnZSB3aXRob3V0IHRoZSB0b29sIGdldHMgZXhpdCAxMjcgb24gdGhlXG4gICAgICogZmlyc3QgY29sZC1zdGFydCBidWlsZC5cbiAgICAgKlxuICAgICAqIFJlc29sdXRpb246XG4gICAgICogLSBCYXJlIHRhZyAobm8gYC9gKSDihpIgYXV0by1wcmVmaXhlZCB0b1xuICAgICAqICAgYDxyZWdpc3RyeS1ob3N0Pjo8cG9ydD4vbGlicmFyeS88dGFnPmAgdXNpbmcgdGhlIHJlZ2lzdHJ5IGNvbmZpZyxcbiAgICAgKiAgIHdpdGggdGhlIHBlci1vcmcgcGxhdGZvcm0gU2VjcmV0IGFzIEJhc2ljIGF1dGggKHNhbWUgZmxvdyBhc1xuICAgICAqICAgcGx1Z2luIGltYWdlcykuXG4gICAgICogLSBGdWxseS1xdWFsaWZpZWQgcmVnaXN0cnkgVVJJIChjb250YWlucyBgL2ApIOKGkiB1c2VkIGFzLWlzLCBub1xuICAgICAqICAgYXV0aCB3aXJlZCAob3BlcmF0b3Igb3ducyBtYWtpbmcgaXQgcHVsbGFibGUpLlxuICAgICAqIC0gV2hlbiB0aGUgcmVnaXN0cnkgaXNuJ3QgY29uZmlndXJlZCBvciBwZXItb3JnIGF1dGggaXNuJ3RcbiAgICAgKiAgIGF2YWlsYWJsZSBhdCB0aGUgY2FsbCBzaXRlLCBmYWxscyBiYWNrIHRvXG4gICAgICogICBgYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo4LjBgIHdpdGggYSB3YXJuaW5nIOKAlCBjb2xkLXN0YXJ0IHN5bnRoXG4gICAgICogICB3aWxsIHRoZW4gZmFpbCBvbiBgcGlwZWxpbmUtbWFuYWdlcjogbm90IGZvdW5kYCwgc3VyZmFjaW5nIHRoZVxuICAgICAqICAgbWlzY29uZmlndXJhdGlvbiBsb3VkbHkgaW5zdGVhZCBvZiBzaWxlbnRseSBzd2FwcGluZyBpbWFnZXMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZGVmYXVsdEltYWdlOiBzdHJpbmc7XG4gIH07XG59XG5cbi8qKiBFeHByZXNzIHJhdGUgbGltaXRpbmcgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF0ZUxpbWl0Q29uZmlnIHtcbiAgLyoqIE1heGltdW0gcmVxdWVzdHMgcGVyIHdpbmRvdyAoZW52OiBgTElNSVRFUl9NQVhgKS4gKi9cbiAgcmVhZG9ubHkgbWF4OiBudW1iZXI7XG4gIC8qKiBSYXRlIGxpbWl0IHdpbmRvdyBpbiBtaWxsaXNlY29uZHMgKGVudjogYExJTUlURVJfV0lORE9XTVNgKS4gKi9cbiAgcmVhZG9ubHkgd2luZG93TXM6IG51bWJlcjtcbiAgLyoqIEluY2x1ZGUgbGVnYWN5IGBYLVJhdGVMaW1pdC0qYCBoZWFkZXJzLiAqL1xuICByZWFkb25seSBsZWdhY3lIZWFkZXJzOiBib29sZWFuO1xuICAvKiogSW5jbHVkZSBzdGFuZGFyZCBgUmF0ZUxpbWl0LSpgIGhlYWRlcnMgKFJGQyA2NTg1KS4gKi9cbiAgcmVhZG9ubHkgc3RhbmRhcmRIZWFkZXJzOiBib29sZWFuO1xufVxuXG4vKiogUHJpY2UgY29uZmlndXJhdGlvbiBmb3IgYSBzaW5nbGUgYmlsbGluZyBwbGFuIChpbiBjZW50cykuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbGxpbmdQbGFuUHJpY2VzIHtcbiAgcmVhZG9ubHkgbW9udGhseTogbnVtYmVyO1xuICByZWFkb25seSBhbm51YWw6IG51bWJlcjtcbn1cblxuLyoqIEZ1bGwgYmlsbGluZyBwbGFuIGRlZmluaXRpb24gdXNlZCBmb3Igc2VlZGluZyBhbmQgcnVudGltZSBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaWxsaW5nUGxhbkNvbmZpZyB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgdGllcjogUXVvdGFUaWVyO1xuICByZWFkb25seSBwcmljZXM6IEJpbGxpbmdQbGFuUHJpY2VzO1xuICByZWFkb25seSBmZWF0dXJlczogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IGlzQWN0aXZlOiBib29sZWFuO1xuICByZWFkb25seSBpc0RlZmF1bHQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNvcnRPcmRlcjogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgcHVyY2hhc2FibGUgYWRkLW9uIGJ1bmRsZTogYSBxdWFudGl0eS1zdGFja2FibGUgcGFjayB0aGF0IEFERFMgdG8gdGhlXG4gKiBhY2NvdW50J3MgYmFzZSAodGllcikgbGltaXRzIGFuZCBhZGRzIGEgcmVjdXJyaW5nIGxpbmUgaXRlbS4gU2VlXG4gKiBkb2NzL2JpbGxpbmctYnVuZGxlcy5tZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVDb25maWcge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBQZXItdW5pdCBkZWx0YXMgb24gYFF1b3RhVGllckxpbWl0c2AgZmllbGRzLCBlLmcuIGB7IHNlYXRzOiA1IH1gLiBLZXlzIGFyZVxuICAgKiAgY29uc3RyYWluZWQgdG8gcmVhbCBxdW90YSBmaWVsZHMgc28gYSB0eXBvIGlzIGEgY29tcGlsZSBlcnJvciAod2FzXG4gICAqICBgUmVjb3JkPHN0cmluZywgbnVtYmVyPmAsIHdoZXJlIGEgbWlzc3BlbGxlZCBrZXkgd2FzIHNpbGVudGx5IHVuZW5mb3JjZWFibGUpLiAqL1xuICByZWFkb25seSBncmFudHM6IFJlYWRvbmx5PFBhcnRpYWw8UmVjb3JkPGtleW9mIFF1b3RhVGllckxpbWl0cywgbnVtYmVyPj4+O1xuICAvKiogRmVhdHVyZSBmbGFncyBncmFudGVkIGJ5IGEgZmVhdHVyZSBidW5kbGUgKGUuZy4gYGF1ZGl0X2xvZ2ApLiAqL1xuICByZWFkb25seSBmZWF0dXJlcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogUGVyLXVuaXQgcHJpY2UgKGNlbnRzKS4gU3RyaXBlIG11bHRpcGxpZXMgYnkgcXVhbnRpdHkuICovXG4gIHJlYWRvbmx5IHByaWNlczogQmlsbGluZ1BsYW5QcmljZXM7XG4gIC8qKiBUcnVlIGZvciBzdGFja2FibGUgcmVzb3VyY2UgcGFja3M7IGZhbHNlIGZvciBhIGJvb2xlYW4gZmVhdHVyZSBidW5kbGUuICovXG4gIHJlYWRvbmx5IHN0YWNrYWJsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE1heGltdW0gcHVyY2hhc2FibGUgcXVhbnRpdHkgZm9yIGEgc3RhY2thYmxlIHBhY2suIEVuZm9yY2VkIGJ5IHRoZSBhZGRvblxuICAgKiBwdXJjaGFzZS9wcmV2aWV3IHJvdXRlIChgcXVhbnRpdHkg4omkIG1heFF1YW50aXR5YCwgcmVqZWN0IG92ZXItY2FwKS4gVXNlZCB0b1xuICAgKiBrZWVwIHJldGVudGlvbiBwYWNrcyB1bmRlciB0aGUgNzMwLWRheSByZXRlbnRpb24gY2VpbGluZyAoZS5nLiB0aGUgU3RhbmRhcmRcbiAgICogUmV0ZW50aW9uIFBhY2sgY2FwcyBhdCA3IHNvIDMwICsgN8OXOTAgPSA2NjAg4omkIDczMCkuIEFic2VudCDih5IgdW5ib3VuZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4UXVhbnRpdHk/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBwZXItdW5pdCB2b2x1bWUgZGlzY291bnQgdGllcnMgZm9yIGEgc3RhY2thYmxlIHBhY2s6IGF0IOKJpSBgbWluUXVhbnRpdHlgXG4gICAqIHB1cmNoYXNlZCB1bml0cywgYGRpc2NvdW50UGVyY2VudGAgY29tZXMgb2ZmIHRoZSBsaW5lIHN1YnRvdGFsICh1bml0IMOXIHF1YW50aXR5KS5cbiAgICogVGhlIGhpZ2hlc3QgbWF0Y2hpbmcgdGllciB3aW5zLiBSZWFsaXplZCBhcyBhIHJlY3VycmluZyB1c2FnZSBjcmVkaXQgKGxpa2UgYVxuICAgKiBjb21ibyksIHNvIHRoZSBwcm92aWRlciBzdGlsbCBjaGFyZ2VzIHVuaXTDl3F0eSBhbmQgdGhlIGNyZWRpdCBvZmZzZXRzIHRoZVxuICAgKiBiYWxhbmNlLiBFbnYtb3ZlcnJpZGFibGUgdmlhIGBCSUxMSU5HX0JVTkRMRV88SUQ+X1ZPTFVNRV9USUVSU2AgKEpTT04pLiBVc2VkIGJ5XG4gICAqIHRoZSBwZXItc2VhdCBgc2VhdGAgYnVuZGxlLiBBYnNlbnQg4oeSIG5vIHZvbHVtZSBkaXNjb3VudC5cbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZVRpZXJzPzogcmVhZG9ubHkgeyByZWFkb25seSBtaW5RdWFudGl0eTogbnVtYmVyOyByZWFkb25seSBkaXNjb3VudFBlcmNlbnQ6IG51bWJlciB9W107XG4gIC8qKiBCYXNlIHRpZXJzIHRoaXMgYnVuZGxlIGlzIG9mZmVyZWQgdG8uICovXG4gIHJlYWRvbmx5IGF2YWlsYWJsZUZvclRpZXJzOiByZWFkb25seSBRdW90YVRpZXJbXTtcbiAgLyoqXG4gICAqIFByZXJlcXVpc2l0ZSBidW5kbGUgaWRzIHRoYXQgbXVzdCBiZSBoZWxkIChvciBwdXJjaGFzZWQgaW4gdGhlIHNhbWUgYWN0aW9uKVxuICAgKiBiZWZvcmUgdGhpcyBidW5kbGUgY2FuIGJlIGFkZGVkLiBFbmZvcmNlZCBieSB0aGUgYWRkb24gcHVyY2hhc2UvcHJldmlldyByb3V0ZVxuICAgKiAocmVqZWN0IHdpdGggNDAwIHdoZW4gdW5tZXQpOyBhIGNvbWJvIHRoYXQgaW5jbHVkZXMgdGhlIHByZXJlcXVpc2l0ZSBzYXRpc2ZpZXNcbiAgICogaXQuIFVzZWQgYnkgYGNvbXBsaWFuY2VfYWR2YW5jZWRgIChgcmVxdWlyZXM6IFsnY29tcGxpYW5jZV9zdGFuZGFyZCddYCkuXG4gICAqIEFic2VudCDih5Igbm8gcHJlcmVxdWlzaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZXM/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgaXNBY3RpdmU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNvcnRPcmRlcjogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgY29tYm8gZGlzY291bnQ6IHdoZW4gYW4gYWNjb3VudCBob2xkcyBFVkVSWSBidW5kbGUgaW4gYGJ1bmRsZUlkc2AsIHRoZSBwYWlyXG4gKiBpcyBiaWxsZWQgYXQgYHByaWNlc2AgKHRoZSBjb21iaW5lZCBwcmljZSkgaW5zdGVhZCBvZiB0aGUgc3VtIG9mIHRoZSBtZW1iZXJzJ1xuICogaW5kaXZpZHVhbCBwcmljZXMuIFJlYWxpemVkIGFzIGEgcmVjdXJyaW5nIHVzYWdlIGNyZWRpdCBmb3IgdGhlIGRpZmZlcmVuY2Ug4oCUXG4gKiBuZXZlciBhIHByb3ZpZGVyIGNvdXBvbiDigJQgY29uc2lzdGVudCB3aXRoIHRoZSB1c2FnZS1jcmVkaXQgZGlzY291bnQgbW9kZWwuIFNlZVxuICogZG9jcy9iaWxsaW5nLWJ1bmRsZXMubWQgwqdDb21ibyBwcmljaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbWJvRGlzY291bnRDb25maWcge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKiBUaGUgbWVtYmVyIGJ1bmRsZSBpZHMgdGhhdCBtdXN0IEFMTCBiZSBwcmVzZW50IGZvciB0aGUgY29tYm8gdG8gYXBwbHkuICovXG4gIHJlYWRvbmx5IGJ1bmRsZUlkczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBQZXItbWVtYmVyIG1pbmltdW0gcXVhbnRpdHkgKGJ1bmRsZUlkIOKGkiBjb3VudDsgYWJzZW50IOKHkiAxKS4gTGV0cyBhIHN0YWNrYWJsZVxuICAgKiAgY2FwYWNpdHkgcGFjayBhbmNob3IgYSBjb21ibyDigJQgZS5nLiBgeyBzZWF0OiA1IH1gID0gXCLiiaUgNSBzZWF0c1wiLiBUaGUgY3JlZGl0XG4gICAqICBiYXNpcyB1c2VzIHRoaXMgbWluaW11bSwgc28gZXh0cmEgdW5pdHMgbmV2ZXIgaW5mbGF0ZSB0aGUgZGlzY291bnQuICovXG4gIHJlYWRvbmx5IG1pblF1YW50aXRpZXM/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PjtcbiAgLyoqIFRoZSBjb21iaW5lZCBwcmljZSBmb3IgdGhlIG1pbmltdW0gc2V0IChjZW50cykuIFRoZSBjcmVkaXQgaXNcbiAgICogIGDOoyBtZW1iZXIgdW5pdCBwcmljZSDDlyBtaW5RdHkg4oiSIHByaWNlc2AsIGNsYW1wZWQg4omlIDAuICovXG4gIHJlYWRvbmx5IHByaWNlczogQmlsbGluZ1BsYW5QcmljZXM7XG4gIC8qKiBEZXRlcm1pbmlzdGljIHRpZS1icmVhayBhbW9uZyBlcXVhbC10b3RhbCBvcHRpbWFsIHBhY2tpbmdzIHdoZW4gY29tYm9zIG92ZXJsYXBcbiAgICogIChsb3dlciB3aW5zKS4gKi9cbiAgcmVhZG9ubHkgc29ydE9yZGVyOiBudW1iZXI7XG4gIHJlYWRvbmx5IGlzQWN0aXZlOiBib29sZWFuO1xufVxuXG4vKiogQmlsbGluZyBwbGFucyArIGFkZC1vbiBidW5kbGUgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmlsbGluZ0NvbmZpZyB7XG4gIHJlYWRvbmx5IHBsYW5zOiByZWFkb25seSBCaWxsaW5nUGxhbkNvbmZpZ1tdO1xuICByZWFkb25seSBidW5kbGVzOiByZWFkb25seSBCdW5kbGVDb25maWdbXTtcbiAgcmVhZG9ubHkgY29tYm9EaXNjb3VudHM6IHJlYWRvbmx5IENvbWJvRGlzY291bnRDb25maWdbXTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
"axios": "1.19.0",
|
|
35
35
|
"jsonwebtoken": "9.0.3",
|
|
36
36
|
"uuid": "14.0.1",
|
|
37
|
-
"@pipeline-builder/
|
|
38
|
-
"@pipeline-builder/
|
|
37
|
+
"@pipeline-builder/pipeline-data": "3.4.129",
|
|
38
|
+
"@pipeline-builder/api-core": "3.4.124"
|
|
39
39
|
},
|
|
40
40
|
"keywords": [
|
|
41
41
|
"ci-cd",
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
"access": "public",
|
|
92
92
|
"registry": "https://registry.npmjs.org/"
|
|
93
93
|
},
|
|
94
|
-
"version": "3.4.
|
|
94
|
+
"version": "3.4.144",
|
|
95
95
|
"bugs": {
|
|
96
96
|
"url": "https://github.com/mwashburn160/pipeline-builder/issues"
|
|
97
97
|
},
|