@pipeline-builder/pipeline-core 3.4.140 → 3.4.142
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/config/billing-config.d.ts +12 -1
- package/lib/config/billing-config.js +81 -11
- package/lib/config/config-types.d.ts +15 -0
- package/lib/config/config-types.js +1 -1
- package/lib/pipeline/pipeline-builder.d.ts +7 -4
- package/lib/pipeline/pipeline-builder.js +105 -8
- package/lib/pipeline/step-types.d.ts +8 -0
- package/lib/pipeline/step-types.js +1 -1
- package/package.json +3 -3
|
@@ -1,5 +1,16 @@
|
|
|
1
|
-
import type { BillingConfig } from './config-types.js';
|
|
1
|
+
import type { BillingConfig, BundleConfig } from './config-types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Load billing plan configuration from environment variables.
|
|
4
4
|
*/
|
|
5
5
|
export declare function loadBillingConfig(): BillingConfig;
|
|
6
|
+
/**
|
|
7
|
+
* Config-load guardrail for the `requires` prerequisite graph. A `requires` entry
|
|
8
|
+
* that doesn't resolve to an ACTIVE bundle — or that participates in a cycle —
|
|
9
|
+
* silently makes the referencing bundle unpurchasable (the addon route rejects
|
|
10
|
+
* with 400 forever because the prerequisite can never be satisfied). Catch it at
|
|
11
|
+
* load with a clear error rather than shipping a dead SKU.
|
|
12
|
+
*
|
|
13
|
+
* - Every id in a bundle's `requires` MUST name an active bundle in the catalog.
|
|
14
|
+
* - The `requires` graph MUST be acyclic (a → b → a can never be satisfied).
|
|
15
|
+
*/
|
|
16
|
+
export declare function assertBundleRequiresValid(bundles: BundleConfig[]): void;
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* BILLING_PLAN_{TIER}_DESCRIPTION (plain string)
|
|
12
12
|
* BILLING_PLAN_{TIER}_FEATURES (JSON string array)
|
|
13
13
|
*
|
|
14
|
-
* All defaults match the original hardcoded seed data
|
|
14
|
+
* All defaults match the original hardcoded seed data.
|
|
15
15
|
*/
|
|
16
16
|
import { QUOTA_TIERS, TIER_FEATURES, FEATURE_METADATA, VALID_TIERS, STANDARD_TIERS, isValidTier } from '@pipeline-builder/api-core';
|
|
17
17
|
// -- Default features ---------------------------------------------------------
|
|
@@ -151,8 +151,8 @@ export function loadBillingConfig() {
|
|
|
151
151
|
|| 'Org-wide scale with unlimited seats and priority support',
|
|
152
152
|
tier: 'enterprise',
|
|
153
153
|
prices: {
|
|
154
|
-
monthly: envCents(process.env.BILLING_PLAN_ENTERPRISE_MONTHLY,
|
|
155
|
-
annual: envCents(process.env.BILLING_PLAN_ENTERPRISE_ANNUAL,
|
|
154
|
+
monthly: envCents(process.env.BILLING_PLAN_ENTERPRISE_MONTHLY, 59900),
|
|
155
|
+
annual: envCents(process.env.BILLING_PLAN_ENTERPRISE_ANNUAL, 599000),
|
|
156
156
|
},
|
|
157
157
|
features: parseFeatures(process.env.BILLING_PLAN_ENTERPRISE_FEATURES, DEFAULT_ENTERPRISE_FEATURES),
|
|
158
158
|
isActive: true,
|
|
@@ -195,9 +195,9 @@ export function loadBillingConfig() {
|
|
|
195
195
|
*
|
|
196
196
|
* Defaults:
|
|
197
197
|
* - "Analytics Suite" — Advanced Reporting (DORA) + Team Usage Analytics, each
|
|
198
|
-
* $30/mo, together $
|
|
198
|
+
* $30/mo, together $42/mo ($420/yr) → a $18/mo credit (~30% off).
|
|
199
199
|
* - "Team Growth Bundle" — ≥1 Seat Pack ($25) + Team Usage Analytics ($30),
|
|
200
|
-
* together $
|
|
200
|
+
* together $38.50/mo ($385/yr) → a $16.50/mo credit (~30% off).
|
|
201
201
|
* Prices env-overridable via `BILLING_COMBO_<ID>_MONTHLY` / `_ANNUAL`.
|
|
202
202
|
*/
|
|
203
203
|
function loadComboDiscounts(bundles) {
|
|
@@ -214,8 +214,10 @@ function loadComboDiscounts(bundles) {
|
|
|
214
214
|
isActive: true,
|
|
215
215
|
});
|
|
216
216
|
const combos = [
|
|
217
|
-
c('analytics_suite', 'Analytics Suite', ['advanced_reporting', 'team_usage_analytics'],
|
|
218
|
-
c('team_growth', 'Team Growth Bundle', ['seat_pack', 'team_usage_analytics'],
|
|
217
|
+
c('analytics_suite', 'Analytics Suite', ['advanced_reporting', 'team_usage_analytics'], 4200, 42000, 0),
|
|
218
|
+
c('team_growth', 'Team Growth Bundle', ['seat_pack', 'team_usage_analytics'], 3850, 38500, 1, { seat_pack: 1 }),
|
|
219
|
+
// Compliance Suite — Standard + Advanced at 30% off ($908.60/yr vs $1,298 list).
|
|
220
|
+
c('compliance_suite', 'Compliance Suite', ['compliance_standard', 'compliance_advanced'], 9086, 90860, 2),
|
|
219
221
|
];
|
|
220
222
|
warnOnNonDiscountCombos(combos, bundles);
|
|
221
223
|
return combos;
|
|
@@ -296,6 +298,8 @@ function loadBundles() {
|
|
|
296
298
|
description,
|
|
297
299
|
grants: applyGrantOverride(id, grants),
|
|
298
300
|
...(extra.features ? { features: extra.features } : {}),
|
|
301
|
+
...(extra.maxQuantity !== undefined ? { maxQuantity: extra.maxQuantity } : {}),
|
|
302
|
+
...(extra.requires ? { requires: extra.requires } : {}),
|
|
299
303
|
prices: {
|
|
300
304
|
monthly: resolvedMonthly,
|
|
301
305
|
annual: envCents(process.env[`BILLING_BUNDLE_${id.toUpperCase()}_ANNUAL`], resolvedMonthly * 10),
|
|
@@ -309,11 +313,14 @@ function loadBundles() {
|
|
|
309
313
|
// Bundles are purchasable on every SELECTABLE tier (excludes `unlimited`, which
|
|
310
314
|
// is the billing-off tier and buys nothing) — so this is exactly STANDARD_TIERS.
|
|
311
315
|
const ALL = [...STANDARD_TIERS];
|
|
312
|
-
|
|
313
|
-
// Capacity packs (
|
|
316
|
+
const bundles = [
|
|
317
|
+
// Capacity packs (pipelines/plugins) are available on EVERY tier so any
|
|
314
318
|
// account — including free (developer) — can expand in place. Feature bundles
|
|
315
319
|
// (audit_log/sso) and rate packs stay tier-scoped by default.
|
|
316
|
-
|
|
320
|
+
// Seat Pack is the EXCEPTION — Team+ only. A single-seat Developer/Pro could
|
|
321
|
+
// otherwise add cheap seats ($5/seat) and undercut Team (whose 10 seats are the
|
|
322
|
+
// tier differentiator); restricting it forces "need >1 seat → upgrade to Team".
|
|
323
|
+
b('seat_pack', 'Seat Pack (+5)', '5 additional member seats', { seats: 5 }, 2500, ['team', 'enterprise'], 0),
|
|
317
324
|
b('pipeline_pack', 'Pipeline Pack (+10)', '10 additional pipelines', { pipelines: 10 }, 1500, ALL, 1),
|
|
318
325
|
b('plugin_pack', 'Plugin Pack (+100)', '100 additional plugins', { plugins: 100 }, 1500, ALL, 2),
|
|
319
326
|
b('api_pack', 'API Pack (+1M)', '1,000,000 additional API calls / period', { apiCalls: 1_000_000 }, 2000, ALL, 3),
|
|
@@ -332,6 +339,69 @@ function loadBundles() {
|
|
|
332
339
|
// no teams to break down). Priced at $30/mo ($300/yr) — parity with DORA, its
|
|
333
340
|
// analytics sibling. Overridable via BILLING_BUNDLE_TEAM_USAGE_ANALYTICS_MONTHLY/_ANNUAL.
|
|
334
341
|
b('team_usage_analytics', 'Team Usage Analytics', 'Per-team usage breakdown across the org → team subtree (all quota dimensions)', {}, 3000, ['pro', 'team'], 9, { features: ['team_usage_analytics'], stackable: false }),
|
|
342
|
+
// Retention packs (docs/billing-bundles.md). Stackable capacity packs that
|
|
343
|
+
// raise the reporting retention entitlement billing syncs to reporting's
|
|
344
|
+
// `dora_settings`. NOT quota-metered flow — `eventRetentionDays`/`doraRetentionDays`
|
|
345
|
+
// are absent from VALID_QUOTA_TYPES, so they never ride the quota-service leg.
|
|
346
|
+
// Standard Retention Pack: +90d standard-event retention (base 30 → 120 → 210…).
|
|
347
|
+
// Capped at 7 (30 + 7×90 = 660 ≤ the 730-day retention ceiling).
|
|
348
|
+
b('retention_pack', 'Standard Retention Pack (+90d)', '90 additional days of standard pipeline-event retention', { eventRetentionDays: 90 }, 1500, ALL, 10, { maxQuantity: 7 }),
|
|
349
|
+
// DORA History Pack: +365d DORA retention AND per-org report-query window (the
|
|
350
|
+
// window cap tracks doraRetentionDays). Only meaningful with Advanced Reporting
|
|
351
|
+
// — INCLUDED in Enterprise, an add-on on developer/pro/team. Capped at 1
|
|
352
|
+
// (180 + 365 = 545 ≤ the 730-day retention ceiling).
|
|
353
|
+
b('dora_history_pack', 'DORA History Pack (+365d)', '365 additional days of DORA history + report-query window (requires Advanced Reporting)', { doraRetentionDays: 365 }, 3000, ALL, 11, { maxQuantity: 1 }),
|
|
354
|
+
// Compliance content add-ons (docs/plans/compliance-addons.md). Feature bundles
|
|
355
|
+
// gating access to curated system-org published rule sets. INCLUDED in
|
|
356
|
+
// Enterprise/Unlimited (via ALL_FEATURE_FLAGS); sold to Developer/Pro/Team.
|
|
357
|
+
// Standard = ~20 CI/CD best-practice rules. Advanced = SOC2/PCI/CIS framework
|
|
358
|
+
// libraries; REQUIRES Standard (or buy the Suite combo for both at 30% off).
|
|
359
|
+
b('compliance_standard', 'Standard Compliance', 'Curated CI/CD best-practice compliance rules', {}, 2990, ['developer', 'pro', 'team'], 12, { features: ['compliance_standard'], stackable: false }),
|
|
360
|
+
b('compliance_advanced', 'Advanced Compliance', 'Curated framework compliance libraries (SOC2 / PCI-DSS / CIS)', {}, 9990, ['developer', 'pro', 'team'], 13, { features: ['compliance_advanced'], stackable: false, requires: ['compliance_standard'] }),
|
|
335
361
|
];
|
|
362
|
+
assertBundleRequiresValid(bundles);
|
|
363
|
+
return bundles;
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Config-load guardrail for the `requires` prerequisite graph. A `requires` entry
|
|
367
|
+
* that doesn't resolve to an ACTIVE bundle — or that participates in a cycle —
|
|
368
|
+
* silently makes the referencing bundle unpurchasable (the addon route rejects
|
|
369
|
+
* with 400 forever because the prerequisite can never be satisfied). Catch it at
|
|
370
|
+
* load with a clear error rather than shipping a dead SKU.
|
|
371
|
+
*
|
|
372
|
+
* - Every id in a bundle's `requires` MUST name an active bundle in the catalog.
|
|
373
|
+
* - The `requires` graph MUST be acyclic (a → b → a can never be satisfied).
|
|
374
|
+
*/
|
|
375
|
+
export function assertBundleRequiresValid(bundles) {
|
|
376
|
+
const active = new Map(bundles.filter((b) => b.isActive).map((b) => [b.id, b]));
|
|
377
|
+
// 1. Validity: every requires id resolves to an active bundle.
|
|
378
|
+
for (const bundle of bundles) {
|
|
379
|
+
for (const reqId of bundle.requires ?? []) {
|
|
380
|
+
if (!active.has(reqId)) {
|
|
381
|
+
throw new Error(`[billing-config] Bundle "${bundle.id}" requires "${reqId}", which is not an active bundle in the catalog — it would be permanently unpurchasable.`);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
// 2. Acyclicity: DFS over the requires edges, tracking the current path.
|
|
386
|
+
const VISITING = 1;
|
|
387
|
+
const DONE = 2;
|
|
388
|
+
const state = new Map();
|
|
389
|
+
const visit = (id, path) => {
|
|
390
|
+
const s = state.get(id);
|
|
391
|
+
if (s === DONE)
|
|
392
|
+
return;
|
|
393
|
+
if (s === VISITING) {
|
|
394
|
+
const cycle = [...path.slice(path.indexOf(id)), id].join(' -> ');
|
|
395
|
+
throw new Error(`[billing-config] Bundle "requires" cycle detected: ${cycle}.`);
|
|
396
|
+
}
|
|
397
|
+
state.set(id, VISITING);
|
|
398
|
+
for (const reqId of active.get(id)?.requires ?? []) {
|
|
399
|
+
visit(reqId, [...path, id]);
|
|
400
|
+
}
|
|
401
|
+
state.set(id, DONE);
|
|
402
|
+
};
|
|
403
|
+
for (const bundle of active.keys()) {
|
|
404
|
+
visit(bundle, []);
|
|
405
|
+
}
|
|
336
406
|
}
|
|
337
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGluZy1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2JpbGxpbmctY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQXdDLE1BQU0sNEJBQTRCLENBQUM7QUFPMUssZ0ZBQWdGO0FBQ2hGLDhFQUE4RTtBQUM5RSxrREFBa0Q7QUFDbEQsa0ZBQWtGO0FBQ2xGLGlEQUFpRDtBQUNqRCx3RUFBd0U7QUFDeEUsMkVBQTJFO0FBQzNFLDZFQUE2RTtBQUM3RSwrRUFBK0U7QUFDL0UsaUZBQWlGO0FBQ2pGLDRFQUE0RTtBQUU1RSx3RkFBd0Y7QUFDeEYsU0FBUyxTQUFTLENBQUMsS0FBYSxFQUFFLFFBQWdCLEVBQUUsTUFBYztJQUNoRSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7UUFBRSxPQUFPLGFBQWEsTUFBTSxFQUFFLENBQUM7SUFDL0MsT0FBTyxTQUFTLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNyRixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsSUFBZSxFQUFFLEtBQWU7SUFDdkQsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNuQyxPQUFPO1FBQ0wsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUNuQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDO1FBQ3pDLFNBQVMsQ0FBQyxDQUFDLENBQUMs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Q0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNoSSw4RUFBOEU7UUFDOUUsNEVBQTRFO1FBQzVFLHdFQUF3RTtRQUN4RSwyRUFBMkU7UUFDM0UsQ0FBQyxDQUFDLG9CQUFvQixFQUFFLDJCQUEyQixFQUFFLHFIQUFxSCxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzlRLHNFQUFzRTtRQUN0RSwrRUFBK0U7UUFDL0UsOEVBQThFO1FBQzlFLDBGQUEwRjtRQUMxRixDQUFDLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsK0VBQStFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztLQUMzTixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIExvYWQgYmlsbGluZyBwbGFuIGNvbmZpZ3VyYXRpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogUGVyLXBsYW4gcHJpY2VzIGFyZSB0aGUgbW9zdCBsaWtlbHkgdG8gdmFyeSBiZXR3ZWVuIGVudmlyb25tZW50czpcbiAqICAgQklMTElOR19QTEFOX3tUSUVSfV9NT05USExZIC8gQklMTElOR19QTEFOX3tUSUVSfV9BTk5VQUwgIChpbiBjZW50cylcbiAqXG4gKiBPcHRpb25hbCBvdmVycmlkZXMgZm9yIGRlc2NyaXB0aW9ucyBhbmQgZmVhdHVyZXM6XG4gKiAgIEJJTExJTkdfUExBTl97VElFUn1fTkFNRSAgICAgICAgICAocGxhaW4gc3RyaW5nLCBkaXNwbGF5IG5hbWUpXG4gKiAgIEJJTExJTkdfUExBTl97VElFUn1fREVTQ1JJUFRJT04gICAocGxhaW4gc3RyaW5nKVxuICogICBCSUxMSU5HX1BMQU5fe1RJRVJ9X0ZFQVRVUkVTICAgICAgKEpTT04gc3RyaW5nIGFycmF5KVxuICpcbiAqIEFsbCBkZWZhdWx0cyBtYXRjaCB0aGUgb3JpZ2luYWwgaGFyZGNvZGVkIHNlZWQgZGF0YSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuaW1wb3J0IHsgUVVPVEFfVElFUlMsIFRJRVJfRkVBVFVSRVMsIEZFQVRVUkVfTUVUQURBVEEsIFZBTElEX1RJRVJTLCBTVEFOREFSRF9USUVSUywgaXNWYWxpZFRpZXIsIHR5cGUgUXVvdGFUaWVyLCB0eXBlIFF1b3RhVGllckxpbWl0cyB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgQmlsbGluZ0NvbmZpZywgQmlsbGluZ1BsYW5Db25maWcsIEJ1bmRsZUNvbmZpZywgQ29tYm9EaXNjb3VudENvbmZpZyB9IGZyb20gJy4vY29uZmlnLXR5cGVzLmpzJztcblxuLyoqIFBlci11bml0IHF1b3RhIGRlbHRhcyBmb3IgYSBidW5kbGUg4oCUIGtleXMgY29uc3RyYWluZWQgdG8gcmVhbCBxdW90YSBmaWVsZHNcbiAqICAobWF0Y2hlcyBgQnVuZGxlQ29uZmlnLmdyYW50c2ApLCBzbyBhIHR5cG8nZCBkaW1lbnNpb24gZmFpbHMgdG8gY29tcGlsZS4gKi9cbnR5cGUgR3JhbnRNYXAgPSBQYXJ0aWFsPFJlY29yZDxrZXlvZiBRdW90YVRpZXJMaW1pdHMsIG51bWJlcj4+O1xuXG4vLyAtLSBEZWZhdWx0IGZlYXR1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhlIG1hcmtldGVkIGZlYXR1cmUgbGlzdCBpcyBidWlsdCBmcm9tIHR3byBkZXJpdmVkIHNvdXJjZXMgc28gaXQgY2FuIG5ldmVyXG4vLyBkcmlmdCBmcm9tIHdoYXQgdGhlIHBsYXRmb3JtIGFjdHVhbGx5IGVuZm9yY2VzOlxuLy8gICAxLiBMSU1JVCBsaW5lcyBkZXJpdmVkIGZyb20gZWFjaCB0aWVyJ3MgRUZGRUNUSVZFIHF1b3RhIGxpbWl0cyAoUVVPVEFfVElFUlMpLFxuLy8gICAgICBzbyB0aGV5IHRyYWNrIFFVT1RBX1RJRVJfKiBlbnYgb3ZlcnJpZGVzLlxuLy8gICAyLiBJTkNMVURFRC1GRUFUVVJFIGxpbmVzIGRlcml2ZWQgZnJvbSB0aGUgZW5mb3JjZWQgZW50aXRsZW1lbnQgc2V0XG4vLyAgICAgIChUSUVSX0ZFQVRVUkVTKSB2aWEgRkVBVFVSRV9NRVRBREFUQSBsYWJlbHMg4oCUIHNvIGFuIGFkdmVydGlzZWQgYmFzZVxuLy8gICAgICBmZWF0dXJlIGlzIGFsd2F5cyBvbmUgYHJlcXVpcmVGZWF0dXJlYCBhY3R1YWxseSBncmFudHMgZm9yIHRoYXQgdGllci5cbi8vIE9ubHkgZ2VudWluZWx5IG5vbi1nYXRlZCBtYXJrZXRpbmcgY29weSAoc3VwcG9ydCBsZXZlbCwgZGFzaGJvYXJkcywgUkJBQykgaXNcbi8vIGhhbmQtYXV0aG9yZWQsIHBhc3NlZCBhcyBgcGVya3NgLiBQdXJjaGFzYWJsZSBhZGQtb25zIChzc28sIGF1ZGl0X2xvZykgYXJlIE5PVFxuLy8gbGlzdGVkIGFzIGJhc2UgcGVya3MgaGVyZSDigJQgdGhleSBhcmUgc29sZCBhcyBidW5kbGVzIChzZWUgbG9hZEJ1bmRsZXMoKSkuXG5cbi8qKiBcIlVwIHRvIE4gcGx1Z2luc1wiIC8gXCJVbmxpbWl0ZWQgcGx1Z2luc1wiIGZyb20gYW4gZWZmZWN0aXZlIGxpbWl0ICgtMSA9IHVubGltaXRlZCkuICovXG5mdW5jdGlvbiBsaW1pdExpbmUobGltaXQ6IG51bWJlciwgc2luZ3VsYXI6IHN0cmluZywgcGx1cmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAobGltaXQgPT09IC0xKSByZXR1cm4gYFVubGltaXRlZCAke3BsdXJhbH1gO1xuICByZXR1cm4gYFVwIHRvICR7bGltaXQudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJyl9ICR7bGltaXQgPT09IDEgPyBzaW5ndWxhciA6IHBsdXJhbH1gO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0RmVhdHVyZXModGllcjogUXVvdGFUaWVyLCBwZXJrczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGwgPSBRVU9UQV9USUVSU1t0aWVyXS5saW1pdHM7XG4gIHJldHVybiBbXG4gICAgbGltaXRMaW5lKGwuc2VhdHMsICdzZWF0JywgJ3NlYXRzJyksXG4gICAgbGltaXRMaW5lKGwucGx1Z2lucywgJ3BsdWdpbicsICdwbHVnaW5zJyksXG4gICAgbGltaXRMaW5lKGwucGlwZWxpbmVzLCAncGlwZWxpbmUnLCAncGlwZWxpbmVzJyksXG4gICAgbGltaXRMaW5lKGwuYXBpQ2FsbHMsICdBUEkgY2FsbCcsICdBUEkgY2FsbHMnKSxcbiAgICBsaW1pdExpbmUobC5haUNhbGxzLCAnQUkgY2FsbCcsICdBSSBjYWxscycpLFxuICAgIC8vIEVuZm9yY2VkIGVudGl0bGVtZW50cyDihpIgY3VzdG9tZXItZmFjaW5nIGxhYmVscyAoc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCkuXG4gICAgLi4uVElFUl9GRUFUVVJFU1t0aWVyXS5tYXAoKGYpID0+IEZFQVRVUkVfTUVUQURBVEFbZl0ubGFiZWwpLFxuICAgIC4uLnBlcmtzLFxuICBdO1xufVxuXG4vLyBOb3RlOiBgcGVya3NgIGFyZSBub24tZ2F0ZWQgbWFya2V0aW5nIGxpbmVzIG9ubHkuIEVuZm9yY2VkIGZlYXR1cmVzIChpbmNsLlxuLy8gUHJpb3JpdHkgU3VwcG9ydCBmb3IgcHJvL3RlYW0vZW50ZXJwcmlzZSkgY29tZSBmcm9tIFRJRVJfRkVBVFVSRVMgYWJvdmUuXG5jb25zdCBERUZBVUxUX0RFVkVMT1BFUl9GRUFUVVJFUyA9IGRlZmF1bHRGZWF0dXJlcygnZGV2ZWxvcGVyJywgWydDb21tdW5pdHkgc3VwcG9ydCddKTtcbmNvbnN0IERFRkFVTFRfUFJPX0ZFQVRVUkVTID0gZGVmYXVsdEZlYXR1cmVzKCdwcm8nLCBbJ1JlcG9ydGluZyBkYXNoYm9hcmQnXSk7XG5jb25zdCBERUZBVUxUX1RFQU1fRkVBVFVSRVMgPSBkZWZhdWx0RmVhdHVyZXMoJ3RlYW0nLCBbJ1JCQUMgJiB0ZWFtIHJvbGVzJ10pO1xuY29uc3QgREVGQVVMVF9FTlRFUlBSSVNFX0ZFQVRVUkVTID0gZGVmYXVsdEZlYXR1cmVzKCdlbnRlcnByaXNlJywgW1xuICAnUkJBQyAmIHRlYW0gcm9sZXMnLCAnUmVwb3J0aW5nIGRhc2hib2FyZCcsXG5dKTtcbi8vIFVubGltaXRlZCBpbmNsdWRlcyBldmVyeSBmZWF0dXJlIChUSUVSX0ZFQVRVUkVTLnVubGltaXRlZCA9IGFsbCkuXG5jb25zdCBERUZBVUxUX1VOTElNSVRFRF9GRUFUVVJFUyA9IGRlZmF1bHRGZWF0dXJlcygndW5saW1pdGVkJywgW1xuICAnVW5saW1pdGVkIGV2ZXJ5dGhpbmcnLCAnUkJBQyAmIHRlYW0gcm9sZXMnLCAnUmVwb3J0aW5nIGRhc2hib2FyZCcsXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBhIHByaWNlIChpbiBjZW50cykgZnJvbSBhbiBlbnYgdmFyLCBmYWxsaW5nIGJhY2sgdG8gdGhlIGRlZmF1bHQgd2hlblxuICogdW5zZXQgT1IgbWFsZm9ybWVkLiBBIE5hTiAoZS5nLiBgQklMTElOR19QTEFOX1BST19NT05USExZPWFiY2ApIG11c3QgbmV2ZXJcbiAqIGZsb3cgaW50byB0aGUgcmV0dXJuZWQgY29uZmlnIGFzIGEgcHJpY2UuXG4gKi9cbmZ1bmN0aW9uIGVudkNlbnRzKGVudlZhcjogc3RyaW5nIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKGVudlZhciA9PT0gdW5kZWZpbmVkIHx8IGVudlZhciA9PT0gJycpIHJldHVybiBmYWxsYmFjaztcbiAgLy8gYHBhcnNlSW50YCBpcyB0b28gbGVuaWVudCBoZXJlOiAnNDkuOTkn4oaSNDksICc0OWFiYyfihpI0OSwgJy0xMDAn4oaSLTEwMCB3b3VsZCBhbGxcbiAgLy8gZmxvdyB0aHJvdWdoIGFzIGEgXCJwcmljZVwiLiBSZXF1aXJlIGEgY2xlYW4sIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIChjZW50cyksXG4gIC8vIG1hdGNoaW5nIGBhcHBseUdyYW50T3ZlcnJpZGVgJ3Mgcmlnb3Ig4oCUIGFueXRoaW5nIGVsc2UgZmFsbHMgYmFjay5cbiAgY29uc3QgbiA9IE51bWJlcihlbnZWYXIpO1xuICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihuKSAmJiBuID49IDAgPyBuIDogZmFsbGJhY2s7XG59XG5cbi8qKlxuICogUGFyc2UgYSBKU09OIGFycmF5IGZyb20gYW4gZW52IHZhciwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRmVhdHVyZXMoZW52VmFyOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgaWYgKCFlbnZWYXIpIHJldHVybiBmYWxsYmFjaztcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGVudlZhcik7XG4gICAgLy8gQXJyYXktb2Ytc3RyaW5ncyBvbmx5IOKAlCBhIEpTT04gYXJyYXkgb2Ygbm9uLXN0cmluZ3MgKGUuZy4gYFsxLDJdYCkgbXVzdCBub3RcbiAgICAvLyBzaGlwIG51bWJlcnMgYXMgZmVhdHVyZSBsYWJlbHMuIEZpbHRlciB0byBzdHJpbmdzIChtaXJyb3JzIGFwcGx5VGllcnNPdmVycmlkZSkuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcnNlZCkpIHJldHVybiBmYWxsYmFjaztcbiAgICBjb25zdCBzdHJpbmdzID0gcGFyc2VkLmZpbHRlcigoeCk6IHggaXMgc3RyaW5nID0+IHR5cGVvZiB4ID09PSAnc3RyaW5nJyk7XG4gICAgcmV0dXJuIHN0cmluZ3MubGVuZ3RoID09PSBwYXJzZWQubGVuZ3RoID8gc3RyaW5ncyA6IGZhbGxiYWNrO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH1cbn1cblxuLyoqXG4gKiBMb2FkIGJpbGxpbmcgcGxhbiBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEJpbGxpbmdDb25maWcoKTogQmlsbGluZ0NvbmZpZyB7XG4gIC8vIEtleWVkIGJ5IFF1b3RhVGllciBzbyB0aGUgY29tcGlsZXIgZm9yY2VzIGEgcGxhbiBmb3IgRVZFUlkgdGllciDigJQgYWRkaW5nIGFcbiAgLy8gNXRoIFF1b3RhVGllciB3aXRob3V0IGEgcGxhbiBoZXJlIGlzIG5vdyBhIGNvbXBpbGUgZXJyb3IgKHdhcyBhIGhhbmQta2VwdFxuICAvLyA0LWVsZW1lbnQgYXJyYXkgdGhhdCBzaWxlbnRseSBzaGlwcGVkIG5vIHBsYW4vcHJpY2UgZm9yIGEgbmV3IHRpZXIpLiBUaGVcbiAgLy8gcHVibGljIGBjb25maWcucGxhbnNgIHNoYXBlIHN0YXlzIGFuIGFycmF5LCBkZXJpdmVkIGJlbG93IGluIFZBTElEX1RJRVJTXG4gIC8vIG9yZGVyIChkZXZlbG9wZXIsIHBybywgdGVhbSwgZW50ZXJwcmlzZSwgdW5saW1pdGVkKSB0byBwcmVzZXJ2ZSBjb25zdW1lciBvcmRlcmluZy5cbiAgY29uc3QgcGxhbkJ5VGllcjogUmVjb3JkPFF1b3RhVGllciwgQmlsbGluZ1BsYW5Db25maWc+ID0ge1xuICAgIGRldmVsb3Blcjoge1xuICAgICAgaWQ6ICdkZXZlbG9wZXInLFxuICAgICAgbmFtZTogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0RFVkVMT1BFUl9OQU1FIHx8ICdEZXZlbG9wZXInLFxuICAgICAgZGVzY3JpcHRpb246IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9ERVZFTE9QRVJfREVTQ1JJUFRJT05cbiAgICAgICAgfHwgJ0ZyZWUgc3RhcnRlciB0aWVyIGZvciBpbmRpdmlkdWFsIGRldmVsb3BlcnMnLFxuICAgICAgdGllcjogJ2RldmVsb3BlcicsXG4gICAgICBwcmljZXM6IHtcbiAgICAgICAgbW9udGhseTogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0RFVkVMT1BFUl9NT05USExZLCAwKSxcbiAgICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fREVWRUxPUEVSX0FOTlVBTCwgMCksXG4gICAgICB9LFxuICAgICAgZmVhdHVyZXM6IHBhcnNlRmVhdHVyZXMoXG4gICAgICAgIHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9ERVZFTE9QRVJfRkVBVFVSRVMsXG4gICAgICAgIERFRkFVTFRfREVWRUxPUEVSX0ZFQVRVUkVTLFxuICAgICAgKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiB0cnVlLFxuICAgICAgc29ydE9yZGVyOiAwLFxuICAgIH0sXG4gICAgcHJvOiB7XG4gICAgICBpZDogJ3BybycsXG4gICAgICBuYW1lOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fUFJPX05BTUUgfHwgJ1BybycsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1BST19ERVNDUklQVElPTlxuICAgICAgICB8fCAnRm9yIGluZGl2aWR1YWwgcG93ZXIgdXNlcnMgYW5kIHByb2R1Y3Rpb24gd29ya2xvYWRzJyxcbiAgICAgIHRpZXI6ICdwcm8nLFxuICAgICAgcHJpY2VzOiB7XG4gICAgICAgIG1vbnRobHk6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9QUk9fTU9OVEhMWSwgNDkwMCksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1BST19BTk5VQUwsIDQ5MDAwKSxcbiAgICAgIH0sXG4gICAgICBmZWF0dXJlczogcGFyc2VGZWF0dXJlcyhcbiAgICAgICAgcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1BST19GRUFUVVJFUyxcbiAgICAgICAgREVGQVVMVF9QUk9fRkVBVFVSRVMsXG4gICAgICApLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBpc0RlZmF1bHQ6IGZhbHNlLFxuICAgICAgc29ydE9yZGVyOiAxLFxuICAgIH0sXG4gICAgdGVhbToge1xuICAgICAgaWQ6ICd0ZWFtJyxcbiAgICAgIG5hbWU6IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9URUFNX05BTUUgfHwgJ1RlYW0nLFxuICAgICAgZGVzY3JpcHRpb246IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9URUFNX0RFU0NSSVBUSU9OXG4gICAgICAgIHx8ICdGb3IgdGVhbXMgY29sbGFib3JhdGluZyBvbiBzaGFyZWQgcGlwZWxpbmVzJyxcbiAgICAgIHRpZXI6ICd0ZWFtJyxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBtb250aGx5OiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVEVBTV9NT05USExZLCAxNDkwMCksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1RFQU1fQU5OVUFMLCAxNDkwMDApLFxuICAgICAgfSxcbiAgICAgIGZlYXR1cmVzOiBwYXJzZUZlYXR1cmVzKFxuICAgICAgICBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVEVBTV9GRUFUVVJFUyxcbiAgICAgICAgREVGQVVMVF9URUFNX0ZFQVRVUkVTLFxuICAgICAgKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICAgIHNvcnRPcmRlcjogMixcbiAgICB9LFxuICAgIGVudGVycHJpc2U6IHtcbiAgICAgIGlkOiAnZW50ZXJwcmlzZScsXG4gICAgICBuYW1lOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fRU5URVJQUklTRV9OQU1FIHx8ICdFbnRlcnByaXNlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fRU5URVJQUklTRV9ERVNDUklQVElPTlxuICAgICAgICB8fCAnT3JnLXdpZGUgc2NhbGUgd2l0aCB1bmxpbWl0ZWQgc2VhdHMgYW5kIHByaW9yaXR5IHN1cHBvcnQnLFxuICAgICAgdGllcjogJ2VudGVycHJpc2UnLFxuICAgICAgcHJpY2VzOiB7XG4gICAgICAgIG1vbnRobHk6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9FTlRFUlBSSVNFX01PTlRITFksIDM5OTAwKSxcbiAgICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fRU5URVJQUklTRV9BTk5VQUwsIDM5OTAwMCksXG4gICAgICB9LFxuICAgICAgZmVhdHVyZXM6IHBhcnNlRmVhdHVyZXMoXG4gICAgICAgIHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9FTlRFUlBSSVNFX0ZFQVRVUkVTLFxuICAgICAgICBERUZBVUxUX0VOVEVSUFJJU0VfRkVBVFVSRVMsXG4gICAgICApLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBpc0RlZmF1bHQ6IGZhbHNlLFxuICAgICAgc29ydE9yZGVyOiAzLFxuICAgIH0sXG4gICAgLy8gVGhlIGJpbGxpbmctRElTQUJMRUQgZGVmYXVsdCBwbGFuOiBldmVyeXRoaW5nIHVuY2FwcGVkLCBhbGwgZmVhdHVyZXMsIGZyZWUuXG4gICAgLy8gU2VlZGVkIHNvIHRoZSB0aWVy4oaScGxhbiBtYXBwaW5nIHJlc29sdmVzLCBidXQgbmV2ZXIgb2ZmZXJlZCBmb3Igc2FsZSDigJQgdGhlXG4gICAgLy8gcmVhZC1wbGFucyByb3V0ZSBmaWx0ZXJzIGl0IG91dCAoc2VlIGNyZWF0ZVJlYWRQbGFuUm91dGVzKSwgc28gaXQncyBoaWRkZW5cbiAgICAvLyB3aGVuZXZlciBiaWxsaW5nIGlzIGVuYWJsZWQgKHRoZSBvbmx5IHRpbWUgL3BsYW5zIGlzIHNlcnZlZCkuXG4gICAgdW5saW1pdGVkOiB7XG4gICAgICBpZDogJ3VubGltaXRlZCcsXG4gICAgICBuYW1lOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVU5MSU1JVEVEX05BTUUgfHwgJ1VubGltaXRlZCcsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1VOTElNSVRFRF9ERVNDUklQVElPTlxuICAgICAgICB8fCAnRXZlcnl0aGluZyB1bmNhcHBlZCDigJQgdGhlIGRlZmF1bHQgd2hlbiBiaWxsaW5nIGlzIGRpc2FibGVkJyxcbiAgICAgIHRpZXI6ICd1bmxpbWl0ZWQnLFxuICAgICAgcHJpY2VzOiB7XG4gICAgICAgIG1vbnRobHk6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9VTkxJTUlURURfTU9OVEhMWSwgMCksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1VOTElNSVRFRF9BTk5VQUwsIDApLFxuICAgICAgfSxcbiAgICAgIGZlYXR1cmVzOiBwYXJzZUZlYXR1cmVzKFxuICAgICAgICBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVU5MSU1JVEVEX0ZFQVRVUkVTLFxuICAgICAgICBERUZBVUxUX1VOTElNSVRFRF9GRUFUVVJFUyxcbiAgICAgICksXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogZmFsc2UsXG4gICAgICBzb3J0T3JkZXI6IDQsXG4gICAgfSxcbiAgfTtcblxuICAvLyBEZXJpdmUgdGhlIGFycmF5IGNvbnN1bWVycyByZWFkIChgY29uZmlnLnBsYW5zYCkgaW4gY2Fub25pY2FsIHRpZXIgb3JkZXIuXG4gIGNvbnN0IHBsYW5zOiBCaWxsaW5nUGxhbkNvbmZpZ1tdID0gVkFMSURfVElFUlMubWFwKCh0aWVyKSA9PiBwbGFuQnlUaWVyW3RpZXJdKTtcblxuICAvLyBCdWlsZCBidW5kbGVzIE9OQ0UgYW5kIHRocmVhZCB0aGVtIGludG8gdGhlIGNvbWJvIGxvYWRlciAod2hpY2ggbmVlZHMgdGhlaXJcbiAgLy8gZW52LWVmZmVjdGl2ZSBwcmljZXMpIOKAlCBhdm9pZHMgcGFyc2luZyB0aGUgd2hvbGUgYnVuZGxlIGNhdGFsb2cgdHdpY2UgcGVyIGxvYWQuXG4gIGNvbnN0IGJ1bmRsZXMgPSBsb2FkQnVuZGxlcygpO1xuICByZXR1cm4geyBwbGFucywgYnVuZGxlcywgY29tYm9EaXNjb3VudHM6IGxvYWRDb21ib0Rpc2NvdW50cyhidW5kbGVzKSB9O1xufVxuXG4vKipcbiAqIENvbWJvIGRpc2NvdW50cyAoZG9jcy9iaWxsaW5nLWJ1bmRsZXMubWQgwqdDb21ibyBwcmljaW5nKS4gV2hlbiBhbiBhY2NvdW50IG93bnNcbiAqIGV2ZXJ5IG1lbWJlciBidW5kbGUgKGVhY2ggYXQg4omlIGl0cyBtaW5pbXVtIHF1YW50aXR5KSwgdGhlIHNldCBpcyBiaWxsZWQgYXQgdGhlXG4gKiBjb21iaW5lZCBwcmljZSBpbnN0ZWFkIG9mIHRoZSBzdW0gb2YgdGhlIG1lbWJlcnMg4oCUIHJlYWxpemVkIGFzIGEgcmVjdXJyaW5nIHVzYWdlXG4gKiBjcmVkaXQgZm9yIHRoZSBkaWZmZXJlbmNlLiBPdmVybGFwcGluZyBjb21ib3MgYXJlIHJlc29sdmVkIGJ5IG1heC13ZWlnaHQgcGFja2luZ1xuICogKGEgc2hhcmVkIGFkZC1vbiBpcyBuZXZlciBkaXNjb3VudGVkIHR3aWNlKTsgYHNvcnRPcmRlcmAgYnJlYWtzIGVxdWFsLXRvdGFsIHRpZXMuXG4gKlxuICogRGVmYXVsdHM6XG4gKiAgLSBcIkFuYWx5dGljcyBTdWl0ZVwiIOKAlCBBZHZhbmNlZCBSZXBvcnRpbmcgKERPUkEpICsgVGVhbSBVc2FnZSBBbmFseXRpY3MsIGVhY2hcbiAqICAgICQzMC9tbywgdG9nZXRoZXIgJDQwL21vICgkNDAwL3lyKSDihpIgYSAkMjAvbW8gY3JlZGl0LlxuICogIC0gXCJUZWFtIEdyb3d0aCBCdW5kbGVcIiDigJQg4omlMSBTZWF0IFBhY2sgKCQyNSkgKyBUZWFtIFVzYWdlIEFuYWx5dGljcyAoJDMwKSxcbiAqICAgIHRvZ2V0aGVyICQzNS9tbyAoJDM1MC95cikg4oaSIGEgJDIwL21vIGNyZWRpdC5cbiAqIFByaWNlcyBlbnYtb3ZlcnJpZGFibGUgdmlhIGBCSUxMSU5HX0NPTUJPXzxJRD5fTU9OVEhMWWAgLyBgX0FOTlVBTGAuXG4gKi9cbmZ1bmN0aW9uIGxvYWRDb21ib0Rpc2NvdW50cyhidW5kbGVzOiBCdW5kbGVDb25maWdbXSk6IENvbWJvRGlzY291bnRDb25maWdbXSB7XG4gIGNvbnN0IGMgPSAoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgYnVuZGxlSWRzOiBzdHJpbmdbXSxcbiAgICBtb250aGx5OiBudW1iZXIsXG4gICAgYW5udWFsOiBudW1iZXIsXG4gICAgc29ydE9yZGVyOiBudW1iZXIsXG4gICAgbWluUXVhbnRpdGllcz86IFJlY29yZDxzdHJpbmcsIG51bWJlcj4sXG4gICk6IENvbWJvRGlzY291bnRDb25maWcgPT4gKHtcbiAgICBpZCxcbiAgICBuYW1lLFxuICAgIGJ1bmRsZUlkcyxcbiAgICAuLi4obWluUXVhbnRpdGllcyA/IHsgbWluUXVhbnRpdGllcyB9IDoge30pLFxuICAgIHByaWNlczoge1xuICAgICAgbW9udGhseTogZW52Q2VudHMocHJvY2Vzcy5lbnZbYEJJTExJTkdfQ09NQk9fJHtpZC50b1VwcGVyQ2FzZSgpfV9NT05USExZYF0sIG1vbnRobHkpLFxuICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudltgQklMTElOR19DT01CT18ke2lkLnRvVXBwZXJDYXNlKCl9X0FOTlVBTGBdLCBhbm51YWwpLFxuICAgIH0sXG4gICAgc29ydE9yZGVyLFxuICAgIGlzQWN0aXZlOiB0cnVlLFxuICB9KTtcblxuICBjb25zdCBjb21ib3MgPSBbXG4gICAgYygnYW5hbHl0aWNzX3N1aXRlJywgJ0FuYWx5dGljcyBTdWl0ZScsIFsnYWR2YW5jZWRfcmVwb3J0aW5nJywgJ3RlYW1fdXNhZ2VfYW5hbHl0aWNzJ10sIDQwMDAsIDQwMDAwLCAwKSxcbiAgICBjKCd0ZWFtX2dyb3d0aCcsICdUZWFtIEdyb3d0aCBCdW5kbGUnLCBbJ3NlYXRfcGFjaycsICd0ZWFtX3VzYWdlX2FuYWx5dGljcyddLCAzNTAwLCAzNTAwMCwgMSwgeyBzZWF0X3BhY2s6IDEgfSksXG4gIF07XG4gIHdhcm5Pbk5vbkRpc2NvdW50Q29tYm9zKGNvbWJvcywgYnVuZGxlcyk7XG4gIHJldHVybiBjb21ib3M7XG59XG5cbi8qKlxuICogR3VhcmRyYWlsOiBhIGNvbWJvIHdob3NlIGNvbWJpbmVkIHByaWNlIGlzIOKJpSBpdHMgbWluaW11bS1jb21wb3NpdGlvbiBiYXNrZXQgZ3JhbnRzXG4gKiBubyBjcmVkaXQgKHRoZSBjcmVkaXQgY2xhbXBzIHRvICQwKSBhbmQgaXMgc2lsZW50bHkgaW5lcnQuIFdhcm4gbG91ZGx5IGluc3RlYWQgc28gYVxuICogbWlzY29uZmlndXJlZCBgQklMTElOR19DT01CT18qYCBvdmVycmlkZSBpcyBjYXVnaHQuIE5vbi1mYXRhbC5cbiAqL1xuZnVuY3Rpb24gd2Fybk9uTm9uRGlzY291bnRDb21ib3MoY29tYm9zOiBDb21ib0Rpc2NvdW50Q29uZmlnW10sIGJ1bmRsZXM6IEJ1bmRsZUNvbmZpZ1tdKTogdm9pZCB7XG4gIC8vIENvbWJvIG1lbWJlcnMgYXJlIGFsd2F5cyBidW5kbGVzOyByZXNvbHZlIHRoZWlyIChlbnYtZWZmZWN0aXZlKSB1bml0IHByaWNlcyBvbmNlLlxuICBjb25zdCBieUlkID0gbmV3IE1hcChidW5kbGVzLm1hcCgoYikgPT4gW2IuaWQsIGJdKSk7XG4gIGZvciAoY29uc3QgY29tYm8gb2YgY29tYm9zKSB7XG4gICAgZm9yIChjb25zdCBpbnRlcnZhbCBvZiBbJ21vbnRobHknLCAnYW5udWFsJ10gYXMgY29uc3QpIHtcbiAgICAgIGNvbnN0IGJhc2tldCA9IGNvbWJvLmJ1bmRsZUlkcy5yZWR1Y2UoKHMsIGlkKSA9PiBzICsgKGJ5SWQuZ2V0KGlkKT8ucHJpY2VzW2ludGVydmFsXSA/PyAwKSAqIChjb21iby5taW5RdWFudGl0aWVzPy5baWRdID8/IDEpLCAwKTtcbiAgICAgIGlmIChjb21iby5wcmljZXNbaW50ZXJ2YWxdID49IGJhc2tldCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oYFtiaWxsaW5nLWNvbmZpZ10gQ29tYm8gXCIke2NvbWJvLmlkfVwiICR7aW50ZXJ2YWx9IHByaWNlICR7Y29tYm8ucHJpY2VzW2ludGVydmFsXX0g4omlIG1lbWJlciBiYXNrZXQgJHtiYXNrZXR9OyBpdCBncmFudHMgbm8gZGlzY291bnQuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IEJVTkRMRV9HQiA9IDEwMjQgKiAxMDI0ICogMTAyNDtcblxuLyoqXG4gKiBBcHBseSBhIHBlci1idW5kbGUgZ3JhbnQgb3ZlcnJpZGUuIEVhY2ggc3RhY2thYmxlIHBhY2sgZ3JhbnRzIGV4YWN0bHkgb25lXG4gKiBxdW90YSBkaW1lbnNpb24sIHNvIGBCSUxMSU5HX0JVTkRMRV88SUQ+X0dSQU5UYCByZXR1bmVzIHRoYXQgYW1vdW50IChlLmcuIG1ha2VcbiAqIHRoZSBTZWF0IFBhY2sgZ3JhbnQgKzEwIGluc3RlYWQgb2YgKzUpIOKAlCBwYXJhbGxlbCB0byB0aGUgcHJpY2Ugb3ZlcnJpZGVzLlxuICogSWdub3JlZCBmb3IgbXVsdGktZGltZW5zaW9uIG9yIGZlYXR1cmUtb25seSAoZW1wdHktZ3JhbnQpIGJ1bmRsZXMsIGFuZCBmb3IgYVxuICogbWFsZm9ybWVkL25lZ2F0aXZlIHZhbHVlLlxuICovXG5mdW5jdGlvbiBhcHBseUdyYW50T3ZlcnJpZGUoaWQ6IHN0cmluZywgZ3JhbnRzOiBHcmFudE1hcCk6IEdyYW50TWFwIHtcbiAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZbYEJJTExJTkdfQlVORExFXyR7aWQudG9VcHBlckNhc2UoKX1fR1JBTlRgXTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGdyYW50cyk7XG4gIGlmIChyYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09ICcnIHx8IGtleXMubGVuZ3RoICE9PSAxKSByZXR1cm4gZ3JhbnRzO1xuICBjb25zdCBuID0gcGFyc2VJbnQocmF3LCAxMCk7XG4gIGlmIChOdW1iZXIuaXNOYU4obikgfHwgbiA8IDApIHJldHVybiBncmFudHM7XG4gIC8vIGBrZXlzYCBjYW1lIGZyb20gYSBHcmFudE1hcCwgc28gaXRzIHNvbGUga2V5IGlzIGEgUXVvdGFUaWVyTGltaXRzIGZpZWxkLlxuICByZXR1cm4geyBba2V5c1swXSBhcyBrZXlvZiBRdW90YVRpZXJMaW1pdHNdOiBuIH07XG59XG5cbi8qKlxuICogQXBwbHkgYSBwZXItYnVuZGxlIHRpZXItYXZhaWxhYmlsaXR5IG92ZXJyaWRlLiBgQklMTElOR19CVU5ETEVfPElEPl9USUVSU2AgaXMgYVxuICogSlNPTiBhcnJheSBvZiB0aWVyIElEcyB0aGF0IG1heSBwdXJjaGFzZSB0aGUgYnVuZGxlIChlLmcuIGBbXCJkZXZlbG9wZXJcIixcInByb1wiXWApXG4gKiDigJQgcGFyYWxsZWwgdG8gdGhlIHByaWNlL2dyYW50IG92ZXJyaWRlcy4gRmFsbHMgYmFjayB0byBgZGVmYXVsdFRpZXJzYCB3aGVuXG4gKiB1bnNldCwgbWFsZm9ybWVkLCBlbXB0eSwgb3IgY29udGFpbmluZyBhbiB1bmtub3duIHRpZXIuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5VGllcnNPdmVycmlkZShpZDogc3RyaW5nLCBkZWZhdWx0VGllcnM6IFF1b3RhVGllcltdKTogUXVvdGFUaWVyW10ge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltgQklMTElOR19CVU5ETEVfJHtpZC50b1VwcGVyQ2FzZSgpfV9USUVSU2BdO1xuICBpZiAoIXJhdykgcmV0dXJuIGRlZmF1bHRUaWVycztcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcnNlZCkgfHwgcGFyc2VkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGRlZmF1bHRUaWVycztcbiAgICBjb25zdCB2YWxpZCA9IHBhcnNlZC5maWx0ZXIoKHQpOiB0IGlzIFF1b3RhVGllciA9PiB0eXBlb2YgdCA9PT0gJ3N0cmluZycgJiYgaXNWYWxpZFRpZXIodCkpO1xuICAgIHJldHVybiB2YWxpZC5sZW5ndGggPT09IHBhcnNlZC5sZW5ndGggPyB2YWxpZCA6IGRlZmF1bHRUaWVycztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGRlZmF1bHRUaWVycztcbiAgfVxufVxuXG4vKipcbiAqIFB1cmNoYXNhYmxlIGFkZC1vbiBidW5kbGVzIChkb2NzL2JpbGxpbmctYnVuZGxlcy5tZCDCpzMpLiBHcmFudHMgYXJlIHBlci11bml0XG4gKiBkZWx0YXMgb24gUXVvdGFUaWVyTGltaXRzOyBwcmljZXMgKGNlbnRzLCBgQklMTElOR19CVU5ETEVfPElEPl9NT05USExZYCAvXG4gKiBgX0FOTlVBTGApLCB0aGUgc2luZ2xlLWRpbWVuc2lvbiBncmFudCBhbW91bnQgKGBCSUxMSU5HX0JVTkRMRV88SUQ+X0dSQU5UYCksXG4gKiBhbmQgdGhlIHB1cmNoYXNhYmxlLXRpZXIgbGlzdCAoYEJJTExJTkdfQlVORExFXzxJRD5fVElFUlNgKSBhcmUgYWxsXG4gKiBlbnYtb3ZlcnJpZGFibGUuIEFubnVhbCDiiYggMTDDlyBtb250aGx5LlxuICovXG5mdW5jdGlvbiBsb2FkQnVuZGxlcygpOiBCdW5kbGVDb25maWdbXSB7XG4gIGNvbnN0IGIgPSAoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICBncmFudHM6IEdyYW50TWFwLFxuICAgIG1vbnRobHk6IG51bWJlcixcbiAgICBhdmFpbGFibGVGb3JUaWVyczogUXVvdGFUaWVyW10sXG4gICAgc29ydE9yZGVyOiBudW1iZXIsXG4gICAgZXh0cmE6IHsgZmVhdHVyZXM/OiBzdHJpbmdbXTsgc3RhY2thYmxlPzogYm9vbGVhbiB9ID0ge30sXG4gICk6IEJ1bmRsZUNvbmZpZyA9PiB7XG4gICAgLy8gUmVzb2x2ZSBtb250aGx5IGZpcnN0IHNvIHRoZSBhbm51YWwgZmFsbGJhY2sgdHJhY2tzIGEgYF9NT05USExZYCBvdmVycmlkZVxuICAgIC8vIChhbm51YWwg4omIIDEww5cgdGhlICplZmZlY3RpdmUqIG1vbnRobHksIG5vdCB0aGUgaGFyZGNvZGVkIGRlZmF1bHQpLlxuICAgIGNvbnN0IHJlc29sdmVkTW9udGhseSA9IGVudkNlbnRzKHByb2Nlc3MuZW52W2BCSUxMSU5HX0JVTkRMRV8ke2lkLnRvVXBwZXJDYXNlKCl9X01PTlRITFlgXSwgbW9udGhseSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgbmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZ3JhbnRzOiBhcHBseUdyYW50T3ZlcnJpZGUoaWQsIGdyYW50cyksXG4gICAgICAuLi4oZXh0cmEuZmVhdHVyZXMgPyB7IGZlYXR1cmVzOiBleHRyYS5mZWF0dXJlcyB9IDoge30pLFxuICAgICAgcHJpY2VzOiB7XG4gICAgICAgIG1vbnRobHk6IHJlc29sdmVkTW9udGhseSxcbiAgICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudltgQklMTElOR19CVU5ETEVfJHtpZC50b1VwcGVyQ2FzZSgpfV9BTk5VQUxgXSwgcmVzb2x2ZWRNb250aGx5ICogMTApLFxuICAgICAgfSxcbiAgICAgIHN0YWNrYWJsZTogZXh0cmEuc3RhY2thYmxlID8/IHRydWUsXG4gICAgICBhdmFpbGFibGVGb3JUaWVyczogYXBwbHlUaWVyc092ZXJyaWRlKGlkLCBhdmFpbGFibGVGb3JUaWVycyksXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIHNvcnRPcmRlcixcbiAgICB9O1xuICB9O1xuXG4gIC8vIEJ1bmRsZXMgYXJlIHB1cmNoYXNhYmxlIG9uIGV2ZXJ5IFNFTEVDVEFCTEUgdGllciAoZXhjbHVkZXMgYHVubGltaXRlZGAsIHdoaWNoXG4gIC8vIGlzIHRoZSBiaWxsaW5nLW9mZiB0aWVyIGFuZCBidXlzIG5vdGhpbmcpIOKAlCBzbyB0aGlzIGlzIGV4YWN0bHkgU1RBTkRBUkRfVElFUlMuXG4gIGNvbnN0IEFMTDogUXVvdGFUaWVyW10gPSBbLi4uU1RBTkRBUkRfVElFUlNdO1xuICByZXR1cm4gW1xuICAgIC8vIENhcGFjaXR5IHBhY2tzIChzZWF0cy9waXBlbGluZXMvcGx1Z2lucykgYXJlIGF2YWlsYWJsZSBvbiBFVkVSWSB0aWVyIHNvIGFueVxuICAgIC8vIGFjY291bnQg4oCUIGluY2x1ZGluZyBmcmVlIChkZXZlbG9wZXIpIOKAlCBjYW4gZXhwYW5kIGluIHBsYWNlLiBGZWF0dXJlIGJ1bmRsZXNcbiAgICAvLyAoYXVkaXRfbG9nL3NzbykgYW5kIHJhdGUgcGFja3Mgc3RheSB0aWVyLXNjb3BlZCBieSBkZWZhdWx0LlxuICAgIGIoJ3NlYXRfcGFjaycsICdTZWF0IFBhY2sgKCs1KScsICc1IGFkZGl0aW9uYWwgbWVtYmVyIHNlYXRzJywgeyBzZWF0czogNSB9LCAyNTAwLCBBTEwsIDApLFxuICAgIGIoJ3BpcGVsaW5lX3BhY2snLCAnUGlwZWxpbmUgUGFjayAoKzEwKScsICcxMCBhZGRpdGlvbmFsIHBpcGVsaW5lcycsIHsgcGlwZWxpbmVzOiAxMCB9LCAxNTAwLCBBTEwsIDEpLFxuICAgIGIoJ3BsdWdpbl9wYWNrJywgJ1BsdWdpbiBQYWNrICgrMTAwKScsICcxMDAgYWRkaXRpb25hbCBwbHVnaW5zJywgeyBwbHVnaW5zOiAxMDAgfSwgMTUwMCwgQUxMLCAyKSxcbiAgICBiKCdhcGlfcGFjaycsICdBUEkgUGFjayAoKzFNKScsICcxLDAwMCwwMDAgYWRkaXRpb25hbCBBUEkgY2FsbHMgLyBwZXJpb2QnLCB7IGFwaUNhbGxzOiAxXzAwMF8wMDAgfSwgMjAwMCwgQUxMLCAzKSxcbiAgICBiKCdhaV9wYWNrJywgJ0FJIFBhY2sgKCs1ayknLCAnNSwwMDAgYWRkaXRpb25hbCBBSSBjYWxscyAvIHBlcmlvZCcsIHsgYWlDYWxsczogNTAwMCB9LCA3NTAwLCBBTEwsIDQpLFxuICAgIGIoJ3N0b3JhZ2VfcGFjaycsICdTdG9yYWdlIFBhY2sgKCs1MCBHQiknLCAnNTAgR0IgYWRkaXRpb25hbCByZWdpc3RyeSBzdG9yYWdlJywgeyBzdG9yYWdlQnl0ZXM6IDUwICogQlVORExFX0dCIH0sIDI1MDAsIEFMTCwgNSksXG4gICAgYignYXVkaXRfbG9nJywgJ0F1ZGl0IExvZycsICdBdWRpdCBsb2cgY2FwYWJpbGl0eScsIHt9LCAyMDAwLCBbJ3BybyddLCA2LCB7IGZlYXR1cmVzOiBbJ2F1ZGl0X2xvZyddLCBzdGFja2FibGU6IGZhbHNlIH0pLFxuICAgIC8vIFNTTyBpcyBJTkNMVURFRCBpbiBUZWFtIChzZWUgVElFUl9GRUFUVVJFUy50ZWFtKSwgc28gdGhlIGFkZC1vbiBpcyBQcm8tb25seS5cbiAgICBiKCdzc28nLCAnU1NPIC8gSWRQJywgJ1NTTyArIHVwIHRvIDUgSWRQIGNvbmZpZ3MnLCB7IGlkcENvbmZpZ3M6IDUgfSwgNDAwMCwgWydwcm8nXSwgNywgeyBmZWF0dXJlczogWydzc28nXSwgc3RhY2thYmxlOiBmYWxzZSB9KSxcbiAgICAvLyBET1JBIC8gYWR2YW5jZWQgZGVsaXZlcnkgYW5hbHl0aWNzLiBJTkNMVURFRCBpbiBFbnRlcnByaXNlIChUSUVSX0ZFQVRVUkVTKSxcbiAgICAvLyBzbyB0aGUgYWRkLW9uIGlzIG9mZmVyZWQgdG8gZXZlcnkgb3RoZXIgdGllciAoZGV2ZWxvcGVyL3Byby90ZWFtKS4gUHJpY2VkXG4gICAgLy8gYmV0d2VlbiBBdWRpdCBMb2cgKCQyMCkgYW5kIFNTTyAoJDQwKSDigJQgYSBoaWdoZXItdmFsdWUsIGFjdGl2ZWx5LXVzZWRcbiAgICAvLyBhbmFseXRpY3Mgc3VyZmFjZSB0aGFuIHRoZSBhdWRpdCBsb2csIGJ1dCBiZWxvdyB0aGUgU1NPIGVudGVycHJpc2UgZ2F0ZS5cbiAgICBiKCdhZHZhbmNlZF9yZXBvcnRpbmcnLCAnQWR2YW5jZWQgUmVwb3J0aW5nIChET1JBKScsICdET1JBIGRlbGl2ZXJ5IG1ldHJpY3Mg4oCUIGRlcGxveW1lbnQgZnJlcXVlbmN5LCBjaGFuZ2UgZmFpbHVyZSByYXRlLCBNVFRSLCBsZWFkLXRpbWUgcHJveHksIHBlcmZvcm1hbmNlIGJhbmRzICsgdHJlbmQnLCB7fSwgMzAwMCwgWydkZXZlbG9wZXInLCAncHJvJywgJ3RlYW0nXSwgOCwgeyBmZWF0dXJlczogWydhZHZhbmNlZF9yZXBvcnRpbmcnXSwgc3RhY2thYmxlOiBmYWxzZSB9KSxcbiAgICAvLyBQZXItdGVhbSB1c2FnZSBicmVha2Rvd24gYWNyb3NzIHRoZSBvcmcg4oaSIHRlYW0gc3VidHJlZS4gSU5DTFVERUQgaW5cbiAgICAvLyBFbnRlcnByaXNlIChUSUVSX0ZFQVRVUkVTKTsgdGhlIGFkZC1vbiBpcyBvZmZlcmVkIHRvIFByby9UZWFtIChkZXZlbG9wZXIgaGFzXG4gICAgLy8gbm8gdGVhbXMgdG8gYnJlYWsgZG93bikuIFByaWNlZCBhdCAkMzAvbW8gKCQzMDAveXIpIOKAlCBwYXJpdHkgd2l0aCBET1JBLCBpdHNcbiAgICAvLyBhbmFseXRpY3Mgc2libGluZy4gT3ZlcnJpZGFibGUgdmlhIEJJTExJTkdfQlVORExFX1RFQU1fVVNBR0VfQU5BTFlUSUNTX01PTlRITFkvX0FOTlVBTC5cbiAgICBiKCd0ZWFtX3VzYWdlX2FuYWx5dGljcycsICdUZWFtIFVzYWdlIEFuYWx5dGljcycsICdQZXItdGVhbSB1c2FnZSBicmVha2Rvd24gYWNyb3NzIHRoZSBvcmcg4oaSIHRlYW0gc3VidHJlZSAoYWxsIHF1b3RhIGRpbWVuc2lvbnMpJywge30sIDMwMDAsIFsncHJvJywgJ3RlYW0nXSwgOSwgeyBmZWF0dXJlczogWyd0ZWFtX3VzYWdlX2FuYWx5dGljcyddLCBzdGFja2FibGU6IGZhbHNlIH0pLFxuICBdO1xufVxuIl19
|
|
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==
|
|
@@ -282,8 +282,23 @@ export interface BundleConfig {
|
|
|
282
282
|
readonly prices: BillingPlanPrices;
|
|
283
283
|
/** True for stackable resource packs; false for a boolean feature bundle. */
|
|
284
284
|
readonly stackable: boolean;
|
|
285
|
+
/**
|
|
286
|
+
* Maximum purchasable quantity for a stackable pack. Enforced by the addon
|
|
287
|
+
* purchase/preview route (`quantity ≤ maxQuantity`, reject over-cap). Used to
|
|
288
|
+
* keep retention packs under the 730-day retention ceiling (e.g. the Standard
|
|
289
|
+
* Retention Pack caps at 7 so 30 + 7×90 = 660 ≤ 730). Absent ⇒ unbounded.
|
|
290
|
+
*/
|
|
291
|
+
readonly maxQuantity?: number;
|
|
285
292
|
/** Base tiers this bundle is offered to. */
|
|
286
293
|
readonly availableForTiers: readonly QuotaTier[];
|
|
294
|
+
/**
|
|
295
|
+
* Prerequisite bundle ids that must be held (or purchased in the same action)
|
|
296
|
+
* before this bundle can be added. Enforced by the addon purchase/preview route
|
|
297
|
+
* (reject with 400 when unmet); a combo that includes the prerequisite satisfies
|
|
298
|
+
* it. Used by `compliance_advanced` (`requires: ['compliance_standard']`).
|
|
299
|
+
* Absent ⇒ no prerequisite.
|
|
300
|
+
*/
|
|
301
|
+
readonly requires?: readonly string[];
|
|
287
302
|
readonly isActive: boolean;
|
|
288
303
|
readonly sortOrder: number;
|
|
289
304
|
}
|
|
@@ -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+O1xuICAvKiogRmVhdHVyZSBmbGFncyBncmFudGVkIGJ5IGEgZmVhdHVyZSBidW5kbGUgKGUuZy4gYGF1ZGl0X2xvZ2ApLiAqL1xuICByZWFkb25seSBmZWF0dXJlcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogUGVyLXVuaXQgcHJpY2UgKGNlbnRzKS4gU3RyaXBlIG11bHRpcGxpZXMgYnkgcXVhbnRpdHkuICovXG4gIHJlYWRvbmx5IHByaWNlczogQmlsbGluZ1BsYW5QcmljZXM7XG4gIC8qKiBUcnVlIGZvciBzdGFja2FibGUgcmVzb3VyY2UgcGFja3M7IGZhbHNlIGZvciBhIGJvb2xlYW4gZmVhdHVyZSBidW5kbGUuICovXG4gIHJlYWRvbmx5IHN0YWNrYWJsZTogYm9vbGVhbjtcbiAgLyoqIEJhc2UgdGllcnMgdGhpcyBidW5kbGUgaXMgb2ZmZXJlZCB0by4gKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmxlRm9yVGllcnM6IHJlYWRvbmx5IFF1b3RhVGllcltdO1xuICByZWFkb25seSBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc29ydE9yZGVyOiBudW1iZXI7XG59XG5cbi8qKlxuICogQSBjb21ibyBkaXNjb3VudDogd2hlbiBhbiBhY2NvdW50IGhvbGRzIEVWRVJZIGJ1bmRsZSBpbiBgYnVuZGxlSWRzYCwgdGhlIHBhaXJcbiAqIGlzIGJpbGxlZCBhdCBgcHJpY2VzYCAodGhlIGNvbWJpbmVkIHByaWNlKSBpbnN0ZWFkIG9mIHRoZSBzdW0gb2YgdGhlIG1lbWJlcnMnXG4gKiBpbmRpdmlkdWFsIHByaWNlcy4gUmVhbGl6ZWQgYXMgYSByZWN1cnJpbmcgdXNhZ2UgY3JlZGl0IGZvciB0aGUgZGlmZmVyZW5jZSDigJRcbiAqIG5ldmVyIGEgcHJvdmlkZXIgY291cG9uIOKAlCBjb25zaXN0ZW50IHdpdGggdGhlIHVzYWdlLWNyZWRpdCBkaXNjb3VudCBtb2RlbC4gU2VlXG4gKiBkb2NzL2JpbGxpbmctYnVuZGxlcy5tZCDCp0NvbWJvIHByaWNpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYm9EaXNjb3VudENvbmZpZyB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqIFRoZSBtZW1iZXIgYnVuZGxlIGlkcyB0aGF0IG11c3QgQUxMIGJlIHByZXNlbnQgZm9yIHRoZSBjb21ibyB0byBhcHBseS4gKi9cbiAgcmVhZG9ubHkgYnVuZGxlSWRzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFBlci1tZW1iZXIgbWluaW11bSBxdWFudGl0eSAoYnVuZGxlSWQg4oaSIGNvdW50OyBhYnNlbnQg4oeSIDEpLiBMZXRzIGEgc3RhY2thYmxlXG4gICAqICBjYXBhY2l0eSBwYWNrIGFuY2hvciBhIGNvbWJvIOKAlCBlLmcuIGB7IHNlYXRfcGFjazogMSB9YCA9IFwi4omlIDEgU2VhdCBQYWNrXCIuIFRoZVxuICAgKiAgY3JlZGl0IGJhc2lzIHVzZXMgdGhpcyBtaW5pbXVtLCBzbyBleHRyYSBwYWNrcyBuZXZlciBpbmZsYXRlIHRoZSBkaXNjb3VudC4gKi9cbiAgcmVhZG9ubHkgbWluUXVhbnRpdGllcz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIG51bWJlcj4+O1xuICAvKiogVGhlIGNvbWJpbmVkIHByaWNlIGZvciB0aGUgbWluaW11bSBzZXQgKGNlbnRzKS4gVGhlIGNyZWRpdCBpc1xuICAgKiAgYM6jIG1lbWJlciB1bml0IHByaWNlIMOXIG1pblF0eSDiiJIgcHJpY2VzYCwgY2xhbXBlZCDiiaUgMC4gKi9cbiAgcmVhZG9ubHkgcHJpY2VzOiBCaWxsaW5nUGxhblByaWNlcztcbiAgLyoqIERldGVybWluaXN0aWMgdGllLWJyZWFrIGFtb25nIGVxdWFsLXRvdGFsIG9wdGltYWwgcGFja2luZ3Mgd2hlbiBjb21ib3Mgb3ZlcmxhcFxuICAgKiAgKGxvd2VyIHdpbnMpLiAqL1xuICByZWFkb25seSBzb3J0T3JkZXI6IG51bWJlcjtcbiAgcmVhZG9ubHkgaXNBY3RpdmU6IGJvb2xlYW47XG59XG5cbi8qKiBCaWxsaW5nIHBsYW5zICsgYWRkLW9uIGJ1bmRsZSBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaWxsaW5nQ29uZmlnIHtcbiAgcmVhZG9ubHkgcGxhbnM6IHJlYWRvbmx5IEJpbGxpbmdQbGFuQ29uZmlnW107XG4gIHJlYWRvbmx5IGJ1bmRsZXM6IHJlYWRvbmx5IEJ1bmRsZUNvbmZpZ1tdO1xuICByZWFkb25seSBjb21ib0Rpc2NvdW50czogcmVhZG9ubHkgQ29tYm9EaXNjb3VudENvbmZpZ1tdO1xufVxuIl19
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9jb25maWctdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFF1b3RhVGllciwgUXVvdGFUaWVyTGltaXRzIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBBbGdvcml0aG0gfSBmcm9tICdqc29ud2VidG9rZW4nO1xuXG4vKipcbiAqIFR5cGUtc2FmZSBjb25maWd1cmF0aW9uIGludGVyZmFjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcENvbmZpZyB7XG4gIHJlYWRvbmx5IHNlcnZlcjogU2VydmVyQ29uZmlnO1xuICByZWFkb25seSBhdXRoOiBBdXRoQ29uZmlnO1xuICByZWFkb25seSBkYXRhYmFzZTogRGF0YWJhc2VDb25maWc7XG4gIHJlYWRvbmx5IHJlZ2lzdHJ5OiBSZWdpc3RyeUNvbmZpZztcbiAgcmVhZG9ubHkgcmVkaXM6IFJlZGlzQ29uZmlnO1xuICByZWFkb25seSBwbHVnaW5CdWlsZDogUGx1Z2luQnVpbGRDb25maWc7XG4gIHJlYWRvbmx5IGRvY2tlckNvbmZpZzogQnVpbGRDb25maWc7XG4gIHJlYWRvbmx5IG9ic2VydmFiaWxpdHk6IE9ic2VydmFiaWxpdHlDb25maWc7XG4gIHJlYWRvbmx5IGNvbXBsaWFuY2U6IENvbXBsaWFuY2VDb25maWc7XG4gIHJlYWRvbmx5IGF3czogQVdTQ29uZmlnO1xuICByZWFkb25seSByYXRlTGltaXQ6IFJhdGVMaW1pdENvbmZpZztcbiAgcmVhZG9ubHkgYmlsbGluZzogQmlsbGluZ0NvbmZpZztcbn1cblxuLyoqIEV4cHJlc3Mgc2VydmVyIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlckNvbmZpZyB7XG4gIC8qKiBIVFRQIGxpc3RlbiBwb3J0IChlbnY6IGBQT1JUYCkuICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29yczoge1xuICAgIC8qKiBXaGV0aGVyIHRvIGluY2x1ZGUgY3JlZGVudGlhbHMgaW4gQ09SUyByZXNwb25zZXMgKGVudjogYENPUlNfQ1JFREVOVElBTFNgKS4gKi9cbiAgICByZWFkb25seSBjcmVkZW50aWFsczogYm9vbGVhbjtcbiAgICAvKiogQWxsb3dlZCBvcmlnaW4ocykg4oCUIHNpbmdsZSBzdHJpbmcsIGFycmF5LCBvciBgJyonYCAoZW52OiBgQ09SU19PUklHSU5gKS4gKi9cbiAgICByZWFkb25seSBvcmlnaW46IHN0cmluZyB8IHN0cmluZ1tdO1xuICB9O1xuICAvKiogTnVtYmVyIG9mIHJldmVyc2UgcHJveHkgaG9wcyB0byB0cnVzdCAoZW52OiBgVFJVU1RfUFJPWFlgKS4gKi9cbiAgcmVhZG9ubHkgdHJ1c3RQcm94eTogbnVtYmVyO1xuICAvKiogRnJvbnRlbmQgYmFzZSBVUkwsIHVzZWQgYXMgQ09SUyBmYWxsYmFjayAoZW52OiBgUExBVEZPUk1fQkFTRV9VUkxgKS4gKi9cbiAgcmVhZG9ubHkgcGxhdGZvcm1Vcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgaHR0cENsaWVudDoge1xuICAgIC8qKiBEZWZhdWx0IEhUVFAgcmVxdWVzdCB0aW1lb3V0IGluIG1zIChlbnY6IGBIVFRQX0NMSUVOVF9USU1FT1VUYCkuICovXG4gICAgcmVhZG9ubHkgdGltZW91dDogbnVtYmVyO1xuICAgIC8qKiBNYXhpbXVtIHJldHJ5IGF0dGVtcHRzIGZvciBmYWlsZWQgcmVxdWVzdHMgKGVudjogYEhUVFBfQ0xJRU5UX01BWF9SRVRSSUVTYCkuICovXG4gICAgcmVhZG9ubHkgbWF4UmV0cmllczogbnVtYmVyO1xuICAgIC8qKiBCYXNlIGRlbGF5IGJldHdlZW4gcmV0cmllcyBpbiBtcyAoZW52OiBgSFRUUF9DTElFTlRfUkVUUllfREVMQVlfTVNgKS4gKi9cbiAgICByZWFkb25seSByZXRyeURlbGF5TXM6IG51bWJlcjtcbiAgfTtcbiAgcmVhZG9ubHkgc3NlOiB7XG4gICAgLyoqIE1heCBTU0UgY2xpZW50cyBwZXIgcmVxdWVzdCAoZW52OiBgU1NFX01BWF9DTElFTlRTX1BFUl9SRVFVRVNUYCkuICovXG4gICAgcmVhZG9ubHkgbWF4Q2xpZW50c1BlclJlcXVlc3Q6IG51bWJlcjtcbiAgICAvKiogU1NFIGNsaWVudCB0aW1lb3V0IGluIG1zIChlbnY6IGBTU0VfQ0xJRU5UX1RJTUVPVVRfTVNgKS4gKi9cbiAgICByZWFkb25seSBjbGllbnRUaW1lb3V0TXM6IG51bWJlcjtcbiAgICAvKiogU1NFIGNsZWFudXAgaW50ZXJ2YWwgaW4gbXMgKGVudjogYFNTRV9DTEVBTlVQX0lOVEVSVkFMX01TYCkuICovXG4gICAgcmVhZG9ubHkgY2xlYW51cEludGVydmFsTXM6IG51bWJlcjtcbiAgfTtcbiAgcmVhZG9ubHkgc2VydmljZXM6IHtcbiAgICByZWFkb25seSBwbHVnaW5Ib3N0OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcGx1Z2luUG9ydDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IHBpcGVsaW5lSG9zdDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHBpcGVsaW5lUG9ydDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IG1lc3NhZ2VIb3N0OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgbWVzc2FnZVBvcnQ6IG51bWJlcjtcbiAgICByZWFkb25seSBwbGF0Zm9ybUhvc3Q6IHN0cmluZztcbiAgICByZWFkb25seSBwbGF0Zm9ybVBvcnQ6IG51bWJlcjtcbiAgICByZWFkb25seSBjb21wbGlhbmNlSG9zdDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNvbXBsaWFuY2VQb3J0OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgYmlsbGluZ0hvc3Q6IHN0cmluZztcbiAgICByZWFkb25seSBiaWxsaW5nUG9ydDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGJpbGxpbmdUaW1lb3V0OiBudW1iZXI7XG4gIH07XG59XG5cbi8qKiBKV1QgYW5kIHJlZnJlc2ggdG9rZW4gYXV0aGVudGljYXRpb24gY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aENvbmZpZyB7XG4gIHJlYWRvbmx5IGp3dDoge1xuICAgIC8qKiBTaWduaW5nIHNlY3JldCBmb3IgYWNjZXNzIHRva2VucyAoZW52OiBgSldUX1NFQ1JFVGApLiAqL1xuICAgIHJlYWRvbmx5IHNlY3JldDogc3RyaW5nO1xuICAgIC8qKiBUb2tlbiBsaWZldGltZSBpbiBzZWNvbmRzIChlbnY6IGBKV1RfRVhQSVJFU19JTmApLiAqL1xuICAgIHJlYWRvbmx5IGV4cGlyZXNJbjogbnVtYmVyO1xuICAgIC8qKiBTaWduaW5nIGFsZ29yaXRobSwgZS5nLiBgJ0hTMjU2J2AgKGVudjogYEpXVF9BTEdPUklUSE1gKS4gKi9cbiAgICByZWFkb25seSBhbGdvcml0aG06IEFsZ29yaXRobTtcbiAgICAvKiogYmNyeXB0IHNhbHQgcm91bmRzIGZvciBwYXNzd29yZCBoYXNoaW5nIChlbnY6IGBCQ1JZUFRfU0FMVF9ST1VORFNgKS4gKi9cbiAgICByZWFkb25seSBzYWx0Um91bmRzOiBudW1iZXI7XG4gIH07XG4gIHJlYWRvbmx5IHJlZnJlc2hUb2tlbjoge1xuICAgIC8qKiBTaWduaW5nIHNlY3JldCBmb3IgcmVmcmVzaCB0b2tlbnMgKGVudjogYFJFRlJFU0hfVE9LRU5fU0VDUkVUYCkuICovXG4gICAgcmVhZG9ubHkgc2VjcmV0OiBzdHJpbmc7XG4gICAgLyoqIFRva2VuIGxpZmV0aW1lIGluIHNlY29uZHMgKGVudjogYFJFRlJFU0hfVE9LRU5fRVhQSVJFU19JTmApLiAqL1xuICAgIHJlYWRvbmx5IGV4cGlyZXNJbjogbnVtYmVyO1xuICB9O1xufVxuXG4vKiogUG9zdGdyZVNRTCBhbmQgRHJpenpsZSBPUk0gZGF0YWJhc2UgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VDb25maWcge1xuICByZWFkb25seSBwb3N0Z3Jlczoge1xuICAgIC8qKiBQb3N0Z3JlU1FMIGhvc3QgKGVudjogYERCX0hPU1RgKS4gKi9cbiAgICByZWFkb25seSBob3N0OiBzdHJpbmc7XG4gICAgLyoqIFBvc3RncmVTUUwgcG9ydCAoZW52OiBgREJfUE9SVGApLiAqL1xuICAgIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgICAvKiogRGF0YWJhc2UgbmFtZSAoZW52OiBgREFUQUJBU0VgKS4gKi9cbiAgICByZWFkb25seSBkYXRhYmFzZTogc3RyaW5nO1xuICAgIC8qKiBEYXRhYmFzZSB1c2VyIChlbnY6IGBEQl9VU0VSYCkuICovXG4gICAgcmVhZG9ubHkgdXNlcjogc3RyaW5nO1xuICAgIC8qKiBEYXRhYmFzZSBwYXNzd29yZCAoZW52OiBgREJfUEFTU1dPUkRgKS4gKi9cbiAgICByZWFkb25seSBwYXNzd29yZDogc3RyaW5nO1xuICB9O1xuICByZWFkb25seSBkcml6emxlOiB7XG4gICAgLyoqIE1heGltdW0gY29ubmVjdGlvbiBwb29sIHNpemUgKGVudjogYERSSVpaTEVfTUFYX1BPT0xfU0laRWApLiAqL1xuICAgIHJlYWRvbmx5IG1heFBvb2xTaXplOiBudW1iZXI7XG4gICAgLyoqIElkbGUgY29ubmVjdGlvbiB0aW1lb3V0IGluIG1zIChlbnY6IGBEUklaWkxFX0lETEVfVElNRU9VVF9NSUxMSVNgKS4gKi9cbiAgICByZWFkb25seSBpZGxlVGltZW91dE1pbGxpczogbnVtYmVyO1xuICAgIC8qKiBOZXcgY29ubmVjdGlvbiB0aW1lb3V0IGluIG1zIChlbnY6IGBEUklaWkxFX0NPTk5FQ1RJT05fVElNRU9VVF9NSUxMSVNgKS4gKi9cbiAgICByZWFkb25seSBjb25uZWN0aW9uVGltZW91dE1pbGxpczogbnVtYmVyO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJ5Q29uZmlnIHtcbiAgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gIC8qKlxuICAgKiBIb3N0L3BvcnQgYW4gT1VULU9GLUNMVVNURVIgY2xpZW50IChub3RhYmx5IEFXUyBDb2RlQnVpbGQpIHVzZXMgdG8gcHVsbFxuICAgKiBwbHVnaW4gaW1hZ2VzLCB3aGVuIGl0IGRpZmZlcnMgZnJvbSB0aGUgaW4tY2x1c3RlciBgaG9zdGAvYHBvcnRgLiBUaGVcbiAgICogaW4tY2x1c3RlciBgcmVnaXN0cnk6NTAwMGAgQ2x1c3RlcklQIGlzbid0IHJlc29sdmFibGUgZnJvbSB0aGUgVlBDLCBzbyB0aGVcbiAgICogc3ludGhlc2l6ZWQgQ29kZUJ1aWxkIGltYWdlIFVSSSBtdXN0IHBvaW50IGF0IHRoZSBwdWJsaWMgZ2F0ZXdheSBpbnN0ZWFkLlxuICAgKiBFbnY6IGBJTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1RgIC8gYElNQUdFX1JFR0lTVFJZX1BVTExfUE9SVGAuIE9wdGlvbmFsO1xuICAgKiBjb25zdW1lcnMgZmFsbCBiYWNrIHRvIGBob3N0YC9gcG9ydGAgd2hlbiB1bnNldCAoc2luZ2xlLWhvc3QgL1xuICAgKiBpbi1jbHVzdGVyLW9ubHkgZGVwbG95cykuIGBsb2FkUmVnaXN0cnlDb25maWdgIGFsd2F5cyBwb3B1bGF0ZXMgdGhlbS5cbiAgICovXG4gIHJlYWRvbmx5IHB1bGxIb3N0Pzogc3RyaW5nO1xuICByZWFkb25seSBwdWxsUG9ydD86IG51bWJlcjtcbiAgLyoqIERvY2tlciBuZXR3b3JrIGZvciBidWlsZC9wdXNoIChlbXB0eSBzdHJpbmcgPSBkZWZhdWx0KS4gKi9cbiAgcmVhZG9ubHkgbmV0d29yazogc3RyaW5nO1xuICAvKipcbiAgICogQnVpbGRLaXQgdGFsa3MgdG8gdGhlIHJlZ2lzdHJ5IG92ZXIgcGxhaW4gSFRUUCB3aGVuIHRydWU7IEhUVFBTIHdpdGggdGhlXG4gICAqIHN5c3RlbSBDQSBidW5kbGUgb3RoZXJ3aXNlLiBFbnY6IGBJTUFHRV9SRUdJU1RSWV9IVFRQYCAoZGVmYXVsdHMgdHJ1ZSDigJRcbiAgICogdGhlIGluLWNsdXN0ZXIgcmVnaXN0cnkgaGFzIG5vIFRMUykuXG4gICAqL1xuICByZWFkb25seSBodHRwOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZGlzQ29uZmlnIHtcbiAgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luQnVpbGRDb25maWcge1xuICByZWFkb25seSBjb25jdXJyZW5jeTogbnVtYmVyO1xuICByZWFkb25seSBtYXhBdHRlbXB0czogbnVtYmVyO1xuICByZWFkb25seSBiYWNrb2ZmRGVsYXlNczogbnVtYmVyO1xuICByZWFkb25seSB3b3JrZXJUaW1lb3V0TXM6IG51bWJlcjtcbiAgcmVhZG9ubHkgdGVtcERpck1heEFnZU1zOiBudW1iZXI7XG4gIHJlYWRvbmx5IGRscU1heEF0dGVtcHRzOiBudW1iZXI7XG4gIHJlYWRvbmx5IGRscUJhY2tvZmZCYXNlTXM6IG51bWJlcjtcbiAgcmVhZG9ubHkgZGxxTWF4U2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkQ29uZmlnIHtcbiAgLyoqIFJvb3QgZGlyZWN0b3J5IGZvciBidWlsZCB0ZW1wIGZpbGVzLiAqL1xuICByZWFkb25seSB0ZW1wUm9vdDogc3RyaW5nO1xuICAvKiogQnVpbGQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuICovXG4gIHJlYWRvbmx5IHRpbWVvdXRNczogbnVtYmVyO1xuICAvKiogUHVzaCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgcmVhZG9ubHkgcHVzaFRpbWVvdXRNczogbnVtYmVyO1xuICAvKipcbiAgICogUGF0aCB0byB0aGUgYnVpbGRraXRkIHNvY2tldCB0aGUgcGx1Z2luJ3MgYGJ1aWxkY3RsYCBjb25uZWN0cyB0by4gSW4gazhzXG4gICAqIGFuZCBjb21wb3NlIHRoaXMgaXMgYSBzaGFyZWQgZW1wdHlEaXIvdG1wZnMgdm9sdW1lIG1vdW50ZWQgZnJvbSB0aGVcbiAgICogYnVpbGRraXRkIHNpZGVjYXIuXG4gICAqL1xuICByZWFkb25seSBidWlsZGtpdEFkZHI6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPYnNlcnZhYmlsaXR5Q29uZmlnIHtcbiAgcmVhZG9ubHkgbG9nTGV2ZWw6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9nRm9ybWF0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRyYWNpbmc6IHtcbiAgICByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGVuZHBvaW50OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxpYW5jZUNvbmZpZyB7XG4gIHJlYWRvbmx5IHNjYW5TY2hlZHVsZXJJbnRlcnZhbE1zOiBudW1iZXI7XG4gIC8qKiBXaGVuIGZhbHNlLCB0aGUgc2NoZWR1bGVyIHNraXBzIHNjYW5zL3NjaGVkdWxlcyBmb3IgdGhlIHN5c3RlbSBvcmcuIERlZmF1bHQ6IGZhbHNlLiAqL1xuICByZWFkb25seSBzeXN0ZW1PcmdTY2Fuc0VuYWJsZWQ6IGJvb2xlYW47XG4gIC8qKiBDcm9zcy1wb2QgbGVhZGVyLWxvY2sgVFRMIGZvciB0aGUgc2NhbiBzY2hlZHVsZXIgKG1zKS4gRGVmYXVsdDogMzAwMDAwLiAqL1xuICByZWFkb25seSBzY2FuTG9ja1R0bE1zOiBudW1iZXI7XG4gIC8qKiBIb3cgb2Z0ZW4gdGhlIGRpZ2VzdCBzY2hlZHVsZXIgY2hlY2tzIGZvciBkdWUgZGlnZXN0cyAobXMpLiBEZWZhdWx0OiAzNjAwMDAwLiAqL1xuICByZWFkb25seSBkaWdlc3RTY2hlZHVsZXJJbnRlcnZhbE1zOiBudW1iZXI7XG4gIC8qKiBDcm9zcy1wb2QgbGVhZGVyLWxvY2sgVFRMIGZvciB0aGUgZGlnZXN0IHNjaGVkdWxlciAobXMpLiBEZWZhdWx0OiAzMDAwMDAuICovXG4gIHJlYWRvbmx5IGRpZ2VzdExvY2tUdGxNczogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFXUyBpbmZyYXN0cnVjdHVyZSBjb25maWd1cmF0aW9uLlxuICpcbiAqIERlbGliZXJhdGVseSBleHByZXNzZWQgaW4gUExBSU4gREFUQSAobnVtYmVycywgc3RyaW5ncywgc3RyaW5nIHVuaW9ucykgcmF0aGVyXG4gKiB0aGFuIENESyB2YWx1ZSBvYmplY3RzIChgRHVyYXRpb25gLCBgUnVudGltZWAsIGBSZXRlbnRpb25EYXlzYCwgLi4uKS4gQ29uZmlnIGlzXG4gKiBsb2FkZWQgYnkgZXZlcnkgc2VydmljZSwgYnV0IG9ubHkgdGhlIENESyBlbnRyeSBwb2ludCAoYEBwaXBlbGluZS1idWlsZGVyL1xuICogcGlwZWxpbmUtY29yZS9jZGtgKSBidWlsZHMgc3RhY2tzICB0eXBpbmcgdGhpcyBibG9jayB3aXRoIENESyBjbGFzc2VzIHB1dFxuICogYGF3cy1jZGstbGliYCBvbiB0aGUgaW1wb3J0IGdyYXBoIG9mIGBDb25maWdgLCBhbmQgdGhlcmVmb3JlIG9mIGV2ZXJ5IEFQSVxuICogc2VydmljZSB0aGF0IHJlYWRzIHNvIG11Y2ggYXMgYSBwb3J0IG51bWJlci4gQ29udmVyc2lvbiB0byBDREsgb2JqZWN0cyBoYXBwZW5zXG4gKiBhdCB0aGUgY29uc3RydWN0IGJvdW5kYXJ5IGluIGBjb25maWcvYXdzLWNvbmZpZy1jZGsudHNgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFXU0NvbmZpZyB7XG4gIHJlYWRvbmx5IGxhbWJkYToge1xuICAgIC8qKiBMYW1iZGEgcnVudGltZSBpZGVudGlmaWVyLCBlLmcuIGAnbm9kZWpzMjQueCdgIChlbnY6IGBMQU1CREFfUlVOVElNRWApLiAqL1xuICAgIHJlYWRvbmx5IHJ1bnRpbWU6IHN0cmluZztcbiAgICAvKiogRnVuY3Rpb24gdGltZW91dCBpbiBzZWNvbmRzIChlbnY6IGBMQU1CREFfVElNRU9VVGApLiAqL1xuICAgIHJlYWRvbmx5IHRpbWVvdXRTZWNvbmRzOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgbWVtb3J5U2l6ZTogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGFyY2hpdGVjdHVyZTogJ2FybTY0JyB8ICd4ODZfNjQnO1xuICAgIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG4gIH07XG4gIHJlYWRvbmx5IGxvZ2dpbmc6IHtcbiAgICByZWFkb25seSBncm91cE5hbWU6IHN0cmluZztcbiAgICAvKiogQ2xvdWRXYXRjaCByZXRlbnRpb24gaW4gZGF5czsgYDBgIG1lYW5zIG5ldmVyIGV4cGlyZSAoZW52OiBgTE9HX1JFVEVOVElPTmApLiAqL1xuICAgIHJlYWRvbmx5IHJldGVudGlvbkRheXM6IG51bWJlcjtcbiAgICByZWFkb25seSByZW1vdmFsUG9saWN5OiAncmV0YWluJyB8ICdkZXN0cm95JztcbiAgfTtcbiAgcmVhZG9ubHkgY29kZUJ1aWxkOiB7XG4gICAgLyoqIENvZGVCdWlsZCBjb21wdXRlIHR5cGUgbmFtZSwgZS5nLiBgJ1NNQUxMJ2AgKGVudjogYENPREVCVUlMRF9DT01QVVRFX1RZUEVgKS4gKi9cbiAgICByZWFkb25seSBjb21wdXRlVHlwZTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEltYWdlIHVzZWQgZm9yIENvZGVCdWlsZCBzdGVwcyB0aGF0IGRvbid0IGhhdmUgYSBwbHVnaW4tYmFrZWQgaW1hZ2VcbiAgICAgKiAoY29sZC1zdGFydCBzeW50aCBib290c3RyYXAsIFNoZWxsU3RlcHMgd2l0aCBubyByZWdpc3RyeSwgYW5kXG4gICAgICogYG1ldGFkYXRhX29ubHlgIHBsdWdpbnMpLiBlbnY6IGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRWAuIERlZmF1bHRcbiAgICAgKiBgcGlwZWxpbmUtYm9vdHN0cmFwOjEuMGAg4oCUIHRoZSBsb2NhbCB0YWcgYnVpbHQgYnlcbiAgICAgKiBgZGVwbG95L2NvZGVidWlsZC9ib290c3RyYXAvRG9ja2VyZmlsZWAsIHdpdGggYHBpcGVsaW5lLW1hbmFnZXJgXG4gICAgICogYmFrZWQgaW4uXG4gICAgICpcbiAgICAgKiBDb250cmFjdDogdGhlIGltYWdlIE1VU1QgaGF2ZSBgcGlwZWxpbmUtbWFuYWdlcmAgb24gUEFUSC4gVGhlXG4gICAgICogYm9vdHN0cmFwIHN5bnRoIHBhdGggbm8gbG9uZ2VyIHNlbGYtaGVhbHMgdmlhIGBucG0gaW5zdGFsbCAtZ2A7XG4gICAgICogcG9pbnRpbmcgdGhpcyBhdCBhbiBpbWFnZSB3aXRob3V0IHRoZSB0b29sIGdldHMgZXhpdCAxMjcgb24gdGhlXG4gICAgICogZmlyc3QgY29sZC1zdGFydCBidWlsZC5cbiAgICAgKlxuICAgICAqIFJlc29sdXRpb246XG4gICAgICogLSBCYXJlIHRhZyAobm8gYC9gKSDihpIgYXV0by1wcmVmaXhlZCB0b1xuICAgICAqICAgYDxyZWdpc3RyeS1ob3N0Pjo8cG9ydD4vbGlicmFyeS88dGFnPmAgdXNpbmcgdGhlIHJlZ2lzdHJ5IGNvbmZpZyxcbiAgICAgKiAgIHdpdGggdGhlIHBlci1vcmcgcGxhdGZvcm0gU2VjcmV0IGFzIEJhc2ljIGF1dGggKHNhbWUgZmxvdyBhc1xuICAgICAqICAgcGx1Z2luIGltYWdlcykuXG4gICAgICogLSBGdWxseS1xdWFsaWZpZWQgcmVnaXN0cnkgVVJJIChjb250YWlucyBgL2ApIOKGkiB1c2VkIGFzLWlzLCBub1xuICAgICAqICAgYXV0aCB3aXJlZCAob3BlcmF0b3Igb3ducyBtYWtpbmcgaXQgcHVsbGFibGUpLlxuICAgICAqIC0gV2hlbiB0aGUgcmVnaXN0cnkgaXNuJ3QgY29uZmlndXJlZCBvciBwZXItb3JnIGF1dGggaXNuJ3RcbiAgICAgKiAgIGF2YWlsYWJsZSBhdCB0aGUgY2FsbCBzaXRlLCBmYWxscyBiYWNrIHRvXG4gICAgICogICBgYXdzL2NvZGVidWlsZC9zdGFuZGFyZDo4LjBgIHdpdGggYSB3YXJuaW5nIOKAlCBjb2xkLXN0YXJ0IHN5bnRoXG4gICAgICogICB3aWxsIHRoZW4gZmFpbCBvbiBgcGlwZWxpbmUtbWFuYWdlcjogbm90IGZvdW5kYCwgc3VyZmFjaW5nIHRoZVxuICAgICAqICAgbWlzY29uZmlndXJhdGlvbiBsb3VkbHkgaW5zdGVhZCBvZiBzaWxlbnRseSBzd2FwcGluZyBpbWFnZXMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZGVmYXVsdEltYWdlOiBzdHJpbmc7XG4gIH07XG59XG5cbi8qKiBFeHByZXNzIHJhdGUgbGltaXRpbmcgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF0ZUxpbWl0Q29uZmlnIHtcbiAgLyoqIE1heGltdW0gcmVxdWVzdHMgcGVyIHdpbmRvdyAoZW52OiBgTElNSVRFUl9NQVhgKS4gKi9cbiAgcmVhZG9ubHkgbWF4OiBudW1iZXI7XG4gIC8qKiBSYXRlIGxpbWl0IHdpbmRvdyBpbiBtaWxsaXNlY29uZHMgKGVudjogYExJTUlURVJfV0lORE9XTVNgKS4gKi9cbiAgcmVhZG9ubHkgd2luZG93TXM6IG51bWJlcjtcbiAgLyoqIEluY2x1ZGUgbGVnYWN5IGBYLVJhdGVMaW1pdC0qYCBoZWFkZXJzLiAqL1xuICByZWFkb25seSBsZWdhY3lIZWFkZXJzOiBib29sZWFuO1xuICAvKiogSW5jbHVkZSBzdGFuZGFyZCBgUmF0ZUxpbWl0LSpgIGhlYWRlcnMgKFJGQyA2NTg1KS4gKi9cbiAgcmVhZG9ubHkgc3RhbmRhcmRIZWFkZXJzOiBib29sZWFuO1xufVxuXG4vKiogUHJpY2UgY29uZmlndXJhdGlvbiBmb3IgYSBzaW5nbGUgYmlsbGluZyBwbGFuIChpbiBjZW50cykuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbGxpbmdQbGFuUHJpY2VzIHtcbiAgcmVhZG9ubHkgbW9udGhseTogbnVtYmVyO1xuICByZWFkb25seSBhbm51YWw6IG51bWJlcjtcbn1cblxuLyoqIEZ1bGwgYmlsbGluZyBwbGFuIGRlZmluaXRpb24gdXNlZCBmb3Igc2VlZGluZyBhbmQgcnVudGltZSBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaWxsaW5nUGxhbkNvbmZpZyB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgdGllcjogUXVvdGFUaWVyO1xuICByZWFkb25seSBwcmljZXM6IEJpbGxpbmdQbGFuUHJpY2VzO1xuICByZWFkb25seSBmZWF0dXJlczogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IGlzQWN0aXZlOiBib29sZWFuO1xuICByZWFkb25seSBpc0RlZmF1bHQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNvcnRPcmRlcjogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgcHVyY2hhc2FibGUgYWRkLW9uIGJ1bmRsZTogYSBxdWFudGl0eS1zdGFja2FibGUgcGFjayB0aGF0IEFERFMgdG8gdGhlXG4gKiBhY2NvdW50J3MgYmFzZSAodGllcikgbGltaXRzIGFuZCBhZGRzIGEgcmVjdXJyaW5nIGxpbmUgaXRlbS4gU2VlXG4gKiBkb2NzL2JpbGxpbmctYnVuZGxlcy5tZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVDb25maWcge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBQZXItdW5pdCBkZWx0YXMgb24gYFF1b3RhVGllckxpbWl0c2AgZmllbGRzLCBlLmcuIGB7IHNlYXRzOiA1IH1gLiBLZXlzIGFyZVxuICAgKiAgY29uc3RyYWluZWQgdG8gcmVhbCBxdW90YSBmaWVsZHMgc28gYSB0eXBvIGlzIGEgY29tcGlsZSBlcnJvciAod2FzXG4gICAqICBgUmVjb3JkPHN0cmluZywgbnVtYmVyPmAsIHdoZXJlIGEgbWlzc3BlbGxlZCBrZXkgd2FzIHNpbGVudGx5IHVuZW5mb3JjZWFibGUpLiAqL1xuICByZWFkb25seSBncmFudHM6IFJlYWRvbmx5PFBhcnRpYWw8UmVjb3JkPGtleW9mIFF1b3RhVGllckxpbWl0cywgbnVtYmVyPj4+O1xuICAvKiogRmVhdHVyZSBmbGFncyBncmFudGVkIGJ5IGEgZmVhdHVyZSBidW5kbGUgKGUuZy4gYGF1ZGl0X2xvZ2ApLiAqL1xuICByZWFkb25seSBmZWF0dXJlcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogUGVyLXVuaXQgcHJpY2UgKGNlbnRzKS4gU3RyaXBlIG11bHRpcGxpZXMgYnkgcXVhbnRpdHkuICovXG4gIHJlYWRvbmx5IHByaWNlczogQmlsbGluZ1BsYW5QcmljZXM7XG4gIC8qKiBUcnVlIGZvciBzdGFja2FibGUgcmVzb3VyY2UgcGFja3M7IGZhbHNlIGZvciBhIGJvb2xlYW4gZmVhdHVyZSBidW5kbGUuICovXG4gIHJlYWRvbmx5IHN0YWNrYWJsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE1heGltdW0gcHVyY2hhc2FibGUgcXVhbnRpdHkgZm9yIGEgc3RhY2thYmxlIHBhY2suIEVuZm9yY2VkIGJ5IHRoZSBhZGRvblxuICAgKiBwdXJjaGFzZS9wcmV2aWV3IHJvdXRlIChgcXVhbnRpdHkg4omkIG1heFF1YW50aXR5YCwgcmVqZWN0IG92ZXItY2FwKS4gVXNlZCB0b1xuICAgKiBrZWVwIHJldGVudGlvbiBwYWNrcyB1bmRlciB0aGUgNzMwLWRheSByZXRlbnRpb24gY2VpbGluZyAoZS5nLiB0aGUgU3RhbmRhcmRcbiAgICogUmV0ZW50aW9uIFBhY2sgY2FwcyBhdCA3IHNvIDMwICsgN8OXOTAgPSA2NjAg4omkIDczMCkuIEFic2VudCDih5IgdW5ib3VuZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4UXVhbnRpdHk/OiBudW1iZXI7XG4gIC8qKiBCYXNlIHRpZXJzIHRoaXMgYnVuZGxlIGlzIG9mZmVyZWQgdG8uICovXG4gIHJlYWRvbmx5IGF2YWlsYWJsZUZvclRpZXJzOiByZWFkb25seSBRdW90YVRpZXJbXTtcbiAgLyoqXG4gICAqIFByZXJlcXVpc2l0ZSBidW5kbGUgaWRzIHRoYXQgbXVzdCBiZSBoZWxkIChvciBwdXJjaGFzZWQgaW4gdGhlIHNhbWUgYWN0aW9uKVxuICAgKiBiZWZvcmUgdGhpcyBidW5kbGUgY2FuIGJlIGFkZGVkLiBFbmZvcmNlZCBieSB0aGUgYWRkb24gcHVyY2hhc2UvcHJldmlldyByb3V0ZVxuICAgKiAocmVqZWN0IHdpdGggNDAwIHdoZW4gdW5tZXQpOyBhIGNvbWJvIHRoYXQgaW5jbHVkZXMgdGhlIHByZXJlcXVpc2l0ZSBzYXRpc2ZpZXNcbiAgICogaXQuIFVzZWQgYnkgYGNvbXBsaWFuY2VfYWR2YW5jZWRgIChgcmVxdWlyZXM6IFsnY29tcGxpYW5jZV9zdGFuZGFyZCddYCkuXG4gICAqIEFic2VudCDih5Igbm8gcHJlcmVxdWlzaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZXM/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgaXNBY3RpdmU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNvcnRPcmRlcjogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgY29tYm8gZGlzY291bnQ6IHdoZW4gYW4gYWNjb3VudCBob2xkcyBFVkVSWSBidW5kbGUgaW4gYGJ1bmRsZUlkc2AsIHRoZSBwYWlyXG4gKiBpcyBiaWxsZWQgYXQgYHByaWNlc2AgKHRoZSBjb21iaW5lZCBwcmljZSkgaW5zdGVhZCBvZiB0aGUgc3VtIG9mIHRoZSBtZW1iZXJzJ1xuICogaW5kaXZpZHVhbCBwcmljZXMuIFJlYWxpemVkIGFzIGEgcmVjdXJyaW5nIHVzYWdlIGNyZWRpdCBmb3IgdGhlIGRpZmZlcmVuY2Ug4oCUXG4gKiBuZXZlciBhIHByb3ZpZGVyIGNvdXBvbiDigJQgY29uc2lzdGVudCB3aXRoIHRoZSB1c2FnZS1jcmVkaXQgZGlzY291bnQgbW9kZWwuIFNlZVxuICogZG9jcy9iaWxsaW5nLWJ1bmRsZXMubWQgwqdDb21ibyBwcmljaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbWJvRGlzY291bnRDb25maWcge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKiBUaGUgbWVtYmVyIGJ1bmRsZSBpZHMgdGhhdCBtdXN0IEFMTCBiZSBwcmVzZW50IGZvciB0aGUgY29tYm8gdG8gYXBwbHkuICovXG4gIHJlYWRvbmx5IGJ1bmRsZUlkczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBQZXItbWVtYmVyIG1pbmltdW0gcXVhbnRpdHkgKGJ1bmRsZUlkIOKGkiBjb3VudDsgYWJzZW50IOKHkiAxKS4gTGV0cyBhIHN0YWNrYWJsZVxuICAgKiAgY2FwYWNpdHkgcGFjayBhbmNob3IgYSBjb21ibyDigJQgZS5nLiBgeyBzZWF0X3BhY2s6IDEgfWAgPSBcIuKJpSAxIFNlYXQgUGFja1wiLiBUaGVcbiAgICogIGNyZWRpdCBiYXNpcyB1c2VzIHRoaXMgbWluaW11bSwgc28gZXh0cmEgcGFja3MgbmV2ZXIgaW5mbGF0ZSB0aGUgZGlzY291bnQuICovXG4gIHJlYWRvbmx5IG1pblF1YW50aXRpZXM/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PjtcbiAgLyoqIFRoZSBjb21iaW5lZCBwcmljZSBmb3IgdGhlIG1pbmltdW0gc2V0IChjZW50cykuIFRoZSBjcmVkaXQgaXNcbiAgICogIGDOoyBtZW1iZXIgdW5pdCBwcmljZSDDlyBtaW5RdHkg4oiSIHByaWNlc2AsIGNsYW1wZWQg4omlIDAuICovXG4gIHJlYWRvbmx5IHByaWNlczogQmlsbGluZ1BsYW5QcmljZXM7XG4gIC8qKiBEZXRlcm1pbmlzdGljIHRpZS1icmVhayBhbW9uZyBlcXVhbC10b3RhbCBvcHRpbWFsIHBhY2tpbmdzIHdoZW4gY29tYm9zIG92ZXJsYXBcbiAgICogIChsb3dlciB3aW5zKS4gKi9cbiAgcmVhZG9ubHkgc29ydE9yZGVyOiBudW1iZXI7XG4gIHJlYWRvbmx5IGlzQWN0aXZlOiBib29sZWFuO1xufVxuXG4vKiogQmlsbGluZyBwbGFucyArIGFkZC1vbiBidW5kbGUgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmlsbGluZ0NvbmZpZyB7XG4gIHJlYWRvbmx5IHBsYW5zOiByZWFkb25seSBCaWxsaW5nUGxhbkNvbmZpZ1tdO1xuICByZWFkb25seSBidW5kbGVzOiByZWFkb25seSBCdW5kbGVDb25maWdbXTtcbiAgcmVhZG9ubHkgY29tYm9EaXNjb3VudHM6IHJlYWRvbmx5IENvbWJvRGlzY291bnRDb25maWdbXTtcbn1cbiJdfQ==
|
|
@@ -16,10 +16,13 @@ export interface BuilderProps {
|
|
|
16
16
|
/** Organization identifier (will be sanitized to lowercase alphanumeric with underscores) */
|
|
17
17
|
readonly organization: string;
|
|
18
18
|
/**
|
|
19
|
-
* Optional deploy environment (e.g. `production`, `staging`)
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
19
|
+
* Optional deploy environment (e.g. `production`, `staging`) for the
|
|
20
|
+
* single-environment case. When set (and no stage declares its own
|
|
21
|
+
* `environment`), pipeline-core derives the `pb.deploys` tag from it, marking
|
|
22
|
+
* the sole stage — or the LAST stage of a multi-stage pipeline (with a synth
|
|
23
|
+
* warning), or a literal `Deploy` stage when there are no stages to name — as
|
|
24
|
+
* the deploy for DORA metrics. For multi-environment pipelines, declare
|
|
25
|
+
* `environment` per stage instead (see `StageOptions.environment`).
|
|
23
26
|
*/
|
|
24
27
|
readonly environment?: string;
|
|
25
28
|
/** Tenant identifier for resolving per-org secrets from AWS Secrets Manager */
|
|
@@ -39,6 +39,101 @@ function parseNotificationEvents(value) {
|
|
|
39
39
|
return value.split(',').map(s => s.trim());
|
|
40
40
|
return ['FAILED', 'SUCCEEDED'];
|
|
41
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Sanitize a single `pb.deploys` token (stage name or environment) to
|
|
44
|
+
* CodePipeline-tag-safe characters. `:` and `+` are the pair/list delimiters, so
|
|
45
|
+
* they (and any other disallowed char) are stripped to `-` inside a token to
|
|
46
|
+
* keep the value unambiguously parseable and JSON-free.
|
|
47
|
+
*/
|
|
48
|
+
function tagSafeToken(value) {
|
|
49
|
+
return value.replace(/[^A-Za-z0-9._/@=-]/g, '-');
|
|
50
|
+
}
|
|
51
|
+
/** AWS tag-value hard limit; `pb.deploys` must never exceed this. */
|
|
52
|
+
const MAX_TAG_VALUE_LENGTH = 256;
|
|
53
|
+
/**
|
|
54
|
+
* Build the `pb.deploys` tag value: `<stage>:<env>` pairs joined by `+`.
|
|
55
|
+
*
|
|
56
|
+
* A stage is a deploy iff it declares an `environment`. Precedence:
|
|
57
|
+
* - Multi-env: any stage with a per-stage `environment` — list each such stage.
|
|
58
|
+
* - Single-env: no per-stage environment but a pipeline-level `environment` —
|
|
59
|
+
* attribute it to the sole stage (`<onlyStage>:<env>`), the LAST stage of a
|
|
60
|
+
* multi-stage pipeline (deploys are conventionally the final stage — emitted
|
|
61
|
+
* with a synth warning recommending explicit per-stage `environment`), or a
|
|
62
|
+
* literal `Deploy:<env>` when there are no stages to name.
|
|
63
|
+
*
|
|
64
|
+
* The assembled value is capped at AWS's 256-char tag-value limit (D6): the
|
|
65
|
+
* headline/production pair is kept first and trailing overflow pairs are dropped
|
|
66
|
+
* with a synth warning naming them. Never returns a value longer than 256 chars.
|
|
67
|
+
*
|
|
68
|
+
* Returns undefined when nothing declares an environment (no deploy signal).
|
|
69
|
+
*/
|
|
70
|
+
function buildDeploysTag(props) {
|
|
71
|
+
const stages = props.stages ?? [];
|
|
72
|
+
const stagesWithEnv = stages.filter(s => typeof s.environment === 'string' && s.environment.length > 0);
|
|
73
|
+
let pairs;
|
|
74
|
+
if (stagesWithEnv.length > 0) {
|
|
75
|
+
pairs = stagesWithEnv.map(s => ({
|
|
76
|
+
str: `${tagSafeToken(s.stageName)}:${tagSafeToken(s.environment)}`,
|
|
77
|
+
env: s.environment,
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
else if (props.environment) {
|
|
81
|
+
let stageName;
|
|
82
|
+
if (stages.length === 1) {
|
|
83
|
+
stageName = stages[0].stageName;
|
|
84
|
+
}
|
|
85
|
+
else if (stages.length > 1) {
|
|
86
|
+
// Pipeline-level environment on a multi-stage pipeline: attribute it to the
|
|
87
|
+
// LAST stage (deploys are conventionally final) rather than an unmatched
|
|
88
|
+
// literal `Deploy`. Warn so authors move to explicit per-stage `environment`.
|
|
89
|
+
stageName = stages[stages.length - 1].stageName;
|
|
90
|
+
createLogger('pipeline-builder').warn(`Pipeline-level environment "${props.environment}" attributed to the last stage ` +
|
|
91
|
+
`"${stageName}" of a ${stages.length}-stage pipeline. Declare a per-stage ` +
|
|
92
|
+
'`environment` on the actual deploy stage(s) for precise DORA attribution.');
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
stageName = 'Deploy';
|
|
96
|
+
}
|
|
97
|
+
pairs = [{ str: `${tagSafeToken(stageName)}:${tagSafeToken(props.environment)}`, env: props.environment }];
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
return capDeploysValue(pairs);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Join `pb.deploys` pairs with `+`, capped at {@link MAX_TAG_VALUE_LENGTH}. When
|
|
106
|
+
* the full value would exceed the cap, the headline/production pair is placed
|
|
107
|
+
* first and only the leading pairs that fit are kept; the trailing overflow pairs
|
|
108
|
+
* are dropped and named in a synth warning. Never emits more than 256 chars.
|
|
109
|
+
*/
|
|
110
|
+
function capDeploysValue(pairs) {
|
|
111
|
+
const full = pairs.map(p => p.str).join('+');
|
|
112
|
+
if (full.length <= MAX_TAG_VALUE_LENGTH)
|
|
113
|
+
return full;
|
|
114
|
+
// Prioritize the headline pair — the production deploy if present, else the
|
|
115
|
+
// first pair — so a cap never drops the most operationally-significant deploy.
|
|
116
|
+
const headlineIdx = pairs.findIndex(p => p.env.toLowerCase() === 'production');
|
|
117
|
+
const ordered = headlineIdx > 0
|
|
118
|
+
? [pairs[headlineIdx], ...pairs.filter((_, i) => i !== headlineIdx)]
|
|
119
|
+
: pairs;
|
|
120
|
+
const kept = [];
|
|
121
|
+
const dropped = [];
|
|
122
|
+
for (const p of ordered) {
|
|
123
|
+
const candidate = kept.length === 0 ? p.str : `${kept.join('+')}+${p.str}`;
|
|
124
|
+
if (candidate.length <= MAX_TAG_VALUE_LENGTH) {
|
|
125
|
+
kept.push(p.str);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
dropped.push(p.str);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
createLogger('pipeline-builder').warn(`pb.deploys tag value exceeded the ${MAX_TAG_VALUE_LENGTH}-char AWS tag-value limit; ` +
|
|
132
|
+
`dropped ${dropped.length} deploy pair(s): ${dropped.join(', ')}. ` +
|
|
133
|
+
'These environments will not produce DORA deploy signals — reduce stage/environment ' +
|
|
134
|
+
'name lengths or split into separate pipelines.');
|
|
135
|
+
return kept.join('+');
|
|
136
|
+
}
|
|
42
137
|
/**
|
|
43
138
|
* CDK construct that creates and configures a CodePipeline for continuous deployment.
|
|
44
139
|
*
|
|
@@ -212,14 +307,16 @@ export class PipelineBuilder extends Construct {
|
|
|
212
307
|
// tag to attribute CodePipeline state-change events to the pipeline without
|
|
213
308
|
// ever handling the ARN/account. See packages/pipeline-events.
|
|
214
309
|
if (props.pipelineId) {
|
|
215
|
-
Tags.of(this.pipeline).add('
|
|
310
|
+
Tags.of(this.pipeline).add('pb.pipeline-id', props.pipelineId);
|
|
216
311
|
}
|
|
217
|
-
//
|
|
218
|
-
//
|
|
219
|
-
//
|
|
220
|
-
//
|
|
221
|
-
|
|
222
|
-
|
|
312
|
+
// Deploy-environment attribution for DORA metrics. `pb.deploys` lists every
|
|
313
|
+
// deploy stage as `<stageName>:<environment>` pairs joined by `+`, read by
|
|
314
|
+
// the events Lambda from the same ListTags call to mark which stages are
|
|
315
|
+
// deploys and to which environment. Absent when no environment is declared
|
|
316
|
+
// — such pipelines produce no DORA deploy signal until they re-synth.
|
|
317
|
+
const deploysTag = buildDeploysTag(props);
|
|
318
|
+
if (deploysTag) {
|
|
319
|
+
Tags.of(this.pipeline).add('pb.deploys', deploysTag);
|
|
223
320
|
}
|
|
224
321
|
if (props.tags) {
|
|
225
322
|
for (const [key, value] of Object.entries(props.tags)) {
|
|
@@ -376,4 +473,4 @@ export class PipelineBuilder extends Construct {
|
|
|
376
473
|
};
|
|
377
474
|
}
|
|
378
475
|
}
|
|
379
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9waXBlbGluZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEtBQUssVUFBVSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEcsT0FBTyxLQUFLLE1BQU0sTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssT0FBTyxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUM7QUFDM0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6QyxPQUFPLEtBQUssR0FBRyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQXlCLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxF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Q0FBQyxrQkFBa0IsSUFBSSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztZQUNsRixzRUFBc0U7WUFDdEUsdURBQXVEO1lBQ3ZELEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixLQUFLLEdBQUcsSUFBSTtnQkFDdEQsNEJBQTRCLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2FBQzdDLENBQUM7U0FDSCxDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUc7WUFDckIsR0FBRyxDQUFDLFlBQVksRUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO1lBQ3ZDLEdBQUcsQ0FBQyx3QkFBd0IsSUFBSSxFQUFFLENBQUM7U0FDcEMsQ0FBQztRQUVGLE9BQU87WUFDTCxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsZUFBZSxFQUFFLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM3RixHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQztZQUNwRCxxRUFBcUU7WUFDckUsd0RBQXdEO1lBQ3hELHVFQUF1RTtZQUN2RSxtRUFBbUU7WUFDbkUsK0RBQStEO1lBQy9ELGlFQUFpRTtZQUNqRSxnQkFBZ0IsRUFBRTtnQkFDaEIsVUFBVSxFQUFFLHdCQUF3QixDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7Z0JBQ2pELG9CQUFvQixFQUFFLGVBQWU7YUFDdEM7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSwgVGFncyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNsb3Vkd2F0Y2ggZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0IHsgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMsIFBpcGVsaW5lVHlwZSwgVmFyaWFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBzbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucyc7XG5pbXBvcnQgeyBDb2RlUGlwZWxpbmUsIHR5cGUgQ29kZUJ1aWxkT3B0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFBpcGVsaW5lQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGlwZWxpbmUtY29uZmlndXJhdGlvbi5qcyc7XG5pbXBvcnQgeyBQbHVnaW5Mb29rdXAgfSBmcm9tICcuL3BsdWdpbi1sb29rdXAuanMnO1xuaW1wb3J0IHsgU291cmNlQnVpbGRlciB9IGZyb20gJy4vc291cmNlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgU3RhZ2VCdWlsZGVyIH0gZnJvbSAnLi9zdGFnZS1idWlsZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VPcHRpb25zLCBTeW50aE9wdGlvbnMgfSBmcm9tICcuL3N0ZXAtdHlwZXMuanMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcuanMnO1xuaW1wb3J0IHsgbGFtYmRhUnVudGltZSwgbGFtYmRhVGltZW91dCB9IGZyb20gJy4uL2NvbmZpZy9hd3MtY29uZmlnLWNkay5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlZ2lzdHJ5Q29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL2NvbmZpZy10eXBlcy5qcyc7XG5pbXBvcnQgeyBBcnRpZmFjdE1hbmFnZXIgfSBmcm9tICcuLi9jb3JlL2FydGlmYWN0LW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgVW5pcXVlSWQgfSBmcm9tICcuLi9jb3JlL2lkLWdlbmVyYXRvci5qcyc7XG5pbXBvcnQge1xuICBhc0ludCxcbiAgbWV0YWRhdGFGb3JDb2RlUGlwZWxpbmUsXG4gIG5ldHdvcmtDb25maWdGcm9tTWV0YWRhdGEsXG4gIHBhcnNlUGlwZWxpbmVWYXJpYWJsZXMsXG4gIHJvbGVDb25maWdGcm9tTWV0YWRhdGEsXG4gIHNlY3VyaXR5R3JvdXBDb25maWdGcm9tTWV0YWRhdGEsXG59IGZyb20gJy4uL2NvcmUvbWV0YWRhdGEtYnVpbGRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IENvZGVCdWlsZERlZmF1bHRzIH0gZnJvbSAnLi4vY29yZS9uZXR3b3JrLXR5cGVzLmpzJztcbmltcG9ydCB7IHJlc29sdmVOZXR3b3JrLCBuZXR3b3JrQ29uZmlnRnJvbUVudiB9IGZyb20gJy4uL2NvcmUvbmV0d29yay5qcyc7XG5pbXBvcnQgeyBjcmVhdGVDb2RlQnVpbGRTdGVwLCBnZXRDb21wdXRlVHlwZSwgcmVzb2x2ZURlZmF1bHRCdWlsZEltYWdlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS1oZWxwZXJzLmpzJztcbmltcG9ydCB7IE1ldGFkYXRhS2V5cywgVHJpZ2dlclR5cGUgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLXR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgTWV0YURhdGFUeXBlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS10eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJvbGVDb25maWcgfSBmcm9tICcuLi9jb3JlL3JvbGUtdHlwZXMuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVJvbGUgfSBmcm9tICcuLi9jb3JlL3JvbGUuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVNlY3VyaXR5R3JvdXAgfSBmcm9tICcuLi9jb3JlL3NlY3VyaXR5LWdyb3VwLmpzJztcblxuY29uc3QgUElQRUxJTkVfRVZFTlRfTUFQOiBSZWNvcmQ8c3RyaW5nLCBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cz4gPSB7XG4gIEZBSUxFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX0ZBSUxFRCxcbiAgU1VDQ0VFREVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fU1VDQ0VFREVELFxuICBTVEFSVEVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fU1RBUlRFRCxcbiAgQ0FOQ0VMRUQ6IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9DQU5DRUxFRCxcbiAgU1VQRVJTRURFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX1NVUEVSU0VERUQsXG59O1xuXG5mdW5jdGlvbiBwYXJzZU5vdGlmaWNhdGlvbkV2ZW50cyh2YWx1ZTogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSk7XG4gIHJldHVybiBbJ0ZBSUxFRCcsICdTVUNDRUVERUQnXTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBQaXBlbGluZUJ1aWxkZXIgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclByb3BzIHtcbiAgLyoqIFByb2plY3QgaWRlbnRpZmllciAod2lsbCBiZSBzYW5pdGl6ZWQgdG8gbG93ZXJjYXNlIGFscGhhbnVtZXJpYyB3aXRoIHVuZGVyc2NvcmVzKSAqL1xuICByZWFkb25seSBwcm9qZWN0OiBzdHJpbmc7XG5cbiAgLyoqIE9yZ2FuaXphdGlvbiBpZGVudGlmaWVyICh3aWxsIGJlIHNhbml0aXplZCB0byBsb3dlcmNhc2UgYWxwaGFudW1lcmljIHdpdGggdW5kZXJzY29yZXMpICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXBsb3kgZW52aXJvbm1lbnQgKGUuZy4gYHByb2R1Y3Rpb25gLCBgc3RhZ2luZ2ApLiBXaGVuIHNldCwgaXQgaXNcbiAgICogYXBwbGllZCBhcyBhbiBgRW52aXJvbm1lbnRgIHRhZyBvbiB0aGUgcGlwZWxpbmUgc28gdGhlIGV2ZW50cyBMYW1iZGEgY2FuXG4gICAqIGF0dHJpYnV0ZSBDb2RlUGlwZWxpbmUgc3RhdGUtY2hhbmdlIGV2ZW50cyB0byBhIHJlYWwgZGVwbG95bWVudCBmb3IgRE9SQVxuICAgKiBtZXRyaWNzLiBQdXJlbHkgYWRkaXRpdmUg4oCUIG9taXQgaXQgYW5kIGJlaGF2aW9yIGlzIHVuY2hhbmdlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50Pzogc3RyaW5nO1xuXG4gIC8qKiBUZW5hbnQgaWRlbnRpZmllciBmb3IgcmVzb2x2aW5nIHBlci1vcmcgc2VjcmV0cyBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKi9cbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG5cbiAgLyoqIFBpcGVsaW5lIGRhdGFiYXNlIHJlY29yZCBJRCDigJQgaW5qZWN0ZWQgYXMgUElQRUxJTkVfSUQgZW52IHZhciBmb3IgYXV0b25vbW91cyBzeW50aCAqL1xuICByZWFkb25seSBwaXBlbGluZUlkPzogc3RyaW5nO1xuXG4gIC8qKiBPcHRpb25hbCBjdXN0b20gcGlwZWxpbmUgbmFtZS4gRGVmYXVsdHMgdG86IHtvcmdhbml6YXRpb259LXtwcm9qZWN0fS1waXBlbGluZSAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIEdsb2JhbCBtZXRhZGF0YSBpbmhlcml0ZWQgYnkgYWxsIHBpcGVsaW5lIHN0ZXBzICovXG4gIHJlYWRvbmx5IGdsb2JhbD86IE1ldGFEYXRhVHlwZTtcblxuICAvKipcbiAgICogUGlwZWxpbmUtbGV2ZWwgdGVtcGxhdGUgdmFyaWFibGVzLCBleHBvc2VkIHRvIGB7eyBwaXBlbGluZS52YXJzLiogfX1gIGluXG4gICAqIHBpcGVsaW5lIGNvbmZpZ3MgYW5kIHBsdWdpbiBzcGVjcyAoc2VlIGBQbHVnaW5TcGVjLnJlcXVpcmVkVmFyc2ApLiBEZWNsYXJlZFxuICAgKiBoZXJlIHNvIHRoZSBgcGlwZWxpbmUudmFyc2AgdGVtcGxhdGUgc2NvcGUgaXMgdHlwZS1jaGVja2VkIGVuZC10by1lbmQuXG4gICAqL1xuICByZWFkb25seSB2YXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lLWxldmVsIENvZGVCdWlsZCBkZWZhdWx0cyBhcHBsaWVkIHRvIGFsbCBDb2RlQnVpbGQgYWN0aW9uc1xuICAgKiAoc3ludGgsIHNlbGYtbXV0YXRpb24sIGFzc2V0IHB1Ymxpc2hpbmcpIHZpYSBgY29kZUJ1aWxkRGVmYXVsdHNgLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdHM/OiBDb2RlQnVpbGREZWZhdWx0cztcblxuICAvKipcbiAgICogT3B0aW9uYWwgSUFNIHJvbGUgZm9yIHRoZSBDb2RlUGlwZWxpbmUuXG4gICAqIFdoZW4gcHJvdmlkZWQsIHJlc29sdmVzIHRvIGEgQ0RLIElSb2xlIGFuZCBpcyBwYXNzZWQgdG8gdGhlIENvZGVQaXBlbGluZSBjb25zdHJ1Y3QuXG4gICAqIFdoZW4gb21pdHRlZCwgQ0RLIGF1dG8tY3JlYXRlcyBhIHJvbGUgd2l0aCB0aGUgY29ycmVjdCBjb2RlcGlwZWxpbmUuYW1hem9uYXdzLmNvbSBwcmluY2lwYWwuXG4gICAqL1xuICByZWFkb25seSByb2xlPzogUm9sZUNvbmZpZztcblxuICAvKiogU3ludGhlc2lzIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIHNvdXJjZSBhbmQgcGx1Z2luIGRldGFpbHMgKi9cbiAgcmVhZG9ubHkgc3ludGg6IFN5bnRoT3B0aW9ucztcblxuICAvKipcbiAgICogT3B0aW9uYWwgcGlwZWxpbmUgc3RhZ2VzLCBlYWNoIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgQ29kZUJ1aWxkIHN0ZXBzLlxuICAgKiBTdGFnZXMgYXJlIGFkZGVkIGFzIHdhdmVzIHRvIHRoZSBDb2RlUGlwZWxpbmUgYWZ0ZXIgdGhlIHN5bnRoIHN0ZXAuXG4gICAqL1xuICByZWFkb25seSBzdGFnZXM/OiBTdGFnZU9wdGlvbnNbXTtcblxuICAvKiogT3B0aW9uYWwgY3Jvbi9yYXRlIGV4cHJlc3Npb24gZm9yIHNjaGVkdWxlZCBwaXBlbGluZSBleGVjdXRpb24uICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlPzogc3RyaW5nO1xuXG4gIC8qKiBDdXN0b20gdGFncyBhcHBsaWVkIHRvIGFsbCBwaXBlbGluZSByZXNvdXJjZXMuICovXG4gIHJlYWRvbmx5IHRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBQbHVnaW5zIHByZS1yZXNvbHZlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aGAgZnJvbSB0aGUgcGxhdGZvcm0gQVBJLFxuICAgKiBrZXllZCBieSBgYWxpYXMgfHwgbmFtZWAuIFdoZW4gcHJlc2VudCwgYFBsdWdpbkxvb2t1cC5wbHVnaW4oKWAgcmV0dXJuc1xuICAgKiB0aGUgbWF0Y2hpbmcgZW50cnkgZGlyZWN0bHkgYW5kIHNraXBzIHRoZSBjdXN0b20gcmVzb3VyY2Ug4oCUIHNvIHRoZVxuICAgKiBzeW50aGVzaXplZCBDRk4gdGVtcGxhdGUgc2hpcHMgd2l0aCB0aGUgcmVhbCBDb2RlQnVpbGQgaW1hZ2UgYmFrZWQgaW4uXG4gICAqIFBvcHVsYXRlZCBieSB0aGUgQ0xJIGJlZm9yZSBpbnZva2luZyB0aGUgYm9pbGVycGxhdGUgYXBwOyBDREsgY29uc3VtZXJzXG4gICAqIHdobyBjb25zdHJ1Y3QgUGlwZWxpbmVCdWlsZGVyIGRpcmVjdGx5IG5vcm1hbGx5IGxlYXZlIHRoaXMgdW5zZXQuXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xuXG4gIC8qKlxuICAgKiBQbGF0Zm9ybS1zb3VyY2VkIHJlZ2lzdHJ5IG92ZXJyaWRlcywgYXBwbGllZCBvdmVyIHRoZSBlbnYtbG9hZGVkIGByZWdpc3RyeWBcbiAgICogY29uZmlnIGF0IHN5bnRoIHN0YXJ0LiBwaXBlbGluZS1tYW5hZ2VyIHBvcHVsYXRlcyB0aGlzIGZyb20gdGhlIHBsYXRmb3JtIFVSTFxuICAgKiBpdCBkZXBsb3lzIGFnYWluc3Qgc28gdGhlIENvZGVCdWlsZCBpbWFnZSBVUklzIHVzZSBhIHB1bGwgaG9zdCBBV1MgQ29kZUJ1aWxkXG4gICAqIGNhbiByZXNvbHZlIChpbnN0ZWFkIG9mIHRoZSBpbi1jbHVzdGVyIGByZWdpc3RyeTo1MDAwYCBkZWZhdWx0KS4gQ0RLXG4gICAqIGNvbnN1bWVycyBjb25zdHJ1Y3RpbmcgUGlwZWxpbmVCdWlsZGVyIGRpcmVjdGx5IG5vcm1hbGx5IGxlYXZlIHRoaXMgdW5zZXQuXG4gICAqL1xuICByZWFkb25seSByZWdpc3RyeT86IFBhcnRpYWw8UmVnaXN0cnlDb25maWc+O1xufVxuXG4vKipcbiAqIENESyBjb25zdHJ1Y3QgdGhhdCBjcmVhdGVzIGFuZCBjb25maWd1cmVzIGEgQ29kZVBpcGVsaW5lIGZvciBjb250aW51b3VzIGRlcGxveW1lbnQuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIE11bHRpLXNvdXJjZSBzdXBwb3J0IChTMywgR2l0SHViLCBDb2RlU3RhcilcbiAqIC0gUGx1Z2luLWJhc2VkIGJ1aWxkIHN0ZXBzXG4gKiAtIE1ldGFkYXRhLWRyaXZlbiBjb25maWd1cmF0aW9uXG4gKiAtIEF1dG9tYXRpYyB0YWdnaW5nXG4gKiAtIEF1dG9tYXRpYyBzYW5pdGl6YXRpb24gb2YgcHJvamVjdCBhbmQgb3JnYW5pemF0aW9uIG5hbWVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIG5ldyBQaXBlbGluZUJ1aWxkZXIodGhpcywgJ015UGlwZWxpbmUnLCB7XG4gKiAgIHByb2plY3Q6ICdteS1hcHAnLFxuICogICBvcmdhbml6YXRpb246ICdteS1vcmcnLFxuICogICBzeW50aDoge1xuICogICAgIHNvdXJjZToge1xuICogICAgICAgdHlwZTogJ2dpdGh1YicsXG4gKiAgICAgICBvcHRpb25zOiB7IHJlcG86ICdvd25lci9yZXBvJywgYnJhbmNoOiAnbWFpbicgfVxuICogICAgIH0sXG4gKiAgICAgcGx1Z2luOiB7IG5hbWU6ICdzeW50aCcgfVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVCdWlsZGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHBpcGVsaW5lOiBDb2RlUGlwZWxpbmU7XG4gIHB1YmxpYyByZWFkb25seSBjb25maWc6IFBpcGVsaW5lQ29uZmlndXJhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQnVpbGRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIEFwcGx5IHBsYXRmb3JtLXNvdXJjZWQgcmVnaXN0cnkgb3ZlcnJpZGVzIEJFRk9SRSBhbnkgQ29uZmlnLmdldCgncmVnaXN0cnknKVxuICAgIC8vIChwbHVnaW4vZGVmYXVsdCBidWlsZC1pbWFnZSByZXNvbHV0aW9uIGJlbG93KSBzbyB0aGUgc3ludGggdXNlcyB0aGUgcHVsbFxuICAgIC8vIGhvc3QgdGhlIHBsYXRmb3JtIGRlcGxveXMgYWdhaW5zdCwgbm90IHRoZSBpbi1jbHVzdGVyIGVudiBkZWZhdWx0LiBUaGUgQ0xJXG4gICAgLy8gb25seSBzZXRzIHByb3BzLnJlZ2lzdHJ5IHdoZW4gSU1BR0VfUkVHSVNUUllfUFVMTF9IT1NUIGlzIHVuc2V0LCBzbyBhblxuICAgIC8vIGV4cGxpY2l0IG9wZXJhdG9yIHB1bGwgaG9zdCBpcyBuZXZlciBjbG9iYmVyZWQgKHNlZSBiYWtlUGxhdGZvcm1SZWdpc3RyeSkuXG4gICAgLy9cbiAgICAvLyBTY29wZWQgKyByZXN0b3JlZCBzbyB0aGUgb3ZlcnJpZGUgZG9lcyBOT1QgbGVhayBpbnRvIHRoZSBwcm9jZXNzLXdpZGVcbiAgICAvLyBDb25maWcgY2FjaGU6IGluIGEgbXVsdGktcGlwZWxpbmUgQ0RLIGFwcCwgcGlwZWxpbmUgQidzIHJlZ2lzdHJ5IG11c3Qgbm90XG4gICAgLy8gYmxlZWQgaW50byBwaXBlbGluZSBBJ3MgaW1hZ2UgcmVzb2x1dGlvbi4gQWxsIHJlZ2lzdHJ5IHJlYWRzIGhhcHBlblxuICAgIC8vIHN5bmNocm9ub3VzbHkgYmVsb3cgKGJ1aWxkLWltYWdlIHJlc29sdXRpb24pLCBzbyByZXN0b3JpbmcgYXQgdGhlIGVuZCBvZlxuICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBrZWVwcyBzaW5nbGUtcGlwZWxpbmUgYmVoYXZpb3IgaWRlbnRpY2FsLlxuICAgIGNvbnN0IHJlc3RvcmVSZWdpc3RyeSA9IHByb3BzLnJlZ2lzdHJ5XG4gICAgICA/IENvbmZpZy5vdmVycmlkZVNjb3BlZCgncmVnaXN0cnknLCBwcm9wcy5yZWdpc3RyeSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgUGlwZWxpbmVDb25maWd1cmF0aW9uIGZvciBhbGwgYnVzaW5lc3MgbG9naWMgKHZhbGlkYXRpb24sIHNhbml0aXphdGlvbiwgbWV0YWRhdGEgbWVyZ2luZylcbiAgICAgIHRoaXMuY29uZmlnID0gbmV3IFBpcGVsaW5lQ29uZmlndXJhdGlvbihwcm9wcyk7XG5cbiAgICAgIGNvbnN0IHNlcnZlckNvbmZpZyA9IENvbmZpZy5nZXQoJ3NlcnZlcicpO1xuICAgICAgY29uc3QgYXdzQ29uZmlnID0gQ29uZmlnLmdldCgnYXdzJyk7XG4gICAgICAvLyBQYXNzIG9yZytwcm9qZWN0IHNvIGxvZyBncm91cCAvIElBTSByb2xlIG5hbWVzIGdldCBhIHN0YWJsZSBoYXNoXG4gICAgICAvLyBzdWZmaXggcGVyIHBpcGVsaW5lLiBQcmV2ZW50cyBgUmVzb3VyY2UgYWxyZWFkeSBleGlzdHNgIGNvbGxpc2lvbnNcbiAgICAgIC8vIGFjcm9zcyBzdGFja3MgZGVwbG95ZWQgdG8gdGhlIHNhbWUgQVdTIGFjY291bnQuXG4gICAgICBjb25zdCB1bmlxdWVJZCA9IG5ldyBVbmlxdWVJZCh7XG4gICAgICAgIG9yZ2FuaXphdGlvbjogdGhpcy5jb25maWcub3JnYW5pemF0aW9uLFxuICAgICAgICBwcm9qZWN0OiB0aGlzLmNvbmZpZy5wcm9qZWN0LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwbHVnaW5Mb29rdXAgPSBuZXcgUGx1Z2luTG9va3VwKFxuICAgICAgICB0aGlzLFxuICAgICAgICB1bmlxdWVJZC5nZW5lcmF0ZSgncGx1Z2luOmxvb2t1cCcpLFxuICAgICAgICB7XG4gICAgICAgICAgb3JnYW5pemF0aW9uOiB0aGlzLmNvbmZpZy5vcmdhbml6YXRpb24sXG4gICAgICAgICAgcHJvamVjdDogdGhpcy5jb25maWcucHJvamVjdCxcbiAgICAgICAgICBwbGF0Zm9ybVVybDogc2VydmVyQ29uZmlnLnBsYXRmb3JtVXJsLFxuICAgICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICAgIG9yZ0lkOiBwcm9wcy5vcmdJZCxcbiAgICAgICAgICBydW50aW1lOiBsYW1iZGFSdW50aW1lKGF3c0NvbmZpZy5sYW1iZGEucnVudGltZSksXG4gICAgICAgICAgdGltZW91dDogbGFtYmRhVGltZW91dChhd3NDb25maWcubGFtYmRhLnRpbWVvdXRTZWNvbmRzKSxcbiAgICAgICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zOiBhd3NDb25maWcubGFtYmRhLnJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMsXG4gICAgICAgICAgcmVzb2x2ZWRQbHVnaW5zOiBwcm9wcy5yZXNvbHZlZFBsdWdpbnMsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICAvLyBDcmVhdGUgc291cmNlIGFuZCBidWlsZCBzdGVwXG4gICAgICBjb25zdCBzb3VyY2VCdWlsZGVyID0gbmV3IFNvdXJjZUJ1aWxkZXIodGhpcywgdGhpcy5jb25maWcpO1xuICAgICAgY29uc3Qgc291cmNlID0gc291cmNlQnVpbGRlci5jcmVhdGUodW5pcXVlSWQpO1xuXG4gICAgICAvLyBTeW50aC1wbHVnaW4gcmVzb2x1dGlvbjpcbiAgICAgIC8vICAgMS4gUHJlLXJlc29sdmVkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIHN5bnRoL2RlcGxveWAgZnJvbSB0aGUgcGxhdGZvcm1cbiAgICAgIC8vICAgICAgQVBJIOKGkiB1c2UgaXQuIFN5bnRoIHN0ZXAgcnVucyBvbiB0aGUgcmVhbCBgY2RrLXN5bnRoYCBpbWFnZSB3aXRoXG4gICAgICAvLyAgICAgIHJlYWwgY29tbWFuZHMgYmFrZWQgaW50byB0aGUgdGVtcGxhdGUuXG4gICAgICAvLyAgIDIuIE90aGVyd2lzZSDihpIgYGJvb3RzdHJhcCgpYDogY29sZC1zdGFydCBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aGBcbiAgICAgIC8vICAgICAgb24gdGhlIGNvbmZpZ3VyZWQgQ09ERUJVSUxEX0RFRkFVTFRfSU1BR0UgKGRlZmF1bHRcbiAgICAgIC8vICAgICAgcGlwZWxpbmUtYm9vdHN0cmFwOjEuMCkuIFVzZWQgd2hlbiB0aGUgcGxhdGZvcm0gaXNuJ3QgcmVhY2hhYmxlXG4gICAgICAvLyAgICAgIGF0IHN5bnRoIHRpbWUgKENMSSBsb2dzIGEgd2FybmluZyBwZXIgbWlzc2VkIHBsdWdpbikuXG4gICAgICAvL1xuICAgICAgLy8gcGx1Z2luTG9va3VwLnBsdWdpbigpIHJlYWRzIGByZXNvbHZlZFBsdWdpbnNgIGludGVybmFsbHkgYW5kIHJldHVybnNcbiAgICAgIC8vIHRoZSBjYWNoZWQgZW50cnkgd2hlbiBwcmVzZW50IOKAlCBzbyBjYWxsaW5nIGl0IGFsd2F5cyB3aW5zIG92ZXJcbiAgICAgIC8vIGJvb3RzdHJhcCgpIHdoZW4gcHJlLXJlc29sdXRpb24gc3VjY2VlZGVkLlxuICAgICAgY29uc3Qgc3ludGhDYWNoZUtleSA9XG4gICAgICB0aGlzLmNvbmZpZy5wbHVnaW4uYWxpYXMgfHwgYCR7dGhpcy5jb25maWcucGx1Z2luLm5hbWV9LWFsaWFzYDtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IHByb3BzLnJlc29sdmVkUGx1Z2lucz8uW3N5bnRoQ2FjaGVLZXldXG4gICAgICAgID8gcGx1Z2luTG9va3VwLnBsdWdpbih0aGlzLmNvbmZpZy5wbHVnaW4pXG4gICAgICAgIDogcGx1Z2luTG9va3VwLmJvb3RzdHJhcCgpO1xuICAgICAgY29uc3QgZGVmYXVsdENvbXB1dGVUeXBlID0gZ2V0Q29tcHV0ZVR5cGUoYXdzQ29uZmlnLmNvZGVCdWlsZC5jb21wdXRlVHlwZSk7XG4gICAgICBjb25zdCBhcnRpZmFjdE1hbmFnZXIgPSBuZXcgQXJ0aWZhY3RNYW5hZ2VyKCk7XG4gICAgICBjb25zdCBzeW50aEFsaWFzID0gdGhpcy5jb25maWcucGx1Z2luLmFsaWFzID8/IHRoaXMuY29uZmlnLnBsdWdpbi5uYW1lO1xuXG4gICAgICAvLyBTY29wZSBleHBvc2VkIHRvIHBsdWdpbi1zcGVjIHRlbXBsYXRlcyBhcyBgcGlwZWxpbmUuKmAuIFNvdXJjZWQgZnJvbSB0aGVcbiAgICAgIC8vIGNvbmZpZyBzbyB0aGUgc3ludGggc3RlcCwgZXZlcnkgc3RhZ2Ugc3RlcCwgYW5kIHRoZSBzb3VyY2UgdG9rZW4gYWxsXG4gICAgICAvLyByZXNvbHZlIGFnYWluc3QgdGhlIHNhbWUgc25hcHNob3QgKHNlZSBQaXBlbGluZUNvbmZpZ3VyYXRpb24uZ2V0UGlwZWxpbmVTY29wZSkuXG4gICAgICBjb25zdCBwaXBlbGluZVNjb3BlID0gdGhpcy5jb25maWcuZ2V0UGlwZWxpbmVTY29wZSgpO1xuXG4gICAgICBjb25zdCBzeW50aCA9IGNyZWF0ZUNvZGVCdWlsZFN0ZXAoe1xuICAgICAgICAuLi50aGlzLmNvbmZpZy5zeW50aEN1c3RvbWl6YXRpb24sXG4gICAgICAgIGlkOiB1bmlxdWVJZC5nZW5lcmF0ZSgnY2RrOnN5bnRoJyksXG4gICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICBwbHVnaW4sXG4gICAgICAgIGlucHV0OiBzb3VyY2UsXG4gICAgICAgIG1ldGFkYXRhOiB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQsXG4gICAgICAgIG5ldHdvcms6IHRoaXMuY29uZmlnLm5ldHdvcmssXG4gICAgICAgIHNjb3BlOiB0aGlzLFxuICAgICAgICBkZWZhdWx0Q29tcHV0ZVR5cGUsXG4gICAgICAgIGFydGlmYWN0TWFuYWdlcixcbiAgICAgICAgc3RhZ2VOYW1lOiAnbm8tc3RhZ2UnLFxuICAgICAgICBzdGFnZUFsaWFzOiAnbm8tc3RhZ2UtYWxpYXMnLFxuICAgICAgICBwbHVnaW5BbGlhczogYCR7c3ludGhBbGlhc30tYWxpYXNgLFxuICAgICAgICBvcmdJZDogcHJvcHMub3JnSWQsXG4gICAgICAgIHBpcGVsaW5lU2NvcGUsXG4gICAgICB9KTtcblxuICAgICAgLy8gUmVzb2x2ZSBwaXBlbGluZS1sZXZlbCBkZWZhdWx0cyBpbnRvIGNvZGVCdWlsZERlZmF1bHRzXG4gICAgICAvLyBCdWlsZCB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBzZWNyZXQgbmFtZSBmb3IgQ29kZUJ1aWxkIGVudiB2YXJzXG4gICAgICBjb25zdCBwbGF0Zm9ybVNlY3JldE5hbWUgPSBwcm9wcy5vcmdJZFxuICAgICAgICA/IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aChwcm9wcy5vcmdJZCwgJ3BsYXRmb3JtJylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGNvZGVCdWlsZERlZmF1bHRzID0gdGhpcy5yZXNvbHZlRGVmYXVsdHModGhpcy5jb25maWcuZGVmYXVsdHMsIHVuaXF1ZUlkLCBwcm9wcy5waXBlbGluZUlkLCBwbGF0Zm9ybVNlY3JldE5hbWUsIHNlcnZlckNvbmZpZy5wbGF0Zm9ybVVybCwgcHJvcHMub3JnSWQpO1xuXG4gICAgICAvLyBSZXNvbHZlIElBTSByb2xlOiBleHBsaWNpdCBwcm9wIHdpbnMsIGVsc2UgYGlhbTpyb2xlYCBtZXRhZGF0YSwgZWxzZSBsZXRcbiAgICAgIC8vIENESyBhdXRvLWNyZWF0ZSB0aGUgcGlwZWxpbmUgcm9sZSAoY29kZXBpcGVsaW5lLmFtYXpvbmF3cy5jb20gcHJpbmNpcGFsKS5cbiAgICAgIGNvbnN0IHJvbGVDb25maWcgPSBwcm9wcy5yb2xlID8/IHJvbGVDb25maWdGcm9tTWV0YWRhdGEodGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkKTtcbiAgICAgIGlmIChyb2xlQ29uZmlnPy50eXBlID09PSAnY29kZUJ1aWxkRGVmYXVsdCcpIHtcbiAgICAgICAgY3JlYXRlTG9nZ2VyKCdwaXBlbGluZS1idWlsZGVyJykud2FybihcbiAgICAgICAgICAnY29kZUJ1aWxkRGVmYXVsdCByb2xlIHR5cGUgdXNlcyBjb2RlYnVpbGQuYW1hem9uYXdzLmNvbSB0cnVzdCBwcmluY2lwYWwg4oCUICcgK1xuICAgICAgICAndGhpcyBpcyBub3Qgc3VpdGFibGUgYXMgdGhlIHBpcGVsaW5lLWxldmVsIHJvbGUuIENvbnNpZGVyIHVzaW5nIHJvbGVBcm4vcm9sZU5hbWUgJyArXG4gICAgICAgICdvciBvbWl0dGluZyB0aGUgcm9sZSB0byBsZXQgQ0RLIGF1dG8tY3JlYXRlIG9uZSB3aXRoIGNvZGVwaXBlbGluZS5hbWF6b25hd3MuY29tLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCByb2xlID0gcm9sZUNvbmZpZ1xuICAgICAgICA/IHJlc29sdmVSb2xlKHRoaXMsIHVuaXF1ZUlkLCByb2xlQ29uZmlnKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgLy8g4pSA4pSAIEFydGlmYWN0IGJ1Y2tldCAoS01TIGVuY3J5cHRpb24gKyByZXRlbnRpb24pIOKUgOKUgFxuICAgICAgLy8gV2hlbiBgZW5jcnlwdGlvbi5rbXNLZXlBcm5gIGFuZC9vciBgb3BlcmF0aW9ucy5hcnRpZmFjdFJldGVudGlvbkRheXNgIGFyZVxuICAgICAgLy8gc2V0IHdlIGNyZWF0ZSBhIGN1c3RvbSBhcnRpZmFjdCBidWNrZXQgYW5kIHBhc3MgaXQgdG8gQ29kZVBpcGVsaW5lOyB0aGF0XG4gICAgICAvLyBpcyB0aGUgb25seSB3YXkgdG8gYXR0YWNoIGEgY3VzdG9tZXItbWFuYWdlZCBrZXkgKHRoZSBMMyBjb25zdHJ1Y3QgZXhwb3Nlc1xuICAgICAgLy8gYGFydGlmYWN0QnVja2V0YCwgbm90IGBlbmNyeXB0aW9uS2V5YCkuIEFic2VudCBib3RoIGtleXMsIENESyBhdXRvLWNyZWF0ZXNcbiAgICAgIC8vIHRoZSBidWNrZXQgYW5kIGJlaGF2aW9yIGlzIHVuY2hhbmdlZC5cbiAgICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gdGhpcy5idWlsZEFydGlmYWN0QnVja2V0KCk7XG5cbiAgICAgIC8vIENyZWF0ZSBDb2RlUGlwZWxpbmUgY29uc3RydWN0XG4gICAgICB0aGlzLnBpcGVsaW5lID0gbmV3IENvZGVQaXBlbGluZSh0aGlzLCB1bmlxdWVJZC5nZW5lcmF0ZSgncGlwZWxpbmVzOmNvZGVwaXBlbGluZScpLCB7XG4gICAgICAgIC4uLihjb2RlQnVpbGREZWZhdWx0cyAmJiB7IGNvZGVCdWlsZERlZmF1bHRzIH0pLFxuICAgICAgICAuLi4ocm9sZSAmJiB7IHJvbGUgfSksXG4gICAgICAgIC4uLihhcnRpZmFjdEJ1Y2tldCAmJiB7IGFydGlmYWN0QnVja2V0IH0pLFxuICAgICAgICBwaXBlbGluZVR5cGU6IFBpcGVsaW5lVHlwZS5WMixcbiAgICAgICAgcGlwZWxpbmVOYW1lOiB0aGlzLmNvbmZpZy5waXBlbGluZU5hbWUsXG4gICAgICAgIHN5bnRoLFxuICAgICAgICAuLi5tZXRhZGF0YUZvckNvZGVQaXBlbGluZSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChwcm9wcy5zdGFnZXMpIHtcbiAgICAgICAgY29uc3Qgc3RhZ2VCdWlsZGVyID0gbmV3IFN0YWdlQnVpbGRlcih7XG4gICAgICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICAgICAgcGx1Z2luTG9va3VwLFxuICAgICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICAgIGdsb2JhbE1ldGFkYXRhOiB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQsXG4gICAgICAgICAgZGVmYXVsdENvbXB1dGVUeXBlLFxuICAgICAgICAgIGFydGlmYWN0TWFuYWdlcixcbiAgICAgICAgICBvcmdJZDogcHJvcHMub3JnSWQsXG4gICAgICAgICAgcGlwZWxpbmVTY29wZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHN0YWdlQnVpbGRlci5hZGRTdGFnZXModGhpcy5waXBlbGluZSwgcHJvcHMuc3RhZ2VzKTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIFRhZ3Mg4pSA4pSAXG4gICAgICAvLyBUaGUgZmlyc3QgdGhyZWUgYXJlIG9wZXJhdGlvbnMtZXNzZW50aWFsIGFuZCB1c2VkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyXG4gICAgICAvLyBhdWRpdCBzdGFja3NgIHRvIGRpZmYgQ0ZOIHN0YWNrcyBhZ2FpbnN0IHRoZSBwaXBlbGluZV9yZWdpc3RyeSB0YWJsZS5cbiAgICAgIC8vIGBPcmdJZGAgaXMgdGhlIGNhbm9uaWNhbCBrZXkgZm9yIGNvc3QgYXR0cmlidXRpb24gKEFXUyBDb3N0IEV4cGxvcmVyXG4gICAgICAvLyBncm91cHMgYnkgdGFnIGtleS92YWx1ZSB3aGVuIGFjdGl2YXRlZCBpbiBCaWxsaW5nIHNldHRpbmdzKS5cbiAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdwaXBlbGluZS1idWlsZGVyJywgJ3RydWUnKTtcbiAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdwcm9qZWN0JywgdGhpcy5jb25maWcucHJvamVjdCk7XG4gICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnb3JnYW5pemF0aW9uJywgdGhpcy5jb25maWcub3JnYW5pemF0aW9uKTtcbiAgICAgIGlmIChwcm9wcy5vcmdJZCkge1xuICAgICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnT3JnSWQnLCBwcm9wcy5vcmdJZCk7XG4gICAgICB9XG4gICAgICAvLyBTdGFibGUgZXZlbnQtcmVwb3J0aW5nIGtleS4gQXBwbGllZCBhdCBzeW50aCAodGhlIHBpcGVsaW5lSWQgaXMga25vd25cbiAgICAgIC8vIGhlcmUpLCBzbyBpdCdzIHByZXNlbnQgZnJvbSBzdGFjayBjcmVhdGlvbiDigJQgdGhlIGV2ZW50cyBMYW1iZGEgcmVhZHMgdGhpc1xuICAgICAgLy8gdGFnIHRvIGF0dHJpYnV0ZSBDb2RlUGlwZWxpbmUgc3RhdGUtY2hhbmdlIGV2ZW50cyB0byB0aGUgcGlwZWxpbmUgd2l0aG91dFxuICAgICAgLy8gZXZlciBoYW5kbGluZyB0aGUgQVJOL2FjY291bnQuIFNlZSBwYWNrYWdlcy9waXBlbGluZS1ldmVudHMuXG4gICAgICBpZiAocHJvcHMucGlwZWxpbmVJZCkge1xuICAgICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnUElQRUxJTkVfRVZFTlRfSUQnLCBwcm9wcy5waXBlbGluZUlkKTtcbiAgICAgIH1cbiAgICAgIC8vIE9wdGlvbmFsIGRlcGxveS1lbnZpcm9ubWVudCBhdHRyaWJ1dGlvbiBmb3IgRE9SQSBtZXRyaWNzLiBNaXJyb3JzIHRoZVxuICAgICAgLy8gUElQRUxJTkVfRVZFTlRfSUQgdGFnOiBhcHBsaWVkIGF0IHN5bnRoIHNvIGl0J3MgcHJlc2VudCBmcm9tIHN0YWNrXG4gICAgICAvLyBjcmVhdGlvbiwgYW5kIHJlYWQgYnkgdGhlIGV2ZW50cyBMYW1iZGEgZnJvbSB0aGUgc2FtZSBMaXN0VGFncyBjYWxsLlxuICAgICAgLy8gQWJzZW50IHdoZW4gYGVudmlyb25tZW50YCBpcyB1bnNldCDigJQgbGVnYWN5IHBpcGVsaW5lcyByZXBvcnQgdW5jaGFuZ2VkLlxuICAgICAgaWYgKHByb3BzLmVudmlyb25tZW50KSB7XG4gICAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdFbnZpcm9ubWVudCcsIHByb3BzLmVudmlyb25tZW50KTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy50YWdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzLnRhZ3MpKSB7XG4gICAgICAgICAgVGFncy5vZih0aGlzLnBpcGVsaW5lKS5hZGQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgdGhlIGludGVybmFsIHBpcGVsaW5lIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIHByb3BlcnRpZXNcbiAgICAgIHRoaXMucGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuICAgICAgY29uc3QgY2RrUGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lLnBpcGVsaW5lO1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZDtcblxuICAgICAgLy8g4pSA4pSAIFBpcGVsaW5lLWxldmVsIFZhcmlhYmxlcyAoQ29kZVBpcGVsaW5lIFYyKSDilIDilIBcbiAgICAgIGZvciAoY29uc3QgdiBvZiBwYXJzZVBpcGVsaW5lVmFyaWFibGVzKG1ldGFbTWV0YWRhdGFLZXlzLlBJUEVMSU5FX1ZBUklBQkxFU10pKSB7XG4gICAgICAgIGNka1BpcGVsaW5lLmFkZFZhcmlhYmxlKG5ldyBWYXJpYWJsZSh7XG4gICAgICAgICAgdmFyaWFibGVOYW1lOiB2Lm5hbWUsXG4gICAgICAgICAgLi4uKHYuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgeyBkZWZhdWx0VmFsdWU6IHYuZGVmYXVsdFZhbHVlIH0pLFxuICAgICAgICAgIC4uLih2LmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYgeyBkZXNjcmlwdGlvbjogdi5kZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICAvLyDilIDilIAgU05TIE5vdGlmaWNhdGlvbnMg4pSA4pSAXG4gICAgICBjb25zdCBub3RpZmljYXRpb25Ub3BpY0FybiA9IG1ldGFbTWV0YWRhdGFLZXlzLk5PVElGSUNBVElPTl9UT1BJQ19BUk5dO1xuICAgICAgaWYgKHR5cGVvZiBub3RpZmljYXRpb25Ub3BpY0FybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgdG9waWMgPSBzbnMuVG9waWMuZnJvbVRvcGljQXJuKHRoaXMsICdOb3RpZmljYXRpb25Ub3BpYycsIG5vdGlmaWNhdGlvblRvcGljQXJuKTtcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uRXZlbnRzID0gcGFyc2VOb3RpZmljYXRpb25FdmVudHMobWV0YVtNZXRhZGF0YUtleXMuTk9USUZJQ0FUSU9OX0VWRU5UU10pXG4gICAgICAgICAgLm1hcChlID0+IFBJUEVMSU5FX0VWRU5UX01BUFtlLnRvVXBwZXJDYXNlKCldKVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgIGlmIChub3RpZmljYXRpb25FdmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNka1BpcGVsaW5lLm5vdGlmeU9uKCdQaXBlbGluZU5vdGlmaWNhdGlvbicsIHRvcGljLCB7IGV2ZW50czogbm90aWZpY2F0aW9uRXZlbnRzIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIOKUgOKUgCBTY2hlZHVsZWQgRXhlY3V0aW9uIOKUgOKUgFxuICAgICAgaWYgKHByb3BzLnN5bnRoLnNvdXJjZS5vcHRpb25zPy50cmlnZ2VyID09PSBUcmlnZ2VyVHlwZS5TQ0hFRFVMRSB8fCBwcm9wcy5zY2hlZHVsZSkge1xuICAgICAgICBjb25zdCBleHByID0gcHJvcHMuc2NoZWR1bGUgfHwgKHByb3BzLnN5bnRoLnNvdXJjZS5vcHRpb25zIGFzIHsgc2NoZWR1bGU/OiBzdHJpbmcgfSk/LnNjaGVkdWxlIHx8ICdyYXRlKDEgZGF5KSc7XG4gICAgICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnU2NoZWR1bGVSdWxlJywge1xuICAgICAgICAgIHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUuZXhwcmVzc2lvbihleHByKSxcbiAgICAgICAgICB0YXJnZXRzOiBbbmV3IHRhcmdldHMuQ29kZVBpcGVsaW5lKGNka1BpcGVsaW5lKV0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyDilIDilIAgRXhlY3V0aW9uIEV2ZW50IFRyYWNraW5nIChmb3J3YXJkIHBpcGVsaW5lIHN0YXRlIGNoYW5nZXMgdG8gU05TKSDilIDilIBcbiAgICAgIGlmIChtZXRhW01ldGFkYXRhS2V5cy5FTkFCTEVfRVhFQ1VUSU9OX0VWRU5UU10gJiYgdHlwZW9mIG5vdGlmaWNhdGlvblRvcGljQXJuID09PSAnc3RyaW5nJykge1xuICAgICAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ0V4ZWN1dGlvbkV2ZW50UnVsZScsIHtcbiAgICAgICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgICAgIHNvdXJjZTogWydhd3MuY29kZXBpcGVsaW5lJ10sXG4gICAgICAgICAgICBkZXRhaWxUeXBlOiBbJ0NvZGVQaXBlbGluZSBQaXBlbGluZSBFeGVjdXRpb24gU3RhdGUgQ2hhbmdlJ10sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtjZGtQaXBlbGluZS5waXBlbGluZUFybl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0YXJnZXRzOiBbbmV3IHRhcmdldHMuU25zVG9waWMoXG4gICAgICAgICAgICBzbnMuVG9waWMuZnJvbVRvcGljQXJuKHRoaXMsICdFeGVjdXRpb25FdmVudFRvcGljJywgbm90aWZpY2F0aW9uVG9waWNBcm4pLFxuICAgICAgICAgICldLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIFBpcGVsaW5lIE1ldHJpY3MgJiBBbGFybXMg4pSA4pSAXG4gICAgICBjb25zdCBlbmFibGVNZXRyaWNzID0gdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkW01ldGFkYXRhS2V5cy5FTkFCTEVfTUVUUklDU107XG4gICAgICBpZiAoZW5hYmxlTWV0cmljcykge1xuICAgICAgICBuZXcgY2xvdWR3YXRjaC5BbGFybSh0aGlzLCAnUGlwZWxpbmVGYWlsdXJlQWxhcm0nLCB7XG4gICAgICAgICAgbWV0cmljOiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgICAgICAgbmFtZXNwYWNlOiAnQVdTL0NvZGVQaXBlbGluZScsXG4gICAgICAgICAgICBtZXRyaWNOYW1lOiAnRmFpbGVkUGlwZWxpbmVFeGVjdXRpb25Db3VudCcsXG4gICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7IFBpcGVsaW5lTmFtZTogdGhpcy5jb25maWcucGlwZWxpbmVOYW1lIH0sXG4gICAgICAgICAgICBzdGF0aXN0aWM6ICdTdW0nLFxuICAgICAgICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBgUGlwZWxpbmUgJHt0aGlzLmNvbmZpZy5waXBlbGluZU5hbWV9IGV4ZWN1dGlvbiBmYWlsZWRgLFxuICAgICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBjbG91ZHdhdGNoLlRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFJldmVydCB0aGUgcGVyLWJ1aWxkZXIgcmVnaXN0cnkgb3ZlcnJpZGUgc28gaXQgbmV2ZXIgbGVha3MgaW50byB0aGVcbiAgICAgIC8vIHByb2Nlc3Mtd2lkZSBDb25maWcgY2FjaGUgKHNlZSB0aGUgb3ZlcnJpZGUgYXQgdGhlIHRvcCBvZiB0aGUgY29uc3RydWN0b3IpLlxuICAgICAgcmVzdG9yZVJlZ2lzdHJ5Py4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjdXN0b20gYXJ0aWZhY3QgYnVja2V0IHdoZW4gYGVuY3J5cHRpb24ua21zS2V5QXJuYCBhbmQvb3JcbiAgICogYG9wZXJhdGlvbnMuYXJ0aWZhY3RSZXRlbnRpb25EYXlzYCBhcmUgc2V0LiBSZXR1cm5zIHVuZGVmaW5lZCBvdGhlcndpc2Ugc29cbiAgICogQ0RLIGF1dG8tY3JlYXRlcyB0aGUgZGVmYXVsdCBhcnRpZmFjdCBidWNrZXQgKHVuY2hhbmdlZCBiZWhhdmlvcikuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQXJ0aWZhY3RCdWNrZXQoKTogczMuSUJ1Y2tldCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZDtcbiAgICBjb25zdCBrbXNLZXlBcm4gPSB0eXBlb2YgbWV0YVtNZXRhZGF0YUtleXMuS01TX0tFWV9BUk5dID09PSAnc3RyaW5nJ1xuICAgICAgPyAobWV0YVtNZXRhZGF0YUtleXMuS01TX0tFWV9BUk5dIGFzIHN0cmluZylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJldGVudGlvbkRheXMgPSBhc0ludChtZXRhW01ldGFkYXRhS2V5cy5BUlRJRkFDVF9SRVRFTlRJT05fREFZU10pO1xuXG4gICAgaWYgKCFrbXNLZXlBcm4gJiYgcmV0ZW50aW9uRGF5cyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9IGttc0tleUFyblxuICAgICAgPyBrbXMuS2V5LmZyb21LZXlBcm4odGhpcywgJ0FydGlmYWN0S2V5Jywga21zS2V5QXJuKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBidWNrZXQgPSBuZXcgczMuQnVja2V0KHRoaXMsICdBcnRpZmFjdEJ1Y2tldCcsIHtcbiAgICAgIGVuY3J5cHRpb246IGVuY3J5cHRpb25LZXkgPyBzMy5CdWNrZXRFbmNyeXB0aW9uLktNUyA6IHMzLkJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgIC4uLihlbmNyeXB0aW9uS2V5ICYmIHsgZW5jcnlwdGlvbktleSB9KSxcbiAgICAgIC4uLihyZXRlbnRpb25EYXlzICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBsaWZlY3ljbGVSdWxlczogW3sgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cyhyZXRlbnRpb25EYXlzKSB9XSxcbiAgICAgIH0pLFxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBzMy5CbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICB9KTtcbiAgICBUYWdzLm9mKGJ1Y2tldCkuYWRkKCdwaXBlbGluZScsIHRoaXMuY29uZmlnLnBpcGVsaW5lTmFtZSk7XG4gICAgcmV0dXJuIGJ1Y2tldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBDb2RlQnVpbGREZWZhdWx0cyBpbnRvIHRoZSBzaGFwZSBleHBlY3RlZCBieSBDREsncyBjb2RlQnVpbGREZWZhdWx0cy5cbiAgICogQ29tYmluZXMgbmV0d29yayBjb25maWcsIHNlY3VyaXR5IGdyb3VwcywgYW5kIHBpcGVsaW5lLWxldmVsIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKiAoUElQRUxJTkVfSUQsIEVYRUNVVElPTl9JRCwgUExBVEZPUk1fQkFTRV9VUkwpIGF2YWlsYWJsZSB0byBhbGwgQ29kZUJ1aWxkIGFjdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVEZWZhdWx0cyhcbiAgICBkZWZhdWx0czogQ29kZUJ1aWxkRGVmYXVsdHMgfCB1bmRlZmluZWQsXG4gICAgaWQ6IFVuaXF1ZUlkLFxuICAgIHBpcGVsaW5lSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBwbGF0Zm9ybVNlY3JldE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBwbGF0Zm9ybVVybDogc3RyaW5nLFxuICAgIG9yZ0lkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICk6IENvZGVCdWlsZE9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgIC8vIFBlci1waXBlbGluZSBuZXR3b3JrIGNvbmZpZyB3aW5zOyBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGFuIGVudi1kcml2ZW5cbiAgICAvLyBnbG9iYWwgVlBDIChpbnRlcm5hbCAvIGluc2lkZS1BV1Mtb25seSBtb2RlKSBzbyBldmVyeSBwaXBlbGluZSdzXG4gICAgLy8gQ29kZUJ1aWxkIHJ1bnMgaW4gdGhlIFZQQyBhbmQgY2FuIHJlYWNoIHRoZSBwcml2YXRlIGdhdGV3YXkuIFVuc2V0IGluXG4gICAgLy8gcHVibGljIGRlcGxveXMg4oaSIENvZGVCdWlsZCBzdGF5cyBpbiB0aGUgQVdTLW1hbmFnZWQgbmV0d29yay5cbiAgICAvLyBQcmVjZWRlbmNlOiBleHBsaWNpdCBwcm9wID4gYGVjMjpuZXR3b3JrYCBtZXRhZGF0YSA+IGVudi1kcml2ZW4gZ2xvYmFsIFZQQy5cbiAgICBjb25zdCBuZXR3b3JrID0gZGVmYXVsdHM/Lm5ldHdvcmsgPz8gbmV0d29ya0NvbmZpZ0Zyb21NZXRhZGF0YSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpID8/IG5ldHdvcmtDb25maWdGcm9tRW52KCk7XG4gICAgY29uc3QgbmV0d29ya1Byb3BzID0gbmV0d29ya1xuICAgICAgPyByZXNvbHZlTmV0d29yayh0aGlzLCBpZCwgbmV0d29yaylcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gU2FtZSBwcmVjZWRlbmNlIGZvciBzdGFuZGFsb25lIHNlY3VyaXR5IGdyb3VwcyAocHJvcCA+IGBlYzI6c2VjdXJpdHlncm91cGAgbWV0YWRhdGEpLlxuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXBDb25maWcgPSBkZWZhdWx0cz8uc2VjdXJpdHlHcm91cHMgPz8gc2VjdXJpdHlHcm91cENvbmZpZ0Zyb21NZXRhZGF0YSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpO1xuICAgIGNvbnN0IHN0YW5kYWxvbmVTZWN1cml0eUdyb3VwcyA9IHNlY3VyaXR5R3JvdXBDb25maWdcbiAgICAgID8gcmVzb2x2ZVNlY3VyaXR5R3JvdXAodGhpcywgaWQsIHNlY3VyaXR5R3JvdXBDb25maWcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIFBpcGVsaW5lLWxldmVsIGVudiB2YXJzIGF2YWlsYWJsZSB0byBhbGwgQ29kZUJ1aWxkIGFjdGlvbnNcbiAgICAvLyBOb3RlOiAje2NvZGVwaXBlbGluZS4qfSByZXNvbHZlZCB2YXJpYWJsZXMgbXVzdCBnbyB0aHJvdWdoIENvZGVCdWlsZFN0ZXAuZW52XG4gICAgLy8gKGFjdGlvbi1sZXZlbCksIG5vdCBidWlsZEVudmlyb25tZW50LmVudmlyb25tZW50VmFyaWFibGVzIChwcm9qZWN0LWxldmVsKS5cbiAgICBjb25zdCBwaXBlbGluZUVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHN0cmluZyB9PiA9IHtcbiAgICAgIFBMQVRGT1JNX0JBU0VfVVJMOiB7IHZhbHVlOiBwbGF0Zm9ybVVybCB9LFxuICAgICAgLi4uKHBpcGVsaW5lSWQgJiYgeyBQSVBFTElORV9JRDogeyB2YWx1ZTogcGlwZWxpbmVJZCB9IH0pLFxuICAgICAgLi4uKHBsYXRmb3JtU2VjcmV0TmFtZSAmJiB7IFBMQVRGT1JNX1NFQ1JFVF9OQU1FOiB7IHZhbHVlOiBwbGF0Zm9ybVNlY3JldE5hbWUgfSB9KSxcbiAgICAgIC8vIFByb3BhZ2F0ZSBUTFMgdmVyaWZpY2F0aW9uIHNldHRpbmcgc28gYWxsIENvZGVCdWlsZCBzdGVwcyBjYW4gcmVhY2hcbiAgICAgIC8vIHRoZSBwbGF0Zm9ybSBBUEkgd2hlbiB1c2luZyBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZXNcbiAgICAgIC4uLihwcm9jZXNzLmVudi5OT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEID09PSAnMCcgJiYge1xuICAgICAgICBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEOiB7IHZhbHVlOiAnMCcgfSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IFtcbiAgICAgIC4uLihuZXR3b3JrUHJvcHM/LnNlY3VyaXR5R3JvdXBzID8/IFtdKSxcbiAgICAgIC4uLihzdGFuZGFsb25lU2VjdXJpdHlHcm91cHMgPz8gW10pLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uKG5ldHdvcmtQcm9wcyAmJiB7IHZwYzogbmV0d29ya1Byb3BzLnZwYywgc3VibmV0U2VsZWN0aW9uOiBuZXR3b3JrUHJvcHMuc3VibmV0U2VsZWN0aW9uIH0pLFxuICAgICAgLi4uKHNlY3VyaXR5R3JvdXBzLmxlbmd0aCA+IDAgJiYgeyBzZWN1cml0eUdyb3VwcyB9KSxcbiAgICAgIC8vIGJ1aWxkSW1hZ2UgYXQgdGhpcyBsZXZlbCByZWFjaGVzIENESyBQaXBlbGluZXMnIGludGVybmFsbHktd3JhcHBlZFxuICAgICAgLy8gU2hlbGxTdGVwIENvZGVCdWlsZCBhY3Rpb24sIHdoaWNoIG90aGVyd2lzZSBoYXJkY29kZXNcbiAgICAgIC8vIENESydzIGRlZmF1bHQgY3VyYXRlZCBzdGFuZGFyZCBpbWFnZS4gU2V0dGluZyBpdCBoZXJlIGNsb3NlcyB0aGUgZ2FwXG4gICAgICAvLyBleHBvc2VkIGluIHRoZSBzYW1lIGVudiB2YXIgKGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRWApIHRoYXQgdGhlXG4gICAgICAvLyBDb2RlQnVpbGRTdGVwIHBhdGggYWxyZWFkeSBob25vcnMgdmlhIHJlc29sdmVQbHVnaW5JbWFnZSgpJ3NcbiAgICAgIC8vIGZhbGxiYWNrLiBQZXItc3RlcCBgYnVpbGRJbWFnZWAgb24gYSBDb2RlQnVpbGRTdGVwIHN0aWxsIHdpbnMuXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IHJlc29sdmVEZWZhdWx0QnVpbGRJbWFnZSh0aGlzLCBvcmdJZCksXG4gICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiBwaXBlbGluZUVudlZhcnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
476
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9waXBlbGluZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEtBQUssVUFBVSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEcsT0FBTyxLQUFLLE1BQU0sTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssT0FBTyxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUM7QUFDM0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6QyxPQUFPLEtBQUssR0FBRyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQXlCLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxF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QkFBa0IsSUFBSSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztZQUNsRixzRUFBc0U7WUFDdEUsdURBQXVEO1lBQ3ZELEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixLQUFLLEdBQUcsSUFBSTtnQkFDdEQsNEJBQTRCLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2FBQzdDLENBQUM7U0FDSCxDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUc7WUFDckIsR0FBRyxDQUFDLFlBQVksRUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO1lBQ3ZDLEdBQUcsQ0FBQyx3QkFBd0IsSUFBSSxFQUFFLENBQUM7U0FDcEMsQ0FBQztRQUVGLE9BQU87WUFDTCxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsZUFBZSxFQUFFLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM3RixHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQztZQUNwRCxxRUFBcUU7WUFDckUsd0RBQXdEO1lBQ3hELHVFQUF1RTtZQUN2RSxtRUFBbUU7WUFDbkUsK0RBQStEO1lBQy9ELGlFQUFpRTtZQUNqRSxnQkFBZ0IsRUFBRTtnQkFDaEIsVUFBVSxFQUFFLHdCQUF3QixDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7Z0JBQ2pELG9CQUFvQixFQUFFLGVBQWU7YUFDdEM7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSwgVGFncyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNsb3Vkd2F0Y2ggZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0IHsgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMsIFBpcGVsaW5lVHlwZSwgVmFyaWFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBzbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucyc7XG5pbXBvcnQgeyBDb2RlUGlwZWxpbmUsIHR5cGUgQ29kZUJ1aWxkT3B0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFBpcGVsaW5lQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGlwZWxpbmUtY29uZmlndXJhdGlvbi5qcyc7XG5pbXBvcnQgeyBQbHVnaW5Mb29rdXAgfSBmcm9tICcuL3BsdWdpbi1sb29rdXAuanMnO1xuaW1wb3J0IHsgU291cmNlQnVpbGRlciB9IGZyb20gJy4vc291cmNlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgU3RhZ2VCdWlsZGVyIH0gZnJvbSAnLi9zdGFnZS1idWlsZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VPcHRpb25zLCBTeW50aE9wdGlvbnMgfSBmcm9tICcuL3N0ZXAtdHlwZXMuanMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcuanMnO1xuaW1wb3J0IHsgbGFtYmRhUnVudGltZSwgbGFtYmRhVGltZW91dCB9IGZyb20gJy4uL2NvbmZpZy9hd3MtY29uZmlnLWNkay5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlZ2lzdHJ5Q29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL2NvbmZpZy10eXBlcy5qcyc7XG5pbXBvcnQgeyBBcnRpZmFjdE1hbmFnZXIgfSBmcm9tICcuLi9jb3JlL2FydGlmYWN0LW1hbmFnZXIuanMnO1xuaW1wb3J0IHsgVW5pcXVlSWQgfSBmcm9tICcuLi9jb3JlL2lkLWdlbmVyYXRvci5qcyc7XG5pbXBvcnQge1xuICBhc0ludCxcbiAgbWV0YWRhdGFGb3JDb2RlUGlwZWxpbmUsXG4gIG5ldHdvcmtDb25maWdGcm9tTWV0YWRhdGEsXG4gIHBhcnNlUGlwZWxpbmVWYXJpYWJsZXMsXG4gIHJvbGVDb25maWdGcm9tTWV0YWRhdGEsXG4gIHNlY3VyaXR5R3JvdXBDb25maWdGcm9tTWV0YWRhdGEsXG59IGZyb20gJy4uL2NvcmUvbWV0YWRhdGEtYnVpbGRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IENvZGVCdWlsZERlZmF1bHRzIH0gZnJvbSAnLi4vY29yZS9uZXR3b3JrLXR5cGVzLmpzJztcbmltcG9ydCB7IHJlc29sdmVOZXR3b3JrLCBuZXR3b3JrQ29uZmlnRnJvbUVudiB9IGZyb20gJy4uL2NvcmUvbmV0d29yay5qcyc7XG5pbXBvcnQgeyBjcmVhdGVDb2RlQnVpbGRTdGVwLCBnZXRDb21wdXRlVHlwZSwgcmVzb2x2ZURlZmF1bHRCdWlsZEltYWdlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS1oZWxwZXJzLmpzJztcbmltcG9ydCB7IE1ldGFkYXRhS2V5cywgVHJpZ2dlclR5cGUgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLXR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgTWV0YURhdGFUeXBlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS10eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJvbGVDb25maWcgfSBmcm9tICcuLi9jb3JlL3JvbGUtdHlwZXMuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVJvbGUgfSBmcm9tICcuLi9jb3JlL3JvbGUuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVNlY3VyaXR5R3JvdXAgfSBmcm9tICcuLi9jb3JlL3NlY3VyaXR5LWdyb3VwLmpzJztcblxuY29uc3QgUElQRUxJTkVfRVZFTlRfTUFQOiBSZWNvcmQ8c3RyaW5nLCBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cz4gPSB7XG4gIEZBSUxFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX0ZBSUxFRCxcbiAgU1VDQ0VFREVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fU1VDQ0VFREVELFxuICBTVEFSVEVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fU1RBUlRFRCxcbiAgQ0FOQ0VMRUQ6IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9DQU5DRUxFRCxcbiAgU1VQRVJTRURFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX1NVUEVSU0VERUQsXG59O1xuXG5mdW5jdGlvbiBwYXJzZU5vdGlmaWNhdGlvbkV2ZW50cyh2YWx1ZTogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSk7XG4gIHJldHVybiBbJ0ZBSUxFRCcsICdTVUNDRUVERUQnXTtcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBhIHNpbmdsZSBgcGIuZGVwbG95c2AgdG9rZW4gKHN0YWdlIG5hbWUgb3IgZW52aXJvbm1lbnQpIHRvXG4gKiBDb2RlUGlwZWxpbmUtdGFnLXNhZmUgY2hhcmFjdGVycy4gYDpgIGFuZCBgK2AgYXJlIHRoZSBwYWlyL2xpc3QgZGVsaW1pdGVycywgc29cbiAqIHRoZXkgKGFuZCBhbnkgb3RoZXIgZGlzYWxsb3dlZCBjaGFyKSBhcmUgc3RyaXBwZWQgdG8gYC1gIGluc2lkZSBhIHRva2VuIHRvXG4gKiBrZWVwIHRoZSB2YWx1ZSB1bmFtYmlndW91c2x5IHBhcnNlYWJsZSBhbmQgSlNPTi1mcmVlLlxuICovXG5mdW5jdGlvbiB0YWdTYWZlVG9rZW4odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bXkEtWmEtejAtOS5fL0A9LV0vZywgJy0nKTtcbn1cblxuLyoqIEFXUyB0YWctdmFsdWUgaGFyZCBsaW1pdDsgYHBiLmRlcGxveXNgIG11c3QgbmV2ZXIgZXhjZWVkIHRoaXMuICovXG5jb25zdCBNQVhfVEFHX1ZBTFVFX0xFTkdUSCA9IDI1NjtcblxuLyoqIEEgcmVzb2x2ZWQgZGVwbG95IGF0dHJpYnV0aW9uOiBhIHNhbml0aXplZCBgPHN0YWdlPjo8ZW52PmAgdG9rZW4gcGx1cyBpdHMgZW52LiAqL1xuaW50ZXJmYWNlIERlcGxveVBhaXIge1xuICByZWFkb25seSBzdHI6IHN0cmluZztcbiAgcmVhZG9ubHkgZW52OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGBwYi5kZXBsb3lzYCB0YWcgdmFsdWU6IGA8c3RhZ2U+OjxlbnY+YCBwYWlycyBqb2luZWQgYnkgYCtgLlxuICpcbiAqIEEgc3RhZ2UgaXMgYSBkZXBsb3kgaWZmIGl0IGRlY2xhcmVzIGFuIGBlbnZpcm9ubWVudGAuIFByZWNlZGVuY2U6XG4gKiAgLSBNdWx0aS1lbnY6IGFueSBzdGFnZSB3aXRoIGEgcGVyLXN0YWdlIGBlbnZpcm9ubWVudGAg4oCUIGxpc3QgZWFjaCBzdWNoIHN0YWdlLlxuICogIC0gU2luZ2xlLWVudjogbm8gcGVyLXN0YWdlIGVudmlyb25tZW50IGJ1dCBhIHBpcGVsaW5lLWxldmVsIGBlbnZpcm9ubWVudGAg4oCUXG4gKiAgICBhdHRyaWJ1dGUgaXQgdG8gdGhlIHNvbGUgc3RhZ2UgKGA8b25seVN0YWdlPjo8ZW52PmApLCB0aGUgTEFTVCBzdGFnZSBvZiBhXG4gKiAgICBtdWx0aS1zdGFnZSBwaXBlbGluZSAoZGVwbG95cyBhcmUgY29udmVudGlvbmFsbHkgdGhlIGZpbmFsIHN0YWdlIOKAlCBlbWl0dGVkXG4gKiAgICB3aXRoIGEgc3ludGggd2FybmluZyByZWNvbW1lbmRpbmcgZXhwbGljaXQgcGVyLXN0YWdlIGBlbnZpcm9ubWVudGApLCBvciBhXG4gKiAgICBsaXRlcmFsIGBEZXBsb3k6PGVudj5gIHdoZW4gdGhlcmUgYXJlIG5vIHN0YWdlcyB0byBuYW1lLlxuICpcbiAqIFRoZSBhc3NlbWJsZWQgdmFsdWUgaXMgY2FwcGVkIGF0IEFXUydzIDI1Ni1jaGFyIHRhZy12YWx1ZSBsaW1pdCAoRDYpOiB0aGVcbiAqIGhlYWRsaW5lL3Byb2R1Y3Rpb24gcGFpciBpcyBrZXB0IGZpcnN0IGFuZCB0cmFpbGluZyBvdmVyZmxvdyBwYWlycyBhcmUgZHJvcHBlZFxuICogd2l0aCBhIHN5bnRoIHdhcm5pbmcgbmFtaW5nIHRoZW0uIE5ldmVyIHJldHVybnMgYSB2YWx1ZSBsb25nZXIgdGhhbiAyNTYgY2hhcnMuXG4gKlxuICogUmV0dXJucyB1bmRlZmluZWQgd2hlbiBub3RoaW5nIGRlY2xhcmVzIGFuIGVudmlyb25tZW50IChubyBkZXBsb3kgc2lnbmFsKS5cbiAqL1xuZnVuY3Rpb24gYnVpbGREZXBsb3lzVGFnKHByb3BzOiBCdWlsZGVyUHJvcHMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBzdGFnZXMgPSBwcm9wcy5zdGFnZXMgPz8gW107XG4gIGNvbnN0IHN0YWdlc1dpdGhFbnYgPSBzdGFnZXMuZmlsdGVyKHMgPT4gdHlwZW9mIHMuZW52aXJvbm1lbnQgPT09ICdzdHJpbmcnICYmIHMuZW52aXJvbm1lbnQubGVuZ3RoID4gMCk7XG5cbiAgbGV0IHBhaXJzOiBEZXBsb3lQYWlyW107XG4gIGlmIChzdGFnZXNXaXRoRW52Lmxlbmd0aCA+IDApIHtcbiAgICBwYWlycyA9IHN0YWdlc1dpdGhFbnYubWFwKHMgPT4gKHtcbiAgICAgIHN0cjogYCR7dGFnU2FmZVRva2VuKHMuc3RhZ2VOYW1lKX06JHt0YWdTYWZlVG9rZW4ocy5lbnZpcm9ubWVudCBhcyBzdHJpbmcpfWAsXG4gICAgICBlbnY6IHMuZW52aXJvbm1lbnQgYXMgc3RyaW5nLFxuICAgIH0pKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5lbnZpcm9ubWVudCkge1xuICAgIGxldCBzdGFnZU5hbWU6IHN0cmluZztcbiAgICBpZiAoc3RhZ2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgc3RhZ2VOYW1lID0gc3RhZ2VzWzBdLnN0YWdlTmFtZTtcbiAgICB9IGVsc2UgaWYgKHN0YWdlcy5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBQaXBlbGluZS1sZXZlbCBlbnZpcm9ubWVudCBvbiBhIG11bHRpLXN0YWdlIHBpcGVsaW5lOiBhdHRyaWJ1dGUgaXQgdG8gdGhlXG4gICAgICAvLyBMQVNUIHN0YWdlIChkZXBsb3lzIGFyZSBjb252ZW50aW9uYWxseSBmaW5hbCkgcmF0aGVyIHRoYW4gYW4gdW5tYXRjaGVkXG4gICAgICAvLyBsaXRlcmFsIGBEZXBsb3lgLiBXYXJuIHNvIGF1dGhvcnMgbW92ZSB0byBleHBsaWNpdCBwZXItc3RhZ2UgYGVudmlyb25tZW50YC5cbiAgICAgIHN0YWdlTmFtZSA9IHN0YWdlc1tzdGFnZXMubGVuZ3RoIC0gMV0uc3RhZ2VOYW1lO1xuICAgICAgY3JlYXRlTG9nZ2VyKCdwaXBlbGluZS1idWlsZGVyJykud2FybihcbiAgICAgICAgYFBpcGVsaW5lLWxldmVsIGVudmlyb25tZW50IFwiJHtwcm9wcy5lbnZpcm9ubWVudH1cIiBhdHRyaWJ1dGVkIHRvIHRoZSBsYXN0IHN0YWdlIGAgK1xuICAgICAgICBgXCIke3N0YWdlTmFtZX1cIiBvZiBhICR7c3RhZ2VzLmxlbmd0aH0tc3RhZ2UgcGlwZWxpbmUuIERlY2xhcmUgYSBwZXItc3RhZ2UgYCArXG4gICAgICAgICdgZW52aXJvbm1lbnRgIG9uIHRoZSBhY3R1YWwgZGVwbG95IHN0YWdlKHMpIGZvciBwcmVjaXNlIERPUkEgYXR0cmlidXRpb24uJyxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YWdlTmFtZSA9ICdEZXBsb3knO1xuICAgIH1cbiAgICBwYWlycyA9IFt7IHN0cjogYCR7dGFnU2FmZVRva2VuKHN0YWdlTmFtZSl9OiR7dGFnU2FmZVRva2VuKHByb3BzLmVudmlyb25tZW50KX1gLCBlbnY6IHByb3BzLmVudmlyb25tZW50IH1dO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gY2FwRGVwbG95c1ZhbHVlKHBhaXJzKTtcbn1cblxuLyoqXG4gKiBKb2luIGBwYi5kZXBsb3lzYCBwYWlycyB3aXRoIGArYCwgY2FwcGVkIGF0IHtAbGluayBNQVhfVEFHX1ZBTFVFX0xFTkdUSH0uIFdoZW5cbiAqIHRoZSBmdWxsIHZhbHVlIHdvdWxkIGV4Y2VlZCB0aGUgY2FwLCB0aGUgaGVhZGxpbmUvcHJvZHVjdGlvbiBwYWlyIGlzIHBsYWNlZFxuICogZmlyc3QgYW5kIG9ubHkgdGhlIGxlYWRpbmcgcGFpcnMgdGhhdCBmaXQgYXJlIGtlcHQ7IHRoZSB0cmFpbGluZyBvdmVyZmxvdyBwYWlyc1xuICogYXJlIGRyb3BwZWQgYW5kIG5hbWVkIGluIGEgc3ludGggd2FybmluZy4gTmV2ZXIgZW1pdHMgbW9yZSB0aGFuIDI1NiBjaGFycy5cbiAqL1xuZnVuY3Rpb24gY2FwRGVwbG95c1ZhbHVlKHBhaXJzOiBEZXBsb3lQYWlyW10pOiBzdHJpbmcge1xuICBjb25zdCBmdWxsID0gcGFpcnMubWFwKHAgPT4gcC5zdHIpLmpvaW4oJysnKTtcbiAgaWYgKGZ1bGwubGVuZ3RoIDw9IE1BWF9UQUdfVkFMVUVfTEVOR1RIKSByZXR1cm4gZnVsbDtcblxuICAvLyBQcmlvcml0aXplIHRoZSBoZWFkbGluZSBwYWlyIOKAlCB0aGUgcHJvZHVjdGlvbiBkZXBsb3kgaWYgcHJlc2VudCwgZWxzZSB0aGVcbiAgLy8gZmlyc3QgcGFpciDigJQgc28gYSBjYXAgbmV2ZXIgZHJvcHMgdGhlIG1vc3Qgb3BlcmF0aW9uYWxseS1zaWduaWZpY2FudCBkZXBsb3kuXG4gIGNvbnN0IGhlYWRsaW5lSWR4ID0gcGFpcnMuZmluZEluZGV4KHAgPT4gcC5lbnYudG9Mb3dlckNhc2UoKSA9PT0gJ3Byb2R1Y3Rpb24nKTtcbiAgY29uc3Qgb3JkZXJlZCA9IGhlYWRsaW5lSWR4ID4gMFxuICAgID8gW3BhaXJzW2hlYWRsaW5lSWR4XSwgLi4ucGFpcnMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBoZWFkbGluZUlkeCldXG4gICAgOiBwYWlycztcblxuICBjb25zdCBrZXB0OiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBkcm9wcGVkOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHAgb2Ygb3JkZXJlZCkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGtlcHQubGVuZ3RoID09PSAwID8gcC5zdHIgOiBgJHtrZXB0LmpvaW4oJysnKX0rJHtwLnN0cn1gO1xuICAgIGlmIChjYW5kaWRhdGUubGVuZ3RoIDw9IE1BWF9UQUdfVkFMVUVfTEVOR1RIKSB7XG4gICAgICBrZXB0LnB1c2gocC5zdHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkcm9wcGVkLnB1c2gocC5zdHIpO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZUxvZ2dlcigncGlwZWxpbmUtYnVpbGRlcicpLndhcm4oXG4gICAgYHBiLmRlcGxveXMgdGFnIHZhbHVlIGV4Y2VlZGVkIHRoZSAke01BWF9UQUdfVkFMVUVfTEVOR1RIfS1jaGFyIEFXUyB0YWctdmFsdWUgbGltaXQ7IGAgK1xuICAgIGBkcm9wcGVkICR7ZHJvcHBlZC5sZW5ndGh9IGRlcGxveSBwYWlyKHMpOiAke2Ryb3BwZWQuam9pbignLCAnKX0uIGAgK1xuICAgICdUaGVzZSBlbnZpcm9ubWVudHMgd2lsbCBub3QgcHJvZHVjZSBET1JBIGRlcGxveSBzaWduYWxzIOKAlCByZWR1Y2Ugc3RhZ2UvZW52aXJvbm1lbnQgJyArXG4gICAgJ25hbWUgbGVuZ3RocyBvciBzcGxpdCBpbnRvIHNlcGFyYXRlIHBpcGVsaW5lcy4nLFxuICApO1xuICByZXR1cm4ga2VwdC5qb2luKCcrJyk7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgUGlwZWxpbmVCdWlsZGVyIGNvbnN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJQcm9wcyB7XG4gIC8qKiBQcm9qZWN0IGlkZW50aWZpZXIgKHdpbGwgYmUgc2FuaXRpemVkIHRvIGxvd2VyY2FzZSBhbHBoYW51bWVyaWMgd2l0aCB1bmRlcnNjb3JlcykgKi9cbiAgcmVhZG9ubHkgcHJvamVjdDogc3RyaW5nO1xuXG4gIC8qKiBPcmdhbml6YXRpb24gaWRlbnRpZmllciAod2lsbCBiZSBzYW5pdGl6ZWQgdG8gbG93ZXJjYXNlIGFscGhhbnVtZXJpYyB3aXRoIHVuZGVyc2NvcmVzKSAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVwbG95IGVudmlyb25tZW50IChlLmcuIGBwcm9kdWN0aW9uYCwgYHN0YWdpbmdgKSBmb3IgdGhlXG4gICAqIHNpbmdsZS1lbnZpcm9ubWVudCBjYXNlLiBXaGVuIHNldCAoYW5kIG5vIHN0YWdlIGRlY2xhcmVzIGl0cyBvd25cbiAgICogYGVudmlyb25tZW50YCksIHBpcGVsaW5lLWNvcmUgZGVyaXZlcyB0aGUgYHBiLmRlcGxveXNgIHRhZyBmcm9tIGl0LCBtYXJraW5nXG4gICAqIHRoZSBzb2xlIHN0YWdlIOKAlCBvciB0aGUgTEFTVCBzdGFnZSBvZiBhIG11bHRpLXN0YWdlIHBpcGVsaW5lICh3aXRoIGEgc3ludGhcbiAgICogd2FybmluZyksIG9yIGEgbGl0ZXJhbCBgRGVwbG95YCBzdGFnZSB3aGVuIHRoZXJlIGFyZSBubyBzdGFnZXMgdG8gbmFtZSDigJQgYXNcbiAgICogdGhlIGRlcGxveSBmb3IgRE9SQSBtZXRyaWNzLiBGb3IgbXVsdGktZW52aXJvbm1lbnQgcGlwZWxpbmVzLCBkZWNsYXJlXG4gICAqIGBlbnZpcm9ubWVudGAgcGVyIHN0YWdlIGluc3RlYWQgKHNlZSBgU3RhZ2VPcHRpb25zLmVudmlyb25tZW50YCkuXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IHN0cmluZztcblxuICAvKiogVGVuYW50IGlkZW50aWZpZXIgZm9yIHJlc29sdmluZyBwZXItb3JnIHNlY3JldHMgZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyICovXG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuXG4gIC8qKiBQaXBlbGluZSBkYXRhYmFzZSByZWNvcmQgSUQg4oCUIGluamVjdGVkIGFzIFBJUEVMSU5FX0lEIGVudiB2YXIgZm9yIGF1dG9ub21vdXMgc3ludGggKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVJZD86IHN0cmluZztcblxuICAvKiogT3B0aW9uYWwgY3VzdG9tIHBpcGVsaW5lIG5hbWUuIERlZmF1bHRzIHRvOiB7b3JnYW5pemF0aW9ufS17cHJvamVjdH0tcGlwZWxpbmUgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBHbG9iYWwgbWV0YWRhdGEgaW5oZXJpdGVkIGJ5IGFsbCBwaXBlbGluZSBzdGVwcyAqL1xuICByZWFkb25seSBnbG9iYWw/OiBNZXRhRGF0YVR5cGU7XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lLWxldmVsIHRlbXBsYXRlIHZhcmlhYmxlcywgZXhwb3NlZCB0byBge3sgcGlwZWxpbmUudmFycy4qIH19YCBpblxuICAgKiBwaXBlbGluZSBjb25maWdzIGFuZCBwbHVnaW4gc3BlY3MgKHNlZSBgUGx1Z2luU3BlYy5yZXF1aXJlZFZhcnNgKS4gRGVjbGFyZWRcbiAgICogaGVyZSBzbyB0aGUgYHBpcGVsaW5lLnZhcnNgIHRlbXBsYXRlIHNjb3BlIGlzIHR5cGUtY2hlY2tlZCBlbmQtdG8tZW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFycz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBQaXBlbGluZS1sZXZlbCBDb2RlQnVpbGQgZGVmYXVsdHMgYXBwbGllZCB0byBhbGwgQ29kZUJ1aWxkIGFjdGlvbnNcbiAgICogKHN5bnRoLCBzZWxmLW11dGF0aW9uLCBhc3NldCBwdWJsaXNoaW5nKSB2aWEgYGNvZGVCdWlsZERlZmF1bHRzYC5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRzPzogQ29kZUJ1aWxkRGVmYXVsdHM7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIElBTSByb2xlIGZvciB0aGUgQ29kZVBpcGVsaW5lLlxuICAgKiBXaGVuIHByb3ZpZGVkLCByZXNvbHZlcyB0byBhIENESyBJUm9sZSBhbmQgaXMgcGFzc2VkIHRvIHRoZSBDb2RlUGlwZWxpbmUgY29uc3RydWN0LlxuICAgKiBXaGVuIG9taXR0ZWQsIENESyBhdXRvLWNyZWF0ZXMgYSByb2xlIHdpdGggdGhlIGNvcnJlY3QgY29kZXBpcGVsaW5lLmFtYXpvbmF3cy5jb20gcHJpbmNpcGFsLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZT86IFJvbGVDb25maWc7XG5cbiAgLyoqIFN5bnRoZXNpcyBjb25maWd1cmF0aW9uIGluY2x1ZGluZyBzb3VyY2UgYW5kIHBsdWdpbiBkZXRhaWxzICovXG4gIHJlYWRvbmx5IHN5bnRoOiBTeW50aE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHBpcGVsaW5lIHN0YWdlcywgZWFjaCBjb250YWluaW5nIG9uZSBvciBtb3JlIENvZGVCdWlsZCBzdGVwcy5cbiAgICogU3RhZ2VzIGFyZSBhZGRlZCBhcyB3YXZlcyB0byB0aGUgQ29kZVBpcGVsaW5lIGFmdGVyIHRoZSBzeW50aCBzdGVwLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VzPzogU3RhZ2VPcHRpb25zW107XG5cbiAgLyoqIE9wdGlvbmFsIGNyb24vcmF0ZSBleHByZXNzaW9uIGZvciBzY2hlZHVsZWQgcGlwZWxpbmUgZXhlY3V0aW9uLiAqL1xuICByZWFkb25seSBzY2hlZHVsZT86IHN0cmluZztcblxuICAvKiogQ3VzdG9tIHRhZ3MgYXBwbGllZCB0byBhbGwgcGlwZWxpbmUgcmVzb3VyY2VzLiAqL1xuICByZWFkb25seSB0YWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogUGx1Z2lucyBwcmUtcmVzb2x2ZWQgYnkgYHBpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgc3ludGhgIGZyb20gdGhlIHBsYXRmb3JtIEFQSSxcbiAgICoga2V5ZWQgYnkgYGFsaWFzIHx8IG5hbWVgLiBXaGVuIHByZXNlbnQsIGBQbHVnaW5Mb29rdXAucGx1Z2luKClgIHJldHVybnNcbiAgICogdGhlIG1hdGNoaW5nIGVudHJ5IGRpcmVjdGx5IGFuZCBza2lwcyB0aGUgY3VzdG9tIHJlc291cmNlIOKAlCBzbyB0aGVcbiAgICogc3ludGhlc2l6ZWQgQ0ZOIHRlbXBsYXRlIHNoaXBzIHdpdGggdGhlIHJlYWwgQ29kZUJ1aWxkIGltYWdlIGJha2VkIGluLlxuICAgKiBQb3B1bGF0ZWQgYnkgdGhlIENMSSBiZWZvcmUgaW52b2tpbmcgdGhlIGJvaWxlcnBsYXRlIGFwcDsgQ0RLIGNvbnN1bWVyc1xuICAgKiB3aG8gY29uc3RydWN0IFBpcGVsaW5lQnVpbGRlciBkaXJlY3RseSBub3JtYWxseSBsZWF2ZSB0aGlzIHVuc2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZWRQbHVnaW5zPzogUmVjb3JkPHN0cmluZywgUGx1Z2luPjtcblxuICAvKipcbiAgICogUGxhdGZvcm0tc291cmNlZCByZWdpc3RyeSBvdmVycmlkZXMsIGFwcGxpZWQgb3ZlciB0aGUgZW52LWxvYWRlZCBgcmVnaXN0cnlgXG4gICAqIGNvbmZpZyBhdCBzeW50aCBzdGFydC4gcGlwZWxpbmUtbWFuYWdlciBwb3B1bGF0ZXMgdGhpcyBmcm9tIHRoZSBwbGF0Zm9ybSBVUkxcbiAgICogaXQgZGVwbG95cyBhZ2FpbnN0IHNvIHRoZSBDb2RlQnVpbGQgaW1hZ2UgVVJJcyB1c2UgYSBwdWxsIGhvc3QgQVdTIENvZGVCdWlsZFxuICAgKiBjYW4gcmVzb2x2ZSAoaW5zdGVhZCBvZiB0aGUgaW4tY2x1c3RlciBgcmVnaXN0cnk6NTAwMGAgZGVmYXVsdCkuIENES1xuICAgKiBjb25zdW1lcnMgY29uc3RydWN0aW5nIFBpcGVsaW5lQnVpbGRlciBkaXJlY3RseSBub3JtYWxseSBsZWF2ZSB0aGlzIHVuc2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaXN0cnk/OiBQYXJ0aWFsPFJlZ2lzdHJ5Q29uZmlnPjtcbn1cblxuLyoqXG4gKiBDREsgY29uc3RydWN0IHRoYXQgY3JlYXRlcyBhbmQgY29uZmlndXJlcyBhIENvZGVQaXBlbGluZSBmb3IgY29udGludW91cyBkZXBsb3ltZW50LlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBNdWx0aS1zb3VyY2Ugc3VwcG9ydCAoUzMsIEdpdEh1YiwgQ29kZVN0YXIpXG4gKiAtIFBsdWdpbi1iYXNlZCBidWlsZCBzdGVwc1xuICogLSBNZXRhZGF0YS1kcml2ZW4gY29uZmlndXJhdGlvblxuICogLSBBdXRvbWF0aWMgdGFnZ2luZ1xuICogLSBBdXRvbWF0aWMgc2FuaXRpemF0aW9uIG9mIHByb2plY3QgYW5kIG9yZ2FuaXphdGlvbiBuYW1lc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBuZXcgUGlwZWxpbmVCdWlsZGVyKHRoaXMsICdNeVBpcGVsaW5lJywge1xuICogICBwcm9qZWN0OiAnbXktYXBwJyxcbiAqICAgb3JnYW5pemF0aW9uOiAnbXktb3JnJyxcbiAqICAgc3ludGg6IHtcbiAqICAgICBzb3VyY2U6IHtcbiAqICAgICAgIHR5cGU6ICdnaXRodWInLFxuICogICAgICAgb3B0aW9uczogeyByZXBvOiAnb3duZXIvcmVwbycsIGJyYW5jaDogJ21haW4nIH1cbiAqICAgICB9LFxuICogICAgIHBsdWdpbjogeyBuYW1lOiAnc3ludGgnIH1cbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFBpcGVsaW5lQnVpbGRlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBwaXBlbGluZTogQ29kZVBpcGVsaW5lO1xuICBwdWJsaWMgcmVhZG9ubHkgY29uZmlnOiBQaXBlbGluZUNvbmZpZ3VyYXRpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJ1aWxkZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBBcHBseSBwbGF0Zm9ybS1zb3VyY2VkIHJlZ2lzdHJ5IG92ZXJyaWRlcyBCRUZPUkUgYW55IENvbmZpZy5nZXQoJ3JlZ2lzdHJ5JylcbiAgICAvLyAocGx1Z2luL2RlZmF1bHQgYnVpbGQtaW1hZ2UgcmVzb2x1dGlvbiBiZWxvdykgc28gdGhlIHN5bnRoIHVzZXMgdGhlIHB1bGxcbiAgICAvLyBob3N0IHRoZSBwbGF0Zm9ybSBkZXBsb3lzIGFnYWluc3QsIG5vdCB0aGUgaW4tY2x1c3RlciBlbnYgZGVmYXVsdC4gVGhlIENMSVxuICAgIC8vIG9ubHkgc2V0cyBwcm9wcy5yZWdpc3RyeSB3aGVuIElNQUdFX1JFR0lTVFJZX1BVTExfSE9TVCBpcyB1bnNldCwgc28gYW5cbiAgICAvLyBleHBsaWNpdCBvcGVyYXRvciBwdWxsIGhvc3QgaXMgbmV2ZXIgY2xvYmJlcmVkIChzZWUgYmFrZVBsYXRmb3JtUmVnaXN0cnkpLlxuICAgIC8vXG4gICAgLy8gU2NvcGVkICsgcmVzdG9yZWQgc28gdGhlIG92ZXJyaWRlIGRvZXMgTk9UIGxlYWsgaW50byB0aGUgcHJvY2Vzcy13aWRlXG4gICAgLy8gQ29uZmlnIGNhY2hlOiBpbiBhIG11bHRpLXBpcGVsaW5lIENESyBhcHAsIHBpcGVsaW5lIEIncyByZWdpc3RyeSBtdXN0IG5vdFxuICAgIC8vIGJsZWVkIGludG8gcGlwZWxpbmUgQSdzIGltYWdlIHJlc29sdXRpb24uIEFsbCByZWdpc3RyeSByZWFkcyBoYXBwZW5cbiAgICAvLyBzeW5jaHJvbm91c2x5IGJlbG93IChidWlsZC1pbWFnZSByZXNvbHV0aW9uKSwgc28gcmVzdG9yaW5nIGF0IHRoZSBlbmQgb2ZcbiAgICAvLyB0aGUgY29uc3RydWN0b3Iga2VlcHMgc2luZ2xlLXBpcGVsaW5lIGJlaGF2aW9yIGlkZW50aWNhbC5cbiAgICBjb25zdCByZXN0b3JlUmVnaXN0cnkgPSBwcm9wcy5yZWdpc3RyeVxuICAgICAgPyBDb25maWcub3ZlcnJpZGVTY29wZWQoJ3JlZ2lzdHJ5JywgcHJvcHMucmVnaXN0cnkpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgLy8gVXNlIFBpcGVsaW5lQ29uZmlndXJhdGlvbiBmb3IgYWxsIGJ1c2luZXNzIGxvZ2ljICh2YWxpZGF0aW9uLCBzYW5pdGl6YXRpb24sIG1ldGFkYXRhIG1lcmdpbmcpXG4gICAgICB0aGlzLmNvbmZpZyA9IG5ldyBQaXBlbGluZUNvbmZpZ3VyYXRpb24ocHJvcHMpO1xuXG4gICAgICBjb25zdCBzZXJ2ZXJDb25maWcgPSBDb25maWcuZ2V0KCdzZXJ2ZXInKTtcbiAgICAgIGNvbnN0IGF3c0NvbmZpZyA9IENvbmZpZy5nZXQoJ2F3cycpO1xuICAgICAgLy8gUGFzcyBvcmcrcHJvamVjdCBzbyBsb2cgZ3JvdXAgLyBJQU0gcm9sZSBuYW1lcyBnZXQgYSBzdGFibGUgaGFzaFxuICAgICAgLy8gc3VmZml4IHBlciBwaXBlbGluZS4gUHJldmVudHMgYFJlc291cmNlIGFscmVhZHkgZXhpc3RzYCBjb2xsaXNpb25zXG4gICAgICAvLyBhY3Jvc3Mgc3RhY2tzIGRlcGxveWVkIHRvIHRoZSBzYW1lIEFXUyBhY2NvdW50LlxuICAgICAgY29uc3QgdW5pcXVlSWQgPSBuZXcgVW5pcXVlSWQoe1xuICAgICAgICBvcmdhbml6YXRpb246IHRoaXMuY29uZmlnLm9yZ2FuaXphdGlvbixcbiAgICAgICAgcHJvamVjdDogdGhpcy5jb25maWcucHJvamVjdCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcGx1Z2luTG9va3VwID0gbmV3IFBsdWdpbkxvb2t1cChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdW5pcXVlSWQuZ2VuZXJhdGUoJ3BsdWdpbjpsb29rdXAnKSxcbiAgICAgICAge1xuICAgICAgICAgIG9yZ2FuaXphdGlvbjogdGhpcy5jb25maWcub3JnYW5pemF0aW9uLFxuICAgICAgICAgIHByb2plY3Q6IHRoaXMuY29uZmlnLnByb2plY3QsXG4gICAgICAgICAgcGxhdGZvcm1Vcmw6IHNlcnZlckNvbmZpZy5wbGF0Zm9ybVVybCxcbiAgICAgICAgICB1bmlxdWVJZCxcbiAgICAgICAgICBvcmdJZDogcHJvcHMub3JnSWQsXG4gICAgICAgICAgcnVudGltZTogbGFtYmRhUnVudGltZShhd3NDb25maWcubGFtYmRhLnJ1bnRpbWUpLFxuICAgICAgICAgIHRpbWVvdXQ6IGxhbWJkYVRpbWVvdXQoYXdzQ29uZmlnLmxhbWJkYS50aW1lb3V0U2Vjb25kcyksXG4gICAgICAgICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9uczogYXdzQ29uZmlnLmxhbWJkYS5yZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zLFxuICAgICAgICAgIHJlc29sdmVkUGx1Z2luczogcHJvcHMucmVzb2x2ZWRQbHVnaW5zLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgLy8gQ3JlYXRlIHNvdXJjZSBhbmQgYnVpbGQgc3RlcFxuICAgICAgY29uc3Qgc291cmNlQnVpbGRlciA9IG5ldyBTb3VyY2VCdWlsZGVyKHRoaXMsIHRoaXMuY29uZmlnKTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZUJ1aWxkZXIuY3JlYXRlKHVuaXF1ZUlkKTtcblxuICAgICAgLy8gU3ludGgtcGx1Z2luIHJlc29sdXRpb246XG4gICAgICAvLyAgIDEuIFByZS1yZXNvbHZlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBzeW50aC9kZXBsb3lgIGZyb20gdGhlIHBsYXRmb3JtXG4gICAgICAvLyAgICAgIEFQSSDihpIgdXNlIGl0LiBTeW50aCBzdGVwIHJ1bnMgb24gdGhlIHJlYWwgYGNkay1zeW50aGAgaW1hZ2Ugd2l0aFxuICAgICAgLy8gICAgICByZWFsIGNvbW1hbmRzIGJha2VkIGludG8gdGhlIHRlbXBsYXRlLlxuICAgICAgLy8gICAyLiBPdGhlcndpc2Ug4oaSIGBib290c3RyYXAoKWA6IGNvbGQtc3RhcnQgYHBpcGVsaW5lLW1hbmFnZXIgcGlwZWxpbmUgc3ludGhgXG4gICAgICAvLyAgICAgIG9uIHRoZSBjb25maWd1cmVkIENPREVCVUlMRF9ERUZBVUxUX0lNQUdFIChkZWZhdWx0XG4gICAgICAvLyAgICAgIHBpcGVsaW5lLWJvb3RzdHJhcDoxLjApLiBVc2VkIHdoZW4gdGhlIHBsYXRmb3JtIGlzbid0IHJlYWNoYWJsZVxuICAgICAgLy8gICAgICBhdCBzeW50aCB0aW1lIChDTEkgbG9ncyBhIHdhcm5pbmcgcGVyIG1pc3NlZCBwbHVnaW4pLlxuICAgICAgLy9cbiAgICAgIC8vIHBsdWdpbkxvb2t1cC5wbHVnaW4oKSByZWFkcyBgcmVzb2x2ZWRQbHVnaW5zYCBpbnRlcm5hbGx5IGFuZCByZXR1cm5zXG4gICAgICAvLyB0aGUgY2FjaGVkIGVudHJ5IHdoZW4gcHJlc2VudCDigJQgc28gY2FsbGluZyBpdCBhbHdheXMgd2lucyBvdmVyXG4gICAgICAvLyBib290c3RyYXAoKSB3aGVuIHByZS1yZXNvbHV0aW9uIHN1Y2NlZWRlZC5cbiAgICAgIGNvbnN0IHN5bnRoQ2FjaGVLZXkgPVxuICAgICAgdGhpcy5jb25maWcucGx1Z2luLmFsaWFzIHx8IGAke3RoaXMuY29uZmlnLnBsdWdpbi5uYW1lfS1hbGlhc2A7XG4gICAgICBjb25zdCBwbHVnaW4gPSBwcm9wcy5yZXNvbHZlZFBsdWdpbnM/LltzeW50aENhY2hlS2V5XVxuICAgICAgICA/IHBsdWdpbkxvb2t1cC5wbHVnaW4odGhpcy5jb25maWcucGx1Z2luKVxuICAgICAgICA6IHBsdWdpbkxvb2t1cC5ib290c3RyYXAoKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRDb21wdXRlVHlwZSA9IGdldENvbXB1dGVUeXBlKGF3c0NvbmZpZy5jb2RlQnVpbGQuY29tcHV0ZVR5cGUpO1xuICAgICAgY29uc3QgYXJ0aWZhY3RNYW5hZ2VyID0gbmV3IEFydGlmYWN0TWFuYWdlcigpO1xuICAgICAgY29uc3Qgc3ludGhBbGlhcyA9IHRoaXMuY29uZmlnLnBsdWdpbi5hbGlhcyA/PyB0aGlzLmNvbmZpZy5wbHVnaW4ubmFtZTtcblxuICAgICAgLy8gU2NvcGUgZXhwb3NlZCB0byBwbHVnaW4tc3BlYyB0ZW1wbGF0ZXMgYXMgYHBpcGVsaW5lLipgLiBTb3VyY2VkIGZyb20gdGhlXG4gICAgICAvLyBjb25maWcgc28gdGhlIHN5bnRoIHN0ZXAsIGV2ZXJ5IHN0YWdlIHN0ZXAsIGFuZCB0aGUgc291cmNlIHRva2VuIGFsbFxuICAgICAgLy8gcmVzb2x2ZSBhZ2FpbnN0IHRoZSBzYW1lIHNuYXBzaG90IChzZWUgUGlwZWxpbmVDb25maWd1cmF0aW9uLmdldFBpcGVsaW5lU2NvcGUpLlxuICAgICAgY29uc3QgcGlwZWxpbmVTY29wZSA9IHRoaXMuY29uZmlnLmdldFBpcGVsaW5lU2NvcGUoKTtcblxuICAgICAgY29uc3Qgc3ludGggPSBjcmVhdGVDb2RlQnVpbGRTdGVwKHtcbiAgICAgICAgLi4udGhpcy5jb25maWcuc3ludGhDdXN0b21pemF0aW9uLFxuICAgICAgICBpZDogdW5pcXVlSWQuZ2VuZXJhdGUoJ2NkazpzeW50aCcpLFxuICAgICAgICB1bmlxdWVJZCxcbiAgICAgICAgcGx1Z2luLFxuICAgICAgICBpbnB1dDogc291cmNlLFxuICAgICAgICBtZXRhZGF0YTogdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkLFxuICAgICAgICBuZXR3b3JrOiB0aGlzLmNvbmZpZy5uZXR3b3JrLFxuICAgICAgICBzY29wZTogdGhpcyxcbiAgICAgICAgZGVmYXVsdENvbXB1dGVUeXBlLFxuICAgICAgICBhcnRpZmFjdE1hbmFnZXIsXG4gICAgICAgIHN0YWdlTmFtZTogJ25vLXN0YWdlJyxcbiAgICAgICAgc3RhZ2VBbGlhczogJ25vLXN0YWdlLWFsaWFzJyxcbiAgICAgICAgcGx1Z2luQWxpYXM6IGAke3N5bnRoQWxpYXN9LWFsaWFzYCxcbiAgICAgICAgb3JnSWQ6IHByb3BzLm9yZ0lkLFxuICAgICAgICBwaXBlbGluZVNjb3BlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFJlc29sdmUgcGlwZWxpbmUtbGV2ZWwgZGVmYXVsdHMgaW50byBjb2RlQnVpbGREZWZhdWx0c1xuICAgICAgLy8gQnVpbGQgdGhlIHBlci1vcmcgcGxhdGZvcm0gc2VjcmV0IG5hbWUgZm9yIENvZGVCdWlsZCBlbnYgdmFyc1xuICAgICAgY29uc3QgcGxhdGZvcm1TZWNyZXROYW1lID0gcHJvcHMub3JnSWRcbiAgICAgICAgPyBDb3JlQ29uc3RhbnRzLnNlY3JldFBhdGgocHJvcHMub3JnSWQsICdwbGF0Zm9ybScpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBjb2RlQnVpbGREZWZhdWx0cyA9IHRoaXMucmVzb2x2ZURlZmF1bHRzKHRoaXMuY29uZmlnLmRlZmF1bHRzLCB1bmlxdWVJZCwgcHJvcHMucGlwZWxpbmVJZCwgcGxhdGZvcm1TZWNyZXROYW1lLCBzZXJ2ZXJDb25maWcucGxhdGZvcm1VcmwsIHByb3BzLm9yZ0lkKTtcblxuICAgICAgLy8gUmVzb2x2ZSBJQU0gcm9sZTogZXhwbGljaXQgcHJvcCB3aW5zLCBlbHNlIGBpYW06cm9sZWAgbWV0YWRhdGEsIGVsc2UgbGV0XG4gICAgICAvLyBDREsgYXV0by1jcmVhdGUgdGhlIHBpcGVsaW5lIHJvbGUgKGNvZGVwaXBlbGluZS5hbWF6b25hd3MuY29tIHByaW5jaXBhbCkuXG4gICAgICBjb25zdCByb2xlQ29uZmlnID0gcHJvcHMucm9sZSA/PyByb2xlQ29uZmlnRnJvbU1ldGFkYXRhKHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZCk7XG4gICAgICBpZiAocm9sZUNvbmZpZz8udHlwZSA9PT0gJ2NvZGVCdWlsZERlZmF1bHQnKSB7XG4gICAgICAgIGNyZWF0ZUxvZ2dlcigncGlwZWxpbmUtYnVpbGRlcicpLndhcm4oXG4gICAgICAgICAgJ2NvZGVCdWlsZERlZmF1bHQgcm9sZSB0eXBlIHVzZXMgY29kZWJ1aWxkLmFtYXpvbmF3cy5jb20gdHJ1c3QgcHJpbmNpcGFsIOKAlCAnICtcbiAgICAgICAgJ3RoaXMgaXMgbm90IHN1aXRhYmxlIGFzIHRoZSBwaXBlbGluZS1sZXZlbCByb2xlLiBDb25zaWRlciB1c2luZyByb2xlQXJuL3JvbGVOYW1lICcgK1xuICAgICAgICAnb3Igb21pdHRpbmcgdGhlIHJvbGUgdG8gbGV0IENESyBhdXRvLWNyZWF0ZSBvbmUgd2l0aCBjb2RlcGlwZWxpbmUuYW1hem9uYXdzLmNvbS4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3Qgcm9sZSA9IHJvbGVDb25maWdcbiAgICAgICAgPyByZXNvbHZlUm9sZSh0aGlzLCB1bmlxdWVJZCwgcm9sZUNvbmZpZylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIC8vIOKUgOKUgCBBcnRpZmFjdCBidWNrZXQgKEtNUyBlbmNyeXB0aW9uICsgcmV0ZW50aW9uKSDilIDilIBcbiAgICAgIC8vIFdoZW4gYGVuY3J5cHRpb24ua21zS2V5QXJuYCBhbmQvb3IgYG9wZXJhdGlvbnMuYXJ0aWZhY3RSZXRlbnRpb25EYXlzYCBhcmVcbiAgICAgIC8vIHNldCB3ZSBjcmVhdGUgYSBjdXN0b20gYXJ0aWZhY3QgYnVja2V0IGFuZCBwYXNzIGl0IHRvIENvZGVQaXBlbGluZTsgdGhhdFxuICAgICAgLy8gaXMgdGhlIG9ubHkgd2F5IHRvIGF0dGFjaCBhIGN1c3RvbWVyLW1hbmFnZWQga2V5ICh0aGUgTDMgY29uc3RydWN0IGV4cG9zZXNcbiAgICAgIC8vIGBhcnRpZmFjdEJ1Y2tldGAsIG5vdCBgZW5jcnlwdGlvbktleWApLiBBYnNlbnQgYm90aCBrZXlzLCBDREsgYXV0by1jcmVhdGVzXG4gICAgICAvLyB0aGUgYnVja2V0IGFuZCBiZWhhdmlvciBpcyB1bmNoYW5nZWQuXG4gICAgICBjb25zdCBhcnRpZmFjdEJ1Y2tldCA9IHRoaXMuYnVpbGRBcnRpZmFjdEJ1Y2tldCgpO1xuXG4gICAgICAvLyBDcmVhdGUgQ29kZVBpcGVsaW5lIGNvbnN0cnVjdFxuICAgICAgdGhpcy5waXBlbGluZSA9IG5ldyBDb2RlUGlwZWxpbmUodGhpcywgdW5pcXVlSWQuZ2VuZXJhdGUoJ3BpcGVsaW5lczpjb2RlcGlwZWxpbmUnKSwge1xuICAgICAgICAuLi4oY29kZUJ1aWxkRGVmYXVsdHMgJiYgeyBjb2RlQnVpbGREZWZhdWx0cyB9KSxcbiAgICAgICAgLi4uKHJvbGUgJiYgeyByb2xlIH0pLFxuICAgICAgICAuLi4oYXJ0aWZhY3RCdWNrZXQgJiYgeyBhcnRpZmFjdEJ1Y2tldCB9KSxcbiAgICAgICAgcGlwZWxpbmVUeXBlOiBQaXBlbGluZVR5cGUuVjIsXG4gICAgICAgIHBpcGVsaW5lTmFtZTogdGhpcy5jb25maWcucGlwZWxpbmVOYW1lLFxuICAgICAgICBzeW50aCxcbiAgICAgICAgLi4ubWV0YWRhdGFGb3JDb2RlUGlwZWxpbmUodGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkKSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocHJvcHMuc3RhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHN0YWdlQnVpbGRlciA9IG5ldyBTdGFnZUJ1aWxkZXIoe1xuICAgICAgICAgIHNjb3BlOiB0aGlzLFxuICAgICAgICAgIHBsdWdpbkxvb2t1cCxcbiAgICAgICAgICB1bmlxdWVJZCxcbiAgICAgICAgICBnbG9iYWxNZXRhZGF0YTogdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkLFxuICAgICAgICAgIGRlZmF1bHRDb21wdXRlVHlwZSxcbiAgICAgICAgICBhcnRpZmFjdE1hbmFnZXIsXG4gICAgICAgICAgb3JnSWQ6IHByb3BzLm9yZ0lkLFxuICAgICAgICAgIHBpcGVsaW5lU2NvcGUsXG4gICAgICAgIH0pO1xuICAgICAgICBzdGFnZUJ1aWxkZXIuYWRkU3RhZ2VzKHRoaXMucGlwZWxpbmUsIHByb3BzLnN0YWdlcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIOKUgOKUgCBUYWdzIOKUgOKUgFxuICAgICAgLy8gVGhlIGZpcnN0IHRocmVlIGFyZSBvcGVyYXRpb25zLWVzc2VudGlhbCBhbmQgdXNlZCBieSBgcGlwZWxpbmUtbWFuYWdlclxuICAgICAgLy8gYXVkaXQgc3RhY2tzYCB0byBkaWZmIENGTiBzdGFja3MgYWdhaW5zdCB0aGUgcGlwZWxpbmVfcmVnaXN0cnkgdGFibGUuXG4gICAgICAvLyBgT3JnSWRgIGlzIHRoZSBjYW5vbmljYWwga2V5IGZvciBjb3N0IGF0dHJpYnV0aW9uIChBV1MgQ29zdCBFeHBsb3JlclxuICAgICAgLy8gZ3JvdXBzIGJ5IHRhZyBrZXkvdmFsdWUgd2hlbiBhY3RpdmF0ZWQgaW4gQmlsbGluZyBzZXR0aW5ncykuXG4gICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgncGlwZWxpbmUtYnVpbGRlcicsICd0cnVlJyk7XG4gICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgncHJvamVjdCcsIHRoaXMuY29uZmlnLnByb2plY3QpO1xuICAgICAgVGFncy5vZih0aGlzLnBpcGVsaW5lKS5hZGQoJ29yZ2FuaXphdGlvbicsIHRoaXMuY29uZmlnLm9yZ2FuaXphdGlvbik7XG4gICAgICBpZiAocHJvcHMub3JnSWQpIHtcbiAgICAgICAgVGFncy5vZih0aGlzLnBpcGVsaW5lKS5hZGQoJ09yZ0lkJywgcHJvcHMub3JnSWQpO1xuICAgICAgfVxuICAgICAgLy8gU3RhYmxlIGV2ZW50LXJlcG9ydGluZyBrZXkuIEFwcGxpZWQgYXQgc3ludGggKHRoZSBwaXBlbGluZUlkIGlzIGtub3duXG4gICAgICAvLyBoZXJlKSwgc28gaXQncyBwcmVzZW50IGZyb20gc3RhY2sgY3JlYXRpb24g4oCUIHRoZSBldmVudHMgTGFtYmRhIHJlYWRzIHRoaXNcbiAgICAgIC8vIHRhZyB0byBhdHRyaWJ1dGUgQ29kZVBpcGVsaW5lIHN0YXRlLWNoYW5nZSBldmVudHMgdG8gdGhlIHBpcGVsaW5lIHdpdGhvdXRcbiAgICAgIC8vIGV2ZXIgaGFuZGxpbmcgdGhlIEFSTi9hY2NvdW50LiBTZWUgcGFja2FnZXMvcGlwZWxpbmUtZXZlbnRzLlxuICAgICAgaWYgKHByb3BzLnBpcGVsaW5lSWQpIHtcbiAgICAgICAgVGFncy5vZih0aGlzLnBpcGVsaW5lKS5hZGQoJ3BiLnBpcGVsaW5lLWlkJywgcHJvcHMucGlwZWxpbmVJZCk7XG4gICAgICB9XG4gICAgICAvLyBEZXBsb3ktZW52aXJvbm1lbnQgYXR0cmlidXRpb24gZm9yIERPUkEgbWV0cmljcy4gYHBiLmRlcGxveXNgIGxpc3RzIGV2ZXJ5XG4gICAgICAvLyBkZXBsb3kgc3RhZ2UgYXMgYDxzdGFnZU5hbWU+OjxlbnZpcm9ubWVudD5gIHBhaXJzIGpvaW5lZCBieSBgK2AsIHJlYWQgYnlcbiAgICAgIC8vIHRoZSBldmVudHMgTGFtYmRhIGZyb20gdGhlIHNhbWUgTGlzdFRhZ3MgY2FsbCB0byBtYXJrIHdoaWNoIHN0YWdlcyBhcmVcbiAgICAgIC8vIGRlcGxveXMgYW5kIHRvIHdoaWNoIGVudmlyb25tZW50LiBBYnNlbnQgd2hlbiBubyBlbnZpcm9ubWVudCBpcyBkZWNsYXJlZFxuICAgICAgLy8g4oCUIHN1Y2ggcGlwZWxpbmVzIHByb2R1Y2Ugbm8gRE9SQSBkZXBsb3kgc2lnbmFsIHVudGlsIHRoZXkgcmUtc3ludGguXG4gICAgICBjb25zdCBkZXBsb3lzVGFnID0gYnVpbGREZXBsb3lzVGFnKHByb3BzKTtcbiAgICAgIGlmIChkZXBsb3lzVGFnKSB7XG4gICAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdwYi5kZXBsb3lzJywgZGVwbG95c1RhZyk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMudGFncykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcm9wcy50YWdzKSkge1xuICAgICAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEJ1aWxkIHRoZSBpbnRlcm5hbCBwaXBlbGluZSBiZWZvcmUgYWNjZXNzaW5nIGl0cyBwcm9wZXJ0aWVzXG4gICAgICB0aGlzLnBpcGVsaW5lLmJ1aWxkUGlwZWxpbmUoKTtcbiAgICAgIGNvbnN0IGNka1BpcGVsaW5lID0gdGhpcy5waXBlbGluZS5waXBlbGluZTtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQ7XG5cbiAgICAgIC8vIOKUgOKUgCBQaXBlbGluZS1sZXZlbCBWYXJpYWJsZXMgKENvZGVQaXBlbGluZSBWMikg4pSA4pSAXG4gICAgICBmb3IgKGNvbnN0IHYgb2YgcGFyc2VQaXBlbGluZVZhcmlhYmxlcyhtZXRhW01ldGFkYXRhS2V5cy5QSVBFTElORV9WQVJJQUJMRVNdKSkge1xuICAgICAgICBjZGtQaXBlbGluZS5hZGRWYXJpYWJsZShuZXcgVmFyaWFibGUoe1xuICAgICAgICAgIHZhcmlhYmxlTmFtZTogdi5uYW1lLFxuICAgICAgICAgIC4uLih2LmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHsgZGVmYXVsdFZhbHVlOiB2LmRlZmF1bHRWYWx1ZSB9KSxcbiAgICAgICAgICAuLi4odi5kZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkICYmIHsgZGVzY3JpcHRpb246IHYuZGVzY3JpcHRpb24gfSksXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIFNOUyBOb3RpZmljYXRpb25zIOKUgOKUgFxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uVG9waWNBcm4gPSBtZXRhW01ldGFkYXRhS2V5cy5OT1RJRklDQVRJT05fVE9QSUNfQVJOXTtcbiAgICAgIGlmICh0eXBlb2Ygbm90aWZpY2F0aW9uVG9waWNBcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IHRvcGljID0gc25zLlRvcGljLmZyb21Ub3BpY0Fybih0aGlzLCAnTm90aWZpY2F0aW9uVG9waWMnLCBub3RpZmljYXRpb25Ub3BpY0Fybik7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbkV2ZW50cyA9IHBhcnNlTm90aWZpY2F0aW9uRXZlbnRzKG1ldGFbTWV0YWRhdGFLZXlzLk5PVElGSUNBVElPTl9FVkVOVFNdKVxuICAgICAgICAgIC5tYXAoZSA9PiBQSVBFTElORV9FVkVOVF9NQVBbZS50b1VwcGVyQ2FzZSgpXSlcbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICBpZiAobm90aWZpY2F0aW9uRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjZGtQaXBlbGluZS5ub3RpZnlPbignUGlwZWxpbmVOb3RpZmljYXRpb24nLCB0b3BpYywgeyBldmVudHM6IG5vdGlmaWNhdGlvbkV2ZW50cyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDilIDilIAgU2NoZWR1bGVkIEV4ZWN1dGlvbiDilIDilIBcbiAgICAgIGlmIChwcm9wcy5zeW50aC5zb3VyY2Uub3B0aW9ucz8udHJpZ2dlciA9PT0gVHJpZ2dlclR5cGUuU0NIRURVTEUgfHwgcHJvcHMuc2NoZWR1bGUpIHtcbiAgICAgICAgY29uc3QgZXhwciA9IHByb3BzLnNjaGVkdWxlIHx8IChwcm9wcy5zeW50aC5zb3VyY2Uub3B0aW9ucyBhcyB7IHNjaGVkdWxlPzogc3RyaW5nIH0pPy5zY2hlZHVsZSB8fCAncmF0ZSgxIGRheSknO1xuICAgICAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ1NjaGVkdWxlUnVsZScsIHtcbiAgICAgICAgICBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLmV4cHJlc3Npb24oZXhwciksXG4gICAgICAgICAgdGFyZ2V0czogW25ldyB0YXJnZXRzLkNvZGVQaXBlbGluZShjZGtQaXBlbGluZSldLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIEV4ZWN1dGlvbiBFdmVudCBUcmFja2luZyAoZm9yd2FyZCBwaXBlbGluZSBzdGF0ZSBjaGFuZ2VzIHRvIFNOUykg4pSA4pSAXG4gICAgICBpZiAobWV0YVtNZXRhZGF0YUtleXMuRU5BQkxFX0VYRUNVVElPTl9FVkVOVFNdICYmIHR5cGVvZiBub3RpZmljYXRpb25Ub3BpY0FybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbmV3IGV2ZW50cy5SdWxlKHRoaXMsICdFeGVjdXRpb25FdmVudFJ1bGUnLCB7XG4gICAgICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgICAgICBzb3VyY2U6IFsnYXdzLmNvZGVwaXBlbGluZSddLFxuICAgICAgICAgICAgZGV0YWlsVHlwZTogWydDb2RlUGlwZWxpbmUgUGlwZWxpbmUgRXhlY3V0aW9uIFN0YXRlIENoYW5nZSddLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbY2RrUGlwZWxpbmUucGlwZWxpbmVBcm5dLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGFyZ2V0czogW25ldyB0YXJnZXRzLlNuc1RvcGljKFxuICAgICAgICAgICAgc25zLlRvcGljLmZyb21Ub3BpY0Fybih0aGlzLCAnRXhlY3V0aW9uRXZlbnRUb3BpYycsIG5vdGlmaWNhdGlvblRvcGljQXJuKSxcbiAgICAgICAgICApXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIOKUgOKUgCBQaXBlbGluZSBNZXRyaWNzICYgQWxhcm1zIOKUgOKUgFxuICAgICAgY29uc3QgZW5hYmxlTWV0cmljcyA9IHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZFtNZXRhZGF0YUtleXMuRU5BQkxFX01FVFJJQ1NdO1xuICAgICAgaWYgKGVuYWJsZU1ldHJpY3MpIHtcbiAgICAgICAgbmV3IGNsb3Vkd2F0Y2guQWxhcm0odGhpcywgJ1BpcGVsaW5lRmFpbHVyZUFsYXJtJywge1xuICAgICAgICAgIG1ldHJpYzogbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgICAgICAgIG5hbWVzcGFjZTogJ0FXUy9Db2RlUGlwZWxpbmUnLFxuICAgICAgICAgICAgbWV0cmljTmFtZTogJ0ZhaWxlZFBpcGVsaW5lRXhlY3V0aW9uQ291bnQnLFxuICAgICAgICAgICAgZGltZW5zaW9uc01hcDogeyBQaXBlbGluZU5hbWU6IHRoaXMuY29uZmlnLnBpcGVsaW5lTmFtZSB9LFxuICAgICAgICAgICAgc3RhdGlzdGljOiAnU3VtJyxcbiAgICAgICAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDEsXG4gICAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogYFBpcGVsaW5lICR7dGhpcy5jb25maWcucGlwZWxpbmVOYW1lfSBleGVjdXRpb24gZmFpbGVkYCxcbiAgICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6IGNsb3Vkd2F0Y2guQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogY2xvdWR3YXRjaC5UcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBSZXZlcnQgdGhlIHBlci1idWlsZGVyIHJlZ2lzdHJ5IG92ZXJyaWRlIHNvIGl0IG5ldmVyIGxlYWtzIGludG8gdGhlXG4gICAgICAvLyBwcm9jZXNzLXdpZGUgQ29uZmlnIGNhY2hlIChzZWUgdGhlIG92ZXJyaWRlIGF0IHRoZSB0b3Agb2YgdGhlIGNvbnN0cnVjdG9yKS5cbiAgICAgIHJlc3RvcmVSZWdpc3RyeT8uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgY3VzdG9tIGFydGlmYWN0IGJ1Y2tldCB3aGVuIGBlbmNyeXB0aW9uLmttc0tleUFybmAgYW5kL29yXG4gICAqIGBvcGVyYXRpb25zLmFydGlmYWN0UmV0ZW50aW9uRGF5c2AgYXJlIHNldC4gUmV0dXJucyB1bmRlZmluZWQgb3RoZXJ3aXNlIHNvXG4gICAqIENESyBhdXRvLWNyZWF0ZXMgdGhlIGRlZmF1bHQgYXJ0aWZhY3QgYnVja2V0ICh1bmNoYW5nZWQgYmVoYXZpb3IpLlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEFydGlmYWN0QnVja2V0KCk6IHMzLklCdWNrZXQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQ7XG4gICAgY29uc3Qga21zS2V5QXJuID0gdHlwZW9mIG1ldGFbTWV0YWRhdGFLZXlzLktNU19LRVlfQVJOXSA9PT0gJ3N0cmluZydcbiAgICAgID8gKG1ldGFbTWV0YWRhdGFLZXlzLktNU19LRVlfQVJOXSBhcyBzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXRlbnRpb25EYXlzID0gYXNJbnQobWV0YVtNZXRhZGF0YUtleXMuQVJUSUZBQ1RfUkVURU5USU9OX0RBWVNdKTtcblxuICAgIGlmICgha21zS2V5QXJuICYmIHJldGVudGlvbkRheXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBrbXNLZXlBcm5cbiAgICAgID8ga21zLktleS5mcm9tS2V5QXJuKHRoaXMsICdBcnRpZmFjdEtleScsIGttc0tleUFybilcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgYnVja2V0ID0gbmV3IHMzLkJ1Y2tldCh0aGlzLCAnQXJ0aWZhY3RCdWNrZXQnLCB7XG4gICAgICBlbmNyeXB0aW9uOiBlbmNyeXB0aW9uS2V5ID8gczMuQnVja2V0RW5jcnlwdGlvbi5LTVMgOiBzMy5CdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgICAuLi4oZW5jcnlwdGlvbktleSAmJiB7IGVuY3J5cHRpb25LZXkgfSksXG4gICAgICAuLi4ocmV0ZW50aW9uRGF5cyAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgbGlmZWN5Y2xlUnVsZXM6IFt7IGV4cGlyYXRpb246IER1cmF0aW9uLmRheXMocmV0ZW50aW9uRGF5cykgfV0sXG4gICAgICB9KSxcbiAgICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgICBibG9ja1B1YmxpY0FjY2VzczogczMuQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgfSk7XG4gICAgVGFncy5vZihidWNrZXQpLmFkZCgncGlwZWxpbmUnLCB0aGlzLmNvbmZpZy5waXBlbGluZU5hbWUpO1xuICAgIHJldHVybiBidWNrZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgQ29kZUJ1aWxkRGVmYXVsdHMgaW50byB0aGUgc2hhcGUgZXhwZWN0ZWQgYnkgQ0RLJ3MgY29kZUJ1aWxkRGVmYXVsdHMuXG4gICAqIENvbWJpbmVzIG5ldHdvcmsgY29uZmlnLCBzZWN1cml0eSBncm91cHMsIGFuZCBwaXBlbGluZS1sZXZlbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICogKFBJUEVMSU5FX0lELCBFWEVDVVRJT05fSUQsIFBMQVRGT1JNX0JBU0VfVVJMKSBhdmFpbGFibGUgdG8gYWxsIENvZGVCdWlsZCBhY3Rpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlRGVmYXVsdHMoXG4gICAgZGVmYXVsdHM6IENvZGVCdWlsZERlZmF1bHRzIHwgdW5kZWZpbmVkLFxuICAgIGlkOiBVbmlxdWVJZCxcbiAgICBwaXBlbGluZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcGxhdGZvcm1TZWNyZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcGxhdGZvcm1Vcmw6IHN0cmluZyxcbiAgICBvcmdJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICApOiBDb2RlQnVpbGRPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBQZXItcGlwZWxpbmUgbmV0d29yayBjb25maWcgd2luczsgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBhbiBlbnYtZHJpdmVuXG4gICAgLy8gZ2xvYmFsIFZQQyAoaW50ZXJuYWwgLyBpbnNpZGUtQVdTLW9ubHkgbW9kZSkgc28gZXZlcnkgcGlwZWxpbmUnc1xuICAgIC8vIENvZGVCdWlsZCBydW5zIGluIHRoZSBWUEMgYW5kIGNhbiByZWFjaCB0aGUgcHJpdmF0ZSBnYXRld2F5LiBVbnNldCBpblxuICAgIC8vIHB1YmxpYyBkZXBsb3lzIOKGkiBDb2RlQnVpbGQgc3RheXMgaW4gdGhlIEFXUy1tYW5hZ2VkIG5ldHdvcmsuXG4gICAgLy8gUHJlY2VkZW5jZTogZXhwbGljaXQgcHJvcCA+IGBlYzI6bmV0d29ya2AgbWV0YWRhdGEgPiBlbnYtZHJpdmVuIGdsb2JhbCBWUEMuXG4gICAgY29uc3QgbmV0d29yayA9IGRlZmF1bHRzPy5uZXR3b3JrID8/IG5ldHdvcmtDb25maWdGcm9tTWV0YWRhdGEodGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkKSA/PyBuZXR3b3JrQ29uZmlnRnJvbUVudigpO1xuICAgIGNvbnN0IG5ldHdvcmtQcm9wcyA9IG5ldHdvcmtcbiAgICAgID8gcmVzb2x2ZU5ldHdvcmsodGhpcywgaWQsIG5ldHdvcmspXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIFNhbWUgcHJlY2VkZW5jZSBmb3Igc3RhbmRhbG9uZSBzZWN1cml0eSBncm91cHMgKHByb3AgPiBgZWMyOnNlY3VyaXR5Z3JvdXBgIG1ldGFkYXRhKS5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwQ29uZmlnID0gZGVmYXVsdHM/LnNlY3VyaXR5R3JvdXBzID8/IHNlY3VyaXR5R3JvdXBDb25maWdGcm9tTWV0YWRhdGEodGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkKTtcbiAgICBjb25zdCBzdGFuZGFsb25lU2VjdXJpdHlHcm91cHMgPSBzZWN1cml0eUdyb3VwQ29uZmlnXG4gICAgICA/IHJlc29sdmVTZWN1cml0eUdyb3VwKHRoaXMsIGlkLCBzZWN1cml0eUdyb3VwQ29uZmlnKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBQaXBlbGluZS1sZXZlbCBlbnYgdmFycyBhdmFpbGFibGUgdG8gYWxsIENvZGVCdWlsZCBhY3Rpb25zXG4gICAgLy8gTm90ZTogI3tjb2RlcGlwZWxpbmUuKn0gcmVzb2x2ZWQgdmFyaWFibGVzIG11c3QgZ28gdGhyb3VnaCBDb2RlQnVpbGRTdGVwLmVudlxuICAgIC8vIChhY3Rpb24tbGV2ZWwpLCBub3QgYnVpbGRFbnZpcm9ubWVudC5lbnZpcm9ubWVudFZhcmlhYmxlcyAocHJvamVjdC1sZXZlbCkuXG4gICAgY29uc3QgcGlwZWxpbmVFbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiBzdHJpbmcgfT4gPSB7XG4gICAgICBQTEFURk9STV9CQVNFX1VSTDogeyB2YWx1ZTogcGxhdGZvcm1VcmwgfSxcbiAgICAgIC4uLihwaXBlbGluZUlkICYmIHsgUElQRUxJTkVfSUQ6IHsgdmFsdWU6IHBpcGVsaW5lSWQgfSB9KSxcbiAgICAgIC4uLihwbGF0Zm9ybVNlY3JldE5hbWUgJiYgeyBQTEFURk9STV9TRUNSRVRfTkFNRTogeyB2YWx1ZTogcGxhdGZvcm1TZWNyZXROYW1lIH0gfSksXG4gICAgICAvLyBQcm9wYWdhdGUgVExTIHZlcmlmaWNhdGlvbiBzZXR0aW5nIHNvIGFsbCBDb2RlQnVpbGQgc3RlcHMgY2FuIHJlYWNoXG4gICAgICAvLyB0aGUgcGxhdGZvcm0gQVBJIHdoZW4gdXNpbmcgc2VsZi1zaWduZWQgY2VydGlmaWNhdGVzXG4gICAgICAuLi4ocHJvY2Vzcy5lbnYuTk9ERV9UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRCA9PT0gJzAnICYmIHtcbiAgICAgICAgTk9ERV9UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRDogeyB2YWx1ZTogJzAnIH0sXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VjdXJpdHlHcm91cHMgPSBbXG4gICAgICAuLi4obmV0d29ya1Byb3BzPy5zZWN1cml0eUdyb3VwcyA/PyBbXSksXG4gICAgICAuLi4oc3RhbmRhbG9uZVNlY3VyaXR5R3JvdXBzID8/IFtdKSxcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihuZXR3b3JrUHJvcHMgJiYgeyB2cGM6IG5ldHdvcmtQcm9wcy52cGMsIHN1Ym5ldFNlbGVjdGlvbjogbmV0d29ya1Byb3BzLnN1Ym5ldFNlbGVjdGlvbiB9KSxcbiAgICAgIC4uLihzZWN1cml0eUdyb3Vwcy5sZW5ndGggPiAwICYmIHsgc2VjdXJpdHlHcm91cHMgfSksXG4gICAgICAvLyBidWlsZEltYWdlIGF0IHRoaXMgbGV2ZWwgcmVhY2hlcyBDREsgUGlwZWxpbmVzJyBpbnRlcm5hbGx5LXdyYXBwZWRcbiAgICAgIC8vIFNoZWxsU3RlcCBDb2RlQnVpbGQgYWN0aW9uLCB3aGljaCBvdGhlcndpc2UgaGFyZGNvZGVzXG4gICAgICAvLyBDREsncyBkZWZhdWx0IGN1cmF0ZWQgc3RhbmRhcmQgaW1hZ2UuIFNldHRpbmcgaXQgaGVyZSBjbG9zZXMgdGhlIGdhcFxuICAgICAgLy8gZXhwb3NlZCBpbiB0aGUgc2FtZSBlbnYgdmFyIChgQ09ERUJVSUxEX0RFRkFVTFRfSU1BR0VgKSB0aGF0IHRoZVxuICAgICAgLy8gQ29kZUJ1aWxkU3RlcCBwYXRoIGFscmVhZHkgaG9ub3JzIHZpYSByZXNvbHZlUGx1Z2luSW1hZ2UoKSdzXG4gICAgICAvLyBmYWxsYmFjay4gUGVyLXN0ZXAgYGJ1aWxkSW1hZ2VgIG9uIGEgQ29kZUJ1aWxkU3RlcCBzdGlsbCB3aW5zLlxuICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICBidWlsZEltYWdlOiByZXNvbHZlRGVmYXVsdEJ1aWxkSW1hZ2UodGhpcywgb3JnSWQpLFxuICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczogcGlwZWxpbmVFbnZWYXJzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -125,6 +125,14 @@ export interface StageOptions {
|
|
|
125
125
|
readonly alias?: string;
|
|
126
126
|
/** Build steps to execute within this stage */
|
|
127
127
|
readonly steps: StageStepOptions[];
|
|
128
|
+
/**
|
|
129
|
+
* Deploy environment this stage targets (e.g. `production`, `staging`).
|
|
130
|
+
* Declaring it marks the stage as a **deploy** for DORA metrics: pipeline-core
|
|
131
|
+
* lists every such stage in the `pb.deploys` tag as `<stageName>:<environment>`
|
|
132
|
+
* so the events Lambda can attribute deployments per environment. Omit it and
|
|
133
|
+
* the stage is not treated as a deploy.
|
|
134
|
+
*/
|
|
135
|
+
readonly environment?: string;
|
|
128
136
|
}
|
|
129
137
|
/**
|
|
130
138
|
* Options for creating a CodeBuild step in the pipeline
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9zdGVwLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBQbHVnaW5GaWx0ZXIsIFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlVHlwZSBhcyBDZGtDb21wdXRlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHR5cGUgeyBJRmlsZVNldFByb2R1Y2VyIH0gZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IFNvdXJjZVR5cGUgfSBmcm9tICcuL3NvdXJjZS10eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEFydGlmYWN0S2V5LCBBcnRpZmFjdE1hbmFnZXIgfSBmcm9tICcuLi9jb3JlL2FydGlmYWN0LW1hbmFnZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBVbmlxdWVJZCB9IGZyb20gJy4uL2NvcmUvaWQtZ2VuZXJhdG9yLmpzJztcbmltcG9ydCB0eXBlIHsgTmV0d29ya0NvbmZpZyB9IGZyb20gJy4uL2NvcmUvbmV0d29yay10eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1ldGFEYXRhVHlwZSB9IGZyb20gJy4uL2NvcmUvcGlwZWxpbmUtdHlwZXMuanMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHNlbGVjdGluZyBhbmQgY29uZmlndXJpbmcgYSBwbHVnaW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHBsdWdpbiB0byB1c2VcbiAgICogTXVzdCBtYXRjaCBhIHJlZ2lzdGVyZWQgcGx1Z2luIGluIHRoZSBkYXRhYmFzZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhbGlhcyBmb3IgdGhlIHBsdWdpbiBpbnN0YW5jZVxuICAgKiBVc2VmdWwgd2hlbiB1c2luZyB0aGUgc2FtZSBwbHVnaW4gbXVsdGlwbGUgdGltZXMgd2l0aCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBmaWx0ZXIgY3JpdGVyaWEgZm9yIHBsdWdpbiBzZWxlY3Rpb25cbiAgICogQ2FuIGJlIHVzZWQgdG8gc2VsZWN0IHNwZWNpZmljIHBsdWdpbiB2ZXJzaW9ucyBvciB2YXJpYW50c1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyPzogUGx1Z2luRmlsdGVyO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG1ldGFkYXRhIHRvIG1lcmdlIHdpdGggcGx1Z2luJ3MgZGVmYXVsdCBtZXRhZGF0YVxuICAgKiBUaGlzIG1ldGFkYXRhIHdpbGwgYmUgYXZhaWxhYmxlIHRvIHRoZSBwbHVnaW4gZHVyaW5nIGV4ZWN1dGlvblxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBNZXRhRGF0YVR5cGU7XG59XG5cbi8qKlxuICogU3ludGhlc2lzIHN0ZXAgY29uZmlndXJhdGlvbiBjb21iaW5pbmcgc291cmNlIGFuZCBwbHVnaW4uXG4gKiBFeHRlbmRzIFN0ZXBDdXN0b21pemF0aW9uIHRvIHN1cHBvcnQgaW5qZWN0aW5nIGN1c3RvbSBjb21tYW5kcyBhbmQgZW52IHZhcnNcbiAqIGludG8gdGhlIHN5bnRoIENvZGVCdWlsZCBzdGVwIChzYW1lIGhvb2tzIGF2YWlsYWJsZSBhcyBzdGFnZSBzdGVwcykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3ludGhPcHRpb25zIGV4dGVuZHMgU3RlcEN1c3RvbWl6YXRpb24ge1xuICAvKipcbiAgICogU291cmNlIGNvbmZpZ3VyYXRpb24gKFMzLCBHaXRIdWIsIG9yIENvZGVTdGFyKVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlOiBTb3VyY2VUeXBlO1xuXG4gIC8qKlxuICAgKiBQbHVnaW4gdG8gdXNlIGZvciBzeW50aGVzaXNcbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luT3B0aW9ucztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBtZXRhZGF0YSBmb3IgdGhlIHN5bnRoZXNpcyBzdGVwXG4gICAqIFRoaXMgd2lsbCBiZSBtZXJnZWQgd2l0aCBnbG9iYWwgbWV0YWRhdGEgYW5kIHBsdWdpbiBtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBNZXRhRGF0YVR5cGU7XG5cbiAgLyoqXG4gICAqIFN0ZXAtbGV2ZWwgbmV0d29yayBjb25maWd1cmF0aW9uIGFwcGxpZWQgb25seSB0byB0aGUgc3ludGggQ29kZUJ1aWxkIHN0ZXAuXG4gICAqIE92ZXJyaWRlcyB0aGUgcGlwZWxpbmUtbGV2ZWwgYGRlZmF1bHRzLm5ldHdvcmtgIHdoZW4gYm90aCBhcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrPzogTmV0d29ya0NvbmZpZztcbn1cblxuLyoqXG4gKiBQZXItc3RlcCBjdXN0b21pemF0aW9uIG9wdGlvbnMgZm9yIGNvbW1hbmRzIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKiBDdXN0b20gY29tbWFuZHMgYXJlIGluamVjdGVkIGJlZm9yZS9hZnRlciB0aGUgcGx1Z2luJ3MgY29tbWFuZHMuXG4gKiBDdXN0b20gZW52IHZhcnMgYXJlIG1lcmdlZCBvbiB0b3Agb2YgdGhlIHBsdWdpbidzIGRlZmF1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBDdXN0b21pemF0aW9uIHtcbiAgLyoqIENvbW1hbmRzIHRvIHJ1biBiZWZvcmUgdGhlIHBsdWdpbidzIGluc3RhbGwgY29tbWFuZHMgKi9cbiAgcmVhZG9ubHkgcHJlSW5zdGFsbENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqIENvbW1hbmRzIHRvIHJ1biBhZnRlciB0aGUgcGx1Z2luJ3MgaW5zdGFsbCBjb21tYW5kcyAqL1xuICByZWFkb25seSBwb3N0SW5zdGFsbENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqIENvbW1hbmRzIHRvIHJ1biBiZWZvcmUgdGhlIHBsdWdpbidzIGJ1aWxkIGNvbW1hbmRzICovXG4gIHJlYWRvbmx5IHByZUNvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqIENvbW1hbmRzIHRvIHJ1biBhZnRlciB0aGUgcGx1Z2luJ3MgYnVpbGQgY29tbWFuZHMgKi9cbiAgcmVhZG9ubHkgcG9zdENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqIEN1c3RvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbWVyZ2VkIG9uIHRvcCBvZiB0aGUgcGx1Z2luJ3MgZW52ICovXG4gIHJlYWRvbmx5IGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogQW4gYWRkaXRpb25hbCBpbnB1dCBhcnRpZmFjdCB3aXRoIGFuIG9wdGlvbmFsIG1vdW50IGRpcmVjdG9yeS5cbiAqIFdoZW4gZGlyZWN0b3J5IGlzIG9taXR0ZWQsIGRlZmF1bHRzIHRvIHRoZSBhcnRpZmFjdCdzIG91dHB1dERpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRpdGlvbmFsSW5wdXRBcnRpZmFjdENvbmZpZyB7XG4gIC8qKiBBcnRpZmFjdCBrZXkgaWRlbnRpZnlpbmcgdGhlIHNvdXJjZSBzdGVwJ3Mgb3V0cHV0ICovXG4gIHJlYWRvbmx5IGFydGlmYWN0OiBBcnRpZmFjdEtleTtcblxuICAvKiogRGlyZWN0b3J5IHRvIG1vdW50IHRoZSBpbnB1dCBhdC4gRGVmYXVsdHMgdG8gYXJ0aWZhY3Qub3V0cHV0RGlyZWN0b3J5IHdoZW4gb21pdHRlZC4gKi9cbiAgcmVhZG9ubHkgZGlyZWN0b3J5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGEgc2luZ2xlIHN0ZXAgd2l0aGluIGEgcGlwZWxpbmUgc3RhZ2UuXG4gKiBVc2VzIFBsdWdpbk9wdGlvbnMgZm9yIG5hbWUtYmFzZWQgcGx1Z2luIHNlbGVjdGlvbiAocmVzb2x2ZWQgYXQgYnVpbGQgdGltZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VTdGVwT3B0aW9ucyBleHRlbmRzIFN0ZXBDdXN0b21pemF0aW9uIHtcbiAgLyoqIFBsdWdpbiB0byB1c2UgZm9yIHRoaXMgc3RlcCAqL1xuICByZWFkb25seSBwbHVnaW46IFBsdWdpbk9wdGlvbnM7XG5cbiAgLyoqIFN0ZXAtbGV2ZWwgbWV0YWRhdGEgbWVyZ2VkIHdpdGggc3RhZ2UgYW5kIGdsb2JhbCBtZXRhZGF0YSAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE1ldGFEYXRhVHlwZTtcblxuICAvKiogT3B0aW9uYWwgbmV0d29yayBjb25maWd1cmF0aW9uIGZvciB0aGlzIHN0ZXAncyBDb2RlQnVpbGQgYWN0aW9uICovXG4gIHJlYWRvbmx5IG5ldHdvcms/OiBOZXR3b3JrQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBDb2RlQnVpbGQgdGltZW91dCBpbiBtaW51dGVzLlxuICAgKiBAZGVmYXVsdCA2MCAoQVdTIENvZGVCdWlsZCBkZWZhdWx0KVxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlcjtcblxuICAvKipcbiAgICogUG9zaXRpb24gb2YgdGhpcyBzdGVwIHdpdGhpbiB0aGUgcGlwZWxpbmUgd2F2ZS5cbiAgICogLSAncHJlJzogUnVucyBiZWZvcmUgdGhlIHN0YWdlIGRlcGxveW1lbnQgKGRlZmF1bHQpXG4gICAqIC0gJ3Bvc3QnOiBSdW5zIGFmdGVyIHRoZSBzdGFnZSBkZXBsb3ltZW50XG4gICAqIEBkZWZhdWx0ICdwcmUnXG4gICAqL1xuICByZWFkb25seSBwb3NpdGlvbj86ICdwcmUnIHwgJ3Bvc3QnO1xuXG4gIC8qKiBBcnRpZmFjdCBrZXkgZm9yIHRoaXMgc3RlcCdzIHByaW1hcnkgaW5wdXQgKHJlc29sdmVkIHZpYSBBcnRpZmFjdE1hbmFnZXIpICovXG4gIHJlYWRvbmx5IGlucHV0QXJ0aWZhY3Q/OiBBcnRpZmFjdEtleTtcblxuICAvKiogQWRkaXRpb25hbCBpbnB1dCBhcnRpZmFjdHMgZm9yIHRoaXMgc3RlcC4gRWFjaCBlbnRyeSBzcGVjaWZpZXMgYW4gYXJ0aWZhY3QgYW5kIGFuIG9wdGlvbmFsIG1vdW50IGRpcmVjdG9yeS4gKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbElucHV0QXJ0aWZhY3RzPzogQWRkaXRpb25hbElucHV0QXJ0aWZhY3RDb25maWdbXTtcblxuICAvKiogT3ZlcnJpZGUgdGhlIHBsdWdpbidzIGZhaWx1cmUgYmVoYXZpb3IgZm9yIHRoaXMgc3RlcC4gKi9cbiAgcmVhZG9ubHkgZmFpbHVyZUJlaGF2aW9yPzogJ2ZhaWwnIHwgJ3dhcm4nIHwgJ2lnbm9yZSc7XG59XG5cbi8qKlxuICogQSBwaXBlbGluZSBzdGFnZSBjb250YWluaW5nIG9uZSBvciBtb3JlIGJ1aWxkIHN0ZXBzLlxuICogRWFjaCBzdGFnZSBtYXBzIHRvIGEgQ0RLIFBpcGVsaW5lIHdhdmUsIHdpdGggc3RlcHMgZXhlY3V0aW5nIHdpdGhpbiB0aGUgd2F2ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFnZU9wdGlvbnMge1xuICAvKiogRGlzcGxheSBuYW1lIGZvciB0aGlzIHN0YWdlICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuXG4gIC8qKiBPcHRpb25hbCBhbGlhcyB1c2VkIGZvciB3YXZlL2NvbnN0cnVjdCBJRCBnZW5lcmF0aW9uLiBEZWZhdWx0cyB0byBzdGFnZU5hbWUuICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKiBCdWlsZCBzdGVwcyB0byBleGVjdXRlIHdpdGhpbiB0aGlzIHN0YWdlICovXG4gIHJlYWRvbmx5IHN0ZXBzOiBTdGFnZVN0ZXBPcHRpb25zW107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBDb2RlQnVpbGQgc3RlcCBpbiB0aGUgcGlwZWxpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlQnVpbGRTdGVwT3B0aW9ucyBleHRlbmRzIFN0ZXBDdXN0b21pemF0aW9uIHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIENvZGVCdWlsZCBzdGVwXG4gICAqIFNob3VsZCBiZSBkZXNjcmlwdGl2ZSBhbmQgdW5pcXVlIHdpdGhpbiB0aGUgcGlwZWxpbmVcbiAgICogQGV4YW1wbGUgJ215LW9yZy1teS1wcm9qZWN0LXN5bnRoJ1xuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVW5pcXVlSWQgaW5zdGFuY2UgZm9yIGdlbmVyYXRpbmcgdW5pcXVlIGNvbnN0cnVjdCBJRHNcbiAgICogVXNlZCBmb3IgbmV0d29yayByZXNvdXJjZSBsb29rdXBzIChWUEMsIHN1Ym5ldHMsIHNlY3VyaXR5IGdyb3VwcylcbiAgICovXG4gIHJlYWRvbmx5IHVuaXF1ZUlkOiBVbmlxdWVJZDtcblxuICAvKipcbiAgICogUGx1Z2luIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgZGF0YWJhc2VcbiAgICogQ29udGFpbnMgYWxsIHRoZSBwbHVnaW4ncyBzcGVjIGRhdGEgYW5kIHJ1bnRpbWUgaW5mb3JtYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luO1xuXG4gIC8qKlxuICAgKiBDREsgc2NvcGUgdXNlZCB0byBjcmVhdGUgY29uc3RydWN0cyAoVlBDL3N1Ym5ldC9zZWN1cml0eS1ncm91cCBsb29rdXBzKS5cbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG5cbiAgLyoqXG4gICAqIElucHV0IHNvdXJjZSBmb3IgdGhpcyBzdGVwXG4gICAqIFR5cGljYWxseSB0aGUgb3V0cHV0IGZyb20gYSBwcmV2aW91cyBzdGVwIG9yIHRoZSBwaXBlbGluZSBzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IGlucHV0PzogSUZpbGVTZXRQcm9kdWNlcjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBtZXRhZGF0YSB0byBtZXJnZSB3aXRoIHBsdWdpbiBtZXRhZGF0YVxuICAgKiBXaWxsIG92ZXJyaWRlIGNvbmZsaWN0aW5nIGtleXMgZnJvbSBwbHVnaW4gbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogTWV0YURhdGFUeXBlO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBDb2RlQnVpbGQgc3RlcC5cbiAgICogV2hlbiBwcm92aWRlZCwgcmVzb2x2ZXMgVlBDLCBzdWJuZXQgc2VsZWN0aW9uLCBhbmQgc2VjdXJpdHkgZ3JvdXBzXG4gICAqIHNvIHRoZSBidWlsZCBydW5zIGluc2lkZSB0aGUgc3BlY2lmaWVkIG5ldHdvcmsuXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrPzogTmV0d29ya0NvbmZpZztcblxuICAvKipcbiAgICogRmFsbGJhY2sgQ29kZUJ1aWxkIGNvbXB1dGUgdHlwZSB3aGVuIHRoZSBwbHVnaW4gZG9lc24ndCBzcGVjaWZ5IG9uZS5cbiAgICogQGRlZmF1bHQgQ29tcHV0ZVR5cGUuU01BTExcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRDb21wdXRlVHlwZT86IENka0NvbXB1dGVUeXBlO1xuXG4gIC8qKlxuICAgKiBDb2RlQnVpbGQgdGltZW91dCBpbiBtaW51dGVzLlxuICAgKiBAZGVmYXVsdCA2MCAoQVdTIENvZGVCdWlsZCBkZWZhdWx0KVxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlcjtcblxuICAvKiogQWRkaXRpb25hbCBpbnB1dHMgbWFwcGVkIGJ5IGRpcmVjdG9yeSBwYXRoIChyZXNvbHZlZCBGaWxlU2V0cykgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbElucHV0cz86IFJlY29yZDxzdHJpbmcsIElGaWxlU2V0UHJvZHVjZXI+O1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhcnRpZmFjdCBtYW5hZ2VyIGZvciB0cmFja2luZyBidWlsZCBvdXRwdXRzXG4gICAqIFdoZW4gcHJvdmlkZWQgYW5kIHByaW1hcnlPdXRwdXREaXJlY3RvcnkgaXMgc2V0LCB0aGUgc3RlcCB3aWxsIGJlIHJlZ2lzdGVyZWRcbiAgICovXG4gIHJlYWRvbmx5IGFydGlmYWN0TWFuYWdlcj86IEFydGlmYWN0TWFuYWdlcjtcblxuICAvKipcbiAgICogU3RhZ2UgbmFtZSBmb3IgYXJ0aWZhY3Qga2V5IGdlbmVyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogU3RhZ2UgYWxpYXMgZm9yIGFydGlmYWN0IGtleSBnZW5lcmF0aW9uXG4gICAqL1xuICByZWFkb25seSBzdGFnZUFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQbHVnaW4gYWxpYXMgZm9yIGFydGlmYWN0IGtleSBnZW5lcmF0aW9uXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5BbGlhcz86IHN0cmluZztcblxuICAvKipcbiAgICogRmFpbHVyZSBiZWhhdmlvciBmb3IgdGhpcyBzdGVwJ3MgYnVpbGQgY29tbWFuZHMuXG4gICAqIEFwcGxpZWQgYXQgc2hlbGwgbGV2ZWw6ICdmYWlsJyA9IGRlZmF1bHQsICd3YXJuJyA9IGxvZyArIGNvbnRpbnVlLCAnaWdub3JlJyA9IHx8IHRydWUuXG4gICAqL1xuICByZWFkb25seSBmYWlsdXJlQmVoYXZpb3I/OiAnZmFpbCcgfCAnd2FybicgfCAnaWdub3JlJztcblxuICAvKiogVGVuYW50IGlkZW50aWZpZXIgZm9yIHJlc29sdmluZyBwZXItb3JnIHNlY3JldHMgZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyICovXG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQaXBlbGluZS1sZXZlbCBjb25maWcgdXNlZCBhcyB0aGUgYHBpcGVsaW5lLipgIHNjb3BlIHdoZW4gcmVzb2x2aW5nXG4gICAqIHRlbXBsYXRlIHRva2VucyBpbnNpZGUgcGx1Z2luIHNwZWNzLiBSZXF1aXJlZCDigJQgZXZlcnkgYHt7IHBpcGVsaW5lLiogfX1gXG4gICAqIHJlZmVyZW5jZSBpbiBhIHBsdWdpbiBzcGVjIGlzIGV2YWx1YXRlZCBhZ2FpbnN0IHRoaXMgb2JqZWN0IGF0IHN5bnRoIHRpbWUuXG4gICAqXG4gICAqIENhbGxlcnMgY29uc3RydWN0aW5nIGEgc3RlcCBkaXJlY3RseSBtdXN0IHByb3ZpZGUgdGhlIHBpcGVsaW5lIGlkZW50aXR5XG4gICAqICsgbWV0YWRhdGEgKyB2YXJzIHNvIHRlbXBsYXRlIHJlc29sdXRpb24gaXMgbmV2ZXIgc2lsZW50bHkgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuIl19
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9zdGVwLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBQbHVnaW5GaWx0ZXIsIFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlVHlwZSBhcyBDZGtDb21wdXRlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHR5cGUgeyBJRmlsZVNldFByb2R1Y2VyIH0gZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IFNvdXJjZVR5cGUgfSBmcm9tICcuL3NvdXJjZS10eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEFydGlmYWN0S2V5LCBBcnRpZmFjdE1hbmFnZXIgfSBmcm9tICcuLi9jb3JlL2FydGlmYWN0LW1hbmFnZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBVbmlxdWVJZCB9IGZyb20gJy4uL2NvcmUvaWQtZ2VuZXJhdG9yLmpzJztcbmltcG9ydCB0eXBlIHsgTmV0d29ya0NvbmZpZyB9IGZyb20gJy4uL2NvcmUvbmV0d29yay10eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1ldGFEYXRhVHlwZSB9IGZyb20gJy4uL2NvcmUvcGlwZWxpbmUtdHlwZXMuanMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHNlbGVjdGluZyBhbmQgY29uZmlndXJpbmcgYSBwbHVnaW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHBsdWdpbiB0byB1c2VcbiAgICogTXVzdCBtYXRjaCBhIHJlZ2lzdGVyZWQgcGx1Z2luIGluIHRoZSBkYXRhYmFzZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhbGlhcyBmb3IgdGhlIHBsdWdpbiBpbnN0YW5jZVxuICAgKiBVc2VmdWwgd2hlbiB1c2luZyB0aGUgc2FtZSBwbHVnaW4gbXVsdGlwbGUgdGltZXMgd2l0aCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBmaWx0ZXIgY3JpdGVyaWEgZm9yIHBsdWdpbiBzZWxlY3Rpb25cbiAgICogQ2FuIGJlIHVzZWQgdG8gc2VsZWN0IHNwZWNpZmljIHBsdWdpbiB2ZXJzaW9ucyBvciB2YXJpYW50c1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyPzogUGx1Z2luRmlsdGVyO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG1ldGFkYXRhIHRvIG1lcmdlIHdpdGggcGx1Z2luJ3MgZGVmYXVsdCBtZXRhZGF0YVxuICAgKiBUaGlzIG1ldGFkYXRhIHdpbGwgYmUgYXZhaWxhYmxlIHRvIHRoZSBwbHVnaW4gZHVyaW5nIGV4ZWN1dGlvblxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBNZXRhRGF0YVR5cGU7XG59XG5cbi8qKlxuICogU3ludGhlc2lzIHN0ZXAgY29uZmlndXJhdGlvbiBjb21iaW5pbmcgc291cmNlIGFuZCBwbHVnaW4uXG4gKiBFeHRlbmRzIFN0ZXBDdXN0b21pemF0aW9uIHRvIHN1cHBvcnQgaW5qZWN0aW5nIGN1c3RvbSBjb21tYW5kcyBhbmQgZW52IHZhcnNcbiAqIGludG8gdGhlIHN5bnRoIENvZGVCdWlsZCBzdGVwIChzYW1lIGhvb2tzIGF2YWlsYWJsZSBhcyBzdGFnZSBzdGVwcykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3ludGhPcHRpb25zIGV4dGVuZHMgU3RlcEN1c3RvbWl6YXRpb24ge1xuICAvKipcbiAgICogU291cmNlIGNvbmZpZ3VyYXRpb24gKFMzLCBHaXRIdWIsIG9yIENvZGVTdGFyKVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlOiBTb3VyY2VUeXBlO1xuXG4gIC8qKlxuICAgKiBQbHVnaW4gdG8gdXNlIGZvciBzeW50aGVzaXNcbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luT3B0aW9ucztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBtZXRhZGF0YSBmb3IgdGhlIHN5bnRoZXNpcyBzdGVwXG4gICAqIFRoaXMgd2lsbCBiZSBtZXJnZWQgd2l0aCBnbG9iYWwgbWV0YWRhdGEgYW5kIHBsdWdpbiBtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBNZXRhRGF0YVR5cGU7XG5cbiAgLyoqXG4gICAqIFN0ZXAtbGV2ZWwgbmV0d29yayBjb25maWd1cmF0aW9uIGFwcGxpZWQgb25seSB0byB0aGUgc3ludGggQ29kZUJ1aWxkIHN0ZXAuXG4gICAqIE92ZXJyaWRlcyB0aGUgcGlwZWxpbmUtbGV2ZWwgYGRlZmF1bHRzLm5ldHdvcmtgIHdoZW4gYm90aCBhcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrPzogTmV0d29ya0NvbmZpZztcbn1cblxuLyoqXG4gKiBQZXItc3RlcCBjdXN0b21pemF0aW9uIG9wdGlvbnMgZm9yIGNvbW1hbmRzIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKiBDdXN0b20gY29tbWFuZHMgYXJlIGluamVjdGVkIGJlZm9yZS9hZnRlciB0aGUgcGx1Z2luJ3MgY29tbWFuZHMuXG4gKiBDdXN0b20gZW52IHZhcnMgYXJlIG1lcmdlZCBvbiB0b3Agb2YgdGhlIHBsdWdpbidzIGRlZmF1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBDdXN0b21pemF0aW9uIHtcbiAgLyoqIENvbW1hbmRzIHRvIHJ1biBiZWZvcmUgdGhlIHBsdWdpbidzIGluc3RhbGwgY29tbWFuZHMgKi9cbiAgcmVhZG9ubHkgcHJlSW5zdGFsbENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqIENvbW1hbmRzIHRvIHJ1biBhZnRlciB0aGUgcGx1Z2luJ3MgaW5zdGFsbCBjb21tYW5kcyAqL1xuICByZWFkb25seSBwb3N0SW5zdGFsbENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqIENvbW1hbmRzIHRvIHJ1biBiZWZvcmUgdGhlIHBsdWdpbidzIGJ1aWxkIGNvbW1hbmRzICovXG4gIHJlYWRvbmx5IHByZUNvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqIENvbW1hbmRzIHRvIHJ1biBhZnRlciB0aGUgcGx1Z2luJ3MgYnVpbGQgY29tbWFuZHMgKi9cbiAgcmVhZG9ubHkgcG9zdENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgLyoqIEN1c3RvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbWVyZ2VkIG9uIHRvcCBvZiB0aGUgcGx1Z2luJ3MgZW52ICovXG4gIHJlYWRvbmx5IGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogQW4gYWRkaXRpb25hbCBpbnB1dCBhcnRpZmFjdCB3aXRoIGFuIG9wdGlvbmFsIG1vdW50IGRpcmVjdG9yeS5cbiAqIFdoZW4gZGlyZWN0b3J5IGlzIG9taXR0ZWQsIGRlZmF1bHRzIHRvIHRoZSBhcnRpZmFjdCdzIG91dHB1dERpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRpdGlvbmFsSW5wdXRBcnRpZmFjdENvbmZpZyB7XG4gIC8qKiBBcnRpZmFjdCBrZXkgaWRlbnRpZnlpbmcgdGhlIHNvdXJjZSBzdGVwJ3Mgb3V0cHV0ICovXG4gIHJlYWRvbmx5IGFydGlmYWN0OiBBcnRpZmFjdEtleTtcblxuICAvKiogRGlyZWN0b3J5IHRvIG1vdW50IHRoZSBpbnB1dCBhdC4gRGVmYXVsdHMgdG8gYXJ0aWZhY3Qub3V0cHV0RGlyZWN0b3J5IHdoZW4gb21pdHRlZC4gKi9cbiAgcmVhZG9ubHkgZGlyZWN0b3J5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGEgc2luZ2xlIHN0ZXAgd2l0aGluIGEgcGlwZWxpbmUgc3RhZ2UuXG4gKiBVc2VzIFBsdWdpbk9wdGlvbnMgZm9yIG5hbWUtYmFzZWQgcGx1Z2luIHNlbGVjdGlvbiAocmVzb2x2ZWQgYXQgYnVpbGQgdGltZSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VTdGVwT3B0aW9ucyBleHRlbmRzIFN0ZXBDdXN0b21pemF0aW9uIHtcbiAgLyoqIFBsdWdpbiB0byB1c2UgZm9yIHRoaXMgc3RlcCAqL1xuICByZWFkb25seSBwbHVnaW46IFBsdWdpbk9wdGlvbnM7XG5cbiAgLyoqIFN0ZXAtbGV2ZWwgbWV0YWRhdGEgbWVyZ2VkIHdpdGggc3RhZ2UgYW5kIGdsb2JhbCBtZXRhZGF0YSAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IE1ldGFEYXRhVHlwZTtcblxuICAvKiogT3B0aW9uYWwgbmV0d29yayBjb25maWd1cmF0aW9uIGZvciB0aGlzIHN0ZXAncyBDb2RlQnVpbGQgYWN0aW9uICovXG4gIHJlYWRvbmx5IG5ldHdvcms/OiBOZXR3b3JrQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBDb2RlQnVpbGQgdGltZW91dCBpbiBtaW51dGVzLlxuICAgKiBAZGVmYXVsdCA2MCAoQVdTIENvZGVCdWlsZCBkZWZhdWx0KVxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlcjtcblxuICAvKipcbiAgICogUG9zaXRpb24gb2YgdGhpcyBzdGVwIHdpdGhpbiB0aGUgcGlwZWxpbmUgd2F2ZS5cbiAgICogLSAncHJlJzogUnVucyBiZWZvcmUgdGhlIHN0YWdlIGRlcGxveW1lbnQgKGRlZmF1bHQpXG4gICAqIC0gJ3Bvc3QnOiBSdW5zIGFmdGVyIHRoZSBzdGFnZSBkZXBsb3ltZW50XG4gICAqIEBkZWZhdWx0ICdwcmUnXG4gICAqL1xuICByZWFkb25seSBwb3NpdGlvbj86ICdwcmUnIHwgJ3Bvc3QnO1xuXG4gIC8qKiBBcnRpZmFjdCBrZXkgZm9yIHRoaXMgc3RlcCdzIHByaW1hcnkgaW5wdXQgKHJlc29sdmVkIHZpYSBBcnRpZmFjdE1hbmFnZXIpICovXG4gIHJlYWRvbmx5IGlucHV0QXJ0aWZhY3Q/OiBBcnRpZmFjdEtleTtcblxuICAvKiogQWRkaXRpb25hbCBpbnB1dCBhcnRpZmFjdHMgZm9yIHRoaXMgc3RlcC4gRWFjaCBlbnRyeSBzcGVjaWZpZXMgYW4gYXJ0aWZhY3QgYW5kIGFuIG9wdGlvbmFsIG1vdW50IGRpcmVjdG9yeS4gKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbElucHV0QXJ0aWZhY3RzPzogQWRkaXRpb25hbElucHV0QXJ0aWZhY3RDb25maWdbXTtcblxuICAvKiogT3ZlcnJpZGUgdGhlIHBsdWdpbidzIGZhaWx1cmUgYmVoYXZpb3IgZm9yIHRoaXMgc3RlcC4gKi9cbiAgcmVhZG9ubHkgZmFpbHVyZUJlaGF2aW9yPzogJ2ZhaWwnIHwgJ3dhcm4nIHwgJ2lnbm9yZSc7XG59XG5cbi8qKlxuICogQSBwaXBlbGluZSBzdGFnZSBjb250YWluaW5nIG9uZSBvciBtb3JlIGJ1aWxkIHN0ZXBzLlxuICogRWFjaCBzdGFnZSBtYXBzIHRvIGEgQ0RLIFBpcGVsaW5lIHdhdmUsIHdpdGggc3RlcHMgZXhlY3V0aW5nIHdpdGhpbiB0aGUgd2F2ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFnZU9wdGlvbnMge1xuICAvKiogRGlzcGxheSBuYW1lIGZvciB0aGlzIHN0YWdlICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuXG4gIC8qKiBPcHRpb25hbCBhbGlhcyB1c2VkIGZvciB3YXZlL2NvbnN0cnVjdCBJRCBnZW5lcmF0aW9uLiBEZWZhdWx0cyB0byBzdGFnZU5hbWUuICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKiBCdWlsZCBzdGVwcyB0byBleGVjdXRlIHdpdGhpbiB0aGlzIHN0YWdlICovXG4gIHJlYWRvbmx5IHN0ZXBzOiBTdGFnZVN0ZXBPcHRpb25zW107XG5cbiAgLyoqXG4gICAqIERlcGxveSBlbnZpcm9ubWVudCB0aGlzIHN0YWdlIHRhcmdldHMgKGUuZy4gYHByb2R1Y3Rpb25gLCBgc3RhZ2luZ2ApLlxuICAgKiBEZWNsYXJpbmcgaXQgbWFya3MgdGhlIHN0YWdlIGFzIGEgKipkZXBsb3kqKiBmb3IgRE9SQSBtZXRyaWNzOiBwaXBlbGluZS1jb3JlXG4gICAqIGxpc3RzIGV2ZXJ5IHN1Y2ggc3RhZ2UgaW4gdGhlIGBwYi5kZXBsb3lzYCB0YWcgYXMgYDxzdGFnZU5hbWU+OjxlbnZpcm9ubWVudD5gXG4gICAqIHNvIHRoZSBldmVudHMgTGFtYmRhIGNhbiBhdHRyaWJ1dGUgZGVwbG95bWVudHMgcGVyIGVudmlyb25tZW50LiBPbWl0IGl0IGFuZFxuICAgKiB0aGUgc3RhZ2UgaXMgbm90IHRyZWF0ZWQgYXMgYSBkZXBsb3kuXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhIENvZGVCdWlsZCBzdGVwIGluIHRoZSBwaXBlbGluZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZGVCdWlsZFN0ZXBPcHRpb25zIGV4dGVuZHMgU3RlcEN1c3RvbWl6YXRpb24ge1xuICAvKipcbiAgICogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgQ29kZUJ1aWxkIHN0ZXBcbiAgICogU2hvdWxkIGJlIGRlc2NyaXB0aXZlIGFuZCB1bmlxdWUgd2l0aGluIHRoZSBwaXBlbGluZVxuICAgKiBAZXhhbXBsZSAnbXktb3JnLW15LXByb2plY3Qtc3ludGgnXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVbmlxdWVJZCBpbnN0YW5jZSBmb3IgZ2VuZXJhdGluZyB1bmlxdWUgY29uc3RydWN0IElEc1xuICAgKiBVc2VkIGZvciBuZXR3b3JrIHJlc291cmNlIGxvb2t1cHMgKFZQQywgc3VibmV0cywgc2VjdXJpdHkgZ3JvdXBzKVxuICAgKi9cbiAgcmVhZG9ubHkgdW5pcXVlSWQ6IFVuaXF1ZUlkO1xuXG4gIC8qKlxuICAgKiBQbHVnaW4gY29uZmlndXJhdGlvbiBmcm9tIHRoZSBkYXRhYmFzZVxuICAgKiBDb250YWlucyBhbGwgdGhlIHBsdWdpbidzIHNwZWMgZGF0YSBhbmQgcnVudGltZSBpbmZvcm1hdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW47XG5cbiAgLyoqXG4gICAqIENESyBzY29wZSB1c2VkIHRvIGNyZWF0ZSBjb25zdHJ1Y3RzIChWUEMvc3VibmV0L3NlY3VyaXR5LWdyb3VwIGxvb2t1cHMpLlxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcblxuICAvKipcbiAgICogSW5wdXQgc291cmNlIGZvciB0aGlzIHN0ZXBcbiAgICogVHlwaWNhbGx5IHRoZSBvdXRwdXQgZnJvbSBhIHByZXZpb3VzIHN0ZXAgb3IgdGhlIHBpcGVsaW5lIHNvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5wdXQ/OiBJRmlsZVNldFByb2R1Y2VyO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG1ldGFkYXRhIHRvIG1lcmdlIHdpdGggcGx1Z2luIG1ldGFkYXRhXG4gICAqIFdpbGwgb3ZlcnJpZGUgY29uZmxpY3Rpbmcga2V5cyBmcm9tIHBsdWdpbiBtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBNZXRhRGF0YVR5cGU7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmb3IgdGhlIENvZGVCdWlsZCBzdGVwLlxuICAgKiBXaGVuIHByb3ZpZGVkLCByZXNvbHZlcyBWUEMsIHN1Ym5ldCBzZWxlY3Rpb24sIGFuZCBzZWN1cml0eSBncm91cHNcbiAgICogc28gdGhlIGJ1aWxkIHJ1bnMgaW5zaWRlIHRoZSBzcGVjaWZpZWQgbmV0d29yay5cbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcms/OiBOZXR3b3JrQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBGYWxsYmFjayBDb2RlQnVpbGQgY29tcHV0ZSB0eXBlIHdoZW4gdGhlIHBsdWdpbiBkb2Vzbid0IHNwZWNpZnkgb25lLlxuICAgKiBAZGVmYXVsdCBDb21wdXRlVHlwZS5TTUFMTFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdENvbXB1dGVUeXBlPzogQ2RrQ29tcHV0ZVR5cGU7XG5cbiAgLyoqXG4gICAqIENvZGVCdWlsZCB0aW1lb3V0IGluIG1pbnV0ZXMuXG4gICAqIEBkZWZhdWx0IDYwIChBV1MgQ29kZUJ1aWxkIGRlZmF1bHQpXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKiBBZGRpdGlvbmFsIGlucHV0cyBtYXBwZWQgYnkgZGlyZWN0b3J5IHBhdGggKHJlc29sdmVkIEZpbGVTZXRzKSAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsSW5wdXRzPzogUmVjb3JkPHN0cmluZywgSUZpbGVTZXRQcm9kdWNlcj47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFydGlmYWN0IG1hbmFnZXIgZm9yIHRyYWNraW5nIGJ1aWxkIG91dHB1dHNcbiAgICogV2hlbiBwcm92aWRlZCBhbmQgcHJpbWFyeU91dHB1dERpcmVjdG9yeSBpcyBzZXQsIHRoZSBzdGVwIHdpbGwgYmUgcmVnaXN0ZXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgYXJ0aWZhY3RNYW5hZ2VyPzogQXJ0aWZhY3RNYW5hZ2VyO1xuXG4gIC8qKlxuICAgKiBTdGFnZSBuYW1lIGZvciBhcnRpZmFjdCBrZXkgZ2VuZXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdGFnZSBhbGlhcyBmb3IgYXJ0aWZhY3Qga2V5IGdlbmVyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlQWxpYXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBsdWdpbiBhbGlhcyBmb3IgYXJ0aWZhY3Qga2V5IGdlbmVyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbkFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGYWlsdXJlIGJlaGF2aW9yIGZvciB0aGlzIHN0ZXAncyBidWlsZCBjb21tYW5kcy5cbiAgICogQXBwbGllZCBhdCBzaGVsbCBsZXZlbDogJ2ZhaWwnID0gZGVmYXVsdCwgJ3dhcm4nID0gbG9nICsgY29udGludWUsICdpZ25vcmUnID0gfHwgdHJ1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGZhaWx1cmVCZWhhdmlvcj86ICdmYWlsJyB8ICd3YXJuJyB8ICdpZ25vcmUnO1xuXG4gIC8qKiBUZW5hbnQgaWRlbnRpZmllciBmb3IgcmVzb2x2aW5nIHBlci1vcmcgc2VjcmV0cyBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKi9cbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lLWxldmVsIGNvbmZpZyB1c2VkIGFzIHRoZSBgcGlwZWxpbmUuKmAgc2NvcGUgd2hlbiByZXNvbHZpbmdcbiAgICogdGVtcGxhdGUgdG9rZW5zIGluc2lkZSBwbHVnaW4gc3BlY3MuIFJlcXVpcmVkIOKAlCBldmVyeSBge3sgcGlwZWxpbmUuKiB9fWBcbiAgICogcmVmZXJlbmNlIGluIGEgcGx1Z2luIHNwZWMgaXMgZXZhbHVhdGVkIGFnYWluc3QgdGhpcyBvYmplY3QgYXQgc3ludGggdGltZS5cbiAgICpcbiAgICogQ2FsbGVycyBjb25zdHJ1Y3RpbmcgYSBzdGVwIGRpcmVjdGx5IG11c3QgcHJvdmlkZSB0aGUgcGlwZWxpbmUgaWRlbnRpdHlcbiAgICogKyBtZXRhZGF0YSArIHZhcnMgc28gdGVtcGxhdGUgcmVzb2x1dGlvbiBpcyBuZXZlciBzaWxlbnRseSBza2lwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVTY29wZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG4iXX0=
|
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/api-core": "3.4.
|
|
38
|
-
"@pipeline-builder/pipeline-data": "3.4.
|
|
37
|
+
"@pipeline-builder/api-core": "3.4.122",
|
|
38
|
+
"@pipeline-builder/pipeline-data": "3.4.127"
|
|
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.142",
|
|
95
95
|
"bugs": {
|
|
96
96
|
"url": "https://github.com/mwashburn160/pipeline-builder/issues"
|
|
97
97
|
},
|