dbctx 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +813 -93
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
|
@@ -1596,7 +1596,7 @@ import dedent from "dedent";
|
|
|
1596
1596
|
// package.json
|
|
1597
1597
|
var package_default = {
|
|
1598
1598
|
name: "dbctx",
|
|
1599
|
-
version: "2.1.
|
|
1599
|
+
version: "2.1.1",
|
|
1600
1600
|
description: "AI-enriched database context for humans and coding agents",
|
|
1601
1601
|
type: "module",
|
|
1602
1602
|
main: "dist/index.mjs",
|
|
@@ -2086,15 +2086,15 @@ var initialSampling = Object.freeze({
|
|
|
2086
2086
|
uploadedTables: 0,
|
|
2087
2087
|
totalTables: 0
|
|
2088
2088
|
});
|
|
2089
|
-
var initialFlowState = (
|
|
2089
|
+
var initialFlowState = (args2) => Object.freeze({
|
|
2090
2090
|
phase: "idle",
|
|
2091
|
-
stopAfter:
|
|
2092
|
-
sshEnabled:
|
|
2093
|
-
fileMaskPath:
|
|
2094
|
-
fromIntrospectionFile:
|
|
2095
|
-
outputJSONPath:
|
|
2096
|
-
outputSamplesDir:
|
|
2097
|
-
explanation:
|
|
2091
|
+
stopAfter: args2.stopAfter,
|
|
2092
|
+
sshEnabled: args2.sshEnabled,
|
|
2093
|
+
fileMaskPath: args2.fileMaskPath,
|
|
2094
|
+
fromIntrospectionFile: args2.fromIntrospectionFile,
|
|
2095
|
+
outputJSONPath: args2.outputJSONPath,
|
|
2096
|
+
outputSamplesDir: args2.outputSamplesDir,
|
|
2097
|
+
explanation: args2.explanation,
|
|
2098
2098
|
sessionId: null,
|
|
2099
2099
|
revisionId: null,
|
|
2100
2100
|
authToken: null,
|
|
@@ -2409,7 +2409,7 @@ var projectStoreFromFlow = (state) => {
|
|
|
2409
2409
|
};
|
|
2410
2410
|
|
|
2411
2411
|
// src/flow/interpreter.mts
|
|
2412
|
-
import { existsSync as
|
|
2412
|
+
import { existsSync as existsSync5 } from "fs";
|
|
2413
2413
|
import { TRPCClientError } from "@trpc/client";
|
|
2414
2414
|
|
|
2415
2415
|
// ../../packages/common/dist/schema-hash.mjs
|
|
@@ -4013,6 +4013,174 @@ var flushConfig = async () => {
|
|
|
4013
4013
|
}
|
|
4014
4014
|
};
|
|
4015
4015
|
|
|
4016
|
+
// src/app/telemetry.mts
|
|
4017
|
+
import { existsSync as existsSync4, readFileSync as readFileSync3 } from "fs";
|
|
4018
|
+
import { homedir as homedir4 } from "os";
|
|
4019
|
+
import { join as join4 } from "path";
|
|
4020
|
+
import { uuidv7 as uuidv72 } from "uuidv7";
|
|
4021
|
+
var correlationID = uuidv72();
|
|
4022
|
+
var runStartTime = Date.now();
|
|
4023
|
+
var attachOrigin = "unknown";
|
|
4024
|
+
var subcommand = "unknown";
|
|
4025
|
+
var setAttachOrigin = (origin) => {
|
|
4026
|
+
attachOrigin = origin;
|
|
4027
|
+
};
|
|
4028
|
+
var setSubcommand = (name) => {
|
|
4029
|
+
subcommand = name;
|
|
4030
|
+
};
|
|
4031
|
+
var getRunStartTime = () => runStartTime;
|
|
4032
|
+
var elapsedSecondsSinceRunStart = () => Math.round((Date.now() - runStartTime) / 1e3);
|
|
4033
|
+
var isDoNotTrack = () => {
|
|
4034
|
+
const value = `${process.env["DO_NOT_TRACK"]}`.toLowerCase();
|
|
4035
|
+
return value === "1" || value === "true";
|
|
4036
|
+
};
|
|
4037
|
+
var CONFIG_PATH2 = join4(homedir4(), ".dbctx", "config.json");
|
|
4038
|
+
var firstRunMemo = null;
|
|
4039
|
+
var hadTokenMemo = null;
|
|
4040
|
+
var readPreLaunchConfig = () => {
|
|
4041
|
+
try {
|
|
4042
|
+
if (!existsSync4(CONFIG_PATH2)) {
|
|
4043
|
+
return { hasDeviceID: false, hasToken: false };
|
|
4044
|
+
}
|
|
4045
|
+
const raw = readFileSync3(CONFIG_PATH2, "utf-8");
|
|
4046
|
+
const parsed = JSON.parse(raw);
|
|
4047
|
+
return {
|
|
4048
|
+
hasDeviceID: typeof parsed?.device_id === "string",
|
|
4049
|
+
hasToken: typeof parsed?.token === "string"
|
|
4050
|
+
};
|
|
4051
|
+
} catch {
|
|
4052
|
+
return { hasDeviceID: false, hasToken: false };
|
|
4053
|
+
}
|
|
4054
|
+
};
|
|
4055
|
+
var populateLaunchMemos = () => {
|
|
4056
|
+
if (firstRunMemo !== null && hadTokenMemo !== null) {
|
|
4057
|
+
return;
|
|
4058
|
+
}
|
|
4059
|
+
const probe = readPreLaunchConfig();
|
|
4060
|
+
firstRunMemo = !probe.hasDeviceID;
|
|
4061
|
+
hadTokenMemo = probe.hasToken;
|
|
4062
|
+
};
|
|
4063
|
+
var isFirstRun = () => {
|
|
4064
|
+
populateLaunchMemos();
|
|
4065
|
+
return firstRunMemo;
|
|
4066
|
+
};
|
|
4067
|
+
var wasAuthedAtRunStart = () => {
|
|
4068
|
+
populateLaunchMemos();
|
|
4069
|
+
return hadTokenMemo;
|
|
4070
|
+
};
|
|
4071
|
+
var configPromise = null;
|
|
4072
|
+
var getConfig = () => {
|
|
4073
|
+
if (configPromise === null) {
|
|
4074
|
+
configPromise = readConfig();
|
|
4075
|
+
}
|
|
4076
|
+
return configPromise;
|
|
4077
|
+
};
|
|
4078
|
+
var invalidateConfigCache = () => {
|
|
4079
|
+
configPromise = null;
|
|
4080
|
+
};
|
|
4081
|
+
var telemetryClient = createAuthenticatedTRPCClient(async () => {
|
|
4082
|
+
try {
|
|
4083
|
+
const config = await getConfig();
|
|
4084
|
+
return config.token ?? null;
|
|
4085
|
+
} catch {
|
|
4086
|
+
return null;
|
|
4087
|
+
}
|
|
4088
|
+
});
|
|
4089
|
+
var buildEnvelopePartial = async () => {
|
|
4090
|
+
const config = await getConfig();
|
|
4091
|
+
return {
|
|
4092
|
+
device_id: config.device_id,
|
|
4093
|
+
correlation_id: correlationID,
|
|
4094
|
+
client_version: CLIENT_VERSION,
|
|
4095
|
+
attach_origin: attachOrigin,
|
|
4096
|
+
elapsed_seconds_since_run_start: elapsedSecondsSinceRunStart(),
|
|
4097
|
+
os: detectOS(),
|
|
4098
|
+
shell: detectShell(),
|
|
4099
|
+
is_docker: detectDocker(),
|
|
4100
|
+
is_wsl: detectWSL(),
|
|
4101
|
+
is_ssh_session: detectSSHSession(),
|
|
4102
|
+
system_memory: detectSystemMemory(),
|
|
4103
|
+
package_manager: detectPackageManager()
|
|
4104
|
+
};
|
|
4105
|
+
};
|
|
4106
|
+
var inFlight = /* @__PURE__ */ new Set();
|
|
4107
|
+
var track = (p) => {
|
|
4108
|
+
const erased = p.then(
|
|
4109
|
+
() => {
|
|
4110
|
+
},
|
|
4111
|
+
() => {
|
|
4112
|
+
}
|
|
4113
|
+
);
|
|
4114
|
+
inFlight.add(erased);
|
|
4115
|
+
void erased.finally(() => {
|
|
4116
|
+
inFlight.delete(erased);
|
|
4117
|
+
});
|
|
4118
|
+
};
|
|
4119
|
+
var logTelemetryError = (err) => {
|
|
4120
|
+
if (DBCTX_DEV) {
|
|
4121
|
+
logger.error(`telemetry: ${err instanceof Error ? err.message : err}`);
|
|
4122
|
+
}
|
|
4123
|
+
};
|
|
4124
|
+
var fireTelemetryEvent = (event) => {
|
|
4125
|
+
if (isDoNotTrack()) {
|
|
4126
|
+
return;
|
|
4127
|
+
}
|
|
4128
|
+
const send = buildEnvelopePartial().then(
|
|
4129
|
+
(envelope) => telemetryClient.telemetry.create.mutate({
|
|
4130
|
+
...envelope,
|
|
4131
|
+
...event
|
|
4132
|
+
})
|
|
4133
|
+
);
|
|
4134
|
+
send.catch(logTelemetryError);
|
|
4135
|
+
track(send);
|
|
4136
|
+
};
|
|
4137
|
+
var fireTelemetryEventAwaitable = async (event) => {
|
|
4138
|
+
if (isDoNotTrack()) {
|
|
4139
|
+
return;
|
|
4140
|
+
}
|
|
4141
|
+
const send = buildEnvelopePartial().then(
|
|
4142
|
+
(envelope) => telemetryClient.telemetry.create.mutate({
|
|
4143
|
+
...envelope,
|
|
4144
|
+
...event
|
|
4145
|
+
})
|
|
4146
|
+
);
|
|
4147
|
+
track(send);
|
|
4148
|
+
try {
|
|
4149
|
+
await send;
|
|
4150
|
+
} catch (err) {
|
|
4151
|
+
logTelemetryError(err);
|
|
4152
|
+
}
|
|
4153
|
+
};
|
|
4154
|
+
var flushTelemetry = async ({
|
|
4155
|
+
timeoutMs
|
|
4156
|
+
}) => {
|
|
4157
|
+
if (inFlight.size === 0) {
|
|
4158
|
+
return;
|
|
4159
|
+
}
|
|
4160
|
+
const waitAll = Promise.allSettled([...inFlight]);
|
|
4161
|
+
const timeout = new Promise(
|
|
4162
|
+
(resolve2) => setTimeout(resolve2, timeoutMs).unref()
|
|
4163
|
+
);
|
|
4164
|
+
await Promise.race([waitAll, timeout]);
|
|
4165
|
+
};
|
|
4166
|
+
var exitGracefully = async (code, timeoutMs = 2e3) => {
|
|
4167
|
+
await flushTelemetry({ timeoutMs });
|
|
4168
|
+
process.exit(code);
|
|
4169
|
+
};
|
|
4170
|
+
var flowSnapshotGetter = null;
|
|
4171
|
+
var registerFlowSnapshot = (getter) => {
|
|
4172
|
+
flowSnapshotGetter = getter;
|
|
4173
|
+
};
|
|
4174
|
+
var clearFlowSnapshot = () => {
|
|
4175
|
+
flowSnapshotGetter = null;
|
|
4176
|
+
};
|
|
4177
|
+
var getFlowSnapshot = () => {
|
|
4178
|
+
if (flowSnapshotGetter !== null) {
|
|
4179
|
+
return flowSnapshotGetter();
|
|
4180
|
+
}
|
|
4181
|
+
return { lastPhase: "idle", lastPhasePercent: null };
|
|
4182
|
+
};
|
|
4183
|
+
|
|
4016
4184
|
// src/app/session.mts
|
|
4017
4185
|
var checkIsReplica = async (pool) => {
|
|
4018
4186
|
const result = await pool.query(
|
|
@@ -4128,6 +4296,14 @@ var checkGate = async (token, store) => {
|
|
|
4128
4296
|
store.steps.gate.state = result.continue ? "passed" : "blocked";
|
|
4129
4297
|
store.steps.gate.message = result.message;
|
|
4130
4298
|
});
|
|
4299
|
+
if (result.continue) {
|
|
4300
|
+
fireTelemetryEvent({ type: "cli.billing.gate_passed" });
|
|
4301
|
+
} else {
|
|
4302
|
+
fireTelemetryEvent({
|
|
4303
|
+
type: "cli.billing.gate_blocked",
|
|
4304
|
+
block_reason: result.message ?? "unknown"
|
|
4305
|
+
});
|
|
4306
|
+
}
|
|
4131
4307
|
return result.continue;
|
|
4132
4308
|
};
|
|
4133
4309
|
var checkBilling = async (token, sessionUrl, store) => {
|
|
@@ -4142,13 +4318,24 @@ var checkBilling = async (token, sessionUrl, store) => {
|
|
|
4142
4318
|
runInAction11(() => {
|
|
4143
4319
|
store.steps.billing.state = "connected";
|
|
4144
4320
|
});
|
|
4321
|
+
if (initial.isTrialEligible) {
|
|
4322
|
+
fireTelemetryEvent({ type: "cli.billing.trial_eligible" });
|
|
4323
|
+
} else {
|
|
4324
|
+
fireTelemetryEvent({
|
|
4325
|
+
type: "cli.billing.completed",
|
|
4326
|
+
wait_ms: 0
|
|
4327
|
+
});
|
|
4328
|
+
}
|
|
4145
4329
|
return;
|
|
4146
4330
|
}
|
|
4331
|
+
fireTelemetryEvent({ type: "cli.billing.required" });
|
|
4147
4332
|
runInAction11(() => {
|
|
4148
4333
|
store.steps.billing.state = "waiting";
|
|
4149
4334
|
store.steps.billing.url = sessionUrl;
|
|
4150
4335
|
});
|
|
4151
4336
|
await openSessionURL(sessionUrl);
|
|
4337
|
+
fireTelemetryEvent({ type: "cli.billing.url_opened" });
|
|
4338
|
+
const billingWaitStart = Date.now();
|
|
4152
4339
|
await new Promise((resolve2, reject) => {
|
|
4153
4340
|
const tick = async () => {
|
|
4154
4341
|
try {
|
|
@@ -4157,6 +4344,10 @@ var checkBilling = async (token, sessionUrl, store) => {
|
|
|
4157
4344
|
runInAction11(() => {
|
|
4158
4345
|
store.steps.billing.state = "connected";
|
|
4159
4346
|
});
|
|
4347
|
+
fireTelemetryEvent({
|
|
4348
|
+
type: "cli.billing.completed",
|
|
4349
|
+
wait_ms: Date.now() - billingWaitStart
|
|
4350
|
+
});
|
|
4160
4351
|
resolve2();
|
|
4161
4352
|
return;
|
|
4162
4353
|
}
|
|
@@ -4214,14 +4405,14 @@ var waitForAuthorization = async (sessionId, store) => {
|
|
|
4214
4405
|
// src/app/sample.mts
|
|
4215
4406
|
import { createHash as createHash2 } from "crypto";
|
|
4216
4407
|
import { readFile as readFile3, mkdir as mkdir3, readdir as readdir2, stat as stat2 } from "fs/promises";
|
|
4217
|
-
import { join as
|
|
4408
|
+
import { join as join6 } from "path";
|
|
4218
4409
|
import PQueue2 from "p-queue";
|
|
4219
4410
|
import { runInAction as runInAction12, when as when3 } from "mobx";
|
|
4220
4411
|
import { z as z2 } from "zod";
|
|
4221
4412
|
|
|
4222
4413
|
// src/lib/atomic-write.mts
|
|
4223
4414
|
import { writeFile as writeFile2, rename, rm, mkdir as mkdir2, stat, readdir } from "fs/promises";
|
|
4224
|
-
import { dirname, join as
|
|
4415
|
+
import { dirname, join as join5 } from "path";
|
|
4225
4416
|
var exists = async (path2) => {
|
|
4226
4417
|
try {
|
|
4227
4418
|
await stat(path2);
|
|
@@ -4281,7 +4472,7 @@ var recoverAtomicWritesInDir = async (dirPath) => {
|
|
|
4281
4472
|
await Promise.all(
|
|
4282
4473
|
Array.from(targets).map(
|
|
4283
4474
|
(target) => recoverPair(
|
|
4284
|
-
|
|
4475
|
+
join5(dirPath, target),
|
|
4285
4476
|
entrySet.has(`${target}${TMP_SUFFIX}`),
|
|
4286
4477
|
entrySet.has(`${target}${BAK_SUFFIX}`),
|
|
4287
4478
|
entrySet.has(target)
|
|
@@ -4410,12 +4601,12 @@ var prepareOutputDir = async (dirPath, allowOverwrite, store) => {
|
|
|
4410
4601
|
var persistTableSamplesToDir = async (outputDir, event, indexAccumulator) => {
|
|
4411
4602
|
const fileName = `${hashTableName(event.tableName)}.json`;
|
|
4412
4603
|
await atomicWriteFile(
|
|
4413
|
-
|
|
4604
|
+
join6(outputDir, fileName),
|
|
4414
4605
|
JSON.stringify(event.samples, null, 2)
|
|
4415
4606
|
);
|
|
4416
4607
|
indexAccumulator[event.tableName] = fileName;
|
|
4417
4608
|
await atomicWriteFile(
|
|
4418
|
-
|
|
4609
|
+
join6(outputDir, "index.json"),
|
|
4419
4610
|
JSON.stringify(indexAccumulator, null, 2)
|
|
4420
4611
|
);
|
|
4421
4612
|
};
|
|
@@ -4802,8 +4993,8 @@ var dispatchAndStreamPostSampling = async (authed, revisionId, store) => {
|
|
|
4802
4993
|
logger.info(`post-sampling done for revision=${revisionId}`);
|
|
4803
4994
|
}
|
|
4804
4995
|
};
|
|
4805
|
-
var tailRevision = async (
|
|
4806
|
-
const { authed, revisionId, store, postIntrospectionDone } =
|
|
4996
|
+
var tailRevision = async (args2) => {
|
|
4997
|
+
const { authed, revisionId, store, postIntrospectionDone } = args2;
|
|
4807
4998
|
if (!postIntrospectionDone) {
|
|
4808
4999
|
const result = await authed.revisions.ensurePostIntrospection.mutate({
|
|
4809
5000
|
revisionId
|
|
@@ -4964,7 +5155,7 @@ var driveSide = async (prev, curr, store, ctx, dispatch) => {
|
|
|
4964
5155
|
}
|
|
4965
5156
|
try {
|
|
4966
5157
|
await recoverAtomicWrite(outputPath);
|
|
4967
|
-
if (
|
|
5158
|
+
if (existsSync5(outputPath) && !store.outputOptions.allowIntrospectionJsonOverwrite) {
|
|
4968
5159
|
runInAction14(() => {
|
|
4969
5160
|
store.steps.outputJson.state = "prompting-overwrite";
|
|
4970
5161
|
store.steps.outputJson.path = outputPath;
|
|
@@ -5429,6 +5620,411 @@ var cleanup = (ctx) => {
|
|
|
5429
5620
|
}
|
|
5430
5621
|
};
|
|
5431
5622
|
|
|
5623
|
+
// src/flow/telemetry-mapper.mts
|
|
5624
|
+
var assertNever = (x) => {
|
|
5625
|
+
throw new Error(`unhandled flow event: ${JSON.stringify(x)}`);
|
|
5626
|
+
};
|
|
5627
|
+
var classifyDBError = (error) => {
|
|
5628
|
+
const m = error.toLowerCase();
|
|
5629
|
+
if (m.includes("password") || m.includes("authentication") || m.includes("role") || m.includes("does not exist") || m.includes("permission denied")) {
|
|
5630
|
+
return "auth";
|
|
5631
|
+
}
|
|
5632
|
+
if (m.includes("ssl") || m.includes("tls") || m.includes("certificate")) {
|
|
5633
|
+
return "tls";
|
|
5634
|
+
}
|
|
5635
|
+
if (m.includes("timeout") || m.includes("etimedout")) {
|
|
5636
|
+
return "timeout";
|
|
5637
|
+
}
|
|
5638
|
+
if (m.includes("econnrefused") || m.includes("connection refused")) {
|
|
5639
|
+
return "refused";
|
|
5640
|
+
}
|
|
5641
|
+
if (m.includes("enotfound") || m.includes("eai_again") || m.includes("dns")) {
|
|
5642
|
+
return "dns";
|
|
5643
|
+
}
|
|
5644
|
+
return "unknown";
|
|
5645
|
+
};
|
|
5646
|
+
var classifyTransportError = (error) => {
|
|
5647
|
+
const m = error.toLowerCase();
|
|
5648
|
+
if (m.includes("permission denied") || m.includes("authentication") || m.includes("publickey") || m.includes("keyboard-interactive")) {
|
|
5649
|
+
return "auth";
|
|
5650
|
+
}
|
|
5651
|
+
if (m.includes("host key") || m.includes("verify")) {
|
|
5652
|
+
return "host_key";
|
|
5653
|
+
}
|
|
5654
|
+
if (m.includes("timeout") || m.includes("etimedout")) {
|
|
5655
|
+
return "timeout";
|
|
5656
|
+
}
|
|
5657
|
+
if (m.includes("econnrefused") || m.includes("connection refused")) {
|
|
5658
|
+
return "refused";
|
|
5659
|
+
}
|
|
5660
|
+
if (m.includes("enotfound") || m.includes("eai_again") || m.includes("dns")) {
|
|
5661
|
+
return "dns";
|
|
5662
|
+
}
|
|
5663
|
+
if (m.includes("ehostunreach") || m.includes("no route to host")) {
|
|
5664
|
+
return "network";
|
|
5665
|
+
}
|
|
5666
|
+
if (m.includes("reset") || m.includes("econnreset")) {
|
|
5667
|
+
return "reset";
|
|
5668
|
+
}
|
|
5669
|
+
return "unknown";
|
|
5670
|
+
};
|
|
5671
|
+
var PROGRESS_THRESHOLDS = [0.25, 0.5, 0.75];
|
|
5672
|
+
var WAIT_BEACON_SECONDS = [30, 120, 300];
|
|
5673
|
+
var WAIT_BEACON_HORIZON = 300;
|
|
5674
|
+
var WAIT_BEACON_PHASES = /* @__PURE__ */ new Set([
|
|
5675
|
+
"awaiting-authorization",
|
|
5676
|
+
"awaiting-explanation"
|
|
5677
|
+
]);
|
|
5678
|
+
var createFlowTelemetryEmitter = () => {
|
|
5679
|
+
const phaseStartedAt = /* @__PURE__ */ new Map();
|
|
5680
|
+
let lastPhase = "idle";
|
|
5681
|
+
let lastPhasePercent = null;
|
|
5682
|
+
const reportedThresholdsByPhase = /* @__PURE__ */ new Map();
|
|
5683
|
+
let pendingWaitTimers = [];
|
|
5684
|
+
const cancelWaitTimers = () => {
|
|
5685
|
+
for (const t of pendingWaitTimers) {
|
|
5686
|
+
clearTimeout(t);
|
|
5687
|
+
}
|
|
5688
|
+
pendingWaitTimers = [];
|
|
5689
|
+
};
|
|
5690
|
+
const scheduleWaitBeacons = (phase) => {
|
|
5691
|
+
cancelWaitTimers();
|
|
5692
|
+
pendingWaitTimers = WAIT_BEACON_SECONDS.map(
|
|
5693
|
+
(seconds) => setTimeout(() => {
|
|
5694
|
+
fireTelemetryEvent({
|
|
5695
|
+
type: "cli.flow.stage_progress",
|
|
5696
|
+
phase,
|
|
5697
|
+
percent: Math.min(1, seconds / WAIT_BEACON_HORIZON),
|
|
5698
|
+
observed_metric: seconds,
|
|
5699
|
+
observed_total: WAIT_BEACON_HORIZON
|
|
5700
|
+
});
|
|
5701
|
+
}, seconds * 1e3).unref()
|
|
5702
|
+
);
|
|
5703
|
+
};
|
|
5704
|
+
const maybeEmitStageProgress = (phase, observed_metric, observed_total) => {
|
|
5705
|
+
if (observed_total <= 0) {
|
|
5706
|
+
return;
|
|
5707
|
+
}
|
|
5708
|
+
const percent = Math.min(1, observed_metric / observed_total);
|
|
5709
|
+
const already = reportedThresholdsByPhase.get(phase) ?? /* @__PURE__ */ new Set();
|
|
5710
|
+
for (const threshold of PROGRESS_THRESHOLDS) {
|
|
5711
|
+
if (percent >= threshold && !already.has(threshold)) {
|
|
5712
|
+
already.add(threshold);
|
|
5713
|
+
fireTelemetryEvent({
|
|
5714
|
+
type: "cli.flow.stage_progress",
|
|
5715
|
+
phase,
|
|
5716
|
+
percent: threshold,
|
|
5717
|
+
observed_metric,
|
|
5718
|
+
observed_total
|
|
5719
|
+
});
|
|
5720
|
+
}
|
|
5721
|
+
}
|
|
5722
|
+
reportedThresholdsByPhase.set(phase, already);
|
|
5723
|
+
};
|
|
5724
|
+
const elapsedInPhase = (phase) => {
|
|
5725
|
+
const start = phaseStartedAt.get(phase);
|
|
5726
|
+
return start === void 0 ? 0 : Date.now() - start;
|
|
5727
|
+
};
|
|
5728
|
+
const onEvent = (prev, next, event, store) => {
|
|
5729
|
+
if (prev.phase !== next.phase) {
|
|
5730
|
+
phaseStartedAt.set(next.phase, Date.now());
|
|
5731
|
+
lastPhase = next.phase;
|
|
5732
|
+
lastPhasePercent = null;
|
|
5733
|
+
cancelWaitTimers();
|
|
5734
|
+
if (WAIT_BEACON_PHASES.has(next.phase)) {
|
|
5735
|
+
scheduleWaitBeacons(next.phase);
|
|
5736
|
+
}
|
|
5737
|
+
fireTelemetryEvent({
|
|
5738
|
+
type: "cli.flow.phase_entered",
|
|
5739
|
+
phase: next.phase,
|
|
5740
|
+
prior_phase: prev.phase,
|
|
5741
|
+
phase_elapsed_ms: elapsedInPhase(prev.phase)
|
|
5742
|
+
});
|
|
5743
|
+
}
|
|
5744
|
+
switch (event.kind) {
|
|
5745
|
+
case "start":
|
|
5746
|
+
case "stop-after-reached":
|
|
5747
|
+
break;
|
|
5748
|
+
case "ssh-connected":
|
|
5749
|
+
fireTelemetryEvent({
|
|
5750
|
+
type: "cli.flow.ssh_connected",
|
|
5751
|
+
duration_ms: elapsedInPhase("connecting-ssh")
|
|
5752
|
+
});
|
|
5753
|
+
break;
|
|
5754
|
+
case "ssh-failed":
|
|
5755
|
+
fireTelemetryEvent({
|
|
5756
|
+
type: "cli.flow.ssh_failed",
|
|
5757
|
+
error_class: classifyTransportError(event.error),
|
|
5758
|
+
duration_ms: elapsedInPhase("connecting-ssh")
|
|
5759
|
+
});
|
|
5760
|
+
break;
|
|
5761
|
+
case "ssh-not-needed":
|
|
5762
|
+
fireTelemetryEvent({ type: "cli.flow.ssh_not_needed" });
|
|
5763
|
+
break;
|
|
5764
|
+
case "db-connected": {
|
|
5765
|
+
const hostname2 = store.steps.databaseConnection.pickedHostname ?? "";
|
|
5766
|
+
fireTelemetryEvent({
|
|
5767
|
+
type: "cli.flow.db_connected",
|
|
5768
|
+
db_type: "postgresql",
|
|
5769
|
+
db_provider: hostname2 ? detectProvider(hostname2) : "other",
|
|
5770
|
+
is_local: hostname2 ? isLocalhost(hostname2) : false,
|
|
5771
|
+
duration_ms: elapsedInPhase("connecting-db")
|
|
5772
|
+
});
|
|
5773
|
+
break;
|
|
5774
|
+
}
|
|
5775
|
+
case "db-failed":
|
|
5776
|
+
fireTelemetryEvent({
|
|
5777
|
+
type: "cli.flow.db_failed",
|
|
5778
|
+
error_class: classifyDBError(event.error),
|
|
5779
|
+
duration_ms: elapsedInPhase("connecting-db")
|
|
5780
|
+
});
|
|
5781
|
+
break;
|
|
5782
|
+
case "introspection-loaded": {
|
|
5783
|
+
const c = store.steps.introspection.counts;
|
|
5784
|
+
fireTelemetryEvent({
|
|
5785
|
+
type: "cli.flow.introspection_completed",
|
|
5786
|
+
tables: c.tables,
|
|
5787
|
+
views: c.views,
|
|
5788
|
+
materialized_views: c.materializedViews,
|
|
5789
|
+
columns: c.columns,
|
|
5790
|
+
enums: c.enums,
|
|
5791
|
+
indexes: c.indexes,
|
|
5792
|
+
foreign_key_references: c.foreignKeys,
|
|
5793
|
+
duration_ms: elapsedInPhase("introspecting")
|
|
5794
|
+
});
|
|
5795
|
+
break;
|
|
5796
|
+
}
|
|
5797
|
+
case "introspection-failed":
|
|
5798
|
+
fireTelemetryEvent({
|
|
5799
|
+
type: "cli.flow.introspection_failed",
|
|
5800
|
+
error_class: classifyTransportError(event.error),
|
|
5801
|
+
duration_ms: elapsedInPhase("introspecting")
|
|
5802
|
+
});
|
|
5803
|
+
break;
|
|
5804
|
+
case "output-json-written":
|
|
5805
|
+
fireTelemetryEvent({ type: "cli.flow.output_json_written" });
|
|
5806
|
+
break;
|
|
5807
|
+
case "output-json-skipped":
|
|
5808
|
+
fireTelemetryEvent({ type: "cli.flow.output_json_skipped" });
|
|
5809
|
+
break;
|
|
5810
|
+
case "output-json-failed":
|
|
5811
|
+
fireTelemetryEvent({
|
|
5812
|
+
type: "cli.flow.output_json_failed",
|
|
5813
|
+
error_class: classifyTransportError(event.error)
|
|
5814
|
+
});
|
|
5815
|
+
break;
|
|
5816
|
+
case "output-json-not-requested":
|
|
5817
|
+
fireTelemetryEvent({
|
|
5818
|
+
type: "cli.flow.output_json_not_requested"
|
|
5819
|
+
});
|
|
5820
|
+
break;
|
|
5821
|
+
case "session-created":
|
|
5822
|
+
fireTelemetryEvent({
|
|
5823
|
+
type: "cli.flow.session_created",
|
|
5824
|
+
session_id: event.sessionId,
|
|
5825
|
+
was_fast_path: false,
|
|
5826
|
+
duration_ms: elapsedInPhase("creating-session")
|
|
5827
|
+
});
|
|
5828
|
+
break;
|
|
5829
|
+
case "fast-path-completed":
|
|
5830
|
+
fireTelemetryEvent({
|
|
5831
|
+
type: "cli.flow.session_created",
|
|
5832
|
+
session_id: event.sessionId,
|
|
5833
|
+
was_fast_path: true,
|
|
5834
|
+
duration_ms: elapsedInPhase("creating-session")
|
|
5835
|
+
});
|
|
5836
|
+
break;
|
|
5837
|
+
case "session-failed":
|
|
5838
|
+
fireTelemetryEvent({
|
|
5839
|
+
type: "cli.flow.session_failed",
|
|
5840
|
+
error_class: classifyTransportError(event.error),
|
|
5841
|
+
duration_ms: elapsedInPhase("creating-session")
|
|
5842
|
+
});
|
|
5843
|
+
break;
|
|
5844
|
+
case "auth-confirmed":
|
|
5845
|
+
fireTelemetryEvent({
|
|
5846
|
+
type: "cli.flow.auth_confirmed",
|
|
5847
|
+
wait_ms: elapsedInPhase("awaiting-authorization")
|
|
5848
|
+
});
|
|
5849
|
+
break;
|
|
5850
|
+
case "auth-failed":
|
|
5851
|
+
fireTelemetryEvent({
|
|
5852
|
+
type: "cli.flow.auth_failed",
|
|
5853
|
+
error_class: classifyTransportError(event.error),
|
|
5854
|
+
wait_ms: elapsedInPhase("awaiting-authorization")
|
|
5855
|
+
});
|
|
5856
|
+
break;
|
|
5857
|
+
case "auth-not-needed":
|
|
5858
|
+
break;
|
|
5859
|
+
case "explanation-given":
|
|
5860
|
+
fireTelemetryEvent({
|
|
5861
|
+
type: "cli.flow.explanation_given",
|
|
5862
|
+
explanation_length: event.value.length
|
|
5863
|
+
});
|
|
5864
|
+
break;
|
|
5865
|
+
case "check-introspection-hit":
|
|
5866
|
+
fireTelemetryEvent({
|
|
5867
|
+
type: "cli.flow.preflight_hit",
|
|
5868
|
+
samples_exist: event.samplesExist,
|
|
5869
|
+
tables_needing_samples_count: event.tablesNeedingSamples.length
|
|
5870
|
+
});
|
|
5871
|
+
break;
|
|
5872
|
+
case "check-introspection-miss":
|
|
5873
|
+
fireTelemetryEvent({ type: "cli.flow.preflight_miss" });
|
|
5874
|
+
break;
|
|
5875
|
+
case "introspection-ingested":
|
|
5876
|
+
fireTelemetryEvent({
|
|
5877
|
+
type: "cli.flow.introspection_ingested",
|
|
5878
|
+
revision_id: event.revisionId,
|
|
5879
|
+
samples_exist: event.samplesExist,
|
|
5880
|
+
tables_needing_samples_count: event.tablesNeedingSamples.length,
|
|
5881
|
+
duration_ms: elapsedInPhase("ingesting-introspection")
|
|
5882
|
+
});
|
|
5883
|
+
break;
|
|
5884
|
+
case "ingest-failed":
|
|
5885
|
+
fireTelemetryEvent({
|
|
5886
|
+
type: "cli.flow.ingest_failed",
|
|
5887
|
+
error_class: classifyTransportError(event.error),
|
|
5888
|
+
duration_ms: elapsedInPhase("ingesting-introspection")
|
|
5889
|
+
});
|
|
5890
|
+
break;
|
|
5891
|
+
case "mask-loaded":
|
|
5892
|
+
fireTelemetryEvent({
|
|
5893
|
+
type: "cli.flow.mask_loaded",
|
|
5894
|
+
masked_columns_count: Object.keys(event.mask).length,
|
|
5895
|
+
duration_ms: elapsedInPhase("sampling-mask-resolving")
|
|
5896
|
+
});
|
|
5897
|
+
break;
|
|
5898
|
+
case "mask-fetch-failed":
|
|
5899
|
+
fireTelemetryEvent({
|
|
5900
|
+
type: "cli.flow.mask_fetch_failed",
|
|
5901
|
+
error_class: classifyTransportError(event.error)
|
|
5902
|
+
});
|
|
5903
|
+
break;
|
|
5904
|
+
case "sampling-completed": {
|
|
5905
|
+
const sc = store.steps.sampling.counts;
|
|
5906
|
+
fireTelemetryEvent({
|
|
5907
|
+
type: "cli.flow.sampling_completed",
|
|
5908
|
+
tables_sampled: sc.completedTables,
|
|
5909
|
+
columns_sampled: sc.sampledColumns,
|
|
5910
|
+
columns_skipped: sc.skippedColumns,
|
|
5911
|
+
duration_ms: elapsedInPhase("sampling")
|
|
5912
|
+
});
|
|
5913
|
+
break;
|
|
5914
|
+
}
|
|
5915
|
+
case "sampling-failed":
|
|
5916
|
+
fireTelemetryEvent({
|
|
5917
|
+
type: "cli.flow.sampling_failed",
|
|
5918
|
+
error_class: classifyTransportError(event.error),
|
|
5919
|
+
duration_ms: elapsedInPhase("sampling"),
|
|
5920
|
+
tables_sampled_so_far: next.sampling.collected.length
|
|
5921
|
+
});
|
|
5922
|
+
break;
|
|
5923
|
+
case "sampling-not-needed":
|
|
5924
|
+
fireTelemetryEvent({ type: "cli.flow.sampling_not_needed" });
|
|
5925
|
+
break;
|
|
5926
|
+
case "samples-upload-completed":
|
|
5927
|
+
fireTelemetryEvent({
|
|
5928
|
+
type: "cli.flow.samples_upload_completed",
|
|
5929
|
+
tables_uploaded: store.steps.ingestion.samples.uploadedTables,
|
|
5930
|
+
duration_ms: elapsedInPhase("uploading-samples")
|
|
5931
|
+
});
|
|
5932
|
+
break;
|
|
5933
|
+
case "samples-upload-failed":
|
|
5934
|
+
fireTelemetryEvent({
|
|
5935
|
+
type: "cli.flow.samples_upload_failed",
|
|
5936
|
+
error_class: classifyTransportError(event.error),
|
|
5937
|
+
duration_ms: elapsedInPhase("uploading-samples"),
|
|
5938
|
+
tables_uploaded_so_far: store.steps.ingestion.samples.uploadedTables
|
|
5939
|
+
});
|
|
5940
|
+
break;
|
|
5941
|
+
case "samples-upload-not-needed":
|
|
5942
|
+
fireTelemetryEvent({
|
|
5943
|
+
type: "cli.flow.samples_upload_not_needed"
|
|
5944
|
+
});
|
|
5945
|
+
break;
|
|
5946
|
+
case "post-introspection-progress": {
|
|
5947
|
+
const total = event.columnsTotal;
|
|
5948
|
+
const done = event.columnsDone;
|
|
5949
|
+
if (total !== null && done !== null && total > 0 && next.phase === "awaiting-post-sampling") {
|
|
5950
|
+
lastPhasePercent = Math.min(1, done / total);
|
|
5951
|
+
}
|
|
5952
|
+
fireTelemetryEvent({
|
|
5953
|
+
type: "cli.flow.post_introspection_progress",
|
|
5954
|
+
stage: event.stage,
|
|
5955
|
+
tokens_in: event.tokensIn,
|
|
5956
|
+
tokens_out: event.tokensOut,
|
|
5957
|
+
columns_done: event.columnsDone,
|
|
5958
|
+
columns_total: event.columnsTotal
|
|
5959
|
+
});
|
|
5960
|
+
break;
|
|
5961
|
+
}
|
|
5962
|
+
case "post-introspection-completed":
|
|
5963
|
+
fireTelemetryEvent({
|
|
5964
|
+
type: "cli.flow.post_introspection_completed",
|
|
5965
|
+
duration_ms: elapsedInPhase("awaiting-post-sampling")
|
|
5966
|
+
});
|
|
5967
|
+
break;
|
|
5968
|
+
case "post-introspection-failed":
|
|
5969
|
+
fireTelemetryEvent({
|
|
5970
|
+
type: "cli.flow.post_introspection_failed",
|
|
5971
|
+
error_class: classifyTransportError(event.error),
|
|
5972
|
+
duration_ms: elapsedInPhase("awaiting-post-sampling")
|
|
5973
|
+
});
|
|
5974
|
+
break;
|
|
5975
|
+
case "post-sampling-completed":
|
|
5976
|
+
fireTelemetryEvent({
|
|
5977
|
+
type: "cli.flow.post_sampling_completed",
|
|
5978
|
+
duration_ms: elapsedInPhase("awaiting-post-sampling")
|
|
5979
|
+
});
|
|
5980
|
+
break;
|
|
5981
|
+
case "post-sampling-failed":
|
|
5982
|
+
fireTelemetryEvent({
|
|
5983
|
+
type: "cli.flow.post_sampling_failed",
|
|
5984
|
+
error_class: classifyTransportError(event.error),
|
|
5985
|
+
duration_ms: elapsedInPhase("awaiting-post-sampling")
|
|
5986
|
+
});
|
|
5987
|
+
break;
|
|
5988
|
+
case "sample-table-yielded":
|
|
5989
|
+
case "sample-chunk-uploaded":
|
|
5990
|
+
break;
|
|
5991
|
+
default:
|
|
5992
|
+
assertNever(event);
|
|
5993
|
+
}
|
|
5994
|
+
if (next.phase === "sampling" && next.sampling.totalTables > 0) {
|
|
5995
|
+
lastPhasePercent = Math.min(
|
|
5996
|
+
1,
|
|
5997
|
+
next.sampling.collected.length / next.sampling.totalTables
|
|
5998
|
+
);
|
|
5999
|
+
maybeEmitStageProgress(
|
|
6000
|
+
"sampling",
|
|
6001
|
+
next.sampling.collected.length,
|
|
6002
|
+
next.sampling.totalTables
|
|
6003
|
+
);
|
|
6004
|
+
}
|
|
6005
|
+
if (event.kind === "post-introspection-progress") {
|
|
6006
|
+
const total = event.columnsTotal;
|
|
6007
|
+
const done = event.columnsDone;
|
|
6008
|
+
if (total !== null && done !== null && total > 0) {
|
|
6009
|
+
maybeEmitStageProgress("awaiting-post-sampling", done, total);
|
|
6010
|
+
}
|
|
6011
|
+
}
|
|
6012
|
+
if (next.phase === "done" && prev.phase !== "done") {
|
|
6013
|
+
fireTelemetryEvent({
|
|
6014
|
+
type: "cli.flow.done",
|
|
6015
|
+
total_duration_ms: Date.now() - (phaseStartedAt.get("idle") ?? Date.now()),
|
|
6016
|
+
revision_id: next.revisionId,
|
|
6017
|
+
stop_after_stage: next.stopAfter
|
|
6018
|
+
});
|
|
6019
|
+
}
|
|
6020
|
+
};
|
|
6021
|
+
return Object.freeze({
|
|
6022
|
+
onEvent,
|
|
6023
|
+
snapshotLastPhase: () => lastPhase,
|
|
6024
|
+
snapshotPhasePercent: () => lastPhasePercent
|
|
6025
|
+
});
|
|
6026
|
+
};
|
|
6027
|
+
|
|
5432
6028
|
// src/flow/run.mts
|
|
5433
6029
|
var applyProjection = (store, delta) => {
|
|
5434
6030
|
runInAction15(() => {
|
|
@@ -5455,6 +6051,12 @@ var runFlow = async (store) => {
|
|
|
5455
6051
|
explanation: store.outputOptions.explanation
|
|
5456
6052
|
});
|
|
5457
6053
|
const ctx = initialContext();
|
|
6054
|
+
const telemetry = createFlowTelemetryEmitter();
|
|
6055
|
+
const runStart = Date.now();
|
|
6056
|
+
registerFlowSnapshot(() => ({
|
|
6057
|
+
lastPhase: telemetry.snapshotLastPhase(),
|
|
6058
|
+
lastPhasePercent: telemetry.snapshotPhasePercent()
|
|
6059
|
+
}));
|
|
5458
6060
|
let resolveTerminal = () => {
|
|
5459
6061
|
};
|
|
5460
6062
|
const terminalPromise = new Promise((res) => {
|
|
@@ -5465,6 +6067,7 @@ var runFlow = async (store) => {
|
|
|
5465
6067
|
const next = reduce(state, event);
|
|
5466
6068
|
state = next;
|
|
5467
6069
|
applyProjection(store, projectStoreFromFlow(next));
|
|
6070
|
+
telemetry.onEvent(prev, next, event, store);
|
|
5468
6071
|
if (isTerminal(next) && !isTerminal(prev)) {
|
|
5469
6072
|
cleanup(ctx);
|
|
5470
6073
|
runInAction15(() => {
|
|
@@ -5489,8 +6092,16 @@ var runFlow = async (store) => {
|
|
|
5489
6092
|
cleanup(ctx);
|
|
5490
6093
|
}
|
|
5491
6094
|
if (state.phase === "done" && state.stopAfter !== null && state.stopAfter !== "sampling") {
|
|
5492
|
-
|
|
6095
|
+
fireTelemetryEvent({
|
|
6096
|
+
type: "cli.command.completed",
|
|
6097
|
+
subcommand: "generate",
|
|
6098
|
+
duration_ms: Date.now() - (runStart ?? Date.now()),
|
|
6099
|
+
final_phase: "done"
|
|
6100
|
+
});
|
|
6101
|
+
await exitGracefully(0);
|
|
5493
6102
|
}
|
|
6103
|
+
clearFlowSnapshot();
|
|
6104
|
+
return state;
|
|
5494
6105
|
};
|
|
5495
6106
|
|
|
5496
6107
|
// src/app/list.mts
|
|
@@ -5503,19 +6114,24 @@ var runList = async (store, inkApp) => {
|
|
|
5503
6114
|
console.log(
|
|
5504
6115
|
"no auth token found. run `dbctx login` to authenticate."
|
|
5505
6116
|
);
|
|
5506
|
-
|
|
6117
|
+
await exitGracefully(1);
|
|
5507
6118
|
}
|
|
5508
6119
|
const authed = createAuthenticatedTRPCClient(
|
|
5509
6120
|
() => Promise.resolve(config.token)
|
|
5510
6121
|
);
|
|
5511
6122
|
await connectAccount(config.token, store);
|
|
5512
6123
|
const items = await authed.databases.listForUser.query();
|
|
6124
|
+
fireTelemetryEvent({
|
|
6125
|
+
type: "cli.list.viewed",
|
|
6126
|
+
item_count: items.length,
|
|
6127
|
+
is_empty: items.length === 0
|
|
6128
|
+
});
|
|
5513
6129
|
if (items.length === 0) {
|
|
5514
6130
|
inkApp.unmount();
|
|
5515
6131
|
console.log(
|
|
5516
6132
|
"no databases yet. run `dbctx` against a database to get started."
|
|
5517
6133
|
);
|
|
5518
|
-
|
|
6134
|
+
await exitGracefully(0);
|
|
5519
6135
|
}
|
|
5520
6136
|
runInAction16(() => {
|
|
5521
6137
|
store.mode = "list-picking";
|
|
@@ -5530,9 +6146,15 @@ var runList = async (store, inkApp) => {
|
|
|
5530
6146
|
if (picker === null || picker.selectedIndex === null) {
|
|
5531
6147
|
return;
|
|
5532
6148
|
}
|
|
5533
|
-
|
|
6149
|
+
const pickedWasExit = picker.selectedIndex === picker.items.length;
|
|
6150
|
+
fireTelemetryEvent({
|
|
6151
|
+
type: "cli.list.item_picked",
|
|
6152
|
+
picked_index: picker.selectedIndex,
|
|
6153
|
+
picked_was_exit_sentinel: pickedWasExit
|
|
6154
|
+
});
|
|
6155
|
+
if (pickedWasExit) {
|
|
5534
6156
|
inkApp.unmount();
|
|
5535
|
-
|
|
6157
|
+
await exitGracefully(0);
|
|
5536
6158
|
}
|
|
5537
6159
|
const picked = picker.items[picker.selectedIndex];
|
|
5538
6160
|
if (picked === void 0) {
|
|
@@ -5540,13 +6162,18 @@ var runList = async (store, inkApp) => {
|
|
|
5540
6162
|
}
|
|
5541
6163
|
const needsLocalRerun = !picked.samplesIngested || !picked.postIntrospection.done && picked.postIntrospection.jobStatus === null;
|
|
5542
6164
|
if (needsLocalRerun) {
|
|
6165
|
+
const reason = !picked.samplesIngested ? "samples_missing" : "enrichment_stuck";
|
|
6166
|
+
fireTelemetryEvent({
|
|
6167
|
+
type: "cli.list.needs_local_rerun",
|
|
6168
|
+
reason
|
|
6169
|
+
});
|
|
5543
6170
|
inkApp.unmount();
|
|
5544
|
-
const
|
|
5545
|
-
console.log(`"${picked.name}": ${
|
|
6171
|
+
const proseReason = reason === "samples_missing" ? "samples for this database have not been uploaded yet." : "post-introspection enrichment is stuck (no live job and not complete).";
|
|
6172
|
+
console.log(`"${picked.name}": ${proseReason}`);
|
|
5546
6173
|
console.log(
|
|
5547
6174
|
"rerun `dbctx` against the same database to pick up where you left off."
|
|
5548
6175
|
);
|
|
5549
|
-
|
|
6176
|
+
await exitGracefully(0);
|
|
5550
6177
|
}
|
|
5551
6178
|
runInAction16(() => {
|
|
5552
6179
|
store.mode = "list-tailing";
|
|
@@ -5560,12 +6187,21 @@ var runList = async (store, inkApp) => {
|
|
|
5560
6187
|
store.steps.ingestion.postIntrospection.reused = true;
|
|
5561
6188
|
}
|
|
5562
6189
|
});
|
|
6190
|
+
const tailStart = Date.now();
|
|
6191
|
+
fireTelemetryEvent({
|
|
6192
|
+
type: "cli.list.tail_started",
|
|
6193
|
+
post_introspection_done: picked.postIntrospection.done
|
|
6194
|
+
});
|
|
5563
6195
|
await tailRevision({
|
|
5564
6196
|
authed,
|
|
5565
6197
|
revisionId: picked.latestRevisionId,
|
|
5566
6198
|
store,
|
|
5567
6199
|
postIntrospectionDone: picked.postIntrospection.done
|
|
5568
6200
|
});
|
|
6201
|
+
fireTelemetryEvent({
|
|
6202
|
+
type: "cli.list.tail_completed",
|
|
6203
|
+
duration_ms: Date.now() - tailStart
|
|
6204
|
+
});
|
|
5569
6205
|
runInAction16(() => {
|
|
5570
6206
|
store.exitRequested = true;
|
|
5571
6207
|
});
|
|
@@ -5574,7 +6210,7 @@ var runList = async (store, inkApp) => {
|
|
|
5574
6210
|
logger.error(`list: ${msg}`);
|
|
5575
6211
|
inkApp.unmount();
|
|
5576
6212
|
console.log(`error: ${msg}`);
|
|
5577
|
-
|
|
6213
|
+
await exitGracefully(1);
|
|
5578
6214
|
}
|
|
5579
6215
|
};
|
|
5580
6216
|
|
|
@@ -5710,6 +6346,8 @@ var runLogin = async () => {
|
|
|
5710
6346
|
subscribe
|
|
5711
6347
|
})
|
|
5712
6348
|
);
|
|
6349
|
+
const loginStart = Date.now();
|
|
6350
|
+
fireTelemetryEvent({ type: "cli.auth.login_started" });
|
|
5713
6351
|
try {
|
|
5714
6352
|
const config = await readConfig();
|
|
5715
6353
|
const { login_id } = await trpc.cliLogin.create.mutate({
|
|
@@ -5721,8 +6359,10 @@ var runLogin = async () => {
|
|
|
5721
6359
|
});
|
|
5722
6360
|
const url = buildConnectURL(login_id);
|
|
5723
6361
|
setState({ kind: "waiting", url });
|
|
6362
|
+
fireTelemetryEvent({ type: "cli.auth.login_url_opened" });
|
|
5724
6363
|
const token = await waitForToken2(login_id);
|
|
5725
6364
|
await writeConfig(token);
|
|
6365
|
+
invalidateConfigCache();
|
|
5726
6366
|
const authed = createAuthenticatedTRPCClient(
|
|
5727
6367
|
() => Promise.resolve(token)
|
|
5728
6368
|
);
|
|
@@ -5731,16 +6371,40 @@ var runLogin = async () => {
|
|
|
5731
6371
|
kind: "connected",
|
|
5732
6372
|
email: account.emails[0] ?? null
|
|
5733
6373
|
});
|
|
6374
|
+
const waitMs = Date.now() - loginStart;
|
|
6375
|
+
fireTelemetryEvent({
|
|
6376
|
+
type: "cli.auth.login_completed",
|
|
6377
|
+
wait_ms: waitMs
|
|
6378
|
+
});
|
|
6379
|
+
fireTelemetryEvent({
|
|
6380
|
+
type: "cli.command.completed",
|
|
6381
|
+
subcommand: "login",
|
|
6382
|
+
duration_ms: waitMs,
|
|
6383
|
+
final_phase: "done"
|
|
6384
|
+
});
|
|
5734
6385
|
await new Promise((r) => setTimeout(r, 200));
|
|
5735
6386
|
inkApp.unmount();
|
|
5736
|
-
|
|
6387
|
+
await exitGracefully(0);
|
|
5737
6388
|
} catch (err) {
|
|
5738
6389
|
const message = err instanceof Error ? err.message : String(err);
|
|
5739
6390
|
logger.error(`login: ${message}`);
|
|
5740
6391
|
setState({ kind: "error", message });
|
|
6392
|
+
const waitMs = Date.now() - loginStart;
|
|
6393
|
+
fireTelemetryEvent({
|
|
6394
|
+
type: "cli.auth.login_failed",
|
|
6395
|
+
error_class: "unknown",
|
|
6396
|
+
wait_ms: waitMs
|
|
6397
|
+
});
|
|
6398
|
+
fireTelemetryEvent({
|
|
6399
|
+
type: "cli.command.errored",
|
|
6400
|
+
subcommand: "login",
|
|
6401
|
+
error_class: "login_failed",
|
|
6402
|
+
error_phase: "error",
|
|
6403
|
+
duration_ms: waitMs
|
|
6404
|
+
});
|
|
5741
6405
|
await new Promise((r) => setTimeout(r, 200));
|
|
5742
6406
|
inkApp.unmount();
|
|
5743
|
-
|
|
6407
|
+
await exitGracefully(1);
|
|
5744
6408
|
}
|
|
5745
6409
|
};
|
|
5746
6410
|
|
|
@@ -5854,7 +6518,7 @@ var generate = program.command("generate", { isDefault: true }).description("Con
|
|
|
5854
6518
|
${errorMessages}`
|
|
5855
6519
|
})
|
|
5856
6520
|
);
|
|
5857
|
-
|
|
6521
|
+
await exitGracefully(1);
|
|
5858
6522
|
}
|
|
5859
6523
|
const validatedOptions = {
|
|
5860
6524
|
...options,
|
|
@@ -5866,7 +6530,7 @@ ${errorMessages}`
|
|
|
5866
6530
|
message: "--use-introspection-json cannot be combined with --output-introspection-json (cyclic)."
|
|
5867
6531
|
})
|
|
5868
6532
|
);
|
|
5869
|
-
|
|
6533
|
+
await exitGracefully(1);
|
|
5870
6534
|
}
|
|
5871
6535
|
if (validatedOptions.useIntrospectionJson) {
|
|
5872
6536
|
if (validatedOptions.skipAnalyze) {
|
|
@@ -5892,7 +6556,7 @@ ${errorMessages}`
|
|
|
5892
6556
|
message: `Invalid --stop-after stage "${stopAfter}". Valid stages: ${STOP_AFTER_STAGES.join(", ")}`
|
|
5893
6557
|
})
|
|
5894
6558
|
);
|
|
5895
|
-
|
|
6559
|
+
await exitGracefully(1);
|
|
5896
6560
|
}
|
|
5897
6561
|
const resolvedOutputSamples = validatedOptions.outputSamples ? normalizePath(validatedOptions.outputSamples) : null;
|
|
5898
6562
|
const resolvedSensitiveMask = validatedOptions.sensitiveMask && expandedPaths.sensitiveMask ? expandedPaths.sensitiveMask : null;
|
|
@@ -5902,7 +6566,7 @@ ${errorMessages}`
|
|
|
5902
6566
|
message: "--stop-after=sampling requires --output-samples to be set"
|
|
5903
6567
|
})
|
|
5904
6568
|
);
|
|
5905
|
-
|
|
6569
|
+
await exitGracefully(1);
|
|
5906
6570
|
}
|
|
5907
6571
|
const allowOverwriteUmbrella = validatedOptions.allowOverwrite ?? false;
|
|
5908
6572
|
const store = createAppStore(config, {
|
|
@@ -5924,9 +6588,25 @@ ${errorMessages}`
|
|
|
5924
6588
|
});
|
|
5925
6589
|
return;
|
|
5926
6590
|
}
|
|
5927
|
-
|
|
6591
|
+
const generateStart = Date.now();
|
|
6592
|
+
const flowResultPromise = runFlow(store);
|
|
5928
6593
|
await inkApp.waitUntilExit();
|
|
5929
|
-
|
|
6594
|
+
const finalState = await flowResultPromise;
|
|
6595
|
+
fireTelemetryEvent(
|
|
6596
|
+
finalState.phase === "error" ? {
|
|
6597
|
+
type: "cli.command.errored",
|
|
6598
|
+
subcommand: "generate",
|
|
6599
|
+
error_class: "flow",
|
|
6600
|
+
error_phase: finalState.errorPhase ?? "error",
|
|
6601
|
+
duration_ms: Date.now() - generateStart
|
|
6602
|
+
} : {
|
|
6603
|
+
type: "cli.command.completed",
|
|
6604
|
+
subcommand: "generate",
|
|
6605
|
+
duration_ms: Date.now() - generateStart,
|
|
6606
|
+
final_phase: "done"
|
|
6607
|
+
}
|
|
6608
|
+
);
|
|
6609
|
+
await exitGracefully(finalState.phase === "error" ? 1 : 0);
|
|
5930
6610
|
});
|
|
5931
6611
|
program.command("list").description(
|
|
5932
6612
|
"List databases in your account and pick one to monitor or resume"
|
|
@@ -5946,76 +6626,116 @@ program.command("list").description(
|
|
|
5946
6626
|
}
|
|
5947
6627
|
);
|
|
5948
6628
|
const inkApp = render2(createElement2(App, { store }));
|
|
6629
|
+
const listStart = Date.now();
|
|
5949
6630
|
runList(store, inkApp);
|
|
5950
6631
|
await inkApp.waitUntilExit();
|
|
5951
|
-
|
|
6632
|
+
fireTelemetryEvent({
|
|
6633
|
+
type: "cli.command.completed",
|
|
6634
|
+
subcommand: "list",
|
|
6635
|
+
duration_ms: Date.now() - listStart,
|
|
6636
|
+
final_phase: "done"
|
|
6637
|
+
});
|
|
6638
|
+
await exitGracefully(0);
|
|
5952
6639
|
});
|
|
5953
6640
|
program.command("login").description("Authenticate the CLI with your dbctx.io account").helpOption("--help", "display help for command").action(async () => {
|
|
5954
6641
|
await runLogin();
|
|
5955
6642
|
});
|
|
5956
6643
|
program.command("logout").description("Clear the stored authentication token").helpOption("--help", "display help for command").action(async () => {
|
|
6644
|
+
const hadToken = wasAuthedAtRunStart();
|
|
5957
6645
|
await flushConfig();
|
|
6646
|
+
fireTelemetryEvent({ type: "cli.auth.logout", had_token: hadToken });
|
|
5958
6647
|
console.log("Logged out \u2014 auth token cleared.");
|
|
5959
6648
|
});
|
|
5960
|
-
var
|
|
5961
|
-
|
|
5962
|
-
|
|
5963
|
-
|
|
6649
|
+
var args = process.argv.slice(2);
|
|
6650
|
+
var isHelpArg = args.includes("--help") || args[0] === "help";
|
|
6651
|
+
var isVersionArg = args.includes("--version");
|
|
6652
|
+
var subcommand2 = isHelpArg ? "help" : isVersionArg ? "version" : args[0] === "login" ? "login" : args[0] === "logout" ? "logout" : args[0] === "list" ? "list" : "generate";
|
|
6653
|
+
var attachOriginForSubcommand = subcommand2 === "help" || subcommand2 === "version" ? "help" : subcommand2 === "login" ? "login" : subcommand2 === "logout" ? "logout" : subcommand2 === "list" ? "list" : "generate";
|
|
6654
|
+
setAttachOrigin(attachOriginForSubcommand);
|
|
6655
|
+
setSubcommand(subcommand2);
|
|
6656
|
+
var buildInvokedFlags = () => ({
|
|
6657
|
+
help: isHelpArg,
|
|
6658
|
+
connection_string: args.some(
|
|
6659
|
+
(a) => !a.startsWith("-") && a !== "generate" && a !== "help"
|
|
6660
|
+
),
|
|
6661
|
+
hostname: args.includes("-h") || args.includes("--hostname"),
|
|
6662
|
+
port: args.includes("-p") || args.includes("--port"),
|
|
6663
|
+
database: args.includes("-d") || args.includes("--database"),
|
|
6664
|
+
username: args.includes("-U") || args.includes("--username"),
|
|
6665
|
+
ssl: ["--sslmode", "--sslcert", "--sslkey", "--sslrootcert"].some(
|
|
6666
|
+
(f) => args.includes(f)
|
|
6667
|
+
),
|
|
6668
|
+
ssh: args.includes("--ssh") || args.includes("--ssh-host"),
|
|
6669
|
+
output_introspection_json: args.includes("--output-introspection-json"),
|
|
6670
|
+
use_introspection_json: args.includes("--use-introspection-json"),
|
|
6671
|
+
stop_after: args.includes("--stop-after"),
|
|
6672
|
+
allow_overwrite: args.includes("--allow-overwrite"),
|
|
6673
|
+
allow_introspection_json_overwrite: args.includes(
|
|
6674
|
+
"--allow-introspection-json-overwrite"
|
|
6675
|
+
),
|
|
6676
|
+
explanation: args.includes("--explanation"),
|
|
6677
|
+
sensitive_mask: args.includes("--sensitive-mask"),
|
|
6678
|
+
output_samples: args.includes("--output-samples"),
|
|
6679
|
+
allow_sample_overwrite: args.includes("--allow-sample-overwrite"),
|
|
6680
|
+
skip_analyze: args.includes("--skip-analyze")
|
|
6681
|
+
});
|
|
6682
|
+
var detectIsCI = () => {
|
|
6683
|
+
const env3 = process.env;
|
|
6684
|
+
return env3["CI"] === "true" || env3["CI"] === "1" || env3["GITHUB_ACTIONS"] === "true" || env3["GITLAB_CI"] === "true" || env3["CIRCLECI"] === "true" || env3["BUILDKITE"] === "true" || typeof env3["JENKINS_URL"] === "string";
|
|
6685
|
+
};
|
|
6686
|
+
var computeHelpSubcommandPath = () => {
|
|
6687
|
+
if (args[0] === "help") {
|
|
6688
|
+
return args[1] ?? "root";
|
|
5964
6689
|
}
|
|
5965
|
-
|
|
5966
|
-
|
|
5967
|
-
|
|
5968
|
-
|
|
5969
|
-
|
|
5970
|
-
|
|
5971
|
-
|
|
5972
|
-
return trpc.telemetry.create.mutate({
|
|
5973
|
-
type: "cli.run",
|
|
5974
|
-
subcommand,
|
|
5975
|
-
flags: {
|
|
5976
|
-
help: isHelp,
|
|
5977
|
-
connection_string: args.some(
|
|
5978
|
-
(a) => !a.startsWith("-") && a !== "generate" && a !== "help"
|
|
5979
|
-
),
|
|
5980
|
-
hostname: args.includes("-h") || args.includes("--hostname"),
|
|
5981
|
-
port: args.includes("-p") || args.includes("--port"),
|
|
5982
|
-
database: args.includes("-d") || args.includes("--database"),
|
|
5983
|
-
username: args.includes("-U") || args.includes("--username"),
|
|
5984
|
-
ssl: ["--sslmode", "--sslcert", "--sslkey", "--sslrootcert"].some(
|
|
5985
|
-
(f) => args.includes(f)
|
|
5986
|
-
),
|
|
5987
|
-
ssh: args.includes("--ssh") || args.includes("--ssh-host"),
|
|
5988
|
-
output_introspection_json: args.includes(
|
|
5989
|
-
"--output-introspection-json"
|
|
5990
|
-
),
|
|
5991
|
-
use_introspection_json: args.includes("--use-introspection-json"),
|
|
5992
|
-
stop_after: args.includes("--stop-after"),
|
|
5993
|
-
allow_overwrite: args.includes("--allow-overwrite"),
|
|
5994
|
-
allow_introspection_json_overwrite: args.includes(
|
|
5995
|
-
"--allow-introspection-json-overwrite"
|
|
5996
|
-
),
|
|
5997
|
-
explanation: args.includes("--explanation"),
|
|
5998
|
-
sensitive_mask: args.includes("--sensitive-mask"),
|
|
5999
|
-
output_samples: args.includes("--output-samples"),
|
|
6000
|
-
allow_sample_overwrite: args.includes("--allow-sample-overwrite"),
|
|
6001
|
-
skip_analyze: args.includes("--skip-analyze")
|
|
6002
|
-
},
|
|
6003
|
-
is_docker: detectDocker(),
|
|
6004
|
-
is_ssh_session: detectSSHSession(),
|
|
6005
|
-
shell: detectShell(),
|
|
6006
|
-
os: detectOS(),
|
|
6007
|
-
is_wsl: detectWSL(),
|
|
6008
|
-
system_memory: detectSystemMemory(),
|
|
6009
|
-
package_manager: detectPackageManager(),
|
|
6010
|
-
device_id: config.device_id
|
|
6011
|
-
});
|
|
6690
|
+
if (args.includes("--help")) {
|
|
6691
|
+
const cmd = args.find(
|
|
6692
|
+
(a, i) => i === 0 && !a.startsWith("-") && a !== "help" && a !== "--version"
|
|
6693
|
+
);
|
|
6694
|
+
return cmd ?? "root";
|
|
6695
|
+
}
|
|
6696
|
+
return "root";
|
|
6012
6697
|
};
|
|
6013
|
-
|
|
6014
|
-
|
|
6015
|
-
|
|
6016
|
-
|
|
6017
|
-
|
|
6698
|
+
if (!isDoNotTrack()) {
|
|
6699
|
+
try {
|
|
6700
|
+
await fireTelemetryEventAwaitable({
|
|
6701
|
+
type: "cli.command.invoked",
|
|
6702
|
+
subcommand: subcommand2,
|
|
6703
|
+
flags: buildInvokedFlags(),
|
|
6704
|
+
is_first_run: isFirstRun(),
|
|
6705
|
+
is_ci: detectIsCI(),
|
|
6706
|
+
node_version: process.version,
|
|
6707
|
+
arch: process.arch,
|
|
6708
|
+
is_authed: wasAuthedAtRunStart()
|
|
6709
|
+
});
|
|
6710
|
+
if (isHelpArg) {
|
|
6711
|
+
fireTelemetryEvent({
|
|
6712
|
+
type: "cli.help.viewed",
|
|
6713
|
+
subcommand_path: computeHelpSubcommandPath()
|
|
6714
|
+
});
|
|
6715
|
+
}
|
|
6716
|
+
} catch (err) {
|
|
6717
|
+
if (DBCTX_DEV) {
|
|
6718
|
+
logger.error(`${err}`, { error: err });
|
|
6719
|
+
}
|
|
6018
6720
|
}
|
|
6019
6721
|
}
|
|
6722
|
+
var abandonAndExit = (signal) => {
|
|
6723
|
+
const code = signal === "SIGINT" ? 130 : 143;
|
|
6724
|
+
if (isDoNotTrack()) {
|
|
6725
|
+
process.exit(code);
|
|
6726
|
+
}
|
|
6727
|
+
const snap = getFlowSnapshot();
|
|
6728
|
+
fireTelemetryEvent({
|
|
6729
|
+
type: "cli.command.abandoned",
|
|
6730
|
+
subcommand: subcommand2,
|
|
6731
|
+
last_phase: snap.lastPhase,
|
|
6732
|
+
last_phase_percent: snap.lastPhasePercent,
|
|
6733
|
+
total_elapsed_ms: Date.now() - getRunStartTime(),
|
|
6734
|
+
exit_signal: signal
|
|
6735
|
+
});
|
|
6736
|
+
void exitGracefully(code, 300);
|
|
6737
|
+
};
|
|
6738
|
+
process.on("SIGINT", () => abandonAndExit("SIGINT"));
|
|
6739
|
+
process.on("SIGTERM", () => abandonAndExit("SIGTERM"));
|
|
6020
6740
|
program.parse();
|
|
6021
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9pbnRyb3NwZWN0aW9uLm10cyIsICIuLi9zcmMvaW5kZXgubXRzIiwgIi4uL3NyYy91aS9jb21wb25lbnRzL0Vycm9yLnRzeCIsICIuLi9zcmMvdWkvQXBwLnRzeCIsICIuLi9zcmMvdWkvY29tcG9uZW50cy9TU0gudHN4IiwgIi4uL3NyYy91aS9jb21wb25lbnRzL1NwaW5uZXIudHN4IiwgIi4uL3NyYy91aS9jb21wb25lbnRzL1Bhc3N3b3JkSW5wdXQudHN4IiwgIi4uL3NyYy91aS9jb21wb25lbnRzL0RCLnRzeCIsICIuLi9zcmMvdWkvY29tcG9uZW50cy9JbnRyb3NwZWN0LnRzeCIsICIuLi9zcmMvdWkvY29tcG9uZW50cy9TZXNzaW9uLnRzeCIsICIuLi9zcmMvYXBwL29wZW4tdXJsLm10cyIsICIuLi9zcmMvbGliL2Vudi5tdHMiLCAiLi4vc3JjL3VpL2NvbXBvbmVudHMvT3V0cHV0SnNvbi50c3giLCAiLi4vc3JjL3VpL2NvbXBvbmVudHMvVXNlckV4cGxhbmF0aW9uLnRzeCIsICIuLi9zcmMvdWkvY29tcG9uZW50cy9UZXh0SW5wdXQudHN4IiwgIi4uL3NyYy91aS9jb21wb25lbnRzL0dhdGUudHN4IiwgIi4uL3NyYy91aS9jb21wb25lbnRzL0JpbGxpbmcudHN4IiwgIi4uL3NyYy91aS9jb21wb25lbnRzL1NhbXBsaW5nLnRzeCIsICIuLi9zcmMvdWkvY29tcG9uZW50cy9JbnRyb3NwZWN0aW9uVXBsb2FkLnRzeCIsICIuLi9zcmMvdWkvY29tcG9uZW50cy9TYW1wbGVzVXBsb2FkLnRzeCIsICIuLi9zcmMvdWkvY29tcG9uZW50cy9FbnJpY2gudHN4IiwgIi4uL3NyYy91aS9jb21wb25lbnRzL0FuYWx5emUudHN4IiwgIi4uL3NyYy91aS9jb21wb25lbnRzL1NwbGFzaC50c3giLCAiLi4vcGFja2FnZS5qc29uIiwgIi4uL3NyYy9saWIvdmVyc2lvbi5tdHMiLCAiLi4vc3JjL3VpL2NvbXBvbmVudHMvRGF0YWJhc2VQaWNrZXIudHN4IiwgIi4uL3NyYy9zdG9yZS5tdHMiLCAiLi4vc3JjL3ZhbGlkYXRlUGF0aHMubXRzIiwgIi4uL3NyYy9mbG93L3J1bi5tdHMiLCAiLi4vc3JjL2xvZ2dlci5tdHMiLCAiLi4vc3JjL2Zsb3cvc3RhdGVzLm10cyIsICIuLi9zcmMvZmxvdy9yZWR1Y2VyLm10cyIsICIuLi9zcmMvZmxvdy9wcm9qZWN0aW9uLm10cyIsICIuLi9zcmMvZmxvdy9pbnRlcnByZXRlci5tdHMiLCAiLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9zY2hlbWEtaGFzaC5tdHMiLCAiLi4vc3JjL2FwcC9zc2gubXRzIiwgIi4uL3NyYy9hcHAvZGIubXRzIiwgIi4uL3NyYy9kYi92ZXJzaW9uLm10cyIsICIuLi9zcmMvYXBwL2Fzc2VtYmxlLm10cyIsICIuLi9zcmMvZGIvcmVsYXRpb25zLm10cyIsICIuLi9zcmMvZGIvYXR0cmlidXRlcy5tdHMiLCAiLi4vc3JjL2RiL2VudW1zLm10cyIsICIuLi9zcmMvZGIvaW5kZXhlcy5tdHMiLCAiLi4vc3JjL2RiL2ZvcmVpZ24ta2V5cy5tdHMiLCAiLi4vc3JjL2RiL2ZpbGUtc3RhdHMubXRzIiwgIi4uL3NyYy9kYi9hbmFseXplLm10cyIsICIuLi9zcmMvZGIvc3RhdHMubXRzIiwgIi4uL3NyYy9kYi9zYW1wbGUubXRzIiwgIi4uL3NyYy9kYi9jaGVjay1jb25zdHJhaW50cy5tdHMiLCAiLi4vc3JjL2RiL2V4dGVuc2lvbnMubXRzIiwgIi4uL3NyYy9kYi9zZXF1ZW5jZXMubXRzIiwgIi4uL3NyYy9kYi90cmlnZ2Vycy5tdHMiLCAiLi4vc3JjL2RiL2Z1bmN0aW9ucy5tdHMiLCAiLi4vc3JjL2RiL2N1c3RvbS10eXBlcy5tdHMiLCAiLi4vc3JjL2RiL3Jscy5tdHMiLCAiLi4vc3JjL2RiL3BsYW5uZXItc3RhdHMubXRzIiwgIi4uL3NyYy9hcHAvbG9hZC1pbnRyb3NwZWN0aW9uLm10cyIsICIuLi9zcmMvYXBwL3Nlc3Npb24ubXRzIiwgIi4uL3NyYy9saWIvdHJwYy5tdHMiLCAiLi4vc3JjL2xpYi90cnBjLXVybC5tdHMiLCAiLi4vc3JjL2FwcC9kZXRlY3QubXRzIiwgIi4uL3NyYy9hcHAvY29uZmlnLm10cyIsICIuLi9zcmMvYXBwL3NhbXBsZS5tdHMiLCAiLi4vc3JjL2xpYi9hdG9taWMtd3JpdGUubXRzIiwgIi4uL3NyYy9hcHAvdGFpbC5tdHMiLCAiLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9qb2ItcHJvZ3Jlc3MvbGFiZWxzLm10cyIsICIuLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2pvYi1wcm9ncmVzcy9wYXJzZS5tdHMiLCAiLi4vc3JjL2xpYi9zdHJlYW0tam9iLm10cyIsICIuLi9zcmMvYXBwL2xpc3QubXRzIiwgIi4uL3NyYy9hcHAvbG9naW4ubXRzIiwgIi4uL3NyYy91aS9jb21wb25lbnRzL0xvZ2luLnRzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuXG5jb25zdCByZWxhdGlvbkF0dHJpYnV0ZSA9IHpcbiAgICAub2JqZWN0KHtcbiAgICAgICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgZGF0YV90eXBlOiB6LnN0cmluZygpLFxuICAgICAgICBpc19udWxsYWJsZTogei5ib29sZWFuKCksXG4gICAgICAgIGNvbW1lbnQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICAgICAgZXN0aW1hdGVkX2Rpc3RpbmN0OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAuYW5kKFxuICAgICAgICB6LmRpc2NyaW1pbmF0ZWRVbmlvbigna2luZCcsIFtcbiAgICAgICAgICAgIHouZGlzY3JpbWluYXRlZFVuaW9uKCdoYXNfZGVmYXVsdCcsIFtcbiAgICAgICAgICAgICAgICB6Lm9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IHoubGl0ZXJhbCgncmVndWxhcicpLFxuICAgICAgICAgICAgICAgICAgICBoYXNfZGVmYXVsdDogei5saXRlcmFsKGZhbHNlKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB6Lm9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6IHoubGl0ZXJhbCgncmVndWxhcicpLFxuICAgICAgICAgICAgICAgICAgICBoYXNfZGVmYXVsdDogei5saXRlcmFsKHRydWUpLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2V4cHJlc3Npb246IHouc3RyaW5nKCksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgICAgICAgICBraW5kOiB6LmxpdGVyYWwoJ2dlbmVyYXRlZCcpLFxuICAgICAgICAgICAgICAgIGdlbmVyYXRlZF9zdG9yYWdlOiB6LmVudW0oWydzdG9yZWQnLCAndmlydHVhbCddKSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZWRfZXhwcmVzc2lvbjogei5zdHJpbmcoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdKSxcbiAgICApO1xuXG5jb25zdCBpbmRleEluZm8gPSB6XG4gICAgLm9iamVjdCh7XG4gICAgICAgIGluZGV4X25hbWU6IHouc3RyaW5nKCksXG4gICAgICAgIHJlbGF0aW9uX25hbWU6IHouc3RyaW5nKCksXG4gICAgICAgIGF0dHJpYnV0ZXM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgICAgIGRlZmluaXRpb246IHouc3RyaW5nKCksXG4gICAgICAgIGNvbW1lbnQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICB9KVxuICAgIC5hbmQoXG4gICAgICAgIHouZGlzY3JpbWluYXRlZFVuaW9uKCdpbmRleF9raW5kJywgW1xuICAgICAgICAgICAgei5vYmplY3Qoe2luZGV4X2tpbmQ6IHoubGl0ZXJhbCgncHJpbWFyeScpfSksXG4gICAgICAgICAgICB6Lm9iamVjdCh7aW5kZXhfa2luZDogei5saXRlcmFsKCd1bmlxdWUnKX0pLFxuICAgICAgICAgICAgei5vYmplY3Qoe1xuICAgICAgICAgICAgICAgIGluZGV4X2tpbmQ6IHoubGl0ZXJhbCgnZXhjbHVzaW9uJyksXG4gICAgICAgICAgICAgICAgZXhjbHVzaW9uX29wZXJhdG9yczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgei5vYmplY3Qoe2luZGV4X2tpbmQ6IHoubGl0ZXJhbCgncGxhaW4nKX0pLFxuICAgICAgICBdKSxcbiAgICApXG4gICAgLmFuZChcbiAgICAgICAgei5kaXNjcmltaW5hdGVkVW5pb24oJ2lzX3BhcnRpYWwnLCBbXG4gICAgICAgICAgICB6Lm9iamVjdCh7aXNfcGFydGlhbDogei5saXRlcmFsKGZhbHNlKX0pLFxuICAgICAgICAgICAgei5vYmplY3Qoe1xuICAgICAgICAgICAgICAgIGlzX3BhcnRpYWw6IHoubGl0ZXJhbCh0cnVlKSxcbiAgICAgICAgICAgICAgICBwYXJ0aWFsX3ByZWRpY2F0ZTogei5zdHJpbmcoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdKSxcbiAgICApO1xuXG5jb25zdCByZWZlcmVuY2UgPSB6Lm9iamVjdCh7XG4gICAgY29uc3RyYWludF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGF0dHJpYnV0ZXM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgcmVmZXJlbmNlZF9yZWxhdGlvbjogei5zdHJpbmcoKSxcbiAgICByZWZlcmVuY2VkX2F0dHJpYnV0ZXM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgb25fdXBkYXRlOiB6LmVudW0oW1xuICAgICAgICAnTk8gQUNUSU9OJyxcbiAgICAgICAgJ1JFU1RSSUNUJyxcbiAgICAgICAgJ0NBU0NBREUnLFxuICAgICAgICAnU0VUIE5VTEwnLFxuICAgICAgICAnU0VUIERFRkFVTFQnLFxuICAgIF0pLFxuICAgIG9uX2RlbGV0ZTogei5lbnVtKFtcbiAgICAgICAgJ05PIEFDVElPTicsXG4gICAgICAgICdSRVNUUklDVCcsXG4gICAgICAgICdDQVNDQURFJyxcbiAgICAgICAgJ1NFVCBOVUxMJyxcbiAgICAgICAgJ1NFVCBERUZBVUxUJyxcbiAgICBdKSxcbiAgICBjb21tZW50OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG59KTtcblxuY29uc3QgcmVsYXRpb25GaWxlU3RhdHMgPSB6XG4gICAgLm9iamVjdCh7XG4gICAgICAgIGZpbGVfcGF0aDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgICAgICBtb2RpZmljYXRpb25fdGltZTogei5kYXRlKCksXG4gICAgICAgIHNpemVfYnl0ZXM6IHoubnVtYmVyKCksXG4gICAgICAgIGlzX3BhcnRpdGlvbmVkOiB6LmJvb2xlYW4oKSxcbiAgICAgICAgcGFydGl0aW9uX2NvdW50OiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gICAgICAgIGVzdGltYXRlZF9yb3dfY291bnQ6IHoubnVtYmVyKCksXG4gICAgfSlcbiAgICAucGFydGlhbCgpO1xuXG5leHBvcnQgY29uc3QgcmVsYXRpb24gPSB6Lm9iamVjdCh7XG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICBjb21tZW50OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAga2luZDogei5lbnVtKFsncGFydGl0aW9uZWRfdGFibGUnLCAndGFibGUnLCAndmlldycsICdtYXRlcmlhbGl6ZWRfdmlldyddKSxcbiAgICBzdW1tYXJ5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGV0YWlsczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGVzdGltYXRlZF9yb3dfY291bnQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBhdHRyaWJ1dGVzOiB6LnJlY29yZCh6LnN0cmluZygpLCByZWxhdGlvbkF0dHJpYnV0ZSksXG4gICAgcmVmZXJlbmNlczogei5yZWNvcmQoei5zdHJpbmcoKSwgcmVmZXJlbmNlKSxcbiAgICBpbmRleGVzOiB6LnJlY29yZCh6LnN0cmluZygpLCBpbmRleEluZm8pLFxuICAgIGZpbGVTdGF0czogcmVsYXRpb25GaWxlU3RhdHMub3B0aW9uYWwoKSxcbiAgICB2aWV3RGVmaW5pdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRkbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5cbmNvbnN0IHJlbGF0aW9ucyA9IHoucmVjb3JkKHouc3RyaW5nKCksIHJlbGF0aW9uKTtcblxuY29uc3QgZW51bVR5cGUgPSB6Lm9iamVjdCh7XG4gICAgdmFsdWVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGNvbW1lbnQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbn0pO1xuXG5jb25zdCBjaGVja0NvbnN0cmFpbnQgPSB6Lm9iamVjdCh7XG4gICAgcmVsYXRpb25fbmFtZTogei5zdHJpbmcoKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIGV4cHJlc3Npb246IHouc3RyaW5nKCksXG4gICAgaXNfdmFsaWQ6IHouYm9vbGVhbigpLFxufSk7XG5cbmNvbnN0IHNlcXVlbmNlID0gei5vYmplY3Qoe1xuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgZGF0YV90eXBlOiB6LnN0cmluZygpLFxuICAgIHN0YXJ0X3ZhbHVlOiB6LnN0cmluZygpLFxuICAgIG1pbl92YWx1ZTogei5zdHJpbmcoKSxcbiAgICBtYXhfdmFsdWU6IHouc3RyaW5nKCksXG4gICAgaW5jcmVtZW50OiB6LnN0cmluZygpLFxuICAgIGN5Y2xlOiB6LmJvb2xlYW4oKSxcbiAgICBjYWNoZV9zaXplOiB6LnN0cmluZygpLFxuICAgIG93bmVkX2J5X3RhYmxlOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAgb3duZWRfYnlfY29sdW1uOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG59KTtcblxuY29uc3QgZXh0ZW5zaW9uID0gei5vYmplY3Qoe1xuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgdmVyc2lvbjogei5zdHJpbmcoKSxcbiAgICBzY2hlbWE6IHouc3RyaW5nKCksXG59KTtcblxuY29uc3QgdHJpZ2dlciA9IHoub2JqZWN0KHtcbiAgICByZWxhdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgZGVmaW5pdGlvbjogei5zdHJpbmcoKSxcbiAgICBmdW5jdGlvbl9zY2hlbWE6IHouc3RyaW5nKCksXG4gICAgZnVuY3Rpb25fbmFtZTogei5zdHJpbmcoKSxcbiAgICBpc19lbmFibGVkOiB6LmJvb2xlYW4oKSxcbn0pO1xuXG5jb25zdCBmdW5jdGlvbkluZm8gPSB6Lm9iamVjdCh7XG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICBsYW5ndWFnZTogei5zdHJpbmcoKSxcbiAgICBhcmd1bWVudF90eXBlczogei5zdHJpbmcoKSxcbiAgICByZXR1cm5fdHlwZTogei5zdHJpbmcoKSxcbiAgICBkZWZpbml0aW9uOiB6LnN0cmluZygpLFxuICAgIGlzX3RyaWdnZXI6IHouYm9vbGVhbigpLFxufSk7XG5cbmNvbnN0IGRvbWFpblR5cGUgPSB6Lm9iamVjdCh7XG4gICAga2luZDogei5saXRlcmFsKCdkb21haW4nKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIGJhc2VfdHlwZTogei5zdHJpbmcoKSxcbiAgICBub3RfbnVsbDogei5ib29sZWFuKCksXG4gICAgZGVmYXVsdF9leHByZXNzaW9uOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAgY2hlY2tfY29uc3RyYWludHM6IHouYXJyYXkoXG4gICAgICAgIHoub2JqZWN0KHtuYW1lOiB6LnN0cmluZygpLCBleHByZXNzaW9uOiB6LnN0cmluZygpfSksXG4gICAgKSxcbn0pO1xuXG5jb25zdCBjb21wb3NpdGVUeXBlID0gei5vYmplY3Qoe1xuICAgIGtpbmQ6IHoubGl0ZXJhbCgnY29tcG9zaXRlJyksXG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICBhdHRyaWJ1dGVzOiB6LmFycmF5KFxuICAgICAgICB6Lm9iamVjdCh7XG4gICAgICAgICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgICAgICAgdHlwZTogei5zdHJpbmcoKSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB6Lm51bWJlcigpLFxuICAgICAgICB9KSxcbiAgICApLFxufSk7XG5cbmNvbnN0IGN1c3RvbVR5cGUgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbigna2luZCcsIFtkb21haW5UeXBlLCBjb21wb3NpdGVUeXBlXSk7XG5cbmNvbnN0IHJlbGF0aW9uUkxTID0gei5vYmplY3Qoe1xuICAgIHJlbGF0aW9uX25hbWU6IHouc3RyaW5nKCksXG4gICAgcmxzX2VuYWJsZWQ6IHouYm9vbGVhbigpLFxuICAgIHJsc19mb3JjZWQ6IHouYm9vbGVhbigpLFxufSk7XG5cbmNvbnN0IHBvbGljeSA9IHoub2JqZWN0KHtcbiAgICByZWxhdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgcGVybWlzc2l2ZTogei5ib29sZWFuKCksXG4gICAgcm9sZXM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgY29tbWFuZDogei5lbnVtKFsnQUxMJywgJ1NFTEVDVCcsICdJTlNFUlQnLCAnVVBEQVRFJywgJ0RFTEVURSddKSxcbiAgICB1c2luZ19leHByZXNzaW9uOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAgd2l0aF9jaGVja19leHByZXNzaW9uOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG59KTtcblxuZXhwb3J0IGNvbnN0IGRhdGFiYXNlSW50cm9zcGVjdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmVudW0oWydwb3N0Z3Jlc3FsJ10pLFxuICAgIHVzZXJFeHBsYW5hdGlvbjogelxuICAgICAgICAuc3RyaW5nKClcbiAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgLmRlc2NyaWJlKFxuICAgICAgICAgICAgJ2JyaWVmIGV4cGxhbmF0aW9uIGZyb20gdGhlIHVzZXIgYWJvdXQgd2hhdCB0aGUgZGF0YWJhc2UgaXMgYWJvdXQnLFxuICAgICAgICApLFxuICAgIHZlcnNpb246IHoub2JqZWN0KHtcbiAgICAgICAgdmVyc2lvbl9zdHJpbmc6IHouc3RyaW5nKCksXG4gICAgICAgIHZlcnNpb25fbnVtYmVyOiB6Lm51bWJlcigpLFxuICAgIH0pLFxuICAgIGlkZW50aWZpZXI6IHoub2JqZWN0KHtcbiAgICAgICAgc3lzdGVtX2lkZW50aWZpZXI6IHouc3RyaW5nKCksXG4gICAgICAgIGRhdGFiYXNlX29pZDogei5udW1iZXIoKSxcbiAgICB9KSxcbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIGNvbW1lbnQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICByZWxhdGlvbnM6IHJlbGF0aW9ucyxcbiAgICBlbnVtczogei5yZWNvcmQoei5zdHJpbmcoKSwgZW51bVR5cGUpLFxuICAgIGNoZWNrQ29uc3RyYWludHM6IHouYXJyYXkoY2hlY2tDb25zdHJhaW50KS5vcHRpb25hbCgpLFxuICAgIHNlcXVlbmNlczogei5hcnJheShzZXF1ZW5jZSkub3B0aW9uYWwoKSxcbiAgICBleHRlbnNpb25zOiB6LmFycmF5KGV4dGVuc2lvbikub3B0aW9uYWwoKSxcbiAgICB0cmlnZ2Vyczogei5hcnJheSh0cmlnZ2VyKS5vcHRpb25hbCgpLFxuICAgIGZ1bmN0aW9uczogei5hcnJheShmdW5jdGlvbkluZm8pLm9wdGlvbmFsKCksXG4gICAgY3VzdG9tVHlwZXM6IHouYXJyYXkoY3VzdG9tVHlwZSkub3B0aW9uYWwoKSxcbiAgICBybHM6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgICByZWxhdGlvbnM6IHouYXJyYXkocmVsYXRpb25STFMpLFxuICAgICAgICAgICAgcG9saWNpZXM6IHouYXJyYXkocG9saWN5KSxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IHR5cGUgVERhdGFiYXNlSW50cm9zcGVjdGlvbiA9IHouaW5mZXI8XG4gICAgdHlwZW9mIGRhdGFiYXNlSW50cm9zcGVjdGlvblNjaGVtYVxuPjtcbiIsICIjIS91c3IvYmluL2VudiBub2RlXG5pbXBvcnQge0NvbW1hbmR9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQge3JlbmRlcn0gZnJvbSAnaW5rJztcbmltcG9ydCB7Y3JlYXRlRWxlbWVudH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtFcnJvcn0gZnJvbSAnLi91aS9jb21wb25lbnRzL0Vycm9yLmpzJztcbmltcG9ydCB7QXBwfSBmcm9tICcuL3VpL0FwcC5qcyc7XG5pbXBvcnQge1NwbGFzaH0gZnJvbSAnLi91aS9jb21wb25lbnRzL1NwbGFzaC5qcyc7XG5pbXBvcnQge1xuICAgIGNyZWF0ZUFwcFN0b3JlLFxuICAgIFNUT1BfQUZURVJfU1RBR0VTLFxuICAgIHR5cGUgVFN0b3BBZnRlclN0YWdlLFxufSBmcm9tICcuL3N0b3JlLm1qcyc7XG5pbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcbmltcG9ydCB7XG4gICAgdmFsaWRhdGVQYXRoT3B0aW9ucyxcbiAgICBub3JtYWxpemVQYXRoLFxuICAgIHR5cGUgVFBhdGhWYWxpZGF0aW9uRXJyb3IsXG59IGZyb20gJy4vdmFsaWRhdGVQYXRocy5tanMnO1xuaW1wb3J0IHtUQ29ubmVjdGlvbkNvbmZpZ30gZnJvbSAnLi90eXBlcy9jb25uZWN0aW9uLm1qcyc7XG5pbXBvcnQge3J1bkZsb3d9IGZyb20gJy4vZmxvdy9ydW4ubWpzJztcbmltcG9ydCB7cnVuTGlzdH0gZnJvbSAnLi9hcHAvbGlzdC5tanMnO1xuaW1wb3J0IHtydW5Mb2dpbn0gZnJvbSAnLi9hcHAvbG9naW4ubWpzJztcbmltcG9ydCB7Q0xJRU5UX1ZFUlNJT059IGZyb20gJy4vbGliL3ZlcnNpb24ubWpzJztcbmltcG9ydCB7REJDVFhfREVWfSBmcm9tICcuL2xpYi9lbnYubWpzJztcbmltcG9ydCB7c2NvcGV9IGZyb20gJ3Njb3BlLXV0aWxpdGllcyc7XG5pbXBvcnQge3RycGN9IGZyb20gJy4vbGliL3RycGMubWpzJztcbmltcG9ydCB7cmVhZENvbmZpZywgZmx1c2hDb25maWd9IGZyb20gJy4vYXBwL2NvbmZpZy5tanMnO1xuaW1wb3J0IHtcbiAgICBkZXRlY3REb2NrZXIsXG4gICAgZGV0ZWN0T1MsXG4gICAgZGV0ZWN0U2hlbGwsXG4gICAgZGV0ZWN0V1NMLFxuICAgIGRldGVjdFN5c3RlbU1lbW9yeSxcbiAgICBkZXRlY3RQYWNrYWdlTWFuYWdlcixcbiAgICBkZXRlY3RTU0hTZXNzaW9uLFxufSBmcm9tICcuL2FwcC9kZXRlY3QubWpzJztcbmltcG9ydCB7bG9nZ2VyfSBmcm9tICcuL2xvZ2dlci5tanMnO1xuXG5leHBvcnQgdHlwZSBUU1NMTW9kZSA9XG4gICAgfCAnZGlzYWJsZSdcbiAgICB8ICdhbGxvdydcbiAgICB8ICdwcmVmZXInXG4gICAgfCAncmVxdWlyZSdcbiAgICB8ICd2ZXJpZnktY2EnXG4gICAgfCAndmVyaWZ5LWZ1bGwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRPcHRpb25zIHtcbiAgICBob3N0bmFtZT86IHN0cmluZztcbiAgICBwb3J0PzogbnVtYmVyO1xuICAgIGRhdGFiYXNlPzogc3RyaW5nO1xuICAgIHVzZXJuYW1lPzogc3RyaW5nO1xuICAgIHNzbG1vZGU/OiBUU1NMTW9kZTtcbiAgICBzc2xjZXJ0Pzogc3RyaW5nO1xuICAgIHNzbGtleT86IHN0cmluZztcbiAgICBzc2xyb290Y2VydD86IHN0cmluZztcbiAgICBzc2g/OiBzdHJpbmc7XG4gICAgc3NoSG9zdD86IHN0cmluZztcbiAgICBzc2hQb3J0PzogbnVtYmVyO1xuICAgIHNzaFVzZXJuYW1lPzogc3RyaW5nO1xuICAgIHNzaEtleT86IHN0cmluZztcbiAgICBvdXRwdXRJbnRyb3NwZWN0aW9uSnNvbj86IHN0cmluZztcbiAgICB1c2VJbnRyb3NwZWN0aW9uSnNvbj86IHN0cmluZztcbiAgICBzdG9wQWZ0ZXI/OiBUU3RvcEFmdGVyU3RhZ2U7XG4gICAgYWxsb3dPdmVyd3JpdGU/OiBib29sZWFuO1xuICAgIGFsbG93SW50cm9zcGVjdGlvbkpzb25PdmVyd3JpdGU/OiBib29sZWFuO1xuICAgIGV4cGxhbmF0aW9uPzogc3RyaW5nO1xuICAgIHNlbnNpdGl2ZU1hc2s/OiBzdHJpbmc7XG4gICAgb3V0cHV0U2FtcGxlcz86IHN0cmluZztcbiAgICBhbGxvd1NhbXBsZU92ZXJ3cml0ZT86IGJvb2xlYW47XG4gICAgc2tpcEFuYWx5emU/OiBib29sZWFuO1xufVxuXG5jb25zdCBwYXJzZVNTSFRhcmdldCA9IChcbiAgICB0YXJnZXQ6IHN0cmluZyxcbik6IHtcbiAgICB1c2VybmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGhvc3Q6IHN0cmluZztcbiAgICBwb3J0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG59ID0+IHtcbiAgICBjb25zdCBhdEluZGV4ID0gdGFyZ2V0LmluZGV4T2YoJ0AnKTtcbiAgICBjb25zdCB1c2VybmFtZSA9IGF0SW5kZXggPj0gMCA/IHRhcmdldC5zbGljZSgwLCBhdEluZGV4KSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBob3N0UG9ydCA9IGF0SW5kZXggPj0gMCA/IHRhcmdldC5zbGljZShhdEluZGV4ICsgMSkgOiB0YXJnZXQ7XG4gICAgY29uc3QgY29sb25JbmRleCA9IGhvc3RQb3J0Lmxhc3RJbmRleE9mKCc6Jyk7XG4gICAgY29uc3QgaG9zdCA9IGNvbG9uSW5kZXggPj0gMCA/IGhvc3RQb3J0LnNsaWNlKDAsIGNvbG9uSW5kZXgpIDogaG9zdFBvcnQ7XG4gICAgY29uc3QgcG9ydCA9XG4gICAgICAgIGNvbG9uSW5kZXggPj0gMFxuICAgICAgICAgICAgPyBwYXJzZUludChob3N0UG9ydC5zbGljZShjb2xvbkluZGV4ICsgMSksIDEwKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4ge3VzZXJuYW1lLCBob3N0LCBwb3J0fTtcbn07XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtXG4gICAgLm5hbWUoJ2RiY3R4JylcbiAgICAudmVyc2lvbihDTElFTlRfVkVSU0lPTilcbiAgICAuaGVscE9wdGlvbignLS1oZWxwJywgJ2Rpc3BsYXkgaGVscCBmb3IgY29tbWFuZCcpXG4gICAgLmFkZEhlbHBUZXh0KCdiZWZvcmVBbGwnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHt1bm1vdW50fSA9IHJlbmRlcihjcmVhdGVFbGVtZW50KFNwbGFzaCkpO1xuICAgICAgICB1bm1vdW50KCk7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9KTtcblxuY29uc3QgZ2VuZXJhdGUgPSBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ2dlbmVyYXRlJywge2lzRGVmYXVsdDogdHJ1ZX0pXG4gICAgLmRlc2NyaXB0aW9uKCdDb25uZWN0IHRvIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBhbmQgZ2VuZXJhdGUgY29udGV4dCcpXG4gICAgLmhlbHBPcHRpb24oJy0taGVscCcsICdkaXNwbGF5IGhlbHAgZm9yIGNvbW1hbmQnKVxuICAgIC5hcmd1bWVudChcbiAgICAgICAgJ1tjb25uZWN0aW9uLXN0cmluZ10nLFxuICAgICAgICAnUG9zdGdyZVNRTCBjb25uZWN0aW9uIHN0cmluZyAoZW52OiBEQVRBQkFTRV9VUkwpJyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy1oLCAtLWhvc3RuYW1lIDxob3N0PicsXG4gICAgICAgICdkYXRhYmFzZSBob3N0bmFtZSAoZW52OiBQR0hPU1QsIGRlZmF1bHQ6IGxvY2FsaG9zdCknLFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgICAnLXAsIC0tcG9ydCA8cG9ydD4nLFxuICAgICAgICAnZGF0YWJhc2UgcG9ydCAoZW52OiBQR1BPUlQsIGRlZmF1bHQ6IDU0MzIpJyxcbiAgICAgICAgcGFyc2VJbnQsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctZCwgLS1kYXRhYmFzZSA8bmFtZT4nLFxuICAgICAgICAnZGF0YWJhc2UgbmFtZSAoZW52OiBQR0RBVEFCQVNFLCBkZWZhdWx0OiBwb3N0Z3JlcyknLFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgICAnLVUsIC0tdXNlcm5hbWUgPHVzZXI+JyxcbiAgICAgICAgJ2RhdGFiYXNlIHVzZXJuYW1lIChlbnY6IFBHVVNFUiwgZGVmYXVsdDogcG9zdGdyZXMpJyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy0tc3NsbW9kZSA8bW9kZT4nLFxuICAgICAgICAnU1NMIG1vZGU6IGRpc2FibGV8YWxsb3d8cHJlZmVyfHJlcXVpcmV8dmVyaWZ5LWNhfHZlcmlmeS1mdWxsIChlbnY6IFBHU1NMTU9ERSwgZGVmYXVsdDogcHJlZmVyKScsXG4gICAgKVxuICAgIC5vcHRpb24oJy0tc3NsY2VydCA8cGF0aD4nLCAncGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgKGVudjogUEdTU0xDRVJUKScpXG4gICAgLm9wdGlvbignLS1zc2xrZXkgPHBhdGg+JywgJ3BhdGggdG8gY2xpZW50IHByaXZhdGUga2V5IChlbnY6IFBHU1NMS0VZKScpXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy0tc3Nscm9vdGNlcnQgPHBhdGg+JyxcbiAgICAgICAgJ3BhdGggdG8gcm9vdCBDQSBjZXJ0aWZpY2F0ZSAoZW52OiBQR1NTTFJPT1RDRVJUKScsXG4gICAgKVxuICAgIC5vcHRpb24oJy0tc3NoIDx0YXJnZXQ+JywgJ1NTSCB0dW5uZWwgdGFyZ2V0ICh1c2VyQGhvc3RbOnBvcnRdKScpXG4gICAgLm9wdGlvbignLS1zc2gtaG9zdCA8aG9zdD4nLCAnU1NIIHR1bm5lbCBob3N0IChiYXN0aW9uL2p1bXAgc2VydmVyKScpXG4gICAgLm9wdGlvbignLS1zc2gtcG9ydCA8cG9ydD4nLCAnU1NIIHR1bm5lbCBwb3J0IChkZWZhdWx0OiAyMiknLCBwYXJzZUludClcbiAgICAub3B0aW9uKCctLXNzaC11c2VybmFtZSA8dXNlcj4nLCAnU1NIIHR1bm5lbCB1c2VybmFtZSAoZGVmYXVsdDogJFVTRVIpJylcbiAgICAub3B0aW9uKFxuICAgICAgICAnLWksIC0tc3NoLWtleSA8cGF0aD4nLFxuICAgICAgICAncGF0aCB0byBTU0ggcHJpdmF0ZSBrZXkgKGRlZmF1bHQ6IH4vLnNzaC9pZF9yc2EpJyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy0tb3V0cHV0LWludHJvc3BlY3Rpb24tanNvbiA8cGF0aD4nLFxuICAgICAgICAnd3JpdGUgaW50cm9zcGVjdGlvbiBKU09OIHRvIGZpbGUnLFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgICAnLS11c2UtaW50cm9zcGVjdGlvbi1qc29uIDxwYXRoPicsXG4gICAgICAgICdsb2FkIGludHJvc3BlY3Rpb24gZnJvbSBhIHByZXZpb3VzbHktc2F2ZWQgSlNPTiBmaWxlIChza2lwcyBsaXZlIGludHJvc3BlY3Rpb247IHN0aWxsIGNvbm5lY3RzIHRvIERCIHRvIHZlcmlmeSBpZGVudGl0eSknLFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgICAnLS1zdG9wLWFmdGVyIDxzdGFnZT4nLFxuICAgICAgICAnZXhpdCBhZnRlciBzdGFnZSBjb21wbGV0ZXMgKHNzaC1jb25uZWN0LCBkYi1jb25uZWN0LCBpbnRyb3NwZWN0aW9uLCBzYW1wbGluZyknLFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgICAnLS1hbGxvdy1vdmVyd3JpdGUnLFxuICAgICAgICAnc2tpcCBvdmVyd3JpdGUgY29uZmlybWF0aW9uIGZvciBhbGwgb3V0cHV0IGZpbGVzICh1bWJyZWxsYSBmb3IgLS1hbGxvdy1pbnRyb3NwZWN0aW9uLWpzb24tb3ZlcndyaXRlIGFuZCAtLWFsbG93LXNhbXBsZS1vdmVyd3JpdGUpJyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy0tYWxsb3ctaW50cm9zcGVjdGlvbi1qc29uLW92ZXJ3cml0ZScsXG4gICAgICAgICdza2lwIG92ZXJ3cml0ZSBjb25maXJtYXRpb24gZm9yIHRoZSBpbnRyb3NwZWN0aW9uIEpTT04gZmlsZScsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctLWV4cGxhbmF0aW9uIDx0ZXh0PicsXG4gICAgICAgICdwcm92aWRlIGRhdGFiYXNlIGV4cGxhbmF0aW9uIChza2lwcyBpbnRlcmFjdGl2ZSBwcm9tcHQpJyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy0tc2Vuc2l0aXZlLW1hc2sgPHBhdGg+JyxcbiAgICAgICAgJ3BhdGggdG8gc2Vuc2l0aXZlLW1hc2suanNvbiBmb3IgY29sdW1uIGV4Y2x1c2lvbicsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctLW91dHB1dC1zYW1wbGVzIDxkaXI+JyxcbiAgICAgICAgJ2RpcmVjdG9yeSBmb3Igc2FtcGxlIG91dHB1dCBmaWxlcyAoYWN0aXZhdGVzIHNhbXBsaW5nIHN0YWdlKScsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctLWFsbG93LXNhbXBsZS1vdmVyd3JpdGUnLFxuICAgICAgICAnc2tpcCBvdmVyd3JpdGUgY29uZmlybWF0aW9uIGZvciBzYW1wbGUgb3V0cHV0IGRpcmVjdG9yeScsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctLXNraXAtYW5hbHl6ZScsXG4gICAgICAgICdza2lwIHJ1bm5pbmcgQU5BTFlaRSBvbiB0YWJsZXMgZHVyaW5nIGludHJvc3BlY3Rpb24gKHVzZXMgZXhpc3RpbmcgcGxhbm5lciBzdGF0aXN0aWNzKScsXG4gICAgKVxuICAgIC5hY3Rpb24oYXN5bmMgKGNvbm5lY3Rpb25TdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZCwgb3B0aW9uczogVE9wdGlvbnMpID0+IHtcbiAgICAgICAgLy8gU2hvdyBoZWxwIGlmIG5vIGNvbm5lY3Rpb24gY29uZmlnIGlzIHByb3ZpZGVkXG4gICAgICAgIGNvbnN0IGhhc0NMSUNvbmZpZyA9XG4gICAgICAgICAgICBjb25uZWN0aW9uU3RyaW5nICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIG9wdGlvbnMuaG9zdG5hbWUgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgb3B0aW9ucy5wb3J0ICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIG9wdGlvbnMuZGF0YWJhc2UgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgb3B0aW9ucy51c2VybmFtZSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IGhhc0VudkNvbmZpZyA9IFtcbiAgICAgICAgICAgICdQR0hPU1QnLFxuICAgICAgICAgICAgJ1BHUE9SVCcsXG4gICAgICAgICAgICAnUEdEQVRBQkFTRScsXG4gICAgICAgICAgICAnUEdVU0VSJyxcbiAgICAgICAgICAgICdQR1BBU1NXT1JEJyxcbiAgICAgICAgICAgICdEQVRBQkFTRV9VUkwnLFxuICAgICAgICBdLnNvbWUoKGtleSkgPT4gcHJvY2Vzcy5lbnZba2V5XSAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICBpZiAoIWhhc0NMSUNvbmZpZyAmJiAhaGFzRW52Q29uZmlnKSB7XG4gICAgICAgICAgICBnZW5lcmF0ZS5oZWxwKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBjb25uZWN0aW9uIHN0cmluZ3MgYXJlIFBvc3RncmVTUUwgVVJMc1xuICAgICAgICBjb25zdCBlZmZlY3RpdmVDb25uZWN0aW9uU3RyaW5nID1cbiAgICAgICAgICAgIGNvbm5lY3Rpb25TdHJpbmcgPz8gcHJvY2Vzcy5lbnZbJ0RBVEFCQVNFX1VSTCddO1xuXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25TdHJpbmdFcnJvciA9IHNjb3BlKGVmZmVjdGl2ZUNvbm5lY3Rpb25TdHJpbmcpXG4gICAgICAgICAgICAubGV0KChzdHIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVUkwuY2FuUGFyc2Uoc3RyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE1hbGZvcm1lZCBjb25uZWN0aW9uIHN0cmluZyBcIiR7c3RyfVwiOiBub3QgYSB2YWxpZCBVUkxgO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHtwcm90b2NvbH0gPSBuZXcgVVJMKHN0cik7XG4gICAgICAgICAgICAgICAgaWYgKHByb3RvY29sICE9PSAncG9zdGdyZXM6JyAmJiBwcm90b2NvbCAhPT0gJ3Bvc3RncmVzcWw6Jykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEludmFsaWQgY29ubmVjdGlvbiBzdHJpbmcgXCIke3N0cn1cIjogZXhwZWN0ZWQgcG9zdGdyZXM6Ly8gb3IgcG9zdGdyZXNxbDovL2A7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnZhbHVlKCk7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgcGF0aCBvcHRpb25zIGV4aXN0IG9uIGZpbGVzeXN0ZW1cbiAgICAgICAgY29uc3Qge2Vycm9yczogcGF0aEVycm9ycywgZXhwYW5kZWRQYXRoc30gPVxuICAgICAgICAgICAgdmFsaWRhdGVQYXRoT3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICBpZiAocGF0aEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gcGF0aEVycm9yc1xuICAgICAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgICAgICh7b3B0aW9uLCBwYXRofTogVFBhdGhWYWxpZGF0aW9uRXJyb3IpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBgICAke29wdGlvbn06ICR7cGF0aH1gLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuam9pbignXFxuJyk7XG5cbiAgICAgICAgICAgIHJlbmRlcihcbiAgICAgICAgICAgICAgICBFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgZm9sbG93aW5nIHBhdGhzIGRvIG5vdCBleGlzdDpcXG4ke2Vycm9yTWVzc2FnZXN9YCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlcGxhY2Ugb3JpZ2luYWwgcGF0aHMgd2l0aCBleHBhbmRlZCBwYXRoc1xuICAgICAgICAvLyAofiByZXNvbHZlZCB0byBob21lIGRpcmVjdG9yeSlcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkT3B0aW9uczogVE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgLi4uZXhwYW5kZWRQYXRocyxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB2YWxpZGF0ZWRPcHRpb25zLnVzZUludHJvc3BlY3Rpb25Kc29uICYmXG4gICAgICAgICAgICB2YWxpZGF0ZWRPcHRpb25zLm91dHB1dEludHJvc3BlY3Rpb25Kc29uXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmVuZGVyKFxuICAgICAgICAgICAgICAgIEVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICctLXVzZS1pbnRyb3NwZWN0aW9uLWpzb24gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLS1vdXRwdXQtaW50cm9zcGVjdGlvbi1qc29uIChjeWNsaWMpLicsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlZE9wdGlvbnMudXNlSW50cm9zcGVjdGlvbkpzb24pIHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0ZWRPcHRpb25zLnNraXBBbmFseXplKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICctLXNraXAtYW5hbHl6ZSBpcyBhIG5vLW9wIHdoZW4gLS11c2UtaW50cm9zcGVjdGlvbi1qc29uIGlzIHNldCcsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc29sdmUgb3V0cHV0IGludHJvc3BlY3Rpb24gcGF0aFxuICAgICAgICBjb25zdCByZXNvbHZlZE91dHB1dFBhdGggPSB2YWxpZGF0ZWRPcHRpb25zLm91dHB1dEludHJvc3BlY3Rpb25Kc29uXG4gICAgICAgICAgICA/IG5vcm1hbGl6ZVBhdGgodmFsaWRhdGVkT3B0aW9ucy5vdXRwdXRJbnRyb3NwZWN0aW9uSnNvbilcbiAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICBjb25zdCByZXNvbHZlZFVzZUludHJvc3BlY3Rpb25QYXRoID1cbiAgICAgICAgICAgIHZhbGlkYXRlZE9wdGlvbnMudXNlSW50cm9zcGVjdGlvbkpzb24gJiZcbiAgICAgICAgICAgIGV4cGFuZGVkUGF0aHMudXNlSW50cm9zcGVjdGlvbkpzb25cbiAgICAgICAgICAgICAgICA/IGV4cGFuZGVkUGF0aHMudXNlSW50cm9zcGVjdGlvbkpzb25cbiAgICAgICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgLy8gQnVpbGQgY29uZmlnIGFuZCByZW5kZXIgdGhlIGFwcFxuICAgICAgICBjb25zdCBzc2hEZWZhdWx0cyA9IHZhbGlkYXRlZE9wdGlvbnMuc3NoXG4gICAgICAgICAgICA/IHBhcnNlU1NIVGFyZ2V0KHZhbGlkYXRlZE9wdGlvbnMuc3NoKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3QgY29uZmlnOiBUQ29ubmVjdGlvbkNvbmZpZyA9IHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb25TdHJpbmc6IGVmZmVjdGl2ZUNvbm5lY3Rpb25TdHJpbmcsXG4gICAgICAgICAgICAuLi52YWxpZGF0ZWRPcHRpb25zLFxuICAgICAgICAgICAgc3NoSG9zdDogdmFsaWRhdGVkT3B0aW9ucy5zc2hIb3N0ID8/IHNzaERlZmF1bHRzPy5ob3N0LFxuICAgICAgICAgICAgc3NoUG9ydDogdmFsaWRhdGVkT3B0aW9ucy5zc2hQb3J0ID8/IHNzaERlZmF1bHRzPy5wb3J0LFxuICAgICAgICAgICAgc3NoVXNlcm5hbWU6IHZhbGlkYXRlZE9wdGlvbnMuc3NoVXNlcm5hbWUgPz8gc3NoRGVmYXVsdHM/LnVzZXJuYW1lLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHN0b3BBZnRlciA9IHZhbGlkYXRlZE9wdGlvbnMuc3RvcEFmdGVyID8/IG51bGw7XG5cbiAgICAgICAgaWYgKHN0b3BBZnRlciAhPT0gbnVsbCAmJiAhU1RPUF9BRlRFUl9TVEFHRVMuaW5jbHVkZXMoc3RvcEFmdGVyKSkge1xuICAgICAgICAgICAgcmVuZGVyKFxuICAgICAgICAgICAgICAgIEVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEludmFsaWQgLS1zdG9wLWFmdGVyIHN0YWdlIFwiJHtzdG9wQWZ0ZXJ9XCIuIFZhbGlkIHN0YWdlczogJHtTVE9QX0FGVEVSX1NUQUdFUy5qb2luKCcsICcpfWAsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWRPdXRwdXRTYW1wbGVzID0gdmFsaWRhdGVkT3B0aW9ucy5vdXRwdXRTYW1wbGVzXG4gICAgICAgICAgICA/IG5vcm1hbGl6ZVBhdGgodmFsaWRhdGVkT3B0aW9ucy5vdXRwdXRTYW1wbGVzKVxuICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHJlc29sdmVkU2Vuc2l0aXZlTWFzayA9XG4gICAgICAgICAgICB2YWxpZGF0ZWRPcHRpb25zLnNlbnNpdGl2ZU1hc2sgJiYgZXhwYW5kZWRQYXRocy5zZW5zaXRpdmVNYXNrXG4gICAgICAgICAgICAgICAgPyBleHBhbmRlZFBhdGhzLnNlbnNpdGl2ZU1hc2tcbiAgICAgICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgaWYgKHN0b3BBZnRlciA9PT0gJ3NhbXBsaW5nJyAmJiByZXNvbHZlZE91dHB1dFNhbXBsZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJlbmRlcihcbiAgICAgICAgICAgICAgICBFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgICAgICAgICAgICAnLS1zdG9wLWFmdGVyPXNhbXBsaW5nIHJlcXVpcmVzIC0tb3V0cHV0LXNhbXBsZXMgdG8gYmUgc2V0JyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbGxvd092ZXJ3cml0ZVVtYnJlbGxhID0gdmFsaWRhdGVkT3B0aW9ucy5hbGxvd092ZXJ3cml0ZSA/PyBmYWxzZTtcblxuICAgICAgICBjb25zdCBzdG9yZSA9IGNyZWF0ZUFwcFN0b3JlKGNvbmZpZywge1xuICAgICAgICAgICAgb3V0cHV0SW50cm9zcGVjdGlvbkpzb246IHJlc29sdmVkT3V0cHV0UGF0aCxcbiAgICAgICAgICAgIHVzZUludHJvc3BlY3Rpb25Kc29uUGF0aDogcmVzb2x2ZWRVc2VJbnRyb3NwZWN0aW9uUGF0aCxcbiAgICAgICAgICAgIHN0b3BBZnRlcixcbiAgICAgICAgICAgIGFsbG93SW50cm9zcGVjdGlvbkpzb25PdmVyd3JpdGU6XG4gICAgICAgICAgICAgICAgKHZhbGlkYXRlZE9wdGlvbnMuYWxsb3dJbnRyb3NwZWN0aW9uSnNvbk92ZXJ3cml0ZSA/PyBmYWxzZSkgfHxcbiAgICAgICAgICAgICAgICBhbGxvd092ZXJ3cml0ZVVtYnJlbGxhLFxuICAgICAgICAgICAgZXhwbGFuYXRpb246IHZhbGlkYXRlZE9wdGlvbnMuZXhwbGFuYXRpb24gPz8gbnVsbCxcbiAgICAgICAgICAgIHNlbnNpdGl2ZU1hc2tQYXRoOiByZXNvbHZlZFNlbnNpdGl2ZU1hc2ssXG4gICAgICAgICAgICBvdXRwdXRTYW1wbGVzRGlyOiByZXNvbHZlZE91dHB1dFNhbXBsZXMsXG4gICAgICAgICAgICBhbGxvd1NhbXBsZU92ZXJ3cml0ZTpcbiAgICAgICAgICAgICAgICAodmFsaWRhdGVkT3B0aW9ucy5hbGxvd1NhbXBsZU92ZXJ3cml0ZSA/PyBmYWxzZSkgfHxcbiAgICAgICAgICAgICAgICBhbGxvd092ZXJ3cml0ZVVtYnJlbGxhLFxuICAgICAgICAgICAgc2tpcEFuYWx5emU6IHZhbGlkYXRlZE9wdGlvbnMuc2tpcEFuYWx5emUgPz8gZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGlua0FwcCA9IHJlbmRlcihjcmVhdGVFbGVtZW50KEFwcCwge3N0b3JlfSkpO1xuXG4gICAgICAgIGlmIChjb25uZWN0aW9uU3RyaW5nRXJyb3IpIHtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uc3RhdGUgPSAnZXJyb3InO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5lcnJvciA9IGNvbm5lY3Rpb25TdHJpbmdFcnJvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcnVuRmxvdyhzdG9yZSk7XG4gICAgICAgIGF3YWl0IGlua0FwcC53YWl0VW50aWxFeGl0KCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9KTtcblxucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdsaXN0JylcbiAgICAuZGVzY3JpcHRpb24oXG4gICAgICAgICdMaXN0IGRhdGFiYXNlcyBpbiB5b3VyIGFjY291bnQgYW5kIHBpY2sgb25lIHRvIG1vbml0b3Igb3IgcmVzdW1lJyxcbiAgICApXG4gICAgLmhlbHBPcHRpb24oJy0taGVscCcsICdkaXNwbGF5IGhlbHAgZm9yIGNvbW1hbmQnKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzdG9yZSA9IGNyZWF0ZUFwcFN0b3JlKFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3V0cHV0SW50cm9zcGVjdGlvbkpzb246IG51bGwsXG4gICAgICAgICAgICAgICAgdXNlSW50cm9zcGVjdGlvbkpzb25QYXRoOiBudWxsLFxuICAgICAgICAgICAgICAgIHN0b3BBZnRlcjogbnVsbCxcbiAgICAgICAgICAgICAgICBhbGxvd0ludHJvc3BlY3Rpb25Kc29uT3ZlcndyaXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBleHBsYW5hdGlvbjogbnVsbCxcbiAgICAgICAgICAgICAgICBzZW5zaXRpdmVNYXNrUGF0aDogbnVsbCxcbiAgICAgICAgICAgICAgICBvdXRwdXRTYW1wbGVzRGlyOiBudWxsLFxuICAgICAgICAgICAgICAgIGFsbG93U2FtcGxlT3ZlcndyaXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBza2lwQW5hbHl6ZTogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGlua0FwcCA9IHJlbmRlcihjcmVhdGVFbGVtZW50KEFwcCwge3N0b3JlfSkpO1xuICAgICAgICBydW5MaXN0KHN0b3JlLCBpbmtBcHApO1xuICAgICAgICBhd2FpdCBpbmtBcHAud2FpdFVudGlsRXhpdCgpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfSk7XG5cbnByb2dyYW1cbiAgICAuY29tbWFuZCgnbG9naW4nKVxuICAgIC5kZXNjcmlwdGlvbignQXV0aGVudGljYXRlIHRoZSBDTEkgd2l0aCB5b3VyIGRiY3R4LmlvIGFjY291bnQnKVxuICAgIC5oZWxwT3B0aW9uKCctLWhlbHAnLCAnZGlzcGxheSBoZWxwIGZvciBjb21tYW5kJylcbiAgICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuTG9naW4oKTtcbiAgICB9KTtcblxucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdsb2dvdXQnKVxuICAgIC5kZXNjcmlwdGlvbignQ2xlYXIgdGhlIHN0b3JlZCBhdXRoZW50aWNhdGlvbiB0b2tlbicpXG4gICAgLmhlbHBPcHRpb24oJy0taGVscCcsICdkaXNwbGF5IGhlbHAgZm9yIGNvbW1hbmQnKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBmbHVzaENvbmZpZygpO1xuICAgICAgICBjb25zb2xlLmxvZygnTG9nZ2VkIG91dCBcdTIwMTQgYXV0aCB0b2tlbiBjbGVhcmVkLicpO1xuICAgIH0pO1xuXG5jb25zdCBmaXJlUnVuVGVsZW1ldHJ5ID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRvTm90VHJhY2sgPSBgJHtwcm9jZXNzLmVudlsnRE9fTk9UX1RSQUNLJ119YC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGRvTm90VHJhY2sgPT09ICcxJyB8fCBkb05vdFRyYWNrID09PSAndHJ1ZScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFyZ3MgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG4gICAgY29uc3QgaXNIZWxwID0gYXJncy5pbmNsdWRlcygnLS1oZWxwJykgfHwgYXJnc1swXSA9PT0gJ2hlbHAnO1xuICAgIGNvbnN0IGlzTG9nb3V0ID0gYXJnc1swXSA9PT0gJ2xvZ291dCc7XG4gICAgY29uc3QgaXNMb2dpbiA9IGFyZ3NbMF0gPT09ICdsb2dpbic7XG4gICAgY29uc3QgaXNMaXN0ID0gYXJnc1swXSA9PT0gJ2xpc3QnO1xuICAgIGNvbnN0IHN1YmNvbW1hbmQgPSBpc0hlbHBcbiAgICAgICAgPyAnaGVscCdcbiAgICAgICAgOiBpc0xvZ291dFxuICAgICAgICAgID8gJ2xvZ291dCdcbiAgICAgICAgICA6IGlzTG9naW5cbiAgICAgICAgICAgID8gJ2xvZ2luJ1xuICAgICAgICAgICAgOiBpc0xpc3RcbiAgICAgICAgICAgICAgPyAnbGlzdCdcbiAgICAgICAgICAgICAgOiAnZ2VuZXJhdGUnO1xuXG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgcmVhZENvbmZpZygpO1xuXG4gICAgcmV0dXJuIHRycGMudGVsZW1ldHJ5LmNyZWF0ZS5tdXRhdGUoe1xuICAgICAgICB0eXBlOiAnY2xpLnJ1bicsXG4gICAgICAgIHN1YmNvbW1hbmQsXG4gICAgICAgIGZsYWdzOiB7XG4gICAgICAgICAgICBoZWxwOiBpc0hlbHAsXG4gICAgICAgICAgICBjb25uZWN0aW9uX3N0cmluZzogYXJncy5zb21lKFxuICAgICAgICAgICAgICAgIChhKSA9PiAhYS5zdGFydHNXaXRoKCctJykgJiYgYSAhPT0gJ2dlbmVyYXRlJyAmJiBhICE9PSAnaGVscCcsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaG9zdG5hbWU6IGFyZ3MuaW5jbHVkZXMoJy1oJykgfHwgYXJncy5pbmNsdWRlcygnLS1ob3N0bmFtZScpLFxuICAgICAgICAgICAgcG9ydDogYXJncy5pbmNsdWRlcygnLXAnKSB8fCBhcmdzLmluY2x1ZGVzKCctLXBvcnQnKSxcbiAgICAgICAgICAgIGRhdGFiYXNlOiBhcmdzLmluY2x1ZGVzKCctZCcpIHx8IGFyZ3MuaW5jbHVkZXMoJy0tZGF0YWJhc2UnKSxcbiAgICAgICAgICAgIHVzZXJuYW1lOiBhcmdzLmluY2x1ZGVzKCctVScpIHx8IGFyZ3MuaW5jbHVkZXMoJy0tdXNlcm5hbWUnKSxcbiAgICAgICAgICAgIHNzbDogWyctLXNzbG1vZGUnLCAnLS1zc2xjZXJ0JywgJy0tc3Nsa2V5JywgJy0tc3Nscm9vdGNlcnQnXS5zb21lKFxuICAgICAgICAgICAgICAgIChmKSA9PiBhcmdzLmluY2x1ZGVzKGYpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHNzaDogYXJncy5pbmNsdWRlcygnLS1zc2gnKSB8fCBhcmdzLmluY2x1ZGVzKCctLXNzaC1ob3N0JyksXG4gICAgICAgICAgICBvdXRwdXRfaW50cm9zcGVjdGlvbl9qc29uOiBhcmdzLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICctLW91dHB1dC1pbnRyb3NwZWN0aW9uLWpzb24nLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHVzZV9pbnRyb3NwZWN0aW9uX2pzb246IGFyZ3MuaW5jbHVkZXMoJy0tdXNlLWludHJvc3BlY3Rpb24tanNvbicpLFxuICAgICAgICAgICAgc3RvcF9hZnRlcjogYXJncy5pbmNsdWRlcygnLS1zdG9wLWFmdGVyJyksXG4gICAgICAgICAgICBhbGxvd19vdmVyd3JpdGU6IGFyZ3MuaW5jbHVkZXMoJy0tYWxsb3ctb3ZlcndyaXRlJyksXG4gICAgICAgICAgICBhbGxvd19pbnRyb3NwZWN0aW9uX2pzb25fb3ZlcndyaXRlOiBhcmdzLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICctLWFsbG93LWludHJvc3BlY3Rpb24tanNvbi1vdmVyd3JpdGUnLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGV4cGxhbmF0aW9uOiBhcmdzLmluY2x1ZGVzKCctLWV4cGxhbmF0aW9uJyksXG4gICAgICAgICAgICBzZW5zaXRpdmVfbWFzazogYXJncy5pbmNsdWRlcygnLS1zZW5zaXRpdmUtbWFzaycpLFxuICAgICAgICAgICAgb3V0cHV0X3NhbXBsZXM6IGFyZ3MuaW5jbHVkZXMoJy0tb3V0cHV0LXNhbXBsZXMnKSxcbiAgICAgICAgICAgIGFsbG93X3NhbXBsZV9vdmVyd3JpdGU6IGFyZ3MuaW5jbHVkZXMoJy0tYWxsb3ctc2FtcGxlLW92ZXJ3cml0ZScpLFxuICAgICAgICAgICAgc2tpcF9hbmFseXplOiBhcmdzLmluY2x1ZGVzKCctLXNraXAtYW5hbHl6ZScpLFxuICAgICAgICB9LFxuICAgICAgICBpc19kb2NrZXI6IGRldGVjdERvY2tlcigpLFxuICAgICAgICBpc19zc2hfc2Vzc2lvbjogZGV0ZWN0U1NIU2Vzc2lvbigpLFxuICAgICAgICBzaGVsbDogZGV0ZWN0U2hlbGwoKSxcbiAgICAgICAgb3M6IGRldGVjdE9TKCksXG4gICAgICAgIGlzX3dzbDogZGV0ZWN0V1NMKCksXG4gICAgICAgIHN5c3RlbV9tZW1vcnk6IGRldGVjdFN5c3RlbU1lbW9yeSgpLFxuICAgICAgICBwYWNrYWdlX21hbmFnZXI6IGRldGVjdFBhY2thZ2VNYW5hZ2VyKCksXG4gICAgICAgIGRldmljZV9pZDogY29uZmlnLmRldmljZV9pZCxcbiAgICB9KTtcbn07XG5cbnRyeSB7XG4gICAgYXdhaXQgZmlyZVJ1blRlbGVtZXRyeSgpO1xufSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKERCQ1RYX0RFVikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYCR7ZXJyfWAsIHtlcnJvcjogZXJyfSk7XG4gICAgfVxufVxuXG5wcm9ncmFtLnBhcnNlKCk7XG4iLCAiaW1wb3J0IHtUZXh0LCBCb3h9IGZyb20gJ2luayc7XG5pbXBvcnQgdHlwZSB7UmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5cbmludGVyZmFjZSBFcnJvclByb3BzIHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFcnJvcih7bWVzc2FnZX06IEVycm9yUHJvcHMpOiBSZWFjdE5vZGUge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiIGJvbGQ+XG4gICAgICAgICAgICAgICAgRXJyb3I6IHttZXNzYWdlfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuIiwgImltcG9ydCB7Qm94LCB1c2VBcHB9IGZyb20gJ2luayc7XG5pbXBvcnQge3VzZUVmZmVjdCwgdHlwZSBSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7b2JzZXJ2ZXJ9IGZyb20gJ21vYngtcmVhY3QtbGl0ZSc7XG5pbXBvcnQgdHlwZSB7VFN0b3JlLCBUU3RvcEFmdGVyU3RhZ2V9IGZyb20gJy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQge1NTSH0gZnJvbSAnLi9jb21wb25lbnRzL1NTSC5qcyc7XG5pbXBvcnQge0RCfSBmcm9tICcuL2NvbXBvbmVudHMvREIuanMnO1xuaW1wb3J0IHtJbnRyb3NwZWN0fSBmcm9tICcuL2NvbXBvbmVudHMvSW50cm9zcGVjdC5qcyc7XG5pbXBvcnQge0FjY291bnR9IGZyb20gJy4vY29tcG9uZW50cy9TZXNzaW9uLmpzJztcbmltcG9ydCB7T3V0cHV0SnNvbn0gZnJvbSAnLi9jb21wb25lbnRzL091dHB1dEpzb24uanMnO1xuaW1wb3J0IHtVc2VyRXhwbGFuYXRpb259IGZyb20gJy4vY29tcG9uZW50cy9Vc2VyRXhwbGFuYXRpb24uanMnO1xuaW1wb3J0IHtHYXRlfSBmcm9tICcuL2NvbXBvbmVudHMvR2F0ZS5qcyc7XG5pbXBvcnQge0JpbGxpbmd9IGZyb20gJy4vY29tcG9uZW50cy9CaWxsaW5nLmpzJztcbmltcG9ydCB7U2FtcGxpbmd9IGZyb20gJy4vY29tcG9uZW50cy9TYW1wbGluZy5qcyc7XG5pbXBvcnQge0ludHJvc3BlY3Rpb25VcGxvYWR9IGZyb20gJy4vY29tcG9uZW50cy9JbnRyb3NwZWN0aW9uVXBsb2FkLmpzJztcbmltcG9ydCB7U2FtcGxlc1VwbG9hZH0gZnJvbSAnLi9jb21wb25lbnRzL1NhbXBsZXNVcGxvYWQuanMnO1xuaW1wb3J0IHtFbnJpY2h9IGZyb20gJy4vY29tcG9uZW50cy9FbnJpY2guanMnO1xuaW1wb3J0IHtBbmFseXplfSBmcm9tICcuL2NvbXBvbmVudHMvQW5hbHl6ZS5qcyc7XG5pbXBvcnQge1NwbGFzaH0gZnJvbSAnLi9jb21wb25lbnRzL1NwbGFzaC5qcyc7XG5pbXBvcnQge0RhdGFiYXNlUGlja2VyfSBmcm9tICcuL2NvbXBvbmVudHMvRGF0YWJhc2VQaWNrZXIuanMnO1xuXG5jb25zdCBTVEFHRV9PUkRFUjogcmVhZG9ubHkgVFN0b3BBZnRlclN0YWdlW10gPSBbXG4gICAgJ3NzaC1jb25uZWN0JyxcbiAgICAnZGItY29ubmVjdCcsXG4gICAgJ2ludHJvc3BlY3Rpb24nLFxuICAgICdzYW1wbGluZycsXG5dIGFzIGNvbnN0O1xuXG5jb25zdCBpc0FmdGVyU3RvcFBvaW50ID0gKFxuICAgIHN0b3BBZnRlcjogVFN0b3BBZnRlclN0YWdlIHwgbnVsbCxcbiAgICBzdGFnZTogVFN0b3BBZnRlclN0YWdlLFxuKTogYm9vbGVhbiA9PlxuICAgIHN0b3BBZnRlciAhPT0gbnVsbCAmJlxuICAgIFNUQUdFX09SREVSLmluZGV4T2Yoc3RhZ2UpID4gU1RBR0VfT1JERVIuaW5kZXhPZihzdG9wQWZ0ZXIpO1xuXG50eXBlIFRBcHBQcm9wcyA9IHtcbiAgICBzdG9yZTogVFN0b3JlO1xufTtcblxuZXhwb3J0IGNvbnN0IEFwcCA9IG9ic2VydmVyKCh7c3RvcmV9OiBUQXBwUHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IHtzdG9wQWZ0ZXJ9ID0gc3RvcmUub3V0cHV0T3B0aW9ucztcbiAgICBjb25zdCB7ZXhpdH0gPSB1c2VBcHAoKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChzdG9yZS5leGl0UmVxdWVzdGVkKSB7XG4gICAgICAgICAgICBleGl0KCk7XG4gICAgICAgIH1cbiAgICB9LCBbc3RvcmUuZXhpdFJlcXVlc3RlZCwgZXhpdF0pO1xuXG4gICAgaWYgKHN0b3JlLm1vZGUgPT09ICdsaXN0LXBpY2tpbmcnKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nPXsxfT5cbiAgICAgICAgICAgICAgICA8U3BsYXNoIC8+XG4gICAgICAgICAgICAgICAgPEFjY291bnQgc3RvcmU9e3N0b3JlfSAvPlxuICAgICAgICAgICAgICAgIDxEYXRhYmFzZVBpY2tlciBzdG9yZT17c3RvcmV9IC8+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nPXsxfT5cbiAgICAgICAgICAgIDxTcGxhc2ggLz5cbiAgICAgICAgICAgIDxTU0ggc3RvcmU9e3N0b3JlfSAvPlxuICAgICAgICAgICAgeyFpc0FmdGVyU3RvcFBvaW50KHN0b3BBZnRlciwgJ2RiLWNvbm5lY3QnKSAmJiA8REIgc3RvcmU9e3N0b3JlfSAvPn1cbiAgICAgICAgICAgIHshaXNBZnRlclN0b3BQb2ludChzdG9wQWZ0ZXIsICdpbnRyb3NwZWN0aW9uJykgJiYgKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxJbnRyb3NwZWN0IHN0b3JlPXtzdG9yZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgPE91dHB1dEpzb24gc3RvcmU9e3N0b3JlfSAvPlxuICAgICAgICAgICAgICAgICAgICB7IWlzQWZ0ZXJTdG9wUG9pbnQoc3RvcEFmdGVyLCAnc2FtcGxpbmcnKSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdG9wQWZ0ZXIgPT09IG51bGwgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFjY291bnQgc3RvcmU9e3N0b3JlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJpbGxpbmcgc3RvcmU9e3N0b3JlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdhdGUgc3RvcmU9e3N0b3JlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxVc2VyRXhwbGFuYXRpb24gc3RvcmU9e3N0b3JlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdG9wQWZ0ZXIgPT09IG51bGwgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW50cm9zcGVjdGlvblVwbG9hZCBzdG9yZT17c3RvcmV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RvcEFmdGVyID09PSBudWxsICYmIDxFbnJpY2ggc3RvcmU9e3N0b3JlfSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2FtcGxpbmcgc3RvcmU9e3N0b3JlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdG9wQWZ0ZXIgPT09IG51bGwgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2FtcGxlc1VwbG9hZCBzdG9yZT17c3RvcmV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RvcEFmdGVyID09PSBudWxsICYmIDxBbmFseXplIHN0b3JlPXtzdG9yZX0gLz59XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59KTtcbiIsICJpbXBvcnQge0JveCwgVGV4dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7b2JzZXJ2ZXJ9IGZyb20gJ21vYngtcmVhY3QtbGl0ZSc7XG5pbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uLy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQge1NwaW5uZXJ9IGZyb20gJy4vU3Bpbm5lci5qcyc7XG5pbXBvcnQge1Bhc3N3b3JkSW5wdXR9IGZyb20gJy4vUGFzc3dvcmRJbnB1dC5qcyc7XG5cbnR5cGUgVFNTSFByb3BzID0ge1xuICAgIHN0b3JlOiBUU3RvcmU7XG59O1xuXG5leHBvcnQgY29uc3QgU1NIID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFRTU0hQcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgY29uc3Qgc3NoID0gc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbjtcblxuICAgIGlmICghc3NoLmVuYWJsZWQgfHwgc3NoLnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcG9ydFN1ZmZpeCA9IHNzaC5waWNrZWRQb3J0ID09PSAyMiA/ICcnIDogYDoke3NzaC5waWNrZWRQb3J0fWA7XG4gICAgY29uc3QgdGFyZ2V0ID0gYCR7c3NoLnBpY2tlZFVzZXJuYW1lfUAke3NzaC5waWNrZWRIb3N0bmFtZX0ke3BvcnRTdWZmaXh9YDtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICB7c3NoLnN0YXRlID09PSAnY29ubmVjdGluZycgPyAoXG4gICAgICAgICAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgICAgICAgICkgOiBzc2guc3RhdGUgPT09ICdjb25uZWN0ZWQnID8gKFxuICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKSA6IHNzaC5zdGF0ZSA9PT0gJ25lZWQtcGFzc3dvcmQnID8gKFxuICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyYXlcIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIDxUZXh0IGJvbGQ+U1NIOiA8L1RleHQ+XG5cbiAgICAgICAgICAgIHtzc2guc3RhdGUgPT09ICdjb25uZWN0aW5nJyA/IChcbiAgICAgICAgICAgICAgICA8VGV4dD5jb25uZWN0aW5nIHRvIHt0YXJnZXR9PC9UZXh0PlxuICAgICAgICAgICAgKSA6IHNzaC5zdGF0ZSA9PT0gJ25lZWQtcGFzc3dvcmQnID8gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtzc2gud3JvbmdBdHRlbXB0ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3NoLnBhc3N3b3JkUHJvbXB0VHlwZSA9PT0gJ3Bhc3NwaHJhc2UnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ1dyb25nIHBhc3NwaHJhc2UuICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnV3JvbmcgcGFzc3dvcmQuICd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICB7c3NoLnBhc3N3b3JkUHJvbXB0VHlwZSA9PT0gJ3Bhc3NwaHJhc2UnID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50ZXIgcGFzc3BocmFzZSBmb3Iga2V5eycgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImN5YW5cIj57c3NoLnBpY2tlZEtleVBhdGh9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnOiAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50ZXIgcGFzc3dvcmQgZm9yeycgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImN5YW5cIj57dGFyZ2V0fTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JzogJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPFBhc3N3b3JkSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uU3VibWl0PXsodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ucGFzc3dvcmQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e3NzaC5wcm9tcHRDb3VudH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICkgOiBzc2guc3RhdGUgPT09ICdjb25uZWN0ZWQnID8gKFxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JlZW5cIj5jb25uZWN0ZWQgdG8ge3RhcmdldH08L1RleHQ+XG4gICAgICAgICAgICApIDogc3NoLnN0YXRlID09PSAnZXJyb3InID8gKFxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwicmVkXCI+XG4gICAgICAgICAgICAgICAgICAgIEVycm9yOiB7c3NoLmVycm9yfSBcdTIwMTQge3RhcmdldH1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwicmVkXCI+Y2xvc2VkPC9UZXh0PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn0pO1xuIiwgImltcG9ydCB7Qm94LCBUZXh0fSBmcm9tICdpbmsnO1xuaW1wb3J0IHR5cGUge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VTdGF0ZSwgdXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IGdldERlZmF1bHRDaGFyYWN0ZXJzID0gKCk6IHJlYWRvbmx5IHN0cmluZ1tdID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuVEVSTSA9PT0gJ3h0ZXJtLWdob3N0dHknKSB7XG4gICAgICAgIHJldHVybiBbJ1x1MDBCNycsICdcdTI3MjInLCAnXHUyNzMzJywgJ1x1MjczNicsICdcdTI3M0InLCAnKiddIGFzIGNvbnN0O1xuICAgIH1cbiAgICByZXR1cm4gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbidcbiAgICAgICAgPyAoWydcdTAwQjcnLCAnXHUyNzIyJywgJ1x1MjczMycsICdcdTI3MzYnLCAnXHUyNzNCJywgJ1x1MjczRCddIGFzIGNvbnN0KVxuICAgICAgICA6IChbJ1x1MDBCNycsICdcdTI3MjInLCAnKicsICdcdTI3MzYnLCAnXHUyNzNCJywgJ1x1MjczRCddIGFzIGNvbnN0KTtcbn07XG5cbmNvbnN0IERFRkFVTFRfQ0hBUkFDVEVSUyA9IGdldERlZmF1bHRDaGFyYWN0ZXJzKCk7XG5jb25zdCBTUElOTkVSX0ZSQU1FUyA9IE9iamVjdC5mcmVlemUoW1xuICAgIC4uLkRFRkFVTFRfQ0hBUkFDVEVSUyxcbiAgICAuLi5bLi4uREVGQVVMVF9DSEFSQUNURVJTXS5yZXZlcnNlKCksXG5dKTtcblxuY29uc3QgU1BJTk5FUl9JTlRFUlZBTCA9IDEyMDtcblxuZXhwb3J0IGNvbnN0IFNwaW5uZXIgPSAoKTogUmVhY3ROb2RlID0+IHtcbiAgICBjb25zdCBbZnJhbWUsIHNldEZyYW1lXSA9IHVzZVN0YXRlKDApO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBzZXRGcmFtZSgocHJldikgPT4gKHByZXYgKyAxKSAlIFNQSU5ORVJfRlJBTUVTLmxlbmd0aCk7XG4gICAgICAgIH0sIFNQSU5ORVJfSU5URVJWQUwpO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGhlaWdodD17MX0gd2lkdGg9ezJ9PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9XCJjeWFuXCI+e1NQSU5ORVJfRlJBTUVTW2ZyYW1lXX08L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59O1xuIiwgImltcG9ydCB7VGV4dCwgdXNlSW5wdXR9IGZyb20gJ2luayc7XG5pbXBvcnQgdHlwZSB7UmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZVN0YXRlLCB1c2VFZmZlY3R9IGZyb20gJ3JlYWN0JztcblxuY29uc3QgQ1VSU09SX0lOVEVSVkFMID0gNTAwO1xuXG50eXBlIFRQYXNzd29yZElucHV0UHJvcHMgPSB7XG4gICAgcmVhZG9ubHkgb25TdWJtaXQ6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IFBhc3N3b3JkSW5wdXQgPSAoe29uU3VibWl0fTogVFBhc3N3b3JkSW5wdXRQcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJyk7XG4gICAgY29uc3QgW2N1cnNvclZpc2libGUsIHNldEN1cnNvclZpc2libGVdID0gdXNlU3RhdGUodHJ1ZSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHNldEN1cnNvclZpc2libGUoKHByZXYpID0+ICFwcmV2KTtcbiAgICAgICAgfSwgQ1VSU09SX0lOVEVSVkFMKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuXG4gICAgdXNlSW5wdXQoKGlucHV0LCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleS5yZXR1cm4pIHtcbiAgICAgICAgICAgIG9uU3VibWl0KHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkuYmFja3NwYWNlIHx8IGtleS5kZWxldGUpIHtcbiAgICAgICAgICAgIHNldFZhbHVlKChwcmV2KSA9PiBwcmV2LnNsaWNlKDAsIC0xKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5LmN0cmwgfHwga2V5Lm1ldGEgfHwga2V5LmVzY2FwZSB8fCBrZXkudGFiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZXRWYWx1ZSgocHJldikgPT4gcHJldiArIGlucHV0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgeycqJy5yZXBlYXQodmFsdWUubGVuZ3RoKX1cbiAgICAgICAgICAgIHtjdXJzb3JWaXNpYmxlID8gJ1x1MjU4OCcgOiAnICd9XG4gICAgICAgIDwvVGV4dD5cbiAgICApO1xufTtcbiIsICJpbXBvcnQge0JveCwgVGV4dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7b2JzZXJ2ZXJ9IGZyb20gJ21vYngtcmVhY3QtbGl0ZSc7XG5pbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uLy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQge1NwaW5uZXJ9IGZyb20gJy4vU3Bpbm5lci5qcyc7XG5pbXBvcnQge1Bhc3N3b3JkSW5wdXR9IGZyb20gJy4vUGFzc3dvcmRJbnB1dC5qcyc7XG5cbnR5cGUgVERCUHJvcHMgPSB7XG4gICAgcmVhZG9ubHkgc3RvcmU6IFRTdG9yZTtcbn07XG5cbmV4cG9ydCBjb25zdCBEQiA9IG9ic2VydmVyKCh7c3RvcmV9OiBUREJQcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgY29uc3QgZGIgPSBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb247XG5cbiAgICBpZiAoZGIuc3RhdGUgPT09ICdpZGxlJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwb3J0U3VmZml4ID0gZGIucGlja2VkUG9ydCA9PT0gNTQzMiA/ICcnIDogYDoke2RiLnBpY2tlZFBvcnR9YDtcbiAgICBjb25zdCB0YXJnZXQgPSBgJHtkYi5waWNrZWREYXRhYmFzZX1AJHtkYi5waWNrZWRIb3N0bmFtZX0ke3BvcnRTdWZmaXh9YDtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICB7ZGIuc3RhdGUgPT09ICdjb25uZWN0aW5nJyA/IChcbiAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgKSA6IGRiLnN0YXRlID09PSAnY29ubmVjdGVkJyA/IChcbiAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXsyfT5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmVlblwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICkgOiBkYi5zdGF0ZSA9PT0gJ25lZWQtcGFzc3dvcmQnID8gKFxuICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyYXlcIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIDxUZXh0IGJvbGQ+REI6IDwvVGV4dD5cblxuICAgICAgICAgICAge2RiLnN0YXRlID09PSAnY29ubmVjdGluZycgPyAoXG4gICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgIGNvbm5lY3RpbmcgdG8ge3RhcmdldH0gYXN7JyAnfVxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImN5YW5cIj57ZGIucGlja2VkVXNlcm5hbWV9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICkgOiBkYi5zdGF0ZSA9PT0gJ25lZWQtcGFzc3dvcmQnID8gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtkYi53cm9uZ0F0dGVtcHQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPldyb25nIHBhc3N3b3JkLiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIEVudGVyIHBhc3N3b3JkIGZvcnsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImN5YW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGIucGlja2VkVXNlcm5hbWV9QHtkYi5waWNrZWRIb3N0bmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cG9ydFN1ZmZpeH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsnOiAnfVxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxQYXNzd29yZElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBvblN1Ym1pdD17KHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucGFzc3dvcmQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2RiLnByb21wdENvdW50fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKSA6IGRiLnN0YXRlID09PSAnY29ubmVjdGVkJyA/IChcbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZCB0byB7dGFyZ2V0fVxuICAgICAgICAgICAgICAgICAgICB7ZGIucG9zdGdyZXNWZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGAgKFBvc3RncmVTUUwgJHtkYi5wb3N0Z3Jlc1ZlcnNpb259KWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJyd9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPlxuICAgICAgICAgICAgICAgICAgICBFcnJvcjoge2RiLmVycm9yfVxuICAgICAgICAgICAgICAgICAgICB7ZGIucGlja2VkSG9zdG5hbWUgIT09IG51bGwgPyBgIFx1MjAxNCAke3RhcmdldH1gIDogJyd9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn0pO1xuIiwgImltcG9ydCB7Qm94LCBUZXh0fSBmcm9tICdpbmsnO1xuaW1wb3J0IHR5cGUge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VTdGF0ZSwgdXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge29ic2VydmVyfSBmcm9tICdtb2J4LXJlYWN0LWxpdGUnO1xuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vLi4vc3RvcmUubWpzJztcbmltcG9ydCB7U3Bpbm5lcn0gZnJvbSAnLi9TcGlubmVyLmpzJztcblxuY29uc3QgUEhBU0VfVEVYVFMgPSBbXG4gICAgJ2ZldGNoaW5nIHRhYmxlcyAvIHZpZXdzJyxcbiAgICAnYW5hbHl6aW5nIHRhYmxlcycsXG4gICAgJ2ZldGNoaW5nIGNvbHVtbnMnLFxuICAgICdmZXRjaGluZyBpbmRleGVzJyxcbiAgICAnZmV0Y2hpbmcgZm9yZWlnbiBrZXkgcmVmZXJlbmNlcycsXG4gICAgJ2ZldGNoaW5nIHN0YXRpc3RpY3MnLFxuICAgICdmZXRjaGluZyBlbnVtcycsXG5dIGFzIGNvbnN0O1xuXG5jb25zdCBQSEFTRV9JTlRFUlZBTCA9IDE1MDA7XG5cbnR5cGUgVEludHJvc3BlY3RQcm9wcyA9IHtcbiAgICByZWFkb25seSBzdG9yZTogVFN0b3JlO1xufTtcblxuY29uc3QgQ291bnRzTGluZSA9IG9ic2VydmVyKCh7c3RvcmV9OiBUSW50cm9zcGVjdFByb3BzKTogUmVhY3ROb2RlID0+IHtcbiAgICBjb25zdCB7Y291bnRzfSA9IHN0b3JlLnN0ZXBzLmludHJvc3BlY3Rpb247XG4gICAgY29uc3QgcGFydHMgPSBbXG4gICAgICAgIGNvdW50cy50YWJsZXMgPiAwID8gYCR7Y291bnRzLnRhYmxlc30gdGFibGVzYCA6IG51bGwsXG4gICAgICAgIGNvdW50cy52aWV3cyA+IDAgPyBgJHtjb3VudHMudmlld3N9IHZpZXdzYCA6IG51bGwsXG4gICAgICAgIGNvdW50cy5hbmFseXplZCA+IDAgPyBgJHtjb3VudHMuYW5hbHl6ZWR9IGFuYWx5emVkYCA6IG51bGwsXG4gICAgICAgIGNvdW50cy5jb2x1bW5zID4gMCA/IGAke2NvdW50cy5jb2x1bW5zfSBjb2x1bW5zYCA6IG51bGwsXG4gICAgICAgIGNvdW50cy5pbmRleGVzID4gMCA/IGAke2NvdW50cy5pbmRleGVzfSBpbmRleGVzYCA6IG51bGwsXG4gICAgICAgIGNvdW50cy5mb3JlaWduS2V5cyA+IDAgPyBgJHtjb3VudHMuZm9yZWlnbktleXN9IGZrIHJlZnNgIDogbnVsbCxcbiAgICAgICAgY291bnRzLmVudW1zID4gMCA/IGAke2NvdW50cy5lbnVtc30gZW51bXNgIDogbnVsbCxcbiAgICBdLmZpbHRlcihCb29sZWFuKTtcblxuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveD5cbiAgICAgICAgICAgIDxUZXh0PnsnICAnfTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JheVwiPntwYXJ0cy5qb2luKCcgXHUwMEI3ICcpfTwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn0pO1xuXG5leHBvcnQgY29uc3QgSW50cm9zcGVjdCA9IG9ic2VydmVyKCh7c3RvcmV9OiBUSW50cm9zcGVjdFByb3BzKTogUmVhY3ROb2RlID0+IHtcbiAgICBjb25zdCBpbnRybyA9IHN0b3JlLnN0ZXBzLmludHJvc3BlY3Rpb247XG4gICAgY29uc3QgW3BoYXNlLCBzZXRQaGFzZV0gPSB1c2VTdGF0ZSgwKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChpbnRyby5zdGF0ZSAhPT0gJ2ZldGNoaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGhhc2VJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHNldFBoYXNlKChwcmV2KSA9PiAocHJldiArIDEpICUgUEhBU0VfVEVYVFMubGVuZ3RoKTtcbiAgICAgICAgfSwgUEhBU0VfSU5URVJWQUwpO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHBoYXNlSWQpO1xuICAgICAgICB9O1xuICAgIH0sIFtpbnRyby5zdGF0ZV0pO1xuXG4gICAgaWYgKGludHJvLnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGludHJvLnN0YXRlID09PSAnZXJyb3InKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwicmVkXCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj5FcnJvcjoge2ludHJvLmVycm9yfTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChpbnRyby5zdGF0ZSA9PT0gJ2RvbmUnKSB7XG4gICAgICAgIGNvbnN0IHtjb3VudHN9ID0gaW50cm87XG4gICAgICAgIGNvbnN0IHBhcnRzID0gW1xuICAgICAgICAgICAgY291bnRzLnRhYmxlcyA+IDAgPyBgJHtjb3VudHMudGFibGVzfSB0YWJsZXNgIDogbnVsbCxcbiAgICAgICAgICAgIGNvdW50cy52aWV3cyA+IDAgPyBgJHtjb3VudHMudmlld3N9IHZpZXdzYCA6IG51bGwsXG4gICAgICAgICAgICBjb3VudHMuY29sdW1ucyA+IDAgPyBgJHtjb3VudHMuY29sdW1uc30gY29sdW1uc2AgOiBudWxsLFxuICAgICAgICAgICAgY291bnRzLmluZGV4ZXMgPiAwID8gYCR7Y291bnRzLmluZGV4ZXN9IGluZGV4ZXNgIDogbnVsbCxcbiAgICAgICAgICAgIGNvdW50cy5mb3JlaWduS2V5cyA+IDAgPyBgJHtjb3VudHMuZm9yZWlnbktleXN9IGZrIHJlZnNgIDogbnVsbCxcbiAgICAgICAgICAgIGNvdW50cy5lbnVtcyA+IDAgPyBgJHtjb3VudHMuZW51bXN9IGVudW1zYCA6IG51bGwsXG4gICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBib2xkPklOVFJPU1BFQ1RJT046IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmVlblwiPmludHJvc3BlY3RlZCB7cGFydHMuam9pbignIFx1MDBCNyAnKX08L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAge2ludHJvLmZpbGVTdGF0c1NraXBwZWQgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dD57JyAgJ308L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHN0YXRzIHNraXBwZWQgKGluc3VmZmljaWVudCBwcml2aWxlZ2VzKVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+SU5UUk9TUEVDVElPTjogPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PntQSEFTRV9URVhUU1twaGFzZV19Li4uPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Q291bnRzTGluZSBzdG9yZT17c3RvcmV9IC8+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59KTtcbiIsICJpbXBvcnQge0JveCwgVGV4dCwgdXNlSW5wdXR9IGZyb20gJ2luayc7XG5pbXBvcnQgdHlwZSB7UmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZVN0YXRlLCB1c2VFZmZlY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7b2JzZXJ2ZXJ9IGZyb20gJ21vYngtcmVhY3QtbGl0ZSc7XG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi8uLi9zdG9yZS5tanMnO1xuaW1wb3J0IHtvcGVuU2Vzc2lvblVSTCwgc2hvdWxkT3BlbkJyb3dzZXJ9IGZyb20gJy4uLy4uL2FwcC9vcGVuLXVybC5tanMnO1xuaW1wb3J0IHtTcGlubmVyfSBmcm9tICcuL1NwaW5uZXIuanMnO1xuXG50eXBlIFRTZXNzaW9uUHJvcHMgPSB7XG4gICAgcmVhZG9ubHkgc3RvcmU6IFRTdG9yZTtcbn07XG5cbmNvbnN0IHRlcm1pbmFsTGluayA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyA9PiBgJHt1cmx9YDtcblxuY29uc3QgY2FuT3BlbiA9IHNob3VsZE9wZW5Ccm93c2VyKCk7XG5cbmV4cG9ydCBjb25zdCBBY2NvdW50ID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFRTZXNzaW9uUHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IGFjY291bnQgPSBzdG9yZS5zdGVwcy5hY2NvdW50O1xuICAgIGNvbnN0IFtkb3RWaXNpYmxlLCBzZXREb3RWaXNpYmxlXSA9IHVzZVN0YXRlKHRydWUpO1xuICAgIGNvbnN0IFtvcGVuZWQsIHNldE9wZW5lZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoYWNjb3VudC5zdGF0ZSAhPT0gJ3dhaXRpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHNldERvdFZpc2libGUoKHByZXYpID0+ICFwcmV2KTtcbiAgICAgICAgfSwgNzUwKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH07XG4gICAgfSwgW2FjY291bnQuc3RhdGVdKTtcblxuICAgIHVzZUlucHV0KFxuICAgICAgICAoX2lucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkucmV0dXJuICYmIGFjY291bnQudXJsKSB7XG4gICAgICAgICAgICAgICAgc2V0T3BlbmVkKHRydWUpO1xuICAgICAgICAgICAgICAgIG9wZW5TZXNzaW9uVVJMKGFjY291bnQudXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge2lzQWN0aXZlOiBhY2NvdW50LnN0YXRlID09PSAnd2FpdGluZycgJiYgY2FuT3Blbn0sXG4gICAgKTtcblxuICAgIGlmIChhY2NvdW50LnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGFjY291bnQuc3RhdGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkFDQ09VTlQ6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPnthY2NvdW50LmVycm9yfTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChhY2NvdW50LnN0YXRlID09PSAnY29ubmVjdGVkJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD5BQ0NPVU5UOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+Y29ubmVjdGVkIHRvIGFjY291bnQgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+e2FjY291bnQuZW1haWx9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFjY291bnQuc3RhdGUgPT09ICdmZXRjaGluZy1hY2NvdW50Jykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+QUNDT1VOVDogPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PmNvbm5lY3RpbmcuLi48L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYWNjb3VudC5zdGF0ZSA9PT0gJ3dhaXRpbmcnKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyYXlcIj57ZG90VmlzaWJsZSA/ICdcdTI1Q0YnIDogJyAnfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgYm9sZD5BQ0NPVU5UPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgIDxCb3hcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU9XCJzaW5nbGVcIlxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nWD17Mn1cbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1k9ezF9XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ9ezF9XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckRpbUNvbG9yXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPXs5Mn1cbiAgICAgICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkxvZ2luIHRvIHlvdXIgZGJjdHguaW8gYWNjb3VudHsnXFxuJ308L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXsnY3lhbid9Pnt0ZXJtaW5hbExpbmsoYWNjb3VudC51cmwhKX08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIHtjYW5PcGVuID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmF5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlc3MgRW50ZXIgdG8ge29wZW5lZCA/ICdyZS1vcGVuJyA6ICdvcGVuJ30gaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2VyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICA8VGV4dD57J1xcblxcbid9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPldhaXRpbmcgZm9yIGxvZ2luIC4uLjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94PlxuICAgICAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgICAgICAgIDxUZXh0IGJvbGQ+QUNDT1VOVDogPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQ+Y3JlYXRpbmcuLi48L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59KTtcbiIsICJpbXBvcnQge2Vudn0gZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQge0RCQ1RYX0RFVn0gZnJvbSAnLi4vbGliL2Vudi5tanMnO1xuXG5jb25zdCBTS0lQX1ZBTFVFUyA9IG5ldyBTZXQoWydub25lJywgJ2ZhbHNlJywgJzAnXSk7XG5cbmNvbnN0IGlzRG9ja2VyID0gKCk6IGJvb2xlYW4gPT5cbiAgICAhIShlbnYuRE9DS0VSIHx8IGVudi5jb250YWluZXIgfHwgZW52LkRPQ0tFUl9DT05UQUlORVIpO1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkT3BlbkJyb3dzZXIgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKGlzRG9ja2VyKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXIgPSBlbnYuQlJPV1NFUj8udG9Mb3dlckNhc2UoKTtcblxuICAgIHJldHVybiAhYnJvd3NlciB8fCAhU0tJUF9WQUxVRVMuaGFzKGJyb3dzZXIpO1xufTtcblxuY29uc3QgU0VTU0lPTl9CQVNFX1VSTCA9ICFEQkNUWF9ERVZcbiAgICA/ICdodHRwczovL2RiY3R4LmlvL2F1dGhvcml6ZS9zZXNzaW9uJ1xuICAgIDogJ2h0dHA6Ly9sb2NhbGhvc3Q6MTIwMDIvYXV0aG9yaXplL3Nlc3Npb24nO1xuXG5jb25zdCBDT05ORUNUX0JBU0VfVVJMID0gIURCQ1RYX0RFVlxuICAgID8gJ2h0dHBzOi8vZGJjdHguaW8vY29ubmVjdCdcbiAgICA6ICdodHRwOi8vbG9jYWxob3N0OjEyMDAyL2Nvbm5lY3QnO1xuXG5leHBvcnQgY29uc3QgYnVpbGRTZXNzaW9uVVJMID0gKHNlc3Npb25JZDogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgYCR7U0VTU0lPTl9CQVNFX1VSTH0/c2Vzc2lvbi1pZD0ke3Nlc3Npb25JZH1gO1xuXG5leHBvcnQgY29uc3QgYnVpbGRDb25uZWN0VVJMID0gKGxvZ2luSWQ6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgIGAke0NPTk5FQ1RfQkFTRV9VUkx9P2xvZ2luLWlkPSR7bG9naW5JZH1gO1xuXG5leHBvcnQgY29uc3Qgb3BlblVSTCA9IGFzeW5jICh1cmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICghc2hvdWxkT3BlbkJyb3dzZXIoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qge2RlZmF1bHQ6IG9wZW59ID0gYXdhaXQgaW1wb3J0KCdvcGVuJyk7XG4gICAgICAgIGF3YWl0IG9wZW4odXJsKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gQnJvd3NlciBvcGVuaW5nIGlzIGJlc3QtZWZmb3J0IFx1MjAxNCBuby1vcCBvbiBmYWlsdXJlXG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IG9wZW5TZXNzaW9uVVJMID0gb3BlblVSTDtcbiIsICJleHBvcnQgY29uc3QgREJDVFhfREVWID1cbiAgICBwcm9jZXNzLmVudlsnREJDVFhfREVWJ10gPT09ICcxJyB8fFxuICAgIHByb2Nlc3MuZW52WydEQkNUWF9ERVYnXSA9PT0gJ3RydWUnIHx8XG4gICAgcHJvY2Vzcy5lbnZbJ0RCQ1RYX0RFViddID09PSAnVFJVRSc7XG4iLCAiaW1wb3J0IHtCb3gsIFRleHQsIHVzZUlucHV0fSBmcm9tICdpbmsnO1xuaW1wb3J0IHR5cGUge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtvYnNlcnZlcn0gZnJvbSAnbW9ieC1yZWFjdC1saXRlJztcbmltcG9ydCB7cnVuSW5BY3Rpb259IGZyb20gJ21vYngnO1xuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vLi4vc3RvcmUubWpzJztcbmltcG9ydCB7U3Bpbm5lcn0gZnJvbSAnLi9TcGlubmVyLmpzJztcblxudHlwZSBUT3V0cHV0SnNvblByb3BzID0ge1xuICAgIHN0b3JlOiBUU3RvcmU7XG59O1xuXG5leHBvcnQgY29uc3QgT3V0cHV0SnNvbiA9IG9ic2VydmVyKCh7c3RvcmV9OiBUT3V0cHV0SnNvblByb3BzKTogUmVhY3ROb2RlID0+IHtcbiAgICBjb25zdCBvdXRwdXRKc29uID0gc3RvcmUuc3RlcHMub3V0cHV0SnNvbjtcblxuICAgIHVzZUlucHV0KFxuICAgICAgICAoX2lucHV0LCBfa2V5KSA9PiB7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMub3V0cHV0SnNvbi5jb25maXJtZWQgPSBfaW5wdXQudG9Mb3dlckNhc2UoKSA9PT0gJ3knO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHtpc0FjdGl2ZTogb3V0cHV0SnNvbi5zdGF0ZSA9PT0gJ3Byb21wdGluZy1vdmVyd3JpdGUnfSxcbiAgICApO1xuXG4gICAgaWYgKG91dHB1dEpzb24uc3RhdGUgPT09ICdpZGxlJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94PlxuICAgICAgICAgICAge291dHB1dEpzb24uc3RhdGUgPT09ICd3cml0aW5nJyA/IChcbiAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgKSA6IG91dHB1dEpzb24uc3RhdGUgPT09ICdkb25lJyA/IChcbiAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXsyfT5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmVlblwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICkgOiBvdXRwdXRKc29uLnN0YXRlID09PSAnZXJyb3InID8gKFxuICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwieWVsbG93XCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPFRleHQgYm9sZD5JTlRST1NQRUNUSU9OIE9VVFBVVDogPC9UZXh0PlxuXG4gICAgICAgICAgICB7b3V0cHV0SnNvbi5zdGF0ZSA9PT0gJ3Byb21wdGluZy1vdmVyd3JpdGUnID8gKFxuICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICBGaWxlIDxUZXh0IGNvbG9yPVwiY3lhblwiPntvdXRwdXRKc29uLnBhdGh9PC9UZXh0PiBhbHJlYWR5XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0cy4gT3ZlcndyaXRlPyBbeS9OXXsnICd9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKSA6IG91dHB1dEpzb24uc3RhdGUgPT09ICd3cml0aW5nJyA/IChcbiAgICAgICAgICAgICAgICA8VGV4dD53cml0aW5nIGludHJvc3BlY3Rpb24gSlNPTjwvVGV4dD5cbiAgICAgICAgICAgICkgOiBvdXRwdXRKc29uLnN0YXRlID09PSAnZG9uZScgPyAoXG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmVlblwiPlxuICAgICAgICAgICAgICAgICAgICB3cml0dGVuIHRvIDxUZXh0IGNvbG9yPVwiY3lhblwiPntvdXRwdXRKc29uLnBhdGh9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICkgOiBvdXRwdXRKc29uLnN0YXRlID09PSAnZXJyb3InID8gKFxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwicmVkXCI+RXJyb3I6IHtvdXRwdXRKc29uLmVycm9yfTwvVGV4dD5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L0JveD5cbiAgICApO1xufSk7XG4iLCAiaW1wb3J0IHtCb3gsIFRleHR9IGZyb20gJ2luayc7XG5pbXBvcnQgdHlwZSB7UmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge29ic2VydmVyfSBmcm9tICdtb2J4LXJlYWN0LWxpdGUnO1xuaW1wb3J0IHtydW5JbkFjdGlvbn0gZnJvbSAnbW9ieCc7XG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi8uLi9zdG9yZS5tanMnO1xuaW1wb3J0IHtUZXh0SW5wdXR9IGZyb20gJy4vVGV4dElucHV0LmpzJztcblxudHlwZSBUVXNlckV4cGxhbmF0aW9uUHJvcHMgPSB7XG4gICAgcmVhZG9ubHkgc3RvcmU6IFRTdG9yZTtcbn07XG5cbmNvbnN0IFRSVU5DQVRFX0xFTkdUSCA9IDgwO1xuXG5jb25zdCB0cnVuY2F0ZSA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgICB0ZXh0Lmxlbmd0aCA+IFRSVU5DQVRFX0xFTkdUSFxuICAgICAgICA/IGAke3RleHQuc2xpY2UoMCwgVFJVTkNBVEVfTEVOR1RIKX0uLi5gXG4gICAgICAgIDogdGV4dDtcblxuZXhwb3J0IGNvbnN0IFVzZXJFeHBsYW5hdGlvbiA9IG9ic2VydmVyKFxuICAgICh7c3RvcmV9OiBUVXNlckV4cGxhbmF0aW9uUHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgICAgICBjb25zdCBzdGVwID0gc3RvcmUuc3RlcHMudXNlckV4cGxhbmF0aW9uO1xuXG4gICAgICAgIGlmIChzdGVwLnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0ZXAuc3RhdGUgPT09ICdkb25lJykge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JlZW5cIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgYm9sZD5FWFBMQU5BVElPTjogPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+e3RydW5jYXRlKHN0ZXAudmFsdWUgPz8gJycpfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGFuZGxlU3VibWl0ID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7XG4gICAgICAgICAgICBpZiAodHJpbW1lZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMudXNlckV4cGxhbmF0aW9uLnZhbHVlID0gdHJpbW1lZDtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy51c2VyRXhwbGFuYXRpb24uc3RhdGUgPSAnZG9uZSc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJ5ZWxsb3dcIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+RVhQTEFOQVRJT046IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQ+RGVzY3JpYmUgdGhpcyBkYXRhYmFzZTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICA8Qm94IHBhZGRpbmdMZWZ0PXsyfSBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezk2fSBmbGV4RGlyZWN0aW9uPXsnY29sdW1uJ30gcGFkZGluZ1RvcD17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW50aW9uIHdoYXQga2luZCBvZiBEQiBpdCBpcywgd2hpY2ggYXBwIGl0J3MgZm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoYXQgdGhlIGJ1c2luZXNzIGlzLCBpZiBpdCdzIHN0YW5kYWxvbmUgb3IgcGFydCBvZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgbGFyZ2VyIGVjb3N5c3RlbSwgYW5kIHdoYXQgdGhlIGFwcCBkb2VzIChDdHJsK0pcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbmV3IGxpbmUpXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZT17c3RlcC5zdGF0ZSA9PT0gJ3Byb21wdGluZyd9XG4gICAgICAgICAgICAgICAgICAgICAgICBvblN1Ym1pdD17aGFuZGxlU3VibWl0fVxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIGEgbXVsdGktdmVuZG9yIGVjb21tZXJjZSBwbGF0Zm9ybSBwYXJ0IG9mIGEgbGFyZ2VyIHN1cGVyYXBwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVQcmVmaXg9eyhsaW5lTnVtYmVyLCB0b3RhbExpbmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBTdHJpbmcodG90YWxMaW5lcykubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bSA9IFN0cmluZyhsaW5lTnVtYmVyICsgMSkucGFkU3RhcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPntudW19PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmF5XCI+IFx1MjUwMyA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH0sXG4pO1xuIiwgImltcG9ydCB7Qm94LCBUZXh0LCB1c2VJbnB1dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlUmVmfSBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IENVUlNPUl9JTlRFUlZBTCA9IDUwMDtcbmNvbnN0IE1BWF9VTkRPID0gMTAwO1xuY29uc3QgVU5ET19HUk9VUF9ERUxBWSA9IDI1MDA7XG5cbnR5cGUgVFVuZG9FbnRyeSA9IHtyZWFkb25seSB2YWx1ZTogc3RyaW5nOyByZWFkb25seSBjdXJzb3I6IG51bWJlcn07XG50eXBlIFRNdXRhdGlvblR5cGUgPSAnaW5zZXJ0JyB8ICdkZWxldGUnO1xuXG5jb25zdCBmaW5kTGluZVN0YXJ0ID0gKHZhbHVlOiBzdHJpbmcsIGN1cnNvcjogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBpZHggPSB2YWx1ZS5sYXN0SW5kZXhPZignXFxuJywgY3Vyc29yIC0gMSk7XG4gICAgcmV0dXJuIGlkeCA9PT0gLTEgPyAwIDogaWR4ICsgMTtcbn07XG5cbmNvbnN0IGZpbmRMaW5lRW5kID0gKHZhbHVlOiBzdHJpbmcsIGN1cnNvcjogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBpZHggPSB2YWx1ZS5pbmRleE9mKCdcXG4nLCBjdXJzb3IpO1xuICAgIHJldHVybiBpZHggPT09IC0xID8gdmFsdWUubGVuZ3RoIDogaWR4O1xufTtcblxuY29uc3QgZmluZFByZXZXb3JkQm91bmRhcnkgPSAodmFsdWU6IHN0cmluZywgY3Vyc29yOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IGxpbmVTdGFydCA9IGZpbmRMaW5lU3RhcnQodmFsdWUsIGN1cnNvcik7XG4gICAgbGV0IHBvcyA9IGN1cnNvciAtIDE7XG4gICAgd2hpbGUgKHBvcyA+IGxpbmVTdGFydCAmJiAvXFxzLy50ZXN0KHZhbHVlW3Bvc10hKSAmJiB2YWx1ZVtwb3NdICE9PSAnXFxuJykge1xuICAgICAgICBwb3MgLT0gMTtcbiAgICB9XG4gICAgd2hpbGUgKHBvcyA+IGxpbmVTdGFydCAmJiAhL1xccy8udGVzdCh2YWx1ZVtwb3MgLSAxXSEpKSB7XG4gICAgICAgIHBvcyAtPSAxO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5tYXgobGluZVN0YXJ0LCBwb3MpO1xufTtcblxuY29uc3QgZmluZE5leHRXb3JkQm91bmRhcnkgPSAodmFsdWU6IHN0cmluZywgY3Vyc29yOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IGxpbmVFbmQgPSBmaW5kTGluZUVuZCh2YWx1ZSwgY3Vyc29yKTtcbiAgICBsZXQgcG9zID0gY3Vyc29yO1xuICAgIHdoaWxlIChwb3MgPCBsaW5lRW5kICYmICEvXFxzLy50ZXN0KHZhbHVlW3Bvc10hKSkge1xuICAgICAgICBwb3MgKz0gMTtcbiAgICB9XG4gICAgd2hpbGUgKHBvcyA8IGxpbmVFbmQgJiYgL1xccy8udGVzdCh2YWx1ZVtwb3NdISkgJiYgdmFsdWVbcG9zXSAhPT0gJ1xcbicpIHtcbiAgICAgICAgcG9zICs9IDE7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1pbihsaW5lRW5kLCBwb3MpO1xufTtcblxuY29uc3QgZ2V0Q3Vyc29yTGluZUFuZENvbHVtbiA9IChcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIGN1cnNvcjogbnVtYmVyLFxuKToge2xpbmU6IG51bWJlcjsgY29sdW1uOiBudW1iZXJ9ID0+IHtcbiAgICBsZXQgbGluZSA9IDA7XG4gICAgbGV0IGxhc3RMaW5lU3RhcnQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3Vyc29yOyBpKyspIHtcbiAgICAgICAgaWYgKHZhbHVlW2ldID09PSAnXFxuJykge1xuICAgICAgICAgICAgbGluZSArPSAxO1xuICAgICAgICAgICAgbGFzdExpbmVTdGFydCA9IGkgKyAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7bGluZSwgY29sdW1uOiBjdXJzb3IgLSBsYXN0TGluZVN0YXJ0fTtcbn07XG5cbnR5cGUgVExpbmVQcmVmaXhGbiA9IChsaW5lTnVtYmVyOiBudW1iZXIsIHRvdGFsTGluZXM6IG51bWJlcikgPT4gUmVhY3ROb2RlO1xuXG50eXBlIFRUZXh0SW5wdXRQcm9wcyA9IHtcbiAgICByZWFkb25seSBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgICByZWFkb25seSBvblN1Ym1pdDogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgcmVhZG9ubHkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgbGluZVByZWZpeD86IFJlYWN0Tm9kZSB8IFRMaW5lUHJlZml4Rm47XG59O1xuXG5leHBvcnQgY29uc3QgVGV4dElucHV0ID0gKHtcbiAgICBpc0FjdGl2ZSxcbiAgICBvblN1Ym1pdCxcbiAgICBwbGFjZWhvbGRlcixcbiAgICBsaW5lUHJlZml4LFxufTogVFRleHRJbnB1dFByb3BzKTogUmVhY3ROb2RlID0+IHtcbiAgICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW2N1cnNvclZpc2libGUsIHNldEN1cnNvclZpc2libGVdID0gdXNlU3RhdGUodHJ1ZSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHNldEN1cnNvclZpc2libGUoKHByZXYpID0+ICFwcmV2KTtcbiAgICAgICAgfSwgQ1VSU09SX0lOVEVSVkFMKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH07XG4gICAgfSwgW2lzQWN0aXZlXSk7XG5cbiAgICBjb25zdCB1bmRvU3RhY2sgPSB1c2VSZWY8VFVuZG9FbnRyeVtdPihbXSk7XG4gICAgY29uc3QgbGFzdE11dGF0aW9uVGltZSA9IHVzZVJlZigwKTtcbiAgICBjb25zdCBsYXN0TXV0YXRpb25UeXBlID0gdXNlUmVmPFRNdXRhdGlvblR5cGUgfCBudWxsPihudWxsKTtcblxuICAgIGNvbnN0IHJlc2V0QmxpbmsgPSAoKSA9PiB7XG4gICAgICAgIHNldEN1cnNvclZpc2libGUodHJ1ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHB1c2hVbmRvID0gKHR5cGU6IFRNdXRhdGlvblR5cGUpID0+IHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZCA9IG5vdyAtIGxhc3RNdXRhdGlvblRpbWUuY3VycmVudDtcbiAgICAgICAgY29uc3Qgc2FtZVR5cGUgPSB0eXBlID09PSBsYXN0TXV0YXRpb25UeXBlLmN1cnJlbnQ7XG5cbiAgICAgICAgbGFzdE11dGF0aW9uVGltZS5jdXJyZW50ID0gbm93O1xuICAgICAgICBsYXN0TXV0YXRpb25UeXBlLmN1cnJlbnQgPSB0eXBlO1xuXG4gICAgICAgIGlmIChlbGFwc2VkIDwgVU5ET19HUk9VUF9ERUxBWSAmJiBzYW1lVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhY2sgPSB1bmRvU3RhY2suY3VycmVudDtcbiAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+PSBNQVhfVU5ETykge1xuICAgICAgICAgICAgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICBzdGFjay5wdXNoKHt2YWx1ZSwgY3Vyc29yfSk7XG4gICAgfTtcblxuICAgIHVzZUlucHV0KFxuICAgICAgICAoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICAgICAgLy8gQ3RybCtKIFx1MjAxNCBpbnNlcnQgbmV3bGluZVxuICAgICAgICAgICAgaWYgKGtleS5jdHJsICYmIGlucHV0ID09PSAnaicpIHtcbiAgICAgICAgICAgICAgICByZXNldEJsaW5rKCk7XG4gICAgICAgICAgICAgICAgcHVzaFVuZG8oJ2luc2VydCcpO1xuICAgICAgICAgICAgICAgIHNldFZhbHVlKCh2KSA9PiB2LnNsaWNlKDAsIGN1cnNvcikgKyAnXFxuJyArIHYuc2xpY2UoY3Vyc29yKSk7XG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKChjKSA9PiBjICsgMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBFbnRlciBcdTIwMTQgc3VibWl0XG4gICAgICAgICAgICBpZiAoa2V5LnJldHVybikge1xuICAgICAgICAgICAgICAgIG9uU3VibWl0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFVwIGFycm93IFx1MjAxNCBtb3ZlIHRvIHNhbWUgY29sdW1uIG9uIHByZXZpb3VzIGxpbmVcbiAgICAgICAgICAgIGlmIChrZXkudXBBcnJvdykge1xuICAgICAgICAgICAgICAgIHJlc2V0QmxpbmsoKTtcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge2xpbmUsIGNvbHVtbn0gPSBnZXRDdXJzb3JMaW5lQW5kQ29sdW1uKHZhbHVlLCBjKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5kTGluZVN0YXJ0KHZhbHVlLCBjKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2TGluZUVuZCA9IGZpbmRMaW5lU3RhcnQodmFsdWUsIGMpIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldkxpbmVTdGFydCA9IGZpbmRMaW5lU3RhcnQodmFsdWUsIHByZXZMaW5lRW5kKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldkxpbmVMZW5ndGggPSBwcmV2TGluZUVuZCAtIHByZXZMaW5lU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2TGluZVN0YXJ0ICsgTWF0aC5taW4oY29sdW1uLCBwcmV2TGluZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEb3duIGFycm93IFx1MjAxNCBtb3ZlIHRvIG5leHQgbGluZSwgb3IgY3JlYXRlIG9uZSBpZiBvbiBsYXN0IGxpbmVcbiAgICAgICAgICAgIGlmIChrZXkuZG93bkFycm93KSB7XG4gICAgICAgICAgICAgICAgcmVzZXRCbGluaygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lRW5kID0gZmluZExpbmVFbmQodmFsdWUsIGN1cnNvcik7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRMaW5lRW5kID49IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBPbiBsYXN0IGxpbmUgXHUyMDE0IGluc2VydCBhIG5ldyBsaW5lIGFuZCBtb3ZlIGN1cnNvciB0aGVyZVxuICAgICAgICAgICAgICAgICAgICBwdXNoVW5kbygnaW5zZXJ0Jyk7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKCh2KSA9PiB2ICsgJ1xcbicpO1xuICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3IodmFsdWUubGVuZ3RoICsgMSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7Y29sdW1ufSA9IGdldEN1cnNvckxpbmVBbmRDb2x1bW4odmFsdWUsIGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dExpbmVTdGFydCA9IGN1cnJlbnRMaW5lRW5kICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRMaW5lRW5kID0gZmluZExpbmVFbmQodmFsdWUsIG5leHRMaW5lU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dExpbmVMZW5ndGggPSBuZXh0TGluZUVuZCAtIG5leHRMaW5lU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dExpbmVTdGFydCArIE1hdGgubWluKGNvbHVtbiwgbmV4dExpbmVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBMZWZ0IGFycm93XG4gICAgICAgICAgICBpZiAoa2V5LmxlZnRBcnJvdykge1xuICAgICAgICAgICAgICAgIHJlc2V0QmxpbmsoKTtcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKGMpID0+IE1hdGgubWF4KDAsIGMgLSAxKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSaWdodCBhcnJvd1xuICAgICAgICAgICAgaWYgKGtleS5yaWdodEFycm93KSB7XG4gICAgICAgICAgICAgICAgcmVzZXRCbGluaygpO1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4gTWF0aC5taW4odmFsdWUubGVuZ3RoLCBjICsgMSkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gT3B0K0xlZnQgKG1ldGErYikgXHUyMDE0IHdvcmQganVtcCBiYWNrd2FyZFxuICAgICAgICAgICAgaWYgKGtleS5tZXRhICYmIGlucHV0ID09PSAnYicpIHtcbiAgICAgICAgICAgICAgICByZXNldEJsaW5rKCk7XG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKChjKSA9PiBmaW5kUHJldldvcmRCb3VuZGFyeSh2YWx1ZSwgYykpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gT3B0K1JpZ2h0IChtZXRhK2YpIFx1MjAxNCB3b3JkIGp1bXAgZm9yd2FyZFxuICAgICAgICAgICAgaWYgKGtleS5tZXRhICYmIGlucHV0ID09PSAnZicpIHtcbiAgICAgICAgICAgICAgICByZXNldEJsaW5rKCk7XG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKChjKSA9PiBmaW5kTmV4dFdvcmRCb3VuZGFyeSh2YWx1ZSwgYykpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ3RybCtBIFx1MjAxNCBzdGFydCBvZiBjdXJyZW50IGxpbmVcbiAgICAgICAgICAgIGlmIChrZXkuY3RybCAmJiBpbnB1dCA9PT0gJ2EnKSB7XG4gICAgICAgICAgICAgICAgcmVzZXRCbGluaygpO1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4gZmluZExpbmVTdGFydCh2YWx1ZSwgYykpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ3RybCtFIFx1MjAxNCBlbmQgb2YgY3VycmVudCBsaW5lXG4gICAgICAgICAgICBpZiAoa2V5LmN0cmwgJiYgaW5wdXQgPT09ICdlJykge1xuICAgICAgICAgICAgICAgIHJlc2V0QmxpbmsoKTtcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKGMpID0+IGZpbmRMaW5lRW5kKHZhbHVlLCBjKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDdHJsK1cgXHUyMDE0IGRlbGV0ZSB3b3JkIGJlZm9yZSBjdXJzb3JcbiAgICAgICAgICAgIGlmIChrZXkuY3RybCAmJiBpbnB1dCA9PT0gJ3cnKSB7XG4gICAgICAgICAgICAgICAgcmVzZXRCbGluaygpO1xuICAgICAgICAgICAgICAgIHB1c2hVbmRvKCdkZWxldGUnKTtcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm91bmRhcnkgPSBmaW5kUHJldldvcmRCb3VuZGFyeSh2YWx1ZSwgYyk7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKCh2KSA9PiB2LnNsaWNlKDAsIGJvdW5kYXJ5KSArIHYuc2xpY2UoYykpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm91bmRhcnk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDdHJsK1UgXHUyMDE0IGRlbGV0ZSB0byBzdGFydCBvZiBjdXJyZW50IGxpbmVcbiAgICAgICAgICAgIGlmIChrZXkuY3RybCAmJiBpbnB1dCA9PT0gJ3UnKSB7XG4gICAgICAgICAgICAgICAgcmVzZXRCbGluaygpO1xuICAgICAgICAgICAgICAgIHB1c2hVbmRvKCdkZWxldGUnKTtcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGluZVN0YXJ0ID0gZmluZExpbmVTdGFydCh2YWx1ZSwgYyk7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKCh2KSA9PiB2LnNsaWNlKDAsIGxpbmVTdGFydCkgKyB2LnNsaWNlKGMpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmVTdGFydDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEN0cmwrSyBcdTIwMTQgZGVsZXRlIHRvIGVuZCBvZiBjdXJyZW50IGxpbmVcbiAgICAgICAgICAgIGlmIChrZXkuY3RybCAmJiBpbnB1dCA9PT0gJ2snKSB7XG4gICAgICAgICAgICAgICAgcmVzZXRCbGluaygpO1xuICAgICAgICAgICAgICAgIHB1c2hVbmRvKCdkZWxldGUnKTtcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGluZUVuZCA9IGZpbmRMaW5lRW5kKHZhbHVlLCBjKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoKHYpID0+IHYuc2xpY2UoMCwgYykgKyB2LnNsaWNlKGxpbmVFbmQpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCYWNrc3BhY2UgKHdpdGggT3B0K0JhY2tzcGFjZSBmb3Igd29yZCBkZWxldGlvbilcbiAgICAgICAgICAgIGlmIChrZXkuYmFja3NwYWNlIHx8IGtleS5kZWxldGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5Lm1ldGEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gT3B0K0RlbGV0ZSBcdTIwMTQgZGVsZXRlIHdvcmQgYmVmb3JlIGN1cnNvclxuICAgICAgICAgICAgICAgICAgICByZXNldEJsaW5rKCk7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hVbmRvKCdkZWxldGUnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm91bmRhcnkgPSBmaW5kUHJldldvcmRCb3VuZGFyeSh2YWx1ZSwgY3Vyc29yKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoKHYpID0+IHYuc2xpY2UoMCwgYm91bmRhcnkpICsgdi5zbGljZShjdXJzb3IpKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yKGJvdW5kYXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNldEJsaW5rKCk7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hVbmRvKCdkZWxldGUnKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoKHYpID0+IHYuc2xpY2UoMCwgY3Vyc29yIC0gMSkgKyB2LnNsaWNlKGN1cnNvcikpO1xuICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKGMpID0+IGMgLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDdHJsK1ogXHUyMDE0IHVuZG9cbiAgICAgICAgICAgIGlmIChrZXkuY3RybCAmJiBpbnB1dCA9PT0gJ3onKSB7XG4gICAgICAgICAgICAgICAgcmVzZXRCbGluaygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gdW5kb1N0YWNrLmN1cnJlbnQucG9wKCk7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKGVudHJ5LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q3Vyc29yKGVudHJ5LmN1cnNvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxhc3RNdXRhdGlvblRpbWUuY3VycmVudCA9IDA7XG4gICAgICAgICAgICAgICAgbGFzdE11dGF0aW9uVHlwZS5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElnbm9yZSBvdGhlciBjb250cm9sL21ldGEvZXNjYXBlL3RhYiBrZXlzXG4gICAgICAgICAgICBpZiAoa2V5LmN0cmwgfHwga2V5LmVzY2FwZSB8fCBrZXkudGFiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZWd1bGFyIGNoYXJhY3RlciBpbnB1dFxuICAgICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXNldEJsaW5rKCk7XG4gICAgICAgICAgICAgICAgcHVzaFVuZG8oJ2luc2VydCcpO1xuICAgICAgICAgICAgICAgIHNldFZhbHVlKCh2KSA9PiB2LnNsaWNlKDAsIGN1cnNvcikgKyBpbnB1dCArIHYuc2xpY2UoY3Vyc29yKSk7XG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKChjKSA9PiBjICsgaW5wdXQubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge2lzQWN0aXZlfSxcbiAgICApO1xuXG4gICAgY29uc3QgcmVuZGVyTGluZSA9IChcbiAgICAgICAgY29udGVudDogUmVhY3ROb2RlLFxuICAgICAgICBrZXk6IHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgbGluZU51bWJlcjogbnVtYmVyLFxuICAgICAgICB0b3RhbExpbmVzOiBudW1iZXIsXG4gICAgKTogUmVhY3ROb2RlID0+IHtcbiAgICAgICAgY29uc3QgcHJlZml4ID1cbiAgICAgICAgICAgIHR5cGVvZiBsaW5lUHJlZml4ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgPyBsaW5lUHJlZml4KGxpbmVOdW1iZXIsIHRvdGFsTGluZXMpXG4gICAgICAgICAgICAgICAgOiBsaW5lUHJlZml4O1xuXG4gICAgICAgIHJldHVybiBwcmVmaXggPyAoXG4gICAgICAgICAgICA8Qm94IGtleT17a2V5fT5cbiAgICAgICAgICAgICAgICB7cHJlZml4fVxuICAgICAgICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgICA8Qm94IGtleT17a2V5fT57Y29udGVudH08L0JveD5cbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgLy8gUmVuZGVyIHBsYWNlaG9sZGVyIHdoZW4gZW1wdHkgYW5kIG5vdCBmb2N1c2VkXG4gICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCAmJiAhaXNBY3RpdmUgJiYgcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIHtyZW5kZXJMaW5lKDxUZXh0IGRpbUNvbG9yPntwbGFjZWhvbGRlcn08L1RleHQ+LCAwLCAwLCAyKX1cbiAgICAgICAgICAgICAgICB7cmVuZGVyTGluZSg8VGV4dD4gPC9UZXh0PiwgMSwgMSwgMil9XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBSZW5kZXIgcGxhY2Vob2xkZXIgd2l0aCBjdXJzb3Igd2hlbiBlbXB0eSBhbmQgZm9jdXNlZFxuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDAgJiYgaXNBY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIHtyZW5kZXJMaW5lKFxuICAgICAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjdXJzb3JWaXNpYmxlID8gJ1xceDFiWzdtIFxceDFiWzI3bScgOiAnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICB7cGxhY2Vob2xkZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+e3BsYWNlaG9sZGVyfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+LFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAyLFxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge3JlbmRlckxpbmUoPFRleHQ+IDwvVGV4dD4sIDEsIDEsIDIpfVxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gTXVsdGktbGluZSByZW5kZXJpbmcgKG1pbmltdW0gMiB2aXNpYmxlIGxpbmVzKVxuICAgIGNvbnN0IGxpbmVzID0gdmFsdWUuc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IHRvdGFsTGluZXMgPSBNYXRoLm1heChsaW5lcy5sZW5ndGgsIDIpO1xuICAgIGNvbnN0IGhhc0NvbnRlbnQgPSB2YWx1ZS5yZXBsYWNlKC9cXG4vZywgJycpLmxlbmd0aCA+IDA7XG4gICAgY29uc3Qge2xpbmU6IGN1cnNvckxpbmUsIGNvbHVtbjogY3Vyc29yQ29sdW1ufSA9IGdldEN1cnNvckxpbmVBbmRDb2x1bW4oXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBjdXJzb3IsXG4gICAgKTtcblxuICAgIGNvbnN0IHJlbmRlcmVkTGluZXMgPSBsaW5lcy5tYXAoKGxpbmVUZXh0LCBsaW5lSWR4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQ3Vyc29yTGluZSA9IGxpbmVJZHggPT09IGN1cnNvckxpbmU7XG5cbiAgICAgICAgaWYgKCFpc0N1cnNvckxpbmUgfHwgIWlzQWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyTGluZShcbiAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAge2xpbmVUZXh0IHx8ICcgJ31cbiAgICAgICAgICAgICAgICAgICAge2xpbmVJZHggPT09IDAgJiYgIWhhc0NvbnRlbnQgJiYgcGxhY2Vob2xkZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57cGxhY2Vob2xkZXJ9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8L1RleHQ+LFxuICAgICAgICAgICAgICAgIGxpbmVJZHgsXG4gICAgICAgICAgICAgICAgbGluZUlkeCxcbiAgICAgICAgICAgICAgICB0b3RhbExpbmVzLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJlZm9yZSA9IGxpbmVUZXh0LnNsaWNlKDAsIGN1cnNvckNvbHVtbik7XG4gICAgICAgIGNvbnN0IGF0Q3Vyc29yID0gbGluZVRleHRbY3Vyc29yQ29sdW1uXSA/PyAnICc7XG4gICAgICAgIGNvbnN0IGFmdGVyID0gbGluZVRleHQuc2xpY2UoY3Vyc29yQ29sdW1uICsgMSk7XG5cbiAgICAgICAgcmV0dXJuIHJlbmRlckxpbmUoXG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICB7YmVmb3JlfVxuICAgICAgICAgICAgICAgIHtjdXJzb3JWaXNpYmxlXG4gICAgICAgICAgICAgICAgICAgID8gYFxceDFiWzdtJHthdEN1cnNvcn1cXHgxYlsyN21gXG4gICAgICAgICAgICAgICAgICAgIDogYXRDdXJzb3IgPT09ICcgJyAmJiBjdXJzb3JDb2x1bW4gPj0gbGluZVRleHQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgPyAnICdcbiAgICAgICAgICAgICAgICAgICAgICA6IGF0Q3Vyc29yfVxuICAgICAgICAgICAgICAgIHthZnRlcn1cbiAgICAgICAgICAgICAgICB7bGluZUlkeCA9PT0gMCAmJiAhaGFzQ29udGVudCAmJiBwbGFjZWhvbGRlciA/IChcbiAgICAgICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+e3BsYWNlaG9sZGVyfTwvVGV4dD5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvVGV4dD4sXG4gICAgICAgICAgICBsaW5lSWR4LFxuICAgICAgICAgICAgbGluZUlkeCxcbiAgICAgICAgICAgIHRvdGFsTGluZXMsXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBQYWQgdG8gbWluaW11bSAyIGxpbmVzIHNvIHRoZSBpbnB1dCB2aXN1YWxseSBzaWduYWxzIG11bHRpLWxpbmVcbiAgICB3aGlsZSAocmVuZGVyZWRMaW5lcy5sZW5ndGggPCAyKSB7XG4gICAgICAgIGNvbnN0IHBhZElkeCA9IHJlbmRlcmVkTGluZXMubGVuZ3RoO1xuICAgICAgICByZW5kZXJlZExpbmVzLnB1c2goXG4gICAgICAgICAgICByZW5kZXJMaW5lKDxUZXh0PiA8L1RleHQ+LCBgcGFkLSR7cGFkSWR4fWAsIHBhZElkeCwgdG90YWxMaW5lcyksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPntyZW5kZXJlZExpbmVzfTwvQm94Pjtcbn07XG4iLCAiaW1wb3J0IHtCb3gsIFRleHR9IGZyb20gJ2luayc7XG5pbXBvcnQgdHlwZSB7UmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge29ic2VydmVyfSBmcm9tICdtb2J4LXJlYWN0LWxpdGUnO1xuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vLi4vc3RvcmUubWpzJztcbmltcG9ydCB7U3Bpbm5lcn0gZnJvbSAnLi9TcGlubmVyLmpzJztcblxudHlwZSBUR2F0ZVByb3BzID0ge1xuICAgIHJlYWRvbmx5IHN0b3JlOiBUU3RvcmU7XG59O1xuXG5leHBvcnQgY29uc3QgR2F0ZSA9IG9ic2VydmVyKCh7c3RvcmV9OiBUR2F0ZVByb3BzKTogUmVhY3ROb2RlID0+IHtcbiAgICBjb25zdCBnYXRlID0gc3RvcmUuc3RlcHMuZ2F0ZTtcblxuICAgIGlmIChnYXRlLnN0YXRlID09PSAnaWRsZScgfHwgZ2F0ZS5zdGF0ZSA9PT0gJ3Bhc3NlZCcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGdhdGUuc3RhdGUgPT09ICdjaGVja2luZycpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgICAgICAgICAgICA8VGV4dD5jaGVja2luZy4uLjwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInllbGxvd1wiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+U0VSVkVSIFNBWVM6PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94XG4gICAgICAgICAgICAgICAgYm9yZGVyRGltQ29sb3JcbiAgICAgICAgICAgICAgICBib3JkZXJDb2xvcj17J3llbGxvd0JyaWdodCd9XG4gICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU9XCJib2xkXCJcbiAgICAgICAgICAgICAgICBwYWRkaW5nWD17Mn1cbiAgICAgICAgICAgICAgICBwYWRkaW5nWT17MX1cbiAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0PXsxfVxuICAgICAgICAgICAgICAgIHdpZHRoPXs5Mn0+XG4gICAgICAgICAgICAgICAgPFRleHQ+e2dhdGUubWVzc2FnZX08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn0pO1xuIiwgImltcG9ydCB7Qm94LCBUZXh0LCB1c2VJbnB1dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlU3RhdGUsIHVzZUVmZmVjdH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtvYnNlcnZlcn0gZnJvbSAnbW9ieC1yZWFjdC1saXRlJztcbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uLy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQge29wZW5TZXNzaW9uVVJMLCBzaG91bGRPcGVuQnJvd3Nlcn0gZnJvbSAnLi4vLi4vYXBwL29wZW4tdXJsLm1qcyc7XG5pbXBvcnQge1NwaW5uZXJ9IGZyb20gJy4vU3Bpbm5lci5qcyc7XG5cbnR5cGUgVEJpbGxpbmdQcm9wcyA9IHtcbiAgICByZWFkb25seSBzdG9yZTogVFN0b3JlO1xufTtcblxuY29uc3QgY2FuT3BlbiA9IHNob3VsZE9wZW5Ccm93c2VyKCk7XG5cbmV4cG9ydCBjb25zdCBCaWxsaW5nID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFRCaWxsaW5nUHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IGJpbGxpbmcgPSBzdG9yZS5zdGVwcy5iaWxsaW5nO1xuICAgIGNvbnN0IFtkb3RWaXNpYmxlLCBzZXREb3RWaXNpYmxlXSA9IHVzZVN0YXRlKHRydWUpO1xuICAgIGNvbnN0IFtvcGVuZWQsIHNldE9wZW5lZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoYmlsbGluZy5zdGF0ZSAhPT0gJ3dhaXRpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHNldERvdFZpc2libGUoKHByZXYpID0+ICFwcmV2KTtcbiAgICAgICAgfSwgNzUwKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH07XG4gICAgfSwgW2JpbGxpbmcuc3RhdGVdKTtcblxuICAgIHVzZUlucHV0KFxuICAgICAgICAoX2lucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkucmV0dXJuICYmIGJpbGxpbmcudXJsKSB7XG4gICAgICAgICAgICAgICAgc2V0T3BlbmVkKHRydWUpO1xuICAgICAgICAgICAgICAgIG9wZW5TZXNzaW9uVVJMKGJpbGxpbmcudXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge2lzQWN0aXZlOiBiaWxsaW5nLnN0YXRlID09PSAnd2FpdGluZycgJiYgY2FuT3Blbn0sXG4gICAgKTtcblxuICAgIGlmIChiaWxsaW5nLnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGJpbGxpbmcuc3RhdGUgPT09ICdjaGVja2luZycpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkJJTExJTkc6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD5jaGVja2luZy4uLjwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChiaWxsaW5nLnN0YXRlID09PSAnY29ubmVjdGVkJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD5CSUxMSU5HOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+cGF5bWVudCBtZXRob2QgY29ubmVjdGVkPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JheVwiPntkb3RWaXNpYmxlID8gJ1x1MjVDRicgOiAnICd9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD5CSUxMSU5HPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94XG4gICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU9XCJzaW5nbGVcIlxuICAgICAgICAgICAgICAgIHBhZGRpbmdYPXsyfVxuICAgICAgICAgICAgICAgIHBhZGRpbmdZPXsxfVxuICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ9ezF9XG4gICAgICAgICAgICAgICAgYm9yZGVyRGltQ29sb3JcbiAgICAgICAgICAgICAgICB3aWR0aD17OTJ9XG4gICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgIENvbm5lY3QgYSBwYXltZW50IG1ldGhvZCB0byB5b3VyIGRiY3R4LmlvIGFjY291bnR7J1xcbid9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXsnY3lhbid9PntiaWxsaW5nLnVybCF9PC9UZXh0PlxuICAgICAgICAgICAgICAgIHtjYW5PcGVuID8gKFxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFByZXNzIEVudGVyIHRvIHtvcGVuZWQgPyAncmUtb3BlbicgOiAnb3Blbid9IGluIGJyb3dzZXJcbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDxUZXh0PnsnXFxuXFxuJ308L1RleHQ+XG4gICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+V2FpdGluZyBmb3IgcGF5bWVudCBtZXRob2Qgc2V0dXAgLi4uPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59KTtcbiIsICJpbXBvcnQge0JveCwgVGV4dCwgdXNlSW5wdXR9IGZyb20gJ2luayc7XG5pbXBvcnQgdHlwZSB7UmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge29ic2VydmVyfSBmcm9tICdtb2J4LXJlYWN0LWxpdGUnO1xuaW1wb3J0IHtydW5JbkFjdGlvbn0gZnJvbSAnbW9ieCc7XG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi8uLi9zdG9yZS5tanMnO1xuaW1wb3J0IHtTcGlubmVyfSBmcm9tICcuL1NwaW5uZXIuanMnO1xuXG50eXBlIFRTYW1wbGluZ1Byb3BzID0ge1xuICAgIHJlYWRvbmx5IHN0b3JlOiBUU3RvcmU7XG59O1xuXG5jb25zdCBDb3VudHNMaW5lID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFRTYW1wbGluZ1Byb3BzKTogUmVhY3ROb2RlID0+IHtcbiAgICBjb25zdCB7Y291bnRzfSA9IHN0b3JlLnN0ZXBzLnNhbXBsaW5nO1xuICAgIGNvbnN0IHBhcnRzID0gW1xuICAgICAgICBjb3VudHMuY29tcGxldGVkVGFibGVzID4gMCB8fCBjb3VudHMudG90YWxUYWJsZXMgPiAwXG4gICAgICAgICAgICA/IGAke2NvdW50cy5jb21wbGV0ZWRUYWJsZXN9LyR7Y291bnRzLnRvdGFsVGFibGVzfSB0YWJsZXNgXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGNvdW50cy5zYW1wbGVkQ29sdW1ucyA+IDAgfHwgY291bnRzLnRvdGFsQ29sdW1ucyA+IDBcbiAgICAgICAgICAgID8gYCR7Y291bnRzLnNhbXBsZWRDb2x1bW5zfS8ke2NvdW50cy50b3RhbENvbHVtbnN9IGNvbHVtbnNgXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGNvdW50cy5za2lwcGVkQ29sdW1ucyA+IDAgPyBgJHtjb3VudHMuc2tpcHBlZENvbHVtbnN9IHNraXBwZWRgIDogbnVsbCxcbiAgICBdLmZpbHRlcihCb29sZWFuKTtcblxuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveD5cbiAgICAgICAgICAgIDxUZXh0PnsnICAnfTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JheVwiPntwYXJ0cy5qb2luKCcgXHUwMEI3ICcpfTwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn0pO1xuXG5leHBvcnQgY29uc3QgU2FtcGxpbmcgPSBvYnNlcnZlcigoe3N0b3JlfTogVFNhbXBsaW5nUHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IHNhbXBsaW5nID0gc3RvcmUuc3RlcHMuc2FtcGxpbmc7XG5cbiAgICB1c2VJbnB1dChcbiAgICAgICAgKF9pbnB1dCwgX2tleSkgPT4ge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLmNvbmZpcm1lZCA9IF9pbnB1dC50b0xvd2VyQ2FzZSgpID09PSAneSc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAge2lzQWN0aXZlOiBzYW1wbGluZy5zdGF0ZSA9PT0gJ3Byb21wdGluZy1vdmVyd3JpdGUnfSxcbiAgICApO1xuXG4gICAgaWYgKHNhbXBsaW5nLnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHNhbXBsaW5nLnN0YXRlID09PSAncHJvbXB0aW5nLW92ZXJ3cml0ZScpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJ5ZWxsb3dcIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPlNBTVBMSU5HOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeSA8VGV4dCBjb2xvcj1cImN5YW5cIj57c2FtcGxpbmcub3V0cHV0RGlyfTwvVGV4dD4gaXNcbiAgICAgICAgICAgICAgICAgICAgbm90IGVtcHR5LiBPdmVyd3JpdGU/IFt5L05deycgJ31cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoc2FtcGxpbmcuc3RhdGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPkVycm9yOiB7c2FtcGxpbmcuZXJyb3J9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHNhbXBsaW5nLnN0YXRlID09PSAnc2tpcHBlZCcpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmF5XCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZCBjb2xvcj1cImdyYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgU0FNUExJTkc6eycgJ31cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmF5XCI+KHJldXNlZCkgc2FtcGxlcyBhbHJlYWR5IGluZ2VzdGVkPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHNhbXBsaW5nLnN0YXRlID09PSAnZG9uZScpIHtcbiAgICAgICAgY29uc3Qge2NvdW50c30gPSBzYW1wbGluZztcblxuICAgICAgICBpZiAoY291bnRzLmNvbXBsZXRlZFRhYmxlcyA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJ0cyA9IFtcbiAgICAgICAgICAgIGNvdW50cy5zYW1wbGVkQ29sdW1ucyA+IDBcbiAgICAgICAgICAgICAgICA/IGBzYW1wbGVkICR7Y291bnRzLnNhbXBsZWRDb2x1bW5zfSBjb2x1bW5zYFxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIGNvdW50cy5jb21wbGV0ZWRUYWJsZXMgPiAwXG4gICAgICAgICAgICAgICAgPyBgYWNyb3NzICR7Y291bnRzLmNvbXBsZXRlZFRhYmxlc30gdGFibGVzYFxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgXS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JlZW5cIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+U0FNUExJTkc6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmVlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3BhcnRzLmpvaW4oJyAnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzYW1wbGluZy5vdXRwdXREaXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUyMTkyIDxUZXh0IGNvbG9yPVwiY3lhblwiPntzYW1wbGluZy5vdXRwdXREaXJ9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICB7Y291bnRzLnNraXBwZWRDb2x1bW5zID4gMCA/IChcbiAgICAgICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0PnsnICAnfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JheVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb3VudHMuc2tpcHBlZENvbHVtbnN9IGNvbHVtbnMgc2tpcHBlZFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+U0FNUExJTkc6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD5zYW1wbGluZyBjb2x1bW5zLi4uPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Q291bnRzTGluZSBzdG9yZT17c3RvcmV9IC8+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59KTtcbiIsICJpbXBvcnQge0JveCwgVGV4dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7b2JzZXJ2ZXJ9IGZyb20gJ21vYngtcmVhY3QtbGl0ZSc7XG5pbXBvcnQgdHlwZSB7VEdhdGVFcnJvckRhdGF9IGZyb20gJ0BkYmN0eC9jb3JlJztcbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uLy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQge1NwaW5uZXJ9IGZyb20gJy4vU3Bpbm5lci5qcyc7XG5cbnR5cGUgVFByb3BzID0ge1xuICAgIHJlYWRvbmx5IHN0b3JlOiBUU3RvcmU7XG59O1xuXG5jb25zdCBHYXRlQmxvY2sgPSAoe2dhdGV9OiB7cmVhZG9ubHkgZ2F0ZTogVEdhdGVFcnJvckRhdGF9KTogUmVhY3ROb2RlID0+IHtcbiAgICBpZiAoZ2F0ZS5raW5kID09PSAnaW4tdHJpYWwnKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInllbGxvd1wiIGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgIHsnWW91IGFyZSBzdGlsbCBpbiB0cmlhbCd9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJ5ZWxsb3dcIj5Zb3Ugc3RhcnRlZCB5b3VyIHRyaWFsIHZpYSA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwieWVsbG93XCIgYm9sZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnYXRlLmRhdGFiYXNlTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJ5ZWxsb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgeydVcGdyYWRlIGZyb20geW91ciBkYXNoYm9hcmQgdG8ga2VlcCBnb2luZzonfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImJsdWVcIj57Z2F0ZS5kYXRhYmFzZVVSTH08L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhdHVzTGFiZWwgPVxuICAgICAgICBnYXRlLmludm9pY2VTdGF0dXMgIT09IG51bGxcbiAgICAgICAgICAgID8gYGludm9pY2UgJHtnYXRlLmludm9pY2VTdGF0dXN9YFxuICAgICAgICAgICAgOiAnbm8gaW52b2ljZSB5ZXQnO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgPFRleHQgY29sb3I9XCJ5ZWxsb3dcIj5cbiAgICAgICAgICAgICAgICB7J1lvdSBoYXZlIGFuIHVucGFpZCByZXZpc2lvbiBibG9ja2luZyBuZXcgcHVzaGVzLid9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInllbGxvd1wiPnsnICBEYXRhYmFzZTogICd9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwieWVsbG93XCIgYm9sZD5cbiAgICAgICAgICAgICAgICAgICAge2dhdGUuZGF0YWJhc2VOYW1lfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9XCJ5ZWxsb3dcIj57YCAgUmV2aXNpb246ICAjJHtnYXRlLnJldmlzaW9uTnVtYmVyfWB9PC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9XCJ5ZWxsb3dcIj57YCAgU3RhdHVzOiAgICAke3N0YXR1c0xhYmVsfWB9PC9UZXh0PlxuICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwieWVsbG93XCI+eydTZXR0bGUgaXQgdG8gY29udGludWU6J308L1RleHQ+XG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwieWVsbG93XCI+eycgICd9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiYmx1ZVwiPntnYXRlLmRhdGFiYXNlVVJMfTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAge2dhdGUub3RoZXJVbnBhaWRDb3VudCA+IDAgPyAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJ5ZWxsb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtgKCsgJHtnYXRlLm90aGVyVW5wYWlkQ291bnR9IG1vcmUgdW5wYWlkIHJldmlzaW9uJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXRlLm90aGVyVW5wYWlkQ291bnQgPT09IDEgPyAnJyA6ICdzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBcdTIwMTQgc2VlIGRhc2hib2FyZC4pYH1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3QgSW50cm9zcGVjdGlvblVwbG9hZCA9IG9ic2VydmVyKCh7c3RvcmV9OiBUUHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IHMgPSBzdG9yZS5zdGVwcy5pbmdlc3Rpb24uaW50cm9zcGVjdGlvbjtcblxuICAgIGlmIChzLnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHMuc3RhdGUgPT09ICd1cGxvYWRpbmcnKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxTcGlubmVyIC8+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD5JTlRST1NQRUNUSU9OIFVQTE9BRDogPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PnVwbG9hZGluZyBpbnRyb3NwZWN0aW9uLi4uPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHMuc3RhdGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwieWVsbG93XCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBib2xkPklOVFJPU1BFQ1RJT04gVVBMT0FEOjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICA8Qm94XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckRpbUNvbG9yXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yPVwieWVsbG93QnJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU9XCJib2xkXCJcbiAgICAgICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmdYPXsyfVxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nWT17MX1cbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdD17MX1cbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezkyfT5cbiAgICAgICAgICAgICAgICAgICAge3MuZ2F0ZSAhPT0gbnVsbCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxHYXRlQmxvY2sgZ2F0ZT17cy5nYXRlfSAvPlxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQ+e3MuZXJyb3J9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHMuc3RhdGUgPT09ICdza2lwcGVkJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyYXlcIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkIGNvbG9yPVwiZ3JheVwiPlxuICAgICAgICAgICAgICAgICAgICBJTlRST1NQRUNUSU9OIFVQTE9BRDp7JyAnfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgKHJldXNlZCkgaW50cm9zcGVjdGlvbiBhcnRpZmFjdCBhbHJlYWR5IGluZ2VzdGVkXG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JlZW5cIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgYm9sZD5JTlRST1NQRUNUSU9OIFVQTE9BRDogPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmVlblwiPmludHJvc3BlY3Rpb24gdXBsb2FkZWQ8L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59KTtcbiIsICJpbXBvcnQge0JveCwgVGV4dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7b2JzZXJ2ZXJ9IGZyb20gJ21vYngtcmVhY3QtbGl0ZSc7XG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi8uLi9zdG9yZS5tanMnO1xuaW1wb3J0IHtTcGlubmVyfSBmcm9tICcuL1NwaW5uZXIuanMnO1xuXG50eXBlIFRQcm9wcyA9IHtcbiAgICByZWFkb25seSBzdG9yZTogVFN0b3JlO1xufTtcblxuZXhwb3J0IGNvbnN0IFNhbXBsZXNVcGxvYWQgPSBvYnNlcnZlcigoe3N0b3JlfTogVFByb3BzKTogUmVhY3ROb2RlID0+IHtcbiAgICBjb25zdCBzID0gc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnNhbXBsZXM7XG5cbiAgICBpZiAocy5zdGF0ZSA9PT0gJ2lkbGUnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChzLnN0YXRlID09PSAndXBsb2FkaW5nJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+U0FNUExFIFNFVCBVUExPQUQ6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkaW5nIHNhbXBsZXMgKHtzLnVwbG9hZGVkVGFibGVzfS97cy50b3RhbFRhYmxlc317JyAnfVxuICAgICAgICAgICAgICAgICAgICB0YWJsZXMpLi4uXG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHMuc3RhdGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPlNBTVBMRSBTRVQgVVBMT0FEOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj5zYW1wbGVzOiB7cy5lcnJvcn08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocy5zdGF0ZSA9PT0gJ3NraXBwZWQnKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JheVwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQgY29sb3I9XCJncmF5XCI+XG4gICAgICAgICAgICAgICAgICAgIFNBTVBMRSBTRVQgVVBMT0FEOnsnICd9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JheVwiPihyZXVzZWQpIHNhbXBsZXMgYWxyZWFkeSBpbmdlc3RlZDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChzLnRvdGFsVGFibGVzID09PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGJvbGQ+U0FNUExFIFNFVCBVUExPQUQ6IDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JlZW5cIj57cy51cGxvYWRlZFRhYmxlc30gc2FtcGxlIHRhYmxlcyB1cGxvYWRlZDwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn0pO1xuIiwgImltcG9ydCB7Qm94LCBUZXh0fSBmcm9tICdpbmsnO1xuaW1wb3J0IHR5cGUge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtvYnNlcnZlcn0gZnJvbSAnbW9ieC1yZWFjdC1saXRlJztcbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uLy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQge1NwaW5uZXJ9IGZyb20gJy4vU3Bpbm5lci5qcyc7XG5cbnR5cGUgVFByb3BzID0ge1xuICAgIHJlYWRvbmx5IHN0b3JlOiBUU3RvcmU7XG59O1xuXG5jb25zdCBTVEFHRV9MQUJFTDogUmVjb3JkPFxuICAgICdjbGFzc2lmeWluZycgfCAnZGVzY3JpYmluZycgfCAnbWFza2luZycgfCAnZmluYWxpemluZycsXG4gICAgc3RyaW5nXG4+ID0ge1xuICAgIGNsYXNzaWZ5aW5nOiAnQ0xBU1NJRllJTkcnLFxuICAgIGRlc2NyaWJpbmc6ICdERVNDUklCSU5HJyxcbiAgICBtYXNraW5nOiAnR0VORVJBVElORyBNQVNLUycsXG4gICAgZmluYWxpemluZzogJ0ZJTkFMSVpJTkcnLFxufTtcblxuY29uc3QgZm9ybWF0SyA9IChuOiBudW1iZXIpOiBzdHJpbmcgPT4gYCR7KG4gLyAxMDAwKS50b0ZpeGVkKDEpfUtgO1xuXG5leHBvcnQgY29uc3QgRW5yaWNoID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFRQcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgY29uc3QgcyA9IHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbjtcblxuICAgIGlmIChzLnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHMuc3RhdGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkVOUklDSDogPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwicmVkXCI+e3MuZXJyb3J9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHMuc3RhdGUgPT09ICdkb25lJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD5FTlJJQ0g6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYSBlbnJpY2htZW50IGNvbXBsZXRlXG4gICAgICAgICAgICAgICAgICAgIHtzLnJldXNlZCA/ICcgKHJldXNlZCknIDogJyd9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHMuc3RhdGUgPT09ICdxdWV1ZWQnKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxTcGlubmVyIC8+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD5FTlJJQ0g6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyYXlcIj5xdWV1ZWQ8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBsYWJlbCA9IHMuc3RhZ2UgPyBTVEFHRV9MQUJFTFtzLnN0YWdlXSA6ICdFTlJJQ0hJTkcnO1xuXG4gICAgY29uc3Qgc2hvd1Rva2VucyA9IHMuc3RhZ2UgPT09ICdkZXNjcmliaW5nJyAmJiBzLnRva2Vuc0luICE9PSBudWxsO1xuICAgIGNvbnN0IHNob3dDb2x1bW5zID1cbiAgICAgICAgKHMuc3RhZ2UgPT09ICdjbGFzc2lmeWluZycgfHwgcy5zdGFnZSA9PT0gJ21hc2tpbmcnKSAmJlxuICAgICAgICBzLmNvbHVtbnNUb3RhbCAhPT0gbnVsbCAmJlxuICAgICAgICBzLmNvbHVtbnNUb3RhbCA+IDA7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94PlxuICAgICAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgICAgICAgIDxUZXh0IGJvbGQ+e2xhYmVsfTogPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAge3Muc3RhZ2UgPT09ICdjbGFzc2lmeWluZydcbiAgICAgICAgICAgICAgICAgICAgPyAnY2xhc3NpZnlpbmcgcmVsYXRpb25zICYgYXR0cmlidXRlcy4uLidcbiAgICAgICAgICAgICAgICAgICAgOiBzLnN0YWdlID09PSAnZGVzY3JpYmluZydcbiAgICAgICAgICAgICAgICAgICAgICA/ICdnZW5lcmF0aW5nIHNjaGVtYSBkZXNjcmlwdGlvbi4uLidcbiAgICAgICAgICAgICAgICAgICAgICA6IHMuc3RhZ2UgPT09ICdtYXNraW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAnaWRlbnRpZnlpbmcgc2Vuc2l0aXZlIGNvbHVtbnMuLi4nXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHMuc3RhZ2UgPT09ICdmaW5hbGl6aW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICd3cml0aW5nIGVucmljaGVkIHNjaGVtYS4uLidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZW5yaWNoaW5nIHNjaGVtYS4uLid9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICB7c2hvd1Rva2VucyA/IChcbiAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgICAgICAgKFx1MjE5MSB7Zm9ybWF0SyhzLnRva2Vuc0luID8/IDApfSBcdTIxOTMge2Zvcm1hdEsocy50b2tlbnNPdXQgPz8gMCl9KVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge3Nob3dDb2x1bW5zID8gKFxuICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgICAgICAoeyhzLmNvbHVtbnNEb25lID8/IDApLnRvTG9jYWxlU3RyaW5nKCl9IC97JyAnfVxuICAgICAgICAgICAgICAgICAgICB7KHMuY29sdW1uc1RvdGFsID8/IDApLnRvTG9jYWxlU3RyaW5nKCl9IGNvbHVtbnMpXG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59KTtcbiIsICJpbXBvcnQge0JveCwgVGV4dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7b2JzZXJ2ZXJ9IGZyb20gJ21vYngtcmVhY3QtbGl0ZSc7XG5pbXBvcnQgdGVybWluYWxMaW5rIGZyb20gJ3Rlcm1pbmFsLWxpbmsnO1xuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vLi4vc3RvcmUubWpzJztcbmltcG9ydCB7U3Bpbm5lcn0gZnJvbSAnLi9TcGlubmVyLmpzJztcblxudHlwZSBUUHJvcHMgPSB7XG4gICAgcmVhZG9ubHkgc3RvcmU6IFRTdG9yZTtcbn07XG5cbmNvbnN0IFN0YXRzTGluZSA9IG9ic2VydmVyKCh7c3RvcmV9OiBUUHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IHtjb3VudHN9ID0gc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RTYW1wbGluZztcblxuICAgIGNvbnN0IHBhcnRzID0gW1xuICAgICAgICBjb3VudHMuZGVzY3JpYmVkVGFibGVzID4gMFxuICAgICAgICAgICAgPyBgJHtjb3VudHMuZGVzY3JpYmVkVGFibGVzfSB0YWJsZXMgZGVzY3JpYmVkYFxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBjb3VudHMuZW1iZWRkZWRUYWJsZXMgPiAwXG4gICAgICAgICAgICA/IGAke2NvdW50cy5lbWJlZGRlZFRhYmxlc30gZGVzY3JpcHRpb25zIGVtYmVkZGVkYFxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBjb3VudHMuc2Nhbm5lZFRhYmxlcyA+IDBcbiAgICAgICAgICAgID8gYCR7Y291bnRzLnNjYW5uZWRUYWJsZXN9IHRhYmxlcyBzY2FubmVkIGZvciBmb3JlaWduIGtleXNgXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGNvdW50cy5mb3JlaWduS2V5c0ZvdW5kID4gMFxuICAgICAgICAgICAgPyBgJHtjb3VudHMuZm9yZWlnbktleXNGb3VuZH0gZm9yZWlnbiBrZXlzIGZvdW5kYFxuICAgICAgICAgICAgOiBudWxsLFxuICAgIF0uZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94PlxuICAgICAgICAgICAgPFRleHQ+eycgICd9PC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmF5XCI+e3BhcnRzLmpvaW4oJyBcdTAwQjcgJyl9PC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufSk7XG5cbmV4cG9ydCBjb25zdCBBbmFseXplID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFRQcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgY29uc3QgcyA9IHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0U2FtcGxpbmc7XG5cbiAgICBpZiAocy5zdGF0ZSA9PT0gJ2lkbGUnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChzLnN0YXRlID09PSAnZXJyb3InKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwicmVkXCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD5BTkFMWVpFOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj57cy5lcnJvcn08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocy5zdGF0ZSA9PT0gJ2RvbmUnKSB7XG4gICAgICAgIGNvbnN0IHtjb3VudHN9ID0gcztcbiAgICAgICAgY29uc3QgbGFuZGluZ1VSTCA9IHN0b3JlLmxhbmRpbmdVUkw7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkFOQUxZWkU6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmVlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgYW5hbHl6ZWQge2NvdW50cy50b3RhbFRhYmxlc30gdGFibGVzLCBmb3VuZHsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y291bnRzLmZvcmVpZ25LZXlzRm91bmR9IGZvcmVpZ24ga2V5c1xuICAgICAgICAgICAgICAgICAgICAgICAge3MucmV1c2VkID8gJyAocmV1c2VkKScgOiAnJ31cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgIHtsYW5kaW5nVVJMID8gKFxuICAgICAgICAgICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nWD17Mn0gcGFkZGluZ1k9ezF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dD5TZW1hbnRpYyBkYXRhYmFzZSBjb250ZXh0IE1DUCBpcyByZWFkeTo8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJjeWFuXCIgdW5kZXJsaW5lPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGVybWluYWxMaW5rKGxhbmRpbmdVUkwsIGxhbmRpbmdVUkwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrOiAoX3RleHQsIHVybCkgPT4gdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7c3RhZ2UsIGNvdW50c30gPSBzO1xuXG4gICAgY29uc3QgbWFpblRleHQgPVxuICAgICAgICBzdGFnZSA9PT0gJ2Rlc2NyaWJpbmcnXG4gICAgICAgICAgICA/IGBkZXNjcmliaW5nIHRhYmxlcyAoJHtjb3VudHMuZGVzY3JpYmVkVGFibGVzfS8ke2NvdW50cy50b3RhbFRhYmxlc30pLi4uYFxuICAgICAgICAgICAgOiBzdGFnZSA9PT0gJ2VtYmVkZGluZydcbiAgICAgICAgICAgICAgPyBgZW1iZWRkaW5nIGRlc2NyaXB0aW9ucyAoJHtjb3VudHMuZW1iZWRkZWRUYWJsZXN9LyR7Y291bnRzLnRvdGFsRW1iZWRkaW5nc30pLi4uYFxuICAgICAgICAgICAgICA6IHN0YWdlID09PSAnZGlzY292ZXJpbmcnXG4gICAgICAgICAgICAgICAgPyBgZGlzY292ZXJpbmcgZm9yZWlnbiBrZXlzIGluIHRhYmxlICR7Y291bnRzLnNjYW5uZWRUYWJsZXN9LyR7Y291bnRzLnRvdGFsVGFibGVzfS4uLmBcbiAgICAgICAgICAgICAgICA6IHMuc3RhdGUgPT09ICdxdWV1ZWQnXG4gICAgICAgICAgICAgICAgICA/ICdxdWV1ZWQnXG4gICAgICAgICAgICAgICAgICA6ICdzdGFydGluZyBhbmFseXNpcy4uLic7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkFOQUxZWkU6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD57bWFpblRleHR9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8U3RhdHNMaW5lIHN0b3JlPXtzdG9yZX0gLz5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQ+eycgICd9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgICAgICAgICAgICBzYWZlIHRvIEN0cmwrQyBcdTIwMTQgcmVydW4gYWdhaW5zdCB0aGUgc2FtZSBkYXRhYmFzZSBhbnkgdGltZSB0b1xuICAgICAgICAgICAgICAgICAgICByZXN1bWUgbW9uaXRvcmluZ1xuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufSk7XG4iLCAiaW1wb3J0IHtCb3gsIFRleHR9IGZyb20gJ2luayc7XG5pbXBvcnQgdHlwZSB7UmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZGVkZW50IGZyb20gJ2RlZGVudCc7XG5pbXBvcnQge0NMSUVOVF9WRVJTSU9OfSBmcm9tICcuLi8uLi9saWIvdmVyc2lvbi5tanMnO1xuXG5leHBvcnQgY29uc3QgU3BsYXNoID0gKCk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPXsncm93J30gbWFyZ2luWT17MX0+XG4gICAgICAgICAgICA8Qm94IHBhZGRpbmdYPXsyfT5cbiAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAge2RlZGVudGBcbiAgICAgICAgICAgICAgICAgICAgICAgIFx1MjU5Qlx1MjU4MFx1MjU5Nlx1MjU5Qlx1MjU4MFx1MjU5Nlx1MjU5RVx1MjU4MFx1MjU5Nlx1MjU4MFx1MjU5Qlx1MjU5OFx1MjU4QyBcdTI1OENcbiAgICAgICAgICAgICAgICAgICAgICAgIFx1MjU4QyBcdTI1OENcdTI1OTlcdTI1ODRcdTI1OThcdTI1OEMgICBcdTI1OEMgXHUyNTlEXHUyNTlFXG4gICAgICAgICAgICAgICAgICAgICAgICBcdTI1OEMgXHUyNThDXHUyNThDIFx1MjU4Q1x1MjU4QyBcdTI1OTYgXHUyNThDIFx1MjU5RVx1MjU5RFx1MjU5NlxuICAgICAgICAgICAgICAgICAgICAgICAgXHUyNTgwXHUyNTgwIFx1MjU4MFx1MjU4MCBcdTI1OURcdTI1ODAgIFx1MjU5OCBcdTI1OTggXHUyNTk4XG4gICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXs0Mn0gYWxpZ25JdGVtcz17J2NlbnRlcid9IGZsZXhEaXJlY3Rpb249eydjb2x1bW4nfT5cbiAgICAgICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249eydjb2x1bW4nfT5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17J2N5YW4nfT5kYmN0eC5pbzwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPntgIFx1MjAxNCB2JHtDTElFTlRfVkVSU0lPTn1gfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQUkgRW5yaWNoZWQgRGF0YWJhc2UgRG9jcyBmb3IgSHVtYW5zICYgQ29kaW5nIEFnZW50cy4nXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufTtcbiIsICJ7XG4gICAgXCJuYW1lXCI6IFwiZGJjdHhcIixcbiAgICBcInZlcnNpb25cIjogXCIyLjEuMFwiLFxuICAgIFwiZGVzY3JpcHRpb25cIjogXCJBSS1lbnJpY2hlZCBkYXRhYmFzZSBjb250ZXh0IGZvciBodW1hbnMgYW5kIGNvZGluZyBhZ2VudHNcIixcbiAgICBcInR5cGVcIjogXCJtb2R1bGVcIixcbiAgICBcIm1haW5cIjogXCJkaXN0L2luZGV4Lm1qc1wiLFxuICAgIFwiYmluXCI6IHtcbiAgICAgICAgXCJkYmN0eFwiOiBcIi4vZGlzdC9pbmRleC5tanNcIlxuICAgIH0sXG4gICAgXCJzY3JpcHRzXCI6IHtcbiAgICAgICAgXCJzdGFydFwiOiBcInRzdXAgJiYgbm9kZSAuL2Rpc3QvaW5kZXgubWpzXCIsXG4gICAgICAgIFwiZGV2XCI6IFwidHN1cCAtLXdhdGNoXCIsXG4gICAgICAgIFwiYnVpbGRcIjogXCJ0c3VwXCIsXG4gICAgICAgIFwidHlwZWNoZWNrXCI6IFwidHNjIC0tbm9FbWl0XCIsXG4gICAgICAgIFwiYnVpbGQ6dHM6d2F0Y2hcIjogXCJ0c2MgLS13YXRjaCAtLXByZXNlcnZlV2F0Y2hPdXRwdXQgLS1ub0VtaXRcIixcbiAgICAgICAgXCJ0ZXN0XCI6IFwidHN4IC0tdGVzdCBzcmMvZmxvdy8qLnRlc3QubXRzXCJcbiAgICB9LFxuICAgIFwia2V5d29yZHNcIjogW1xuICAgICAgICBcInBvc3RncmVzcWxcIixcbiAgICAgICAgXCJkYXRhYmFzZVwiLFxuICAgICAgICBcInNjaGVtYVwiLFxuICAgICAgICBcImludHJvc3BlY3Rpb25cIixcbiAgICAgICAgXCJjbGlcIixcbiAgICAgICAgXCJhaVwiLFxuICAgICAgICBcImNvbnRleHRcIixcbiAgICAgICAgXCJkb2N1bWVudGF0aW9uXCJcbiAgICBdLFxuICAgIFwiYXV0aG9yXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IFwiQWlyU3RhdGVcIixcbiAgICAgICAgXCJlbWFpbFwiOiBcImhlbGxvQGFpcnN0YXRlLmRldlwiLFxuICAgICAgICBcInVybFwiOiBcImh0dHBzOi8vYWlyc3RhdGUuZGV2XCJcbiAgICB9LFxuICAgIFwiaG9tZXBhZ2VcIjogXCJodHRwczovL2RiY3R4LmlvXCIsXG4gICAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2RiY3R4L2RiY3R4XCJcbiAgICB9LFxuICAgIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgXCJAdGFuc3RhY2svcmVhY3QtcXVlcnlcIjogXCI1LjkwLjIwXCIsXG4gICAgICAgIFwiQHRycGMvY2xpZW50XCI6IFwiMTEuOC4xXCIsXG4gICAgICAgIFwiQHRycGMvcmVhY3QtcXVlcnlcIjogXCIxMS44LjFcIixcbiAgICAgICAgXCJAdHJwYy9zZXJ2ZXJcIjogXCIxMS44LjFcIixcbiAgICAgICAgXCJjb21tYW5kZXJcIjogXCIxNC4wLjNcIixcbiAgICAgICAgXCJkZWRlbnRcIjogXCIxLjcuMVwiLFxuICAgICAgICBcImVzLXRvb2xraXRcIjogXCIxLjQ0LjBcIixcbiAgICAgICAgXCJldmVudHNvdXJjZVwiOiBcIjQuMS4wXCIsXG4gICAgICAgIFwiaW5rXCI6IFwiNi42LjBcIixcbiAgICAgICAgXCJtb2J4XCI6IFwiNi4xNS4wXCIsXG4gICAgICAgIFwibW9ieC1yZWFjdC1saXRlXCI6IFwiNC4xLjFcIixcbiAgICAgICAgXCJvcGVuXCI6IFwiMTEuMC4wXCIsXG4gICAgICAgIFwicC1xdWV1ZVwiOiBcIjguMC4xXCIsXG4gICAgICAgIFwicGdcIjogXCI4LjE4LjBcIixcbiAgICAgICAgXCJyZWFjdFwiOiBcIjE5LjIuNFwiLFxuICAgICAgICBcInNjb3BlLXV0aWxpdGllc1wiOiBcIjIuMi4xXCIsXG4gICAgICAgIFwic3NoLWNvbmZpZ1wiOiBcIjUuMC40XCIsXG4gICAgICAgIFwic3NoMlwiOiBcIjEuMTcuMFwiLFxuICAgICAgICBcInRlcm1pbmFsLWxpbmtcIjogXCI1LjAuMFwiLFxuICAgICAgICBcInV1aWR2N1wiOiBcIjEuMC4yXCIsXG4gICAgICAgIFwid2luc3RvblwiOiBcIjMuMTkuMFwiLFxuICAgICAgICBcInpvZFwiOiBcIjQuMy42XCJcbiAgICB9LFxuICAgIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgXCJAZGJjdHgvY29tbW9uXCI6IFwid29ya3NwYWNlOipcIixcbiAgICAgICAgXCJAZGJjdHgvY29yZVwiOiBcIndvcmtzcGFjZToqXCIsXG4gICAgICAgIFwiQHR5cGVzL25vZGVcIjogXCIyNC4wLjBcIixcbiAgICAgICAgXCJAdHlwZXMvcGdcIjogXCI4LjE2LjBcIixcbiAgICAgICAgXCJAdHlwZXMvcmVhY3RcIjogXCIxOS4yLjEwXCIsXG4gICAgICAgIFwiQHR5cGVzL3NzaDJcIjogXCIxLjE1LjVcIixcbiAgICAgICAgXCJjb25jdXJyZW50bHlcIjogXCI5LjIuMVwiLFxuICAgICAgICBcImNyb3NzLWVudlwiOiBcIjcuMC4zXCIsXG4gICAgICAgIFwicHJldHRpZXJcIjogXCIzLjguMVwiLFxuICAgICAgICBcInRzdXBcIjogXCI4LjUuMFwiLFxuICAgICAgICBcInRzeFwiOiBcIjQuMjAuNFwiLFxuICAgICAgICBcInR5cGVzY3JpcHRcIjogXCI1LjkuM1wiXG4gICAgfSxcbiAgICBcInZvbHRhXCI6IHtcbiAgICAgICAgXCJub2RlXCI6IFwiMjQuMC4wXCJcbiAgICB9LFxuICAgIFwiZmlsZXNcIjogW1xuICAgICAgICBcImRpc3QvXCJcbiAgICBdXG59XG4iLCAiaW1wb3J0IHBrZyBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nIHdpdGgge3R5cGU6ICdqc29uJ307XG5cbmV4cG9ydCBjb25zdCBDTElFTlRfVkVSU0lPTjogc3RyaW5nID0gcGtnLnZlcnNpb247XG4iLCAiaW1wb3J0IHtCb3gsIFRleHQsIHVzZUlucHV0fSBmcm9tICdpbmsnO1xuaW1wb3J0IHR5cGUge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtvYnNlcnZlcn0gZnJvbSAnbW9ieC1yZWFjdC1saXRlJztcbmltcG9ydCB7cnVuSW5BY3Rpb259IGZyb20gJ21vYngnO1xuaW1wb3J0IHR5cGUge1RTdG9yZSwgVERhdGFiYXNlTGlzdEl0ZW19IGZyb20gJy4uLy4uL3N0b3JlLm1qcyc7XG5cbnR5cGUgVFByb3BzID0ge1xuICAgIHJlYWRvbmx5IHN0b3JlOiBUU3RvcmU7XG59O1xuXG4vLyBzZWxlY3RlZEluZGV4ID09PSBpdGVtcy5sZW5ndGggaXMgdGhlIHNlbnRpbmVsIGZvciB0aGUgc3ludGhldGljIFwiZXhpdFwiXG4vLyByb3cgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcGlja2VyLiBydW5MaXN0IGJyYW5jaGVzIG9uIGl0LlxuZXhwb3J0IGNvbnN0IFBJQ0tFUl9FWElUX0lOREVYID0gKHBpY2tlcjoge1xuICAgIHJlYWRvbmx5IGl0ZW1zOiBSZWFkb25seUFycmF5PHVua25vd24+O1xufSk6IG51bWJlciA9PiBwaWNrZXIuaXRlbXMubGVuZ3RoO1xuXG5jb25zdCBzdGF0ZUxhYmVsID0gKFxuICAgIGl0ZW06IFREYXRhYmFzZUxpc3RJdGVtLFxuKToge1xuICAgIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbiAgICByZWFkb25seSBjb2xvcjogJ2dyZWVuJyB8ICd5ZWxsb3cnIHwgJ3JlZCcgfCAnY3lhbicgfCAnZ3JheSc7XG59ID0+IHtcbiAgICBpZiAoaXRlbS5wb3N0U2FtcGxpbmcuZG9uZSkge1xuICAgICAgICByZXR1cm4ge3RleHQ6ICdjb21wbGV0ZScsIGNvbG9yOiAnZ3JlZW4nfTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgICBpdGVtLnBvc3RJbnRyb3NwZWN0aW9uLmpvYlN0YXR1cyA9PT0gJ2ZhaWxlZCcgfHxcbiAgICAgICAgaXRlbS5wb3N0U2FtcGxpbmcuam9iU3RhdHVzID09PSAnZmFpbGVkJ1xuICAgICkge1xuICAgICAgICByZXR1cm4ge3RleHQ6ICdmYWlsZWQgXHUyMDE0IHNlbGVjdCB0byByZXRyeScsIGNvbG9yOiAneWVsbG93J307XG4gICAgfVxuICAgIGlmICghaXRlbS5zYW1wbGVzSW5nZXN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQ6ICdzYW1wbGVzIG5vdCB1cGxvYWRlZCBcdTIwMTQgbmVlZHMgbG9jYWwgcmVydW4nLFxuICAgICAgICAgICAgY29sb3I6ICd5ZWxsb3cnLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAgIGl0ZW0ucG9zdFNhbXBsaW5nLmpvYlN0YXR1cyA9PT0gJ3J1bm5pbmcnIHx8XG4gICAgICAgIGl0ZW0ucG9zdFNhbXBsaW5nLmpvYlN0YXR1cyA9PT0gJ3BlbmRpbmcnXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB7dGV4dDogJ2FuYWx5emluZycsIGNvbG9yOiAnY3lhbid9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAgIGl0ZW0ucG9zdEludHJvc3BlY3Rpb24uam9iU3RhdHVzID09PSAncnVubmluZycgfHxcbiAgICAgICAgaXRlbS5wb3N0SW50cm9zcGVjdGlvbi5qb2JTdGF0dXMgPT09ICdwZW5kaW5nJ1xuICAgICkge1xuICAgICAgICByZXR1cm4ge3RleHQ6ICdlbnJpY2hpbmcnLCBjb2xvcjogJ2N5YW4nfTtcbiAgICB9XG4gICAgaWYgKGl0ZW0ucG9zdEludHJvc3BlY3Rpb24uZG9uZSkge1xuICAgICAgICByZXR1cm4ge3RleHQ6ICdyZWFkeSB0byBhbmFseXplJywgY29sb3I6ICdjeWFuJ307XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgIWl0ZW0ucG9zdEludHJvc3BlY3Rpb24uZG9uZSAmJlxuICAgICAgICBpdGVtLnBvc3RJbnRyb3NwZWN0aW9uLmpvYlN0YXR1cyA9PT0gbnVsbFxuICAgICkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dDogJ3N0dWNrIFx1MjAxNCBuZWVkcyBsb2NhbCByZXJ1bicsXG4gICAgICAgICAgICBjb2xvcjogJ3llbGxvdycsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7dGV4dDogJ3Vua25vd24nLCBjb2xvcjogJ2dyYXknfTtcbn07XG5cbmV4cG9ydCBjb25zdCBEYXRhYmFzZVBpY2tlciA9IG9ic2VydmVyKCh7c3RvcmV9OiBUUHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IHBpY2tlciA9IHN0b3JlLmxpc3RQaWNrZXI7XG5cbiAgICB1c2VJbnB1dCgoX2lucHV0LCBrZXkpID0+IHtcbiAgICAgICAgaWYgKHBpY2tlciA9PT0gbnVsbCB8fCBwaWNrZXIuc2VsZWN0ZWRJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZvY3VzIHJhbmdlIGNvdmVycyBbMC4uaXRlbXMubGVuZ3RoXSBpbmNsdXNpdmU7IHRoZSBleHRyYSBzbG90IGF0XG4gICAgICAgIC8vIGl0ZW1zLmxlbmd0aCBpcyB0aGUgXCJleGl0XCIgcm93LlxuICAgICAgICBjb25zdCBtYXhJbmRleCA9IHBpY2tlci5pdGVtcy5sZW5ndGg7XG4gICAgICAgIGlmIChrZXkudXBBcnJvdykge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHBpY2tlci5mb2N1c2VkSW5kZXggPSBNYXRoLm1heCgwLCBwaWNrZXIuZm9jdXNlZEluZGV4IC0gMSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkuZG93bkFycm93KSB7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGlja2VyLmZvY3VzZWRJbmRleCA9IE1hdGgubWluKFxuICAgICAgICAgICAgICAgICAgICBtYXhJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgcGlja2VyLmZvY3VzZWRJbmRleCArIDEsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGtleS5yZXR1cm4pIHtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBwaWNrZXIuc2VsZWN0ZWRJbmRleCA9IHBpY2tlci5mb2N1c2VkSW5kZXg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHBpY2tlciA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBleGl0Rm9jdXNlZCA9IHBpY2tlci5mb2N1c2VkSW5kZXggPT09IHBpY2tlci5pdGVtcy5sZW5ndGg7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPnNlbGVjdCBhIGRhdGFiYXNlIHRvIG1vbml0b3I6PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICAgIHtwaWNrZXIuaXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb2N1c2VkID0gaW5kZXggPT09IHBpY2tlci5mb2N1c2VkSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gc3RhdGVMYWJlbChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzRGVzY3JpcHRpb24gPVxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kZXNjcmlwdGlvbiAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kZXNjcmlwdGlvbi5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBrZXk9e2l0ZW0uZGF0YWJhc2VJZH0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmb2N1c2VkID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgYm9sZCBjb2xvcj1cImN5YW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J1x1MjVCOCAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQ+eycgICd9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBib2xkPXtmb2N1c2VkfT57aXRlbS5uYW1lfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JyAjJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpdGVtLmxhdGVzdFJldmlzaW9uTnVtYmVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0PnsnICAnfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2xhYmVsLmNvbG9yfSBkaW1Db2xvcj17IWZvY3VzZWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2xhYmVsLnRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aGFzRGVzY3JpcHRpb24gPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IG1hcmdpbkxlZnQ9ezJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPntpdGVtLmRlc2NyaXB0aW9ufTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAge2V4aXRGb2N1c2VkID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgYm9sZCBjb2xvcj1cImN5YW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J1x1MjVCOCAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQ+eycgICd9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBib2xkPXtleGl0Rm9jdXNlZH0gZGltQ29sb3I9eyFleGl0Rm9jdXNlZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICBbZXhpdF1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAgICAgICAgICAgIFx1MjE5MS9cdTIxOTMgdG8gbW92ZSwgZW50ZXIgdG8gc2VsZWN0LCBjdHJsK2MgdG8gcXVpdFxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufSk7XG4iLCAiaW1wb3J0IHttYWtlQXV0b09ic2VydmFibGV9IGZyb20gJ21vYngnO1xuaW1wb3J0IHR5cGUge1RHYXRlRXJyb3JEYXRhfSBmcm9tICdAZGJjdHgvY29yZSc7XG5cbmltcG9ydCB7VENvbm5lY3Rpb25Db25maWd9IGZyb20gJy4vdHlwZXMvY29ubmVjdGlvbi5tanMnO1xuXG50eXBlIFRKb2JTdGF0dXMgPVxuICAgIHwgJ3BlbmRpbmcnXG4gICAgfCAncnVubmluZydcbiAgICB8ICdjb21wbGV0ZWQnXG4gICAgfCAnZmFpbGVkJ1xuICAgIHwgJ3N0YWxsZWQnXG4gICAgfCAndW5rbm93bic7XG5cbmV4cG9ydCB0eXBlIFREYXRhYmFzZUxpc3RJdGVtID0ge1xuICAgIHJlYWRvbmx5IGRhdGFiYXNlSWQ6IHN0cmluZztcbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gICAgcmVhZG9ubHkgbGF0ZXN0UmV2aXNpb25JZDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGxhdGVzdFJldmlzaW9uTnVtYmVyOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgbGF0ZXN0UmV2aXNpb25DcmVhdGVkQXQ6IHN0cmluZztcbiAgICByZWFkb25seSBzYW1wbGVzSW5nZXN0ZWQ6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgcG9zdEludHJvc3BlY3Rpb246IHtcbiAgICAgICAgcmVhZG9ubHkgZG9uZTogYm9vbGVhbjtcbiAgICAgICAgcmVhZG9ubHkgam9iU3RhdHVzOiBUSm9iU3RhdHVzIHwgbnVsbDtcbiAgICB9O1xuICAgIHJlYWRvbmx5IHBvc3RTYW1wbGluZzoge1xuICAgICAgICByZWFkb25seSBkb25lOiBib29sZWFuO1xuICAgICAgICByZWFkb25seSBqb2JTdGF0dXM6IFRKb2JTdGF0dXMgfCBudWxsO1xuICAgIH07XG59O1xuXG5leHBvcnQgdHlwZSBUU3RvcmVNb2RlID0gJ3J1bicgfCAnbGlzdC1waWNraW5nJyB8ICdsaXN0LXRhaWxpbmcnO1xuXG5leHBvcnQgdHlwZSBUTGlzdFBpY2tlciA9IHtcbiAgICBpdGVtczogUmVhZG9ubHlBcnJheTxURGF0YWJhc2VMaXN0SXRlbT47XG4gICAgZm9jdXNlZEluZGV4OiBudW1iZXI7XG4gICAgc2VsZWN0ZWRJbmRleDogbnVtYmVyIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFRTdG9wQWZ0ZXJTdGFnZSA9XG4gICAgfCAnc3NoLWNvbm5lY3QnXG4gICAgfCAnZGItY29ubmVjdCdcbiAgICB8ICdpbnRyb3NwZWN0aW9uJ1xuICAgIHwgJ3NhbXBsaW5nJztcblxuZXhwb3J0IGNvbnN0IFNUT1BfQUZURVJfU1RBR0VTOiByZWFkb25seSBUU3RvcEFmdGVyU3RhZ2VbXSA9IE9iamVjdC5mcmVlemUoW1xuICAgICdzc2gtY29ubmVjdCcsXG4gICAgJ2RiLWNvbm5lY3QnLFxuICAgICdpbnRyb3NwZWN0aW9uJyxcbiAgICAnc2FtcGxpbmcnLFxuXSBhcyBjb25zdCk7XG5cbmV4cG9ydCB0eXBlIFRPdXRwdXRPcHRpb25zID0ge1xuICAgIG91dHB1dEludHJvc3BlY3Rpb25Kc29uOiBzdHJpbmcgfCBudWxsO1xuICAgIHVzZUludHJvc3BlY3Rpb25Kc29uUGF0aDogc3RyaW5nIHwgbnVsbDtcbiAgICBzdG9wQWZ0ZXI6IFRTdG9wQWZ0ZXJTdGFnZSB8IG51bGw7XG4gICAgYWxsb3dJbnRyb3NwZWN0aW9uSnNvbk92ZXJ3cml0ZTogYm9vbGVhbjtcbiAgICBleHBsYW5hdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgICBzZW5zaXRpdmVNYXNrUGF0aDogc3RyaW5nIHwgbnVsbDtcbiAgICBvdXRwdXRTYW1wbGVzRGlyOiBzdHJpbmcgfCBudWxsO1xuICAgIGFsbG93U2FtcGxlT3ZlcndyaXRlOiBib29sZWFuO1xuICAgIHNraXBBbmFseXplOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVFN0b3JlID0ge1xuICAgIGNvbmZpZzogVENvbm5lY3Rpb25Db25maWc7XG4gICAgb3V0cHV0T3B0aW9uczogVE91dHB1dE9wdGlvbnM7XG4gICAgZXhpdFJlcXVlc3RlZDogYm9vbGVhbjtcbiAgICBtb2RlOiBUU3RvcmVNb2RlO1xuICAgIGxpc3RQaWNrZXI6IFRMaXN0UGlja2VyIHwgbnVsbDtcbiAgICAvLyBCYWNrZW5kLWlzc3VlZCBVUkwgcG9pbnRpbmcgdG8gdGhlIHBvc3QtaW5nZXN0IHdlYiBsYW5kaW5nIHBhZ2UgZm9yXG4gICAgLy8gdGhpcyByZXZpc2lvbi4gUG9wdWxhdGVkIHdoZW4gaW5nZXN0SW50cm9zcGVjdGlvbiAvIGNoZWNrSW50cm9zcGVjdGlvblxuICAgIC8vIHJldHVybnMuIFRyZWF0ZWQgYXMgb3BhcXVlIFx1MjAxNCB0aGUgc2VydmVyIGNvbnRyb2xzIGhvc3RuYW1lICsgSUQgZW5jb2RpbmcuXG4gICAgbGFuZGluZ1VSTDogc3RyaW5nIHwgbnVsbDtcbiAgICBzdGVwczoge1xuICAgICAgICBzc2hDb25uZWN0aW9uOiB7XG4gICAgICAgICAgICBlbmFibGVkOiBib29sZWFuO1xuICAgICAgICAgICAgbmVlZFBhc3N3b3JkOiBib29sZWFuO1xuICAgICAgICAgICAgcGFzc3dvcmQ6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBwYXNzd29yZFByb21wdFR5cGU6ICdwYXNzcGhyYXNlJyB8ICdwYXNzd29yZCcgfCBudWxsO1xuICAgICAgICAgICAgcHJvbXB0Q291bnQ6IG51bWJlcjtcbiAgICAgICAgICAgIHdyb25nQXR0ZW1wdDogYm9vbGVhbjtcblxuICAgICAgICAgICAgcGlja2VkSG9zdG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBwaWNrZWRQb3J0OiBudW1iZXIgfCBudWxsO1xuICAgICAgICAgICAgcGlja2VkVXNlcm5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBwaWNrZWRLZXlQYXRoOiBzdHJpbmcgfCBudWxsO1xuXG4gICAgICAgICAgICBsb2NhbFBvcnQ6IG51bWJlciB8IG51bGw7XG4gICAgICAgICAgICBzdGF0ZTpcbiAgICAgICAgICAgICAgICB8ICdpZGxlJ1xuICAgICAgICAgICAgICAgIHwgJ2Nvbm5lY3RpbmcnXG4gICAgICAgICAgICAgICAgfCAnY29ubmVjdGVkJ1xuICAgICAgICAgICAgICAgIHwgJ25lZWQtcGFzc3dvcmQnXG4gICAgICAgICAgICAgICAgfCAnZXJyb3InXG4gICAgICAgICAgICAgICAgfCAnY2xvc2VkJztcbiAgICAgICAgICAgIGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICB9O1xuXG4gICAgICAgIGRhdGFiYXNlQ29ubmVjdGlvbjoge1xuICAgICAgICAgICAgcGFzc3dvcmQ6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBwcm9tcHRDb3VudDogbnVtYmVyO1xuICAgICAgICAgICAgd3JvbmdBdHRlbXB0OiBib29sZWFuO1xuXG4gICAgICAgICAgICBwaWNrZWRIb3N0bmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIHBpY2tlZFBvcnQ6IG51bWJlciB8IG51bGw7XG4gICAgICAgICAgICBwaWNrZWREYXRhYmFzZTogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIHBpY2tlZFVzZXJuYW1lOiBzdHJpbmcgfCBudWxsO1xuXG4gICAgICAgICAgICBwb3N0Z3Jlc1ZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBwb3N0Z3Jlc1ZlcnNpb25OdW1iZXI6IG51bWJlciB8IG51bGw7XG4gICAgICAgICAgICBzdGF0ZTpcbiAgICAgICAgICAgICAgICB8ICdpZGxlJ1xuICAgICAgICAgICAgICAgIHwgJ2Nvbm5lY3RpbmcnXG4gICAgICAgICAgICAgICAgfCAnY29ubmVjdGVkJ1xuICAgICAgICAgICAgICAgIHwgJ25lZWQtcGFzc3dvcmQnXG4gICAgICAgICAgICAgICAgfCAnZXJyb3InO1xuICAgICAgICAgICAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgICAgIH07XG5cbiAgICAgICAgaW50cm9zcGVjdGlvbjoge1xuICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyB8ICdmZXRjaGluZycgfCAnZG9uZScgfCAnZXJyb3InO1xuICAgICAgICAgICAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBmaWxlU3RhdHNTa2lwcGVkOiBib29sZWFuO1xuICAgICAgICAgICAgY291bnRzOiB7XG4gICAgICAgICAgICAgICAgdGFibGVzOiBudW1iZXI7XG4gICAgICAgICAgICAgICAgdmlld3M6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWRWaWV3czogbnVtYmVyO1xuICAgICAgICAgICAgICAgIGNvbHVtbnM6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBpbmRleGVzOiBudW1iZXI7XG4gICAgICAgICAgICAgICAgZm9yZWlnbktleXM6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBlbnVtczogbnVtYmVyO1xuICAgICAgICAgICAgICAgIGFuYWx5emVkOiBudW1iZXI7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIGFjY291bnQ6IHtcbiAgICAgICAgICAgIHN0YXRlOlxuICAgICAgICAgICAgICAgIHwgJ2lkbGUnXG4gICAgICAgICAgICAgICAgfCAnY3JlYXRpbmctc2Vzc2lvbidcbiAgICAgICAgICAgICAgICB8ICd3YWl0aW5nJ1xuICAgICAgICAgICAgICAgIHwgJ2ZldGNoaW5nLWFjY291bnQnXG4gICAgICAgICAgICAgICAgfCAnY29ubmVjdGVkJ1xuICAgICAgICAgICAgICAgIHwgJ2Vycm9yJztcbiAgICAgICAgICAgIGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgdXJsOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgZW1haWw6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICB9O1xuXG4gICAgICAgIG91dHB1dEpzb246IHtcbiAgICAgICAgICAgIHN0YXRlOlxuICAgICAgICAgICAgICAgIHwgJ2lkbGUnXG4gICAgICAgICAgICAgICAgfCAncHJvbXB0aW5nLW92ZXJ3cml0ZSdcbiAgICAgICAgICAgICAgICB8ICd3cml0aW5nJ1xuICAgICAgICAgICAgICAgIHwgJ2RvbmUnXG4gICAgICAgICAgICAgICAgfCAnZXJyb3InO1xuICAgICAgICAgICAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBjb25maXJtZWQ6IGJvb2xlYW4gfCBudWxsO1xuICAgICAgICAgICAgcGF0aDogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgfTtcblxuICAgICAgICB1c2VyRXhwbGFuYXRpb246IHtcbiAgICAgICAgICAgIHN0YXRlOiAnaWRsZScgfCAncHJvbXB0aW5nJyB8ICdkb25lJztcbiAgICAgICAgICAgIHZhbHVlOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICB9O1xuXG4gICAgICAgIGdhdGU6IHtcbiAgICAgICAgICAgIHN0YXRlOiAnaWRsZScgfCAnY2hlY2tpbmcnIHwgJ2Jsb2NrZWQnIHwgJ3Bhc3NlZCc7XG4gICAgICAgICAgICBtZXNzYWdlOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICB9O1xuXG4gICAgICAgIGJpbGxpbmc6IHtcbiAgICAgICAgICAgIHN0YXRlOiAnaWRsZScgfCAnY2hlY2tpbmcnIHwgJ3dhaXRpbmcnIHwgJ2Nvbm5lY3RlZCc7XG4gICAgICAgICAgICB1cmw6IHN0cmluZyB8IG51bGw7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2FtcGxpbmc6IHtcbiAgICAgICAgICAgIHN0YXRlOlxuICAgICAgICAgICAgICAgIHwgJ2lkbGUnXG4gICAgICAgICAgICAgICAgfCAncHJvbXB0aW5nLW92ZXJ3cml0ZSdcbiAgICAgICAgICAgICAgICB8ICdmZXRjaGluZydcbiAgICAgICAgICAgICAgICB8ICdza2lwcGVkJ1xuICAgICAgICAgICAgICAgIHwgJ2RvbmUnXG4gICAgICAgICAgICAgICAgfCAnZXJyb3InO1xuICAgICAgICAgICAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBjb25maXJtZWQ6IGJvb2xlYW4gfCBudWxsO1xuICAgICAgICAgICAgb3V0cHV0RGlyOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgcmV1c2VkOiBib29sZWFuO1xuICAgICAgICAgICAgY291bnRzOiB7XG4gICAgICAgICAgICAgICAgdG90YWxUYWJsZXM6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWRUYWJsZXM6IG51bWJlcjtcbiAgICAgICAgICAgICAgICB0b3RhbENvbHVtbnM6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBzYW1wbGVkQ29sdW1uczogbnVtYmVyO1xuICAgICAgICAgICAgICAgIHNraXBwZWRDb2x1bW5zOiBudW1iZXI7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIGluZ2VzdGlvbjoge1xuICAgICAgICAgICAgaW50cm9zcGVjdGlvbjoge1xuICAgICAgICAgICAgICAgIHN0YXRlOiAnaWRsZScgfCAndXBsb2FkaW5nJyB8ICdza2lwcGVkJyB8ICdkb25lJyB8ICdlcnJvcic7XG4gICAgICAgICAgICAgICAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgZ2F0ZTogVEdhdGVFcnJvckRhdGEgfCBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNhbXBsZXM6IHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ2lkbGUnIHwgJ3VwbG9hZGluZycgfCAnc2tpcHBlZCcgfCAnZG9uZScgfCAnZXJyb3InO1xuICAgICAgICAgICAgICAgIGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIHJldXNlZDogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICB0b3RhbFRhYmxlczogbnVtYmVyO1xuICAgICAgICAgICAgICAgIHVwbG9hZGVkVGFibGVzOiBudW1iZXI7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcG9zdEludHJvc3BlY3Rpb246IHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ2lkbGUnIHwgJ3F1ZXVlZCcgfCAncnVubmluZycgfCAnZG9uZScgfCAnZXJyb3InO1xuICAgICAgICAgICAgICAgIGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIHJldXNlZDogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICBzdGFnZTpcbiAgICAgICAgICAgICAgICAgICAgfCAnY2xhc3NpZnlpbmcnXG4gICAgICAgICAgICAgICAgICAgIHwgJ2Rlc2NyaWJpbmcnXG4gICAgICAgICAgICAgICAgICAgIHwgJ21hc2tpbmcnXG4gICAgICAgICAgICAgICAgICAgIHwgJ2ZpbmFsaXppbmcnXG4gICAgICAgICAgICAgICAgICAgIHwgbnVsbDtcbiAgICAgICAgICAgICAgICB0b2tlbnNJbjogbnVtYmVyIHwgbnVsbDtcbiAgICAgICAgICAgICAgICB0b2tlbnNPdXQ6IG51bWJlciB8IG51bGw7XG4gICAgICAgICAgICAgICAgY29sdW1uc0RvbmU6IG51bWJlciB8IG51bGw7XG4gICAgICAgICAgICAgICAgY29sdW1uc1RvdGFsOiBudW1iZXIgfCBudWxsO1xuICAgICAgICAgICAgICAgIGpvYklkOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHBvc3RTYW1wbGluZzoge1xuICAgICAgICAgICAgICAgIHN0YXRlOiAnaWRsZScgfCAncXVldWVkJyB8ICdydW5uaW5nJyB8ICdkb25lJyB8ICdlcnJvcic7XG4gICAgICAgICAgICAgICAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgcmV1c2VkOiBib29sZWFuO1xuICAgICAgICAgICAgICAgIHN0YWdlOiAnZGVzY3JpYmluZycgfCAnZW1iZWRkaW5nJyB8ICdkaXNjb3ZlcmluZycgfCBudWxsO1xuICAgICAgICAgICAgICAgIGNvdW50czoge1xuICAgICAgICAgICAgICAgICAgICB0b3RhbFRhYmxlczogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmliZWRUYWJsZXM6IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgZW1iZWRkZWRUYWJsZXM6IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgdG90YWxFbWJlZGRpbmdzOiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIHNjYW5uZWRUYWJsZXM6IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleXNGb3VuZDogbnVtYmVyO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgam9iSWQ6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQXBwU3RvcmUgPSAoXG4gICAgY29uZmlnOiBUQ29ubmVjdGlvbkNvbmZpZyxcbiAgICBvdXRwdXRPcHRpb25zOiBUT3V0cHV0T3B0aW9ucyxcbikgPT4ge1xuICAgIGNvbnN0IHN0b3JlOiBUU3RvcmUgPSB7XG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgb3V0cHV0T3B0aW9ucyxcbiAgICAgICAgZXhpdFJlcXVlc3RlZDogZmFsc2UsXG4gICAgICAgIG1vZGU6ICdydW4nLFxuICAgICAgICBsaXN0UGlja2VyOiBudWxsLFxuICAgICAgICBsYW5kaW5nVVJMOiBudWxsLFxuICAgICAgICBzdGVwczoge1xuICAgICAgICAgICAgc3NoQ29ubmVjdGlvbjoge1xuICAgICAgICAgICAgICAgIGVuYWJsZWQ6ICEhY29uZmlnLnNzaEhvc3QsXG4gICAgICAgICAgICAgICAgbmVlZFBhc3N3b3JkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogbnVsbCxcbiAgICAgICAgICAgICAgICBwYXNzd29yZFByb21wdFR5cGU6IG51bGwsXG4gICAgICAgICAgICAgICAgcHJvbXB0Q291bnQ6IDAsXG4gICAgICAgICAgICAgICAgd3JvbmdBdHRlbXB0OiBmYWxzZSxcblxuICAgICAgICAgICAgICAgIHBpY2tlZEhvc3RuYW1lOiBudWxsLFxuICAgICAgICAgICAgICAgIHBpY2tlZFBvcnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcGlja2VkVXNlcm5hbWU6IG51bGwsXG4gICAgICAgICAgICAgICAgcGlja2VkS2V5UGF0aDogbnVsbCxcblxuICAgICAgICAgICAgICAgIGxvY2FsUG9ydDogbnVsbCxcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ2lkbGUnLFxuICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZGF0YWJhc2VDb25uZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcHJvbXB0Q291bnQ6IDAsXG4gICAgICAgICAgICAgICAgd3JvbmdBdHRlbXB0OiBmYWxzZSxcblxuICAgICAgICAgICAgICAgIHBpY2tlZEhvc3RuYW1lOiBudWxsLFxuICAgICAgICAgICAgICAgIHBpY2tlZFBvcnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcGlja2VkRGF0YWJhc2U6IG51bGwsXG4gICAgICAgICAgICAgICAgcGlja2VkVXNlcm5hbWU6IG51bGwsXG5cbiAgICAgICAgICAgICAgICBwb3N0Z3Jlc1ZlcnNpb246IG51bGwsXG4gICAgICAgICAgICAgICAgcG9zdGdyZXNWZXJzaW9uTnVtYmVyOiBudWxsLFxuICAgICAgICAgICAgICAgIHN0YXRlOiAnaWRsZScsXG4gICAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBpbnRyb3NwZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICBmaWxlU3RhdHNTa2lwcGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb3VudHM6IHtcbiAgICAgICAgICAgICAgICAgICAgdGFibGVzOiAwLFxuICAgICAgICAgICAgICAgICAgICB2aWV3czogMCxcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkVmlld3M6IDAsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IDAsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ZXM6IDAsXG4gICAgICAgICAgICAgICAgICAgIGZvcmVpZ25LZXlzOiAwLFxuICAgICAgICAgICAgICAgICAgICBlbnVtczogMCxcbiAgICAgICAgICAgICAgICAgICAgYW5hbHl6ZWQ6IDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGFjY291bnQ6IHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ2lkbGUnLFxuICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgICAgIHVybDogbnVsbCxcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgZW1haWw6IG51bGwsXG4gICAgICAgICAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIG91dHB1dEpzb246IHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ2lkbGUnLFxuICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgICAgIGNvbmZpcm1lZDogbnVsbCxcbiAgICAgICAgICAgICAgICBwYXRoOiBudWxsLFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdXNlckV4cGxhbmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdhdGU6IHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ2lkbGUnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBiaWxsaW5nOiB7XG4gICAgICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyxcbiAgICAgICAgICAgICAgICB1cmw6IG51bGwsXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzYW1wbGluZzoge1xuICAgICAgICAgICAgICAgIHN0YXRlOiAnaWRsZScsXG4gICAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgY29uZmlybWVkOiBudWxsLFxuICAgICAgICAgICAgICAgIG91dHB1dERpcjogbnVsbCxcbiAgICAgICAgICAgICAgICByZXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvdW50czoge1xuICAgICAgICAgICAgICAgICAgICB0b3RhbFRhYmxlczogMCxcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkVGFibGVzOiAwLFxuICAgICAgICAgICAgICAgICAgICB0b3RhbENvbHVtbnM6IDAsXG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZWRDb2x1bW5zOiAwLFxuICAgICAgICAgICAgICAgICAgICBza2lwcGVkQ29sdW1uczogMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaW5nZXN0aW9uOiB7XG4gICAgICAgICAgICAgICAgaW50cm9zcGVjdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogJ2lkbGUnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZ2F0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNhbXBsZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHJldXNlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsVGFibGVzOiAwLFxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRlZFRhYmxlczogMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBvc3RJbnRyb3NwZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAnaWRsZScsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICByZXVzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBzdGFnZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zSW46IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHRva2Vuc091dDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uc0RvbmU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnNUb3RhbDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgam9iSWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwb3N0U2FtcGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHJldXNlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHN0YWdlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb3VudHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsVGFibGVzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVkVGFibGVzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW1iZWRkZWRUYWJsZXM6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEVtYmVkZGluZ3M6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FubmVkVGFibGVzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleXNGb3VuZDogMCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgam9iSWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIHJldHVybiBtYWtlQXV0b09ic2VydmFibGUoXG4gICAgICAgIHN0b3JlLFxuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgICAgYXV0b0JpbmQ6IHRydWUsXG4gICAgICAgICAgICBkZWVwOiB0cnVlLFxuICAgICAgICB9LFxuICAgICk7XG59O1xuXG5leHBvcnQgdHlwZSBUQXBwU3RvcmUgPSBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBcHBTdG9yZT47XG4iLCAiaW1wb3J0IHtleGlzdHNTeW5jfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7aG9tZWRpcn0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQge3Jlc29sdmV9IGZyb20gJ25vZGU6cGF0aCc7XG5cbnR5cGUgVFBhdGhWYWxpZGF0aW9uUmVzdWx0ID1cbiAgICB8IHt2YWxpZDogdHJ1ZTsgZXhwYW5kZWRQYXRoOiBzdHJpbmd9XG4gICAgfCB7dmFsaWQ6IGZhbHNlOyBlcnJvcjogc3RyaW5nfTtcblxudHlwZSBUUGF0aE9wdGlvbktleSA9XG4gICAgfCAnc3NsY2VydCdcbiAgICB8ICdzc2xrZXknXG4gICAgfCAnc3Nscm9vdGNlcnQnXG4gICAgfCAnc3NoS2V5J1xuICAgIHwgJ3NlbnNpdGl2ZU1hc2snXG4gICAgfCAndXNlSW50cm9zcGVjdGlvbkpzb24nO1xuXG5leHBvcnQgdHlwZSBUUGF0aFZhbGlkYXRpb25FcnJvciA9IHtcbiAgICBvcHRpb246IHN0cmluZztcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgZXJyb3I6IHN0cmluZztcbn07XG5cbmNvbnN0IGV4cGFuZFRpbGRlID0gKHBhdGg6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgIHBhdGguc3RhcnRzV2l0aCgnfi8nKSB8fCBwYXRoID09PSAnfidcbiAgICAgICAgPyBwYXRoLnJlcGxhY2UoL15+LywgaG9tZWRpcigpKVxuICAgICAgICA6IHBhdGg7XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVQYXRoID0gKHBhdGg6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgIHJlc29sdmUoZXhwYW5kVGlsZGUocGF0aCkpO1xuXG5jb25zdCB2YWxpZGF0ZVBhdGhFeGlzdHMgPSAocGF0aDogc3RyaW5nKTogVFBhdGhWYWxpZGF0aW9uUmVzdWx0ID0+IHtcbiAgICBjb25zdCBleHBhbmRlZFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGgpO1xuXG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoZXhwYW5kZWRQYXRoKVxuICAgICAgICA/IHt2YWxpZDogdHJ1ZSwgZXhwYW5kZWRQYXRofVxuICAgICAgICA6IHt2YWxpZDogZmFsc2UsIGVycm9yOiBgUGF0aCBkb2VzIG5vdCBleGlzdDogJHtwYXRofWB9O1xufTtcblxuY29uc3QgUEFUSF9PUFRJT05fTEFCRUxTOiBSZWNvcmQ8VFBhdGhPcHRpb25LZXksIHN0cmluZz4gPSB7XG4gICAgc3NsY2VydDogJy0tc3NsY2VydCcsXG4gICAgc3Nsa2V5OiAnLS1zc2xrZXknLFxuICAgIHNzbHJvb3RjZXJ0OiAnLS1zc2xyb290Y2VydCcsXG4gICAgc3NoS2V5OiAnLS1zc2gta2V5JyxcbiAgICBzZW5zaXRpdmVNYXNrOiAnLS1zZW5zaXRpdmUtbWFzaycsXG4gICAgdXNlSW50cm9zcGVjdGlvbkpzb246ICctLXVzZS1pbnRyb3NwZWN0aW9uLWpzb24nLFxufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUGF0aE9wdGlvbnMgPSA8XG4gICAgVCBleHRlbmRzIFBhcnRpYWw8UmVjb3JkPFRQYXRoT3B0aW9uS2V5LCBzdHJpbmc+Pixcbj4oXG4gICAgb3B0aW9uczogVCxcbik6IHtcbiAgICBlcnJvcnM6IFRQYXRoVmFsaWRhdGlvbkVycm9yW107XG4gICAgZXhwYW5kZWRQYXRoczogUGFydGlhbDxSZWNvcmQ8VFBhdGhPcHRpb25LZXksIHN0cmluZz4+O1xufSA9PiB7XG4gICAgY29uc3QgcGF0aEtleXM6IFRQYXRoT3B0aW9uS2V5W10gPSBbXG4gICAgICAgICdzc2xjZXJ0JyxcbiAgICAgICAgJ3NzbGtleScsXG4gICAgICAgICdzc2xyb290Y2VydCcsXG4gICAgICAgICdzc2hLZXknLFxuICAgICAgICAnc2Vuc2l0aXZlTWFzaycsXG4gICAgICAgICd1c2VJbnRyb3NwZWN0aW9uSnNvbicsXG4gICAgXTtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBwYXRoS2V5c1xuICAgICAgICAuZmlsdGVyKChrZXkpID0+IG9wdGlvbnNba2V5XSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBvcHRpb25zW2tleV0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVQYXRoRXhpc3RzKHBhdGgpO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgY29uc3QgZXJyb3JzID0gcmVzdWx0c1xuICAgICAgICAuZmlsdGVyKChyKSA9PiAhci5yZXN1bHQudmFsaWQpXG4gICAgICAgIC5tYXAoKHIpID0+ICh7XG4gICAgICAgICAgICBvcHRpb246IFBBVEhfT1BUSU9OX0xBQkVMU1tyLmtleV0sXG4gICAgICAgICAgICBwYXRoOiByLnBhdGgsXG4gICAgICAgICAgICBlcnJvcjogKHIucmVzdWx0IGFzIHt2YWxpZDogZmFsc2U7IGVycm9yOiBzdHJpbmd9KS5lcnJvcixcbiAgICAgICAgfSkpO1xuXG4gICAgY29uc3QgZXhwYW5kZWRQYXRocyA9IHJlc3VsdHNcbiAgICAgICAgLmZpbHRlcigocikgPT4gci5yZXN1bHQudmFsaWQpXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCByKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgICAgICBbci5rZXldOiAoci5yZXN1bHQgYXMge3ZhbGlkOiB0cnVlOyBleHBhbmRlZFBhdGg6IHN0cmluZ30pXG4gICAgICAgICAgICAgICAgICAgIC5leHBhbmRlZFBhdGgsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9IGFzIFBhcnRpYWw8UmVjb3JkPFRQYXRoT3B0aW9uS2V5LCBzdHJpbmc+PixcbiAgICAgICAgKTtcblxuICAgIHJldHVybiB7ZXJyb3JzLCBleHBhbmRlZFBhdGhzfTtcbn07XG4iLCAiaW1wb3J0IHtydW5JbkFjdGlvbn0gZnJvbSAnbW9ieCc7XG5pbXBvcnQge0RCQ1RYX0RFVn0gZnJvbSAnLi4vbGliL2Vudi5tanMnO1xuaW1wb3J0IHtsb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci5tanMnO1xuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB0eXBlIHtURmxvd0V2ZW50fSBmcm9tICcuL2V2ZW50cy5tanMnO1xuaW1wb3J0IHtyZWR1Y2V9IGZyb20gJy4vcmVkdWNlci5tanMnO1xuaW1wb3J0IHtwcm9qZWN0U3RvcmVGcm9tRmxvd30gZnJvbSAnLi9wcm9qZWN0aW9uLm1qcyc7XG5pbXBvcnQge2luaXRpYWxGbG93U3RhdGUsIGlzVGVybWluYWwsIHR5cGUgVEZsb3dTdGF0ZX0gZnJvbSAnLi9zdGF0ZXMubWpzJztcbmltcG9ydCB7Y2xlYW51cCwgZHJpdmVTaWRlLCBpbml0aWFsQ29udGV4dH0gZnJvbSAnLi9pbnRlcnByZXRlci5tanMnO1xuXG4vLyBBcHBseSB0aGUgcHJvamVjdGlvbidzIGRlbHRhIG9udG8gdGhlIG1vYnggc3RvcmUuIEZpZWxkIG5hbWVzIG1hdGNoXG4vLyBzdG9yZS5zdGVwcyBzaGFwZSBzbyB0aGUgSW5rIFVJIGNvbnRpbnVlcyB0byByZWFkIHdoYXQgaXQgYWx3YXlzIGRpZC5cbmNvbnN0IGFwcGx5UHJvamVjdGlvbiA9IChcbiAgICBzdG9yZTogVFN0b3JlLFxuICAgIGRlbHRhOiBSZXR1cm5UeXBlPHR5cGVvZiBwcm9qZWN0U3RvcmVGcm9tRmxvdz4sXG4pOiB2b2lkID0+IHtcbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5pbnRyb3NwZWN0aW9uLnN0YXRlID1cbiAgICAgICAgICAgIGRlbHRhLmluZ2VzdGlvbi5pbnRyb3NwZWN0aW9uLnN0YXRlO1xuICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24uaW50cm9zcGVjdGlvbi5lcnJvciA9XG4gICAgICAgICAgICBkZWx0YS5pbmdlc3Rpb24uaW50cm9zcGVjdGlvbi5lcnJvcjtcbiAgICAgICAgLy8gcG9zdEludHJvc3BlY3Rpb24gaXMgb3duZWQgYnkga2lja1Bvc3RJbnRyb3NwZWN0aW9uUG9sbCArXG4gICAgICAgIC8vIHN0cmVhbVBvc3RJbnRyb3NwZWN0aW9uIChkaXJlY3Qgc3RvcmUgd3JpdGVzKS4gUHJvamVjdGlvbiBtdXN0IG5vdFxuICAgICAgICAvLyBtaXJyb3IgaXQgXHUyMDE0IGZsb3cgc3RhdGUgbmV2ZXIgYWR2YW5jZXMgcGFzdCAncXVldWVkJywgc28gYW55IG1pcnJvclxuICAgICAgICAvLyBoZXJlIHdvdWxkIGNsb2JiZXIgdGhlIHN0cmVhbSdzICdydW5uaW5nJy8nZG9uZScgd3JpdGVzIG9uIGV2ZXJ5XG4gICAgICAgIC8vIHN1YnNlcXVlbnQgZGlzcGF0Y2guXG4gICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLnN0YXRlID0gZGVsdGEuc2FtcGxpbmcuc3RhdGU7XG4gICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLnJldXNlZCA9IGRlbHRhLnNhbXBsaW5nLnJldXNlZDtcbiAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcuZXJyb3IgPSBkZWx0YS5zYW1wbGluZy5lcnJvcjtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdG9yZS5zdGVwcy51c2VyRXhwbGFuYXRpb24sIGRlbHRhLnVzZXJFeHBsYW5hdGlvbik7XG4gICAgICAgIGlmIChkZWx0YS5hY2NvdW50KSB7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5hY2NvdW50LnN0YXRlID0gZGVsdGEuYWNjb3VudC5zdGF0ZTtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmFjY291bnQuZXJyb3IgPSBkZWx0YS5hY2NvdW50LmVycm9yO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcnVuRmxvdyA9IGFzeW5jIChzdG9yZTogVFN0b3JlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgbGV0IHN0YXRlOiBURmxvd1N0YXRlID0gaW5pdGlhbEZsb3dTdGF0ZSh7XG4gICAgICAgIHN0b3BBZnRlcjogc3RvcmUub3V0cHV0T3B0aW9ucy5zdG9wQWZ0ZXIsXG4gICAgICAgIHNzaEVuYWJsZWQ6IHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uZW5hYmxlZCxcbiAgICAgICAgZmlsZU1hc2tQYXRoOiBzdG9yZS5vdXRwdXRPcHRpb25zLnNlbnNpdGl2ZU1hc2tQYXRoLFxuICAgICAgICBmcm9tSW50cm9zcGVjdGlvbkZpbGU6XG4gICAgICAgICAgICBzdG9yZS5vdXRwdXRPcHRpb25zLnVzZUludHJvc3BlY3Rpb25Kc29uUGF0aCAhPT0gbnVsbCxcbiAgICAgICAgb3V0cHV0SlNPTlBhdGg6IHN0b3JlLm91dHB1dE9wdGlvbnMub3V0cHV0SW50cm9zcGVjdGlvbkpzb24sXG4gICAgICAgIG91dHB1dFNhbXBsZXNEaXI6IHN0b3JlLm91dHB1dE9wdGlvbnMub3V0cHV0U2FtcGxlc0RpcixcbiAgICAgICAgZXhwbGFuYXRpb246IHN0b3JlLm91dHB1dE9wdGlvbnMuZXhwbGFuYXRpb24sXG4gICAgfSk7XG4gICAgY29uc3QgY3R4ID0gaW5pdGlhbENvbnRleHQoKTtcblxuICAgIGxldCByZXNvbHZlVGVybWluYWw6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgICBjb25zdCB0ZXJtaW5hbFByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzKSA9PiB7XG4gICAgICAgIHJlc29sdmVUZXJtaW5hbCA9IHJlcztcbiAgICB9KTtcblxuICAgIGNvbnN0IGRpc3BhdGNoID0gKGV2ZW50OiBURmxvd0V2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBzdGF0ZTtcbiAgICAgICAgY29uc3QgbmV4dCA9IHJlZHVjZShzdGF0ZSwgZXZlbnQpO1xuICAgICAgICBzdGF0ZSA9IG5leHQ7XG4gICAgICAgIGFwcGx5UHJvamVjdGlvbihzdG9yZSwgcHJvamVjdFN0b3JlRnJvbUZsb3cobmV4dCkpO1xuXG4gICAgICAgIGlmIChpc1Rlcm1pbmFsKG5leHQpICYmICFpc1Rlcm1pbmFsKHByZXYpKSB7XG4gICAgICAgICAgICBjbGVhbnVwKGN0eCk7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuZXhpdFJlcXVlc3RlZCA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc29sdmVUZXJtaW5hbCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpcmUgc2lkZSBlZmZlY3RzIGZvciBuZXcgcGhhc2VzIGFzeW5jaHJvbm91c2x5LiBUaGUgaW50ZXJwcmV0ZXJcbiAgICAgICAgLy8gZGlzcGF0Y2hlcyBtb3JlIGV2ZW50cyBiYWNrIGFzIHdvcmsgcmVzb2x2ZXMuXG4gICAgICAgIGlmIChwcmV2LnBoYXNlICE9PSBuZXh0LnBoYXNlKSB7XG4gICAgICAgICAgICB2b2lkIGRyaXZlU2lkZShwcmV2LCBuZXh0LCBzdG9yZSwgY3R4LCBkaXNwYXRjaCkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgZmxvdyBpbnRlcnByZXRlciBlcnJvcjogJHtTdHJpbmcoZXJyKX1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICAgIC8vIEtpY2sgb2ZmIHRoZSBmbG93LlxuICAgICAgICBkaXNwYXRjaCh7a2luZDogJ3N0YXJ0J30pO1xuICAgICAgICBhd2FpdCB0ZXJtaW5hbFByb21pc2U7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChEQkNUWF9ERVYpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgcnVuRmxvdzogJHtTdHJpbmcoZXJyKX1gLCB7ZXJyb3I6IGVycn0pO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFudXAoY3R4KTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGV4aXQgc2lnbmFsOiBsZWdhY3kgcnVuKCkgYWxzbyBtYXJrZWQgZXhpdFJlcXVlc3RlZCBhdCB0aGVcbiAgICAvLyBlbmQuIFN0b3AtYWZ0ZXIgcGF0aHMgYWRkaXRpb25hbGx5IHByb2Nlc3MuZXhpdCgwKTsgcHJlc2VydmUgdGhhdFxuICAgIC8vIGJlaGF2aW9yIGhlcmUuXG4gICAgaWYgKFxuICAgICAgICBzdGF0ZS5waGFzZSA9PT0gJ2RvbmUnICYmXG4gICAgICAgIHN0YXRlLnN0b3BBZnRlciAhPT0gbnVsbCAmJlxuICAgICAgICBzdGF0ZS5zdG9wQWZ0ZXIgIT09ICdzYW1wbGluZydcbiAgICApIHtcbiAgICAgICAgLy8gTWF0Y2ggbGVnYWN5OiBzdG9wLWFmdGVyIHNzaC1jb25uZWN0IC8gZGItY29ubmVjdCAvIGludHJvc3BlY3Rpb25cbiAgICAgICAgLy8gaGFyZC1leGl0IHNvIHRoZSBJbmsgYXBwIHRlYXJkb3duIGRvZXNuJ3QgbGluZ2VyLlxuICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxufTtcbiIsICJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IG9zIGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHdpbnN0b24gZnJvbSAnd2luc3Rvbic7XG5pbXBvcnQge0RCQ1RYX0RFVn0gZnJvbSAnLi9saWIvZW52Lm1qcyc7XG5cbmNvbnN0IGxvZ0ZpbGUgPSBwYXRoLmpvaW4ob3MudG1wZGlyKCksIGBkYmN0eC0ke0RhdGUubm93KCl9LmxvZ2ApO1xuXG5leHBvcnQgY29uc3QgbG9nZ2VyID0gd2luc3Rvbi5jcmVhdGVMb2dnZXIoe1xuICAgIGxldmVsOiBEQkNUWF9ERVYgPyAnZGVidWcnIDogJ2luZm8nLFxuICAgIGZvcm1hdDogd2luc3Rvbi5mb3JtYXQuY29tYmluZShcbiAgICAgICAgd2luc3Rvbi5mb3JtYXQudGltZXN0YW1wKCksXG4gICAgICAgIHdpbnN0b24uZm9ybWF0Lmpzb24oKSxcbiAgICApLFxuICAgIHRyYW5zcG9ydHM6IFtuZXcgd2luc3Rvbi50cmFuc3BvcnRzLkZpbGUoe2ZpbGVuYW1lOiBsb2dGaWxlfSldLFxufSk7XG4iLCAiaW1wb3J0IHR5cGUge1RTdG9wQWZ0ZXJTdGFnZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB0eXBlIHtUUG9zdEludHJvc3BlY3Rpb25TdGFnZX0gZnJvbSAnQGRiY3R4L2NvbW1vbic7XG5pbXBvcnQgdHlwZSB7VFNlbnNpdGl2ZU1hc2ssIFRUYWJsZVNhbXBsZUV2ZW50fSBmcm9tICcuLi9hcHAvc2FtcGxlLm1qcyc7XG5cbi8vIFNpbmdsZSByZWNvcmQgc3RhdGUgXHUyMDE0IHBhcmFsbGVsIGNvbmNlcm5zIGV4cHJlc3NlZCBhcyBzdWItc3RhdHVzIGZpZWxkcyxcbi8vIG5vdCBhcyBuZXN0ZWQgc3RhdGUgbWFjaGluZXMuIEtlZXBzIHRoZSByZWR1Y2VyIG9uZSBiaWcgc3dpdGNoIGluc3RlYWRcbi8vIG9mIE4gY29vcmRpbmF0aW5nIG1pbmktbWFjaGluZXMuXG5cbmV4cG9ydCB0eXBlIFRGbG93UGhhc2UgPVxuICAgIHwgJ2lkbGUnXG4gICAgfCAnY29ubmVjdGluZy1zc2gnXG4gICAgfCAnY29ubmVjdGluZy1kYidcbiAgICB8ICdpbnRyb3NwZWN0aW5nJ1xuICAgIHwgJ291dHB1dC1qc29uJ1xuICAgIHwgJ2NyZWF0aW5nLXNlc3Npb24nXG4gICAgfCAnYXdhaXRpbmctYXV0aG9yaXphdGlvbidcbiAgICB8ICdhd2FpdGluZy1leHBsYW5hdGlvbidcbiAgICB8ICdwcmVmbGlnaHQtY2hlY2tpbmcnXG4gICAgfCAnaW5nZXN0aW5nLWludHJvc3BlY3Rpb24nXG4gICAgfCAnc2FtcGxpbmctbWFzay1yZXNvbHZpbmcnXG4gICAgfCAnc2FtcGxpbmcnXG4gICAgfCAndXBsb2FkaW5nLXNhbXBsZXMnXG4gICAgfCAnYXdhaXRpbmctcG9zdC1zYW1wbGluZydcbiAgICB8ICdkb25lJ1xuICAgIHwgJ2Vycm9yJztcblxuLy8gU3ViLXN0YXR1cyBvZiB0aGUgYmFja2dyb3VuZCBwb3N0LWludHJvc3BlY3Rpb24gam9iLiBUcmFja2VkIGFzIGEgZmllbGRcbi8vIHNvIGl0IGNhbiBhZHZhbmNlIGluZGVwZW5kZW50bHkgb2YgdGhlIHByaW1hcnkgcGhhc2UgKGUuZy4gY29tcGxldGVcbi8vIHdoaWxlIHdlJ3JlIHN0aWxsIGluIGBzYW1wbGluZ2AgYmVjYXVzZSBhIGZpbGUgbWFzayBsZXQgdXMgcHJvY2VlZCkuXG5leHBvcnQgdHlwZSBUUG9zdEludHJvc3BlY3Rpb25TdWJTdGF0dXMgPSB7XG4gICAgcmVhZG9ubHkgc3RhdGU6ICdpZGxlJyB8ICdxdWV1ZWQnIHwgJ3J1bm5pbmcnIHwgJ2RvbmUnIHwgJ2Vycm9yJztcbiAgICByZWFkb25seSBqb2JJZDogc3RyaW5nIHwgbnVsbDtcbiAgICByZWFkb25seSByZXVzZWQ6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgc3RhZ2U6IFRQb3N0SW50cm9zcGVjdGlvblN0YWdlIHwgbnVsbDtcbiAgICByZWFkb25seSB0b2tlbnNJbjogbnVtYmVyIHwgbnVsbDtcbiAgICByZWFkb25seSB0b2tlbnNPdXQ6IG51bWJlciB8IG51bGw7XG4gICAgcmVhZG9ubHkgY29sdW1uc0RvbmU6IG51bWJlciB8IG51bGw7XG4gICAgcmVhZG9ubHkgY29sdW1uc1RvdGFsOiBudW1iZXIgfCBudWxsO1xuICAgIHJlYWRvbmx5IGVycm9yOiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgVFNhbXBsaW5nU3ViU3RhdHVzID0ge1xuICAgIHJlYWRvbmx5IG1hc2s6IFRTZW5zaXRpdmVNYXNrIHwgbnVsbDtcbiAgICByZWFkb25seSBjb2xsZWN0ZWQ6IHJlYWRvbmx5IFRUYWJsZVNhbXBsZUV2ZW50W107XG4gICAgcmVhZG9ubHkgdXBsb2FkZWRUYWJsZXM6IG51bWJlcjtcbiAgICByZWFkb25seSB0b3RhbFRhYmxlczogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgVEZsb3dTdGF0ZSA9IHtcbiAgICByZWFkb25seSBwaGFzZTogVEZsb3dQaGFzZTtcbiAgICByZWFkb25seSBzdG9wQWZ0ZXI6IFRTdG9wQWZ0ZXJTdGFnZSB8IG51bGw7XG4gICAgcmVhZG9ubHkgc3NoRW5hYmxlZDogYm9vbGVhbjtcbiAgICByZWFkb25seSBmaWxlTWFza1BhdGg6IHN0cmluZyB8IG51bGw7XG4gICAgcmVhZG9ubHkgZnJvbUludHJvc3BlY3Rpb25GaWxlOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IG91dHB1dEpTT05QYXRoOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlYWRvbmx5IG91dHB1dFNhbXBsZXNEaXI6IHN0cmluZyB8IG51bGw7XG4gICAgcmVhZG9ubHkgZXhwbGFuYXRpb246IHN0cmluZyB8IG51bGw7XG4gICAgcmVhZG9ubHkgc2Vzc2lvbklkOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlYWRvbmx5IHJldmlzaW9uSWQ6IHN0cmluZyB8IG51bGw7XG4gICAgcmVhZG9ubHkgYXV0aFRva2VuOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlYWRvbmx5IHNhbXBsZXNBbHJlYWR5SW5nZXN0ZWQ6IGJvb2xlYW47XG4gICAgLy8gU2VydmVyLXN1cHBsaWVkIGxpc3Qgb2YgdGFibGVzIHRoYXQgbmVlZCBmcmVzaCBzYW1wbGVzIG9uIHRoaXMgcnVuLlxuICAgIC8vIE51bGwgPSBub3QgeWV0IGtub3duIChwcmUtaGFuZHNoYWtlKS4gRW1wdHkgPSBub3RoaW5nIHRvIHNhbXBsZS4gTm9uLVxuICAgIC8vIGVtcHR5ID0gZmlsdGVyIHRoZSBsb2NhbCBzYW1wbGluZyBsb29wIHRvIGp1c3QgdGhlc2UgdGFibGVzLlxuICAgIHJlYWRvbmx5IHRhYmxlc05lZWRpbmdTYW1wbGVzOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgcmVhZG9ubHkgcHJlZmxpZ2h0SGl0OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHBvc3RJbnRyb3NwZWN0aW9uOiBUUG9zdEludHJvc3BlY3Rpb25TdWJTdGF0dXM7XG4gICAgcmVhZG9ubHkgc2FtcGxpbmc6IFRTYW1wbGluZ1N1YlN0YXR1cztcbiAgICByZWFkb25seSBlcnJvclBoYXNlOiBURmxvd1BoYXNlIHwgbnVsbDtcbiAgICByZWFkb25seSBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgaW5pdGlhbFBvc3RJbnRyb3NwZWN0aW9uOiBUUG9zdEludHJvc3BlY3Rpb25TdWJTdGF0dXMgPVxuICAgIE9iamVjdC5mcmVlemUoe1xuICAgICAgICBzdGF0ZTogJ2lkbGUnIGFzIGNvbnN0LFxuICAgICAgICBqb2JJZDogbnVsbCxcbiAgICAgICAgcmV1c2VkOiBmYWxzZSxcbiAgICAgICAgc3RhZ2U6IG51bGwsXG4gICAgICAgIHRva2Vuc0luOiBudWxsLFxuICAgICAgICB0b2tlbnNPdXQ6IG51bGwsXG4gICAgICAgIGNvbHVtbnNEb25lOiBudWxsLFxuICAgICAgICBjb2x1bW5zVG90YWw6IG51bGwsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgIH0pO1xuXG5leHBvcnQgY29uc3QgaW5pdGlhbFNhbXBsaW5nOiBUU2FtcGxpbmdTdWJTdGF0dXMgPSBPYmplY3QuZnJlZXplKHtcbiAgICBtYXNrOiBudWxsLFxuICAgIGNvbGxlY3RlZDogT2JqZWN0LmZyZWV6ZShbXSBhcyByZWFkb25seSBUVGFibGVTYW1wbGVFdmVudFtdKSxcbiAgICB1cGxvYWRlZFRhYmxlczogMCxcbiAgICB0b3RhbFRhYmxlczogMCxcbn0pO1xuXG5leHBvcnQgY29uc3QgaW5pdGlhbEZsb3dTdGF0ZSA9IChhcmdzOiB7XG4gICAgcmVhZG9ubHkgc3RvcEFmdGVyOiBUU3RvcEFmdGVyU3RhZ2UgfCBudWxsO1xuICAgIHJlYWRvbmx5IHNzaEVuYWJsZWQ6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgZmlsZU1hc2tQYXRoOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlYWRvbmx5IGZyb21JbnRyb3NwZWN0aW9uRmlsZTogYm9vbGVhbjtcbiAgICByZWFkb25seSBvdXRwdXRKU09OUGF0aDogc3RyaW5nIHwgbnVsbDtcbiAgICByZWFkb25seSBvdXRwdXRTYW1wbGVzRGlyOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlYWRvbmx5IGV4cGxhbmF0aW9uOiBzdHJpbmcgfCBudWxsO1xufSk6IFRGbG93U3RhdGUgPT5cbiAgICBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgcGhhc2U6ICdpZGxlJyxcbiAgICAgICAgc3RvcEFmdGVyOiBhcmdzLnN0b3BBZnRlcixcbiAgICAgICAgc3NoRW5hYmxlZDogYXJncy5zc2hFbmFibGVkLFxuICAgICAgICBmaWxlTWFza1BhdGg6IGFyZ3MuZmlsZU1hc2tQYXRoLFxuICAgICAgICBmcm9tSW50cm9zcGVjdGlvbkZpbGU6IGFyZ3MuZnJvbUludHJvc3BlY3Rpb25GaWxlLFxuICAgICAgICBvdXRwdXRKU09OUGF0aDogYXJncy5vdXRwdXRKU09OUGF0aCxcbiAgICAgICAgb3V0cHV0U2FtcGxlc0RpcjogYXJncy5vdXRwdXRTYW1wbGVzRGlyLFxuICAgICAgICBleHBsYW5hdGlvbjogYXJncy5leHBsYW5hdGlvbixcbiAgICAgICAgc2Vzc2lvbklkOiBudWxsLFxuICAgICAgICByZXZpc2lvbklkOiBudWxsLFxuICAgICAgICBhdXRoVG9rZW46IG51bGwsXG4gICAgICAgIHNhbXBsZXNBbHJlYWR5SW5nZXN0ZWQ6IGZhbHNlLFxuICAgICAgICB0YWJsZXNOZWVkaW5nU2FtcGxlczogbnVsbCxcbiAgICAgICAgcHJlZmxpZ2h0SGl0OiBmYWxzZSxcbiAgICAgICAgcG9zdEludHJvc3BlY3Rpb246IGluaXRpYWxQb3N0SW50cm9zcGVjdGlvbixcbiAgICAgICAgc2FtcGxpbmc6IGluaXRpYWxTYW1wbGluZyxcbiAgICAgICAgZXJyb3JQaGFzZTogbnVsbCxcbiAgICAgICAgZXJyb3JNZXNzYWdlOiBudWxsLFxuICAgIH0pO1xuXG5leHBvcnQgY29uc3QgaXNUZXJtaW5hbCA9IChzdGF0ZTogVEZsb3dTdGF0ZSk6IGJvb2xlYW4gPT5cbiAgICBzdGF0ZS5waGFzZSA9PT0gJ2RvbmUnIHx8IHN0YXRlLnBoYXNlID09PSAnZXJyb3InO1xuIiwgImltcG9ydCB0eXBlIHtURmxvd0V2ZW50fSBmcm9tICcuL2V2ZW50cy5tanMnO1xuaW1wb3J0IHtcbiAgICBpbml0aWFsUG9zdEludHJvc3BlY3Rpb24sXG4gICAgdHlwZSBURmxvd1BoYXNlLFxuICAgIHR5cGUgVEZsb3dTdGF0ZSxcbn0gZnJvbSAnLi9zdGF0ZXMubWpzJztcblxuLy8gUHVyZSByZWR1Y2VyOiAoc3RhdGUsIGV2ZW50KSBcdTIxOTIgc3RhdGUuIEV4aGF1c3RpdmUgc3dpdGNoIG92ZXIgdGhlXG4vLyBkaXNjcmltaW5hdGVkIHVuaW9uIHNvIFR5cGVTY3JpcHQgY2F0Y2hlcyBtaXNzaW5nIGNhc2VzIGF0IGNvbXBpbGUgdGltZS5cbi8vIFVucmVsYXRlZCBldmVudHMgKGV2ZW50IGtpbmRzIHRoYXQgZG9uJ3QgYXBwbHkgdG8gdGhlIGN1cnJlbnQgcGhhc2Ugb3Jcbi8vIHN1Yi1zdGF0dXMpIHJldHVybiBzdGF0ZSB1bmNoYW5nZWQgXHUyMDE0IHBpbm5lZCBieSB0aGUgbm8tb3AgaW52YXJpYW50IHRlc3QuXG5cbmNvbnN0IHNldEVycm9yID0gKFxuICAgIHN0YXRlOiBURmxvd1N0YXRlLFxuICAgIHBoYXNlOiBURmxvd1BoYXNlLFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbik6IFRGbG93U3RhdGUgPT4gKHtcbiAgICAuLi5zdGF0ZSxcbiAgICBwaGFzZTogJ2Vycm9yJyxcbiAgICBlcnJvclBoYXNlOiBwaGFzZSxcbiAgICBlcnJvck1lc3NhZ2U6IG1lc3NhZ2UsXG59KTtcblxuY29uc3Qgc3RvcEFmdGVyUmVhY2hlZCA9IChzdGF0ZTogVEZsb3dTdGF0ZSk6IFRGbG93U3RhdGUgPT4gKHtcbiAgICAuLi5zdGF0ZSxcbiAgICBwaGFzZTogJ2RvbmUnLFxufSk7XG5cbmV4cG9ydCBjb25zdCByZWR1Y2UgPSAoc3RhdGU6IFRGbG93U3RhdGUsIGV2ZW50OiBURmxvd0V2ZW50KTogVEZsb3dTdGF0ZSA9PiB7XG4gICAgLy8gU2lkZS1jaGFubmVsOiBwb3N0LWludHJvc3BlY3Rpb24gcHJvZ3Jlc3MgY2FuIGZpcmUgaW4gYW55IHBoYXNlXG4gICAgLy8gcG9zdC1gaW5nZXN0aW5nLWludHJvc3BlY3Rpb25gLiBVcGRhdGUgdGhlIHN1Yi1zdGF0dXMgd2l0aG91dCBjaGFuZ2luZ1xuICAgIC8vIHByaW1hcnkgcGhhc2UuXG4gICAgaWYgKGV2ZW50LmtpbmQgPT09ICdwb3N0LWludHJvc3BlY3Rpb24tcHJvZ3Jlc3MnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHBvc3RJbnRyb3NwZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUucG9zdEludHJvc3BlY3Rpb24sXG4gICAgICAgICAgICAgICAgc3RhdGU6ICdydW5uaW5nJyxcbiAgICAgICAgICAgICAgICBzdGFnZTogZXZlbnQuc3RhZ2UsXG4gICAgICAgICAgICAgICAgdG9rZW5zSW46IGV2ZW50LnRva2Vuc0luLFxuICAgICAgICAgICAgICAgIHRva2Vuc091dDogZXZlbnQudG9rZW5zT3V0LFxuICAgICAgICAgICAgICAgIGNvbHVtbnNEb25lOiBldmVudC5jb2x1bW5zRG9uZSxcbiAgICAgICAgICAgICAgICBjb2x1bW5zVG90YWw6IGV2ZW50LmNvbHVtbnNUb3RhbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChldmVudC5raW5kID09PSAncG9zdC1pbnRyb3NwZWN0aW9uLWNvbXBsZXRlZCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgcG9zdEludHJvc3BlY3Rpb246IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5wb3N0SW50cm9zcGVjdGlvbixcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ2RvbmUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtpbmQgPT09ICdwb3N0LWludHJvc3BlY3Rpb24tZmFpbGVkJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBwb3N0SW50cm9zcGVjdGlvbjoge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLnBvc3RJbnRyb3NwZWN0aW9uLFxuICAgICAgICAgICAgICAgIHN0YXRlOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGVycm9yOiBldmVudC5lcnJvcixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gU3RvcC1hZnRlciBpcyB0aGUgc2FtZSBzaGFwZSByZWdhcmRsZXNzIG9mIHBoYXNlOiBlbnRlciB0ZXJtaW5hbCBgZG9uZWAuXG4gICAgaWYgKGV2ZW50LmtpbmQgPT09ICdzdG9wLWFmdGVyLXJlYWNoZWQnKSB7XG4gICAgICAgIHJldHVybiBzdG9wQWZ0ZXJSZWFjaGVkKHN0YXRlKTtcbiAgICB9XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgcGhhc2Utc3BlY2lmaWMgdHJhbnNpdGlvbnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdpZGxlJykge1xuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBwaGFzZTogc3RhdGUuc3NoRW5hYmxlZCA/ICdjb25uZWN0aW5nLXNzaCcgOiAnY29ubmVjdGluZy1kYicsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdjb25uZWN0aW5nLXNzaCcpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdzc2gtY29ubmVjdGVkJyB8fCBldmVudC5raW5kID09PSAnc3NoLW5vdC1uZWVkZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuc3RvcEFmdGVyID09PSAnc3NoLWNvbm5lY3QnXG4gICAgICAgICAgICAgICAgPyBzdG9wQWZ0ZXJSZWFjaGVkKHN0YXRlKVxuICAgICAgICAgICAgICAgIDogey4uLnN0YXRlLCBwaGFzZTogJ2Nvbm5lY3RpbmctZGInfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ3NzaC1mYWlsZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0RXJyb3Ioc3RhdGUsICdjb25uZWN0aW5nLXNzaCcsIGV2ZW50LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnY29ubmVjdGluZy1kYicpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdkYi1jb25uZWN0ZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuc3RvcEFmdGVyID09PSAnZGItY29ubmVjdCdcbiAgICAgICAgICAgICAgICA/IHN0b3BBZnRlclJlYWNoZWQoc3RhdGUpXG4gICAgICAgICAgICAgICAgOiB7Li4uc3RhdGUsIHBoYXNlOiAnaW50cm9zcGVjdGluZyd9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnZGItZmFpbGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHNldEVycm9yKHN0YXRlLCAnY29ubmVjdGluZy1kYicsIGV2ZW50LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnaW50cm9zcGVjdGluZycpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdpbnRyb3NwZWN0aW9uLWxvYWRlZCcpIHtcbiAgICAgICAgICAgIC8vIE91dHB1dCBKU09OIHdyaXRlIGlzIGEgc3ViLXN0ZXAgYmVmb3JlIHN0b3AtYWZ0ZXItaW50cm9zcGVjdGlvbi5cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5vdXRwdXRKU09OUGF0aCAhPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gey4uLnN0YXRlLCBwaGFzZTogJ291dHB1dC1qc29uJ31cbiAgICAgICAgICAgICAgICA6IHN0YXRlLnN0b3BBZnRlciA9PT0gJ2ludHJvc3BlY3Rpb24nXG4gICAgICAgICAgICAgICAgICA/IHN0b3BBZnRlclJlYWNoZWQoc3RhdGUpXG4gICAgICAgICAgICAgICAgICA6IHsuLi5zdGF0ZSwgcGhhc2U6ICdjcmVhdGluZy1zZXNzaW9uJ307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdpbnRyb3NwZWN0aW9uLWZhaWxlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRFcnJvcihzdGF0ZSwgJ2ludHJvc3BlY3RpbmcnLCBldmVudC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5waGFzZSA9PT0gJ291dHB1dC1qc29uJykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBldmVudC5raW5kID09PSAnb3V0cHV0LWpzb24td3JpdHRlbicgfHxcbiAgICAgICAgICAgIGV2ZW50LmtpbmQgPT09ICdvdXRwdXQtanNvbi1za2lwcGVkJyB8fFxuICAgICAgICAgICAgZXZlbnQua2luZCA9PT0gJ291dHB1dC1qc29uLW5vdC1yZXF1ZXN0ZWQnXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0b3BBZnRlciA9PT0gJ2ludHJvc3BlY3Rpb24nXG4gICAgICAgICAgICAgICAgPyBzdG9wQWZ0ZXJSZWFjaGVkKHN0YXRlKVxuICAgICAgICAgICAgICAgIDogey4uLnN0YXRlLCBwaGFzZTogJ2NyZWF0aW5nLXNlc3Npb24nfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ291dHB1dC1qc29uLWZhaWxlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRFcnJvcihzdGF0ZSwgJ291dHB1dC1qc29uJywgZXZlbnQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdjcmVhdGluZy1zZXNzaW9uJykge1xuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ3Nlc3Npb24tY3JlYXRlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgc2Vzc2lvbklkOiBldmVudC5zZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgcGhhc2U6ICdhd2FpdGluZy1hdXRob3JpemF0aW9uJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdmYXN0LXBhdGgtY29tcGxldGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQ6IGV2ZW50LnNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICBhdXRoVG9rZW46IGV2ZW50LnRva2VuLFxuICAgICAgICAgICAgICAgIHBoYXNlOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5leHBsYW5hdGlvbiAhPT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAncHJlZmxpZ2h0LWNoZWNraW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnYXdhaXRpbmctZXhwbGFuYXRpb24nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ2F1dGgtbm90LW5lZWRlZCcpIHtcbiAgICAgICAgICAgIC8vIE5vIHNlcnZlci1zaWRlIGZsb3cgYXQgYWxsIFx1MjAxNCBwcm9jZWVkIHN0cmFpZ2h0IHRvIHRlcm1pbmFsLlxuICAgICAgICAgICAgcmV0dXJuIHN0b3BBZnRlclJlYWNoZWQoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnc2Vzc2lvbi1mYWlsZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0RXJyb3Ioc3RhdGUsICdjcmVhdGluZy1zZXNzaW9uJywgZXZlbnQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdhd2FpdGluZy1hdXRob3JpemF0aW9uJykge1xuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ2F1dGgtY29uZmlybWVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBhdXRoVG9rZW46IGV2ZW50LnRva2VuLFxuICAgICAgICAgICAgICAgIHBoYXNlOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5leHBsYW5hdGlvbiAhPT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAncHJlZmxpZ2h0LWNoZWNraW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnYXdhaXRpbmctZXhwbGFuYXRpb24nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ2F1dGgtZmFpbGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHNldEVycm9yKHN0YXRlLCAnYXdhaXRpbmctYXV0aG9yaXphdGlvbicsIGV2ZW50LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnYXdhaXRpbmctZXhwbGFuYXRpb24nKSB7XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnZXhwbGFuYXRpb24tZ2l2ZW4nKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIGV4cGxhbmF0aW9uOiBldmVudC52YWx1ZSxcbiAgICAgICAgICAgICAgICBwaGFzZTogJ3ByZWZsaWdodC1jaGVja2luZycsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdwcmVmbGlnaHQtY2hlY2tpbmcnKSB7XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnY2hlY2staW50cm9zcGVjdGlvbi1oaXQnKSB7XG4gICAgICAgICAgICAvLyBSZXVzZWQgcmV2aXNpb246IHNraXAgaW5nZXN0IGVudGlyZWx5LiBQb3N0LWludHJvc3BlY3Rpb24gc3RhdGVcbiAgICAgICAgICAgIC8vIGRlcGVuZHMgb24gd2hldGhlciB0aGUgc2VydmVyIHJldHVybmVkIGEgam9iIGlkLlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICByZXZpc2lvbklkOiBldmVudC5yZXZpc2lvbklkLFxuICAgICAgICAgICAgICAgIHNhbXBsZXNBbHJlYWR5SW5nZXN0ZWQ6IGV2ZW50LnNhbXBsZXNFeGlzdCxcbiAgICAgICAgICAgICAgICB0YWJsZXNOZWVkaW5nU2FtcGxlczogZXZlbnQudGFibGVzTmVlZGluZ1NhbXBsZXMsXG4gICAgICAgICAgICAgICAgcHJlZmxpZ2h0SGl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIHBvc3RJbnRyb3NwZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLnBvc3RJbnRyb3NwZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBqb2JJZDogZXZlbnQucG9zdEludHJvc3BlY3Rpb25Kb2JJZCxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wb3N0SW50cm9zcGVjdGlvbkpvYklkID09PSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnZG9uZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdxdWV1ZWQnLFxuICAgICAgICAgICAgICAgICAgICByZXVzZWQ6IGV2ZW50LnBvc3RJbnRyb3NwZWN0aW9uSm9iSWQgPT09IG51bGwsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwaGFzZTogZXZlbnQuc2FtcGxlc0V4aXN0XG4gICAgICAgICAgICAgICAgICAgID8gJ2F3YWl0aW5nLXBvc3Qtc2FtcGxpbmcnXG4gICAgICAgICAgICAgICAgICAgIDogJ3NhbXBsaW5nLW1hc2stcmVzb2x2aW5nJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdjaGVjay1pbnRyb3NwZWN0aW9uLW1pc3MnKSB7XG4gICAgICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBwaGFzZTogJ2luZ2VzdGluZy1pbnRyb3NwZWN0aW9uJ307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdpbmdlc3QtZmFpbGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHNldEVycm9yKHN0YXRlLCAncHJlZmxpZ2h0LWNoZWNraW5nJywgZXZlbnQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdpbmdlc3RpbmctaW50cm9zcGVjdGlvbicpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdpbnRyb3NwZWN0aW9uLWluZ2VzdGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICByZXZpc2lvbklkOiBldmVudC5yZXZpc2lvbklkLFxuICAgICAgICAgICAgICAgIHNhbXBsZXNBbHJlYWR5SW5nZXN0ZWQ6IGV2ZW50LnNhbXBsZXNFeGlzdCxcbiAgICAgICAgICAgICAgICB0YWJsZXNOZWVkaW5nU2FtcGxlczogZXZlbnQudGFibGVzTmVlZGluZ1NhbXBsZXMsXG4gICAgICAgICAgICAgICAgcG9zdEludHJvc3BlY3Rpb246IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUucG9zdEludHJvc3BlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGpvYklkOiBldmVudC5wb3N0SW50cm9zcGVjdGlvbkpvYklkLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnBvc3RJbnRyb3NwZWN0aW9uSm9iSWQgPT09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdkb25lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3F1ZXVlZCcsXG4gICAgICAgICAgICAgICAgICAgIHJldXNlZDogZXZlbnQucG9zdEludHJvc3BlY3Rpb25Kb2JJZCA9PT0gbnVsbCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBoYXNlOiBldmVudC5zYW1wbGVzRXhpc3RcbiAgICAgICAgICAgICAgICAgICAgPyAnYXdhaXRpbmctcG9zdC1zYW1wbGluZydcbiAgICAgICAgICAgICAgICAgICAgOiAnc2FtcGxpbmctbWFzay1yZXNvbHZpbmcnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ2luZ2VzdC1mYWlsZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0RXJyb3Ioc3RhdGUsICdpbmdlc3RpbmctaW50cm9zcGVjdGlvbicsIGV2ZW50LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnc2FtcGxpbmctbWFzay1yZXNvbHZpbmcnKSB7XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnbWFzay1sb2FkZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIHNhbXBsaW5nOiB7Li4uc3RhdGUuc2FtcGxpbmcsIG1hc2s6IGV2ZW50Lm1hc2t9LFxuICAgICAgICAgICAgICAgIHBoYXNlOiAnc2FtcGxpbmcnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ21hc2stZmV0Y2gtZmFpbGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHNldEVycm9yKHN0YXRlLCAnc2FtcGxpbmctbWFzay1yZXNvbHZpbmcnLCBldmVudC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2FzY2FkZTogcG9zdC1pbnRyb3NwZWN0aW9uIGZhaWxlZCB3aGlsZSB3ZSdyZSBzdGlsbCB3YWl0aW5nIG9uXG4gICAgICAgIC8vIGl0IGZvciB0aGUgbWFzayAodGhlIHNpZGUtY2hhbm5lbCBoYW5kbGVyIGFib3ZlIGFscmVhZHkgdXBkYXRlZFxuICAgICAgICAvLyBzdWItc3RhdHVzOyBwcmltYXJ5IHBoYXNlIG5lZWRzIHRvIGZhaWwgdG9vKS4gVGhlIGludGVycHJldGVyXG4gICAgICAgIC8vIHJlLWRpc3BhdGNoZXMgYXMgYG1hc2stZmV0Y2gtZmFpbGVkYCBhZnRlciBvYnNlcnZpbmcgdGhlIHN1YnN0YXRlXG4gICAgICAgIC8vIGNoYW5nZS5cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5waGFzZSA9PT0gJ3NhbXBsaW5nJykge1xuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ3NhbXBsZS10YWJsZS15aWVsZGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBzYW1wbGluZzoge1xuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5zYW1wbGluZyxcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGVkOiBbLi4uc3RhdGUuc2FtcGxpbmcuY29sbGVjdGVkLCBldmVudC5ldmVudF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdzYW1wbGluZy1jb21wbGV0ZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuc3RvcEFmdGVyID09PSAnc2FtcGxpbmcnXG4gICAgICAgICAgICAgICAgPyBzdG9wQWZ0ZXJSZWFjaGVkKHN0YXRlKVxuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLnNhbXBsaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbFRhYmxlczogc3RhdGUuc2FtcGxpbmcuY29sbGVjdGVkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIHBoYXNlOiAndXBsb2FkaW5nLXNhbXBsZXMnLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ3NhbXBsaW5nLWZhaWxlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRFcnJvcihzdGF0ZSwgJ3NhbXBsaW5nJywgZXZlbnQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICd1cGxvYWRpbmctc2FtcGxlcycpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdzYW1wbGUtY2h1bmstdXBsb2FkZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIHNhbXBsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLnNhbXBsaW5nLFxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRlZFRhYmxlczpcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNhbXBsaW5nLnVwbG9hZGVkVGFibGVzICsgZXZlbnQuY2h1bmtTaXplLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGV2ZW50LmtpbmQgPT09ICdzYW1wbGVzLXVwbG9hZC1jb21wbGV0ZWQnIHx8XG4gICAgICAgICAgICBldmVudC5raW5kID09PSAnc2FtcGxlcy11cGxvYWQtbm90LW5lZWRlZCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBwaGFzZTogJ2F3YWl0aW5nLXBvc3Qtc2FtcGxpbmcnfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ3NhbXBsZXMtdXBsb2FkLWZhaWxlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRFcnJvcihzdGF0ZSwgJ3VwbG9hZGluZy1zYW1wbGVzJywgZXZlbnQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdhd2FpdGluZy1wb3N0LXNhbXBsaW5nJykge1xuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ3Bvc3Qtc2FtcGxpbmctY29tcGxldGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgcGhhc2U6ICdkb25lJ307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdwb3N0LXNhbXBsaW5nLWZhaWxlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRFcnJvcihzdGF0ZSwgJ2F3YWl0aW5nLXBvc3Qtc2FtcGxpbmcnLCBldmVudC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIC8vIFRlcm1pbmFsIHBoYXNlcyBpZ25vcmUgZnVydGhlciBldmVudHMuXG4gICAgcmV0dXJuIHN0YXRlO1xufTtcblxuLy8gUmVzZXRzIHN1Yi1zdGF0dXMgZmllbGRzIHRvIGZyZXNoIFx1MjAxNCB1c2VmdWwgd2hlbiB0aGUgcmVkdWNlciBpcyBjb21wb3NlZFxuLy8gd2l0aCBhIGhpZ2hlci1sZXZlbCBkcml2ZXIgdGhhdCB3YW50cyBhIGNsZWFuIHNsYXRlICh0ZXN0cyB1c2UgdGhpcykuXG5leHBvcnQgY29uc3QgY2xlYW5Qb3N0SW50cm9zcGVjdGlvbiA9IChzdGF0ZTogVEZsb3dTdGF0ZSk6IFRGbG93U3RhdGUgPT4gKHtcbiAgICAuLi5zdGF0ZSxcbiAgICBwb3N0SW50cm9zcGVjdGlvbjogaW5pdGlhbFBvc3RJbnRyb3NwZWN0aW9uLFxufSk7XG4iLCAiaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB0eXBlIHtURmxvd1N0YXRlfSBmcm9tICcuL3N0YXRlcy5tanMnO1xuXG4vLyBQdXJlIHByb2plY3Rpb246IFRGbG93U3RhdGUgXHUyMTkyIHBhcnRpYWwgc3RvcmUgZGVsdGEgdGhlIGludGVycHJldGVyIGFwcGxpZXNcbi8vIGluc2lkZSBydW5JbkFjdGlvbi4gRmllbGQgbmFtZXMgbWF0Y2ggdGhlIGV4aXN0aW5nIHN0b3JlIHNoYXBlIGV4YWN0bHkgc29cbi8vIHRoZSBJbmsgVUkga2VlcHMgcmVhZGluZyB0aGUgc2FtZSBwYXRocyBpdCBhbHdheXMgZGlkLlxuXG50eXBlIFRTdG9yZVN0ZXBzID0gVFN0b3JlWydzdGVwcyddO1xuXG4vLyBDb21wdXRlIGEgZGVlcC1pc2ggcGF0Y2ggb2YgdGhlIHN0b3JlIGZpZWxkcyB0aGUgZmxvdyBkcml2ZXMuIFNpYmxpbmdcbi8vIGZpZWxkcyB0aGUgaGVscGVycyB0aGVtc2VsdmVzIG1hbmFnZSAoZS5nLiBTU0ggY29ubmVjdGlvbi5zdGF0ZSBkdXJpbmdcbi8vIHBhc3N3b3JkIHJldHJ5KSBhcmUgZGVsaWJlcmF0ZWx5IG9taXR0ZWQgXHUyMDE0IHRob3NlIHN0YXkgb3duZWQgYnkgdGhlaXJcbi8vIGhlbHBlci5cbmV4cG9ydCBjb25zdCBwcm9qZWN0U3RvcmVGcm9tRmxvdyA9IChcbiAgICBzdGF0ZTogVEZsb3dTdGF0ZSxcbik6IHtcbiAgICByZWFkb25seSBpbmdlc3Rpb246IHtcbiAgICAgICAgcmVhZG9ubHkgaW50cm9zcGVjdGlvbjogT21pdDxcbiAgICAgICAgICAgIFRTdG9yZVN0ZXBzWydpbmdlc3Rpb24nXVsnaW50cm9zcGVjdGlvbiddLFxuICAgICAgICAgICAgJ2dhdGUnXG4gICAgICAgID47XG4gICAgICAgIHJlYWRvbmx5IHBvc3RJbnRyb3NwZWN0aW9uOiBUU3RvcmVTdGVwc1snaW5nZXN0aW9uJ11bJ3Bvc3RJbnRyb3NwZWN0aW9uJ107XG4gICAgfTtcbiAgICByZWFkb25seSBzYW1wbGluZzogUGljazxcbiAgICAgICAgVFN0b3JlU3RlcHNbJ3NhbXBsaW5nJ10sXG4gICAgICAgICdzdGF0ZScgfCAncmV1c2VkJyB8ICdlcnJvcidcbiAgICA+O1xuICAgIHJlYWRvbmx5IHVzZXJFeHBsYW5hdGlvbjogVFN0b3JlU3RlcHNbJ3VzZXJFeHBsYW5hdGlvbiddO1xuICAgIHJlYWRvbmx5IGFjY291bnQ6IHtcbiAgICAgICAgcmVhZG9ubHkgc3RhdGU6ICdlcnJvcic7XG4gICAgICAgIHJlYWRvbmx5IGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICAgIH0gfCBudWxsO1xufSA9PiB7XG4gICAgY29uc3QgaW50cm9zcGVjdGlvblN0ZXBTdGF0ZTogVFN0b3JlU3RlcHNbJ2luZ2VzdGlvbiddWydpbnRyb3NwZWN0aW9uJ11bJ3N0YXRlJ10gPVxuICAgICAgICBzdGF0ZS5lcnJvclBoYXNlID09PSAnaW5nZXN0aW5nLWludHJvc3BlY3Rpb24nIHx8XG4gICAgICAgIHN0YXRlLmVycm9yUGhhc2UgPT09ICdwcmVmbGlnaHQtY2hlY2tpbmcnXG4gICAgICAgICAgICA/ICdlcnJvcidcbiAgICAgICAgICAgIDogc3RhdGUucHJlZmxpZ2h0SGl0XG4gICAgICAgICAgICAgID8gJ3NraXBwZWQnXG4gICAgICAgICAgICAgIDogc3RhdGUucmV2aXNpb25JZCAhPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gJ2RvbmUnXG4gICAgICAgICAgICAgICAgOiBzdGF0ZS5waGFzZSA9PT0gJ2luZ2VzdGluZy1pbnRyb3NwZWN0aW9uJ1xuICAgICAgICAgICAgICAgICAgPyAndXBsb2FkaW5nJ1xuICAgICAgICAgICAgICAgICAgOiAnaWRsZSc7XG5cbiAgICBjb25zdCBzYW1wbGluZ1N0YXRlOiBUU3RvcmVTdGVwc1snc2FtcGxpbmcnXVsnc3RhdGUnXSA9XG4gICAgICAgIHN0YXRlLmVycm9yUGhhc2UgPT09ICdzYW1wbGluZycgfHxcbiAgICAgICAgc3RhdGUuZXJyb3JQaGFzZSA9PT0gJ3NhbXBsaW5nLW1hc2stcmVzb2x2aW5nJ1xuICAgICAgICAgICAgPyAnZXJyb3InXG4gICAgICAgICAgICA6IHN0YXRlLnNhbXBsZXNBbHJlYWR5SW5nZXN0ZWRcbiAgICAgICAgICAgICAgPyAnc2tpcHBlZCdcbiAgICAgICAgICAgICAgOiBzdGF0ZS5waGFzZSA9PT0gJ3NhbXBsaW5nJ1xuICAgICAgICAgICAgICAgID8gJ2ZldGNoaW5nJ1xuICAgICAgICAgICAgICAgIDogc3RhdGUucGhhc2UgPT09ICd1cGxvYWRpbmctc2FtcGxlcycgfHxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucGhhc2UgPT09ICdhd2FpdGluZy1wb3N0LXNhbXBsaW5nJyB8fFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5waGFzZSA9PT0gJ2RvbmUnXG4gICAgICAgICAgICAgICAgICA/ICdkb25lJ1xuICAgICAgICAgICAgICAgICAgOiAnaWRsZSc7XG5cbiAgICBjb25zdCBwaGFzZXNBZnRlckV4cGxhbmF0aW9uID0gbmV3IFNldChbXG4gICAgICAgICdwcmVmbGlnaHQtY2hlY2tpbmcnLFxuICAgICAgICAnaW5nZXN0aW5nLWludHJvc3BlY3Rpb24nLFxuICAgICAgICAnc2FtcGxpbmctbWFzay1yZXNvbHZpbmcnLFxuICAgICAgICAnc2FtcGxpbmcnLFxuICAgICAgICAndXBsb2FkaW5nLXNhbXBsZXMnLFxuICAgICAgICAnYXdhaXRpbmctcG9zdC1zYW1wbGluZycsXG4gICAgICAgICdkb25lJyxcbiAgICBdKTtcbiAgICBjb25zdCB1c2VyRXhwbGFuYXRpb25TdGF0ZTogVFN0b3JlU3RlcHNbJ3VzZXJFeHBsYW5hdGlvbiddWydzdGF0ZSddID1cbiAgICAgICAgc3RhdGUucGhhc2UgPT09ICdhd2FpdGluZy1leHBsYW5hdGlvbidcbiAgICAgICAgICAgID8gJ3Byb21wdGluZydcbiAgICAgICAgICAgIDogc3RhdGUuZXhwbGFuYXRpb24gIT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICBwaGFzZXNBZnRlckV4cGxhbmF0aW9uLmhhcyhzdGF0ZS5waGFzZSlcbiAgICAgICAgICAgICAgPyAnZG9uZSdcbiAgICAgICAgICAgICAgOiAnaWRsZSc7XG5cbiAgICBjb25zdCBhY2NvdW50RGVsdGE6IHtcbiAgICAgICAgcmVhZG9ubHkgc3RhdGU6ICdlcnJvcic7XG4gICAgICAgIHJlYWRvbmx5IGVycm9yOiBzdHJpbmcgfCBudWxsO1xuICAgIH0gfCBudWxsID1cbiAgICAgICAgc3RhdGUuZXJyb3JQaGFzZSA9PT0gJ2NyZWF0aW5nLXNlc3Npb24nIHx8XG4gICAgICAgIHN0YXRlLmVycm9yUGhhc2UgPT09ICdhd2FpdGluZy1hdXRob3JpemF0aW9uJ1xuICAgICAgICAgICAgPyB7c3RhdGU6ICdlcnJvcicsIGVycm9yOiBzdGF0ZS5lcnJvck1lc3NhZ2V9XG4gICAgICAgICAgICA6IG51bGw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBpbmdlc3Rpb246IHtcbiAgICAgICAgICAgIGludHJvc3BlY3Rpb246IHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogaW50cm9zcGVjdGlvblN0ZXBTdGF0ZSxcbiAgICAgICAgICAgICAgICBlcnJvcjpcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3JQaGFzZSA9PT0gJ2luZ2VzdGluZy1pbnRyb3NwZWN0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvclBoYXNlID09PSAncHJlZmxpZ2h0LWNoZWNraW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBzdGF0ZS5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwb3N0SW50cm9zcGVjdGlvbjoge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZS5wb3N0SW50cm9zcGVjdGlvbi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBlcnJvcjogc3RhdGUucG9zdEludHJvc3BlY3Rpb24uZXJyb3IsXG4gICAgICAgICAgICAgICAgcmV1c2VkOiBzdGF0ZS5wb3N0SW50cm9zcGVjdGlvbi5yZXVzZWQsXG4gICAgICAgICAgICAgICAgc3RhZ2U6IHN0YXRlLnBvc3RJbnRyb3NwZWN0aW9uLnN0YWdlLFxuICAgICAgICAgICAgICAgIHRva2Vuc0luOiBzdGF0ZS5wb3N0SW50cm9zcGVjdGlvbi50b2tlbnNJbixcbiAgICAgICAgICAgICAgICB0b2tlbnNPdXQ6IHN0YXRlLnBvc3RJbnRyb3NwZWN0aW9uLnRva2Vuc091dCxcbiAgICAgICAgICAgICAgICBjb2x1bW5zRG9uZTogc3RhdGUucG9zdEludHJvc3BlY3Rpb24uY29sdW1uc0RvbmUsXG4gICAgICAgICAgICAgICAgY29sdW1uc1RvdGFsOiBzdGF0ZS5wb3N0SW50cm9zcGVjdGlvbi5jb2x1bW5zVG90YWwsXG4gICAgICAgICAgICAgICAgam9iSWQ6IHN0YXRlLnBvc3RJbnRyb3NwZWN0aW9uLmpvYklkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2FtcGxpbmc6IHtcbiAgICAgICAgICAgIHN0YXRlOiBzYW1wbGluZ1N0YXRlLFxuICAgICAgICAgICAgcmV1c2VkOiBzdGF0ZS5zYW1wbGVzQWxyZWFkeUluZ2VzdGVkLFxuICAgICAgICAgICAgZXJyb3I6XG4gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3JQaGFzZSA9PT0gJ3NhbXBsaW5nJyB8fFxuICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yUGhhc2UgPT09ICdzYW1wbGluZy1tYXNrLXJlc29sdmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBzdGF0ZS5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB1c2VyRXhwbGFuYXRpb246IHtcbiAgICAgICAgICAgIHN0YXRlOiB1c2VyRXhwbGFuYXRpb25TdGF0ZSxcbiAgICAgICAgICAgIHZhbHVlOiBzdGF0ZS5leHBsYW5hdGlvbixcbiAgICAgICAgfSxcbiAgICAgICAgYWNjb3VudDogYWNjb3VudERlbHRhLFxuICAgIH07XG59O1xuIiwgImltcG9ydCB7ZXhpc3RzU3luY30gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgdHlwZSB7VFJQQ0NsaWVudH0gZnJvbSAnQHRycGMvY2xpZW50JztcbmltcG9ydCB0eXBlIHtUQXBwUm91dGVyLCBUR2F0ZUVycm9yRGF0YX0gZnJvbSAnQGRiY3R4L2NvcmUnO1xuaW1wb3J0IHtUUlBDQ2xpZW50RXJyb3J9IGZyb20gJ0B0cnBjL2NsaWVudCc7XG5pbXBvcnQge2NvbXB1dGVTY2hlbWFIYXNofSBmcm9tICdAZGJjdHgvY29tbW9uL3NjaGVtYS1oYXNoJztcbmltcG9ydCB7cnVuSW5BY3Rpb259IGZyb20gJ21vYngnO1xuaW1wb3J0IHtjb25uZWN0U1NIfSBmcm9tICcuLi9hcHAvc3NoLm1qcyc7XG5pbXBvcnQge2Nvbm5lY3REQiwgdHlwZSBUREJDb25uZWN0aW9ufSBmcm9tICcuLi9hcHAvZGIubWpzJztcbmltcG9ydCB7YXNzZW1ibGVEYXRhYmFzZX0gZnJvbSAnLi4vYXBwL2Fzc2VtYmxlLm1qcyc7XG5pbXBvcnQge1xuICAgIGxvYWRJbnRyb3NwZWN0aW9uRnJvbUZpbGUsXG4gICAgcG9wdWxhdGVJbnRyb3NwZWN0aW9uQ291bnRzLFxufSBmcm9tICcuLi9hcHAvbG9hZC1pbnRyb3NwZWN0aW9uLm1qcyc7XG5pbXBvcnQge1xuICAgIGNyZWF0ZVNlc3Npb24sXG4gICAgd2FpdEZvckF1dGhvcml6YXRpb24sXG4gICAgY29ubmVjdEFjY291bnQsXG4gICAgY2hlY2tHYXRlLFxuICAgIGNoZWNrQmlsbGluZyxcbn0gZnJvbSAnLi4vYXBwL3Nlc3Npb24ubWpzJztcbmltcG9ydCB7YnVpbGRTZXNzaW9uVVJMfSBmcm9tICcuLi9hcHAvb3Blbi11cmwubWpzJztcbmltcG9ydCB7cmVhZENvbmZpZywgZmx1c2hDb25maWd9IGZyb20gJy4uL2FwcC9jb25maWcubWpzJztcbmltcG9ydCB7XG4gICAgcnVuU2FtcGxpbmcsXG4gICAgcHJlcGFyZU91dHB1dERpcixcbiAgICBwZXJzaXN0VGFibGVTYW1wbGVzVG9EaXIsXG4gICAgbG9hZFNlbnNpdGl2ZU1hc2ssXG4gICAgdHlwZSBUU2Vuc2l0aXZlTWFzayxcbn0gZnJvbSAnLi4vYXBwL3NhbXBsZS5tanMnO1xuaW1wb3J0IHtmZXRjaFB1YmxpY1BsYW5uZXJTdGF0aXN0aWNzfSBmcm9tICcuLi9kYi9pbmRleC5tanMnO1xuaW1wb3J0IHtjcmVhdGVBdXRoZW50aWNhdGVkVFJQQ0NsaWVudH0gZnJvbSAnLi4vbGliL3RycGMubWpzJztcbmltcG9ydCB7XG4gICAgc3RyZWFtUG9zdEludHJvc3BlY3Rpb24sXG4gICAgZGlzcGF0Y2hBbmRTdHJlYW1Qb3N0U2FtcGxpbmcsXG59IGZyb20gJy4uL2FwcC90YWlsLm1qcyc7XG5pbXBvcnQge2F0b21pY1dyaXRlRmlsZSwgcmVjb3ZlckF0b21pY1dyaXRlfSBmcm9tICcuLi9saWIvYXRvbWljLXdyaXRlLm1qcyc7XG5pbXBvcnQge0RCQ1RYX0RFVn0gZnJvbSAnLi4vbGliL2Vudi5tanMnO1xuaW1wb3J0IHtsb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci5tanMnO1xuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB0eXBlIHtURmxvd0V2ZW50fSBmcm9tICcuL2V2ZW50cy5tanMnO1xuaW1wb3J0IHR5cGUge1RGbG93U3RhdGV9IGZyb20gJy4vc3RhdGVzLm1qcyc7XG5pbXBvcnQge3doZW59IGZyb20gJ21vYngnO1xuXG4vLyBFZmZlY3QgaGFuZGxlcyB0aGUgaW50ZXJwcmV0ZXIgYWNjdW11bGF0ZXMgYXMgdGhlIGZsb3cgYWR2YW5jZXMuIE5vdFxuLy8gcGFydCBvZiBURmxvd1N0YXRlIGJlY2F1c2UgdGhleSBhcmVuJ3QgcHVyZSBkYXRhIFx1MjAxNCBQcm9taXNlIGhhbmRsZXMsIERCXG4vLyBwb29scywgY2xlYW51cCBjYWxsYmFja3MuIFRoZSBkaXNwYXRjaGVyIGNsb3NlcyBvdmVyIHRoaXMgY29udGV4dC5cbmV4cG9ydCB0eXBlIFRJbnRlcnByZXRlckNvbnRleHQgPSB7XG4gICAgY2xlYW51cFNTSDogKCgpID0+IHZvaWQpIHwgbnVsbDtcbiAgICBkYjogVERCQ29ubmVjdGlvbiB8IG51bGw7XG4gICAgaW50cm9zcGVjdGlvbjogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBhc3NlbWJsZURhdGFiYXNlPj4gfCBudWxsO1xuICAgIGF1dGhlZDogVFJQQ0NsaWVudDxUQXBwUm91dGVyPiB8IG51bGw7XG4gICAgcG9zdEludHJvc3BlY3Rpb25Qb2xsOiBQcm9taXNlPHZvaWQ+IHwgbnVsbDtcbiAgICBleHBsYW5hdGlvbjogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsQ29udGV4dCA9ICgpOiBUSW50ZXJwcmV0ZXJDb250ZXh0ID0+ICh7XG4gICAgY2xlYW51cFNTSDogbnVsbCxcbiAgICBkYjogbnVsbCxcbiAgICBpbnRyb3NwZWN0aW9uOiBudWxsLFxuICAgIGF1dGhlZDogbnVsbCxcbiAgICBwb3N0SW50cm9zcGVjdGlvblBvbGw6IG51bGwsXG4gICAgZXhwbGFuYXRpb246IG51bGwsXG59KTtcblxudHlwZSBURGlzcGF0Y2ggPSAoZXZlbnQ6IFRGbG93RXZlbnQpID0+IHZvaWQ7XG5cbmNvbnN0IGVyck1zZyA9IChlOiB1bmtub3duKTogc3RyaW5nID0+XG4gICAgZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuXG4vLyBQdWxscyB0aGUgc3RydWN0dXJlZCBgZGJjdHhgIHBheWxvYWQgdFJQQydzIGVycm9yRm9ybWF0dGVyIHByb21vdGVzIG9udG9cbi8vIHNoYXBlLmRhdGEuIFJldHVybnMgbnVsbCBmb3Igbm9uLXRSUEMgZXJyb3JzIG9yIG5vbi1nYXRlIGVycm9ycyBzbyBjYWxsZXJzXG4vLyBjYW4gZmFsbCBiYWNrIHRvIHRoZSBwcm9zZSBgbWVzc2FnZWAuXG5jb25zdCBleHRyYWN0R2F0ZUVycm9yID0gKGU6IHVua25vd24pOiBUR2F0ZUVycm9yRGF0YSB8IG51bGwgPT4ge1xuICAgIGlmICghKGUgaW5zdGFuY2VvZiBUUlBDQ2xpZW50RXJyb3IpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gZS5kYXRhIGFzIHtkYmN0eD86IFRHYXRlRXJyb3JEYXRhIHwgbnVsbH0gfCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGRhdGE/LmRiY3R4ID8/IG51bGw7XG59O1xuXG4vLyBEaXNwYXRjaGVzIGFuIGluZ2VzdC1mYWlsZWQgZXZlbnQgYW5kLCBpZiB0aGUgZXJyb3IgY2FycmllcyBzdHJ1Y3R1cmVkXG4vLyBnYXRlIGRhdGEsIHBhcmtzIGl0IG9uIHRoZSBzdG9yZSBzbyB0aGUgVUkgY2FuIHJlbmRlciBhIHRhaWxvcmVkIGxheW91dFxuLy8gaW5zdGVhZCBvZiB0aGUgcHJvc2UgYG1lc3NhZ2VgLiBUaGUgZ2F0ZSBmaWVsZCBzaXRzIG91dHNpZGUgdGhlIGZsb3dcbi8vIHByb2plY3Rpb24gb24gcHVycG9zZSBcdTIwMTQgcHJvamVjdGlvbiBvbmx5IG93bnMgYHN0YXRlYC9gZXJyb3JgLlxuY29uc3QgZGlzcGF0Y2hJbmdlc3RGYWlsZWQgPSAoXG4gICAgZXJyOiB1bmtub3duLFxuICAgIGRpc3BhdGNoOiBURGlzcGF0Y2gsXG4gICAgc3RvcmU6IFRTdG9yZSxcbik6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGdhdGUgPSBleHRyYWN0R2F0ZUVycm9yKGVycik7XG4gICAgaWYgKGdhdGUgIT09IG51bGwpIHtcbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLmludHJvc3BlY3Rpb24uZ2F0ZSA9IGdhdGU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkaXNwYXRjaCh7a2luZDogJ2luZ2VzdC1mYWlsZWQnLCBlcnJvcjogZXJyTXNnKGVycil9KTtcbn07XG5cbi8vIFNpbmdsZSBwaGFzZSB0cmFuc2l0aW9uIGhhbmRsZXIuIENhbGxlZCBvbmNlIHBlciAocHJldiBcdTIxOTIgY3VycikgcGhhc2Vcbi8vIGNoYW5nZSB3aXRoIHByZXYgIT09IGN1cnIuIEVhY2ggYnJhbmNoIGZpcmVzIHRoZSBzaWRlIGVmZmVjdHMgZm9yIHRoZVxuLy8gbmV3IHBoYXNlIGFuZCBkaXNwYXRjaGVzIGV2ZW50KHMpIGJhY2sgd2hlbiBhc3luYyB3b3JrIHJlc29sdmVzLlxuZXhwb3J0IGNvbnN0IGRyaXZlU2lkZSA9IGFzeW5jIChcbiAgICBwcmV2OiBURmxvd1N0YXRlIHwgbnVsbCxcbiAgICBjdXJyOiBURmxvd1N0YXRlLFxuICAgIHN0b3JlOiBUU3RvcmUsXG4gICAgY3R4OiBUSW50ZXJwcmV0ZXJDb250ZXh0LFxuICAgIGRpc3BhdGNoOiBURGlzcGF0Y2gsXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAocHJldiAhPT0gbnVsbCAmJiBwcmV2LnBoYXNlID09PSBjdXJyLnBoYXNlKSB7XG4gICAgICAgIC8vIFNpZGUtY2hhbm5lbCBzdWItc3RhdHVzIHVwZGF0ZXMgZG9uJ3QgdHJpZ2dlciBlZmZlY3RzLlxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGN1cnIucGhhc2UgPT09ICdjb25uZWN0aW5nLXNzaCcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGN0eC5jbGVhbnVwU1NIID0gKGF3YWl0IGNvbm5lY3RTU0goc3RvcmUpKSA/PyBudWxsO1xuICAgICAgICAgICAgLy8gY29ubmVjdFNTSCBtYXkgc2V0IGVuYWJsZWQ9ZmFsc2Ugd2hlbiBubyBzc2ggZmxhZyB3YXMgcGFzc2VkLlxuICAgICAgICAgICAgaWYgKCFzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ3NzaC1ub3QtbmVlZGVkJ30pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHdoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHM6IHN0cmluZyA9IHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uc3RhdGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHMgPT09ICdjb25uZWN0ZWQnIHx8IHMgPT09ICdlcnJvcic7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsU3RhdGU6IHN0cmluZyA9IHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uc3RhdGU7XG4gICAgICAgICAgICBpZiAoZmluYWxTdGF0ZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogJ3NzaC1mYWlsZWQnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5lcnJvciA/PyAnc3NoIGZhaWxlZCcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdzc2gtY29ubmVjdGVkJ30pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnc3NoLWZhaWxlZCcsIGVycm9yOiBlcnJNc2coZXJyKX0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY3Vyci5waGFzZSA9PT0gJ2Nvbm5lY3RpbmctZGInKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjdHguZGIgPSAoYXdhaXQgY29ubmVjdERCKHN0b3JlKSkgPz8gbnVsbDtcbiAgICAgICAgICAgIGF3YWl0IHdoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHM6IHN0cmluZyA9IHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5zdGF0ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcyA9PT0gJ2Nvbm5lY3RlZCcgfHwgcyA9PT0gJ2Vycm9yJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZGJTdGF0ZTogc3RyaW5nID0gc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnN0YXRlO1xuICAgICAgICAgICAgaWYgKGRiU3RhdGUgPT09ICdlcnJvcicgfHwgY3R4LmRiID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICBraW5kOiAnZGItZmFpbGVkJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5lcnJvciA/PyAnZGIgZmFpbGVkJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ2RiLWNvbm5lY3RlZCd9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ2RiLWZhaWxlZCcsIGVycm9yOiBlcnJNc2coZXJyKX0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY3Vyci5waGFzZSA9PT0gJ2ludHJvc3BlY3RpbmcnKSB7XG4gICAgICAgIGlmIChjdHguZGIgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICBraW5kOiAnaW50cm9zcGVjdGlvbi1mYWlsZWQnLFxuICAgICAgICAgICAgICAgIGVycm9yOiAnbm8gZGIgY29ubmVjdGlvbicsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdXNlSnNvblBhdGggPSBzdG9yZS5vdXRwdXRPcHRpb25zLnVzZUludHJvc3BlY3Rpb25Kc29uUGF0aDtcbiAgICAgICAgICAgIGlmICh1c2VKc29uUGF0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5zdGF0ZSA9ICdmZXRjaGluZyc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9hZGVkID0gYXdhaXQgbG9hZEludHJvc3BlY3Rpb25Gcm9tRmlsZShcbiAgICAgICAgICAgICAgICAgICAgdXNlSnNvblBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGN0eC5kYi5wb29sLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCFsb2FkZWQub2spIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5zdGF0ZSA9ICdlcnJvcic7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbnRyb3NwZWN0aW9uLmVycm9yID0gbG9hZGVkLmVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kOiAnaW50cm9zcGVjdGlvbi1mYWlsZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGxvYWRlZC5lcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwb3B1bGF0ZUludHJvc3BlY3Rpb25Db3VudHMoc3RvcmUsIGxvYWRlZC5yZXN1bHQpO1xuICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5zdGF0ZSA9ICdkb25lJztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjdHguaW50cm9zcGVjdGlvbiA9IGxvYWRlZC5yZXN1bHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN0eC5pbnRyb3NwZWN0aW9uID0gYXdhaXQgYXNzZW1ibGVEYXRhYmFzZShjdHguZGIucG9vbCwgc3RvcmUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoREJDVFhfREVWKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge2RhdGFiYXNlSW50cm9zcGVjdGlvblNjaGVtYX0gPVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBpbXBvcnQoJ0BkYmN0eC9jb3JlL3NjaGVtYXMvaW50cm9zcGVjdGlvbicpO1xuICAgICAgICAgICAgICAgIGRhdGFiYXNlSW50cm9zcGVjdGlvblNjaGVtYS5wYXJzZShjdHguaW50cm9zcGVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ2ludHJvc3BlY3Rpb24tbG9hZGVkJ30pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnaW50cm9zcGVjdGlvbi1mYWlsZWQnLCBlcnJvcjogZXJyTXNnKGVycil9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGN1cnIucGhhc2UgPT09ICdvdXRwdXQtanNvbicpIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0UGF0aCA9IGN1cnIub3V0cHV0SlNPTlBhdGg7XG4gICAgICAgIGlmIChvdXRwdXRQYXRoID09PSBudWxsIHx8IGN0eC5pbnRyb3NwZWN0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ291dHB1dC1qc29uLW5vdC1yZXF1ZXN0ZWQnfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHJlY292ZXJBdG9taWNXcml0ZShvdXRwdXRQYXRoKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBleGlzdHNTeW5jKG91dHB1dFBhdGgpICYmXG4gICAgICAgICAgICAgICAgIXN0b3JlLm91dHB1dE9wdGlvbnMuYWxsb3dJbnRyb3NwZWN0aW9uSnNvbk92ZXJ3cml0ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5vdXRwdXRKc29uLnN0YXRlID0gJ3Byb21wdGluZy1vdmVyd3JpdGUnO1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5vdXRwdXRKc29uLnBhdGggPSBvdXRwdXRQYXRoO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGF3YWl0IHdoZW4oKCkgPT4gc3RvcmUuc3RlcHMub3V0cHV0SnNvbi5jb25maXJtZWQgIT09IG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghc3RvcmUuc3RlcHMub3V0cHV0SnNvbi5jb25maXJtZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdvdXRwdXQtanNvbi1za2lwcGVkJ30pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLm91dHB1dEpzb24uc3RhdGUgPSAnd3JpdGluZyc7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMub3V0cHV0SnNvbi5wYXRoID0gb3V0cHV0UGF0aDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgYXRvbWljV3JpdGVGaWxlKFxuICAgICAgICAgICAgICAgIG91dHB1dFBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY3R4LmludHJvc3BlY3Rpb24sIG51bGwsIDIpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5vdXRwdXRKc29uLnN0YXRlID0gJ2RvbmUnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ291dHB1dC1qc29uLXdyaXR0ZW4nfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLm91dHB1dEpzb24uc3RhdGUgPSAnZXJyb3InO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLm91dHB1dEpzb24uZXJyb3IgPSBlcnJNc2coZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdvdXRwdXQtanNvbi1mYWlsZWQnLCBlcnJvcjogZXJyTXNnKGVycil9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGN1cnIucGhhc2UgPT09ICdjcmVhdGluZy1zZXNzaW9uJykge1xuICAgICAgICBpZiAoY3R4LmRiID09PSBudWxsIHx8IGN0eC5pbnRyb3NwZWN0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAga2luZDogJ3Nlc3Npb24tZmFpbGVkJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogJ25vIGRiIG9yIGludHJvc3BlY3Rpb24gaW4gY29udGV4dCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgcmVhZENvbmZpZygpO1xuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gYXdhaXQgY3JlYXRlU2Vzc2lvbihcbiAgICAgICAgICAgICAgICBjdHguZGIucG9vbCxcbiAgICAgICAgICAgICAgICBjdHguaW50cm9zcGVjdGlvbixcbiAgICAgICAgICAgICAgICBzdG9yZSxcbiAgICAgICAgICAgICAgICBjb25maWcudG9rZW4gPz8gbnVsbCxcbiAgICAgICAgICAgICAgICBjb25maWcuZGV2aWNlX2lkLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gUmUtYXV0aCBmYXN0LXBhdGg6IGlmIGV4aXN0aW5nIGNvbmZpZyB0b2tlbiBpcyBzdGlsbCB2YWxpZCxcbiAgICAgICAgICAgIC8vIHNraXAgdGhlIGJyb3dzZXItYXV0aCBoYW5kc2hha2UgZW50aXJlbHkuXG4gICAgICAgICAgICBpZiAoY29uZmlnLnRva2VuKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29ubmVjdEFjY291bnQoY29uZmlnLnRva2VuLCBzdG9yZSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNoZWNrQmlsbGluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy50b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkU2Vzc2lvblVSTChzZXNzaW9uSWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbkNvbnRpbnVlID0gYXdhaXQgY2hlY2tHYXRlKGNvbmZpZy50b2tlbiwgc3RvcmUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbkNvbnRpbnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ2F1dGgtbm90LW5lZWRlZCd9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBTaW5nbGUgZGlzcGF0Y2ggY2FycnlpbmcgYm90aCBzZXNzaW9uSWQgYW5kIHRva2VuLlxuICAgICAgICAgICAgICAgICAgICAvLyBBdm9pZHMgdHJhbnNpdGlvbmluZyB0aHJvdWdoIGF3YWl0aW5nLWF1dGhvcml6YXRpb24sXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIHdvdWxkIHJhY2UtZmlyZSB3YWl0Rm9yQXV0aG9yaXphdGlvbiBhbmQgc3RvbXBcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFscmVhZHktJ2Nvbm5lY3RlZCcgYWNjb3VudCBzdGF0ZSBiYWNrIHRvICd3YWl0aW5nJy5cbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICAgICAga2luZDogJ2Zhc3QtcGF0aC1jb21wbGV0ZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IGNvbmZpZy50b2tlbixcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyIGluc3RhbmNlb2YgVFJQQ0NsaWVudEVycm9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyLmRhdGE/LmNvZGUgPT09ICdVTkFVVEhPUklaRUQnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLmRhdGE/LmNvZGUgPT09ICdOT1RfRk9VTkQnKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGZsdXNoQ29uZmlnKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnc2Vzc2lvbi1jcmVhdGVkJywgc2Vzc2lvbklkfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdzZXNzaW9uLWZhaWxlZCcsIGVycm9yOiBlcnJNc2coZXJyKX0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY3Vyci5waGFzZSA9PT0gJ2F3YWl0aW5nLWF1dGhvcml6YXRpb24nKSB7XG4gICAgICAgIGlmIChjdXJyLnNlc3Npb25JZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdhdXRoLWZhaWxlZCcsIGVycm9yOiAnbm8gc2Vzc2lvbklkIGluIHN0YXRlJ30pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB3YWl0Rm9yQXV0aG9yaXphdGlvbihjdXJyLnNlc3Npb25JZCwgc3RvcmUpO1xuICAgICAgICAgICAgY29uc3QgZnJlc2hUb2tlbiA9IChhd2FpdCByZWFkQ29uZmlnKCkpLnRva2VuO1xuICAgICAgICAgICAgaWYgKCFmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdhdXRoLWZhaWxlZCcsIGVycm9yOiAnbm8gdG9rZW4gYWZ0ZXIgYXV0aCd9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBjaGVja0JpbGxpbmcoXG4gICAgICAgICAgICAgICAgZnJlc2hUb2tlbixcbiAgICAgICAgICAgICAgICBidWlsZFNlc3Npb25VUkwoY3Vyci5zZXNzaW9uSWQpLFxuICAgICAgICAgICAgICAgIHN0b3JlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbkNvbnRpbnVlID0gYXdhaXQgY2hlY2tHYXRlKGZyZXNoVG9rZW4sIHN0b3JlKTtcbiAgICAgICAgICAgIGlmICghY2FuQ29udGludWUpIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ2F1dGgtZmFpbGVkJywgZXJyb3I6ICdnYXRlIGJsb2NrZWQnfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdhdXRoLWNvbmZpcm1lZCcsIHRva2VuOiBmcmVzaFRva2VufSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdhdXRoLWZhaWxlZCcsIGVycm9yOiBlcnJNc2coZXJyKX0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY3Vyci5waGFzZSA9PT0gJ2F3YWl0aW5nLWV4cGxhbmF0aW9uJykge1xuICAgICAgICBpZiAoY3Vyci5leHBsYW5hdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY3R4LmV4cGxhbmF0aW9uID0gY3Vyci5leHBsYW5hdGlvbjtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy51c2VyRXhwbGFuYXRpb24uc3RhdGUgPSAnZG9uZSc7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMudXNlckV4cGxhbmF0aW9uLnZhbHVlID0gY3Vyci5leHBsYW5hdGlvbjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIGtpbmQ6ICdleHBsYW5hdGlvbi1naXZlbicsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGN1cnIuZXhwbGFuYXRpb24sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy51c2VyRXhwbGFuYXRpb24uc3RhdGUgPSAncHJvbXB0aW5nJztcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHdoZW4oKCkgPT4gc3RvcmUuc3RlcHMudXNlckV4cGxhbmF0aW9uLnN0YXRlID09PSAnZG9uZScpO1xuICAgICAgICBjb25zdCB2ID0gc3RvcmUuc3RlcHMudXNlckV4cGxhbmF0aW9uLnZhbHVlID8/ICcnO1xuICAgICAgICBjdHguZXhwbGFuYXRpb24gPSB2O1xuICAgICAgICBkaXNwYXRjaCh7a2luZDogJ2V4cGxhbmF0aW9uLWdpdmVuJywgdmFsdWU6IHZ9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjdXJyLnBoYXNlID09PSAncHJlZmxpZ2h0LWNoZWNraW5nJykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjdHguZGIgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGN0eC5pbnRyb3NwZWN0aW9uID09PSBudWxsIHx8XG4gICAgICAgICAgICBjdXJyLmF1dGhUb2tlbiA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgY3Vyci5zZXNzaW9uSWQgPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAga2luZDogJ2luZ2VzdC1mYWlsZWQnLFxuICAgICAgICAgICAgICAgIGVycm9yOiAnY29udGV4dCBub3QgcmVhZHkgZm9yIHByZWZsaWdodCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY3R4LmF1dGhlZCA9IGNyZWF0ZUF1dGhlbnRpY2F0ZWRUUlBDQ2xpZW50KCgpID0+XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGN1cnIuYXV0aFRva2VuISksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgZXhwbGFuYXRpb24gPSBjdHguZXhwbGFuYXRpb24gPz8gY3Vyci5leHBsYW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChleHBsYW5hdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGN0eC5pbnRyb3NwZWN0aW9uLnVzZXJFeHBsYW5hdGlvbiA9IGV4cGxhbmF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGxhbm5lclN0YXRzID0gYXdhaXQgZmV0Y2hQdWJsaWNQbGFubmVyU3RhdGlzdGljcyhcbiAgICAgICAgICAgICAgICBjdHguZGIucG9vbCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBpbnRyb3NwZWN0aW9uSGFzaCA9IGNvbXB1dGVTY2hlbWFIYXNoKGN0eC5pbnRyb3NwZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrSGl0ID1cbiAgICAgICAgICAgICAgICBhd2FpdCBjdHguYXV0aGVkLnJldmlzaW9ucy5jaGVja0ludHJvc3BlY3Rpb24ubXV0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbklkOiBjdXJyLnNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICAgICAgaW50cm9zcGVjdGlvbkhhc2gsXG4gICAgICAgICAgICAgICAgICAgIHN5c3RlbUlkZW50aWZpZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguaW50cm9zcGVjdGlvbi5pZGVudGlmaWVyLnN5c3RlbV9pZGVudGlmaWVyLFxuICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZU9JRDogU3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmludHJvc3BlY3Rpb24uaWRlbnRpZmllci5kYXRhYmFzZV9vaWQsXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHBsYW5uZXJTdGF0aXN0aWNzOiB7cmVsYXRpb25zOiBwbGFubmVyU3RhdHN9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNoZWNrSGl0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5sYW5kaW5nVVJMID0gY2hlY2tIaXQubGFuZGluZ1VSTDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBraWNrUG9zdEludHJvc3BlY3Rpb25Qb2xsKFxuICAgICAgICAgICAgICAgICAgICBjdHgsXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrSGl0LnBvc3RJbnRyb3NwZWN0aW9uSm9iSWQsXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICBraW5kOiAnY2hlY2staW50cm9zcGVjdGlvbi1oaXQnLFxuICAgICAgICAgICAgICAgICAgICByZXZpc2lvbklkOiBjaGVja0hpdC5yZXZpc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICBzYW1wbGVzRXhpc3Q6IGNoZWNrSGl0LnNhbXBsZXNFeGlzdCxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVzTmVlZGluZ1NhbXBsZXM6IGNoZWNrSGl0LnRhYmxlc05lZWRpbmdTYW1wbGVzLFxuICAgICAgICAgICAgICAgICAgICBwb3N0SW50cm9zcGVjdGlvbkpvYklkOiBjaGVja0hpdC5wb3N0SW50cm9zcGVjdGlvbkpvYklkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnY2hlY2staW50cm9zcGVjdGlvbi1taXNzJ30pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoSW5nZXN0RmFpbGVkKGVyciwgZGlzcGF0Y2gsIHN0b3JlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGN1cnIucGhhc2UgPT09ICdpbmdlc3RpbmctaW50cm9zcGVjdGlvbicpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY3R4LmF1dGhlZCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgY3R4LmludHJvc3BlY3Rpb24gPT09IG51bGwgfHxcbiAgICAgICAgICAgIGN1cnIuc2Vzc2lvbklkID09PSBudWxsIHx8XG4gICAgICAgICAgICBjdHguZGIgPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAga2luZDogJ2luZ2VzdC1mYWlsZWQnLFxuICAgICAgICAgICAgICAgIGVycm9yOiAnY29udGV4dCBub3QgcmVhZHkgZm9yIGluZ2VzdCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5pbnRyb3NwZWN0aW9uLnN0YXRlID0gJ3VwbG9hZGluZyc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHBsYW5uZXJTdGF0cyA9IGF3YWl0IGZldGNoUHVibGljUGxhbm5lclN0YXRpc3RpY3MoXG4gICAgICAgICAgICAgICAgY3R4LmRiLnBvb2wsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaW5nZXN0ID1cbiAgICAgICAgICAgICAgICBhd2FpdCBjdHguYXV0aGVkLnJldmlzaW9ucy5pbmdlc3RJbnRyb3NwZWN0aW9uLm11dGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25JZDogY3Vyci5zZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICAgIGludHJvc3BlY3Rpb246IGN0eC5pbnRyb3NwZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBwbGFubmVyU3RhdGlzdGljczoge3JlbGF0aW9uczogcGxhbm5lclN0YXRzfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5sYW5kaW5nVVJMID0gaW5nZXN0LmxhbmRpbmdVUkw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGtpY2tQb3N0SW50cm9zcGVjdGlvblBvbGwoXG4gICAgICAgICAgICAgICAgY3R4LFxuICAgICAgICAgICAgICAgIGluZ2VzdC5wb3N0SW50cm9zcGVjdGlvbkpvYklkLFxuICAgICAgICAgICAgICAgIHN0b3JlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICBraW5kOiAnaW50cm9zcGVjdGlvbi1pbmdlc3RlZCcsXG4gICAgICAgICAgICAgICAgcmV2aXNpb25JZDogaW5nZXN0LnJldmlzaW9uSWQsXG4gICAgICAgICAgICAgICAgc2FtcGxlc0V4aXN0OiBpbmdlc3Quc2FtcGxlc0V4aXN0LFxuICAgICAgICAgICAgICAgIHRhYmxlc05lZWRpbmdTYW1wbGVzOiBpbmdlc3QudGFibGVzTmVlZGluZ1NhbXBsZXMsXG4gICAgICAgICAgICAgICAgcG9zdEludHJvc3BlY3Rpb25Kb2JJZDogaW5nZXN0LnBvc3RJbnRyb3NwZWN0aW9uSm9iSWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBkaXNwYXRjaEluZ2VzdEZhaWxlZChlcnIsIGRpc3BhdGNoLCBzdG9yZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjdXJyLnBoYXNlID09PSAnc2FtcGxpbmctbWFzay1yZXNvbHZpbmcnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGN0eC5hdXRoZWQgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGN1cnIucmV2aXNpb25JZCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgY3R4LmludHJvc3BlY3Rpb24gPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAga2luZDogJ21hc2stZmV0Y2gtZmFpbGVkJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogJ2NvbnRleHQgbm90IHJlYWR5IGZvciBtYXNrIHJlc29sdXRpb24nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVNYXNrUGF0aCA9IGN1cnIuZmlsZU1hc2tQYXRoO1xuICAgICAgICAgICAgaWYgKGZpbGVNYXNrUGF0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hc2sgPSBhd2FpdCBsb2FkU2Vuc2l0aXZlTWFzayhmaWxlTWFza1BhdGgpO1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnbWFzay1sb2FkZWQnLCBtYXNrfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2VydmVyLW1hbmFnZWQgbWFzazogd2FpdCBmb3IgcG9zdC1pbnRyb3NwZWN0aW9uIHRvIGZpbmlzaC5cbiAgICAgICAgICAgIGlmIChjdHgucG9zdEludHJvc3BlY3Rpb25Qb2xsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgY3R4LnBvc3RJbnRyb3NwZWN0aW9uUG9sbDtcbiAgICAgICAgICAgICAgICBjdHgucG9zdEludHJvc3BlY3Rpb25Qb2xsID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFmdGVyIHRoZSBhd2FpdCwgc3ViLXN0YXR1cyByZWZsZWN0cyBwb3N0LWludHJvc3BlY3Rpb24gc3RhdGUuXG4gICAgICAgICAgICAvLyBUaGUgcmVkdWNlcidzIHByb2plY3Rpb24gd29uJ3QgaGF2ZSByZS1maXJlZCBkcml2ZVNpZGUgb24gaXRzIG93blxuICAgICAgICAgICAgLy8gKHN1Yi1zdGF0dXMgb25seSkuIEluc3BlY3Qgc3RvcmUgZGlyZWN0bHkuXG4gICAgICAgICAgICBpZiAoc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLnN0YXRlID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICBraW5kOiAnbWFzay1mZXRjaC1mYWlsZWQnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogJ3Bvc3QtaW50cm9zcGVjdGlvbiBlbnJpY2htZW50IGZhaWxlZCBcdTIwMTQgc2Vuc2l0aXZlIG1hc2sgdW5hdmFpbGFibGU7IHJlZnVzaW5nIHRvIHNhbXBsZScsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4LmF1dGhlZC5yZXZpc2lvbnMuZ2V0U2Vuc2l0aXZlTWFzay5xdWVyeSh7XG4gICAgICAgICAgICAgICAgcmV2aXNpb25JZDogY3Vyci5yZXZpc2lvbklkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXJlcy5yZWFkeSkge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogJ21hc2stZmV0Y2gtZmFpbGVkJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICdzZXJ2ZXIgcmVwb3J0ZWQgc2Vuc2l0aXZlIG1hc2sgbm90IHJlYWR5IGFmdGVyIHBvc3QtaW50cm9zcGVjdGlvbiBjb21wbGV0aW9uOyByZWZ1c2luZyB0byBzYW1wbGUnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnbWFzay1sb2FkZWQnLCBtYXNrOiByZXMubWFza30pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnbWFzay1mZXRjaC1mYWlsZWQnLCBlcnJvcjogZXJyTXNnKGVycil9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGN1cnIucGhhc2UgPT09ICdzYW1wbGluZycpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY3R4LmRiID09PSBudWxsIHx8XG4gICAgICAgICAgICBjdHguaW50cm9zcGVjdGlvbiA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgY3Vyci5zYW1wbGluZy5tYXNrID09PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIGtpbmQ6ICdzYW1wbGluZy1mYWlsZWQnLFxuICAgICAgICAgICAgICAgIGVycm9yOiAnY29udGV4dCBub3QgcmVhZHkgZm9yIHNhbXBsaW5nJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBtYXNrOiBUU2Vuc2l0aXZlTWFzayA9IGN1cnIuc2FtcGxpbmcubWFzaztcbiAgICAgICAgICAgIGNvbnN0IHNhbXBsZUZpbGVJbmRleDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgICAgICAgICAgY29uc3Qgb3V0cHV0RGlyID0gY3Vyci5vdXRwdXRTYW1wbGVzRGlyO1xuICAgICAgICAgICAgaWYgKG91dHB1dERpciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWR5ID0gYXdhaXQgcHJlcGFyZU91dHB1dERpcihcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICAgICAgICAgICAgICBzdG9yZS5vdXRwdXRPcHRpb25zLmFsbG93U2FtcGxlT3ZlcndyaXRlLFxuICAgICAgICAgICAgICAgICAgICBzdG9yZSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICghcmVhZHkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICAgICAga2luZDogJ3NhbXBsaW5nLWZhaWxlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogJ291dHB1dCBkaXIgbm90IHJlYWR5JyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBGaWx0ZXIgdGhlIHBlci10YWJsZSBzYW1wbGluZyBsb29wIHRvIG9ubHkgdGhlIHRhYmxlcyB0aGVcbiAgICAgICAgICAgIC8vIHNlcnZlciBmbGFnZ2VkIGFzIG5lZWRpbmcgZnJlc2ggc2FtcGxlcy4gTnVsbCA9IHByZS1oYW5kc2hha2VcbiAgICAgICAgICAgIC8vIHNlbnRpbmVsOyB0cmVhdCBhcyBcImFsbCB0YWJsZXNcIiBmb3Igc2FmZXR5LlxuICAgICAgICAgICAgY29uc3QgdGFibGVGaWx0ZXI6IFJlYWRvbmx5U2V0PHN0cmluZz4gfCB1bmRlZmluZWQgPVxuICAgICAgICAgICAgICAgIGN1cnIudGFibGVzTmVlZGluZ1NhbXBsZXMgPT09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgOiBuZXcgU2V0KGN1cnIudGFibGVzTmVlZGluZ1NhbXBsZXMpO1xuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBldmVudCBvZiBydW5TYW1wbGluZyhcbiAgICAgICAgICAgICAgICBjdHguZGIucG9vbCxcbiAgICAgICAgICAgICAgICBjdHguaW50cm9zcGVjdGlvbixcbiAgICAgICAgICAgICAgICBzdG9yZSxcbiAgICAgICAgICAgICAgICBtYXNrLFxuICAgICAgICAgICAgICAgIHRhYmxlRmlsdGVyLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGlmIChvdXRwdXREaXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcGVyc2lzdFRhYmxlU2FtcGxlc1RvRGlyKFxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVGaWxlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnc2FtcGxlLXRhYmxlLXlpZWxkZWQnLCBldmVudH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdzYW1wbGluZy1jb21wbGV0ZWQnfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdzYW1wbGluZy1mYWlsZWQnLCBlcnJvcjogZXJyTXNnKGVycil9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGN1cnIucGhhc2UgPT09ICd1cGxvYWRpbmctc2FtcGxlcycpIHtcbiAgICAgICAgaWYgKGN0eC5hdXRoZWQgPT09IG51bGwgfHwgY3Vyci5yZXZpc2lvbklkID09PSBudWxsKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAga2luZDogJ3NhbXBsZXMtdXBsb2FkLWZhaWxlZCcsXG4gICAgICAgICAgICAgICAgZXJyb3I6ICdjb250ZXh0IG5vdCByZWFkeSBmb3IgdXBsb2FkJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzYW1wbGVzID0gY3Vyci5zYW1wbGluZy5jb2xsZWN0ZWQ7XG4gICAgICAgICAgICBpZiAoc2FtcGxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5zYW1wbGVzLnN0YXRlID0gJ2RvbmUnO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnc2FtcGxlcy11cGxvYWQtbm90LW5lZWRlZCd9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzYW1wbGVJbnB1dHMgPSBzYW1wbGVzLm1hcCgoZXZlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgdGFibGVOYW1lOiBldmVudC50YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgY29sdW1uczogT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhldmVudC5zYW1wbGVzLmNvbHVtbnMpLm1hcCgoW2NvbCwgc10pID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFsuLi5zLnZhbHVlc10sXG4gICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBjb25zdCBDSFVOS19TSVpFID0gMjU7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnNhbXBsZXMuc3RhdGUgPSAndXBsb2FkaW5nJztcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24uc2FtcGxlcy50b3RhbFRhYmxlcyA9IHNhbXBsZUlucHV0cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnNhbXBsZXMudXBsb2FkZWRUYWJsZXMgPSAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBjaHVua3MgPSBBcnJheS5mcm9tKFxuICAgICAgICAgICAgICAgIHtsZW5ndGg6IE1hdGguY2VpbChzYW1wbGVJbnB1dHMubGVuZ3RoIC8gQ0hVTktfU0laRSl9LFxuICAgICAgICAgICAgICAgIChfLCBpKSA9PlxuICAgICAgICAgICAgICAgICAgICBzYW1wbGVJbnB1dHMuc2xpY2UoaSAqIENIVU5LX1NJWkUsIChpICsgMSkgKiBDSFVOS19TSVpFKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNodW5rcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rID0gY2h1bmtzW2ldO1xuICAgICAgICAgICAgICAgIGF3YWl0IGN0eC5hdXRoZWQucmV2aXNpb25zLmluZ2VzdFNhbXBsZXMubXV0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgcmV2aXNpb25JZDogY3Vyci5yZXZpc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICBzYW1wbGVzOiBjaHVuayxcbiAgICAgICAgICAgICAgICAgICAgY2h1bmtJbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgY2h1bmtUb3RhbDogY2h1bmtzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5zYW1wbGVzLnVwbG9hZGVkVGFibGVzICs9XG4gICAgICAgICAgICAgICAgICAgICAgICBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICBraW5kOiAnc2FtcGxlLWNodW5rLXVwbG9hZGVkJyxcbiAgICAgICAgICAgICAgICAgICAgY2h1bmtTaXplOiBjaHVuay5sZW5ndGgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnNhbXBsZXMuc3RhdGUgPSAnZG9uZSc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgIGBpbmdlc3RlZCAke3NhbXBsZUlucHV0cy5sZW5ndGh9IHNhbXBsZSB0YWJsZXMgaW4gJHtjaHVua3MubGVuZ3RofSBjaHVuayhzKWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdzYW1wbGVzLXVwbG9hZC1jb21wbGV0ZWQnfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdzYW1wbGVzLXVwbG9hZC1mYWlsZWQnLCBlcnJvcjogZXJyTXNnKGVycil9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGN1cnIucGhhc2UgPT09ICdhd2FpdGluZy1wb3N0LXNhbXBsaW5nJykge1xuICAgICAgICBpZiAoY3R4LmF1dGhlZCA9PT0gbnVsbCB8fCBjdXJyLnJldmlzaW9uSWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICBraW5kOiAncG9zdC1zYW1wbGluZy1mYWlsZWQnLFxuICAgICAgICAgICAgICAgIGVycm9yOiAnY29udGV4dCBub3QgcmVhZHknLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEZpcnN0IGVuc3VyZSBwb3N0LWludHJvc3BlY3Rpb24gZmluaXNoZWQgKGZpbGUtbWFzayBmYXN0IHBhdGggbWF5XG4gICAgICAgICAgICAvLyBoYXZlIHNraXBwZWQgdGhlIGV4cGxpY2l0IGF3YWl0IGVhcmxpZXIpLlxuICAgICAgICAgICAgaWYgKGN0eC5wb3N0SW50cm9zcGVjdGlvblBvbGwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjdHgucG9zdEludHJvc3BlY3Rpb25Qb2xsO1xuICAgICAgICAgICAgICAgIGN0eC5wb3N0SW50cm9zcGVjdGlvblBvbGwgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi5zdGF0ZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RTYW1wbGluZy5zdGF0ZSA9ICdlcnJvcic7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0U2FtcGxpbmcuZXJyb3IgPVxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NraXBwZWQgXHUyMDE0IHBvc3QtaW50cm9zcGVjdGlvbiBlbnJpY2htZW50IGZhaWxlZCc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICBraW5kOiAncG9zdC1zYW1wbGluZy1mYWlsZWQnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogJ3Bvc3QtaW50cm9zcGVjdGlvbiBlbnJpY2htZW50IGZhaWxlZCcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgZGlzcGF0Y2hBbmRTdHJlYW1Qb3N0U2FtcGxpbmcoXG4gICAgICAgICAgICAgICAgY3R4LmF1dGhlZCxcbiAgICAgICAgICAgICAgICBjdXJyLnJldmlzaW9uSWQsXG4gICAgICAgICAgICAgICAgc3RvcmUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0U2FtcGxpbmcuc3RhdGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdwb3N0LXNhbXBsaW5nLWZhaWxlZCcsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RTYW1wbGluZy5lcnJvciA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3Bvc3Qtc2FtcGxpbmcgZmFpbGVkJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ3Bvc3Qtc2FtcGxpbmctY29tcGxldGVkJ30pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAncG9zdC1zYW1wbGluZy1mYWlsZWQnLCBlcnJvcjogZXJyTXNnKGVycil9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGN1cnIucGhhc2UgPT09ICdkb25lJyB8fCBjdXJyLnBoYXNlID09PSAnZXJyb3InKSB7XG4gICAgICAgIGNsZWFudXAoY3R4KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbn07XG5cbmNvbnN0IGtpY2tQb3N0SW50cm9zcGVjdGlvblBvbGwgPSAoXG4gICAgY3R4OiBUSW50ZXJwcmV0ZXJDb250ZXh0LFxuICAgIGpvYklkOiBzdHJpbmcgfCBudWxsLFxuICAgIHN0b3JlOiBUU3RvcmUsXG4pOiB2b2lkID0+IHtcbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIGlmIChqb2JJZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLnN0YXRlID0gJ2RvbmUnO1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLnJldXNlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24uam9iSWQgPSBqb2JJZDtcbiAgICAgICAgICAgIGlmIChzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24uc3RhdGUgPT09ICdpZGxlJykge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi5zdGF0ZSA9ICdxdWV1ZWQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGpvYklkID09PSBudWxsIHx8IGN0eC5hdXRoZWQgPT09IG51bGwpIHtcbiAgICAgICAgY3R4LnBvc3RJbnRyb3NwZWN0aW9uUG9sbCA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGN0eC5wb3N0SW50cm9zcGVjdGlvblBvbGwgPSBzdHJlYW1Qb3N0SW50cm9zcGVjdGlvbihcbiAgICAgICAgY3R4LmF1dGhlZCxcbiAgICAgICAgam9iSWQsXG4gICAgICAgIHN0b3JlLFxuICAgICkudGhlbihcbiAgICAgICAgKCkgPT4ge30sXG4gICAgICAgICgpID0+IHt9LFxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYW51cCA9IChjdHg6IFRJbnRlcnByZXRlckNvbnRleHQpOiB2b2lkID0+IHtcbiAgICBpZiAoY3R4LmRiICE9PSBudWxsKSB7XG4gICAgICAgIGN0eC5kYi5jbGVhbnVwKCk7XG4gICAgICAgIGN0eC5kYiA9IG51bGw7XG4gICAgfVxuICAgIGlmIChjdHguY2xlYW51cFNTSCAhPT0gbnVsbCkge1xuICAgICAgICBjdHguY2xlYW51cFNTSCgpO1xuICAgICAgICBjdHguY2xlYW51cFNTSCA9IG51bGw7XG4gICAgfVxufTtcbiIsICJpbXBvcnQge2NyZWF0ZUhhc2h9IGZyb20gJ25vZGU6Y3J5cHRvJztcblxuLy8gU3RydWN0dXJhbCBpbnB1dCBjb250cmFjdCDigJQgdGhlIHN1YnNldCBvZiBURGF0YWJhc2VJbnRyb3NwZWN0aW9uIHRoZSBoYXNoXG4vLyByZWFkcy4gRGVmaW5lZCBoZXJlIHNvIEBkYmN0eC9jb21tb24gc3RheXMgZnJlZSBvZiBAZGJjdHgvY29yZSBkZXBzIGFuZCB0aGVcbi8vIGZ1bGwgaW50cm9zcGVjdGlvbiB0eXBlIHJlbWFpbnMgYXNzaWduYWJsZSB2aWEgVFMgc3RydWN0dXJhbCB0eXBpbmcuXG5leHBvcnQgdHlwZSBUSGFzaGFibGVJbnRyb3NwZWN0aW9uID0ge1xuICAgIHJlYWRvbmx5IHJlbGF0aW9uczogUmVjb3JkPFxuICAgICAgICBzdHJpbmcsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcbiAgICAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZXM6IFJlY29yZDxcbiAgICAgICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZWFkb25seSBkYXRhX3R5cGU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHkga2luZDogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICByZWFkb25seSBpc19udWxsYWJsZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHkgZ2VuZXJhdGVkX3N0b3JhZ2U/OiAnc3RvcmVkJyB8ICd2aXJ0dWFsJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA+O1xuICAgICAgICB9XG4gICAgPjtcbiAgICByZWFkb25seSBlbnVtczogUmVjb3JkPHN0cmluZywge3JlYWRvbmx5IHZhbHVlczogcmVhZG9ubHkgc3RyaW5nW119Pjtcbn07XG5cbmNvbnN0IGNhbm9uaWNhbEpTT04gPSAodjogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gICAgaWYgKHYgPT09IG51bGwgfHwgdHlwZW9mIHYgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgICAgcmV0dXJuICdbJyArIHYubWFwKGNhbm9uaWNhbEpTT04pLmpvaW4oJywnKSArICddJztcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnNvcnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICAneycgK1xuICAgICAgICBrZXlzXG4gICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgIChrKSA9PlxuICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShrKSArXG4gICAgICAgICAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICAgICAgICAgIGNhbm9uaWNhbEpTT04oKHYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tdKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5qb2luKCcsJykgK1xuICAgICAgICAnfSdcbiAgICApO1xufTtcblxudHlwZSBUU2NoZW1hU2hhcGUgPSB7XG4gICAgcmVhZG9ubHkgcmVsYXRpb25zOiBSZWNvcmQ8XG4gICAgICAgIHN0cmluZyxcbiAgICAgICAge1xuICAgICAgICAgICAgcmVhZG9ubHkga2luZDogc3RyaW5nO1xuICAgICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlczogUmVjb3JkPFxuICAgICAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5IGRhdGFfdHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICByZWFkb25seSBraW5kOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5IGlzX251bGxhYmxlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICByZWFkb25seSBnZW5lcmF0ZWRfc3RvcmFnZT86ICdzdG9yZWQnIHwgJ3ZpcnR1YWwnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID47XG4gICAgICAgIH1cbiAgICA+O1xuICAgIHJlYWRvbmx5IGVudW1zOiBSZWNvcmQ8c3RyaW5nLCB7cmVhZG9ubHkgdmFsdWVzOiByZWFkb25seSBzdHJpbmdbXX0+O1xufTtcblxuY29uc3QgcHJvamVjdFNjaGVtYVNoYXBlID0gKGludHJvOiBUSGFzaGFibGVJbnRyb3NwZWN0aW9uKTogVFNjaGVtYVNoYXBlID0+ICh7XG4gICAgcmVsYXRpb25zOiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGludHJvLnJlbGF0aW9ucykubWFwKChbbmFtZSwgcl0pID0+IFtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAga2luZDogci5raW5kLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoci5hdHRyaWJ1dGVzKS5tYXAoKFthbiwgYV0pID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdHlwZTogYS5kYXRhX3R5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZDogYS5raW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX251bGxhYmxlOiBhLmlzX251bGxhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihhLmtpbmQgPT09ICdnZW5lcmF0ZWQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5nZW5lcmF0ZWRfc3RvcmFnZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ge2dlbmVyYXRlZF9zdG9yYWdlOiBhLmdlbmVyYXRlZF9zdG9yYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICBdKSxcbiAgICApLFxuICAgIGVudW1zOiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGludHJvLmVudW1zKS5tYXAoKFtuLCBlXSkgPT4gW1xuICAgICAgICAgICAgbixcbiAgICAgICAgICAgIHt2YWx1ZXM6IFsuLi5lLnZhbHVlc119LFxuICAgICAgICBdKSxcbiAgICApLFxufSk7XG5cbmV4cG9ydCBjb25zdCBjb21wdXRlU2NoZW1hSGFzaCA9IChpbnRybzogVEhhc2hhYmxlSW50cm9zcGVjdGlvbik6IHN0cmluZyA9PlxuICAgIGNyZWF0ZUhhc2goJ3NoYTI1NicpXG4gICAgICAgIC51cGRhdGUoY2Fub25pY2FsSlNPTihwcm9qZWN0U2NoZW1hU2hhcGUoaW50cm8pKSlcbiAgICAgICAgLmRpZ2VzdCgnaGV4Jyk7XG4iLCAiaW1wb3J0IHtyZWFkRmlsZVN5bmMsIGV4aXN0c1N5bmN9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtob21lZGlyLCB1c2VySW5mb30gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQge2pvaW59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgbmV0IGZyb20gJ25vZGU6bmV0JztcbmltcG9ydCBzc2gyIGZyb20gJ3NzaDInO1xuaW1wb3J0IHR5cGUge0F1dGhIYW5kbGVyTWlkZGxld2FyZSwgQ29ubmVjdENvbmZpZ30gZnJvbSAnc3NoMic7XG5cbmNvbnN0IHtDbGllbnQsIHV0aWxzfSA9IHNzaDI7XG5pbXBvcnQgU1NIQ29uZmlnIGZyb20gJ3NzaC1jb25maWcnO1xuaW1wb3J0IHtydW5JbkFjdGlvbiwgd2hlbn0gZnJvbSAnbW9ieCc7XG5pbXBvcnQge3Njb3BlfSBmcm9tICdzY29wZS11dGlsaXRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi9zdG9yZS5tanMnO1xuXG5jb25zdCBTU0hfS0VZX09SREVSID0gW1xuICAgICdpZF9lZDI1NTE5X3NrJyxcbiAgICAnaWRfZWQyNTUxOScsXG4gICAgJ2lkX2VjZHNhX3NrJyxcbiAgICAnaWRfZWNkc2EnLFxuICAgICdpZF9yc2EnLFxuICAgICdpZF9kc2EnLFxuXSBhcyBjb25zdDtcblxuY29uc3QgcmVzb2x2ZVNTSENvbmZpZyA9IChzdG9yZTogVFN0b3JlKSA9PiB7XG4gICAgY29uc3Qgc3NoRGlyID0gam9pbihob21lZGlyKCksICcuc3NoJyk7XG4gICAgY29uc3QgY29uZmlnUGF0aCA9IGpvaW4oc3NoRGlyLCAnY29uZmlnJyk7XG5cbiAgICByZXR1cm4gc2NvcGUoe1xuICAgICAgICBob3N0OiBzdG9yZS5jb25maWcuc3NoSG9zdCEsXG4gICAgICAgIHBvcnQ6IDIyLFxuICAgICAgICB1c2VybmFtZTogdXNlckluZm8oKS51c2VybmFtZSxcbiAgICAgICAgcHJpdmF0ZUtleVBhdGg6IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgfSlcbiAgICAgICAgLmxldCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWV4aXN0c1N5bmMoY29uZmlnUGF0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb25maWdUZXh0ID0gcmVhZEZpbGVTeW5jKGNvbmZpZ1BhdGgsICd1dGYtOCcpO1xuICAgICAgICAgICAgY29uc3QgY29tcHV0ZWQgPSBTU0hDb25maWcucGFyc2UoY29uZmlnVGV4dCkuY29tcHV0ZShjb25maWcuaG9zdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlkZW50aXR5RmlsZSA9IGNvbXB1dGVkWydJZGVudGl0eUZpbGUnXVxuICAgICAgICAgICAgICAgID8gKEFycmF5LmlzQXJyYXkoY29tcHV0ZWRbJ0lkZW50aXR5RmlsZSddKVxuICAgICAgICAgICAgICAgICAgICAgID8gY29tcHV0ZWRbJ0lkZW50aXR5RmlsZSddWzBdXG4gICAgICAgICAgICAgICAgICAgICAgOiBjb21wdXRlZFsnSWRlbnRpdHlGaWxlJ11cbiAgICAgICAgICAgICAgICAgICkucmVwbGFjZSgvXn4vLCBob21lZGlyKCkpXG4gICAgICAgICAgICAgICAgOiBjb25maWcucHJpdmF0ZUtleVBhdGg7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaG9zdDogKGNvbXB1dGVkWydIb3N0TmFtZSddIGFzIHN0cmluZykgPz8gY29uZmlnLmhvc3QsXG4gICAgICAgICAgICAgICAgcG9ydDogY29tcHV0ZWRbJ1BvcnQnXVxuICAgICAgICAgICAgICAgICAgICA/IHBhcnNlSW50KGNvbXB1dGVkWydQb3J0J10gYXMgc3RyaW5nLCAxMClcbiAgICAgICAgICAgICAgICAgICAgOiBjb25maWcucG9ydCxcbiAgICAgICAgICAgICAgICB1c2VybmFtZTogKGNvbXB1dGVkWydVc2VyJ10gYXMgc3RyaW5nKSA/PyBjb25maWcudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZUtleVBhdGg6IGlkZW50aXR5RmlsZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICAgIC5sZXQoKGNvbmZpZykgPT4gKHtcbiAgICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICAgIHByaXZhdGVLZXlQYXRoOlxuICAgICAgICAgICAgICAgIGNvbmZpZy5wcml2YXRlS2V5UGF0aCA/P1xuICAgICAgICAgICAgICAgIFNTSF9LRVlfT1JERVIubWFwKChuYW1lKSA9PiBqb2luKHNzaERpciwgbmFtZSkpLmZpbmQoKHBhdGgpID0+XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0c1N5bmMocGF0aCksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5sZXQoKGNvbmZpZykgPT4gKHtcbiAgICAgICAgICAgIGhvc3Q6IGNvbmZpZy5ob3N0LFxuICAgICAgICAgICAgcG9ydDogc3RvcmUuY29uZmlnLnNzaFBvcnQgPz8gY29uZmlnLnBvcnQsXG4gICAgICAgICAgICB1c2VybmFtZTogc3RvcmUuY29uZmlnLnNzaFVzZXJuYW1lID8/IGNvbmZpZy51c2VybmFtZSxcbiAgICAgICAgICAgIHByaXZhdGVLZXlQYXRoOiBzdG9yZS5jb25maWcuc3NoS2V5ID8/IGNvbmZpZy5wcml2YXRlS2V5UGF0aCxcbiAgICAgICAgfSkpXG4gICAgICAgIC52YWx1ZSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbm5lY3RTU0ggPSBhc3luYyAoXG4gICAgc3RvcmU6IFRTdG9yZSxcbik6IFByb21pc2U8KCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgaWYgKCFzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLmVuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSByZXNvbHZlU1NIQ29uZmlnKHN0b3JlKTtcblxuICAgIGNvbnN0IHByaXZhdGVLZXkgPVxuICAgICAgICBjb25maWcucHJpdmF0ZUtleVBhdGggJiYgZXhpc3RzU3luYyhjb25maWcucHJpdmF0ZUtleVBhdGgpXG4gICAgICAgICAgICA/IHJlYWRGaWxlU3luYyhjb25maWcucHJpdmF0ZUtleVBhdGgpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGtleUlzRW5jcnlwdGVkID1cbiAgICAgICAgcHJpdmF0ZUtleSAhPT0gdW5kZWZpbmVkICYmIHV0aWxzLnBhcnNlS2V5KHByaXZhdGVLZXkpIGluc3RhbmNlb2YgRXJyb3I7XG5cbiAgICBsZXQgcHVibGljS2V5QXR0ZW1wdGVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBwcm9tcHRGb3JJbnB1dCA9IChcbiAgICAgICAgdHlwZTogJ3Bhc3NwaHJhc2UnIHwgJ3Bhc3N3b3JkJyxcbiAgICAgICAgZmluaXNoOiAocmVzcG9uc2VzOiBzdHJpbmdbXSkgPT4gdm9pZCxcbiAgICApID0+IHtcbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi53cm9uZ0F0dGVtcHQgPVxuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ucGFzc3dvcmRQcm9tcHRUeXBlID09PSB0eXBlO1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5wYXNzd29yZCA9IG51bGw7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLm5lZWRQYXNzd29yZCA9IHRydWU7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnBhc3N3b3JkUHJvbXB0VHlwZSA9IHR5cGU7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnByb21wdENvdW50ICs9IDE7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnN0YXRlID0gJ25lZWQtcGFzc3dvcmQnO1xuICAgICAgICB9KTtcblxuICAgICAgICB3aGVuKCgpID0+IHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ucGFzc3dvcmQgIT09IG51bGwpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ubmVlZFBhc3N3b3JkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5zdGF0ZSA9ICdjb25uZWN0aW5nJztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmaW5pc2goW3N0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ucGFzc3dvcmQhXSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBwcm9tcHRGb3JQYXNzcGhyYXNlID0gKGZpbmlzaDogKHZhbGlkUGFzc3BocmFzZTogc3RyaW5nKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudlBhc3NwaHJhc2UgPSBwcm9jZXNzLmVudlsnU1NIX1BBU1NQSFJBU0UnXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZW52UGFzc3BocmFzZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAhKHV0aWxzLnBhcnNlS2V5KHByaXZhdGVLZXkhLCBlbnZQYXNzcGhyYXNlKSBpbnN0YW5jZW9mIEVycm9yKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGZpbmlzaChlbnZQYXNzcGhyYXNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnZQYXNzcGhyYXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnBhc3N3b3JkUHJvbXB0VHlwZSA9ICdwYXNzcGhyYXNlJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvbXB0Rm9ySW5wdXQoJ3Bhc3NwaHJhc2UnLCAocmVzcG9uc2VzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0cnlQYXNzcGhyYXNlID0gcmVzcG9uc2VzWzBdITtcbiAgICAgICAgICAgIHV0aWxzLnBhcnNlS2V5KHByaXZhdGVLZXkhLCB0cnlQYXNzcGhyYXNlKSBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICAgICAgPyBwcm9tcHRGb3JQYXNzcGhyYXNlKGZpbmlzaClcbiAgICAgICAgICAgICAgICA6IGZpbmlzaCh0cnlQYXNzcGhyYXNlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGF1dGhIYW5kbGVyOiBBdXRoSGFuZGxlck1pZGRsZXdhcmUgPSAoXG4gICAgICAgIG1ldGhvZHNMZWZ0LFxuICAgICAgICBfcGFydGlhbFN1Y2Nlc3MsXG4gICAgICAgIG5leHQsXG4gICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IHt1c2VybmFtZX0gPSBjb25maWc7XG5cbiAgICAgICAgLy8gRmlyc3QgY2FsbDogbWV0aG9kc0xlZnQgaXMgbnVsbCBcdTIwMTQgc2VuZCAnbm9uZScgdG8gZGlzY292ZXIgYXZhaWxhYmxlIG1ldGhvZHNcbiAgICAgICAgIW1ldGhvZHNMZWZ0XG4gICAgICAgICAgICA/IG5leHQoe3R5cGU6ICdub25lJywgdXNlcm5hbWV9KVxuICAgICAgICAgICAgOiBtZXRob2RzTGVmdC5pbmNsdWRlcygncHVibGlja2V5JykgJiZcbiAgICAgICAgICAgICAgICBwcml2YXRlS2V5ICYmXG4gICAgICAgICAgICAgICAga2V5SXNFbmNyeXB0ZWQgJiZcbiAgICAgICAgICAgICAgICAhcHVibGljS2V5QXR0ZW1wdGVkXG4gICAgICAgICAgICAgID8gcHJvbXB0Rm9yUGFzc3BocmFzZSgodmFsaWRQYXNzcGhyYXNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHB1YmxpY0tleUF0dGVtcHRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIG5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3B1YmxpY2tleScsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogcHJpdmF0ZUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NwaHJhc2U6IHZhbGlkUGFzc3BocmFzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgOiBtZXRob2RzTGVmdC5pbmNsdWRlcygncHVibGlja2V5JykgJiZcbiAgICAgICAgICAgICAgICAgIHByaXZhdGVLZXkgJiZcbiAgICAgICAgICAgICAgICAgICFwdWJsaWNLZXlBdHRlbXB0ZWRcbiAgICAgICAgICAgICAgICA/ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcHVibGljS2V5QXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0KHt0eXBlOiAncHVibGlja2V5JywgdXNlcm5hbWUsIGtleTogcHJpdmF0ZUtleX0pO1xuICAgICAgICAgICAgICAgICAgfSkoKVxuICAgICAgICAgICAgICAgIDogbWV0aG9kc0xlZnQuaW5jbHVkZXMoJ2tleWJvYXJkLWludGVyYWN0aXZlJylcbiAgICAgICAgICAgICAgICAgID8gbmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAna2V5Ym9hcmQtaW50ZXJhY3RpdmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHQ6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaW5zdHJ1Y3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sYW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wcm9tcHRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21wdEZvcklucHV0KCdwYXNzd29yZCcsIGZpbmlzaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgOiBtZXRob2RzTGVmdC5pbmNsdWRlcygncGFzc3dvcmQnKVxuICAgICAgICAgICAgICAgICAgICA/IHByb21wdEZvcklucHV0KCdwYXNzd29yZCcsIChyZXNwb25zZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAncGFzc3dvcmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDogcmVzcG9uc2VzWzBdISxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBuZXh0KCdub25lJyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbm5lY3RDb25maWc6IENvbm5lY3RDb25maWcgPSB7XG4gICAgICAgIGhvc3Q6IGNvbmZpZy5ob3N0LFxuICAgICAgICBwb3J0OiBjb25maWcucG9ydCxcbiAgICAgICAgdXNlcm5hbWU6IGNvbmZpZy51c2VybmFtZSxcbiAgICAgICAgcmVhZHlUaW1lb3V0OiAwLFxuICAgICAgICBrZWVwYWxpdmVJbnRlcnZhbDogMTBfMDAwLFxuICAgICAgICBrZWVwYWxpdmVDb3VudE1heDogMyxcbiAgICAgICAgYXV0aEhhbmRsZXI6IGF1dGhIYW5kbGVyLFxuICAgIH07XG5cbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ucGlja2VkSG9zdG5hbWUgPSBjb25maWcuaG9zdDtcbiAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5waWNrZWRQb3J0ID0gY29uZmlnLnBvcnQ7XG4gICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ucGlja2VkVXNlcm5hbWUgPSBjb25maWcudXNlcm5hbWU7XG4gICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ucGlja2VkS2V5UGF0aCA9IGNvbmZpZy5wcml2YXRlS2V5UGF0aCA/PyBudWxsO1xuICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnN0YXRlID0gJ2Nvbm5lY3RpbmcnO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCgpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPCgpID0+IHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY2xpZW50Lm9uKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnN0YXRlID0gJ2Nvbm5lY3RlZCc7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5uZWVkUGFzc3dvcmQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCByZW1vdGVIb3N0ID0gc3RvcmUuY29uZmlnLmhvc3RuYW1lID8/ICdsb2NhbGhvc3QnO1xuICAgICAgICAgICAgY29uc3QgcmVtb3RlUG9ydCA9IHN0b3JlLmNvbmZpZy5wb3J0ID8/IDU0MzI7XG5cbiAgICAgICAgICAgIGNvbnN0IHNlcnZlciA9IG5ldC5jcmVhdGVTZXJ2ZXIoKHNvY2tldCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsUG9ydCA9IChzZXJ2ZXIuYWRkcmVzcygpIGFzIG5ldC5BZGRyZXNzSW5mbykucG9ydDtcblxuICAgICAgICAgICAgICAgIGNsaWVudC5mb3J3YXJkT3V0KFxuICAgICAgICAgICAgICAgICAgICAnMTI3LjAuMC4xJyxcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxQb3J0LFxuICAgICAgICAgICAgICAgICAgICByZW1vdGVIb3N0LFxuICAgICAgICAgICAgICAgICAgICByZW1vdGVQb3J0LFxuICAgICAgICAgICAgICAgICAgICAoZXJyLCBzdHJlYW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LnBpcGUoc3RyZWFtKS5waXBlKHNvY2tldCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZXJ2ZXIubGlzdGVuKDAsICcxMjcuMC4wLjEnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxQb3J0ID0gKHNlcnZlci5hZGRyZXNzKCkgYXMgbmV0LkFkZHJlc3NJbmZvKS5wb3J0O1xuXG4gICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLmxvY2FsUG9ydCA9IGxvY2FsUG9ydDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJlc29sdmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50LmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnN0YXRlID0gJ2lkbGUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5sb2NhbFBvcnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBjbGllbnQub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uc3RhdGUgPSAnZXJyb3InO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uZXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY2xpZW50Lm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5zdGF0ZSAhPT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5sb2NhbFBvcnQgPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNsaWVudC5jb25uZWN0KGNvbm5lY3RDb25maWcpO1xuICAgIH0pO1xufTtcbiIsICJpbXBvcnQge3JlYWRGaWxlU3luY30gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGcgZnJvbSAncGcnO1xuaW1wb3J0IHtydW5JbkFjdGlvbiwgd2hlbn0gZnJvbSAnbW9ieCc7XG5pbXBvcnQge3Njb3BlfSBmcm9tICdzY29wZS11dGlsaXRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi9zdG9yZS5tanMnO1xuaW1wb3J0IHR5cGUge1RTU0xNb2RlfSBmcm9tICcuLi9pbmRleC5tanMnO1xuaW1wb3J0IHtmZXRjaFBvc3RncmVzVmVyc2lvbn0gZnJvbSAnLi4vZGIvdmVyc2lvbi5tanMnO1xuXG5leHBvcnQgdHlwZSBUREJDb25uZWN0aW9uID0ge1xuICAgIHJlYWRvbmx5IHBvb2w6IEluc3RhbmNlVHlwZTx0eXBlb2YgUG9vbD47XG4gICAgcmVhZG9ubHkgY2xlYW51cDogKCkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IHtQb29sfSA9IHBnO1xuXG5jb25zdCBmb3JtYXRDb25uZWN0aW9uRXJyb3IgPSAoZXJyOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhlcnIpIHx8ICdVbmtub3duIGVycm9yJztcbiAgICB9XG5cbiAgICBpZiAoZXJyLm1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIGVyci5tZXNzYWdlO1xuICAgIH1cblxuICAgIC8vIFN5c3RlbSBlcnJvcnMgKEVDT05OUkVGVVNFRCwgRVRJTUVET1VULCBldGMuKVxuICAgIGNvbnN0IHN5c0VyciA9IGVyciBhcyB7XG4gICAgICAgIGNvZGU/OiBzdHJpbmc7XG4gICAgICAgIHN5c2NhbGw/OiBzdHJpbmc7XG4gICAgICAgIGFkZHJlc3M/OiBzdHJpbmc7XG4gICAgICAgIHBvcnQ/OiBudW1iZXI7XG4gICAgfTtcbiAgICBpZiAoc3lzRXJyLmNvZGUpIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBbc3lzRXJyLmNvZGVdO1xuICAgICAgICBpZiAoc3lzRXJyLnN5c2NhbGwpIHtcbiAgICAgICAgICAgIHBhcnRzLnB1c2goc3lzRXJyLnN5c2NhbGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzeXNFcnIuYWRkcmVzcykge1xuICAgICAgICAgICAgcGFydHMucHVzaChzeXNFcnIuYWRkcmVzcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN5c0Vyci5wb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhcnRzLnB1c2goU3RyaW5nKHN5c0Vyci5wb3J0KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ0Nvbm5lY3Rpb24gZmFpbGVkJztcbn07XG5cbnR5cGUgVFJlc29sdmVkREJDb25maWcgPSB7XG4gICAgcmVhZG9ubHkgaG9zdG5hbWU6IHN0cmluZztcbiAgICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgZGF0YWJhc2U6IHN0cmluZztcbiAgICByZWFkb25seSB1c2VybmFtZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHBhc3N3b3JkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCByZXNvbHZlREJDb25maWcgPSAoc3RvcmU6IFRTdG9yZSk6IFRSZXNvbHZlZERCQ29uZmlnID0+XG4gICAgc2NvcGUoe1xuICAgICAgICBob3N0bmFtZTogJ2xvY2FsaG9zdCcsXG4gICAgICAgIHBvcnQ6IDU0MzIsXG4gICAgICAgIGRhdGFiYXNlOiAncG9zdGdyZXMnLFxuICAgICAgICB1c2VybmFtZTogJ3Bvc3RncmVzJyxcbiAgICAgICAgcGFzc3dvcmQ6IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgfSlcbiAgICAgICAgLmxldCgoY29uZmlnKSA9PiAoe1xuICAgICAgICAgICAgaG9zdG5hbWU6IHByb2Nlc3MuZW52WydQR0hPU1QnXSA/PyBjb25maWcuaG9zdG5hbWUsXG4gICAgICAgICAgICBwb3J0OiBwcm9jZXNzLmVudlsnUEdQT1JUJ11cbiAgICAgICAgICAgICAgICA/IHBhcnNlSW50KHByb2Nlc3MuZW52WydQR1BPUlQnXSwgMTApXG4gICAgICAgICAgICAgICAgOiBjb25maWcucG9ydCxcbiAgICAgICAgICAgIGRhdGFiYXNlOiBwcm9jZXNzLmVudlsnUEdEQVRBQkFTRSddID8/IGNvbmZpZy5kYXRhYmFzZSxcbiAgICAgICAgICAgIHVzZXJuYW1lOiBwcm9jZXNzLmVudlsnUEdVU0VSJ10gPz8gY29uZmlnLnVzZXJuYW1lLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IHByb2Nlc3MuZW52WydQR1BBU1NXT1JEJ10gPz8gY29uZmlnLnBhc3N3b3JkLFxuICAgICAgICB9KSlcbiAgICAgICAgLmxldCgoY29uZmlnKSA9PlxuICAgICAgICAgICAgc3RvcmUuY29uZmlnLmNvbm5lY3Rpb25TdHJpbmdcbiAgICAgICAgICAgICAgICA/IHNjb3BlKG5ldyBVUkwoc3RvcmUuY29uZmlnLmNvbm5lY3Rpb25TdHJpbmcpKVxuICAgICAgICAgICAgICAgICAgICAgIC5sZXQoKHVybCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdG5hbWU6IHVybC5ob3N0bmFtZSB8fCBjb25maWcuaG9zdG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ6IHVybC5wb3J0ID8gcGFyc2VJbnQodXJsLnBvcnQsIDEwKSA6IGNvbmZpZy5wb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZTogdXJsLnBhdGhuYW1lLnNsaWNlKDEpIHx8IGNvbmZpZy5kYXRhYmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVVUklDb21wb25lbnQodXJsLnVzZXJuYW1lKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnVzZXJuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDogdXJsLnBhc3N3b3JkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGRlY29kZVVSSUNvbXBvbmVudCh1cmwucGFzc3dvcmQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbmZpZy5wYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAudmFsdWUoKVxuICAgICAgICAgICAgICAgIDogY29uZmlnLFxuICAgICAgICApXG4gICAgICAgIC5sZXQoKGNvbmZpZykgPT4gKHtcbiAgICAgICAgICAgIGhvc3RuYW1lOiBzdG9yZS5jb25maWcuaG9zdG5hbWUgPz8gY29uZmlnLmhvc3RuYW1lLFxuICAgICAgICAgICAgcG9ydDogc3RvcmUuY29uZmlnLnBvcnQgPz8gY29uZmlnLnBvcnQsXG4gICAgICAgICAgICBkYXRhYmFzZTogc3RvcmUuY29uZmlnLmRhdGFiYXNlID8/IGNvbmZpZy5kYXRhYmFzZSxcbiAgICAgICAgICAgIHVzZXJuYW1lOiBzdG9yZS5jb25maWcudXNlcm5hbWUgPz8gY29uZmlnLnVzZXJuYW1lLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IGNvbmZpZy5wYXNzd29yZCxcbiAgICAgICAgfSkpXG4gICAgICAgIC52YWx1ZSgpO1xuXG50eXBlIFRTU0xDb25maWcgPVxuICAgIHwgZmFsc2VcbiAgICB8IHtcbiAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGJvb2xlYW47XG4gICAgICAgICAgY2E/OiBzdHJpbmc7XG4gICAgICAgICAgY2VydD86IHN0cmluZztcbiAgICAgICAgICBrZXk/OiBzdHJpbmc7XG4gICAgICB9O1xuXG5jb25zdCBidWlsZFNTTENvbmZpZyA9IChzdG9yZTogVFN0b3JlKTogVFNTTENvbmZpZyA9PiB7XG4gICAgY29uc3QgbW9kZTogVFNTTE1vZGUgPSBzdG9yZS5jb25maWcuc3NsbW9kZSA/PyAncHJlZmVyJztcblxuICAgIHJldHVybiBtb2RlID09PSAnZGlzYWJsZSdcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IHtcbiAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOlxuICAgICAgICAgICAgICAgICAgbW9kZSA9PT0gJ3ZlcmlmeS1jYScgfHwgbW9kZSA9PT0gJ3ZlcmlmeS1mdWxsJyxcbiAgICAgICAgICAgICAgLi4uKHN0b3JlLmNvbmZpZy5zc2xyb290Y2VydFxuICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYTogcmVhZEZpbGVTeW5jKHN0b3JlLmNvbmZpZy5zc2xyb290Y2VydCwgJ3V0Zi04JyksXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgICAuLi4oc3RvcmUuY29uZmlnLnNzbGNlcnRcbiAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VydDogcmVhZEZpbGVTeW5jKHN0b3JlLmNvbmZpZy5zc2xjZXJ0LCAndXRmLTgnKSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgIC4uLihzdG9yZS5jb25maWcuc3Nsa2V5XG4gICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogcmVhZEZpbGVTeW5jKHN0b3JlLmNvbmZpZy5zc2xrZXksICd1dGYtOCcpLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbm5lY3REQiA9IGFzeW5jIChcbiAgICBzdG9yZTogVFN0b3JlLFxuKTogUHJvbWlzZTxUREJDb25uZWN0aW9uIHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gcmVzb2x2ZURCQ29uZmlnKHN0b3JlKTtcbiAgICBjb25zdCBzc2wgPSBidWlsZFNTTENvbmZpZyhzdG9yZSk7XG5cbiAgICAvLyBTU0ggdHVubmVsOiBjb25uZWN0IHZpYSBsb2NhbGhvc3QgdHVubmVsLCBidXQgZGlzcGxheSB0aGUgcmVhbCByZW1vdGUgdGFyZ2V0XG4gICAgY29uc3QgY29ubmVjdGlvbkhvc3QgPVxuICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLmVuYWJsZWQgJiZcbiAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5sb2NhbFBvcnQgIT09IG51bGxcbiAgICAgICAgICAgID8gJzEyNy4wLjAuMSdcbiAgICAgICAgICAgIDogY29uZmlnLmhvc3RuYW1lO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qb3J0ID1cbiAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5lbmFibGVkICYmXG4gICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ubG9jYWxQb3J0ICE9PSBudWxsXG4gICAgICAgICAgICA/IHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ubG9jYWxQb3J0XG4gICAgICAgICAgICA6IGNvbmZpZy5wb3J0O1xuXG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucGlja2VkSG9zdG5hbWUgPSBjb25maWcuaG9zdG5hbWU7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5waWNrZWRQb3J0ID0gY29uZmlnLnBvcnQ7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5waWNrZWREYXRhYmFzZSA9IGNvbmZpZy5kYXRhYmFzZTtcbiAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBpY2tlZFVzZXJuYW1lID0gY29uZmlnLnVzZXJuYW1lO1xuICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uc3RhdGUgPSAnY29ubmVjdGluZyc7XG4gICAgfSk7XG5cbiAgICBjb25zdCBhdHRlbXB0Q29ubmVjdGlvbiA9IGFzeW5jIChcbiAgICAgICAgcGFzc3dvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgc3NsQ29uZmlnOiBUU1NMQ29uZmlnLFxuICAgICk6IFByb21pc2U8VERCQ29ubmVjdGlvbiB8IHVuZGVmaW5lZD4gPT4ge1xuICAgICAgICBjb25zdCBwb29sID0gbmV3IFBvb2woe1xuICAgICAgICAgICAgaG9zdDogY29ubmVjdGlvbkhvc3QsXG4gICAgICAgICAgICBwb3J0OiBjb25uZWN0aW9uUG9ydCxcbiAgICAgICAgICAgIGRhdGFiYXNlOiBjb25maWcuZGF0YWJhc2UsXG4gICAgICAgICAgICB1c2VyOiBjb25maWcudXNlcm5hbWUsXG4gICAgICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgICAgIHNzbDogc3NsQ29uZmlnLFxuICAgICAgICAgICAgY29ubmVjdGlvblRpbWVvdXRNaWxsaXM6IDEwXzAwMCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHBvb2wuY29ubmVjdCgpO1xuICAgICAgICAgICAgY2xpZW50LnJlbGVhc2UoKTtcblxuICAgICAgICAgICAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGZldGNoUG9zdGdyZXNWZXJzaW9uKHBvb2wpO1xuXG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBvc3RncmVzVmVyc2lvbiA9XG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb24udmVyc2lvbjtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucG9zdGdyZXNWZXJzaW9uTnVtYmVyID1cbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbi52ZXJzaW9uX251bTtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uc3RhdGUgPSAnY29ubmVjdGVkJztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHBvb2wsXG4gICAgICAgICAgICAgICAgY2xlYW51cDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwb29sLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uc3RhdGUgPSAnaWRsZSc7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGF3YWl0IHBvb2wuZW5kKCk7XG5cbiAgICAgICAgICAgIC8vIFNTTCBlcnJvcnMgaGFwcGVuIGJlZm9yZSBhdXRoIFx1MjAxNCBjaGVjayBmaXJzdFxuICAgICAgICAgICAgY29uc3QgZXJyTXNnID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICcnO1xuICAgICAgICAgICAgY29uc3QgaXNTU0xFcnJvciA9IGVyck1zZy5pbmNsdWRlcygnZG9lcyBub3Qgc3VwcG9ydCBTU0wnKTtcbiAgICAgICAgICAgIGNvbnN0IHNzbE1vZGU6IFRTU0xNb2RlID0gc3RvcmUuY29uZmlnLnNzbG1vZGUgPz8gJ3ByZWZlcic7XG5cbiAgICAgICAgICAgIGlmIChpc1NTTEVycm9yICYmIHNzbE1vZGUgPT09ICdwcmVmZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRDb25uZWN0aW9uKHBhc3N3b3JkLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBnQ29kZSA9IChlcnIgYXMge2NvZGU/OiBzdHJpbmd9KS5jb2RlO1xuICAgICAgICAgICAgY29uc3QgaXNBdXRoRXJyb3IgPVxuICAgICAgICAgICAgICAgIHBnQ29kZSA9PT0gJzI4UDAxJyB8fFxuICAgICAgICAgICAgICAgIHBnQ29kZSA9PT0gJzI4MDAwJyB8fFxuICAgICAgICAgICAgICAgIGVyck1zZy5pbmNsdWRlcygncGFzc3dvcmQgbXVzdCBiZSBhIHN0cmluZycpO1xuXG4gICAgICAgICAgICBpZiAoIWlzQXV0aEVycm9yKSB7XG4gICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uc3RhdGUgPSAnZXJyb3InO1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uZXJyb3IgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0Q29ubmVjdGlvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi53cm9uZ0F0dGVtcHQgPVxuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucHJvbXB0Q291bnQgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBhc3N3b3JkID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucHJvbXB0Q291bnQgKz0gMTtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uc3RhdGUgPSAnbmVlZC1wYXNzd29yZCc7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXdhaXQgd2hlbigoKSA9PiBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucGFzc3dvcmQgIT09IG51bGwpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdQYXNzd29yZCA9IHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5wYXNzd29yZCE7XG5cbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucGFzc3dvcmQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5zdGF0ZSA9ICdjb25uZWN0aW5nJztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gYXR0ZW1wdENvbm5lY3Rpb24obmV3UGFzc3dvcmQsIHNzbENvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGF0dGVtcHRDb25uZWN0aW9uKGNvbmZpZy5wYXNzd29yZCwgc3NsKTtcbn07XG4iLCAiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxuZXhwb3J0IHR5cGUgVFBvc3RncmVzVmVyc2lvbiA9IHtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgdmVyc2lvbl9udW06IG51bWJlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFBvc3RncmVzVmVyc2lvbiA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxUUG9zdGdyZXNWZXJzaW9uPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxUUG9zdGdyZXNWZXJzaW9uPihgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgY3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJfdmVyc2lvbicpIEFTIHZlcnNpb24sXG4gICAgICAgICAgICBjdXJyZW50X3NldHRpbmcoJ3NlcnZlcl92ZXJzaW9uX251bScpOjppbnQgQVMgdmVyc2lvbl9udW1cbiAgICBgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93c1swXTtcbn07XG5cbmV4cG9ydCB0eXBlIFREYXRhYmFzZUlkZW50aWZpZXIgPSB7XG4gICAgc3lzdGVtX2lkZW50aWZpZXI6IHN0cmluZztcbiAgICBkYXRhYmFzZV9vaWQ6IG51bWJlcjtcbiAgICBkYXRhYmFzZV9uYW1lOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hEYXRhYmFzZUNvbW1lbnQgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbik6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8e2NvbW1lbnQ6IHN0cmluZyB8IG51bGx9PihgXG4gICAgICAgIFNFTEVDVCBzaG9ial9kZXNjcmlwdGlvbihkLm9pZCwgJ3BnX2RhdGFiYXNlJykgQVMgY29tbWVudFxuICAgICAgICBGUk9NIHBnX2RhdGFiYXNlIGRcbiAgICAgICAgV0hFUkUgZC5kYXRuYW1lID0gY3VycmVudF9kYXRhYmFzZSgpXG4gICAgYCk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3NbMF0uY29tbWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaERhdGFiYXNlSWRlbnRpZmllciA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxURGF0YWJhc2VJZGVudGlmaWVyPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxURGF0YWJhc2VJZGVudGlmaWVyPihgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgc3lzdGVtX2lkZW50aWZpZXI6OnRleHQgQVMgc3lzdGVtX2lkZW50aWZpZXIsXG4gICAgICAgICAgICAoU0VMRUNUIG9pZDo6aW50IEZST00gcGdfZGF0YWJhc2UgV0hFUkUgZGF0bmFtZSA9IGN1cnJlbnRfZGF0YWJhc2UoKSkgQVMgZGF0YWJhc2Vfb2lkLFxuICAgICAgICAgICAgY3VycmVudF9kYXRhYmFzZSgpIEFTIGRhdGFiYXNlX25hbWVcbiAgICAgICAgRlJPTSBwZ19jb250cm9sX3N5c3RlbSgpXG4gICAgYCk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3NbMF07XG59O1xuIiwgImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5pbXBvcnQgUFF1ZXVlIGZyb20gJ3AtcXVldWUnO1xuaW1wb3J0IHtydW5JbkFjdGlvbn0gZnJvbSAnbW9ieCc7XG5cbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQgdHlwZSB7VERhdGFiYXNlSW50cm9zcGVjdGlvbn0gZnJvbSAnQGRiY3R4L2NvcmUnO1xuaW1wb3J0IHR5cGUge1RBdHRyaWJ1dGVJbmZvfSBmcm9tICcuLi9kYi9hdHRyaWJ1dGVzLm1qcyc7XG5pbXBvcnQgdHlwZSB7VEluZGV4SW5mb30gZnJvbSAnLi4vZGIvaW5kZXhlcy5tanMnO1xuaW1wb3J0IHR5cGUge1RGb3JlaWduS2V5SW5mb30gZnJvbSAnLi4vZGIvZm9yZWlnbi1rZXlzLm1qcyc7XG5pbXBvcnQgdHlwZSB7VFJlbGF0aW9uU3RhdHN9IGZyb20gJy4uL2RiL3N0YXRzLm1qcyc7XG5pbXBvcnQge1xuICAgIGZldGNoRGF0YWJhc2VJZGVudGlmaWVyLFxuICAgIGZldGNoRGF0YWJhc2VDb21tZW50LFxuICAgIGZldGNoUHVibGljUmVsYXRpb25zLFxuICAgIGZldGNoUHVibGljRW51bXMsXG4gICAgZmV0Y2hSZWxhdGlvbkF0dHJpYnV0ZXMsXG4gICAgZmV0Y2hSZWxhdGlvbkluZGV4ZXMsXG4gICAgZmV0Y2hSZWxhdGlvbkZvcmVpZ25LZXlzLFxuICAgIGZldGNoVmlld0RlZmluaXRpb24sXG4gICAgYW5hbHl6ZVJlbGF0aW9uLFxuICAgIGZldGNoUmVsYXRpb25TdGF0cyxcbiAgICBmZXRjaFB1YmxpY0NoZWNrQ29uc3RyYWludHMsXG4gICAgZmV0Y2hJbnN0YWxsZWRFeHRlbnNpb25zLFxuICAgIGZldGNoUHVibGljU2VxdWVuY2VzLFxuICAgIGZldGNoUHVibGljVHJpZ2dlcnMsXG4gICAgZmV0Y2hQdWJsaWNGdW5jdGlvbnMsXG4gICAgZmV0Y2hQdWJsaWNDdXN0b21UeXBlcyxcbiAgICBmZXRjaFB1YmxpY1JMUyxcbn0gZnJvbSAnLi4vZGIvaW5kZXgubWpzJztcblxuY29uc3QgdG9SZWNvcmQgPSA8VCBleHRlbmRzIHVua25vd24+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAga2V5OiAoaXRlbTogVCkgPT4gc3RyaW5nLFxuKTogUmVjb3JkPHN0cmluZywgVD4gPT5cbiAgICBPYmplY3QuZnJvbUVudHJpZXMoaXRlbXMubWFwKChpdGVtKSA9PiBba2V5KGl0ZW0pLCBpdGVtXSkpO1xuXG5jb25zdCB0cmFuc2Zvcm1BdHRyaWJ1dGUgPSAoYXR0cjogVEF0dHJpYnV0ZUluZm8pID0+IHtcbiAgICBjb25zdCBiYXNlID0ge1xuICAgICAgICBuYW1lOiBhdHRyLmF0dHJpYnV0ZV9uYW1lLFxuICAgICAgICBkYXRhX3R5cGU6IGF0dHIuZGF0YV90eXBlLFxuICAgICAgICBpc19udWxsYWJsZTogYXR0ci5pc19udWxsYWJsZSxcbiAgICAgICAgY29tbWVudDogYXR0ci5jb21tZW50LFxuICAgIH07XG5cbiAgICBpZiAoYXR0ci5raW5kID09PSAnZ2VuZXJhdGVkJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgICAgIGtpbmQ6ICdnZW5lcmF0ZWQnIGFzIGNvbnN0LFxuICAgICAgICAgICAgZ2VuZXJhdGVkX3N0b3JhZ2U6IGF0dHIuZ2VuZXJhdGVkX3N0b3JhZ2UhIGFzICdzdG9yZWQnIHwgJ3ZpcnR1YWwnLFxuICAgICAgICAgICAgZ2VuZXJhdGVkX2V4cHJlc3Npb246IGF0dHIuZ2VuZXJhdGVkX2V4cHJlc3Npb24hLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBhdHRyLmhhc19kZWZhdWx0XG4gICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5iYXNlLFxuICAgICAgICAgICAgICBraW5kOiAncmVndWxhcicgYXMgY29uc3QsXG4gICAgICAgICAgICAgIGhhc19kZWZhdWx0OiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICAgICAgICBkZWZhdWx0X2V4cHJlc3Npb246IGF0dHIuZGVmYXVsdF9leHByZXNzaW9uISxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgICAuLi5iYXNlLFxuICAgICAgICAgICAgICBraW5kOiAncmVndWxhcicgYXMgY29uc3QsXG4gICAgICAgICAgICAgIGhhc19kZWZhdWx0OiBmYWxzZSBhcyBjb25zdCxcbiAgICAgICAgICB9O1xufTtcblxuY29uc3QgZGVyaXZlSW5kZXhLaW5kID0gKGlkeDogVEluZGV4SW5mbykgPT5cbiAgICBpZHguaXNfcHJpbWFyeVxuICAgICAgICA/ICh7aW5kZXhfa2luZDogJ3ByaW1hcnknfSBhcyBjb25zdClcbiAgICAgICAgOiBpZHguaXNfdW5pcXVlXG4gICAgICAgICAgPyAoe2luZGV4X2tpbmQ6ICd1bmlxdWUnfSBhcyBjb25zdClcbiAgICAgICAgICA6IGlkeC5pc19leGNsdXNpb25cbiAgICAgICAgICAgID8gKHtcbiAgICAgICAgICAgICAgICAgIGluZGV4X2tpbmQ6ICdleGNsdXNpb24nLFxuICAgICAgICAgICAgICAgICAgZXhjbHVzaW9uX29wZXJhdG9yczogaWR4LmV4Y2x1c2lvbl9vcGVyYXRvcnMhLFxuICAgICAgICAgICAgICB9IGFzIGNvbnN0KVxuICAgICAgICAgICAgOiAoe2luZGV4X2tpbmQ6ICdwbGFpbid9IGFzIGNvbnN0KTtcblxuY29uc3QgdHJhbnNmb3JtSW5kZXggPSAoaWR4OiBUSW5kZXhJbmZvKSA9PiAoe1xuICAgIGluZGV4X25hbWU6IGlkeC5pbmRleF9uYW1lLFxuICAgIHJlbGF0aW9uX25hbWU6IGlkeC5yZWxhdGlvbl9uYW1lLFxuICAgIGF0dHJpYnV0ZXM6IGlkeC5hdHRyaWJ1dGVzLFxuICAgIGRlZmluaXRpb246IGlkeC5kZWZpbml0aW9uLFxuICAgIGNvbW1lbnQ6IGlkeC5jb21tZW50LFxuICAgIC4uLmRlcml2ZUluZGV4S2luZChpZHgpLFxuICAgIC4uLihpZHguaXNfcGFydGlhbFxuICAgICAgICA/ICh7XG4gICAgICAgICAgICAgIGlzX3BhcnRpYWw6IHRydWUsXG4gICAgICAgICAgICAgIHBhcnRpYWxfcHJlZGljYXRlOiBpZHgucGFydGlhbF9wcmVkaWNhdGUhLFxuICAgICAgICAgIH0gYXMgY29uc3QpXG4gICAgICAgIDogKHtpc19wYXJ0aWFsOiBmYWxzZX0gYXMgY29uc3QpKSxcbn0pO1xuXG5jb25zdCB0cmFuc2Zvcm1SZWZlcmVuY2UgPSAoZms6IFRGb3JlaWduS2V5SW5mbykgPT4gKHtcbiAgICBjb25zdHJhaW50X25hbWU6IGZrLmNvbnN0cmFpbnRfbmFtZSxcbiAgICBhdHRyaWJ1dGVzOiBmay5hdHRyaWJ1dGVzLFxuICAgIHJlZmVyZW5jZWRfcmVsYXRpb246IGZrLnJlZmVyZW5jZWRfcmVsYXRpb24sXG4gICAgcmVmZXJlbmNlZF9hdHRyaWJ1dGVzOiBmay5yZWZlcmVuY2VkX2F0dHJpYnV0ZXMsXG4gICAgb25fdXBkYXRlOiBmay5vbl91cGRhdGUsXG4gICAgb25fZGVsZXRlOiBmay5vbl9kZWxldGUsXG4gICAgY29tbWVudDogZmsuY29tbWVudCxcbn0pO1xuXG5leHBvcnQgY29uc3QgYXNzZW1ibGVEYXRhYmFzZSA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHN0b3JlOiBUU3RvcmUsXG4pOiBQcm9taXNlPFREYXRhYmFzZUludHJvc3BlY3Rpb24+ID0+IHtcbiAgICBjb25zdCBxdWV1ZSA9IG5ldyBQUXVldWUoe2NvbmN1cnJlbmN5OiAzfSk7XG4gICAgY29uc3QgY291bnRzID0gc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5jb3VudHM7XG5cbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmludHJvc3BlY3Rpb24uc3RhdGUgPSAnZmV0Y2hpbmcnO1xuICAgIH0pO1xuXG4gICAgY29uc3QgW2lkZW50aWZpZXIsIGNvbW1lbnRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hEYXRhYmFzZUlkZW50aWZpZXIocG9vbCkpLFxuICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hEYXRhYmFzZUNvbW1lbnQocG9vbCkpLFxuICAgIF0pO1xuXG4gICAgY29uc3QgW1xuICAgICAgICBncm91cGVkLFxuICAgICAgICBlbnVtcyxcbiAgICAgICAgY2hlY2tDb25zdHJhaW50cyxcbiAgICAgICAgZXh0ZW5zaW9ucyxcbiAgICAgICAgc2VxdWVuY2VzLFxuICAgICAgICB0cmlnZ2VycyxcbiAgICAgICAgZnVuY3Rpb25zLFxuICAgICAgICBjdXN0b21UeXBlcyxcbiAgICAgICAgcmxzLFxuICAgIF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFB1YmxpY1JlbGF0aW9ucyhwb29sKSksXG4gICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFB1YmxpY0VudW1zKHBvb2wpKSxcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUHVibGljQ2hlY2tDb25zdHJhaW50cyhwb29sKSksXG4gICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaEluc3RhbGxlZEV4dGVuc2lvbnMocG9vbCkpLFxuICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hQdWJsaWNTZXF1ZW5jZXMocG9vbCkpLFxuICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hQdWJsaWNUcmlnZ2Vycyhwb29sKSksXG4gICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFB1YmxpY0Z1bmN0aW9ucyhwb29sKSksXG4gICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFB1YmxpY0N1c3RvbVR5cGVzKHBvb2wpKSxcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUHVibGljUkxTKHBvb2wpKSxcbiAgICBdKTtcblxuICAgIGNvbnN0IHR5cGVkR3JvdXBlZCA9IGdyb3VwZWQgYXMgQXdhaXRlZDxcbiAgICAgICAgUmV0dXJuVHlwZTx0eXBlb2YgZmV0Y2hQdWJsaWNSZWxhdGlvbnM+XG4gICAgPjtcbiAgICBjb25zdCB0eXBlZEVudW1zID0gZW51bXMgYXMgQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaFB1YmxpY0VudW1zPj47XG5cbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIGNvdW50cy50YWJsZXMgPVxuICAgICAgICAgICAgKHR5cGVkR3JvdXBlZC50YWJsZT8ubGVuZ3RoID8/IDApICtcbiAgICAgICAgICAgICh0eXBlZEdyb3VwZWQucGFydGl0aW9uZWRfdGFibGU/Lmxlbmd0aCA/PyAwKTtcbiAgICAgICAgY291bnRzLnZpZXdzID1cbiAgICAgICAgICAgICh0eXBlZEdyb3VwZWQudmlldz8ubGVuZ3RoID8/IDApICtcbiAgICAgICAgICAgICh0eXBlZEdyb3VwZWQubWF0ZXJpYWxpemVkX3ZpZXc/Lmxlbmd0aCA/PyAwKTtcbiAgICAgICAgY291bnRzLmVudW1zID0gT2JqZWN0LmtleXModHlwZWRFbnVtcykubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgY29uc3QgYWxsUmVsYXRpb25zID0gW1xuICAgICAgICAuLi4odHlwZWRHcm91cGVkLnBhcnRpdGlvbmVkX3RhYmxlID8/IFtdKSxcbiAgICAgICAgLi4uKHR5cGVkR3JvdXBlZC50YWJsZSA/PyBbXSksXG4gICAgICAgIC4uLih0eXBlZEdyb3VwZWQudmlldyA/PyBbXSksXG4gICAgICAgIC4uLih0eXBlZEdyb3VwZWQubWF0ZXJpYWxpemVkX3ZpZXcgPz8gW10pLFxuICAgIF07XG5cbiAgICBjb25zdCBpc1ZpZXdLaW5kID0gKHR5cGU6IHN0cmluZykgPT5cbiAgICAgICAgdHlwZSA9PT0gJ3ZpZXcnIHx8IHR5cGUgPT09ICdtYXRlcmlhbGl6ZWRfdmlldyc7XG5cbiAgICBjb25zdCBza2lwQW5hbHl6ZSA9IHN0b3JlLm91dHB1dE9wdGlvbnMuc2tpcEFuYWx5emU7XG5cbiAgICBjb25zdCByZWxhdGlvbkVudHJpZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgYWxsUmVsYXRpb25zLm1hcChhc3luYyAocmVsKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVsLnR5cGUgIT09ICd2aWV3JyAmJiAhc2tpcEFuYWx5emUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBxdWV1ZS5hZGQoKCkgPT4gYW5hbHl6ZVJlbGF0aW9uKHBvb2wsIHJlbC5uYW1lKSk7XG4gICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb3VudHMuYW5hbHl6ZWQgKz0gMTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgW2F0dHJpYnV0ZXMsIGluZGV4ZXMsIGZvcmVpZ25LZXlzLCBzdGF0cywgdmlld0RlZmluaXRpb25dID1cbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFJlbGF0aW9uQXR0cmlidXRlcyhwb29sLCByZWwubmFtZSkpLFxuICAgICAgICAgICAgICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hSZWxhdGlvbkluZGV4ZXMocG9vbCwgcmVsLm5hbWUpKSxcbiAgICAgICAgICAgICAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUmVsYXRpb25Gb3JlaWduS2V5cyhwb29sLCByZWwubmFtZSkpLFxuICAgICAgICAgICAgICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hSZWxhdGlvblN0YXRzKHBvb2wsIHJlbC5uYW1lKSksXG4gICAgICAgICAgICAgICAgICAgIGlzVmlld0tpbmQocmVsLnR5cGUpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFZpZXdEZWZpbml0aW9uKHBvb2wsIHJlbC5uYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBjb25zdCBhdHRycyA9IGF0dHJpYnV0ZXMgYXMgVEF0dHJpYnV0ZUluZm9bXTtcbiAgICAgICAgICAgIGNvbnN0IGlkeHMgPSBpbmRleGVzIGFzIFRJbmRleEluZm9bXTtcbiAgICAgICAgICAgIGNvbnN0IGZrcyA9IGZvcmVpZ25LZXlzIGFzIFRGb3JlaWduS2V5SW5mb1tdO1xuICAgICAgICAgICAgY29uc3QgcmVsU3RhdHMgPSBzdGF0cyBhcyBUUmVsYXRpb25TdGF0cztcblxuICAgICAgICAgICAgY29uc3QgZGlzdGluY3RMb29rdXAgPSBuZXcgTWFwKFxuICAgICAgICAgICAgICAgIHJlbFN0YXRzLmF0dHJpYnV0ZXMubWFwKChhKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgIGEuYXR0cmlidXRlX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIGEuZXN0aW1hdGVkX2Rpc3RpbmN0LFxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvdW50cy5jb2x1bW5zICs9IGF0dHJzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb3VudHMuaW5kZXhlcyArPSBpZHhzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb3VudHMuZm9yZWlnbktleXMgKz0gZmtzLmxlbmd0aDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZEF0dHJzID0gYXR0cnMubWFwKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IHRyYW5zZm9ybUF0dHJpYnV0ZShhdHRyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0aW5jdCA9IGRpc3RpbmN0TG9va3VwLmdldChhdHRyLmF0dHJpYnV0ZV9uYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGlzdGluY3QgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IHsuLi5iYXNlLCBlc3RpbWF0ZWRfZGlzdGluY3Q6IGRpc3RpbmN0fVxuICAgICAgICAgICAgICAgICAgICA6IGJhc2U7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcmVsYXRpb25PYmogPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogcmVsLm5hbWUsXG4gICAgICAgICAgICAgICAgY29tbWVudDogcmVsLmNvbW1lbnQsXG4gICAgICAgICAgICAgICAga2luZDogcmVsLnR5cGUsXG4gICAgICAgICAgICAgICAgZXN0aW1hdGVkX3Jvd19jb3VudDogcmVsU3RhdHMuZXN0aW1hdGVkX3Jvd19jb3VudCxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0b1JlY29yZCh0cmFuc2Zvcm1lZEF0dHJzLCAoYSkgPT4gYS5uYW1lKSxcbiAgICAgICAgICAgICAgICBpbmRleGVzOiB0b1JlY29yZChcbiAgICAgICAgICAgICAgICAgICAgaWR4cy5tYXAodHJhbnNmb3JtSW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICAoaSkgPT4gaS5pbmRleF9uYW1lLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlczogdG9SZWNvcmQoXG4gICAgICAgICAgICAgICAgICAgIGZrcy5tYXAodHJhbnNmb3JtUmVmZXJlbmNlKSxcbiAgICAgICAgICAgICAgICAgICAgKHIpID0+IHIuY29uc3RyYWludF9uYW1lLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgLi4uKHZpZXdEZWZpbml0aW9uXG4gICAgICAgICAgICAgICAgICAgID8ge3ZpZXdEZWZpbml0aW9uOiB2aWV3RGVmaW5pdGlvbiBhcyBzdHJpbmd9XG4gICAgICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIFtyZWwubmFtZSwgcmVsYXRpb25PYmpdIGFzIGNvbnN0O1xuICAgICAgICB9KSxcbiAgICApO1xuXG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zdGVwcy5pbnRyb3NwZWN0aW9uLnN0YXRlID0gJ2RvbmUnO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ3Bvc3RncmVzcWwnIGFzIGNvbnN0LFxuICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICB2ZXJzaW9uX3N0cmluZzogc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBvc3RncmVzVmVyc2lvbiEsXG4gICAgICAgICAgICB2ZXJzaW9uX251bWJlcjpcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucG9zdGdyZXNWZXJzaW9uTnVtYmVyISxcbiAgICAgICAgfSxcbiAgICAgICAgaWRlbnRpZmllcjoge1xuICAgICAgICAgICAgc3lzdGVtX2lkZW50aWZpZXI6IGlkZW50aWZpZXIhLnN5c3RlbV9pZGVudGlmaWVyLFxuICAgICAgICAgICAgZGF0YWJhc2Vfb2lkOiBpZGVudGlmaWVyIS5kYXRhYmFzZV9vaWQsXG4gICAgICAgIH0sXG4gICAgICAgIG5hbWU6IGlkZW50aWZpZXIhLmRhdGFiYXNlX25hbWUsXG4gICAgICAgIGNvbW1lbnQ6IGNvbW1lbnQgPz8gbnVsbCxcbiAgICAgICAgcmVsYXRpb25zOiBPYmplY3QuZnJvbUVudHJpZXMocmVsYXRpb25FbnRyaWVzKSxcbiAgICAgICAgZW51bXM6IHR5cGVkRW51bXMsXG4gICAgICAgIGNoZWNrQ29uc3RyYWludHM6IGNoZWNrQ29uc3RyYWludHMgYXMgQXdhaXRlZDxcbiAgICAgICAgICAgIFJldHVyblR5cGU8dHlwZW9mIGZldGNoUHVibGljQ2hlY2tDb25zdHJhaW50cz5cbiAgICAgICAgPixcbiAgICAgICAgZXh0ZW5zaW9uczogZXh0ZW5zaW9ucyBhcyBBd2FpdGVkPFxuICAgICAgICAgICAgUmV0dXJuVHlwZTx0eXBlb2YgZmV0Y2hJbnN0YWxsZWRFeHRlbnNpb25zPlxuICAgICAgICA+LFxuICAgICAgICBzZXF1ZW5jZXM6IHNlcXVlbmNlcyBhcyBBd2FpdGVkPFxuICAgICAgICAgICAgUmV0dXJuVHlwZTx0eXBlb2YgZmV0Y2hQdWJsaWNTZXF1ZW5jZXM+XG4gICAgICAgID4sXG4gICAgICAgIHRyaWdnZXJzOiB0cmlnZ2VycyBhcyBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGZldGNoUHVibGljVHJpZ2dlcnM+PixcbiAgICAgICAgZnVuY3Rpb25zOiBmdW5jdGlvbnMgYXMgQXdhaXRlZDxcbiAgICAgICAgICAgIFJldHVyblR5cGU8dHlwZW9mIGZldGNoUHVibGljRnVuY3Rpb25zPlxuICAgICAgICA+LFxuICAgICAgICBjdXN0b21UeXBlczpcbiAgICAgICAgICAgIGN1c3RvbVR5cGVzIGFzIHVua25vd24gYXMgVERhdGFiYXNlSW50cm9zcGVjdGlvblsnY3VzdG9tVHlwZXMnXSxcbiAgICAgICAgcmxzOiBybHMgYXMgdW5rbm93biBhcyBURGF0YWJhc2VJbnRyb3NwZWN0aW9uWydybHMnXSxcbiAgICB9O1xufTtcbiIsICJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuaW1wb3J0IHtncm91cEJ5fSBmcm9tICdlcy10b29sa2l0JztcblxuZXhwb3J0IHR5cGUgVFJlbGF0aW9uVHlwZSA9XG4gICAgfCAncGFydGl0aW9uZWRfdGFibGUnXG4gICAgfCAndGFibGUnXG4gICAgfCAndmlldydcbiAgICB8ICdtYXRlcmlhbGl6ZWRfdmlldyc7XG5cbmV4cG9ydCB0eXBlIFRSZWxhdGlvbkluZm8gPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHR5cGU6IFRSZWxhdGlvblR5cGU7XG4gICAgY29tbWVudDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFRHcm91cGVkUmVsYXRpb25zID0gUmVjb3JkPFRSZWxhdGlvblR5cGUsIFRSZWxhdGlvbkluZm9bXT47XG5cbmV4cG9ydCBjb25zdCBmZXRjaFB1YmxpY1JlbGF0aW9ucyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxUR3JvdXBlZFJlbGF0aW9ucz4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VFJlbGF0aW9uSW5mbz4oYFxuICAgICAgICBTRUxFQ1QgcmVsbmFtZSBBUyBuYW1lLFxuICAgICAgICAgICAgQ0FTRSByZWxraW5kXG4gICAgICAgICAgICAgICAgV0hFTiAncCcgVEhFTiAncGFydGl0aW9uZWRfdGFibGUnXG4gICAgICAgICAgICAgICAgV0hFTiAncicgVEhFTiAndGFibGUnXG4gICAgICAgICAgICAgICAgV0hFTiAndicgVEhFTiAndmlldydcbiAgICAgICAgICAgICAgICBXSEVOICdtJyBUSEVOICdtYXRlcmlhbGl6ZWRfdmlldydcbiAgICAgICAgICAgIEVORCBBUyB0eXBlLFxuICAgICAgICAgICAgb2JqX2Rlc2NyaXB0aW9uKG9pZCwgJ3BnX2NsYXNzJykgQVMgY29tbWVudFxuICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3NcbiAgICAgICAgV0hFUkUgcmVsbmFtZXNwYWNlID0gKFNFTEVDVCBvaWQgRlJPTSBwZ19uYW1lc3BhY2UgV0hFUkUgbnNwbmFtZSA9ICdwdWJsaWMnKVxuICAgICAgICAgICAgQU5EIChcbiAgICAgICAgICAgICAgICByZWxraW5kID0gJ3AnXG4gICAgICAgICAgICAgICAgT1IgKHJlbGtpbmQgPSAncicgQU5EIE5PVCByZWxpc3BhcnRpdGlvbilcbiAgICAgICAgICAgICAgICBPUiByZWxraW5kIElOICgndicsICdtJylcbiAgICAgICAgICAgIClcbiAgICAgICAgT1JERVIgQlkgdHlwZSwgbmFtZVxuICAgIGApO1xuXG4gICAgcmV0dXJuIGdyb3VwQnkocmVzdWx0LnJvd3MsIChyb3cpID0+IHJvdy50eXBlKSBhcyBUR3JvdXBlZFJlbGF0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFZpZXdEZWZpbml0aW9uID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgdmlld05hbWU6IHN0cmluZyxcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTx7ZGVmaW5pdGlvbjogc3RyaW5nfT4oXG4gICAgICAgIGBcbiAgICAgICAgU0VMRUNUIHBnX2dldF92aWV3ZGVmKGMub2lkLCB0cnVlKSBBUyBkZWZpbml0aW9uXG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjXG4gICAgICAgIFdIRVJFIGMucmVsbmFtZSA9ICQxXG4gICAgICAgICAgICBBTkQgYy5yZWxuYW1lc3BhY2UgPSAoU0VMRUNUIG9pZCBGUk9NIHBnX25hbWVzcGFjZSBXSEVSRSBuc3BuYW1lID0gJ3B1YmxpYycpXG4gICAgICAgIGAsXG4gICAgICAgIFt2aWV3TmFtZV0sXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93c1swXSEuZGVmaW5pdGlvbjtcbn07XG4iLCAiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxuZXhwb3J0IHR5cGUgVEF0dHJpYnV0ZUtpbmQgPSAncmVndWxhcicgfCAnZ2VuZXJhdGVkJztcblxuZXhwb3J0IHR5cGUgVEdlbmVyYXRlZFN0b3JhZ2UgPSAnc3RvcmVkJyB8ICd2aXJ0dWFsJztcblxuZXhwb3J0IHR5cGUgVEF0dHJpYnV0ZUluZm8gPSB7XG4gICAgYXR0cmlidXRlX25hbWU6IHN0cmluZztcbiAgICBkYXRhX3R5cGU6IHN0cmluZztcbiAgICBpc19udWxsYWJsZTogYm9vbGVhbjtcbiAgICBoYXNfZGVmYXVsdDogYm9vbGVhbjtcbiAgICBkZWZhdWx0X2V4cHJlc3Npb246IHN0cmluZyB8IG51bGw7XG4gICAga2luZDogVEF0dHJpYnV0ZUtpbmQ7XG4gICAgZ2VuZXJhdGVkX3N0b3JhZ2U6IFRHZW5lcmF0ZWRTdG9yYWdlIHwgbnVsbDtcbiAgICBnZW5lcmF0ZWRfZXhwcmVzc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgICBjb21tZW50OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUmVsYXRpb25BdHRyaWJ1dGVzID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgcmVsYXRpb25OYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPFRBdHRyaWJ1dGVJbmZvW10+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PFRBdHRyaWJ1dGVJbmZvPihcbiAgICAgICAgYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIGEuYXR0bmFtZSBBUyBhdHRyaWJ1dGVfbmFtZSxcbiAgICAgICAgICAgIGZvcm1hdF90eXBlKGEuYXR0dHlwaWQsIGEuYXR0dHlwbW9kKSBBUyBkYXRhX3R5cGUsXG4gICAgICAgICAgICBOT1QgYS5hdHRub3RudWxsIEFTIGlzX251bGxhYmxlLFxuICAgICAgICAgICAgYWQuYWRiaW4gSVMgTk9UIE5VTEwgQVMgaGFzX2RlZmF1bHQsXG4gICAgICAgICAgICBDQVNFXG4gICAgICAgICAgICAgICAgV0hFTiBhLmF0dGdlbmVyYXRlZCA9ICcnIEFORCBhZC5hZGJpbiBJUyBOT1QgTlVMTCBUSEVOIHBnX2dldF9leHByKGFkLmFkYmluLCBhZC5hZHJlbGlkKVxuICAgICAgICAgICAgICAgIEVMU0UgTlVMTFxuICAgICAgICAgICAgRU5EIEFTIGRlZmF1bHRfZXhwcmVzc2lvbixcbiAgICAgICAgICAgIENBU0UgYS5hdHRnZW5lcmF0ZWRcbiAgICAgICAgICAgICAgICBXSEVOICcnIFRIRU4gJ3JlZ3VsYXInXG4gICAgICAgICAgICAgICAgRUxTRSAnZ2VuZXJhdGVkJ1xuICAgICAgICAgICAgRU5EIEFTIGtpbmQsXG4gICAgICAgICAgICBDQVNFIGEuYXR0Z2VuZXJhdGVkXG4gICAgICAgICAgICAgICAgV0hFTiAncycgVEhFTiAnc3RvcmVkJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ3YnIFRIRU4gJ3ZpcnR1YWwnXG4gICAgICAgICAgICAgICAgRUxTRSBOVUxMXG4gICAgICAgICAgICBFTkQgQVMgZ2VuZXJhdGVkX3N0b3JhZ2UsXG4gICAgICAgICAgICBDQVNFXG4gICAgICAgICAgICAgICAgV0hFTiBhLmF0dGdlbmVyYXRlZCAhPSAnJyBUSEVOIHBnX2dldF9leHByKGFkLmFkYmluLCBhZC5hZHJlbGlkKVxuICAgICAgICAgICAgICAgIEVMU0UgTlVMTFxuICAgICAgICAgICAgRU5EIEFTIGdlbmVyYXRlZF9leHByZXNzaW9uLFxuICAgICAgICAgICAgY29sX2Rlc2NyaXB0aW9uKGMub2lkLCBhLmF0dG51bSkgQVMgY29tbWVudFxuICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgY1xuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfYXR0cmlidXRlIGEgT04gYS5hdHRyZWxpZCA9IGMub2lkXG4gICAgICAgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX2F0dHJkZWYgYWQgT04gYWQuYWRyZWxpZCA9IGEuYXR0cmVsaWQgQU5EIGFkLmFkbnVtID0gYS5hdHRudW1cbiAgICAgICAgV0hFUkUgYy5yZWxuYW1lID0gJDFcbiAgICAgICAgICAgIEFORCBjLnJlbG5hbWVzcGFjZSA9IChTRUxFQ1Qgb2lkIEZST00gcGdfbmFtZXNwYWNlIFdIRVJFIG5zcG5hbWUgPSAncHVibGljJylcbiAgICAgICAgICAgIEFORCBhLmF0dG51bSA+IDBcbiAgICAgICAgICAgIEFORCBOT1QgYS5hdHRpc2Ryb3BwZWRcbiAgICAgICAgT1JERVIgQlkgYS5hdHRudW1cbiAgICAgICAgYCxcbiAgICAgICAgW3JlbGF0aW9uTmFtZV0sXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93cztcbn07XG4iLCAiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcbmltcG9ydCB7Z3JvdXBCeX0gZnJvbSAnZXMtdG9vbGtpdCc7XG5cbnR5cGUgVEVudW1WYWx1ZVJvdyA9IHtcbiAgICBlbnVtX25hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIHNvcnRfb3JkZXI6IG51bWJlcjtcbiAgICBjb21tZW50OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgVEVudW1JbmZvID0ge1xuICAgIHZhbHVlczogc3RyaW5nW107XG4gICAgY29tbWVudDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFRHcm91cGVkRW51bXMgPSBSZWNvcmQ8c3RyaW5nLCBURW51bUluZm8+O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hQdWJsaWNFbnVtcyA9IGFzeW5jIChwb29sOiBQb29sKTogUHJvbWlzZTxUR3JvdXBlZEVudW1zPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxURW51bVZhbHVlUm93PihgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgdC50eXBuYW1lIEFTIGVudW1fbmFtZSxcbiAgICAgICAgICAgIGUuZW51bWxhYmVsIEFTIHZhbHVlLFxuICAgICAgICAgICAgZS5lbnVtc29ydG9yZGVyIEFTIHNvcnRfb3JkZXIsXG4gICAgICAgICAgICBvYmpfZGVzY3JpcHRpb24odC5vaWQsICdwZ190eXBlJykgQVMgY29tbWVudFxuICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfdHlwZSB0XG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19lbnVtIGUgT04gdC5vaWQgPSBlLmVudW10eXBpZFxuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gdC50eXBuYW1lc3BhY2UgPSBuLm9pZFxuICAgICAgICBXSEVSRSBuLm5zcG5hbWUgPSAncHVibGljJ1xuICAgICAgICBPUkRFUiBCWSBlbnVtX25hbWUsIHNvcnRfb3JkZXJcbiAgICBgKTtcblxuICAgIGNvbnN0IGdyb3VwZWQgPSBncm91cEJ5KHJlc3VsdC5yb3dzLCAocm93KSA9PiByb3cuZW51bV9uYW1lKTtcblxuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGdyb3VwZWQpLm1hcCgoW25hbWUsIHJvd3NdKSA9PiBbXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhbHVlczogcm93cy5tYXAoKHIpID0+IHIudmFsdWUpLFxuICAgICAgICAgICAgICAgIGNvbW1lbnQ6IHJvd3NbMF0/LmNvbW1lbnQgPz8gbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0pLFxuICAgICk7XG59O1xuIiwgImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbmV4cG9ydCB0eXBlIFRJbmRleEluZm8gPSB7XG4gICAgaW5kZXhfbmFtZTogc3RyaW5nO1xuICAgIHJlbGF0aW9uX25hbWU6IHN0cmluZztcbiAgICBpc191bmlxdWU6IGJvb2xlYW47XG4gICAgaXNfcHJpbWFyeTogYm9vbGVhbjtcbiAgICBpc19leGNsdXNpb246IGJvb2xlYW47XG4gICAgaXNfcGFydGlhbDogYm9vbGVhbjtcbiAgICBwYXJ0aWFsX3ByZWRpY2F0ZTogc3RyaW5nIHwgbnVsbDtcbiAgICBhdHRyaWJ1dGVzOiBzdHJpbmdbXTtcbiAgICBleGNsdXNpb25fb3BlcmF0b3JzOiBzdHJpbmdbXSB8IG51bGw7XG4gICAgZGVmaW5pdGlvbjogc3RyaW5nO1xuICAgIGNvbW1lbnQ6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hSZWxhdGlvbkluZGV4ZXMgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICByZWxhdGlvbk5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8VEluZGV4SW5mb1tdPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxUSW5kZXhJbmZvPihcbiAgICAgICAgYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIGkucmVsbmFtZSBBUyBpbmRleF9uYW1lLFxuICAgICAgICAgICAgdC5yZWxuYW1lIEFTIHJlbGF0aW9uX25hbWUsXG4gICAgICAgICAgICBpeC5pbmRpc3VuaXF1ZSBBUyBpc191bmlxdWUsXG4gICAgICAgICAgICBpeC5pbmRpc3ByaW1hcnkgQVMgaXNfcHJpbWFyeSxcbiAgICAgICAgICAgIGl4LmluZGlzZXhjbHVzaW9uIEFTIGlzX2V4Y2x1c2lvbixcbiAgICAgICAgICAgIGl4LmluZHByZWQgSVMgTk9UIE5VTEwgQVMgaXNfcGFydGlhbCxcbiAgICAgICAgICAgIHBnX2dldF9leHByKGl4LmluZHByZWQsIGl4LmluZHJlbGlkKSBBUyBwYXJ0aWFsX3ByZWRpY2F0ZSxcbiAgICAgICAgICAgIEFSUkFZKFxuICAgICAgICAgICAgICAgIFNFTEVDVCBwZ19nZXRfaW5kZXhkZWYoaXguaW5kZXhyZWxpZCwgayArIDEsIHRydWUpXG4gICAgICAgICAgICAgICAgRlJPTSBnZW5lcmF0ZV9zdWJzY3JpcHRzKGl4LmluZGtleSwgMSkgQVMga1xuICAgICAgICAgICAgICAgIE9SREVSIEJZIGtcbiAgICAgICAgICAgICkgQVMgYXR0cmlidXRlcyxcbiAgICAgICAgICAgIENBU0VcbiAgICAgICAgICAgICAgICBXSEVOIGl4LmluZGlzZXhjbHVzaW9uIFRIRU4gKFxuICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgQVJSQVlfQUdHKG9wLm9wcm5hbWUgT1JERVIgQlkgb3JkLm4pXG4gICAgICAgICAgICAgICAgICAgIEZST00gcGdfY29uc3RyYWludCBjb25cbiAgICAgICAgICAgICAgICAgICAgQ1JPU1MgSk9JTiBMQVRFUkFMIHVubmVzdChjb24uY29uZXhjbG9wKSBXSVRIIE9SRElOQUxJVFkgQVMgb3JkKG9wb2lkLCBuKVxuICAgICAgICAgICAgICAgICAgICBKT0lOIHBnX29wZXJhdG9yIG9wIE9OIG9wLm9pZCA9IG9yZC5vcG9pZFxuICAgICAgICAgICAgICAgICAgICBXSEVSRSBjb24uY29uaW5kaWQgPSBpeC5pbmRleHJlbGlkXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIEVMU0UgTlVMTFxuICAgICAgICAgICAgRU5EIEFTIGV4Y2x1c2lvbl9vcGVyYXRvcnMsXG4gICAgICAgICAgICBwZ19nZXRfaW5kZXhkZWYoaXguaW5kZXhyZWxpZCkgQVMgZGVmaW5pdGlvbixcbiAgICAgICAgICAgIG9ial9kZXNjcmlwdGlvbihpLm9pZCwgJ3BnX2NsYXNzJykgQVMgY29tbWVudFxuICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfaW5kZXggaXhcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIGkgT04gaS5vaWQgPSBpeC5pbmRleHJlbGlkXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyB0IE9OIHQub2lkID0gaXguaW5kcmVsaWRcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gdC5yZWxuYW1lc3BhY2VcbiAgICAgICAgV0hFUkUgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgIEFORCB0LnJlbG5hbWUgPSAkMVxuICAgICAgICBPUkRFUiBCWSBpLnJlbG5hbWVcbiAgICAgICAgYCxcbiAgICAgICAgW3JlbGF0aW9uTmFtZV0sXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93cztcbn07XG4iLCAiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxudHlwZSBURm9yZWlnbktleUFjdGlvbiA9XG4gICAgfCAnTk8gQUNUSU9OJ1xuICAgIHwgJ1JFU1RSSUNUJ1xuICAgIHwgJ0NBU0NBREUnXG4gICAgfCAnU0VUIE5VTEwnXG4gICAgfCAnU0VUIERFRkFVTFQnO1xuXG5leHBvcnQgdHlwZSBURm9yZWlnbktleUluZm8gPSB7XG4gICAgY29uc3RyYWludF9uYW1lOiBzdHJpbmc7XG4gICAgYXR0cmlidXRlczogc3RyaW5nW107XG4gICAgcmVmZXJlbmNlZF9yZWxhdGlvbjogc3RyaW5nO1xuICAgIHJlZmVyZW5jZWRfYXR0cmlidXRlczogc3RyaW5nW107XG4gICAgb25fdXBkYXRlOiBURm9yZWlnbktleUFjdGlvbjtcbiAgICBvbl9kZWxldGU6IFRGb3JlaWduS2V5QWN0aW9uO1xuICAgIGNvbW1lbnQ6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hSZWxhdGlvbkZvcmVpZ25LZXlzID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgcmVsYXRpb25OYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPFRGb3JlaWduS2V5SW5mb1tdPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxURm9yZWlnbktleUluZm8+KFxuICAgICAgICBgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgY29uLmNvbm5hbWUgQVMgY29uc3RyYWludF9uYW1lLFxuICAgICAgICAgICAgQVJSQVkoXG4gICAgICAgICAgICAgICAgU0VMRUNUIGEuYXR0bmFtZVxuICAgICAgICAgICAgICAgIEZST00gdW5uZXN0KGNvbi5jb25rZXkpIFdJVEggT1JESU5BTElUWSBBUyBjb2xzKGF0dG51bSwgb3JkKVxuICAgICAgICAgICAgICAgIEpPSU4gcGdfYXR0cmlidXRlIGEgT04gYS5hdHRyZWxpZCA9IGNvbi5jb25yZWxpZCBBTkQgYS5hdHRudW0gPSBjb2xzLmF0dG51bVxuICAgICAgICAgICAgICAgIE9SREVSIEJZIGNvbHMub3JkXG4gICAgICAgICAgICApOjp0ZXh0W10gQVMgYXR0cmlidXRlcyxcbiAgICAgICAgICAgIHJlZl9jbC5yZWxuYW1lIEFTIHJlZmVyZW5jZWRfcmVsYXRpb24sXG4gICAgICAgICAgICBBUlJBWShcbiAgICAgICAgICAgICAgICBTRUxFQ1QgYS5hdHRuYW1lXG4gICAgICAgICAgICAgICAgRlJPTSB1bm5lc3QoY29uLmNvbmZrZXkpIFdJVEggT1JESU5BTElUWSBBUyBjb2xzKGF0dG51bSwgb3JkKVxuICAgICAgICAgICAgICAgIEpPSU4gcGdfYXR0cmlidXRlIGEgT04gYS5hdHRyZWxpZCA9IGNvbi5jb25mcmVsaWQgQU5EIGEuYXR0bnVtID0gY29scy5hdHRudW1cbiAgICAgICAgICAgICAgICBPUkRFUiBCWSBjb2xzLm9yZFxuICAgICAgICAgICAgKTo6dGV4dFtdIEFTIHJlZmVyZW5jZWRfYXR0cmlidXRlcyxcbiAgICAgICAgICAgIENBU0UgY29uLmNvbmZ1cGR0eXBlXG4gICAgICAgICAgICAgICAgV0hFTiAnYScgVEhFTiAnTk8gQUNUSU9OJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ3InIFRIRU4gJ1JFU1RSSUNUJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ2MnIFRIRU4gJ0NBU0NBREUnXG4gICAgICAgICAgICAgICAgV0hFTiAnbicgVEhFTiAnU0VUIE5VTEwnXG4gICAgICAgICAgICAgICAgV0hFTiAnZCcgVEhFTiAnU0VUIERFRkFVTFQnXG4gICAgICAgICAgICBFTkQgQVMgb25fdXBkYXRlLFxuICAgICAgICAgICAgQ0FTRSBjb24uY29uZmRlbHR5cGVcbiAgICAgICAgICAgICAgICBXSEVOICdhJyBUSEVOICdOTyBBQ1RJT04nXG4gICAgICAgICAgICAgICAgV0hFTiAncicgVEhFTiAnUkVTVFJJQ1QnXG4gICAgICAgICAgICAgICAgV0hFTiAnYycgVEhFTiAnQ0FTQ0FERSdcbiAgICAgICAgICAgICAgICBXSEVOICduJyBUSEVOICdTRVQgTlVMTCdcbiAgICAgICAgICAgICAgICBXSEVOICdkJyBUSEVOICdTRVQgREVGQVVMVCdcbiAgICAgICAgICAgIEVORCBBUyBvbl9kZWxldGUsXG4gICAgICAgICAgICBvYmpfZGVzY3JpcHRpb24oY29uLm9pZCwgJ3BnX2NvbnN0cmFpbnQnKSBBUyBjb21tZW50XG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19jb25zdHJhaW50IGNvblxuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgY2wgT04gY2wub2lkID0gY29uLmNvbnJlbGlkXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyByZWZfY2wgT04gcmVmX2NsLm9pZCA9IGNvbi5jb25mcmVsaWRcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gY2wucmVsbmFtZXNwYWNlXG4gICAgICAgIFdIRVJFIGNvbi5jb250eXBlID0gJ2YnXG4gICAgICAgICAgICBBTkQgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgIEFORCBjbC5yZWxuYW1lID0gJDFcbiAgICAgICAgT1JERVIgQlkgY29uLmNvbm5hbWVcbiAgICAgICAgYCxcbiAgICAgICAgW3JlbGF0aW9uTmFtZV0sXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93cztcbn07XG4iLCAiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxuZXhwb3J0IHR5cGUgVFJlbGF0aW9uRmlsZVN0YXRzID0ge1xuICAgIHJlbGF0aW9uX25hbWU6IHN0cmluZztcbiAgICBmaWxlX3BhdGg6IHN0cmluZyB8IG51bGw7XG4gICAgbW9kaWZpY2F0aW9uX3RpbWU6IERhdGU7XG4gICAgc2l6ZV9ieXRlczogbnVtYmVyO1xuICAgIGlzX3BhcnRpdGlvbmVkOiBib29sZWFuO1xuICAgIHBhcnRpdGlvbl9jb3VudDogbnVtYmVyIHwgbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFJlbGF0aW9uRmlsZVN0YXRzID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgcmVsYXRpb25OYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPFRSZWxhdGlvbkZpbGVTdGF0cz4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VFJlbGF0aW9uRmlsZVN0YXRzPihcbiAgICAgICAgYFxuICAgICAgICBXSVRIIHRhcmdldCBBUyAoXG4gICAgICAgICAgICBTRUxFQ1QgYy5vaWQsIGMucmVsbmFtZSwgYy5yZWxraW5kXG4gICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgY1xuICAgICAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gYy5yZWxuYW1lc3BhY2VcbiAgICAgICAgICAgIFdIRVJFIG4ubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgICAgICAgQU5EIGMucmVsbmFtZSA9ICQxXG4gICAgICAgICAgICAgICAgQU5EIGMucmVsa2luZCBJTiAoJ3InLCAncCcsICdtJylcbiAgICAgICAgKSxcbiAgICAgICAgcGFydGl0aW9uX3N0YXRzIEFTIChcbiAgICAgICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgICAgIChwZ19zdGF0X2ZpbGUocGdfcmVsYXRpb25fZmlsZXBhdGgoY2hpbGQub2lkKSkpLm1vZGlmaWNhdGlvbiBBUyBtb2RpZmljYXRpb25fdGltZSxcbiAgICAgICAgICAgICAgICAocGdfc3RhdF9maWxlKHBnX3JlbGF0aW9uX2ZpbGVwYXRoKGNoaWxkLm9pZCkpKS5zaXplIEFTIHNpemVfYnl0ZXNcbiAgICAgICAgICAgIEZST00gdGFyZ2V0IHRcbiAgICAgICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19pbmhlcml0cyBpIE9OIGkuaW5ocGFyZW50ID0gdC5vaWRcbiAgICAgICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBjaGlsZCBPTiBjaGlsZC5vaWQgPSBpLmluaHJlbGlkXG4gICAgICAgICAgICBXSEVSRSB0LnJlbGtpbmQgPSAncCdcbiAgICAgICAgKVxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIHQucmVsbmFtZSBBUyByZWxhdGlvbl9uYW1lLFxuICAgICAgICAgICAgQ0FTRVxuICAgICAgICAgICAgICAgIFdIRU4gdC5yZWxraW5kID0gJ3AnIFRIRU4gTlVMTFxuICAgICAgICAgICAgICAgIEVMU0UgcGdfcmVsYXRpb25fZmlsZXBhdGgodC5vaWQpXG4gICAgICAgICAgICBFTkQgQVMgZmlsZV9wYXRoLFxuICAgICAgICAgICAgQ0FTRVxuICAgICAgICAgICAgICAgIFdIRU4gdC5yZWxraW5kID0gJ3AnIFRIRU4gKFNFTEVDVCBNQVgobW9kaWZpY2F0aW9uX3RpbWUpIEZST00gcGFydGl0aW9uX3N0YXRzKVxuICAgICAgICAgICAgICAgIEVMU0UgKHBnX3N0YXRfZmlsZShwZ19yZWxhdGlvbl9maWxlcGF0aCh0Lm9pZCkpKS5tb2RpZmljYXRpb25cbiAgICAgICAgICAgIEVORCBBUyBtb2RpZmljYXRpb25fdGltZSxcbiAgICAgICAgICAgIENBU0VcbiAgICAgICAgICAgICAgICBXSEVOIHQucmVsa2luZCA9ICdwJyBUSEVOIChTRUxFQ1QgQ09BTEVTQ0UoU1VNKHNpemVfYnl0ZXMpLCAwKSBGUk9NIHBhcnRpdGlvbl9zdGF0cylcbiAgICAgICAgICAgICAgICBFTFNFIChwZ19zdGF0X2ZpbGUocGdfcmVsYXRpb25fZmlsZXBhdGgodC5vaWQpKSkuc2l6ZVxuICAgICAgICAgICAgRU5EIEFTIHNpemVfYnl0ZXMsXG4gICAgICAgICAgICB0LnJlbGtpbmQgPSAncCcgQVMgaXNfcGFydGl0aW9uZWQsXG4gICAgICAgICAgICBDQVNFXG4gICAgICAgICAgICAgICAgV0hFTiB0LnJlbGtpbmQgPSAncCcgVEhFTiAoU0VMRUNUIENPVU5UKCopIEZST00gcGFydGl0aW9uX3N0YXRzKVxuICAgICAgICAgICAgICAgIEVMU0UgTlVMTFxuICAgICAgICAgICAgRU5EIEFTIHBhcnRpdGlvbl9jb3VudFxuICAgICAgICBGUk9NIHRhcmdldCB0XG4gICAgICAgIGAsXG4gICAgICAgIFtyZWxhdGlvbk5hbWVdLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3NbMF07XG59O1xuIiwgImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbmV4cG9ydCBjb25zdCBhbmFseXplUmVsYXRpb24gPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICByZWxhdGlvbk5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIC8vIFZhbGlkYXRlIHJlbGF0aW9uIGV4aXN0cyBhbmQgZ2V0IHByb3Blcmx5IHF1b3RlZCBuYW1lIHRvIHByZXZlbnQgU1FMIGluamVjdGlvblxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSBhd2FpdCBwb29sLnF1ZXJ5PHtxdW90ZWRfbmFtZTogc3RyaW5nfT4oXG4gICAgICAgIGBcbiAgICAgICAgU0VMRUNUIGZvcm1hdCgnJUknLCBjLnJlbG5hbWUpIEFTIHF1b3RlZF9uYW1lXG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlXG4gICAgICAgIFdIRVJFIG4ubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgICBBTkQgYy5yZWxuYW1lID0gJDFcbiAgICAgICAgICAgIEFORCBjLnJlbGtpbmQgSU4gKCdyJywgJ3AnLCAnbScpXG4gICAgICAgIGAsXG4gICAgICAgIFtyZWxhdGlvbk5hbWVdLFxuICAgICk7XG5cbiAgICBpZiAodmFsaWRhdGlvbi5yb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgUmVsYXRpb24gXCIke3JlbGF0aW9uTmFtZX1cIiBub3QgZm91bmQgaW4gcHVibGljIHNjaGVtYWAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYXdhaXQgcG9vbC5xdWVyeShgQU5BTFlaRSBwdWJsaWMuJHt2YWxpZGF0aW9uLnJvd3NbMF0ucXVvdGVkX25hbWV9YCk7XG59O1xuIiwgImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbmV4cG9ydCB0eXBlIFRBdHRyaWJ1dGVTdGF0cyA9IHtcbiAgICBhdHRyaWJ1dGVfbmFtZTogc3RyaW5nO1xuICAgIGVzdGltYXRlZF9kaXN0aW5jdDogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgVFJlbGF0aW9uU3RhdHMgPSB7XG4gICAgcmVsYXRpb25fbmFtZTogc3RyaW5nO1xuICAgIGVzdGltYXRlZF9yb3dfY291bnQ6IG51bWJlcjtcbiAgICBhdHRyaWJ1dGVzOiBUQXR0cmlidXRlU3RhdHNbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFJlbGF0aW9uU3RhdHMgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICByZWxhdGlvbk5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8VFJlbGF0aW9uU3RhdHM+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PFxuICAgICAgICBUQXR0cmlidXRlU3RhdHMgJiB7cmVsYXRpb25fbmFtZTogc3RyaW5nOyBlc3RpbWF0ZWRfcm93X2NvdW50OiBudW1iZXJ9XG4gICAgPihcbiAgICAgICAgYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIHMudGFibGVuYW1lIEFTIHJlbGF0aW9uX25hbWUsXG4gICAgICAgICAgICBjLnJlbHR1cGxlczo6YmlnaW50IEFTIGVzdGltYXRlZF9yb3dfY291bnQsXG4gICAgICAgICAgICBzLmF0dG5hbWUgQVMgYXR0cmlidXRlX25hbWUsXG4gICAgICAgICAgICBDQVNFXG4gICAgICAgICAgICAgICAgV0hFTiBzLm5fZGlzdGluY3QgPiAwIFRIRU4gcy5uX2Rpc3RpbmN0XG4gICAgICAgICAgICAgICAgRUxTRSBhYnMocy5uX2Rpc3RpbmN0KSAqIGMucmVsdHVwbGVzXG4gICAgICAgICAgICBFTkQ6OmJpZ2ludCBBUyBlc3RpbWF0ZWRfZGlzdGluY3RcbiAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX3N0YXRzIHNcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIGMgT04gYy5yZWxuYW1lID0gcy50YWJsZW5hbWVcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gYy5yZWxuYW1lc3BhY2UgQU5EIG4ubnNwbmFtZSA9IHMuc2NoZW1hbmFtZVxuICAgICAgICBXSEVSRSBzLnNjaGVtYW5hbWUgPSAncHVibGljJ1xuICAgICAgICAgICAgQU5EIHMudGFibGVuYW1lID0gJDFcbiAgICAgICAgT1JERVIgQlkgcy5hdHRuYW1lXG4gICAgICAgIGAsXG4gICAgICAgIFtyZWxhdGlvbk5hbWVdLFxuICAgICk7XG5cbiAgICBpZiAocmVzdWx0LnJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZWxhdGlvbl9uYW1lOiByZWxhdGlvbk5hbWUsXG4gICAgICAgICAgICBlc3RpbWF0ZWRfcm93X2NvdW50OiAwLFxuICAgICAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVsYXRpb25fbmFtZTogcmVzdWx0LnJvd3NbMF0ucmVsYXRpb25fbmFtZSxcbiAgICAgICAgZXN0aW1hdGVkX3Jvd19jb3VudDogTnVtYmVyKHJlc3VsdC5yb3dzWzBdLmVzdGltYXRlZF9yb3dfY291bnQpLFxuICAgICAgICBhdHRyaWJ1dGVzOiByZXN1bHQucm93cy5tYXAoKHthdHRyaWJ1dGVfbmFtZSwgZXN0aW1hdGVkX2Rpc3RpbmN0fSkgPT4gKHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZV9uYW1lLFxuICAgICAgICAgICAgZXN0aW1hdGVkX2Rpc3RpbmN0OiBOdW1iZXIoZXN0aW1hdGVkX2Rpc3RpbmN0KSxcbiAgICAgICAgfSkpLFxuICAgIH07XG59O1xuIiwgImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbmV4cG9ydCB0eXBlIFRTYW1wbGVTdHJhdGVneSA9ICdkaXN0aW5jdCcgfCAncmFuZG9tJztcblxuZXhwb3J0IHR5cGUgVENvbHVtblNhbXBsZSA9IHtcbiAgICByZWFkb25seSBjb2x1bW5fbmFtZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHN0cmF0ZWd5OiBUU2FtcGxlU3RyYXRlZ3k7XG4gICAgcmVhZG9ubHkgdmFsdWVzOiByZWFkb25seSBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFRDb21wb3NpdGVTdWJGaWVsZCA9IHtcbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZGF0YV90eXBlOiBzdHJpbmc7XG59O1xuXG5jb25zdCBxdW90ZUlkZW50ID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiBgXCIke25hbWUucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImA7XG5cbmNvbnN0IExPV19DQVJESU5BTElUWV9USFJFU0hPTEQgPSAyNTY7XG5jb25zdCBMT1dfQ0FSRElOQUxJVFlfTElNSVQgPSAyNTY7XG5jb25zdCBISUdIX0NBUkRJTkFMSVRZX0xJTUlUID0gNjQ7XG5jb25zdCBCRVJOT1VMTElfT1ZFUlNBTVBMRV9GQUNUT1IgPSAxMDtcblxuY29uc3Qgc2FtcGxlRGlzdGluY3QgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW5FeHByOiBzdHJpbmcsXG4gICAgbGltaXQ6IG51bWJlcixcbik6IFByb21pc2U8cmVhZG9ubHkgc3RyaW5nW10+ID0+IHtcbiAgICBjb25zdCBzcWwgPSBgU0VMRUNUIERJU1RJTkNUICR7Y29sdW1uRXhwcn06OnRleHQgQVMgdmFsIEZST00gJHtxdW90ZUlkZW50KHRhYmxlTmFtZSl9IFdIRVJFICR7Y29sdW1uRXhwcn0gSVMgTk9UIE5VTEwgTElNSVQgJDFgO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8e3ZhbDogc3RyaW5nfT4oc3FsLCBbbGltaXRdKTtcbiAgICByZXR1cm4gcmVzdWx0LnJvd3MubWFwKChyKSA9PiByLnZhbCk7XG59O1xuXG5jb25zdCBzYW1wbGVCZXJub3VsbGkgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW5FeHByOiBzdHJpbmcsXG4gICAgZXN0aW1hdGVkUm93Q291bnQ6IG51bWJlcixcbiAgICBsaW1pdDogbnVtYmVyLFxuKTogUHJvbWlzZTxyZWFkb25seSBzdHJpbmdbXT4gPT4ge1xuICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1pbihcbiAgICAgICAgMTAwLFxuICAgICAgICAobGltaXQgLyBNYXRoLm1heChlc3RpbWF0ZWRSb3dDb3VudCwgMSkpICpcbiAgICAgICAgICAgIDEwMCAqXG4gICAgICAgICAgICBCRVJOT1VMTElfT1ZFUlNBTVBMRV9GQUNUT1IsXG4gICAgKTtcbiAgICBjb25zdCBzcWwgPSBgU0VMRUNUIERJU1RJTkNUICR7Y29sdW1uRXhwcn06OnRleHQgQVMgdmFsIEZST00gJHtxdW90ZUlkZW50KHRhYmxlTmFtZSl9IFRBQkxFU0FNUExFIEJFUk5PVUxMSSgkMSkgV0hFUkUgJHtjb2x1bW5FeHByfSBJUyBOT1QgTlVMTCBMSU1JVCAkMmA7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTx7dmFsOiBzdHJpbmd9PihzcWwsIFtwZXJjZW50YWdlLCBsaW1pdF0pO1xuICAgIHJldHVybiByZXN1bHQucm93cy5tYXAoKHIpID0+IHIudmFsKTtcbn07XG5cbmNvbnN0IHNhbXBsZVBsYWluTGltaXQgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW5FeHByOiBzdHJpbmcsXG4gICAgbGltaXQ6IG51bWJlcixcbik6IFByb21pc2U8cmVhZG9ubHkgc3RyaW5nW10+ID0+IHtcbiAgICBjb25zdCBzcWwgPSBgU0VMRUNUICR7Y29sdW1uRXhwcn06OnRleHQgQVMgdmFsIEZST00gJHtxdW90ZUlkZW50KHRhYmxlTmFtZSl9IFdIRVJFICR7Y29sdW1uRXhwcn0gSVMgTk9UIE5VTEwgTElNSVQgJDFgO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8e3ZhbDogc3RyaW5nfT4oc3FsLCBbbGltaXRdKTtcbiAgICByZXR1cm4gcmVzdWx0LnJvd3MubWFwKChyKSA9PiByLnZhbCk7XG59O1xuXG5leHBvcnQgdHlwZSBUUmVsYXRpb25LaW5kID1cbiAgICB8ICd0YWJsZSdcbiAgICB8ICdwYXJ0aXRpb25lZF90YWJsZSdcbiAgICB8ICd2aWV3J1xuICAgIHwgJ21hdGVyaWFsaXplZF92aWV3JztcblxuY29uc3Qgc3VwcG9ydHNUYWJsZVNhbXBsZSA9IChraW5kOiBUUmVsYXRpb25LaW5kKTogYm9vbGVhbiA9PlxuICAgIGtpbmQgPT09ICd0YWJsZScgfHxcbiAgICBraW5kID09PSAncGFydGl0aW9uZWRfdGFibGUnIHx8XG4gICAga2luZCA9PT0gJ21hdGVyaWFsaXplZF92aWV3JztcblxuZXhwb3J0IGNvbnN0IHNhbXBsZUNvbHVtbiA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBlc3RpbWF0ZWREaXN0aW5jdDogbnVtYmVyLFxuICAgIGVzdGltYXRlZFJvd0NvdW50OiBudW1iZXIsXG4gICAgcmVsYXRpb25LaW5kOiBUUmVsYXRpb25LaW5kLFxuKTogUHJvbWlzZTxUQ29sdW1uU2FtcGxlPiA9PiB7XG4gICAgY29uc3QgY29sdW1uRXhwciA9IHF1b3RlSWRlbnQoY29sdW1uTmFtZSk7XG4gICAgY29uc3QgaXNMb3dDYXJkaW5hbGl0eSA9XG4gICAgICAgIGVzdGltYXRlZERpc3RpbmN0ID4gMCAmJiBlc3RpbWF0ZWREaXN0aW5jdCA8IExPV19DQVJESU5BTElUWV9USFJFU0hPTEQ7XG5cbiAgICBpZiAoaXNMb3dDYXJkaW5hbGl0eSkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCBzYW1wbGVEaXN0aW5jdChcbiAgICAgICAgICAgIHBvb2wsXG4gICAgICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgICAgICBjb2x1bW5FeHByLFxuICAgICAgICAgICAgTE9XX0NBUkRJTkFMSVRZX0xJTUlULFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge2NvbHVtbl9uYW1lOiBjb2x1bW5OYW1lLCBzdHJhdGVneTogJ2Rpc3RpbmN0JywgdmFsdWVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBsaW1pdCA9IEhJR0hfQ0FSRElOQUxJVFlfTElNSVQ7XG5cbiAgICBjb25zdCB2YWx1ZXMgPVxuICAgICAgICBzdXBwb3J0c1RhYmxlU2FtcGxlKHJlbGF0aW9uS2luZCkgJiYgZXN0aW1hdGVkUm93Q291bnQgPiAwXG4gICAgICAgICAgICA/IGF3YWl0IHNhbXBsZUJlcm5vdWxsaShcbiAgICAgICAgICAgICAgICAgIHBvb2wsXG4gICAgICAgICAgICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICBjb2x1bW5FeHByLFxuICAgICAgICAgICAgICAgICAgZXN0aW1hdGVkUm93Q291bnQsXG4gICAgICAgICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBhd2FpdCBzYW1wbGVQbGFpbkxpbWl0KHBvb2wsIHRhYmxlTmFtZSwgY29sdW1uRXhwciwgbGltaXQpO1xuXG4gICAgcmV0dXJuIHtjb2x1bW5fbmFtZTogY29sdW1uTmFtZSwgc3RyYXRlZ3k6ICdyYW5kb20nLCB2YWx1ZXN9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNhbXBsZUNvbXBvc2l0ZVN1YkZpZWxkID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIHN1YkZpZWxkTmFtZTogc3RyaW5nLFxuICAgIGVzdGltYXRlZERpc3RpbmN0OiBudW1iZXIsXG4gICAgZXN0aW1hdGVkUm93Q291bnQ6IG51bWJlcixcbiAgICByZWxhdGlvbktpbmQ6IFRSZWxhdGlvbktpbmQsXG4pOiBQcm9taXNlPFRDb2x1bW5TYW1wbGU+ID0+IHtcbiAgICBjb25zdCBjb2x1bW5FeHByID0gYCgke3F1b3RlSWRlbnQoY29sdW1uTmFtZSl9KS4ke3F1b3RlSWRlbnQoc3ViRmllbGROYW1lKX1gO1xuICAgIGNvbnN0IGlzTG93Q2FyZGluYWxpdHkgPVxuICAgICAgICBlc3RpbWF0ZWREaXN0aW5jdCA+IDAgJiYgZXN0aW1hdGVkRGlzdGluY3QgPCBMT1dfQ0FSRElOQUxJVFlfVEhSRVNIT0xEO1xuXG4gICAgaWYgKGlzTG93Q2FyZGluYWxpdHkpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgc2FtcGxlRGlzdGluY3QoXG4gICAgICAgICAgICBwb29sLFxuICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgY29sdW1uRXhwcixcbiAgICAgICAgICAgIExPV19DQVJESU5BTElUWV9MSU1JVCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbHVtbl9uYW1lOiBgJHtjb2x1bW5OYW1lfS4ke3N1YkZpZWxkTmFtZX1gLFxuICAgICAgICAgICAgc3RyYXRlZ3k6ICdkaXN0aW5jdCcsXG4gICAgICAgICAgICB2YWx1ZXMsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgbGltaXQgPSBISUdIX0NBUkRJTkFMSVRZX0xJTUlUO1xuXG4gICAgY29uc3QgdmFsdWVzID1cbiAgICAgICAgc3VwcG9ydHNUYWJsZVNhbXBsZShyZWxhdGlvbktpbmQpICYmIGVzdGltYXRlZFJvd0NvdW50ID4gMFxuICAgICAgICAgICAgPyBhd2FpdCBzYW1wbGVCZXJub3VsbGkoXG4gICAgICAgICAgICAgICAgICBwb29sLFxuICAgICAgICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgICAgY29sdW1uRXhwcixcbiAgICAgICAgICAgICAgICAgIGVzdGltYXRlZFJvd0NvdW50LFxuICAgICAgICAgICAgICAgICAgbGltaXQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogYXdhaXQgc2FtcGxlUGxhaW5MaW1pdChwb29sLCB0YWJsZU5hbWUsIGNvbHVtbkV4cHIsIGxpbWl0KTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbl9uYW1lOiBgJHtjb2x1bW5OYW1lfS4ke3N1YkZpZWxkTmFtZX1gLFxuICAgICAgICBzdHJhdGVneTogJ3JhbmRvbScsXG4gICAgICAgIHZhbHVlcyxcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoQ29tcG9zaXRlU3ViRmllbGRzID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgdHlwZU5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8cmVhZG9ubHkgVENvbXBvc2l0ZVN1YkZpZWxkW10+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PHtuYW1lOiBzdHJpbmc7IGRhdGFfdHlwZTogc3RyaW5nfT4oXG4gICAgICAgIGBcbiAgICAgICAgU0VMRUNUIGEuYXR0bmFtZSBBUyBuYW1lLCBmb3JtYXRfdHlwZShhLmF0dHR5cGlkLCBhLmF0dHR5cG1vZCkgQVMgZGF0YV90eXBlXG4gICAgICAgIEZST00gcGdfdHlwZSB0XG4gICAgICAgIEpPSU4gcGdfYXR0cmlidXRlIGEgT04gYS5hdHRyZWxpZCA9IHQudHlwcmVsaWRcbiAgICAgICAgV0hFUkUgdC50eXBuYW1lID0gJDFcbiAgICAgICAgICAgIEFORCBhLmF0dG51bSA+IDBcbiAgICAgICAgICAgIEFORCBOT1QgYS5hdHRpc2Ryb3BwZWRcbiAgICAgICAgT1JERVIgQlkgYS5hdHRudW1cbiAgICAgICAgYCxcbiAgICAgICAgW3R5cGVOYW1lXSxcbiAgICApO1xuICAgIHJldHVybiByZXN1bHQucm93cztcbn07XG4iLCAiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxuZXhwb3J0IHR5cGUgVENoZWNrQ29uc3RyYWludEluZm8gPSB7XG4gICAgcmVsYXRpb25fbmFtZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBleHByZXNzaW9uOiBzdHJpbmc7XG4gICAgaXNfdmFsaWQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hQdWJsaWNDaGVja0NvbnN0cmFpbnRzID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4pOiBQcm9taXNlPFRDaGVja0NvbnN0cmFpbnRJbmZvW10+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PFRDaGVja0NvbnN0cmFpbnRJbmZvPihgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgdC5yZWxuYW1lIEFTIHJlbGF0aW9uX25hbWUsXG4gICAgICAgICAgICBjb24uY29ubmFtZSBBUyBuYW1lLFxuICAgICAgICAgICAgcGdfZ2V0X2NvbnN0cmFpbnRkZWYoY29uLm9pZCwgdHJ1ZSkgQVMgZXhwcmVzc2lvbixcbiAgICAgICAgICAgIGNvbi5jb252YWxpZGF0ZWQgQVMgaXNfdmFsaWRcbiAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX2NvbnN0cmFpbnQgY29uXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyB0IE9OIHQub2lkID0gY29uLmNvbnJlbGlkXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IHQucmVsbmFtZXNwYWNlXG4gICAgICAgIFdIRVJFIG4ubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgICBBTkQgY29uLmNvbnR5cGUgPSAnYydcbiAgICAgICAgT1JERVIgQlkgdC5yZWxuYW1lLCBjb24uY29ubmFtZVxuICAgIGApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzO1xufTtcbiIsICJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBURXh0ZW5zaW9uSW5mbyA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIHNjaGVtYTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoSW5zdGFsbGVkRXh0ZW5zaW9ucyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxURXh0ZW5zaW9uSW5mb1tdPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxURXh0ZW5zaW9uSW5mbz4oYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIGUuZXh0bmFtZSBBUyBuYW1lLFxuICAgICAgICAgICAgZS5leHR2ZXJzaW9uIEFTIHZlcnNpb24sXG4gICAgICAgICAgICBuLm5zcG5hbWUgQVMgc2NoZW1hXG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19leHRlbnNpb24gZVxuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSBlLmV4dG5hbWVzcGFjZVxuICAgICAgICBXSEVSRSBlLmV4dG5hbWUgPD4gJ3BscGdzcWwnXG4gICAgICAgIE9SREVSIEJZIGUuZXh0bmFtZVxuICAgIGApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzO1xufTtcbiIsICJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBUU2VxdWVuY2VJbmZvID0ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkYXRhX3R5cGU6IHN0cmluZztcbiAgICBzdGFydF92YWx1ZTogc3RyaW5nO1xuICAgIG1pbl92YWx1ZTogc3RyaW5nO1xuICAgIG1heF92YWx1ZTogc3RyaW5nO1xuICAgIGluY3JlbWVudDogc3RyaW5nO1xuICAgIGN5Y2xlOiBib29sZWFuO1xuICAgIGNhY2hlX3NpemU6IHN0cmluZztcbiAgICBvd25lZF9ieV90YWJsZTogc3RyaW5nIHwgbnVsbDtcbiAgICBvd25lZF9ieV9jb2x1bW46IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hQdWJsaWNTZXF1ZW5jZXMgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbik6IFByb21pc2U8VFNlcXVlbmNlSW5mb1tdPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxUU2VxdWVuY2VJbmZvPihgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgcy5zZXF1ZW5jZW5hbWUgQVMgbmFtZSxcbiAgICAgICAgICAgIHMuZGF0YV90eXBlOjp0ZXh0IEFTIGRhdGFfdHlwZSxcbiAgICAgICAgICAgIHMuc3RhcnRfdmFsdWU6OnRleHQgQVMgc3RhcnRfdmFsdWUsXG4gICAgICAgICAgICBzLm1pbl92YWx1ZTo6dGV4dCBBUyBtaW5fdmFsdWUsXG4gICAgICAgICAgICBzLm1heF92YWx1ZTo6dGV4dCBBUyBtYXhfdmFsdWUsXG4gICAgICAgICAgICBzLmluY3JlbWVudF9ieTo6dGV4dCBBUyBpbmNyZW1lbnQsXG4gICAgICAgICAgICBzLmN5Y2xlIEFTIGN5Y2xlLFxuICAgICAgICAgICAgcy5jYWNoZV9zaXplOjp0ZXh0IEFTIGNhY2hlX3NpemUsXG4gICAgICAgICAgICB0LnJlbG5hbWUgQVMgb3duZWRfYnlfdGFibGUsXG4gICAgICAgICAgICBhLmF0dG5hbWUgQVMgb3duZWRfYnlfY29sdW1uXG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19zZXF1ZW5jZXMgc1xuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgY1xuICAgICAgICAgICAgT04gYy5yZWxuYW1lID0gcy5zZXF1ZW5jZW5hbWVcbiAgICAgICAgICAgIEFORCBjLnJlbG5hbWVzcGFjZSA9IChTRUxFQ1Qgb2lkIEZST00gcGdfbmFtZXNwYWNlIFdIRVJFIG5zcG5hbWUgPSBzLnNjaGVtYW5hbWUpXG4gICAgICAgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX2RlcGVuZCBkXG4gICAgICAgICAgICBPTiBkLm9iamlkID0gYy5vaWRcbiAgICAgICAgICAgIEFORCBkLmNsYXNzaWQgPSAncGdfY2xhc3MnOjpyZWdjbGFzc1xuICAgICAgICAgICAgQU5EIGQucmVmY2xhc3NpZCA9ICdwZ19jbGFzcyc6OnJlZ2NsYXNzXG4gICAgICAgICAgICBBTkQgZC5kZXB0eXBlID0gJ2EnXG4gICAgICAgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIHQgT04gdC5vaWQgPSBkLnJlZm9iamlkXG4gICAgICAgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX2F0dHJpYnV0ZSBhXG4gICAgICAgICAgICBPTiBhLmF0dHJlbGlkID0gZC5yZWZvYmppZCBBTkQgYS5hdHRudW0gPSBkLnJlZm9ianN1YmlkXG4gICAgICAgIFdIRVJFIHMuc2NoZW1hbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgIE9SREVSIEJZIHMuc2VxdWVuY2VuYW1lXG4gICAgYCk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG59O1xuIiwgImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbmV4cG9ydCB0eXBlIFRUcmlnZ2VySW5mbyA9IHtcbiAgICByZWxhdGlvbl9uYW1lOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlZmluaXRpb246IHN0cmluZztcbiAgICBmdW5jdGlvbl9zY2hlbWE6IHN0cmluZztcbiAgICBmdW5jdGlvbl9uYW1lOiBzdHJpbmc7XG4gICAgaXNfZW5hYmxlZDogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFB1YmxpY1RyaWdnZXJzID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4pOiBQcm9taXNlPFRUcmlnZ2VySW5mb1tdPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxUVHJpZ2dlckluZm8+KGBcbiAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICB0LnJlbG5hbWUgQVMgcmVsYXRpb25fbmFtZSxcbiAgICAgICAgICAgIHRnLnRnbmFtZSBBUyBuYW1lLFxuICAgICAgICAgICAgcGdfZ2V0X3RyaWdnZXJkZWYodGcub2lkLCB0cnVlKSBBUyBkZWZpbml0aW9uLFxuICAgICAgICAgICAgZm5fbnMubnNwbmFtZSBBUyBmdW5jdGlvbl9zY2hlbWEsXG4gICAgICAgICAgICBmbi5wcm9uYW1lIEFTIGZ1bmN0aW9uX25hbWUsXG4gICAgICAgICAgICB0Zy50Z2VuYWJsZWQgPD4gJ0QnIEFTIGlzX2VuYWJsZWRcbiAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX3RyaWdnZXIgdGdcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIHQgT04gdC5vaWQgPSB0Zy50Z3JlbGlkXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IHQucmVsbmFtZXNwYWNlXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19wcm9jIGZuIE9OIGZuLm9pZCA9IHRnLnRnZm9pZFxuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIGZuX25zIE9OIGZuX25zLm9pZCA9IGZuLnByb25hbWVzcGFjZVxuICAgICAgICBXSEVSRSBuLm5zcG5hbWUgPSAncHVibGljJ1xuICAgICAgICAgICAgQU5EIE5PVCB0Zy50Z2lzaW50ZXJuYWxcbiAgICAgICAgT1JERVIgQlkgdC5yZWxuYW1lLCB0Zy50Z25hbWVcbiAgICBgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93cztcbn07XG4iLCAiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxuZXhwb3J0IHR5cGUgVEZ1bmN0aW9uSW5mbyA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgICBhcmd1bWVudF90eXBlczogc3RyaW5nO1xuICAgIHJldHVybl90eXBlOiBzdHJpbmc7XG4gICAgZGVmaW5pdGlvbjogc3RyaW5nO1xuICAgIGlzX3RyaWdnZXI6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hQdWJsaWNGdW5jdGlvbnMgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbik6IFByb21pc2U8VEZ1bmN0aW9uSW5mb1tdPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxURnVuY3Rpb25JbmZvPihgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgcC5wcm9uYW1lIEFTIG5hbWUsXG4gICAgICAgICAgICBsLmxhbm5hbWUgQVMgbGFuZ3VhZ2UsXG4gICAgICAgICAgICBwZ19nZXRfZnVuY3Rpb25fYXJndW1lbnRzKHAub2lkKSBBUyBhcmd1bWVudF90eXBlcyxcbiAgICAgICAgICAgIHBnX2dldF9mdW5jdGlvbl9yZXN1bHQocC5vaWQpIEFTIHJldHVybl90eXBlLFxuICAgICAgICAgICAgcGdfZ2V0X2Z1bmN0aW9uZGVmKHAub2lkKSBBUyBkZWZpbml0aW9uLFxuICAgICAgICAgICAgcC5wcm9yZXR0eXBlID0gJ3RyaWdnZXInOjpyZWd0eXBlIEFTIGlzX3RyaWdnZXJcbiAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX3Byb2MgcFxuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSBwLnByb25hbWVzcGFjZVxuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbGFuZ3VhZ2UgbCBPTiBsLm9pZCA9IHAucHJvbGFuZ1xuICAgICAgICBXSEVSRSBuLm5zcG5hbWUgPSAncHVibGljJ1xuICAgICAgICAgICAgQU5EIHAucHJva2luZCA9ICdmJ1xuICAgICAgICAgICAgQU5EIE5PVCBFWElTVFMgKFxuICAgICAgICAgICAgICAgIFNFTEVDVCAxIEZST00gcGdfY2F0YWxvZy5wZ19kZXBlbmQgZFxuICAgICAgICAgICAgICAgIFdIRVJFIGQub2JqaWQgPSBwLm9pZCBBTkQgZC5kZXB0eXBlID0gJ2UnXG4gICAgICAgICAgICApXG4gICAgICAgIE9SREVSIEJZIHAucHJvbmFtZVxuICAgIGApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzO1xufTtcbiIsICJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBUQ3VzdG9tVHlwZUtpbmQgPSAnY29tcG9zaXRlJyB8ICdkb21haW4nO1xuXG5leHBvcnQgdHlwZSBURG9tYWluSW5mbyA9IHtcbiAgICBraW5kOiAnZG9tYWluJztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYmFzZV90eXBlOiBzdHJpbmc7XG4gICAgbm90X251bGw6IGJvb2xlYW47XG4gICAgZGVmYXVsdF9leHByZXNzaW9uOiBzdHJpbmcgfCBudWxsO1xuICAgIGNoZWNrX2NvbnN0cmFpbnRzOiByZWFkb25seSB7bmFtZTogc3RyaW5nOyBleHByZXNzaW9uOiBzdHJpbmd9W107XG59O1xuXG5leHBvcnQgdHlwZSBUQ29tcG9zaXRlQXR0cmlidXRlID0ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgcG9zaXRpb246IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFRDb21wb3NpdGVJbmZvID0ge1xuICAgIGtpbmQ6ICdjb21wb3NpdGUnO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhdHRyaWJ1dGVzOiByZWFkb25seSBUQ29tcG9zaXRlQXR0cmlidXRlW107XG59O1xuXG5leHBvcnQgdHlwZSBUQ3VzdG9tVHlwZUluZm8gPSBURG9tYWluSW5mbyB8IFRDb21wb3NpdGVJbmZvO1xuXG50eXBlIFREb21haW5Sb3cgPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGJhc2VfdHlwZTogc3RyaW5nO1xuICAgIG5vdF9udWxsOiBib29sZWFuO1xuICAgIGRlZmF1bHRfZXhwcmVzc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgICBjaGVja19jb25zdHJhaW50czogcmVhZG9ubHkge25hbWU6IHN0cmluZzsgZXhwcmVzc2lvbjogc3RyaW5nfVtdIHwgbnVsbDtcbn07XG5cbnR5cGUgVENvbXBvc2l0ZVJvdyA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYXR0cmlidXRlczogcmVhZG9ubHkgVENvbXBvc2l0ZUF0dHJpYnV0ZVtdIHwgbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFB1YmxpY0N1c3RvbVR5cGVzID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4pOiBQcm9taXNlPFRDdXN0b21UeXBlSW5mb1tdPiA9PiB7XG4gICAgY29uc3QgW2RvbWFpbnMsIGNvbXBvc2l0ZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBwb29sLnF1ZXJ5PFREb21haW5Sb3c+KGBcbiAgICAgICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgICAgIHQudHlwbmFtZSBBUyBuYW1lLFxuICAgICAgICAgICAgICAgIGZvcm1hdF90eXBlKHQudHlwYmFzZXR5cGUsIHQudHlwdHlwbW9kKSBBUyBiYXNlX3R5cGUsXG4gICAgICAgICAgICAgICAgdC50eXBub3RudWxsIEFTIG5vdF9udWxsLFxuICAgICAgICAgICAgICAgIHQudHlwZGVmYXVsdCBBUyBkZWZhdWx0X2V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICBTRUxFQ1QganNvbl9hZ2coanNvbl9idWlsZF9vYmplY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAnbmFtZScsIGNvbi5jb25uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cHJlc3Npb24nLCBwZ19nZXRfY29uc3RyYWludGRlZihjb24ub2lkLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICApIE9SREVSIEJZIGNvbi5jb25uYW1lKVxuICAgICAgICAgICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfY29uc3RyYWludCBjb25cbiAgICAgICAgICAgICAgICAgICAgV0hFUkUgY29uLmNvbnR5cGlkID0gdC5vaWRcbiAgICAgICAgICAgICAgICApIEFTIGNoZWNrX2NvbnN0cmFpbnRzXG4gICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfdHlwZSB0XG4gICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSB0LnR5cG5hbWVzcGFjZVxuICAgICAgICAgICAgV0hFUkUgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgICAgICBBTkQgdC50eXB0eXBlID0gJ2QnXG4gICAgICAgICAgICBPUkRFUiBCWSB0LnR5cG5hbWVcbiAgICAgICAgYCksXG4gICAgICAgIHBvb2wucXVlcnk8VENvbXBvc2l0ZVJvdz4oYFxuICAgICAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICAgICAgdC50eXBuYW1lIEFTIG5hbWUsXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICBTRUxFQ1QganNvbl9hZ2coanNvbl9idWlsZF9vYmplY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAnbmFtZScsIGEuYXR0bmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJywgZm9ybWF0X3R5cGUoYS5hdHR0eXBpZCwgYS5hdHR0eXBtb2QpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3Bvc2l0aW9uJywgYS5hdHRudW1cbiAgICAgICAgICAgICAgICAgICAgKSBPUkRFUiBCWSBhLmF0dG51bSlcbiAgICAgICAgICAgICAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX2F0dHJpYnV0ZSBhXG4gICAgICAgICAgICAgICAgICAgIFdIRVJFIGEuYXR0cmVsaWQgPSB0LnR5cHJlbGlkXG4gICAgICAgICAgICAgICAgICAgICAgICBBTkQgYS5hdHRudW0gPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICBBTkQgTk9UIGEuYXR0aXNkcm9wcGVkXG4gICAgICAgICAgICAgICAgKSBBUyBhdHRyaWJ1dGVzXG4gICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfdHlwZSB0XG4gICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSB0LnR5cG5hbWVzcGFjZVxuICAgICAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIGMgT04gYy5vaWQgPSB0LnR5cHJlbGlkXG4gICAgICAgICAgICBXSEVSRSBuLm5zcG5hbWUgPSAncHVibGljJ1xuICAgICAgICAgICAgICAgIEFORCB0LnR5cHR5cGUgPSAnYydcbiAgICAgICAgICAgICAgICBBTkQgYy5yZWxraW5kID0gJ2MnXG4gICAgICAgICAgICBPUkRFUiBCWSB0LnR5cG5hbWVcbiAgICAgICAgYCksXG4gICAgXSk7XG5cbiAgICBjb25zdCBkb21haW5JbmZvczogVERvbWFpbkluZm9bXSA9IGRvbWFpbnMucm93cy5tYXAoKHIpID0+ICh7XG4gICAgICAgIGtpbmQ6ICdkb21haW4nLFxuICAgICAgICBuYW1lOiByLm5hbWUsXG4gICAgICAgIGJhc2VfdHlwZTogci5iYXNlX3R5cGUsXG4gICAgICAgIG5vdF9udWxsOiByLm5vdF9udWxsLFxuICAgICAgICBkZWZhdWx0X2V4cHJlc3Npb246IHIuZGVmYXVsdF9leHByZXNzaW9uLFxuICAgICAgICBjaGVja19jb25zdHJhaW50czogci5jaGVja19jb25zdHJhaW50cyA/PyBbXSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBjb21wb3NpdGVJbmZvczogVENvbXBvc2l0ZUluZm9bXSA9IGNvbXBvc2l0ZXMucm93cy5tYXAoKHIpID0+ICh7XG4gICAgICAgIGtpbmQ6ICdjb21wb3NpdGUnLFxuICAgICAgICBuYW1lOiByLm5hbWUsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHIuYXR0cmlidXRlcyA/PyBbXSxcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gWy4uLmRvbWFpbkluZm9zLCAuLi5jb21wb3NpdGVJbmZvc107XG59O1xuIiwgImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbmV4cG9ydCB0eXBlIFRQb2xpY3lDb21tYW5kID0gJ0FMTCcgfCAnU0VMRUNUJyB8ICdJTlNFUlQnIHwgJ1VQREFURScgfCAnREVMRVRFJztcblxuZXhwb3J0IHR5cGUgVFJlbGF0aW9uUkxTID0ge1xuICAgIHJlbGF0aW9uX25hbWU6IHN0cmluZztcbiAgICBybHNfZW5hYmxlZDogYm9vbGVhbjtcbiAgICBybHNfZm9yY2VkOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVFBvbGljeUluZm8gPSB7XG4gICAgcmVsYXRpb25fbmFtZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwZXJtaXNzaXZlOiBib29sZWFuO1xuICAgIHJvbGVzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgICBjb21tYW5kOiBUUG9saWN5Q29tbWFuZDtcbiAgICB1c2luZ19leHByZXNzaW9uOiBzdHJpbmcgfCBudWxsO1xuICAgIHdpdGhfY2hlY2tfZXhwcmVzc2lvbjogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFB1YmxpY1JMUyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTx7XG4gICAgcmVhZG9ubHkgcmVsYXRpb25zOiByZWFkb25seSBUUmVsYXRpb25STFNbXTtcbiAgICByZWFkb25seSBwb2xpY2llczogcmVhZG9ubHkgVFBvbGljeUluZm9bXTtcbn0+ID0+IHtcbiAgICBjb25zdCBbcmVsYXRpb25zLCBwb2xpY2llc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHBvb2wucXVlcnk8VFJlbGF0aW9uUkxTPihgXG4gICAgICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgICAgICBjLnJlbG5hbWUgQVMgcmVsYXRpb25fbmFtZSxcbiAgICAgICAgICAgICAgICBjLnJlbHJvd3NlY3VyaXR5IEFTIHJsc19lbmFibGVkLFxuICAgICAgICAgICAgICAgIGMucmVsZm9yY2Vyb3dzZWN1cml0eSBBUyBybHNfZm9yY2VkXG4gICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgY1xuICAgICAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gYy5yZWxuYW1lc3BhY2VcbiAgICAgICAgICAgIFdIRVJFIG4ubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgICAgICAgQU5EIGMucmVsa2luZCBJTiAoJ3InLCAncCcpXG4gICAgICAgICAgICAgICAgQU5EIChjLnJlbHJvd3NlY3VyaXR5IE9SIGMucmVsZm9yY2Vyb3dzZWN1cml0eSlcbiAgICAgICAgICAgIE9SREVSIEJZIGMucmVsbmFtZVxuICAgICAgICBgKSxcbiAgICAgICAgcG9vbC5xdWVyeTxUUG9saWN5SW5mbz4oYFxuICAgICAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICAgICAgdC5yZWxuYW1lIEFTIHJlbGF0aW9uX25hbWUsXG4gICAgICAgICAgICAgICAgcG9sLnBvbG5hbWUgQVMgbmFtZSxcbiAgICAgICAgICAgICAgICBwb2wucG9scGVybWlzc2l2ZSBBUyBwZXJtaXNzaXZlLFxuICAgICAgICAgICAgICAgIENPQUxFU0NFKFxuICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgYXJyYXlfYWdnKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBU0UgV0hFTiByID0gMCBUSEVOICdwdWJsaWMnIEVMU0UgcGdfZ2V0X3VzZXJieWlkKHIpIEVORFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SREVSIEJZIHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIEZST00gdW5uZXN0KHBvbC5wb2xyb2xlcykgQVMgclxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBBUlJBWVtdOjp0ZXh0W11cbiAgICAgICAgICAgICAgICApIEFTIHJvbGVzLFxuICAgICAgICAgICAgICAgIENBU0UgcG9sLnBvbGNtZFxuICAgICAgICAgICAgICAgICAgICBXSEVOICcqJyBUSEVOICdBTEwnXG4gICAgICAgICAgICAgICAgICAgIFdIRU4gJ3InIFRIRU4gJ1NFTEVDVCdcbiAgICAgICAgICAgICAgICAgICAgV0hFTiAnYScgVEhFTiAnSU5TRVJUJ1xuICAgICAgICAgICAgICAgICAgICBXSEVOICd3JyBUSEVOICdVUERBVEUnXG4gICAgICAgICAgICAgICAgICAgIFdIRU4gJ2QnIFRIRU4gJ0RFTEVURSdcbiAgICAgICAgICAgICAgICBFTkQgQVMgY29tbWFuZCxcbiAgICAgICAgICAgICAgICBwZ19nZXRfZXhwcihwb2wucG9scXVhbCwgcG9sLnBvbHJlbGlkKSBBUyB1c2luZ19leHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIHBnX2dldF9leHByKHBvbC5wb2x3aXRoY2hlY2ssIHBvbC5wb2xyZWxpZCkgQVMgd2l0aF9jaGVja19leHByZXNzaW9uXG4gICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfcG9saWN5IHBvbFxuICAgICAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIHQgT04gdC5vaWQgPSBwb2wucG9scmVsaWRcbiAgICAgICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IHQucmVsbmFtZXNwYWNlXG4gICAgICAgICAgICBXSEVSRSBuLm5zcG5hbWUgPSAncHVibGljJ1xuICAgICAgICAgICAgT1JERVIgQlkgdC5yZWxuYW1lLCBwb2wucG9sbmFtZVxuICAgICAgICBgKSxcbiAgICBdKTtcblxuICAgIHJldHVybiB7cmVsYXRpb25zOiByZWxhdGlvbnMucm93cywgcG9saWNpZXM6IHBvbGljaWVzLnJvd3N9O1xufTtcbiIsICJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBUQXR0cmlidXRlUGxhbm5lclN0YXRzID0ge1xuICAgIGF0dHJpYnV0ZV9uYW1lOiBzdHJpbmc7XG4gICAgaW5oZXJpdGVkOiBib29sZWFuO1xuICAgIG51bGxfZnJhYzogbnVtYmVyO1xuICAgIGF2Z193aWR0aDogbnVtYmVyO1xuICAgIG5fZGlzdGluY3Q6IG51bWJlcjtcbiAgICBtb3N0X2NvbW1vbl92YWxzOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgbW9zdF9jb21tb25fZnJlcXM6IHJlYWRvbmx5IG51bWJlcltdIHwgbnVsbDtcbiAgICBoaXN0b2dyYW1fYm91bmRzOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgY29ycmVsYXRpb246IG51bWJlciB8IG51bGw7XG4gICAgbW9zdF9jb21tb25fZWxlbXM6IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbDtcbiAgICBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzOiByZWFkb25seSBudW1iZXJbXSB8IG51bGw7XG4gICAgZWxlbV9jb3VudF9oaXN0b2dyYW06IHJlYWRvbmx5IG51bWJlcltdIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFRFeHRlbmRlZFN0YXRpc3RpYyA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAga2luZDogcmVhZG9ubHkgc3RyaW5nW107XG4gICAgY29sdW1uczogcmVhZG9ubHkgc3RyaW5nW107XG4gICAgbmRpc3RpbmN0OiBzdHJpbmcgfCBudWxsO1xuICAgIGRlcGVuZGVuY2llczogc3RyaW5nIHwgbnVsbDtcbiAgICBtY3Y6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBUUmVsYXRpb25QbGFubmVyU3RhdHMgPSB7XG4gICAgcmVsYXRpb25fbmFtZTogc3RyaW5nO1xuICAgIHJlbHR1cGxlczogbnVtYmVyO1xuICAgIHJlbHBhZ2VzOiBudW1iZXI7XG4gICAgcmVsYWxsdmlzaWJsZTogbnVtYmVyO1xuICAgIGF0dHJpYnV0ZXM6IHJlYWRvbmx5IFRBdHRyaWJ1dGVQbGFubmVyU3RhdHNbXTtcbiAgICBleHRlbmRlZDogcmVhZG9ubHkgVEV4dGVuZGVkU3RhdGlzdGljW107XG59O1xuXG50eXBlIFRSZWxhdGlvblJvdyA9IHtcbiAgICByZWxhdGlvbl9uYW1lOiBzdHJpbmc7XG4gICAgcmVsdHVwbGVzOiBudW1iZXI7XG4gICAgcmVscGFnZXM6IG51bWJlcjtcbiAgICByZWxhbGx2aXNpYmxlOiBudW1iZXI7XG59O1xuXG50eXBlIFRBdHRyaWJ1dGVSb3cgPSB7XG4gICAgcmVsYXRpb25fbmFtZTogc3RyaW5nO1xuICAgIGF0dHJpYnV0ZV9uYW1lOiBzdHJpbmc7XG4gICAgaW5oZXJpdGVkOiBib29sZWFuO1xuICAgIG51bGxfZnJhYzogbnVtYmVyO1xuICAgIGF2Z193aWR0aDogbnVtYmVyO1xuICAgIG5fZGlzdGluY3Q6IG51bWJlcjtcbiAgICBtb3N0X2NvbW1vbl92YWxzOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgbW9zdF9jb21tb25fZnJlcXM6IHJlYWRvbmx5IG51bWJlcltdIHwgbnVsbDtcbiAgICBoaXN0b2dyYW1fYm91bmRzOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgY29ycmVsYXRpb246IG51bWJlciB8IG51bGw7XG4gICAgbW9zdF9jb21tb25fZWxlbXM6IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbDtcbiAgICBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzOiByZWFkb25seSBudW1iZXJbXSB8IG51bGw7XG4gICAgZWxlbV9jb3VudF9oaXN0b2dyYW06IHJlYWRvbmx5IG51bWJlcltdIHwgbnVsbDtcbn07XG5cbnR5cGUgVEV4dGVuZGVkUm93ID0ge1xuICAgIHJlbGF0aW9uX25hbWU6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAga2luZDogcmVhZG9ubHkgc3RyaW5nW107XG4gICAgY29sdW1uczogcmVhZG9ubHkgc3RyaW5nW107XG4gICAgbmRpc3RpbmN0OiBzdHJpbmcgfCBudWxsO1xuICAgIGRlcGVuZGVuY2llczogc3RyaW5nIHwgbnVsbDtcbiAgICBtY3Y6IHN0cmluZyB8IG51bGw7XG59O1xuXG4vLyBwZ19zdGF0cyBleHBvc2VzIG1vc3RfY29tbW9uX3ZhbHMvaGlzdG9ncmFtX2JvdW5kcyBhcyBhbnlhcnJheSB3aGljaCBwZyBjYW5ub3Rcbi8vIHNlcmlhbGl6ZSBvdmVyIHRoZSB3aXJlOyBjYXN0IHRvIHRleHRbXSBzbyB2YWx1ZXMgY29tZSBiYWNrIGFzIHN0cmluZ3MuIE9uIHRoZVxuLy8gcmVwbGF5IHNpZGUgd2UgY2FzdCBiYWNrIHRvIHRoZSB0YXJnZXQgY29sdW1uIHR5cGUgYmVmb3JlIGluamVjdGluZy5cbmV4cG9ydCBjb25zdCBmZXRjaFB1YmxpY1BsYW5uZXJTdGF0aXN0aWNzID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4pOiBQcm9taXNlPHJlYWRvbmx5IFRSZWxhdGlvblBsYW5uZXJTdGF0c1tdPiA9PiB7XG4gICAgY29uc3QgW3JlbGF0aW9uc1Jlc3VsdCwgYXR0cmlidXRlc1Jlc3VsdCwgZXh0ZW5kZWRSZXN1bHRdID1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgcG9vbC5xdWVyeTxUUmVsYXRpb25Sb3c+KGBcbiAgICAgICAgICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgICAgICAgICAgYy5yZWxuYW1lIEFTIHJlbGF0aW9uX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIGMucmVsdHVwbGVzOjpmbG9hdDggQVMgcmVsdHVwbGVzLFxuICAgICAgICAgICAgICAgICAgICBjLnJlbHBhZ2VzOjppbnQgQVMgcmVscGFnZXMsXG4gICAgICAgICAgICAgICAgICAgIGMucmVsYWxsdmlzaWJsZTo6aW50IEFTIHJlbGFsbHZpc2libGVcbiAgICAgICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgY1xuICAgICAgICAgICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlXG4gICAgICAgICAgICAgICAgV0hFUkUgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgICAgICAgICAgQU5EIGMucmVsa2luZCBJTiAoJ3InLCAncCcsICdtJylcbiAgICAgICAgICAgICAgICBPUkRFUiBCWSBjLnJlbG5hbWVcbiAgICAgICAgICAgIGApLFxuICAgICAgICAgICAgcG9vbC5xdWVyeTxUQXR0cmlidXRlUm93PihgXG4gICAgICAgICAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICAgICAgICAgIHMudGFibGVuYW1lIEFTIHJlbGF0aW9uX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIHMuYXR0bmFtZSBBUyBhdHRyaWJ1dGVfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcy5pbmhlcml0ZWQgQVMgaW5oZXJpdGVkLFxuICAgICAgICAgICAgICAgICAgICBzLm51bGxfZnJhYzo6ZmxvYXQ4IEFTIG51bGxfZnJhYyxcbiAgICAgICAgICAgICAgICAgICAgcy5hdmdfd2lkdGg6OmludCBBUyBhdmdfd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHMubl9kaXN0aW5jdDo6ZmxvYXQ4IEFTIG5fZGlzdGluY3QsXG4gICAgICAgICAgICAgICAgICAgIHMubW9zdF9jb21tb25fdmFsczo6dGV4dDo6dGV4dFtdIEFTIG1vc3RfY29tbW9uX3ZhbHMsXG4gICAgICAgICAgICAgICAgICAgIHMubW9zdF9jb21tb25fZnJlcXMgQVMgbW9zdF9jb21tb25fZnJlcXMsXG4gICAgICAgICAgICAgICAgICAgIHMuaGlzdG9ncmFtX2JvdW5kczo6dGV4dDo6dGV4dFtdIEFTIGhpc3RvZ3JhbV9ib3VuZHMsXG4gICAgICAgICAgICAgICAgICAgIHMuY29ycmVsYXRpb246OmZsb2F0OCBBUyBjb3JyZWxhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgcy5tb3N0X2NvbW1vbl9lbGVtczo6dGV4dDo6dGV4dFtdIEFTIG1vc3RfY29tbW9uX2VsZW1zLFxuICAgICAgICAgICAgICAgICAgICBzLm1vc3RfY29tbW9uX2VsZW1fZnJlcXMgQVMgbW9zdF9jb21tb25fZWxlbV9mcmVxcyxcbiAgICAgICAgICAgICAgICAgICAgcy5lbGVtX2NvdW50X2hpc3RvZ3JhbSBBUyBlbGVtX2NvdW50X2hpc3RvZ3JhbVxuICAgICAgICAgICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19zdGF0cyBzXG4gICAgICAgICAgICAgICAgV0hFUkUgcy5zY2hlbWFuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgICAgICBPUkRFUiBCWSBzLnRhYmxlbmFtZSwgcy5hdHRuYW1lLCBzLmluaGVyaXRlZFxuICAgICAgICAgICAgYCksXG4gICAgICAgICAgICAvLyBwZ19zdGF0c19leHQgZXhwb3NlcyB0aGUgY29sdW1uIGxpc3QgdW5kZXIgYGF0dG5hbWVzYCAobmFtZVtdKSxcbiAgICAgICAgICAgIC8vIG5vdCBgY29sdW1uc2AuIEtpbmRzIGNvbWUgYmFjayBhcyBgXCJjaGFyXCJbXWAsIHdoaWNoIHBnIGNhbm5vdFxuICAgICAgICAgICAgLy8gc2VyaWFsaXplIG92ZXIgdGhlIHdpcmUgd2l0aG91dCBhbiBleHBsaWNpdCBjYXN0IHRvIHRleHRbXS5cbiAgICAgICAgICAgIC8vIFRoaXMgcXVlcnkgaXMgbm9uLWZhdGFsOiBhbnkgY2F0YWxvZyBzaGFwZSBtaXNtYXRjaCAoZS5nLiBvbGRlclxuICAgICAgICAgICAgLy8gUG9zdGdyZXMpIGZhbGxzIHRocm91Z2ggdG8gZW1wdHkgZXh0ZW5kZWQgc3RhdHMgcmF0aGVyIHRoYW5cbiAgICAgICAgICAgIC8vIGJsb2NraW5nIHRoZSBpbnRyb3NwZWN0aW9uIHVwbG9hZC5cbiAgICAgICAgICAgIHBvb2xcbiAgICAgICAgICAgICAgICAucXVlcnk8VEV4dGVuZGVkUm93PihcbiAgICAgICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgICAgICAgICBjLnJlbG5hbWUgQVMgcmVsYXRpb25fbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZS5zdGF0aXN0aWNzX25hbWUgQVMgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZS5raW5kczo6dGV4dDo6dGV4dFtdIEFTIGtpbmQsXG4gICAgICAgICAgICAgICAgICAgIGUuYXR0bmFtZXM6OnRleHQ6OnRleHRbXSBBUyBjb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICBlLm5fZGlzdGluY3Q6OnRleHQgQVMgbmRpc3RpbmN0LFxuICAgICAgICAgICAgICAgICAgICBlLmRlcGVuZGVuY2llczo6dGV4dCBBUyBkZXBlbmRlbmNpZXMsXG4gICAgICAgICAgICAgICAgICAgIGUubW9zdF9jb21tb25fdmFsczo6dGV4dCBBUyBtY3ZcbiAgICAgICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfc3RhdHNfZXh0IGVcbiAgICAgICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgYyBPTiBjLnJlbG5hbWUgPSBlLnRhYmxlbmFtZVxuICAgICAgICAgICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgblxuICAgICAgICAgICAgICAgICAgICBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlIEFORCBuLm5zcG5hbWUgPSBlLnNjaGVtYW5hbWVcbiAgICAgICAgICAgICAgICBXSEVSRSBlLnNjaGVtYW5hbWUgPSAncHVibGljJ1xuICAgICAgICAgICAgICAgIE9SREVSIEJZIGMucmVsbmFtZSwgZS5zdGF0aXN0aWNzX25hbWVcbiAgICAgICAgICAgIGAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiAoe3Jvd3M6IFtdIGFzIFRFeHRlbmRlZFJvd1tdfSkpLFxuICAgICAgICBdKTtcblxuICAgIGNvbnN0IGF0dHJzQnlSZWxhdGlvbiA9IG5ldyBNYXA8c3RyaW5nLCBUQXR0cmlidXRlUGxhbm5lclN0YXRzW10+KCk7XG4gICAgYXR0cmlidXRlc1Jlc3VsdC5yb3dzLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgY29uc3QgYnVja2V0ID0gYXR0cnNCeVJlbGF0aW9uLmdldChyLnJlbGF0aW9uX25hbWUpID8/IFtdO1xuICAgICAgICBidWNrZXQucHVzaCh7XG4gICAgICAgICAgICBhdHRyaWJ1dGVfbmFtZTogci5hdHRyaWJ1dGVfbmFtZSxcbiAgICAgICAgICAgIGluaGVyaXRlZDogci5pbmhlcml0ZWQsXG4gICAgICAgICAgICBudWxsX2ZyYWM6IE51bWJlcihyLm51bGxfZnJhYyksXG4gICAgICAgICAgICBhdmdfd2lkdGg6IE51bWJlcihyLmF2Z193aWR0aCksXG4gICAgICAgICAgICBuX2Rpc3RpbmN0OiBOdW1iZXIoci5uX2Rpc3RpbmN0KSxcbiAgICAgICAgICAgIG1vc3RfY29tbW9uX3ZhbHM6IHIubW9zdF9jb21tb25fdmFscyxcbiAgICAgICAgICAgIG1vc3RfY29tbW9uX2ZyZXFzOiByLm1vc3RfY29tbW9uX2ZyZXFzLFxuICAgICAgICAgICAgaGlzdG9ncmFtX2JvdW5kczogci5oaXN0b2dyYW1fYm91bmRzLFxuICAgICAgICAgICAgY29ycmVsYXRpb246IHIuY29ycmVsYXRpb24gPT09IG51bGwgPyBudWxsIDogTnVtYmVyKHIuY29ycmVsYXRpb24pLFxuICAgICAgICAgICAgbW9zdF9jb21tb25fZWxlbXM6IHIubW9zdF9jb21tb25fZWxlbXMsXG4gICAgICAgICAgICBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzOiByLm1vc3RfY29tbW9uX2VsZW1fZnJlcXMsXG4gICAgICAgICAgICBlbGVtX2NvdW50X2hpc3RvZ3JhbTogci5lbGVtX2NvdW50X2hpc3RvZ3JhbSxcbiAgICAgICAgfSk7XG4gICAgICAgIGF0dHJzQnlSZWxhdGlvbi5zZXQoci5yZWxhdGlvbl9uYW1lLCBidWNrZXQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZXh0ZW5kZWRCeVJlbGF0aW9uID0gbmV3IE1hcDxzdHJpbmcsIFRFeHRlbmRlZFN0YXRpc3RpY1tdPigpO1xuICAgIGV4dGVuZGVkUmVzdWx0LnJvd3MuZm9yRWFjaCgocikgPT4ge1xuICAgICAgICBjb25zdCBidWNrZXQgPSBleHRlbmRlZEJ5UmVsYXRpb24uZ2V0KHIucmVsYXRpb25fbmFtZSkgPz8gW107XG4gICAgICAgIGJ1Y2tldC5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IHIubmFtZSxcbiAgICAgICAgICAgIGtpbmQ6IHIua2luZCxcbiAgICAgICAgICAgIGNvbHVtbnM6IHIuY29sdW1ucyxcbiAgICAgICAgICAgIG5kaXN0aW5jdDogci5uZGlzdGluY3QsXG4gICAgICAgICAgICBkZXBlbmRlbmNpZXM6IHIuZGVwZW5kZW5jaWVzLFxuICAgICAgICAgICAgbWN2OiByLm1jdixcbiAgICAgICAgfSk7XG4gICAgICAgIGV4dGVuZGVkQnlSZWxhdGlvbi5zZXQoci5yZWxhdGlvbl9uYW1lLCBidWNrZXQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlbGF0aW9uc1Jlc3VsdC5yb3dzLm1hcCgocikgPT4gKHtcbiAgICAgICAgcmVsYXRpb25fbmFtZTogci5yZWxhdGlvbl9uYW1lLFxuICAgICAgICByZWx0dXBsZXM6IE51bWJlcihyLnJlbHR1cGxlcyksXG4gICAgICAgIHJlbHBhZ2VzOiBOdW1iZXIoci5yZWxwYWdlcyksXG4gICAgICAgIHJlbGFsbHZpc2libGU6IE51bWJlcihyLnJlbGFsbHZpc2libGUpLFxuICAgICAgICBhdHRyaWJ1dGVzOiBhdHRyc0J5UmVsYXRpb24uZ2V0KHIucmVsYXRpb25fbmFtZSkgPz8gW10sXG4gICAgICAgIGV4dGVuZGVkOiBleHRlbmRlZEJ5UmVsYXRpb24uZ2V0KHIucmVsYXRpb25fbmFtZSkgPz8gW10sXG4gICAgfSkpO1xufTtcbiIsICJpbXBvcnQge3JlYWRGaWxlfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5pbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcbmltcG9ydCB7ZGF0YWJhc2VJbnRyb3NwZWN0aW9uU2NoZW1hfSBmcm9tICdAZGJjdHgvY29yZS9zY2hlbWFzL2ludHJvc3BlY3Rpb24nO1xuaW1wb3J0IHR5cGUge1REYXRhYmFzZUludHJvc3BlY3Rpb259IGZyb20gJ0BkYmN0eC9jb3JlJztcblxuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB7ZmV0Y2hEYXRhYmFzZUlkZW50aWZpZXJ9IGZyb20gJy4uL2RiL3ZlcnNpb24ubWpzJztcblxuZXhwb3J0IHR5cGUgVExvYWRJbnRyb3NwZWN0aW9uRXJyb3IgPVxuICAgIHwge2tpbmQ6ICdyZWFkJzsgbWVzc2FnZTogc3RyaW5nfVxuICAgIHwge2tpbmQ6ICdwYXJzZSc7IG1lc3NhZ2U6IHN0cmluZ31cbiAgICB8IHtraW5kOiAnc2NoZW1hJzsgbWVzc2FnZTogc3RyaW5nfVxuICAgIHwge2tpbmQ6ICdtaXNtYXRjaCc7IG1lc3NhZ2U6IHN0cmluZ307XG5cbmV4cG9ydCB0eXBlIFRMb2FkSW50cm9zcGVjdGlvblJlc3VsdCA9XG4gICAgfCB7b2s6IHRydWU7IHJlc3VsdDogVERhdGFiYXNlSW50cm9zcGVjdGlvbn1cbiAgICB8IHtvazogZmFsc2U7IGVycm9yOiBUTG9hZEludHJvc3BlY3Rpb25FcnJvcn07XG5cbmNvbnN0IGVyck1lc3NhZ2UgPSAoZXJyOiB1bmtub3duKTogc3RyaW5nID0+XG4gICAgZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXG5leHBvcnQgY29uc3QgbG9hZEludHJvc3BlY3Rpb25Gcm9tRmlsZSA9IGFzeW5jIChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcG9vbDogUG9vbCxcbik6IFByb21pc2U8VExvYWRJbnRyb3NwZWN0aW9uUmVzdWx0PiA9PiB7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB7b2s6IHRydWUgYXMgY29uc3QsIHZhbHVlOiBhd2FpdCByZWFkRmlsZShwYXRoLCAndXRmOCcpfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG9rOiBmYWxzZSBhcyBjb25zdCxcbiAgICAgICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgICAgICBraW5kOiAncmVhZCcgYXMgY29uc3QsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gcmVhZCBpbnRyb3NwZWN0aW9uIGZpbGUgYXQgJHtwYXRofTogJHtlcnJNZXNzYWdlKGVycil9YCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICBpZiAoIXJhdy5vaykge1xuICAgICAgICByZXR1cm4ge29rOiBmYWxzZSwgZXJyb3I6IHJhdy5lcnJvcn07XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkID0gKCgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB7b2s6IHRydWUgYXMgY29uc3QsIHZhbHVlOiBKU09OLnBhcnNlKHJhdy52YWx1ZSkgYXMgdW5rbm93bn07XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvazogZmFsc2UgYXMgY29uc3QsXG4gICAgICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogJ3BhcnNlJyBhcyBjb25zdCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBwYXJzZSBpbnRyb3NwZWN0aW9uIEpTT04gYXQgJHtwYXRofTogJHtlcnJNZXNzYWdlKGVycil9YCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICBpZiAoIXBhcnNlZC5vaykge1xuICAgICAgICByZXR1cm4ge29rOiBmYWxzZSwgZXJyb3I6IHBhcnNlZC5lcnJvcn07XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdGVkID0gZGF0YWJhc2VJbnRyb3NwZWN0aW9uU2NoZW1hLnNhZmVQYXJzZShwYXJzZWQudmFsdWUpO1xuXG4gICAgaWYgKCF2YWxpZGF0ZWQuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICBraW5kOiAnc2NoZW1hJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgSW50cm9zcGVjdGlvbiBKU09OIGF0ICR7cGF0aH0gZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHNjaGVtYTogJHt2YWxpZGF0ZWQuZXJyb3IubWVzc2FnZX1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2FkZWQgPSB2YWxpZGF0ZWQuZGF0YTtcbiAgICBjb25zdCBsaXZlID0gYXdhaXQgZmV0Y2hEYXRhYmFzZUlkZW50aWZpZXIocG9vbCk7XG5cbiAgICBjb25zdCBtYXRjaGVzID1cbiAgICAgICAgbG9hZGVkLmlkZW50aWZpZXIuc3lzdGVtX2lkZW50aWZpZXIgPT09IGxpdmUuc3lzdGVtX2lkZW50aWZpZXIgJiZcbiAgICAgICAgbG9hZGVkLmlkZW50aWZpZXIuZGF0YWJhc2Vfb2lkID09PSBsaXZlLmRhdGFiYXNlX29pZCAmJlxuICAgICAgICBsb2FkZWQubmFtZSA9PT0gbGl2ZS5kYXRhYmFzZV9uYW1lO1xuXG4gICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgIGtpbmQ6ICdtaXNtYXRjaCcsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgICAgICAgYEludHJvc3BlY3Rpb24gSlNPTiBkb2VzIG5vdCBtYXRjaCB0aGUgY29ubmVjdGVkIGRhdGFiYXNlLlxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgICBsb2FkZWQ6IG5hbWU9JHtsb2FkZWQubmFtZX0gc3lzdGVtX2lkZW50aWZpZXI9JHtsb2FkZWQuaWRlbnRpZmllci5zeXN0ZW1faWRlbnRpZmllcn0gZGF0YWJhc2Vfb2lkPSR7bG9hZGVkLmlkZW50aWZpZXIuZGF0YWJhc2Vfb2lkfVxcbmAgK1xuICAgICAgICAgICAgICAgICAgICBgICBsaXZlOiAgIG5hbWU9JHtsaXZlLmRhdGFiYXNlX25hbWV9IHN5c3RlbV9pZGVudGlmaWVyPSR7bGl2ZS5zeXN0ZW1faWRlbnRpZmllcn0gZGF0YWJhc2Vfb2lkPSR7bGl2ZS5kYXRhYmFzZV9vaWR9YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtvazogdHJ1ZSwgcmVzdWx0OiBsb2FkZWR9O1xufTtcblxuZXhwb3J0IGNvbnN0IHBvcHVsYXRlSW50cm9zcGVjdGlvbkNvdW50cyA9IChcbiAgICBzdG9yZTogVFN0b3JlLFxuICAgIGludHJvc3BlY3Rpb246IFREYXRhYmFzZUludHJvc3BlY3Rpb24sXG4pOiB2b2lkID0+IHtcbiAgICBjb25zdCBjb3VudHMgPSBzdG9yZS5zdGVwcy5pbnRyb3NwZWN0aW9uLmNvdW50cztcblxuICAgIGNvbnN0IHJlbGF0aW9ucyA9IE9iamVjdC52YWx1ZXMoaW50cm9zcGVjdGlvbi5yZWxhdGlvbnMpO1xuXG4gICAgY29uc3QgdGFibGVzID0gcmVsYXRpb25zLmZpbHRlcihcbiAgICAgICAgKHIpID0+IHIua2luZCA9PT0gJ3RhYmxlJyB8fCByLmtpbmQgPT09ICdwYXJ0aXRpb25lZF90YWJsZScsXG4gICAgKS5sZW5ndGg7XG4gICAgY29uc3Qgdmlld3MgPSByZWxhdGlvbnMuZmlsdGVyKChyKSA9PiByLmtpbmQgPT09ICd2aWV3JykubGVuZ3RoO1xuICAgIGNvbnN0IG1hdGVyaWFsaXplZFZpZXdzID0gcmVsYXRpb25zLmZpbHRlcihcbiAgICAgICAgKHIpID0+IHIua2luZCA9PT0gJ21hdGVyaWFsaXplZF92aWV3JyxcbiAgICApLmxlbmd0aDtcblxuICAgIGNvbnN0IGNvbHVtbnMgPSByZWxhdGlvbnMucmVkdWNlKFxuICAgICAgICAoYWNjLCByKSA9PiBhY2MgKyBPYmplY3Qua2V5cyhyLmF0dHJpYnV0ZXMpLmxlbmd0aCxcbiAgICAgICAgMCxcbiAgICApO1xuICAgIGNvbnN0IGluZGV4ZXMgPSByZWxhdGlvbnMucmVkdWNlKFxuICAgICAgICAoYWNjLCByKSA9PiBhY2MgKyBPYmplY3Qua2V5cyhyLmluZGV4ZXMpLmxlbmd0aCxcbiAgICAgICAgMCxcbiAgICApO1xuICAgIGNvbnN0IGZvcmVpZ25LZXlzID0gcmVsYXRpb25zLnJlZHVjZShcbiAgICAgICAgKGFjYywgcikgPT4gYWNjICsgT2JqZWN0LmtleXMoci5yZWZlcmVuY2VzKS5sZW5ndGgsXG4gICAgICAgIDAsXG4gICAgKTtcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgY291bnRzLnRhYmxlcyA9IHRhYmxlcztcbiAgICAgICAgY291bnRzLnZpZXdzID0gdmlld3M7XG4gICAgICAgIGNvdW50cy5tYXRlcmlhbGl6ZWRWaWV3cyA9IG1hdGVyaWFsaXplZFZpZXdzO1xuICAgICAgICBjb3VudHMuY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgICAgIGNvdW50cy5pbmRleGVzID0gaW5kZXhlcztcbiAgICAgICAgY291bnRzLmZvcmVpZ25LZXlzID0gZm9yZWlnbktleXM7XG4gICAgICAgIGNvdW50cy5lbnVtcyA9IE9iamVjdC5rZXlzKGludHJvc3BlY3Rpb24uZW51bXMpLmxlbmd0aDtcbiAgICAgICAgY291bnRzLmFuYWx5emVkID0gMDtcbiAgICB9KTtcbn07XG4iLCAiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcbmltcG9ydCB7cnVuSW5BY3Rpb259IGZyb20gJ21vYngnO1xuXG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi9zdG9yZS5tanMnO1xuaW1wb3J0IHR5cGUge1REYXRhYmFzZUludHJvc3BlY3Rpb259IGZyb20gJ0BkYmN0eC9jb3JlJztcbmltcG9ydCB7ZmV0Y2hSZWxhdGlvbkZpbGVTdGF0c30gZnJvbSAnLi4vZGIvaW5kZXgubWpzJztcbmltcG9ydCB7dHJwYywgY3JlYXRlQXV0aGVudGljYXRlZFRSUENDbGllbnR9IGZyb20gJy4uL2xpYi90cnBjLm1qcyc7XG5pbXBvcnQge1xuICAgIGRldGVjdEFJQXNzaXN0YW50cyxcbiAgICBkZXRlY3REb2NrZXIsXG4gICAgZGV0ZWN0T1MsXG4gICAgZGV0ZWN0U2hlbGwsXG4gICAgZGV0ZWN0SG9zdG5hbWUsXG4gICAgZGV0ZWN0VXNlcm5hbWUsXG4gICAgZGV0ZWN0V1NMLFxuICAgIGRldGVjdFN5c3RlbU1lbW9yeSxcbiAgICBkZXRlY3RQYWNrYWdlTWFuYWdlcixcbiAgICBkZXRlY3RQcm92aWRlcixcbiAgICBpc0xvY2FsaG9zdCxcbn0gZnJvbSAnLi9kZXRlY3QubWpzJztcbmltcG9ydCB7YnVpbGRTZXNzaW9uVVJMLCBvcGVuU2Vzc2lvblVSTH0gZnJvbSAnLi9vcGVuLXVybC5tanMnO1xuaW1wb3J0IHt3cml0ZUNvbmZpZ30gZnJvbSAnLi9jb25maWcubWpzJztcbmltcG9ydCB7Q0xJRU5UX1ZFUlNJT059IGZyb20gJy4uL2xpYi92ZXJzaW9uLm1qcyc7XG5cbmNvbnN0IGNoZWNrSXNSZXBsaWNhID0gYXN5bmMgKHBvb2w6IFBvb2wpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PHtpc19yZXBsaWNhOiBib29sZWFufT4oXG4gICAgICAgICdTRUxFQ1QgcGdfaXNfaW5fcmVjb3ZlcnkoKSBBUyBpc19yZXBsaWNhJyxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzWzBdLmlzX3JlcGxpY2E7XG59O1xuXG5jb25zdCBjb2xsZWN0TWVkaWFuRmlsZUFnZSA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHRhYmxlTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICAgIHN0b3JlOiBUU3RvcmUsXG4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+ID0+IHtcbiAgICBpZiAodGFibGVOYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZmlyc3QgPSBhd2FpdCBmZXRjaFJlbGF0aW9uRmlsZVN0YXRzKHBvb2wsIHRhYmxlTmFtZXNbMF0pO1xuXG4gICAgICAgIGlmICghZmlyc3Q/Lm1vZGlmaWNhdGlvbl90aW1lKSB7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5maWxlU3RhdHNTa2lwcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVzOiBEYXRlW10gPSBbZmlyc3QubW9kaWZpY2F0aW9uX3RpbWVdO1xuXG4gICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgdGFibGVOYW1lcy5zbGljZSgxKS5tYXAoYXN5bmMgKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZldGNoUmVsYXRpb25GaWxlU3RhdHMocG9vbCwgbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0cz8ubW9kaWZpY2F0aW9uX3RpbWUgPz8gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmVtYWluaW5nLmZvckVhY2goKHQpID0+IHtcbiAgICAgICAgICAgIGlmICh0KSB7XG4gICAgICAgICAgICAgICAgdGltZXMucHVzaCh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc29ydGVkID0gWy4uLnRpbWVzXS5zb3J0KChhLCBiKSA9PiBhLmdldFRpbWUoKSAtIGIuZ2V0VGltZSgpKTtcbiAgICAgICAgY29uc3QgbWlkID0gTWF0aC5mbG9vcihzb3J0ZWQubGVuZ3RoIC8gMik7XG4gICAgICAgIGNvbnN0IG1lZGlhbiA9XG4gICAgICAgICAgICBzb3J0ZWQubGVuZ3RoICUgMiA9PT0gMFxuICAgICAgICAgICAgICAgID8gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgKHNvcnRlZFttaWQgLSAxXS5nZXRUaW1lKCkgKyBzb3J0ZWRbbWlkXS5nZXRUaW1lKCkpIC8gMixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IHNvcnRlZFttaWRdO1xuXG4gICAgICAgIHJldHVybiBtZWRpYW4udG9JU09TdHJpbmcoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5maWxlU3RhdHNTa2lwcGVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuY29uc3QgYnVpbGRTZXNzaW9uSW5wdXQgPSAoXG4gICAgcmVzdWx0OiBURGF0YWJhc2VJbnRyb3NwZWN0aW9uLFxuICAgIHN0b3JlOiBUU3RvcmUsXG4gICAgaXNSZXBsaWNhOiBib29sZWFuLFxuICAgIG1lZGlhbkZpbGVBZ2U6IHN0cmluZyB8IG51bGwsXG4pID0+IHtcbiAgICBjb25zdCByZWxhdGlvbnMgPSBPYmplY3QudmFsdWVzKHJlc3VsdC5yZWxhdGlvbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YWJhc2VfbmFtZTogcmVzdWx0Lm5hbWUsXG4gICAgICAgIGRhdGFiYXNlX29iamVjdF9zdGF0aXN0aWNzOiB7XG4gICAgICAgICAgICBwYXJlbnRfdGFibGVzOiByZWxhdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChyKSA9PiByLmtpbmQgPT09ICdwYXJ0aXRpb25lZF90YWJsZScsXG4gICAgICAgICAgICApLmxlbmd0aCxcbiAgICAgICAgICAgIHRhYmxlczogcmVsYXRpb25zLmZpbHRlcigocikgPT4gci5raW5kID09PSAndGFibGUnKS5sZW5ndGgsXG4gICAgICAgICAgICB2aWV3czogcmVsYXRpb25zLmZpbHRlcigocikgPT4gci5raW5kID09PSAndmlldycpLmxlbmd0aCxcbiAgICAgICAgICAgIG1hdGVyaWFsaXplZF92aWV3czogcmVsYXRpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAocikgPT4gci5raW5kID09PSAnbWF0ZXJpYWxpemVkX3ZpZXcnLFxuICAgICAgICAgICAgKS5sZW5ndGgsXG4gICAgICAgICAgICBlbnVtczogc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5jb3VudHMuZW51bXMsXG4gICAgICAgICAgICBpbmRleGVzOiBzdG9yZS5zdGVwcy5pbnRyb3NwZWN0aW9uLmNvdW50cy5pbmRleGVzLFxuICAgICAgICAgICAgZm9yZWlnbl9rZXlfcmVmZXJlbmNlczpcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbnRyb3NwZWN0aW9uLmNvdW50cy5mb3JlaWduS2V5cyxcbiAgICAgICAgfSxcbiAgICAgICAgaXNfZGF0YWJhc2VfcmVwbGljYTogaXNSZXBsaWNhLFxuICAgICAgICBtZWRpYW5fdGFibGVfZmlsZV9hZ2U6IG1lZGlhbkZpbGVBZ2UsXG4gICAgICAgIGRhdGFiYXNlX3R5cGU6IHJlc3VsdC50eXBlLFxuICAgICAgICBkYXRhYmFzZV92ZXJzaW9uOiByZXN1bHQudmVyc2lvbi52ZXJzaW9uX251bWJlci50b1N0cmluZygpLFxuICAgICAgICBkYXRhYmFzZV92ZXJzaW9uX3N0cmluZzogcmVzdWx0LnZlcnNpb24udmVyc2lvbl9zdHJpbmcsXG4gICAgICAgIGRhdGFiYXNlX3Byb3ZpZGVyOiBkZXRlY3RQcm92aWRlcihcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5waWNrZWRIb3N0bmFtZSEsXG4gICAgICAgICksXG4gICAgICAgIGlzX2xvY2FsOiBpc0xvY2FsaG9zdChzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucGlja2VkSG9zdG5hbWUhKSxcbiAgICAgICAgaXNfZG9ja2VyOiBkZXRlY3REb2NrZXIoKSxcbiAgICAgICAgaXNfYWNjZXNzZWRfb3Zlcl9zc2g6IHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uZW5hYmxlZCxcbiAgICAgICAgc2hlbGw6IGRldGVjdFNoZWxsKCksXG4gICAgICAgIG9zOiBkZXRlY3RPUygpLFxuICAgICAgICBpc193c2w6IGRldGVjdFdTTCgpLFxuICAgICAgICBzeXN0ZW1fbWVtb3J5OiBkZXRlY3RTeXN0ZW1NZW1vcnkoKSxcbiAgICAgICAgcGFja2FnZV9tYW5hZ2VyOiBkZXRlY3RQYWNrYWdlTWFuYWdlcigpLFxuICAgICAgICB1c2VybmFtZTogZGV0ZWN0VXNlcm5hbWUoKSxcbiAgICAgICAgaG9zdG5hbWU6IGRldGVjdEhvc3RuYW1lKCksXG4gICAgICAgIGFpX2Fzc2lzdGFudHM6IGRldGVjdEFJQXNzaXN0YW50cygpLFxuICAgIH0gYXMgY29uc3Q7XG59O1xuXG5jb25zdCB3YWl0Rm9yVG9rZW4gPSAoc2Vzc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4gPT5cbiAgICBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgc3ViID0gdHJwYy5zZXNzaW9uLm9uQXV0aG9yaXphdGlvbi5zdWJzY3JpYmUoXG4gICAgICAgICAgICB7c2Vzc2lvbl9pZDogc2Vzc2lvbklkfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvbkRhdGE6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEudG9rZW4pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25FcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgfSk7XG5cbmV4cG9ydCBjb25zdCBjaGVja0dhdGUgPSBhc3luYyAoXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBzdG9yZTogVFN0b3JlLFxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zdGVwcy5nYXRlLnN0YXRlID0gJ2NoZWNraW5nJztcbiAgICB9KTtcblxuICAgIGNvbnN0IGF1dGhDbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkVFJQQ0NsaWVudCgoKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUodG9rZW4pLFxuICAgICk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXV0aENsaWVudC5zZXNzaW9uLnNob3VsZENvbnRpbnVlLnF1ZXJ5KHtcbiAgICAgICAgY2xpZW50X3ZlcnNpb246IENMSUVOVF9WRVJTSU9OLFxuICAgIH0pO1xuXG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zdGVwcy5nYXRlLnN0YXRlID0gcmVzdWx0LmNvbnRpbnVlID8gJ3Bhc3NlZCcgOiAnYmxvY2tlZCc7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmdhdGUubWVzc2FnZSA9IHJlc3VsdC5tZXNzYWdlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5jb250aW51ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja0JpbGxpbmcgPSBhc3luYyAoXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBzZXNzaW9uVXJsOiBzdHJpbmcsXG4gICAgc3RvcmU6IFRTdG9yZSxcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuYmlsbGluZy5zdGF0ZSA9ICdjaGVja2luZyc7XG4gICAgfSk7XG5cbiAgICBjb25zdCBhdXRoQ2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZFRSUENDbGllbnQoKCkgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHRva2VuKSxcbiAgICApO1xuXG4gICAgY29uc3QgaW5pdGlhbCA9IGF3YWl0IGF1dGhDbGllbnQuYmlsbGluZy5oYXNCaWxsaW5nRm9yQ2xpZW50LnF1ZXJ5KHt9KTtcblxuICAgIC8vIFRyaWFsLWVsaWdpYmxlIHVzZXJzIChubyBpbnZvaWNlcyB5ZXQpIHNraXAgdGhlIGNhcmQtb24tZmlsZSBzdGVwLiBUaGVcbiAgICAvLyBmaXJzdCByZXZpc2lvbiB3aWxsIG1pbnQgYW4gaW52b2ljZSB3aXRoIGEgNy1kYXkgZ3JhY2UsIGJpbGxlZCB2aWFcbiAgICAvLyBTdHJpcGUncyBob3N0ZWQtaW52b2ljZSBlbWFpbCByYXRoZXIgdGhhbiBhbiBpbW1lZGlhdGUgY2hhcmdlLlxuICAgIGlmIChpbml0aWFsLmhhc0JpbGxpbmcgfHwgaW5pdGlhbC5pc1RyaWFsRWxpZ2libGUpIHtcbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuYmlsbGluZy5zdGF0ZSA9ICdjb25uZWN0ZWQnO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuYmlsbGluZy5zdGF0ZSA9ICd3YWl0aW5nJztcbiAgICAgICAgc3RvcmUuc3RlcHMuYmlsbGluZy51cmwgPSBzZXNzaW9uVXJsO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgb3BlblNlc3Npb25VUkwoc2Vzc2lvblVybCk7XG5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHRpY2sgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGF1dGhDbGllbnQuYmlsbGluZy5oYXNCaWxsaW5nRm9yQ2xpZW50LnF1ZXJ5KHt9KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmhhc0JpbGxpbmcgfHwgcmVzdWx0LmlzVHJpYWxFbGlnaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5iaWxsaW5nLnN0YXRlID0gJ2Nvbm5lY3RlZCc7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCh0aWNrLCAyMDAwKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzZXRUaW1lb3V0KHRpY2ssIDIwMDApO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbm5lY3RBY2NvdW50ID0gYXN5bmMgKFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgc3RvcmU6IFRTdG9yZSxcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuYWNjb3VudC5zdGF0ZSA9ICdmZXRjaGluZy1hY2NvdW50JztcbiAgICB9KTtcblxuICAgIGNvbnN0IGF1dGhDbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkVFJQQ0NsaWVudCgoKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUodG9rZW4pLFxuICAgICk7XG4gICAgY29uc3QgYWNjb3VudCA9IGF3YWl0IGF1dGhDbGllbnQuYWNjb3VudC5nZXRBY2NvdW50LnF1ZXJ5KHt9KTtcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuYWNjb3VudC5zdGF0ZSA9ICdjb25uZWN0ZWQnO1xuICAgICAgICBzdG9yZS5zdGVwcy5hY2NvdW50LmVtYWlsID0gYWNjb3VudC5lbWFpbHNbMF0gPz8gbnVsbDtcbiAgICAgICAgc3RvcmUuc3RlcHMuYWNjb3VudC5uYW1lID0gYWNjb3VudC5uYW1lO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNlc3Npb24gPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICByZXN1bHQ6IFREYXRhYmFzZUludHJvc3BlY3Rpb24sXG4gICAgc3RvcmU6IFRTdG9yZSxcbiAgICB0b2tlbjogc3RyaW5nIHwgbnVsbCxcbiAgICBkZXZpY2VfaWQ6IHN0cmluZyxcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zdGVwcy5hY2NvdW50LnN0YXRlID0gJ2NyZWF0aW5nLXNlc3Npb24nO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdGFibGVOYW1lcyA9IE9iamVjdC52YWx1ZXMocmVzdWx0LnJlbGF0aW9ucylcbiAgICAgICAgLmZpbHRlcigocikgPT4gci5raW5kID09PSAndGFibGUnIHx8IHIua2luZCA9PT0gJ3BhcnRpdGlvbmVkX3RhYmxlJylcbiAgICAgICAgLm1hcCgocikgPT4gci5uYW1lKTtcblxuICAgIGNvbnN0IFtpc1JlcGxpY2EsIG1lZGlhbkZpbGVBZ2VdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBjaGVja0lzUmVwbGljYShwb29sKSxcbiAgICAgICAgY29sbGVjdE1lZGlhbkZpbGVBZ2UocG9vbCwgdGFibGVOYW1lcywgc3RvcmUpLFxuICAgIF0pO1xuXG4gICAgY29uc3QgaW5wdXQgPSB7XG4gICAgICAgIC4uLmJ1aWxkU2Vzc2lvbklucHV0KHJlc3VsdCwgc3RvcmUsIGlzUmVwbGljYSwgbWVkaWFuRmlsZUFnZSksXG4gICAgICAgIGRldmljZV9pZCxcbiAgICB9O1xuXG4gICAgY29uc3QgY2xpZW50ID0gdG9rZW5cbiAgICAgICAgPyBjcmVhdGVBdXRoZW50aWNhdGVkVFJQQ0NsaWVudCgoKSA9PiBQcm9taXNlLnJlc29sdmUodG9rZW4pKVxuICAgICAgICA6IHRycGM7XG5cbiAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgY2xpZW50LnNlc3Npb24uY3JlYXRlLm11dGF0ZShpbnB1dCk7XG5cbiAgICByZXR1cm4gc2Vzc2lvbi5pZDtcbn07XG5cbmV4cG9ydCBjb25zdCB3YWl0Rm9yQXV0aG9yaXphdGlvbiA9IGFzeW5jIChcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICBzdG9yZTogVFN0b3JlLFxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3QgdXJsID0gYnVpbGRTZXNzaW9uVVJMKHNlc3Npb25JZCk7XG5cbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmFjY291bnQuc3RhdGUgPSAnd2FpdGluZyc7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmFjY291bnQudXJsID0gdXJsO1xuICAgICAgICBzdG9yZS5zdGVwcy5hY2NvdW50LnNlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgd2FpdEZvclRva2VuKHNlc3Npb25JZCk7XG4gICAgYXdhaXQgd3JpdGVDb25maWcodG9rZW4pO1xuICAgIGF3YWl0IGNvbm5lY3RBY2NvdW50KHRva2VuLCBzdG9yZSk7XG59O1xuIiwgImltcG9ydCB7XG4gICAgY3JlYXRlVFJQQ0NsaWVudCxcbiAgICBodHRwQmF0Y2hMaW5rLFxuICAgIHNwbGl0TGluayxcbiAgICBodHRwU3Vic2NyaXB0aW9uTGluayxcbn0gZnJvbSAnQHRycGMvY2xpZW50JztcbmltcG9ydCB0eXBlIHtUUlBDQ2xpZW50fSBmcm9tICdAdHJwYy9jbGllbnQnO1xuaW1wb3J0IHR5cGUge1RBcHBSb3V0ZXJ9IGZyb20gJ0BkYmN0eC9jb3JlJztcbmltcG9ydCB7RXZlbnRTb3VyY2V9IGZyb20gJ2V2ZW50c291cmNlJztcbmltcG9ydCB7Z2V0VFJQQ1VSTH0gZnJvbSAnLi90cnBjLXVybC5tanMnO1xuXG50eXBlIFRHZXRUb2tlbiA9ICgpID0+IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XG5cbmNvbnN0IGNyZWF0ZUxpbmtzID0gKGdldFRva2VuPzogVEdldFRva2VuKSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IGdldFRva2VuXG4gICAgICAgID8gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGdldFRva2VuKCk7XG4gICAgICAgICAgICAgIHJldHVybiB0b2tlbiA/IHtBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YH0gOiB7fTtcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgICAgc3BsaXRMaW5rKHtcbiAgICAgICAgICAgIGNvbmRpdGlvbjogKG9wKSA9PiBvcC50eXBlID09PSAnc3Vic2NyaXB0aW9uJyxcbiAgICAgICAgICAgIHRydWU6IGh0dHBTdWJzY3JpcHRpb25MaW5rKHtcbiAgICAgICAgICAgICAgICB1cmw6IGdldFRSUENVUkwoKSxcbiAgICAgICAgICAgICAgICBFdmVudFNvdXJjZTpcbiAgICAgICAgICAgICAgICAgICAgRXZlbnRTb3VyY2UgYXMgdW5rbm93biBhcyB0eXBlb2YgZ2xvYmFsVGhpcy5FdmVudFNvdXJjZSxcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uUGFyYW1zOiBnZXRUb2tlblxuICAgICAgICAgICAgICAgICAgICA/IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBnZXRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW4gPyB7dG9rZW59IDoge307XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmFsc2U6IGh0dHBCYXRjaExpbmsoe1xuICAgICAgICAgICAgICAgIHVybDogZ2V0VFJQQ1VSTCgpLFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSksXG4gICAgXTtcbn07XG5cbmV4cG9ydCBjb25zdCB0cnBjOiBUUlBDQ2xpZW50PFRBcHBSb3V0ZXI+ID0gY3JlYXRlVFJQQ0NsaWVudDxUQXBwUm91dGVyPih7XG4gICAgbGlua3M6IGNyZWF0ZUxpbmtzKCksXG59KTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUF1dGhlbnRpY2F0ZWRUUlBDQ2xpZW50ID0gKFxuICAgIGdldFRva2VuOiBUR2V0VG9rZW4sXG4pOiBUUlBDQ2xpZW50PFRBcHBSb3V0ZXI+ID0+XG4gICAgY3JlYXRlVFJQQ0NsaWVudDxUQXBwUm91dGVyPih7XG4gICAgICAgIGxpbmtzOiBjcmVhdGVMaW5rcyhnZXRUb2tlbiksXG4gICAgfSk7XG4iLCAiaW1wb3J0IHtEQkNUWF9ERVZ9IGZyb20gJy4vZW52Lm1qcyc7XG5cbmNvbnN0IFBST0RfQ09SRSA9ICdodHRwczovL2NvcmUuZGJjdHguaW8nO1xuY29uc3QgREVWX0NPUkVfUE9SVCA9IDEyMDAxO1xuXG5leHBvcnQgY29uc3QgZ2V0VFJQQ1VSTCA9ICgpOiBzdHJpbmcgPT5cbiAgICAhREJDVFhfREVWID8gYCR7UFJPRF9DT1JFfS90cnBjYCA6IGBodHRwOi8vbG9jYWxob3N0OiR7REVWX0NPUkVfUE9SVH0vdHJwY2A7XG4iLCAiaW1wb3J0IHtleGlzdHNTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge2hvc3RuYW1lLCB0b3RhbG1lbSwgdXNlckluZm99IGZyb20gJ29zJztcbmltcG9ydCB7YmFzZW5hbWUsIGpvaW59IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtjd2QsIGVudiwgcGxhdGZvcm19IGZyb20gJ3Byb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgVEFJQXNzaXN0YW50LFxuICAgIFREYXRhYmFzZVByb3ZpZGVyLFxuICAgIFRPcyxcbiAgICBUU2hlbGwsXG4gICAgVFN5c3RlbU1lbW9yeSxcbiAgICBUUGFja2FnZU1hbmFnZXIsXG59IGZyb20gJ0BkYmN0eC9jb3JlJztcblxuZXhwb3J0IGNvbnN0IGRldGVjdE9TID0gKCk6IFRPcyA9PlxuICAgIHBsYXRmb3JtID09PSAnZGFyd2luJ1xuICAgICAgICA/ICdtYWNvcydcbiAgICAgICAgOiBwbGF0Zm9ybSA9PT0gJ3dpbjMyJ1xuICAgICAgICAgID8gJ3dpbmRvd3MnXG4gICAgICAgICAgOiAnbGludXgnO1xuXG5leHBvcnQgY29uc3QgZGV0ZWN0U2hlbGwgPSAoKTogVFNoZWxsID0+IHtcbiAgICBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICAgICAgcmV0dXJuICdwb3dlcnNoZWxsJztcbiAgICB9XG5cbiAgICBjb25zdCBzaGVsbCA9IGVudi5TSEVMTDtcblxuICAgIGlmICghc2hlbGwpIHtcbiAgICAgICAgcmV0dXJuICdvdGhlcic7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9IGJhc2VuYW1lKHNoZWxsKTtcbiAgICBjb25zdCBrbm93bjogUmVjb3JkPHN0cmluZywgVFNoZWxsPiA9IHtcbiAgICAgICAgYmFzaDogJ2Jhc2gnLFxuICAgICAgICB6c2g6ICd6c2gnLFxuICAgICAgICBrc2g6ICdrc2gnLFxuICAgICAgICBmaXNoOiAnZmlzaCcsXG4gICAgICAgIGFzaDogJ2FzaCcsXG4gICAgfTtcblxuICAgIHJldHVybiBrbm93bltuYW1lXSA/PyAnb3RoZXInO1xufTtcblxuZXhwb3J0IGNvbnN0IGRldGVjdFdTTCA9ICgpOiBib29sZWFuID0+ICEhKGVudi5XU0xfRElTVFJPX05BTUUgfHwgZW52LldTTEVOVik7XG5cbmNvbnN0IEdCID0gMTAyNCAqKiAzO1xuXG5leHBvcnQgY29uc3QgZGV0ZWN0U3lzdGVtTWVtb3J5ID0gKCk6IFRTeXN0ZW1NZW1vcnkgPT4ge1xuICAgIGNvbnN0IGJ5dGVzID0gdG90YWxtZW0oKTtcblxuICAgIGlmIChieXRlcyA8IDEyICogR0IpIHtcbiAgICAgICAgcmV0dXJuICc4Zyc7XG4gICAgfVxuICAgIGlmIChieXRlcyA8IDIwICogR0IpIHtcbiAgICAgICAgcmV0dXJuICcxNmcnO1xuICAgIH1cbiAgICBpZiAoYnl0ZXMgPCAyOCAqIEdCKSB7XG4gICAgICAgIHJldHVybiAnMjRnJztcbiAgICB9XG4gICAgaWYgKGJ5dGVzIDwgNDggKiBHQikge1xuICAgICAgICByZXR1cm4gJzMyZyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICdtb3JlJztcbn07XG5cbmV4cG9ydCBjb25zdCBkZXRlY3RQYWNrYWdlTWFuYWdlciA9ICgpOiBUUGFja2FnZU1hbmFnZXIgPT4ge1xuICAgIGNvbnN0IGFnZW50ID0gZW52Lm5wbV9jb25maWdfdXNlcl9hZ2VudCA/PyAnJztcbiAgICBjb25zdCBrbm93bjogcmVhZG9ubHkgVFBhY2thZ2VNYW5hZ2VyW10gPSBbXG4gICAgICAgICdwbnBtJyxcbiAgICAgICAgJ3lhcm4nLFxuICAgICAgICAnYnVuJyxcbiAgICAgICAgJ2Rlbm8nLFxuICAgIF0gYXMgY29uc3Q7XG5cbiAgICBjb25zdCBtYXRjaCA9IGtub3duLmZpbmQoKHBtKSA9PiBhZ2VudC5zdGFydHNXaXRoKHBtKSk7XG5cbiAgICByZXR1cm4gbWF0Y2ggPz8gJ25wbSc7XG59O1xuXG4vLyBUT0RPOiBJbXBsZW1lbnQgaG9zdG5hbWUgXHUyMTkyIHByb3ZpZGVyIG1hcHBpbmdcbmV4cG9ydCBjb25zdCBkZXRlY3RQcm92aWRlciA9IChob3N0bmFtZTogc3RyaW5nKTogVERhdGFiYXNlUHJvdmlkZXIgPT4ge1xuICAgIGNvbnN0IHJ1bGVzOiBSZWFkb25seUFycmF5PHJlYWRvbmx5IFtzdHJpbmcsIFREYXRhYmFzZVByb3ZpZGVyXT4gPSBbXG4gICAgICAgIFsnLm5lb24udGVjaCcsICduZW9uJ10sXG4gICAgICAgIFsnLnJkcy5hbWF6b25hd3MuY29tJywgJ2F3cyddLFxuICAgICAgICBbJy5hbWF6b25hd3MuY29tJywgJ2F3cyddLFxuICAgICAgICBbJy5zdXBhYmFzZS5jbycsICdzdXBhYmFzZSddLFxuICAgICAgICBbJy5zdXBhYmFzZS5jb20nLCAnc3VwYWJhc2UnXSxcbiAgICAgICAgWycuZGF0YWJhc2UuYXp1cmUuY29tJywgJ2F6dXJlJ10sXG4gICAgICAgIFsnLmNsb3Vkc3FsLicsICdnY3AnXSxcbiAgICAgICAgWycuc3FsLmdvb2cnLCAnZ2NwJ10sXG4gICAgICAgIFsnLnJhaWx3YXkuYXBwJywgJ3JhaWx3YXknXSxcbiAgICAgICAgWycucmVuZGVyLmNvbScsICdyZW5kZXInXSxcbiAgICAgICAgWycuYWl2ZW5jbG91ZC5jb20nLCAnYXZpZW4nXSxcbiAgICAgICAgWycuYWl2ZW4uaW8nLCAnYXZpZW4nXSxcbiAgICAgICAgWycudGltZXNjYWxlZGIuaW8nLCAndGltZXNjYWxlX2Nsb3VkJ10sXG4gICAgICAgIFsnLmhlcm9rdWFwcC5jb20nLCAnaGVyb2t1J10sXG4gICAgICAgIFsnLmZseS5kZXYnLCAnZmx5J10sXG4gICAgICAgIFsnLmtveWViLmFwcCcsICdrb3llYiddLFxuICAgICAgICBbJy5kYi5vbmRpZ2l0YWxvY2Vhbi5jb20nLCAnZGlnaXRhbF9vY2VhbiddLFxuICAgICAgICBbJy5hbGliYWJhY2xvdWRkYi5jb20nLCAnYWxpYmFkYV9jbG91ZCddLFxuICAgIF07XG5cbiAgICBjb25zdCBsb3dlciA9IGhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZm91bmQgPSBydWxlcy5maW5kKChbc3VmZml4XSkgPT4gbG93ZXIuaW5jbHVkZXMoc3VmZml4KSk7XG5cbiAgICByZXR1cm4gZm91bmQ/LlsxXSA/PyAnb3RoZXInO1xufTtcblxuY29uc3QgYWlBc3Npc3RhbnRSdWxlczogUmVhZG9ubHlBcnJheTxcbiAgICByZWFkb25seSBbVEFJQXNzaXN0YW50LCBSZWFkb25seUFycmF5PHN0cmluZz5dXG4+ID0gW1xuICAgIFsnY3Vyc29yJywgWycuY3Vyc29yJywgJy5jdXJzb3JydWxlcyddXSxcbiAgICBbJ2NsYXVkZV9jb2RlJywgWycuY2xhdWRlJywgJ0NMQVVERS5tZCddXSxcbiAgICBbJ29wZW5jb2RlJywgWycub3BlbmNvZGUnXV0sXG4gICAgWydhaWRlcicsIFsnLmFpZGVyLmNvbmYueW1sJywgJy5haWRlci5jaGF0Lmhpc3RvcnkubWQnXV0sXG4gICAgWydvcGVuYWlfY29kZXgnLCBbJy5jb2RleCddXSxcbiAgICBbJ2dpdGh1Yl9jb3BpbG90JywgWycuZ2l0aHViL2NvcGlsb3QtaW5zdHJ1Y3Rpb25zLm1kJ11dLFxuXTtcblxuZXhwb3J0IGNvbnN0IGRldGVjdEFJQXNzaXN0YW50cyA9ICgpOiBUQUlBc3Npc3RhbnRbXSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IGN3ZCgpO1xuXG4gICAgcmV0dXJuIGFpQXNzaXN0YW50UnVsZXNcbiAgICAgICAgLmZpbHRlcigoWywgcGF0aHNdKSA9PiBwYXRocy5zb21lKChwKSA9PiBleGlzdHNTeW5jKGpvaW4ocm9vdCwgcCkpKSlcbiAgICAgICAgLm1hcCgoW25hbWVdKSA9PiBuYW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZXRlY3REb2NrZXIgPSAoKTogYm9vbGVhbiA9PiBleGlzdHNTeW5jKCcvLmRvY2tlcmVudicpO1xuXG5leHBvcnQgY29uc3QgZGV0ZWN0U1NIU2Vzc2lvbiA9ICgpOiBib29sZWFuID0+XG4gICAgISEoZW52LlNTSF9DT05ORUNUSU9OIHx8IGVudi5TU0hfQ0xJRU5UIHx8IGVudi5TU0hfVFRZKTtcblxuZXhwb3J0IGNvbnN0IGRldGVjdEhvc3RuYW1lID0gKCk6IHN0cmluZyA9PiBob3N0bmFtZSgpO1xuXG5leHBvcnQgY29uc3QgZGV0ZWN0VXNlcm5hbWUgPSAoKTogc3RyaW5nID0+IHVzZXJJbmZvKCkudXNlcm5hbWU7XG5cbmV4cG9ydCBjb25zdCBpc0xvY2FsaG9zdCA9IChob3N0bmFtZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgbG93ZXIgPSBob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgbG93ZXIgPT09ICdsb2NhbGhvc3QnIHx8XG4gICAgICAgIGxvd2VyID09PSAnMTI3LjAuMC4xJyB8fFxuICAgICAgICBsb3dlciA9PT0gJzo6MScgfHxcbiAgICAgICAgbG93ZXIgPT09ICcwLjAuMC4wJ1xuICAgICk7XG59O1xuIiwgImltcG9ydCB7aG9tZWRpcn0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQge2pvaW59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge3JlYWRGaWxlLCB3cml0ZUZpbGUsIG1rZGlyfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7dXVpZHY3fSBmcm9tICd1dWlkdjcnO1xuXG5jb25zdCBDT05GSUdfRElSID0gam9pbihob21lZGlyKCksICcuZGJjdHgnKTtcbmNvbnN0IENPTkZJR19QQVRIID0gam9pbihDT05GSUdfRElSLCAnY29uZmlnLmpzb24nKTtcblxudHlwZSBUQ29uZmlnID0ge3JlYWRvbmx5IHRva2VuPzogc3RyaW5nOyByZWFkb25seSBkZXZpY2VfaWQ6IHN0cmluZ307XG5cbmNvbnN0IHJlYWRSYXdDb25maWcgPSBhc3luYyAoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IGF3YWl0IHJlYWRGaWxlKENPTkZJR19QQVRILCAndXRmLTgnKTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmF3KSA/PyB7fTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbn07XG5cbmNvbnN0IHBlcnNpc3QgPSBhc3luYyAoZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBhd2FpdCBta2RpcihDT05GSUdfRElSLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKENPTkZJR19QQVRILCBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCA0KSwgJ3V0Zi04Jyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVhZENvbmZpZyA9IGFzeW5jICgpOiBQcm9taXNlPFRDb25maWc+ID0+IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCByZWFkUmF3Q29uZmlnKCk7XG5cbiAgICBpZiAodHlwZW9mIHJhdy5kZXZpY2VfaWQgPT09ICdzdHJpbmcnICYmIHJhdy5kZXZpY2VfaWQubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9rZW46IHR5cGVvZiByYXcudG9rZW4gPT09ICdzdHJpbmcnID8gcmF3LnRva2VuIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGV2aWNlX2lkOiByYXcuZGV2aWNlX2lkLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGRldmljZV9pZCA9IHV1aWR2NygpO1xuICAgIGF3YWl0IHBlcnNpc3Qoey4uLnJhdywgZGV2aWNlX2lkfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0b2tlbjogdHlwZW9mIHJhdy50b2tlbiA9PT0gJ3N0cmluZycgPyByYXcudG9rZW4gOiB1bmRlZmluZWQsXG4gICAgICAgIGRldmljZV9pZCxcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHdyaXRlQ29uZmlnID0gYXN5bmMgKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCByZWFkUmF3Q29uZmlnKCk7XG4gICAgYXdhaXQgcGVyc2lzdCh7Li4ucmF3LCB0b2tlbn0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGZsdXNoQ29uZmlnID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IGF3YWl0IHJlYWRSYXdDb25maWcoKTtcbiAgICAgICAgY29uc3Qge3Rva2VuOiBfLCAuLi5yZXN0fSA9IHJhdztcbiAgICAgICAgYXdhaXQgcGVyc2lzdChyZXN0KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlIGlmIGZpbGUgZG9lc24ndCBleGlzdFxuICAgIH1cbn07XG4iLCAiaW1wb3J0IHtjcmVhdGVIYXNofSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQge3JlYWRGaWxlLCBta2RpciwgcmVhZGRpciwgc3RhdH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQge2pvaW59IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCBQUXVldWUgZnJvbSAncC1xdWV1ZSc7XG5pbXBvcnQge3J1bkluQWN0aW9uLCB3aGVufSBmcm9tICdtb2J4JztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcbmltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5pbXBvcnQgdHlwZSB7VERhdGFiYXNlSW50cm9zcGVjdGlvbn0gZnJvbSAnQGRiY3R4L2NvcmUnO1xuXG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi9zdG9yZS5tanMnO1xuaW1wb3J0IHtcbiAgICBhdG9taWNXcml0ZUZpbGUsXG4gICAgcmVjb3ZlckF0b21pY1dyaXRlc0luRGlyLFxufSBmcm9tICcuLi9saWIvYXRvbWljLXdyaXRlLm1qcyc7XG5pbXBvcnQge1xuICAgIHNhbXBsZUNvbHVtbixcbiAgICBzYW1wbGVDb21wb3NpdGVTdWJGaWVsZCxcbiAgICBmZXRjaENvbXBvc2l0ZVN1YkZpZWxkcyxcbiAgICB0eXBlIFRDb2x1bW5TYW1wbGUsXG4gICAgdHlwZSBUUmVsYXRpb25LaW5kLFxufSBmcm9tICcuLi9kYi9pbmRleC5tanMnO1xuXG5leHBvcnQgdHlwZSBUU2Vuc2l0aXZlTWFzayA9IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj47XG5cbmV4cG9ydCB0eXBlIFRUYWJsZVNhbXBsZUNvbHVtbiA9IHtcbiAgICByZWFkb25seSBzdHJhdGVneTogJ2Rpc3RpbmN0JyB8ICdyYW5kb20nO1xuICAgIHJlYWRvbmx5IGNvdW50OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgdmFsdWVzOiByZWFkb25seSBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFRUYWJsZVNhbXBsZXMgPSB7XG4gICAgcmVhZG9ubHkgdGFibGU6IHN0cmluZztcbiAgICByZWFkb25seSBzYW1wbGVkX2F0OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgY29sdW1uczogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgVFRhYmxlU2FtcGxlQ29sdW1uPj47XG4gICAgcmVhZG9ubHkgZXhjbHVkZWRfY29sdW1uczogcmVhZG9ubHkgc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBUVGFibGVTYW1wbGVFdmVudCA9IHtcbiAgICByZWFkb25seSB0YWJsZU5hbWU6IHN0cmluZztcbiAgICByZWFkb25seSBzYW1wbGVzOiBUVGFibGVTYW1wbGVzO1xufTtcblxuY29uc3QgU0FNUExFQUJMRV9UWVBFX1BSRUZJWEVTOiByZWFkb25seSBzdHJpbmdbXSA9IE9iamVjdC5mcmVlemUoW1xuICAgICd0ZXh0JyxcbiAgICAnY2hhcmFjdGVyJyxcbiAgICAnY2l0ZXh0JyxcbiAgICAnaW50ZWdlcicsXG4gICAgJ2JpZ2ludCcsXG4gICAgJ3NtYWxsaW50JyxcbiAgICAnbnVtZXJpYycsXG4gICAgJ2RlY2ltYWwnLFxuICAgICdyZWFsJyxcbiAgICAnZG91YmxlIHByZWNpc2lvbicsXG4gICAgJ2Jvb2xlYW4nLFxuICAgICdkYXRlJyxcbiAgICAndGltZXN0YW1wJyxcbiAgICAndGltZSB3aXRoJyxcbiAgICAndGltZSB3aXRob3V0JyxcbiAgICAnaW50ZXJ2YWwnLFxuICAgICd1dWlkJyxcbiAgICAnanNvbicsXG4gICAgJ21vbmV5JyxcbiAgICAnaW5ldCcsXG4gICAgJ2NpZHInLFxuXSBhcyBjb25zdCk7XG5cbmNvbnN0IFRFWFRVQUxfVFlQRV9QUkVGSVhFUzogcmVhZG9ubHkgc3RyaW5nW10gPSBPYmplY3QuZnJlZXplKFtcbiAgICAndGV4dCcsXG4gICAgJ2NoYXJhY3RlcicsXG4gICAgJ2NpdGV4dCcsXG4gICAgJ2pzb24nLFxuXSBhcyBjb25zdCk7XG5cbmNvbnN0IE1BWF9URVhUX0xFTkdUSCA9IDUxMjtcbmNvbnN0IFNBTVBMSU5HX0NPTkNVUlJFTkNZID0gODtcblxuY29uc3Qgc2Vuc2l0aXZlTWFza1NjaGVtYSA9IHoucmVjb3JkKHouc3RyaW5nKCksIHouYXJyYXkoei5zdHJpbmcoKSkpO1xuXG5jb25zdCBtYXRjaGVzUHJlZml4ID0gKFxuICAgIGRhdGFUeXBlOiBzdHJpbmcsXG4gICAgcHJlZml4ZXM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgbG93ZXIgPSBkYXRhVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBwcmVmaXhlcy5zb21lKChwcmVmaXgpID0+IGxvd2VyLnN0YXJ0c1dpdGgocHJlZml4KSk7XG59O1xuXG5jb25zdCBpc1NhbXBsZWFibGVTY2FsYXIgPSAoZGF0YVR5cGU6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICBtYXRjaGVzUHJlZml4KGRhdGFUeXBlLCBTQU1QTEVBQkxFX1RZUEVfUFJFRklYRVMpO1xuXG5jb25zdCBpc0FycmF5VHlwZSA9IChkYXRhVHlwZTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICAgIGRhdGFUeXBlLmVuZHNXaXRoKCdbXScpIHx8IGRhdGFUeXBlLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnYXJyYXknKTtcblxuY29uc3QgZ2V0QXJyYXlFbGVtZW50VHlwZSA9IChkYXRhVHlwZTogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgZGF0YVR5cGUuZW5kc1dpdGgoJ1tdJykgPyBkYXRhVHlwZS5zbGljZSgwLCAtMikgOiBkYXRhVHlwZTtcblxuY29uc3QgcmVzb2x2ZUVudW1WYWx1ZXMgPSAoXG4gICAgZGF0YVR5cGU6IHN0cmluZyxcbiAgICBlbnVtczogVERhdGFiYXNlSW50cm9zcGVjdGlvblsnZW51bXMnXSxcbik6IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbCA9PiB7XG4gICAgaWYgKGVudW1zW2RhdGFUeXBlXSkge1xuICAgICAgICByZXR1cm4gZW51bXNbZGF0YVR5cGVdLnZhbHVlcztcbiAgICB9XG4gICAgaWYgKGlzQXJyYXlUeXBlKGRhdGFUeXBlKSkge1xuICAgICAgICBjb25zdCBlbCA9IGdldEFycmF5RWxlbWVudFR5cGUoZGF0YVR5cGUpO1xuICAgICAgICBpZiAoZW51bXNbZWxdKSB7XG4gICAgICAgICAgICByZXR1cm4gZW51bXNbZWxdLnZhbHVlcztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IGlzVGV4dHVhbFR5cGUgPSAoZGF0YVR5cGU6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICBtYXRjaGVzUHJlZml4KGRhdGFUeXBlLCBURVhUVUFMX1RZUEVfUFJFRklYRVMpO1xuXG5jb25zdCB0cnVuY2F0ZVZhbHVlID0gKHZhbHVlOiBzdHJpbmcsIGRhdGFUeXBlOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgICBpc1RleHR1YWxUeXBlKGRhdGFUeXBlKSAmJiB2YWx1ZS5sZW5ndGggPiBNQVhfVEVYVF9MRU5HVEhcbiAgICAgICAgPyB2YWx1ZS5zbGljZSgwLCBNQVhfVEVYVF9MRU5HVEgpICsgJy4uLidcbiAgICAgICAgOiB2YWx1ZTtcblxuY29uc3QgaGFzaFRhYmxlTmFtZSA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgICBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUobmFtZSkuZGlnZXN0KCdoZXgnKTtcblxuZXhwb3J0IGNvbnN0IGxvYWRTZW5zaXRpdmVNYXNrID0gYXN5bmMgKFxuICAgIHBhdGg6IHN0cmluZyxcbik6IFByb21pc2U8VFNlbnNpdGl2ZU1hc2s+ID0+IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCByZWFkRmlsZShwYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdykgYXMgdW5rbm93bjtcbiAgICByZXR1cm4gc2Vuc2l0aXZlTWFza1NjaGVtYS5wYXJzZShwYXJzZWQpO1xufTtcblxuY29uc3QgaXNTYW1wbGVhYmxlVHlwZSA9IChcbiAgICBkYXRhVHlwZTogc3RyaW5nLFxuICAgIGVudW1OYW1lczogUmVhZG9ubHlTZXQ8c3RyaW5nPixcbik6IGJvb2xlYW4gPT4ge1xuICAgIGlmIChpc1NhbXBsZWFibGVTY2FsYXIoZGF0YVR5cGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoZW51bU5hbWVzLmhhcyhkYXRhVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChpc0FycmF5VHlwZShkYXRhVHlwZSkpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGUgPSBnZXRBcnJheUVsZW1lbnRUeXBlKGRhdGFUeXBlKTtcbiAgICAgICAgcmV0dXJuIGlzU2FtcGxlYWJsZVNjYWxhcihlbGVtZW50VHlwZSkgfHwgZW51bU5hbWVzLmhhcyhlbGVtZW50VHlwZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcmVwYXJlT3V0cHV0RGlyID0gYXN5bmMgKFxuICAgIGRpclBhdGg6IHN0cmluZyxcbiAgICBhbGxvd092ZXJ3cml0ZTogYm9vbGVhbixcbiAgICBzdG9yZTogVFN0b3JlLFxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGlyU3RhdCA9IGF3YWl0IHN0YXQoZGlyUGF0aCkuY2F0Y2goKCkgPT4gbnVsbCk7XG5cbiAgICAgICAgaWYgKGRpclN0YXQgIT09IG51bGwgJiYgIWRpclN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLnN0YXRlID0gJ2Vycm9yJztcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5lcnJvciA9IGAtLW91dHB1dC1zYW1wbGVzIHBhdGggXCIke2RpclBhdGh9XCIgZXhpc3RzIGJ1dCBpcyBub3QgYSBkaXJlY3RvcnlgO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlyU3RhdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgYXdhaXQgbWtkaXIoZGlyUGF0aCwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLm91dHB1dERpciA9IGRpclBhdGg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcmVjb3ZlckF0b21pY1dyaXRlc0luRGlyKGRpclBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCByZWFkZGlyKGRpclBhdGgpO1xuXG4gICAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCA+IDAgJiYgIWFsbG93T3ZlcndyaXRlKSB7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcuc3RhdGUgPSAncHJvbXB0aW5nLW92ZXJ3cml0ZSc7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcub3V0cHV0RGlyID0gZGlyUGF0aDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhd2FpdCB3aGVuKCgpID0+IHN0b3JlLnN0ZXBzLnNhbXBsaW5nLmNvbmZpcm1lZCAhPT0gbnVsbCk7XG5cbiAgICAgICAgICAgIGlmICghc3RvcmUuc3RlcHMuc2FtcGxpbmcuY29uZmlybWVkKSB7XG4gICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5zdGF0ZSA9ICdkb25lJztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5vdXRwdXREaXIgPSBkaXJQYXRoO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLnN0YXRlID0gJ2Vycm9yJztcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLmVycm9yID1cbiAgICAgICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgICAgICAgICAgICA/IGBGYWlsZWQgdG8gcHJlcGFyZSBvdXRwdXQgZGlyZWN0b3J5OiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICAgICAgICAgICAgICAgOiBTdHJpbmcoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgcGVyc2lzdFRhYmxlU2FtcGxlc1RvRGlyID0gYXN5bmMgKFxuICAgIG91dHB1dERpcjogc3RyaW5nLFxuICAgIGV2ZW50OiBUVGFibGVTYW1wbGVFdmVudCxcbiAgICBpbmRleEFjY3VtdWxhdG9yOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3QgZmlsZU5hbWUgPSBgJHtoYXNoVGFibGVOYW1lKGV2ZW50LnRhYmxlTmFtZSl9Lmpzb25gO1xuXG4gICAgYXdhaXQgYXRvbWljV3JpdGVGaWxlKFxuICAgICAgICBqb2luKG91dHB1dERpciwgZmlsZU5hbWUpLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShldmVudC5zYW1wbGVzLCBudWxsLCAyKSxcbiAgICApO1xuXG4gICAgaW5kZXhBY2N1bXVsYXRvcltldmVudC50YWJsZU5hbWVdID0gZmlsZU5hbWU7XG5cbiAgICBhd2FpdCBhdG9taWNXcml0ZUZpbGUoXG4gICAgICAgIGpvaW4ob3V0cHV0RGlyLCAnaW5kZXguanNvbicpLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShpbmRleEFjY3VtdWxhdG9yLCBudWxsLCAyKSxcbiAgICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHJ1blNhbXBsaW5nID0gYXN5bmMgZnVuY3Rpb24qIChcbiAgICBwb29sOiBQb29sLFxuICAgIGludHJvc3BlY3Rpb246IFREYXRhYmFzZUludHJvc3BlY3Rpb24sXG4gICAgc3RvcmU6IFRTdG9yZSxcbiAgICBtYXNrOiBUU2Vuc2l0aXZlTWFzayxcbiAgICB0YWJsZUZpbHRlcj86IFJlYWRvbmx5U2V0PHN0cmluZz4sXG4pOiBBc3luY0dlbmVyYXRvcjxUVGFibGVTYW1wbGVFdmVudD4ge1xuICAgIGNvbnN0IGVudW1OYW1lczogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoXG4gICAgICAgIE9iamVjdC5rZXlzKGludHJvc3BlY3Rpb24uZW51bXMpLFxuICAgICk7XG5cbiAgICBjb25zdCByZWxhdGlvbkVudHJpZXMgPSBPYmplY3QuZW50cmllcyhpbnRyb3NwZWN0aW9uLnJlbGF0aW9ucykuZmlsdGVyKFxuICAgICAgICAoW25hbWVdKSA9PiAodGFibGVGaWx0ZXIgPyB0YWJsZUZpbHRlci5oYXMobmFtZSkgOiB0cnVlKSxcbiAgICApO1xuXG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5zdGF0ZSA9ICdmZXRjaGluZyc7XG4gICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLmNvdW50cy50b3RhbFRhYmxlcyA9IHJlbGF0aW9uRW50cmllcy5sZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjb25zdCBxdWV1ZSA9IG5ldyBQUXVldWUoe2NvbmN1cnJlbmN5OiBTQU1QTElOR19DT05DVVJSRU5DWX0pO1xuXG4gICAgZm9yIChjb25zdCBbdGFibGVOYW1lLCByZWxhdGlvbl0gb2YgcmVsYXRpb25FbnRyaWVzKSB7XG4gICAgICAgIGNvbnN0IG1hc2tlZENvbHVtbnM6IHJlYWRvbmx5IHN0cmluZ1tdID0gbWFza1t0YWJsZU5hbWVdID8/IFtdO1xuICAgICAgICBjb25zdCBtYXNrZWRTZXQgPSBuZXcgU2V0KG1hc2tlZENvbHVtbnMpO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gT2JqZWN0LnZhbHVlcyhyZWxhdGlvbi5hdHRyaWJ1dGVzKTtcbiAgICAgICAgY29uc3QgcmVsYXRpb25LaW5kID0gcmVsYXRpb24ua2luZCBhcyBUUmVsYXRpb25LaW5kO1xuXG4gICAgICAgIGNvbnN0IGVzdGltYXRlZFJvd0NvdW50ID0gcmVsYXRpb24uZXN0aW1hdGVkX3Jvd19jb3VudCA/PyAwO1xuXG4gICAgICAgIHR5cGUgVFdvcmtJdGVtID0ge1xuICAgICAgICAgICAgcmVhZG9ubHkgY29sdW1uTmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgcmVhZG9ubHkgZGF0YVR5cGU6IHN0cmluZztcbiAgICAgICAgICAgIHJlYWRvbmx5IGVzdGltYXRlZERpc3RpbmN0OiBudW1iZXI7XG4gICAgICAgICAgICByZWFkb25seSBjb21wb3NpdGU6IHtcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgc3ViRmllbGROYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICB9IHwgbnVsbDtcbiAgICAgICAgICAgIHJlYWRvbmx5IGVudW1WYWx1ZXM6IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbDtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB3b3JrSXRlbXM6IFRXb3JrSXRlbVtdID0gW107XG4gICAgICAgIGxldCBza2lwcGVkID0gMDtcblxuICAgICAgICBmb3IgKGNvbnN0IGF0dHIgb2YgYXR0cmlidXRlcykge1xuICAgICAgICAgICAgaWYgKG1hc2tlZFNldC5oYXMoYXR0ci5uYW1lKSkge1xuICAgICAgICAgICAgICAgIHNraXBwZWQgKz0gMTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGF0YVR5cGUgPSBhdHRyLmRhdGFfdHlwZTtcblxuICAgICAgICAgICAgaWYgKGlzU2FtcGxlYWJsZVR5cGUoZGF0YVR5cGUsIGVudW1OYW1lcykpIHtcbiAgICAgICAgICAgICAgICB3b3JrSXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6IGF0dHIubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGVzdGltYXRlZERpc3RpbmN0OlxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VzdGltYXRlZF9kaXN0aW5jdCcgaW4gYXR0clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGF0dHIuZXN0aW1hdGVkX2Rpc3RpbmN0IGFzIG51bWJlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZW51bVZhbHVlczogcmVzb2x2ZUVudW1WYWx1ZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGludHJvc3BlY3Rpb24uZW51bXMsXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICFpc0FycmF5VHlwZShkYXRhVHlwZSkgJiZcbiAgICAgICAgICAgICAgICAhaXNTYW1wbGVhYmxlU2NhbGFyKGRhdGFUeXBlKSAmJlxuICAgICAgICAgICAgICAgICFlbnVtTmFtZXMuaGFzKGRhdGFUeXBlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gUG90ZW50aWFsIGNvbXBvc2l0ZSB0eXBlIFx1MjAxNCBpbnRyb3NwZWN0IHN1Yi1maWVsZHNcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJGaWVsZHMgPSBhd2FpdCBmZXRjaENvbXBvc2l0ZVN1YkZpZWxkcyhwb29sLCBkYXRhVHlwZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3ViRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZiBvZiBzdWJGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXNrZWRTZXQuaGFzKHNmLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcHBlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTYW1wbGVhYmxlVHlwZShzZi5kYXRhX3R5cGUsIGVudW1OYW1lcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrSXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6IGAke2F0dHIubmFtZX0uJHtzZi5uYW1lfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBzZi5kYXRhX3R5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdGltYXRlZERpc3RpbmN0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6IGF0dHIubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkZpZWxkTmFtZTogc2YubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bVZhbHVlczogcmVzb2x2ZUVudW1WYWx1ZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZi5kYXRhX3R5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRyb3NwZWN0aW9uLmVudW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwcGVkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBza2lwcGVkICs9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBza2lwcGVkICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5jb3VudHMudG90YWxDb2x1bW5zICs9IHdvcmtJdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5jb3VudHMuc2tpcHBlZENvbHVtbnMgKz0gc2tpcHBlZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgY29sdW1uUmVzdWx0czogVENvbHVtblNhbXBsZVtdID0gKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgd29ya0l0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmVudW1WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcuY291bnRzLnNhbXBsZWRDb2x1bW5zICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5OYW1lID0gaXRlbS5jb21wb3NpdGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYCR7aXRlbS5jb21wb3NpdGUuY29sdW1uTmFtZX0uJHtpdGVtLmNvbXBvc2l0ZS5zdWJGaWVsZE5hbWV9YFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtLmNvbHVtbk5hbWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmU8VENvbHVtblNhbXBsZT4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uX25hbWU6IGNvbHVtbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJhdGVneTogJ2Rpc3RpbmN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlczogaXRlbS5lbnVtVmFsdWVzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcXVldWUuYWRkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gaXRlbS5jb21wb3NpdGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYXdhaXQgc2FtcGxlQ29tcG9zaXRlU3ViRmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb21wb3NpdGUuY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29tcG9zaXRlLnN1YkZpZWxkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZXN0aW1hdGVkRGlzdGluY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZWRSb3dDb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uS2luZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhd2FpdCBzYW1wbGVDb2x1bW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5lc3RpbWF0ZWREaXN0aW5jdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdGltYXRlZFJvd0NvdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpb25LaW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLmNvdW50cy5zYW1wbGVkQ29sdW1ucyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICkpIGFzIFRDb2x1bW5TYW1wbGVbXTtcblxuICAgICAgICBjb25zdCBjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBUVGFibGVTYW1wbGVDb2x1bW4+ID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAgICAgY29sdW1uUmVzdWx0cy5tYXAoKHNhbXBsZSkgPT4gW1xuICAgICAgICAgICAgICAgIHNhbXBsZS5jb2x1bW5fbmFtZSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBzYW1wbGUuc3RyYXRlZ3ksXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OiBzYW1wbGUudmFsdWVzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBzYW1wbGUudmFsdWVzLm1hcCgodikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRydW5jYXRlVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrSXRlbXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcpID0+IHcuY29sdW1uTmFtZSA9PT0gc2FtcGxlLmNvbHVtbl9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/LmRhdGFUeXBlID8/ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSksXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdGFibGVTYW1wbGVzOiBUVGFibGVTYW1wbGVzID0ge1xuICAgICAgICAgICAgdGFibGU6IHRhYmxlTmFtZSxcbiAgICAgICAgICAgIHNhbXBsZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICBleGNsdWRlZF9jb2x1bW5zOiBtYXNrZWRDb2x1bW5zLFxuICAgICAgICB9O1xuXG4gICAgICAgIHlpZWxkIHt0YWJsZU5hbWUsIHNhbXBsZXM6IHRhYmxlU2FtcGxlc307XG5cbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcuY291bnRzLmNvbXBsZXRlZFRhYmxlcyArPSAxO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLnN0YXRlID0gJ2RvbmUnO1xuICAgIH0pO1xufTtcbiIsICJpbXBvcnQge3dyaXRlRmlsZSwgcmVuYW1lLCBybSwgbWtkaXIsIHN0YXQsIHJlYWRkaXJ9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtkaXJuYW1lLCBqb2lufSBmcm9tICdub2RlOnBhdGgnO1xuXG5jb25zdCBleGlzdHMgPSBhc3luYyAocGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc3RhdChwYXRoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59O1xuXG4vLyBDcmFzaC1zYWZlIHdyaXRlIHByb3RvY29sOlxuLy8gICAxLiB3cml0ZSBkYXRhIHRvIDxwYXRoPi50bXBcbi8vICAgMi4gaWYgPHBhdGg+IGV4aXN0cywgcmVuYW1lIDxwYXRoPiAtPiA8cGF0aD4uYmFrICAocHJlc2VydmVzIHByaW9yIGNvbnRlbnQpXG4vLyAgIDMuIHJlbmFtZSA8cGF0aD4udG1wIC0+IDxwYXRoPiAgICAgICAgICAgICAgICAgICAgKGF0b21pYyBvbiBQT1NJWCBzYW1lLWZzKVxuLy8gICA0LiBybSA8cGF0aD4uYmFrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGVhbnVwKVxuLy8gQSBjcmFzaCBiZXR3ZWVuIGFueSB0d28gc3RlcHMgbGVhdmVzIGVpdGhlciB0aGUgb2xkIGZpbGUgb3IgdGhlIG5ldyBmaWxlXG4vLyBpbnRhY3QgYXQgPHBhdGg+OyBhIGxlZnRvdmVyIC5iYWsgY2FuIGJlIGluc3BlY3RlZCBtYW51YWxseSBpZiBuZWVkZWQuXG5leHBvcnQgY29uc3QgYXRvbWljV3JpdGVGaWxlID0gYXN5bmMgKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBkYXRhOiBzdHJpbmcsXG4gICAgZW5jb2Rpbmc6IEJ1ZmZlckVuY29kaW5nID0gJ3V0Zi04Jyxcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IHRtcFBhdGggPSBgJHtwYXRofS50bXBgO1xuICAgIGNvbnN0IGJha1BhdGggPSBgJHtwYXRofS5iYWtgO1xuXG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShwYXRoKSwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuXG4gICAgYXdhaXQgd3JpdGVGaWxlKHRtcFBhdGgsIGRhdGEsIGVuY29kaW5nKTtcblxuICAgIGNvbnN0IHRhcmdldEV4aXN0cyA9IGF3YWl0IGV4aXN0cyhwYXRoKTtcblxuICAgIGlmICh0YXJnZXRFeGlzdHMpIHtcbiAgICAgICAgYXdhaXQgcmVuYW1lKHBhdGgsIGJha1BhdGgpO1xuICAgIH1cblxuICAgIGF3YWl0IHJlbmFtZSh0bXBQYXRoLCBwYXRoKTtcblxuICAgIGlmICh0YXJnZXRFeGlzdHMpIHtcbiAgICAgICAgYXdhaXQgcm0oYmFrUGF0aCwge2ZvcmNlOiB0cnVlfSk7XG4gICAgfVxufTtcblxuLy8gUmVjb3ZlciBhIHNpbmdsZSBhdG9taWMtd3JpdGUgdGFyZ2V0IGZyb20gYSBwcmlvciBjcmFzaC5cbi8vICAgLSA8dGFyZ2V0Pi50bXAgaXMgcGFydGlhbC13cml0ZSBnYXJiYWdlOyBkZWxldGUgaXQuXG4vLyAgIC0gPHRhcmdldD4uYmFrIGlzIHRoZSBwcmV2aW91cyBjb250ZW50OlxuLy8gICAgICAgKiBpZiA8dGFyZ2V0PiBleGlzdHMsIHRoZSByZW5hbWUgc3VjY2VlZGVkIFx1MjAxNCBqdXN0IHJlbW92ZSAuYmFrXG4vLyAgICAgICAqIGlmIDx0YXJnZXQ+IGlzIG1pc3NpbmcsIHRoZSByZW5hbWUgbmV2ZXIgaGFwcGVuZWQgXHUyMDE0IHJlc3RvcmUgLmJhayAtPiB0YXJnZXRcbmNvbnN0IHJlY292ZXJQYWlyID0gYXN5bmMgKFxuICAgIHRhcmdldFBhdGg6IHN0cmluZyxcbiAgICB0bXBFeGlzdHM6IGJvb2xlYW4sXG4gICAgYmFrRXhpc3RzOiBib29sZWFuLFxuICAgIHRhcmdldEV4aXN0czogYm9vbGVhbixcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICh0bXBFeGlzdHMpIHtcbiAgICAgICAgYXdhaXQgcm0oYCR7dGFyZ2V0UGF0aH0udG1wYCwge2ZvcmNlOiB0cnVlfSk7XG4gICAgfVxuXG4gICAgaWYgKGJha0V4aXN0cykge1xuICAgICAgICBpZiAodGFyZ2V0RXhpc3RzKSB7XG4gICAgICAgICAgICBhd2FpdCBybShgJHt0YXJnZXRQYXRofS5iYWtgLCB7Zm9yY2U6IHRydWV9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHJlbmFtZShgJHt0YXJnZXRQYXRofS5iYWtgLCB0YXJnZXRQYXRoKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWNvdmVyQXRvbWljV3JpdGUgPSBhc3luYyAodGFyZ2V0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3QgW3RtcEV4aXN0cywgYmFrRXhpc3RzLCB0YXJnZXRFeGlzdHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBleGlzdHMoYCR7dGFyZ2V0UGF0aH0udG1wYCksXG4gICAgICAgIGV4aXN0cyhgJHt0YXJnZXRQYXRofS5iYWtgKSxcbiAgICAgICAgZXhpc3RzKHRhcmdldFBhdGgpLFxuICAgIF0pO1xuXG4gICAgYXdhaXQgcmVjb3ZlclBhaXIodGFyZ2V0UGF0aCwgdG1wRXhpc3RzLCBiYWtFeGlzdHMsIHRhcmdldEV4aXN0cyk7XG59O1xuXG5jb25zdCBUTVBfU1VGRklYID0gJy50bXAnO1xuY29uc3QgQkFLX1NVRkZJWCA9ICcuYmFrJztcblxuZXhwb3J0IGNvbnN0IHJlY292ZXJBdG9taWNXcml0ZXNJbkRpciA9IGFzeW5jIChcbiAgICBkaXJQYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBkaXJFeGlzdHMgPSBhd2FpdCBleGlzdHMoZGlyUGF0aCk7XG5cbiAgICBpZiAoIWRpckV4aXN0cykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHJlYWRkaXIoZGlyUGF0aCk7XG5cbiAgICBjb25zdCB0YXJnZXRzID0gbmV3IFNldChcbiAgICAgICAgZW50cmllc1xuICAgICAgICAgICAgLmZpbHRlcigoZSkgPT4gZS5lbmRzV2l0aChUTVBfU1VGRklYKSB8fCBlLmVuZHNXaXRoKEJBS19TVUZGSVgpKVxuICAgICAgICAgICAgLm1hcCgoZSkgPT5cbiAgICAgICAgICAgICAgICBlLmVuZHNXaXRoKFRNUF9TVUZGSVgpXG4gICAgICAgICAgICAgICAgICAgID8gZS5zbGljZSgwLCAtVE1QX1NVRkZJWC5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIDogZS5zbGljZSgwLCAtQkFLX1NVRkZJWC5sZW5ndGgpLFxuICAgICAgICAgICAgKSxcbiAgICApO1xuXG4gICAgY29uc3QgZW50cnlTZXQgPSBuZXcgU2V0KGVudHJpZXMpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIEFycmF5LmZyb20odGFyZ2V0cykubWFwKCh0YXJnZXQpID0+XG4gICAgICAgICAgICByZWNvdmVyUGFpcihcbiAgICAgICAgICAgICAgICBqb2luKGRpclBhdGgsIHRhcmdldCksXG4gICAgICAgICAgICAgICAgZW50cnlTZXQuaGFzKGAke3RhcmdldH0ke1RNUF9TVUZGSVh9YCksXG4gICAgICAgICAgICAgICAgZW50cnlTZXQuaGFzKGAke3RhcmdldH0ke0JBS19TVUZGSVh9YCksXG4gICAgICAgICAgICAgICAgZW50cnlTZXQuaGFzKHRhcmdldCksXG4gICAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICk7XG59O1xuIiwgImltcG9ydCB7cnVuSW5BY3Rpb259IGZyb20gJ21vYngnO1xuaW1wb3J0IHR5cGUge1RSUENDbGllbnR9IGZyb20gJ0B0cnBjL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7VEFwcFJvdXRlcn0gZnJvbSAnQGRiY3R4L2NvcmUnO1xuaW1wb3J0IHtcbiAgICBwYXJzZVBvc3RJbnRyb3NwZWN0aW9uU3RhZ2UsXG4gICAgcGFyc2VQb3N0U2FtcGxpbmdMYWJlbCxcbn0gZnJvbSAnQGRiY3R4L2NvbW1vbic7XG5pbXBvcnQge3N0cmVhbUpvYiwgdHlwZSBUSm9iU25hcHNob3R9IGZyb20gJy4uL2xpYi9zdHJlYW0tam9iLm1qcyc7XG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi9zdG9yZS5tanMnO1xuaW1wb3J0IHtsb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci5tanMnO1xuXG4vLyBTdHJlYW1zIGEgcG9zdC1pbnRyb3NwZWN0aW9uIGpvYiB0byBjb21wbGV0aW9uIGFuZCBiaW5kcyBwcm9ncmVzcyArIHRlcm1pbmFsIHN0YXRlXG4vLyBvbnRvIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi4gUmV0dXJucyB0aGUgZmluYWwgc25hcHNob3Qgc28gY2FsbGVyc1xuLy8gY2FuIHJlYWN0IHRvIHN1Y2Nlc3MvZmFpbHVyZS5cbmV4cG9ydCBjb25zdCBzdHJlYW1Qb3N0SW50cm9zcGVjdGlvbiA9IGFzeW5jIChcbiAgICBhdXRoZWQ6IFRSUENDbGllbnQ8VEFwcFJvdXRlcj4sXG4gICAgam9iSWQ6IHN0cmluZyxcbiAgICBzdG9yZTogVFN0b3JlLFxuKTogUHJvbWlzZTxUSm9iU25hcHNob3Q+ID0+IHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHN0cmVhbUpvYihhdXRoZWQsIGpvYklkLCB7XG4gICAgICAgICAgICBvblByb2dyZXNzOiAoc25hcCkgPT4ge1xuICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLnN0YXRlID0gJ3J1bm5pbmcnO1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24uc3RhZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VQb3N0SW50cm9zcGVjdGlvblN0YWdlKHNuYXAucHJvZ3Jlc3NMYWJlbCk7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi50b2tlbnNJbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICBzbmFwLnRva2Vuc0luID8/IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi50b2tlbnNPdXQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgc25hcC50b2tlbnNPdXQgPz8gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLmNvbHVtbnNEb25lID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNuYXAuY29sdW1uc0RvbmUgPz8gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLmNvbHVtbnNUb3RhbCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBzbmFwLmNvbHVtbnNUb3RhbCA/PyBudWxsO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNuYXBzaG90LnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24uc3RhdGUgPSAnZXJyb3InO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi5lcnJvciA9XG4gICAgICAgICAgICAgICAgICAgIHNuYXBzaG90LmVycm9yID8/ICdwb3N0LWludHJvc3BlY3Rpb24gZmFpbGVkJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLnN0YXRlID0gJ2RvbmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc25hcHNob3Q7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLnN0YXRlID0gJ2Vycm9yJztcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi5lcnJvciA9IG1zZztcbiAgICAgICAgfSk7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG59O1xuXG4vLyBUcmlnZ2VycyBwb3N0LXNhbXBsaW5nIChzZXJ2ZXIgc2tpcHMgcmUtZW5xdWV1ZSBpZiBhbHJlYWR5IGFuYWx5emVkKSBhbmQgYmluZHNcbi8vIHByb2dyZXNzICsgdGVybWluYWwgc3RhdGUgb250byBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdFNhbXBsaW5nLlxuZXhwb3J0IGNvbnN0IGRpc3BhdGNoQW5kU3RyZWFtUG9zdFNhbXBsaW5nID0gYXN5bmMgKFxuICAgIGF1dGhlZDogVFJQQ0NsaWVudDxUQXBwUm91dGVyPixcbiAgICByZXZpc2lvbklkOiBzdHJpbmcsXG4gICAgc3RvcmU6IFRTdG9yZSxcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgaWYgKHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0U2FtcGxpbmcuc3RhdGUgPT09ICdpZGxlJykge1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RTYW1wbGluZy5zdGF0ZSA9ICdxdWV1ZWQnO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhdXRoZWQucmV2aXNpb25zLnJ1blBvc3RTYW1wbGluZy5tdXRhdGUoe3JldmlzaW9uSWR9KTtcblxuICAgIGlmIChyZXN1bHQuYWxyZWFkeUFuYWx5emVkKSB7XG4gICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdFNhbXBsaW5nO1xuICAgICAgICAgICAgYy5zdGF0ZSA9ICdkb25lJztcbiAgICAgICAgICAgIGMuam9iSWQgPSBudWxsO1xuICAgICAgICAgICAgYy5yZXVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgYy5jb3VudHMudG90YWxUYWJsZXMgPSByZXN1bHQuY291bnRzLnRvdGFsVGFibGVzO1xuICAgICAgICAgICAgYy5jb3VudHMuZm9yZWlnbktleXNGb3VuZCA9IHJlc3VsdC5jb3VudHMuZm9yZWlnbktleXM7XG4gICAgICAgIH0pO1xuICAgICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBwb3N0LXNhbXBsaW5nIHJldXNlZCBmb3IgcmV2aXNpb249JHtyZXZpc2lvbklkfSAodGFibGVzPSR7cmVzdWx0LmNvdW50cy50b3RhbFRhYmxlc30gZmtzPSR7cmVzdWx0LmNvdW50cy5mb3JlaWduS2V5c30pYCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtqb2JJZH0gPSByZXN1bHQ7XG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdFNhbXBsaW5nLmpvYklkID0gam9iSWQ7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0U2FtcGxpbmcuc3RhdGUgPSAncnVubmluZyc7XG4gICAgfSk7XG5cbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHN0cmVhbUpvYihhdXRoZWQsIGpvYklkLCB7XG4gICAgICAgIG9uUHJvZ3Jlc3M6IChzbmFwKSA9PiB7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0U2FtcGxpbmc7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHBhcnNlUG9zdFNhbXBsaW5nTGFiZWwoc25hcC5wcm9ncmVzc0xhYmVsLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YWdlOiBjLnN0YWdlLFxuICAgICAgICAgICAgICAgICAgICB0b3RhbFRhYmxlczogYy5jb3VudHMudG90YWxUYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlZFRhYmxlczogYy5jb3VudHMuZGVzY3JpYmVkVGFibGVzLFxuICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZFRhYmxlczogYy5jb3VudHMuZW1iZWRkZWRUYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsRW1iZWRkaW5nczogYy5jb3VudHMudG90YWxFbWJlZGRpbmdzLFxuICAgICAgICAgICAgICAgICAgICBzY2FubmVkVGFibGVzOiBjLmNvdW50cy5zY2FubmVkVGFibGVzLFxuICAgICAgICAgICAgICAgICAgICBmb3JlaWduS2V5c0ZvdW5kOiBjLmNvdW50cy5mb3JlaWduS2V5c0ZvdW5kLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChuZXh0LnN0YWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGMuc3RhZ2UgPSBuZXh0LnN0YWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobmV4dC50b3RhbFRhYmxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGMuY291bnRzLnRvdGFsVGFibGVzID0gbmV4dC50b3RhbFRhYmxlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5leHQuZGVzY3JpYmVkVGFibGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYy5jb3VudHMuZGVzY3JpYmVkVGFibGVzID0gbmV4dC5kZXNjcmliZWRUYWJsZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChuZXh0LmVtYmVkZGVkVGFibGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYy5jb3VudHMuZW1iZWRkZWRUYWJsZXMgPSBuZXh0LmVtYmVkZGVkVGFibGVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobmV4dC50b3RhbEVtYmVkZGluZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjLmNvdW50cy50b3RhbEVtYmVkZGluZ3MgPSBuZXh0LnRvdGFsRW1iZWRkaW5ncztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5leHQuc2Nhbm5lZFRhYmxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGMuY291bnRzLnNjYW5uZWRUYWJsZXMgPSBuZXh0LnNjYW5uZWRUYWJsZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChuZXh0LmZvcmVpZ25LZXlzRm91bmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjLmNvdW50cy5mb3JlaWduS2V5c0ZvdW5kID0gbmV4dC5mb3JlaWduS2V5c0ZvdW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBpZiAoc25hcHNob3Quc3RhdHVzID09PSAnZmFpbGVkJykge1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RTYW1wbGluZy5zdGF0ZSA9ICdlcnJvcic7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdFNhbXBsaW5nLmVycm9yID1cbiAgICAgICAgICAgICAgICBzbmFwc2hvdC5lcnJvciA/PyAncG9zdC1zYW1wbGluZyBqb2IgZmFpbGVkJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0U2FtcGxpbmcuc3RhdGUgPSAnZG9uZSc7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChzbmFwc2hvdC5zdGF0dXMgPT09ICdmYWlsZWQnKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgIGBwb3N0LXNhbXBsaW5nIGpvYiBmYWlsZWQ6ICR7c25hcHNob3QuZXJyb3IgPz8gJ3Vua25vd24nfWAsXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYHBvc3Qtc2FtcGxpbmcgZG9uZSBmb3IgcmV2aXNpb249JHtyZXZpc2lvbklkfWApO1xuICAgIH1cbn07XG5cbi8vIFNlcXVlbnRpYWwgdGFpbCBvZiBhIHNlcnZlci1zaWRlIHJldmlzaW9uOiBwb3N0LWludHJvc3BlY3Rpb24gZmlyc3QgaWYgc3RpbGwgcnVubmluZyxcbi8vIHRoZW4gcG9zdC1zYW1wbGluZy4gVXNlZCBieSB0aGUgbGlzdC1zdWJjb21tYW5kIGZsb3cgYWZ0ZXIgdGhlIHVzZXIgcGlja3MgYVxuLy8gZGF0YWJhc2UgdG8gbW9uaXRvci4gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwcmUtZmlsbGluZyB0aGUgdXBzdHJlYW1cbi8vIHN0b3JlIHN0ZXBzIChpbnRyb3NwZWN0aW9uL3NhbXBsaW5nL3NhbXBsZXMpIHRvIHRoZWlyICdza2lwcGVkJyBzdGF0ZXMuXG4vL1xuLy8gQWx3YXlzIGNhbGxzIGRpc3BhdGNoQW5kU3RyZWFtUG9zdFNhbXBsaW5nIGV2ZW4gd2hlbiBwb3N0LXNhbXBsaW5nIGlzIGFscmVhZHkgY29tcGxldGVcbi8vIHNlcnZlci1zaWRlIFx1MjAxNCBydW5Qb3N0U2FtcGxpbmcgaXMgaWRlbXBvdGVudCAoYGFscmVhZHlBbmFseXplZDogdHJ1ZWAgc2hvcnQtY2lyY3VpdClcbi8vIGFuZCBpcyB0aGUgb25seSB3YXkgdG8gcG9wdWxhdGUgdGhlIHJlbGF0aW9ucy9mb3JlaWduLWtleXMgY291bnRzIHRoZSBVSVxuLy8gcmVuZGVycy4gU2tpcHBpbmcgaXQgaGVyZSB3b3VsZCBsZWF2ZSB0aGUgYW5hbHl6ZSBsaW5lIHNob3dpbmcgXCIwIHRhYmxlcyxcbi8vIDAgZm9yZWlnbiBrZXlzXCIuXG5leHBvcnQgY29uc3QgdGFpbFJldmlzaW9uID0gYXN5bmMgKGFyZ3M6IHtcbiAgICBhdXRoZWQ6IFRSUENDbGllbnQ8VEFwcFJvdXRlcj47XG4gICAgcmV2aXNpb25JZDogc3RyaW5nO1xuICAgIHN0b3JlOiBUU3RvcmU7XG4gICAgcG9zdEludHJvc3BlY3Rpb25Eb25lOiBib29sZWFuO1xufSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IHthdXRoZWQsIHJldmlzaW9uSWQsIHN0b3JlLCBwb3N0SW50cm9zcGVjdGlvbkRvbmV9ID0gYXJncztcblxuICAgIGlmICghcG9zdEludHJvc3BlY3Rpb25Eb25lKSB7XG4gICAgICAgIC8vIEZ1bm5lbCB0aHJvdWdoIGVuc3VyZVBvc3RJbnRyb3NwZWN0aW9uIChyYXRoZXIgdGhhbiBkZXJpdmluZyB0aGUgZGV0ZXJtaW5pc3RpY1xuICAgICAgICAvLyBqb2IgSUQgaW5saW5lKSBzbyB0aGUgc2VydmVyIGNhbiB3aXBlIGFueSBwcmlvciBmYWlsZWQgcG9zdC1pbnRyb3NwZWN0aW9uIGFuZFxuICAgICAgICAvLyBoYW5kIGJhY2sgYSBmcmVzaCBqb2IgSUQuIFdpdGhvdXQgdGhpcywgYSBmYWlsZWQgcG9zdC1pbnRyb3NwZWN0aW9uIGNhdWdodCBieVxuICAgICAgICAvLyB0aGUgbGlzdCBmbG93IHdvdWxkIGp1c3Qgc3RyZWFtIGJhY2sgdGhlIHNhbWUgZGVhZCBzbmFwc2hvdC5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXV0aGVkLnJldmlzaW9ucy5lbnN1cmVQb3N0SW50cm9zcGVjdGlvbi5tdXRhdGUoe1xuICAgICAgICAgICAgcmV2aXNpb25JZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXN1bHQuYWxyZWFkeUVucmljaGVkKSB7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLnN0YXRlID0gJ2RvbmUnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLmpvYklkID0gcmVzdWx0LmpvYklkO1xuICAgICAgICAgICAgICAgIGlmIChzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24uc3RhdGUgPT09ICdpZGxlJykge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24uc3RhdGUgPSAncXVldWVkJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHNuYXAgPSBhd2FpdCBzdHJlYW1Qb3N0SW50cm9zcGVjdGlvbihcbiAgICAgICAgICAgICAgICBhdXRoZWQsXG4gICAgICAgICAgICAgICAgcmVzdWx0LmpvYklkLFxuICAgICAgICAgICAgICAgIHN0b3JlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChzbmFwLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBkaXNwYXRjaEFuZFN0cmVhbVBvc3RTYW1wbGluZyhhdXRoZWQsIHJldmlzaW9uSWQsIHN0b3JlKTtcbn07XG4iLCAiaW1wb3J0IHR5cGUge1RQb3N0SW50cm9zcGVjdGlvblN0YWdlLCBUUG9zdFNhbXBsaW5nU3RhZ2V9IGZyb20gJy4vdHlwZXMubWpzJztcblxuZXhwb3J0IGNvbnN0IFBPU1RfSU5UUk9TUEVDVElPTl9TVEFHRVM6IFJlYWRvbmx5U2V0PFRQb3N0SW50cm9zcGVjdGlvblN0YWdlPiA9XG4gICAgbmV3IFNldDxUUG9zdEludHJvc3BlY3Rpb25TdGFnZT4oW1xuICAgICAgICAnY2xhc3NpZnlpbmcnLFxuICAgICAgICAnZGVzY3JpYmluZycsXG4gICAgICAgICdtYXNraW5nJyxcbiAgICAgICAgJ2ZpbmFsaXppbmcnLFxuICAgIF0pO1xuXG5leHBvcnQgY29uc3QgUE9TVF9JTlRST1NQRUNUSU9OX1NUQUdFX09SREVSOiByZWFkb25seSBUUG9zdEludHJvc3BlY3Rpb25TdGFnZVtdID1cbiAgICBPYmplY3QuZnJlZXplKFtcbiAgICAgICAgJ2NsYXNzaWZ5aW5nJyxcbiAgICAgICAgJ2Rlc2NyaWJpbmcnLFxuICAgICAgICAnbWFza2luZycsXG4gICAgICAgICdmaW5hbGl6aW5nJyxcbiAgICBdIGFzIGNvbnN0KTtcblxuZXhwb3J0IGNvbnN0IFBPU1RfSU5UUk9TUEVDVElPTl9TVEFHRV9MQUJFTFM6IFJlYWRvbmx5PFxuICAgIFJlY29yZDxUUG9zdEludHJvc3BlY3Rpb25TdGFnZSwgc3RyaW5nPlxuPiA9IE9iamVjdC5mcmVlemUoe1xuICAgIGNsYXNzaWZ5aW5nOiAnQ2xhc3NpZnlpbmcgdGFibGVzJyxcbiAgICBkZXNjcmliaW5nOiAnRGVzY3JpYmluZyB0aGUgZGF0YWJhc2UnLFxuICAgIG1hc2tpbmc6ICdNYXNraW5nIHNlbnNpdGl2ZSBjb2x1bW5zJyxcbiAgICBmaW5hbGl6aW5nOiAnRmluYWxpemluZycsXG59KTtcblxuZXhwb3J0IGNvbnN0IFBPU1RfU0FNUExJTkdfU1RBR0VfTEFCRUxTOiBSZWFkb25seTxcbiAgICBSZWNvcmQ8VFBvc3RTYW1wbGluZ1N0YWdlLCBzdHJpbmc+XG4+ID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgZGVzY3JpYmluZzogJ0Rlc2NyaWJpbmcgdGFibGVzJyxcbiAgICBlbWJlZGRpbmc6ICdFbWJlZGRpbmcgZGVzY3JpcHRpb25zJyxcbiAgICBkaXNjb3ZlcmluZzogJ0Rpc2NvdmVyaW5nIGZvcmVpZ24ga2V5cycsXG59KTtcbiIsICJpbXBvcnQge1BPU1RfSU5UUk9TUEVDVElPTl9TVEFHRVN9IGZyb20gJy4vbGFiZWxzLm1qcyc7XG5pbXBvcnQgdHlwZSB7VFBvc3RJbnRyb3NwZWN0aW9uU3RhZ2UsIFRQb3N0U2FtcGxpbmdTbmFwc2hvdH0gZnJvbSAnLi90eXBlcy5tanMnO1xuXG5leHBvcnQgY29uc3QgcGFyc2VQb3N0SW50cm9zcGVjdGlvblN0YWdlID0gKFxuICAgIGxhYmVsOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogVFBvc3RJbnRyb3NwZWN0aW9uU3RhZ2UgfCBudWxsID0+XG4gICAgbGFiZWwgJiYgUE9TVF9JTlRST1NQRUNUSU9OX1NUQUdFUy5oYXMobGFiZWwgYXMgVFBvc3RJbnRyb3NwZWN0aW9uU3RhZ2UpXG4gICAgICAgID8gKGxhYmVsIGFzIFRQb3N0SW50cm9zcGVjdGlvblN0YWdlKVxuICAgICAgICA6IG51bGw7XG5cbi8vIEZvbGRzIHRoZSBsYXRlc3QgZW1pdHRlZCBwb3N0LXNhbXBsaW5nIGxhYmVsIGludG8gdGhlIHJ1bm5pbmcgc25hcHNob3QuXG4vLyBVbmtub3duIC8gbWFsZm9ybWVkIGxhYmVscyByZXR1cm4gcHJldiB1bmNoYW5nZWQg4oCUIGVtaXQtc2lkZSBkcmlmdCBuZXZlclxuLy8gY3Jhc2hlcyB0aGUgcGFyc2VyLlxuZXhwb3J0IGNvbnN0IHBhcnNlUG9zdFNhbXBsaW5nTGFiZWwgPSAoXG4gICAgbGFiZWw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgcHJldjogVFBvc3RTYW1wbGluZ1NuYXBzaG90LFxuKTogVFBvc3RTYW1wbGluZ1NuYXBzaG90ID0+IHtcbiAgICBpZiAoIWxhYmVsKSB7XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgIH1cblxuICAgIGlmIChsYWJlbC5zdGFydHNXaXRoKCd0b3RhbDonKSkge1xuICAgICAgICBjb25zdCB0b3RhbCA9IE51bWJlcihsYWJlbC5zbGljZSg2KSk7XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodG90YWwpID8gey4uLnByZXYsIHRvdGFsVGFibGVzOiB0b3RhbH0gOiBwcmV2O1xuICAgIH1cblxuICAgIGlmIChsYWJlbC5zdGFydHNXaXRoKCdkZXNjcmliaW5nOicpKSB7XG4gICAgICAgIGNvbnN0IFtkb25lLCB0b3RhbF0gPSBsYWJlbC5zbGljZSgxMSkuc3BsaXQoJy8nKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICBzdGFnZTogJ2Rlc2NyaWJpbmcnLFxuICAgICAgICAgICAgZGVzY3JpYmVkVGFibGVzOiBkb25lLFxuICAgICAgICAgICAgdG90YWxUYWJsZXM6IHRvdGFsID4gMCA/IHRvdGFsIDogcHJldi50b3RhbFRhYmxlcyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAobGFiZWwuc3RhcnRzV2l0aCgnZW1iZWRkaW5nOicpKSB7XG4gICAgICAgIGNvbnN0IFtkb25lLCB0b3RhbF0gPSBsYWJlbC5zbGljZSgxMCkuc3BsaXQoJy8nKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICBzdGFnZTogJ2VtYmVkZGluZycsXG4gICAgICAgICAgICBlbWJlZGRlZFRhYmxlczogZG9uZSxcbiAgICAgICAgICAgIHRvdGFsRW1iZWRkaW5nczogdG90YWwgPiAwID8gdG90YWwgOiBwcmV2LnRvdGFsRW1iZWRkaW5ncyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAobGFiZWwuc3RhcnRzV2l0aCgnZGlzY292ZXJpbmc6JykpIHtcbiAgICAgICAgY29uc3QgW3NjLCB0b3QsIGZrXSA9IGxhYmVsLnNsaWNlKDEyKS5zcGxpdCgvWy86XS8pLm1hcChOdW1iZXIpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgIHN0YWdlOiAnZGlzY292ZXJpbmcnLFxuICAgICAgICAgICAgc2Nhbm5lZFRhYmxlczogc2MsXG4gICAgICAgICAgICB0b3RhbFRhYmxlczogdG90LFxuICAgICAgICAgICAgZm9yZWlnbktleXNGb3VuZDogZmssXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZXY7XG59O1xuXG5leHBvcnQgY29uc3QgZW1wdHlQb3N0U2FtcGxpbmdTbmFwc2hvdCA9ICgpOiBUUG9zdFNhbXBsaW5nU25hcHNob3QgPT5cbiAgICBPYmplY3QuZnJlZXplKHtzdGFnZTogbnVsbH0pO1xuIiwgImltcG9ydCB0eXBlIHtUUlBDQ2xpZW50fSBmcm9tICdAdHJwYy9jbGllbnQnO1xuaW1wb3J0IHR5cGUge1RBcHBSb3V0ZXJ9IGZyb20gJ0BkYmN0eC9jb3JlJztcblxuZXhwb3J0IHR5cGUgVEpvYlNuYXBzaG90ID0ge1xuICAgIHJlYWRvbmx5IHN0YXR1czpcbiAgICAgICAgfCAncGVuZGluZydcbiAgICAgICAgfCAncnVubmluZydcbiAgICAgICAgfCAnY29tcGxldGVkJ1xuICAgICAgICB8ICdmYWlsZWQnXG4gICAgICAgIHwgJ3N0YWxsZWQnXG4gICAgICAgIHwgJ3Vua25vd24nO1xuICAgIHJlYWRvbmx5IHByb2dyZXNzOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgcHJvZ3Jlc3NMYWJlbDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHRva2Vuc0luPzogbnVtYmVyO1xuICAgIHJlYWRvbmx5IHRva2Vuc091dD86IG51bWJlcjtcbiAgICByZWFkb25seSBjb2x1bW5zRG9uZT86IG51bWJlcjtcbiAgICByZWFkb25seSBjb2x1bW5zVG90YWw/OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgcmVzdWx0OiB1bmtub3duO1xuICAgIHJlYWRvbmx5IGVycm9yOiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgVEpvYlN0cmVhbU9wdGlvbnMgPSB7XG4gICAgcmVhZG9ubHkgdGltZW91dE1zPzogbnVtYmVyO1xuICAgIHJlYWRvbmx5IG9uUHJvZ3Jlc3M/OiAoc25hcHNob3Q6IFRKb2JTbmFwc2hvdCkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IERFRkFVTFRfVElNRU9VVF9NUyA9IDMwICogNjAgKiAxXzAwMDtcblxuZXhwb3J0IGNvbnN0IHN0cmVhbUpvYiA9IChcbiAgICBhdXRoZWQ6IFRSUENDbGllbnQ8VEFwcFJvdXRlcj4sXG4gICAgam9iSWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBUSm9iU3RyZWFtT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxUSm9iU25hcHNob3Q+ID0+IHtcbiAgICBjb25zdCB0aW1lb3V0TXMgPSBvcHRpb25zLnRpbWVvdXRNcyA/PyBERUZBVUxUX1RJTUVPVVRfTVM7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8VEpvYlNuYXBzaG90PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBzZXR0bGVkID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgam9iICR7am9iSWR9IHRpbWVkIG91dCBhZnRlciAke3RpbWVvdXRNc31tc2ApKTtcbiAgICAgICAgfSwgdGltZW91dE1zKTtcblxuICAgICAgICBjb25zdCBzdWIgPSBhdXRoZWQucmV2aXNpb25zLnN0cmVhbUpvYi5zdWJzY3JpYmUoXG4gICAgICAgICAgICB7am9iSWR9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9uRGF0YTogKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc25hcHNob3Q6IFRKb2JTbmFwc2hvdCA9IE9iamVjdC5mcmVlemUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0ZS5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogc3RhdGUucHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc0xhYmVsOiBzdGF0ZS5wcm9ncmVzc0xhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zSW46IHN0YXRlLnRva2Vuc0luLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zT3V0OiBzdGF0ZS50b2tlbnNPdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zRG9uZTogc3RhdGUuY29sdW1uc0RvbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zVG90YWw6IHN0YXRlLmNvbHVtbnNUb3RhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDogc3RhdGUucmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHN0YXRlLmVycm9yLFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uUHJvZ3Jlc3M/LihzbmFwc2hvdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3RhdHVzID09PSAnY29tcGxldGVkJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3RhdHVzID09PSAnZmFpbGVkJ1xuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzbmFwc2hvdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uRXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uQ29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgam9iICR7am9iSWR9IHN0cmVhbSBjbG9zZWQgYmVmb3JlIHRlcm1pbmFsIHN0YXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgfSk7XG59O1xuIiwgImltcG9ydCB0eXBlIHtJbnN0YW5jZX0gZnJvbSAnaW5rJztcbmltcG9ydCB7cnVuSW5BY3Rpb24sIHdoZW59IGZyb20gJ21vYngnO1xuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB7cmVhZENvbmZpZ30gZnJvbSAnLi9jb25maWcubWpzJztcbmltcG9ydCB7Y3JlYXRlQXV0aGVudGljYXRlZFRSUENDbGllbnR9IGZyb20gJy4uL2xpYi90cnBjLm1qcyc7XG5pbXBvcnQge2Nvbm5lY3RBY2NvdW50fSBmcm9tICcuL3Nlc3Npb24ubWpzJztcbmltcG9ydCB7dGFpbFJldmlzaW9ufSBmcm9tICcuL3RhaWwubWpzJztcbmltcG9ydCB7bG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIubWpzJztcblxuZXhwb3J0IGNvbnN0IHJ1bkxpc3QgPSBhc3luYyAoXG4gICAgc3RvcmU6IFRTdG9yZSxcbiAgICBpbmtBcHA6IEluc3RhbmNlLFxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgcmVhZENvbmZpZygpO1xuICAgICAgICBpZiAoIWNvbmZpZy50b2tlbikge1xuICAgICAgICAgICAgaW5rQXBwLnVubW91bnQoKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICdubyBhdXRoIHRva2VuIGZvdW5kLiBydW4gYGRiY3R4IGxvZ2luYCB0byBhdXRoZW50aWNhdGUuJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhdXRoZWQgPSBjcmVhdGVBdXRoZW50aWNhdGVkVFJQQ0NsaWVudCgoKSA9PlxuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGNvbmZpZy50b2tlbiEpLFxuICAgICAgICApO1xuXG4gICAgICAgIGF3YWl0IGNvbm5lY3RBY2NvdW50KGNvbmZpZy50b2tlbiwgc3RvcmUpO1xuXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gYXdhaXQgYXV0aGVkLmRhdGFiYXNlcy5saXN0Rm9yVXNlci5xdWVyeSgpO1xuXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGlua0FwcC51bm1vdW50KCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAnbm8gZGF0YWJhc2VzIHlldC4gcnVuIGBkYmN0eGAgYWdhaW5zdCBhIGRhdGFiYXNlIHRvIGdldCBzdGFydGVkLicsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9XG5cbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUubW9kZSA9ICdsaXN0LXBpY2tpbmcnO1xuICAgICAgICAgICAgc3RvcmUubGlzdFBpY2tlciA9IHtcbiAgICAgICAgICAgICAgICBpdGVtcyxcbiAgICAgICAgICAgICAgICBmb2N1c2VkSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJbmRleDogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHdoZW4oKCkgPT4gc3RvcmUubGlzdFBpY2tlcj8uc2VsZWN0ZWRJbmRleCAhPT0gbnVsbCk7XG5cbiAgICAgICAgY29uc3QgcGlja2VyID0gc3RvcmUubGlzdFBpY2tlcjtcbiAgICAgICAgaWYgKHBpY2tlciA9PT0gbnVsbCB8fCBwaWNrZXIuc2VsZWN0ZWRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3ludGhldGljIFwiZXhpdFwiIHJvdyBzZW50aW5lbCBcdTIwMTQgc2VsZWN0ZWRJbmRleCA9PT0gaXRlbXMubGVuZ3RoIG1lYW5zXG4gICAgICAgIC8vIHRoZSB1c2VyIHBpY2tlZCB0aGUgYm90dG9tIFwiZXhpdFwiIGVudHJ5LiBVbm1vdW50IGFuZCBxdWl0LlxuICAgICAgICBpZiAocGlja2VyLnNlbGVjdGVkSW5kZXggPT09IHBpY2tlci5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlua0FwcC51bm1vdW50KCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwaWNrZWQgPSBwaWNrZXIuaXRlbXNbcGlja2VyLnNlbGVjdGVkSW5kZXhdO1xuICAgICAgICBpZiAocGlja2VkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5lZWRzTG9jYWxSZXJ1biA9XG4gICAgICAgICAgICAhcGlja2VkLnNhbXBsZXNJbmdlc3RlZCB8fFxuICAgICAgICAgICAgKCFwaWNrZWQucG9zdEludHJvc3BlY3Rpb24uZG9uZSAmJlxuICAgICAgICAgICAgICAgIHBpY2tlZC5wb3N0SW50cm9zcGVjdGlvbi5qb2JTdGF0dXMgPT09IG51bGwpO1xuXG4gICAgICAgIGlmIChuZWVkc0xvY2FsUmVydW4pIHtcbiAgICAgICAgICAgIGlua0FwcC51bm1vdW50KCk7XG4gICAgICAgICAgICBjb25zdCByZWFzb24gPSAhcGlja2VkLnNhbXBsZXNJbmdlc3RlZFxuICAgICAgICAgICAgICAgID8gJ3NhbXBsZXMgZm9yIHRoaXMgZGF0YWJhc2UgaGF2ZSBub3QgYmVlbiB1cGxvYWRlZCB5ZXQuJ1xuICAgICAgICAgICAgICAgIDogJ3Bvc3QtaW50cm9zcGVjdGlvbiBlbnJpY2htZW50IGlzIHN0dWNrIChubyBsaXZlIGpvYiBhbmQgbm90IGNvbXBsZXRlKS4nO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFwiJHtwaWNrZWQubmFtZX1cIjogJHtyZWFzb259YCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAncmVydW4gYGRiY3R4YCBhZ2FpbnN0IHRoZSBzYW1lIGRhdGFiYXNlIHRvIHBpY2sgdXAgd2hlcmUgeW91IGxlZnQgb2ZmLicsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGFpbC1hYmxlOiBwcmUtZmlsbCB1cHN0cmVhbSBzdGVwcyB0byBtaXJyb3IgYSBoYXNoLWhpdC10aGVuLXRhaWxcbiAgICAgICAgLy8gb3V0Y29tZSBhbmQgZmxpcCBtb2RlIHNvIHRoZSByZWd1bGFyIGNhc2NhZGUgcmVuZGVycy4gUGhhc2UtMCBkb25lXG4gICAgICAgIC8vIGNhbiBiZSBwcmUtc2V0IChubyBleHRyYSBpbmZvIHRvIGZldGNoKTsgcG9zdC1zYW1wbGluZyBpcyBsZWZ0IHRvXG4gICAgICAgIC8vIGRpc3BhdGNoQW5kU3RyZWFtUG9zdFNhbXBsaW5nIHNvIHRoZSByZWxhdGlvbnMvZm9yZWlnbi1rZXlzIGNvdW50cyBjb21lXG4gICAgICAgIC8vIGJhY2sgZnJvbSB0aGUgc2VydmVyLnMgcnVuUG9zdFNhbXBsaW5nIHJlc3BvbnNlLlxuICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICBzdG9yZS5tb2RlID0gJ2xpc3QtdGFpbGluZyc7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24uaW50cm9zcGVjdGlvbi5zdGF0ZSA9ICdza2lwcGVkJztcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLnN0YXRlID0gJ3NraXBwZWQnO1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcucmV1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5zYW1wbGVzLnN0YXRlID0gJ3NraXBwZWQnO1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnNhbXBsZXMucmV1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChwaWNrZWQucG9zdEludHJvc3BlY3Rpb24uZG9uZSkge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi5zdGF0ZSA9ICdkb25lJztcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24ucmV1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgdGFpbFJldmlzaW9uKHtcbiAgICAgICAgICAgIGF1dGhlZCxcbiAgICAgICAgICAgIHJldmlzaW9uSWQ6IHBpY2tlZC5sYXRlc3RSZXZpc2lvbklkLFxuICAgICAgICAgICAgc3RvcmUsXG4gICAgICAgICAgICBwb3N0SW50cm9zcGVjdGlvbkRvbmU6IHBpY2tlZC5wb3N0SW50cm9zcGVjdGlvbi5kb25lLFxuICAgICAgICB9KTtcblxuICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICBzdG9yZS5leGl0UmVxdWVzdGVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBsaXN0OiAke21zZ31gKTtcbiAgICAgICAgaW5rQXBwLnVubW91bnQoKTtcbiAgICAgICAgY29uc29sZS5sb2coYGVycm9yOiAke21zZ31gKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbn07XG4iLCAiaW1wb3J0IHtyZW5kZXJ9IGZyb20gJ2luayc7XG5pbXBvcnQge2NyZWF0ZUVsZW1lbnQsIHVzZVN0YXRlLCB1c2VFZmZlY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dHJwYywgY3JlYXRlQXV0aGVudGljYXRlZFRSUENDbGllbnR9IGZyb20gJy4uL2xpYi90cnBjLm1qcyc7XG5pbXBvcnQge3JlYWRDb25maWcsIHdyaXRlQ29uZmlnfSBmcm9tICcuL2NvbmZpZy5tanMnO1xuaW1wb3J0IHtidWlsZENvbm5lY3RVUkx9IGZyb20gJy4vb3Blbi11cmwubWpzJztcbmltcG9ydCB7XG4gICAgZGV0ZWN0SG9zdG5hbWUsXG4gICAgZGV0ZWN0T1MsXG4gICAgZGV0ZWN0U2hlbGwsXG4gICAgZGV0ZWN0VXNlcm5hbWUsXG59IGZyb20gJy4vZGV0ZWN0Lm1qcyc7XG5pbXBvcnQge0xvZ2luVmlldywgdHlwZSBUTG9naW5TdGF0ZX0gZnJvbSAnLi4vdWkvY29tcG9uZW50cy9Mb2dpbi5qcyc7XG5pbXBvcnQge2xvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyLm1qcyc7XG5cbmNvbnN0IHdhaXRGb3JUb2tlbiA9IChsb2dpbklkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4gPT5cbiAgICBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgc3ViID0gdHJwYy5jbGlMb2dpbi5vbkF1dGhvcml6YXRpb24uc3Vic2NyaWJlKFxuICAgICAgICAgICAge2xvZ2luX2lkOiBsb2dpbklkfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvbkRhdGE6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEudG9rZW4pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25FcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgfSk7XG5cbnR5cGUgVExvZ2luQXBwUHJvcHMgPSB7XG4gICAgcmVhZG9ubHkgaW5pdGlhbFN0YXRlOiBUTG9naW5TdGF0ZTtcbiAgICByZWFkb25seSBzdWJzY3JpYmU6IChcbiAgICAgICAgc2V0U3RhdGU6IChuZXh0OiBUTG9naW5TdGF0ZSkgPT4gdm9pZCxcbiAgICApID0+IFByb21pc2U8dm9pZD47XG59O1xuXG5jb25zdCBMb2dpbkFwcCA9ICh7aW5pdGlhbFN0YXRlLCBzdWJzY3JpYmV9OiBUTG9naW5BcHBQcm9wcykgPT4ge1xuICAgIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGU8VExvZ2luU3RhdGU+KGluaXRpYWxTdGF0ZSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzdWJzY3JpYmUoc2V0U3RhdGUpO1xuICAgIH0sIFtzdWJzY3JpYmVdKTtcblxuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KExvZ2luVmlldywge3N0YXRlfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcnVuTG9naW4gPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgbGV0IHNldFN0YXRlOiAobmV4dDogVExvZ2luU3RhdGUpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIGNvbnN0IHN1YnNjcmliZSA9IGFzeW5jIChcbiAgICAgICAgdXBkYXRlOiAobmV4dDogVExvZ2luU3RhdGUpID0+IHZvaWQsXG4gICAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIHNldFN0YXRlID0gdXBkYXRlO1xuICAgIH07XG5cbiAgICBjb25zdCBpbmtBcHAgPSByZW5kZXIoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoTG9naW5BcHAsIHtcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZToge2tpbmQ6ICdjcmVhdGluZyd9LFxuICAgICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICB9KSxcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgcmVhZENvbmZpZygpO1xuXG4gICAgICAgIGNvbnN0IHtsb2dpbl9pZH0gPSBhd2FpdCB0cnBjLmNsaUxvZ2luLmNyZWF0ZS5tdXRhdGUoe1xuICAgICAgICAgICAgdXNlcm5hbWU6IGRldGVjdFVzZXJuYW1lKCksXG4gICAgICAgICAgICBob3N0bmFtZTogZGV0ZWN0SG9zdG5hbWUoKSxcbiAgICAgICAgICAgIG9zOiBkZXRlY3RPUygpLFxuICAgICAgICAgICAgc2hlbGw6IGRldGVjdFNoZWxsKCksXG4gICAgICAgICAgICBkZXZpY2VfaWQ6IGNvbmZpZy5kZXZpY2VfaWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IGJ1aWxkQ29ubmVjdFVSTChsb2dpbl9pZCk7XG4gICAgICAgIHNldFN0YXRlKHtraW5kOiAnd2FpdGluZycsIHVybH0pO1xuXG4gICAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgd2FpdEZvclRva2VuKGxvZ2luX2lkKTtcbiAgICAgICAgYXdhaXQgd3JpdGVDb25maWcodG9rZW4pO1xuXG4gICAgICAgIGNvbnN0IGF1dGhlZCA9IGNyZWF0ZUF1dGhlbnRpY2F0ZWRUUlBDQ2xpZW50KCgpID0+XG4gICAgICAgICAgICBQcm9taXNlLnJlc29sdmUodG9rZW4pLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBhY2NvdW50ID0gYXdhaXQgYXV0aGVkLmFjY291bnQuZ2V0QWNjb3VudC5xdWVyeSh7fSk7XG5cbiAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAga2luZDogJ2Nvbm5lY3RlZCcsXG4gICAgICAgICAgICBlbWFpbDogYWNjb3VudC5lbWFpbHNbMF0gPz8gbnVsbCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMjAwKSk7XG4gICAgICAgIGlua0FwcC51bm1vdW50KCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBsb2dpbjogJHttZXNzYWdlfWApO1xuICAgICAgICBzZXRTdGF0ZSh7a2luZDogJ2Vycm9yJywgbWVzc2FnZX0pO1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCAyMDApKTtcbiAgICAgICAgaW5rQXBwLnVubW91bnQoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbn07XG4iLCAiaW1wb3J0IHtCb3gsIFRleHQsIHVzZUlucHV0fSBmcm9tICdpbmsnO1xuaW1wb3J0IHR5cGUge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VTdGF0ZSwgdXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3Nob3VsZE9wZW5Ccm93c2VyLCBvcGVuVVJMfSBmcm9tICcuLi8uLi9hcHAvb3Blbi11cmwubWpzJztcbmltcG9ydCB7U3Bpbm5lcn0gZnJvbSAnLi9TcGlubmVyLmpzJztcblxudHlwZSBUTG9naW5TdGF0ZSA9XG4gICAgfCB7cmVhZG9ubHkga2luZDogJ2NyZWF0aW5nJ31cbiAgICB8IHtyZWFkb25seSBraW5kOiAnd2FpdGluZyc7IHJlYWRvbmx5IHVybDogc3RyaW5nfVxuICAgIHwge3JlYWRvbmx5IGtpbmQ6ICdjb25uZWN0ZWQnOyByZWFkb25seSBlbWFpbDogc3RyaW5nIHwgbnVsbH1cbiAgICB8IHtyZWFkb25seSBraW5kOiAnZXJyb3InOyByZWFkb25seSBtZXNzYWdlOiBzdHJpbmd9O1xuXG50eXBlIFRMb2dpblZpZXdQcm9wcyA9IHtcbiAgICByZWFkb25seSBzdGF0ZTogVExvZ2luU3RhdGU7XG59O1xuXG5jb25zdCBjYW5PcGVuID0gc2hvdWxkT3BlbkJyb3dzZXIoKTtcblxuZXhwb3J0IGNvbnN0IExvZ2luVmlldyA9ICh7c3RhdGV9OiBUTG9naW5WaWV3UHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IFtkb3RWaXNpYmxlLCBzZXREb3RWaXNpYmxlXSA9IHVzZVN0YXRlKHRydWUpO1xuICAgIGNvbnN0IFtvcGVuZWQsIHNldE9wZW5lZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoc3RhdGUua2luZCAhPT0gJ3dhaXRpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHNldERvdFZpc2libGUoKHByZXYpID0+ICFwcmV2KTtcbiAgICAgICAgfSwgNzUwKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH07XG4gICAgfSwgW3N0YXRlLmtpbmRdKTtcblxuICAgIHVzZUlucHV0KFxuICAgICAgICAoX2lucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkucmV0dXJuICYmIHN0YXRlLmtpbmQgPT09ICd3YWl0aW5nJykge1xuICAgICAgICAgICAgICAgIHNldE9wZW5lZCh0cnVlKTtcbiAgICAgICAgICAgICAgICBvcGVuVVJMKHN0YXRlLnVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtpc0FjdGl2ZTogc3RhdGUua2luZCA9PT0gJ3dhaXRpbmcnICYmIGNhbk9wZW59LFxuICAgICk7XG5cbiAgICBpZiAoc3RhdGUua2luZCA9PT0gJ2NyZWF0aW5nJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+TE9HSU46IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD5jcmVhdGluZyBzZXNzaW9uLi4uPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmtpbmQgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkxPR0lOOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj57c3RhdGUubWVzc2FnZX08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUua2luZCA9PT0gJ2Nvbm5lY3RlZCcpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmVlblwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+TE9HSU46IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD5sb2dnZWQgaW48L1RleHQ+XG4gICAgICAgICAgICAgICAge3N0YXRlLmVtYWlsID8gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQ+IGFzIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+e3N0YXRlLmVtYWlsfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmF5XCI+e2RvdFZpc2libGUgPyAnXHUyNUNGJyA6ICcgJ308L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkxPR0lOPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94XG4gICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU9XCJzaW5nbGVcIlxuICAgICAgICAgICAgICAgIHBhZGRpbmdYPXsyfVxuICAgICAgICAgICAgICAgIHBhZGRpbmdZPXsxfVxuICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ9ezF9XG4gICAgICAgICAgICAgICAgYm9yZGVyRGltQ29sb3JcbiAgICAgICAgICAgICAgICB3aWR0aD17OTJ9XG4gICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+TG9naW4gdG8geW91ciBkYmN0eC5pbyBhY2NvdW50eydcXG4nfTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17J2N5YW4nfT57c3RhdGUudXJsfTwvVGV4dD5cbiAgICAgICAgICAgICAgICB7Y2FuT3BlbiA/IChcbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmF5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBQcmVzcyBFbnRlciB0byB7b3BlbmVkID8gJ3JlLW9wZW4nIDogJ29wZW4nfSBpbiBicm93c2VyXG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8VGV4dD57J1xcblxcbid9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgIDxTcGlubmVyIC8+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPldhaXRpbmcgZm9yIGFwcHJvdmFsIC4uLjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufTtcblxuZXhwb3J0IHR5cGUge1RMb2dpblN0YXRlfTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7OztBQUFBOzs7OztTQUFRLFNBQVE7QUFBaEIsSUFFTSxtQkE2QkEsV0E2QkEsV0FzQkEsbUJBV08sVUFlUCxXQUVBLFVBS0EsaUJBT0EsVUFhQSxXQU1BLFNBU0EsY0FTQSxZQVdBLGVBWUEsWUFFQSxhQU1BLFFBVU87QUF4TWI7OztBQUVBLElBQU0sb0JBQW9CLEVBQ3JCLE9BQU87TUFDSixNQUFNLEVBQUUsT0FBTTtNQUNkLFdBQVcsRUFBRSxPQUFNO01BQ25CLGFBQWEsRUFBRSxRQUFPO01BQ3RCLFNBQVMsRUFBRSxPQUFNLEVBQUcsU0FBUTtNQUM1QixvQkFBb0IsRUFBRSxPQUFNLEVBQUcsU0FBUTtLQUMxQyxFQUNBLElBQ0csRUFBRSxtQkFBbUIsUUFBUTtN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QTBCO0FBQUEsTUFDaEUsY0FBYyxLQUFLLFNBQVMsZ0JBQWdCO0FBQUEsSUFDaEQ7QUFBQSxJQUNBLFdBQVcsYUFBYTtBQUFBLElBQ3hCLGdCQUFnQixpQkFBaUI7QUFBQSxJQUNqQyxPQUFPLFlBQVk7QUFBQSxJQUNuQixJQUFJLFNBQVM7QUFBQSxJQUNiLFFBQVEsVUFBVTtBQUFBLElBQ2xCLGVBQWUsbUJBQW1CO0FBQUEsSUFDbEMsaUJBQWlCLHFCQUFxQjtBQUFBLElBQ3RDLFdBQVcsT0FBTztBQUFBLEVBQ3RCLENBQUM7QUFDTDtBQUVBLElBQUk7QUFDQSxRQUFNLGlCQUFpQjtBQUMzQixTQUFTLEtBQUs7QUFDVixNQUFJLFdBQVc7QUFDWCxXQUFPLE1BQU0sR0FBRyxHQUFHLElBQUksRUFBQyxPQUFPLElBQUcsQ0FBQztBQUFBLEVBQ3ZDO0FBQ0o7QUFFQSxRQUFRLE1BQU07IiwKICAibmFtZXMiOiBbInJlbmRlciIsICJjcmVhdGVFbGVtZW50IiwgIkVycm9yIiwgIkJveCIsICJ1c2VFZmZlY3QiLCAib2JzZXJ2ZXIiLCAiQm94IiwgIlRleHQiLCAiQm94IiwgIlRleHQiLCAianN4IiwgIlRleHQiLCAidXNlU3RhdGUiLCAidXNlRWZmZWN0IiwgImpzeHMiLCAianN4IiwgImpzeHMiLCAiQm94IiwgIlRleHQiLCAiQm94IiwgIlRleHQiLCAib2JzZXJ2ZXIiLCAicnVuSW5BY3Rpb24iLCAiRnJhZ21lbnQiLCAianN4IiwgImpzeHMiLCAib2JzZXJ2ZXIiLCAiQm94IiwgIlRleHQiLCAicnVuSW5BY3Rpb24iLCAiQm94IiwgIlRleHQiLCAidXNlU3RhdGUiLCAidXNlRWZmZWN0IiwgIm9ic2VydmVyIiwgImpzeCIsICJqc3hzIiwgIm9ic2VydmVyIiwgIkJveCIsICJUZXh0IiwgInVzZVN0YXRlIiwgInVzZUVmZmVjdCIsICJCb3giLCAiVGV4dCIsICJ1c2VJbnB1dCIsICJ1c2VTdGF0ZSIsICJ1c2VFZmZlY3QiLCAib2JzZXJ2ZXIiLCAianN4IiwgImpzeHMiLCAib2JzZXJ2ZXIiLCAidXNlU3RhdGUiLCAidXNlRWZmZWN0IiwgInVzZUlucHV0IiwgIkJveCIsICJUZXh0IiwgIkJveCIsICJUZXh0IiwgInVzZUlucHV0IiwgIm9ic2VydmVyIiwgInJ1bkluQWN0aW9uIiwgImpzeCIsICJqc3hzIiwgIm9ic2VydmVyIiwgInVzZUlucHV0IiwgInJ1bkluQWN0aW9uIiwgIkJveCIsICJUZXh0IiwgIkJveCIsICJUZXh0IiwgIm9ic2VydmVyIiwgInJ1bkluQWN0aW9uIiwgIkJveCIsICJUZXh0IiwgInVzZUlucHV0IiwgInVzZVN0YXRlIiwgInVzZUVmZmVjdCIsICJqc3giLCAianN4cyIsICJDVVJTT1JfSU5URVJWQUwiLCAidG90YWxMaW5lcyIsICJqc3giLCAianN4cyIsICJvYnNlcnZlciIsICJCb3giLCAiVGV4dCIsICJydW5JbkFjdGlvbiIsICJCb3giLCAiVGV4dCIsICJvYnNlcnZlciIsICJqc3giLCAianN4cyIsICJvYnNlcnZlciIsICJCb3giLCAiVGV4dCIsICJCb3giLCAiVGV4dCIsICJ1c2VJbnB1dCIsICJ1c2VTdGF0ZSIsICJ1c2VFZmZlY3QiLCAib2JzZXJ2ZXIiLCAianN4IiwgImpzeHMiLCAiY2FuT3BlbiIsICJvYnNlcnZlciIsICJ1c2VTdGF0ZSIsICJ1c2VFZmZlY3QiLCAidXNlSW5wdXQiLCAiQm94IiwgIlRleHQiLCAiQm94IiwgIlRleHQiLCAidXNlSW5wdXQiLCAib2JzZXJ2ZXIiLCAicnVuSW5BY3Rpb24iLCAiRnJhZ21lbnQiLCAianN4IiwgImpzeHMiLCAiQ291bnRzTGluZSIsICJvYnNlcnZlciIsICJCb3giLCAiVGV4dCIsICJ1c2VJbnB1dCIsICJydW5JbkFjdGlvbiIsICJCb3giLCAiVGV4dCIsICJvYnNlcnZlciIsICJGcmFnbWVudCIsICJqc3giLCAianN4cyIsICJCb3giLCAiVGV4dCIsICJvYnNlcnZlciIsICJCb3giLCAiVGV4dCIsICJvYnNlcnZlciIsICJqc3giLCAianN4cyIsICJvYnNlcnZlciIsICJCb3giLCAiVGV4dCIsICJCb3giLCAiVGV4dCIsICJvYnNlcnZlciIsICJqc3giLCAianN4cyIsICJvYnNlcnZlciIsICJCb3giLCAiVGV4dCIsICJCb3giLCAiVGV4dCIsICJvYnNlcnZlciIsICJ0ZXJtaW5hbExpbmsiLCAianN4IiwgImpzeHMiLCAib2JzZXJ2ZXIiLCAiQm94IiwgIlRleHQiLCAiY291bnRzIiwgInRlcm1pbmFsTGluayIsICJCb3giLCAiVGV4dCIsICJqc3giLCAianN4cyIsICJCb3giLCAiVGV4dCIsICJCb3giLCAiVGV4dCIsICJ1c2VJbnB1dCIsICJvYnNlcnZlciIsICJydW5JbkFjdGlvbiIsICJGcmFnbWVudCIsICJqc3giLCAianN4cyIsICJvYnNlcnZlciIsICJ1c2VJbnB1dCIsICJydW5JbkFjdGlvbiIsICJqc3hzIiwgIkJveCIsICJqc3giLCAiVGV4dCIsICJGcmFnbWVudCIsICJGcmFnbWVudCIsICJqc3giLCAianN4cyIsICJvYnNlcnZlciIsICJ1c2VFZmZlY3QiLCAiQm94IiwgInJ1bkluQWN0aW9uIiwgInBhdGgiLCAicnVuSW5BY3Rpb24iLCAiZXhpc3RzU3luYyIsICJydW5JbkFjdGlvbiIsICJleGlzdHNTeW5jIiwgImhvbWVkaXIiLCAicnVuSW5BY3Rpb24iLCAicGF0aCIsICJyZXNvbHZlIiwgInJlYWRGaWxlU3luYyIsICJydW5JbkFjdGlvbiIsICJ3aGVuIiwgInNjb3BlIiwgInNjb3BlIiwgInJlYWRGaWxlU3luYyIsICJydW5JbkFjdGlvbiIsICJlcnJNc2ciLCAid2hlbiIsICJydW5JbkFjdGlvbiIsICJncm91cEJ5IiwgInZhbHVlcyIsICJyZWxhdGlvbnMiLCAicnVuSW5BY3Rpb24iLCAicnVuSW5BY3Rpb24iLCAicGF0aCIsICJyZWxhdGlvbnMiLCAicnVuSW5BY3Rpb24iLCAicnVuSW5BY3Rpb24iLCAiZXhpc3RzU3luYyIsICJ1c2VySW5mbyIsICJqb2luIiwgImVudiIsICJob3N0bmFtZSIsICJob21lZGlyIiwgImpvaW4iLCAicmVhZEZpbGUiLCAicnVuSW5BY3Rpb24iLCAicmVsYXRpb25zIiwgInJlc29sdmUiLCAiY3JlYXRlSGFzaCIsICJyZWFkRmlsZSIsICJta2RpciIsICJyZWFkZGlyIiwgInN0YXQiLCAiam9pbiIsICJQUXVldWUiLCAicnVuSW5BY3Rpb24iLCAid2hlbiIsICJ6IiwgIndyaXRlRmlsZSIsICJta2RpciIsICJqb2luIiwgInBhdGgiLCAieiIsICJjcmVhdGVIYXNoIiwgInBhdGgiLCAicmVhZEZpbGUiLCAic3RhdCIsICJydW5JbkFjdGlvbiIsICJta2RpciIsICJyZWFkZGlyIiwgIndoZW4iLCAiam9pbiIsICJQUXVldWUiLCAicmVsYXRpb24iLCAicnVuSW5BY3Rpb24iLCAicmVzb2x2ZSIsICJydW5JbkFjdGlvbiIsICJ3aGVuIiwgInJ1bkluQWN0aW9uIiwgImRhdGFiYXNlSW50cm9zcGVjdGlvblNjaGVtYSIsICJleGlzdHNTeW5jIiwgInJ1bkluQWN0aW9uIiwgInJ1bkluQWN0aW9uIiwgIndoZW4iLCAicnVuSW5BY3Rpb24iLCAid2hlbiIsICJ1c2VTdGF0ZSIsICJ1c2VFZmZlY3QiLCAiQm94IiwgIlRleHQiLCAidXNlSW5wdXQiLCAidXNlU3RhdGUiLCAidXNlRWZmZWN0IiwgIkZyYWdtZW50IiwgImpzeCIsICJqc3hzIiwgImNhbk9wZW4iLCAidXNlU3RhdGUiLCAidXNlRWZmZWN0IiwgInVzZUlucHV0IiwgIkJveCIsICJUZXh0IiwgIndhaXRGb3JUb2tlbiIsICJyZXNvbHZlIiwgInVzZVN0YXRlIiwgInVzZUVmZmVjdCIsICJzY29wZSIsICJyZW5kZXIiLCAiY3JlYXRlRWxlbWVudCIsICJzY29wZSIsICJwYXRoIiwgIkVycm9yIiwgInJ1bkluQWN0aW9uIl0KfQo=
|
|
6741
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9pbnRyb3NwZWN0aW9uLm10cyIsICIuLi9zcmMvaW5kZXgubXRzIiwgIi4uL3NyYy91aS9jb21wb25lbnRzL0Vycm9yLnRzeCIsICIuLi9zcmMvdWkvQXBwLnRzeCIsICIuLi9zcmMvdWkvY29tcG9uZW50cy9TU0gudHN4IiwgIi4uL3NyYy91aS9jb21wb25lbnRzL1NwaW5uZXIudHN4IiwgIi4uL3NyYy91aS9jb21wb25lbnRzL1Bhc3N3b3JkSW5wdXQudHN4IiwgIi4uL3NyYy91aS9jb21wb25lbnRzL0RCLnRzeCIsICIuLi9zcmMvdWkvY29tcG9uZW50cy9JbnRyb3NwZWN0LnRzeCIsICIuLi9zcmMvdWkvY29tcG9uZW50cy9TZXNzaW9uLnRzeCIsICIuLi9zcmMvYXBwL29wZW4tdXJsLm10cyIsICIuLi9zcmMvbGliL2Vudi5tdHMiLCAiLi4vc3JjL3VpL2NvbXBvbmVudHMvT3V0cHV0SnNvbi50c3giLCAiLi4vc3JjL3VpL2NvbXBvbmVudHMvVXNlckV4cGxhbmF0aW9uLnRzeCIsICIuLi9zcmMvdWkvY29tcG9uZW50cy9UZXh0SW5wdXQudHN4IiwgIi4uL3NyYy91aS9jb21wb25lbnRzL0dhdGUudHN4IiwgIi4uL3NyYy91aS9jb21wb25lbnRzL0JpbGxpbmcudHN4IiwgIi4uL3NyYy91aS9jb21wb25lbnRzL1NhbXBsaW5nLnRzeCIsICIuLi9zcmMvdWkvY29tcG9uZW50cy9JbnRyb3NwZWN0aW9uVXBsb2FkLnRzeCIsICIuLi9zcmMvdWkvY29tcG9uZW50cy9TYW1wbGVzVXBsb2FkLnRzeCIsICIuLi9zcmMvdWkvY29tcG9uZW50cy9FbnJpY2gudHN4IiwgIi4uL3NyYy91aS9jb21wb25lbnRzL0FuYWx5emUudHN4IiwgIi4uL3NyYy91aS9jb21wb25lbnRzL1NwbGFzaC50c3giLCAiLi4vcGFja2FnZS5qc29uIiwgIi4uL3NyYy9saWIvdmVyc2lvbi5tdHMiLCAiLi4vc3JjL3VpL2NvbXBvbmVudHMvRGF0YWJhc2VQaWNrZXIudHN4IiwgIi4uL3NyYy9zdG9yZS5tdHMiLCAiLi4vc3JjL3ZhbGlkYXRlUGF0aHMubXRzIiwgIi4uL3NyYy9mbG93L3J1bi5tdHMiLCAiLi4vc3JjL2xvZ2dlci5tdHMiLCAiLi4vc3JjL2Zsb3cvc3RhdGVzLm10cyIsICIuLi9zcmMvZmxvdy9yZWR1Y2VyLm10cyIsICIuLi9zcmMvZmxvdy9wcm9qZWN0aW9uLm10cyIsICIuLi9zcmMvZmxvdy9pbnRlcnByZXRlci5tdHMiLCAiLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9zY2hlbWEtaGFzaC5tdHMiLCAiLi4vc3JjL2FwcC9zc2gubXRzIiwgIi4uL3NyYy9hcHAvZGIubXRzIiwgIi4uL3NyYy9kYi92ZXJzaW9uLm10cyIsICIuLi9zcmMvYXBwL2Fzc2VtYmxlLm10cyIsICIuLi9zcmMvZGIvcmVsYXRpb25zLm10cyIsICIuLi9zcmMvZGIvYXR0cmlidXRlcy5tdHMiLCAiLi4vc3JjL2RiL2VudW1zLm10cyIsICIuLi9zcmMvZGIvaW5kZXhlcy5tdHMiLCAiLi4vc3JjL2RiL2ZvcmVpZ24ta2V5cy5tdHMiLCAiLi4vc3JjL2RiL2ZpbGUtc3RhdHMubXRzIiwgIi4uL3NyYy9kYi9hbmFseXplLm10cyIsICIuLi9zcmMvZGIvc3RhdHMubXRzIiwgIi4uL3NyYy9kYi9zYW1wbGUubXRzIiwgIi4uL3NyYy9kYi9jaGVjay1jb25zdHJhaW50cy5tdHMiLCAiLi4vc3JjL2RiL2V4dGVuc2lvbnMubXRzIiwgIi4uL3NyYy9kYi9zZXF1ZW5jZXMubXRzIiwgIi4uL3NyYy9kYi90cmlnZ2Vycy5tdHMiLCAiLi4vc3JjL2RiL2Z1bmN0aW9ucy5tdHMiLCAiLi4vc3JjL2RiL2N1c3RvbS10eXBlcy5tdHMiLCAiLi4vc3JjL2RiL3Jscy5tdHMiLCAiLi4vc3JjL2RiL3BsYW5uZXItc3RhdHMubXRzIiwgIi4uL3NyYy9hcHAvbG9hZC1pbnRyb3NwZWN0aW9uLm10cyIsICIuLi9zcmMvYXBwL3Nlc3Npb24ubXRzIiwgIi4uL3NyYy9saWIvdHJwYy5tdHMiLCAiLi4vc3JjL2xpYi90cnBjLXVybC5tdHMiLCAiLi4vc3JjL2FwcC9kZXRlY3QubXRzIiwgIi4uL3NyYy9hcHAvY29uZmlnLm10cyIsICIuLi9zcmMvYXBwL3RlbGVtZXRyeS5tdHMiLCAiLi4vc3JjL2FwcC9zYW1wbGUubXRzIiwgIi4uL3NyYy9saWIvYXRvbWljLXdyaXRlLm10cyIsICIuLi9zcmMvYXBwL3RhaWwubXRzIiwgIi4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvam9iLXByb2dyZXNzL2xhYmVscy5tdHMiLCAiLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9qb2ItcHJvZ3Jlc3MvcGFyc2UubXRzIiwgIi4uL3NyYy9saWIvc3RyZWFtLWpvYi5tdHMiLCAiLi4vc3JjL2Zsb3cvdGVsZW1ldHJ5LW1hcHBlci5tdHMiLCAiLi4vc3JjL2FwcC9saXN0Lm10cyIsICIuLi9zcmMvYXBwL2xvZ2luLm10cyIsICIuLi9zcmMvdWkvY29tcG9uZW50cy9Mb2dpbi50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7en0gZnJvbSAnem9kJztcblxuY29uc3QgcmVsYXRpb25BdHRyaWJ1dGUgPSB6XG4gICAgLm9iamVjdCh7XG4gICAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICAgIGRhdGFfdHlwZTogei5zdHJpbmcoKSxcbiAgICAgICAgaXNfbnVsbGFibGU6IHouYm9vbGVhbigpLFxuICAgICAgICBjb21tZW50OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAgICAgIGVzdGltYXRlZF9kaXN0aW5jdDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLmFuZChcbiAgICAgICAgei5kaXNjcmltaW5hdGVkVW5pb24oJ2tpbmQnLCBbXG4gICAgICAgICAgICB6LmRpc2NyaW1pbmF0ZWRVbmlvbignaGFzX2RlZmF1bHQnLCBbXG4gICAgICAgICAgICAgICAgei5vYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBraW5kOiB6LmxpdGVyYWwoJ3JlZ3VsYXInKSxcbiAgICAgICAgICAgICAgICAgICAgaGFzX2RlZmF1bHQ6IHoubGl0ZXJhbChmYWxzZSksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgei5vYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBraW5kOiB6LmxpdGVyYWwoJ3JlZ3VsYXInKSxcbiAgICAgICAgICAgICAgICAgICAgaGFzX2RlZmF1bHQ6IHoubGl0ZXJhbCh0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9leHByZXNzaW9uOiB6LnN0cmluZygpLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB6Lm9iamVjdCh7XG4gICAgICAgICAgICAgICAga2luZDogei5saXRlcmFsKCdnZW5lcmF0ZWQnKSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZWRfc3RvcmFnZTogei5lbnVtKFsnc3RvcmVkJywgJ3ZpcnR1YWwnXSksXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVkX2V4cHJlc3Npb246IHouc3RyaW5nKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXSksXG4gICAgKTtcblxuY29uc3QgaW5kZXhJbmZvID0gelxuICAgIC5vYmplY3Qoe1xuICAgICAgICBpbmRleF9uYW1lOiB6LnN0cmluZygpLFxuICAgICAgICByZWxhdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICAgICAgICBhdHRyaWJ1dGVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgICAgICBkZWZpbml0aW9uOiB6LnN0cmluZygpLFxuICAgICAgICBjb21tZW50OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAgfSlcbiAgICAuYW5kKFxuICAgICAgICB6LmRpc2NyaW1pbmF0ZWRVbmlvbignaW5kZXhfa2luZCcsIFtcbiAgICAgICAgICAgIHoub2JqZWN0KHtpbmRleF9raW5kOiB6LmxpdGVyYWwoJ3ByaW1hcnknKX0pLFxuICAgICAgICAgICAgei5vYmplY3Qoe2luZGV4X2tpbmQ6IHoubGl0ZXJhbCgndW5pcXVlJyl9KSxcbiAgICAgICAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgICAgICAgICBpbmRleF9raW5kOiB6LmxpdGVyYWwoJ2V4Y2x1c2lvbicpLFxuICAgICAgICAgICAgICAgIGV4Y2x1c2lvbl9vcGVyYXRvcnM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHoub2JqZWN0KHtpbmRleF9raW5kOiB6LmxpdGVyYWwoJ3BsYWluJyl9KSxcbiAgICAgICAgXSksXG4gICAgKVxuICAgIC5hbmQoXG4gICAgICAgIHouZGlzY3JpbWluYXRlZFVuaW9uKCdpc19wYXJ0aWFsJywgW1xuICAgICAgICAgICAgei5vYmplY3Qoe2lzX3BhcnRpYWw6IHoubGl0ZXJhbChmYWxzZSl9KSxcbiAgICAgICAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgICAgICAgICBpc19wYXJ0aWFsOiB6LmxpdGVyYWwodHJ1ZSksXG4gICAgICAgICAgICAgICAgcGFydGlhbF9wcmVkaWNhdGU6IHouc3RyaW5nKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXSksXG4gICAgKTtcblxuY29uc3QgcmVmZXJlbmNlID0gei5vYmplY3Qoe1xuICAgIGNvbnN0cmFpbnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBhdHRyaWJ1dGVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIHJlZmVyZW5jZWRfcmVsYXRpb246IHouc3RyaW5nKCksXG4gICAgcmVmZXJlbmNlZF9hdHRyaWJ1dGVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIG9uX3VwZGF0ZTogei5lbnVtKFtcbiAgICAgICAgJ05PIEFDVElPTicsXG4gICAgICAgICdSRVNUUklDVCcsXG4gICAgICAgICdDQVNDQURFJyxcbiAgICAgICAgJ1NFVCBOVUxMJyxcbiAgICAgICAgJ1NFVCBERUZBVUxUJyxcbiAgICBdKSxcbiAgICBvbl9kZWxldGU6IHouZW51bShbXG4gICAgICAgICdOTyBBQ1RJT04nLFxuICAgICAgICAnUkVTVFJJQ1QnLFxuICAgICAgICAnQ0FTQ0FERScsXG4gICAgICAgICdTRVQgTlVMTCcsXG4gICAgICAgICdTRVQgREVGQVVMVCcsXG4gICAgXSksXG4gICAgY29tbWVudDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxufSk7XG5cbmNvbnN0IHJlbGF0aW9uRmlsZVN0YXRzID0gelxuICAgIC5vYmplY3Qoe1xuICAgICAgICBmaWxlX3BhdGg6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICAgICAgbW9kaWZpY2F0aW9uX3RpbWU6IHouZGF0ZSgpLFxuICAgICAgICBzaXplX2J5dGVzOiB6Lm51bWJlcigpLFxuICAgICAgICBpc19wYXJ0aXRpb25lZDogei5ib29sZWFuKCksXG4gICAgICAgIHBhcnRpdGlvbl9jb3VudDogei5udW1iZXIoKS5udWxsYWJsZSgpLFxuICAgICAgICBlc3RpbWF0ZWRfcm93X2NvdW50OiB6Lm51bWJlcigpLFxuICAgIH0pXG4gICAgLnBhcnRpYWwoKTtcblxuZXhwb3J0IGNvbnN0IHJlbGF0aW9uID0gei5vYmplY3Qoe1xuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgY29tbWVudDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIGtpbmQ6IHouZW51bShbJ3BhcnRpdGlvbmVkX3RhYmxlJywgJ3RhYmxlJywgJ3ZpZXcnLCAnbWF0ZXJpYWxpemVkX3ZpZXcnXSksXG4gICAgc3VtbWFyeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRldGFpbHM6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBlc3RpbWF0ZWRfcm93X2NvdW50OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgYXR0cmlidXRlczogei5yZWNvcmQoei5zdHJpbmcoKSwgcmVsYXRpb25BdHRyaWJ1dGUpLFxuICAgIHJlZmVyZW5jZXM6IHoucmVjb3JkKHouc3RyaW5nKCksIHJlZmVyZW5jZSksXG4gICAgaW5kZXhlczogei5yZWNvcmQoei5zdHJpbmcoKSwgaW5kZXhJbmZvKSxcbiAgICBmaWxlU3RhdHM6IHJlbGF0aW9uRmlsZVN0YXRzLm9wdGlvbmFsKCksXG4gICAgdmlld0RlZmluaXRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBkZGw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuXG5jb25zdCByZWxhdGlvbnMgPSB6LnJlY29yZCh6LnN0cmluZygpLCByZWxhdGlvbik7XG5cbmNvbnN0IGVudW1UeXBlID0gei5vYmplY3Qoe1xuICAgIHZhbHVlczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICBjb21tZW50OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG59KTtcblxuY29uc3QgY2hlY2tDb25zdHJhaW50ID0gei5vYmplY3Qoe1xuICAgIHJlbGF0aW9uX25hbWU6IHouc3RyaW5nKCksXG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICBleHByZXNzaW9uOiB6LnN0cmluZygpLFxuICAgIGlzX3ZhbGlkOiB6LmJvb2xlYW4oKSxcbn0pO1xuXG5jb25zdCBzZXF1ZW5jZSA9IHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIGRhdGFfdHlwZTogei5zdHJpbmcoKSxcbiAgICBzdGFydF92YWx1ZTogei5zdHJpbmcoKSxcbiAgICBtaW5fdmFsdWU6IHouc3RyaW5nKCksXG4gICAgbWF4X3ZhbHVlOiB6LnN0cmluZygpLFxuICAgIGluY3JlbWVudDogei5zdHJpbmcoKSxcbiAgICBjeWNsZTogei5ib29sZWFuKCksXG4gICAgY2FjaGVfc2l6ZTogei5zdHJpbmcoKSxcbiAgICBvd25lZF9ieV90YWJsZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIG93bmVkX2J5X2NvbHVtbjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxufSk7XG5cbmNvbnN0IGV4dGVuc2lvbiA9IHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIHZlcnNpb246IHouc3RyaW5nKCksXG4gICAgc2NoZW1hOiB6LnN0cmluZygpLFxufSk7XG5cbmNvbnN0IHRyaWdnZXIgPSB6Lm9iamVjdCh7XG4gICAgcmVsYXRpb25fbmFtZTogei5zdHJpbmcoKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIGRlZmluaXRpb246IHouc3RyaW5nKCksXG4gICAgZnVuY3Rpb25fc2NoZW1hOiB6LnN0cmluZygpLFxuICAgIGZ1bmN0aW9uX25hbWU6IHouc3RyaW5nKCksXG4gICAgaXNfZW5hYmxlZDogei5ib29sZWFuKCksXG59KTtcblxuY29uc3QgZnVuY3Rpb25JbmZvID0gei5vYmplY3Qoe1xuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgbGFuZ3VhZ2U6IHouc3RyaW5nKCksXG4gICAgYXJndW1lbnRfdHlwZXM6IHouc3RyaW5nKCksXG4gICAgcmV0dXJuX3R5cGU6IHouc3RyaW5nKCksXG4gICAgZGVmaW5pdGlvbjogei5zdHJpbmcoKSxcbiAgICBpc190cmlnZ2VyOiB6LmJvb2xlYW4oKSxcbn0pO1xuXG5jb25zdCBkb21haW5UeXBlID0gei5vYmplY3Qoe1xuICAgIGtpbmQ6IHoubGl0ZXJhbCgnZG9tYWluJyksXG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICBiYXNlX3R5cGU6IHouc3RyaW5nKCksXG4gICAgbm90X251bGw6IHouYm9vbGVhbigpLFxuICAgIGRlZmF1bHRfZXhwcmVzc2lvbjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIGNoZWNrX2NvbnN0cmFpbnRzOiB6LmFycmF5KFxuICAgICAgICB6Lm9iamVjdCh7bmFtZTogei5zdHJpbmcoKSwgZXhwcmVzc2lvbjogei5zdHJpbmcoKX0pLFxuICAgICksXG59KTtcblxuY29uc3QgY29tcG9zaXRlVHlwZSA9IHoub2JqZWN0KHtcbiAgICBraW5kOiB6LmxpdGVyYWwoJ2NvbXBvc2l0ZScpLFxuICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgYXR0cmlidXRlczogei5hcnJheShcbiAgICAgICAgei5vYmplY3Qoe1xuICAgICAgICAgICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgICAgIHR5cGU6IHouc3RyaW5nKCksXG4gICAgICAgICAgICBwb3NpdGlvbjogei5udW1iZXIoKSxcbiAgICAgICAgfSksXG4gICAgKSxcbn0pO1xuXG5jb25zdCBjdXN0b21UeXBlID0gei5kaXNjcmltaW5hdGVkVW5pb24oJ2tpbmQnLCBbZG9tYWluVHlwZSwgY29tcG9zaXRlVHlwZV0pO1xuXG5jb25zdCByZWxhdGlvblJMUyA9IHoub2JqZWN0KHtcbiAgICByZWxhdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICAgIHJsc19lbmFibGVkOiB6LmJvb2xlYW4oKSxcbiAgICBybHNfZm9yY2VkOiB6LmJvb2xlYW4oKSxcbn0pO1xuXG5jb25zdCBwb2xpY3kgPSB6Lm9iamVjdCh7XG4gICAgcmVsYXRpb25fbmFtZTogei5zdHJpbmcoKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIHBlcm1pc3NpdmU6IHouYm9vbGVhbigpLFxuICAgIHJvbGVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGNvbW1hbmQ6IHouZW51bShbJ0FMTCcsICdTRUxFQ1QnLCAnSU5TRVJUJywgJ1VQREFURScsICdERUxFVEUnXSksXG4gICAgdXNpbmdfZXhwcmVzc2lvbjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIHdpdGhfY2hlY2tfZXhwcmVzc2lvbjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBkYXRhYmFzZUludHJvc3BlY3Rpb25TY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5lbnVtKFsncG9zdGdyZXNxbCddKSxcbiAgICB1c2VyRXhwbGFuYXRpb246IHpcbiAgICAgICAgLnN0cmluZygpXG4gICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgIC5kZXNjcmliZShcbiAgICAgICAgICAgICdicmllZiBleHBsYW5hdGlvbiBmcm9tIHRoZSB1c2VyIGFib3V0IHdoYXQgdGhlIGRhdGFiYXNlIGlzIGFib3V0JyxcbiAgICAgICAgKSxcbiAgICB2ZXJzaW9uOiB6Lm9iamVjdCh7XG4gICAgICAgIHZlcnNpb25fc3RyaW5nOiB6LnN0cmluZygpLFxuICAgICAgICB2ZXJzaW9uX251bWJlcjogei5udW1iZXIoKSxcbiAgICB9KSxcbiAgICBpZGVudGlmaWVyOiB6Lm9iamVjdCh7XG4gICAgICAgIHN5c3RlbV9pZGVudGlmaWVyOiB6LnN0cmluZygpLFxuICAgICAgICBkYXRhYmFzZV9vaWQ6IHoubnVtYmVyKCksXG4gICAgfSksXG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICBjb21tZW50OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAgcmVsYXRpb25zOiByZWxhdGlvbnMsXG4gICAgZW51bXM6IHoucmVjb3JkKHouc3RyaW5nKCksIGVudW1UeXBlKSxcbiAgICBjaGVja0NvbnN0cmFpbnRzOiB6LmFycmF5KGNoZWNrQ29uc3RyYWludCkub3B0aW9uYWwoKSxcbiAgICBzZXF1ZW5jZXM6IHouYXJyYXkoc2VxdWVuY2UpLm9wdGlvbmFsKCksXG4gICAgZXh0ZW5zaW9uczogei5hcnJheShleHRlbnNpb24pLm9wdGlvbmFsKCksXG4gICAgdHJpZ2dlcnM6IHouYXJyYXkodHJpZ2dlcikub3B0aW9uYWwoKSxcbiAgICBmdW5jdGlvbnM6IHouYXJyYXkoZnVuY3Rpb25JbmZvKS5vcHRpb25hbCgpLFxuICAgIGN1c3RvbVR5cGVzOiB6LmFycmF5KGN1c3RvbVR5cGUpLm9wdGlvbmFsKCksXG4gICAgcmxzOiB6XG4gICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgcmVsYXRpb25zOiB6LmFycmF5KHJlbGF0aW9uUkxTKSxcbiAgICAgICAgICAgIHBvbGljaWVzOiB6LmFycmF5KHBvbGljeSksXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb25hbCgpLFxufSk7XG5cbmV4cG9ydCB0eXBlIFREYXRhYmFzZUludHJvc3BlY3Rpb24gPSB6LmluZmVyPFxuICAgIHR5cGVvZiBkYXRhYmFzZUludHJvc3BlY3Rpb25TY2hlbWFcbj47XG4iLCAiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IHtDb21tYW5kfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHtyZW5kZXJ9IGZyb20gJ2luayc7XG5pbXBvcnQge2NyZWF0ZUVsZW1lbnR9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7RXJyb3J9IGZyb20gJy4vdWkvY29tcG9uZW50cy9FcnJvci5qcyc7XG5pbXBvcnQge0FwcH0gZnJvbSAnLi91aS9BcHAuanMnO1xuaW1wb3J0IHtTcGxhc2h9IGZyb20gJy4vdWkvY29tcG9uZW50cy9TcGxhc2guanMnO1xuaW1wb3J0IHtcbiAgICBjcmVhdGVBcHBTdG9yZSxcbiAgICBTVE9QX0FGVEVSX1NUQUdFUyxcbiAgICB0eXBlIFRTdG9wQWZ0ZXJTdGFnZSxcbn0gZnJvbSAnLi9zdG9yZS5tanMnO1xuaW1wb3J0IHtydW5JbkFjdGlvbn0gZnJvbSAnbW9ieCc7XG5pbXBvcnQge1xuICAgIHZhbGlkYXRlUGF0aE9wdGlvbnMsXG4gICAgbm9ybWFsaXplUGF0aCxcbiAgICB0eXBlIFRQYXRoVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tICcuL3ZhbGlkYXRlUGF0aHMubWpzJztcbmltcG9ydCB7VENvbm5lY3Rpb25Db25maWd9IGZyb20gJy4vdHlwZXMvY29ubmVjdGlvbi5tanMnO1xuaW1wb3J0IHtydW5GbG93fSBmcm9tICcuL2Zsb3cvcnVuLm1qcyc7XG5pbXBvcnQge3J1bkxpc3R9IGZyb20gJy4vYXBwL2xpc3QubWpzJztcbmltcG9ydCB7cnVuTG9naW59IGZyb20gJy4vYXBwL2xvZ2luLm1qcyc7XG5pbXBvcnQge0NMSUVOVF9WRVJTSU9OfSBmcm9tICcuL2xpYi92ZXJzaW9uLm1qcyc7XG5pbXBvcnQge0RCQ1RYX0RFVn0gZnJvbSAnLi9saWIvZW52Lm1qcyc7XG5pbXBvcnQge3Njb3BlfSBmcm9tICdzY29wZS11dGlsaXRpZXMnO1xuaW1wb3J0IHtmbHVzaENvbmZpZ30gZnJvbSAnLi9hcHAvY29uZmlnLm1qcyc7XG5pbXBvcnQge1xuICAgIGV4aXRHcmFjZWZ1bGx5LFxuICAgIGZpcmVUZWxlbWV0cnlFdmVudCxcbiAgICBmaXJlVGVsZW1ldHJ5RXZlbnRBd2FpdGFibGUsXG4gICAgZ2V0Rmxvd1NuYXBzaG90LFxuICAgIGdldFJ1blN0YXJ0VGltZSxcbiAgICBpc0RvTm90VHJhY2ssXG4gICAgaXNGaXJzdFJ1bixcbiAgICBzZXRBdHRhY2hPcmlnaW4sXG4gICAgc2V0U3ViY29tbWFuZCxcbiAgICB3YXNBdXRoZWRBdFJ1blN0YXJ0LFxuICAgIHR5cGUgVEF0dGFjaE9yaWdpbixcbn0gZnJvbSAnLi9hcHAvdGVsZW1ldHJ5Lm1qcyc7XG5pbXBvcnQge2xvZ2dlcn0gZnJvbSAnLi9sb2dnZXIubWpzJztcblxuZXhwb3J0IHR5cGUgVFNTTE1vZGUgPVxuICAgIHwgJ2Rpc2FibGUnXG4gICAgfCAnYWxsb3cnXG4gICAgfCAncHJlZmVyJ1xuICAgIHwgJ3JlcXVpcmUnXG4gICAgfCAndmVyaWZ5LWNhJ1xuICAgIHwgJ3ZlcmlmeS1mdWxsJztcblxuZXhwb3J0IGludGVyZmFjZSBUT3B0aW9ucyB7XG4gICAgaG9zdG5hbWU/OiBzdHJpbmc7XG4gICAgcG9ydD86IG51bWJlcjtcbiAgICBkYXRhYmFzZT86IHN0cmluZztcbiAgICB1c2VybmFtZT86IHN0cmluZztcbiAgICBzc2xtb2RlPzogVFNTTE1vZGU7XG4gICAgc3NsY2VydD86IHN0cmluZztcbiAgICBzc2xrZXk/OiBzdHJpbmc7XG4gICAgc3Nscm9vdGNlcnQ/OiBzdHJpbmc7XG4gICAgc3NoPzogc3RyaW5nO1xuICAgIHNzaEhvc3Q/OiBzdHJpbmc7XG4gICAgc3NoUG9ydD86IG51bWJlcjtcbiAgICBzc2hVc2VybmFtZT86IHN0cmluZztcbiAgICBzc2hLZXk/OiBzdHJpbmc7XG4gICAgb3V0cHV0SW50cm9zcGVjdGlvbkpzb24/OiBzdHJpbmc7XG4gICAgdXNlSW50cm9zcGVjdGlvbkpzb24/OiBzdHJpbmc7XG4gICAgc3RvcEFmdGVyPzogVFN0b3BBZnRlclN0YWdlO1xuICAgIGFsbG93T3ZlcndyaXRlPzogYm9vbGVhbjtcbiAgICBhbGxvd0ludHJvc3BlY3Rpb25Kc29uT3ZlcndyaXRlPzogYm9vbGVhbjtcbiAgICBleHBsYW5hdGlvbj86IHN0cmluZztcbiAgICBzZW5zaXRpdmVNYXNrPzogc3RyaW5nO1xuICAgIG91dHB1dFNhbXBsZXM/OiBzdHJpbmc7XG4gICAgYWxsb3dTYW1wbGVPdmVyd3JpdGU/OiBib29sZWFuO1xuICAgIHNraXBBbmFseXplPzogYm9vbGVhbjtcbn1cblxuY29uc3QgcGFyc2VTU0hUYXJnZXQgPSAoXG4gICAgdGFyZ2V0OiBzdHJpbmcsXG4pOiB7XG4gICAgdXNlcm5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBob3N0OiBzdHJpbmc7XG4gICAgcG9ydDogbnVtYmVyIHwgdW5kZWZpbmVkO1xufSA9PiB7XG4gICAgY29uc3QgYXRJbmRleCA9IHRhcmdldC5pbmRleE9mKCdAJyk7XG4gICAgY29uc3QgdXNlcm5hbWUgPSBhdEluZGV4ID49IDAgPyB0YXJnZXQuc2xpY2UoMCwgYXRJbmRleCkgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgaG9zdFBvcnQgPSBhdEluZGV4ID49IDAgPyB0YXJnZXQuc2xpY2UoYXRJbmRleCArIDEpIDogdGFyZ2V0O1xuICAgIGNvbnN0IGNvbG9uSW5kZXggPSBob3N0UG9ydC5sYXN0SW5kZXhPZignOicpO1xuICAgIGNvbnN0IGhvc3QgPSBjb2xvbkluZGV4ID49IDAgPyBob3N0UG9ydC5zbGljZSgwLCBjb2xvbkluZGV4KSA6IGhvc3RQb3J0O1xuICAgIGNvbnN0IHBvcnQgPVxuICAgICAgICBjb2xvbkluZGV4ID49IDBcbiAgICAgICAgICAgID8gcGFyc2VJbnQoaG9zdFBvcnQuc2xpY2UoY29sb25JbmRleCArIDEpLCAxMClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIHt1c2VybmFtZSwgaG9zdCwgcG9ydH07XG59O1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxucHJvZ3JhbVxuICAgIC5uYW1lKCdkYmN0eCcpXG4gICAgLnZlcnNpb24oQ0xJRU5UX1ZFUlNJT04pXG4gICAgLmhlbHBPcHRpb24oJy0taGVscCcsICdkaXNwbGF5IGhlbHAgZm9yIGNvbW1hbmQnKVxuICAgIC5hZGRIZWxwVGV4dCgnYmVmb3JlQWxsJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7dW5tb3VudH0gPSByZW5kZXIoY3JlYXRlRWxlbWVudChTcGxhc2gpKTtcbiAgICAgICAgdW5tb3VudCgpO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG5cbmNvbnN0IGdlbmVyYXRlID0gcHJvZ3JhbVxuICAgIC5jb21tYW5kKCdnZW5lcmF0ZScsIHtpc0RlZmF1bHQ6IHRydWV9KVxuICAgIC5kZXNjcmlwdGlvbignQ29ubmVjdCB0byBhIFBvc3RncmVTUUwgZGF0YWJhc2UgYW5kIGdlbmVyYXRlIGNvbnRleHQnKVxuICAgIC5oZWxwT3B0aW9uKCctLWhlbHAnLCAnZGlzcGxheSBoZWxwIGZvciBjb21tYW5kJylcbiAgICAuYXJndW1lbnQoXG4gICAgICAgICdbY29ubmVjdGlvbi1zdHJpbmddJyxcbiAgICAgICAgJ1Bvc3RncmVTUUwgY29ubmVjdGlvbiBzdHJpbmcgKGVudjogREFUQUJBU0VfVVJMKScsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctaCwgLS1ob3N0bmFtZSA8aG9zdD4nLFxuICAgICAgICAnZGF0YWJhc2UgaG9zdG5hbWUgKGVudjogUEdIT1NULCBkZWZhdWx0OiBsb2NhbGhvc3QpJyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy1wLCAtLXBvcnQgPHBvcnQ+JyxcbiAgICAgICAgJ2RhdGFiYXNlIHBvcnQgKGVudjogUEdQT1JULCBkZWZhdWx0OiA1NDMyKScsXG4gICAgICAgIHBhcnNlSW50LFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgICAnLWQsIC0tZGF0YWJhc2UgPG5hbWU+JyxcbiAgICAgICAgJ2RhdGFiYXNlIG5hbWUgKGVudjogUEdEQVRBQkFTRSwgZGVmYXVsdDogcG9zdGdyZXMpJyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy1VLCAtLXVzZXJuYW1lIDx1c2VyPicsXG4gICAgICAgICdkYXRhYmFzZSB1c2VybmFtZSAoZW52OiBQR1VTRVIsIGRlZmF1bHQ6IHBvc3RncmVzKScsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctLXNzbG1vZGUgPG1vZGU+JyxcbiAgICAgICAgJ1NTTCBtb2RlOiBkaXNhYmxlfGFsbG93fHByZWZlcnxyZXF1aXJlfHZlcmlmeS1jYXx2ZXJpZnktZnVsbCAoZW52OiBQR1NTTE1PREUsIGRlZmF1bHQ6IHByZWZlciknLFxuICAgIClcbiAgICAub3B0aW9uKCctLXNzbGNlcnQgPHBhdGg+JywgJ3BhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIChlbnY6IFBHU1NMQ0VSVCknKVxuICAgIC5vcHRpb24oJy0tc3Nsa2V5IDxwYXRoPicsICdwYXRoIHRvIGNsaWVudCBwcml2YXRlIGtleSAoZW52OiBQR1NTTEtFWSknKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctLXNzbHJvb3RjZXJ0IDxwYXRoPicsXG4gICAgICAgICdwYXRoIHRvIHJvb3QgQ0EgY2VydGlmaWNhdGUgKGVudjogUEdTU0xST09UQ0VSVCknLFxuICAgIClcbiAgICAub3B0aW9uKCctLXNzaCA8dGFyZ2V0PicsICdTU0ggdHVubmVsIHRhcmdldCAodXNlckBob3N0Wzpwb3J0XSknKVxuICAgIC5vcHRpb24oJy0tc3NoLWhvc3QgPGhvc3Q+JywgJ1NTSCB0dW5uZWwgaG9zdCAoYmFzdGlvbi9qdW1wIHNlcnZlciknKVxuICAgIC5vcHRpb24oJy0tc3NoLXBvcnQgPHBvcnQ+JywgJ1NTSCB0dW5uZWwgcG9ydCAoZGVmYXVsdDogMjIpJywgcGFyc2VJbnQpXG4gICAgLm9wdGlvbignLS1zc2gtdXNlcm5hbWUgPHVzZXI+JywgJ1NTSCB0dW5uZWwgdXNlcm5hbWUgKGRlZmF1bHQ6ICRVU0VSKScpXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy1pLCAtLXNzaC1rZXkgPHBhdGg+JyxcbiAgICAgICAgJ3BhdGggdG8gU1NIIHByaXZhdGUga2V5IChkZWZhdWx0OiB+Ly5zc2gvaWRfcnNhKScsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctLW91dHB1dC1pbnRyb3NwZWN0aW9uLWpzb24gPHBhdGg+JyxcbiAgICAgICAgJ3dyaXRlIGludHJvc3BlY3Rpb24gSlNPTiB0byBmaWxlJyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy0tdXNlLWludHJvc3BlY3Rpb24tanNvbiA8cGF0aD4nLFxuICAgICAgICAnbG9hZCBpbnRyb3NwZWN0aW9uIGZyb20gYSBwcmV2aW91c2x5LXNhdmVkIEpTT04gZmlsZSAoc2tpcHMgbGl2ZSBpbnRyb3NwZWN0aW9uOyBzdGlsbCBjb25uZWN0cyB0byBEQiB0byB2ZXJpZnkgaWRlbnRpdHkpJyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy0tc3RvcC1hZnRlciA8c3RhZ2U+JyxcbiAgICAgICAgJ2V4aXQgYWZ0ZXIgc3RhZ2UgY29tcGxldGVzIChzc2gtY29ubmVjdCwgZGItY29ubmVjdCwgaW50cm9zcGVjdGlvbiwgc2FtcGxpbmcpJyxcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICAgJy0tYWxsb3ctb3ZlcndyaXRlJyxcbiAgICAgICAgJ3NraXAgb3ZlcndyaXRlIGNvbmZpcm1hdGlvbiBmb3IgYWxsIG91dHB1dCBmaWxlcyAodW1icmVsbGEgZm9yIC0tYWxsb3ctaW50cm9zcGVjdGlvbi1qc29uLW92ZXJ3cml0ZSBhbmQgLS1hbGxvdy1zYW1wbGUtb3ZlcndyaXRlKScsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctLWFsbG93LWludHJvc3BlY3Rpb24tanNvbi1vdmVyd3JpdGUnLFxuICAgICAgICAnc2tpcCBvdmVyd3JpdGUgY29uZmlybWF0aW9uIGZvciB0aGUgaW50cm9zcGVjdGlvbiBKU09OIGZpbGUnLFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgICAnLS1leHBsYW5hdGlvbiA8dGV4dD4nLFxuICAgICAgICAncHJvdmlkZSBkYXRhYmFzZSBleHBsYW5hdGlvbiAoc2tpcHMgaW50ZXJhY3RpdmUgcHJvbXB0KScsXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAgICctLXNlbnNpdGl2ZS1tYXNrIDxwYXRoPicsXG4gICAgICAgICdwYXRoIHRvIHNlbnNpdGl2ZS1tYXNrLmpzb24gZm9yIGNvbHVtbiBleGNsdXNpb24nLFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgICAnLS1vdXRwdXQtc2FtcGxlcyA8ZGlyPicsXG4gICAgICAgICdkaXJlY3RvcnkgZm9yIHNhbXBsZSBvdXRwdXQgZmlsZXMgKGFjdGl2YXRlcyBzYW1wbGluZyBzdGFnZSknLFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgICAnLS1hbGxvdy1zYW1wbGUtb3ZlcndyaXRlJyxcbiAgICAgICAgJ3NraXAgb3ZlcndyaXRlIGNvbmZpcm1hdGlvbiBmb3Igc2FtcGxlIG91dHB1dCBkaXJlY3RvcnknLFxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgICAnLS1za2lwLWFuYWx5emUnLFxuICAgICAgICAnc2tpcCBydW5uaW5nIEFOQUxZWkUgb24gdGFibGVzIGR1cmluZyBpbnRyb3NwZWN0aW9uICh1c2VzIGV4aXN0aW5nIHBsYW5uZXIgc3RhdGlzdGljcyknLFxuICAgIClcbiAgICAuYWN0aW9uKGFzeW5jIChjb25uZWN0aW9uU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQsIG9wdGlvbnM6IFRPcHRpb25zKSA9PiB7XG4gICAgICAgIC8vIFNob3cgaGVscCBpZiBubyBjb25uZWN0aW9uIGNvbmZpZyBpcyBwcm92aWRlZFxuICAgICAgICBjb25zdCBoYXNDTElDb25maWcgPVxuICAgICAgICAgICAgY29ubmVjdGlvblN0cmluZyAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICBvcHRpb25zLmhvc3RuYW1lICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIG9wdGlvbnMucG9ydCAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICBvcHRpb25zLmRhdGFiYXNlICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIG9wdGlvbnMudXNlcm5hbWUgIT09IHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCBoYXNFbnZDb25maWcgPSBbXG4gICAgICAgICAgICAnUEdIT1NUJyxcbiAgICAgICAgICAgICdQR1BPUlQnLFxuICAgICAgICAgICAgJ1BHREFUQUJBU0UnLFxuICAgICAgICAgICAgJ1BHVVNFUicsXG4gICAgICAgICAgICAnUEdQQVNTV09SRCcsXG4gICAgICAgICAgICAnREFUQUJBU0VfVVJMJyxcbiAgICAgICAgXS5zb21lKChrZXkpID0+IHByb2Nlc3MuZW52W2tleV0gIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgaWYgKCFoYXNDTElDb25maWcgJiYgIWhhc0VudkNvbmZpZykge1xuICAgICAgICAgICAgZ2VuZXJhdGUuaGVscCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgY29ubmVjdGlvbiBzdHJpbmdzIGFyZSBQb3N0Z3JlU1FMIFVSTHNcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlQ29ubmVjdGlvblN0cmluZyA9XG4gICAgICAgICAgICBjb25uZWN0aW9uU3RyaW5nID8/IHByb2Nlc3MuZW52WydEQVRBQkFTRV9VUkwnXTtcblxuICAgICAgICBjb25zdCBjb25uZWN0aW9uU3RyaW5nRXJyb3IgPSBzY29wZShlZmZlY3RpdmVDb25uZWN0aW9uU3RyaW5nKVxuICAgICAgICAgICAgLmxldCgoc3RyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghVVJMLmNhblBhcnNlKHN0cikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBNYWxmb3JtZWQgY29ubmVjdGlvbiBzdHJpbmcgXCIke3N0cn1cIjogbm90IGEgdmFsaWQgVVJMYDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB7cHJvdG9jb2x9ID0gbmV3IFVSTChzdHIpO1xuICAgICAgICAgICAgICAgIGlmIChwcm90b2NvbCAhPT0gJ3Bvc3RncmVzOicgJiYgcHJvdG9jb2wgIT09ICdwb3N0Z3Jlc3FsOicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBJbnZhbGlkIGNvbm5lY3Rpb24gc3RyaW5nIFwiJHtzdHJ9XCI6IGV4cGVjdGVkIHBvc3RncmVzOi8vIG9yIHBvc3RncmVzcWw6Ly9gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC52YWx1ZSgpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIHBhdGggb3B0aW9ucyBleGlzdCBvbiBmaWxlc3lzdGVtXG4gICAgICAgIGNvbnN0IHtlcnJvcnM6IHBhdGhFcnJvcnMsIGV4cGFuZGVkUGF0aHN9ID1cbiAgICAgICAgICAgIHZhbGlkYXRlUGF0aE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKHBhdGhFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IHBhdGhFcnJvcnNcbiAgICAgICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgICAgICAoe29wdGlvbiwgcGF0aH06IFRQYXRoVmFsaWRhdGlvbkVycm9yKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgYCAgJHtvcHRpb259OiAke3BhdGh9YCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmpvaW4oJ1xcbicpO1xuXG4gICAgICAgICAgICByZW5kZXIoXG4gICAgICAgICAgICAgICAgRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVGhlIGZvbGxvd2luZyBwYXRocyBkbyBub3QgZXhpc3Q6XFxuJHtlcnJvck1lc3NhZ2VzfWAsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhd2FpdCBleGl0R3JhY2VmdWxseSgxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlcGxhY2Ugb3JpZ2luYWwgcGF0aHMgd2l0aCBleHBhbmRlZCBwYXRoc1xuICAgICAgICAvLyAofiByZXNvbHZlZCB0byBob21lIGRpcmVjdG9yeSlcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkT3B0aW9uczogVE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgLi4uZXhwYW5kZWRQYXRocyxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB2YWxpZGF0ZWRPcHRpb25zLnVzZUludHJvc3BlY3Rpb25Kc29uICYmXG4gICAgICAgICAgICB2YWxpZGF0ZWRPcHRpb25zLm91dHB1dEludHJvc3BlY3Rpb25Kc29uXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmVuZGVyKFxuICAgICAgICAgICAgICAgIEVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICctLXVzZS1pbnRyb3NwZWN0aW9uLWpzb24gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLS1vdXRwdXQtaW50cm9zcGVjdGlvbi1qc29uIChjeWNsaWMpLicsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXdhaXQgZXhpdEdyYWNlZnVsbHkoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVkT3B0aW9ucy51c2VJbnRyb3NwZWN0aW9uSnNvbikge1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlZE9wdGlvbnMuc2tpcEFuYWx5emUpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgICAgICAgICAgJy0tc2tpcC1hbmFseXplIGlzIGEgbm8tb3Agd2hlbiAtLXVzZS1pbnRyb3NwZWN0aW9uLWpzb24gaXMgc2V0JyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBvdXRwdXQgaW50cm9zcGVjdGlvbiBwYXRoXG4gICAgICAgIGNvbnN0IHJlc29sdmVkT3V0cHV0UGF0aCA9IHZhbGlkYXRlZE9wdGlvbnMub3V0cHV0SW50cm9zcGVjdGlvbkpzb25cbiAgICAgICAgICAgID8gbm9ybWFsaXplUGF0aCh2YWxpZGF0ZWRPcHRpb25zLm91dHB1dEludHJvc3BlY3Rpb25Kc29uKVxuICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHJlc29sdmVkVXNlSW50cm9zcGVjdGlvblBhdGggPVxuICAgICAgICAgICAgdmFsaWRhdGVkT3B0aW9ucy51c2VJbnRyb3NwZWN0aW9uSnNvbiAmJlxuICAgICAgICAgICAgZXhwYW5kZWRQYXRocy51c2VJbnRyb3NwZWN0aW9uSnNvblxuICAgICAgICAgICAgICAgID8gZXhwYW5kZWRQYXRocy51c2VJbnRyb3NwZWN0aW9uSnNvblxuICAgICAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICAvLyBCdWlsZCBjb25maWcgYW5kIHJlbmRlciB0aGUgYXBwXG4gICAgICAgIGNvbnN0IHNzaERlZmF1bHRzID0gdmFsaWRhdGVkT3B0aW9ucy5zc2hcbiAgICAgICAgICAgID8gcGFyc2VTU0hUYXJnZXQodmFsaWRhdGVkT3B0aW9ucy5zc2gpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCBjb25maWc6IFRDb25uZWN0aW9uQ29uZmlnID0ge1xuICAgICAgICAgICAgY29ubmVjdGlvblN0cmluZzogZWZmZWN0aXZlQ29ubmVjdGlvblN0cmluZyxcbiAgICAgICAgICAgIC4uLnZhbGlkYXRlZE9wdGlvbnMsXG4gICAgICAgICAgICBzc2hIb3N0OiB2YWxpZGF0ZWRPcHRpb25zLnNzaEhvc3QgPz8gc3NoRGVmYXVsdHM/Lmhvc3QsXG4gICAgICAgICAgICBzc2hQb3J0OiB2YWxpZGF0ZWRPcHRpb25zLnNzaFBvcnQgPz8gc3NoRGVmYXVsdHM/LnBvcnQsXG4gICAgICAgICAgICBzc2hVc2VybmFtZTogdmFsaWRhdGVkT3B0aW9ucy5zc2hVc2VybmFtZSA/PyBzc2hEZWZhdWx0cz8udXNlcm5hbWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc3RvcEFmdGVyID0gdmFsaWRhdGVkT3B0aW9ucy5zdG9wQWZ0ZXIgPz8gbnVsbDtcblxuICAgICAgICBpZiAoc3RvcEFmdGVyICE9PSBudWxsICYmICFTVE9QX0FGVEVSX1NUQUdFUy5pbmNsdWRlcyhzdG9wQWZ0ZXIpKSB7XG4gICAgICAgICAgICByZW5kZXIoXG4gICAgICAgICAgICAgICAgRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgSW52YWxpZCAtLXN0b3AtYWZ0ZXIgc3RhZ2UgXCIke3N0b3BBZnRlcn1cIi4gVmFsaWQgc3RhZ2VzOiAke1NUT1BfQUZURVJfU1RBR0VTLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhd2FpdCBleGl0R3JhY2VmdWxseSgxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc29sdmVkT3V0cHV0U2FtcGxlcyA9IHZhbGlkYXRlZE9wdGlvbnMub3V0cHV0U2FtcGxlc1xuICAgICAgICAgICAgPyBub3JtYWxpemVQYXRoKHZhbGlkYXRlZE9wdGlvbnMub3V0cHV0U2FtcGxlcylcbiAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICBjb25zdCByZXNvbHZlZFNlbnNpdGl2ZU1hc2sgPVxuICAgICAgICAgICAgdmFsaWRhdGVkT3B0aW9ucy5zZW5zaXRpdmVNYXNrICYmIGV4cGFuZGVkUGF0aHMuc2Vuc2l0aXZlTWFza1xuICAgICAgICAgICAgICAgID8gZXhwYW5kZWRQYXRocy5zZW5zaXRpdmVNYXNrXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGlmIChzdG9wQWZ0ZXIgPT09ICdzYW1wbGluZycgJiYgcmVzb2x2ZWRPdXRwdXRTYW1wbGVzID09PSBudWxsKSB7XG4gICAgICAgICAgICByZW5kZXIoXG4gICAgICAgICAgICAgICAgRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICAgICAgICAgICAgJy0tc3RvcC1hZnRlcj1zYW1wbGluZyByZXF1aXJlcyAtLW91dHB1dC1zYW1wbGVzIHRvIGJlIHNldCcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXdhaXQgZXhpdEdyYWNlZnVsbHkoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbGxvd092ZXJ3cml0ZVVtYnJlbGxhID0gdmFsaWRhdGVkT3B0aW9ucy5hbGxvd092ZXJ3cml0ZSA/PyBmYWxzZTtcblxuICAgICAgICBjb25zdCBzdG9yZSA9IGNyZWF0ZUFwcFN0b3JlKGNvbmZpZywge1xuICAgICAgICAgICAgb3V0cHV0SW50cm9zcGVjdGlvbkpzb246IHJlc29sdmVkT3V0cHV0UGF0aCxcbiAgICAgICAgICAgIHVzZUludHJvc3BlY3Rpb25Kc29uUGF0aDogcmVzb2x2ZWRVc2VJbnRyb3NwZWN0aW9uUGF0aCxcbiAgICAgICAgICAgIHN0b3BBZnRlcixcbiAgICAgICAgICAgIGFsbG93SW50cm9zcGVjdGlvbkpzb25PdmVyd3JpdGU6XG4gICAgICAgICAgICAgICAgKHZhbGlkYXRlZE9wdGlvbnMuYWxsb3dJbnRyb3NwZWN0aW9uSnNvbk92ZXJ3cml0ZSA/PyBmYWxzZSkgfHxcbiAgICAgICAgICAgICAgICBhbGxvd092ZXJ3cml0ZVVtYnJlbGxhLFxuICAgICAgICAgICAgZXhwbGFuYXRpb246IHZhbGlkYXRlZE9wdGlvbnMuZXhwbGFuYXRpb24gPz8gbnVsbCxcbiAgICAgICAgICAgIHNlbnNpdGl2ZU1hc2tQYXRoOiByZXNvbHZlZFNlbnNpdGl2ZU1hc2ssXG4gICAgICAgICAgICBvdXRwdXRTYW1wbGVzRGlyOiByZXNvbHZlZE91dHB1dFNhbXBsZXMsXG4gICAgICAgICAgICBhbGxvd1NhbXBsZU92ZXJ3cml0ZTpcbiAgICAgICAgICAgICAgICAodmFsaWRhdGVkT3B0aW9ucy5hbGxvd1NhbXBsZU92ZXJ3cml0ZSA/PyBmYWxzZSkgfHxcbiAgICAgICAgICAgICAgICBhbGxvd092ZXJ3cml0ZVVtYnJlbGxhLFxuICAgICAgICAgICAgc2tpcEFuYWx5emU6IHZhbGlkYXRlZE9wdGlvbnMuc2tpcEFuYWx5emUgPz8gZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGlua0FwcCA9IHJlbmRlcihjcmVhdGVFbGVtZW50KEFwcCwge3N0b3JlfSkpO1xuXG4gICAgICAgIGlmIChjb25uZWN0aW9uU3RyaW5nRXJyb3IpIHtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uc3RhdGUgPSAnZXJyb3InO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5lcnJvciA9IGNvbm5lY3Rpb25TdHJpbmdFcnJvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ2VuZXJhdGVTdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGZsb3dSZXN1bHRQcm9taXNlID0gcnVuRmxvdyhzdG9yZSk7XG4gICAgICAgIGF3YWl0IGlua0FwcC53YWl0VW50aWxFeGl0KCk7XG4gICAgICAgIGNvbnN0IGZpbmFsU3RhdGUgPSBhd2FpdCBmbG93UmVzdWx0UHJvbWlzZTtcbiAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KFxuICAgICAgICAgICAgZmluYWxTdGF0ZS5waGFzZSA9PT0gJ2Vycm9yJ1xuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjbGkuY29tbWFuZC5lcnJvcmVkJyxcbiAgICAgICAgICAgICAgICAgICAgICBzdWJjb21tYW5kOiAnZ2VuZXJhdGUnLFxuICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NsYXNzOiAnZmxvdycsXG4gICAgICAgICAgICAgICAgICAgICAgZXJyb3JfcGhhc2U6IGZpbmFsU3RhdGUuZXJyb3JQaGFzZSA/PyAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX21zOiBEYXRlLm5vdygpIC0gZ2VuZXJhdGVTdGFydCxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY2xpLmNvbW1hbmQuY29tcGxldGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICBzdWJjb21tYW5kOiAnZ2VuZXJhdGUnLFxuICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX21zOiBEYXRlLm5vdygpIC0gZ2VuZXJhdGVTdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICBmaW5hbF9waGFzZTogJ2RvbmUnLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgZXhpdEdyYWNlZnVsbHkoZmluYWxTdGF0ZS5waGFzZSA9PT0gJ2Vycm9yJyA/IDEgOiAwKTtcbiAgICB9KTtcblxucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdsaXN0JylcbiAgICAuZGVzY3JpcHRpb24oXG4gICAgICAgICdMaXN0IGRhdGFiYXNlcyBpbiB5b3VyIGFjY291bnQgYW5kIHBpY2sgb25lIHRvIG1vbml0b3Igb3IgcmVzdW1lJyxcbiAgICApXG4gICAgLmhlbHBPcHRpb24oJy0taGVscCcsICdkaXNwbGF5IGhlbHAgZm9yIGNvbW1hbmQnKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzdG9yZSA9IGNyZWF0ZUFwcFN0b3JlKFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3V0cHV0SW50cm9zcGVjdGlvbkpzb246IG51bGwsXG4gICAgICAgICAgICAgICAgdXNlSW50cm9zcGVjdGlvbkpzb25QYXRoOiBudWxsLFxuICAgICAgICAgICAgICAgIHN0b3BBZnRlcjogbnVsbCxcbiAgICAgICAgICAgICAgICBhbGxvd0ludHJvc3BlY3Rpb25Kc29uT3ZlcndyaXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBleHBsYW5hdGlvbjogbnVsbCxcbiAgICAgICAgICAgICAgICBzZW5zaXRpdmVNYXNrUGF0aDogbnVsbCxcbiAgICAgICAgICAgICAgICBvdXRwdXRTYW1wbGVzRGlyOiBudWxsLFxuICAgICAgICAgICAgICAgIGFsbG93U2FtcGxlT3ZlcndyaXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBza2lwQW5hbHl6ZTogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGlua0FwcCA9IHJlbmRlcihjcmVhdGVFbGVtZW50KEFwcCwge3N0b3JlfSkpO1xuICAgICAgICBjb25zdCBsaXN0U3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICBydW5MaXN0KHN0b3JlLCBpbmtBcHApO1xuICAgICAgICBhd2FpdCBpbmtBcHAud2FpdFVudGlsRXhpdCgpO1xuICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ2NsaS5jb21tYW5kLmNvbXBsZXRlZCcsXG4gICAgICAgICAgICBzdWJjb21tYW5kOiAnbGlzdCcsXG4gICAgICAgICAgICBkdXJhdGlvbl9tczogRGF0ZS5ub3coKSAtIGxpc3RTdGFydCxcbiAgICAgICAgICAgIGZpbmFsX3BoYXNlOiAnZG9uZScsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBleGl0R3JhY2VmdWxseSgwKTtcbiAgICB9KTtcblxucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdsb2dpbicpXG4gICAgLmRlc2NyaXB0aW9uKCdBdXRoZW50aWNhdGUgdGhlIENMSSB3aXRoIHlvdXIgZGJjdHguaW8gYWNjb3VudCcpXG4gICAgLmhlbHBPcHRpb24oJy0taGVscCcsICdkaXNwbGF5IGhlbHAgZm9yIGNvbW1hbmQnKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBydW5Mb2dpbigpO1xuICAgIH0pO1xuXG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ2xvZ291dCcpXG4gICAgLmRlc2NyaXB0aW9uKCdDbGVhciB0aGUgc3RvcmVkIGF1dGhlbnRpY2F0aW9uIHRva2VuJylcbiAgICAuaGVscE9wdGlvbignLS1oZWxwJywgJ2Rpc3BsYXkgaGVscCBmb3IgY29tbWFuZCcpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhZFRva2VuID0gd2FzQXV0aGVkQXRSdW5TdGFydCgpO1xuICAgICAgICBhd2FpdCBmbHVzaENvbmZpZygpO1xuICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe3R5cGU6ICdjbGkuYXV0aC5sb2dvdXQnLCBoYWRfdG9rZW46IGhhZFRva2VufSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdMb2dnZWQgb3V0IFx1MjAxNCBhdXRoIHRva2VuIGNsZWFyZWQuJyk7XG4gICAgfSk7XG5cbi8vIERldGVybWluZSB3aGljaCBzdXJmYWNlIHRoZSB1c2VyIGludm9rZWQgZnJvbSByYXcgYXJndiBcdTIwMTQgcnVucyBiZWZvcmVcbi8vIENvbW1hbmRlciBwYXJzZXMgKHNvIGBwcm9ncmFtLnBhcnNlYCBlcnJvcnMgc3RpbGwgZ2V0IGF0dHJpYnV0ZWQpLiBUaGVcbi8vIHN1YmNvbW1hbmQgc3RyaW5nIHdlIGVtaXQgbWF0Y2hlcyB0aGUgQ29tbWFuZGVyIGNvbW1hbmQgbmFtZS5cbmNvbnN0IGFyZ3MgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG5jb25zdCBpc0hlbHBBcmcgPSBhcmdzLmluY2x1ZGVzKCctLWhlbHAnKSB8fCBhcmdzWzBdID09PSAnaGVscCc7XG5jb25zdCBpc1ZlcnNpb25BcmcgPSBhcmdzLmluY2x1ZGVzKCctLXZlcnNpb24nKTtcbmNvbnN0IHN1YmNvbW1hbmQ6IHN0cmluZyA9IGlzSGVscEFyZ1xuICAgID8gJ2hlbHAnXG4gICAgOiBpc1ZlcnNpb25BcmdcbiAgICAgID8gJ3ZlcnNpb24nXG4gICAgICA6IGFyZ3NbMF0gPT09ICdsb2dpbidcbiAgICAgICAgPyAnbG9naW4nXG4gICAgICAgIDogYXJnc1swXSA9PT0gJ2xvZ291dCdcbiAgICAgICAgICA/ICdsb2dvdXQnXG4gICAgICAgICAgOiBhcmdzWzBdID09PSAnbGlzdCdcbiAgICAgICAgICAgID8gJ2xpc3QnXG4gICAgICAgICAgICA6ICdnZW5lcmF0ZSc7XG5cbmNvbnN0IGF0dGFjaE9yaWdpbkZvclN1YmNvbW1hbmQ6IFRBdHRhY2hPcmlnaW4gPVxuICAgIHN1YmNvbW1hbmQgPT09ICdoZWxwJyB8fCBzdWJjb21tYW5kID09PSAndmVyc2lvbidcbiAgICAgICAgPyAnaGVscCdcbiAgICAgICAgOiBzdWJjb21tYW5kID09PSAnbG9naW4nXG4gICAgICAgICAgPyAnbG9naW4nXG4gICAgICAgICAgOiBzdWJjb21tYW5kID09PSAnbG9nb3V0J1xuICAgICAgICAgICAgPyAnbG9nb3V0J1xuICAgICAgICAgICAgOiBzdWJjb21tYW5kID09PSAnbGlzdCdcbiAgICAgICAgICAgICAgPyAnbGlzdCdcbiAgICAgICAgICAgICAgOiAnZ2VuZXJhdGUnO1xuXG5zZXRBdHRhY2hPcmlnaW4oYXR0YWNoT3JpZ2luRm9yU3ViY29tbWFuZCk7XG5zZXRTdWJjb21tYW5kKHN1YmNvbW1hbmQpO1xuXG5jb25zdCBidWlsZEludm9rZWRGbGFncyA9ICgpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9PiAoe1xuICAgIGhlbHA6IGlzSGVscEFyZyxcbiAgICBjb25uZWN0aW9uX3N0cmluZzogYXJncy5zb21lKFxuICAgICAgICAoYSkgPT4gIWEuc3RhcnRzV2l0aCgnLScpICYmIGEgIT09ICdnZW5lcmF0ZScgJiYgYSAhPT0gJ2hlbHAnLFxuICAgICksXG4gICAgaG9zdG5hbWU6IGFyZ3MuaW5jbHVkZXMoJy1oJykgfHwgYXJncy5pbmNsdWRlcygnLS1ob3N0bmFtZScpLFxuICAgIHBvcnQ6IGFyZ3MuaW5jbHVkZXMoJy1wJykgfHwgYXJncy5pbmNsdWRlcygnLS1wb3J0JyksXG4gICAgZGF0YWJhc2U6IGFyZ3MuaW5jbHVkZXMoJy1kJykgfHwgYXJncy5pbmNsdWRlcygnLS1kYXRhYmFzZScpLFxuICAgIHVzZXJuYW1lOiBhcmdzLmluY2x1ZGVzKCctVScpIHx8IGFyZ3MuaW5jbHVkZXMoJy0tdXNlcm5hbWUnKSxcbiAgICBzc2w6IFsnLS1zc2xtb2RlJywgJy0tc3NsY2VydCcsICctLXNzbGtleScsICctLXNzbHJvb3RjZXJ0J10uc29tZSgoZikgPT5cbiAgICAgICAgYXJncy5pbmNsdWRlcyhmKSxcbiAgICApLFxuICAgIHNzaDogYXJncy5pbmNsdWRlcygnLS1zc2gnKSB8fCBhcmdzLmluY2x1ZGVzKCctLXNzaC1ob3N0JyksXG4gICAgb3V0cHV0X2ludHJvc3BlY3Rpb25fanNvbjogYXJncy5pbmNsdWRlcygnLS1vdXRwdXQtaW50cm9zcGVjdGlvbi1qc29uJyksXG4gICAgdXNlX2ludHJvc3BlY3Rpb25fanNvbjogYXJncy5pbmNsdWRlcygnLS11c2UtaW50cm9zcGVjdGlvbi1qc29uJyksXG4gICAgc3RvcF9hZnRlcjogYXJncy5pbmNsdWRlcygnLS1zdG9wLWFmdGVyJyksXG4gICAgYWxsb3dfb3ZlcndyaXRlOiBhcmdzLmluY2x1ZGVzKCctLWFsbG93LW92ZXJ3cml0ZScpLFxuICAgIGFsbG93X2ludHJvc3BlY3Rpb25fanNvbl9vdmVyd3JpdGU6IGFyZ3MuaW5jbHVkZXMoXG4gICAgICAgICctLWFsbG93LWludHJvc3BlY3Rpb24tanNvbi1vdmVyd3JpdGUnLFxuICAgICksXG4gICAgZXhwbGFuYXRpb246IGFyZ3MuaW5jbHVkZXMoJy0tZXhwbGFuYXRpb24nKSxcbiAgICBzZW5zaXRpdmVfbWFzazogYXJncy5pbmNsdWRlcygnLS1zZW5zaXRpdmUtbWFzaycpLFxuICAgIG91dHB1dF9zYW1wbGVzOiBhcmdzLmluY2x1ZGVzKCctLW91dHB1dC1zYW1wbGVzJyksXG4gICAgYWxsb3dfc2FtcGxlX292ZXJ3cml0ZTogYXJncy5pbmNsdWRlcygnLS1hbGxvdy1zYW1wbGUtb3ZlcndyaXRlJyksXG4gICAgc2tpcF9hbmFseXplOiBhcmdzLmluY2x1ZGVzKCctLXNraXAtYW5hbHl6ZScpLFxufSk7XG5cbmNvbnN0IGRldGVjdElzQ0kgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgZW52ID0gcHJvY2Vzcy5lbnY7XG4gICAgcmV0dXJuIChcbiAgICAgICAgZW52WydDSSddID09PSAndHJ1ZScgfHxcbiAgICAgICAgZW52WydDSSddID09PSAnMScgfHxcbiAgICAgICAgZW52WydHSVRIVUJfQUNUSU9OUyddID09PSAndHJ1ZScgfHxcbiAgICAgICAgZW52WydHSVRMQUJfQ0knXSA9PT0gJ3RydWUnIHx8XG4gICAgICAgIGVudlsnQ0lSQ0xFQ0knXSA9PT0gJ3RydWUnIHx8XG4gICAgICAgIGVudlsnQlVJTERLSVRFJ10gPT09ICd0cnVlJyB8fFxuICAgICAgICB0eXBlb2YgZW52WydKRU5LSU5TX1VSTCddID09PSAnc3RyaW5nJ1xuICAgICk7XG59O1xuXG4vLyBIZWxwLXBhdGggZGV0ZWN0aW9uOiBmaWd1cmUgb3V0ICp3aGljaCogc3ViY29tbWFuZCB0aGUgdXNlciBhc2tlZCBoZWxwIGZvci5cbi8vIGBkYmN0eCAtLWhlbHBgIFx1MjE5MiAncm9vdCcsIGBkYmN0eCBnZW5lcmF0ZSAtLWhlbHBgIFx1MjE5MiAnZ2VuZXJhdGUnLCBgZGJjdHggaGVscFxuLy8gZ2VuZXJhdGVgIFx1MjE5MiAnZ2VuZXJhdGUnLCBgZGJjdHggaGVscGAgXHUyMTkyICdyb290Jy4gVGhlIGNsaS5oZWxwLnZpZXdlZCBldmVudFxuLy8gdXNlcyB0aGlzIGZvciBoZWxwLWRpc2NvdmVyYWJpbGl0eSBmdW5uZWxzIHNlcGFyYXRlIGZyb20gY2xpLmNvbW1hbmQuaW52b2tlZFxuLy8gKHdoaWNoIGNvbGxhcHNlcyBhbGwgaGVscCB2YXJpYW50cyB1bmRlciBzdWJjb21tYW5kPSdoZWxwJykuXG5jb25zdCBjb21wdXRlSGVscFN1YmNvbW1hbmRQYXRoID0gKCk6IHN0cmluZyA9PiB7XG4gICAgaWYgKGFyZ3NbMF0gPT09ICdoZWxwJykge1xuICAgICAgICByZXR1cm4gYXJnc1sxXSA/PyAncm9vdCc7XG4gICAgfVxuICAgIGlmIChhcmdzLmluY2x1ZGVzKCctLWhlbHAnKSkge1xuICAgICAgICBjb25zdCBjbWQgPSBhcmdzLmZpbmQoXG4gICAgICAgICAgICAoYSwgaSkgPT5cbiAgICAgICAgICAgICAgICBpID09PSAwICYmXG4gICAgICAgICAgICAgICAgIWEuc3RhcnRzV2l0aCgnLScpICYmXG4gICAgICAgICAgICAgICAgYSAhPT0gJ2hlbHAnICYmXG4gICAgICAgICAgICAgICAgYSAhPT0gJy0tdmVyc2lvbicsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBjbWQgPz8gJ3Jvb3QnO1xuICAgIH1cbiAgICByZXR1cm4gJ3Jvb3QnO1xufTtcblxuaWYgKCFpc0RvTm90VHJhY2soKSkge1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZpcmVUZWxlbWV0cnlFdmVudEF3YWl0YWJsZSh7XG4gICAgICAgICAgICB0eXBlOiAnY2xpLmNvbW1hbmQuaW52b2tlZCcsXG4gICAgICAgICAgICBzdWJjb21tYW5kLFxuICAgICAgICAgICAgZmxhZ3M6IGJ1aWxkSW52b2tlZEZsYWdzKCksXG4gICAgICAgICAgICBpc19maXJzdF9ydW46IGlzRmlyc3RSdW4oKSxcbiAgICAgICAgICAgIGlzX2NpOiBkZXRlY3RJc0NJKCksXG4gICAgICAgICAgICBub2RlX3ZlcnNpb246IHByb2Nlc3MudmVyc2lvbixcbiAgICAgICAgICAgIGFyY2g6IHByb2Nlc3MuYXJjaCxcbiAgICAgICAgICAgIGlzX2F1dGhlZDogd2FzQXV0aGVkQXRSdW5TdGFydCgpLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGlzSGVscEFyZykge1xuICAgICAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2xpLmhlbHAudmlld2VkJyxcbiAgICAgICAgICAgICAgICBzdWJjb21tYW5kX3BhdGg6IGNvbXB1dGVIZWxwU3ViY29tbWFuZFBhdGgoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChEQkNUWF9ERVYpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgJHtlcnJ9YCwge2Vycm9yOiBlcnJ9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gQWJhbmRvbm1lbnQ6IHVzZXIgaGl0IEN0cmwtQyAvIGtpbGwgYmVmb3JlIHRoZSBmbG93IHJlYWNoZWQgdGVybWluYWwuXG4vLyBGaXJlIGNsaS5jb21tYW5kLmFiYW5kb25lZCB3aXRoIHdoYXRldmVyIHBoYXNlICsgcGVyY2VudCB0aGUgcnVuLXNjb3BlZFxuLy8gZW1pdHRlciBsYXN0IHNhdywgdGhlbiBleGl0LiBTaG9ydCBmbHVzaCB3aW5kb3cgc28gdGhlIHVzZXIgaXNuJ3Qgd2FpdGluZy5cbmNvbnN0IGFiYW5kb25BbmRFeGl0ID0gKHNpZ25hbDogJ1NJR0lOVCcgfCAnU0lHVEVSTScpOiB2b2lkID0+IHtcbiAgICBjb25zdCBjb2RlID0gc2lnbmFsID09PSAnU0lHSU5UJyA/IDEzMCA6IDE0MztcbiAgICBpZiAoaXNEb05vdFRyYWNrKCkpIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KGNvZGUpO1xuICAgIH1cbiAgICBjb25zdCBzbmFwID0gZ2V0Rmxvd1NuYXBzaG90KCk7XG4gICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ2NsaS5jb21tYW5kLmFiYW5kb25lZCcsXG4gICAgICAgIHN1YmNvbW1hbmQsXG4gICAgICAgIGxhc3RfcGhhc2U6IHNuYXAubGFzdFBoYXNlLFxuICAgICAgICBsYXN0X3BoYXNlX3BlcmNlbnQ6IHNuYXAubGFzdFBoYXNlUGVyY2VudCxcbiAgICAgICAgdG90YWxfZWxhcHNlZF9tczogRGF0ZS5ub3coKSAtIGdldFJ1blN0YXJ0VGltZSgpLFxuICAgICAgICBleGl0X3NpZ25hbDogc2lnbmFsLFxuICAgIH0pO1xuICAgIHZvaWQgZXhpdEdyYWNlZnVsbHkoY29kZSwgMzAwKTtcbn07XG5cbnByb2Nlc3Mub24oJ1NJR0lOVCcsICgpID0+IGFiYW5kb25BbmRFeGl0KCdTSUdJTlQnKSk7XG5wcm9jZXNzLm9uKCdTSUdURVJNJywgKCkgPT4gYWJhbmRvbkFuZEV4aXQoJ1NJR1RFUk0nKSk7XG5cbnByb2dyYW0ucGFyc2UoKTtcbiIsICJpbXBvcnQge1RleHQsIEJveH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcblxuaW50ZXJmYWNlIEVycm9yUHJvcHMge1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVycm9yKHttZXNzYWdlfTogRXJyb3JQcm9wcyk6IFJlYWN0Tm9kZSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwicmVkXCIgYm9sZD5cbiAgICAgICAgICAgICAgICBFcnJvcjoge21lc3NhZ2V9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG4iLCAiaW1wb3J0IHtCb3gsIHVzZUFwcH0gZnJvbSAnaW5rJztcbmltcG9ydCB7dXNlRWZmZWN0LCB0eXBlIFJlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtvYnNlcnZlcn0gZnJvbSAnbW9ieC1yZWFjdC1saXRlJztcbmltcG9ydCB0eXBlIHtUU3RvcmUsIFRTdG9wQWZ0ZXJTdGFnZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB7U1NIfSBmcm9tICcuL2NvbXBvbmVudHMvU1NILmpzJztcbmltcG9ydCB7REJ9IGZyb20gJy4vY29tcG9uZW50cy9EQi5qcyc7XG5pbXBvcnQge0ludHJvc3BlY3R9IGZyb20gJy4vY29tcG9uZW50cy9JbnRyb3NwZWN0LmpzJztcbmltcG9ydCB7QWNjb3VudH0gZnJvbSAnLi9jb21wb25lbnRzL1Nlc3Npb24uanMnO1xuaW1wb3J0IHtPdXRwdXRKc29ufSBmcm9tICcuL2NvbXBvbmVudHMvT3V0cHV0SnNvbi5qcyc7XG5pbXBvcnQge1VzZXJFeHBsYW5hdGlvbn0gZnJvbSAnLi9jb21wb25lbnRzL1VzZXJFeHBsYW5hdGlvbi5qcyc7XG5pbXBvcnQge0dhdGV9IGZyb20gJy4vY29tcG9uZW50cy9HYXRlLmpzJztcbmltcG9ydCB7QmlsbGluZ30gZnJvbSAnLi9jb21wb25lbnRzL0JpbGxpbmcuanMnO1xuaW1wb3J0IHtTYW1wbGluZ30gZnJvbSAnLi9jb21wb25lbnRzL1NhbXBsaW5nLmpzJztcbmltcG9ydCB7SW50cm9zcGVjdGlvblVwbG9hZH0gZnJvbSAnLi9jb21wb25lbnRzL0ludHJvc3BlY3Rpb25VcGxvYWQuanMnO1xuaW1wb3J0IHtTYW1wbGVzVXBsb2FkfSBmcm9tICcuL2NvbXBvbmVudHMvU2FtcGxlc1VwbG9hZC5qcyc7XG5pbXBvcnQge0VucmljaH0gZnJvbSAnLi9jb21wb25lbnRzL0VucmljaC5qcyc7XG5pbXBvcnQge0FuYWx5emV9IGZyb20gJy4vY29tcG9uZW50cy9BbmFseXplLmpzJztcbmltcG9ydCB7U3BsYXNofSBmcm9tICcuL2NvbXBvbmVudHMvU3BsYXNoLmpzJztcbmltcG9ydCB7RGF0YWJhc2VQaWNrZXJ9IGZyb20gJy4vY29tcG9uZW50cy9EYXRhYmFzZVBpY2tlci5qcyc7XG5cbmNvbnN0IFNUQUdFX09SREVSOiByZWFkb25seSBUU3RvcEFmdGVyU3RhZ2VbXSA9IFtcbiAgICAnc3NoLWNvbm5lY3QnLFxuICAgICdkYi1jb25uZWN0JyxcbiAgICAnaW50cm9zcGVjdGlvbicsXG4gICAgJ3NhbXBsaW5nJyxcbl0gYXMgY29uc3Q7XG5cbmNvbnN0IGlzQWZ0ZXJTdG9wUG9pbnQgPSAoXG4gICAgc3RvcEFmdGVyOiBUU3RvcEFmdGVyU3RhZ2UgfCBudWxsLFxuICAgIHN0YWdlOiBUU3RvcEFmdGVyU3RhZ2UsXG4pOiBib29sZWFuID0+XG4gICAgc3RvcEFmdGVyICE9PSBudWxsICYmXG4gICAgU1RBR0VfT1JERVIuaW5kZXhPZihzdGFnZSkgPiBTVEFHRV9PUkRFUi5pbmRleE9mKHN0b3BBZnRlcik7XG5cbnR5cGUgVEFwcFByb3BzID0ge1xuICAgIHN0b3JlOiBUU3RvcmU7XG59O1xuXG5leHBvcnQgY29uc3QgQXBwID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFRBcHBQcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgY29uc3Qge3N0b3BBZnRlcn0gPSBzdG9yZS5vdXRwdXRPcHRpb25zO1xuICAgIGNvbnN0IHtleGl0fSA9IHVzZUFwcCgpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHN0b3JlLmV4aXRSZXF1ZXN0ZWQpIHtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuICAgIH0sIFtzdG9yZS5leGl0UmVxdWVzdGVkLCBleGl0XSk7XG5cbiAgICBpZiAoc3RvcmUubW9kZSA9PT0gJ2xpc3QtcGlja2luZycpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHBhZGRpbmc9ezF9PlxuICAgICAgICAgICAgICAgIDxTcGxhc2ggLz5cbiAgICAgICAgICAgICAgICA8QWNjb3VudCBzdG9yZT17c3RvcmV9IC8+XG4gICAgICAgICAgICAgICAgPERhdGFiYXNlUGlja2VyIHN0b3JlPXtzdG9yZX0gLz5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHBhZGRpbmc9ezF9PlxuICAgICAgICAgICAgPFNwbGFzaCAvPlxuICAgICAgICAgICAgPFNTSCBzdG9yZT17c3RvcmV9IC8+XG4gICAgICAgICAgICB7IWlzQWZ0ZXJTdG9wUG9pbnQoc3RvcEFmdGVyLCAnZGItY29ubmVjdCcpICYmIDxEQiBzdG9yZT17c3RvcmV9IC8+fVxuICAgICAgICAgICAgeyFpc0FmdGVyU3RvcFBvaW50KHN0b3BBZnRlciwgJ2ludHJvc3BlY3Rpb24nKSAmJiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPEludHJvc3BlY3Qgc3RvcmU9e3N0b3JlfSAvPlxuICAgICAgICAgICAgICAgICAgICA8T3V0cHV0SnNvbiBzdG9yZT17c3RvcmV9IC8+XG4gICAgICAgICAgICAgICAgICAgIHshaXNBZnRlclN0b3BQb2ludChzdG9wQWZ0ZXIsICdzYW1wbGluZycpICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0b3BBZnRlciA9PT0gbnVsbCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWNjb3VudCBzdG9yZT17c3RvcmV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QmlsbGluZyBzdG9yZT17c3RvcmV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8R2F0ZSBzdG9yZT17c3RvcmV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFVzZXJFeHBsYW5hdGlvbiBzdG9yZT17c3RvcmV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0b3BBZnRlciA9PT0gbnVsbCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnRyb3NwZWN0aW9uVXBsb2FkIHN0b3JlPXtzdG9yZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdG9wQWZ0ZXIgPT09IG51bGwgJiYgPEVucmljaCBzdG9yZT17c3RvcmV9IC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTYW1wbGluZyBzdG9yZT17c3RvcmV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0b3BBZnRlciA9PT0gbnVsbCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTYW1wbGVzVXBsb2FkIHN0b3JlPXtzdG9yZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdG9wQWZ0ZXIgPT09IG51bGwgJiYgPEFuYWx5emUgc3RvcmU9e3N0b3JlfSAvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn0pO1xuIiwgImltcG9ydCB7Qm94LCBUZXh0fSBmcm9tICdpbmsnO1xuaW1wb3J0IHR5cGUge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtvYnNlcnZlcn0gZnJvbSAnbW9ieC1yZWFjdC1saXRlJztcbmltcG9ydCB7cnVuSW5BY3Rpb259IGZyb20gJ21vYngnO1xuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vLi4vc3RvcmUubWpzJztcbmltcG9ydCB7U3Bpbm5lcn0gZnJvbSAnLi9TcGlubmVyLmpzJztcbmltcG9ydCB7UGFzc3dvcmRJbnB1dH0gZnJvbSAnLi9QYXNzd29yZElucHV0LmpzJztcblxudHlwZSBUU1NIUHJvcHMgPSB7XG4gICAgc3RvcmU6IFRTdG9yZTtcbn07XG5cbmV4cG9ydCBjb25zdCBTU0ggPSBvYnNlcnZlcigoe3N0b3JlfTogVFNTSFByb3BzKTogUmVhY3ROb2RlID0+IHtcbiAgICBjb25zdCBzc2ggPSBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uO1xuXG4gICAgaWYgKCFzc2guZW5hYmxlZCB8fCBzc2guc3RhdGUgPT09ICdpZGxlJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwb3J0U3VmZml4ID0gc3NoLnBpY2tlZFBvcnQgPT09IDIyID8gJycgOiBgOiR7c3NoLnBpY2tlZFBvcnR9YDtcbiAgICBjb25zdCB0YXJnZXQgPSBgJHtzc2gucGlja2VkVXNlcm5hbWV9QCR7c3NoLnBpY2tlZEhvc3RuYW1lfSR7cG9ydFN1ZmZpeH1gO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveD5cbiAgICAgICAgICAgIHtzc2guc3RhdGUgPT09ICdjb25uZWN0aW5nJyA/IChcbiAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgKSA6IHNzaC5zdGF0ZSA9PT0gJ2Nvbm5lY3RlZCcgPyAoXG4gICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JlZW5cIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApIDogc3NoLnN0YXRlID09PSAnbmVlZC1wYXNzd29yZCcgPyAoXG4gICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JheVwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwicmVkXCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPFRleHQgYm9sZD5TU0g6IDwvVGV4dD5cblxuICAgICAgICAgICAge3NzaC5zdGF0ZSA9PT0gJ2Nvbm5lY3RpbmcnID8gKFxuICAgICAgICAgICAgICAgIDxUZXh0PmNvbm5lY3RpbmcgdG8ge3RhcmdldH08L1RleHQ+XG4gICAgICAgICAgICApIDogc3NoLnN0YXRlID09PSAnbmVlZC1wYXNzd29yZCcgPyAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge3NzaC53cm9uZ0F0dGVtcHQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzc2gucGFzc3dvcmRQcm9tcHRUeXBlID09PSAncGFzc3BocmFzZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnV3JvbmcgcGFzc3BocmFzZS4gJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdXcm9uZyBwYXNzd29yZC4gJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIHtzc2gucGFzc3dvcmRQcm9tcHRUeXBlID09PSAncGFzc3BocmFzZScgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRlciBwYXNzcGhyYXNlIGZvciBrZXl7JyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiY3lhblwiPntzc2gucGlja2VkS2V5UGF0aH08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyc6ICd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRlciBwYXNzd29yZCBmb3J7JyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiY3lhblwiPnt0YXJnZXR9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnOiAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8UGFzc3dvcmRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgb25TdWJtaXQ9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5wYXNzd29yZCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17c3NoLnByb21wdENvdW50fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKSA6IHNzaC5zdGF0ZSA9PT0gJ2Nvbm5lY3RlZCcgPyAoXG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmVlblwiPmNvbm5lY3RlZCB0byB7dGFyZ2V0fTwvVGV4dD5cbiAgICAgICAgICAgICkgOiBzc2guc3RhdGUgPT09ICdlcnJvcicgPyAoXG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgRXJyb3I6IHtzc2guZXJyb3J9IFx1MjAxNCB7dGFyZ2V0fVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj5jbG9zZWQ8L1RleHQ+XG4gICAgICAgICAgICApfVxuICAgICAgICA8L0JveD5cbiAgICApO1xufSk7XG4iLCAiaW1wb3J0IHtCb3gsIFRleHR9IGZyb20gJ2luayc7XG5pbXBvcnQgdHlwZSB7UmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZVN0YXRlLCB1c2VFZmZlY3R9IGZyb20gJ3JlYWN0JztcblxuY29uc3QgZ2V0RGVmYXVsdENoYXJhY3RlcnMgPSAoKTogcmVhZG9ubHkgc3RyaW5nW10gPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5URVJNID09PSAneHRlcm0tZ2hvc3R0eScpIHtcbiAgICAgICAgcmV0dXJuIFsnXHUwMEI3JywgJ1x1MjcyMicsICdcdTI3MzMnLCAnXHUyNzM2JywgJ1x1MjczQicsICcqJ10gYXMgY29uc3Q7XG4gICAgfVxuICAgIHJldHVybiBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJ1xuICAgICAgICA/IChbJ1x1MDBCNycsICdcdTI3MjInLCAnXHUyNzMzJywgJ1x1MjczNicsICdcdTI3M0InLCAnXHUyNzNEJ10gYXMgY29uc3QpXG4gICAgICAgIDogKFsnXHUwMEI3JywgJ1x1MjcyMicsICcqJywgJ1x1MjczNicsICdcdTI3M0InLCAnXHUyNzNEJ10gYXMgY29uc3QpO1xufTtcblxuY29uc3QgREVGQVVMVF9DSEFSQUNURVJTID0gZ2V0RGVmYXVsdENoYXJhY3RlcnMoKTtcbmNvbnN0IFNQSU5ORVJfRlJBTUVTID0gT2JqZWN0LmZyZWV6ZShbXG4gICAgLi4uREVGQVVMVF9DSEFSQUNURVJTLFxuICAgIC4uLlsuLi5ERUZBVUxUX0NIQVJBQ1RFUlNdLnJldmVyc2UoKSxcbl0pO1xuXG5jb25zdCBTUElOTkVSX0lOVEVSVkFMID0gMTIwO1xuXG5leHBvcnQgY29uc3QgU3Bpbm5lciA9ICgpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IFtmcmFtZSwgc2V0RnJhbWVdID0gdXNlU3RhdGUoMCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHNldEZyYW1lKChwcmV2KSA9PiAocHJldiArIDEpICUgU1BJTk5FUl9GUkFNRVMubGVuZ3RoKTtcbiAgICAgICAgfSwgU1BJTk5FUl9JTlRFUlZBTCk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggaGVpZ2h0PXsxfSB3aWR0aD17Mn0+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj1cImN5YW5cIj57U1BJTk5FUl9GUkFNRVNbZnJhbWVdfTwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn07XG4iLCAiaW1wb3J0IHtUZXh0LCB1c2VJbnB1dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlU3RhdGUsIHVzZUVmZmVjdH0gZnJvbSAncmVhY3QnO1xuXG5jb25zdCBDVVJTT1JfSU5URVJWQUwgPSA1MDA7XG5cbnR5cGUgVFBhc3N3b3JkSW5wdXRQcm9wcyA9IHtcbiAgICByZWFkb25seSBvblN1Ym1pdDogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgY29uc3QgUGFzc3dvcmRJbnB1dCA9ICh7b25TdWJtaXR9OiBUUGFzc3dvcmRJbnB1dFByb3BzKTogUmVhY3ROb2RlID0+IHtcbiAgICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbY3Vyc29yVmlzaWJsZSwgc2V0Q3Vyc29yVmlzaWJsZV0gPSB1c2VTdGF0ZSh0cnVlKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgc2V0Q3Vyc29yVmlzaWJsZSgocHJldikgPT4gIXByZXYpO1xuICAgICAgICB9LCBDVVJTT1JfSU5URVJWQUwpO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG5cbiAgICB1c2VJbnB1dCgoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5LnJldHVybikge1xuICAgICAgICAgICAgb25TdWJtaXQodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleS5iYWNrc3BhY2UgfHwga2V5LmRlbGV0ZSkge1xuICAgICAgICAgICAgc2V0VmFsdWUoKHByZXYpID0+IHByZXYuc2xpY2UoMCwgLTEpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkuY3RybCB8fCBrZXkubWV0YSB8fCBrZXkuZXNjYXBlIHx8IGtleS50YWIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFZhbHVlKChwcmV2KSA9PiBwcmV2ICsgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICB7JyonLnJlcGVhdCh2YWx1ZS5sZW5ndGgpfVxuICAgICAgICAgICAge2N1cnNvclZpc2libGUgPyAnXHUyNTg4JyA6ICcgJ31cbiAgICAgICAgPC9UZXh0PlxuICAgICk7XG59O1xuIiwgImltcG9ydCB7Qm94LCBUZXh0fSBmcm9tICdpbmsnO1xuaW1wb3J0IHR5cGUge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtvYnNlcnZlcn0gZnJvbSAnbW9ieC1yZWFjdC1saXRlJztcbmltcG9ydCB7cnVuSW5BY3Rpb259IGZyb20gJ21vYngnO1xuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vLi4vc3RvcmUubWpzJztcbmltcG9ydCB7U3Bpbm5lcn0gZnJvbSAnLi9TcGlubmVyLmpzJztcbmltcG9ydCB7UGFzc3dvcmRJbnB1dH0gZnJvbSAnLi9QYXNzd29yZElucHV0LmpzJztcblxudHlwZSBUREJQcm9wcyA9IHtcbiAgICByZWFkb25seSBzdG9yZTogVFN0b3JlO1xufTtcblxuZXhwb3J0IGNvbnN0IERCID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFREQlByb3BzKTogUmVhY3ROb2RlID0+IHtcbiAgICBjb25zdCBkYiA9IHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbjtcblxuICAgIGlmIChkYi5zdGF0ZSA9PT0gJ2lkbGUnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBvcnRTdWZmaXggPSBkYi5waWNrZWRQb3J0ID09PSA1NDMyID8gJycgOiBgOiR7ZGIucGlja2VkUG9ydH1gO1xuICAgIGNvbnN0IHRhcmdldCA9IGAke2RiLnBpY2tlZERhdGFiYXNlfUAke2RiLnBpY2tlZEhvc3RuYW1lfSR7cG9ydFN1ZmZpeH1gO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveD5cbiAgICAgICAgICAgIHtkYi5zdGF0ZSA9PT0gJ2Nvbm5lY3RpbmcnID8gKFxuICAgICAgICAgICAgICAgIDxTcGlubmVyIC8+XG4gICAgICAgICAgICApIDogZGIuc3RhdGUgPT09ICdjb25uZWN0ZWQnID8gKFxuICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKSA6IGRiLnN0YXRlID09PSAnbmVlZC1wYXNzd29yZCcgPyAoXG4gICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JheVwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwicmVkXCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPFRleHQgYm9sZD5EQjogPC9UZXh0PlxuXG4gICAgICAgICAgICB7ZGIuc3RhdGUgPT09ICdjb25uZWN0aW5nJyA/IChcbiAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgY29ubmVjdGluZyB0byB7dGFyZ2V0fSBhc3snICd9XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiY3lhblwiPntkYi5waWNrZWRVc2VybmFtZX08L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKSA6IGRiLnN0YXRlID09PSAnbmVlZC1wYXNzd29yZCcgPyAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2RiLndyb25nQXR0ZW1wdCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwicmVkXCI+V3JvbmcgcGFzc3dvcmQuIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgRW50ZXIgcGFzc3dvcmQgZm9yeycgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiY3lhblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkYi5waWNrZWRVc2VybmFtZX1Ae2RiLnBpY2tlZEhvc3RuYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwb3J0U3VmZml4fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgeyc6ICd9XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFBhc3N3b3JkSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uU3VibWl0PXsodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5wYXNzd29yZCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17ZGIucHJvbXB0Q291bnR9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogZGIuc3RhdGUgPT09ICdjb25uZWN0ZWQnID8gKFxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkIHRvIHt0YXJnZXR9XG4gICAgICAgICAgICAgICAgICAgIHtkYi5wb3N0Z3Jlc1ZlcnNpb25cbiAgICAgICAgICAgICAgICAgICAgICAgID8gYCAoUG9zdGdyZVNRTCAke2RiLnBvc3RncmVzVmVyc2lvbn0pYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ31cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwicmVkXCI+XG4gICAgICAgICAgICAgICAgICAgIEVycm9yOiB7ZGIuZXJyb3J9XG4gICAgICAgICAgICAgICAgICAgIHtkYi5waWNrZWRIb3N0bmFtZSAhPT0gbnVsbCA/IGAgXHUyMDE0ICR7dGFyZ2V0fWAgOiAnJ31cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICApfVxuICAgICAgICA8L0JveD5cbiAgICApO1xufSk7XG4iLCAiaW1wb3J0IHtCb3gsIFRleHR9IGZyb20gJ2luayc7XG5pbXBvcnQgdHlwZSB7UmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZVN0YXRlLCB1c2VFZmZlY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7b2JzZXJ2ZXJ9IGZyb20gJ21vYngtcmVhY3QtbGl0ZSc7XG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi8uLi9zdG9yZS5tanMnO1xuaW1wb3J0IHtTcGlubmVyfSBmcm9tICcuL1NwaW5uZXIuanMnO1xuXG5jb25zdCBQSEFTRV9URVhUUyA9IFtcbiAgICAnZmV0Y2hpbmcgdGFibGVzIC8gdmlld3MnLFxuICAgICdhbmFseXppbmcgdGFibGVzJyxcbiAgICAnZmV0Y2hpbmcgY29sdW1ucycsXG4gICAgJ2ZldGNoaW5nIGluZGV4ZXMnLFxuICAgICdmZXRjaGluZyBmb3JlaWduIGtleSByZWZlcmVuY2VzJyxcbiAgICAnZmV0Y2hpbmcgc3RhdGlzdGljcycsXG4gICAgJ2ZldGNoaW5nIGVudW1zJyxcbl0gYXMgY29uc3Q7XG5cbmNvbnN0IFBIQVNFX0lOVEVSVkFMID0gMTUwMDtcblxudHlwZSBUSW50cm9zcGVjdFByb3BzID0ge1xuICAgIHJlYWRvbmx5IHN0b3JlOiBUU3RvcmU7XG59O1xuXG5jb25zdCBDb3VudHNMaW5lID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFRJbnRyb3NwZWN0UHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IHtjb3VudHN9ID0gc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbjtcbiAgICBjb25zdCBwYXJ0cyA9IFtcbiAgICAgICAgY291bnRzLnRhYmxlcyA+IDAgPyBgJHtjb3VudHMudGFibGVzfSB0YWJsZXNgIDogbnVsbCxcbiAgICAgICAgY291bnRzLnZpZXdzID4gMCA/IGAke2NvdW50cy52aWV3c30gdmlld3NgIDogbnVsbCxcbiAgICAgICAgY291bnRzLmFuYWx5emVkID4gMCA/IGAke2NvdW50cy5hbmFseXplZH0gYW5hbHl6ZWRgIDogbnVsbCxcbiAgICAgICAgY291bnRzLmNvbHVtbnMgPiAwID8gYCR7Y291bnRzLmNvbHVtbnN9IGNvbHVtbnNgIDogbnVsbCxcbiAgICAgICAgY291bnRzLmluZGV4ZXMgPiAwID8gYCR7Y291bnRzLmluZGV4ZXN9IGluZGV4ZXNgIDogbnVsbCxcbiAgICAgICAgY291bnRzLmZvcmVpZ25LZXlzID4gMCA/IGAke2NvdW50cy5mb3JlaWduS2V5c30gZmsgcmVmc2AgOiBudWxsLFxuICAgICAgICBjb3VudHMuZW51bXMgPiAwID8gYCR7Y291bnRzLmVudW1zfSBlbnVtc2AgOiBudWxsLFxuICAgIF0uZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94PlxuICAgICAgICAgICAgPFRleHQ+eycgICd9PC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmF5XCI+e3BhcnRzLmpvaW4oJyBcdTAwQjcgJyl9PC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufSk7XG5cbmV4cG9ydCBjb25zdCBJbnRyb3NwZWN0ID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFRJbnRyb3NwZWN0UHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IGludHJvID0gc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbjtcbiAgICBjb25zdCBbcGhhc2UsIHNldFBoYXNlXSA9IHVzZVN0YXRlKDApO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGludHJvLnN0YXRlICE9PSAnZmV0Y2hpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwaGFzZUlkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgc2V0UGhhc2UoKHByZXYpID0+IChwcmV2ICsgMSkgJSBQSEFTRV9URVhUUy5sZW5ndGgpO1xuICAgICAgICB9LCBQSEFTRV9JTlRFUlZBTCk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwocGhhc2VJZCk7XG4gICAgICAgIH07XG4gICAgfSwgW2ludHJvLnN0YXRlXSk7XG5cbiAgICBpZiAoaW50cm8uc3RhdGUgPT09ICdpZGxlJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaW50cm8uc3RhdGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPkVycm9yOiB7aW50cm8uZXJyb3J9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGludHJvLnN0YXRlID09PSAnZG9uZScpIHtcbiAgICAgICAgY29uc3Qge2NvdW50c30gPSBpbnRybztcbiAgICAgICAgY29uc3QgcGFydHMgPSBbXG4gICAgICAgICAgICBjb3VudHMudGFibGVzID4gMCA/IGAke2NvdW50cy50YWJsZXN9IHRhYmxlc2AgOiBudWxsLFxuICAgICAgICAgICAgY291bnRzLnZpZXdzID4gMCA/IGAke2NvdW50cy52aWV3c30gdmlld3NgIDogbnVsbCxcbiAgICAgICAgICAgIGNvdW50cy5jb2x1bW5zID4gMCA/IGAke2NvdW50cy5jb2x1bW5zfSBjb2x1bW5zYCA6IG51bGwsXG4gICAgICAgICAgICBjb3VudHMuaW5kZXhlcyA+IDAgPyBgJHtjb3VudHMuaW5kZXhlc30gaW5kZXhlc2AgOiBudWxsLFxuICAgICAgICAgICAgY291bnRzLmZvcmVpZ25LZXlzID4gMCA/IGAke2NvdW50cy5mb3JlaWduS2V5c30gZmsgcmVmc2AgOiBudWxsLFxuICAgICAgICAgICAgY291bnRzLmVudW1zID4gMCA/IGAke2NvdW50cy5lbnVtc30gZW51bXNgIDogbnVsbCxcbiAgICAgICAgXS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JlZW5cIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+SU5UUk9TUEVDVElPTjogPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+aW50cm9zcGVjdGVkIHtwYXJ0cy5qb2luKCcgXHUwMEI3ICcpfTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICB7aW50cm8uZmlsZVN0YXRzU2tpcHBlZCA/IChcbiAgICAgICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0PnsnICAnfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JheVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgc3RhdHMgc2tpcHBlZCAoaW5zdWZmaWNpZW50IHByaXZpbGVnZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxTcGlubmVyIC8+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD5JTlRST1NQRUNUSU9OOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+e1BIQVNFX1RFWFRTW3BoYXNlXX0uLi48L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxDb3VudHNMaW5lIHN0b3JlPXtzdG9yZX0gLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn0pO1xuIiwgImltcG9ydCB7Qm94LCBUZXh0LCB1c2VJbnB1dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlU3RhdGUsIHVzZUVmZmVjdH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtvYnNlcnZlcn0gZnJvbSAnbW9ieC1yZWFjdC1saXRlJztcbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uLy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQge29wZW5TZXNzaW9uVVJMLCBzaG91bGRPcGVuQnJvd3Nlcn0gZnJvbSAnLi4vLi4vYXBwL29wZW4tdXJsLm1qcyc7XG5pbXBvcnQge1NwaW5uZXJ9IGZyb20gJy4vU3Bpbm5lci5qcyc7XG5cbnR5cGUgVFNlc3Npb25Qcm9wcyA9IHtcbiAgICByZWFkb25seSBzdG9yZTogVFN0b3JlO1xufTtcblxuY29uc3QgdGVybWluYWxMaW5rID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IGAke3VybH1gO1xuXG5jb25zdCBjYW5PcGVuID0gc2hvdWxkT3BlbkJyb3dzZXIoKTtcblxuZXhwb3J0IGNvbnN0IEFjY291bnQgPSBvYnNlcnZlcigoe3N0b3JlfTogVFNlc3Npb25Qcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgY29uc3QgYWNjb3VudCA9IHN0b3JlLnN0ZXBzLmFjY291bnQ7XG4gICAgY29uc3QgW2RvdFZpc2libGUsIHNldERvdFZpc2libGVdID0gdXNlU3RhdGUodHJ1ZSk7XG4gICAgY29uc3QgW29wZW5lZCwgc2V0T3BlbmVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChhY2NvdW50LnN0YXRlICE9PSAnd2FpdGluZycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgc2V0RG90VmlzaWJsZSgocHJldikgPT4gIXByZXYpO1xuICAgICAgICB9LCA3NTApO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfTtcbiAgICB9LCBbYWNjb3VudC5zdGF0ZV0pO1xuXG4gICAgdXNlSW5wdXQoXG4gICAgICAgIChfaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleS5yZXR1cm4gJiYgYWNjb3VudC51cmwpIHtcbiAgICAgICAgICAgICAgICBzZXRPcGVuZWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgb3BlblNlc3Npb25VUkwoYWNjb3VudC51cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7aXNBY3RpdmU6IGFjY291bnQuc3RhdGUgPT09ICd3YWl0aW5nJyAmJiBjYW5PcGVufSxcbiAgICApO1xuXG4gICAgaWYgKGFjY291bnQuc3RhdGUgPT09ICdpZGxlJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoYWNjb3VudC5zdGF0ZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+QUNDT1VOVDogPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwicmVkXCI+e2FjY291bnQuZXJyb3J9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFjY291bnQuc3RhdGUgPT09ICdjb25uZWN0ZWQnKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JlZW5cIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkFDQ09VTlQ6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD5jb25uZWN0ZWQgdG8gYWNjb3VudCA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD57YWNjb3VudC5lbWFpbH08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYWNjb3VudC5zdGF0ZSA9PT0gJ2ZldGNoaW5nLWFjY291bnQnKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxTcGlubmVyIC8+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD5BQ0NPVU5UOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+Y29ubmVjdGluZy4uLjwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChhY2NvdW50LnN0YXRlID09PSAnd2FpdGluZycpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JheVwiPntkb3RWaXNpYmxlID8gJ1x1MjVDRicgOiAnICd9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkFDQ09VTlQ8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgPEJveFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJTdHlsZT1cInNpbmdsZVwiXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmdYPXsyfVxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nWT17MX1cbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdD17MX1cbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyRGltQ29sb3JcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezkyfVxuICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+TG9naW4gdG8geW91ciBkYmN0eC5pbyBhY2NvdW50eydcXG4nfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9eydjeWFuJ30+e3Rlcm1pbmFsTGluayhhY2NvdW50LnVybCEpfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAge2Nhbk9wZW4gPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVzcyBFbnRlciB0byB7b3BlbmVkID8gJ3JlLW9wZW4nIDogJ29wZW4nfSBpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PnsnXFxuXFxuJ308L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+V2FpdGluZyBmb3IgbG9naW4gLi4uPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgPFRleHQgYm9sZD5BQ0NPVU5UOiA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD5jcmVhdGluZy4uLjwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn0pO1xuIiwgImltcG9ydCB7ZW52fSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB7REJDVFhfREVWfSBmcm9tICcuLi9saWIvZW52Lm1qcyc7XG5cbmNvbnN0IFNLSVBfVkFMVUVTID0gbmV3IFNldChbJ25vbmUnLCAnZmFsc2UnLCAnMCddKTtcblxuY29uc3QgaXNEb2NrZXIgPSAoKTogYm9vbGVhbiA9PlxuICAgICEhKGVudi5ET0NLRVIgfHwgZW52LmNvbnRhaW5lciB8fCBlbnYuRE9DS0VSX0NPTlRBSU5FUik7XG5cbmV4cG9ydCBjb25zdCBzaG91bGRPcGVuQnJvd3NlciA9ICgpOiBib29sZWFuID0+IHtcbiAgICBpZiAoaXNEb2NrZXIoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3NlciA9IGVudi5CUk9XU0VSPy50b0xvd2VyQ2FzZSgpO1xuXG4gICAgcmV0dXJuICFicm93c2VyIHx8ICFTS0lQX1ZBTFVFUy5oYXMoYnJvd3Nlcik7XG59O1xuXG5jb25zdCBTRVNTSU9OX0JBU0VfVVJMID0gIURCQ1RYX0RFVlxuICAgID8gJ2h0dHBzOi8vZGJjdHguaW8vYXV0aG9yaXplL3Nlc3Npb24nXG4gICAgOiAnaHR0cDovL2xvY2FsaG9zdDoxMjAwMi9hdXRob3JpemUvc2Vzc2lvbic7XG5cbmNvbnN0IENPTk5FQ1RfQkFTRV9VUkwgPSAhREJDVFhfREVWXG4gICAgPyAnaHR0cHM6Ly9kYmN0eC5pby9jb25uZWN0J1xuICAgIDogJ2h0dHA6Ly9sb2NhbGhvc3Q6MTIwMDIvY29ubmVjdCc7XG5cbmV4cG9ydCBjb25zdCBidWlsZFNlc3Npb25VUkwgPSAoc2Vzc2lvbklkOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgICBgJHtTRVNTSU9OX0JBU0VfVVJMfT9zZXNzaW9uLWlkPSR7c2Vzc2lvbklkfWA7XG5cbmV4cG9ydCBjb25zdCBidWlsZENvbm5lY3RVUkwgPSAobG9naW5JZDogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgYCR7Q09OTkVDVF9CQVNFX1VSTH0/bG9naW4taWQ9JHtsb2dpbklkfWA7XG5cbmV4cG9ydCBjb25zdCBvcGVuVVJMID0gYXN5bmMgKHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgaWYgKCFzaG91bGRPcGVuQnJvd3NlcigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICBjb25zdCB7ZGVmYXVsdDogb3Blbn0gPSBhd2FpdCBpbXBvcnQoJ29wZW4nKTtcbiAgICAgICAgYXdhaXQgb3Blbih1cmwpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBCcm93c2VyIG9wZW5pbmcgaXMgYmVzdC1lZmZvcnQgXHUyMDE0IG5vLW9wIG9uIGZhaWx1cmVcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3Qgb3BlblNlc3Npb25VUkwgPSBvcGVuVVJMO1xuIiwgImV4cG9ydCBjb25zdCBEQkNUWF9ERVYgPVxuICAgIHByb2Nlc3MuZW52WydEQkNUWF9ERVYnXSA9PT0gJzEnIHx8XG4gICAgcHJvY2Vzcy5lbnZbJ0RCQ1RYX0RFViddID09PSAndHJ1ZScgfHxcbiAgICBwcm9jZXNzLmVudlsnREJDVFhfREVWJ10gPT09ICdUUlVFJztcbiIsICJpbXBvcnQge0JveCwgVGV4dCwgdXNlSW5wdXR9IGZyb20gJ2luayc7XG5pbXBvcnQgdHlwZSB7UmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge29ic2VydmVyfSBmcm9tICdtb2J4LXJlYWN0LWxpdGUnO1xuaW1wb3J0IHtydW5JbkFjdGlvbn0gZnJvbSAnbW9ieCc7XG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi8uLi9zdG9yZS5tanMnO1xuaW1wb3J0IHtTcGlubmVyfSBmcm9tICcuL1NwaW5uZXIuanMnO1xuXG50eXBlIFRPdXRwdXRKc29uUHJvcHMgPSB7XG4gICAgc3RvcmU6IFRTdG9yZTtcbn07XG5cbmV4cG9ydCBjb25zdCBPdXRwdXRKc29uID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFRPdXRwdXRKc29uUHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IG91dHB1dEpzb24gPSBzdG9yZS5zdGVwcy5vdXRwdXRKc29uO1xuXG4gICAgdXNlSW5wdXQoXG4gICAgICAgIChfaW5wdXQsIF9rZXkpID0+IHtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5vdXRwdXRKc29uLmNvbmZpcm1lZCA9IF9pbnB1dC50b0xvd2VyQ2FzZSgpID09PSAneSc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAge2lzQWN0aXZlOiBvdXRwdXRKc29uLnN0YXRlID09PSAncHJvbXB0aW5nLW92ZXJ3cml0ZSd9LFxuICAgICk7XG5cbiAgICBpZiAob3V0cHV0SnNvbi5zdGF0ZSA9PT0gJ2lkbGUnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICB7b3V0cHV0SnNvbi5zdGF0ZSA9PT0gJ3dyaXRpbmcnID8gKFxuICAgICAgICAgICAgICAgIDxTcGlubmVyIC8+XG4gICAgICAgICAgICApIDogb3V0cHV0SnNvbi5zdGF0ZSA9PT0gJ2RvbmUnID8gKFxuICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKSA6IG91dHB1dEpzb24uc3RhdGUgPT09ICdlcnJvcicgPyAoXG4gICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwicmVkXCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXsyfT5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJ5ZWxsb3dcIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICA8VGV4dCBib2xkPklOVFJPU1BFQ1RJT04gT1VUUFVUOiA8L1RleHQ+XG5cbiAgICAgICAgICAgIHtvdXRwdXRKc29uLnN0YXRlID09PSAncHJvbXB0aW5nLW92ZXJ3cml0ZScgPyAoXG4gICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgIEZpbGUgPFRleHQgY29sb3I9XCJjeWFuXCI+e291dHB1dEpzb24ucGF0aH08L1RleHQ+IGFscmVhZHlcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RzLiBPdmVyd3JpdGU/IFt5L05deycgJ31cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICApIDogb3V0cHV0SnNvbi5zdGF0ZSA9PT0gJ3dyaXRpbmcnID8gKFxuICAgICAgICAgICAgICAgIDxUZXh0PndyaXRpbmcgaW50cm9zcGVjdGlvbiBKU09OPC9UZXh0PlxuICAgICAgICAgICAgKSA6IG91dHB1dEpzb24uc3RhdGUgPT09ICdkb25lJyA/IChcbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgIHdyaXR0ZW4gdG8gPFRleHQgY29sb3I9XCJjeWFuXCI+e291dHB1dEpzb24ucGF0aH08L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKSA6IG91dHB1dEpzb24uc3RhdGUgPT09ICdlcnJvcicgPyAoXG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj5FcnJvcjoge291dHB1dEpzb24uZXJyb3J9PC9UZXh0PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59KTtcbiIsICJpbXBvcnQge0JveCwgVGV4dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7b2JzZXJ2ZXJ9IGZyb20gJ21vYngtcmVhY3QtbGl0ZSc7XG5pbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uLy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQge1RleHRJbnB1dH0gZnJvbSAnLi9UZXh0SW5wdXQuanMnO1xuXG50eXBlIFRVc2VyRXhwbGFuYXRpb25Qcm9wcyA9IHtcbiAgICByZWFkb25seSBzdG9yZTogVFN0b3JlO1xufTtcblxuY29uc3QgVFJVTkNBVEVfTEVOR1RIID0gODA7XG5cbmNvbnN0IHRydW5jYXRlID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgIHRleHQubGVuZ3RoID4gVFJVTkNBVEVfTEVOR1RIXG4gICAgICAgID8gYCR7dGV4dC5zbGljZSgwLCBUUlVOQ0FURV9MRU5HVEgpfS4uLmBcbiAgICAgICAgOiB0ZXh0O1xuXG5leHBvcnQgY29uc3QgVXNlckV4cGxhbmF0aW9uID0gb2JzZXJ2ZXIoXG4gICAgKHtzdG9yZX06IFRVc2VyRXhwbGFuYXRpb25Qcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBzdG9yZS5zdGVwcy51c2VyRXhwbGFuYXRpb247XG5cbiAgICAgICAgaWYgKHN0ZXAuc3RhdGUgPT09ICdpZGxlJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RlcC5zdGF0ZSA9PT0gJ2RvbmUnKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmVlblwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkVYUExBTkFUSU9OOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57dHJ1bmNhdGUoc3RlcC52YWx1ZSA/PyAnJyl9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoYW5kbGVTdWJtaXQgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICh0cmltbWVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy51c2VyRXhwbGFuYXRpb24udmFsdWUgPSB0cmltbWVkO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnVzZXJFeHBsYW5hdGlvbi5zdGF0ZSA9ICdkb25lJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInllbGxvd1wiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgYm9sZD5FWFBMQU5BVElPTjogPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dD5EZXNjcmliZSB0aGlzIGRhdGFiYXNlPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgIDxCb3ggcGFkZGluZ0xlZnQ9ezJ9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17OTZ9IGZsZXhEaXJlY3Rpb249eydjb2x1bW4nfSBwYWRkaW5nVG9wPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbnRpb24gd2hhdCBraW5kIG9mIERCIGl0IGlzLCB3aGljaCBhcHAgaXQncyBmb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hhdCB0aGUgYnVzaW5lc3MgaXMsIGlmIGl0J3Mgc3RhbmRhbG9uZSBvciBwYXJ0IG9mXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBsYXJnZXIgZWNvc3lzdGVtLCBhbmQgd2hhdCB0aGUgYXBwIGRvZXMgKEN0cmwrSlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBuZXcgbGluZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtzdGVwLnN0YXRlID09PSAncHJvbXB0aW5nJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gYSBtdWx0aS12ZW5kb3IgZWNvbW1lcmNlIHBsYXRmb3JtIHBhcnQgb2YgYSBsYXJnZXIgc3VwZXJhcHBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZVByZWZpeD17KGxpbmVOdW1iZXIsIHRvdGFsTGluZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IFN0cmluZyh0b3RhbExpbmVzKS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtID0gU3RyaW5nKGxpbmVOdW1iZXIgKyAxKS5wYWRTdGFydChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+e251bX08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyYXlcIj4gXHUyNTAzIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfSxcbik7XG4iLCAiaW1wb3J0IHtCb3gsIFRleHQsIHVzZUlucHV0fSBmcm9tICdpbmsnO1xuaW1wb3J0IHR5cGUge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWZ9IGZyb20gJ3JlYWN0JztcblxuY29uc3QgQ1VSU09SX0lOVEVSVkFMID0gNTAwO1xuY29uc3QgTUFYX1VORE8gPSAxMDA7XG5jb25zdCBVTkRPX0dST1VQX0RFTEFZID0gMjUwMDtcblxudHlwZSBUVW5kb0VudHJ5ID0ge3JlYWRvbmx5IHZhbHVlOiBzdHJpbmc7IHJlYWRvbmx5IGN1cnNvcjogbnVtYmVyfTtcbnR5cGUgVE11dGF0aW9uVHlwZSA9ICdpbnNlcnQnIHwgJ2RlbGV0ZSc7XG5cbmNvbnN0IGZpbmRMaW5lU3RhcnQgPSAodmFsdWU6IHN0cmluZywgY3Vyc29yOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IGlkeCA9IHZhbHVlLmxhc3RJbmRleE9mKCdcXG4nLCBjdXJzb3IgLSAxKTtcbiAgICByZXR1cm4gaWR4ID09PSAtMSA/IDAgOiBpZHggKyAxO1xufTtcblxuY29uc3QgZmluZExpbmVFbmQgPSAodmFsdWU6IHN0cmluZywgY3Vyc29yOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IGlkeCA9IHZhbHVlLmluZGV4T2YoJ1xcbicsIGN1cnNvcik7XG4gICAgcmV0dXJuIGlkeCA9PT0gLTEgPyB2YWx1ZS5sZW5ndGggOiBpZHg7XG59O1xuXG5jb25zdCBmaW5kUHJldldvcmRCb3VuZGFyeSA9ICh2YWx1ZTogc3RyaW5nLCBjdXJzb3I6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgY29uc3QgbGluZVN0YXJ0ID0gZmluZExpbmVTdGFydCh2YWx1ZSwgY3Vyc29yKTtcbiAgICBsZXQgcG9zID0gY3Vyc29yIC0gMTtcbiAgICB3aGlsZSAocG9zID4gbGluZVN0YXJ0ICYmIC9cXHMvLnRlc3QodmFsdWVbcG9zXSEpICYmIHZhbHVlW3Bvc10gIT09ICdcXG4nKSB7XG4gICAgICAgIHBvcyAtPSAxO1xuICAgIH1cbiAgICB3aGlsZSAocG9zID4gbGluZVN0YXJ0ICYmICEvXFxzLy50ZXN0KHZhbHVlW3BvcyAtIDFdISkpIHtcbiAgICAgICAgcG9zIC09IDE7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1heChsaW5lU3RhcnQsIHBvcyk7XG59O1xuXG5jb25zdCBmaW5kTmV4dFdvcmRCb3VuZGFyeSA9ICh2YWx1ZTogc3RyaW5nLCBjdXJzb3I6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgY29uc3QgbGluZUVuZCA9IGZpbmRMaW5lRW5kKHZhbHVlLCBjdXJzb3IpO1xuICAgIGxldCBwb3MgPSBjdXJzb3I7XG4gICAgd2hpbGUgKHBvcyA8IGxpbmVFbmQgJiYgIS9cXHMvLnRlc3QodmFsdWVbcG9zXSEpKSB7XG4gICAgICAgIHBvcyArPSAxO1xuICAgIH1cbiAgICB3aGlsZSAocG9zIDwgbGluZUVuZCAmJiAvXFxzLy50ZXN0KHZhbHVlW3Bvc10hKSAmJiB2YWx1ZVtwb3NdICE9PSAnXFxuJykge1xuICAgICAgICBwb3MgKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgubWluKGxpbmVFbmQsIHBvcyk7XG59O1xuXG5jb25zdCBnZXRDdXJzb3JMaW5lQW5kQ29sdW1uID0gKFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgY3Vyc29yOiBudW1iZXIsXG4pOiB7bGluZTogbnVtYmVyOyBjb2x1bW46IG51bWJlcn0gPT4ge1xuICAgIGxldCBsaW5lID0gMDtcbiAgICBsZXQgbGFzdExpbmVTdGFydCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJzb3I7IGkrKykge1xuICAgICAgICBpZiAodmFsdWVbaV0gPT09ICdcXG4nKSB7XG4gICAgICAgICAgICBsaW5lICs9IDE7XG4gICAgICAgICAgICBsYXN0TGluZVN0YXJ0ID0gaSArIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtsaW5lLCBjb2x1bW46IGN1cnNvciAtIGxhc3RMaW5lU3RhcnR9O1xufTtcblxudHlwZSBUTGluZVByZWZpeEZuID0gKGxpbmVOdW1iZXI6IG51bWJlciwgdG90YWxMaW5lczogbnVtYmVyKSA9PiBSZWFjdE5vZGU7XG5cbnR5cGUgVFRleHRJbnB1dFByb3BzID0ge1xuICAgIHJlYWRvbmx5IGlzQWN0aXZlOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IG9uU3VibWl0OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgICByZWFkb25seSBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgICByZWFkb25seSBsaW5lUHJlZml4PzogUmVhY3ROb2RlIHwgVExpbmVQcmVmaXhGbjtcbn07XG5cbmV4cG9ydCBjb25zdCBUZXh0SW5wdXQgPSAoe1xuICAgIGlzQWN0aXZlLFxuICAgIG9uU3VibWl0LFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIGxpbmVQcmVmaXgsXG59OiBUVGV4dElucHV0UHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbY3Vyc29yVmlzaWJsZSwgc2V0Q3Vyc29yVmlzaWJsZV0gPSB1c2VTdGF0ZSh0cnVlKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgc2V0Q3Vyc29yVmlzaWJsZSgocHJldikgPT4gIXByZXYpO1xuICAgICAgICB9LCBDVVJTT1JfSU5URVJWQUwpO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfTtcbiAgICB9LCBbaXNBY3RpdmVdKTtcblxuICAgIGNvbnN0IHVuZG9TdGFjayA9IHVzZVJlZjxUVW5kb0VudHJ5W10+KFtdKTtcbiAgICBjb25zdCBsYXN0TXV0YXRpb25UaW1lID0gdXNlUmVmKDApO1xuICAgIGNvbnN0IGxhc3RNdXRhdGlvblR5cGUgPSB1c2VSZWY8VE11dGF0aW9uVHlwZSB8IG51bGw+KG51bGwpO1xuXG4gICAgY29uc3QgcmVzZXRCbGluayA9ICgpID0+IHtcbiAgICAgICAgc2V0Q3Vyc29yVmlzaWJsZSh0cnVlKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHVzaFVuZG8gPSAodHlwZTogVE11dGF0aW9uVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBlbGFwc2VkID0gbm93IC0gbGFzdE11dGF0aW9uVGltZS5jdXJyZW50O1xuICAgICAgICBjb25zdCBzYW1lVHlwZSA9IHR5cGUgPT09IGxhc3RNdXRhdGlvblR5cGUuY3VycmVudDtcblxuICAgICAgICBsYXN0TXV0YXRpb25UaW1lLmN1cnJlbnQgPSBub3c7XG4gICAgICAgIGxhc3RNdXRhdGlvblR5cGUuY3VycmVudCA9IHR5cGU7XG5cbiAgICAgICAgaWYgKGVsYXBzZWQgPCBVTkRPX0dST1VQX0RFTEFZICYmIHNhbWVUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdGFjayA9IHVuZG9TdGFjay5jdXJyZW50O1xuICAgICAgICBpZiAoc3RhY2subGVuZ3RoID49IE1BWF9VTkRPKSB7XG4gICAgICAgICAgICBzdGFjay5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICAgIHN0YWNrLnB1c2goe3ZhbHVlLCBjdXJzb3J9KTtcbiAgICB9O1xuXG4gICAgdXNlSW5wdXQoXG4gICAgICAgIChpbnB1dCwga2V5KSA9PiB7XG4gICAgICAgICAgICAvLyBDdHJsK0ogXHUyMDE0IGluc2VydCBuZXdsaW5lXG4gICAgICAgICAgICBpZiAoa2V5LmN0cmwgJiYgaW5wdXQgPT09ICdqJykge1xuICAgICAgICAgICAgICAgIHJlc2V0QmxpbmsoKTtcbiAgICAgICAgICAgICAgICBwdXNoVW5kbygnaW5zZXJ0Jyk7XG4gICAgICAgICAgICAgICAgc2V0VmFsdWUoKHYpID0+IHYuc2xpY2UoMCwgY3Vyc29yKSArICdcXG4nICsgdi5zbGljZShjdXJzb3IpKTtcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKGMpID0+IGMgKyAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEVudGVyIFx1MjAxNCBzdWJtaXRcbiAgICAgICAgICAgIGlmIChrZXkucmV0dXJuKSB7XG4gICAgICAgICAgICAgICAgb25TdWJtaXQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVXAgYXJyb3cgXHUyMDE0IG1vdmUgdG8gc2FtZSBjb2x1bW4gb24gcHJldmlvdXMgbGluZVxuICAgICAgICAgICAgaWYgKGtleS51cEFycm93KSB7XG4gICAgICAgICAgICAgICAgcmVzZXRCbGluaygpO1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7bGluZSwgY29sdW1ufSA9IGdldEN1cnNvckxpbmVBbmRDb2x1bW4odmFsdWUsIGMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGluZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmRMaW5lU3RhcnQodmFsdWUsIGMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZMaW5lRW5kID0gZmluZExpbmVTdGFydCh2YWx1ZSwgYykgLSAxO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2TGluZVN0YXJ0ID0gZmluZExpbmVTdGFydCh2YWx1ZSwgcHJldkxpbmVFbmQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2TGluZUxlbmd0aCA9IHByZXZMaW5lRW5kIC0gcHJldkxpbmVTdGFydDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZMaW5lU3RhcnQgKyBNYXRoLm1pbihjb2x1bW4sIHByZXZMaW5lTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERvd24gYXJyb3cgXHUyMDE0IG1vdmUgdG8gbmV4dCBsaW5lLCBvciBjcmVhdGUgb25lIGlmIG9uIGxhc3QgbGluZVxuICAgICAgICAgICAgaWYgKGtleS5kb3duQXJyb3cpIHtcbiAgICAgICAgICAgICAgICByZXNldEJsaW5rKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudExpbmVFbmQgPSBmaW5kTGluZUVuZCh2YWx1ZSwgY3Vyc29yKTtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudExpbmVFbmQgPj0gdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9uIGxhc3QgbGluZSBcdTIwMTQgaW5zZXJ0IGEgbmV3IGxpbmUgYW5kIG1vdmUgY3Vyc29yIHRoZXJlXG4gICAgICAgICAgICAgICAgICAgIHB1c2hVbmRvKCdpbnNlcnQnKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoKHYpID0+IHYgKyAnXFxuJyk7XG4gICAgICAgICAgICAgICAgICAgIHNldEN1cnNvcih2YWx1ZS5sZW5ndGggKyAxKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtjb2x1bW59ID0gZ2V0Q3Vyc29yTGluZUFuZENvbHVtbih2YWx1ZSwgYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0TGluZVN0YXJ0ID0gY3VycmVudExpbmVFbmQgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dExpbmVFbmQgPSBmaW5kTGluZUVuZCh2YWx1ZSwgbmV4dExpbmVTdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0TGluZUxlbmd0aCA9IG5leHRMaW5lRW5kIC0gbmV4dExpbmVTdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0TGluZVN0YXJ0ICsgTWF0aC5taW4oY29sdW1uLCBuZXh0TGluZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIExlZnQgYXJyb3dcbiAgICAgICAgICAgIGlmIChrZXkubGVmdEFycm93KSB7XG4gICAgICAgICAgICAgICAgcmVzZXRCbGluaygpO1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4gTWF0aC5tYXgoMCwgYyAtIDEpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJpZ2h0IGFycm93XG4gICAgICAgICAgICBpZiAoa2V5LnJpZ2h0QXJyb3cpIHtcbiAgICAgICAgICAgICAgICByZXNldEJsaW5rKCk7XG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKChjKSA9PiBNYXRoLm1pbih2YWx1ZS5sZW5ndGgsIGMgKyAxKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBPcHQrTGVmdCAobWV0YStiKSBcdTIwMTQgd29yZCBqdW1wIGJhY2t3YXJkXG4gICAgICAgICAgICBpZiAoa2V5Lm1ldGEgJiYgaW5wdXQgPT09ICdiJykge1xuICAgICAgICAgICAgICAgIHJlc2V0QmxpbmsoKTtcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKGMpID0+IGZpbmRQcmV2V29yZEJvdW5kYXJ5KHZhbHVlLCBjKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBPcHQrUmlnaHQgKG1ldGErZikgXHUyMDE0IHdvcmQganVtcCBmb3J3YXJkXG4gICAgICAgICAgICBpZiAoa2V5Lm1ldGEgJiYgaW5wdXQgPT09ICdmJykge1xuICAgICAgICAgICAgICAgIHJlc2V0QmxpbmsoKTtcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKGMpID0+IGZpbmROZXh0V29yZEJvdW5kYXJ5KHZhbHVlLCBjKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDdHJsK0EgXHUyMDE0IHN0YXJ0IG9mIGN1cnJlbnQgbGluZVxuICAgICAgICAgICAgaWYgKGtleS5jdHJsICYmIGlucHV0ID09PSAnYScpIHtcbiAgICAgICAgICAgICAgICByZXNldEJsaW5rKCk7XG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKChjKSA9PiBmaW5kTGluZVN0YXJ0KHZhbHVlLCBjKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDdHJsK0UgXHUyMDE0IGVuZCBvZiBjdXJyZW50IGxpbmVcbiAgICAgICAgICAgIGlmIChrZXkuY3RybCAmJiBpbnB1dCA9PT0gJ2UnKSB7XG4gICAgICAgICAgICAgICAgcmVzZXRCbGluaygpO1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4gZmluZExpbmVFbmQodmFsdWUsIGMpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEN0cmwrVyBcdTIwMTQgZGVsZXRlIHdvcmQgYmVmb3JlIGN1cnNvclxuICAgICAgICAgICAgaWYgKGtleS5jdHJsICYmIGlucHV0ID09PSAndycpIHtcbiAgICAgICAgICAgICAgICByZXNldEJsaW5rKCk7XG4gICAgICAgICAgICAgICAgcHVzaFVuZG8oJ2RlbGV0ZScpO1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBib3VuZGFyeSA9IGZpbmRQcmV2V29yZEJvdW5kYXJ5KHZhbHVlLCBjKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoKHYpID0+IHYuc2xpY2UoMCwgYm91bmRhcnkpICsgdi5zbGljZShjKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBib3VuZGFyeTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEN0cmwrVSBcdTIwMTQgZGVsZXRlIHRvIHN0YXJ0IG9mIGN1cnJlbnQgbGluZVxuICAgICAgICAgICAgaWYgKGtleS5jdHJsICYmIGlucHV0ID09PSAndScpIHtcbiAgICAgICAgICAgICAgICByZXNldEJsaW5rKCk7XG4gICAgICAgICAgICAgICAgcHVzaFVuZG8oJ2RlbGV0ZScpO1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5lU3RhcnQgPSBmaW5kTGluZVN0YXJ0KHZhbHVlLCBjKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoKHYpID0+IHYuc2xpY2UoMCwgbGluZVN0YXJ0KSArIHYuc2xpY2UoYykpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGluZVN0YXJ0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ3RybCtLIFx1MjAxNCBkZWxldGUgdG8gZW5kIG9mIGN1cnJlbnQgbGluZVxuICAgICAgICAgICAgaWYgKGtleS5jdHJsICYmIGlucHV0ID09PSAnaycpIHtcbiAgICAgICAgICAgICAgICByZXNldEJsaW5rKCk7XG4gICAgICAgICAgICAgICAgcHVzaFVuZG8oJ2RlbGV0ZScpO1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5lRW5kID0gZmluZExpbmVFbmQodmFsdWUsIGMpO1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZSgodikgPT4gdi5zbGljZSgwLCBjKSArIHYuc2xpY2UobGluZUVuZCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEJhY2tzcGFjZSAod2l0aCBPcHQrQmFja3NwYWNlIGZvciB3b3JkIGRlbGV0aW9uKVxuICAgICAgICAgICAgaWYgKGtleS5iYWNrc3BhY2UgfHwga2V5LmRlbGV0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChrZXkubWV0YSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBPcHQrRGVsZXRlIFx1MjAxNCBkZWxldGUgd29yZCBiZWZvcmUgY3Vyc29yXG4gICAgICAgICAgICAgICAgICAgIHJlc2V0QmxpbmsoKTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaFVuZG8oJ2RlbGV0ZScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBib3VuZGFyeSA9IGZpbmRQcmV2V29yZEJvdW5kYXJ5KHZhbHVlLCBjdXJzb3IpO1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZSgodikgPT4gdi5zbGljZSgwLCBib3VuZGFyeSkgKyB2LnNsaWNlKGN1cnNvcikpO1xuICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3IoYm91bmRhcnkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjdXJzb3IgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0QmxpbmsoKTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaFVuZG8oJ2RlbGV0ZScpO1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZSgodikgPT4gdi5zbGljZSgwLCBjdXJzb3IgLSAxKSArIHYuc2xpY2UoY3Vyc29yKSk7XG4gICAgICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4gYyAtIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEN0cmwrWiBcdTIwMTQgdW5kb1xuICAgICAgICAgICAgaWYgKGtleS5jdHJsICYmIGlucHV0ID09PSAneicpIHtcbiAgICAgICAgICAgICAgICByZXNldEJsaW5rKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSB1bmRvU3RhY2suY3VycmVudC5wb3AoKTtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoZW50cnkudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRDdXJzb3IoZW50cnkuY3Vyc29yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGFzdE11dGF0aW9uVGltZS5jdXJyZW50ID0gMDtcbiAgICAgICAgICAgICAgICBsYXN0TXV0YXRpb25UeXBlLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWdub3JlIG90aGVyIGNvbnRyb2wvbWV0YS9lc2NhcGUvdGFiIGtleXNcbiAgICAgICAgICAgIGlmIChrZXkuY3RybCB8fCBrZXkuZXNjYXBlIHx8IGtleS50YWIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJlZ3VsYXIgY2hhcmFjdGVyIGlucHV0XG4gICAgICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJlc2V0QmxpbmsoKTtcbiAgICAgICAgICAgICAgICBwdXNoVW5kbygnaW5zZXJ0Jyk7XG4gICAgICAgICAgICAgICAgc2V0VmFsdWUoKHYpID0+IHYuc2xpY2UoMCwgY3Vyc29yKSArIGlucHV0ICsgdi5zbGljZShjdXJzb3IpKTtcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKGMpID0+IGMgKyBpbnB1dC5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7aXNBY3RpdmV9LFxuICAgICk7XG5cbiAgICBjb25zdCByZW5kZXJMaW5lID0gKFxuICAgICAgICBjb250ZW50OiBSZWFjdE5vZGUsXG4gICAgICAgIGtleTogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICBsaW5lTnVtYmVyOiBudW1iZXIsXG4gICAgICAgIHRvdGFsTGluZXM6IG51bWJlcixcbiAgICApOiBSZWFjdE5vZGUgPT4ge1xuICAgICAgICBjb25zdCBwcmVmaXggPVxuICAgICAgICAgICAgdHlwZW9mIGxpbmVQcmVmaXggPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICA/IGxpbmVQcmVmaXgobGluZU51bWJlciwgdG90YWxMaW5lcylcbiAgICAgICAgICAgICAgICA6IGxpbmVQcmVmaXg7XG5cbiAgICAgICAgcmV0dXJuIHByZWZpeCA/IChcbiAgICAgICAgICAgIDxCb3gga2V5PXtrZXl9PlxuICAgICAgICAgICAgICAgIHtwcmVmaXh9XG4gICAgICAgICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxCb3gga2V5PXtrZXl9Pntjb250ZW50fTwvQm94PlxuICAgICAgICApO1xuICAgIH07XG5cbiAgICAvLyBSZW5kZXIgcGxhY2Vob2xkZXIgd2hlbiBlbXB0eSBhbmQgbm90IGZvY3VzZWRcbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwICYmICFpc0FjdGl2ZSAmJiBwbGFjZWhvbGRlcikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAge3JlbmRlckxpbmUoPFRleHQgZGltQ29sb3I+e3BsYWNlaG9sZGVyfTwvVGV4dD4sIDAsIDAsIDIpfVxuICAgICAgICAgICAgICAgIHtyZW5kZXJMaW5lKDxUZXh0PiA8L1RleHQ+LCAxLCAxLCAyKX1cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIFJlbmRlciBwbGFjZWhvbGRlciB3aXRoIGN1cnNvciB3aGVuIGVtcHR5IGFuZCBmb2N1c2VkXG4gICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCAmJiBpc0FjdGl2ZSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAge3JlbmRlckxpbmUoXG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAge2N1cnNvclZpc2libGUgPyAnXFx4MWJbN20gXFx4MWJbMjdtJyA6ICcgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwbGFjZWhvbGRlciA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57cGxhY2Vob2xkZXJ9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD4sXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDIsXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7cmVuZGVyTGluZSg8VGV4dD4gPC9UZXh0PiwgMSwgMSwgMil9XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBNdWx0aS1saW5lIHJlbmRlcmluZyAobWluaW11bSAyIHZpc2libGUgbGluZXMpXG4gICAgY29uc3QgbGluZXMgPSB2YWx1ZS5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgdG90YWxMaW5lcyA9IE1hdGgubWF4KGxpbmVzLmxlbmd0aCwgMik7XG4gICAgY29uc3QgaGFzQ29udGVudCA9IHZhbHVlLnJlcGxhY2UoL1xcbi9nLCAnJykubGVuZ3RoID4gMDtcbiAgICBjb25zdCB7bGluZTogY3Vyc29yTGluZSwgY29sdW1uOiBjdXJzb3JDb2x1bW59ID0gZ2V0Q3Vyc29yTGluZUFuZENvbHVtbihcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGN1cnNvcixcbiAgICApO1xuXG4gICAgY29uc3QgcmVuZGVyZWRMaW5lcyA9IGxpbmVzLm1hcCgobGluZVRleHQsIGxpbmVJZHgpID0+IHtcbiAgICAgICAgY29uc3QgaXNDdXJzb3JMaW5lID0gbGluZUlkeCA9PT0gY3Vyc29yTGluZTtcblxuICAgICAgICBpZiAoIWlzQ3Vyc29yTGluZSB8fCAhaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJMaW5lKFxuICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICB7bGluZVRleHQgfHwgJyAnfVxuICAgICAgICAgICAgICAgICAgICB7bGluZUlkeCA9PT0gMCAmJiAhaGFzQ29udGVudCAmJiBwbGFjZWhvbGRlciA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPntwbGFjZWhvbGRlcn08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDwvVGV4dD4sXG4gICAgICAgICAgICAgICAgbGluZUlkeCxcbiAgICAgICAgICAgICAgICBsaW5lSWR4LFxuICAgICAgICAgICAgICAgIHRvdGFsTGluZXMsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmVmb3JlID0gbGluZVRleHQuc2xpY2UoMCwgY3Vyc29yQ29sdW1uKTtcbiAgICAgICAgY29uc3QgYXRDdXJzb3IgPSBsaW5lVGV4dFtjdXJzb3JDb2x1bW5dID8/ICcgJztcbiAgICAgICAgY29uc3QgYWZ0ZXIgPSBsaW5lVGV4dC5zbGljZShjdXJzb3JDb2x1bW4gKyAxKTtcblxuICAgICAgICByZXR1cm4gcmVuZGVyTGluZShcbiAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgIHtiZWZvcmV9XG4gICAgICAgICAgICAgICAge2N1cnNvclZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgPyBgXFx4MWJbN20ke2F0Q3Vyc29yfVxceDFiWzI3bWBcbiAgICAgICAgICAgICAgICAgICAgOiBhdEN1cnNvciA9PT0gJyAnICYmIGN1cnNvckNvbHVtbiA+PSBsaW5lVGV4dC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICA/ICcgJ1xuICAgICAgICAgICAgICAgICAgICAgIDogYXRDdXJzb3J9XG4gICAgICAgICAgICAgICAge2FmdGVyfVxuICAgICAgICAgICAgICAgIHtsaW5lSWR4ID09PSAwICYmICFoYXNDb250ZW50ICYmIHBsYWNlaG9sZGVyID8gKFxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57cGxhY2Vob2xkZXJ9PC9UZXh0PlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9UZXh0PixcbiAgICAgICAgICAgIGxpbmVJZHgsXG4gICAgICAgICAgICBsaW5lSWR4LFxuICAgICAgICAgICAgdG90YWxMaW5lcyxcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8vIFBhZCB0byBtaW5pbXVtIDIgbGluZXMgc28gdGhlIGlucHV0IHZpc3VhbGx5IHNpZ25hbHMgbXVsdGktbGluZVxuICAgIHdoaWxlIChyZW5kZXJlZExpbmVzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgY29uc3QgcGFkSWR4ID0gcmVuZGVyZWRMaW5lcy5sZW5ndGg7XG4gICAgICAgIHJlbmRlcmVkTGluZXMucHVzaChcbiAgICAgICAgICAgIHJlbmRlckxpbmUoPFRleHQ+IDwvVGV4dD4sIGBwYWQtJHtwYWRJZHh9YCwgcGFkSWR4LCB0b3RhbExpbmVzKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+e3JlbmRlcmVkTGluZXN9PC9Cb3g+O1xufTtcbiIsICJpbXBvcnQge0JveCwgVGV4dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7b2JzZXJ2ZXJ9IGZyb20gJ21vYngtcmVhY3QtbGl0ZSc7XG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi8uLi9zdG9yZS5tanMnO1xuaW1wb3J0IHtTcGlubmVyfSBmcm9tICcuL1NwaW5uZXIuanMnO1xuXG50eXBlIFRHYXRlUHJvcHMgPSB7XG4gICAgcmVhZG9ubHkgc3RvcmU6IFRTdG9yZTtcbn07XG5cbmV4cG9ydCBjb25zdCBHYXRlID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFRHYXRlUHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IGdhdGUgPSBzdG9yZS5zdGVwcy5nYXRlO1xuXG4gICAgaWYgKGdhdGUuc3RhdGUgPT09ICdpZGxlJyB8fCBnYXRlLnN0YXRlID09PSAncGFzc2VkJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZ2F0ZS5zdGF0ZSA9PT0gJ2NoZWNraW5nJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgIDxUZXh0PmNoZWNraW5nLi4uPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwieWVsbG93XCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD5TRVJWRVIgU0FZUzo8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3hcbiAgICAgICAgICAgICAgICBib3JkZXJEaW1Db2xvclxuICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yPXsneWVsbG93QnJpZ2h0J31cbiAgICAgICAgICAgICAgICBib3JkZXJTdHlsZT1cImJvbGRcIlxuICAgICAgICAgICAgICAgIHBhZGRpbmdYPXsyfVxuICAgICAgICAgICAgICAgIHBhZGRpbmdZPXsxfVxuICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ9ezF9XG4gICAgICAgICAgICAgICAgd2lkdGg9ezkyfT5cbiAgICAgICAgICAgICAgICA8VGV4dD57Z2F0ZS5tZXNzYWdlfTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufSk7XG4iLCAiaW1wb3J0IHtCb3gsIFRleHQsIHVzZUlucHV0fSBmcm9tICdpbmsnO1xuaW1wb3J0IHR5cGUge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VTdGF0ZSwgdXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge29ic2VydmVyfSBmcm9tICdtb2J4LXJlYWN0LWxpdGUnO1xuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vLi4vc3RvcmUubWpzJztcbmltcG9ydCB7b3BlblNlc3Npb25VUkwsIHNob3VsZE9wZW5Ccm93c2VyfSBmcm9tICcuLi8uLi9hcHAvb3Blbi11cmwubWpzJztcbmltcG9ydCB7U3Bpbm5lcn0gZnJvbSAnLi9TcGlubmVyLmpzJztcblxudHlwZSBUQmlsbGluZ1Byb3BzID0ge1xuICAgIHJlYWRvbmx5IHN0b3JlOiBUU3RvcmU7XG59O1xuXG5jb25zdCBjYW5PcGVuID0gc2hvdWxkT3BlbkJyb3dzZXIoKTtcblxuZXhwb3J0IGNvbnN0IEJpbGxpbmcgPSBvYnNlcnZlcigoe3N0b3JlfTogVEJpbGxpbmdQcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgY29uc3QgYmlsbGluZyA9IHN0b3JlLnN0ZXBzLmJpbGxpbmc7XG4gICAgY29uc3QgW2RvdFZpc2libGUsIHNldERvdFZpc2libGVdID0gdXNlU3RhdGUodHJ1ZSk7XG4gICAgY29uc3QgW29wZW5lZCwgc2V0T3BlbmVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChiaWxsaW5nLnN0YXRlICE9PSAnd2FpdGluZycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgc2V0RG90VmlzaWJsZSgocHJldikgPT4gIXByZXYpO1xuICAgICAgICB9LCA3NTApO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfTtcbiAgICB9LCBbYmlsbGluZy5zdGF0ZV0pO1xuXG4gICAgdXNlSW5wdXQoXG4gICAgICAgIChfaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleS5yZXR1cm4gJiYgYmlsbGluZy51cmwpIHtcbiAgICAgICAgICAgICAgICBzZXRPcGVuZWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgb3BlblNlc3Npb25VUkwoYmlsbGluZy51cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7aXNBY3RpdmU6IGJpbGxpbmcuc3RhdGUgPT09ICd3YWl0aW5nJyAmJiBjYW5PcGVufSxcbiAgICApO1xuXG4gICAgaWYgKGJpbGxpbmcuc3RhdGUgPT09ICdpZGxlJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoYmlsbGluZy5zdGF0ZSA9PT0gJ2NoZWNraW5nJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+QklMTElORzogPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PmNoZWNraW5nLi4uPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGJpbGxpbmcuc3RhdGUgPT09ICdjb25uZWN0ZWQnKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JlZW5cIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkJJTExJTkc6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD5wYXltZW50IG1ldGhvZCBjb25uZWN0ZWQ8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmF5XCI+e2RvdFZpc2libGUgPyAnXHUyNUNGJyA6ICcgJ308L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkJJTExJTkc8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3hcbiAgICAgICAgICAgICAgICBib3JkZXJTdHlsZT1cInNpbmdsZVwiXG4gICAgICAgICAgICAgICAgcGFkZGluZ1g9ezJ9XG4gICAgICAgICAgICAgICAgcGFkZGluZ1k9ezF9XG4gICAgICAgICAgICAgICAgbWFyZ2luTGVmdD17MX1cbiAgICAgICAgICAgICAgICBib3JkZXJEaW1Db2xvclxuICAgICAgICAgICAgICAgIHdpZHRoPXs5Mn1cbiAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD5cbiAgICAgICAgICAgICAgICAgICAgQ29ubmVjdCBhIHBheW1lbnQgbWV0aG9kIHRvIHlvdXIgZGJjdHguaW8gYWNjb3VudHsnXFxuJ31cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9eydjeWFuJ30+e2JpbGxpbmcudXJsIX08L1RleHQ+XG4gICAgICAgICAgICAgICAge2Nhbk9wZW4gPyAoXG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JheVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUHJlc3MgRW50ZXIgdG8ge29wZW5lZCA/ICdyZS1vcGVuJyA6ICdvcGVuJ30gaW4gYnJvd3NlclxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPFRleHQ+eydcXG5cXG4nfTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5XYWl0aW5nIGZvciBwYXltZW50IG1ldGhvZCBzZXR1cCAuLi48L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn0pO1xuIiwgImltcG9ydCB7Qm94LCBUZXh0LCB1c2VJbnB1dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7b2JzZXJ2ZXJ9IGZyb20gJ21vYngtcmVhY3QtbGl0ZSc7XG5pbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uLy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQge1NwaW5uZXJ9IGZyb20gJy4vU3Bpbm5lci5qcyc7XG5cbnR5cGUgVFNhbXBsaW5nUHJvcHMgPSB7XG4gICAgcmVhZG9ubHkgc3RvcmU6IFRTdG9yZTtcbn07XG5cbmNvbnN0IENvdW50c0xpbmUgPSBvYnNlcnZlcigoe3N0b3JlfTogVFNhbXBsaW5nUHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IHtjb3VudHN9ID0gc3RvcmUuc3RlcHMuc2FtcGxpbmc7XG4gICAgY29uc3QgcGFydHMgPSBbXG4gICAgICAgIGNvdW50cy5jb21wbGV0ZWRUYWJsZXMgPiAwIHx8IGNvdW50cy50b3RhbFRhYmxlcyA+IDBcbiAgICAgICAgICAgID8gYCR7Y291bnRzLmNvbXBsZXRlZFRhYmxlc30vJHtjb3VudHMudG90YWxUYWJsZXN9IHRhYmxlc2BcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgY291bnRzLnNhbXBsZWRDb2x1bW5zID4gMCB8fCBjb3VudHMudG90YWxDb2x1bW5zID4gMFxuICAgICAgICAgICAgPyBgJHtjb3VudHMuc2FtcGxlZENvbHVtbnN9LyR7Y291bnRzLnRvdGFsQ29sdW1uc30gY29sdW1uc2BcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgY291bnRzLnNraXBwZWRDb2x1bW5zID4gMCA/IGAke2NvdW50cy5za2lwcGVkQ29sdW1uc30gc2tpcHBlZGAgOiBudWxsLFxuICAgIF0uZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94PlxuICAgICAgICAgICAgPFRleHQ+eycgICd9PC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmF5XCI+e3BhcnRzLmpvaW4oJyBcdTAwQjcgJyl9PC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufSk7XG5cbmV4cG9ydCBjb25zdCBTYW1wbGluZyA9IG9ic2VydmVyKCh7c3RvcmV9OiBUU2FtcGxpbmdQcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgY29uc3Qgc2FtcGxpbmcgPSBzdG9yZS5zdGVwcy5zYW1wbGluZztcblxuICAgIHVzZUlucHV0KFxuICAgICAgICAoX2lucHV0LCBfa2V5KSA9PiB7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcuY29uZmlybWVkID0gX2lucHV0LnRvTG93ZXJDYXNlKCkgPT09ICd5JztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB7aXNBY3RpdmU6IHNhbXBsaW5nLnN0YXRlID09PSAncHJvbXB0aW5nLW92ZXJ3cml0ZSd9LFxuICAgICk7XG5cbiAgICBpZiAoc2FtcGxpbmcuc3RhdGUgPT09ICdpZGxlJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc2FtcGxpbmcuc3RhdGUgPT09ICdwcm9tcHRpbmctb3ZlcndyaXRlJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInllbGxvd1wiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+U0FNUExJTkc6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgRGlyZWN0b3J5IDxUZXh0IGNvbG9yPVwiY3lhblwiPntzYW1wbGluZy5vdXRwdXREaXJ9PC9UZXh0PiBpc1xuICAgICAgICAgICAgICAgICAgICBub3QgZW1wdHkuIE92ZXJ3cml0ZT8gW3kvTl17JyAnfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChzYW1wbGluZy5zdGF0ZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwicmVkXCI+RXJyb3I6IHtzYW1wbGluZy5lcnJvcn08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoc2FtcGxpbmcuc3RhdGUgPT09ICdza2lwcGVkJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyYXlcIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkIGNvbG9yPVwiZ3JheVwiPlxuICAgICAgICAgICAgICAgICAgICBTQU1QTElORzp7JyAnfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyYXlcIj4ocmV1c2VkKSBzYW1wbGVzIGFscmVhZHkgaW5nZXN0ZWQ8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoc2FtcGxpbmcuc3RhdGUgPT09ICdkb25lJykge1xuICAgICAgICBjb25zdCB7Y291bnRzfSA9IHNhbXBsaW5nO1xuXG4gICAgICAgIGlmIChjb3VudHMuY29tcGxldGVkVGFibGVzID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnRzID0gW1xuICAgICAgICAgICAgY291bnRzLnNhbXBsZWRDb2x1bW5zID4gMFxuICAgICAgICAgICAgICAgID8gYHNhbXBsZWQgJHtjb3VudHMuc2FtcGxlZENvbHVtbnN9IGNvbHVtbnNgXG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgY291bnRzLmNvbXBsZXRlZFRhYmxlcyA+IDBcbiAgICAgICAgICAgICAgICA/IGBhY3Jvc3MgJHtjb3VudHMuY29tcGxldGVkVGFibGVzfSB0YWJsZXNgXG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBdLmZpbHRlcihCb29sZWFuKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmVlblwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgYm9sZD5TQU1QTElORzogPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cGFydHMuam9pbignICcpfVxuICAgICAgICAgICAgICAgICAgICAgICAge3NhbXBsaW5nLm91dHB1dERpciA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdTIxOTIgPFRleHQgY29sb3I9XCJjeWFuXCI+e3NhbXBsaW5nLm91dHB1dERpcn08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgIHtjb3VudHMuc2tpcHBlZENvbHVtbnMgPiAwID8gKFxuICAgICAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQ+eycgICd9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmF5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvdW50cy5za2lwcGVkQ29sdW1uc30gY29sdW1ucyBza2lwcGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxTcGlubmVyIC8+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD5TQU1QTElORzogPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PnNhbXBsaW5nIGNvbHVtbnMuLi48L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxDb3VudHNMaW5lIHN0b3JlPXtzdG9yZX0gLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn0pO1xuIiwgImltcG9ydCB7Qm94LCBUZXh0fSBmcm9tICdpbmsnO1xuaW1wb3J0IHR5cGUge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtvYnNlcnZlcn0gZnJvbSAnbW9ieC1yZWFjdC1saXRlJztcbmltcG9ydCB0eXBlIHtUR2F0ZUVycm9yRGF0YX0gZnJvbSAnQGRiY3R4L2NvcmUnO1xuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vLi4vc3RvcmUubWpzJztcbmltcG9ydCB7U3Bpbm5lcn0gZnJvbSAnLi9TcGlubmVyLmpzJztcblxudHlwZSBUUHJvcHMgPSB7XG4gICAgcmVhZG9ubHkgc3RvcmU6IFRTdG9yZTtcbn07XG5cbmNvbnN0IEdhdGVCbG9jayA9ICh7Z2F0ZX06IHtyZWFkb25seSBnYXRlOiBUR2F0ZUVycm9yRGF0YX0pOiBSZWFjdE5vZGUgPT4ge1xuICAgIGlmIChnYXRlLmtpbmQgPT09ICdpbi10cmlhbCcpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwieWVsbG93XCIgYm9sZD5cbiAgICAgICAgICAgICAgICAgICAgeydZb3UgYXJlIHN0aWxsIGluIHRyaWFsJ31cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInllbGxvd1wiPllvdSBzdGFydGVkIHlvdXIgdHJpYWwgdmlhIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJ5ZWxsb3dcIiBib2xkPlxuICAgICAgICAgICAgICAgICAgICAgICAge2dhdGUuZGF0YWJhc2VOYW1lfVxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInllbGxvd1wiPlxuICAgICAgICAgICAgICAgICAgICB7J1VwZ3JhZGUgZnJvbSB5b3VyIGRhc2hib2FyZCB0byBrZWVwIGdvaW5nOid9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiYmx1ZVwiPntnYXRlLmRhdGFiYXNlVVJMfTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzdGF0dXNMYWJlbCA9XG4gICAgICAgIGdhdGUuaW52b2ljZVN0YXR1cyAhPT0gbnVsbFxuICAgICAgICAgICAgPyBgaW52b2ljZSAke2dhdGUuaW52b2ljZVN0YXR1c31gXG4gICAgICAgICAgICA6ICdubyBpbnZvaWNlIHlldCc7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj1cInllbGxvd1wiPlxuICAgICAgICAgICAgICAgIHsnWW91IGhhdmUgYW4gdW5wYWlkIHJldmlzaW9uIGJsb2NraW5nIG5ldyBwdXNoZXMuJ31cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwieWVsbG93XCI+eycgIERhdGFiYXNlOiAgJ308L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJ5ZWxsb3dcIiBib2xkPlxuICAgICAgICAgICAgICAgICAgICB7Z2F0ZS5kYXRhYmFzZU5hbWV9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj1cInllbGxvd1wiPntgICBSZXZpc2lvbjogICMke2dhdGUucmV2aXNpb25OdW1iZXJ9YH08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj1cInllbGxvd1wiPntgICBTdGF0dXM6ICAgICR7c3RhdHVzTGFiZWx9YH08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9XCJ5ZWxsb3dcIj57J1NldHRsZSBpdCB0byBjb250aW51ZTonfTwvVGV4dD5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJ5ZWxsb3dcIj57JyAgJ308L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJibHVlXCI+e2dhdGUuZGF0YWJhc2VVUkx9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICB7Z2F0ZS5vdGhlclVucGFpZENvdW50ID4gMCA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInllbGxvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2AoKyAke2dhdGUub3RoZXJVbnBhaWRDb3VudH0gbW9yZSB1bnBhaWQgcmV2aXNpb24ke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhdGUub3RoZXJVbnBhaWRDb3VudCA9PT0gMSA/ICcnIDogJ3MnXG4gICAgICAgICAgICAgICAgICAgICAgICB9IFx1MjAxNCBzZWUgZGFzaGJvYXJkLilgfVxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBJbnRyb3NwZWN0aW9uVXBsb2FkID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFRQcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgY29uc3QgcyA9IHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5pbnRyb3NwZWN0aW9uO1xuXG4gICAgaWYgKHMuc3RhdGUgPT09ICdpZGxlJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocy5zdGF0ZSA9PT0gJ3VwbG9hZGluZycpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPklOVFJPU1BFQ1RJT04gVVBMT0FEOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+dXBsb2FkaW5nIGludHJvc3BlY3Rpb24uLi48L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocy5zdGF0ZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJ5ZWxsb3dcIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+SU5UUk9TUEVDVElPTiBVUExPQUQ6PC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgIDxCb3hcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyRGltQ29sb3JcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I9XCJ5ZWxsb3dCcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBib3JkZXJTdHlsZT1cImJvbGRcIlxuICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1g9ezJ9XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmdZPXsxfVxuICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0PXsxfVxuICAgICAgICAgICAgICAgICAgICB3aWR0aD17OTJ9PlxuICAgICAgICAgICAgICAgICAgICB7cy5nYXRlICE9PSBudWxsID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEdhdGVCbG9jayBnYXRlPXtzLmdhdGV9IC8+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dD57cy5lcnJvcn08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocy5zdGF0ZSA9PT0gJ3NraXBwZWQnKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JheVwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQgY29sb3I9XCJncmF5XCI+XG4gICAgICAgICAgICAgICAgICAgIElOVFJPU1BFQ1RJT04gVVBMT0FEOnsnICd9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JheVwiPlxuICAgICAgICAgICAgICAgICAgICAocmV1c2VkKSBpbnRyb3NwZWN0aW9uIGFydGlmYWN0IGFscmVhZHkgaW5nZXN0ZWRcbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmVlblwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBib2xkPklOVFJPU1BFQ1RJT04gVVBMT0FEOiA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+aW50cm9zcGVjdGlvbiB1cGxvYWRlZDwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn0pO1xuIiwgImltcG9ydCB7Qm94LCBUZXh0fSBmcm9tICdpbmsnO1xuaW1wb3J0IHR5cGUge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtvYnNlcnZlcn0gZnJvbSAnbW9ieC1yZWFjdC1saXRlJztcbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uLy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQge1NwaW5uZXJ9IGZyb20gJy4vU3Bpbm5lci5qcyc7XG5cbnR5cGUgVFByb3BzID0ge1xuICAgIHJlYWRvbmx5IHN0b3JlOiBUU3RvcmU7XG59O1xuXG5leHBvcnQgY29uc3QgU2FtcGxlc1VwbG9hZCA9IG9ic2VydmVyKCh7c3RvcmV9OiBUUHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IHMgPSBzdG9yZS5zdGVwcy5pbmdlc3Rpb24uc2FtcGxlcztcblxuICAgIGlmIChzLnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHMuc3RhdGUgPT09ICd1cGxvYWRpbmcnKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxTcGlubmVyIC8+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZD5TQU1QTEUgU0VUIFVQTE9BRDogPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRpbmcgc2FtcGxlcyAoe3MudXBsb2FkZWRUYWJsZXN9L3tzLnRvdGFsVGFibGVzfXsnICd9XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlcykuLi5cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocy5zdGF0ZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+U0FNUExFIFNFVCBVUExPQUQ6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPnNhbXBsZXM6IHtzLmVycm9yfTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChzLnN0YXRlID09PSAnc2tpcHBlZCcpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmF5XCI+XHUyNUNGPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgYm9sZCBjb2xvcj1cImdyYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgU0FNUExFIFNFVCBVUExPQUQ6eycgJ31cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmF5XCI+KHJldXNlZCkgc2FtcGxlcyBhbHJlYWR5IGluZ2VzdGVkPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHMudG90YWxUYWJsZXMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JlZW5cIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgYm9sZD5TQU1QTEUgU0VUIFVQTE9BRDogPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmVlblwiPntzLnVwbG9hZGVkVGFibGVzfSBzYW1wbGUgdGFibGVzIHVwbG9hZGVkPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufSk7XG4iLCAiaW1wb3J0IHtCb3gsIFRleHR9IGZyb20gJ2luayc7XG5pbXBvcnQgdHlwZSB7UmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge29ic2VydmVyfSBmcm9tICdtb2J4LXJlYWN0LWxpdGUnO1xuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vLi4vc3RvcmUubWpzJztcbmltcG9ydCB7U3Bpbm5lcn0gZnJvbSAnLi9TcGlubmVyLmpzJztcblxudHlwZSBUUHJvcHMgPSB7XG4gICAgcmVhZG9ubHkgc3RvcmU6IFRTdG9yZTtcbn07XG5cbmNvbnN0IFNUQUdFX0xBQkVMOiBSZWNvcmQ8XG4gICAgJ2NsYXNzaWZ5aW5nJyB8ICdkZXNjcmliaW5nJyB8ICdtYXNraW5nJyB8ICdmaW5hbGl6aW5nJyxcbiAgICBzdHJpbmdcbj4gPSB7XG4gICAgY2xhc3NpZnlpbmc6ICdDTEFTU0lGWUlORycsXG4gICAgZGVzY3JpYmluZzogJ0RFU0NSSUJJTkcnLFxuICAgIG1hc2tpbmc6ICdHRU5FUkFUSU5HIE1BU0tTJyxcbiAgICBmaW5hbGl6aW5nOiAnRklOQUxJWklORycsXG59O1xuXG5jb25zdCBmb3JtYXRLID0gKG46IG51bWJlcik6IHN0cmluZyA9PiBgJHsobiAvIDEwMDApLnRvRml4ZWQoMSl9S2A7XG5cbmV4cG9ydCBjb25zdCBFbnJpY2ggPSBvYnNlcnZlcigoe3N0b3JlfTogVFByb3BzKTogUmVhY3ROb2RlID0+IHtcbiAgICBjb25zdCBzID0gc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uO1xuXG4gICAgaWYgKHMuc3RhdGUgPT09ICdpZGxlJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocy5zdGF0ZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+RU5SSUNIOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj57cy5lcnJvcn08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocy5zdGF0ZSA9PT0gJ2RvbmUnKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JlZW5cIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkVOUklDSDogPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hIGVucmljaG1lbnQgY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAge3MucmV1c2VkID8gJyAocmV1c2VkKScgOiAnJ31cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocy5zdGF0ZSA9PT0gJ3F1ZXVlZCcpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkVOUklDSDogPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JheVwiPnF1ZXVlZDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGxhYmVsID0gcy5zdGFnZSA/IFNUQUdFX0xBQkVMW3Muc3RhZ2VdIDogJ0VOUklDSElORyc7XG5cbiAgICBjb25zdCBzaG93VG9rZW5zID0gcy5zdGFnZSA9PT0gJ2Rlc2NyaWJpbmcnICYmIHMudG9rZW5zSW4gIT09IG51bGw7XG4gICAgY29uc3Qgc2hvd0NvbHVtbnMgPVxuICAgICAgICAocy5zdGFnZSA9PT0gJ2NsYXNzaWZ5aW5nJyB8fCBzLnN0YWdlID09PSAnbWFza2luZycpICYmXG4gICAgICAgIHMuY29sdW1uc1RvdGFsICE9PSBudWxsICYmXG4gICAgICAgIHMuY29sdW1uc1RvdGFsID4gMDtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgPFRleHQgYm9sZD57bGFiZWx9OiA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICB7cy5zdGFnZSA9PT0gJ2NsYXNzaWZ5aW5nJ1xuICAgICAgICAgICAgICAgICAgICA/ICdjbGFzc2lmeWluZyByZWxhdGlvbnMgJiBhdHRyaWJ1dGVzLi4uJ1xuICAgICAgICAgICAgICAgICAgICA6IHMuc3RhZ2UgPT09ICdkZXNjcmliaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgID8gJ2dlbmVyYXRpbmcgc2NoZW1hIGRlc2NyaXB0aW9uLi4uJ1xuICAgICAgICAgICAgICAgICAgICAgIDogcy5zdGFnZSA9PT0gJ21hc2tpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdpZGVudGlmeWluZyBzZW5zaXRpdmUgY29sdW1ucy4uLidcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcy5zdGFnZSA9PT0gJ2ZpbmFsaXppbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3dyaXRpbmcgZW5yaWNoZWQgc2NoZW1hLi4uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdlbnJpY2hpbmcgc2NoZW1hLi4uJ31cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIHtzaG93VG9rZW5zID8gKFxuICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgICAgICAoXHUyMTkxIHtmb3JtYXRLKHMudG9rZW5zSW4gPz8gMCl9IFx1MjE5MyB7Zm9ybWF0SyhzLnRva2Vuc091dCA/PyAwKX0pXG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7c2hvd0NvbHVtbnMgPyAoXG4gICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAgICAgICh7KHMuY29sdW1uc0RvbmUgPz8gMCkudG9Mb2NhbGVTdHJpbmcoKX0gL3snICd9XG4gICAgICAgICAgICAgICAgICAgIHsocy5jb2x1bW5zVG90YWwgPz8gMCkudG9Mb2NhbGVTdHJpbmcoKX0gY29sdW1ucylcbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn0pO1xuIiwgImltcG9ydCB7Qm94LCBUZXh0fSBmcm9tICdpbmsnO1xuaW1wb3J0IHR5cGUge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtvYnNlcnZlcn0gZnJvbSAnbW9ieC1yZWFjdC1saXRlJztcbmltcG9ydCB0ZXJtaW5hbExpbmsgZnJvbSAndGVybWluYWwtbGluayc7XG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi8uLi9zdG9yZS5tanMnO1xuaW1wb3J0IHtTcGlubmVyfSBmcm9tICcuL1NwaW5uZXIuanMnO1xuXG50eXBlIFRQcm9wcyA9IHtcbiAgICByZWFkb25seSBzdG9yZTogVFN0b3JlO1xufTtcblxuY29uc3QgU3RhdHNMaW5lID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFRQcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgY29uc3Qge2NvdW50c30gPSBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdFNhbXBsaW5nO1xuXG4gICAgY29uc3QgcGFydHMgPSBbXG4gICAgICAgIGNvdW50cy5kZXNjcmliZWRUYWJsZXMgPiAwXG4gICAgICAgICAgICA/IGAke2NvdW50cy5kZXNjcmliZWRUYWJsZXN9IHRhYmxlcyBkZXNjcmliZWRgXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGNvdW50cy5lbWJlZGRlZFRhYmxlcyA+IDBcbiAgICAgICAgICAgID8gYCR7Y291bnRzLmVtYmVkZGVkVGFibGVzfSBkZXNjcmlwdGlvbnMgZW1iZWRkZWRgXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGNvdW50cy5zY2FubmVkVGFibGVzID4gMFxuICAgICAgICAgICAgPyBgJHtjb3VudHMuc2Nhbm5lZFRhYmxlc30gdGFibGVzIHNjYW5uZWQgZm9yIGZvcmVpZ24ga2V5c2BcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgY291bnRzLmZvcmVpZ25LZXlzRm91bmQgPiAwXG4gICAgICAgICAgICA/IGAke2NvdW50cy5mb3JlaWduS2V5c0ZvdW5kfSBmb3JlaWduIGtleXMgZm91bmRgXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgXS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICA8VGV4dD57JyAgJ308L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyYXlcIj57cGFydHMuam9pbignIFx1MDBCNyAnKX08L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59KTtcblxuZXhwb3J0IGNvbnN0IEFuYWx5emUgPSBvYnNlcnZlcigoe3N0b3JlfTogVFByb3BzKTogUmVhY3ROb2RlID0+IHtcbiAgICBjb25zdCBzID0gc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RTYW1wbGluZztcblxuICAgIGlmIChzLnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHMuc3RhdGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkFOQUxZWkU6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cInJlZFwiPntzLmVycm9yfTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChzLnN0YXRlID09PSAnZG9uZScpIHtcbiAgICAgICAgY29uc3Qge2NvdW50c30gPSBzO1xuICAgICAgICBjb25zdCBsYW5kaW5nVVJMID0gc3RvcmUubGFuZGluZ1VSTDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZ3JlZW5cIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+QU5BTFlaRTogPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImdyZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmFseXplZCB7Y291bnRzLnRvdGFsVGFibGVzfSB0YWJsZXMsIGZvdW5keycgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjb3VudHMuZm9yZWlnbktleXNGb3VuZH0gZm9yZWlnbiBrZXlzXG4gICAgICAgICAgICAgICAgICAgICAgICB7cy5yZXVzZWQgPyAnIChyZXVzZWQpJyA6ICcnfVxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAge2xhbmRpbmdVUkwgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHBhZGRpbmdYPXsyfSBwYWRkaW5nWT17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0PlNlbWFudGljIGRhdGFiYXNlIGNvbnRleHQgTUNQIGlzIHJlYWR5OjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImN5YW5cIiB1bmRlcmxpbmU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0ZXJtaW5hbExpbmsobGFuZGluZ1VSTCwgbGFuZGluZ1VSTCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2s6IChfdGV4dCwgdXJsKSA9PiB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHtzdGFnZSwgY291bnRzfSA9IHM7XG5cbiAgICBjb25zdCBtYWluVGV4dCA9XG4gICAgICAgIHN0YWdlID09PSAnZGVzY3JpYmluZydcbiAgICAgICAgICAgID8gYGRlc2NyaWJpbmcgdGFibGVzICgke2NvdW50cy5kZXNjcmliZWRUYWJsZXN9LyR7Y291bnRzLnRvdGFsVGFibGVzfSkuLi5gXG4gICAgICAgICAgICA6IHN0YWdlID09PSAnZW1iZWRkaW5nJ1xuICAgICAgICAgICAgICA/IGBlbWJlZGRpbmcgZGVzY3JpcHRpb25zICgke2NvdW50cy5lbWJlZGRlZFRhYmxlc30vJHtjb3VudHMudG90YWxFbWJlZGRpbmdzfSkuLi5gXG4gICAgICAgICAgICAgIDogc3RhZ2UgPT09ICdkaXNjb3ZlcmluZydcbiAgICAgICAgICAgICAgICA/IGBkaXNjb3ZlcmluZyBmb3JlaWduIGtleXMgaW4gdGFibGUgJHtjb3VudHMuc2Nhbm5lZFRhYmxlc30vJHtjb3VudHMudG90YWxUYWJsZXN9Li4uYFxuICAgICAgICAgICAgICAgIDogcy5zdGF0ZSA9PT0gJ3F1ZXVlZCdcbiAgICAgICAgICAgICAgICAgID8gJ3F1ZXVlZCdcbiAgICAgICAgICAgICAgICAgIDogJ3N0YXJ0aW5nIGFuYWx5c2lzLi4uJztcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+QU5BTFlaRTogPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0PnttYWluVGV4dH08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxTdGF0c0xpbmUgc3RvcmU9e3N0b3JlfSAvPlxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dD57JyAgJ308L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAgICAgICAgICAgIHNhZmUgdG8gQ3RybCtDIFx1MjAxNCByZXJ1biBhZ2FpbnN0IHRoZSBzYW1lIGRhdGFiYXNlIGFueSB0aW1lIHRvXG4gICAgICAgICAgICAgICAgICAgIHJlc3VtZSBtb25pdG9yaW5nXG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59KTtcbiIsICJpbXBvcnQge0JveCwgVGV4dH0gZnJvbSAnaW5rJztcbmltcG9ydCB0eXBlIHtSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBkZWRlbnQgZnJvbSAnZGVkZW50JztcbmltcG9ydCB7Q0xJRU5UX1ZFUlNJT059IGZyb20gJy4uLy4uL2xpYi92ZXJzaW9uLm1qcyc7XG5cbmV4cG9ydCBjb25zdCBTcGxhc2ggPSAoKTogUmVhY3ROb2RlID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249eydyb3cnfSBtYXJnaW5ZPXsxfT5cbiAgICAgICAgICAgIDxCb3ggcGFkZGluZ1g9ezJ9PlxuICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICB7ZGVkZW50YFxuICAgICAgICAgICAgICAgICAgICAgICAgXHUyNTlCXHUyNTgwXHUyNTk2XHUyNTlCXHUyNTgwXHUyNTk2XHUyNTlFXHUyNTgwXHUyNTk2XHUyNTgwXHUyNTlCXHUyNTk4XHUyNThDIFx1MjU4Q1xuICAgICAgICAgICAgICAgICAgICAgICAgXHUyNThDIFx1MjU4Q1x1MjU5OVx1MjU4NFx1MjU5OFx1MjU4QyAgIFx1MjU4QyBcdTI1OURcdTI1OUVcbiAgICAgICAgICAgICAgICAgICAgICAgIFx1MjU4QyBcdTI1OENcdTI1OEMgXHUyNThDXHUyNThDIFx1MjU5NiBcdTI1OEMgXHUyNTlFXHUyNTlEXHUyNTk2XG4gICAgICAgICAgICAgICAgICAgICAgICBcdTI1ODBcdTI1ODAgXHUyNTgwXHUyNTgwIFx1MjU5RFx1MjU4MCAgXHUyNTk4IFx1MjU5OCBcdTI1OThcbiAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9ezQyfSBhbGlnbkl0ZW1zPXsnY2VudGVyJ30gZmxleERpcmVjdGlvbj17J2NvbHVtbid9PlxuICAgICAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj17J2NvbHVtbid9PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXsnY3lhbid9PmRiY3R4LmlvPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+e2AgXHUyMDE0IHYke0NMSUVOVF9WRVJTSU9OfWB9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBSSBFbnJpY2hlZCBEYXRhYmFzZSBEb2NzIGZvciBIdW1hbnMgJiBDb2RpbmcgQWdlbnRzLidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59O1xuIiwgIntcbiAgICBcIm5hbWVcIjogXCJkYmN0eFwiLFxuICAgIFwidmVyc2lvblwiOiBcIjIuMS4xXCIsXG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIkFJLWVucmljaGVkIGRhdGFiYXNlIGNvbnRleHQgZm9yIGh1bWFucyBhbmQgY29kaW5nIGFnZW50c1wiLFxuICAgIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxuICAgIFwibWFpblwiOiBcImRpc3QvaW5kZXgubWpzXCIsXG4gICAgXCJiaW5cIjoge1xuICAgICAgICBcImRiY3R4XCI6IFwiLi9kaXN0L2luZGV4Lm1qc1wiXG4gICAgfSxcbiAgICBcInNjcmlwdHNcIjoge1xuICAgICAgICBcInN0YXJ0XCI6IFwidHN1cCAmJiBub2RlIC4vZGlzdC9pbmRleC5tanNcIixcbiAgICAgICAgXCJkZXZcIjogXCJ0c3VwIC0td2F0Y2hcIixcbiAgICAgICAgXCJidWlsZFwiOiBcInRzdXBcIixcbiAgICAgICAgXCJ0eXBlY2hlY2tcIjogXCJ0c2MgLS1ub0VtaXRcIixcbiAgICAgICAgXCJidWlsZDp0czp3YXRjaFwiOiBcInRzYyAtLXdhdGNoIC0tcHJlc2VydmVXYXRjaE91dHB1dCAtLW5vRW1pdFwiLFxuICAgICAgICBcInRlc3RcIjogXCJ0c3ggLS10ZXN0IHNyYy9mbG93LyoudGVzdC5tdHNcIlxuICAgIH0sXG4gICAgXCJrZXl3b3Jkc1wiOiBbXG4gICAgICAgIFwicG9zdGdyZXNxbFwiLFxuICAgICAgICBcImRhdGFiYXNlXCIsXG4gICAgICAgIFwic2NoZW1hXCIsXG4gICAgICAgIFwiaW50cm9zcGVjdGlvblwiLFxuICAgICAgICBcImNsaVwiLFxuICAgICAgICBcImFpXCIsXG4gICAgICAgIFwiY29udGV4dFwiLFxuICAgICAgICBcImRvY3VtZW50YXRpb25cIlxuICAgIF0sXG4gICAgXCJhdXRob3JcIjoge1xuICAgICAgICBcIm5hbWVcIjogXCJBaXJTdGF0ZVwiLFxuICAgICAgICBcImVtYWlsXCI6IFwiaGVsbG9AYWlyc3RhdGUuZGV2XCIsXG4gICAgICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9haXJzdGF0ZS5kZXZcIlxuICAgIH0sXG4gICAgXCJob21lcGFnZVwiOiBcImh0dHBzOi8vZGJjdHguaW9cIixcbiAgICBcInJlcG9zaXRvcnlcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vZGJjdHgvZGJjdHhcIlxuICAgIH0sXG4gICAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiOiBcIjUuOTAuMjBcIixcbiAgICAgICAgXCJAdHJwYy9jbGllbnRcIjogXCIxMS44LjFcIixcbiAgICAgICAgXCJAdHJwYy9yZWFjdC1xdWVyeVwiOiBcIjExLjguMVwiLFxuICAgICAgICBcIkB0cnBjL3NlcnZlclwiOiBcIjExLjguMVwiLFxuICAgICAgICBcImNvbW1hbmRlclwiOiBcIjE0LjAuM1wiLFxuICAgICAgICBcImRlZGVudFwiOiBcIjEuNy4xXCIsXG4gICAgICAgIFwiZXMtdG9vbGtpdFwiOiBcIjEuNDQuMFwiLFxuICAgICAgICBcImV2ZW50c291cmNlXCI6IFwiNC4xLjBcIixcbiAgICAgICAgXCJpbmtcIjogXCI2LjYuMFwiLFxuICAgICAgICBcIm1vYnhcIjogXCI2LjE1LjBcIixcbiAgICAgICAgXCJtb2J4LXJlYWN0LWxpdGVcIjogXCI0LjEuMVwiLFxuICAgICAgICBcIm9wZW5cIjogXCIxMS4wLjBcIixcbiAgICAgICAgXCJwLXF1ZXVlXCI6IFwiOC4wLjFcIixcbiAgICAgICAgXCJwZ1wiOiBcIjguMTguMFwiLFxuICAgICAgICBcInJlYWN0XCI6IFwiMTkuMi40XCIsXG4gICAgICAgIFwic2NvcGUtdXRpbGl0aWVzXCI6IFwiMi4yLjFcIixcbiAgICAgICAgXCJzc2gtY29uZmlnXCI6IFwiNS4wLjRcIixcbiAgICAgICAgXCJzc2gyXCI6IFwiMS4xNy4wXCIsXG4gICAgICAgIFwidGVybWluYWwtbGlua1wiOiBcIjUuMC4wXCIsXG4gICAgICAgIFwidXVpZHY3XCI6IFwiMS4wLjJcIixcbiAgICAgICAgXCJ3aW5zdG9uXCI6IFwiMy4xOS4wXCIsXG4gICAgICAgIFwiem9kXCI6IFwiNC4zLjZcIlxuICAgIH0sXG4gICAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICBcIkBkYmN0eC9jb21tb25cIjogXCJ3b3Jrc3BhY2U6KlwiLFxuICAgICAgICBcIkBkYmN0eC9jb3JlXCI6IFwid29ya3NwYWNlOipcIixcbiAgICAgICAgXCJAdHlwZXMvbm9kZVwiOiBcIjI0LjAuMFwiLFxuICAgICAgICBcIkB0eXBlcy9wZ1wiOiBcIjguMTYuMFwiLFxuICAgICAgICBcIkB0eXBlcy9yZWFjdFwiOiBcIjE5LjIuMTBcIixcbiAgICAgICAgXCJAdHlwZXMvc3NoMlwiOiBcIjEuMTUuNVwiLFxuICAgICAgICBcImNvbmN1cnJlbnRseVwiOiBcIjkuMi4xXCIsXG4gICAgICAgIFwiY3Jvc3MtZW52XCI6IFwiNy4wLjNcIixcbiAgICAgICAgXCJwcmV0dGllclwiOiBcIjMuOC4xXCIsXG4gICAgICAgIFwidHN1cFwiOiBcIjguNS4wXCIsXG4gICAgICAgIFwidHN4XCI6IFwiNC4yMC40XCIsXG4gICAgICAgIFwidHlwZXNjcmlwdFwiOiBcIjUuOS4zXCJcbiAgICB9LFxuICAgIFwidm9sdGFcIjoge1xuICAgICAgICBcIm5vZGVcIjogXCIyNC4wLjBcIlxuICAgIH0sXG4gICAgXCJmaWxlc1wiOiBbXG4gICAgICAgIFwiZGlzdC9cIlxuICAgIF1cbn1cbiIsICJpbXBvcnQgcGtnIGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbicgd2l0aCB7dHlwZTogJ2pzb24nfTtcblxuZXhwb3J0IGNvbnN0IENMSUVOVF9WRVJTSU9OOiBzdHJpbmcgPSBwa2cudmVyc2lvbjtcbiIsICJpbXBvcnQge0JveCwgVGV4dCwgdXNlSW5wdXR9IGZyb20gJ2luayc7XG5pbXBvcnQgdHlwZSB7UmVhY3ROb2RlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge29ic2VydmVyfSBmcm9tICdtb2J4LXJlYWN0LWxpdGUnO1xuaW1wb3J0IHtydW5JbkFjdGlvbn0gZnJvbSAnbW9ieCc7XG5pbXBvcnQgdHlwZSB7VFN0b3JlLCBURGF0YWJhc2VMaXN0SXRlbX0gZnJvbSAnLi4vLi4vc3RvcmUubWpzJztcblxudHlwZSBUUHJvcHMgPSB7XG4gICAgcmVhZG9ubHkgc3RvcmU6IFRTdG9yZTtcbn07XG5cbi8vIHNlbGVjdGVkSW5kZXggPT09IGl0ZW1zLmxlbmd0aCBpcyB0aGUgc2VudGluZWwgZm9yIHRoZSBzeW50aGV0aWMgXCJleGl0XCJcbi8vIHJvdyBhdCB0aGUgYm90dG9tIG9mIHRoZSBwaWNrZXIuIHJ1bkxpc3QgYnJhbmNoZXMgb24gaXQuXG5leHBvcnQgY29uc3QgUElDS0VSX0VYSVRfSU5ERVggPSAocGlja2VyOiB7XG4gICAgcmVhZG9ubHkgaXRlbXM6IFJlYWRvbmx5QXJyYXk8dW5rbm93bj47XG59KTogbnVtYmVyID0+IHBpY2tlci5pdGVtcy5sZW5ndGg7XG5cbmNvbnN0IHN0YXRlTGFiZWwgPSAoXG4gICAgaXRlbTogVERhdGFiYXNlTGlzdEl0ZW0sXG4pOiB7XG4gICAgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNvbG9yOiAnZ3JlZW4nIHwgJ3llbGxvdycgfCAncmVkJyB8ICdjeWFuJyB8ICdncmF5Jztcbn0gPT4ge1xuICAgIGlmIChpdGVtLnBvc3RTYW1wbGluZy5kb25lKSB7XG4gICAgICAgIHJldHVybiB7dGV4dDogJ2NvbXBsZXRlJywgY29sb3I6ICdncmVlbid9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAgIGl0ZW0ucG9zdEludHJvc3BlY3Rpb24uam9iU3RhdHVzID09PSAnZmFpbGVkJyB8fFxuICAgICAgICBpdGVtLnBvc3RTYW1wbGluZy5qb2JTdGF0dXMgPT09ICdmYWlsZWQnXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB7dGV4dDogJ2ZhaWxlZCBcdTIwMTQgc2VsZWN0IHRvIHJldHJ5JywgY29sb3I6ICd5ZWxsb3cnfTtcbiAgICB9XG4gICAgaWYgKCFpdGVtLnNhbXBsZXNJbmdlc3RlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dDogJ3NhbXBsZXMgbm90IHVwbG9hZGVkIFx1MjAxNCBuZWVkcyBsb2NhbCByZXJ1bicsXG4gICAgICAgICAgICBjb2xvcjogJ3llbGxvdycsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaXRlbS5wb3N0U2FtcGxpbmcuam9iU3RhdHVzID09PSAncnVubmluZycgfHxcbiAgICAgICAgaXRlbS5wb3N0U2FtcGxpbmcuam9iU3RhdHVzID09PSAncGVuZGluZydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHt0ZXh0OiAnYW5hbHl6aW5nJywgY29sb3I6ICdjeWFuJ307XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaXRlbS5wb3N0SW50cm9zcGVjdGlvbi5qb2JTdGF0dXMgPT09ICdydW5uaW5nJyB8fFxuICAgICAgICBpdGVtLnBvc3RJbnRyb3NwZWN0aW9uLmpvYlN0YXR1cyA9PT0gJ3BlbmRpbmcnXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB7dGV4dDogJ2VucmljaGluZycsIGNvbG9yOiAnY3lhbid9O1xuICAgIH1cbiAgICBpZiAoaXRlbS5wb3N0SW50cm9zcGVjdGlvbi5kb25lKSB7XG4gICAgICAgIHJldHVybiB7dGV4dDogJ3JlYWR5IHRvIGFuYWx5emUnLCBjb2xvcjogJ2N5YW4nfTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgICAhaXRlbS5wb3N0SW50cm9zcGVjdGlvbi5kb25lICYmXG4gICAgICAgIGl0ZW0ucG9zdEludHJvc3BlY3Rpb24uam9iU3RhdHVzID09PSBudWxsXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiAnc3R1Y2sgXHUyMDE0IG5lZWRzIGxvY2FsIHJlcnVuJyxcbiAgICAgICAgICAgIGNvbG9yOiAneWVsbG93JyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHt0ZXh0OiAndW5rbm93bicsIGNvbG9yOiAnZ3JheSd9O1xufTtcblxuZXhwb3J0IGNvbnN0IERhdGFiYXNlUGlja2VyID0gb2JzZXJ2ZXIoKHtzdG9yZX06IFRQcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gICAgY29uc3QgcGlja2VyID0gc3RvcmUubGlzdFBpY2tlcjtcblxuICAgIHVzZUlucHV0KChfaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICBpZiAocGlja2VyID09PSBudWxsIHx8IHBpY2tlci5zZWxlY3RlZEluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9jdXMgcmFuZ2UgY292ZXJzIFswLi5pdGVtcy5sZW5ndGhdIGluY2x1c2l2ZTsgdGhlIGV4dHJhIHNsb3QgYXRcbiAgICAgICAgLy8gaXRlbXMubGVuZ3RoIGlzIHRoZSBcImV4aXRcIiByb3cuXG4gICAgICAgIGNvbnN0IG1heEluZGV4ID0gcGlja2VyLml0ZW1zLmxlbmd0aDtcbiAgICAgICAgaWYgKGtleS51cEFycm93KSB7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGlja2VyLmZvY3VzZWRJbmRleCA9IE1hdGgubWF4KDAsIHBpY2tlci5mb2N1c2VkSW5kZXggLSAxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGtleS5kb3duQXJyb3cpIHtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBwaWNrZXIuZm9jdXNlZEluZGV4ID0gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgICAgIG1heEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBwaWNrZXIuZm9jdXNlZEluZGV4ICsgMSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5LnJldHVybikge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHBpY2tlci5zZWxlY3RlZEluZGV4ID0gcGlja2VyLmZvY3VzZWRJbmRleDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAocGlja2VyID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXRGb2N1c2VkID0gcGlja2VyLmZvY3VzZWRJbmRleCA9PT0gcGlja2VyLml0ZW1zLmxlbmd0aDtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+c2VsZWN0IGEgZGF0YWJhc2UgdG8gbW9uaXRvcjo8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgICAgICAge3BpY2tlci5pdGVtcy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvY3VzZWQgPSBpbmRleCA9PT0gcGlja2VyLmZvY3VzZWRJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBzdGF0ZUxhYmVsKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNEZXNjcmlwdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRlc2NyaXB0aW9uICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRlc2NyaXB0aW9uLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGtleT17aXRlbS5kYXRhYmFzZUlkfSBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZvY3VzZWQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBib2xkIGNvbG9yPVwiY3lhblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnXHUyNUI4ICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dD57JyAgJ308L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ9e2ZvY3VzZWR9PntpdGVtLm5hbWV9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnICMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2l0ZW0ubGF0ZXN0UmV2aXNpb25OdW1iZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQ+eycgICd9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17bGFiZWwuY29sb3J9IGRpbUNvbG9yPXshZm9jdXNlZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGFiZWwudGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtoYXNEZXNjcmlwdGlvbiA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luTGVmdD17Mn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+e2l0ZW0uZGVzY3JpcHRpb259PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0PiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICB7ZXhpdEZvY3VzZWQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBib2xkIGNvbG9yPVwiY3lhblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnXHUyNUI4ICd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dD57JyAgJ308L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ9e2V4aXRGb2N1c2VkfSBkaW1Db2xvcj17IWV4aXRGb2N1c2VkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIFtleGl0XVxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICAgICAgICAgICAgXHUyMTkxL1x1MjE5MyB0byBtb3ZlLCBlbnRlciB0byBzZWxlY3QsIGN0cmwrYyB0byBxdWl0XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59KTtcbiIsICJpbXBvcnQge21ha2VBdXRvT2JzZXJ2YWJsZX0gZnJvbSAnbW9ieCc7XG5pbXBvcnQgdHlwZSB7VEdhdGVFcnJvckRhdGF9IGZyb20gJ0BkYmN0eC9jb3JlJztcblxuaW1wb3J0IHtUQ29ubmVjdGlvbkNvbmZpZ30gZnJvbSAnLi90eXBlcy9jb25uZWN0aW9uLm1qcyc7XG5cbnR5cGUgVEpvYlN0YXR1cyA9XG4gICAgfCAncGVuZGluZydcbiAgICB8ICdydW5uaW5nJ1xuICAgIHwgJ2NvbXBsZXRlZCdcbiAgICB8ICdmYWlsZWQnXG4gICAgfCAnc3RhbGxlZCdcbiAgICB8ICd1bmtub3duJztcblxuZXhwb3J0IHR5cGUgVERhdGFiYXNlTGlzdEl0ZW0gPSB7XG4gICAgcmVhZG9ubHkgZGF0YWJhc2VJZDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgICByZWFkb25seSBsYXRlc3RSZXZpc2lvbklkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgbGF0ZXN0UmV2aXNpb25OdW1iZXI6IG51bWJlcjtcbiAgICByZWFkb25seSBsYXRlc3RSZXZpc2lvbkNyZWF0ZWRBdDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHNhbXBsZXNJbmdlc3RlZDogYm9vbGVhbjtcbiAgICByZWFkb25seSBwb3N0SW50cm9zcGVjdGlvbjoge1xuICAgICAgICByZWFkb25seSBkb25lOiBib29sZWFuO1xuICAgICAgICByZWFkb25seSBqb2JTdGF0dXM6IFRKb2JTdGF0dXMgfCBudWxsO1xuICAgIH07XG4gICAgcmVhZG9ubHkgcG9zdFNhbXBsaW5nOiB7XG4gICAgICAgIHJlYWRvbmx5IGRvbmU6IGJvb2xlYW47XG4gICAgICAgIHJlYWRvbmx5IGpvYlN0YXR1czogVEpvYlN0YXR1cyB8IG51bGw7XG4gICAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFRTdG9yZU1vZGUgPSAncnVuJyB8ICdsaXN0LXBpY2tpbmcnIHwgJ2xpc3QtdGFpbGluZyc7XG5cbmV4cG9ydCB0eXBlIFRMaXN0UGlja2VyID0ge1xuICAgIGl0ZW1zOiBSZWFkb25seUFycmF5PFREYXRhYmFzZUxpc3RJdGVtPjtcbiAgICBmb2N1c2VkSW5kZXg6IG51bWJlcjtcbiAgICBzZWxlY3RlZEluZGV4OiBudW1iZXIgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgVFN0b3BBZnRlclN0YWdlID1cbiAgICB8ICdzc2gtY29ubmVjdCdcbiAgICB8ICdkYi1jb25uZWN0J1xuICAgIHwgJ2ludHJvc3BlY3Rpb24nXG4gICAgfCAnc2FtcGxpbmcnO1xuXG5leHBvcnQgY29uc3QgU1RPUF9BRlRFUl9TVEFHRVM6IHJlYWRvbmx5IFRTdG9wQWZ0ZXJTdGFnZVtdID0gT2JqZWN0LmZyZWV6ZShbXG4gICAgJ3NzaC1jb25uZWN0JyxcbiAgICAnZGItY29ubmVjdCcsXG4gICAgJ2ludHJvc3BlY3Rpb24nLFxuICAgICdzYW1wbGluZycsXG5dIGFzIGNvbnN0KTtcblxuZXhwb3J0IHR5cGUgVE91dHB1dE9wdGlvbnMgPSB7XG4gICAgb3V0cHV0SW50cm9zcGVjdGlvbkpzb246IHN0cmluZyB8IG51bGw7XG4gICAgdXNlSW50cm9zcGVjdGlvbkpzb25QYXRoOiBzdHJpbmcgfCBudWxsO1xuICAgIHN0b3BBZnRlcjogVFN0b3BBZnRlclN0YWdlIHwgbnVsbDtcbiAgICBhbGxvd0ludHJvc3BlY3Rpb25Kc29uT3ZlcndyaXRlOiBib29sZWFuO1xuICAgIGV4cGxhbmF0aW9uOiBzdHJpbmcgfCBudWxsO1xuICAgIHNlbnNpdGl2ZU1hc2tQYXRoOiBzdHJpbmcgfCBudWxsO1xuICAgIG91dHB1dFNhbXBsZXNEaXI6IHN0cmluZyB8IG51bGw7XG4gICAgYWxsb3dTYW1wbGVPdmVyd3JpdGU6IGJvb2xlYW47XG4gICAgc2tpcEFuYWx5emU6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUU3RvcmUgPSB7XG4gICAgY29uZmlnOiBUQ29ubmVjdGlvbkNvbmZpZztcbiAgICBvdXRwdXRPcHRpb25zOiBUT3V0cHV0T3B0aW9ucztcbiAgICBleGl0UmVxdWVzdGVkOiBib29sZWFuO1xuICAgIG1vZGU6IFRTdG9yZU1vZGU7XG4gICAgbGlzdFBpY2tlcjogVExpc3RQaWNrZXIgfCBudWxsO1xuICAgIC8vIEJhY2tlbmQtaXNzdWVkIFVSTCBwb2ludGluZyB0byB0aGUgcG9zdC1pbmdlc3Qgd2ViIGxhbmRpbmcgcGFnZSBmb3JcbiAgICAvLyB0aGlzIHJldmlzaW9uLiBQb3B1bGF0ZWQgd2hlbiBpbmdlc3RJbnRyb3NwZWN0aW9uIC8gY2hlY2tJbnRyb3NwZWN0aW9uXG4gICAgLy8gcmV0dXJucy4gVHJlYXRlZCBhcyBvcGFxdWUgXHUyMDE0IHRoZSBzZXJ2ZXIgY29udHJvbHMgaG9zdG5hbWUgKyBJRCBlbmNvZGluZy5cbiAgICBsYW5kaW5nVVJMOiBzdHJpbmcgfCBudWxsO1xuICAgIHN0ZXBzOiB7XG4gICAgICAgIHNzaENvbm5lY3Rpb246IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICAgICAgICBuZWVkUGFzc3dvcmQ6IGJvb2xlYW47XG4gICAgICAgICAgICBwYXNzd29yZDogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIHBhc3N3b3JkUHJvbXB0VHlwZTogJ3Bhc3NwaHJhc2UnIHwgJ3Bhc3N3b3JkJyB8IG51bGw7XG4gICAgICAgICAgICBwcm9tcHRDb3VudDogbnVtYmVyO1xuICAgICAgICAgICAgd3JvbmdBdHRlbXB0OiBib29sZWFuO1xuXG4gICAgICAgICAgICBwaWNrZWRIb3N0bmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIHBpY2tlZFBvcnQ6IG51bWJlciB8IG51bGw7XG4gICAgICAgICAgICBwaWNrZWRVc2VybmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIHBpY2tlZEtleVBhdGg6IHN0cmluZyB8IG51bGw7XG5cbiAgICAgICAgICAgIGxvY2FsUG9ydDogbnVtYmVyIHwgbnVsbDtcbiAgICAgICAgICAgIHN0YXRlOlxuICAgICAgICAgICAgICAgIHwgJ2lkbGUnXG4gICAgICAgICAgICAgICAgfCAnY29ubmVjdGluZydcbiAgICAgICAgICAgICAgICB8ICdjb25uZWN0ZWQnXG4gICAgICAgICAgICAgICAgfCAnbmVlZC1wYXNzd29yZCdcbiAgICAgICAgICAgICAgICB8ICdlcnJvcidcbiAgICAgICAgICAgICAgICB8ICdjbG9zZWQnO1xuICAgICAgICAgICAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgICAgIH07XG5cbiAgICAgICAgZGF0YWJhc2VDb25uZWN0aW9uOiB7XG4gICAgICAgICAgICBwYXNzd29yZDogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIHByb21wdENvdW50OiBudW1iZXI7XG4gICAgICAgICAgICB3cm9uZ0F0dGVtcHQ6IGJvb2xlYW47XG5cbiAgICAgICAgICAgIHBpY2tlZEhvc3RuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgcGlja2VkUG9ydDogbnVtYmVyIHwgbnVsbDtcbiAgICAgICAgICAgIHBpY2tlZERhdGFiYXNlOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgcGlja2VkVXNlcm5hbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgICAgICAgICAgIHBvc3RncmVzVmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIHBvc3RncmVzVmVyc2lvbk51bWJlcjogbnVtYmVyIHwgbnVsbDtcbiAgICAgICAgICAgIHN0YXRlOlxuICAgICAgICAgICAgICAgIHwgJ2lkbGUnXG4gICAgICAgICAgICAgICAgfCAnY29ubmVjdGluZydcbiAgICAgICAgICAgICAgICB8ICdjb25uZWN0ZWQnXG4gICAgICAgICAgICAgICAgfCAnbmVlZC1wYXNzd29yZCdcbiAgICAgICAgICAgICAgICB8ICdlcnJvcic7XG4gICAgICAgICAgICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgfTtcblxuICAgICAgICBpbnRyb3NwZWN0aW9uOiB7XG4gICAgICAgICAgICBzdGF0ZTogJ2lkbGUnIHwgJ2ZldGNoaW5nJyB8ICdkb25lJyB8ICdlcnJvcic7XG4gICAgICAgICAgICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIGZpbGVTdGF0c1NraXBwZWQ6IGJvb2xlYW47XG4gICAgICAgICAgICBjb3VudHM6IHtcbiAgICAgICAgICAgICAgICB0YWJsZXM6IG51bWJlcjtcbiAgICAgICAgICAgICAgICB2aWV3czogbnVtYmVyO1xuICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplZFZpZXdzOiBudW1iZXI7XG4gICAgICAgICAgICAgICAgY29sdW1uczogbnVtYmVyO1xuICAgICAgICAgICAgICAgIGluZGV4ZXM6IG51bWJlcjtcbiAgICAgICAgICAgICAgICBmb3JlaWduS2V5czogbnVtYmVyO1xuICAgICAgICAgICAgICAgIGVudW1zOiBudW1iZXI7XG4gICAgICAgICAgICAgICAgYW5hbHl6ZWQ6IG51bWJlcjtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgYWNjb3VudDoge1xuICAgICAgICAgICAgc3RhdGU6XG4gICAgICAgICAgICAgICAgfCAnaWRsZSdcbiAgICAgICAgICAgICAgICB8ICdjcmVhdGluZy1zZXNzaW9uJ1xuICAgICAgICAgICAgICAgIHwgJ3dhaXRpbmcnXG4gICAgICAgICAgICAgICAgfCAnZmV0Y2hpbmctYWNjb3VudCdcbiAgICAgICAgICAgICAgICB8ICdjb25uZWN0ZWQnXG4gICAgICAgICAgICAgICAgfCAnZXJyb3InO1xuICAgICAgICAgICAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICB1cmw6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBzZXNzaW9uSWQ6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBlbWFpbDogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgICAgIH07XG5cbiAgICAgICAgb3V0cHV0SnNvbjoge1xuICAgICAgICAgICAgc3RhdGU6XG4gICAgICAgICAgICAgICAgfCAnaWRsZSdcbiAgICAgICAgICAgICAgICB8ICdwcm9tcHRpbmctb3ZlcndyaXRlJ1xuICAgICAgICAgICAgICAgIHwgJ3dyaXRpbmcnXG4gICAgICAgICAgICAgICAgfCAnZG9uZSdcbiAgICAgICAgICAgICAgICB8ICdlcnJvcic7XG4gICAgICAgICAgICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIGNvbmZpcm1lZDogYm9vbGVhbiB8IG51bGw7XG4gICAgICAgICAgICBwYXRoOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICB9O1xuXG4gICAgICAgIHVzZXJFeHBsYW5hdGlvbjoge1xuICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyB8ICdwcm9tcHRpbmcnIHwgJ2RvbmUnO1xuICAgICAgICAgICAgdmFsdWU6IHN0cmluZyB8IG51bGw7XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2F0ZToge1xuICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyB8ICdjaGVja2luZycgfCAnYmxvY2tlZCcgfCAncGFzc2VkJztcbiAgICAgICAgICAgIG1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG4gICAgICAgIH07XG5cbiAgICAgICAgYmlsbGluZzoge1xuICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyB8ICdjaGVja2luZycgfCAnd2FpdGluZycgfCAnY29ubmVjdGVkJztcbiAgICAgICAgICAgIHVybDogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgfTtcblxuICAgICAgICBzYW1wbGluZzoge1xuICAgICAgICAgICAgc3RhdGU6XG4gICAgICAgICAgICAgICAgfCAnaWRsZSdcbiAgICAgICAgICAgICAgICB8ICdwcm9tcHRpbmctb3ZlcndyaXRlJ1xuICAgICAgICAgICAgICAgIHwgJ2ZldGNoaW5nJ1xuICAgICAgICAgICAgICAgIHwgJ3NraXBwZWQnXG4gICAgICAgICAgICAgICAgfCAnZG9uZSdcbiAgICAgICAgICAgICAgICB8ICdlcnJvcic7XG4gICAgICAgICAgICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIGNvbmZpcm1lZDogYm9vbGVhbiB8IG51bGw7XG4gICAgICAgICAgICBvdXRwdXREaXI6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICByZXVzZWQ6IGJvb2xlYW47XG4gICAgICAgICAgICBjb3VudHM6IHtcbiAgICAgICAgICAgICAgICB0b3RhbFRhYmxlczogbnVtYmVyO1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZFRhYmxlczogbnVtYmVyO1xuICAgICAgICAgICAgICAgIHRvdGFsQ29sdW1uczogbnVtYmVyO1xuICAgICAgICAgICAgICAgIHNhbXBsZWRDb2x1bW5zOiBudW1iZXI7XG4gICAgICAgICAgICAgICAgc2tpcHBlZENvbHVtbnM6IG51bWJlcjtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgaW5nZXN0aW9uOiB7XG4gICAgICAgICAgICBpbnRyb3NwZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyB8ICd1cGxvYWRpbmcnIHwgJ3NraXBwZWQnIHwgJ2RvbmUnIHwgJ2Vycm9yJztcbiAgICAgICAgICAgICAgICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgICBnYXRlOiBUR2F0ZUVycm9yRGF0YSB8IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2FtcGxlczoge1xuICAgICAgICAgICAgICAgIHN0YXRlOiAnaWRsZScgfCAndXBsb2FkaW5nJyB8ICdza2lwcGVkJyB8ICdkb25lJyB8ICdlcnJvcic7XG4gICAgICAgICAgICAgICAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgcmV1c2VkOiBib29sZWFuO1xuICAgICAgICAgICAgICAgIHRvdGFsVGFibGVzOiBudW1iZXI7XG4gICAgICAgICAgICAgICAgdXBsb2FkZWRUYWJsZXM6IG51bWJlcjtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBwb3N0SW50cm9zcGVjdGlvbjoge1xuICAgICAgICAgICAgICAgIHN0YXRlOiAnaWRsZScgfCAncXVldWVkJyB8ICdydW5uaW5nJyB8ICdkb25lJyB8ICdlcnJvcic7XG4gICAgICAgICAgICAgICAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgcmV1c2VkOiBib29sZWFuO1xuICAgICAgICAgICAgICAgIHN0YWdlOlxuICAgICAgICAgICAgICAgICAgICB8ICdjbGFzc2lmeWluZydcbiAgICAgICAgICAgICAgICAgICAgfCAnZGVzY3JpYmluZydcbiAgICAgICAgICAgICAgICAgICAgfCAnbWFza2luZydcbiAgICAgICAgICAgICAgICAgICAgfCAnZmluYWxpemluZydcbiAgICAgICAgICAgICAgICAgICAgfCBudWxsO1xuICAgICAgICAgICAgICAgIHRva2Vuc0luOiBudW1iZXIgfCBudWxsO1xuICAgICAgICAgICAgICAgIHRva2Vuc091dDogbnVtYmVyIHwgbnVsbDtcbiAgICAgICAgICAgICAgICBjb2x1bW5zRG9uZTogbnVtYmVyIHwgbnVsbDtcbiAgICAgICAgICAgICAgICBjb2x1bW5zVG90YWw6IG51bWJlciB8IG51bGw7XG4gICAgICAgICAgICAgICAgam9iSWQ6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcG9zdFNhbXBsaW5nOiB7XG4gICAgICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyB8ICdxdWV1ZWQnIHwgJ3J1bm5pbmcnIHwgJ2RvbmUnIHwgJ2Vycm9yJztcbiAgICAgICAgICAgICAgICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgICByZXVzZWQ6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgc3RhZ2U6ICdkZXNjcmliaW5nJyB8ICdlbWJlZGRpbmcnIHwgJ2Rpc2NvdmVyaW5nJyB8IG51bGw7XG4gICAgICAgICAgICAgICAgY291bnRzOiB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsVGFibGVzOiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlZFRhYmxlczogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZFRhYmxlczogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB0b3RhbEVtYmVkZGluZ3M6IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgc2Nhbm5lZFRhYmxlczogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBmb3JlaWduS2V5c0ZvdW5kOiBudW1iZXI7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBqb2JJZDogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVBcHBTdG9yZSA9IChcbiAgICBjb25maWc6IFRDb25uZWN0aW9uQ29uZmlnLFxuICAgIG91dHB1dE9wdGlvbnM6IFRPdXRwdXRPcHRpb25zLFxuKSA9PiB7XG4gICAgY29uc3Qgc3RvcmU6IFRTdG9yZSA9IHtcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBvdXRwdXRPcHRpb25zLFxuICAgICAgICBleGl0UmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgbW9kZTogJ3J1bicsXG4gICAgICAgIGxpc3RQaWNrZXI6IG51bGwsXG4gICAgICAgIGxhbmRpbmdVUkw6IG51bGwsXG4gICAgICAgIHN0ZXBzOiB7XG4gICAgICAgICAgICBzc2hDb25uZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogISFjb25maWcuc3NoSG9zdCxcbiAgICAgICAgICAgICAgICBuZWVkUGFzc3dvcmQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkOiBudWxsLFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkUHJvbXB0VHlwZTogbnVsbCxcbiAgICAgICAgICAgICAgICBwcm9tcHRDb3VudDogMCxcbiAgICAgICAgICAgICAgICB3cm9uZ0F0dGVtcHQ6IGZhbHNlLFxuXG4gICAgICAgICAgICAgICAgcGlja2VkSG9zdG5hbWU6IG51bGwsXG4gICAgICAgICAgICAgICAgcGlja2VkUG9ydDogbnVsbCxcbiAgICAgICAgICAgICAgICBwaWNrZWRVc2VybmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgICBwaWNrZWRLZXlQYXRoOiBudWxsLFxuXG4gICAgICAgICAgICAgICAgbG9jYWxQb3J0OiBudWxsLFxuICAgICAgICAgICAgICAgIHN0YXRlOiAnaWRsZScsXG4gICAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBkYXRhYmFzZUNvbm5lY3Rpb246IHtcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogbnVsbCxcbiAgICAgICAgICAgICAgICBwcm9tcHRDb3VudDogMCxcbiAgICAgICAgICAgICAgICB3cm9uZ0F0dGVtcHQ6IGZhbHNlLFxuXG4gICAgICAgICAgICAgICAgcGlja2VkSG9zdG5hbWU6IG51bGwsXG4gICAgICAgICAgICAgICAgcGlja2VkUG9ydDogbnVsbCxcbiAgICAgICAgICAgICAgICBwaWNrZWREYXRhYmFzZTogbnVsbCxcbiAgICAgICAgICAgICAgICBwaWNrZWRVc2VybmFtZTogbnVsbCxcblxuICAgICAgICAgICAgICAgIHBvc3RncmVzVmVyc2lvbjogbnVsbCxcbiAgICAgICAgICAgICAgICBwb3N0Z3Jlc1ZlcnNpb25OdW1iZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGludHJvc3BlY3Rpb246IHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ2lkbGUnLFxuICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgICAgIGZpbGVTdGF0c1NraXBwZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvdW50czoge1xuICAgICAgICAgICAgICAgICAgICB0YWJsZXM6IDAsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdzOiAwLFxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWRWaWV3czogMCxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uczogMCxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhlczogMCxcbiAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleXM6IDAsXG4gICAgICAgICAgICAgICAgICAgIGVudW1zOiAwLFxuICAgICAgICAgICAgICAgICAgICBhbmFseXplZDogMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgYWNjb3VudDoge1xuICAgICAgICAgICAgICAgIHN0YXRlOiAnaWRsZScsXG4gICAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgdXJsOiBudWxsLFxuICAgICAgICAgICAgICAgIHNlc3Npb25JZDogbnVsbCxcbiAgICAgICAgICAgICAgICBlbWFpbDogbnVsbCxcbiAgICAgICAgICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgb3V0cHV0SnNvbjoge1xuICAgICAgICAgICAgICAgIHN0YXRlOiAnaWRsZScsXG4gICAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgY29uZmlybWVkOiBudWxsLFxuICAgICAgICAgICAgICAgIHBhdGg6IG51bGwsXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB1c2VyRXhwbGFuYXRpb246IHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ2lkbGUnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2F0ZToge1xuICAgICAgICAgICAgICAgIHN0YXRlOiAnaWRsZScsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGJpbGxpbmc6IHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ2lkbGUnLFxuICAgICAgICAgICAgICAgIHVybDogbnVsbCxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHNhbXBsaW5nOiB7XG4gICAgICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICBjb25maXJtZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgb3V0cHV0RGlyOiBudWxsLFxuICAgICAgICAgICAgICAgIHJldXNlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgY291bnRzOiB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsVGFibGVzOiAwLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRUYWJsZXM6IDAsXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsQ29sdW1uczogMCxcbiAgICAgICAgICAgICAgICAgICAgc2FtcGxlZENvbHVtbnM6IDAsXG4gICAgICAgICAgICAgICAgICAgIHNraXBwZWRDb2x1bW5zOiAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBpbmdlc3Rpb246IHtcbiAgICAgICAgICAgICAgICBpbnRyb3NwZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAnaWRsZScsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBnYXRlOiBudWxsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2FtcGxlczoge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogJ2lkbGUnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcmV1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxUYWJsZXM6IDAsXG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZGVkVGFibGVzOiAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcG9zdEludHJvc3BlY3Rpb246IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6ICdpZGxlJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHJldXNlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHN0YWdlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB0b2tlbnNJbjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zT3V0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zRG9uZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uc1RvdGFsOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBqb2JJZDogbnVsbCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBvc3RTYW1wbGluZzoge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogJ2lkbGUnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcmV1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxUYWJsZXM6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmliZWRUYWJsZXM6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZFRhYmxlczogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRW1iZWRkaW5nczogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5uZWRUYWJsZXM6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduS2V5c0ZvdW5kOiAwLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBqb2JJZDogbnVsbCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG1ha2VBdXRvT2JzZXJ2YWJsZShcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgICBhdXRvQmluZDogdHJ1ZSxcbiAgICAgICAgICAgIGRlZXA6IHRydWUsXG4gICAgICAgIH0sXG4gICAgKTtcbn07XG5cbmV4cG9ydCB0eXBlIFRBcHBTdG9yZSA9IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUFwcFN0b3JlPjtcbiIsICJpbXBvcnQge2V4aXN0c1N5bmN9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtob21lZGlyfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7cmVzb2x2ZX0gZnJvbSAnbm9kZTpwYXRoJztcblxudHlwZSBUUGF0aFZhbGlkYXRpb25SZXN1bHQgPVxuICAgIHwge3ZhbGlkOiB0cnVlOyBleHBhbmRlZFBhdGg6IHN0cmluZ31cbiAgICB8IHt2YWxpZDogZmFsc2U7IGVycm9yOiBzdHJpbmd9O1xuXG50eXBlIFRQYXRoT3B0aW9uS2V5ID1cbiAgICB8ICdzc2xjZXJ0J1xuICAgIHwgJ3NzbGtleSdcbiAgICB8ICdzc2xyb290Y2VydCdcbiAgICB8ICdzc2hLZXknXG4gICAgfCAnc2Vuc2l0aXZlTWFzaydcbiAgICB8ICd1c2VJbnRyb3NwZWN0aW9uSnNvbic7XG5cbmV4cG9ydCB0eXBlIFRQYXRoVmFsaWRhdGlvbkVycm9yID0ge1xuICAgIG9wdGlvbjogc3RyaW5nO1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBlcnJvcjogc3RyaW5nO1xufTtcblxuY29uc3QgZXhwYW5kVGlsZGUgPSAocGF0aDogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgcGF0aC5zdGFydHNXaXRoKCd+LycpIHx8IHBhdGggPT09ICd+J1xuICAgICAgICA/IHBhdGgucmVwbGFjZSgvXn4vLCBob21lZGlyKCkpXG4gICAgICAgIDogcGF0aDtcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZVBhdGggPSAocGF0aDogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgcmVzb2x2ZShleHBhbmRUaWxkZShwYXRoKSk7XG5cbmNvbnN0IHZhbGlkYXRlUGF0aEV4aXN0cyA9IChwYXRoOiBzdHJpbmcpOiBUUGF0aFZhbGlkYXRpb25SZXN1bHQgPT4ge1xuICAgIGNvbnN0IGV4cGFuZGVkUGF0aCA9IG5vcm1hbGl6ZVBhdGgocGF0aCk7XG5cbiAgICByZXR1cm4gZXhpc3RzU3luYyhleHBhbmRlZFBhdGgpXG4gICAgICAgID8ge3ZhbGlkOiB0cnVlLCBleHBhbmRlZFBhdGh9XG4gICAgICAgIDoge3ZhbGlkOiBmYWxzZSwgZXJyb3I6IGBQYXRoIGRvZXMgbm90IGV4aXN0OiAke3BhdGh9YH07XG59O1xuXG5jb25zdCBQQVRIX09QVElPTl9MQUJFTFM6IFJlY29yZDxUUGF0aE9wdGlvbktleSwgc3RyaW5nPiA9IHtcbiAgICBzc2xjZXJ0OiAnLS1zc2xjZXJ0JyxcbiAgICBzc2xrZXk6ICctLXNzbGtleScsXG4gICAgc3Nscm9vdGNlcnQ6ICctLXNzbHJvb3RjZXJ0JyxcbiAgICBzc2hLZXk6ICctLXNzaC1rZXknLFxuICAgIHNlbnNpdGl2ZU1hc2s6ICctLXNlbnNpdGl2ZS1tYXNrJyxcbiAgICB1c2VJbnRyb3NwZWN0aW9uSnNvbjogJy0tdXNlLWludHJvc3BlY3Rpb24tanNvbicsXG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVQYXRoT3B0aW9ucyA9IDxcbiAgICBUIGV4dGVuZHMgUGFydGlhbDxSZWNvcmQ8VFBhdGhPcHRpb25LZXksIHN0cmluZz4+LFxuPihcbiAgICBvcHRpb25zOiBULFxuKToge1xuICAgIGVycm9yczogVFBhdGhWYWxpZGF0aW9uRXJyb3JbXTtcbiAgICBleHBhbmRlZFBhdGhzOiBQYXJ0aWFsPFJlY29yZDxUUGF0aE9wdGlvbktleSwgc3RyaW5nPj47XG59ID0+IHtcbiAgICBjb25zdCBwYXRoS2V5czogVFBhdGhPcHRpb25LZXlbXSA9IFtcbiAgICAgICAgJ3NzbGNlcnQnLFxuICAgICAgICAnc3Nsa2V5JyxcbiAgICAgICAgJ3NzbHJvb3RjZXJ0JyxcbiAgICAgICAgJ3NzaEtleScsXG4gICAgICAgICdzZW5zaXRpdmVNYXNrJyxcbiAgICAgICAgJ3VzZUludHJvc3BlY3Rpb25Kc29uJyxcbiAgICBdO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IHBhdGhLZXlzXG4gICAgICAgIC5maWx0ZXIoKGtleSkgPT4gb3B0aW9uc1trZXldICE9PSB1bmRlZmluZWQpXG4gICAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IG9wdGlvbnNba2V5XSBhcyBzdHJpbmc7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZVBhdGhFeGlzdHMocGF0aCk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICBjb25zdCBlcnJvcnMgPSByZXN1bHRzXG4gICAgICAgIC5maWx0ZXIoKHIpID0+ICFyLnJlc3VsdC52YWxpZClcbiAgICAgICAgLm1hcCgocikgPT4gKHtcbiAgICAgICAgICAgIG9wdGlvbjogUEFUSF9PUFRJT05fTEFCRUxTW3Iua2V5XSxcbiAgICAgICAgICAgIHBhdGg6IHIucGF0aCxcbiAgICAgICAgICAgIGVycm9yOiAoci5yZXN1bHQgYXMge3ZhbGlkOiBmYWxzZTsgZXJyb3I6IHN0cmluZ30pLmVycm9yLFxuICAgICAgICB9KSk7XG5cbiAgICBjb25zdCBleHBhbmRlZFBhdGhzID0gcmVzdWx0c1xuICAgICAgICAuZmlsdGVyKChyKSA9PiByLnJlc3VsdC52YWxpZClcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIHIpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgICAgIFtyLmtleV06IChyLnJlc3VsdCBhcyB7dmFsaWQ6IHRydWU7IGV4cGFuZGVkUGF0aDogc3RyaW5nfSlcbiAgICAgICAgICAgICAgICAgICAgLmV4cGFuZGVkUGF0aCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge30gYXMgUGFydGlhbDxSZWNvcmQ8VFBhdGhPcHRpb25LZXksIHN0cmluZz4+LFxuICAgICAgICApO1xuXG4gICAgcmV0dXJuIHtlcnJvcnMsIGV4cGFuZGVkUGF0aHN9O1xufTtcbiIsICJpbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcbmltcG9ydCB7REJDVFhfREVWfSBmcm9tICcuLi9saWIvZW52Lm1qcyc7XG5pbXBvcnQge2xvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyLm1qcyc7XG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi9zdG9yZS5tanMnO1xuaW1wb3J0IHR5cGUge1RGbG93RXZlbnR9IGZyb20gJy4vZXZlbnRzLm1qcyc7XG5pbXBvcnQge3JlZHVjZX0gZnJvbSAnLi9yZWR1Y2VyLm1qcyc7XG5pbXBvcnQge3Byb2plY3RTdG9yZUZyb21GbG93fSBmcm9tICcuL3Byb2plY3Rpb24ubWpzJztcbmltcG9ydCB7aW5pdGlhbEZsb3dTdGF0ZSwgaXNUZXJtaW5hbCwgdHlwZSBURmxvd1N0YXRlfSBmcm9tICcuL3N0YXRlcy5tanMnO1xuaW1wb3J0IHtjbGVhbnVwLCBkcml2ZVNpZGUsIGluaXRpYWxDb250ZXh0fSBmcm9tICcuL2ludGVycHJldGVyLm1qcyc7XG5pbXBvcnQge2NyZWF0ZUZsb3dUZWxlbWV0cnlFbWl0dGVyfSBmcm9tICcuL3RlbGVtZXRyeS1tYXBwZXIubWpzJztcbmltcG9ydCB7XG4gICAgY2xlYXJGbG93U25hcHNob3QsXG4gICAgZXhpdEdyYWNlZnVsbHksXG4gICAgZmlyZVRlbGVtZXRyeUV2ZW50LFxuICAgIHJlZ2lzdGVyRmxvd1NuYXBzaG90LFxufSBmcm9tICcuLi9hcHAvdGVsZW1ldHJ5Lm1qcyc7XG5cbi8vIEFwcGx5IHRoZSBwcm9qZWN0aW9uJ3MgZGVsdGEgb250byB0aGUgbW9ieCBzdG9yZS4gRmllbGQgbmFtZXMgbWF0Y2hcbi8vIHN0b3JlLnN0ZXBzIHNoYXBlIHNvIHRoZSBJbmsgVUkgY29udGludWVzIHRvIHJlYWQgd2hhdCBpdCBhbHdheXMgZGlkLlxuY29uc3QgYXBwbHlQcm9qZWN0aW9uID0gKFxuICAgIHN0b3JlOiBUU3RvcmUsXG4gICAgZGVsdGE6IFJldHVyblR5cGU8dHlwZW9mIHByb2plY3RTdG9yZUZyb21GbG93Pixcbik6IHZvaWQgPT4ge1xuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLmludHJvc3BlY3Rpb24uc3RhdGUgPVxuICAgICAgICAgICAgZGVsdGEuaW5nZXN0aW9uLmludHJvc3BlY3Rpb24uc3RhdGU7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5pbnRyb3NwZWN0aW9uLmVycm9yID1cbiAgICAgICAgICAgIGRlbHRhLmluZ2VzdGlvbi5pbnRyb3NwZWN0aW9uLmVycm9yO1xuICAgICAgICAvLyBwb3N0SW50cm9zcGVjdGlvbiBpcyBvd25lZCBieSBraWNrUG9zdEludHJvc3BlY3Rpb25Qb2xsICtcbiAgICAgICAgLy8gc3RyZWFtUG9zdEludHJvc3BlY3Rpb24gKGRpcmVjdCBzdG9yZSB3cml0ZXMpLiBQcm9qZWN0aW9uIG11c3Qgbm90XG4gICAgICAgIC8vIG1pcnJvciBpdCBcdTIwMTQgZmxvdyBzdGF0ZSBuZXZlciBhZHZhbmNlcyBwYXN0ICdxdWV1ZWQnLCBzbyBhbnkgbWlycm9yXG4gICAgICAgIC8vIGhlcmUgd291bGQgY2xvYmJlciB0aGUgc3RyZWFtJ3MgJ3J1bm5pbmcnLydkb25lJyB3cml0ZXMgb24gZXZlcnlcbiAgICAgICAgLy8gc3Vic2VxdWVudCBkaXNwYXRjaC5cbiAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcuc3RhdGUgPSBkZWx0YS5zYW1wbGluZy5zdGF0ZTtcbiAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcucmV1c2VkID0gZGVsdGEuc2FtcGxpbmcucmV1c2VkO1xuICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5lcnJvciA9IGRlbHRhLnNhbXBsaW5nLmVycm9yO1xuICAgICAgICBPYmplY3QuYXNzaWduKHN0b3JlLnN0ZXBzLnVzZXJFeHBsYW5hdGlvbiwgZGVsdGEudXNlckV4cGxhbmF0aW9uKTtcbiAgICAgICAgaWYgKGRlbHRhLmFjY291bnQpIHtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmFjY291bnQuc3RhdGUgPSBkZWx0YS5hY2NvdW50LnN0YXRlO1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuYWNjb3VudC5lcnJvciA9IGRlbHRhLmFjY291bnQuZXJyb3I7XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBydW5GbG93ID0gYXN5bmMgKHN0b3JlOiBUU3RvcmUpOiBQcm9taXNlPFRGbG93U3RhdGU+ID0+IHtcbiAgICBsZXQgc3RhdGU6IFRGbG93U3RhdGUgPSBpbml0aWFsRmxvd1N0YXRlKHtcbiAgICAgICAgc3RvcEFmdGVyOiBzdG9yZS5vdXRwdXRPcHRpb25zLnN0b3BBZnRlcixcbiAgICAgICAgc3NoRW5hYmxlZDogc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5lbmFibGVkLFxuICAgICAgICBmaWxlTWFza1BhdGg6IHN0b3JlLm91dHB1dE9wdGlvbnMuc2Vuc2l0aXZlTWFza1BhdGgsXG4gICAgICAgIGZyb21JbnRyb3NwZWN0aW9uRmlsZTpcbiAgICAgICAgICAgIHN0b3JlLm91dHB1dE9wdGlvbnMudXNlSW50cm9zcGVjdGlvbkpzb25QYXRoICE9PSBudWxsLFxuICAgICAgICBvdXRwdXRKU09OUGF0aDogc3RvcmUub3V0cHV0T3B0aW9ucy5vdXRwdXRJbnRyb3NwZWN0aW9uSnNvbixcbiAgICAgICAgb3V0cHV0U2FtcGxlc0Rpcjogc3RvcmUub3V0cHV0T3B0aW9ucy5vdXRwdXRTYW1wbGVzRGlyLFxuICAgICAgICBleHBsYW5hdGlvbjogc3RvcmUub3V0cHV0T3B0aW9ucy5leHBsYW5hdGlvbixcbiAgICB9KTtcbiAgICBjb25zdCBjdHggPSBpbml0aWFsQ29udGV4dCgpO1xuICAgIGNvbnN0IHRlbGVtZXRyeSA9IGNyZWF0ZUZsb3dUZWxlbWV0cnlFbWl0dGVyKCk7XG4gICAgY29uc3QgcnVuU3RhcnQgPSBEYXRlLm5vdygpO1xuXG4gICAgcmVnaXN0ZXJGbG93U25hcHNob3QoKCkgPT4gKHtcbiAgICAgICAgbGFzdFBoYXNlOiB0ZWxlbWV0cnkuc25hcHNob3RMYXN0UGhhc2UoKSxcbiAgICAgICAgbGFzdFBoYXNlUGVyY2VudDogdGVsZW1ldHJ5LnNuYXBzaG90UGhhc2VQZXJjZW50KCksXG4gICAgfSkpO1xuXG4gICAgbGV0IHJlc29sdmVUZXJtaW5hbDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgIGNvbnN0IHRlcm1pbmFsUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXMpID0+IHtcbiAgICAgICAgcmVzb2x2ZVRlcm1pbmFsID0gcmVzO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZGlzcGF0Y2ggPSAoZXZlbnQ6IFRGbG93RXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgcHJldiA9IHN0YXRlO1xuICAgICAgICBjb25zdCBuZXh0ID0gcmVkdWNlKHN0YXRlLCBldmVudCk7XG4gICAgICAgIHN0YXRlID0gbmV4dDtcbiAgICAgICAgYXBwbHlQcm9qZWN0aW9uKHN0b3JlLCBwcm9qZWN0U3RvcmVGcm9tRmxvdyhuZXh0KSk7XG4gICAgICAgIHRlbGVtZXRyeS5vbkV2ZW50KHByZXYsIG5leHQsIGV2ZW50LCBzdG9yZSk7XG5cbiAgICAgICAgaWYgKGlzVGVybWluYWwobmV4dCkgJiYgIWlzVGVybWluYWwocHJldikpIHtcbiAgICAgICAgICAgIGNsZWFudXAoY3R4KTtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5leGl0UmVxdWVzdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzb2x2ZVRlcm1pbmFsKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmlyZSBzaWRlIGVmZmVjdHMgZm9yIG5ldyBwaGFzZXMgYXN5bmNocm9ub3VzbHkuIFRoZSBpbnRlcnByZXRlclxuICAgICAgICAvLyBkaXNwYXRjaGVzIG1vcmUgZXZlbnRzIGJhY2sgYXMgd29yayByZXNvbHZlcy5cbiAgICAgICAgaWYgKHByZXYucGhhc2UgIT09IG5leHQucGhhc2UpIHtcbiAgICAgICAgICAgIHZvaWQgZHJpdmVTaWRlKHByZXYsIG5leHQsIHN0b3JlLCBjdHgsIGRpc3BhdGNoKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBmbG93IGludGVycHJldGVyIGVycm9yOiAke1N0cmluZyhlcnIpfWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgICAgLy8gS2ljayBvZmYgdGhlIGZsb3cuXG4gICAgICAgIGRpc3BhdGNoKHtraW5kOiAnc3RhcnQnfSk7XG4gICAgICAgIGF3YWl0IHRlcm1pbmFsUHJvbWlzZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKERCQ1RYX0RFVikge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBydW5GbG93OiAke1N0cmluZyhlcnIpfWAsIHtlcnJvcjogZXJyfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYW51cChjdHgpO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgZXhpdCBzaWduYWw6IGxlZ2FjeSBydW4oKSBhbHNvIG1hcmtlZCBleGl0UmVxdWVzdGVkIGF0IHRoZVxuICAgIC8vIGVuZC4gU3RvcC1hZnRlciBwYXRocyBhZGRpdGlvbmFsbHkgcHJvY2Vzcy5leGl0KDApOyBwcmVzZXJ2ZSB0aGF0XG4gICAgLy8gYmVoYXZpb3IgaGVyZS5cbiAgICBpZiAoXG4gICAgICAgIHN0YXRlLnBoYXNlID09PSAnZG9uZScgJiZcbiAgICAgICAgc3RhdGUuc3RvcEFmdGVyICE9PSBudWxsICYmXG4gICAgICAgIHN0YXRlLnN0b3BBZnRlciAhPT0gJ3NhbXBsaW5nJ1xuICAgICkge1xuICAgICAgICAvLyBNYXRjaCBsZWdhY3k6IHN0b3AtYWZ0ZXIgc3NoLWNvbm5lY3QgLyBkYi1jb25uZWN0IC8gaW50cm9zcGVjdGlvblxuICAgICAgICAvLyBoYXJkLWV4aXQgc28gdGhlIEluayBhcHAgdGVhcmRvd24gZG9lc24ndCBsaW5nZXIuXG4gICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnY2xpLmNvbW1hbmQuY29tcGxldGVkJyxcbiAgICAgICAgICAgIHN1YmNvbW1hbmQ6ICdnZW5lcmF0ZScsXG4gICAgICAgICAgICBkdXJhdGlvbl9tczogRGF0ZS5ub3coKSAtIChydW5TdGFydCA/PyBEYXRlLm5vdygpKSxcbiAgICAgICAgICAgIGZpbmFsX3BoYXNlOiAnZG9uZScsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBleGl0R3JhY2VmdWxseSgwKTtcbiAgICB9XG5cbiAgICBjbGVhckZsb3dTbmFwc2hvdCgpO1xuICAgIHJldHVybiBzdGF0ZTtcbn07XG4iLCAiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBvcyBmcm9tICdub2RlOm9zJztcbmltcG9ydCB3aW5zdG9uIGZyb20gJ3dpbnN0b24nO1xuaW1wb3J0IHtEQkNUWF9ERVZ9IGZyb20gJy4vbGliL2Vudi5tanMnO1xuXG5jb25zdCBsb2dGaWxlID0gcGF0aC5qb2luKG9zLnRtcGRpcigpLCBgZGJjdHgtJHtEYXRlLm5vdygpfS5sb2dgKTtcblxuZXhwb3J0IGNvbnN0IGxvZ2dlciA9IHdpbnN0b24uY3JlYXRlTG9nZ2VyKHtcbiAgICBsZXZlbDogREJDVFhfREVWID8gJ2RlYnVnJyA6ICdpbmZvJyxcbiAgICBmb3JtYXQ6IHdpbnN0b24uZm9ybWF0LmNvbWJpbmUoXG4gICAgICAgIHdpbnN0b24uZm9ybWF0LnRpbWVzdGFtcCgpLFxuICAgICAgICB3aW5zdG9uLmZvcm1hdC5qc29uKCksXG4gICAgKSxcbiAgICB0cmFuc3BvcnRzOiBbbmV3IHdpbnN0b24udHJhbnNwb3J0cy5GaWxlKHtmaWxlbmFtZTogbG9nRmlsZX0pXSxcbn0pO1xuIiwgImltcG9ydCB0eXBlIHtUU3RvcEFmdGVyU3RhZ2V9IGZyb20gJy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQgdHlwZSB7VFBvc3RJbnRyb3NwZWN0aW9uU3RhZ2V9IGZyb20gJ0BkYmN0eC9jb21tb24nO1xuaW1wb3J0IHR5cGUge1RTZW5zaXRpdmVNYXNrLCBUVGFibGVTYW1wbGVFdmVudH0gZnJvbSAnLi4vYXBwL3NhbXBsZS5tanMnO1xuXG4vLyBTaW5nbGUgcmVjb3JkIHN0YXRlIFx1MjAxNCBwYXJhbGxlbCBjb25jZXJucyBleHByZXNzZWQgYXMgc3ViLXN0YXR1cyBmaWVsZHMsXG4vLyBub3QgYXMgbmVzdGVkIHN0YXRlIG1hY2hpbmVzLiBLZWVwcyB0aGUgcmVkdWNlciBvbmUgYmlnIHN3aXRjaCBpbnN0ZWFkXG4vLyBvZiBOIGNvb3JkaW5hdGluZyBtaW5pLW1hY2hpbmVzLlxuXG5leHBvcnQgdHlwZSBURmxvd1BoYXNlID1cbiAgICB8ICdpZGxlJ1xuICAgIHwgJ2Nvbm5lY3Rpbmctc3NoJ1xuICAgIHwgJ2Nvbm5lY3RpbmctZGInXG4gICAgfCAnaW50cm9zcGVjdGluZydcbiAgICB8ICdvdXRwdXQtanNvbidcbiAgICB8ICdjcmVhdGluZy1zZXNzaW9uJ1xuICAgIHwgJ2F3YWl0aW5nLWF1dGhvcml6YXRpb24nXG4gICAgfCAnYXdhaXRpbmctZXhwbGFuYXRpb24nXG4gICAgfCAncHJlZmxpZ2h0LWNoZWNraW5nJ1xuICAgIHwgJ2luZ2VzdGluZy1pbnRyb3NwZWN0aW9uJ1xuICAgIHwgJ3NhbXBsaW5nLW1hc2stcmVzb2x2aW5nJ1xuICAgIHwgJ3NhbXBsaW5nJ1xuICAgIHwgJ3VwbG9hZGluZy1zYW1wbGVzJ1xuICAgIHwgJ2F3YWl0aW5nLXBvc3Qtc2FtcGxpbmcnXG4gICAgfCAnZG9uZSdcbiAgICB8ICdlcnJvcic7XG5cbi8vIFN1Yi1zdGF0dXMgb2YgdGhlIGJhY2tncm91bmQgcG9zdC1pbnRyb3NwZWN0aW9uIGpvYi4gVHJhY2tlZCBhcyBhIGZpZWxkXG4vLyBzbyBpdCBjYW4gYWR2YW5jZSBpbmRlcGVuZGVudGx5IG9mIHRoZSBwcmltYXJ5IHBoYXNlIChlLmcuIGNvbXBsZXRlXG4vLyB3aGlsZSB3ZSdyZSBzdGlsbCBpbiBgc2FtcGxpbmdgIGJlY2F1c2UgYSBmaWxlIG1hc2sgbGV0IHVzIHByb2NlZWQpLlxuZXhwb3J0IHR5cGUgVFBvc3RJbnRyb3NwZWN0aW9uU3ViU3RhdHVzID0ge1xuICAgIHJlYWRvbmx5IHN0YXRlOiAnaWRsZScgfCAncXVldWVkJyB8ICdydW5uaW5nJyB8ICdkb25lJyB8ICdlcnJvcic7XG4gICAgcmVhZG9ubHkgam9iSWQ6IHN0cmluZyB8IG51bGw7XG4gICAgcmVhZG9ubHkgcmV1c2VkOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHN0YWdlOiBUUG9zdEludHJvc3BlY3Rpb25TdGFnZSB8IG51bGw7XG4gICAgcmVhZG9ubHkgdG9rZW5zSW46IG51bWJlciB8IG51bGw7XG4gICAgcmVhZG9ubHkgdG9rZW5zT3V0OiBudW1iZXIgfCBudWxsO1xuICAgIHJlYWRvbmx5IGNvbHVtbnNEb25lOiBudW1iZXIgfCBudWxsO1xuICAgIHJlYWRvbmx5IGNvbHVtbnNUb3RhbDogbnVtYmVyIHwgbnVsbDtcbiAgICByZWFkb25seSBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFRTYW1wbGluZ1N1YlN0YXR1cyA9IHtcbiAgICByZWFkb25seSBtYXNrOiBUU2Vuc2l0aXZlTWFzayB8IG51bGw7XG4gICAgcmVhZG9ubHkgY29sbGVjdGVkOiByZWFkb25seSBUVGFibGVTYW1wbGVFdmVudFtdO1xuICAgIHJlYWRvbmx5IHVwbG9hZGVkVGFibGVzOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgdG90YWxUYWJsZXM6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFRGbG93U3RhdGUgPSB7XG4gICAgcmVhZG9ubHkgcGhhc2U6IFRGbG93UGhhc2U7XG4gICAgcmVhZG9ubHkgc3RvcEFmdGVyOiBUU3RvcEFmdGVyU3RhZ2UgfCBudWxsO1xuICAgIHJlYWRvbmx5IHNzaEVuYWJsZWQ6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgZmlsZU1hc2tQYXRoOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlYWRvbmx5IGZyb21JbnRyb3NwZWN0aW9uRmlsZTogYm9vbGVhbjtcbiAgICByZWFkb25seSBvdXRwdXRKU09OUGF0aDogc3RyaW5nIHwgbnVsbDtcbiAgICByZWFkb25seSBvdXRwdXRTYW1wbGVzRGlyOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlYWRvbmx5IGV4cGxhbmF0aW9uOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlYWRvbmx5IHNlc3Npb25JZDogc3RyaW5nIHwgbnVsbDtcbiAgICByZWFkb25seSByZXZpc2lvbklkOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlYWRvbmx5IGF1dGhUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgICByZWFkb25seSBzYW1wbGVzQWxyZWFkeUluZ2VzdGVkOiBib29sZWFuO1xuICAgIC8vIFNlcnZlci1zdXBwbGllZCBsaXN0IG9mIHRhYmxlcyB0aGF0IG5lZWQgZnJlc2ggc2FtcGxlcyBvbiB0aGlzIHJ1bi5cbiAgICAvLyBOdWxsID0gbm90IHlldCBrbm93biAocHJlLWhhbmRzaGFrZSkuIEVtcHR5ID0gbm90aGluZyB0byBzYW1wbGUuIE5vbi1cbiAgICAvLyBlbXB0eSA9IGZpbHRlciB0aGUgbG9jYWwgc2FtcGxpbmcgbG9vcCB0byBqdXN0IHRoZXNlIHRhYmxlcy5cbiAgICByZWFkb25seSB0YWJsZXNOZWVkaW5nU2FtcGxlczogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsO1xuICAgIHJlYWRvbmx5IHByZWZsaWdodEhpdDogYm9vbGVhbjtcbiAgICByZWFkb25seSBwb3N0SW50cm9zcGVjdGlvbjogVFBvc3RJbnRyb3NwZWN0aW9uU3ViU3RhdHVzO1xuICAgIHJlYWRvbmx5IHNhbXBsaW5nOiBUU2FtcGxpbmdTdWJTdGF0dXM7XG4gICAgcmVhZG9ubHkgZXJyb3JQaGFzZTogVEZsb3dQaGFzZSB8IG51bGw7XG4gICAgcmVhZG9ubHkgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGluaXRpYWxQb3N0SW50cm9zcGVjdGlvbjogVFBvc3RJbnRyb3NwZWN0aW9uU3ViU3RhdHVzID1cbiAgICBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgc3RhdGU6ICdpZGxlJyBhcyBjb25zdCxcbiAgICAgICAgam9iSWQ6IG51bGwsXG4gICAgICAgIHJldXNlZDogZmFsc2UsXG4gICAgICAgIHN0YWdlOiBudWxsLFxuICAgICAgICB0b2tlbnNJbjogbnVsbCxcbiAgICAgICAgdG9rZW5zT3V0OiBudWxsLFxuICAgICAgICBjb2x1bW5zRG9uZTogbnVsbCxcbiAgICAgICAgY29sdW1uc1RvdGFsOiBudWxsLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICB9KTtcblxuZXhwb3J0IGNvbnN0IGluaXRpYWxTYW1wbGluZzogVFNhbXBsaW5nU3ViU3RhdHVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgbWFzazogbnVsbCxcbiAgICBjb2xsZWN0ZWQ6IE9iamVjdC5mcmVlemUoW10gYXMgcmVhZG9ubHkgVFRhYmxlU2FtcGxlRXZlbnRbXSksXG4gICAgdXBsb2FkZWRUYWJsZXM6IDAsXG4gICAgdG90YWxUYWJsZXM6IDAsXG59KTtcblxuZXhwb3J0IGNvbnN0IGluaXRpYWxGbG93U3RhdGUgPSAoYXJnczoge1xuICAgIHJlYWRvbmx5IHN0b3BBZnRlcjogVFN0b3BBZnRlclN0YWdlIHwgbnVsbDtcbiAgICByZWFkb25seSBzc2hFbmFibGVkOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGZpbGVNYXNrUGF0aDogc3RyaW5nIHwgbnVsbDtcbiAgICByZWFkb25seSBmcm9tSW50cm9zcGVjdGlvbkZpbGU6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgb3V0cHV0SlNPTlBhdGg6IHN0cmluZyB8IG51bGw7XG4gICAgcmVhZG9ubHkgb3V0cHV0U2FtcGxlc0Rpcjogc3RyaW5nIHwgbnVsbDtcbiAgICByZWFkb25seSBleHBsYW5hdGlvbjogc3RyaW5nIHwgbnVsbDtcbn0pOiBURmxvd1N0YXRlID0+XG4gICAgT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIHBoYXNlOiAnaWRsZScsXG4gICAgICAgIHN0b3BBZnRlcjogYXJncy5zdG9wQWZ0ZXIsXG4gICAgICAgIHNzaEVuYWJsZWQ6IGFyZ3Muc3NoRW5hYmxlZCxcbiAgICAgICAgZmlsZU1hc2tQYXRoOiBhcmdzLmZpbGVNYXNrUGF0aCxcbiAgICAgICAgZnJvbUludHJvc3BlY3Rpb25GaWxlOiBhcmdzLmZyb21JbnRyb3NwZWN0aW9uRmlsZSxcbiAgICAgICAgb3V0cHV0SlNPTlBhdGg6IGFyZ3Mub3V0cHV0SlNPTlBhdGgsXG4gICAgICAgIG91dHB1dFNhbXBsZXNEaXI6IGFyZ3Mub3V0cHV0U2FtcGxlc0RpcixcbiAgICAgICAgZXhwbGFuYXRpb246IGFyZ3MuZXhwbGFuYXRpb24sXG4gICAgICAgIHNlc3Npb25JZDogbnVsbCxcbiAgICAgICAgcmV2aXNpb25JZDogbnVsbCxcbiAgICAgICAgYXV0aFRva2VuOiBudWxsLFxuICAgICAgICBzYW1wbGVzQWxyZWFkeUluZ2VzdGVkOiBmYWxzZSxcbiAgICAgICAgdGFibGVzTmVlZGluZ1NhbXBsZXM6IG51bGwsXG4gICAgICAgIHByZWZsaWdodEhpdDogZmFsc2UsXG4gICAgICAgIHBvc3RJbnRyb3NwZWN0aW9uOiBpbml0aWFsUG9zdEludHJvc3BlY3Rpb24sXG4gICAgICAgIHNhbXBsaW5nOiBpbml0aWFsU2FtcGxpbmcsXG4gICAgICAgIGVycm9yUGhhc2U6IG51bGwsXG4gICAgICAgIGVycm9yTWVzc2FnZTogbnVsbCxcbiAgICB9KTtcblxuZXhwb3J0IGNvbnN0IGlzVGVybWluYWwgPSAoc3RhdGU6IFRGbG93U3RhdGUpOiBib29sZWFuID0+XG4gICAgc3RhdGUucGhhc2UgPT09ICdkb25lJyB8fCBzdGF0ZS5waGFzZSA9PT0gJ2Vycm9yJztcbiIsICJpbXBvcnQgdHlwZSB7VEZsb3dFdmVudH0gZnJvbSAnLi9ldmVudHMubWpzJztcbmltcG9ydCB7XG4gICAgaW5pdGlhbFBvc3RJbnRyb3NwZWN0aW9uLFxuICAgIHR5cGUgVEZsb3dQaGFzZSxcbiAgICB0eXBlIFRGbG93U3RhdGUsXG59IGZyb20gJy4vc3RhdGVzLm1qcyc7XG5cbi8vIFB1cmUgcmVkdWNlcjogKHN0YXRlLCBldmVudCkgXHUyMTkyIHN0YXRlLiBFeGhhdXN0aXZlIHN3aXRjaCBvdmVyIHRoZVxuLy8gZGlzY3JpbWluYXRlZCB1bmlvbiBzbyBUeXBlU2NyaXB0IGNhdGNoZXMgbWlzc2luZyBjYXNlcyBhdCBjb21waWxlIHRpbWUuXG4vLyBVbnJlbGF0ZWQgZXZlbnRzIChldmVudCBraW5kcyB0aGF0IGRvbid0IGFwcGx5IHRvIHRoZSBjdXJyZW50IHBoYXNlIG9yXG4vLyBzdWItc3RhdHVzKSByZXR1cm4gc3RhdGUgdW5jaGFuZ2VkIFx1MjAxNCBwaW5uZWQgYnkgdGhlIG5vLW9wIGludmFyaWFudCB0ZXN0LlxuXG5jb25zdCBzZXRFcnJvciA9IChcbiAgICBzdGF0ZTogVEZsb3dTdGF0ZSxcbiAgICBwaGFzZTogVEZsb3dQaGFzZSxcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4pOiBURmxvd1N0YXRlID0+ICh7XG4gICAgLi4uc3RhdGUsXG4gICAgcGhhc2U6ICdlcnJvcicsXG4gICAgZXJyb3JQaGFzZTogcGhhc2UsXG4gICAgZXJyb3JNZXNzYWdlOiBtZXNzYWdlLFxufSk7XG5cbmNvbnN0IHN0b3BBZnRlclJlYWNoZWQgPSAoc3RhdGU6IFRGbG93U3RhdGUpOiBURmxvd1N0YXRlID0+ICh7XG4gICAgLi4uc3RhdGUsXG4gICAgcGhhc2U6ICdkb25lJyxcbn0pO1xuXG5leHBvcnQgY29uc3QgcmVkdWNlID0gKHN0YXRlOiBURmxvd1N0YXRlLCBldmVudDogVEZsb3dFdmVudCk6IFRGbG93U3RhdGUgPT4ge1xuICAgIC8vIFNpZGUtY2hhbm5lbDogcG9zdC1pbnRyb3NwZWN0aW9uIHByb2dyZXNzIGNhbiBmaXJlIGluIGFueSBwaGFzZVxuICAgIC8vIHBvc3QtYGluZ2VzdGluZy1pbnRyb3NwZWN0aW9uYC4gVXBkYXRlIHRoZSBzdWItc3RhdHVzIHdpdGhvdXQgY2hhbmdpbmdcbiAgICAvLyBwcmltYXJ5IHBoYXNlLlxuICAgIGlmIChldmVudC5raW5kID09PSAncG9zdC1pbnRyb3NwZWN0aW9uLXByb2dyZXNzJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBwb3N0SW50cm9zcGVjdGlvbjoge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLnBvc3RJbnRyb3NwZWN0aW9uLFxuICAgICAgICAgICAgICAgIHN0YXRlOiAncnVubmluZycsXG4gICAgICAgICAgICAgICAgc3RhZ2U6IGV2ZW50LnN0YWdlLFxuICAgICAgICAgICAgICAgIHRva2Vuc0luOiBldmVudC50b2tlbnNJbixcbiAgICAgICAgICAgICAgICB0b2tlbnNPdXQ6IGV2ZW50LnRva2Vuc091dCxcbiAgICAgICAgICAgICAgICBjb2x1bW5zRG9uZTogZXZlbnQuY29sdW1uc0RvbmUsXG4gICAgICAgICAgICAgICAgY29sdW1uc1RvdGFsOiBldmVudC5jb2x1bW5zVG90YWwsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2luZCA9PT0gJ3Bvc3QtaW50cm9zcGVjdGlvbi1jb21wbGV0ZWQnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHBvc3RJbnRyb3NwZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUucG9zdEludHJvc3BlY3Rpb24sXG4gICAgICAgICAgICAgICAgc3RhdGU6ICdkb25lJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChldmVudC5raW5kID09PSAncG9zdC1pbnRyb3NwZWN0aW9uLWZhaWxlZCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgcG9zdEludHJvc3BlY3Rpb246IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5wb3N0SW50cm9zcGVjdGlvbixcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXZlbnQuZXJyb3IsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIFN0b3AtYWZ0ZXIgaXMgdGhlIHNhbWUgc2hhcGUgcmVnYXJkbGVzcyBvZiBwaGFzZTogZW50ZXIgdGVybWluYWwgYGRvbmVgLlxuICAgIGlmIChldmVudC5raW5kID09PSAnc3RvcC1hZnRlci1yZWFjaGVkJykge1xuICAgICAgICByZXR1cm4gc3RvcEFmdGVyUmVhY2hlZChzdGF0ZSk7XG4gICAgfVxuXG4gICAgLy8gXHUyNTAwXHUyNTAwIHBoYXNlLXNwZWNpZmljIHRyYW5zaXRpb25zIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnaWRsZScpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdzdGFydCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgcGhhc2U6IHN0YXRlLnNzaEVuYWJsZWQgPyAnY29ubmVjdGluZy1zc2gnIDogJ2Nvbm5lY3RpbmctZGInLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnY29ubmVjdGluZy1zc2gnKSB7XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnc3NoLWNvbm5lY3RlZCcgfHwgZXZlbnQua2luZCA9PT0gJ3NzaC1ub3QtbmVlZGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0b3BBZnRlciA9PT0gJ3NzaC1jb25uZWN0J1xuICAgICAgICAgICAgICAgID8gc3RvcEFmdGVyUmVhY2hlZChzdGF0ZSlcbiAgICAgICAgICAgICAgICA6IHsuLi5zdGF0ZSwgcGhhc2U6ICdjb25uZWN0aW5nLWRiJ307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdzc2gtZmFpbGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHNldEVycm9yKHN0YXRlLCAnY29ubmVjdGluZy1zc2gnLCBldmVudC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5waGFzZSA9PT0gJ2Nvbm5lY3RpbmctZGInKSB7XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnZGItY29ubmVjdGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0b3BBZnRlciA9PT0gJ2RiLWNvbm5lY3QnXG4gICAgICAgICAgICAgICAgPyBzdG9wQWZ0ZXJSZWFjaGVkKHN0YXRlKVxuICAgICAgICAgICAgICAgIDogey4uLnN0YXRlLCBwaGFzZTogJ2ludHJvc3BlY3RpbmcnfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ2RiLWZhaWxlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRFcnJvcihzdGF0ZSwgJ2Nvbm5lY3RpbmctZGInLCBldmVudC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5waGFzZSA9PT0gJ2ludHJvc3BlY3RpbmcnKSB7XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnaW50cm9zcGVjdGlvbi1sb2FkZWQnKSB7XG4gICAgICAgICAgICAvLyBPdXRwdXQgSlNPTiB3cml0ZSBpcyBhIHN1Yi1zdGVwIGJlZm9yZSBzdG9wLWFmdGVyLWludHJvc3BlY3Rpb24uXG4gICAgICAgICAgICByZXR1cm4gc3RhdGUub3V0cHV0SlNPTlBhdGggIT09IG51bGxcbiAgICAgICAgICAgICAgICA/IHsuLi5zdGF0ZSwgcGhhc2U6ICdvdXRwdXQtanNvbid9XG4gICAgICAgICAgICAgICAgOiBzdGF0ZS5zdG9wQWZ0ZXIgPT09ICdpbnRyb3NwZWN0aW9uJ1xuICAgICAgICAgICAgICAgICAgPyBzdG9wQWZ0ZXJSZWFjaGVkKHN0YXRlKVxuICAgICAgICAgICAgICAgICAgOiB7Li4uc3RhdGUsIHBoYXNlOiAnY3JlYXRpbmctc2Vzc2lvbid9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnaW50cm9zcGVjdGlvbi1mYWlsZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0RXJyb3Ioc3RhdGUsICdpbnRyb3NwZWN0aW5nJywgZXZlbnQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdvdXRwdXQtanNvbicpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZXZlbnQua2luZCA9PT0gJ291dHB1dC1qc29uLXdyaXR0ZW4nIHx8XG4gICAgICAgICAgICBldmVudC5raW5kID09PSAnb3V0cHV0LWpzb24tc2tpcHBlZCcgfHxcbiAgICAgICAgICAgIGV2ZW50LmtpbmQgPT09ICdvdXRwdXQtanNvbi1ub3QtcmVxdWVzdGVkJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5zdG9wQWZ0ZXIgPT09ICdpbnRyb3NwZWN0aW9uJ1xuICAgICAgICAgICAgICAgID8gc3RvcEFmdGVyUmVhY2hlZChzdGF0ZSlcbiAgICAgICAgICAgICAgICA6IHsuLi5zdGF0ZSwgcGhhc2U6ICdjcmVhdGluZy1zZXNzaW9uJ307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdvdXRwdXQtanNvbi1mYWlsZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0RXJyb3Ioc3RhdGUsICdvdXRwdXQtanNvbicsIGV2ZW50LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnY3JlYXRpbmctc2Vzc2lvbicpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdzZXNzaW9uLWNyZWF0ZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIHNlc3Npb25JZDogZXZlbnQuc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgIHBoYXNlOiAnYXdhaXRpbmctYXV0aG9yaXphdGlvbicsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnZmFzdC1wYXRoLWNvbXBsZXRlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgc2Vzc2lvbklkOiBldmVudC5zZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgYXV0aFRva2VuOiBldmVudC50b2tlbixcbiAgICAgICAgICAgICAgICBwaGFzZTpcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXhwbGFuYXRpb24gIT09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3ByZWZsaWdodC1jaGVja2luZydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2F3YWl0aW5nLWV4cGxhbmF0aW9uJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdhdXRoLW5vdC1uZWVkZWQnKSB7XG4gICAgICAgICAgICAvLyBObyBzZXJ2ZXItc2lkZSBmbG93IGF0IGFsbCBcdTIwMTQgcHJvY2VlZCBzdHJhaWdodCB0byB0ZXJtaW5hbC5cbiAgICAgICAgICAgIHJldHVybiBzdG9wQWZ0ZXJSZWFjaGVkKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ3Nlc3Npb24tZmFpbGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHNldEVycm9yKHN0YXRlLCAnY3JlYXRpbmctc2Vzc2lvbicsIGV2ZW50LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnYXdhaXRpbmctYXV0aG9yaXphdGlvbicpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdhdXRoLWNvbmZpcm1lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgYXV0aFRva2VuOiBldmVudC50b2tlbixcbiAgICAgICAgICAgICAgICBwaGFzZTpcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXhwbGFuYXRpb24gIT09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3ByZWZsaWdodC1jaGVja2luZydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2F3YWl0aW5nLWV4cGxhbmF0aW9uJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdhdXRoLWZhaWxlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRFcnJvcihzdGF0ZSwgJ2F3YWl0aW5nLWF1dGhvcml6YXRpb24nLCBldmVudC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5waGFzZSA9PT0gJ2F3YWl0aW5nLWV4cGxhbmF0aW9uJykge1xuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ2V4cGxhbmF0aW9uLWdpdmVuJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBleHBsYW5hdGlvbjogZXZlbnQudmFsdWUsXG4gICAgICAgICAgICAgICAgcGhhc2U6ICdwcmVmbGlnaHQtY2hlY2tpbmcnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAncHJlZmxpZ2h0LWNoZWNraW5nJykge1xuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ2NoZWNrLWludHJvc3BlY3Rpb24taGl0Jykge1xuICAgICAgICAgICAgLy8gUmV1c2VkIHJldmlzaW9uOiBza2lwIGluZ2VzdCBlbnRpcmVseS4gUG9zdC1pbnRyb3NwZWN0aW9uIHN0YXRlXG4gICAgICAgICAgICAvLyBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIHNlcnZlciByZXR1cm5lZCBhIGpvYiBpZC5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgcmV2aXNpb25JZDogZXZlbnQucmV2aXNpb25JZCxcbiAgICAgICAgICAgICAgICBzYW1wbGVzQWxyZWFkeUluZ2VzdGVkOiBldmVudC5zYW1wbGVzRXhpc3QsXG4gICAgICAgICAgICAgICAgdGFibGVzTmVlZGluZ1NhbXBsZXM6IGV2ZW50LnRhYmxlc05lZWRpbmdTYW1wbGVzLFxuICAgICAgICAgICAgICAgIHByZWZsaWdodEhpdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwb3N0SW50cm9zcGVjdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5wb3N0SW50cm9zcGVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgam9iSWQ6IGV2ZW50LnBvc3RJbnRyb3NwZWN0aW9uSm9iSWQsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucG9zdEludHJvc3BlY3Rpb25Kb2JJZCA9PT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2RvbmUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAncXVldWVkJyxcbiAgICAgICAgICAgICAgICAgICAgcmV1c2VkOiBldmVudC5wb3N0SW50cm9zcGVjdGlvbkpvYklkID09PSBudWxsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGhhc2U6IGV2ZW50LnNhbXBsZXNFeGlzdFxuICAgICAgICAgICAgICAgICAgICA/ICdhd2FpdGluZy1wb3N0LXNhbXBsaW5nJ1xuICAgICAgICAgICAgICAgICAgICA6ICdzYW1wbGluZy1tYXNrLXJlc29sdmluZycsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnY2hlY2staW50cm9zcGVjdGlvbi1taXNzJykge1xuICAgICAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgcGhhc2U6ICdpbmdlc3RpbmctaW50cm9zcGVjdGlvbid9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnaW5nZXN0LWZhaWxlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRFcnJvcihzdGF0ZSwgJ3ByZWZsaWdodC1jaGVja2luZycsIGV2ZW50LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnaW5nZXN0aW5nLWludHJvc3BlY3Rpb24nKSB7XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnaW50cm9zcGVjdGlvbi1pbmdlc3RlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgcmV2aXNpb25JZDogZXZlbnQucmV2aXNpb25JZCxcbiAgICAgICAgICAgICAgICBzYW1wbGVzQWxyZWFkeUluZ2VzdGVkOiBldmVudC5zYW1wbGVzRXhpc3QsXG4gICAgICAgICAgICAgICAgdGFibGVzTmVlZGluZ1NhbXBsZXM6IGV2ZW50LnRhYmxlc05lZWRpbmdTYW1wbGVzLFxuICAgICAgICAgICAgICAgIHBvc3RJbnRyb3NwZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLnBvc3RJbnRyb3NwZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBqb2JJZDogZXZlbnQucG9zdEludHJvc3BlY3Rpb25Kb2JJZCxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wb3N0SW50cm9zcGVjdGlvbkpvYklkID09PSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnZG9uZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdxdWV1ZWQnLFxuICAgICAgICAgICAgICAgICAgICByZXVzZWQ6IGV2ZW50LnBvc3RJbnRyb3NwZWN0aW9uSm9iSWQgPT09IG51bGwsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwaGFzZTogZXZlbnQuc2FtcGxlc0V4aXN0XG4gICAgICAgICAgICAgICAgICAgID8gJ2F3YWl0aW5nLXBvc3Qtc2FtcGxpbmcnXG4gICAgICAgICAgICAgICAgICAgIDogJ3NhbXBsaW5nLW1hc2stcmVzb2x2aW5nJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdpbmdlc3QtZmFpbGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHNldEVycm9yKHN0YXRlLCAnaW5nZXN0aW5nLWludHJvc3BlY3Rpb24nLCBldmVudC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5waGFzZSA9PT0gJ3NhbXBsaW5nLW1hc2stcmVzb2x2aW5nJykge1xuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ21hc2stbG9hZGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBzYW1wbGluZzogey4uLnN0YXRlLnNhbXBsaW5nLCBtYXNrOiBldmVudC5tYXNrfSxcbiAgICAgICAgICAgICAgICBwaGFzZTogJ3NhbXBsaW5nJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdtYXNrLWZldGNoLWZhaWxlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRFcnJvcihzdGF0ZSwgJ3NhbXBsaW5nLW1hc2stcmVzb2x2aW5nJywgZXZlbnQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENhc2NhZGU6IHBvc3QtaW50cm9zcGVjdGlvbiBmYWlsZWQgd2hpbGUgd2UncmUgc3RpbGwgd2FpdGluZyBvblxuICAgICAgICAvLyBpdCBmb3IgdGhlIG1hc2sgKHRoZSBzaWRlLWNoYW5uZWwgaGFuZGxlciBhYm92ZSBhbHJlYWR5IHVwZGF0ZWRcbiAgICAgICAgLy8gc3ViLXN0YXR1czsgcHJpbWFyeSBwaGFzZSBuZWVkcyB0byBmYWlsIHRvbykuIFRoZSBpbnRlcnByZXRlclxuICAgICAgICAvLyByZS1kaXNwYXRjaGVzIGFzIGBtYXNrLWZldGNoLWZhaWxlZGAgYWZ0ZXIgb2JzZXJ2aW5nIHRoZSBzdWJzdGF0ZVxuICAgICAgICAvLyBjaGFuZ2UuXG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdzYW1wbGluZycpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdzYW1wbGUtdGFibGUteWllbGRlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgc2FtcGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUuc2FtcGxpbmcsXG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3RlZDogWy4uLnN0YXRlLnNhbXBsaW5nLmNvbGxlY3RlZCwgZXZlbnQuZXZlbnRdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnc2FtcGxpbmctY29tcGxldGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0b3BBZnRlciA9PT0gJ3NhbXBsaW5nJ1xuICAgICAgICAgICAgICAgID8gc3RvcEFmdGVyUmVhY2hlZChzdGF0ZSlcbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBzYW1wbGluZzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5zYW1wbGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxUYWJsZXM6IHN0YXRlLnNhbXBsaW5nLmNvbGxlY3RlZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBwaGFzZTogJ3VwbG9hZGluZy1zYW1wbGVzJyxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdzYW1wbGluZy1mYWlsZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0RXJyb3Ioc3RhdGUsICdzYW1wbGluZycsIGV2ZW50LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAndXBsb2FkaW5nLXNhbXBsZXMnKSB7XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnc2FtcGxlLWNodW5rLXVwbG9hZGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBzYW1wbGluZzoge1xuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5zYW1wbGluZyxcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkZWRUYWJsZXM6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zYW1wbGluZy51cGxvYWRlZFRhYmxlcyArIGV2ZW50LmNodW5rU2l6ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBldmVudC5raW5kID09PSAnc2FtcGxlcy11cGxvYWQtY29tcGxldGVkJyB8fFxuICAgICAgICAgICAgZXZlbnQua2luZCA9PT0gJ3NhbXBsZXMtdXBsb2FkLW5vdC1uZWVkZWQnXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgcGhhc2U6ICdhd2FpdGluZy1wb3N0LXNhbXBsaW5nJ307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdzYW1wbGVzLXVwbG9hZC1mYWlsZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0RXJyb3Ioc3RhdGUsICd1cGxvYWRpbmctc2FtcGxlcycsIGV2ZW50LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnYXdhaXRpbmctcG9zdC1zYW1wbGluZycpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdwb3N0LXNhbXBsaW5nLWNvbXBsZXRlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7Li4uc3RhdGUsIHBoYXNlOiAnZG9uZSd9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAncG9zdC1zYW1wbGluZy1mYWlsZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0RXJyb3Ioc3RhdGUsICdhd2FpdGluZy1wb3N0LXNhbXBsaW5nJywgZXZlbnQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvLyBUZXJtaW5hbCBwaGFzZXMgaWdub3JlIGZ1cnRoZXIgZXZlbnRzLlxuICAgIHJldHVybiBzdGF0ZTtcbn07XG5cbi8vIFJlc2V0cyBzdWItc3RhdHVzIGZpZWxkcyB0byBmcmVzaCBcdTIwMTQgdXNlZnVsIHdoZW4gdGhlIHJlZHVjZXIgaXMgY29tcG9zZWRcbi8vIHdpdGggYSBoaWdoZXItbGV2ZWwgZHJpdmVyIHRoYXQgd2FudHMgYSBjbGVhbiBzbGF0ZSAodGVzdHMgdXNlIHRoaXMpLlxuZXhwb3J0IGNvbnN0IGNsZWFuUG9zdEludHJvc3BlY3Rpb24gPSAoc3RhdGU6IFRGbG93U3RhdGUpOiBURmxvd1N0YXRlID0+ICh7XG4gICAgLi4uc3RhdGUsXG4gICAgcG9zdEludHJvc3BlY3Rpb246IGluaXRpYWxQb3N0SW50cm9zcGVjdGlvbixcbn0pO1xuIiwgImltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQgdHlwZSB7VEZsb3dTdGF0ZX0gZnJvbSAnLi9zdGF0ZXMubWpzJztcblxuLy8gUHVyZSBwcm9qZWN0aW9uOiBURmxvd1N0YXRlIFx1MjE5MiBwYXJ0aWFsIHN0b3JlIGRlbHRhIHRoZSBpbnRlcnByZXRlciBhcHBsaWVzXG4vLyBpbnNpZGUgcnVuSW5BY3Rpb24uIEZpZWxkIG5hbWVzIG1hdGNoIHRoZSBleGlzdGluZyBzdG9yZSBzaGFwZSBleGFjdGx5IHNvXG4vLyB0aGUgSW5rIFVJIGtlZXBzIHJlYWRpbmcgdGhlIHNhbWUgcGF0aHMgaXQgYWx3YXlzIGRpZC5cblxudHlwZSBUU3RvcmVTdGVwcyA9IFRTdG9yZVsnc3RlcHMnXTtcblxuLy8gQ29tcHV0ZSBhIGRlZXAtaXNoIHBhdGNoIG9mIHRoZSBzdG9yZSBmaWVsZHMgdGhlIGZsb3cgZHJpdmVzLiBTaWJsaW5nXG4vLyBmaWVsZHMgdGhlIGhlbHBlcnMgdGhlbXNlbHZlcyBtYW5hZ2UgKGUuZy4gU1NIIGNvbm5lY3Rpb24uc3RhdGUgZHVyaW5nXG4vLyBwYXNzd29yZCByZXRyeSkgYXJlIGRlbGliZXJhdGVseSBvbWl0dGVkIFx1MjAxNCB0aG9zZSBzdGF5IG93bmVkIGJ5IHRoZWlyXG4vLyBoZWxwZXIuXG5leHBvcnQgY29uc3QgcHJvamVjdFN0b3JlRnJvbUZsb3cgPSAoXG4gICAgc3RhdGU6IFRGbG93U3RhdGUsXG4pOiB7XG4gICAgcmVhZG9ubHkgaW5nZXN0aW9uOiB7XG4gICAgICAgIHJlYWRvbmx5IGludHJvc3BlY3Rpb246IE9taXQ8XG4gICAgICAgICAgICBUU3RvcmVTdGVwc1snaW5nZXN0aW9uJ11bJ2ludHJvc3BlY3Rpb24nXSxcbiAgICAgICAgICAgICdnYXRlJ1xuICAgICAgICA+O1xuICAgICAgICByZWFkb25seSBwb3N0SW50cm9zcGVjdGlvbjogVFN0b3JlU3RlcHNbJ2luZ2VzdGlvbiddWydwb3N0SW50cm9zcGVjdGlvbiddO1xuICAgIH07XG4gICAgcmVhZG9ubHkgc2FtcGxpbmc6IFBpY2s8XG4gICAgICAgIFRTdG9yZVN0ZXBzWydzYW1wbGluZyddLFxuICAgICAgICAnc3RhdGUnIHwgJ3JldXNlZCcgfCAnZXJyb3InXG4gICAgPjtcbiAgICByZWFkb25seSB1c2VyRXhwbGFuYXRpb246IFRTdG9yZVN0ZXBzWyd1c2VyRXhwbGFuYXRpb24nXTtcbiAgICByZWFkb25seSBhY2NvdW50OiB7XG4gICAgICAgIHJlYWRvbmx5IHN0YXRlOiAnZXJyb3InO1xuICAgICAgICByZWFkb25seSBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbiAgICB9IHwgbnVsbDtcbn0gPT4ge1xuICAgIGNvbnN0IGludHJvc3BlY3Rpb25TdGVwU3RhdGU6IFRTdG9yZVN0ZXBzWydpbmdlc3Rpb24nXVsnaW50cm9zcGVjdGlvbiddWydzdGF0ZSddID1cbiAgICAgICAgc3RhdGUuZXJyb3JQaGFzZSA9PT0gJ2luZ2VzdGluZy1pbnRyb3NwZWN0aW9uJyB8fFxuICAgICAgICBzdGF0ZS5lcnJvclBoYXNlID09PSAncHJlZmxpZ2h0LWNoZWNraW5nJ1xuICAgICAgICAgICAgPyAnZXJyb3InXG4gICAgICAgICAgICA6IHN0YXRlLnByZWZsaWdodEhpdFxuICAgICAgICAgICAgICA/ICdza2lwcGVkJ1xuICAgICAgICAgICAgICA6IHN0YXRlLnJldmlzaW9uSWQgIT09IG51bGxcbiAgICAgICAgICAgICAgICA/ICdkb25lJ1xuICAgICAgICAgICAgICAgIDogc3RhdGUucGhhc2UgPT09ICdpbmdlc3RpbmctaW50cm9zcGVjdGlvbidcbiAgICAgICAgICAgICAgICAgID8gJ3VwbG9hZGluZydcbiAgICAgICAgICAgICAgICAgIDogJ2lkbGUnO1xuXG4gICAgY29uc3Qgc2FtcGxpbmdTdGF0ZTogVFN0b3JlU3RlcHNbJ3NhbXBsaW5nJ11bJ3N0YXRlJ10gPVxuICAgICAgICBzdGF0ZS5lcnJvclBoYXNlID09PSAnc2FtcGxpbmcnIHx8XG4gICAgICAgIHN0YXRlLmVycm9yUGhhc2UgPT09ICdzYW1wbGluZy1tYXNrLXJlc29sdmluZydcbiAgICAgICAgICAgID8gJ2Vycm9yJ1xuICAgICAgICAgICAgOiBzdGF0ZS5zYW1wbGVzQWxyZWFkeUluZ2VzdGVkXG4gICAgICAgICAgICAgID8gJ3NraXBwZWQnXG4gICAgICAgICAgICAgIDogc3RhdGUucGhhc2UgPT09ICdzYW1wbGluZydcbiAgICAgICAgICAgICAgICA/ICdmZXRjaGluZydcbiAgICAgICAgICAgICAgICA6IHN0YXRlLnBoYXNlID09PSAndXBsb2FkaW5nLXNhbXBsZXMnIHx8XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnBoYXNlID09PSAnYXdhaXRpbmctcG9zdC1zYW1wbGluZycgfHxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucGhhc2UgPT09ICdkb25lJ1xuICAgICAgICAgICAgICAgICAgPyAnZG9uZSdcbiAgICAgICAgICAgICAgICAgIDogJ2lkbGUnO1xuXG4gICAgY29uc3QgcGhhc2VzQWZ0ZXJFeHBsYW5hdGlvbiA9IG5ldyBTZXQoW1xuICAgICAgICAncHJlZmxpZ2h0LWNoZWNraW5nJyxcbiAgICAgICAgJ2luZ2VzdGluZy1pbnRyb3NwZWN0aW9uJyxcbiAgICAgICAgJ3NhbXBsaW5nLW1hc2stcmVzb2x2aW5nJyxcbiAgICAgICAgJ3NhbXBsaW5nJyxcbiAgICAgICAgJ3VwbG9hZGluZy1zYW1wbGVzJyxcbiAgICAgICAgJ2F3YWl0aW5nLXBvc3Qtc2FtcGxpbmcnLFxuICAgICAgICAnZG9uZScsXG4gICAgXSk7XG4gICAgY29uc3QgdXNlckV4cGxhbmF0aW9uU3RhdGU6IFRTdG9yZVN0ZXBzWyd1c2VyRXhwbGFuYXRpb24nXVsnc3RhdGUnXSA9XG4gICAgICAgIHN0YXRlLnBoYXNlID09PSAnYXdhaXRpbmctZXhwbGFuYXRpb24nXG4gICAgICAgICAgICA/ICdwcm9tcHRpbmcnXG4gICAgICAgICAgICA6IHN0YXRlLmV4cGxhbmF0aW9uICE9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgcGhhc2VzQWZ0ZXJFeHBsYW5hdGlvbi5oYXMoc3RhdGUucGhhc2UpXG4gICAgICAgICAgICAgID8gJ2RvbmUnXG4gICAgICAgICAgICAgIDogJ2lkbGUnO1xuXG4gICAgY29uc3QgYWNjb3VudERlbHRhOiB7XG4gICAgICAgIHJlYWRvbmx5IHN0YXRlOiAnZXJyb3InO1xuICAgICAgICByZWFkb25seSBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbiAgICB9IHwgbnVsbCA9XG4gICAgICAgIHN0YXRlLmVycm9yUGhhc2UgPT09ICdjcmVhdGluZy1zZXNzaW9uJyB8fFxuICAgICAgICBzdGF0ZS5lcnJvclBoYXNlID09PSAnYXdhaXRpbmctYXV0aG9yaXphdGlvbidcbiAgICAgICAgICAgID8ge3N0YXRlOiAnZXJyb3InLCBlcnJvcjogc3RhdGUuZXJyb3JNZXNzYWdlfVxuICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW5nZXN0aW9uOiB7XG4gICAgICAgICAgICBpbnRyb3NwZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IGludHJvc3BlY3Rpb25TdGVwU3RhdGUsXG4gICAgICAgICAgICAgICAgZXJyb3I6XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yUGhhc2UgPT09ICdpbmdlc3RpbmctaW50cm9zcGVjdGlvbicgfHxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3JQaGFzZSA9PT0gJ3ByZWZsaWdodC1jaGVja2luZydcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc3RhdGUuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcG9zdEludHJvc3BlY3Rpb246IHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUucG9zdEludHJvc3BlY3Rpb24uc3RhdGUsXG4gICAgICAgICAgICAgICAgZXJyb3I6IHN0YXRlLnBvc3RJbnRyb3NwZWN0aW9uLmVycm9yLFxuICAgICAgICAgICAgICAgIHJldXNlZDogc3RhdGUucG9zdEludHJvc3BlY3Rpb24ucmV1c2VkLFxuICAgICAgICAgICAgICAgIHN0YWdlOiBzdGF0ZS5wb3N0SW50cm9zcGVjdGlvbi5zdGFnZSxcbiAgICAgICAgICAgICAgICB0b2tlbnNJbjogc3RhdGUucG9zdEludHJvc3BlY3Rpb24udG9rZW5zSW4sXG4gICAgICAgICAgICAgICAgdG9rZW5zT3V0OiBzdGF0ZS5wb3N0SW50cm9zcGVjdGlvbi50b2tlbnNPdXQsXG4gICAgICAgICAgICAgICAgY29sdW1uc0RvbmU6IHN0YXRlLnBvc3RJbnRyb3NwZWN0aW9uLmNvbHVtbnNEb25lLFxuICAgICAgICAgICAgICAgIGNvbHVtbnNUb3RhbDogc3RhdGUucG9zdEludHJvc3BlY3Rpb24uY29sdW1uc1RvdGFsLFxuICAgICAgICAgICAgICAgIGpvYklkOiBzdGF0ZS5wb3N0SW50cm9zcGVjdGlvbi5qb2JJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNhbXBsaW5nOiB7XG4gICAgICAgICAgICBzdGF0ZTogc2FtcGxpbmdTdGF0ZSxcbiAgICAgICAgICAgIHJldXNlZDogc3RhdGUuc2FtcGxlc0FscmVhZHlJbmdlc3RlZCxcbiAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yUGhhc2UgPT09ICdzYW1wbGluZycgfHxcbiAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvclBoYXNlID09PSAnc2FtcGxpbmctbWFzay1yZXNvbHZpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gc3RhdGUuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgdXNlckV4cGxhbmF0aW9uOiB7XG4gICAgICAgICAgICBzdGF0ZTogdXNlckV4cGxhbmF0aW9uU3RhdGUsXG4gICAgICAgICAgICB2YWx1ZTogc3RhdGUuZXhwbGFuYXRpb24sXG4gICAgICAgIH0sXG4gICAgICAgIGFjY291bnQ6IGFjY291bnREZWx0YSxcbiAgICB9O1xufTtcbiIsICJpbXBvcnQge2V4aXN0c1N5bmN9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHR5cGUge1RSUENDbGllbnR9IGZyb20gJ0B0cnBjL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7VEFwcFJvdXRlciwgVEdhdGVFcnJvckRhdGF9IGZyb20gJ0BkYmN0eC9jb3JlJztcbmltcG9ydCB7VFJQQ0NsaWVudEVycm9yfSBmcm9tICdAdHJwYy9jbGllbnQnO1xuaW1wb3J0IHtjb21wdXRlU2NoZW1hSGFzaH0gZnJvbSAnQGRiY3R4L2NvbW1vbi9zY2hlbWEtaGFzaCc7XG5pbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcbmltcG9ydCB7Y29ubmVjdFNTSH0gZnJvbSAnLi4vYXBwL3NzaC5tanMnO1xuaW1wb3J0IHtjb25uZWN0REIsIHR5cGUgVERCQ29ubmVjdGlvbn0gZnJvbSAnLi4vYXBwL2RiLm1qcyc7XG5pbXBvcnQge2Fzc2VtYmxlRGF0YWJhc2V9IGZyb20gJy4uL2FwcC9hc3NlbWJsZS5tanMnO1xuaW1wb3J0IHtcbiAgICBsb2FkSW50cm9zcGVjdGlvbkZyb21GaWxlLFxuICAgIHBvcHVsYXRlSW50cm9zcGVjdGlvbkNvdW50cyxcbn0gZnJvbSAnLi4vYXBwL2xvYWQtaW50cm9zcGVjdGlvbi5tanMnO1xuaW1wb3J0IHtcbiAgICBjcmVhdGVTZXNzaW9uLFxuICAgIHdhaXRGb3JBdXRob3JpemF0aW9uLFxuICAgIGNvbm5lY3RBY2NvdW50LFxuICAgIGNoZWNrR2F0ZSxcbiAgICBjaGVja0JpbGxpbmcsXG59IGZyb20gJy4uL2FwcC9zZXNzaW9uLm1qcyc7XG5pbXBvcnQge2J1aWxkU2Vzc2lvblVSTH0gZnJvbSAnLi4vYXBwL29wZW4tdXJsLm1qcyc7XG5pbXBvcnQge3JlYWRDb25maWcsIGZsdXNoQ29uZmlnfSBmcm9tICcuLi9hcHAvY29uZmlnLm1qcyc7XG5pbXBvcnQge1xuICAgIHJ1blNhbXBsaW5nLFxuICAgIHByZXBhcmVPdXRwdXREaXIsXG4gICAgcGVyc2lzdFRhYmxlU2FtcGxlc1RvRGlyLFxuICAgIGxvYWRTZW5zaXRpdmVNYXNrLFxuICAgIHR5cGUgVFNlbnNpdGl2ZU1hc2ssXG59IGZyb20gJy4uL2FwcC9zYW1wbGUubWpzJztcbmltcG9ydCB7ZmV0Y2hQdWJsaWNQbGFubmVyU3RhdGlzdGljc30gZnJvbSAnLi4vZGIvaW5kZXgubWpzJztcbmltcG9ydCB7Y3JlYXRlQXV0aGVudGljYXRlZFRSUENDbGllbnR9IGZyb20gJy4uL2xpYi90cnBjLm1qcyc7XG5pbXBvcnQge1xuICAgIHN0cmVhbVBvc3RJbnRyb3NwZWN0aW9uLFxuICAgIGRpc3BhdGNoQW5kU3RyZWFtUG9zdFNhbXBsaW5nLFxufSBmcm9tICcuLi9hcHAvdGFpbC5tanMnO1xuaW1wb3J0IHthdG9taWNXcml0ZUZpbGUsIHJlY292ZXJBdG9taWNXcml0ZX0gZnJvbSAnLi4vbGliL2F0b21pYy13cml0ZS5tanMnO1xuaW1wb3J0IHtEQkNUWF9ERVZ9IGZyb20gJy4uL2xpYi9lbnYubWpzJztcbmltcG9ydCB7bG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIubWpzJztcbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQgdHlwZSB7VEZsb3dFdmVudH0gZnJvbSAnLi9ldmVudHMubWpzJztcbmltcG9ydCB0eXBlIHtURmxvd1N0YXRlfSBmcm9tICcuL3N0YXRlcy5tanMnO1xuaW1wb3J0IHt3aGVufSBmcm9tICdtb2J4JztcblxuLy8gRWZmZWN0IGhhbmRsZXMgdGhlIGludGVycHJldGVyIGFjY3VtdWxhdGVzIGFzIHRoZSBmbG93IGFkdmFuY2VzLiBOb3Rcbi8vIHBhcnQgb2YgVEZsb3dTdGF0ZSBiZWNhdXNlIHRoZXkgYXJlbid0IHB1cmUgZGF0YSBcdTIwMTQgUHJvbWlzZSBoYW5kbGVzLCBEQlxuLy8gcG9vbHMsIGNsZWFudXAgY2FsbGJhY2tzLiBUaGUgZGlzcGF0Y2hlciBjbG9zZXMgb3ZlciB0aGlzIGNvbnRleHQuXG5leHBvcnQgdHlwZSBUSW50ZXJwcmV0ZXJDb250ZXh0ID0ge1xuICAgIGNsZWFudXBTU0g6ICgoKSA9PiB2b2lkKSB8IG51bGw7XG4gICAgZGI6IFREQkNvbm5lY3Rpb24gfCBudWxsO1xuICAgIGludHJvc3BlY3Rpb246IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgYXNzZW1ibGVEYXRhYmFzZT4+IHwgbnVsbDtcbiAgICBhdXRoZWQ6IFRSUENDbGllbnQ8VEFwcFJvdXRlcj4gfCBudWxsO1xuICAgIHBvc3RJbnRyb3NwZWN0aW9uUG9sbDogUHJvbWlzZTx2b2lkPiB8IG51bGw7XG4gICAgZXhwbGFuYXRpb246IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgaW5pdGlhbENvbnRleHQgPSAoKTogVEludGVycHJldGVyQ29udGV4dCA9PiAoe1xuICAgIGNsZWFudXBTU0g6IG51bGwsXG4gICAgZGI6IG51bGwsXG4gICAgaW50cm9zcGVjdGlvbjogbnVsbCxcbiAgICBhdXRoZWQ6IG51bGwsXG4gICAgcG9zdEludHJvc3BlY3Rpb25Qb2xsOiBudWxsLFxuICAgIGV4cGxhbmF0aW9uOiBudWxsLFxufSk7XG5cbnR5cGUgVERpc3BhdGNoID0gKGV2ZW50OiBURmxvd0V2ZW50KSA9PiB2b2lkO1xuXG5jb25zdCBlcnJNc2cgPSAoZTogdW5rbm93bik6IHN0cmluZyA9PlxuICAgIGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcblxuLy8gUHVsbHMgdGhlIHN0cnVjdHVyZWQgYGRiY3R4YCBwYXlsb2FkIHRSUEMncyBlcnJvckZvcm1hdHRlciBwcm9tb3RlcyBvbnRvXG4vLyBzaGFwZS5kYXRhLiBSZXR1cm5zIG51bGwgZm9yIG5vbi10UlBDIGVycm9ycyBvciBub24tZ2F0ZSBlcnJvcnMgc28gY2FsbGVyc1xuLy8gY2FuIGZhbGwgYmFjayB0byB0aGUgcHJvc2UgYG1lc3NhZ2VgLlxuY29uc3QgZXh0cmFjdEdhdGVFcnJvciA9IChlOiB1bmtub3duKTogVEdhdGVFcnJvckRhdGEgfCBudWxsID0+IHtcbiAgICBpZiAoIShlIGluc3RhbmNlb2YgVFJQQ0NsaWVudEVycm9yKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IGUuZGF0YSBhcyB7ZGJjdHg/OiBUR2F0ZUVycm9yRGF0YSB8IG51bGx9IHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiBkYXRhPy5kYmN0eCA/PyBudWxsO1xufTtcblxuLy8gRGlzcGF0Y2hlcyBhbiBpbmdlc3QtZmFpbGVkIGV2ZW50IGFuZCwgaWYgdGhlIGVycm9yIGNhcnJpZXMgc3RydWN0dXJlZFxuLy8gZ2F0ZSBkYXRhLCBwYXJrcyBpdCBvbiB0aGUgc3RvcmUgc28gdGhlIFVJIGNhbiByZW5kZXIgYSB0YWlsb3JlZCBsYXlvdXRcbi8vIGluc3RlYWQgb2YgdGhlIHByb3NlIGBtZXNzYWdlYC4gVGhlIGdhdGUgZmllbGQgc2l0cyBvdXRzaWRlIHRoZSBmbG93XG4vLyBwcm9qZWN0aW9uIG9uIHB1cnBvc2UgXHUyMDE0IHByb2plY3Rpb24gb25seSBvd25zIGBzdGF0ZWAvYGVycm9yYC5cbmNvbnN0IGRpc3BhdGNoSW5nZXN0RmFpbGVkID0gKFxuICAgIGVycjogdW5rbm93bixcbiAgICBkaXNwYXRjaDogVERpc3BhdGNoLFxuICAgIHN0b3JlOiBUU3RvcmUsXG4pOiB2b2lkID0+IHtcbiAgICBjb25zdCBnYXRlID0gZXh0cmFjdEdhdGVFcnJvcihlcnIpO1xuICAgIGlmIChnYXRlICE9PSBudWxsKSB7XG4gICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5pbnRyb3NwZWN0aW9uLmdhdGUgPSBnYXRlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGlzcGF0Y2goe2tpbmQ6ICdpbmdlc3QtZmFpbGVkJywgZXJyb3I6IGVyck1zZyhlcnIpfSk7XG59O1xuXG4vLyBTaW5nbGUgcGhhc2UgdHJhbnNpdGlvbiBoYW5kbGVyLiBDYWxsZWQgb25jZSBwZXIgKHByZXYgXHUyMTkyIGN1cnIpIHBoYXNlXG4vLyBjaGFuZ2Ugd2l0aCBwcmV2ICE9PSBjdXJyLiBFYWNoIGJyYW5jaCBmaXJlcyB0aGUgc2lkZSBlZmZlY3RzIGZvciB0aGVcbi8vIG5ldyBwaGFzZSBhbmQgZGlzcGF0Y2hlcyBldmVudChzKSBiYWNrIHdoZW4gYXN5bmMgd29yayByZXNvbHZlcy5cbmV4cG9ydCBjb25zdCBkcml2ZVNpZGUgPSBhc3luYyAoXG4gICAgcHJldjogVEZsb3dTdGF0ZSB8IG51bGwsXG4gICAgY3VycjogVEZsb3dTdGF0ZSxcbiAgICBzdG9yZTogVFN0b3JlLFxuICAgIGN0eDogVEludGVycHJldGVyQ29udGV4dCxcbiAgICBkaXNwYXRjaDogVERpc3BhdGNoLFxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgaWYgKHByZXYgIT09IG51bGwgJiYgcHJldi5waGFzZSA9PT0gY3Vyci5waGFzZSkge1xuICAgICAgICAvLyBTaWRlLWNoYW5uZWwgc3ViLXN0YXR1cyB1cGRhdGVzIGRvbid0IHRyaWdnZXIgZWZmZWN0cy5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjdXJyLnBoYXNlID09PSAnY29ubmVjdGluZy1zc2gnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjdHguY2xlYW51cFNTSCA9IChhd2FpdCBjb25uZWN0U1NIKHN0b3JlKSkgPz8gbnVsbDtcbiAgICAgICAgICAgIC8vIGNvbm5lY3RTU0ggbWF5IHNldCBlbmFibGVkPWZhbHNlIHdoZW4gbm8gc3NoIGZsYWcgd2FzIHBhc3NlZC5cbiAgICAgICAgICAgIGlmICghc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdzc2gtbm90LW5lZWRlZCd9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB3aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzOiBzdHJpbmcgPSBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnN0YXRlO1xuICAgICAgICAgICAgICAgIHJldHVybiBzID09PSAnY29ubmVjdGVkJyB8fCBzID09PSAnZXJyb3InO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmaW5hbFN0YXRlOiBzdHJpbmcgPSBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnN0YXRlO1xuICAgICAgICAgICAgaWYgKGZpbmFsU3RhdGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdzc2gtZmFpbGVkJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uZXJyb3IgPz8gJ3NzaCBmYWlsZWQnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnc3NoLWNvbm5lY3RlZCd9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ3NzaC1mYWlsZWQnLCBlcnJvcjogZXJyTXNnKGVycil9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGN1cnIucGhhc2UgPT09ICdjb25uZWN0aW5nLWRiJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY3R4LmRiID0gKGF3YWl0IGNvbm5lY3REQihzdG9yZSkpID8/IG51bGw7XG4gICAgICAgICAgICBhd2FpdCB3aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzOiBzdHJpbmcgPSBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uc3RhdGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHMgPT09ICdjb25uZWN0ZWQnIHx8IHMgPT09ICdlcnJvcic7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGRiU3RhdGU6IHN0cmluZyA9IHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5zdGF0ZTtcbiAgICAgICAgICAgIGlmIChkYlN0YXRlID09PSAnZXJyb3InIHx8IGN0eC5kYiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogJ2RiLWZhaWxlZCcsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uZXJyb3IgPz8gJ2RiIGZhaWxlZCcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdkYi1jb25uZWN0ZWQnfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdkYi1mYWlsZWQnLCBlcnJvcjogZXJyTXNnKGVycil9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGN1cnIucGhhc2UgPT09ICdpbnRyb3NwZWN0aW5nJykge1xuICAgICAgICBpZiAoY3R4LmRiID09PSBudWxsKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAga2luZDogJ2ludHJvc3BlY3Rpb24tZmFpbGVkJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogJ25vIGRiIGNvbm5lY3Rpb24nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHVzZUpzb25QYXRoID0gc3RvcmUub3V0cHV0T3B0aW9ucy51c2VJbnRyb3NwZWN0aW9uSnNvblBhdGg7XG4gICAgICAgICAgICBpZiAodXNlSnNvblBhdGggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmludHJvc3BlY3Rpb24uc3RhdGUgPSAnZmV0Y2hpbmcnO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRJbnRyb3NwZWN0aW9uRnJvbUZpbGUoXG4gICAgICAgICAgICAgICAgICAgIHVzZUpzb25QYXRoLFxuICAgICAgICAgICAgICAgICAgICBjdHguZGIucG9vbCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICghbG9hZGVkLm9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmludHJvc3BlY3Rpb24uc3RhdGUgPSAnZXJyb3InO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5lcnJvciA9IGxvYWRlZC5lcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICAgICAga2luZDogJ2ludHJvc3BlY3Rpb24tZmFpbGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBsb2FkZWQuZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcG9wdWxhdGVJbnRyb3NwZWN0aW9uQ291bnRzKHN0b3JlLCBsb2FkZWQucmVzdWx0KTtcbiAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmludHJvc3BlY3Rpb24uc3RhdGUgPSAnZG9uZSc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3R4LmludHJvc3BlY3Rpb24gPSBsb2FkZWQucmVzdWx0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdHguaW50cm9zcGVjdGlvbiA9IGF3YWl0IGFzc2VtYmxlRGF0YWJhc2UoY3R4LmRiLnBvb2wsIHN0b3JlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKERCQ1RYX0RFVikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtkYXRhYmFzZUludHJvc3BlY3Rpb25TY2hlbWF9ID1cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaW1wb3J0KCdAZGJjdHgvY29yZS9zY2hlbWFzL2ludHJvc3BlY3Rpb24nKTtcbiAgICAgICAgICAgICAgICBkYXRhYmFzZUludHJvc3BlY3Rpb25TY2hlbWEucGFyc2UoY3R4LmludHJvc3BlY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdpbnRyb3NwZWN0aW9uLWxvYWRlZCd9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ2ludHJvc3BlY3Rpb24tZmFpbGVkJywgZXJyb3I6IGVyck1zZyhlcnIpfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjdXJyLnBoYXNlID09PSAnb3V0cHV0LWpzb24nKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dFBhdGggPSBjdXJyLm91dHB1dEpTT05QYXRoO1xuICAgICAgICBpZiAob3V0cHV0UGF0aCA9PT0gbnVsbCB8fCBjdHguaW50cm9zcGVjdGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdvdXRwdXQtanNvbi1ub3QtcmVxdWVzdGVkJ30pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCByZWNvdmVyQXRvbWljV3JpdGUob3V0cHV0UGF0aCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZXhpc3RzU3luYyhvdXRwdXRQYXRoKSAmJlxuICAgICAgICAgICAgICAgICFzdG9yZS5vdXRwdXRPcHRpb25zLmFsbG93SW50cm9zcGVjdGlvbkpzb25PdmVyd3JpdGVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMub3V0cHV0SnNvbi5zdGF0ZSA9ICdwcm9tcHRpbmctb3ZlcndyaXRlJztcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMub3V0cHV0SnNvbi5wYXRoID0gb3V0cHV0UGF0aDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhd2FpdCB3aGVuKCgpID0+IHN0b3JlLnN0ZXBzLm91dHB1dEpzb24uY29uZmlybWVkICE9PSBudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXN0b3JlLnN0ZXBzLm91dHB1dEpzb24uY29uZmlybWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnb3V0cHV0LWpzb24tc2tpcHBlZCd9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5vdXRwdXRKc29uLnN0YXRlID0gJ3dyaXRpbmcnO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLm91dHB1dEpzb24ucGF0aCA9IG91dHB1dFBhdGg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0IGF0b21pY1dyaXRlRmlsZShcbiAgICAgICAgICAgICAgICBvdXRwdXRQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGN0eC5pbnRyb3NwZWN0aW9uLCBudWxsLCAyKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMub3V0cHV0SnNvbi5zdGF0ZSA9ICdkb25lJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdvdXRwdXQtanNvbi13cml0dGVuJ30pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5vdXRwdXRKc29uLnN0YXRlID0gJ2Vycm9yJztcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5vdXRwdXRKc29uLmVycm9yID0gZXJyTXNnKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnb3V0cHV0LWpzb24tZmFpbGVkJywgZXJyb3I6IGVyck1zZyhlcnIpfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjdXJyLnBoYXNlID09PSAnY3JlYXRpbmctc2Vzc2lvbicpIHtcbiAgICAgICAgaWYgKGN0eC5kYiA9PT0gbnVsbCB8fCBjdHguaW50cm9zcGVjdGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIGtpbmQ6ICdzZXNzaW9uLWZhaWxlZCcsXG4gICAgICAgICAgICAgICAgZXJyb3I6ICdubyBkYiBvciBpbnRyb3NwZWN0aW9uIGluIGNvbnRleHQnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHJlYWRDb25maWcoKTtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGF3YWl0IGNyZWF0ZVNlc3Npb24oXG4gICAgICAgICAgICAgICAgY3R4LmRiLnBvb2wsXG4gICAgICAgICAgICAgICAgY3R4LmludHJvc3BlY3Rpb24sXG4gICAgICAgICAgICAgICAgc3RvcmUsXG4gICAgICAgICAgICAgICAgY29uZmlnLnRva2VuID8/IG51bGwsXG4gICAgICAgICAgICAgICAgY29uZmlnLmRldmljZV9pZCxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIFJlLWF1dGggZmFzdC1wYXRoOiBpZiBleGlzdGluZyBjb25maWcgdG9rZW4gaXMgc3RpbGwgdmFsaWQsXG4gICAgICAgICAgICAvLyBza2lwIHRoZSBicm93c2VyLWF1dGggaGFuZHNoYWtlIGVudGlyZWx5LlxuICAgICAgICAgICAgaWYgKGNvbmZpZy50b2tlbikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbm5lY3RBY2NvdW50KGNvbmZpZy50b2tlbiwgc3RvcmUpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjaGVja0JpbGxpbmcoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWcudG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZFNlc3Npb25VUkwoc2Vzc2lvbklkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5Db250aW51ZSA9IGF3YWl0IGNoZWNrR2F0ZShjb25maWcudG9rZW4sIHN0b3JlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5Db250aW51ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdhdXRoLW5vdC1uZWVkZWQnfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gU2luZ2xlIGRpc3BhdGNoIGNhcnJ5aW5nIGJvdGggc2Vzc2lvbklkIGFuZCB0b2tlbi5cbiAgICAgICAgICAgICAgICAgICAgLy8gQXZvaWRzIHRyYW5zaXRpb25pbmcgdGhyb3VnaCBhd2FpdGluZy1hdXRob3JpemF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCB3b3VsZCByYWNlLWZpcmUgd2FpdEZvckF1dGhvcml6YXRpb24gYW5kIHN0b21wXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhbHJlYWR5LSdjb25uZWN0ZWQnIGFjY291bnQgc3RhdGUgYmFjayB0byAnd2FpdGluZycuXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdmYXN0LXBhdGgtY29tcGxldGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiBjb25maWcudG9rZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGVyciBpbnN0YW5jZW9mIFRSUENDbGllbnRFcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGVyci5kYXRhPy5jb2RlID09PSAnVU5BVVRIT1JJWkVEJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5kYXRhPy5jb2RlID09PSAnTk9UX0ZPVU5EJylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBmbHVzaENvbmZpZygpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ3Nlc3Npb24tY3JlYXRlZCcsIHNlc3Npb25JZH0pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnc2Vzc2lvbi1mYWlsZWQnLCBlcnJvcjogZXJyTXNnKGVycil9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGN1cnIucGhhc2UgPT09ICdhd2FpdGluZy1hdXRob3JpemF0aW9uJykge1xuICAgICAgICBpZiAoY3Vyci5zZXNzaW9uSWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnYXV0aC1mYWlsZWQnLCBlcnJvcjogJ25vIHNlc3Npb25JZCBpbiBzdGF0ZSd9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgd2FpdEZvckF1dGhvcml6YXRpb24oY3Vyci5zZXNzaW9uSWQsIHN0b3JlKTtcbiAgICAgICAgICAgIGNvbnN0IGZyZXNoVG9rZW4gPSAoYXdhaXQgcmVhZENvbmZpZygpKS50b2tlbjtcbiAgICAgICAgICAgIGlmICghZnJlc2hUb2tlbikge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnYXV0aC1mYWlsZWQnLCBlcnJvcjogJ25vIHRva2VuIGFmdGVyIGF1dGgnfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgY2hlY2tCaWxsaW5nKFxuICAgICAgICAgICAgICAgIGZyZXNoVG9rZW4sXG4gICAgICAgICAgICAgICAgYnVpbGRTZXNzaW9uVVJMKGN1cnIuc2Vzc2lvbklkKSxcbiAgICAgICAgICAgICAgICBzdG9yZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBjYW5Db250aW51ZSA9IGF3YWl0IGNoZWNrR2F0ZShmcmVzaFRva2VuLCBzdG9yZSk7XG4gICAgICAgICAgICBpZiAoIWNhbkNvbnRpbnVlKSB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdhdXRoLWZhaWxlZCcsIGVycm9yOiAnZ2F0ZSBibG9ja2VkJ30pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnYXV0aC1jb25maXJtZWQnLCB0b2tlbjogZnJlc2hUb2tlbn0pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnYXV0aC1mYWlsZWQnLCBlcnJvcjogZXJyTXNnKGVycil9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGN1cnIucGhhc2UgPT09ICdhd2FpdGluZy1leHBsYW5hdGlvbicpIHtcbiAgICAgICAgaWYgKGN1cnIuZXhwbGFuYXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGN0eC5leHBsYW5hdGlvbiA9IGN1cnIuZXhwbGFuYXRpb247XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMudXNlckV4cGxhbmF0aW9uLnN0YXRlID0gJ2RvbmUnO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnVzZXJFeHBsYW5hdGlvbi52YWx1ZSA9IGN1cnIuZXhwbGFuYXRpb247XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICBraW5kOiAnZXhwbGFuYXRpb24tZ2l2ZW4nLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjdXJyLmV4cGxhbmF0aW9uLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMudXNlckV4cGxhbmF0aW9uLnN0YXRlID0gJ3Byb21wdGluZyc7XG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCB3aGVuKCgpID0+IHN0b3JlLnN0ZXBzLnVzZXJFeHBsYW5hdGlvbi5zdGF0ZSA9PT0gJ2RvbmUnKTtcbiAgICAgICAgY29uc3QgdiA9IHN0b3JlLnN0ZXBzLnVzZXJFeHBsYW5hdGlvbi52YWx1ZSA/PyAnJztcbiAgICAgICAgY3R4LmV4cGxhbmF0aW9uID0gdjtcbiAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdleHBsYW5hdGlvbi1naXZlbicsIHZhbHVlOiB2fSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY3Vyci5waGFzZSA9PT0gJ3ByZWZsaWdodC1jaGVja2luZycpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY3R4LmRiID09PSBudWxsIHx8XG4gICAgICAgICAgICBjdHguaW50cm9zcGVjdGlvbiA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgY3Vyci5hdXRoVG9rZW4gPT09IG51bGwgfHxcbiAgICAgICAgICAgIGN1cnIuc2Vzc2lvbklkID09PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIGtpbmQ6ICdpbmdlc3QtZmFpbGVkJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogJ2NvbnRleHQgbm90IHJlYWR5IGZvciBwcmVmbGlnaHQnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGN0eC5hdXRoZWQgPSBjcmVhdGVBdXRoZW50aWNhdGVkVFJQQ0NsaWVudCgoKSA9PlxuICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShjdXJyLmF1dGhUb2tlbiEpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGxhbmF0aW9uID0gY3R4LmV4cGxhbmF0aW9uID8/IGN1cnIuZXhwbGFuYXRpb247XG4gICAgICAgICAgICBpZiAoZXhwbGFuYXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjdHguaW50cm9zcGVjdGlvbi51c2VyRXhwbGFuYXRpb24gPSBleHBsYW5hdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBsYW5uZXJTdGF0cyA9IGF3YWl0IGZldGNoUHVibGljUGxhbm5lclN0YXRpc3RpY3MoXG4gICAgICAgICAgICAgICAgY3R4LmRiLnBvb2wsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaW50cm9zcGVjdGlvbkhhc2ggPSBjb21wdXRlU2NoZW1hSGFzaChjdHguaW50cm9zcGVjdGlvbik7XG4gICAgICAgICAgICBjb25zdCBjaGVja0hpdCA9XG4gICAgICAgICAgICAgICAgYXdhaXQgY3R4LmF1dGhlZC5yZXZpc2lvbnMuY2hlY2tJbnRyb3NwZWN0aW9uLm11dGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25JZDogY3Vyci5zZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICAgIGludHJvc3BlY3Rpb25IYXNoLFxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZGVudGlmaWVyOlxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmludHJvc3BlY3Rpb24uaWRlbnRpZmllci5zeXN0ZW1faWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2VPSUQ6IFN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnRyb3NwZWN0aW9uLmlkZW50aWZpZXIuZGF0YWJhc2Vfb2lkLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBwbGFubmVyU3RhdGlzdGljczoge3JlbGF0aW9uczogcGxhbm5lclN0YXRzfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjaGVja0hpdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUubGFuZGluZ1VSTCA9IGNoZWNrSGl0LmxhbmRpbmdVUkw7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAga2lja1Bvc3RJbnRyb3NwZWN0aW9uUG9sbChcbiAgICAgICAgICAgICAgICAgICAgY3R4LFxuICAgICAgICAgICAgICAgICAgICBjaGVja0hpdC5wb3N0SW50cm9zcGVjdGlvbkpvYklkLFxuICAgICAgICAgICAgICAgICAgICBzdG9yZSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogJ2NoZWNrLWludHJvc3BlY3Rpb24taGl0JyxcbiAgICAgICAgICAgICAgICAgICAgcmV2aXNpb25JZDogY2hlY2tIaXQucmV2aXNpb25JZCxcbiAgICAgICAgICAgICAgICAgICAgc2FtcGxlc0V4aXN0OiBjaGVja0hpdC5zYW1wbGVzRXhpc3QsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlc05lZWRpbmdTYW1wbGVzOiBjaGVja0hpdC50YWJsZXNOZWVkaW5nU2FtcGxlcyxcbiAgICAgICAgICAgICAgICAgICAgcG9zdEludHJvc3BlY3Rpb25Kb2JJZDogY2hlY2tIaXQucG9zdEludHJvc3BlY3Rpb25Kb2JJZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ2NoZWNrLWludHJvc3BlY3Rpb24tbWlzcyd9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBkaXNwYXRjaEluZ2VzdEZhaWxlZChlcnIsIGRpc3BhdGNoLCBzdG9yZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjdXJyLnBoYXNlID09PSAnaW5nZXN0aW5nLWludHJvc3BlY3Rpb24nKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGN0eC5hdXRoZWQgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGN0eC5pbnRyb3NwZWN0aW9uID09PSBudWxsIHx8XG4gICAgICAgICAgICBjdXJyLnNlc3Npb25JZCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgY3R4LmRiID09PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIGtpbmQ6ICdpbmdlc3QtZmFpbGVkJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogJ2NvbnRleHQgbm90IHJlYWR5IGZvciBpbmdlc3QnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24uaW50cm9zcGVjdGlvbi5zdGF0ZSA9ICd1cGxvYWRpbmcnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBwbGFubmVyU3RhdHMgPSBhd2FpdCBmZXRjaFB1YmxpY1BsYW5uZXJTdGF0aXN0aWNzKFxuICAgICAgICAgICAgICAgIGN0eC5kYi5wb29sLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGluZ2VzdCA9XG4gICAgICAgICAgICAgICAgYXdhaXQgY3R4LmF1dGhlZC5yZXZpc2lvbnMuaW5nZXN0SW50cm9zcGVjdGlvbi5tdXRhdGUoe1xuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uSWQ6IGN1cnIuc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICBpbnRyb3NwZWN0aW9uOiBjdHguaW50cm9zcGVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgcGxhbm5lclN0YXRpc3RpY3M6IHtyZWxhdGlvbnM6IHBsYW5uZXJTdGF0c30sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUubGFuZGluZ1VSTCA9IGluZ2VzdC5sYW5kaW5nVVJMO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBraWNrUG9zdEludHJvc3BlY3Rpb25Qb2xsKFxuICAgICAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgICAgICBpbmdlc3QucG9zdEludHJvc3BlY3Rpb25Kb2JJZCxcbiAgICAgICAgICAgICAgICBzdG9yZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAga2luZDogJ2ludHJvc3BlY3Rpb24taW5nZXN0ZWQnLFxuICAgICAgICAgICAgICAgIHJldmlzaW9uSWQ6IGluZ2VzdC5yZXZpc2lvbklkLFxuICAgICAgICAgICAgICAgIHNhbXBsZXNFeGlzdDogaW5nZXN0LnNhbXBsZXNFeGlzdCxcbiAgICAgICAgICAgICAgICB0YWJsZXNOZWVkaW5nU2FtcGxlczogaW5nZXN0LnRhYmxlc05lZWRpbmdTYW1wbGVzLFxuICAgICAgICAgICAgICAgIHBvc3RJbnRyb3NwZWN0aW9uSm9iSWQ6IGluZ2VzdC5wb3N0SW50cm9zcGVjdGlvbkpvYklkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZGlzcGF0Y2hJbmdlc3RGYWlsZWQoZXJyLCBkaXNwYXRjaCwgc3RvcmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY3Vyci5waGFzZSA9PT0gJ3NhbXBsaW5nLW1hc2stcmVzb2x2aW5nJykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjdHguYXV0aGVkID09PSBudWxsIHx8XG4gICAgICAgICAgICBjdXJyLnJldmlzaW9uSWQgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGN0eC5pbnRyb3NwZWN0aW9uID09PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIGtpbmQ6ICdtYXNrLWZldGNoLWZhaWxlZCcsXG4gICAgICAgICAgICAgICAgZXJyb3I6ICdjb250ZXh0IG5vdCByZWFkeSBmb3IgbWFzayByZXNvbHV0aW9uJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlTWFza1BhdGggPSBjdXJyLmZpbGVNYXNrUGF0aDtcbiAgICAgICAgICAgIGlmIChmaWxlTWFza1BhdGggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXNrID0gYXdhaXQgbG9hZFNlbnNpdGl2ZU1hc2soZmlsZU1hc2tQYXRoKTtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ21hc2stbG9hZGVkJywgbWFza30pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNlcnZlci1tYW5hZ2VkIG1hc2s6IHdhaXQgZm9yIHBvc3QtaW50cm9zcGVjdGlvbiB0byBmaW5pc2guXG4gICAgICAgICAgICBpZiAoY3R4LnBvc3RJbnRyb3NwZWN0aW9uUG9sbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGN0eC5wb3N0SW50cm9zcGVjdGlvblBvbGw7XG4gICAgICAgICAgICAgICAgY3R4LnBvc3RJbnRyb3NwZWN0aW9uUG9sbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBZnRlciB0aGUgYXdhaXQsIHN1Yi1zdGF0dXMgcmVmbGVjdHMgcG9zdC1pbnRyb3NwZWN0aW9uIHN0YXRlLlxuICAgICAgICAgICAgLy8gVGhlIHJlZHVjZXIncyBwcm9qZWN0aW9uIHdvbid0IGhhdmUgcmUtZmlyZWQgZHJpdmVTaWRlIG9uIGl0cyBvd25cbiAgICAgICAgICAgIC8vIChzdWItc3RhdHVzIG9ubHkpLiBJbnNwZWN0IHN0b3JlIGRpcmVjdGx5LlxuICAgICAgICAgICAgaWYgKHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi5zdGF0ZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogJ21hc2stZmV0Y2gtZmFpbGVkJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICdwb3N0LWludHJvc3BlY3Rpb24gZW5yaWNobWVudCBmYWlsZWQgXHUyMDE0IHNlbnNpdGl2ZSBtYXNrIHVuYXZhaWxhYmxlOyByZWZ1c2luZyB0byBzYW1wbGUnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5hdXRoZWQucmV2aXNpb25zLmdldFNlbnNpdGl2ZU1hc2sucXVlcnkoe1xuICAgICAgICAgICAgICAgIHJldmlzaW9uSWQ6IGN1cnIucmV2aXNpb25JZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXMucmVhZHkpIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdtYXNrLWZldGNoLWZhaWxlZCcsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAnc2VydmVyIHJlcG9ydGVkIHNlbnNpdGl2ZSBtYXNrIG5vdCByZWFkeSBhZnRlciBwb3N0LWludHJvc3BlY3Rpb24gY29tcGxldGlvbjsgcmVmdXNpbmcgdG8gc2FtcGxlJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ21hc2stbG9hZGVkJywgbWFzazogcmVzLm1hc2t9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ21hc2stZmV0Y2gtZmFpbGVkJywgZXJyb3I6IGVyck1zZyhlcnIpfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjdXJyLnBoYXNlID09PSAnc2FtcGxpbmcnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGN0eC5kYiA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgY3R4LmludHJvc3BlY3Rpb24gPT09IG51bGwgfHxcbiAgICAgICAgICAgIGN1cnIuc2FtcGxpbmcubWFzayA9PT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICBraW5kOiAnc2FtcGxpbmctZmFpbGVkJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogJ2NvbnRleHQgbm90IHJlYWR5IGZvciBzYW1wbGluZycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgbWFzazogVFNlbnNpdGl2ZU1hc2sgPSBjdXJyLnNhbXBsaW5nLm1hc2s7XG4gICAgICAgICAgICBjb25zdCBzYW1wbGVGaWxlSW5kZXg6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dERpciA9IGN1cnIub3V0cHV0U2FtcGxlc0RpcjtcbiAgICAgICAgICAgIGlmIChvdXRwdXREaXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWFkeSA9IGF3YWl0IHByZXBhcmVPdXRwdXREaXIoXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dERpcixcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUub3V0cHV0T3B0aW9ucy5hbGxvd1NhbXBsZU92ZXJ3cml0ZSxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlYWR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdzYW1wbGluZy1mYWlsZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICdvdXRwdXQgZGlyIG5vdCByZWFkeScsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRmlsdGVyIHRoZSBwZXItdGFibGUgc2FtcGxpbmcgbG9vcCB0byBvbmx5IHRoZSB0YWJsZXMgdGhlXG4gICAgICAgICAgICAvLyBzZXJ2ZXIgZmxhZ2dlZCBhcyBuZWVkaW5nIGZyZXNoIHNhbXBsZXMuIE51bGwgPSBwcmUtaGFuZHNoYWtlXG4gICAgICAgICAgICAvLyBzZW50aW5lbDsgdHJlYXQgYXMgXCJhbGwgdGFibGVzXCIgZm9yIHNhZmV0eS5cbiAgICAgICAgICAgIGNvbnN0IHRhYmxlRmlsdGVyOiBSZWFkb25seVNldDxzdHJpbmc+IHwgdW5kZWZpbmVkID1cbiAgICAgICAgICAgICAgICBjdXJyLnRhYmxlc05lZWRpbmdTYW1wbGVzID09PSBudWxsXG4gICAgICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIDogbmV3IFNldChjdXJyLnRhYmxlc05lZWRpbmdTYW1wbGVzKTtcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgZXZlbnQgb2YgcnVuU2FtcGxpbmcoXG4gICAgICAgICAgICAgICAgY3R4LmRiLnBvb2wsXG4gICAgICAgICAgICAgICAgY3R4LmludHJvc3BlY3Rpb24sXG4gICAgICAgICAgICAgICAgc3RvcmUsXG4gICAgICAgICAgICAgICAgbWFzayxcbiAgICAgICAgICAgICAgICB0YWJsZUZpbHRlcixcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBpZiAob3V0cHV0RGlyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHBlcnNpc3RUYWJsZVNhbXBsZXNUb0RpcihcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dERpcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlRmlsZUluZGV4LFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ3NhbXBsZS10YWJsZS15aWVsZGVkJywgZXZlbnR9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnc2FtcGxpbmctY29tcGxldGVkJ30pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnc2FtcGxpbmctZmFpbGVkJywgZXJyb3I6IGVyck1zZyhlcnIpfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjdXJyLnBoYXNlID09PSAndXBsb2FkaW5nLXNhbXBsZXMnKSB7XG4gICAgICAgIGlmIChjdHguYXV0aGVkID09PSBudWxsIHx8IGN1cnIucmV2aXNpb25JZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIGtpbmQ6ICdzYW1wbGVzLXVwbG9hZC1mYWlsZWQnLFxuICAgICAgICAgICAgICAgIGVycm9yOiAnY29udGV4dCBub3QgcmVhZHkgZm9yIHVwbG9hZCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc2FtcGxlcyA9IGN1cnIuc2FtcGxpbmcuY29sbGVjdGVkO1xuICAgICAgICAgICAgaWYgKHNhbXBsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24uc2FtcGxlcy5zdGF0ZSA9ICdkb25lJztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ3NhbXBsZXMtdXBsb2FkLW5vdC1uZWVkZWQnfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2FtcGxlSW5wdXRzID0gc2FtcGxlcy5tYXAoKGV2ZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgIHRhYmxlTmFtZTogZXZlbnQudGFibGVOYW1lLFxuICAgICAgICAgICAgICAgIGNvbHVtbnM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXZlbnQuc2FtcGxlcy5jb2x1bW5zKS5tYXAoKFtjb2wsIHNdKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBbLi4ucy52YWx1ZXNdLFxuICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3QgQ0hVTktfU0laRSA9IDI1O1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5zYW1wbGVzLnN0YXRlID0gJ3VwbG9hZGluZyc7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnNhbXBsZXMudG90YWxUYWJsZXMgPSBzYW1wbGVJbnB1dHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5zYW1wbGVzLnVwbG9hZGVkVGFibGVzID0gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgY2h1bmtzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgICAgICB7bGVuZ3RoOiBNYXRoLmNlaWwoc2FtcGxlSW5wdXRzLmxlbmd0aCAvIENIVU5LX1NJWkUpfSxcbiAgICAgICAgICAgICAgICAoXywgaSkgPT5cbiAgICAgICAgICAgICAgICAgICAgc2FtcGxlSW5wdXRzLnNsaWNlKGkgKiBDSFVOS19TSVpFLCAoaSArIDEpICogQ0hVTktfU0laRSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IGNodW5rc1tpXTtcbiAgICAgICAgICAgICAgICBhd2FpdCBjdHguYXV0aGVkLnJldmlzaW9ucy5pbmdlc3RTYW1wbGVzLm11dGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHJldmlzaW9uSWQ6IGN1cnIucmV2aXNpb25JZCxcbiAgICAgICAgICAgICAgICAgICAgc2FtcGxlczogY2h1bmssXG4gICAgICAgICAgICAgICAgICAgIGNodW5rSW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgIGNodW5rVG90YWw6IGNodW5rcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24uc2FtcGxlcy51cGxvYWRlZFRhYmxlcyArPVxuICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmsubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogJ3NhbXBsZS1jaHVuay11cGxvYWRlZCcsXG4gICAgICAgICAgICAgICAgICAgIGNodW5rU2l6ZTogY2h1bmsubGVuZ3RoLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5zYW1wbGVzLnN0YXRlID0gJ2RvbmUnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICBgaW5nZXN0ZWQgJHtzYW1wbGVJbnB1dHMubGVuZ3RofSBzYW1wbGUgdGFibGVzIGluICR7Y2h1bmtzLmxlbmd0aH0gY2h1bmsocylgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnc2FtcGxlcy11cGxvYWQtY29tcGxldGVkJ30pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHtraW5kOiAnc2FtcGxlcy11cGxvYWQtZmFpbGVkJywgZXJyb3I6IGVyck1zZyhlcnIpfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjdXJyLnBoYXNlID09PSAnYXdhaXRpbmctcG9zdC1zYW1wbGluZycpIHtcbiAgICAgICAgaWYgKGN0eC5hdXRoZWQgPT09IG51bGwgfHwgY3Vyci5yZXZpc2lvbklkID09PSBudWxsKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAga2luZDogJ3Bvc3Qtc2FtcGxpbmctZmFpbGVkJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogJ2NvbnRleHQgbm90IHJlYWR5JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBGaXJzdCBlbnN1cmUgcG9zdC1pbnRyb3NwZWN0aW9uIGZpbmlzaGVkIChmaWxlLW1hc2sgZmFzdCBwYXRoIG1heVxuICAgICAgICAgICAgLy8gaGF2ZSBza2lwcGVkIHRoZSBleHBsaWNpdCBhd2FpdCBlYXJsaWVyKS5cbiAgICAgICAgICAgIGlmIChjdHgucG9zdEludHJvc3BlY3Rpb25Qb2xsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgY3R4LnBvc3RJbnRyb3NwZWN0aW9uUG9sbDtcbiAgICAgICAgICAgICAgICBjdHgucG9zdEludHJvc3BlY3Rpb25Qb2xsID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24uc3RhdGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0U2FtcGxpbmcuc3RhdGUgPSAnZXJyb3InO1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdFNhbXBsaW5nLmVycm9yID1cbiAgICAgICAgICAgICAgICAgICAgICAgICdza2lwcGVkIFx1MjAxNCBwb3N0LWludHJvc3BlY3Rpb24gZW5yaWNobWVudCBmYWlsZWQnO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogJ3Bvc3Qtc2FtcGxpbmctZmFpbGVkJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICdwb3N0LWludHJvc3BlY3Rpb24gZW5yaWNobWVudCBmYWlsZWQnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGRpc3BhdGNoQW5kU3RyZWFtUG9zdFNhbXBsaW5nKFxuICAgICAgICAgICAgICAgIGN0eC5hdXRoZWQsXG4gICAgICAgICAgICAgICAgY3Vyci5yZXZpc2lvbklkLFxuICAgICAgICAgICAgICAgIHN0b3JlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdFNhbXBsaW5nLnN0YXRlID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICBraW5kOiAncG9zdC1zYW1wbGluZy1mYWlsZWQnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0U2FtcGxpbmcuZXJyb3IgPz9cbiAgICAgICAgICAgICAgICAgICAgICAgICdwb3N0LXNhbXBsaW5nIGZhaWxlZCcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzcGF0Y2goe2tpbmQ6ICdwb3N0LXNhbXBsaW5nLWNvbXBsZXRlZCd9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7a2luZDogJ3Bvc3Qtc2FtcGxpbmctZmFpbGVkJywgZXJyb3I6IGVyck1zZyhlcnIpfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjdXJyLnBoYXNlID09PSAnZG9uZScgfHwgY3Vyci5waGFzZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICBjbGVhbnVwKGN0eCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG59O1xuXG5jb25zdCBraWNrUG9zdEludHJvc3BlY3Rpb25Qb2xsID0gKFxuICAgIGN0eDogVEludGVycHJldGVyQ29udGV4dCxcbiAgICBqb2JJZDogc3RyaW5nIHwgbnVsbCxcbiAgICBzdG9yZTogVFN0b3JlLFxuKTogdm9pZCA9PiB7XG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBpZiAoam9iSWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi5zdGF0ZSA9ICdkb25lJztcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi5yZXVzZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLmpvYklkID0gam9iSWQ7XG4gICAgICAgICAgICBpZiAoc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24uc3RhdGUgPSAncXVldWVkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChqb2JJZCA9PT0gbnVsbCB8fCBjdHguYXV0aGVkID09PSBudWxsKSB7XG4gICAgICAgIGN0eC5wb3N0SW50cm9zcGVjdGlvblBvbGwgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdHgucG9zdEludHJvc3BlY3Rpb25Qb2xsID0gc3RyZWFtUG9zdEludHJvc3BlY3Rpb24oXG4gICAgICAgIGN0eC5hdXRoZWQsXG4gICAgICAgIGpvYklkLFxuICAgICAgICBzdG9yZSxcbiAgICApLnRoZW4oXG4gICAgICAgICgpID0+IHt9LFxuICAgICAgICAoKSA9PiB7fSxcbiAgICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFudXAgPSAoY3R4OiBUSW50ZXJwcmV0ZXJDb250ZXh0KTogdm9pZCA9PiB7XG4gICAgaWYgKGN0eC5kYiAhPT0gbnVsbCkge1xuICAgICAgICBjdHguZGIuY2xlYW51cCgpO1xuICAgICAgICBjdHguZGIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAoY3R4LmNsZWFudXBTU0ggIT09IG51bGwpIHtcbiAgICAgICAgY3R4LmNsZWFudXBTU0goKTtcbiAgICAgICAgY3R4LmNsZWFudXBTU0ggPSBudWxsO1xuICAgIH1cbn07XG4iLCAiaW1wb3J0IHtjcmVhdGVIYXNofSBmcm9tICdub2RlOmNyeXB0byc7XG5cbi8vIFN0cnVjdHVyYWwgaW5wdXQgY29udHJhY3Qg4oCUIHRoZSBzdWJzZXQgb2YgVERhdGFiYXNlSW50cm9zcGVjdGlvbiB0aGUgaGFzaFxuLy8gcmVhZHMuIERlZmluZWQgaGVyZSBzbyBAZGJjdHgvY29tbW9uIHN0YXlzIGZyZWUgb2YgQGRiY3R4L2NvcmUgZGVwcyBhbmQgdGhlXG4vLyBmdWxsIGludHJvc3BlY3Rpb24gdHlwZSByZW1haW5zIGFzc2lnbmFibGUgdmlhIFRTIHN0cnVjdHVyYWwgdHlwaW5nLlxuZXhwb3J0IHR5cGUgVEhhc2hhYmxlSW50cm9zcGVjdGlvbiA9IHtcbiAgICByZWFkb25seSByZWxhdGlvbnM6IFJlY29yZDxcbiAgICAgICAgc3RyaW5nLFxuICAgICAgICB7XG4gICAgICAgICAgICByZWFkb25seSBraW5kOiBzdHJpbmc7XG4gICAgICAgICAgICByZWFkb25seSBhdHRyaWJ1dGVzOiBSZWNvcmQ8XG4gICAgICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHkgZGF0YV90eXBlOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHkgaXNfbnVsbGFibGU6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5IGdlbmVyYXRlZF9zdG9yYWdlPzogJ3N0b3JlZCcgfCAndmlydHVhbCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPjtcbiAgICAgICAgfVxuICAgID47XG4gICAgcmVhZG9ubHkgZW51bXM6IFJlY29yZDxzdHJpbmcsIHtyZWFkb25seSB2YWx1ZXM6IHJlYWRvbmx5IHN0cmluZ1tdfT47XG59O1xuXG5jb25zdCBjYW5vbmljYWxKU09OID0gKHY6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICAgIGlmICh2ID09PSBudWxsIHx8IHR5cGVvZiB2ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgIHJldHVybiAnWycgKyB2Lm1hcChjYW5vbmljYWxKU09OKS5qb2luKCcsJykgKyAnXSc7XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5zb3J0KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgJ3snICtcbiAgICAgICAga2V5c1xuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgICAoaykgPT5cbiAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoaykgK1xuICAgICAgICAgICAgICAgICAgICAnOicgK1xuICAgICAgICAgICAgICAgICAgICBjYW5vbmljYWxKU09OKCh2IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrXSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuam9pbignLCcpICtcbiAgICAgICAgJ30nXG4gICAgKTtcbn07XG5cbnR5cGUgVFNjaGVtYVNoYXBlID0ge1xuICAgIHJlYWRvbmx5IHJlbGF0aW9uczogUmVjb3JkPFxuICAgICAgICBzdHJpbmcsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcbiAgICAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZXM6IFJlY29yZDxcbiAgICAgICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZWFkb25seSBkYXRhX3R5cGU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHkga2luZDogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICByZWFkb25seSBpc19udWxsYWJsZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHkgZ2VuZXJhdGVkX3N0b3JhZ2U/OiAnc3RvcmVkJyB8ICd2aXJ0dWFsJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA+O1xuICAgICAgICB9XG4gICAgPjtcbiAgICByZWFkb25seSBlbnVtczogUmVjb3JkPHN0cmluZywge3JlYWRvbmx5IHZhbHVlczogcmVhZG9ubHkgc3RyaW5nW119Pjtcbn07XG5cbmNvbnN0IHByb2plY3RTY2hlbWFTaGFwZSA9IChpbnRybzogVEhhc2hhYmxlSW50cm9zcGVjdGlvbik6IFRTY2hlbWFTaGFwZSA9PiAoe1xuICAgIHJlbGF0aW9uczogT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhpbnRyby5yZWxhdGlvbnMpLm1hcCgoW25hbWUsIHJdKSA9PiBbXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtpbmQ6IHIua2luZCxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHIuYXR0cmlidXRlcykubWFwKChbYW4sIGFdKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBhbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3R5cGU6IGEuZGF0YV90eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6IGEua2luZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19udWxsYWJsZTogYS5pc19udWxsYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4oYS5raW5kID09PSAnZ2VuZXJhdGVkJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuZ2VuZXJhdGVkX3N0b3JhZ2UgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtnZW5lcmF0ZWRfc3RvcmFnZTogYS5nZW5lcmF0ZWRfc3RvcmFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSksXG4gICAgKSxcbiAgICBlbnVtczogT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhpbnRyby5lbnVtcykubWFwKChbbiwgZV0pID0+IFtcbiAgICAgICAgICAgIG4sXG4gICAgICAgICAgICB7dmFsdWVzOiBbLi4uZS52YWx1ZXNdfSxcbiAgICAgICAgXSksXG4gICAgKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgY29tcHV0ZVNjaGVtYUhhc2ggPSAoaW50cm86IFRIYXNoYWJsZUludHJvc3BlY3Rpb24pOiBzdHJpbmcgPT5cbiAgICBjcmVhdGVIYXNoKCdzaGEyNTYnKVxuICAgICAgICAudXBkYXRlKGNhbm9uaWNhbEpTT04ocHJvamVjdFNjaGVtYVNoYXBlKGludHJvKSkpXG4gICAgICAgIC5kaWdlc3QoJ2hleCcpO1xuIiwgImltcG9ydCB7cmVhZEZpbGVTeW5jLCBleGlzdHNTeW5jfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7aG9tZWRpciwgdXNlckluZm99IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtqb2lufSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IG5ldCBmcm9tICdub2RlOm5ldCc7XG5pbXBvcnQgc3NoMiBmcm9tICdzc2gyJztcbmltcG9ydCB0eXBlIHtBdXRoSGFuZGxlck1pZGRsZXdhcmUsIENvbm5lY3RDb25maWd9IGZyb20gJ3NzaDInO1xuXG5jb25zdCB7Q2xpZW50LCB1dGlsc30gPSBzc2gyO1xuaW1wb3J0IFNTSENvbmZpZyBmcm9tICdzc2gtY29uZmlnJztcbmltcG9ydCB7cnVuSW5BY3Rpb24sIHdoZW59IGZyb20gJ21vYngnO1xuaW1wb3J0IHtzY29wZX0gZnJvbSAnc2NvcGUtdXRpbGl0aWVzJztcblxuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcblxuY29uc3QgU1NIX0tFWV9PUkRFUiA9IFtcbiAgICAnaWRfZWQyNTUxOV9zaycsXG4gICAgJ2lkX2VkMjU1MTknLFxuICAgICdpZF9lY2RzYV9zaycsXG4gICAgJ2lkX2VjZHNhJyxcbiAgICAnaWRfcnNhJyxcbiAgICAnaWRfZHNhJyxcbl0gYXMgY29uc3Q7XG5cbmNvbnN0IHJlc29sdmVTU0hDb25maWcgPSAoc3RvcmU6IFRTdG9yZSkgPT4ge1xuICAgIGNvbnN0IHNzaERpciA9IGpvaW4oaG9tZWRpcigpLCAnLnNzaCcpO1xuICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBqb2luKHNzaERpciwgJ2NvbmZpZycpO1xuXG4gICAgcmV0dXJuIHNjb3BlKHtcbiAgICAgICAgaG9zdDogc3RvcmUuY29uZmlnLnNzaEhvc3QhLFxuICAgICAgICBwb3J0OiAyMixcbiAgICAgICAgdXNlcm5hbWU6IHVzZXJJbmZvKCkudXNlcm5hbWUsXG4gICAgICAgIHByaXZhdGVLZXlQYXRoOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIH0pXG4gICAgICAgIC5sZXQoKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgaWYgKCFleGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29uZmlnVGV4dCA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkID0gU1NIQ29uZmlnLnBhcnNlKGNvbmZpZ1RleHQpLmNvbXB1dGUoY29uZmlnLmhvc3QpO1xuXG4gICAgICAgICAgICBjb25zdCBpZGVudGl0eUZpbGUgPSBjb21wdXRlZFsnSWRlbnRpdHlGaWxlJ11cbiAgICAgICAgICAgICAgICA/IChBcnJheS5pc0FycmF5KGNvbXB1dGVkWydJZGVudGl0eUZpbGUnXSlcbiAgICAgICAgICAgICAgICAgICAgICA/IGNvbXB1dGVkWydJZGVudGl0eUZpbGUnXVswXVxuICAgICAgICAgICAgICAgICAgICAgIDogY29tcHV0ZWRbJ0lkZW50aXR5RmlsZSddXG4gICAgICAgICAgICAgICAgICApLnJlcGxhY2UoL15+LywgaG9tZWRpcigpKVxuICAgICAgICAgICAgICAgIDogY29uZmlnLnByaXZhdGVLZXlQYXRoO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGhvc3Q6IChjb21wdXRlZFsnSG9zdE5hbWUnXSBhcyBzdHJpbmcpID8/IGNvbmZpZy5ob3N0LFxuICAgICAgICAgICAgICAgIHBvcnQ6IGNvbXB1dGVkWydQb3J0J11cbiAgICAgICAgICAgICAgICAgICAgPyBwYXJzZUludChjb21wdXRlZFsnUG9ydCddIGFzIHN0cmluZywgMTApXG4gICAgICAgICAgICAgICAgICAgIDogY29uZmlnLnBvcnQsXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IChjb21wdXRlZFsnVXNlciddIGFzIHN0cmluZykgPz8gY29uZmlnLnVzZXJuYW1lLFxuICAgICAgICAgICAgICAgIHByaXZhdGVLZXlQYXRoOiBpZGVudGl0eUZpbGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgICAubGV0KChjb25maWcpID0+ICh7XG4gICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICBwcml2YXRlS2V5UGF0aDpcbiAgICAgICAgICAgICAgICBjb25maWcucHJpdmF0ZUtleVBhdGggPz9cbiAgICAgICAgICAgICAgICBTU0hfS0VZX09SREVSLm1hcCgobmFtZSkgPT4gam9pbihzc2hEaXIsIG5hbWUpKS5maW5kKChwYXRoKSA9PlxuICAgICAgICAgICAgICAgICAgICBleGlzdHNTeW5jKHBhdGgpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgIH0pKVxuICAgICAgICAubGV0KChjb25maWcpID0+ICh7XG4gICAgICAgICAgICBob3N0OiBjb25maWcuaG9zdCxcbiAgICAgICAgICAgIHBvcnQ6IHN0b3JlLmNvbmZpZy5zc2hQb3J0ID8/IGNvbmZpZy5wb3J0LFxuICAgICAgICAgICAgdXNlcm5hbWU6IHN0b3JlLmNvbmZpZy5zc2hVc2VybmFtZSA/PyBjb25maWcudXNlcm5hbWUsXG4gICAgICAgICAgICBwcml2YXRlS2V5UGF0aDogc3RvcmUuY29uZmlnLnNzaEtleSA/PyBjb25maWcucHJpdmF0ZUtleVBhdGgsXG4gICAgICAgIH0pKVxuICAgICAgICAudmFsdWUoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25uZWN0U1NIID0gYXN5bmMgKFxuICAgIHN0b3JlOiBUU3RvcmUsXG4pOiBQcm9taXNlPCgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIGlmICghc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5lbmFibGVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnID0gcmVzb2x2ZVNTSENvbmZpZyhzdG9yZSk7XG5cbiAgICBjb25zdCBwcml2YXRlS2V5ID1cbiAgICAgICAgY29uZmlnLnByaXZhdGVLZXlQYXRoICYmIGV4aXN0c1N5bmMoY29uZmlnLnByaXZhdGVLZXlQYXRoKVxuICAgICAgICAgICAgPyByZWFkRmlsZVN5bmMoY29uZmlnLnByaXZhdGVLZXlQYXRoKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBrZXlJc0VuY3J5cHRlZCA9XG4gICAgICAgIHByaXZhdGVLZXkgIT09IHVuZGVmaW5lZCAmJiB1dGlscy5wYXJzZUtleShwcml2YXRlS2V5KSBpbnN0YW5jZW9mIEVycm9yO1xuXG4gICAgbGV0IHB1YmxpY0tleUF0dGVtcHRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgcHJvbXB0Rm9ySW5wdXQgPSAoXG4gICAgICAgIHR5cGU6ICdwYXNzcGhyYXNlJyB8ICdwYXNzd29yZCcsXG4gICAgICAgIGZpbmlzaDogKHJlc3BvbnNlczogc3RyaW5nW10pID0+IHZvaWQsXG4gICAgKSA9PiB7XG4gICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ud3JvbmdBdHRlbXB0ID1cbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnBhc3N3b3JkUHJvbXB0VHlwZSA9PT0gdHlwZTtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ucGFzc3dvcmQgPSBudWxsO1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5uZWVkUGFzc3dvcmQgPSB0cnVlO1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5wYXNzd29yZFByb21wdFR5cGUgPSB0eXBlO1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5wcm9tcHRDb3VudCArPSAxO1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5zdGF0ZSA9ICduZWVkLXBhc3N3b3JkJztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgd2hlbigoKSA9PiBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnBhc3N3b3JkICE9PSBudWxsKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLm5lZWRQYXNzd29yZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uc3RhdGUgPSAnY29ubmVjdGluZyc7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZmluaXNoKFtzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnBhc3N3b3JkIV0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJvbXB0Rm9yUGFzc3BocmFzZSA9IChmaW5pc2g6ICh2YWxpZFBhc3NwaHJhc2U6IHN0cmluZykgPT4gdm9pZCkgPT4ge1xuICAgICAgICBjb25zdCBlbnZQYXNzcGhyYXNlID0gcHJvY2Vzcy5lbnZbJ1NTSF9QQVNTUEhSQVNFJ107XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGVudlBhc3NwaHJhc2UgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgISh1dGlscy5wYXJzZUtleShwcml2YXRlS2V5ISwgZW52UGFzc3BocmFzZSkgaW5zdGFuY2VvZiBFcnJvcilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBmaW5pc2goZW52UGFzc3BocmFzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW52UGFzc3BocmFzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5wYXNzd29yZFByb21wdFR5cGUgPSAncGFzc3BocmFzZSc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb21wdEZvcklucHV0KCdwYXNzcGhyYXNlJywgKHJlc3BvbnNlcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJ5UGFzc3BocmFzZSA9IHJlc3BvbnNlc1swXSE7XG4gICAgICAgICAgICB1dGlscy5wYXJzZUtleShwcml2YXRlS2V5ISwgdHJ5UGFzc3BocmFzZSkgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgICAgICAgID8gcHJvbXB0Rm9yUGFzc3BocmFzZShmaW5pc2gpXG4gICAgICAgICAgICAgICAgOiBmaW5pc2godHJ5UGFzc3BocmFzZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBhdXRoSGFuZGxlcjogQXV0aEhhbmRsZXJNaWRkbGV3YXJlID0gKFxuICAgICAgICBtZXRob2RzTGVmdCxcbiAgICAgICAgX3BhcnRpYWxTdWNjZXNzLFxuICAgICAgICBuZXh0LFxuICAgICkgPT4ge1xuICAgICAgICBjb25zdCB7dXNlcm5hbWV9ID0gY29uZmlnO1xuXG4gICAgICAgIC8vIEZpcnN0IGNhbGw6IG1ldGhvZHNMZWZ0IGlzIG51bGwgXHUyMDE0IHNlbmQgJ25vbmUnIHRvIGRpc2NvdmVyIGF2YWlsYWJsZSBtZXRob2RzXG4gICAgICAgICFtZXRob2RzTGVmdFxuICAgICAgICAgICAgPyBuZXh0KHt0eXBlOiAnbm9uZScsIHVzZXJuYW1lfSlcbiAgICAgICAgICAgIDogbWV0aG9kc0xlZnQuaW5jbHVkZXMoJ3B1YmxpY2tleScpICYmXG4gICAgICAgICAgICAgICAgcHJpdmF0ZUtleSAmJlxuICAgICAgICAgICAgICAgIGtleUlzRW5jcnlwdGVkICYmXG4gICAgICAgICAgICAgICAgIXB1YmxpY0tleUF0dGVtcHRlZFxuICAgICAgICAgICAgICA/IHByb21wdEZvclBhc3NwaHJhc2UoKHZhbGlkUGFzc3BocmFzZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwdWJsaWNLZXlBdHRlbXB0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBuZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdwdWJsaWNrZXknLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHByaXZhdGVLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzcGhyYXNlOiB2YWxpZFBhc3NwaHJhc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIDogbWV0aG9kc0xlZnQuaW5jbHVkZXMoJ3B1YmxpY2tleScpICYmXG4gICAgICAgICAgICAgICAgICBwcml2YXRlS2V5ICYmXG4gICAgICAgICAgICAgICAgICAhcHVibGljS2V5QXR0ZW1wdGVkXG4gICAgICAgICAgICAgICAgPyAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHB1YmxpY0tleUF0dGVtcHRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgbmV4dCh7dHlwZTogJ3B1YmxpY2tleScsIHVzZXJuYW1lLCBrZXk6IHByaXZhdGVLZXl9KTtcbiAgICAgICAgICAgICAgICAgIH0pKClcbiAgICAgICAgICAgICAgICA6IG1ldGhvZHNMZWZ0LmluY2x1ZGVzKCdrZXlib2FyZC1pbnRlcmFjdGl2ZScpXG4gICAgICAgICAgICAgICAgICA/IG5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2tleWJvYXJkLWludGVyYWN0aXZlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbXB0OiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2luc3RydWN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbGFuZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcHJvbXB0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2gsXG4gICAgICAgICAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHRGb3JJbnB1dCgncGFzc3dvcmQnLCBmaW5pc2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIDogbWV0aG9kc0xlZnQuaW5jbHVkZXMoJ3Bhc3N3b3JkJylcbiAgICAgICAgICAgICAgICAgICAgPyBwcm9tcHRGb3JJbnB1dCgncGFzc3dvcmQnLCAocmVzcG9uc2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHJlc3BvbnNlc1swXSEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogbmV4dCgnbm9uZScpO1xuICAgIH07XG5cbiAgICBjb25zdCBjb25uZWN0Q29uZmlnOiBDb25uZWN0Q29uZmlnID0ge1xuICAgICAgICBob3N0OiBjb25maWcuaG9zdCxcbiAgICAgICAgcG9ydDogY29uZmlnLnBvcnQsXG4gICAgICAgIHVzZXJuYW1lOiBjb25maWcudXNlcm5hbWUsXG4gICAgICAgIHJlYWR5VGltZW91dDogMCxcbiAgICAgICAga2VlcGFsaXZlSW50ZXJ2YWw6IDEwXzAwMCxcbiAgICAgICAga2VlcGFsaXZlQ291bnRNYXg6IDMsXG4gICAgICAgIGF1dGhIYW5kbGVyOiBhdXRoSGFuZGxlcixcbiAgICB9O1xuXG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnBpY2tlZEhvc3RuYW1lID0gY29uZmlnLmhvc3Q7XG4gICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ucGlja2VkUG9ydCA9IGNvbmZpZy5wb3J0O1xuICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnBpY2tlZFVzZXJuYW1lID0gY29uZmlnLnVzZXJuYW1lO1xuICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnBpY2tlZEtleVBhdGggPSBjb25maWcucHJpdmF0ZUtleVBhdGggPz8gbnVsbDtcbiAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5zdGF0ZSA9ICdjb25uZWN0aW5nJztcbiAgICB9KTtcblxuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDbGllbnQoKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTwoKSA9PiB2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNsaWVudC5vbigncmVhZHknLCAoKSA9PiB7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5zdGF0ZSA9ICdjb25uZWN0ZWQnO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ubmVlZFBhc3N3b3JkID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcmVtb3RlSG9zdCA9IHN0b3JlLmNvbmZpZy5ob3N0bmFtZSA/PyAnbG9jYWxob3N0JztcbiAgICAgICAgICAgIGNvbnN0IHJlbW90ZVBvcnQgPSBzdG9yZS5jb25maWcucG9ydCA/PyA1NDMyO1xuXG4gICAgICAgICAgICBjb25zdCBzZXJ2ZXIgPSBuZXQuY3JlYXRlU2VydmVyKChzb2NrZXQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbFBvcnQgPSAoc2VydmVyLmFkZHJlc3MoKSBhcyBuZXQuQWRkcmVzc0luZm8pLnBvcnQ7XG5cbiAgICAgICAgICAgICAgICBjbGllbnQuZm9yd2FyZE91dChcbiAgICAgICAgICAgICAgICAgICAgJzEyNy4wLjAuMScsXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsUG9ydCxcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlSG9zdCxcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlUG9ydCxcbiAgICAgICAgICAgICAgICAgICAgKGVyciwgc3RyZWFtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5waXBlKHN0cmVhbSkucGlwZShzb2NrZXQpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc2VydmVyLmxpc3RlbigwLCAnMTI3LjAuMC4xJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsUG9ydCA9IChzZXJ2ZXIuYWRkcmVzcygpIGFzIG5ldC5BZGRyZXNzSW5mbykucG9ydDtcblxuICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5sb2NhbFBvcnQgPSBsb2NhbFBvcnQ7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNsaWVudC5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5zdGF0ZSA9ICdpZGxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ubG9jYWxQb3J0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY2xpZW50Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLnN0YXRlID0gJ2Vycm9yJztcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLmVycm9yID0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNsaWVudC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uc3RhdGUgIT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ubG9jYWxQb3J0ID0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBjbGllbnQuY29ubmVjdChjb25uZWN0Q29uZmlnKTtcbiAgICB9KTtcbn07XG4iLCAiaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHBnIGZyb20gJ3BnJztcbmltcG9ydCB7cnVuSW5BY3Rpb24sIHdoZW59IGZyb20gJ21vYngnO1xuaW1wb3J0IHtzY29wZX0gZnJvbSAnc2NvcGUtdXRpbGl0aWVzJztcblxuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB0eXBlIHtUU1NMTW9kZX0gZnJvbSAnLi4vaW5kZXgubWpzJztcbmltcG9ydCB7ZmV0Y2hQb3N0Z3Jlc1ZlcnNpb259IGZyb20gJy4uL2RiL3ZlcnNpb24ubWpzJztcblxuZXhwb3J0IHR5cGUgVERCQ29ubmVjdGlvbiA9IHtcbiAgICByZWFkb25seSBwb29sOiBJbnN0YW5jZVR5cGU8dHlwZW9mIFBvb2w+O1xuICAgIHJlYWRvbmx5IGNsZWFudXA6ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCB7UG9vbH0gPSBwZztcblxuY29uc3QgZm9ybWF0Q29ubmVjdGlvbkVycm9yID0gKGVycjogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcoZXJyKSB8fCAnVW5rbm93biBlcnJvcic7XG4gICAgfVxuXG4gICAgaWYgKGVyci5tZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBlcnIubWVzc2FnZTtcbiAgICB9XG5cbiAgICAvLyBTeXN0ZW0gZXJyb3JzIChFQ09OTlJFRlVTRUQsIEVUSU1FRE9VVCwgZXRjLilcbiAgICBjb25zdCBzeXNFcnIgPSBlcnIgYXMge1xuICAgICAgICBjb2RlPzogc3RyaW5nO1xuICAgICAgICBzeXNjYWxsPzogc3RyaW5nO1xuICAgICAgICBhZGRyZXNzPzogc3RyaW5nO1xuICAgICAgICBwb3J0PzogbnVtYmVyO1xuICAgIH07XG4gICAgaWYgKHN5c0Vyci5jb2RlKSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gW3N5c0Vyci5jb2RlXTtcbiAgICAgICAgaWYgKHN5c0Vyci5zeXNjYWxsKSB7XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKHN5c0Vyci5zeXNjYWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3lzRXJyLmFkZHJlc3MpIHtcbiAgICAgICAgICAgIHBhcnRzLnB1c2goc3lzRXJyLmFkZHJlc3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzeXNFcnIucG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzeXNFcnIucG9ydCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdDb25uZWN0aW9uIGZhaWxlZCc7XG59O1xuXG50eXBlIFRSZXNvbHZlZERCQ29uZmlnID0ge1xuICAgIHJlYWRvbmx5IGhvc3RuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGRhdGFiYXNlOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgdXNlcm5hbWU6IHN0cmluZztcbiAgICByZWFkb25seSBwYXNzd29yZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuY29uc3QgcmVzb2x2ZURCQ29uZmlnID0gKHN0b3JlOiBUU3RvcmUpOiBUUmVzb2x2ZWREQkNvbmZpZyA9PlxuICAgIHNjb3BlKHtcbiAgICAgICAgaG9zdG5hbWU6ICdsb2NhbGhvc3QnLFxuICAgICAgICBwb3J0OiA1NDMyLFxuICAgICAgICBkYXRhYmFzZTogJ3Bvc3RncmVzJyxcbiAgICAgICAgdXNlcm5hbWU6ICdwb3N0Z3JlcycsXG4gICAgICAgIHBhc3N3b3JkOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIH0pXG4gICAgICAgIC5sZXQoKGNvbmZpZykgPT4gKHtcbiAgICAgICAgICAgIGhvc3RuYW1lOiBwcm9jZXNzLmVudlsnUEdIT1NUJ10gPz8gY29uZmlnLmhvc3RuYW1lLFxuICAgICAgICAgICAgcG9ydDogcHJvY2Vzcy5lbnZbJ1BHUE9SVCddXG4gICAgICAgICAgICAgICAgPyBwYXJzZUludChwcm9jZXNzLmVudlsnUEdQT1JUJ10sIDEwKVxuICAgICAgICAgICAgICAgIDogY29uZmlnLnBvcnQsXG4gICAgICAgICAgICBkYXRhYmFzZTogcHJvY2Vzcy5lbnZbJ1BHREFUQUJBU0UnXSA/PyBjb25maWcuZGF0YWJhc2UsXG4gICAgICAgICAgICB1c2VybmFtZTogcHJvY2Vzcy5lbnZbJ1BHVVNFUiddID8/IGNvbmZpZy51c2VybmFtZSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBwcm9jZXNzLmVudlsnUEdQQVNTV09SRCddID8/IGNvbmZpZy5wYXNzd29yZCxcbiAgICAgICAgfSkpXG4gICAgICAgIC5sZXQoKGNvbmZpZykgPT5cbiAgICAgICAgICAgIHN0b3JlLmNvbmZpZy5jb25uZWN0aW9uU3RyaW5nXG4gICAgICAgICAgICAgICAgPyBzY29wZShuZXcgVVJMKHN0b3JlLmNvbmZpZy5jb25uZWN0aW9uU3RyaW5nKSlcbiAgICAgICAgICAgICAgICAgICAgICAubGV0KCh1cmwpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lOiB1cmwuaG9zdG5hbWUgfHwgY29uZmlnLmhvc3RuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0OiB1cmwucG9ydCA/IHBhcnNlSW50KHVybC5wb3J0LCAxMCkgOiBjb25maWcucG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2U6IHVybC5wYXRobmFtZS5zbGljZSgxKSB8fCBjb25maWcuZGF0YWJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlVVJJQ29tcG9uZW50KHVybC51c2VybmFtZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy51c2VybmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHVybC5wYXNzd29yZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkZWNvZGVVUklDb21wb25lbnQodXJsLnBhc3N3b3JkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb25maWcucGFzc3dvcmQsXG4gICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgLnZhbHVlKClcbiAgICAgICAgICAgICAgICA6IGNvbmZpZyxcbiAgICAgICAgKVxuICAgICAgICAubGV0KChjb25maWcpID0+ICh7XG4gICAgICAgICAgICBob3N0bmFtZTogc3RvcmUuY29uZmlnLmhvc3RuYW1lID8/IGNvbmZpZy5ob3N0bmFtZSxcbiAgICAgICAgICAgIHBvcnQ6IHN0b3JlLmNvbmZpZy5wb3J0ID8/IGNvbmZpZy5wb3J0LFxuICAgICAgICAgICAgZGF0YWJhc2U6IHN0b3JlLmNvbmZpZy5kYXRhYmFzZSA/PyBjb25maWcuZGF0YWJhc2UsXG4gICAgICAgICAgICB1c2VybmFtZTogc3RvcmUuY29uZmlnLnVzZXJuYW1lID8/IGNvbmZpZy51c2VybmFtZSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBjb25maWcucGFzc3dvcmQsXG4gICAgICAgIH0pKVxuICAgICAgICAudmFsdWUoKTtcblxudHlwZSBUU1NMQ29uZmlnID1cbiAgICB8IGZhbHNlXG4gICAgfCB7XG4gICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBib29sZWFuO1xuICAgICAgICAgIGNhPzogc3RyaW5nO1xuICAgICAgICAgIGNlcnQ/OiBzdHJpbmc7XG4gICAgICAgICAga2V5Pzogc3RyaW5nO1xuICAgICAgfTtcblxuY29uc3QgYnVpbGRTU0xDb25maWcgPSAoc3RvcmU6IFRTdG9yZSk6IFRTU0xDb25maWcgPT4ge1xuICAgIGNvbnN0IG1vZGU6IFRTU0xNb2RlID0gc3RvcmUuY29uZmlnLnNzbG1vZGUgPz8gJ3ByZWZlcic7XG5cbiAgICByZXR1cm4gbW9kZSA9PT0gJ2Rpc2FibGUnXG4gICAgICAgID8gZmFsc2VcbiAgICAgICAgOiB7XG4gICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDpcbiAgICAgICAgICAgICAgICAgIG1vZGUgPT09ICd2ZXJpZnktY2EnIHx8IG1vZGUgPT09ICd2ZXJpZnktZnVsbCcsXG4gICAgICAgICAgICAgIC4uLihzdG9yZS5jb25maWcuc3Nscm9vdGNlcnRcbiAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2E6IHJlYWRGaWxlU3luYyhzdG9yZS5jb25maWcuc3Nscm9vdGNlcnQsICd1dGYtOCcpLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgICAgLi4uKHN0b3JlLmNvbmZpZy5zc2xjZXJ0XG4gICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQ6IHJlYWRGaWxlU3luYyhzdG9yZS5jb25maWcuc3NsY2VydCwgJ3V0Zi04JyksXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgICAuLi4oc3RvcmUuY29uZmlnLnNzbGtleVxuICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHJlYWRGaWxlU3luYyhzdG9yZS5jb25maWcuc3Nsa2V5LCAndXRmLTgnKSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25uZWN0REIgPSBhc3luYyAoXG4gICAgc3RvcmU6IFRTdG9yZSxcbik6IFByb21pc2U8VERCQ29ubmVjdGlvbiB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlc29sdmVEQkNvbmZpZyhzdG9yZSk7XG4gICAgY29uc3Qgc3NsID0gYnVpbGRTU0xDb25maWcoc3RvcmUpO1xuXG4gICAgLy8gU1NIIHR1bm5lbDogY29ubmVjdCB2aWEgbG9jYWxob3N0IHR1bm5lbCwgYnV0IGRpc3BsYXkgdGhlIHJlYWwgcmVtb3RlIHRhcmdldFxuICAgIGNvbnN0IGNvbm5lY3Rpb25Ib3N0ID1cbiAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5lbmFibGVkICYmXG4gICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ubG9jYWxQb3J0ICE9PSBudWxsXG4gICAgICAgICAgICA/ICcxMjcuMC4wLjEnXG4gICAgICAgICAgICA6IGNvbmZpZy5ob3N0bmFtZTtcbiAgICBjb25zdCBjb25uZWN0aW9uUG9ydCA9XG4gICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uZW5hYmxlZCAmJlxuICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLmxvY2FsUG9ydCAhPT0gbnVsbFxuICAgICAgICAgICAgPyBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLmxvY2FsUG9ydFxuICAgICAgICAgICAgOiBjb25maWcucG9ydDtcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBpY2tlZEhvc3RuYW1lID0gY29uZmlnLmhvc3RuYW1lO1xuICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucGlja2VkUG9ydCA9IGNvbmZpZy5wb3J0O1xuICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucGlja2VkRGF0YWJhc2UgPSBjb25maWcuZGF0YWJhc2U7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5waWNrZWRVc2VybmFtZSA9IGNvbmZpZy51c2VybmFtZTtcbiAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnN0YXRlID0gJ2Nvbm5lY3RpbmcnO1xuICAgIH0pO1xuXG4gICAgY29uc3QgYXR0ZW1wdENvbm5lY3Rpb24gPSBhc3luYyAoXG4gICAgICAgIHBhc3N3b3JkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgIHNzbENvbmZpZzogVFNTTENvbmZpZyxcbiAgICApOiBQcm9taXNlPFREQkNvbm5lY3Rpb24gfCB1bmRlZmluZWQ+ID0+IHtcbiAgICAgICAgY29uc3QgcG9vbCA9IG5ldyBQb29sKHtcbiAgICAgICAgICAgIGhvc3Q6IGNvbm5lY3Rpb25Ib3N0LFxuICAgICAgICAgICAgcG9ydDogY29ubmVjdGlvblBvcnQsXG4gICAgICAgICAgICBkYXRhYmFzZTogY29uZmlnLmRhdGFiYXNlLFxuICAgICAgICAgICAgdXNlcjogY29uZmlnLnVzZXJuYW1lLFxuICAgICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgICBzc2w6IHNzbENvbmZpZyxcbiAgICAgICAgICAgIGNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzOiAxMF8wMDAsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBwb29sLmNvbm5lY3QoKTtcbiAgICAgICAgICAgIGNsaWVudC5yZWxlYXNlKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBhd2FpdCBmZXRjaFBvc3RncmVzVmVyc2lvbihwb29sKTtcblxuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5wb3N0Z3Jlc1ZlcnNpb24gPVxuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uLnZlcnNpb247XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBvc3RncmVzVmVyc2lvbk51bWJlciA9XG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb24udmVyc2lvbl9udW07XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnN0YXRlID0gJ2Nvbm5lY3RlZCc7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwb29sLFxuICAgICAgICAgICAgICAgIGNsZWFudXA6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcG9vbC5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnN0YXRlID0gJ2lkbGUnO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBhd2FpdCBwb29sLmVuZCgpO1xuXG4gICAgICAgICAgICAvLyBTU0wgZXJyb3JzIGhhcHBlbiBiZWZvcmUgYXV0aCBcdTIwMTQgY2hlY2sgZmlyc3RcbiAgICAgICAgICAgIGNvbnN0IGVyck1zZyA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGlzU1NMRXJyb3IgPSBlcnJNc2cuaW5jbHVkZXMoJ2RvZXMgbm90IHN1cHBvcnQgU1NMJyk7XG4gICAgICAgICAgICBjb25zdCBzc2xNb2RlOiBUU1NMTW9kZSA9IHN0b3JlLmNvbmZpZy5zc2xtb2RlID8/ICdwcmVmZXInO1xuXG4gICAgICAgICAgICBpZiAoaXNTU0xFcnJvciAmJiBzc2xNb2RlID09PSAncHJlZmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhdHRlbXB0Q29ubmVjdGlvbihwYXNzd29yZCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwZ0NvZGUgPSAoZXJyIGFzIHtjb2RlPzogc3RyaW5nfSkuY29kZTtcbiAgICAgICAgICAgIGNvbnN0IGlzQXV0aEVycm9yID1cbiAgICAgICAgICAgICAgICBwZ0NvZGUgPT09ICcyOFAwMScgfHxcbiAgICAgICAgICAgICAgICBwZ0NvZGUgPT09ICcyODAwMCcgfHxcbiAgICAgICAgICAgICAgICBlcnJNc2cuaW5jbHVkZXMoJ3Bhc3N3b3JkIG11c3QgYmUgYSBzdHJpbmcnKTtcblxuICAgICAgICAgICAgaWYgKCFpc0F1dGhFcnJvcikge1xuICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnN0YXRlID0gJ2Vycm9yJztcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLmVycm9yID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdENvbm5lY3Rpb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ud3JvbmdBdHRlbXB0ID1cbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnByb21wdENvdW50ID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5wYXNzd29yZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnByb21wdENvdW50ICs9IDE7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnN0YXRlID0gJ25lZWQtcGFzc3dvcmQnO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHdoZW4oKCkgPT4gc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBhc3N3b3JkICE9PSBudWxsKTtcblxuICAgICAgICAgICAgY29uc3QgbmV3UGFzc3dvcmQgPSBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucGFzc3dvcmQhO1xuXG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBhc3N3b3JkID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uc3RhdGUgPSAnY29ubmVjdGluZyc7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRDb25uZWN0aW9uKG5ld1Bhc3N3b3JkLCBzc2xDb25maWcpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBhdHRlbXB0Q29ubmVjdGlvbihjb25maWcucGFzc3dvcmQsIHNzbCk7XG59O1xuIiwgImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbmV4cG9ydCB0eXBlIFRQb3N0Z3Jlc1ZlcnNpb24gPSB7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIHZlcnNpb25fbnVtOiBudW1iZXI7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hQb3N0Z3Jlc1ZlcnNpb24gPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbik6IFByb21pc2U8VFBvc3RncmVzVmVyc2lvbj4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VFBvc3RncmVzVmVyc2lvbj4oYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIGN1cnJlbnRfc2V0dGluZygnc2VydmVyX3ZlcnNpb24nKSBBUyB2ZXJzaW9uLFxuICAgICAgICAgICAgY3VycmVudF9zZXR0aW5nKCdzZXJ2ZXJfdmVyc2lvbl9udW0nKTo6aW50IEFTIHZlcnNpb25fbnVtXG4gICAgYCk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3NbMF07XG59O1xuXG5leHBvcnQgdHlwZSBURGF0YWJhc2VJZGVudGlmaWVyID0ge1xuICAgIHN5c3RlbV9pZGVudGlmaWVyOiBzdHJpbmc7XG4gICAgZGF0YWJhc2Vfb2lkOiBudW1iZXI7XG4gICAgZGF0YWJhc2VfbmFtZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoRGF0YWJhc2VDb21tZW50ID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PHtjb21tZW50OiBzdHJpbmcgfCBudWxsfT4oYFxuICAgICAgICBTRUxFQ1Qgc2hvYmpfZGVzY3JpcHRpb24oZC5vaWQsICdwZ19kYXRhYmFzZScpIEFTIGNvbW1lbnRcbiAgICAgICAgRlJPTSBwZ19kYXRhYmFzZSBkXG4gICAgICAgIFdIRVJFIGQuZGF0bmFtZSA9IGN1cnJlbnRfZGF0YWJhc2UoKVxuICAgIGApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzWzBdLmNvbW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hEYXRhYmFzZUlkZW50aWZpZXIgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbik6IFByb21pc2U8VERhdGFiYXNlSWRlbnRpZmllcj4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VERhdGFiYXNlSWRlbnRpZmllcj4oYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIHN5c3RlbV9pZGVudGlmaWVyOjp0ZXh0IEFTIHN5c3RlbV9pZGVudGlmaWVyLFxuICAgICAgICAgICAgKFNFTEVDVCBvaWQ6OmludCBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIGRhdG5hbWUgPSBjdXJyZW50X2RhdGFiYXNlKCkpIEFTIGRhdGFiYXNlX29pZCxcbiAgICAgICAgICAgIGN1cnJlbnRfZGF0YWJhc2UoKSBBUyBkYXRhYmFzZV9uYW1lXG4gICAgICAgIEZST00gcGdfY29udHJvbF9zeXN0ZW0oKVxuICAgIGApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzWzBdO1xufTtcbiIsICJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuaW1wb3J0IFBRdWV1ZSBmcm9tICdwLXF1ZXVlJztcbmltcG9ydCB7cnVuSW5BY3Rpb259IGZyb20gJ21vYngnO1xuXG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi9zdG9yZS5tanMnO1xuaW1wb3J0IHR5cGUge1REYXRhYmFzZUludHJvc3BlY3Rpb259IGZyb20gJ0BkYmN0eC9jb3JlJztcbmltcG9ydCB0eXBlIHtUQXR0cmlidXRlSW5mb30gZnJvbSAnLi4vZGIvYXR0cmlidXRlcy5tanMnO1xuaW1wb3J0IHR5cGUge1RJbmRleEluZm99IGZyb20gJy4uL2RiL2luZGV4ZXMubWpzJztcbmltcG9ydCB0eXBlIHtURm9yZWlnbktleUluZm99IGZyb20gJy4uL2RiL2ZvcmVpZ24ta2V5cy5tanMnO1xuaW1wb3J0IHR5cGUge1RSZWxhdGlvblN0YXRzfSBmcm9tICcuLi9kYi9zdGF0cy5tanMnO1xuaW1wb3J0IHtcbiAgICBmZXRjaERhdGFiYXNlSWRlbnRpZmllcixcbiAgICBmZXRjaERhdGFiYXNlQ29tbWVudCxcbiAgICBmZXRjaFB1YmxpY1JlbGF0aW9ucyxcbiAgICBmZXRjaFB1YmxpY0VudW1zLFxuICAgIGZldGNoUmVsYXRpb25BdHRyaWJ1dGVzLFxuICAgIGZldGNoUmVsYXRpb25JbmRleGVzLFxuICAgIGZldGNoUmVsYXRpb25Gb3JlaWduS2V5cyxcbiAgICBmZXRjaFZpZXdEZWZpbml0aW9uLFxuICAgIGFuYWx5emVSZWxhdGlvbixcbiAgICBmZXRjaFJlbGF0aW9uU3RhdHMsXG4gICAgZmV0Y2hQdWJsaWNDaGVja0NvbnN0cmFpbnRzLFxuICAgIGZldGNoSW5zdGFsbGVkRXh0ZW5zaW9ucyxcbiAgICBmZXRjaFB1YmxpY1NlcXVlbmNlcyxcbiAgICBmZXRjaFB1YmxpY1RyaWdnZXJzLFxuICAgIGZldGNoUHVibGljRnVuY3Rpb25zLFxuICAgIGZldGNoUHVibGljQ3VzdG9tVHlwZXMsXG4gICAgZmV0Y2hQdWJsaWNSTFMsXG59IGZyb20gJy4uL2RiL2luZGV4Lm1qcyc7XG5cbmNvbnN0IHRvUmVjb3JkID0gPFQgZXh0ZW5kcyB1bmtub3duPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGtleTogKGl0ZW06IFQpID0+IHN0cmluZyxcbik6IFJlY29yZDxzdHJpbmcsIFQ+ID0+XG4gICAgT2JqZWN0LmZyb21FbnRyaWVzKGl0ZW1zLm1hcCgoaXRlbSkgPT4gW2tleShpdGVtKSwgaXRlbV0pKTtcblxuY29uc3QgdHJhbnNmb3JtQXR0cmlidXRlID0gKGF0dHI6IFRBdHRyaWJ1dGVJbmZvKSA9PiB7XG4gICAgY29uc3QgYmFzZSA9IHtcbiAgICAgICAgbmFtZTogYXR0ci5hdHRyaWJ1dGVfbmFtZSxcbiAgICAgICAgZGF0YV90eXBlOiBhdHRyLmRhdGFfdHlwZSxcbiAgICAgICAgaXNfbnVsbGFibGU6IGF0dHIuaXNfbnVsbGFibGUsXG4gICAgICAgIGNvbW1lbnQ6IGF0dHIuY29tbWVudCxcbiAgICB9O1xuXG4gICAgaWYgKGF0dHIua2luZCA9PT0gJ2dlbmVyYXRlZCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmJhc2UsXG4gICAgICAgICAgICBraW5kOiAnZ2VuZXJhdGVkJyBhcyBjb25zdCxcbiAgICAgICAgICAgIGdlbmVyYXRlZF9zdG9yYWdlOiBhdHRyLmdlbmVyYXRlZF9zdG9yYWdlISBhcyAnc3RvcmVkJyB8ICd2aXJ0dWFsJyxcbiAgICAgICAgICAgIGdlbmVyYXRlZF9leHByZXNzaW9uOiBhdHRyLmdlbmVyYXRlZF9leHByZXNzaW9uISxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0ci5oYXNfZGVmYXVsdFxuICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgICAgICAga2luZDogJ3JlZ3VsYXInIGFzIGNvbnN0LFxuICAgICAgICAgICAgICBoYXNfZGVmYXVsdDogdHJ1ZSBhcyBjb25zdCxcbiAgICAgICAgICAgICAgZGVmYXVsdF9leHByZXNzaW9uOiBhdHRyLmRlZmF1bHRfZXhwcmVzc2lvbiEsXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgICAgICAga2luZDogJ3JlZ3VsYXInIGFzIGNvbnN0LFxuICAgICAgICAgICAgICBoYXNfZGVmYXVsdDogZmFsc2UgYXMgY29uc3QsXG4gICAgICAgICAgfTtcbn07XG5cbmNvbnN0IGRlcml2ZUluZGV4S2luZCA9IChpZHg6IFRJbmRleEluZm8pID0+XG4gICAgaWR4LmlzX3ByaW1hcnlcbiAgICAgICAgPyAoe2luZGV4X2tpbmQ6ICdwcmltYXJ5J30gYXMgY29uc3QpXG4gICAgICAgIDogaWR4LmlzX3VuaXF1ZVxuICAgICAgICAgID8gKHtpbmRleF9raW5kOiAndW5pcXVlJ30gYXMgY29uc3QpXG4gICAgICAgICAgOiBpZHguaXNfZXhjbHVzaW9uXG4gICAgICAgICAgICA/ICh7XG4gICAgICAgICAgICAgICAgICBpbmRleF9raW5kOiAnZXhjbHVzaW9uJyxcbiAgICAgICAgICAgICAgICAgIGV4Y2x1c2lvbl9vcGVyYXRvcnM6IGlkeC5leGNsdXNpb25fb3BlcmF0b3JzISxcbiAgICAgICAgICAgICAgfSBhcyBjb25zdClcbiAgICAgICAgICAgIDogKHtpbmRleF9raW5kOiAncGxhaW4nfSBhcyBjb25zdCk7XG5cbmNvbnN0IHRyYW5zZm9ybUluZGV4ID0gKGlkeDogVEluZGV4SW5mbykgPT4gKHtcbiAgICBpbmRleF9uYW1lOiBpZHguaW5kZXhfbmFtZSxcbiAgICByZWxhdGlvbl9uYW1lOiBpZHgucmVsYXRpb25fbmFtZSxcbiAgICBhdHRyaWJ1dGVzOiBpZHguYXR0cmlidXRlcyxcbiAgICBkZWZpbml0aW9uOiBpZHguZGVmaW5pdGlvbixcbiAgICBjb21tZW50OiBpZHguY29tbWVudCxcbiAgICAuLi5kZXJpdmVJbmRleEtpbmQoaWR4KSxcbiAgICAuLi4oaWR4LmlzX3BhcnRpYWxcbiAgICAgICAgPyAoe1xuICAgICAgICAgICAgICBpc19wYXJ0aWFsOiB0cnVlLFxuICAgICAgICAgICAgICBwYXJ0aWFsX3ByZWRpY2F0ZTogaWR4LnBhcnRpYWxfcHJlZGljYXRlISxcbiAgICAgICAgICB9IGFzIGNvbnN0KVxuICAgICAgICA6ICh7aXNfcGFydGlhbDogZmFsc2V9IGFzIGNvbnN0KSksXG59KTtcblxuY29uc3QgdHJhbnNmb3JtUmVmZXJlbmNlID0gKGZrOiBURm9yZWlnbktleUluZm8pID0+ICh7XG4gICAgY29uc3RyYWludF9uYW1lOiBmay5jb25zdHJhaW50X25hbWUsXG4gICAgYXR0cmlidXRlczogZmsuYXR0cmlidXRlcyxcbiAgICByZWZlcmVuY2VkX3JlbGF0aW9uOiBmay5yZWZlcmVuY2VkX3JlbGF0aW9uLFxuICAgIHJlZmVyZW5jZWRfYXR0cmlidXRlczogZmsucmVmZXJlbmNlZF9hdHRyaWJ1dGVzLFxuICAgIG9uX3VwZGF0ZTogZmsub25fdXBkYXRlLFxuICAgIG9uX2RlbGV0ZTogZmsub25fZGVsZXRlLFxuICAgIGNvbW1lbnQ6IGZrLmNvbW1lbnQsXG59KTtcblxuZXhwb3J0IGNvbnN0IGFzc2VtYmxlRGF0YWJhc2UgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICBzdG9yZTogVFN0b3JlLFxuKTogUHJvbWlzZTxURGF0YWJhc2VJbnRyb3NwZWN0aW9uPiA9PiB7XG4gICAgY29uc3QgcXVldWUgPSBuZXcgUFF1ZXVlKHtjb25jdXJyZW5jeTogM30pO1xuICAgIGNvbnN0IGNvdW50cyA9IHN0b3JlLnN0ZXBzLmludHJvc3BlY3Rpb24uY291bnRzO1xuXG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zdGVwcy5pbnRyb3NwZWN0aW9uLnN0YXRlID0gJ2ZldGNoaW5nJztcbiAgICB9KTtcblxuICAgIGNvbnN0IFtpZGVudGlmaWVyLCBjb21tZW50XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoRGF0YWJhc2VJZGVudGlmaWVyKHBvb2wpKSxcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoRGF0YWJhc2VDb21tZW50KHBvb2wpKSxcbiAgICBdKTtcblxuICAgIGNvbnN0IFtcbiAgICAgICAgZ3JvdXBlZCxcbiAgICAgICAgZW51bXMsXG4gICAgICAgIGNoZWNrQ29uc3RyYWludHMsXG4gICAgICAgIGV4dGVuc2lvbnMsXG4gICAgICAgIHNlcXVlbmNlcyxcbiAgICAgICAgdHJpZ2dlcnMsXG4gICAgICAgIGZ1bmN0aW9ucyxcbiAgICAgICAgY3VzdG9tVHlwZXMsXG4gICAgICAgIHJscyxcbiAgICBdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hQdWJsaWNSZWxhdGlvbnMocG9vbCkpLFxuICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hQdWJsaWNFbnVtcyhwb29sKSksXG4gICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFB1YmxpY0NoZWNrQ29uc3RyYWludHMocG9vbCkpLFxuICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hJbnN0YWxsZWRFeHRlbnNpb25zKHBvb2wpKSxcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUHVibGljU2VxdWVuY2VzKHBvb2wpKSxcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUHVibGljVHJpZ2dlcnMocG9vbCkpLFxuICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hQdWJsaWNGdW5jdGlvbnMocG9vbCkpLFxuICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hQdWJsaWNDdXN0b21UeXBlcyhwb29sKSksXG4gICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFB1YmxpY1JMUyhwb29sKSksXG4gICAgXSk7XG5cbiAgICBjb25zdCB0eXBlZEdyb3VwZWQgPSBncm91cGVkIGFzIEF3YWl0ZWQ8XG4gICAgICAgIFJldHVyblR5cGU8dHlwZW9mIGZldGNoUHVibGljUmVsYXRpb25zPlxuICAgID47XG4gICAgY29uc3QgdHlwZWRFbnVtcyA9IGVudW1zIGFzIEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgZmV0Y2hQdWJsaWNFbnVtcz4+O1xuXG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBjb3VudHMudGFibGVzID1cbiAgICAgICAgICAgICh0eXBlZEdyb3VwZWQudGFibGU/Lmxlbmd0aCA/PyAwKSArXG4gICAgICAgICAgICAodHlwZWRHcm91cGVkLnBhcnRpdGlvbmVkX3RhYmxlPy5sZW5ndGggPz8gMCk7XG4gICAgICAgIGNvdW50cy52aWV3cyA9XG4gICAgICAgICAgICAodHlwZWRHcm91cGVkLnZpZXc/Lmxlbmd0aCA/PyAwKSArXG4gICAgICAgICAgICAodHlwZWRHcm91cGVkLm1hdGVyaWFsaXplZF92aWV3Py5sZW5ndGggPz8gMCk7XG4gICAgICAgIGNvdW50cy5lbnVtcyA9IE9iamVjdC5rZXlzKHR5cGVkRW51bXMpLmxlbmd0aDtcbiAgICB9KTtcblxuICAgIGNvbnN0IGFsbFJlbGF0aW9ucyA9IFtcbiAgICAgICAgLi4uKHR5cGVkR3JvdXBlZC5wYXJ0aXRpb25lZF90YWJsZSA/PyBbXSksXG4gICAgICAgIC4uLih0eXBlZEdyb3VwZWQudGFibGUgPz8gW10pLFxuICAgICAgICAuLi4odHlwZWRHcm91cGVkLnZpZXcgPz8gW10pLFxuICAgICAgICAuLi4odHlwZWRHcm91cGVkLm1hdGVyaWFsaXplZF92aWV3ID8/IFtdKSxcbiAgICBdO1xuXG4gICAgY29uc3QgaXNWaWV3S2luZCA9ICh0eXBlOiBzdHJpbmcpID0+XG4gICAgICAgIHR5cGUgPT09ICd2aWV3JyB8fCB0eXBlID09PSAnbWF0ZXJpYWxpemVkX3ZpZXcnO1xuXG4gICAgY29uc3Qgc2tpcEFuYWx5emUgPSBzdG9yZS5vdXRwdXRPcHRpb25zLnNraXBBbmFseXplO1xuXG4gICAgY29uc3QgcmVsYXRpb25FbnRyaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIGFsbFJlbGF0aW9ucy5tYXAoYXN5bmMgKHJlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlbC50eXBlICE9PSAndmlldycgJiYgIXNraXBBbmFseXplKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcXVldWUuYWRkKCgpID0+IGFuYWx5emVSZWxhdGlvbihwb29sLCByZWwubmFtZSkpO1xuICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY291bnRzLmFuYWx5emVkICs9IDE7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IFthdHRyaWJ1dGVzLCBpbmRleGVzLCBmb3JlaWduS2V5cywgc3RhdHMsIHZpZXdEZWZpbml0aW9uXSA9XG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hSZWxhdGlvbkF0dHJpYnV0ZXMocG9vbCwgcmVsLm5hbWUpKSxcbiAgICAgICAgICAgICAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUmVsYXRpb25JbmRleGVzKHBvb2wsIHJlbC5uYW1lKSksXG4gICAgICAgICAgICAgICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFJlbGF0aW9uRm9yZWlnbktleXMocG9vbCwgcmVsLm5hbWUpKSxcbiAgICAgICAgICAgICAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUmVsYXRpb25TdGF0cyhwb29sLCByZWwubmFtZSkpLFxuICAgICAgICAgICAgICAgICAgICBpc1ZpZXdLaW5kKHJlbC50eXBlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hWaWV3RGVmaW5pdGlvbihwb29sLCByZWwubmFtZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgY29uc3QgYXR0cnMgPSBhdHRyaWJ1dGVzIGFzIFRBdHRyaWJ1dGVJbmZvW107XG4gICAgICAgICAgICBjb25zdCBpZHhzID0gaW5kZXhlcyBhcyBUSW5kZXhJbmZvW107XG4gICAgICAgICAgICBjb25zdCBma3MgPSBmb3JlaWduS2V5cyBhcyBURm9yZWlnbktleUluZm9bXTtcbiAgICAgICAgICAgIGNvbnN0IHJlbFN0YXRzID0gc3RhdHMgYXMgVFJlbGF0aW9uU3RhdHM7XG5cbiAgICAgICAgICAgIGNvbnN0IGRpc3RpbmN0TG9va3VwID0gbmV3IE1hcChcbiAgICAgICAgICAgICAgICByZWxTdGF0cy5hdHRyaWJ1dGVzLm1hcCgoYSkgPT4gW1xuICAgICAgICAgICAgICAgICAgICBhLmF0dHJpYnV0ZV9uYW1lLFxuICAgICAgICAgICAgICAgICAgICBhLmVzdGltYXRlZF9kaXN0aW5jdCxcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb3VudHMuY29sdW1ucyArPSBhdHRycy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY291bnRzLmluZGV4ZXMgKz0gaWR4cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY291bnRzLmZvcmVpZ25LZXlzICs9IGZrcy5sZW5ndGg7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRBdHRycyA9IGF0dHJzLm1hcCgoYXR0cikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2UgPSB0cmFuc2Zvcm1BdHRyaWJ1dGUoYXR0cik7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdGluY3QgPSBkaXN0aW5jdExvb2t1cC5nZXQoYXR0ci5hdHRyaWJ1dGVfbmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpc3RpbmN0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyB7Li4uYmFzZSwgZXN0aW1hdGVkX2Rpc3RpbmN0OiBkaXN0aW5jdH1cbiAgICAgICAgICAgICAgICAgICAgOiBiYXNlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlbGF0aW9uT2JqID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IHJlbC5uYW1lLFxuICAgICAgICAgICAgICAgIGNvbW1lbnQ6IHJlbC5jb21tZW50LFxuICAgICAgICAgICAgICAgIGtpbmQ6IHJlbC50eXBlLFxuICAgICAgICAgICAgICAgIGVzdGltYXRlZF9yb3dfY291bnQ6IHJlbFN0YXRzLmVzdGltYXRlZF9yb3dfY291bnQsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogdG9SZWNvcmQodHJhbnNmb3JtZWRBdHRycywgKGEpID0+IGEubmFtZSksXG4gICAgICAgICAgICAgICAgaW5kZXhlczogdG9SZWNvcmQoXG4gICAgICAgICAgICAgICAgICAgIGlkeHMubWFwKHRyYW5zZm9ybUluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgKGkpID0+IGkuaW5kZXhfbmFtZSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZXM6IHRvUmVjb3JkKFxuICAgICAgICAgICAgICAgICAgICBma3MubWFwKHRyYW5zZm9ybVJlZmVyZW5jZSksXG4gICAgICAgICAgICAgICAgICAgIChyKSA9PiByLmNvbnN0cmFpbnRfbmFtZSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIC4uLih2aWV3RGVmaW5pdGlvblxuICAgICAgICAgICAgICAgICAgICA/IHt2aWV3RGVmaW5pdGlvbjogdmlld0RlZmluaXRpb24gYXMgc3RyaW5nfVxuICAgICAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBbcmVsLm5hbWUsIHJlbGF0aW9uT2JqXSBhcyBjb25zdDtcbiAgICAgICAgfSksXG4gICAgKTtcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5zdGF0ZSA9ICdkb25lJztcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdwb3N0Z3Jlc3FsJyBhcyBjb25zdCxcbiAgICAgICAgdmVyc2lvbjoge1xuICAgICAgICAgICAgdmVyc2lvbl9zdHJpbmc6IHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5wb3N0Z3Jlc1ZlcnNpb24hLFxuICAgICAgICAgICAgdmVyc2lvbl9udW1iZXI6XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBvc3RncmVzVmVyc2lvbk51bWJlciEsXG4gICAgICAgIH0sXG4gICAgICAgIGlkZW50aWZpZXI6IHtcbiAgICAgICAgICAgIHN5c3RlbV9pZGVudGlmaWVyOiBpZGVudGlmaWVyIS5zeXN0ZW1faWRlbnRpZmllcixcbiAgICAgICAgICAgIGRhdGFiYXNlX29pZDogaWRlbnRpZmllciEuZGF0YWJhc2Vfb2lkLFxuICAgICAgICB9LFxuICAgICAgICBuYW1lOiBpZGVudGlmaWVyIS5kYXRhYmFzZV9uYW1lLFxuICAgICAgICBjb21tZW50OiBjb21tZW50ID8/IG51bGwsXG4gICAgICAgIHJlbGF0aW9uczogT2JqZWN0LmZyb21FbnRyaWVzKHJlbGF0aW9uRW50cmllcyksXG4gICAgICAgIGVudW1zOiB0eXBlZEVudW1zLFxuICAgICAgICBjaGVja0NvbnN0cmFpbnRzOiBjaGVja0NvbnN0cmFpbnRzIGFzIEF3YWl0ZWQ8XG4gICAgICAgICAgICBSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaFB1YmxpY0NoZWNrQ29uc3RyYWludHM+XG4gICAgICAgID4sXG4gICAgICAgIGV4dGVuc2lvbnM6IGV4dGVuc2lvbnMgYXMgQXdhaXRlZDxcbiAgICAgICAgICAgIFJldHVyblR5cGU8dHlwZW9mIGZldGNoSW5zdGFsbGVkRXh0ZW5zaW9ucz5cbiAgICAgICAgPixcbiAgICAgICAgc2VxdWVuY2VzOiBzZXF1ZW5jZXMgYXMgQXdhaXRlZDxcbiAgICAgICAgICAgIFJldHVyblR5cGU8dHlwZW9mIGZldGNoUHVibGljU2VxdWVuY2VzPlxuICAgICAgICA+LFxuICAgICAgICB0cmlnZ2VyczogdHJpZ2dlcnMgYXMgQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaFB1YmxpY1RyaWdnZXJzPj4sXG4gICAgICAgIGZ1bmN0aW9uczogZnVuY3Rpb25zIGFzIEF3YWl0ZWQ8XG4gICAgICAgICAgICBSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaFB1YmxpY0Z1bmN0aW9ucz5cbiAgICAgICAgPixcbiAgICAgICAgY3VzdG9tVHlwZXM6XG4gICAgICAgICAgICBjdXN0b21UeXBlcyBhcyB1bmtub3duIGFzIFREYXRhYmFzZUludHJvc3BlY3Rpb25bJ2N1c3RvbVR5cGVzJ10sXG4gICAgICAgIHJsczogcmxzIGFzIHVua25vd24gYXMgVERhdGFiYXNlSW50cm9zcGVjdGlvblsncmxzJ10sXG4gICAgfTtcbn07XG4iLCAiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcbmltcG9ydCB7Z3JvdXBCeX0gZnJvbSAnZXMtdG9vbGtpdCc7XG5cbmV4cG9ydCB0eXBlIFRSZWxhdGlvblR5cGUgPVxuICAgIHwgJ3BhcnRpdGlvbmVkX3RhYmxlJ1xuICAgIHwgJ3RhYmxlJ1xuICAgIHwgJ3ZpZXcnXG4gICAgfCAnbWF0ZXJpYWxpemVkX3ZpZXcnO1xuXG5leHBvcnQgdHlwZSBUUmVsYXRpb25JbmZvID0ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiBUUmVsYXRpb25UeXBlO1xuICAgIGNvbW1lbnQ6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBUR3JvdXBlZFJlbGF0aW9ucyA9IFJlY29yZDxUUmVsYXRpb25UeXBlLCBUUmVsYXRpb25JbmZvW10+O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hQdWJsaWNSZWxhdGlvbnMgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbik6IFByb21pc2U8VEdyb3VwZWRSZWxhdGlvbnM+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PFRSZWxhdGlvbkluZm8+KGBcbiAgICAgICAgU0VMRUNUIHJlbG5hbWUgQVMgbmFtZSxcbiAgICAgICAgICAgIENBU0UgcmVsa2luZFxuICAgICAgICAgICAgICAgIFdIRU4gJ3AnIFRIRU4gJ3BhcnRpdGlvbmVkX3RhYmxlJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ3InIFRIRU4gJ3RhYmxlJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ3YnIFRIRU4gJ3ZpZXcnXG4gICAgICAgICAgICAgICAgV0hFTiAnbScgVEhFTiAnbWF0ZXJpYWxpemVkX3ZpZXcnXG4gICAgICAgICAgICBFTkQgQVMgdHlwZSxcbiAgICAgICAgICAgIG9ial9kZXNjcmlwdGlvbihvaWQsICdwZ19jbGFzcycpIEFTIGNvbW1lbnRcbiAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzXG4gICAgICAgIFdIRVJFIHJlbG5hbWVzcGFjZSA9IChTRUxFQ1Qgb2lkIEZST00gcGdfbmFtZXNwYWNlIFdIRVJFIG5zcG5hbWUgPSAncHVibGljJylcbiAgICAgICAgICAgIEFORCAoXG4gICAgICAgICAgICAgICAgcmVsa2luZCA9ICdwJ1xuICAgICAgICAgICAgICAgIE9SIChyZWxraW5kID0gJ3InIEFORCBOT1QgcmVsaXNwYXJ0aXRpb24pXG4gICAgICAgICAgICAgICAgT1IgcmVsa2luZCBJTiAoJ3YnLCAnbScpXG4gICAgICAgICAgICApXG4gICAgICAgIE9SREVSIEJZIHR5cGUsIG5hbWVcbiAgICBgKTtcblxuICAgIHJldHVybiBncm91cEJ5KHJlc3VsdC5yb3dzLCAocm93KSA9PiByb3cudHlwZSkgYXMgVEdyb3VwZWRSZWxhdGlvbnM7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hWaWV3RGVmaW5pdGlvbiA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHZpZXdOYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8e2RlZmluaXRpb246IHN0cmluZ30+KFxuICAgICAgICBgXG4gICAgICAgIFNFTEVDVCBwZ19nZXRfdmlld2RlZihjLm9pZCwgdHJ1ZSkgQVMgZGVmaW5pdGlvblxuICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgY1xuICAgICAgICBXSEVSRSBjLnJlbG5hbWUgPSAkMVxuICAgICAgICAgICAgQU5EIGMucmVsbmFtZXNwYWNlID0gKFNFTEVDVCBvaWQgRlJPTSBwZ19uYW1lc3BhY2UgV0hFUkUgbnNwbmFtZSA9ICdwdWJsaWMnKVxuICAgICAgICBgLFxuICAgICAgICBbdmlld05hbWVdLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3NbMF0hLmRlZmluaXRpb247XG59O1xuIiwgImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbmV4cG9ydCB0eXBlIFRBdHRyaWJ1dGVLaW5kID0gJ3JlZ3VsYXInIHwgJ2dlbmVyYXRlZCc7XG5cbmV4cG9ydCB0eXBlIFRHZW5lcmF0ZWRTdG9yYWdlID0gJ3N0b3JlZCcgfCAndmlydHVhbCc7XG5cbmV4cG9ydCB0eXBlIFRBdHRyaWJ1dGVJbmZvID0ge1xuICAgIGF0dHJpYnV0ZV9uYW1lOiBzdHJpbmc7XG4gICAgZGF0YV90eXBlOiBzdHJpbmc7XG4gICAgaXNfbnVsbGFibGU6IGJvb2xlYW47XG4gICAgaGFzX2RlZmF1bHQ6IGJvb2xlYW47XG4gICAgZGVmYXVsdF9leHByZXNzaW9uOiBzdHJpbmcgfCBudWxsO1xuICAgIGtpbmQ6IFRBdHRyaWJ1dGVLaW5kO1xuICAgIGdlbmVyYXRlZF9zdG9yYWdlOiBUR2VuZXJhdGVkU3RvcmFnZSB8IG51bGw7XG4gICAgZ2VuZXJhdGVkX2V4cHJlc3Npb246IHN0cmluZyB8IG51bGw7XG4gICAgY29tbWVudDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFJlbGF0aW9uQXR0cmlidXRlcyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHJlbGF0aW9uTmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxUQXR0cmlidXRlSW5mb1tdPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxUQXR0cmlidXRlSW5mbz4oXG4gICAgICAgIGBcbiAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICBhLmF0dG5hbWUgQVMgYXR0cmlidXRlX25hbWUsXG4gICAgICAgICAgICBmb3JtYXRfdHlwZShhLmF0dHR5cGlkLCBhLmF0dHR5cG1vZCkgQVMgZGF0YV90eXBlLFxuICAgICAgICAgICAgTk9UIGEuYXR0bm90bnVsbCBBUyBpc19udWxsYWJsZSxcbiAgICAgICAgICAgIGFkLmFkYmluIElTIE5PVCBOVUxMIEFTIGhhc19kZWZhdWx0LFxuICAgICAgICAgICAgQ0FTRVxuICAgICAgICAgICAgICAgIFdIRU4gYS5hdHRnZW5lcmF0ZWQgPSAnJyBBTkQgYWQuYWRiaW4gSVMgTk9UIE5VTEwgVEhFTiBwZ19nZXRfZXhwcihhZC5hZGJpbiwgYWQuYWRyZWxpZClcbiAgICAgICAgICAgICAgICBFTFNFIE5VTExcbiAgICAgICAgICAgIEVORCBBUyBkZWZhdWx0X2V4cHJlc3Npb24sXG4gICAgICAgICAgICBDQVNFIGEuYXR0Z2VuZXJhdGVkXG4gICAgICAgICAgICAgICAgV0hFTiAnJyBUSEVOICdyZWd1bGFyJ1xuICAgICAgICAgICAgICAgIEVMU0UgJ2dlbmVyYXRlZCdcbiAgICAgICAgICAgIEVORCBBUyBraW5kLFxuICAgICAgICAgICAgQ0FTRSBhLmF0dGdlbmVyYXRlZFxuICAgICAgICAgICAgICAgIFdIRU4gJ3MnIFRIRU4gJ3N0b3JlZCdcbiAgICAgICAgICAgICAgICBXSEVOICd2JyBUSEVOICd2aXJ0dWFsJ1xuICAgICAgICAgICAgICAgIEVMU0UgTlVMTFxuICAgICAgICAgICAgRU5EIEFTIGdlbmVyYXRlZF9zdG9yYWdlLFxuICAgICAgICAgICAgQ0FTRVxuICAgICAgICAgICAgICAgIFdIRU4gYS5hdHRnZW5lcmF0ZWQgIT0gJycgVEhFTiBwZ19nZXRfZXhwcihhZC5hZGJpbiwgYWQuYWRyZWxpZClcbiAgICAgICAgICAgICAgICBFTFNFIE5VTExcbiAgICAgICAgICAgIEVORCBBUyBnZW5lcmF0ZWRfZXhwcmVzc2lvbixcbiAgICAgICAgICAgIGNvbF9kZXNjcmlwdGlvbihjLm9pZCwgYS5hdHRudW0pIEFTIGNvbW1lbnRcbiAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGNcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSBjLm9pZFxuICAgICAgICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19hdHRyZGVmIGFkIE9OIGFkLmFkcmVsaWQgPSBhLmF0dHJlbGlkIEFORCBhZC5hZG51bSA9IGEuYXR0bnVtXG4gICAgICAgIFdIRVJFIGMucmVsbmFtZSA9ICQxXG4gICAgICAgICAgICBBTkQgYy5yZWxuYW1lc3BhY2UgPSAoU0VMRUNUIG9pZCBGUk9NIHBnX25hbWVzcGFjZSBXSEVSRSBuc3BuYW1lID0gJ3B1YmxpYycpXG4gICAgICAgICAgICBBTkQgYS5hdHRudW0gPiAwXG4gICAgICAgICAgICBBTkQgTk9UIGEuYXR0aXNkcm9wcGVkXG4gICAgICAgIE9SREVSIEJZIGEuYXR0bnVtXG4gICAgICAgIGAsXG4gICAgICAgIFtyZWxhdGlvbk5hbWVdLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG59O1xuIiwgImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5pbXBvcnQge2dyb3VwQnl9IGZyb20gJ2VzLXRvb2xraXQnO1xuXG50eXBlIFRFbnVtVmFsdWVSb3cgPSB7XG4gICAgZW51bV9uYW1lOiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBzb3J0X29yZGVyOiBudW1iZXI7XG4gICAgY29tbWVudDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFRFbnVtSW5mbyA9IHtcbiAgICB2YWx1ZXM6IHN0cmluZ1tdO1xuICAgIGNvbW1lbnQ6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBUR3JvdXBlZEVudW1zID0gUmVjb3JkPHN0cmluZywgVEVudW1JbmZvPjtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHVibGljRW51bXMgPSBhc3luYyAocG9vbDogUG9vbCk6IFByb21pc2U8VEdyb3VwZWRFbnVtcz4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VEVudW1WYWx1ZVJvdz4oYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIHQudHlwbmFtZSBBUyBlbnVtX25hbWUsXG4gICAgICAgICAgICBlLmVudW1sYWJlbCBBUyB2YWx1ZSxcbiAgICAgICAgICAgIGUuZW51bXNvcnRvcmRlciBBUyBzb3J0X29yZGVyLFxuICAgICAgICAgICAgb2JqX2Rlc2NyaXB0aW9uKHQub2lkLCAncGdfdHlwZScpIEFTIGNvbW1lbnRcbiAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX3R5cGUgdFxuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfZW51bSBlIE9OIHQub2lkID0gZS5lbnVtdHlwaWRcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIHQudHlwbmFtZXNwYWNlID0gbi5vaWRcbiAgICAgICAgV0hFUkUgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgT1JERVIgQlkgZW51bV9uYW1lLCBzb3J0X29yZGVyXG4gICAgYCk7XG5cbiAgICBjb25zdCBncm91cGVkID0gZ3JvdXBCeShyZXN1bHQucm93cywgKHJvdykgPT4gcm93LmVudW1fbmFtZSk7XG5cbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhncm91cGVkKS5tYXAoKFtuYW1lLCByb3dzXSkgPT4gW1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHJvd3MubWFwKChyKSA9PiByLnZhbHVlKSxcbiAgICAgICAgICAgICAgICBjb21tZW50OiByb3dzWzBdPy5jb21tZW50ID8/IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdKSxcbiAgICApO1xufTtcbiIsICJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBUSW5kZXhJbmZvID0ge1xuICAgIGluZGV4X25hbWU6IHN0cmluZztcbiAgICByZWxhdGlvbl9uYW1lOiBzdHJpbmc7XG4gICAgaXNfdW5pcXVlOiBib29sZWFuO1xuICAgIGlzX3ByaW1hcnk6IGJvb2xlYW47XG4gICAgaXNfZXhjbHVzaW9uOiBib29sZWFuO1xuICAgIGlzX3BhcnRpYWw6IGJvb2xlYW47XG4gICAgcGFydGlhbF9wcmVkaWNhdGU6IHN0cmluZyB8IG51bGw7XG4gICAgYXR0cmlidXRlczogc3RyaW5nW107XG4gICAgZXhjbHVzaW9uX29wZXJhdG9yczogc3RyaW5nW10gfCBudWxsO1xuICAgIGRlZmluaXRpb246IHN0cmluZztcbiAgICBjb21tZW50OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUmVsYXRpb25JbmRleGVzID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgcmVsYXRpb25OYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPFRJbmRleEluZm9bXT4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VEluZGV4SW5mbz4oXG4gICAgICAgIGBcbiAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICBpLnJlbG5hbWUgQVMgaW5kZXhfbmFtZSxcbiAgICAgICAgICAgIHQucmVsbmFtZSBBUyByZWxhdGlvbl9uYW1lLFxuICAgICAgICAgICAgaXguaW5kaXN1bmlxdWUgQVMgaXNfdW5pcXVlLFxuICAgICAgICAgICAgaXguaW5kaXNwcmltYXJ5IEFTIGlzX3ByaW1hcnksXG4gICAgICAgICAgICBpeC5pbmRpc2V4Y2x1c2lvbiBBUyBpc19leGNsdXNpb24sXG4gICAgICAgICAgICBpeC5pbmRwcmVkIElTIE5PVCBOVUxMIEFTIGlzX3BhcnRpYWwsXG4gICAgICAgICAgICBwZ19nZXRfZXhwcihpeC5pbmRwcmVkLCBpeC5pbmRyZWxpZCkgQVMgcGFydGlhbF9wcmVkaWNhdGUsXG4gICAgICAgICAgICBBUlJBWShcbiAgICAgICAgICAgICAgICBTRUxFQ1QgcGdfZ2V0X2luZGV4ZGVmKGl4LmluZGV4cmVsaWQsIGsgKyAxLCB0cnVlKVxuICAgICAgICAgICAgICAgIEZST00gZ2VuZXJhdGVfc3Vic2NyaXB0cyhpeC5pbmRrZXksIDEpIEFTIGtcbiAgICAgICAgICAgICAgICBPUkRFUiBCWSBrXG4gICAgICAgICAgICApIEFTIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBDQVNFXG4gICAgICAgICAgICAgICAgV0hFTiBpeC5pbmRpc2V4Y2x1c2lvbiBUSEVOIChcbiAgICAgICAgICAgICAgICAgICAgU0VMRUNUIEFSUkFZX0FHRyhvcC5vcHJuYW1lIE9SREVSIEJZIG9yZC5uKVxuICAgICAgICAgICAgICAgICAgICBGUk9NIHBnX2NvbnN0cmFpbnQgY29uXG4gICAgICAgICAgICAgICAgICAgIENST1NTIEpPSU4gTEFURVJBTCB1bm5lc3QoY29uLmNvbmV4Y2xvcCkgV0lUSCBPUkRJTkFMSVRZIEFTIG9yZChvcG9pZCwgbilcbiAgICAgICAgICAgICAgICAgICAgSk9JTiBwZ19vcGVyYXRvciBvcCBPTiBvcC5vaWQgPSBvcmQub3BvaWRcbiAgICAgICAgICAgICAgICAgICAgV0hFUkUgY29uLmNvbmluZGlkID0gaXguaW5kZXhyZWxpZFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBFTFNFIE5VTExcbiAgICAgICAgICAgIEVORCBBUyBleGNsdXNpb25fb3BlcmF0b3JzLFxuICAgICAgICAgICAgcGdfZ2V0X2luZGV4ZGVmKGl4LmluZGV4cmVsaWQpIEFTIGRlZmluaXRpb24sXG4gICAgICAgICAgICBvYmpfZGVzY3JpcHRpb24oaS5vaWQsICdwZ19jbGFzcycpIEFTIGNvbW1lbnRcbiAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX2luZGV4IGl4XG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBpIE9OIGkub2lkID0gaXguaW5kZXhyZWxpZFxuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgdCBPTiB0Lm9pZCA9IGl4LmluZHJlbGlkXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IHQucmVsbmFtZXNwYWNlXG4gICAgICAgIFdIRVJFIG4ubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgICBBTkQgdC5yZWxuYW1lID0gJDFcbiAgICAgICAgT1JERVIgQlkgaS5yZWxuYW1lXG4gICAgICAgIGAsXG4gICAgICAgIFtyZWxhdGlvbk5hbWVdLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG59O1xuIiwgImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbnR5cGUgVEZvcmVpZ25LZXlBY3Rpb24gPVxuICAgIHwgJ05PIEFDVElPTidcbiAgICB8ICdSRVNUUklDVCdcbiAgICB8ICdDQVNDQURFJ1xuICAgIHwgJ1NFVCBOVUxMJ1xuICAgIHwgJ1NFVCBERUZBVUxUJztcblxuZXhwb3J0IHR5cGUgVEZvcmVpZ25LZXlJbmZvID0ge1xuICAgIGNvbnN0cmFpbnRfbmFtZTogc3RyaW5nO1xuICAgIGF0dHJpYnV0ZXM6IHN0cmluZ1tdO1xuICAgIHJlZmVyZW5jZWRfcmVsYXRpb246IHN0cmluZztcbiAgICByZWZlcmVuY2VkX2F0dHJpYnV0ZXM6IHN0cmluZ1tdO1xuICAgIG9uX3VwZGF0ZTogVEZvcmVpZ25LZXlBY3Rpb247XG4gICAgb25fZGVsZXRlOiBURm9yZWlnbktleUFjdGlvbjtcbiAgICBjb21tZW50OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUmVsYXRpb25Gb3JlaWduS2V5cyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHJlbGF0aW9uTmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxURm9yZWlnbktleUluZm9bXT4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VEZvcmVpZ25LZXlJbmZvPihcbiAgICAgICAgYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIGNvbi5jb25uYW1lIEFTIGNvbnN0cmFpbnRfbmFtZSxcbiAgICAgICAgICAgIEFSUkFZKFxuICAgICAgICAgICAgICAgIFNFTEVDVCBhLmF0dG5hbWVcbiAgICAgICAgICAgICAgICBGUk9NIHVubmVzdChjb24uY29ua2V5KSBXSVRIIE9SRElOQUxJVFkgQVMgY29scyhhdHRudW0sIG9yZClcbiAgICAgICAgICAgICAgICBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSBjb24uY29ucmVsaWQgQU5EIGEuYXR0bnVtID0gY29scy5hdHRudW1cbiAgICAgICAgICAgICAgICBPUkRFUiBCWSBjb2xzLm9yZFxuICAgICAgICAgICAgKTo6dGV4dFtdIEFTIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICByZWZfY2wucmVsbmFtZSBBUyByZWZlcmVuY2VkX3JlbGF0aW9uLFxuICAgICAgICAgICAgQVJSQVkoXG4gICAgICAgICAgICAgICAgU0VMRUNUIGEuYXR0bmFtZVxuICAgICAgICAgICAgICAgIEZST00gdW5uZXN0KGNvbi5jb25ma2V5KSBXSVRIIE9SRElOQUxJVFkgQVMgY29scyhhdHRudW0sIG9yZClcbiAgICAgICAgICAgICAgICBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSBjb24uY29uZnJlbGlkIEFORCBhLmF0dG51bSA9IGNvbHMuYXR0bnVtXG4gICAgICAgICAgICAgICAgT1JERVIgQlkgY29scy5vcmRcbiAgICAgICAgICAgICk6OnRleHRbXSBBUyByZWZlcmVuY2VkX2F0dHJpYnV0ZXMsXG4gICAgICAgICAgICBDQVNFIGNvbi5jb25mdXBkdHlwZVxuICAgICAgICAgICAgICAgIFdIRU4gJ2EnIFRIRU4gJ05PIEFDVElPTidcbiAgICAgICAgICAgICAgICBXSEVOICdyJyBUSEVOICdSRVNUUklDVCdcbiAgICAgICAgICAgICAgICBXSEVOICdjJyBUSEVOICdDQVNDQURFJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ24nIFRIRU4gJ1NFVCBOVUxMJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ2QnIFRIRU4gJ1NFVCBERUZBVUxUJ1xuICAgICAgICAgICAgRU5EIEFTIG9uX3VwZGF0ZSxcbiAgICAgICAgICAgIENBU0UgY29uLmNvbmZkZWx0eXBlXG4gICAgICAgICAgICAgICAgV0hFTiAnYScgVEhFTiAnTk8gQUNUSU9OJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ3InIFRIRU4gJ1JFU1RSSUNUJ1xuICAgICAgICAgICAgICAgIFdIRU4gJ2MnIFRIRU4gJ0NBU0NBREUnXG4gICAgICAgICAgICAgICAgV0hFTiAnbicgVEhFTiAnU0VUIE5VTEwnXG4gICAgICAgICAgICAgICAgV0hFTiAnZCcgVEhFTiAnU0VUIERFRkFVTFQnXG4gICAgICAgICAgICBFTkQgQVMgb25fZGVsZXRlLFxuICAgICAgICAgICAgb2JqX2Rlc2NyaXB0aW9uKGNvbi5vaWQsICdwZ19jb25zdHJhaW50JykgQVMgY29tbWVudFxuICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfY29uc3RyYWludCBjb25cbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIGNsIE9OIGNsLm9pZCA9IGNvbi5jb25yZWxpZFxuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgcmVmX2NsIE9OIHJlZl9jbC5vaWQgPSBjb24uY29uZnJlbGlkXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGNsLnJlbG5hbWVzcGFjZVxuICAgICAgICBXSEVSRSBjb24uY29udHlwZSA9ICdmJ1xuICAgICAgICAgICAgQU5EIG4ubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgICBBTkQgY2wucmVsbmFtZSA9ICQxXG4gICAgICAgIE9SREVSIEJZIGNvbi5jb25uYW1lXG4gICAgICAgIGAsXG4gICAgICAgIFtyZWxhdGlvbk5hbWVdLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG59O1xuIiwgImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbmV4cG9ydCB0eXBlIFRSZWxhdGlvbkZpbGVTdGF0cyA9IHtcbiAgICByZWxhdGlvbl9uYW1lOiBzdHJpbmc7XG4gICAgZmlsZV9wYXRoOiBzdHJpbmcgfCBudWxsO1xuICAgIG1vZGlmaWNhdGlvbl90aW1lOiBEYXRlO1xuICAgIHNpemVfYnl0ZXM6IG51bWJlcjtcbiAgICBpc19wYXJ0aXRpb25lZDogYm9vbGVhbjtcbiAgICBwYXJ0aXRpb25fY291bnQ6IG51bWJlciB8IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hSZWxhdGlvbkZpbGVTdGF0cyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHJlbGF0aW9uTmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxUUmVsYXRpb25GaWxlU3RhdHM+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PFRSZWxhdGlvbkZpbGVTdGF0cz4oXG4gICAgICAgIGBcbiAgICAgICAgV0lUSCB0YXJnZXQgQVMgKFxuICAgICAgICAgICAgU0VMRUNUIGMub2lkLCBjLnJlbG5hbWUsIGMucmVsa2luZFxuICAgICAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGNcbiAgICAgICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlXG4gICAgICAgICAgICBXSEVSRSBuLm5zcG5hbWUgPSAncHVibGljJ1xuICAgICAgICAgICAgICAgIEFORCBjLnJlbG5hbWUgPSAkMVxuICAgICAgICAgICAgICAgIEFORCBjLnJlbGtpbmQgSU4gKCdyJywgJ3AnLCAnbScpXG4gICAgICAgICksXG4gICAgICAgIHBhcnRpdGlvbl9zdGF0cyBBUyAoXG4gICAgICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgICAgICAocGdfc3RhdF9maWxlKHBnX3JlbGF0aW9uX2ZpbGVwYXRoKGNoaWxkLm9pZCkpKS5tb2RpZmljYXRpb24gQVMgbW9kaWZpY2F0aW9uX3RpbWUsXG4gICAgICAgICAgICAgICAgKHBnX3N0YXRfZmlsZShwZ19yZWxhdGlvbl9maWxlcGF0aChjaGlsZC5vaWQpKSkuc2l6ZSBBUyBzaXplX2J5dGVzXG4gICAgICAgICAgICBGUk9NIHRhcmdldCB0XG4gICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfaW5oZXJpdHMgaSBPTiBpLmluaHBhcmVudCA9IHQub2lkXG4gICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgY2hpbGQgT04gY2hpbGQub2lkID0gaS5pbmhyZWxpZFxuICAgICAgICAgICAgV0hFUkUgdC5yZWxraW5kID0gJ3AnXG4gICAgICAgIClcbiAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICB0LnJlbG5hbWUgQVMgcmVsYXRpb25fbmFtZSxcbiAgICAgICAgICAgIENBU0VcbiAgICAgICAgICAgICAgICBXSEVOIHQucmVsa2luZCA9ICdwJyBUSEVOIE5VTExcbiAgICAgICAgICAgICAgICBFTFNFIHBnX3JlbGF0aW9uX2ZpbGVwYXRoKHQub2lkKVxuICAgICAgICAgICAgRU5EIEFTIGZpbGVfcGF0aCxcbiAgICAgICAgICAgIENBU0VcbiAgICAgICAgICAgICAgICBXSEVOIHQucmVsa2luZCA9ICdwJyBUSEVOIChTRUxFQ1QgTUFYKG1vZGlmaWNhdGlvbl90aW1lKSBGUk9NIHBhcnRpdGlvbl9zdGF0cylcbiAgICAgICAgICAgICAgICBFTFNFIChwZ19zdGF0X2ZpbGUocGdfcmVsYXRpb25fZmlsZXBhdGgodC5vaWQpKSkubW9kaWZpY2F0aW9uXG4gICAgICAgICAgICBFTkQgQVMgbW9kaWZpY2F0aW9uX3RpbWUsXG4gICAgICAgICAgICBDQVNFXG4gICAgICAgICAgICAgICAgV0hFTiB0LnJlbGtpbmQgPSAncCcgVEhFTiAoU0VMRUNUIENPQUxFU0NFKFNVTShzaXplX2J5dGVzKSwgMCkgRlJPTSBwYXJ0aXRpb25fc3RhdHMpXG4gICAgICAgICAgICAgICAgRUxTRSAocGdfc3RhdF9maWxlKHBnX3JlbGF0aW9uX2ZpbGVwYXRoKHQub2lkKSkpLnNpemVcbiAgICAgICAgICAgIEVORCBBUyBzaXplX2J5dGVzLFxuICAgICAgICAgICAgdC5yZWxraW5kID0gJ3AnIEFTIGlzX3BhcnRpdGlvbmVkLFxuICAgICAgICAgICAgQ0FTRVxuICAgICAgICAgICAgICAgIFdIRU4gdC5yZWxraW5kID0gJ3AnIFRIRU4gKFNFTEVDVCBDT1VOVCgqKSBGUk9NIHBhcnRpdGlvbl9zdGF0cylcbiAgICAgICAgICAgICAgICBFTFNFIE5VTExcbiAgICAgICAgICAgIEVORCBBUyBwYXJ0aXRpb25fY291bnRcbiAgICAgICAgRlJPTSB0YXJnZXQgdFxuICAgICAgICBgLFxuICAgICAgICBbcmVsYXRpb25OYW1lXSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzWzBdO1xufTtcbiIsICJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgY29uc3QgYW5hbHl6ZVJlbGF0aW9uID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgcmVsYXRpb25OYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAvLyBWYWxpZGF0ZSByZWxhdGlvbiBleGlzdHMgYW5kIGdldCBwcm9wZXJseSBxdW90ZWQgbmFtZSB0byBwcmV2ZW50IFNRTCBpbmplY3Rpb25cbiAgICBjb25zdCB2YWxpZGF0aW9uID0gYXdhaXQgcG9vbC5xdWVyeTx7cXVvdGVkX25hbWU6IHN0cmluZ30+KFxuICAgICAgICBgXG4gICAgICAgIFNFTEVDVCBmb3JtYXQoJyVJJywgYy5yZWxuYW1lKSBBUyBxdW90ZWRfbmFtZVxuICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgY1xuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSBjLnJlbG5hbWVzcGFjZVxuICAgICAgICBXSEVSRSBuLm5zcG5hbWUgPSAncHVibGljJ1xuICAgICAgICAgICAgQU5EIGMucmVsbmFtZSA9ICQxXG4gICAgICAgICAgICBBTkQgYy5yZWxraW5kIElOICgncicsICdwJywgJ20nKVxuICAgICAgICBgLFxuICAgICAgICBbcmVsYXRpb25OYW1lXSxcbiAgICApO1xuXG4gICAgaWYgKHZhbGlkYXRpb24ucm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFJlbGF0aW9uIFwiJHtyZWxhdGlvbk5hbWV9XCIgbm90IGZvdW5kIGluIHB1YmxpYyBzY2hlbWFgLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGF3YWl0IHBvb2wucXVlcnkoYEFOQUxZWkUgcHVibGljLiR7dmFsaWRhdGlvbi5yb3dzWzBdLnF1b3RlZF9uYW1lfWApO1xufTtcbiIsICJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBUQXR0cmlidXRlU3RhdHMgPSB7XG4gICAgYXR0cmlidXRlX25hbWU6IHN0cmluZztcbiAgICBlc3RpbWF0ZWRfZGlzdGluY3Q6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFRSZWxhdGlvblN0YXRzID0ge1xuICAgIHJlbGF0aW9uX25hbWU6IHN0cmluZztcbiAgICBlc3RpbWF0ZWRfcm93X2NvdW50OiBudW1iZXI7XG4gICAgYXR0cmlidXRlczogVEF0dHJpYnV0ZVN0YXRzW107XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hSZWxhdGlvblN0YXRzID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgcmVsYXRpb25OYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPFRSZWxhdGlvblN0YXRzPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxcbiAgICAgICAgVEF0dHJpYnV0ZVN0YXRzICYge3JlbGF0aW9uX25hbWU6IHN0cmluZzsgZXN0aW1hdGVkX3Jvd19jb3VudDogbnVtYmVyfVxuICAgID4oXG4gICAgICAgIGBcbiAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICBzLnRhYmxlbmFtZSBBUyByZWxhdGlvbl9uYW1lLFxuICAgICAgICAgICAgYy5yZWx0dXBsZXM6OmJpZ2ludCBBUyBlc3RpbWF0ZWRfcm93X2NvdW50LFxuICAgICAgICAgICAgcy5hdHRuYW1lIEFTIGF0dHJpYnV0ZV9uYW1lLFxuICAgICAgICAgICAgQ0FTRVxuICAgICAgICAgICAgICAgIFdIRU4gcy5uX2Rpc3RpbmN0ID4gMCBUSEVOIHMubl9kaXN0aW5jdFxuICAgICAgICAgICAgICAgIEVMU0UgYWJzKHMubl9kaXN0aW5jdCkgKiBjLnJlbHR1cGxlc1xuICAgICAgICAgICAgRU5EOjpiaWdpbnQgQVMgZXN0aW1hdGVkX2Rpc3RpbmN0XG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19zdGF0cyBzXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBjIE9OIGMucmVsbmFtZSA9IHMudGFibGVuYW1lXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlIEFORCBuLm5zcG5hbWUgPSBzLnNjaGVtYW5hbWVcbiAgICAgICAgV0hFUkUgcy5zY2hlbWFuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgIEFORCBzLnRhYmxlbmFtZSA9ICQxXG4gICAgICAgIE9SREVSIEJZIHMuYXR0bmFtZVxuICAgICAgICBgLFxuICAgICAgICBbcmVsYXRpb25OYW1lXSxcbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdC5yb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVsYXRpb25fbmFtZTogcmVsYXRpb25OYW1lLFxuICAgICAgICAgICAgZXN0aW1hdGVkX3Jvd19jb3VudDogMCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHJlbGF0aW9uX25hbWU6IHJlc3VsdC5yb3dzWzBdLnJlbGF0aW9uX25hbWUsXG4gICAgICAgIGVzdGltYXRlZF9yb3dfY291bnQ6IE51bWJlcihyZXN1bHQucm93c1swXS5lc3RpbWF0ZWRfcm93X2NvdW50KSxcbiAgICAgICAgYXR0cmlidXRlczogcmVzdWx0LnJvd3MubWFwKCh7YXR0cmlidXRlX25hbWUsIGVzdGltYXRlZF9kaXN0aW5jdH0pID0+ICh7XG4gICAgICAgICAgICBhdHRyaWJ1dGVfbmFtZSxcbiAgICAgICAgICAgIGVzdGltYXRlZF9kaXN0aW5jdDogTnVtYmVyKGVzdGltYXRlZF9kaXN0aW5jdCksXG4gICAgICAgIH0pKSxcbiAgICB9O1xufTtcbiIsICJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBUU2FtcGxlU3RyYXRlZ3kgPSAnZGlzdGluY3QnIHwgJ3JhbmRvbSc7XG5cbmV4cG9ydCB0eXBlIFRDb2x1bW5TYW1wbGUgPSB7XG4gICAgcmVhZG9ubHkgY29sdW1uX25hbWU6IHN0cmluZztcbiAgICByZWFkb25seSBzdHJhdGVneTogVFNhbXBsZVN0cmF0ZWd5O1xuICAgIHJlYWRvbmx5IHZhbHVlczogcmVhZG9ubHkgc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBUQ29tcG9zaXRlU3ViRmllbGQgPSB7XG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGRhdGFfdHlwZTogc3RyaW5nO1xufTtcblxuY29uc3QgcXVvdGVJZGVudCA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4gYFwiJHtuYW1lLnJlcGxhY2UoL1wiL2csICdcIlwiJyl9XCJgO1xuXG5jb25zdCBMT1dfQ0FSRElOQUxJVFlfVEhSRVNIT0xEID0gMjU2O1xuY29uc3QgTE9XX0NBUkRJTkFMSVRZX0xJTUlUID0gMjU2O1xuY29uc3QgSElHSF9DQVJESU5BTElUWV9MSU1JVCA9IDY0O1xuY29uc3QgQkVSTk9VTExJX09WRVJTQU1QTEVfRkFDVE9SID0gMTA7XG5cbmNvbnN0IHNhbXBsZURpc3RpbmN0ID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uRXhwcjogc3RyaW5nLFxuICAgIGxpbWl0OiBudW1iZXIsXG4pOiBQcm9taXNlPHJlYWRvbmx5IHN0cmluZ1tdPiA9PiB7XG4gICAgY29uc3Qgc3FsID0gYFNFTEVDVCBESVNUSU5DVCAke2NvbHVtbkV4cHJ9Ojp0ZXh0IEFTIHZhbCBGUk9NICR7cXVvdGVJZGVudCh0YWJsZU5hbWUpfSBXSEVSRSAke2NvbHVtbkV4cHJ9IElTIE5PVCBOVUxMIExJTUlUICQxYDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PHt2YWw6IHN0cmluZ30+KHNxbCwgW2xpbWl0XSk7XG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzLm1hcCgocikgPT4gci52YWwpO1xufTtcblxuY29uc3Qgc2FtcGxlQmVybm91bGxpID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uRXhwcjogc3RyaW5nLFxuICAgIGVzdGltYXRlZFJvd0NvdW50OiBudW1iZXIsXG4gICAgbGltaXQ6IG51bWJlcixcbik6IFByb21pc2U8cmVhZG9ubHkgc3RyaW5nW10+ID0+IHtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5taW4oXG4gICAgICAgIDEwMCxcbiAgICAgICAgKGxpbWl0IC8gTWF0aC5tYXgoZXN0aW1hdGVkUm93Q291bnQsIDEpKSAqXG4gICAgICAgICAgICAxMDAgKlxuICAgICAgICAgICAgQkVSTk9VTExJX09WRVJTQU1QTEVfRkFDVE9SLFxuICAgICk7XG4gICAgY29uc3Qgc3FsID0gYFNFTEVDVCBESVNUSU5DVCAke2NvbHVtbkV4cHJ9Ojp0ZXh0IEFTIHZhbCBGUk9NICR7cXVvdGVJZGVudCh0YWJsZU5hbWUpfSBUQUJMRVNBTVBMRSBCRVJOT1VMTEkoJDEpIFdIRVJFICR7Y29sdW1uRXhwcn0gSVMgTk9UIE5VTEwgTElNSVQgJDJgO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8e3ZhbDogc3RyaW5nfT4oc3FsLCBbcGVyY2VudGFnZSwgbGltaXRdKTtcbiAgICByZXR1cm4gcmVzdWx0LnJvd3MubWFwKChyKSA9PiByLnZhbCk7XG59O1xuXG5jb25zdCBzYW1wbGVQbGFpbkxpbWl0ID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uRXhwcjogc3RyaW5nLFxuICAgIGxpbWl0OiBudW1iZXIsXG4pOiBQcm9taXNlPHJlYWRvbmx5IHN0cmluZ1tdPiA9PiB7XG4gICAgY29uc3Qgc3FsID0gYFNFTEVDVCAke2NvbHVtbkV4cHJ9Ojp0ZXh0IEFTIHZhbCBGUk9NICR7cXVvdGVJZGVudCh0YWJsZU5hbWUpfSBXSEVSRSAke2NvbHVtbkV4cHJ9IElTIE5PVCBOVUxMIExJTUlUICQxYDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PHt2YWw6IHN0cmluZ30+KHNxbCwgW2xpbWl0XSk7XG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzLm1hcCgocikgPT4gci52YWwpO1xufTtcblxuZXhwb3J0IHR5cGUgVFJlbGF0aW9uS2luZCA9XG4gICAgfCAndGFibGUnXG4gICAgfCAncGFydGl0aW9uZWRfdGFibGUnXG4gICAgfCAndmlldydcbiAgICB8ICdtYXRlcmlhbGl6ZWRfdmlldyc7XG5cbmNvbnN0IHN1cHBvcnRzVGFibGVTYW1wbGUgPSAoa2luZDogVFJlbGF0aW9uS2luZCk6IGJvb2xlYW4gPT5cbiAgICBraW5kID09PSAndGFibGUnIHx8XG4gICAga2luZCA9PT0gJ3BhcnRpdGlvbmVkX3RhYmxlJyB8fFxuICAgIGtpbmQgPT09ICdtYXRlcmlhbGl6ZWRfdmlldyc7XG5cbmV4cG9ydCBjb25zdCBzYW1wbGVDb2x1bW4gPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgZXN0aW1hdGVkRGlzdGluY3Q6IG51bWJlcixcbiAgICBlc3RpbWF0ZWRSb3dDb3VudDogbnVtYmVyLFxuICAgIHJlbGF0aW9uS2luZDogVFJlbGF0aW9uS2luZCxcbik6IFByb21pc2U8VENvbHVtblNhbXBsZT4gPT4ge1xuICAgIGNvbnN0IGNvbHVtbkV4cHIgPSBxdW90ZUlkZW50KGNvbHVtbk5hbWUpO1xuICAgIGNvbnN0IGlzTG93Q2FyZGluYWxpdHkgPVxuICAgICAgICBlc3RpbWF0ZWREaXN0aW5jdCA+IDAgJiYgZXN0aW1hdGVkRGlzdGluY3QgPCBMT1dfQ0FSRElOQUxJVFlfVEhSRVNIT0xEO1xuXG4gICAgaWYgKGlzTG93Q2FyZGluYWxpdHkpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgc2FtcGxlRGlzdGluY3QoXG4gICAgICAgICAgICBwb29sLFxuICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgY29sdW1uRXhwcixcbiAgICAgICAgICAgIExPV19DQVJESU5BTElUWV9MSU1JVCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtjb2x1bW5fbmFtZTogY29sdW1uTmFtZSwgc3RyYXRlZ3k6ICdkaXN0aW5jdCcsIHZhbHVlc307XG4gICAgfVxuXG4gICAgY29uc3QgbGltaXQgPSBISUdIX0NBUkRJTkFMSVRZX0xJTUlUO1xuXG4gICAgY29uc3QgdmFsdWVzID1cbiAgICAgICAgc3VwcG9ydHNUYWJsZVNhbXBsZShyZWxhdGlvbktpbmQpICYmIGVzdGltYXRlZFJvd0NvdW50ID4gMFxuICAgICAgICAgICAgPyBhd2FpdCBzYW1wbGVCZXJub3VsbGkoXG4gICAgICAgICAgICAgICAgICBwb29sLFxuICAgICAgICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgICAgY29sdW1uRXhwcixcbiAgICAgICAgICAgICAgICAgIGVzdGltYXRlZFJvd0NvdW50LFxuICAgICAgICAgICAgICAgICAgbGltaXQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogYXdhaXQgc2FtcGxlUGxhaW5MaW1pdChwb29sLCB0YWJsZU5hbWUsIGNvbHVtbkV4cHIsIGxpbWl0KTtcblxuICAgIHJldHVybiB7Y29sdW1uX25hbWU6IGNvbHVtbk5hbWUsIHN0cmF0ZWd5OiAncmFuZG9tJywgdmFsdWVzfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzYW1wbGVDb21wb3NpdGVTdWJGaWVsZCA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBzdWJGaWVsZE5hbWU6IHN0cmluZyxcbiAgICBlc3RpbWF0ZWREaXN0aW5jdDogbnVtYmVyLFxuICAgIGVzdGltYXRlZFJvd0NvdW50OiBudW1iZXIsXG4gICAgcmVsYXRpb25LaW5kOiBUUmVsYXRpb25LaW5kLFxuKTogUHJvbWlzZTxUQ29sdW1uU2FtcGxlPiA9PiB7XG4gICAgY29uc3QgY29sdW1uRXhwciA9IGAoJHtxdW90ZUlkZW50KGNvbHVtbk5hbWUpfSkuJHtxdW90ZUlkZW50KHN1YkZpZWxkTmFtZSl9YDtcbiAgICBjb25zdCBpc0xvd0NhcmRpbmFsaXR5ID1cbiAgICAgICAgZXN0aW1hdGVkRGlzdGluY3QgPiAwICYmIGVzdGltYXRlZERpc3RpbmN0IDwgTE9XX0NBUkRJTkFMSVRZX1RIUkVTSE9MRDtcblxuICAgIGlmIChpc0xvd0NhcmRpbmFsaXR5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0IHNhbXBsZURpc3RpbmN0KFxuICAgICAgICAgICAgcG9vbCxcbiAgICAgICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgICAgIGNvbHVtbkV4cHIsXG4gICAgICAgICAgICBMT1dfQ0FSRElOQUxJVFlfTElNSVQsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2x1bW5fbmFtZTogYCR7Y29sdW1uTmFtZX0uJHtzdWJGaWVsZE5hbWV9YCxcbiAgICAgICAgICAgIHN0cmF0ZWd5OiAnZGlzdGluY3QnLFxuICAgICAgICAgICAgdmFsdWVzLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGxpbWl0ID0gSElHSF9DQVJESU5BTElUWV9MSU1JVDtcblxuICAgIGNvbnN0IHZhbHVlcyA9XG4gICAgICAgIHN1cHBvcnRzVGFibGVTYW1wbGUocmVsYXRpb25LaW5kKSAmJiBlc3RpbWF0ZWRSb3dDb3VudCA+IDBcbiAgICAgICAgICAgID8gYXdhaXQgc2FtcGxlQmVybm91bGxpKFxuICAgICAgICAgICAgICAgICAgcG9vbCxcbiAgICAgICAgICAgICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICAgIGNvbHVtbkV4cHIsXG4gICAgICAgICAgICAgICAgICBlc3RpbWF0ZWRSb3dDb3VudCxcbiAgICAgICAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IGF3YWl0IHNhbXBsZVBsYWluTGltaXQocG9vbCwgdGFibGVOYW1lLCBjb2x1bW5FeHByLCBsaW1pdCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW5fbmFtZTogYCR7Y29sdW1uTmFtZX0uJHtzdWJGaWVsZE5hbWV9YCxcbiAgICAgICAgc3RyYXRlZ3k6ICdyYW5kb20nLFxuICAgICAgICB2YWx1ZXMsXG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaENvbXBvc2l0ZVN1YkZpZWxkcyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHR5cGVOYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPHJlYWRvbmx5IFRDb21wb3NpdGVTdWJGaWVsZFtdPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTx7bmFtZTogc3RyaW5nOyBkYXRhX3R5cGU6IHN0cmluZ30+KFxuICAgICAgICBgXG4gICAgICAgIFNFTEVDVCBhLmF0dG5hbWUgQVMgbmFtZSwgZm9ybWF0X3R5cGUoYS5hdHR0eXBpZCwgYS5hdHR0eXBtb2QpIEFTIGRhdGFfdHlwZVxuICAgICAgICBGUk9NIHBnX3R5cGUgdFxuICAgICAgICBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSB0LnR5cHJlbGlkXG4gICAgICAgIFdIRVJFIHQudHlwbmFtZSA9ICQxXG4gICAgICAgICAgICBBTkQgYS5hdHRudW0gPiAwXG4gICAgICAgICAgICBBTkQgTk9UIGEuYXR0aXNkcm9wcGVkXG4gICAgICAgIE9SREVSIEJZIGEuYXR0bnVtXG4gICAgICAgIGAsXG4gICAgICAgIFt0eXBlTmFtZV0sXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG59O1xuIiwgImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbmV4cG9ydCB0eXBlIFRDaGVja0NvbnN0cmFpbnRJbmZvID0ge1xuICAgIHJlbGF0aW9uX25hbWU6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZXhwcmVzc2lvbjogc3RyaW5nO1xuICAgIGlzX3ZhbGlkOiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHVibGljQ2hlY2tDb25zdHJhaW50cyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxUQ2hlY2tDb25zdHJhaW50SW5mb1tdPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcG9vbC5xdWVyeTxUQ2hlY2tDb25zdHJhaW50SW5mbz4oYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIHQucmVsbmFtZSBBUyByZWxhdGlvbl9uYW1lLFxuICAgICAgICAgICAgY29uLmNvbm5hbWUgQVMgbmFtZSxcbiAgICAgICAgICAgIHBnX2dldF9jb25zdHJhaW50ZGVmKGNvbi5vaWQsIHRydWUpIEFTIGV4cHJlc3Npb24sXG4gICAgICAgICAgICBjb24uY29udmFsaWRhdGVkIEFTIGlzX3ZhbGlkXG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19jb25zdHJhaW50IGNvblxuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgdCBPTiB0Lm9pZCA9IGNvbi5jb25yZWxpZFxuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSB0LnJlbG5hbWVzcGFjZVxuICAgICAgICBXSEVSRSBuLm5zcG5hbWUgPSAncHVibGljJ1xuICAgICAgICAgICAgQU5EIGNvbi5jb250eXBlID0gJ2MnXG4gICAgICAgIE9SREVSIEJZIHQucmVsbmFtZSwgY29uLmNvbm5hbWVcbiAgICBgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93cztcbn07XG4iLCAiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxuZXhwb3J0IHR5cGUgVEV4dGVuc2lvbkluZm8gPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBzY2hlbWE6IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaEluc3RhbGxlZEV4dGVuc2lvbnMgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbik6IFByb21pc2U8VEV4dGVuc2lvbkluZm9bXT4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VEV4dGVuc2lvbkluZm8+KGBcbiAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICBlLmV4dG5hbWUgQVMgbmFtZSxcbiAgICAgICAgICAgIGUuZXh0dmVyc2lvbiBBUyB2ZXJzaW9uLFxuICAgICAgICAgICAgbi5uc3BuYW1lIEFTIHNjaGVtYVxuICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfZXh0ZW5zaW9uIGVcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gZS5leHRuYW1lc3BhY2VcbiAgICAgICAgV0hFUkUgZS5leHRuYW1lIDw+ICdwbHBnc3FsJ1xuICAgICAgICBPUkRFUiBCWSBlLmV4dG5hbWVcbiAgICBgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93cztcbn07XG4iLCAiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxuZXhwb3J0IHR5cGUgVFNlcXVlbmNlSW5mbyA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGF0YV90eXBlOiBzdHJpbmc7XG4gICAgc3RhcnRfdmFsdWU6IHN0cmluZztcbiAgICBtaW5fdmFsdWU6IHN0cmluZztcbiAgICBtYXhfdmFsdWU6IHN0cmluZztcbiAgICBpbmNyZW1lbnQ6IHN0cmluZztcbiAgICBjeWNsZTogYm9vbGVhbjtcbiAgICBjYWNoZV9zaXplOiBzdHJpbmc7XG4gICAgb3duZWRfYnlfdGFibGU6IHN0cmluZyB8IG51bGw7XG4gICAgb3duZWRfYnlfY29sdW1uOiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHVibGljU2VxdWVuY2VzID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4pOiBQcm9taXNlPFRTZXF1ZW5jZUluZm9bXT4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VFNlcXVlbmNlSW5mbz4oYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIHMuc2VxdWVuY2VuYW1lIEFTIG5hbWUsXG4gICAgICAgICAgICBzLmRhdGFfdHlwZTo6dGV4dCBBUyBkYXRhX3R5cGUsXG4gICAgICAgICAgICBzLnN0YXJ0X3ZhbHVlOjp0ZXh0IEFTIHN0YXJ0X3ZhbHVlLFxuICAgICAgICAgICAgcy5taW5fdmFsdWU6OnRleHQgQVMgbWluX3ZhbHVlLFxuICAgICAgICAgICAgcy5tYXhfdmFsdWU6OnRleHQgQVMgbWF4X3ZhbHVlLFxuICAgICAgICAgICAgcy5pbmNyZW1lbnRfYnk6OnRleHQgQVMgaW5jcmVtZW50LFxuICAgICAgICAgICAgcy5jeWNsZSBBUyBjeWNsZSxcbiAgICAgICAgICAgIHMuY2FjaGVfc2l6ZTo6dGV4dCBBUyBjYWNoZV9zaXplLFxuICAgICAgICAgICAgdC5yZWxuYW1lIEFTIG93bmVkX2J5X3RhYmxlLFxuICAgICAgICAgICAgYS5hdHRuYW1lIEFTIG93bmVkX2J5X2NvbHVtblxuICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfc2VxdWVuY2VzIHNcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIGNcbiAgICAgICAgICAgIE9OIGMucmVsbmFtZSA9IHMuc2VxdWVuY2VuYW1lXG4gICAgICAgICAgICBBTkQgYy5yZWxuYW1lc3BhY2UgPSAoU0VMRUNUIG9pZCBGUk9NIHBnX25hbWVzcGFjZSBXSEVSRSBuc3BuYW1lID0gcy5zY2hlbWFuYW1lKVxuICAgICAgICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19kZXBlbmQgZFxuICAgICAgICAgICAgT04gZC5vYmppZCA9IGMub2lkXG4gICAgICAgICAgICBBTkQgZC5jbGFzc2lkID0gJ3BnX2NsYXNzJzo6cmVnY2xhc3NcbiAgICAgICAgICAgIEFORCBkLnJlZmNsYXNzaWQgPSAncGdfY2xhc3MnOjpyZWdjbGFzc1xuICAgICAgICAgICAgQU5EIGQuZGVwdHlwZSA9ICdhJ1xuICAgICAgICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyB0IE9OIHQub2lkID0gZC5yZWZvYmppZFxuICAgICAgICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgYVxuICAgICAgICAgICAgT04gYS5hdHRyZWxpZCA9IGQucmVmb2JqaWQgQU5EIGEuYXR0bnVtID0gZC5yZWZvYmpzdWJpZFxuICAgICAgICBXSEVSRSBzLnNjaGVtYW5hbWUgPSAncHVibGljJ1xuICAgICAgICBPUkRFUiBCWSBzLnNlcXVlbmNlbmFtZVxuICAgIGApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzO1xufTtcbiIsICJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBUVHJpZ2dlckluZm8gPSB7XG4gICAgcmVsYXRpb25fbmFtZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZWZpbml0aW9uOiBzdHJpbmc7XG4gICAgZnVuY3Rpb25fc2NoZW1hOiBzdHJpbmc7XG4gICAgZnVuY3Rpb25fbmFtZTogc3RyaW5nO1xuICAgIGlzX2VuYWJsZWQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hQdWJsaWNUcmlnZ2VycyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxUVHJpZ2dlckluZm9bXT4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VFRyaWdnZXJJbmZvPihgXG4gICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgdC5yZWxuYW1lIEFTIHJlbGF0aW9uX25hbWUsXG4gICAgICAgICAgICB0Zy50Z25hbWUgQVMgbmFtZSxcbiAgICAgICAgICAgIHBnX2dldF90cmlnZ2VyZGVmKHRnLm9pZCwgdHJ1ZSkgQVMgZGVmaW5pdGlvbixcbiAgICAgICAgICAgIGZuX25zLm5zcG5hbWUgQVMgZnVuY3Rpb25fc2NoZW1hLFxuICAgICAgICAgICAgZm4ucHJvbmFtZSBBUyBmdW5jdGlvbl9uYW1lLFxuICAgICAgICAgICAgdGcudGdlbmFibGVkIDw+ICdEJyBBUyBpc19lbmFibGVkXG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ190cmlnZ2VyIHRnXG4gICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyB0IE9OIHQub2lkID0gdGcudGdyZWxpZFxuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSB0LnJlbG5hbWVzcGFjZVxuICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfcHJvYyBmbiBPTiBmbi5vaWQgPSB0Zy50Z2ZvaWRcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBmbl9ucyBPTiBmbl9ucy5vaWQgPSBmbi5wcm9uYW1lc3BhY2VcbiAgICAgICAgV0hFUkUgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgIEFORCBOT1QgdGcudGdpc2ludGVybmFsXG4gICAgICAgIE9SREVSIEJZIHQucmVsbmFtZSwgdGcudGduYW1lXG4gICAgYCk7XG5cbiAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG59O1xuIiwgImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5cbmV4cG9ydCB0eXBlIFRGdW5jdGlvbkluZm8gPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGxhbmd1YWdlOiBzdHJpbmc7XG4gICAgYXJndW1lbnRfdHlwZXM6IHN0cmluZztcbiAgICByZXR1cm5fdHlwZTogc3RyaW5nO1xuICAgIGRlZmluaXRpb246IHN0cmluZztcbiAgICBpc190cmlnZ2VyOiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHVibGljRnVuY3Rpb25zID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4pOiBQcm9taXNlPFRGdW5jdGlvbkluZm9bXT4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBvb2wucXVlcnk8VEZ1bmN0aW9uSW5mbz4oYFxuICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgIHAucHJvbmFtZSBBUyBuYW1lLFxuICAgICAgICAgICAgbC5sYW5uYW1lIEFTIGxhbmd1YWdlLFxuICAgICAgICAgICAgcGdfZ2V0X2Z1bmN0aW9uX2FyZ3VtZW50cyhwLm9pZCkgQVMgYXJndW1lbnRfdHlwZXMsXG4gICAgICAgICAgICBwZ19nZXRfZnVuY3Rpb25fcmVzdWx0KHAub2lkKSBBUyByZXR1cm5fdHlwZSxcbiAgICAgICAgICAgIHBnX2dldF9mdW5jdGlvbmRlZihwLm9pZCkgQVMgZGVmaW5pdGlvbixcbiAgICAgICAgICAgIHAucHJvcmV0dHlwZSA9ICd0cmlnZ2VyJzo6cmVndHlwZSBBUyBpc190cmlnZ2VyXG4gICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19wcm9jIHBcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gcC5wcm9uYW1lc3BhY2VcbiAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX2xhbmd1YWdlIGwgT04gbC5vaWQgPSBwLnByb2xhbmdcbiAgICAgICAgV0hFUkUgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgIEFORCBwLnByb2tpbmQgPSAnZidcbiAgICAgICAgICAgIEFORCBOT1QgRVhJU1RTIChcbiAgICAgICAgICAgICAgICBTRUxFQ1QgMSBGUk9NIHBnX2NhdGFsb2cucGdfZGVwZW5kIGRcbiAgICAgICAgICAgICAgICBXSEVSRSBkLm9iamlkID0gcC5vaWQgQU5EIGQuZGVwdHlwZSA9ICdlJ1xuICAgICAgICAgICAgKVxuICAgICAgICBPUkRFUiBCWSBwLnByb25hbWVcbiAgICBgKTtcblxuICAgIHJldHVybiByZXN1bHQucm93cztcbn07XG4iLCAiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxuZXhwb3J0IHR5cGUgVEN1c3RvbVR5cGVLaW5kID0gJ2NvbXBvc2l0ZScgfCAnZG9tYWluJztcblxuZXhwb3J0IHR5cGUgVERvbWFpbkluZm8gPSB7XG4gICAga2luZDogJ2RvbWFpbic7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGJhc2VfdHlwZTogc3RyaW5nO1xuICAgIG5vdF9udWxsOiBib29sZWFuO1xuICAgIGRlZmF1bHRfZXhwcmVzc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgICBjaGVja19jb25zdHJhaW50czogcmVhZG9ubHkge25hbWU6IHN0cmluZzsgZXhwcmVzc2lvbjogc3RyaW5nfVtdO1xufTtcblxuZXhwb3J0IHR5cGUgVENvbXBvc2l0ZUF0dHJpYnV0ZSA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHBvc2l0aW9uOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBUQ29tcG9zaXRlSW5mbyA9IHtcbiAgICBraW5kOiAnY29tcG9zaXRlJztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYXR0cmlidXRlczogcmVhZG9ubHkgVENvbXBvc2l0ZUF0dHJpYnV0ZVtdO1xufTtcblxuZXhwb3J0IHR5cGUgVEN1c3RvbVR5cGVJbmZvID0gVERvbWFpbkluZm8gfCBUQ29tcG9zaXRlSW5mbztcblxudHlwZSBURG9tYWluUm93ID0ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBiYXNlX3R5cGU6IHN0cmluZztcbiAgICBub3RfbnVsbDogYm9vbGVhbjtcbiAgICBkZWZhdWx0X2V4cHJlc3Npb246IHN0cmluZyB8IG51bGw7XG4gICAgY2hlY2tfY29uc3RyYWludHM6IHJlYWRvbmx5IHtuYW1lOiBzdHJpbmc7IGV4cHJlc3Npb246IHN0cmluZ31bXSB8IG51bGw7XG59O1xuXG50eXBlIFRDb21wb3NpdGVSb3cgPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGF0dHJpYnV0ZXM6IHJlYWRvbmx5IFRDb21wb3NpdGVBdHRyaWJ1dGVbXSB8IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hQdWJsaWNDdXN0b21UeXBlcyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxUQ3VzdG9tVHlwZUluZm9bXT4gPT4ge1xuICAgIGNvbnN0IFtkb21haW5zLCBjb21wb3NpdGVzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgcG9vbC5xdWVyeTxURG9tYWluUm93PihgXG4gICAgICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgICAgICB0LnR5cG5hbWUgQVMgbmFtZSxcbiAgICAgICAgICAgICAgICBmb3JtYXRfdHlwZSh0LnR5cGJhc2V0eXBlLCB0LnR5cHR5cG1vZCkgQVMgYmFzZV90eXBlLFxuICAgICAgICAgICAgICAgIHQudHlwbm90bnVsbCBBUyBub3RfbnVsbCxcbiAgICAgICAgICAgICAgICB0LnR5cGRlZmF1bHQgQVMgZGVmYXVsdF9leHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgU0VMRUNUIGpzb25fYWdnKGpzb25fYnVpbGRfb2JqZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnLCBjb24uY29ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdleHByZXNzaW9uJywgcGdfZ2V0X2NvbnN0cmFpbnRkZWYoY29uLm9pZCwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgKSBPUkRFUiBCWSBjb24uY29ubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX2NvbnN0cmFpbnQgY29uXG4gICAgICAgICAgICAgICAgICAgIFdIRVJFIGNvbi5jb250eXBpZCA9IHQub2lkXG4gICAgICAgICAgICAgICAgKSBBUyBjaGVja19jb25zdHJhaW50c1xuICAgICAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX3R5cGUgdFxuICAgICAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gdC50eXBuYW1lc3BhY2VcbiAgICAgICAgICAgIFdIRVJFIG4ubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgICAgICAgQU5EIHQudHlwdHlwZSA9ICdkJ1xuICAgICAgICAgICAgT1JERVIgQlkgdC50eXBuYW1lXG4gICAgICAgIGApLFxuICAgICAgICBwb29sLnF1ZXJ5PFRDb21wb3NpdGVSb3c+KGBcbiAgICAgICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgICAgIHQudHlwbmFtZSBBUyBuYW1lLFxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgU0VMRUNUIGpzb25fYWdnKGpzb25fYnVpbGRfb2JqZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnLCBhLmF0dG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAndHlwZScsIGZvcm1hdF90eXBlKGEuYXR0dHlwaWQsIGEuYXR0dHlwbW9kKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbicsIGEuYXR0bnVtXG4gICAgICAgICAgICAgICAgICAgICkgT1JERVIgQlkgYS5hdHRudW0pXG4gICAgICAgICAgICAgICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgYVxuICAgICAgICAgICAgICAgICAgICBXSEVSRSBhLmF0dHJlbGlkID0gdC50eXByZWxpZFxuICAgICAgICAgICAgICAgICAgICAgICAgQU5EIGEuYXR0bnVtID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgQU5EIE5PVCBhLmF0dGlzZHJvcHBlZFxuICAgICAgICAgICAgICAgICkgQVMgYXR0cmlidXRlc1xuICAgICAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX3R5cGUgdFxuICAgICAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gdC50eXBuYW1lc3BhY2VcbiAgICAgICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBjIE9OIGMub2lkID0gdC50eXByZWxpZFxuICAgICAgICAgICAgV0hFUkUgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgICAgICBBTkQgdC50eXB0eXBlID0gJ2MnXG4gICAgICAgICAgICAgICAgQU5EIGMucmVsa2luZCA9ICdjJ1xuICAgICAgICAgICAgT1JERVIgQlkgdC50eXBuYW1lXG4gICAgICAgIGApLFxuICAgIF0pO1xuXG4gICAgY29uc3QgZG9tYWluSW5mb3M6IFREb21haW5JbmZvW10gPSBkb21haW5zLnJvd3MubWFwKChyKSA9PiAoe1xuICAgICAgICBraW5kOiAnZG9tYWluJyxcbiAgICAgICAgbmFtZTogci5uYW1lLFxuICAgICAgICBiYXNlX3R5cGU6IHIuYmFzZV90eXBlLFxuICAgICAgICBub3RfbnVsbDogci5ub3RfbnVsbCxcbiAgICAgICAgZGVmYXVsdF9leHByZXNzaW9uOiByLmRlZmF1bHRfZXhwcmVzc2lvbixcbiAgICAgICAgY2hlY2tfY29uc3RyYWludHM6IHIuY2hlY2tfY29uc3RyYWludHMgPz8gW10sXG4gICAgfSkpO1xuXG4gICAgY29uc3QgY29tcG9zaXRlSW5mb3M6IFRDb21wb3NpdGVJbmZvW10gPSBjb21wb3NpdGVzLnJvd3MubWFwKChyKSA9PiAoe1xuICAgICAgICBraW5kOiAnY29tcG9zaXRlJyxcbiAgICAgICAgbmFtZTogci5uYW1lLFxuICAgICAgICBhdHRyaWJ1dGVzOiByLmF0dHJpYnV0ZXMgPz8gW10sXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIFsuLi5kb21haW5JbmZvcywgLi4uY29tcG9zaXRlSW5mb3NdO1xufTtcbiIsICJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuXG5leHBvcnQgdHlwZSBUUG9saWN5Q29tbWFuZCA9ICdBTEwnIHwgJ1NFTEVDVCcgfCAnSU5TRVJUJyB8ICdVUERBVEUnIHwgJ0RFTEVURSc7XG5cbmV4cG9ydCB0eXBlIFRSZWxhdGlvblJMUyA9IHtcbiAgICByZWxhdGlvbl9uYW1lOiBzdHJpbmc7XG4gICAgcmxzX2VuYWJsZWQ6IGJvb2xlYW47XG4gICAgcmxzX2ZvcmNlZDogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRQb2xpY3lJbmZvID0ge1xuICAgIHJlbGF0aW9uX25hbWU6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcGVybWlzc2l2ZTogYm9vbGVhbjtcbiAgICByb2xlczogcmVhZG9ubHkgc3RyaW5nW107XG4gICAgY29tbWFuZDogVFBvbGljeUNvbW1hbmQ7XG4gICAgdXNpbmdfZXhwcmVzc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgICB3aXRoX2NoZWNrX2V4cHJlc3Npb246IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hQdWJsaWNSTFMgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbik6IFByb21pc2U8e1xuICAgIHJlYWRvbmx5IHJlbGF0aW9uczogcmVhZG9ubHkgVFJlbGF0aW9uUkxTW107XG4gICAgcmVhZG9ubHkgcG9saWNpZXM6IHJlYWRvbmx5IFRQb2xpY3lJbmZvW107XG59PiA9PiB7XG4gICAgY29uc3QgW3JlbGF0aW9ucywgcG9saWNpZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBwb29sLnF1ZXJ5PFRSZWxhdGlvblJMUz4oYFxuICAgICAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICAgICAgYy5yZWxuYW1lIEFTIHJlbGF0aW9uX25hbWUsXG4gICAgICAgICAgICAgICAgYy5yZWxyb3dzZWN1cml0eSBBUyBybHNfZW5hYmxlZCxcbiAgICAgICAgICAgICAgICBjLnJlbGZvcmNlcm93c2VjdXJpdHkgQVMgcmxzX2ZvcmNlZFxuICAgICAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGNcbiAgICAgICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGMucmVsbmFtZXNwYWNlXG4gICAgICAgICAgICBXSEVSRSBuLm5zcG5hbWUgPSAncHVibGljJ1xuICAgICAgICAgICAgICAgIEFORCBjLnJlbGtpbmQgSU4gKCdyJywgJ3AnKVxuICAgICAgICAgICAgICAgIEFORCAoYy5yZWxyb3dzZWN1cml0eSBPUiBjLnJlbGZvcmNlcm93c2VjdXJpdHkpXG4gICAgICAgICAgICBPUkRFUiBCWSBjLnJlbG5hbWVcbiAgICAgICAgYCksXG4gICAgICAgIHBvb2wucXVlcnk8VFBvbGljeUluZm8+KGBcbiAgICAgICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgICAgIHQucmVsbmFtZSBBUyByZWxhdGlvbl9uYW1lLFxuICAgICAgICAgICAgICAgIHBvbC5wb2xuYW1lIEFTIG5hbWUsXG4gICAgICAgICAgICAgICAgcG9sLnBvbHBlcm1pc3NpdmUgQVMgcGVybWlzc2l2ZSxcbiAgICAgICAgICAgICAgICBDT0FMRVNDRShcbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUIGFycmF5X2FnZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQVNFIFdIRU4gciA9IDAgVEhFTiAncHVibGljJyBFTFNFIHBnX2dldF91c2VyYnlpZChyKSBFTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUkRFUiBCWSByXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBGUk9NIHVubmVzdChwb2wucG9scm9sZXMpIEFTIHJcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgQVJSQVlbXTo6dGV4dFtdXG4gICAgICAgICAgICAgICAgKSBBUyByb2xlcyxcbiAgICAgICAgICAgICAgICBDQVNFIHBvbC5wb2xjbWRcbiAgICAgICAgICAgICAgICAgICAgV0hFTiAnKicgVEhFTiAnQUxMJ1xuICAgICAgICAgICAgICAgICAgICBXSEVOICdyJyBUSEVOICdTRUxFQ1QnXG4gICAgICAgICAgICAgICAgICAgIFdIRU4gJ2EnIFRIRU4gJ0lOU0VSVCdcbiAgICAgICAgICAgICAgICAgICAgV0hFTiAndycgVEhFTiAnVVBEQVRFJ1xuICAgICAgICAgICAgICAgICAgICBXSEVOICdkJyBUSEVOICdERUxFVEUnXG4gICAgICAgICAgICAgICAgRU5EIEFTIGNvbW1hbmQsXG4gICAgICAgICAgICAgICAgcGdfZ2V0X2V4cHIocG9sLnBvbHF1YWwsIHBvbC5wb2xyZWxpZCkgQVMgdXNpbmdfZXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICBwZ19nZXRfZXhwcihwb2wucG9sd2l0aGNoZWNrLCBwb2wucG9scmVsaWQpIEFTIHdpdGhfY2hlY2tfZXhwcmVzc2lvblxuICAgICAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX3BvbGljeSBwb2xcbiAgICAgICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyB0IE9OIHQub2lkID0gcG9sLnBvbHJlbGlkXG4gICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSB0LnJlbG5hbWVzcGFjZVxuICAgICAgICAgICAgV0hFUkUgbi5uc3BuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgIE9SREVSIEJZIHQucmVsbmFtZSwgcG9sLnBvbG5hbWVcbiAgICAgICAgYCksXG4gICAgXSk7XG5cbiAgICByZXR1cm4ge3JlbGF0aW9uczogcmVsYXRpb25zLnJvd3MsIHBvbGljaWVzOiBwb2xpY2llcy5yb3dzfTtcbn07XG4iLCAiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcblxuZXhwb3J0IHR5cGUgVEF0dHJpYnV0ZVBsYW5uZXJTdGF0cyA9IHtcbiAgICBhdHRyaWJ1dGVfbmFtZTogc3RyaW5nO1xuICAgIGluaGVyaXRlZDogYm9vbGVhbjtcbiAgICBudWxsX2ZyYWM6IG51bWJlcjtcbiAgICBhdmdfd2lkdGg6IG51bWJlcjtcbiAgICBuX2Rpc3RpbmN0OiBudW1iZXI7XG4gICAgbW9zdF9jb21tb25fdmFsczogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsO1xuICAgIG1vc3RfY29tbW9uX2ZyZXFzOiByZWFkb25seSBudW1iZXJbXSB8IG51bGw7XG4gICAgaGlzdG9ncmFtX2JvdW5kczogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsO1xuICAgIGNvcnJlbGF0aW9uOiBudW1iZXIgfCBudWxsO1xuICAgIG1vc3RfY29tbW9uX2VsZW1zOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgbW9zdF9jb21tb25fZWxlbV9mcmVxczogcmVhZG9ubHkgbnVtYmVyW10gfCBudWxsO1xuICAgIGVsZW1fY291bnRfaGlzdG9ncmFtOiByZWFkb25seSBudW1iZXJbXSB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBURXh0ZW5kZWRTdGF0aXN0aWMgPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGtpbmQ6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAgIGNvbHVtbnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAgIG5kaXN0aW5jdDogc3RyaW5nIHwgbnVsbDtcbiAgICBkZXBlbmRlbmNpZXM6IHN0cmluZyB8IG51bGw7XG4gICAgbWN2OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgVFJlbGF0aW9uUGxhbm5lclN0YXRzID0ge1xuICAgIHJlbGF0aW9uX25hbWU6IHN0cmluZztcbiAgICByZWx0dXBsZXM6IG51bWJlcjtcbiAgICByZWxwYWdlczogbnVtYmVyO1xuICAgIHJlbGFsbHZpc2libGU6IG51bWJlcjtcbiAgICBhdHRyaWJ1dGVzOiByZWFkb25seSBUQXR0cmlidXRlUGxhbm5lclN0YXRzW107XG4gICAgZXh0ZW5kZWQ6IHJlYWRvbmx5IFRFeHRlbmRlZFN0YXRpc3RpY1tdO1xufTtcblxudHlwZSBUUmVsYXRpb25Sb3cgPSB7XG4gICAgcmVsYXRpb25fbmFtZTogc3RyaW5nO1xuICAgIHJlbHR1cGxlczogbnVtYmVyO1xuICAgIHJlbHBhZ2VzOiBudW1iZXI7XG4gICAgcmVsYWxsdmlzaWJsZTogbnVtYmVyO1xufTtcblxudHlwZSBUQXR0cmlidXRlUm93ID0ge1xuICAgIHJlbGF0aW9uX25hbWU6IHN0cmluZztcbiAgICBhdHRyaWJ1dGVfbmFtZTogc3RyaW5nO1xuICAgIGluaGVyaXRlZDogYm9vbGVhbjtcbiAgICBudWxsX2ZyYWM6IG51bWJlcjtcbiAgICBhdmdfd2lkdGg6IG51bWJlcjtcbiAgICBuX2Rpc3RpbmN0OiBudW1iZXI7XG4gICAgbW9zdF9jb21tb25fdmFsczogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsO1xuICAgIG1vc3RfY29tbW9uX2ZyZXFzOiByZWFkb25seSBudW1iZXJbXSB8IG51bGw7XG4gICAgaGlzdG9ncmFtX2JvdW5kczogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsO1xuICAgIGNvcnJlbGF0aW9uOiBudW1iZXIgfCBudWxsO1xuICAgIG1vc3RfY29tbW9uX2VsZW1zOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgbW9zdF9jb21tb25fZWxlbV9mcmVxczogcmVhZG9ubHkgbnVtYmVyW10gfCBudWxsO1xuICAgIGVsZW1fY291bnRfaGlzdG9ncmFtOiByZWFkb25seSBudW1iZXJbXSB8IG51bGw7XG59O1xuXG50eXBlIFRFeHRlbmRlZFJvdyA9IHtcbiAgICByZWxhdGlvbl9uYW1lOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGtpbmQ6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAgIGNvbHVtbnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAgIG5kaXN0aW5jdDogc3RyaW5nIHwgbnVsbDtcbiAgICBkZXBlbmRlbmNpZXM6IHN0cmluZyB8IG51bGw7XG4gICAgbWN2OiBzdHJpbmcgfCBudWxsO1xufTtcblxuLy8gcGdfc3RhdHMgZXhwb3NlcyBtb3N0X2NvbW1vbl92YWxzL2hpc3RvZ3JhbV9ib3VuZHMgYXMgYW55YXJyYXkgd2hpY2ggcGcgY2Fubm90XG4vLyBzZXJpYWxpemUgb3ZlciB0aGUgd2lyZTsgY2FzdCB0byB0ZXh0W10gc28gdmFsdWVzIGNvbWUgYmFjayBhcyBzdHJpbmdzLiBPbiB0aGVcbi8vIHJlcGxheSBzaWRlIHdlIGNhc3QgYmFjayB0byB0aGUgdGFyZ2V0IGNvbHVtbiB0eXBlIGJlZm9yZSBpbmplY3RpbmcuXG5leHBvcnQgY29uc3QgZmV0Y2hQdWJsaWNQbGFubmVyU3RhdGlzdGljcyA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuKTogUHJvbWlzZTxyZWFkb25seSBUUmVsYXRpb25QbGFubmVyU3RhdHNbXT4gPT4ge1xuICAgIGNvbnN0IFtyZWxhdGlvbnNSZXN1bHQsIGF0dHJpYnV0ZXNSZXN1bHQsIGV4dGVuZGVkUmVzdWx0XSA9XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIHBvb2wucXVlcnk8VFJlbGF0aW9uUm93PihgXG4gICAgICAgICAgICAgICAgU0VMRUNUXG4gICAgICAgICAgICAgICAgICAgIGMucmVsbmFtZSBBUyByZWxhdGlvbl9uYW1lLFxuICAgICAgICAgICAgICAgICAgICBjLnJlbHR1cGxlczo6ZmxvYXQ4IEFTIHJlbHR1cGxlcyxcbiAgICAgICAgICAgICAgICAgICAgYy5yZWxwYWdlczo6aW50IEFTIHJlbHBhZ2VzLFxuICAgICAgICAgICAgICAgICAgICBjLnJlbGFsbHZpc2libGU6OmludCBBUyByZWxhbGx2aXNpYmxlXG4gICAgICAgICAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGNcbiAgICAgICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSBjLnJlbG5hbWVzcGFjZVxuICAgICAgICAgICAgICAgIFdIRVJFIG4ubnNwbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgICAgICAgICAgIEFORCBjLnJlbGtpbmQgSU4gKCdyJywgJ3AnLCAnbScpXG4gICAgICAgICAgICAgICAgT1JERVIgQlkgYy5yZWxuYW1lXG4gICAgICAgICAgICBgKSxcbiAgICAgICAgICAgIHBvb2wucXVlcnk8VEF0dHJpYnV0ZVJvdz4oYFxuICAgICAgICAgICAgICAgIFNFTEVDVFxuICAgICAgICAgICAgICAgICAgICBzLnRhYmxlbmFtZSBBUyByZWxhdGlvbl9uYW1lLFxuICAgICAgICAgICAgICAgICAgICBzLmF0dG5hbWUgQVMgYXR0cmlidXRlX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIHMuaW5oZXJpdGVkIEFTIGluaGVyaXRlZCxcbiAgICAgICAgICAgICAgICAgICAgcy5udWxsX2ZyYWM6OmZsb2F0OCBBUyBudWxsX2ZyYWMsXG4gICAgICAgICAgICAgICAgICAgIHMuYXZnX3dpZHRoOjppbnQgQVMgYXZnX3dpZHRoLFxuICAgICAgICAgICAgICAgICAgICBzLm5fZGlzdGluY3Q6OmZsb2F0OCBBUyBuX2Rpc3RpbmN0LFxuICAgICAgICAgICAgICAgICAgICBzLm1vc3RfY29tbW9uX3ZhbHM6OnRleHQ6OnRleHRbXSBBUyBtb3N0X2NvbW1vbl92YWxzLFxuICAgICAgICAgICAgICAgICAgICBzLm1vc3RfY29tbW9uX2ZyZXFzIEFTIG1vc3RfY29tbW9uX2ZyZXFzLFxuICAgICAgICAgICAgICAgICAgICBzLmhpc3RvZ3JhbV9ib3VuZHM6OnRleHQ6OnRleHRbXSBBUyBoaXN0b2dyYW1fYm91bmRzLFxuICAgICAgICAgICAgICAgICAgICBzLmNvcnJlbGF0aW9uOjpmbG9hdDggQVMgY29ycmVsYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIHMubW9zdF9jb21tb25fZWxlbXM6OnRleHQ6OnRleHRbXSBBUyBtb3N0X2NvbW1vbl9lbGVtcyxcbiAgICAgICAgICAgICAgICAgICAgcy5tb3N0X2NvbW1vbl9lbGVtX2ZyZXFzIEFTIG1vc3RfY29tbW9uX2VsZW1fZnJlcXMsXG4gICAgICAgICAgICAgICAgICAgIHMuZWxlbV9jb3VudF9oaXN0b2dyYW0gQVMgZWxlbV9jb3VudF9oaXN0b2dyYW1cbiAgICAgICAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfc3RhdHMgc1xuICAgICAgICAgICAgICAgIFdIRVJFIHMuc2NoZW1hbmFtZSA9ICdwdWJsaWMnXG4gICAgICAgICAgICAgICAgT1JERVIgQlkgcy50YWJsZW5hbWUsIHMuYXR0bmFtZSwgcy5pbmhlcml0ZWRcbiAgICAgICAgICAgIGApLFxuICAgICAgICAgICAgLy8gcGdfc3RhdHNfZXh0IGV4cG9zZXMgdGhlIGNvbHVtbiBsaXN0IHVuZGVyIGBhdHRuYW1lc2AgKG5hbWVbXSksXG4gICAgICAgICAgICAvLyBub3QgYGNvbHVtbnNgLiBLaW5kcyBjb21lIGJhY2sgYXMgYFwiY2hhclwiW11gLCB3aGljaCBwZyBjYW5ub3RcbiAgICAgICAgICAgIC8vIHNlcmlhbGl6ZSBvdmVyIHRoZSB3aXJlIHdpdGhvdXQgYW4gZXhwbGljaXQgY2FzdCB0byB0ZXh0W10uXG4gICAgICAgICAgICAvLyBUaGlzIHF1ZXJ5IGlzIG5vbi1mYXRhbDogYW55IGNhdGFsb2cgc2hhcGUgbWlzbWF0Y2ggKGUuZy4gb2xkZXJcbiAgICAgICAgICAgIC8vIFBvc3RncmVzKSBmYWxscyB0aHJvdWdoIHRvIGVtcHR5IGV4dGVuZGVkIHN0YXRzIHJhdGhlciB0aGFuXG4gICAgICAgICAgICAvLyBibG9ja2luZyB0aGUgaW50cm9zcGVjdGlvbiB1cGxvYWQuXG4gICAgICAgICAgICBwb29sXG4gICAgICAgICAgICAgICAgLnF1ZXJ5PFRFeHRlbmRlZFJvdz4oXG4gICAgICAgICAgICAgICAgICAgIGBcbiAgICAgICAgICAgICAgICBTRUxFQ1RcbiAgICAgICAgICAgICAgICAgICAgYy5yZWxuYW1lIEFTIHJlbGF0aW9uX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIGUuc3RhdGlzdGljc19uYW1lIEFTIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGUua2luZHM6OnRleHQ6OnRleHRbXSBBUyBraW5kLFxuICAgICAgICAgICAgICAgICAgICBlLmF0dG5hbWVzOjp0ZXh0Ojp0ZXh0W10gQVMgY29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgZS5uX2Rpc3RpbmN0Ojp0ZXh0IEFTIG5kaXN0aW5jdCxcbiAgICAgICAgICAgICAgICAgICAgZS5kZXBlbmRlbmNpZXM6OnRleHQgQVMgZGVwZW5kZW5jaWVzLFxuICAgICAgICAgICAgICAgICAgICBlLm1vc3RfY29tbW9uX3ZhbHM6OnRleHQgQVMgbWN2XG4gICAgICAgICAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX3N0YXRzX2V4dCBlXG4gICAgICAgICAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIGMgT04gYy5yZWxuYW1lID0gZS50YWJsZW5hbWVcbiAgICAgICAgICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG5cbiAgICAgICAgICAgICAgICAgICAgT04gbi5vaWQgPSBjLnJlbG5hbWVzcGFjZSBBTkQgbi5uc3BuYW1lID0gZS5zY2hlbWFuYW1lXG4gICAgICAgICAgICAgICAgV0hFUkUgZS5zY2hlbWFuYW1lID0gJ3B1YmxpYydcbiAgICAgICAgICAgICAgICBPUkRFUiBCWSBjLnJlbG5hbWUsIGUuc3RhdGlzdGljc19uYW1lXG4gICAgICAgICAgICBgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4gKHtyb3dzOiBbXSBhcyBURXh0ZW5kZWRSb3dbXX0pKSxcbiAgICAgICAgXSk7XG5cbiAgICBjb25zdCBhdHRyc0J5UmVsYXRpb24gPSBuZXcgTWFwPHN0cmluZywgVEF0dHJpYnV0ZVBsYW5uZXJTdGF0c1tdPigpO1xuICAgIGF0dHJpYnV0ZXNSZXN1bHQucm93cy5mb3JFYWNoKChyKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1Y2tldCA9IGF0dHJzQnlSZWxhdGlvbi5nZXQoci5yZWxhdGlvbl9uYW1lKSA/PyBbXTtcbiAgICAgICAgYnVja2V0LnB1c2goe1xuICAgICAgICAgICAgYXR0cmlidXRlX25hbWU6IHIuYXR0cmlidXRlX25hbWUsXG4gICAgICAgICAgICBpbmhlcml0ZWQ6IHIuaW5oZXJpdGVkLFxuICAgICAgICAgICAgbnVsbF9mcmFjOiBOdW1iZXIoci5udWxsX2ZyYWMpLFxuICAgICAgICAgICAgYXZnX3dpZHRoOiBOdW1iZXIoci5hdmdfd2lkdGgpLFxuICAgICAgICAgICAgbl9kaXN0aW5jdDogTnVtYmVyKHIubl9kaXN0aW5jdCksXG4gICAgICAgICAgICBtb3N0X2NvbW1vbl92YWxzOiByLm1vc3RfY29tbW9uX3ZhbHMsXG4gICAgICAgICAgICBtb3N0X2NvbW1vbl9mcmVxczogci5tb3N0X2NvbW1vbl9mcmVxcyxcbiAgICAgICAgICAgIGhpc3RvZ3JhbV9ib3VuZHM6IHIuaGlzdG9ncmFtX2JvdW5kcyxcbiAgICAgICAgICAgIGNvcnJlbGF0aW9uOiByLmNvcnJlbGF0aW9uID09PSBudWxsID8gbnVsbCA6IE51bWJlcihyLmNvcnJlbGF0aW9uKSxcbiAgICAgICAgICAgIG1vc3RfY29tbW9uX2VsZW1zOiByLm1vc3RfY29tbW9uX2VsZW1zLFxuICAgICAgICAgICAgbW9zdF9jb21tb25fZWxlbV9mcmVxczogci5tb3N0X2NvbW1vbl9lbGVtX2ZyZXFzLFxuICAgICAgICAgICAgZWxlbV9jb3VudF9oaXN0b2dyYW06IHIuZWxlbV9jb3VudF9oaXN0b2dyYW0sXG4gICAgICAgIH0pO1xuICAgICAgICBhdHRyc0J5UmVsYXRpb24uc2V0KHIucmVsYXRpb25fbmFtZSwgYnVja2V0KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGV4dGVuZGVkQnlSZWxhdGlvbiA9IG5ldyBNYXA8c3RyaW5nLCBURXh0ZW5kZWRTdGF0aXN0aWNbXT4oKTtcbiAgICBleHRlbmRlZFJlc3VsdC5yb3dzLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgY29uc3QgYnVja2V0ID0gZXh0ZW5kZWRCeVJlbGF0aW9uLmdldChyLnJlbGF0aW9uX25hbWUpID8/IFtdO1xuICAgICAgICBidWNrZXQucHVzaCh7XG4gICAgICAgICAgICBuYW1lOiByLm5hbWUsXG4gICAgICAgICAgICBraW5kOiByLmtpbmQsXG4gICAgICAgICAgICBjb2x1bW5zOiByLmNvbHVtbnMsXG4gICAgICAgICAgICBuZGlzdGluY3Q6IHIubmRpc3RpbmN0LFxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiByLmRlcGVuZGVuY2llcyxcbiAgICAgICAgICAgIG1jdjogci5tY3YsXG4gICAgICAgIH0pO1xuICAgICAgICBleHRlbmRlZEJ5UmVsYXRpb24uc2V0KHIucmVsYXRpb25fbmFtZSwgYnVja2V0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZWxhdGlvbnNSZXN1bHQucm93cy5tYXAoKHIpID0+ICh7XG4gICAgICAgIHJlbGF0aW9uX25hbWU6IHIucmVsYXRpb25fbmFtZSxcbiAgICAgICAgcmVsdHVwbGVzOiBOdW1iZXIoci5yZWx0dXBsZXMpLFxuICAgICAgICByZWxwYWdlczogTnVtYmVyKHIucmVscGFnZXMpLFxuICAgICAgICByZWxhbGx2aXNpYmxlOiBOdW1iZXIoci5yZWxhbGx2aXNpYmxlKSxcbiAgICAgICAgYXR0cmlidXRlczogYXR0cnNCeVJlbGF0aW9uLmdldChyLnJlbGF0aW9uX25hbWUpID8/IFtdLFxuICAgICAgICBleHRlbmRlZDogZXh0ZW5kZWRCeVJlbGF0aW9uLmdldChyLnJlbGF0aW9uX25hbWUpID8/IFtdLFxuICAgIH0pKTtcbn07XG4iLCAiaW1wb3J0IHtyZWFkRmlsZX0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuaW1wb3J0IHtydW5JbkFjdGlvbn0gZnJvbSAnbW9ieCc7XG5pbXBvcnQge2RhdGFiYXNlSW50cm9zcGVjdGlvblNjaGVtYX0gZnJvbSAnQGRiY3R4L2NvcmUvc2NoZW1hcy9pbnRyb3NwZWN0aW9uJztcbmltcG9ydCB0eXBlIHtURGF0YWJhc2VJbnRyb3NwZWN0aW9ufSBmcm9tICdAZGJjdHgvY29yZSc7XG5cbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQge2ZldGNoRGF0YWJhc2VJZGVudGlmaWVyfSBmcm9tICcuLi9kYi92ZXJzaW9uLm1qcyc7XG5cbmV4cG9ydCB0eXBlIFRMb2FkSW50cm9zcGVjdGlvbkVycm9yID1cbiAgICB8IHtraW5kOiAncmVhZCc7IG1lc3NhZ2U6IHN0cmluZ31cbiAgICB8IHtraW5kOiAncGFyc2UnOyBtZXNzYWdlOiBzdHJpbmd9XG4gICAgfCB7a2luZDogJ3NjaGVtYSc7IG1lc3NhZ2U6IHN0cmluZ31cbiAgICB8IHtraW5kOiAnbWlzbWF0Y2gnOyBtZXNzYWdlOiBzdHJpbmd9O1xuXG5leHBvcnQgdHlwZSBUTG9hZEludHJvc3BlY3Rpb25SZXN1bHQgPVxuICAgIHwge29rOiB0cnVlOyByZXN1bHQ6IFREYXRhYmFzZUludHJvc3BlY3Rpb259XG4gICAgfCB7b2s6IGZhbHNlOyBlcnJvcjogVExvYWRJbnRyb3NwZWN0aW9uRXJyb3J9O1xuXG5jb25zdCBlcnJNZXNzYWdlID0gKGVycjogdW5rbm93bik6IHN0cmluZyA9PlxuICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblxuZXhwb3J0IGNvbnN0IGxvYWRJbnRyb3NwZWN0aW9uRnJvbUZpbGUgPSBhc3luYyAoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHBvb2w6IFBvb2wsXG4pOiBQcm9taXNlPFRMb2FkSW50cm9zcGVjdGlvblJlc3VsdD4gPT4ge1xuICAgIGNvbnN0IHJhdyA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4ge29rOiB0cnVlIGFzIGNvbnN0LCB2YWx1ZTogYXdhaXQgcmVhZEZpbGUocGF0aCwgJ3V0ZjgnKX07XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvazogZmFsc2UgYXMgY29uc3QsXG4gICAgICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogJ3JlYWQnIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIHJlYWQgaW50cm9zcGVjdGlvbiBmaWxlIGF0ICR7cGF0aH06ICR7ZXJyTWVzc2FnZShlcnIpfWAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgaWYgKCFyYXcub2spIHtcbiAgICAgICAgcmV0dXJuIHtvazogZmFsc2UsIGVycm9yOiByYXcuZXJyb3J9O1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9ICgoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4ge29rOiB0cnVlIGFzIGNvbnN0LCB2YWx1ZTogSlNPTi5wYXJzZShyYXcudmFsdWUpIGFzIHVua25vd259O1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgb2s6IGZhbHNlIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdwYXJzZScgYXMgY29uc3QsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gcGFyc2UgaW50cm9zcGVjdGlvbiBKU09OIGF0ICR7cGF0aH06ICR7ZXJyTWVzc2FnZShlcnIpfWAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgaWYgKCFwYXJzZWQub2spIHtcbiAgICAgICAgcmV0dXJuIHtvazogZmFsc2UsIGVycm9yOiBwYXJzZWQuZXJyb3J9O1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRlZCA9IGRhdGFiYXNlSW50cm9zcGVjdGlvblNjaGVtYS5zYWZlUGFyc2UocGFyc2VkLnZhbHVlKTtcblxuICAgIGlmICghdmFsaWRhdGVkLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgICAga2luZDogJ3NjaGVtYScsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYEludHJvc3BlY3Rpb24gSlNPTiBhdCAke3BhdGh9IGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBzY2hlbWE6ICR7dmFsaWRhdGVkLmVycm9yLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgbG9hZGVkID0gdmFsaWRhdGVkLmRhdGE7XG4gICAgY29uc3QgbGl2ZSA9IGF3YWl0IGZldGNoRGF0YWJhc2VJZGVudGlmaWVyKHBvb2wpO1xuXG4gICAgY29uc3QgbWF0Y2hlcyA9XG4gICAgICAgIGxvYWRlZC5pZGVudGlmaWVyLnN5c3RlbV9pZGVudGlmaWVyID09PSBsaXZlLnN5c3RlbV9pZGVudGlmaWVyICYmXG4gICAgICAgIGxvYWRlZC5pZGVudGlmaWVyLmRhdGFiYXNlX29pZCA9PT0gbGl2ZS5kYXRhYmFzZV9vaWQgJiZcbiAgICAgICAgbG9hZGVkLm5hbWUgPT09IGxpdmUuZGF0YWJhc2VfbmFtZTtcblxuICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICBraW5kOiAnbWlzbWF0Y2gnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgICAgICAgIGBJbnRyb3NwZWN0aW9uIEpTT04gZG9lcyBub3QgbWF0Y2ggdGhlIGNvbm5lY3RlZCBkYXRhYmFzZS5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCAgbG9hZGVkOiBuYW1lPSR7bG9hZGVkLm5hbWV9IHN5c3RlbV9pZGVudGlmaWVyPSR7bG9hZGVkLmlkZW50aWZpZXIuc3lzdGVtX2lkZW50aWZpZXJ9IGRhdGFiYXNlX29pZD0ke2xvYWRlZC5pZGVudGlmaWVyLmRhdGFiYXNlX29pZH1cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgYCAgbGl2ZTogICBuYW1lPSR7bGl2ZS5kYXRhYmFzZV9uYW1lfSBzeXN0ZW1faWRlbnRpZmllcj0ke2xpdmUuc3lzdGVtX2lkZW50aWZpZXJ9IGRhdGFiYXNlX29pZD0ke2xpdmUuZGF0YWJhc2Vfb2lkfWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7b2s6IHRydWUsIHJlc3VsdDogbG9hZGVkfTtcbn07XG5cbmV4cG9ydCBjb25zdCBwb3B1bGF0ZUludHJvc3BlY3Rpb25Db3VudHMgPSAoXG4gICAgc3RvcmU6IFRTdG9yZSxcbiAgICBpbnRyb3NwZWN0aW9uOiBURGF0YWJhc2VJbnRyb3NwZWN0aW9uLFxuKTogdm9pZCA9PiB7XG4gICAgY29uc3QgY291bnRzID0gc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5jb3VudHM7XG5cbiAgICBjb25zdCByZWxhdGlvbnMgPSBPYmplY3QudmFsdWVzKGludHJvc3BlY3Rpb24ucmVsYXRpb25zKTtcblxuICAgIGNvbnN0IHRhYmxlcyA9IHJlbGF0aW9ucy5maWx0ZXIoXG4gICAgICAgIChyKSA9PiByLmtpbmQgPT09ICd0YWJsZScgfHwgci5raW5kID09PSAncGFydGl0aW9uZWRfdGFibGUnLFxuICAgICkubGVuZ3RoO1xuICAgIGNvbnN0IHZpZXdzID0gcmVsYXRpb25zLmZpbHRlcigocikgPT4gci5raW5kID09PSAndmlldycpLmxlbmd0aDtcbiAgICBjb25zdCBtYXRlcmlhbGl6ZWRWaWV3cyA9IHJlbGF0aW9ucy5maWx0ZXIoXG4gICAgICAgIChyKSA9PiByLmtpbmQgPT09ICdtYXRlcmlhbGl6ZWRfdmlldycsXG4gICAgKS5sZW5ndGg7XG5cbiAgICBjb25zdCBjb2x1bW5zID0gcmVsYXRpb25zLnJlZHVjZShcbiAgICAgICAgKGFjYywgcikgPT4gYWNjICsgT2JqZWN0LmtleXMoci5hdHRyaWJ1dGVzKS5sZW5ndGgsXG4gICAgICAgIDAsXG4gICAgKTtcbiAgICBjb25zdCBpbmRleGVzID0gcmVsYXRpb25zLnJlZHVjZShcbiAgICAgICAgKGFjYywgcikgPT4gYWNjICsgT2JqZWN0LmtleXMoci5pbmRleGVzKS5sZW5ndGgsXG4gICAgICAgIDAsXG4gICAgKTtcbiAgICBjb25zdCBmb3JlaWduS2V5cyA9IHJlbGF0aW9ucy5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHIpID0+IGFjYyArIE9iamVjdC5rZXlzKHIucmVmZXJlbmNlcykubGVuZ3RoLFxuICAgICAgICAwLFxuICAgICk7XG5cbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIGNvdW50cy50YWJsZXMgPSB0YWJsZXM7XG4gICAgICAgIGNvdW50cy52aWV3cyA9IHZpZXdzO1xuICAgICAgICBjb3VudHMubWF0ZXJpYWxpemVkVmlld3MgPSBtYXRlcmlhbGl6ZWRWaWV3cztcbiAgICAgICAgY291bnRzLmNvbHVtbnMgPSBjb2x1bW5zO1xuICAgICAgICBjb3VudHMuaW5kZXhlcyA9IGluZGV4ZXM7XG4gICAgICAgIGNvdW50cy5mb3JlaWduS2V5cyA9IGZvcmVpZ25LZXlzO1xuICAgICAgICBjb3VudHMuZW51bXMgPSBPYmplY3Qua2V5cyhpbnRyb3NwZWN0aW9uLmVudW1zKS5sZW5ndGg7XG4gICAgICAgIGNvdW50cy5hbmFseXplZCA9IDA7XG4gICAgfSk7XG59O1xuIiwgImltcG9ydCB0eXBlIHtQb29sfSBmcm9tICdwZyc7XG5pbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcblxuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB0eXBlIHtURGF0YWJhc2VJbnRyb3NwZWN0aW9ufSBmcm9tICdAZGJjdHgvY29yZSc7XG5pbXBvcnQge2ZldGNoUmVsYXRpb25GaWxlU3RhdHN9IGZyb20gJy4uL2RiL2luZGV4Lm1qcyc7XG5pbXBvcnQge3RycGMsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRUUlBDQ2xpZW50fSBmcm9tICcuLi9saWIvdHJwYy5tanMnO1xuaW1wb3J0IHtcbiAgICBkZXRlY3RBSUFzc2lzdGFudHMsXG4gICAgZGV0ZWN0RG9ja2VyLFxuICAgIGRldGVjdE9TLFxuICAgIGRldGVjdFNoZWxsLFxuICAgIGRldGVjdEhvc3RuYW1lLFxuICAgIGRldGVjdFVzZXJuYW1lLFxuICAgIGRldGVjdFdTTCxcbiAgICBkZXRlY3RTeXN0ZW1NZW1vcnksXG4gICAgZGV0ZWN0UGFja2FnZU1hbmFnZXIsXG4gICAgZGV0ZWN0UHJvdmlkZXIsXG4gICAgaXNMb2NhbGhvc3QsXG59IGZyb20gJy4vZGV0ZWN0Lm1qcyc7XG5pbXBvcnQge2J1aWxkU2Vzc2lvblVSTCwgb3BlblNlc3Npb25VUkx9IGZyb20gJy4vb3Blbi11cmwubWpzJztcbmltcG9ydCB7d3JpdGVDb25maWd9IGZyb20gJy4vY29uZmlnLm1qcyc7XG5pbXBvcnQge0NMSUVOVF9WRVJTSU9OfSBmcm9tICcuLi9saWIvdmVyc2lvbi5tanMnO1xuaW1wb3J0IHtmaXJlVGVsZW1ldHJ5RXZlbnR9IGZyb20gJy4vdGVsZW1ldHJ5Lm1qcyc7XG5cbmNvbnN0IGNoZWNrSXNSZXBsaWNhID0gYXN5bmMgKHBvb2w6IFBvb2wpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwb29sLnF1ZXJ5PHtpc19yZXBsaWNhOiBib29sZWFufT4oXG4gICAgICAgICdTRUxFQ1QgcGdfaXNfaW5fcmVjb3ZlcnkoKSBBUyBpc19yZXBsaWNhJyxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzWzBdLmlzX3JlcGxpY2E7XG59O1xuXG5jb25zdCBjb2xsZWN0TWVkaWFuRmlsZUFnZSA9IGFzeW5jIChcbiAgICBwb29sOiBQb29sLFxuICAgIHRhYmxlTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICAgIHN0b3JlOiBUU3RvcmUsXG4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+ID0+IHtcbiAgICBpZiAodGFibGVOYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZmlyc3QgPSBhd2FpdCBmZXRjaFJlbGF0aW9uRmlsZVN0YXRzKHBvb2wsIHRhYmxlTmFtZXNbMF0pO1xuXG4gICAgICAgIGlmICghZmlyc3Q/Lm1vZGlmaWNhdGlvbl90aW1lKSB7XG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5maWxlU3RhdHNTa2lwcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVzOiBEYXRlW10gPSBbZmlyc3QubW9kaWZpY2F0aW9uX3RpbWVdO1xuXG4gICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgdGFibGVOYW1lcy5zbGljZSgxKS5tYXAoYXN5bmMgKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZldGNoUmVsYXRpb25GaWxlU3RhdHMocG9vbCwgbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0cz8ubW9kaWZpY2F0aW9uX3RpbWUgPz8gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmVtYWluaW5nLmZvckVhY2goKHQpID0+IHtcbiAgICAgICAgICAgIGlmICh0KSB7XG4gICAgICAgICAgICAgICAgdGltZXMucHVzaCh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc29ydGVkID0gWy4uLnRpbWVzXS5zb3J0KChhLCBiKSA9PiBhLmdldFRpbWUoKSAtIGIuZ2V0VGltZSgpKTtcbiAgICAgICAgY29uc3QgbWlkID0gTWF0aC5mbG9vcihzb3J0ZWQubGVuZ3RoIC8gMik7XG4gICAgICAgIGNvbnN0IG1lZGlhbiA9XG4gICAgICAgICAgICBzb3J0ZWQubGVuZ3RoICUgMiA9PT0gMFxuICAgICAgICAgICAgICAgID8gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgKHNvcnRlZFttaWQgLSAxXS5nZXRUaW1lKCkgKyBzb3J0ZWRbbWlkXS5nZXRUaW1lKCkpIC8gMixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IHNvcnRlZFttaWRdO1xuXG4gICAgICAgIHJldHVybiBtZWRpYW4udG9JU09TdHJpbmcoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5maWxlU3RhdHNTa2lwcGVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuY29uc3QgYnVpbGRTZXNzaW9uSW5wdXQgPSAoXG4gICAgcmVzdWx0OiBURGF0YWJhc2VJbnRyb3NwZWN0aW9uLFxuICAgIHN0b3JlOiBUU3RvcmUsXG4gICAgaXNSZXBsaWNhOiBib29sZWFuLFxuICAgIG1lZGlhbkZpbGVBZ2U6IHN0cmluZyB8IG51bGwsXG4pID0+IHtcbiAgICBjb25zdCByZWxhdGlvbnMgPSBPYmplY3QudmFsdWVzKHJlc3VsdC5yZWxhdGlvbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YWJhc2VfbmFtZTogcmVzdWx0Lm5hbWUsXG4gICAgICAgIGRhdGFiYXNlX29iamVjdF9zdGF0aXN0aWNzOiB7XG4gICAgICAgICAgICBwYXJlbnRfdGFibGVzOiByZWxhdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChyKSA9PiByLmtpbmQgPT09ICdwYXJ0aXRpb25lZF90YWJsZScsXG4gICAgICAgICAgICApLmxlbmd0aCxcbiAgICAgICAgICAgIHRhYmxlczogcmVsYXRpb25zLmZpbHRlcigocikgPT4gci5raW5kID09PSAndGFibGUnKS5sZW5ndGgsXG4gICAgICAgICAgICB2aWV3czogcmVsYXRpb25zLmZpbHRlcigocikgPT4gci5raW5kID09PSAndmlldycpLmxlbmd0aCxcbiAgICAgICAgICAgIG1hdGVyaWFsaXplZF92aWV3czogcmVsYXRpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAocikgPT4gci5raW5kID09PSAnbWF0ZXJpYWxpemVkX3ZpZXcnLFxuICAgICAgICAgICAgKS5sZW5ndGgsXG4gICAgICAgICAgICBlbnVtczogc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5jb3VudHMuZW51bXMsXG4gICAgICAgICAgICBpbmRleGVzOiBzdG9yZS5zdGVwcy5pbnRyb3NwZWN0aW9uLmNvdW50cy5pbmRleGVzLFxuICAgICAgICAgICAgZm9yZWlnbl9rZXlfcmVmZXJlbmNlczpcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbnRyb3NwZWN0aW9uLmNvdW50cy5mb3JlaWduS2V5cyxcbiAgICAgICAgfSxcbiAgICAgICAgaXNfZGF0YWJhc2VfcmVwbGljYTogaXNSZXBsaWNhLFxuICAgICAgICBtZWRpYW5fdGFibGVfZmlsZV9hZ2U6IG1lZGlhbkZpbGVBZ2UsXG4gICAgICAgIGRhdGFiYXNlX3R5cGU6IHJlc3VsdC50eXBlLFxuICAgICAgICBkYXRhYmFzZV92ZXJzaW9uOiByZXN1bHQudmVyc2lvbi52ZXJzaW9uX251bWJlci50b1N0cmluZygpLFxuICAgICAgICBkYXRhYmFzZV92ZXJzaW9uX3N0cmluZzogcmVzdWx0LnZlcnNpb24udmVyc2lvbl9zdHJpbmcsXG4gICAgICAgIGRhdGFiYXNlX3Byb3ZpZGVyOiBkZXRlY3RQcm92aWRlcihcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5waWNrZWRIb3N0bmFtZSEsXG4gICAgICAgICksXG4gICAgICAgIGlzX2xvY2FsOiBpc0xvY2FsaG9zdChzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucGlja2VkSG9zdG5hbWUhKSxcbiAgICAgICAgaXNfZG9ja2VyOiBkZXRlY3REb2NrZXIoKSxcbiAgICAgICAgaXNfYWNjZXNzZWRfb3Zlcl9zc2g6IHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uZW5hYmxlZCxcbiAgICAgICAgc2hlbGw6IGRldGVjdFNoZWxsKCksXG4gICAgICAgIG9zOiBkZXRlY3RPUygpLFxuICAgICAgICBpc193c2w6IGRldGVjdFdTTCgpLFxuICAgICAgICBzeXN0ZW1fbWVtb3J5OiBkZXRlY3RTeXN0ZW1NZW1vcnkoKSxcbiAgICAgICAgcGFja2FnZV9tYW5hZ2VyOiBkZXRlY3RQYWNrYWdlTWFuYWdlcigpLFxuICAgICAgICB1c2VybmFtZTogZGV0ZWN0VXNlcm5hbWUoKSxcbiAgICAgICAgaG9zdG5hbWU6IGRldGVjdEhvc3RuYW1lKCksXG4gICAgICAgIGFpX2Fzc2lzdGFudHM6IGRldGVjdEFJQXNzaXN0YW50cygpLFxuICAgIH0gYXMgY29uc3Q7XG59O1xuXG5jb25zdCB3YWl0Rm9yVG9rZW4gPSAoc2Vzc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4gPT5cbiAgICBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgc3ViID0gdHJwYy5zZXNzaW9uLm9uQXV0aG9yaXphdGlvbi5zdWJzY3JpYmUoXG4gICAgICAgICAgICB7c2Vzc2lvbl9pZDogc2Vzc2lvbklkfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvbkRhdGE6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEudG9rZW4pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25FcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgfSk7XG5cbmV4cG9ydCBjb25zdCBjaGVja0dhdGUgPSBhc3luYyAoXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBzdG9yZTogVFN0b3JlLFxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zdGVwcy5nYXRlLnN0YXRlID0gJ2NoZWNraW5nJztcbiAgICB9KTtcblxuICAgIGNvbnN0IGF1dGhDbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkVFJQQ0NsaWVudCgoKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUodG9rZW4pLFxuICAgICk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXV0aENsaWVudC5zZXNzaW9uLnNob3VsZENvbnRpbnVlLnF1ZXJ5KHtcbiAgICAgICAgY2xpZW50X3ZlcnNpb246IENMSUVOVF9WRVJTSU9OLFxuICAgIH0pO1xuXG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zdGVwcy5nYXRlLnN0YXRlID0gcmVzdWx0LmNvbnRpbnVlID8gJ3Bhc3NlZCcgOiAnYmxvY2tlZCc7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmdhdGUubWVzc2FnZSA9IHJlc3VsdC5tZXNzYWdlO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdC5jb250aW51ZSkge1xuICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe3R5cGU6ICdjbGkuYmlsbGluZy5nYXRlX3Bhc3NlZCd9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ2NsaS5iaWxsaW5nLmdhdGVfYmxvY2tlZCcsXG4gICAgICAgICAgICBibG9ja19yZWFzb246IHJlc3VsdC5tZXNzYWdlID8/ICd1bmtub3duJyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC5jb250aW51ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja0JpbGxpbmcgPSBhc3luYyAoXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBzZXNzaW9uVXJsOiBzdHJpbmcsXG4gICAgc3RvcmU6IFRTdG9yZSxcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuYmlsbGluZy5zdGF0ZSA9ICdjaGVja2luZyc7XG4gICAgfSk7XG5cbiAgICBjb25zdCBhdXRoQ2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZFRSUENDbGllbnQoKCkgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHRva2VuKSxcbiAgICApO1xuXG4gICAgY29uc3QgaW5pdGlhbCA9IGF3YWl0IGF1dGhDbGllbnQuYmlsbGluZy5oYXNCaWxsaW5nRm9yQ2xpZW50LnF1ZXJ5KHt9KTtcblxuICAgIC8vIFRyaWFsLWVsaWdpYmxlIHVzZXJzIChubyBpbnZvaWNlcyB5ZXQpIHNraXAgdGhlIGNhcmQtb24tZmlsZSBzdGVwLiBUaGVcbiAgICAvLyBmaXJzdCByZXZpc2lvbiB3aWxsIG1pbnQgYW4gaW52b2ljZSB3aXRoIGEgNy1kYXkgZ3JhY2UsIGJpbGxlZCB2aWFcbiAgICAvLyBTdHJpcGUncyBob3N0ZWQtaW52b2ljZSBlbWFpbCByYXRoZXIgdGhhbiBhbiBpbW1lZGlhdGUgY2hhcmdlLlxuICAgIGlmIChpbml0aWFsLmhhc0JpbGxpbmcgfHwgaW5pdGlhbC5pc1RyaWFsRWxpZ2libGUpIHtcbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuYmlsbGluZy5zdGF0ZSA9ICdjb25uZWN0ZWQnO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGluaXRpYWwuaXNUcmlhbEVsaWdpYmxlKSB7XG4gICAgICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe3R5cGU6ICdjbGkuYmlsbGluZy50cmlhbF9lbGlnaWJsZSd9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2NsaS5iaWxsaW5nLmNvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgd2FpdF9tczogMCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe3R5cGU6ICdjbGkuYmlsbGluZy5yZXF1aXJlZCd9KTtcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuYmlsbGluZy5zdGF0ZSA9ICd3YWl0aW5nJztcbiAgICAgICAgc3RvcmUuc3RlcHMuYmlsbGluZy51cmwgPSBzZXNzaW9uVXJsO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgb3BlblNlc3Npb25VUkwoc2Vzc2lvblVybCk7XG4gICAgZmlyZVRlbGVtZXRyeUV2ZW50KHt0eXBlOiAnY2xpLmJpbGxpbmcudXJsX29wZW5lZCd9KTtcblxuICAgIGNvbnN0IGJpbGxpbmdXYWl0U3RhcnQgPSBEYXRlLm5vdygpO1xuXG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB0aWNrID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhdXRoQ2xpZW50LmJpbGxpbmcuaGFzQmlsbGluZ0ZvckNsaWVudC5xdWVyeSh7fSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNCaWxsaW5nIHx8IHJlc3VsdC5pc1RyaWFsRWxpZ2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuYmlsbGluZy5zdGF0ZSA9ICdjb25uZWN0ZWQnO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjbGkuYmlsbGluZy5jb21wbGV0ZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2FpdF9tczogRGF0ZS5ub3coKSAtIGJpbGxpbmdXYWl0U3RhcnQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCh0aWNrLCAyMDAwKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzZXRUaW1lb3V0KHRpY2ssIDIwMDApO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbm5lY3RBY2NvdW50ID0gYXN5bmMgKFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgc3RvcmU6IFRTdG9yZSxcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuYWNjb3VudC5zdGF0ZSA9ICdmZXRjaGluZy1hY2NvdW50JztcbiAgICB9KTtcblxuICAgIGNvbnN0IGF1dGhDbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkVFJQQ0NsaWVudCgoKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUodG9rZW4pLFxuICAgICk7XG4gICAgY29uc3QgYWNjb3VudCA9IGF3YWl0IGF1dGhDbGllbnQuYWNjb3VudC5nZXRBY2NvdW50LnF1ZXJ5KHt9KTtcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuYWNjb3VudC5zdGF0ZSA9ICdjb25uZWN0ZWQnO1xuICAgICAgICBzdG9yZS5zdGVwcy5hY2NvdW50LmVtYWlsID0gYWNjb3VudC5lbWFpbHNbMF0gPz8gbnVsbDtcbiAgICAgICAgc3RvcmUuc3RlcHMuYWNjb3VudC5uYW1lID0gYWNjb3VudC5uYW1lO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNlc3Npb24gPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICByZXN1bHQ6IFREYXRhYmFzZUludHJvc3BlY3Rpb24sXG4gICAgc3RvcmU6IFRTdG9yZSxcbiAgICB0b2tlbjogc3RyaW5nIHwgbnVsbCxcbiAgICBkZXZpY2VfaWQ6IHN0cmluZyxcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zdGVwcy5hY2NvdW50LnN0YXRlID0gJ2NyZWF0aW5nLXNlc3Npb24nO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdGFibGVOYW1lcyA9IE9iamVjdC52YWx1ZXMocmVzdWx0LnJlbGF0aW9ucylcbiAgICAgICAgLmZpbHRlcigocikgPT4gci5raW5kID09PSAndGFibGUnIHx8IHIua2luZCA9PT0gJ3BhcnRpdGlvbmVkX3RhYmxlJylcbiAgICAgICAgLm1hcCgocikgPT4gci5uYW1lKTtcblxuICAgIGNvbnN0IFtpc1JlcGxpY2EsIG1lZGlhbkZpbGVBZ2VdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBjaGVja0lzUmVwbGljYShwb29sKSxcbiAgICAgICAgY29sbGVjdE1lZGlhbkZpbGVBZ2UocG9vbCwgdGFibGVOYW1lcywgc3RvcmUpLFxuICAgIF0pO1xuXG4gICAgY29uc3QgaW5wdXQgPSB7XG4gICAgICAgIC4uLmJ1aWxkU2Vzc2lvbklucHV0KHJlc3VsdCwgc3RvcmUsIGlzUmVwbGljYSwgbWVkaWFuRmlsZUFnZSksXG4gICAgICAgIGRldmljZV9pZCxcbiAgICB9O1xuXG4gICAgY29uc3QgY2xpZW50ID0gdG9rZW5cbiAgICAgICAgPyBjcmVhdGVBdXRoZW50aWNhdGVkVFJQQ0NsaWVudCgoKSA9PiBQcm9taXNlLnJlc29sdmUodG9rZW4pKVxuICAgICAgICA6IHRycGM7XG5cbiAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgY2xpZW50LnNlc3Npb24uY3JlYXRlLm11dGF0ZShpbnB1dCk7XG5cbiAgICByZXR1cm4gc2Vzc2lvbi5pZDtcbn07XG5cbmV4cG9ydCBjb25zdCB3YWl0Rm9yQXV0aG9yaXphdGlvbiA9IGFzeW5jIChcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICBzdG9yZTogVFN0b3JlLFxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3QgdXJsID0gYnVpbGRTZXNzaW9uVVJMKHNlc3Npb25JZCk7XG5cbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmFjY291bnQuc3RhdGUgPSAnd2FpdGluZyc7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmFjY291bnQudXJsID0gdXJsO1xuICAgICAgICBzdG9yZS5zdGVwcy5hY2NvdW50LnNlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgd2FpdEZvclRva2VuKHNlc3Npb25JZCk7XG4gICAgYXdhaXQgd3JpdGVDb25maWcodG9rZW4pO1xuICAgIGF3YWl0IGNvbm5lY3RBY2NvdW50KHRva2VuLCBzdG9yZSk7XG59O1xuIiwgImltcG9ydCB7XG4gICAgY3JlYXRlVFJQQ0NsaWVudCxcbiAgICBodHRwQmF0Y2hMaW5rLFxuICAgIHNwbGl0TGluayxcbiAgICBodHRwU3Vic2NyaXB0aW9uTGluayxcbn0gZnJvbSAnQHRycGMvY2xpZW50JztcbmltcG9ydCB0eXBlIHtUUlBDQ2xpZW50fSBmcm9tICdAdHJwYy9jbGllbnQnO1xuaW1wb3J0IHR5cGUge1RBcHBSb3V0ZXJ9IGZyb20gJ0BkYmN0eC9jb3JlJztcbmltcG9ydCB7RXZlbnRTb3VyY2V9IGZyb20gJ2V2ZW50c291cmNlJztcbmltcG9ydCB7Z2V0VFJQQ1VSTH0gZnJvbSAnLi90cnBjLXVybC5tanMnO1xuXG50eXBlIFRHZXRUb2tlbiA9ICgpID0+IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XG5cbmNvbnN0IGNyZWF0ZUxpbmtzID0gKGdldFRva2VuPzogVEdldFRva2VuKSA9PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IGdldFRva2VuXG4gICAgICAgID8gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGdldFRva2VuKCk7XG4gICAgICAgICAgICAgIHJldHVybiB0b2tlbiA/IHtBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YH0gOiB7fTtcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgICAgc3BsaXRMaW5rKHtcbiAgICAgICAgICAgIGNvbmRpdGlvbjogKG9wKSA9PiBvcC50eXBlID09PSAnc3Vic2NyaXB0aW9uJyxcbiAgICAgICAgICAgIHRydWU6IGh0dHBTdWJzY3JpcHRpb25MaW5rKHtcbiAgICAgICAgICAgICAgICB1cmw6IGdldFRSUENVUkwoKSxcbiAgICAgICAgICAgICAgICBFdmVudFNvdXJjZTpcbiAgICAgICAgICAgICAgICAgICAgRXZlbnRTb3VyY2UgYXMgdW5rbm93biBhcyB0eXBlb2YgZ2xvYmFsVGhpcy5FdmVudFNvdXJjZSxcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uUGFyYW1zOiBnZXRUb2tlblxuICAgICAgICAgICAgICAgICAgICA/IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBnZXRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW4gPyB7dG9rZW59IDoge307XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmFsc2U6IGh0dHBCYXRjaExpbmsoe1xuICAgICAgICAgICAgICAgIHVybDogZ2V0VFJQQ1VSTCgpLFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSksXG4gICAgXTtcbn07XG5cbmV4cG9ydCBjb25zdCB0cnBjOiBUUlBDQ2xpZW50PFRBcHBSb3V0ZXI+ID0gY3JlYXRlVFJQQ0NsaWVudDxUQXBwUm91dGVyPih7XG4gICAgbGlua3M6IGNyZWF0ZUxpbmtzKCksXG59KTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUF1dGhlbnRpY2F0ZWRUUlBDQ2xpZW50ID0gKFxuICAgIGdldFRva2VuOiBUR2V0VG9rZW4sXG4pOiBUUlBDQ2xpZW50PFRBcHBSb3V0ZXI+ID0+XG4gICAgY3JlYXRlVFJQQ0NsaWVudDxUQXBwUm91dGVyPih7XG4gICAgICAgIGxpbmtzOiBjcmVhdGVMaW5rcyhnZXRUb2tlbiksXG4gICAgfSk7XG4iLCAiaW1wb3J0IHtEQkNUWF9ERVZ9IGZyb20gJy4vZW52Lm1qcyc7XG5cbmNvbnN0IFBST0RfQ09SRSA9ICdodHRwczovL2NvcmUuZGJjdHguaW8nO1xuY29uc3QgREVWX0NPUkVfUE9SVCA9IDEyMDAxO1xuXG5leHBvcnQgY29uc3QgZ2V0VFJQQ1VSTCA9ICgpOiBzdHJpbmcgPT5cbiAgICAhREJDVFhfREVWID8gYCR7UFJPRF9DT1JFfS90cnBjYCA6IGBodHRwOi8vbG9jYWxob3N0OiR7REVWX0NPUkVfUE9SVH0vdHJwY2A7XG4iLCAiaW1wb3J0IHtleGlzdHNTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge2hvc3RuYW1lLCB0b3RhbG1lbSwgdXNlckluZm99IGZyb20gJ29zJztcbmltcG9ydCB7YmFzZW5hbWUsIGpvaW59IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtjd2QsIGVudiwgcGxhdGZvcm19IGZyb20gJ3Byb2Nlc3MnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgVEFJQXNzaXN0YW50LFxuICAgIFREYXRhYmFzZVByb3ZpZGVyLFxuICAgIFRPcyxcbiAgICBUU2hlbGwsXG4gICAgVFN5c3RlbU1lbW9yeSxcbiAgICBUUGFja2FnZU1hbmFnZXIsXG59IGZyb20gJ0BkYmN0eC9jb3JlJztcblxuZXhwb3J0IGNvbnN0IGRldGVjdE9TID0gKCk6IFRPcyA9PlxuICAgIHBsYXRmb3JtID09PSAnZGFyd2luJ1xuICAgICAgICA/ICdtYWNvcydcbiAgICAgICAgOiBwbGF0Zm9ybSA9PT0gJ3dpbjMyJ1xuICAgICAgICAgID8gJ3dpbmRvd3MnXG4gICAgICAgICAgOiAnbGludXgnO1xuXG5leHBvcnQgY29uc3QgZGV0ZWN0U2hlbGwgPSAoKTogVFNoZWxsID0+IHtcbiAgICBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICAgICAgcmV0dXJuICdwb3dlcnNoZWxsJztcbiAgICB9XG5cbiAgICBjb25zdCBzaGVsbCA9IGVudi5TSEVMTDtcblxuICAgIGlmICghc2hlbGwpIHtcbiAgICAgICAgcmV0dXJuICdvdGhlcic7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9IGJhc2VuYW1lKHNoZWxsKTtcbiAgICBjb25zdCBrbm93bjogUmVjb3JkPHN0cmluZywgVFNoZWxsPiA9IHtcbiAgICAgICAgYmFzaDogJ2Jhc2gnLFxuICAgICAgICB6c2g6ICd6c2gnLFxuICAgICAgICBrc2g6ICdrc2gnLFxuICAgICAgICBmaXNoOiAnZmlzaCcsXG4gICAgICAgIGFzaDogJ2FzaCcsXG4gICAgfTtcblxuICAgIHJldHVybiBrbm93bltuYW1lXSA/PyAnb3RoZXInO1xufTtcblxuZXhwb3J0IGNvbnN0IGRldGVjdFdTTCA9ICgpOiBib29sZWFuID0+ICEhKGVudi5XU0xfRElTVFJPX05BTUUgfHwgZW52LldTTEVOVik7XG5cbmNvbnN0IEdCID0gMTAyNCAqKiAzO1xuXG5leHBvcnQgY29uc3QgZGV0ZWN0U3lzdGVtTWVtb3J5ID0gKCk6IFRTeXN0ZW1NZW1vcnkgPT4ge1xuICAgIGNvbnN0IGJ5dGVzID0gdG90YWxtZW0oKTtcblxuICAgIGlmIChieXRlcyA8IDEyICogR0IpIHtcbiAgICAgICAgcmV0dXJuICc4Zyc7XG4gICAgfVxuICAgIGlmIChieXRlcyA8IDIwICogR0IpIHtcbiAgICAgICAgcmV0dXJuICcxNmcnO1xuICAgIH1cbiAgICBpZiAoYnl0ZXMgPCAyOCAqIEdCKSB7XG4gICAgICAgIHJldHVybiAnMjRnJztcbiAgICB9XG4gICAgaWYgKGJ5dGVzIDwgNDggKiBHQikge1xuICAgICAgICByZXR1cm4gJzMyZyc7XG4gICAgfVxuXG4gICAgcmV0dXJuICdtb3JlJztcbn07XG5cbmV4cG9ydCBjb25zdCBkZXRlY3RQYWNrYWdlTWFuYWdlciA9ICgpOiBUUGFja2FnZU1hbmFnZXIgPT4ge1xuICAgIGNvbnN0IGFnZW50ID0gZW52Lm5wbV9jb25maWdfdXNlcl9hZ2VudCA/PyAnJztcbiAgICBjb25zdCBrbm93bjogcmVhZG9ubHkgVFBhY2thZ2VNYW5hZ2VyW10gPSBbXG4gICAgICAgICdwbnBtJyxcbiAgICAgICAgJ3lhcm4nLFxuICAgICAgICAnYnVuJyxcbiAgICAgICAgJ2Rlbm8nLFxuICAgIF0gYXMgY29uc3Q7XG5cbiAgICBjb25zdCBtYXRjaCA9IGtub3duLmZpbmQoKHBtKSA9PiBhZ2VudC5zdGFydHNXaXRoKHBtKSk7XG5cbiAgICByZXR1cm4gbWF0Y2ggPz8gJ25wbSc7XG59O1xuXG4vLyBUT0RPOiBJbXBsZW1lbnQgaG9zdG5hbWUgXHUyMTkyIHByb3ZpZGVyIG1hcHBpbmdcbmV4cG9ydCBjb25zdCBkZXRlY3RQcm92aWRlciA9IChob3N0bmFtZTogc3RyaW5nKTogVERhdGFiYXNlUHJvdmlkZXIgPT4ge1xuICAgIGNvbnN0IHJ1bGVzOiBSZWFkb25seUFycmF5PHJlYWRvbmx5IFtzdHJpbmcsIFREYXRhYmFzZVByb3ZpZGVyXT4gPSBbXG4gICAgICAgIFsnLm5lb24udGVjaCcsICduZW9uJ10sXG4gICAgICAgIFsnLnJkcy5hbWF6b25hd3MuY29tJywgJ2F3cyddLFxuICAgICAgICBbJy5hbWF6b25hd3MuY29tJywgJ2F3cyddLFxuICAgICAgICBbJy5zdXBhYmFzZS5jbycsICdzdXBhYmFzZSddLFxuICAgICAgICBbJy5zdXBhYmFzZS5jb20nLCAnc3VwYWJhc2UnXSxcbiAgICAgICAgWycuZGF0YWJhc2UuYXp1cmUuY29tJywgJ2F6dXJlJ10sXG4gICAgICAgIFsnLmNsb3Vkc3FsLicsICdnY3AnXSxcbiAgICAgICAgWycuc3FsLmdvb2cnLCAnZ2NwJ10sXG4gICAgICAgIFsnLnJhaWx3YXkuYXBwJywgJ3JhaWx3YXknXSxcbiAgICAgICAgWycucmVuZGVyLmNvbScsICdyZW5kZXInXSxcbiAgICAgICAgWycuYWl2ZW5jbG91ZC5jb20nLCAnYXZpZW4nXSxcbiAgICAgICAgWycuYWl2ZW4uaW8nLCAnYXZpZW4nXSxcbiAgICAgICAgWycudGltZXNjYWxlZGIuaW8nLCAndGltZXNjYWxlX2Nsb3VkJ10sXG4gICAgICAgIFsnLmhlcm9rdWFwcC5jb20nLCAnaGVyb2t1J10sXG4gICAgICAgIFsnLmZseS5kZXYnLCAnZmx5J10sXG4gICAgICAgIFsnLmtveWViLmFwcCcsICdrb3llYiddLFxuICAgICAgICBbJy5kYi5vbmRpZ2l0YWxvY2Vhbi5jb20nLCAnZGlnaXRhbF9vY2VhbiddLFxuICAgICAgICBbJy5hbGliYWJhY2xvdWRkYi5jb20nLCAnYWxpYmFkYV9jbG91ZCddLFxuICAgIF07XG5cbiAgICBjb25zdCBsb3dlciA9IGhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZm91bmQgPSBydWxlcy5maW5kKChbc3VmZml4XSkgPT4gbG93ZXIuaW5jbHVkZXMoc3VmZml4KSk7XG5cbiAgICByZXR1cm4gZm91bmQ/LlsxXSA/PyAnb3RoZXInO1xufTtcblxuY29uc3QgYWlBc3Npc3RhbnRSdWxlczogUmVhZG9ubHlBcnJheTxcbiAgICByZWFkb25seSBbVEFJQXNzaXN0YW50LCBSZWFkb25seUFycmF5PHN0cmluZz5dXG4+ID0gW1xuICAgIFsnY3Vyc29yJywgWycuY3Vyc29yJywgJy5jdXJzb3JydWxlcyddXSxcbiAgICBbJ2NsYXVkZV9jb2RlJywgWycuY2xhdWRlJywgJ0NMQVVERS5tZCddXSxcbiAgICBbJ29wZW5jb2RlJywgWycub3BlbmNvZGUnXV0sXG4gICAgWydhaWRlcicsIFsnLmFpZGVyLmNvbmYueW1sJywgJy5haWRlci5jaGF0Lmhpc3RvcnkubWQnXV0sXG4gICAgWydvcGVuYWlfY29kZXgnLCBbJy5jb2RleCddXSxcbiAgICBbJ2dpdGh1Yl9jb3BpbG90JywgWycuZ2l0aHViL2NvcGlsb3QtaW5zdHJ1Y3Rpb25zLm1kJ11dLFxuXTtcblxuZXhwb3J0IGNvbnN0IGRldGVjdEFJQXNzaXN0YW50cyA9ICgpOiBUQUlBc3Npc3RhbnRbXSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IGN3ZCgpO1xuXG4gICAgcmV0dXJuIGFpQXNzaXN0YW50UnVsZXNcbiAgICAgICAgLmZpbHRlcigoWywgcGF0aHNdKSA9PiBwYXRocy5zb21lKChwKSA9PiBleGlzdHNTeW5jKGpvaW4ocm9vdCwgcCkpKSlcbiAgICAgICAgLm1hcCgoW25hbWVdKSA9PiBuYW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZXRlY3REb2NrZXIgPSAoKTogYm9vbGVhbiA9PiBleGlzdHNTeW5jKCcvLmRvY2tlcmVudicpO1xuXG5leHBvcnQgY29uc3QgZGV0ZWN0U1NIU2Vzc2lvbiA9ICgpOiBib29sZWFuID0+XG4gICAgISEoZW52LlNTSF9DT05ORUNUSU9OIHx8IGVudi5TU0hfQ0xJRU5UIHx8IGVudi5TU0hfVFRZKTtcblxuZXhwb3J0IGNvbnN0IGRldGVjdEhvc3RuYW1lID0gKCk6IHN0cmluZyA9PiBob3N0bmFtZSgpO1xuXG5leHBvcnQgY29uc3QgZGV0ZWN0VXNlcm5hbWUgPSAoKTogc3RyaW5nID0+IHVzZXJJbmZvKCkudXNlcm5hbWU7XG5cbmV4cG9ydCBjb25zdCBpc0xvY2FsaG9zdCA9IChob3N0bmFtZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgbG93ZXIgPSBob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgbG93ZXIgPT09ICdsb2NhbGhvc3QnIHx8XG4gICAgICAgIGxvd2VyID09PSAnMTI3LjAuMC4xJyB8fFxuICAgICAgICBsb3dlciA9PT0gJzo6MScgfHxcbiAgICAgICAgbG93ZXIgPT09ICcwLjAuMC4wJ1xuICAgICk7XG59O1xuIiwgImltcG9ydCB7aG9tZWRpcn0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQge2pvaW59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge3JlYWRGaWxlLCB3cml0ZUZpbGUsIG1rZGlyfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7dXVpZHY3fSBmcm9tICd1dWlkdjcnO1xuXG5jb25zdCBDT05GSUdfRElSID0gam9pbihob21lZGlyKCksICcuZGJjdHgnKTtcbmNvbnN0IENPTkZJR19QQVRIID0gam9pbihDT05GSUdfRElSLCAnY29uZmlnLmpzb24nKTtcblxudHlwZSBUQ29uZmlnID0ge3JlYWRvbmx5IHRva2VuPzogc3RyaW5nOyByZWFkb25seSBkZXZpY2VfaWQ6IHN0cmluZ307XG5cbmNvbnN0IHJlYWRSYXdDb25maWcgPSBhc3luYyAoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IGF3YWl0IHJlYWRGaWxlKENPTkZJR19QQVRILCAndXRmLTgnKTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmF3KSA/PyB7fTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbn07XG5cbmNvbnN0IHBlcnNpc3QgPSBhc3luYyAoZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBhd2FpdCBta2RpcihDT05GSUdfRElSLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKENPTkZJR19QQVRILCBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCA0KSwgJ3V0Zi04Jyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVhZENvbmZpZyA9IGFzeW5jICgpOiBQcm9taXNlPFRDb25maWc+ID0+IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCByZWFkUmF3Q29uZmlnKCk7XG5cbiAgICBpZiAodHlwZW9mIHJhdy5kZXZpY2VfaWQgPT09ICdzdHJpbmcnICYmIHJhdy5kZXZpY2VfaWQubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9rZW46IHR5cGVvZiByYXcudG9rZW4gPT09ICdzdHJpbmcnID8gcmF3LnRva2VuIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGV2aWNlX2lkOiByYXcuZGV2aWNlX2lkLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGRldmljZV9pZCA9IHV1aWR2NygpO1xuICAgIGF3YWl0IHBlcnNpc3Qoey4uLnJhdywgZGV2aWNlX2lkfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0b2tlbjogdHlwZW9mIHJhdy50b2tlbiA9PT0gJ3N0cmluZycgPyByYXcudG9rZW4gOiB1bmRlZmluZWQsXG4gICAgICAgIGRldmljZV9pZCxcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHdyaXRlQ29uZmlnID0gYXN5bmMgKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCByZWFkUmF3Q29uZmlnKCk7XG4gICAgYXdhaXQgcGVyc2lzdCh7Li4ucmF3LCB0b2tlbn0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGZsdXNoQ29uZmlnID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IGF3YWl0IHJlYWRSYXdDb25maWcoKTtcbiAgICAgICAgY29uc3Qge3Rva2VuOiBfLCAuLi5yZXN0fSA9IHJhdztcbiAgICAgICAgYXdhaXQgcGVyc2lzdChyZXN0KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlIGlmIGZpbGUgZG9lc24ndCBleGlzdFxuICAgIH1cbn07XG4iLCAiaW1wb3J0IHtleGlzdHNTeW5jLCByZWFkRmlsZVN5bmN9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtob21lZGlyfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7am9pbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7dXVpZHY3fSBmcm9tICd1dWlkdjcnO1xuaW1wb3J0IHR5cGUge2luZmVyUm91dGVySW5wdXRzfSBmcm9tICdAdHJwYy9zZXJ2ZXInO1xuaW1wb3J0IHR5cGUge1RBcHBSb3V0ZXJ9IGZyb20gJ0BkYmN0eC9jb3JlJztcbmltcG9ydCB7Y3JlYXRlQXV0aGVudGljYXRlZFRSUENDbGllbnR9IGZyb20gJy4uL2xpYi90cnBjLm1qcyc7XG5pbXBvcnQge3JlYWRDb25maWd9IGZyb20gJy4vY29uZmlnLm1qcyc7XG5pbXBvcnQge0NMSUVOVF9WRVJTSU9OfSBmcm9tICcuLi9saWIvdmVyc2lvbi5tanMnO1xuaW1wb3J0IHtEQkNUWF9ERVZ9IGZyb20gJy4uL2xpYi9lbnYubWpzJztcbmltcG9ydCB7bG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIubWpzJztcbmltcG9ydCB7XG4gICAgZGV0ZWN0RG9ja2VyLFxuICAgIGRldGVjdE9TLFxuICAgIGRldGVjdFNoZWxsLFxuICAgIGRldGVjdFdTTCxcbiAgICBkZXRlY3RTeXN0ZW1NZW1vcnksXG4gICAgZGV0ZWN0UGFja2FnZU1hbmFnZXIsXG4gICAgZGV0ZWN0U1NIU2Vzc2lvbixcbn0gZnJvbSAnLi9kZXRlY3QubWpzJztcblxuY29uc3QgY29ycmVsYXRpb25JRCA9IHV1aWR2NygpO1xuY29uc3QgcnVuU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuZXhwb3J0IHR5cGUgVEF0dGFjaE9yaWdpbiA9XG4gICAgfCAnZ2VuZXJhdGUnXG4gICAgfCAnbG9naW4nXG4gICAgfCAnbGlzdCdcbiAgICB8ICdsb2dvdXQnXG4gICAgfCAnaGVscCdcbiAgICB8ICd1bmtub3duJztcblxubGV0IGF0dGFjaE9yaWdpbjogVEF0dGFjaE9yaWdpbiA9ICd1bmtub3duJztcbmxldCBzdWJjb21tYW5kID0gJ3Vua25vd24nO1xuXG5leHBvcnQgY29uc3Qgc2V0QXR0YWNoT3JpZ2luID0gKG9yaWdpbjogVEF0dGFjaE9yaWdpbik6IHZvaWQgPT4ge1xuICAgIGF0dGFjaE9yaWdpbiA9IG9yaWdpbjtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRTdWJjb21tYW5kID0gKG5hbWU6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIHN1YmNvbW1hbmQgPSBuYW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFN1YmNvbW1hbmQgPSAoKTogc3RyaW5nID0+IHN1YmNvbW1hbmQ7XG5cbmV4cG9ydCBjb25zdCBnZXRSdW5TdGFydFRpbWUgPSAoKTogbnVtYmVyID0+IHJ1blN0YXJ0VGltZTtcbmV4cG9ydCBjb25zdCBnZXRDb3JyZWxhdGlvbklEID0gKCk6IHN0cmluZyA9PiBjb3JyZWxhdGlvbklEO1xuXG5leHBvcnQgY29uc3QgZWxhcHNlZFNlY29uZHNTaW5jZVJ1blN0YXJ0ID0gKCk6IG51bWJlciA9PlxuICAgIE1hdGgucm91bmQoKERhdGUubm93KCkgLSBydW5TdGFydFRpbWUpIC8gMTAwMCk7XG5cbmV4cG9ydCBjb25zdCBpc0RvTm90VHJhY2sgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBgJHtwcm9jZXNzLmVudlsnRE9fTk9UX1RSQUNLJ119YC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJzEnIHx8IHZhbHVlID09PSAndHJ1ZSc7XG59O1xuXG5jb25zdCBDT05GSUdfUEFUSCA9IGpvaW4oaG9tZWRpcigpLCAnLmRiY3R4JywgJ2NvbmZpZy5qc29uJyk7XG5cbi8vIExhenkgKyBtZW1vaXplZCBzbyBET19OT1RfVFJBQ0sgY2FsbGVycyBjYW4gc2tpcCB0aGUgZnMgcmVhZCBlbnRpcmVseS5cbi8vIEZpcnN0LWNhbGwgc25hcHNob3QgaXMgd2hhdCBtYXR0ZXJzOiB0aGUgZGV2aWNlX2lkIC8gdG9rZW4gc3RhdGUgYXQgdGhlXG4vLyBtb21lbnQgdGhlIENMSSBzdGFydGVkLCBiZWZvcmUgcmVhZENvbmZpZyBoYXMgYSBjaGFuY2UgdG8gYXV0by1jcmVhdGUgb25lLlxubGV0IGZpcnN0UnVuTWVtbzogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xubGV0IGhhZFRva2VuTWVtbzogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuXG5jb25zdCByZWFkUHJlTGF1bmNoQ29uZmlnID0gKCk6IHtcbiAgICBoYXNEZXZpY2VJRDogYm9vbGVhbjtcbiAgICBoYXNUb2tlbjogYm9vbGVhbjtcbn0gPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICghZXhpc3RzU3luYyhDT05GSUdfUEFUSCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7aGFzRGV2aWNlSUQ6IGZhbHNlLCBoYXNUb2tlbjogZmFsc2V9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhdyA9IHJlYWRGaWxlU3luYyhDT05GSUdfUEFUSCwgJ3V0Zi04Jyk7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhhc0RldmljZUlEOiB0eXBlb2YgcGFyc2VkPy5kZXZpY2VfaWQgPT09ICdzdHJpbmcnLFxuICAgICAgICAgICAgaGFzVG9rZW46IHR5cGVvZiBwYXJzZWQ/LnRva2VuID09PSAnc3RyaW5nJyxcbiAgICAgICAgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHtoYXNEZXZpY2VJRDogZmFsc2UsIGhhc1Rva2VuOiBmYWxzZX07XG4gICAgfVxufTtcblxuY29uc3QgcG9wdWxhdGVMYXVuY2hNZW1vcyA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoZmlyc3RSdW5NZW1vICE9PSBudWxsICYmIGhhZFRva2VuTWVtbyAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByb2JlID0gcmVhZFByZUxhdW5jaENvbmZpZygpO1xuICAgIGZpcnN0UnVuTWVtbyA9ICFwcm9iZS5oYXNEZXZpY2VJRDtcbiAgICBoYWRUb2tlbk1lbW8gPSBwcm9iZS5oYXNUb2tlbjtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0ZpcnN0UnVuID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIHBvcHVsYXRlTGF1bmNoTWVtb3MoKTtcbiAgICByZXR1cm4gZmlyc3RSdW5NZW1vITtcbn07XG5cbmV4cG9ydCBjb25zdCB3YXNBdXRoZWRBdFJ1blN0YXJ0ID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIHBvcHVsYXRlTGF1bmNoTWVtb3MoKTtcbiAgICByZXR1cm4gaGFkVG9rZW5NZW1vITtcbn07XG5cbi8vIE1vZHVsZS1zY29wZSBjYWNoZWQgY29uZmlnIHNvIGZzIGlzIGhpdCBhdCBtb3N0IG9uY2UgcGVyIENMSSBpbnZvY2F0aW9uLFxuLy8gc2hhcmVkIGJldHdlZW4gdGhlIHRSUEMgZ2V0VG9rZW4gY2xvc3VyZSBhbmQgYnVpbGRFbnZlbG9wZVBhcnRpYWwuIFRoZVxuLy8gY2FjaGUgaXMgaW52YWxpZGF0ZWQgYnkgbG9naW4ubXRzIGFmdGVyIHdyaXRlQ29uZmlnIHNvIHRoZSBuZXh0IGV2ZW50XG4vLyBwaWNrcyB1cCB0aGUgbmV3IHRva2VuLlxubGV0IGNvbmZpZ1Byb21pc2U6IFJldHVyblR5cGU8dHlwZW9mIHJlYWRDb25maWc+IHwgbnVsbCA9IG51bGw7XG5cbmNvbnN0IGdldENvbmZpZyA9ICgpOiBSZXR1cm5UeXBlPHR5cGVvZiByZWFkQ29uZmlnPiA9PiB7XG4gICAgaWYgKGNvbmZpZ1Byb21pc2UgPT09IG51bGwpIHtcbiAgICAgICAgY29uZmlnUHJvbWlzZSA9IHJlYWRDb25maWcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZ1Byb21pc2U7XG59O1xuXG5leHBvcnQgY29uc3QgaW52YWxpZGF0ZUNvbmZpZ0NhY2hlID0gKCk6IHZvaWQgPT4ge1xuICAgIGNvbmZpZ1Byb21pc2UgPSBudWxsO1xufTtcblxudHlwZSBUVGVsZW1ldHJ5SW5wdXQgPSBpbmZlclJvdXRlcklucHV0czxUQXBwUm91dGVyPlsndGVsZW1ldHJ5J11bJ2NyZWF0ZSddO1xuXG50eXBlIFRFbnZlbG9wZUtleXMgPVxuICAgIHwgJ2RldmljZV9pZCdcbiAgICB8ICdjb3JyZWxhdGlvbl9pZCdcbiAgICB8ICdjbGllbnRfdmVyc2lvbidcbiAgICB8ICdhdHRhY2hfb3JpZ2luJ1xuICAgIHwgJ2VsYXBzZWRfc2Vjb25kc19zaW5jZV9ydW5fc3RhcnQnXG4gICAgfCAnb3MnXG4gICAgfCAnc2hlbGwnXG4gICAgfCAnaXNfZG9ja2VyJ1xuICAgIHwgJ2lzX3dzbCdcbiAgICB8ICdpc19zc2hfc2Vzc2lvbidcbiAgICB8ICdzeXN0ZW1fbWVtb3J5J1xuICAgIHwgJ3BhY2thZ2VfbWFuYWdlcic7XG5cbnR5cGUgVERpc3RyaWJ1dGl2ZU9taXQ8VCwgSyBleHRlbmRzIGtleW9mIFRUZWxlbWV0cnlJbnB1dD4gPSBUIGV4dGVuZHMgdW5rbm93blxuICAgID8gT21pdDxULCBLPlxuICAgIDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIFRDTElUZWxlbWV0cnlFdmVudCA9IFREaXN0cmlidXRpdmVPbWl0PFxuICAgIFRUZWxlbWV0cnlJbnB1dCxcbiAgICBURW52ZWxvcGVLZXlzXG4+O1xuXG5jb25zdCB0ZWxlbWV0cnlDbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkVFJQQ0NsaWVudChhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgZ2V0Q29uZmlnKCk7XG4gICAgICAgIHJldHVybiBjb25maWcudG9rZW4gPz8gbnVsbDtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufSk7XG5cbmNvbnN0IGJ1aWxkRW52ZWxvcGVQYXJ0aWFsID0gYXN5bmMgKCk6IFByb21pc2U8XG4gICAgT21pdDxUVGVsZW1ldHJ5SW5wdXQsICd0eXBlJz4gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuPiA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgZ2V0Q29uZmlnKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGV2aWNlX2lkOiBjb25maWcuZGV2aWNlX2lkLFxuICAgICAgICBjb3JyZWxhdGlvbl9pZDogY29ycmVsYXRpb25JRCxcbiAgICAgICAgY2xpZW50X3ZlcnNpb246IENMSUVOVF9WRVJTSU9OLFxuICAgICAgICBhdHRhY2hfb3JpZ2luOiBhdHRhY2hPcmlnaW4sXG4gICAgICAgIGVsYXBzZWRfc2Vjb25kc19zaW5jZV9ydW5fc3RhcnQ6IGVsYXBzZWRTZWNvbmRzU2luY2VSdW5TdGFydCgpLFxuICAgICAgICBvczogZGV0ZWN0T1MoKSxcbiAgICAgICAgc2hlbGw6IGRldGVjdFNoZWxsKCksXG4gICAgICAgIGlzX2RvY2tlcjogZGV0ZWN0RG9ja2VyKCksXG4gICAgICAgIGlzX3dzbDogZGV0ZWN0V1NMKCksXG4gICAgICAgIGlzX3NzaF9zZXNzaW9uOiBkZXRlY3RTU0hTZXNzaW9uKCksXG4gICAgICAgIHN5c3RlbV9tZW1vcnk6IGRldGVjdFN5c3RlbU1lbW9yeSgpLFxuICAgICAgICBwYWNrYWdlX21hbmFnZXI6IGRldGVjdFBhY2thZ2VNYW5hZ2VyKCksXG4gICAgfTtcbn07XG5cbi8vIEluLWZsaWdodCB0cmFja2luZyBzbyBmbHVzaFRlbGVtZXRyeSBjYW4gd2FpdCBvbiBwZW5kaW5nIEhUVFAgYmVmb3JlXG4vLyBwcm9jZXNzLmV4aXQuIFdpdGhvdXQgdGhpcywgdGhlIGZpbmFsIGNsaS5mbG93LmRvbmUgLyBjbGkuY29tbWFuZC5jb21wbGV0ZWRcbi8vIGV2ZW50cyBnZXQgc2V2ZXJlZCB3aGVuIHRoZSBldmVudCBsb29wIHRlcm1pbmF0ZXMsIHVuZGVyY291bnRpbmcgdGhlXG4vLyBcImNvbXBsZXRlZFwiIGFybSBvZiBldmVyeSBQb3N0SG9nIGZ1bm5lbC5cbmNvbnN0IGluRmxpZ2h0ID0gbmV3IFNldDxQcm9taXNlPHZvaWQ+PigpO1xuXG5jb25zdCB0cmFjayA9IDxULD4ocDogUHJvbWlzZTxUPik6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGVyYXNlZCA9IHAudGhlbihcbiAgICAgICAgKCkgPT4ge30sXG4gICAgICAgICgpID0+IHt9LFxuICAgICk7XG4gICAgaW5GbGlnaHQuYWRkKGVyYXNlZCk7XG4gICAgdm9pZCBlcmFzZWQuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGluRmxpZ2h0LmRlbGV0ZShlcmFzZWQpO1xuICAgIH0pO1xufTtcblxuY29uc3QgbG9nVGVsZW1ldHJ5RXJyb3IgPSAoZXJyOiB1bmtub3duKTogdm9pZCA9PiB7XG4gICAgaWYgKERCQ1RYX0RFVikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYHRlbGVtZXRyeTogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyfWApO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBmaXJlVGVsZW1ldHJ5RXZlbnQgPSAoZXZlbnQ6IFRDTElUZWxlbWV0cnlFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmIChpc0RvTm90VHJhY2soKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlbmQgPSBidWlsZEVudmVsb3BlUGFydGlhbCgpLnRoZW4oKGVudmVsb3BlKSA9PlxuICAgICAgICB0ZWxlbWV0cnlDbGllbnQudGVsZW1ldHJ5LmNyZWF0ZS5tdXRhdGUoe1xuICAgICAgICAgICAgLi4uZW52ZWxvcGUsXG4gICAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgfSBhcyBUVGVsZW1ldHJ5SW5wdXQpLFxuICAgICk7XG4gICAgc2VuZC5jYXRjaChsb2dUZWxlbWV0cnlFcnJvcik7XG4gICAgdHJhY2soc2VuZCk7XG59O1xuXG5leHBvcnQgY29uc3QgZmlyZVRlbGVtZXRyeUV2ZW50QXdhaXRhYmxlID0gYXN5bmMgKFxuICAgIGV2ZW50OiBUQ0xJVGVsZW1ldHJ5RXZlbnQsXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoaXNEb05vdFRyYWNrKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZW5kID0gYnVpbGRFbnZlbG9wZVBhcnRpYWwoKS50aGVuKChlbnZlbG9wZSkgPT5cbiAgICAgICAgdGVsZW1ldHJ5Q2xpZW50LnRlbGVtZXRyeS5jcmVhdGUubXV0YXRlKHtcbiAgICAgICAgICAgIC4uLmVudmVsb3BlLFxuICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIH0gYXMgVFRlbGVtZXRyeUlucHV0KSxcbiAgICApO1xuICAgIHRyYWNrKHNlbmQpO1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHNlbmQ7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ1RlbGVtZXRyeUVycm9yKGVycik7XG4gICAgfVxufTtcblxuZXhwb3J0IHR5cGUgVEZsdXNoT3B0aW9ucyA9IHtyZWFkb25seSB0aW1lb3V0TXM6IG51bWJlcn07XG5cbi8vIFdhaXQgZm9yIGluLWZsaWdodCBldmVudHMgdG8gc2V0dGxlLiBDYWxsIGJlZm9yZSBhbnkgcHJvY2Vzcy5leGl0IHNvIHRoZVxuLy8gZmluYWwgZXZlbnRzIG9mIGEgcnVuIGFjdHVhbGx5IHJlYWNoIFBvc3RIb2cuIEhhcmQgY2FwIHNvIGEgaHVuZyBuZXR3b3JrXG4vLyBkb2Vzbid0IHN0cmFuZCB0aGUgdXNlcjsgZXZlbnRzIHRoYXQgbWlzcyB0aGUgY2FwIGFyZSBsb3N0IChhY2NlcHRhYmxlXG4vLyB0cmFkZS1vZmYgXHUyMDE0IHRoZSB1c2VyIGp1c3Qgd2FudHMgdGhlaXIgQ0xJIHRvIHRlcm1pbmF0ZSkuXG5leHBvcnQgY29uc3QgZmx1c2hUZWxlbWV0cnkgPSBhc3luYyAoe1xuICAgIHRpbWVvdXRNcyxcbn06IFRGbHVzaE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoaW5GbGlnaHQuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHdhaXRBbGwgPSBQcm9taXNlLmFsbFNldHRsZWQoWy4uLmluRmxpZ2h0XSk7XG4gICAgY29uc3QgdGltZW91dCA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PlxuICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXRNcykudW5yZWYoKSxcbiAgICApO1xuICAgIGF3YWl0IFByb21pc2UucmFjZShbd2FpdEFsbCwgdGltZW91dF0pO1xufTtcblxuLy8gQ29udmVuaWVuY2U6IGZsdXNoIGluLWZsaWdodCB0ZWxlbWV0cnkgdGhlbiBleGl0LiBSZXBsYWNlcyBldmVyeVxuLy8gcHJvY2Vzcy5leGl0IGNhbGwgc2l0ZSBzbyB0ZXJtaW5hbCBldmVudHMgaGF2ZSBhIGNoYW5jZSB0byBsYW5kLiBUaW1lb3V0XG4vLyBpcyBnZW5lcm91cyBmb3Igbm9ybWFsIGV4aXRzOyBTSUdJTlQvU0lHVEVSTSBwYXRocyBjYW4gcGFzcyBhIHNob3J0ZXIgb25lXG4vLyBzaW5jZSB0aGUgdXNlciB3YW50cyB0aGUgcHJvY2VzcyBnb25lIG5vdy5cbmV4cG9ydCBjb25zdCBleGl0R3JhY2VmdWxseSA9IGFzeW5jIChcbiAgICBjb2RlOiBudW1iZXIsXG4gICAgdGltZW91dE1zID0gMjAwMCxcbik6IFByb21pc2U8bmV2ZXI+ID0+IHtcbiAgICBhd2FpdCBmbHVzaFRlbGVtZXRyeSh7dGltZW91dE1zfSk7XG4gICAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufTtcblxuLy8gUnVuLXNjb3BlZCBzbmFwc2hvdCBvZiB0aGUgYWN0aXZlIGZsb3cgdGVsZW1ldHJ5IGVtaXR0ZXIuIFNJR0lOVC9TSUdURVJNXG4vLyBoYW5kbGVycyByZWFkIHRoZXNlIHRvIGNvbnN0cnVjdCBjbGkuY29tbWFuZC5hYmFuZG9uZWQgd2l0aCB0aGUgY3VycmVudFxuLy8gcGhhc2UgKyBwZXJjZW50LiBSZWdpc3RlcmVkIGJ5IHJ1bkZsb3cgb24gc3RhcnR1cDsgYWJzZW50IGZvciBjb21tYW5kXG4vLyBzdXJmYWNlcyB0aGF0IGRvbid0IHJ1biBhIGZsb3cgKGxvZ2luLCBsaXN0KS5cbmltcG9ydCB0eXBlIHtURmxvd1BoYXNlfSBmcm9tICcuLi9mbG93L3N0YXRlcy5tanMnO1xuXG50eXBlIFRGbG93U25hcHNob3QgPSB7XG4gICAgcmVhZG9ubHkgbGFzdFBoYXNlOiBURmxvd1BoYXNlO1xuICAgIHJlYWRvbmx5IGxhc3RQaGFzZVBlcmNlbnQ6IG51bWJlciB8IG51bGw7XG59O1xuXG5sZXQgZmxvd1NuYXBzaG90R2V0dGVyOiAoKCkgPT4gVEZsb3dTbmFwc2hvdCkgfCBudWxsID0gbnVsbDtcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyRmxvd1NuYXBzaG90ID0gKGdldHRlcjogKCkgPT4gVEZsb3dTbmFwc2hvdCk6IHZvaWQgPT4ge1xuICAgIGZsb3dTbmFwc2hvdEdldHRlciA9IGdldHRlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBjbGVhckZsb3dTbmFwc2hvdCA9ICgpOiB2b2lkID0+IHtcbiAgICBmbG93U25hcHNob3RHZXR0ZXIgPSBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZsb3dTbmFwc2hvdCA9ICgpOiBURmxvd1NuYXBzaG90ID0+IHtcbiAgICBpZiAoZmxvd1NuYXBzaG90R2V0dGVyICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmbG93U25hcHNob3RHZXR0ZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIHtsYXN0UGhhc2U6ICdpZGxlJywgbGFzdFBoYXNlUGVyY2VudDogbnVsbH07XG59O1xuIiwgImltcG9ydCB7Y3JlYXRlSGFzaH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHtyZWFkRmlsZSwgbWtkaXIsIHJlYWRkaXIsIHN0YXR9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtqb2lufSBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgUFF1ZXVlIGZyb20gJ3AtcXVldWUnO1xuaW1wb3J0IHtydW5JbkFjdGlvbiwgd2hlbn0gZnJvbSAnbW9ieCc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5pbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuaW1wb3J0IHR5cGUge1REYXRhYmFzZUludHJvc3BlY3Rpb259IGZyb20gJ0BkYmN0eC9jb3JlJztcblxuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB7XG4gICAgYXRvbWljV3JpdGVGaWxlLFxuICAgIHJlY292ZXJBdG9taWNXcml0ZXNJbkRpcixcbn0gZnJvbSAnLi4vbGliL2F0b21pYy13cml0ZS5tanMnO1xuaW1wb3J0IHtcbiAgICBzYW1wbGVDb2x1bW4sXG4gICAgc2FtcGxlQ29tcG9zaXRlU3ViRmllbGQsXG4gICAgZmV0Y2hDb21wb3NpdGVTdWJGaWVsZHMsXG4gICAgdHlwZSBUQ29sdW1uU2FtcGxlLFxuICAgIHR5cGUgVFJlbGF0aW9uS2luZCxcbn0gZnJvbSAnLi4vZGIvaW5kZXgubWpzJztcblxuZXhwb3J0IHR5cGUgVFNlbnNpdGl2ZU1hc2sgPSBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4+O1xuXG5leHBvcnQgdHlwZSBUVGFibGVTYW1wbGVDb2x1bW4gPSB7XG4gICAgcmVhZG9ubHkgc3RyYXRlZ3k6ICdkaXN0aW5jdCcgfCAncmFuZG9tJztcbiAgICByZWFkb25seSBjb3VudDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IHZhbHVlczogcmVhZG9ubHkgc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBUVGFibGVTYW1wbGVzID0ge1xuICAgIHJlYWRvbmx5IHRhYmxlOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc2FtcGxlZF9hdDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFRUYWJsZVNhbXBsZUNvbHVtbj4+O1xuICAgIHJlYWRvbmx5IGV4Y2x1ZGVkX2NvbHVtbnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgVFRhYmxlU2FtcGxlRXZlbnQgPSB7XG4gICAgcmVhZG9ubHkgdGFibGVOYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc2FtcGxlczogVFRhYmxlU2FtcGxlcztcbn07XG5cbmNvbnN0IFNBTVBMRUFCTEVfVFlQRV9QUkVGSVhFUzogcmVhZG9ubHkgc3RyaW5nW10gPSBPYmplY3QuZnJlZXplKFtcbiAgICAndGV4dCcsXG4gICAgJ2NoYXJhY3RlcicsXG4gICAgJ2NpdGV4dCcsXG4gICAgJ2ludGVnZXInLFxuICAgICdiaWdpbnQnLFxuICAgICdzbWFsbGludCcsXG4gICAgJ251bWVyaWMnLFxuICAgICdkZWNpbWFsJyxcbiAgICAncmVhbCcsXG4gICAgJ2RvdWJsZSBwcmVjaXNpb24nLFxuICAgICdib29sZWFuJyxcbiAgICAnZGF0ZScsXG4gICAgJ3RpbWVzdGFtcCcsXG4gICAgJ3RpbWUgd2l0aCcsXG4gICAgJ3RpbWUgd2l0aG91dCcsXG4gICAgJ2ludGVydmFsJyxcbiAgICAndXVpZCcsXG4gICAgJ2pzb24nLFxuICAgICdtb25leScsXG4gICAgJ2luZXQnLFxuICAgICdjaWRyJyxcbl0gYXMgY29uc3QpO1xuXG5jb25zdCBURVhUVUFMX1RZUEVfUFJFRklYRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gT2JqZWN0LmZyZWV6ZShbXG4gICAgJ3RleHQnLFxuICAgICdjaGFyYWN0ZXInLFxuICAgICdjaXRleHQnLFxuICAgICdqc29uJyxcbl0gYXMgY29uc3QpO1xuXG5jb25zdCBNQVhfVEVYVF9MRU5HVEggPSA1MTI7XG5jb25zdCBTQU1QTElOR19DT05DVVJSRU5DWSA9IDg7XG5cbmNvbnN0IHNlbnNpdGl2ZU1hc2tTY2hlbWEgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFycmF5KHouc3RyaW5nKCkpKTtcblxuY29uc3QgbWF0Y2hlc1ByZWZpeCA9IChcbiAgICBkYXRhVHlwZTogc3RyaW5nLFxuICAgIHByZWZpeGVzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IGxvd2VyID0gZGF0YVR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gcHJlZml4ZXMuc29tZSgocHJlZml4KSA9PiBsb3dlci5zdGFydHNXaXRoKHByZWZpeCkpO1xufTtcblxuY29uc3QgaXNTYW1wbGVhYmxlU2NhbGFyID0gKGRhdGFUeXBlOiBzdHJpbmcpOiBib29sZWFuID0+XG4gICAgbWF0Y2hlc1ByZWZpeChkYXRhVHlwZSwgU0FNUExFQUJMRV9UWVBFX1BSRUZJWEVTKTtcblxuY29uc3QgaXNBcnJheVR5cGUgPSAoZGF0YVR5cGU6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICBkYXRhVHlwZS5lbmRzV2l0aCgnW10nKSB8fCBkYXRhVHlwZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2FycmF5Jyk7XG5cbmNvbnN0IGdldEFycmF5RWxlbWVudFR5cGUgPSAoZGF0YVR5cGU6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgIGRhdGFUeXBlLmVuZHNXaXRoKCdbXScpID8gZGF0YVR5cGUuc2xpY2UoMCwgLTIpIDogZGF0YVR5cGU7XG5cbmNvbnN0IHJlc29sdmVFbnVtVmFsdWVzID0gKFxuICAgIGRhdGFUeXBlOiBzdHJpbmcsXG4gICAgZW51bXM6IFREYXRhYmFzZUludHJvc3BlY3Rpb25bJ2VudW1zJ10sXG4pOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGwgPT4ge1xuICAgIGlmIChlbnVtc1tkYXRhVHlwZV0pIHtcbiAgICAgICAgcmV0dXJuIGVudW1zW2RhdGFUeXBlXS52YWx1ZXM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5VHlwZShkYXRhVHlwZSkpIHtcbiAgICAgICAgY29uc3QgZWwgPSBnZXRBcnJheUVsZW1lbnRUeXBlKGRhdGFUeXBlKTtcbiAgICAgICAgaWYgKGVudW1zW2VsXSkge1xuICAgICAgICAgICAgcmV0dXJuIGVudW1zW2VsXS52YWx1ZXM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBpc1RleHR1YWxUeXBlID0gKGRhdGFUeXBlOiBzdHJpbmcpOiBib29sZWFuID0+XG4gICAgbWF0Y2hlc1ByZWZpeChkYXRhVHlwZSwgVEVYVFVBTF9UWVBFX1BSRUZJWEVTKTtcblxuY29uc3QgdHJ1bmNhdGVWYWx1ZSA9ICh2YWx1ZTogc3RyaW5nLCBkYXRhVHlwZTogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgaXNUZXh0dWFsVHlwZShkYXRhVHlwZSkgJiYgdmFsdWUubGVuZ3RoID4gTUFYX1RFWFRfTEVOR1RIXG4gICAgICAgID8gdmFsdWUuc2xpY2UoMCwgTUFYX1RFWFRfTEVOR1RIKSArICcuLi4nXG4gICAgICAgIDogdmFsdWU7XG5cbmNvbnN0IGhhc2hUYWJsZU5hbWUgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+XG4gICAgY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKG5hbWUpLmRpZ2VzdCgnaGV4Jyk7XG5cbmV4cG9ydCBjb25zdCBsb2FkU2Vuc2l0aXZlTWFzayA9IGFzeW5jIChcbiAgICBwYXRoOiBzdHJpbmcsXG4pOiBQcm9taXNlPFRTZW5zaXRpdmVNYXNrPiA9PiB7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgcmVhZEZpbGUocGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpIGFzIHVua25vd247XG4gICAgcmV0dXJuIHNlbnNpdGl2ZU1hc2tTY2hlbWEucGFyc2UocGFyc2VkKTtcbn07XG5cbmNvbnN0IGlzU2FtcGxlYWJsZVR5cGUgPSAoXG4gICAgZGF0YVR5cGU6IHN0cmluZyxcbiAgICBlbnVtTmFtZXM6IFJlYWRvbmx5U2V0PHN0cmluZz4sXG4pOiBib29sZWFuID0+IHtcbiAgICBpZiAoaXNTYW1wbGVhYmxlU2NhbGFyKGRhdGFUeXBlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGVudW1OYW1lcy5oYXMoZGF0YVR5cGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheVR5cGUoZGF0YVR5cGUpKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gZ2V0QXJyYXlFbGVtZW50VHlwZShkYXRhVHlwZSk7XG4gICAgICAgIHJldHVybiBpc1NhbXBsZWFibGVTY2FsYXIoZWxlbWVudFR5cGUpIHx8IGVudW1OYW1lcy5oYXMoZWxlbWVudFR5cGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgcHJlcGFyZU91dHB1dERpciA9IGFzeW5jIChcbiAgICBkaXJQYXRoOiBzdHJpbmcsXG4gICAgYWxsb3dPdmVyd3JpdGU6IGJvb2xlYW4sXG4gICAgc3RvcmU6IFRTdG9yZSxcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRpclN0YXQgPSBhd2FpdCBzdGF0KGRpclBhdGgpLmNhdGNoKCgpID0+IG51bGwpO1xuXG4gICAgICAgIGlmIChkaXJTdGF0ICE9PSBudWxsICYmICFkaXJTdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5zdGF0ZSA9ICdlcnJvcic7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcuZXJyb3IgPSBgLS1vdXRwdXQtc2FtcGxlcyBwYXRoIFwiJHtkaXJQYXRofVwiIGV4aXN0cyBidXQgaXMgbm90IGEgZGlyZWN0b3J5YDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpclN0YXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGF3YWl0IG1rZGlyKGRpclBhdGgsIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5vdXRwdXREaXIgPSBkaXJQYXRoO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJlY292ZXJBdG9taWNXcml0ZXNJbkRpcihkaXJQYXRoKTtcblxuICAgICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihkaXJQYXRoKTtcblxuICAgICAgICBpZiAoZW50cmllcy5sZW5ndGggPiAwICYmICFhbGxvd092ZXJ3cml0ZSkge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLnN0YXRlID0gJ3Byb21wdGluZy1vdmVyd3JpdGUnO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLm91dHB1dERpciA9IGRpclBhdGg7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXdhaXQgd2hlbigoKSA9PiBzdG9yZS5zdGVwcy5zYW1wbGluZy5jb25maXJtZWQgIT09IG51bGwpO1xuXG4gICAgICAgICAgICBpZiAoIXN0b3JlLnN0ZXBzLnNhbXBsaW5nLmNvbmZpcm1lZCkge1xuICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcuc3RhdGUgPSAnZG9uZSc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcub3V0cHV0RGlyID0gZGlyUGF0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5zdGF0ZSA9ICdlcnJvcic7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5lcnJvciA9XG4gICAgICAgICAgICAgICAgZXJyIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgPyBgRmFpbGVkIHRvIHByZXBhcmUgb3V0cHV0IGRpcmVjdG9yeTogJHtlcnIubWVzc2FnZX1gXG4gICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBlcnNpc3RUYWJsZVNhbXBsZXNUb0RpciA9IGFzeW5jIChcbiAgICBvdXRwdXREaXI6IHN0cmluZyxcbiAgICBldmVudDogVFRhYmxlU2FtcGxlRXZlbnQsXG4gICAgaW5kZXhBY2N1bXVsYXRvcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7aGFzaFRhYmxlTmFtZShldmVudC50YWJsZU5hbWUpfS5qc29uYDtcblxuICAgIGF3YWl0IGF0b21pY1dyaXRlRmlsZShcbiAgICAgICAgam9pbihvdXRwdXREaXIsIGZpbGVOYW1lKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoZXZlbnQuc2FtcGxlcywgbnVsbCwgMiksXG4gICAgKTtcblxuICAgIGluZGV4QWNjdW11bGF0b3JbZXZlbnQudGFibGVOYW1lXSA9IGZpbGVOYW1lO1xuXG4gICAgYXdhaXQgYXRvbWljV3JpdGVGaWxlKFxuICAgICAgICBqb2luKG91dHB1dERpciwgJ2luZGV4Lmpzb24nKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoaW5kZXhBY2N1bXVsYXRvciwgbnVsbCwgMiksXG4gICAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBydW5TYW1wbGluZyA9IGFzeW5jIGZ1bmN0aW9uKiAoXG4gICAgcG9vbDogUG9vbCxcbiAgICBpbnRyb3NwZWN0aW9uOiBURGF0YWJhc2VJbnRyb3NwZWN0aW9uLFxuICAgIHN0b3JlOiBUU3RvcmUsXG4gICAgbWFzazogVFNlbnNpdGl2ZU1hc2ssXG4gICAgdGFibGVGaWx0ZXI/OiBSZWFkb25seVNldDxzdHJpbmc+LFxuKTogQXN5bmNHZW5lcmF0b3I8VFRhYmxlU2FtcGxlRXZlbnQ+IHtcbiAgICBjb25zdCBlbnVtTmFtZXM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KFxuICAgICAgICBPYmplY3Qua2V5cyhpbnRyb3NwZWN0aW9uLmVudW1zKSxcbiAgICApO1xuXG4gICAgY29uc3QgcmVsYXRpb25FbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoaW50cm9zcGVjdGlvbi5yZWxhdGlvbnMpLmZpbHRlcihcbiAgICAgICAgKFtuYW1lXSkgPT4gKHRhYmxlRmlsdGVyID8gdGFibGVGaWx0ZXIuaGFzKG5hbWUpIDogdHJ1ZSksXG4gICAgKTtcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcuc3RhdGUgPSAnZmV0Y2hpbmcnO1xuICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5jb3VudHMudG90YWxUYWJsZXMgPSByZWxhdGlvbkVudHJpZXMubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcXVldWUgPSBuZXcgUFF1ZXVlKHtjb25jdXJyZW5jeTogU0FNUExJTkdfQ09OQ1VSUkVOQ1l9KTtcblxuICAgIGZvciAoY29uc3QgW3RhYmxlTmFtZSwgcmVsYXRpb25dIG9mIHJlbGF0aW9uRW50cmllcykge1xuICAgICAgICBjb25zdCBtYXNrZWRDb2x1bW5zOiByZWFkb25seSBzdHJpbmdbXSA9IG1hc2tbdGFibGVOYW1lXSA/PyBbXTtcbiAgICAgICAgY29uc3QgbWFza2VkU2V0ID0gbmV3IFNldChtYXNrZWRDb2x1bW5zKTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IE9iamVjdC52YWx1ZXMocmVsYXRpb24uYXR0cmlidXRlcyk7XG4gICAgICAgIGNvbnN0IHJlbGF0aW9uS2luZCA9IHJlbGF0aW9uLmtpbmQgYXMgVFJlbGF0aW9uS2luZDtcblxuICAgICAgICBjb25zdCBlc3RpbWF0ZWRSb3dDb3VudCA9IHJlbGF0aW9uLmVzdGltYXRlZF9yb3dfY291bnQgPz8gMDtcblxuICAgICAgICB0eXBlIFRXb3JrSXRlbSA9IHtcbiAgICAgICAgICAgIHJlYWRvbmx5IGNvbHVtbk5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIHJlYWRvbmx5IGRhdGFUeXBlOiBzdHJpbmc7XG4gICAgICAgICAgICByZWFkb25seSBlc3RpbWF0ZWREaXN0aW5jdDogbnVtYmVyO1xuICAgICAgICAgICAgcmVhZG9ubHkgY29tcG9zaXRlOiB7XG4gICAgICAgICAgICAgICAgY29sdW1uTmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgIHN1YkZpZWxkTmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgfSB8IG51bGw7XG4gICAgICAgICAgICByZWFkb25seSBlbnVtVmFsdWVzOiByZWFkb25seSBzdHJpbmdbXSB8IG51bGw7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgd29ya0l0ZW1zOiBUV29ya0l0ZW1bXSA9IFtdO1xuICAgICAgICBsZXQgc2tpcHBlZCA9IDA7XG5cbiAgICAgICAgZm9yIChjb25zdCBhdHRyIG9mIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIGlmIChtYXNrZWRTZXQuaGFzKGF0dHIubmFtZSkpIHtcbiAgICAgICAgICAgICAgICBza2lwcGVkICs9IDE7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGFUeXBlID0gYXR0ci5kYXRhX3R5cGU7XG5cbiAgICAgICAgICAgIGlmIChpc1NhbXBsZWFibGVUeXBlKGRhdGFUeXBlLCBlbnVtTmFtZXMpKSB7XG4gICAgICAgICAgICAgICAgd29ya0l0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBhdHRyLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlLFxuICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZWREaXN0aW5jdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICdlc3RpbWF0ZWRfZGlzdGluY3QnIGluIGF0dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChhdHRyLmVzdGltYXRlZF9kaXN0aW5jdCBhcyBudW1iZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxuICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGVudW1WYWx1ZXM6IHJlc29sdmVFbnVtVmFsdWVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRyb3NwZWN0aW9uLmVudW1zLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAhaXNBcnJheVR5cGUoZGF0YVR5cGUpICYmXG4gICAgICAgICAgICAgICAgIWlzU2FtcGxlYWJsZVNjYWxhcihkYXRhVHlwZSkgJiZcbiAgICAgICAgICAgICAgICAhZW51bU5hbWVzLmhhcyhkYXRhVHlwZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIFBvdGVudGlhbCBjb21wb3NpdGUgdHlwZSBcdTIwMTQgaW50cm9zcGVjdCBzdWItZmllbGRzXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViRmllbGRzID0gYXdhaXQgZmV0Y2hDb21wb3NpdGVTdWJGaWVsZHMocG9vbCwgZGF0YVR5cGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN1YkZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2Ygb2Ygc3ViRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFza2VkU2V0LmhhcyhzZi5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBwZWQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2FtcGxlYWJsZVR5cGUoc2YuZGF0YV90eXBlLCBlbnVtTmFtZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya0l0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBgJHthdHRyLm5hbWV9LiR7c2YubmFtZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogc2YuZGF0YV90eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZWREaXN0aW5jdDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBhdHRyLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJGaWVsZE5hbWU6IHNmLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1WYWx1ZXM6IHJlc29sdmVFbnVtVmFsdWVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2YuZGF0YV90eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50cm9zcGVjdGlvbi5lbnVtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcHBlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2tpcHBlZCArPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcuY291bnRzLnRvdGFsQ29sdW1ucyArPSB3b3JrSXRlbXMubGVuZ3RoO1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuc2FtcGxpbmcuY291bnRzLnNraXBwZWRDb2x1bW5zICs9IHNraXBwZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGNvbHVtblJlc3VsdHM6IFRDb2x1bW5TYW1wbGVbXSA9IChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIHdvcmtJdGVtcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5lbnVtVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLmNvdW50cy5zYW1wbGVkQ29sdW1ucyArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uTmFtZSA9IGl0ZW0uY29tcG9zaXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGAke2l0ZW0uY29tcG9zaXRlLmNvbHVtbk5hbWV9LiR7aXRlbS5jb21wb3NpdGUuc3ViRmllbGROYW1lfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbS5jb2x1bW5OYW1lO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlPFRDb2x1bW5TYW1wbGU+KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl9uYW1lOiBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6ICdkaXN0aW5jdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IGl0ZW0uZW51bVZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlLmFkZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGl0ZW0uY29tcG9zaXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGF3YWl0IHNhbXBsZUNvbXBvc2l0ZVN1YkZpZWxkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9vbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29tcG9zaXRlLmNvbHVtbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNvbXBvc2l0ZS5zdWJGaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmVzdGltYXRlZERpc3RpbmN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0aW1hdGVkUm93Q291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvbktpbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYXdhaXQgc2FtcGxlQ29sdW1uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9vbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZXN0aW1hdGVkRGlzdGluY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZWRSb3dDb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uS2luZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5jb3VudHMuc2FtcGxlZENvbHVtbnMgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApKSBhcyBUQ29sdW1uU2FtcGxlW107XG5cbiAgICAgICAgY29uc3QgY29sdW1uczogUmVjb3JkPHN0cmluZywgVFRhYmxlU2FtcGxlQ29sdW1uPiA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgIGNvbHVtblJlc3VsdHMubWFwKChzYW1wbGUpID0+IFtcbiAgICAgICAgICAgICAgICBzYW1wbGUuY29sdW1uX25hbWUsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdHJhdGVneTogc2FtcGxlLnN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgICAgICBjb3VudDogc2FtcGxlLnZhbHVlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczogc2FtcGxlLnZhbHVlcy5tYXAoKHYpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZVZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya0l0ZW1zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3KSA9PiB3LmNvbHVtbk5hbWUgPT09IHNhbXBsZS5jb2x1bW5fbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApPy5kYXRhVHlwZSA/PyAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHRhYmxlU2FtcGxlczogVFRhYmxlU2FtcGxlcyA9IHtcbiAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICBzYW1wbGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgZXhjbHVkZWRfY29sdW1uczogbWFza2VkQ29sdW1ucyxcbiAgICAgICAgfTtcblxuICAgICAgICB5aWVsZCB7dGFibGVOYW1lLCBzYW1wbGVzOiB0YWJsZVNhbXBsZXN9O1xuXG4gICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLmNvdW50cy5jb21wbGV0ZWRUYWJsZXMgKz0gMTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5zdGF0ZSA9ICdkb25lJztcbiAgICB9KTtcbn07XG4iLCAiaW1wb3J0IHt3cml0ZUZpbGUsIHJlbmFtZSwgcm0sIG1rZGlyLCBzdGF0LCByZWFkZGlyfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7ZGlybmFtZSwgam9pbn0gZnJvbSAnbm9kZTpwYXRoJztcblxuY29uc3QgZXhpc3RzID0gYXN5bmMgKHBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHN0YXQocGF0aCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufTtcblxuLy8gQ3Jhc2gtc2FmZSB3cml0ZSBwcm90b2NvbDpcbi8vICAgMS4gd3JpdGUgZGF0YSB0byA8cGF0aD4udG1wXG4vLyAgIDIuIGlmIDxwYXRoPiBleGlzdHMsIHJlbmFtZSA8cGF0aD4gLT4gPHBhdGg+LmJhayAgKHByZXNlcnZlcyBwcmlvciBjb250ZW50KVxuLy8gICAzLiByZW5hbWUgPHBhdGg+LnRtcCAtPiA8cGF0aD4gICAgICAgICAgICAgICAgICAgIChhdG9taWMgb24gUE9TSVggc2FtZS1mcylcbi8vICAgNC4gcm0gPHBhdGg+LmJhayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xlYW51cClcbi8vIEEgY3Jhc2ggYmV0d2VlbiBhbnkgdHdvIHN0ZXBzIGxlYXZlcyBlaXRoZXIgdGhlIG9sZCBmaWxlIG9yIHRoZSBuZXcgZmlsZVxuLy8gaW50YWN0IGF0IDxwYXRoPjsgYSBsZWZ0b3ZlciAuYmFrIGNhbiBiZSBpbnNwZWN0ZWQgbWFudWFsbHkgaWYgbmVlZGVkLlxuZXhwb3J0IGNvbnN0IGF0b21pY1dyaXRlRmlsZSA9IGFzeW5jIChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgZGF0YTogc3RyaW5nLFxuICAgIGVuY29kaW5nOiBCdWZmZXJFbmNvZGluZyA9ICd1dGYtOCcsXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCB0bXBQYXRoID0gYCR7cGF0aH0udG1wYDtcbiAgICBjb25zdCBiYWtQYXRoID0gYCR7cGF0aH0uYmFrYDtcblxuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUocGF0aCksIHtyZWN1cnNpdmU6IHRydWV9KTtcblxuICAgIGF3YWl0IHdyaXRlRmlsZSh0bXBQYXRoLCBkYXRhLCBlbmNvZGluZyk7XG5cbiAgICBjb25zdCB0YXJnZXRFeGlzdHMgPSBhd2FpdCBleGlzdHMocGF0aCk7XG5cbiAgICBpZiAodGFyZ2V0RXhpc3RzKSB7XG4gICAgICAgIGF3YWl0IHJlbmFtZShwYXRoLCBiYWtQYXRoKTtcbiAgICB9XG5cbiAgICBhd2FpdCByZW5hbWUodG1wUGF0aCwgcGF0aCk7XG5cbiAgICBpZiAodGFyZ2V0RXhpc3RzKSB7XG4gICAgICAgIGF3YWl0IHJtKGJha1BhdGgsIHtmb3JjZTogdHJ1ZX0pO1xuICAgIH1cbn07XG5cbi8vIFJlY292ZXIgYSBzaW5nbGUgYXRvbWljLXdyaXRlIHRhcmdldCBmcm9tIGEgcHJpb3IgY3Jhc2guXG4vLyAgIC0gPHRhcmdldD4udG1wIGlzIHBhcnRpYWwtd3JpdGUgZ2FyYmFnZTsgZGVsZXRlIGl0LlxuLy8gICAtIDx0YXJnZXQ+LmJhayBpcyB0aGUgcHJldmlvdXMgY29udGVudDpcbi8vICAgICAgICogaWYgPHRhcmdldD4gZXhpc3RzLCB0aGUgcmVuYW1lIHN1Y2NlZWRlZCBcdTIwMTQganVzdCByZW1vdmUgLmJha1xuLy8gICAgICAgKiBpZiA8dGFyZ2V0PiBpcyBtaXNzaW5nLCB0aGUgcmVuYW1lIG5ldmVyIGhhcHBlbmVkIFx1MjAxNCByZXN0b3JlIC5iYWsgLT4gdGFyZ2V0XG5jb25zdCByZWNvdmVyUGFpciA9IGFzeW5jIChcbiAgICB0YXJnZXRQYXRoOiBzdHJpbmcsXG4gICAgdG1wRXhpc3RzOiBib29sZWFuLFxuICAgIGJha0V4aXN0czogYm9vbGVhbixcbiAgICB0YXJnZXRFeGlzdHM6IGJvb2xlYW4sXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAodG1wRXhpc3RzKSB7XG4gICAgICAgIGF3YWl0IHJtKGAke3RhcmdldFBhdGh9LnRtcGAsIHtmb3JjZTogdHJ1ZX0pO1xuICAgIH1cblxuICAgIGlmIChiYWtFeGlzdHMpIHtcbiAgICAgICAgaWYgKHRhcmdldEV4aXN0cykge1xuICAgICAgICAgICAgYXdhaXQgcm0oYCR7dGFyZ2V0UGF0aH0uYmFrYCwge2ZvcmNlOiB0cnVlfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCByZW5hbWUoYCR7dGFyZ2V0UGF0aH0uYmFrYCwgdGFyZ2V0UGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVjb3ZlckF0b21pY1dyaXRlID0gYXN5bmMgKHRhcmdldFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IFt0bXBFeGlzdHMsIGJha0V4aXN0cywgdGFyZ2V0RXhpc3RzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgZXhpc3RzKGAke3RhcmdldFBhdGh9LnRtcGApLFxuICAgICAgICBleGlzdHMoYCR7dGFyZ2V0UGF0aH0uYmFrYCksXG4gICAgICAgIGV4aXN0cyh0YXJnZXRQYXRoKSxcbiAgICBdKTtcblxuICAgIGF3YWl0IHJlY292ZXJQYWlyKHRhcmdldFBhdGgsIHRtcEV4aXN0cywgYmFrRXhpc3RzLCB0YXJnZXRFeGlzdHMpO1xufTtcblxuY29uc3QgVE1QX1NVRkZJWCA9ICcudG1wJztcbmNvbnN0IEJBS19TVUZGSVggPSAnLmJhayc7XG5cbmV4cG9ydCBjb25zdCByZWNvdmVyQXRvbWljV3JpdGVzSW5EaXIgPSBhc3luYyAoXG4gICAgZGlyUGF0aDogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3QgZGlyRXhpc3RzID0gYXdhaXQgZXhpc3RzKGRpclBhdGgpO1xuXG4gICAgaWYgKCFkaXJFeGlzdHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCByZWFkZGlyKGRpclBhdGgpO1xuXG4gICAgY29uc3QgdGFyZ2V0cyA9IG5ldyBTZXQoXG4gICAgICAgIGVudHJpZXNcbiAgICAgICAgICAgIC5maWx0ZXIoKGUpID0+IGUuZW5kc1dpdGgoVE1QX1NVRkZJWCkgfHwgZS5lbmRzV2l0aChCQUtfU1VGRklYKSlcbiAgICAgICAgICAgIC5tYXAoKGUpID0+XG4gICAgICAgICAgICAgICAgZS5lbmRzV2l0aChUTVBfU1VGRklYKVxuICAgICAgICAgICAgICAgICAgICA/IGUuc2xpY2UoMCwgLVRNUF9TVUZGSVgubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICA6IGUuc2xpY2UoMCwgLUJBS19TVUZGSVgubGVuZ3RoKSxcbiAgICAgICAgICAgICksXG4gICAgKTtcblxuICAgIGNvbnN0IGVudHJ5U2V0ID0gbmV3IFNldChlbnRyaWVzKTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBBcnJheS5mcm9tKHRhcmdldHMpLm1hcCgodGFyZ2V0KSA9PlxuICAgICAgICAgICAgcmVjb3ZlclBhaXIoXG4gICAgICAgICAgICAgICAgam9pbihkaXJQYXRoLCB0YXJnZXQpLFxuICAgICAgICAgICAgICAgIGVudHJ5U2V0LmhhcyhgJHt0YXJnZXR9JHtUTVBfU1VGRklYfWApLFxuICAgICAgICAgICAgICAgIGVudHJ5U2V0LmhhcyhgJHt0YXJnZXR9JHtCQUtfU1VGRklYfWApLFxuICAgICAgICAgICAgICAgIGVudHJ5U2V0Lmhhcyh0YXJnZXQpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICApO1xufTtcbiIsICJpbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcbmltcG9ydCB0eXBlIHtUUlBDQ2xpZW50fSBmcm9tICdAdHJwYy9jbGllbnQnO1xuaW1wb3J0IHR5cGUge1RBcHBSb3V0ZXJ9IGZyb20gJ0BkYmN0eC9jb3JlJztcbmltcG9ydCB7XG4gICAgcGFyc2VQb3N0SW50cm9zcGVjdGlvblN0YWdlLFxuICAgIHBhcnNlUG9zdFNhbXBsaW5nTGFiZWwsXG59IGZyb20gJ0BkYmN0eC9jb21tb24nO1xuaW1wb3J0IHtzdHJlYW1Kb2IsIHR5cGUgVEpvYlNuYXBzaG90fSBmcm9tICcuLi9saWIvc3RyZWFtLWpvYi5tanMnO1xuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB7bG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIubWpzJztcblxuLy8gU3RyZWFtcyBhIHBvc3QtaW50cm9zcGVjdGlvbiBqb2IgdG8gY29tcGxldGlvbiBhbmQgYmluZHMgcHJvZ3Jlc3MgKyB0ZXJtaW5hbCBzdGF0ZVxuLy8gb250byBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24uIFJldHVybnMgdGhlIGZpbmFsIHNuYXBzaG90IHNvIGNhbGxlcnNcbi8vIGNhbiByZWFjdCB0byBzdWNjZXNzL2ZhaWx1cmUuXG5leHBvcnQgY29uc3Qgc3RyZWFtUG9zdEludHJvc3BlY3Rpb24gPSBhc3luYyAoXG4gICAgYXV0aGVkOiBUUlBDQ2xpZW50PFRBcHBSb3V0ZXI+LFxuICAgIGpvYklkOiBzdHJpbmcsXG4gICAgc3RvcmU6IFRTdG9yZSxcbik6IFByb21pc2U8VEpvYlNuYXBzaG90PiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCBzdHJlYW1Kb2IoYXV0aGVkLCBqb2JJZCwge1xuICAgICAgICAgICAgb25Qcm9ncmVzczogKHNuYXApID0+IHtcbiAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi5zdGF0ZSA9ICdydW5uaW5nJztcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLnN0YWdlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlUG9zdEludHJvc3BlY3Rpb25TdGFnZShzbmFwLnByb2dyZXNzTGFiZWwpO1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24udG9rZW5zSW4gPVxuICAgICAgICAgICAgICAgICAgICAgICAgc25hcC50b2tlbnNJbiA/PyBudWxsO1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24udG9rZW5zT3V0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNuYXAudG9rZW5zT3V0ID8/IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi5jb2x1bW5zRG9uZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBzbmFwLmNvbHVtbnNEb25lID8/IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi5jb2x1bW5zVG90YWwgPVxuICAgICAgICAgICAgICAgICAgICAgICAgc25hcC5jb2x1bW5zVG90YWwgPz8gbnVsbDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChzbmFwc2hvdC5zdGF0dXMgPT09ICdmYWlsZWQnKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLnN0YXRlID0gJ2Vycm9yJztcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24uZXJyb3IgPVxuICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdC5lcnJvciA/PyAncG9zdC1pbnRyb3NwZWN0aW9uIGZhaWxlZCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi5zdGF0ZSA9ICdkb25lJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHNuYXBzaG90O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBtc2cgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi5zdGF0ZSA9ICdlcnJvcic7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24uZXJyb3IgPSBtc2c7XG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgfVxufTtcblxuLy8gVHJpZ2dlcnMgcG9zdC1zYW1wbGluZyAoc2VydmVyIHNraXBzIHJlLWVucXVldWUgaWYgYWxyZWFkeSBhbmFseXplZCkgYW5kIGJpbmRzXG4vLyBwcm9ncmVzcyArIHRlcm1pbmFsIHN0YXRlIG9udG8gc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RTYW1wbGluZy5cbmV4cG9ydCBjb25zdCBkaXNwYXRjaEFuZFN0cmVhbVBvc3RTYW1wbGluZyA9IGFzeW5jIChcbiAgICBhdXRoZWQ6IFRSUENDbGllbnQ8VEFwcFJvdXRlcj4sXG4gICAgcmV2aXNpb25JZDogc3RyaW5nLFxuICAgIHN0b3JlOiBUU3RvcmUsXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIGlmIChzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdFNhbXBsaW5nLnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0U2FtcGxpbmcuc3RhdGUgPSAncXVldWVkJztcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXV0aGVkLnJldmlzaW9ucy5ydW5Qb3N0U2FtcGxpbmcubXV0YXRlKHtyZXZpc2lvbklkfSk7XG5cbiAgICBpZiAocmVzdWx0LmFscmVhZHlBbmFseXplZCkge1xuICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjID0gc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RTYW1wbGluZztcbiAgICAgICAgICAgIGMuc3RhdGUgPSAnZG9uZSc7XG4gICAgICAgICAgICBjLmpvYklkID0gbnVsbDtcbiAgICAgICAgICAgIGMucmV1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGMuY291bnRzLnRvdGFsVGFibGVzID0gcmVzdWx0LmNvdW50cy50b3RhbFRhYmxlcztcbiAgICAgICAgICAgIGMuY291bnRzLmZvcmVpZ25LZXlzRm91bmQgPSByZXN1bHQuY291bnRzLmZvcmVpZ25LZXlzO1xuICAgICAgICB9KTtcbiAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgcG9zdC1zYW1wbGluZyByZXVzZWQgZm9yIHJldmlzaW9uPSR7cmV2aXNpb25JZH0gKHRhYmxlcz0ke3Jlc3VsdC5jb3VudHMudG90YWxUYWJsZXN9IGZrcz0ke3Jlc3VsdC5jb3VudHMuZm9yZWlnbktleXN9KWAsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7am9iSWR9ID0gcmVzdWx0O1xuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RTYW1wbGluZy5qb2JJZCA9IGpvYklkO1xuICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdFNhbXBsaW5nLnN0YXRlID0gJ3J1bm5pbmcnO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCBzdHJlYW1Kb2IoYXV0aGVkLCBqb2JJZCwge1xuICAgICAgICBvblByb2dyZXNzOiAoc25hcCkgPT4ge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGMgPSBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdFNhbXBsaW5nO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBwYXJzZVBvc3RTYW1wbGluZ0xhYmVsKHNuYXAucHJvZ3Jlc3NMYWJlbCwge1xuICAgICAgICAgICAgICAgICAgICBzdGFnZTogYy5zdGFnZSxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxUYWJsZXM6IGMuY291bnRzLnRvdGFsVGFibGVzLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmliZWRUYWJsZXM6IGMuY291bnRzLmRlc2NyaWJlZFRhYmxlcyxcbiAgICAgICAgICAgICAgICAgICAgZW1iZWRkZWRUYWJsZXM6IGMuY291bnRzLmVtYmVkZGVkVGFibGVzLFxuICAgICAgICAgICAgICAgICAgICB0b3RhbEVtYmVkZGluZ3M6IGMuY291bnRzLnRvdGFsRW1iZWRkaW5ncyxcbiAgICAgICAgICAgICAgICAgICAgc2Nhbm5lZFRhYmxlczogYy5jb3VudHMuc2Nhbm5lZFRhYmxlcyxcbiAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleXNGb3VuZDogYy5jb3VudHMuZm9yZWlnbktleXNGb3VuZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dC5zdGFnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjLnN0YWdlID0gbmV4dC5zdGFnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5leHQudG90YWxUYWJsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjLmNvdW50cy50b3RhbFRhYmxlcyA9IG5leHQudG90YWxUYWJsZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChuZXh0LmRlc2NyaWJlZFRhYmxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGMuY291bnRzLmRlc2NyaWJlZFRhYmxlcyA9IG5leHQuZGVzY3JpYmVkVGFibGVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobmV4dC5lbWJlZGRlZFRhYmxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGMuY291bnRzLmVtYmVkZGVkVGFibGVzID0gbmV4dC5lbWJlZGRlZFRhYmxlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5leHQudG90YWxFbWJlZGRpbmdzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYy5jb3VudHMudG90YWxFbWJlZGRpbmdzID0gbmV4dC50b3RhbEVtYmVkZGluZ3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChuZXh0LnNjYW5uZWRUYWJsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjLmNvdW50cy5zY2FubmVkVGFibGVzID0gbmV4dC5zY2FubmVkVGFibGVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobmV4dC5mb3JlaWduS2V5c0ZvdW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYy5jb3VudHMuZm9yZWlnbktleXNGb3VuZCA9IG5leHQuZm9yZWlnbktleXNGb3VuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgaWYgKHNuYXBzaG90LnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0U2FtcGxpbmcuc3RhdGUgPSAnZXJyb3InO1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RTYW1wbGluZy5lcnJvciA9XG4gICAgICAgICAgICAgICAgc25hcHNob3QuZXJyb3IgPz8gJ3Bvc3Qtc2FtcGxpbmcgam9iIGZhaWxlZCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdFNhbXBsaW5nLnN0YXRlID0gJ2RvbmUnO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoc25hcHNob3Quc3RhdHVzID09PSAnZmFpbGVkJykge1xuICAgICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICBgcG9zdC1zYW1wbGluZyBqb2IgZmFpbGVkOiAke3NuYXBzaG90LmVycm9yID8/ICd1bmtub3duJ31gLFxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBwb3N0LXNhbXBsaW5nIGRvbmUgZm9yIHJldmlzaW9uPSR7cmV2aXNpb25JZH1gKTtcbiAgICB9XG59O1xuXG4vLyBTZXF1ZW50aWFsIHRhaWwgb2YgYSBzZXJ2ZXItc2lkZSByZXZpc2lvbjogcG9zdC1pbnRyb3NwZWN0aW9uIGZpcnN0IGlmIHN0aWxsIHJ1bm5pbmcsXG4vLyB0aGVuIHBvc3Qtc2FtcGxpbmcuIFVzZWQgYnkgdGhlIGxpc3Qtc3ViY29tbWFuZCBmbG93IGFmdGVyIHRoZSB1c2VyIHBpY2tzIGFcbi8vIGRhdGFiYXNlIHRvIG1vbml0b3IuIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcHJlLWZpbGxpbmcgdGhlIHVwc3RyZWFtXG4vLyBzdG9yZSBzdGVwcyAoaW50cm9zcGVjdGlvbi9zYW1wbGluZy9zYW1wbGVzKSB0byB0aGVpciAnc2tpcHBlZCcgc3RhdGVzLlxuLy9cbi8vIEFsd2F5cyBjYWxscyBkaXNwYXRjaEFuZFN0cmVhbVBvc3RTYW1wbGluZyBldmVuIHdoZW4gcG9zdC1zYW1wbGluZyBpcyBhbHJlYWR5IGNvbXBsZXRlXG4vLyBzZXJ2ZXItc2lkZSBcdTIwMTQgcnVuUG9zdFNhbXBsaW5nIGlzIGlkZW1wb3RlbnQgKGBhbHJlYWR5QW5hbHl6ZWQ6IHRydWVgIHNob3J0LWNpcmN1aXQpXG4vLyBhbmQgaXMgdGhlIG9ubHkgd2F5IHRvIHBvcHVsYXRlIHRoZSByZWxhdGlvbnMvZm9yZWlnbi1rZXlzIGNvdW50cyB0aGUgVUlcbi8vIHJlbmRlcnMuIFNraXBwaW5nIGl0IGhlcmUgd291bGQgbGVhdmUgdGhlIGFuYWx5emUgbGluZSBzaG93aW5nIFwiMCB0YWJsZXMsXG4vLyAwIGZvcmVpZ24ga2V5c1wiLlxuZXhwb3J0IGNvbnN0IHRhaWxSZXZpc2lvbiA9IGFzeW5jIChhcmdzOiB7XG4gICAgYXV0aGVkOiBUUlBDQ2xpZW50PFRBcHBSb3V0ZXI+O1xuICAgIHJldmlzaW9uSWQ6IHN0cmluZztcbiAgICBzdG9yZTogVFN0b3JlO1xuICAgIHBvc3RJbnRyb3NwZWN0aW9uRG9uZTogYm9vbGVhbjtcbn0pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCB7YXV0aGVkLCByZXZpc2lvbklkLCBzdG9yZSwgcG9zdEludHJvc3BlY3Rpb25Eb25lfSA9IGFyZ3M7XG5cbiAgICBpZiAoIXBvc3RJbnRyb3NwZWN0aW9uRG9uZSkge1xuICAgICAgICAvLyBGdW5uZWwgdGhyb3VnaCBlbnN1cmVQb3N0SW50cm9zcGVjdGlvbiAocmF0aGVyIHRoYW4gZGVyaXZpbmcgdGhlIGRldGVybWluaXN0aWNcbiAgICAgICAgLy8gam9iIElEIGlubGluZSkgc28gdGhlIHNlcnZlciBjYW4gd2lwZSBhbnkgcHJpb3IgZmFpbGVkIHBvc3QtaW50cm9zcGVjdGlvbiBhbmRcbiAgICAgICAgLy8gaGFuZCBiYWNrIGEgZnJlc2ggam9iIElELiBXaXRob3V0IHRoaXMsIGEgZmFpbGVkIHBvc3QtaW50cm9zcGVjdGlvbiBjYXVnaHQgYnlcbiAgICAgICAgLy8gdGhlIGxpc3QgZmxvdyB3b3VsZCBqdXN0IHN0cmVhbSBiYWNrIHRoZSBzYW1lIGRlYWQgc25hcHNob3QuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGF1dGhlZC5yZXZpc2lvbnMuZW5zdXJlUG9zdEludHJvc3BlY3Rpb24ubXV0YXRlKHtcbiAgICAgICAgICAgIHJldmlzaW9uSWQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVzdWx0LmFscmVhZHlFbnJpY2hlZCkge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi5zdGF0ZSA9ICdkb25lJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi5qb2JJZCA9IHJlc3VsdC5qb2JJZDtcbiAgICAgICAgICAgICAgICBpZiAoc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLnN0YXRlID09PSAnaWRsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLnN0YXRlID0gJ3F1ZXVlZCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBzbmFwID0gYXdhaXQgc3RyZWFtUG9zdEludHJvc3BlY3Rpb24oXG4gICAgICAgICAgICAgICAgYXV0aGVkLFxuICAgICAgICAgICAgICAgIHJlc3VsdC5qb2JJZCxcbiAgICAgICAgICAgICAgICBzdG9yZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoc25hcC5zdGF0dXMgPT09ICdmYWlsZWQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgZGlzcGF0Y2hBbmRTdHJlYW1Qb3N0U2FtcGxpbmcoYXV0aGVkLCByZXZpc2lvbklkLCBzdG9yZSk7XG59O1xuIiwgImltcG9ydCB0eXBlIHtUUG9zdEludHJvc3BlY3Rpb25TdGFnZSwgVFBvc3RTYW1wbGluZ1N0YWdlfSBmcm9tICcuL3R5cGVzLm1qcyc7XG5cbmV4cG9ydCBjb25zdCBQT1NUX0lOVFJPU1BFQ1RJT05fU1RBR0VTOiBSZWFkb25seVNldDxUUG9zdEludHJvc3BlY3Rpb25TdGFnZT4gPVxuICAgIG5ldyBTZXQ8VFBvc3RJbnRyb3NwZWN0aW9uU3RhZ2U+KFtcbiAgICAgICAgJ2NsYXNzaWZ5aW5nJyxcbiAgICAgICAgJ2Rlc2NyaWJpbmcnLFxuICAgICAgICAnbWFza2luZycsXG4gICAgICAgICdmaW5hbGl6aW5nJyxcbiAgICBdKTtcblxuZXhwb3J0IGNvbnN0IFBPU1RfSU5UUk9TUEVDVElPTl9TVEFHRV9PUkRFUjogcmVhZG9ubHkgVFBvc3RJbnRyb3NwZWN0aW9uU3RhZ2VbXSA9XG4gICAgT2JqZWN0LmZyZWV6ZShbXG4gICAgICAgICdjbGFzc2lmeWluZycsXG4gICAgICAgICdkZXNjcmliaW5nJyxcbiAgICAgICAgJ21hc2tpbmcnLFxuICAgICAgICAnZmluYWxpemluZycsXG4gICAgXSBhcyBjb25zdCk7XG5cbmV4cG9ydCBjb25zdCBQT1NUX0lOVFJPU1BFQ1RJT05fU1RBR0VfTEFCRUxTOiBSZWFkb25seTxcbiAgICBSZWNvcmQ8VFBvc3RJbnRyb3NwZWN0aW9uU3RhZ2UsIHN0cmluZz5cbj4gPSBPYmplY3QuZnJlZXplKHtcbiAgICBjbGFzc2lmeWluZzogJ0NsYXNzaWZ5aW5nIHRhYmxlcycsXG4gICAgZGVzY3JpYmluZzogJ0Rlc2NyaWJpbmcgdGhlIGRhdGFiYXNlJyxcbiAgICBtYXNraW5nOiAnTWFza2luZyBzZW5zaXRpdmUgY29sdW1ucycsXG4gICAgZmluYWxpemluZzogJ0ZpbmFsaXppbmcnLFxufSk7XG5cbmV4cG9ydCBjb25zdCBQT1NUX1NBTVBMSU5HX1NUQUdFX0xBQkVMUzogUmVhZG9ubHk8XG4gICAgUmVjb3JkPFRQb3N0U2FtcGxpbmdTdGFnZSwgc3RyaW5nPlxuPiA9IE9iamVjdC5mcmVlemUoe1xuICAgIGRlc2NyaWJpbmc6ICdEZXNjcmliaW5nIHRhYmxlcycsXG4gICAgZW1iZWRkaW5nOiAnRW1iZWRkaW5nIGRlc2NyaXB0aW9ucycsXG4gICAgZGlzY292ZXJpbmc6ICdEaXNjb3ZlcmluZyBmb3JlaWduIGtleXMnLFxufSk7XG4iLCAiaW1wb3J0IHtQT1NUX0lOVFJPU1BFQ1RJT05fU1RBR0VTfSBmcm9tICcuL2xhYmVscy5tanMnO1xuaW1wb3J0IHR5cGUge1RQb3N0SW50cm9zcGVjdGlvblN0YWdlLCBUUG9zdFNhbXBsaW5nU25hcHNob3R9IGZyb20gJy4vdHlwZXMubWpzJztcblxuZXhwb3J0IGNvbnN0IHBhcnNlUG9zdEludHJvc3BlY3Rpb25TdGFnZSA9IChcbiAgICBsYWJlbDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcbik6IFRQb3N0SW50cm9zcGVjdGlvblN0YWdlIHwgbnVsbCA9PlxuICAgIGxhYmVsICYmIFBPU1RfSU5UUk9TUEVDVElPTl9TVEFHRVMuaGFzKGxhYmVsIGFzIFRQb3N0SW50cm9zcGVjdGlvblN0YWdlKVxuICAgICAgICA/IChsYWJlbCBhcyBUUG9zdEludHJvc3BlY3Rpb25TdGFnZSlcbiAgICAgICAgOiBudWxsO1xuXG4vLyBGb2xkcyB0aGUgbGF0ZXN0IGVtaXR0ZWQgcG9zdC1zYW1wbGluZyBsYWJlbCBpbnRvIHRoZSBydW5uaW5nIHNuYXBzaG90LlxuLy8gVW5rbm93biAvIG1hbGZvcm1lZCBsYWJlbHMgcmV0dXJuIHByZXYgdW5jaGFuZ2VkIOKAlCBlbWl0LXNpZGUgZHJpZnQgbmV2ZXJcbi8vIGNyYXNoZXMgdGhlIHBhcnNlci5cbmV4cG9ydCBjb25zdCBwYXJzZVBvc3RTYW1wbGluZ0xhYmVsID0gKFxuICAgIGxhYmVsOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIHByZXY6IFRQb3N0U2FtcGxpbmdTbmFwc2hvdCxcbik6IFRQb3N0U2FtcGxpbmdTbmFwc2hvdCA9PiB7XG4gICAgaWYgKCFsYWJlbCkge1xuICAgICAgICByZXR1cm4gcHJldjtcbiAgICB9XG5cbiAgICBpZiAobGFiZWwuc3RhcnRzV2l0aCgndG90YWw6JykpIHtcbiAgICAgICAgY29uc3QgdG90YWwgPSBOdW1iZXIobGFiZWwuc2xpY2UoNikpO1xuICAgICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHRvdGFsKSA/IHsuLi5wcmV2LCB0b3RhbFRhYmxlczogdG90YWx9IDogcHJldjtcbiAgICB9XG5cbiAgICBpZiAobGFiZWwuc3RhcnRzV2l0aCgnZGVzY3JpYmluZzonKSkge1xuICAgICAgICBjb25zdCBbZG9uZSwgdG90YWxdID0gbGFiZWwuc2xpY2UoMTEpLnNwbGl0KCcvJykubWFwKE51bWJlcik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgc3RhZ2U6ICdkZXNjcmliaW5nJyxcbiAgICAgICAgICAgIGRlc2NyaWJlZFRhYmxlczogZG9uZSxcbiAgICAgICAgICAgIHRvdGFsVGFibGVzOiB0b3RhbCA+IDAgPyB0b3RhbCA6IHByZXYudG90YWxUYWJsZXMsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGxhYmVsLnN0YXJ0c1dpdGgoJ2VtYmVkZGluZzonKSkge1xuICAgICAgICBjb25zdCBbZG9uZSwgdG90YWxdID0gbGFiZWwuc2xpY2UoMTApLnNwbGl0KCcvJykubWFwKE51bWJlcik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgc3RhZ2U6ICdlbWJlZGRpbmcnLFxuICAgICAgICAgICAgZW1iZWRkZWRUYWJsZXM6IGRvbmUsXG4gICAgICAgICAgICB0b3RhbEVtYmVkZGluZ3M6IHRvdGFsID4gMCA/IHRvdGFsIDogcHJldi50b3RhbEVtYmVkZGluZ3MsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGxhYmVsLnN0YXJ0c1dpdGgoJ2Rpc2NvdmVyaW5nOicpKSB7XG4gICAgICAgIGNvbnN0IFtzYywgdG90LCBma10gPSBsYWJlbC5zbGljZSgxMikuc3BsaXQoL1svOl0vKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICBzdGFnZTogJ2Rpc2NvdmVyaW5nJyxcbiAgICAgICAgICAgIHNjYW5uZWRUYWJsZXM6IHNjLFxuICAgICAgICAgICAgdG90YWxUYWJsZXM6IHRvdCxcbiAgICAgICAgICAgIGZvcmVpZ25LZXlzRm91bmQ6IGZrLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBwcmV2O1xufTtcblxuZXhwb3J0IGNvbnN0IGVtcHR5UG9zdFNhbXBsaW5nU25hcHNob3QgPSAoKTogVFBvc3RTYW1wbGluZ1NuYXBzaG90ID0+XG4gICAgT2JqZWN0LmZyZWV6ZSh7c3RhZ2U6IG51bGx9KTtcbiIsICJpbXBvcnQgdHlwZSB7VFJQQ0NsaWVudH0gZnJvbSAnQHRycGMvY2xpZW50JztcbmltcG9ydCB0eXBlIHtUQXBwUm91dGVyfSBmcm9tICdAZGJjdHgvY29yZSc7XG5cbmV4cG9ydCB0eXBlIFRKb2JTbmFwc2hvdCA9IHtcbiAgICByZWFkb25seSBzdGF0dXM6XG4gICAgICAgIHwgJ3BlbmRpbmcnXG4gICAgICAgIHwgJ3J1bm5pbmcnXG4gICAgICAgIHwgJ2NvbXBsZXRlZCdcbiAgICAgICAgfCAnZmFpbGVkJ1xuICAgICAgICB8ICdzdGFsbGVkJ1xuICAgICAgICB8ICd1bmtub3duJztcbiAgICByZWFkb25seSBwcm9ncmVzczogbnVtYmVyO1xuICAgIHJlYWRvbmx5IHByb2dyZXNzTGFiZWw6IHN0cmluZztcbiAgICByZWFkb25seSB0b2tlbnNJbj86IG51bWJlcjtcbiAgICByZWFkb25seSB0b2tlbnNPdXQ/OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgY29sdW1uc0RvbmU/OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgY29sdW1uc1RvdGFsPzogbnVtYmVyO1xuICAgIHJlYWRvbmx5IHJlc3VsdDogdW5rbm93bjtcbiAgICByZWFkb25seSBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFRKb2JTdHJlYW1PcHRpb25zID0ge1xuICAgIHJlYWRvbmx5IHRpbWVvdXRNcz86IG51bWJlcjtcbiAgICByZWFkb25seSBvblByb2dyZXNzPzogKHNuYXBzaG90OiBUSm9iU25hcHNob3QpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSAzMCAqIDYwICogMV8wMDA7XG5cbmV4cG9ydCBjb25zdCBzdHJlYW1Kb2IgPSAoXG4gICAgYXV0aGVkOiBUUlBDQ2xpZW50PFRBcHBSb3V0ZXI+LFxuICAgIGpvYklkOiBzdHJpbmcsXG4gICAgb3B0aW9uczogVEpvYlN0cmVhbU9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8VEpvYlNuYXBzaG90PiA9PiB7XG4gICAgY29uc3QgdGltZW91dE1zID0gb3B0aW9ucy50aW1lb3V0TXMgPz8gREVGQVVMVF9USU1FT1VUX01TO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFRKb2JTbmFwc2hvdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYGpvYiAke2pvYklkfSB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0TXN9bXNgKSk7XG4gICAgICAgIH0sIHRpbWVvdXRNcyk7XG5cbiAgICAgICAgY29uc3Qgc3ViID0gYXV0aGVkLnJldmlzaW9ucy5zdHJlYW1Kb2Iuc3Vic2NyaWJlKFxuICAgICAgICAgICAge2pvYklkfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvbkRhdGE6IChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90OiBUSm9iU25hcHNob3QgPSBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdGUuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHN0YXRlLnByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NMYWJlbDogc3RhdGUucHJvZ3Jlc3NMYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vuc0luOiBzdGF0ZS50b2tlbnNJbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vuc091dDogc3RhdGUudG9rZW5zT3V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc0RvbmU6IHN0YXRlLmNvbHVtbnNEb25lLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc1RvdGFsOiBzdGF0ZS5jb2x1bW5zVG90YWwsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHN0YXRlLnJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBzdGF0ZS5lcnJvcixcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblByb2dyZXNzPy4oc25hcHNob3QpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0YXR1cyA9PT0gJ2ZhaWxlZCdcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc25hcHNob3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbkVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbkNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGpvYiAke2pvYklkfSBzdHJlYW0gY2xvc2VkIGJlZm9yZSB0ZXJtaW5hbCBzdGF0ZWAsXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH0pO1xufTtcbiIsICJpbXBvcnQgdHlwZSB7VEZsb3dFdmVudH0gZnJvbSAnLi9ldmVudHMubWpzJztcbmltcG9ydCB0eXBlIHtURmxvd1BoYXNlLCBURmxvd1N0YXRlfSBmcm9tICcuL3N0YXRlcy5tanMnO1xuaW1wb3J0IHtmaXJlVGVsZW1ldHJ5RXZlbnR9IGZyb20gJy4uL2FwcC90ZWxlbWV0cnkubWpzJztcbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQge2RldGVjdFByb3ZpZGVyLCBpc0xvY2FsaG9zdH0gZnJvbSAnLi4vYXBwL2RldGVjdC5tanMnO1xuXG4vLyBDb21waWxlLXRpbWUgZ3VhcmFudGVlIHRoYXQgZXZlcnkgVEZsb3dFdmVudC5raW5kIGhhcyBhIHN3aXRjaCBhcm0uXG4vLyBBZGRpbmcgYSBuZXcga2luZCB0byBldmVudHMubXRzIHdpdGhvdXQgaGFuZGxpbmcgaXQgaGVyZSB0cmlnZ2VycyBhIHRzY1xuLy8gZXJyb3IgcmF0aGVyIHRoYW4gYSBzaWxlbnQgdGVsZW1ldHJ5IGRyb3AuXG5jb25zdCBhc3NlcnROZXZlciA9ICh4OiBuZXZlcik6IG5ldmVyID0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVuaGFuZGxlZCBmbG93IGV2ZW50OiAke0pTT04uc3RyaW5naWZ5KHgpfWApO1xufTtcblxuLy8gQmVzdC1lZmZvcnQgY2xhc3NpZmllciBmb3IgREIgY29ubmVjdCBlcnJvcnMuIE1hcHMgcHJvc2UgdG8gdGhlIHNtYWxsXG4vLyBlbnVtIHRoZSBzZXJ2ZXIgZXhwZWN0czsgZGVmYXVsdHMgdG8gJ3Vua25vd24nIHNvIHdlIGRvbid0IGxvc2UgdGhlIGV2ZW50LlxuY29uc3QgY2xhc3NpZnlEQkVycm9yID0gKGVycm9yOiBzdHJpbmcpOiBUREJFcnJvckNsYXNzID0+IHtcbiAgICBjb25zdCBtID0gZXJyb3IudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoXG4gICAgICAgIG0uaW5jbHVkZXMoJ3Bhc3N3b3JkJykgfHxcbiAgICAgICAgbS5pbmNsdWRlcygnYXV0aGVudGljYXRpb24nKSB8fFxuICAgICAgICBtLmluY2x1ZGVzKCdyb2xlJykgfHxcbiAgICAgICAgbS5pbmNsdWRlcygnZG9lcyBub3QgZXhpc3QnKSB8fFxuICAgICAgICBtLmluY2x1ZGVzKCdwZXJtaXNzaW9uIGRlbmllZCcpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiAnYXV0aCc7XG4gICAgfVxuICAgIGlmIChtLmluY2x1ZGVzKCdzc2wnKSB8fCBtLmluY2x1ZGVzKCd0bHMnKSB8fCBtLmluY2x1ZGVzKCdjZXJ0aWZpY2F0ZScpKSB7XG4gICAgICAgIHJldHVybiAndGxzJztcbiAgICB9XG4gICAgaWYgKG0uaW5jbHVkZXMoJ3RpbWVvdXQnKSB8fCBtLmluY2x1ZGVzKCdldGltZWRvdXQnKSkge1xuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgIH1cbiAgICBpZiAobS5pbmNsdWRlcygnZWNvbm5yZWZ1c2VkJykgfHwgbS5pbmNsdWRlcygnY29ubmVjdGlvbiByZWZ1c2VkJykpIHtcbiAgICAgICAgcmV0dXJuICdyZWZ1c2VkJztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgICBtLmluY2x1ZGVzKCdlbm90Zm91bmQnKSB8fFxuICAgICAgICBtLmluY2x1ZGVzKCdlYWlfYWdhaW4nKSB8fFxuICAgICAgICBtLmluY2x1ZGVzKCdkbnMnKVxuICAgICkge1xuICAgICAgICByZXR1cm4gJ2Rucyc7XG4gICAgfVxuICAgIHJldHVybiAndW5rbm93bic7XG59O1xuXG50eXBlIFREQkVycm9yQ2xhc3MgPSAnYXV0aCcgfCAndGxzJyB8ICd0aW1lb3V0JyB8ICdyZWZ1c2VkJyB8ICdkbnMnIHwgJ3Vua25vd24nO1xuXG4vLyBHZW5lcmljIHRyYW5zcG9ydCBjbGFzc2lmaWVyLiBTY2hlbWEgYWNjZXB0cyB6LnN0cmluZygpIHNvIHRoZSByZXR1cm5cbi8vIHN0YXlzIGEgc3RyaW5nIHVuaW9uOyBzYW1lIGxhYmVscyBhcyBEQiBjbGFzc2lmaWVyIGZvciBjcm9zcy1ldmVudFxuLy8gY29tcGFyYWJpbGl0eSBpbiBQb3N0SG9nIChcImhvdyBvZnRlbiBpcyBgdGltZW91dGAgdGhlIGNhdXNlIGFueXdoZXJlP1wiKS5cbmNvbnN0IGNsYXNzaWZ5VHJhbnNwb3J0RXJyb3IgPSAoZXJyb3I6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgbSA9IGVycm9yLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKFxuICAgICAgICBtLmluY2x1ZGVzKCdwZXJtaXNzaW9uIGRlbmllZCcpIHx8XG4gICAgICAgIG0uaW5jbHVkZXMoJ2F1dGhlbnRpY2F0aW9uJykgfHxcbiAgICAgICAgbS5pbmNsdWRlcygncHVibGlja2V5JykgfHxcbiAgICAgICAgbS5pbmNsdWRlcygna2V5Ym9hcmQtaW50ZXJhY3RpdmUnKVxuICAgICkge1xuICAgICAgICByZXR1cm4gJ2F1dGgnO1xuICAgIH1cbiAgICBpZiAobS5pbmNsdWRlcygnaG9zdCBrZXknKSB8fCBtLmluY2x1ZGVzKCd2ZXJpZnknKSkge1xuICAgICAgICByZXR1cm4gJ2hvc3Rfa2V5JztcbiAgICB9XG4gICAgaWYgKG0uaW5jbHVkZXMoJ3RpbWVvdXQnKSB8fCBtLmluY2x1ZGVzKCdldGltZWRvdXQnKSkge1xuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgIH1cbiAgICBpZiAobS5pbmNsdWRlcygnZWNvbm5yZWZ1c2VkJykgfHwgbS5pbmNsdWRlcygnY29ubmVjdGlvbiByZWZ1c2VkJykpIHtcbiAgICAgICAgcmV0dXJuICdyZWZ1c2VkJztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgICBtLmluY2x1ZGVzKCdlbm90Zm91bmQnKSB8fFxuICAgICAgICBtLmluY2x1ZGVzKCdlYWlfYWdhaW4nKSB8fFxuICAgICAgICBtLmluY2x1ZGVzKCdkbnMnKVxuICAgICkge1xuICAgICAgICByZXR1cm4gJ2Rucyc7XG4gICAgfVxuICAgIGlmIChtLmluY2x1ZGVzKCdlaG9zdHVucmVhY2gnKSB8fCBtLmluY2x1ZGVzKCdubyByb3V0ZSB0byBob3N0JykpIHtcbiAgICAgICAgcmV0dXJuICduZXR3b3JrJztcbiAgICB9XG4gICAgaWYgKG0uaW5jbHVkZXMoJ3Jlc2V0JykgfHwgbS5pbmNsdWRlcygnZWNvbm5yZXNldCcpKSB7XG4gICAgICAgIHJldHVybiAncmVzZXQnO1xuICAgIH1cbiAgICByZXR1cm4gJ3Vua25vd24nO1xufTtcblxuLy8gUGVyLWZsb3ctcnVuIGNsb3N1cmU6IHRyYWNrcyBwaGFzZSBlbnRyeSB0aW1lcyBzbyBlYWNoIGAqX2NvbXBsZXRlZGAgL1xuLy8gYCpfZmFpbGVkYCBldmVudCBjYW4gY2FycnkgaXRzIG93biBzdGFnZS1sb2NhbCBgZHVyYXRpb25fbXNgLiBEaXN0aW5jdFxuLy8gZnJvbSBlbnZlbG9wZSdzIGBlbGFwc2VkX3NlY29uZHNfc2luY2VfcnVuX3N0YXJ0YCwgd2hpY2ggaXMgcnVuLWN1bXVsYXRpdmUuXG5leHBvcnQgdHlwZSBURmxvd1RlbGVtZXRyeUVtaXR0ZXIgPSB7XG4gICAgcmVhZG9ubHkgb25FdmVudDogKFxuICAgICAgICBwcmV2OiBURmxvd1N0YXRlLFxuICAgICAgICBuZXh0OiBURmxvd1N0YXRlLFxuICAgICAgICBldmVudDogVEZsb3dFdmVudCxcbiAgICAgICAgc3RvcmU6IFRTdG9yZSxcbiAgICApID0+IHZvaWQ7XG4gICAgcmVhZG9ubHkgc25hcHNob3RMYXN0UGhhc2U6ICgpID0+IFRGbG93UGhhc2U7XG4gICAgcmVhZG9ubHkgc25hcHNob3RQaGFzZVBlcmNlbnQ6ICgpID0+IG51bWJlciB8IG51bGw7XG59O1xuXG4vLyBRdWFydGlsZSB0aHJlc2hvbGRzIGZvciBpbi1zdGFnZSBwcm9ncmVzcyBiZWFjb25zLiBDcm9zc2luZ3MgKG5vdCByYXdcbi8vIHBlcmNlbnQpIHNvIHdlIGdldCBhdCBtb3N0IHRocmVlIGJlYWNvbnMgcGVyIGxvbmctcnVubmluZyBwaGFzZSByYXRoZXJcbi8vIHRoYW4gcGVyLXJvdyBzcGFtLiAxMDAlIGNvbXBsZXRpb24gaXMgc2lnbmFsZWQgYnkgKl9jb21wbGV0ZWQgZXZlbnRzLlxuY29uc3QgUFJPR1JFU1NfVEhSRVNIT0xEUyA9IFswLjI1LCAwLjUsIDAuNzVdIGFzIGNvbnN0O1xuXG4vLyBUaW1lLWJhc2VkIHdhaXQgYmVhY29ucyBmb3IgcGhhc2VzIHdoZXJlIHRoZSB1c2VyIGlzIHN0YXJpbmcgYXQgYSBicm93c2VyXG4vLyBhcHByb3ZhbCAvIGV4cGxhbmF0aW9uIHByb21wdC4gUGVyY2VudCBlbmNvZGVzIHNlY29uZHMtb2Ytd2FpdCBhZ2FpbnN0IGFcbi8vIDMwMHMgXCJwYXRpZW5jZSBob3Jpem9uXCIgXHUyMDE0IGdpdmVzIFBvc3RIb2cgYSAwLTEgYXhpcyBjb21wYXJhYmxlIHRvXG4vLyBwZXJjZW50LWJhc2VkIHBoYXNlcyAoc28gY2hhcnRzIGNhbiBvdmVybGF5IHNhbXBsaW5nLXBlcmNlbnQgYW5kXG4vLyBhdXRoLXdhaXQtcGVyY2VudCBvbiB0aGUgc2FtZSBzY2F0dGVyIHdpdGhvdXQgdW5pdCB0cmFuc2xhdGlvbikuXG5jb25zdCBXQUlUX0JFQUNPTl9TRUNPTkRTID0gWzMwLCAxMjAsIDMwMF0gYXMgY29uc3Q7XG5jb25zdCBXQUlUX0JFQUNPTl9IT1JJWk9OID0gMzAwO1xuY29uc3QgV0FJVF9CRUFDT05fUEhBU0VTOiBSZWFkb25seVNldDxURmxvd1BoYXNlPiA9IG5ldyBTZXQoW1xuICAgICdhd2FpdGluZy1hdXRob3JpemF0aW9uJyxcbiAgICAnYXdhaXRpbmctZXhwbGFuYXRpb24nLFxuXSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVGbG93VGVsZW1ldHJ5RW1pdHRlciA9ICgpOiBURmxvd1RlbGVtZXRyeUVtaXR0ZXIgPT4ge1xuICAgIGNvbnN0IHBoYXNlU3RhcnRlZEF0ID0gbmV3IE1hcDxURmxvd1BoYXNlLCBudW1iZXI+KCk7XG4gICAgbGV0IGxhc3RQaGFzZTogVEZsb3dQaGFzZSA9ICdpZGxlJztcbiAgICBsZXQgbGFzdFBoYXNlUGVyY2VudDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdCByZXBvcnRlZFRocmVzaG9sZHNCeVBoYXNlID0gbmV3IE1hcDxURmxvd1BoYXNlLCBTZXQ8bnVtYmVyPj4oKTtcbiAgICBsZXQgcGVuZGluZ1dhaXRUaW1lcnM6IFJlYWRvbmx5QXJyYXk8Tm9kZUpTLlRpbWVvdXQ+ID0gW107XG5cbiAgICBjb25zdCBjYW5jZWxXYWl0VGltZXJzID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHQgb2YgcGVuZGluZ1dhaXRUaW1lcnMpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0KTtcbiAgICAgICAgfVxuICAgICAgICBwZW5kaW5nV2FpdFRpbWVycyA9IFtdO1xuICAgIH07XG5cbiAgICBjb25zdCBzY2hlZHVsZVdhaXRCZWFjb25zID0gKHBoYXNlOiBURmxvd1BoYXNlKTogdm9pZCA9PiB7XG4gICAgICAgIGNhbmNlbFdhaXRUaW1lcnMoKTtcbiAgICAgICAgcGVuZGluZ1dhaXRUaW1lcnMgPSBXQUlUX0JFQUNPTl9TRUNPTkRTLm1hcCgoc2Vjb25kcykgPT5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjbGkuZmxvdy5zdGFnZV9wcm9ncmVzcycsXG4gICAgICAgICAgICAgICAgICAgIHBoYXNlLFxuICAgICAgICAgICAgICAgICAgICBwZXJjZW50OiBNYXRoLm1pbigxLCBzZWNvbmRzIC8gV0FJVF9CRUFDT05fSE9SSVpPTiksXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVkX21ldHJpYzogc2Vjb25kcyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZWRfdG90YWw6IFdBSVRfQkVBQ09OX0hPUklaT04sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBzZWNvbmRzICogMTAwMCkudW5yZWYoKSxcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWF5YmVFbWl0U3RhZ2VQcm9ncmVzcyA9IChcbiAgICAgICAgcGhhc2U6IFRGbG93UGhhc2UsXG4gICAgICAgIG9ic2VydmVkX21ldHJpYzogbnVtYmVyLFxuICAgICAgICBvYnNlcnZlZF90b3RhbDogbnVtYmVyLFxuICAgICk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAob2JzZXJ2ZWRfdG90YWwgPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBlcmNlbnQgPSBNYXRoLm1pbigxLCBvYnNlcnZlZF9tZXRyaWMgLyBvYnNlcnZlZF90b3RhbCk7XG4gICAgICAgIGNvbnN0IGFscmVhZHkgPVxuICAgICAgICAgICAgcmVwb3J0ZWRUaHJlc2hvbGRzQnlQaGFzZS5nZXQocGhhc2UpID8/IG5ldyBTZXQ8bnVtYmVyPigpO1xuICAgICAgICBmb3IgKGNvbnN0IHRocmVzaG9sZCBvZiBQUk9HUkVTU19USFJFU0hPTERTKSB7XG4gICAgICAgICAgICBpZiAocGVyY2VudCA+PSB0aHJlc2hvbGQgJiYgIWFscmVhZHkuaGFzKHRocmVzaG9sZCkpIHtcbiAgICAgICAgICAgICAgICBhbHJlYWR5LmFkZCh0aHJlc2hvbGQpO1xuICAgICAgICAgICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjbGkuZmxvdy5zdGFnZV9wcm9ncmVzcycsXG4gICAgICAgICAgICAgICAgICAgIHBoYXNlLFxuICAgICAgICAgICAgICAgICAgICBwZXJjZW50OiB0aHJlc2hvbGQsXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVkX21ldHJpYyxcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZWRfdG90YWwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVwb3J0ZWRUaHJlc2hvbGRzQnlQaGFzZS5zZXQocGhhc2UsIGFscmVhZHkpO1xuICAgIH07XG5cbiAgICBjb25zdCBlbGFwc2VkSW5QaGFzZSA9IChwaGFzZTogVEZsb3dQaGFzZSk6IG51bWJlciA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGhhc2VTdGFydGVkQXQuZ2V0KHBoYXNlKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0ID09PSB1bmRlZmluZWQgPyAwIDogRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICAgIH07XG5cbiAgICBjb25zdCBvbkV2ZW50ID0gKFxuICAgICAgICBwcmV2OiBURmxvd1N0YXRlLFxuICAgICAgICBuZXh0OiBURmxvd1N0YXRlLFxuICAgICAgICBldmVudDogVEZsb3dFdmVudCxcbiAgICAgICAgc3RvcmU6IFRTdG9yZSxcbiAgICApOiB2b2lkID0+IHtcbiAgICAgICAgLy8gVHJhY2sgcGhhc2UgZW50cmllcyBmb3IgZHVyYXRpb24gY29tcHV0YXRpb24gKyBhYmFuZG9ubWVudCBzbmFwc2hvdHMuXG4gICAgICAgIGlmIChwcmV2LnBoYXNlICE9PSBuZXh0LnBoYXNlKSB7XG4gICAgICAgICAgICBwaGFzZVN0YXJ0ZWRBdC5zZXQobmV4dC5waGFzZSwgRGF0ZS5ub3coKSk7XG4gICAgICAgICAgICBsYXN0UGhhc2UgPSBuZXh0LnBoYXNlO1xuICAgICAgICAgICAgbGFzdFBoYXNlUGVyY2VudCA9IG51bGw7XG4gICAgICAgICAgICBjYW5jZWxXYWl0VGltZXJzKCk7XG4gICAgICAgICAgICBpZiAoV0FJVF9CRUFDT05fUEhBU0VTLmhhcyhuZXh0LnBoYXNlKSkge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlV2FpdEJlYWNvbnMobmV4dC5waGFzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdjbGkuZmxvdy5waGFzZV9lbnRlcmVkJyxcbiAgICAgICAgICAgICAgICBwaGFzZTogbmV4dC5waGFzZSxcbiAgICAgICAgICAgICAgICBwcmlvcl9waGFzZTogcHJldi5waGFzZSxcbiAgICAgICAgICAgICAgICBwaGFzZV9lbGFwc2VkX21zOiBlbGFwc2VkSW5QaGFzZShwcmV2LnBoYXNlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXZlbnQtc3BlY2lmaWMgdGVsZW1ldHJ5LiBNaXJyb3IgVEZsb3dFdmVudC5raW5kIDE6MSBvbnRvXG4gICAgICAgIC8vIGNsaS5mbG93LiogZXZlbnRzIHdpdGggdGhlIGRhdGEgd2UgaGF2ZSBvbiBoYW5kLlxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgICAgIGNhc2UgJ3N0b3AtYWZ0ZXItcmVhY2hlZCc6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3NzaC1jb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjbGkuZmxvdy5zc2hfY29ubmVjdGVkJyxcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IGVsYXBzZWRJblBoYXNlKCdjb25uZWN0aW5nLXNzaCcpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3NoLWZhaWxlZCc6XG4gICAgICAgICAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NsaS5mbG93LnNzaF9mYWlsZWQnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcl9jbGFzczogY2xhc3NpZnlUcmFuc3BvcnRFcnJvcihldmVudC5lcnJvciksXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX21zOiBlbGFwc2VkSW5QaGFzZSgnY29ubmVjdGluZy1zc2gnKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NzaC1ub3QtbmVlZGVkJzpcbiAgICAgICAgICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe3R5cGU6ICdjbGkuZmxvdy5zc2hfbm90X25lZWRlZCd9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnZGItY29ubmVjdGVkJzoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvc3RuYW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBpY2tlZEhvc3RuYW1lID8/ICcnO1xuICAgICAgICAgICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjbGkuZmxvdy5kYl9jb25uZWN0ZWQnLFxuICAgICAgICAgICAgICAgICAgICBkYl90eXBlOiAncG9zdGdyZXNxbCcsXG4gICAgICAgICAgICAgICAgICAgIGRiX3Byb3ZpZGVyOiBob3N0bmFtZSA/IGRldGVjdFByb3ZpZGVyKGhvc3RuYW1lKSA6ICdvdGhlcicsXG4gICAgICAgICAgICAgICAgICAgIGlzX2xvY2FsOiBob3N0bmFtZSA/IGlzTG9jYWxob3N0KGhvc3RuYW1lKSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9tczogZWxhcHNlZEluUGhhc2UoJ2Nvbm5lY3RpbmctZGInKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2RiLWZhaWxlZCc6XG4gICAgICAgICAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NsaS5mbG93LmRiX2ZhaWxlZCcsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yX2NsYXNzOiBjbGFzc2lmeURCRXJyb3IoZXZlbnQuZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9tczogZWxhcHNlZEluUGhhc2UoJ2Nvbm5lY3RpbmctZGInKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnaW50cm9zcGVjdGlvbi1sb2FkZWQnOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IHN0b3JlLnN0ZXBzLmludHJvc3BlY3Rpb24uY291bnRzO1xuICAgICAgICAgICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjbGkuZmxvdy5pbnRyb3NwZWN0aW9uX2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlczogYy50YWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdzOiBjLnZpZXdzLFxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWRfdmlld3M6IGMubWF0ZXJpYWxpemVkVmlld3MsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IGMuY29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgZW51bXM6IGMuZW51bXMsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ZXM6IGMuaW5kZXhlcyxcbiAgICAgICAgICAgICAgICAgICAgZm9yZWlnbl9rZXlfcmVmZXJlbmNlczogYy5mb3JlaWduS2V5cyxcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IGVsYXBzZWRJblBoYXNlKCdpbnRyb3NwZWN0aW5nJyksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpbnRyb3NwZWN0aW9uLWZhaWxlZCc6XG4gICAgICAgICAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NsaS5mbG93LmludHJvc3BlY3Rpb25fZmFpbGVkJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JfY2xhc3M6IGNsYXNzaWZ5VHJhbnNwb3J0RXJyb3IoZXZlbnQuZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9tczogZWxhcHNlZEluUGhhc2UoJ2ludHJvc3BlY3RpbmcnKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnb3V0cHV0LWpzb24td3JpdHRlbic6XG4gICAgICAgICAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHt0eXBlOiAnY2xpLmZsb3cub3V0cHV0X2pzb25fd3JpdHRlbid9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ291dHB1dC1qc29uLXNraXBwZWQnOlxuICAgICAgICAgICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7dHlwZTogJ2NsaS5mbG93Lm91dHB1dF9qc29uX3NraXBwZWQnfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvdXRwdXQtanNvbi1mYWlsZWQnOlxuICAgICAgICAgICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjbGkuZmxvdy5vdXRwdXRfanNvbl9mYWlsZWQnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcl9jbGFzczogY2xhc3NpZnlUcmFuc3BvcnRFcnJvcihldmVudC5lcnJvciksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvdXRwdXQtanNvbi1ub3QtcmVxdWVzdGVkJzpcbiAgICAgICAgICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY2xpLmZsb3cub3V0cHV0X2pzb25fbm90X3JlcXVlc3RlZCcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3Nlc3Npb24tY3JlYXRlZCc6XG4gICAgICAgICAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NsaS5mbG93LnNlc3Npb25fY3JlYXRlZCcsXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25faWQ6IGV2ZW50LnNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICAgICAgd2FzX2Zhc3RfcGF0aDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX21zOiBlbGFwc2VkSW5QaGFzZSgnY3JlYXRpbmctc2Vzc2lvbicpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZmFzdC1wYXRoLWNvbXBsZXRlZCc6XG4gICAgICAgICAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NsaS5mbG93LnNlc3Npb25fY3JlYXRlZCcsXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25faWQ6IGV2ZW50LnNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICAgICAgd2FzX2Zhc3RfcGF0aDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IGVsYXBzZWRJblBoYXNlKCdjcmVhdGluZy1zZXNzaW9uJyksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZXNzaW9uLWZhaWxlZCc6XG4gICAgICAgICAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NsaS5mbG93LnNlc3Npb25fZmFpbGVkJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JfY2xhc3M6IGNsYXNzaWZ5VHJhbnNwb3J0RXJyb3IoZXZlbnQuZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9tczogZWxhcHNlZEluUGhhc2UoJ2NyZWF0aW5nLXNlc3Npb24nKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnYXV0aC1jb25maXJtZWQnOlxuICAgICAgICAgICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjbGkuZmxvdy5hdXRoX2NvbmZpcm1lZCcsXG4gICAgICAgICAgICAgICAgICAgIHdhaXRfbXM6IGVsYXBzZWRJblBoYXNlKCdhd2FpdGluZy1hdXRob3JpemF0aW9uJyksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhdXRoLWZhaWxlZCc6XG4gICAgICAgICAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NsaS5mbG93LmF1dGhfZmFpbGVkJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JfY2xhc3M6IGNsYXNzaWZ5VHJhbnNwb3J0RXJyb3IoZXZlbnQuZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgICB3YWl0X21zOiBlbGFwc2VkSW5QaGFzZSgnYXdhaXRpbmctYXV0aG9yaXphdGlvbicpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXV0aC1ub3QtbmVlZGVkJzpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnZXhwbGFuYXRpb24tZ2l2ZW4nOlxuICAgICAgICAgICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjbGkuZmxvdy5leHBsYW5hdGlvbl9naXZlbicsXG4gICAgICAgICAgICAgICAgICAgIGV4cGxhbmF0aW9uX2xlbmd0aDogZXZlbnQudmFsdWUubGVuZ3RoLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdjaGVjay1pbnRyb3NwZWN0aW9uLWhpdCc6XG4gICAgICAgICAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NsaS5mbG93LnByZWZsaWdodF9oaXQnLFxuICAgICAgICAgICAgICAgICAgICBzYW1wbGVzX2V4aXN0OiBldmVudC5zYW1wbGVzRXhpc3QsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlc19uZWVkaW5nX3NhbXBsZXNfY291bnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC50YWJsZXNOZWVkaW5nU2FtcGxlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjaGVjay1pbnRyb3NwZWN0aW9uLW1pc3MnOlxuICAgICAgICAgICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7dHlwZTogJ2NsaS5mbG93LnByZWZsaWdodF9taXNzJ30pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdpbnRyb3NwZWN0aW9uLWluZ2VzdGVkJzpcbiAgICAgICAgICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY2xpLmZsb3cuaW50cm9zcGVjdGlvbl9pbmdlc3RlZCcsXG4gICAgICAgICAgICAgICAgICAgIHJldmlzaW9uX2lkOiBldmVudC5yZXZpc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICBzYW1wbGVzX2V4aXN0OiBldmVudC5zYW1wbGVzRXhpc3QsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlc19uZWVkaW5nX3NhbXBsZXNfY291bnQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC50YWJsZXNOZWVkaW5nU2FtcGxlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX21zOiBlbGFwc2VkSW5QaGFzZSgnaW5nZXN0aW5nLWludHJvc3BlY3Rpb24nKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2luZ2VzdC1mYWlsZWQnOlxuICAgICAgICAgICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjbGkuZmxvdy5pbmdlc3RfZmFpbGVkJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JfY2xhc3M6IGNsYXNzaWZ5VHJhbnNwb3J0RXJyb3IoZXZlbnQuZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9tczogZWxhcHNlZEluUGhhc2UoJ2luZ2VzdGluZy1pbnRyb3NwZWN0aW9uJyksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ21hc2stbG9hZGVkJzpcbiAgICAgICAgICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY2xpLmZsb3cubWFza19sb2FkZWQnLFxuICAgICAgICAgICAgICAgICAgICBtYXNrZWRfY29sdW1uc19jb3VudDogT2JqZWN0LmtleXMoZXZlbnQubWFzaykubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9tczogZWxhcHNlZEluUGhhc2UoJ3NhbXBsaW5nLW1hc2stcmVzb2x2aW5nJyksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtYXNrLWZldGNoLWZhaWxlZCc6XG4gICAgICAgICAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NsaS5mbG93Lm1hc2tfZmV0Y2hfZmFpbGVkJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JfY2xhc3M6IGNsYXNzaWZ5VHJhbnNwb3J0RXJyb3IoZXZlbnQuZXJyb3IpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdzYW1wbGluZy1jb21wbGV0ZWQnOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2MgPSBzdG9yZS5zdGVwcy5zYW1wbGluZy5jb3VudHM7XG4gICAgICAgICAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NsaS5mbG93LnNhbXBsaW5nX2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlc19zYW1wbGVkOiBzYy5jb21wbGV0ZWRUYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnNfc2FtcGxlZDogc2Muc2FtcGxlZENvbHVtbnMsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnNfc2tpcHBlZDogc2Muc2tpcHBlZENvbHVtbnMsXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX21zOiBlbGFwc2VkSW5QaGFzZSgnc2FtcGxpbmcnKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ3NhbXBsaW5nLWZhaWxlZCc6XG4gICAgICAgICAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NsaS5mbG93LnNhbXBsaW5nX2ZhaWxlZCcsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yX2NsYXNzOiBjbGFzc2lmeVRyYW5zcG9ydEVycm9yKGV2ZW50LmVycm9yKSxcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IGVsYXBzZWRJblBoYXNlKCdzYW1wbGluZycpLFxuICAgICAgICAgICAgICAgICAgICB0YWJsZXNfc2FtcGxlZF9zb19mYXI6IG5leHQuc2FtcGxpbmcuY29sbGVjdGVkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NhbXBsaW5nLW5vdC1uZWVkZWQnOlxuICAgICAgICAgICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7dHlwZTogJ2NsaS5mbG93LnNhbXBsaW5nX25vdF9uZWVkZWQnfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3NhbXBsZXMtdXBsb2FkLWNvbXBsZXRlZCc6XG4gICAgICAgICAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NsaS5mbG93LnNhbXBsZXNfdXBsb2FkX2NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlc191cGxvYWRlZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5zYW1wbGVzLnVwbG9hZGVkVGFibGVzLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9tczogZWxhcHNlZEluUGhhc2UoJ3VwbG9hZGluZy1zYW1wbGVzJyksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzYW1wbGVzLXVwbG9hZC1mYWlsZWQnOlxuICAgICAgICAgICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjbGkuZmxvdy5zYW1wbGVzX3VwbG9hZF9mYWlsZWQnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcl9jbGFzczogY2xhc3NpZnlUcmFuc3BvcnRFcnJvcihldmVudC5lcnJvciksXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX21zOiBlbGFwc2VkSW5QaGFzZSgndXBsb2FkaW5nLXNhbXBsZXMnKSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVzX3VwbG9hZGVkX3NvX2ZhcjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5zYW1wbGVzLnVwbG9hZGVkVGFibGVzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2FtcGxlcy11cGxvYWQtbm90LW5lZWRlZCc6XG4gICAgICAgICAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NsaS5mbG93LnNhbXBsZXNfdXBsb2FkX25vdF9uZWVkZWQnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdwb3N0LWludHJvc3BlY3Rpb24tcHJvZ3Jlc3MnOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWwgPSBldmVudC5jb2x1bW5zVG90YWw7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9uZSA9IGV2ZW50LmNvbHVtbnNEb25lO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdG90YWwgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgZG9uZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICB0b3RhbCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5waGFzZSA9PT0gJ2F3YWl0aW5nLXBvc3Qtc2FtcGxpbmcnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RQaGFzZVBlcmNlbnQgPSBNYXRoLm1pbigxLCBkb25lIC8gdG90YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY2xpLmZsb3cucG9zdF9pbnRyb3NwZWN0aW9uX3Byb2dyZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgc3RhZ2U6IGV2ZW50LnN0YWdlLFxuICAgICAgICAgICAgICAgICAgICB0b2tlbnNfaW46IGV2ZW50LnRva2Vuc0luLFxuICAgICAgICAgICAgICAgICAgICB0b2tlbnNfb3V0OiBldmVudC50b2tlbnNPdXQsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnNfZG9uZTogZXZlbnQuY29sdW1uc0RvbmUsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnNfdG90YWw6IGV2ZW50LmNvbHVtbnNUb3RhbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ3Bvc3QtaW50cm9zcGVjdGlvbi1jb21wbGV0ZWQnOlxuICAgICAgICAgICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjbGkuZmxvdy5wb3N0X2ludHJvc3BlY3Rpb25fY29tcGxldGVkJyxcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IGVsYXBzZWRJblBoYXNlKCdhd2FpdGluZy1wb3N0LXNhbXBsaW5nJyksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwb3N0LWludHJvc3BlY3Rpb24tZmFpbGVkJzpcbiAgICAgICAgICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY2xpLmZsb3cucG9zdF9pbnRyb3NwZWN0aW9uX2ZhaWxlZCcsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yX2NsYXNzOiBjbGFzc2lmeVRyYW5zcG9ydEVycm9yKGV2ZW50LmVycm9yKSxcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IGVsYXBzZWRJblBoYXNlKCdhd2FpdGluZy1wb3N0LXNhbXBsaW5nJyksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3Bvc3Qtc2FtcGxpbmctY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY2xpLmZsb3cucG9zdF9zYW1wbGluZ19jb21wbGV0ZWQnLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9tczogZWxhcHNlZEluUGhhc2UoJ2F3YWl0aW5nLXBvc3Qtc2FtcGxpbmcnKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Bvc3Qtc2FtcGxpbmctZmFpbGVkJzpcbiAgICAgICAgICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY2xpLmZsb3cucG9zdF9zYW1wbGluZ19mYWlsZWQnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcl9jbGFzczogY2xhc3NpZnlUcmFuc3BvcnRFcnJvcihldmVudC5lcnJvciksXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX21zOiBlbGFwc2VkSW5QaGFzZSgnYXdhaXRpbmctcG9zdC1zYW1wbGluZycpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdzYW1wbGUtdGFibGUteWllbGRlZCc6XG4gICAgICAgICAgICBjYXNlICdzYW1wbGUtY2h1bmstdXBsb2FkZWQnOlxuICAgICAgICAgICAgICAgIC8vIEhvdC1wYXRoIGFnZ3JlZ2F0ZXMgZW1pdCBhdCBlbmQtb2Ytc3RhZ2U7IHBlci1pdGVtIGlzIG5vaXNlLlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGFzc2VydE5ldmVyKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYWNrIHJ1bm5pbmcgcGVyY2VudCBvbiBzYW1wbGluZyAodXBsb2FkZWQtdGFibGVzIC8gdG90YWwpLlxuICAgICAgICBpZiAobmV4dC5waGFzZSA9PT0gJ3NhbXBsaW5nJyAmJiBuZXh0LnNhbXBsaW5nLnRvdGFsVGFibGVzID4gMCkge1xuICAgICAgICAgICAgbGFzdFBoYXNlUGVyY2VudCA9IE1hdGgubWluKFxuICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgbmV4dC5zYW1wbGluZy5jb2xsZWN0ZWQubGVuZ3RoIC8gbmV4dC5zYW1wbGluZy50b3RhbFRhYmxlcyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtYXliZUVtaXRTdGFnZVByb2dyZXNzKFxuICAgICAgICAgICAgICAgICdzYW1wbGluZycsXG4gICAgICAgICAgICAgICAgbmV4dC5zYW1wbGluZy5jb2xsZWN0ZWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIG5leHQuc2FtcGxpbmcudG90YWxUYWJsZXMsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUG9zdC1pbnRyb3NwZWN0aW9uIHByb2dyZXNzIGZpcmVzIHJlZ2FyZGxlc3Mgb2YgcHJpbWFyeSBwaGFzZVxuICAgICAgICAvLyAoaXQncyBhIGJhY2tncm91bmQgam9iKS4gRW1pdCB0aHJlc2hvbGQgYmVhY29ucyBhZ2FpbnN0IHRoZVxuICAgICAgICAvLyBjb2x1bW5zX2RvbmUgLyBjb2x1bW5zX3RvdGFsIG1ldHJpYy5cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdwb3N0LWludHJvc3BlY3Rpb24tcHJvZ3Jlc3MnKSB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGV2ZW50LmNvbHVtbnNUb3RhbDtcbiAgICAgICAgICAgIGNvbnN0IGRvbmUgPSBldmVudC5jb2x1bW5zRG9uZTtcbiAgICAgICAgICAgIGlmICh0b3RhbCAhPT0gbnVsbCAmJiBkb25lICE9PSBudWxsICYmIHRvdGFsID4gMCkge1xuICAgICAgICAgICAgICAgIG1heWJlRW1pdFN0YWdlUHJvZ3Jlc3MoJ2F3YWl0aW5nLXBvc3Qtc2FtcGxpbmcnLCBkb25lLCB0b3RhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUZXJtaW5hbDogZW1pdCBkb25lIHdpdGggdG90YWxzLlxuICAgICAgICBpZiAobmV4dC5waGFzZSA9PT0gJ2RvbmUnICYmIHByZXYucGhhc2UgIT09ICdkb25lJykge1xuICAgICAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2xpLmZsb3cuZG9uZScsXG4gICAgICAgICAgICAgICAgdG90YWxfZHVyYXRpb25fbXM6XG4gICAgICAgICAgICAgICAgICAgIERhdGUubm93KCkgLSAocGhhc2VTdGFydGVkQXQuZ2V0KCdpZGxlJykgPz8gRGF0ZS5ub3coKSksXG4gICAgICAgICAgICAgICAgcmV2aXNpb25faWQ6IG5leHQucmV2aXNpb25JZCxcbiAgICAgICAgICAgICAgICBzdG9wX2FmdGVyX3N0YWdlOiBuZXh0LnN0b3BBZnRlcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgb25FdmVudCxcbiAgICAgICAgc25hcHNob3RMYXN0UGhhc2U6ICgpID0+IGxhc3RQaGFzZSxcbiAgICAgICAgc25hcHNob3RQaGFzZVBlcmNlbnQ6ICgpID0+IGxhc3RQaGFzZVBlcmNlbnQsXG4gICAgfSk7XG59O1xuIiwgImltcG9ydCB0eXBlIHtJbnN0YW5jZX0gZnJvbSAnaW5rJztcbmltcG9ydCB7cnVuSW5BY3Rpb24sIHdoZW59IGZyb20gJ21vYngnO1xuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB7cmVhZENvbmZpZ30gZnJvbSAnLi9jb25maWcubWpzJztcbmltcG9ydCB7Y3JlYXRlQXV0aGVudGljYXRlZFRSUENDbGllbnR9IGZyb20gJy4uL2xpYi90cnBjLm1qcyc7XG5pbXBvcnQge2Nvbm5lY3RBY2NvdW50fSBmcm9tICcuL3Nlc3Npb24ubWpzJztcbmltcG9ydCB7dGFpbFJldmlzaW9ufSBmcm9tICcuL3RhaWwubWpzJztcbmltcG9ydCB7bG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIubWpzJztcbmltcG9ydCB7ZXhpdEdyYWNlZnVsbHksIGZpcmVUZWxlbWV0cnlFdmVudH0gZnJvbSAnLi90ZWxlbWV0cnkubWpzJztcblxuZXhwb3J0IGNvbnN0IHJ1bkxpc3QgPSBhc3luYyAoXG4gICAgc3RvcmU6IFRTdG9yZSxcbiAgICBpbmtBcHA6IEluc3RhbmNlLFxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgcmVhZENvbmZpZygpO1xuICAgICAgICBpZiAoIWNvbmZpZy50b2tlbikge1xuICAgICAgICAgICAgaW5rQXBwLnVubW91bnQoKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICdubyBhdXRoIHRva2VuIGZvdW5kLiBydW4gYGRiY3R4IGxvZ2luYCB0byBhdXRoZW50aWNhdGUuJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhd2FpdCBleGl0R3JhY2VmdWxseSgxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGF1dGhlZCA9IGNyZWF0ZUF1dGhlbnRpY2F0ZWRUUlBDQ2xpZW50KCgpID0+XG4gICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoY29uZmlnLnRva2VuISksXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgY29ubmVjdEFjY291bnQoY29uZmlnLnRva2VuISwgc3RvcmUpO1xuXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gYXdhaXQgYXV0aGVkLmRhdGFiYXNlcy5saXN0Rm9yVXNlci5xdWVyeSgpO1xuXG4gICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnY2xpLmxpc3Qudmlld2VkJyxcbiAgICAgICAgICAgIGl0ZW1fY291bnQ6IGl0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgIGlzX2VtcHR5OiBpdGVtcy5sZW5ndGggPT09IDAsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGlua0FwcC51bm1vdW50KCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAnbm8gZGF0YWJhc2VzIHlldC4gcnVuIGBkYmN0eGAgYWdhaW5zdCBhIGRhdGFiYXNlIHRvIGdldCBzdGFydGVkLicsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXdhaXQgZXhpdEdyYWNlZnVsbHkoMCk7XG4gICAgICAgIH1cblxuICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICBzdG9yZS5tb2RlID0gJ2xpc3QtcGlja2luZyc7XG4gICAgICAgICAgICBzdG9yZS5saXN0UGlja2VyID0ge1xuICAgICAgICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgICAgICAgIGZvY3VzZWRJbmRleDogMCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEluZGV4OiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgd2hlbigoKSA9PiBzdG9yZS5saXN0UGlja2VyPy5zZWxlY3RlZEluZGV4ICE9PSBudWxsKTtcblxuICAgICAgICBjb25zdCBwaWNrZXIgPSBzdG9yZS5saXN0UGlja2VyO1xuICAgICAgICBpZiAocGlja2VyID09PSBudWxsIHx8IHBpY2tlci5zZWxlY3RlZEluZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwaWNrZWRXYXNFeGl0ID0gcGlja2VyLnNlbGVjdGVkSW5kZXggPT09IHBpY2tlci5pdGVtcy5sZW5ndGg7XG5cbiAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgIHR5cGU6ICdjbGkubGlzdC5pdGVtX3BpY2tlZCcsXG4gICAgICAgICAgICBwaWNrZWRfaW5kZXg6IHBpY2tlci5zZWxlY3RlZEluZGV4LFxuICAgICAgICAgICAgcGlja2VkX3dhc19leGl0X3NlbnRpbmVsOiBwaWNrZWRXYXNFeGl0LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTeW50aGV0aWMgXCJleGl0XCIgcm93IHNlbnRpbmVsIFx1MjAxNCBzZWxlY3RlZEluZGV4ID09PSBpdGVtcy5sZW5ndGggbWVhbnNcbiAgICAgICAgLy8gdGhlIHVzZXIgcGlja2VkIHRoZSBib3R0b20gXCJleGl0XCIgZW50cnkuIFVubW91bnQgYW5kIHF1aXQuXG4gICAgICAgIGlmIChwaWNrZWRXYXNFeGl0KSB7XG4gICAgICAgICAgICBpbmtBcHAudW5tb3VudCgpO1xuICAgICAgICAgICAgYXdhaXQgZXhpdEdyYWNlZnVsbHkoMCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwaWNrZWQgPSBwaWNrZXIuaXRlbXNbcGlja2VyLnNlbGVjdGVkSW5kZXhdO1xuICAgICAgICBpZiAocGlja2VkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5lZWRzTG9jYWxSZXJ1biA9XG4gICAgICAgICAgICAhcGlja2VkLnNhbXBsZXNJbmdlc3RlZCB8fFxuICAgICAgICAgICAgKCFwaWNrZWQucG9zdEludHJvc3BlY3Rpb24uZG9uZSAmJlxuICAgICAgICAgICAgICAgIHBpY2tlZC5wb3N0SW50cm9zcGVjdGlvbi5qb2JTdGF0dXMgPT09IG51bGwpO1xuXG4gICAgICAgIGlmIChuZWVkc0xvY2FsUmVydW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHJlYXNvbjogJ3NhbXBsZXNfbWlzc2luZycgfCAnZW5yaWNobWVudF9zdHVjaycgPVxuICAgICAgICAgICAgICAgICFwaWNrZWQuc2FtcGxlc0luZ2VzdGVkXG4gICAgICAgICAgICAgICAgICAgID8gJ3NhbXBsZXNfbWlzc2luZydcbiAgICAgICAgICAgICAgICAgICAgOiAnZW5yaWNobWVudF9zdHVjayc7XG4gICAgICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdjbGkubGlzdC5uZWVkc19sb2NhbF9yZXJ1bicsXG4gICAgICAgICAgICAgICAgcmVhc29uLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpbmtBcHAudW5tb3VudCgpO1xuICAgICAgICAgICAgY29uc3QgcHJvc2VSZWFzb24gPVxuICAgICAgICAgICAgICAgIHJlYXNvbiA9PT0gJ3NhbXBsZXNfbWlzc2luZydcbiAgICAgICAgICAgICAgICAgICAgPyAnc2FtcGxlcyBmb3IgdGhpcyBkYXRhYmFzZSBoYXZlIG5vdCBiZWVuIHVwbG9hZGVkIHlldC4nXG4gICAgICAgICAgICAgICAgICAgIDogJ3Bvc3QtaW50cm9zcGVjdGlvbiBlbnJpY2htZW50IGlzIHN0dWNrIChubyBsaXZlIGpvYiBhbmQgbm90IGNvbXBsZXRlKS4nO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFwiJHtwaWNrZWQubmFtZX1cIjogJHtwcm9zZVJlYXNvbn1gKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICdyZXJ1biBgZGJjdHhgIGFnYWluc3QgdGhlIHNhbWUgZGF0YWJhc2UgdG8gcGljayB1cCB3aGVyZSB5b3UgbGVmdCBvZmYuJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhd2FpdCBleGl0R3JhY2VmdWxseSgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRhaWwtYWJsZTogcHJlLWZpbGwgdXBzdHJlYW0gc3RlcHMgdG8gbWlycm9yIGEgaGFzaC1oaXQtdGhlbi10YWlsXG4gICAgICAgIC8vIG91dGNvbWUgYW5kIGZsaXAgbW9kZSBzbyB0aGUgcmVndWxhciBjYXNjYWRlIHJlbmRlcnMuIFBoYXNlLTAgZG9uZVxuICAgICAgICAvLyBjYW4gYmUgcHJlLXNldCAobm8gZXh0cmEgaW5mbyB0byBmZXRjaCk7IHBvc3Qtc2FtcGxpbmcgaXMgbGVmdCB0b1xuICAgICAgICAvLyBkaXNwYXRjaEFuZFN0cmVhbVBvc3RTYW1wbGluZyBzbyB0aGUgcmVsYXRpb25zL2ZvcmVpZ24ta2V5cyBjb3VudHMgY29tZVxuICAgICAgICAvLyBiYWNrIGZyb20gdGhlIHNlcnZlci5zIHJ1blBvc3RTYW1wbGluZyByZXNwb25zZS5cbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUubW9kZSA9ICdsaXN0LXRhaWxpbmcnO1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLmludHJvc3BlY3Rpb24uc3RhdGUgPSAnc2tpcHBlZCc7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5zdGF0ZSA9ICdza2lwcGVkJztcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLnJldXNlZCA9IHRydWU7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24uc2FtcGxlcy5zdGF0ZSA9ICdza2lwcGVkJztcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5zYW1wbGVzLnJldXNlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAocGlja2VkLnBvc3RJbnRyb3NwZWN0aW9uLmRvbmUpIHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24uc3RhdGUgPSAnZG9uZSc7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLnJldXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHRhaWxTdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnY2xpLmxpc3QudGFpbF9zdGFydGVkJyxcbiAgICAgICAgICAgIHBvc3RfaW50cm9zcGVjdGlvbl9kb25lOiBwaWNrZWQucG9zdEludHJvc3BlY3Rpb24uZG9uZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgdGFpbFJldmlzaW9uKHtcbiAgICAgICAgICAgIGF1dGhlZCxcbiAgICAgICAgICAgIHJldmlzaW9uSWQ6IHBpY2tlZC5sYXRlc3RSZXZpc2lvbklkLFxuICAgICAgICAgICAgc3RvcmUsXG4gICAgICAgICAgICBwb3N0SW50cm9zcGVjdGlvbkRvbmU6IHBpY2tlZC5wb3N0SW50cm9zcGVjdGlvbi5kb25lLFxuICAgICAgICB9KTtcblxuICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ2NsaS5saXN0LnRhaWxfY29tcGxldGVkJyxcbiAgICAgICAgICAgIGR1cmF0aW9uX21zOiBEYXRlLm5vdygpIC0gdGFpbFN0YXJ0LFxuICAgICAgICB9KTtcblxuICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICBzdG9yZS5leGl0UmVxdWVzdGVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBsaXN0OiAke21zZ31gKTtcbiAgICAgICAgaW5rQXBwLnVubW91bnQoKTtcbiAgICAgICAgY29uc29sZS5sb2coYGVycm9yOiAke21zZ31gKTtcbiAgICAgICAgYXdhaXQgZXhpdEdyYWNlZnVsbHkoMSk7XG4gICAgfVxufTtcbiIsICJpbXBvcnQge3JlbmRlcn0gZnJvbSAnaW5rJztcbmltcG9ydCB7Y3JlYXRlRWxlbWVudCwgdXNlU3RhdGUsIHVzZUVmZmVjdH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt0cnBjLCBjcmVhdGVBdXRoZW50aWNhdGVkVFJQQ0NsaWVudH0gZnJvbSAnLi4vbGliL3RycGMubWpzJztcbmltcG9ydCB7cmVhZENvbmZpZywgd3JpdGVDb25maWd9IGZyb20gJy4vY29uZmlnLm1qcyc7XG5pbXBvcnQge2J1aWxkQ29ubmVjdFVSTH0gZnJvbSAnLi9vcGVuLXVybC5tanMnO1xuaW1wb3J0IHtcbiAgICBkZXRlY3RIb3N0bmFtZSxcbiAgICBkZXRlY3RPUyxcbiAgICBkZXRlY3RTaGVsbCxcbiAgICBkZXRlY3RVc2VybmFtZSxcbn0gZnJvbSAnLi9kZXRlY3QubWpzJztcbmltcG9ydCB7TG9naW5WaWV3LCB0eXBlIFRMb2dpblN0YXRlfSBmcm9tICcuLi91aS9jb21wb25lbnRzL0xvZ2luLmpzJztcbmltcG9ydCB7bG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIubWpzJztcbmltcG9ydCB7XG4gICAgZXhpdEdyYWNlZnVsbHksXG4gICAgZmlyZVRlbGVtZXRyeUV2ZW50LFxuICAgIGludmFsaWRhdGVDb25maWdDYWNoZSxcbn0gZnJvbSAnLi90ZWxlbWV0cnkubWpzJztcblxuY29uc3Qgd2FpdEZvclRva2VuID0gKGxvZ2luSWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PlxuICAgIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBzdWIgPSB0cnBjLmNsaUxvZ2luLm9uQXV0aG9yaXphdGlvbi5zdWJzY3JpYmUoXG4gICAgICAgICAgICB7bG9naW5faWQ6IGxvZ2luSWR9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9uRGF0YTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YS50b2tlbik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbkVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICB9KTtcblxudHlwZSBUTG9naW5BcHBQcm9wcyA9IHtcbiAgICByZWFkb25seSBpbml0aWFsU3RhdGU6IFRMb2dpblN0YXRlO1xuICAgIHJlYWRvbmx5IHN1YnNjcmliZTogKFxuICAgICAgICBzZXRTdGF0ZTogKG5leHQ6IFRMb2dpblN0YXRlKSA9PiB2b2lkLFxuICAgICkgPT4gUHJvbWlzZTx2b2lkPjtcbn07XG5cbmNvbnN0IExvZ2luQXBwID0gKHtpbml0aWFsU3RhdGUsIHN1YnNjcmliZX06IFRMb2dpbkFwcFByb3BzKSA9PiB7XG4gICAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZTxUTG9naW5TdGF0ZT4oaW5pdGlhbFN0YXRlKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHN1YnNjcmliZShzZXRTdGF0ZSk7XG4gICAgfSwgW3N1YnNjcmliZV0pO1xuXG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoTG9naW5WaWV3LCB7c3RhdGV9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBydW5Mb2dpbiA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBsZXQgc2V0U3RhdGU6IChuZXh0OiBUTG9naW5TdGF0ZSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgY29uc3Qgc3Vic2NyaWJlID0gYXN5bmMgKFxuICAgICAgICB1cGRhdGU6IChuZXh0OiBUTG9naW5TdGF0ZSkgPT4gdm9pZCxcbiAgICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgc2V0U3RhdGUgPSB1cGRhdGU7XG4gICAgfTtcblxuICAgIGNvbnN0IGlua0FwcCA9IHJlbmRlcihcbiAgICAgICAgY3JlYXRlRWxlbWVudChMb2dpbkFwcCwge1xuICAgICAgICAgICAgaW5pdGlhbFN0YXRlOiB7a2luZDogJ2NyZWF0aW5nJ30sXG4gICAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCBsb2dpblN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe3R5cGU6ICdjbGkuYXV0aC5sb2dpbl9zdGFydGVkJ30pO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgcmVhZENvbmZpZygpO1xuXG4gICAgICAgIGNvbnN0IHtsb2dpbl9pZH0gPSBhd2FpdCB0cnBjLmNsaUxvZ2luLmNyZWF0ZS5tdXRhdGUoe1xuICAgICAgICAgICAgdXNlcm5hbWU6IGRldGVjdFVzZXJuYW1lKCksXG4gICAgICAgICAgICBob3N0bmFtZTogZGV0ZWN0SG9zdG5hbWUoKSxcbiAgICAgICAgICAgIG9zOiBkZXRlY3RPUygpLFxuICAgICAgICAgICAgc2hlbGw6IGRldGVjdFNoZWxsKCksXG4gICAgICAgICAgICBkZXZpY2VfaWQ6IGNvbmZpZy5kZXZpY2VfaWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IGJ1aWxkQ29ubmVjdFVSTChsb2dpbl9pZCk7XG4gICAgICAgIHNldFN0YXRlKHtraW5kOiAnd2FpdGluZycsIHVybH0pO1xuICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe3R5cGU6ICdjbGkuYXV0aC5sb2dpbl91cmxfb3BlbmVkJ30pO1xuXG4gICAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgd2FpdEZvclRva2VuKGxvZ2luX2lkKTtcbiAgICAgICAgYXdhaXQgd3JpdGVDb25maWcodG9rZW4pO1xuICAgICAgICBpbnZhbGlkYXRlQ29uZmlnQ2FjaGUoKTtcblxuICAgICAgICBjb25zdCBhdXRoZWQgPSBjcmVhdGVBdXRoZW50aWNhdGVkVFJQQ0NsaWVudCgoKSA9PlxuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHRva2VuKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IGF3YWl0IGF1dGhlZC5hY2NvdW50LmdldEFjY291bnQucXVlcnkoe30pO1xuXG4gICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgIGtpbmQ6ICdjb25uZWN0ZWQnLFxuICAgICAgICAgICAgZW1haWw6IGFjY291bnQuZW1haWxzWzBdID8/IG51bGwsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHdhaXRNcyA9IERhdGUubm93KCkgLSBsb2dpblN0YXJ0O1xuICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ2NsaS5hdXRoLmxvZ2luX2NvbXBsZXRlZCcsXG4gICAgICAgICAgICB3YWl0X21zOiB3YWl0TXMsXG4gICAgICAgIH0pO1xuICAgICAgICBmaXJlVGVsZW1ldHJ5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ2NsaS5jb21tYW5kLmNvbXBsZXRlZCcsXG4gICAgICAgICAgICBzdWJjb21tYW5kOiAnbG9naW4nLFxuICAgICAgICAgICAgZHVyYXRpb25fbXM6IHdhaXRNcyxcbiAgICAgICAgICAgIGZpbmFsX3BoYXNlOiAnZG9uZScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDIwMCkpO1xuICAgICAgICBpbmtBcHAudW5tb3VudCgpO1xuICAgICAgICBhd2FpdCBleGl0R3JhY2VmdWxseSgwKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBsb2dpbjogJHttZXNzYWdlfWApO1xuICAgICAgICBzZXRTdGF0ZSh7a2luZDogJ2Vycm9yJywgbWVzc2FnZX0pO1xuICAgICAgICBjb25zdCB3YWl0TXMgPSBEYXRlLm5vdygpIC0gbG9naW5TdGFydDtcbiAgICAgICAgZmlyZVRlbGVtZXRyeUV2ZW50KHtcbiAgICAgICAgICAgIHR5cGU6ICdjbGkuYXV0aC5sb2dpbl9mYWlsZWQnLFxuICAgICAgICAgICAgZXJyb3JfY2xhc3M6ICd1bmtub3duJyxcbiAgICAgICAgICAgIHdhaXRfbXM6IHdhaXRNcyxcbiAgICAgICAgfSk7XG4gICAgICAgIGZpcmVUZWxlbWV0cnlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnY2xpLmNvbW1hbmQuZXJyb3JlZCcsXG4gICAgICAgICAgICBzdWJjb21tYW5kOiAnbG9naW4nLFxuICAgICAgICAgICAgZXJyb3JfY2xhc3M6ICdsb2dpbl9mYWlsZWQnLFxuICAgICAgICAgICAgZXJyb3JfcGhhc2U6ICdlcnJvcicsXG4gICAgICAgICAgICBkdXJhdGlvbl9tczogd2FpdE1zLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMjAwKSk7XG4gICAgICAgIGlua0FwcC51bm1vdW50KCk7XG4gICAgICAgIGF3YWl0IGV4aXRHcmFjZWZ1bGx5KDEpO1xuICAgIH1cbn07XG4iLCAiaW1wb3J0IHtCb3gsIFRleHQsIHVzZUlucHV0fSBmcm9tICdpbmsnO1xuaW1wb3J0IHR5cGUge1JlYWN0Tm9kZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VTdGF0ZSwgdXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3Nob3VsZE9wZW5Ccm93c2VyLCBvcGVuVVJMfSBmcm9tICcuLi8uLi9hcHAvb3Blbi11cmwubWpzJztcbmltcG9ydCB7U3Bpbm5lcn0gZnJvbSAnLi9TcGlubmVyLmpzJztcblxudHlwZSBUTG9naW5TdGF0ZSA9XG4gICAgfCB7cmVhZG9ubHkga2luZDogJ2NyZWF0aW5nJ31cbiAgICB8IHtyZWFkb25seSBraW5kOiAnd2FpdGluZyc7IHJlYWRvbmx5IHVybDogc3RyaW5nfVxuICAgIHwge3JlYWRvbmx5IGtpbmQ6ICdjb25uZWN0ZWQnOyByZWFkb25seSBlbWFpbDogc3RyaW5nIHwgbnVsbH1cbiAgICB8IHtyZWFkb25seSBraW5kOiAnZXJyb3InOyByZWFkb25seSBtZXNzYWdlOiBzdHJpbmd9O1xuXG50eXBlIFRMb2dpblZpZXdQcm9wcyA9IHtcbiAgICByZWFkb25seSBzdGF0ZTogVExvZ2luU3RhdGU7XG59O1xuXG5jb25zdCBjYW5PcGVuID0gc2hvdWxkT3BlbkJyb3dzZXIoKTtcblxuZXhwb3J0IGNvbnN0IExvZ2luVmlldyA9ICh7c3RhdGV9OiBUTG9naW5WaWV3UHJvcHMpOiBSZWFjdE5vZGUgPT4ge1xuICAgIGNvbnN0IFtkb3RWaXNpYmxlLCBzZXREb3RWaXNpYmxlXSA9IHVzZVN0YXRlKHRydWUpO1xuICAgIGNvbnN0IFtvcGVuZWQsIHNldE9wZW5lZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoc3RhdGUua2luZCAhPT0gJ3dhaXRpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHNldERvdFZpc2libGUoKHByZXYpID0+ICFwcmV2KTtcbiAgICAgICAgfSwgNzUwKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH07XG4gICAgfSwgW3N0YXRlLmtpbmRdKTtcblxuICAgIHVzZUlucHV0KFxuICAgICAgICAoX2lucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkucmV0dXJuICYmIHN0YXRlLmtpbmQgPT09ICd3YWl0aW5nJykge1xuICAgICAgICAgICAgICAgIHNldE9wZW5lZCh0cnVlKTtcbiAgICAgICAgICAgICAgICBvcGVuVVJMKHN0YXRlLnVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtpc0FjdGl2ZTogc3RhdGUua2luZCA9PT0gJ3dhaXRpbmcnICYmIGNhbk9wZW59LFxuICAgICk7XG5cbiAgICBpZiAoc3RhdGUua2luZCA9PT0gJ2NyZWF0aW5nJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+TE9HSU46IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD5jcmVhdGluZyBzZXNzaW9uLi4uPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmtpbmQgPT09ICdlcnJvcicpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj5cdTI1Q0Y8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkxPR0lOOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJyZWRcIj57c3RhdGUubWVzc2FnZX08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUua2luZCA9PT0gJ2Nvbm5lY3RlZCcpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmVlblwiPlx1MjVDRjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD4gPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+TE9HSU46IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dD5sb2dnZWQgaW48L1RleHQ+XG4gICAgICAgICAgICAgICAge3N0YXRlLmVtYWlsID8gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQ+IGFzIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+e3N0YXRlLmVtYWlsfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmF5XCI+e2RvdFZpc2libGUgPyAnXHUyNUNGJyA6ICcgJ308L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQ+IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBib2xkPkxPR0lOPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94XG4gICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU9XCJzaW5nbGVcIlxuICAgICAgICAgICAgICAgIHBhZGRpbmdYPXsyfVxuICAgICAgICAgICAgICAgIHBhZGRpbmdZPXsxfVxuICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ9ezF9XG4gICAgICAgICAgICAgICAgYm9yZGVyRGltQ29sb3JcbiAgICAgICAgICAgICAgICB3aWR0aD17OTJ9XG4gICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxUZXh0IGJvbGQ+TG9naW4gdG8geW91ciBkYmN0eC5pbyBhY2NvdW50eydcXG4nfTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17J2N5YW4nfT57c3RhdGUudXJsfTwvVGV4dD5cbiAgICAgICAgICAgICAgICB7Y2FuT3BlbiA/IChcbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJncmF5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBQcmVzcyBFbnRlciB0byB7b3BlbmVkID8gJ3JlLW9wZW4nIDogJ29wZW4nfSBpbiBicm93c2VyXG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8VGV4dD57J1xcblxcbid9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgIDxTcGlubmVyIC8+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPldhaXRpbmcgZm9yIGFwcHJvdmFsIC4uLjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufTtcblxuZXhwb3J0IHR5cGUge1RMb2dpblN0YXRlfTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7OztBQUFBOzs7OztTQUFRLFNBQVE7QUFBaEIsSUFFTSxtQkE2QkEsV0E2QkEsV0FzQkEsbUJBV08sVUFlUCxXQUVBLFVBS0EsaUJBT0EsVUFhQSxXQU1BLFNBU0EsY0FTQSxZQVdBLGVBWUEsWUFFQSxhQU1BLFFBVU87QUF4TWI7OztBQUVBLElBQU0sb0JBQW9CLEVBQ3JCLE9BQU87TUFDSixNQUFNLEVBQUUsT0FBTTtNQUNkLFdBQVcsRUFB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QSxZQUFZLEtBQUs7QUFBQSxJQUNqQixvQkFBb0IsS0FBSztBQUFBLElBQ3pCLGtCQUFrQixLQUFLLElBQUksSUFBSSxnQkFBZ0I7QUFBQSxJQUMvQyxhQUFhO0FBQUEsRUFDakIsQ0FBQztBQUNELE9BQUssZUFBZSxNQUFNLEdBQUc7QUFDakM7QUFFQSxRQUFRLEdBQUcsVUFBVSxNQUFNLGVBQWUsUUFBUSxDQUFDO0FBQ25ELFFBQVEsR0FBRyxXQUFXLE1BQU0sZUFBZSxTQUFTLENBQUM7QUFFckQsUUFBUSxNQUFNOyIsCiAgIm5hbWVzIjogWyJyZW5kZXIiLCAiY3JlYXRlRWxlbWVudCIsICJFcnJvciIsICJCb3giLCAidXNlRWZmZWN0IiwgIm9ic2VydmVyIiwgIkJveCIsICJUZXh0IiwgIkJveCIsICJUZXh0IiwgImpzeCIsICJUZXh0IiwgInVzZVN0YXRlIiwgInVzZUVmZmVjdCIsICJqc3hzIiwgImpzeCIsICJqc3hzIiwgIkJveCIsICJUZXh0IiwgIkJveCIsICJUZXh0IiwgIm9ic2VydmVyIiwgInJ1bkluQWN0aW9uIiwgIkZyYWdtZW50IiwgImpzeCIsICJqc3hzIiwgIm9ic2VydmVyIiwgIkJveCIsICJUZXh0IiwgInJ1bkluQWN0aW9uIiwgIkJveCIsICJUZXh0IiwgInVzZVN0YXRlIiwgInVzZUVmZmVjdCIsICJvYnNlcnZlciIsICJqc3giLCAianN4cyIsICJvYnNlcnZlciIsICJCb3giLCAiVGV4dCIsICJ1c2VTdGF0ZSIsICJ1c2VFZmZlY3QiLCAiQm94IiwgIlRleHQiLCAidXNlSW5wdXQiLCAidXNlU3RhdGUiLCAidXNlRWZmZWN0IiwgIm9ic2VydmVyIiwgImpzeCIsICJqc3hzIiwgIm9ic2VydmVyIiwgInVzZVN0YXRlIiwgInVzZUVmZmVjdCIsICJ1c2VJbnB1dCIsICJCb3giLCAiVGV4dCIsICJCb3giLCAiVGV4dCIsICJ1c2VJbnB1dCIsICJvYnNlcnZlciIsICJydW5JbkFjdGlvbiIsICJqc3giLCAianN4cyIsICJvYnNlcnZlciIsICJ1c2VJbnB1dCIsICJydW5JbkFjdGlvbiIsICJCb3giLCAiVGV4dCIsICJCb3giLCAiVGV4dCIsICJvYnNlcnZlciIsICJydW5JbkFjdGlvbiIsICJCb3giLCAiVGV4dCIsICJ1c2VJbnB1dCIsICJ1c2VTdGF0ZSIsICJ1c2VFZmZlY3QiLCAianN4IiwgImpzeHMiLCAiQ1VSU09SX0lOVEVSVkFMIiwgInRvdGFsTGluZXMiLCAianN4IiwgImpzeHMiLCAib2JzZXJ2ZXIiLCAiQm94IiwgIlRleHQiLCAicnVuSW5BY3Rpb24iLCAiQm94IiwgIlRleHQiLCAib2JzZXJ2ZXIiLCAianN4IiwgImpzeHMiLCAib2JzZXJ2ZXIiLCAiQm94IiwgIlRleHQiLCAiQm94IiwgIlRleHQiLCAidXNlSW5wdXQiLCAidXNlU3RhdGUiLCAidXNlRWZmZWN0IiwgIm9ic2VydmVyIiwgImpzeCIsICJqc3hzIiwgImNhbk9wZW4iLCAib2JzZXJ2ZXIiLCAidXNlU3RhdGUiLCAidXNlRWZmZWN0IiwgInVzZUlucHV0IiwgIkJveCIsICJUZXh0IiwgIkJveCIsICJUZXh0IiwgInVzZUlucHV0IiwgIm9ic2VydmVyIiwgInJ1bkluQWN0aW9uIiwgIkZyYWdtZW50IiwgImpzeCIsICJqc3hzIiwgIkNvdW50c0xpbmUiLCAib2JzZXJ2ZXIiLCAiQm94IiwgIlRleHQiLCAidXNlSW5wdXQiLCAicnVuSW5BY3Rpb24iLCAiQm94IiwgIlRleHQiLCAib2JzZXJ2ZXIiLCAiRnJhZ21lbnQiLCAianN4IiwgImpzeHMiLCAiQm94IiwgIlRleHQiLCAib2JzZXJ2ZXIiLCAiQm94IiwgIlRleHQiLCAib2JzZXJ2ZXIiLCAianN4IiwgImpzeHMiLCAib2JzZXJ2ZXIiLCAiQm94IiwgIlRleHQiLCAiQm94IiwgIlRleHQiLCAib2JzZXJ2ZXIiLCAianN4IiwgImpzeHMiLCAib2JzZXJ2ZXIiLCAiQm94IiwgIlRleHQiLCAiQm94IiwgIlRleHQiLCAib2JzZXJ2ZXIiLCAidGVybWluYWxMaW5rIiwgImpzeCIsICJqc3hzIiwgIm9ic2VydmVyIiwgIkJveCIsICJUZXh0IiwgImNvdW50cyIsICJ0ZXJtaW5hbExpbmsiLCAiQm94IiwgIlRleHQiLCAianN4IiwgImpzeHMiLCAiQm94IiwgIlRleHQiLCAiQm94IiwgIlRleHQiLCAidXNlSW5wdXQiLCAib2JzZXJ2ZXIiLCAicnVuSW5BY3Rpb24iLCAiRnJhZ21lbnQiLCAianN4IiwgImpzeHMiLCAib2JzZXJ2ZXIiLCAidXNlSW5wdXQiLCAicnVuSW5BY3Rpb24iLCAianN4cyIsICJCb3giLCAianN4IiwgIlRleHQiLCAiRnJhZ21lbnQiLCAiRnJhZ21lbnQiLCAianN4IiwgImpzeHMiLCAib2JzZXJ2ZXIiLCAidXNlRWZmZWN0IiwgIkJveCIsICJydW5JbkFjdGlvbiIsICJwYXRoIiwgInJ1bkluQWN0aW9uIiwgImFyZ3MiLCAiZXhpc3RzU3luYyIsICJydW5JbkFjdGlvbiIsICJleGlzdHNTeW5jIiwgImhvbWVkaXIiLCAicnVuSW5BY3Rpb24iLCAicGF0aCIsICJyZXNvbHZlIiwgInJlYWRGaWxlU3luYyIsICJydW5JbkFjdGlvbiIsICJ3aGVuIiwgInNjb3BlIiwgInNjb3BlIiwgInJlYWRGaWxlU3luYyIsICJydW5JbkFjdGlvbiIsICJlcnJNc2ciLCAid2hlbiIsICJydW5JbkFjdGlvbiIsICJncm91cEJ5IiwgInZhbHVlcyIsICJyZWxhdGlvbnMiLCAicnVuSW5BY3Rpb24iLCAicnVuSW5BY3Rpb24iLCAicGF0aCIsICJyZWxhdGlvbnMiLCAicnVuSW5BY3Rpb24iLCAicnVuSW5BY3Rpb24iLCAiZXhpc3RzU3luYyIsICJ1c2VySW5mbyIsICJqb2luIiwgImVudiIsICJob3N0bmFtZSIsICJob21lZGlyIiwgImpvaW4iLCAicmVhZEZpbGUiLCAiZXhpc3RzU3luYyIsICJyZWFkRmlsZVN5bmMiLCAiaG9tZWRpciIsICJqb2luIiwgInV1aWR2NyIsICJ1dWlkdjciLCAiQ09ORklHX1BBVEgiLCAiam9pbiIsICJob21lZGlyIiwgImV4aXN0c1N5bmMiLCAicmVhZEZpbGVTeW5jIiwgInJlc29sdmUiLCAicnVuSW5BY3Rpb24iLCAicmVsYXRpb25zIiwgInJlc29sdmUiLCAiY3JlYXRlSGFzaCIsICJyZWFkRmlsZSIsICJta2RpciIsICJyZWFkZGlyIiwgInN0YXQiLCAiam9pbiIsICJQUXVldWUiLCAicnVuSW5BY3Rpb24iLCAid2hlbiIsICJ6IiwgIndyaXRlRmlsZSIsICJta2RpciIsICJqb2luIiwgInBhdGgiLCAieiIsICJjcmVhdGVIYXNoIiwgInBhdGgiLCAicmVhZEZpbGUiLCAic3RhdCIsICJydW5JbkFjdGlvbiIsICJta2RpciIsICJyZWFkZGlyIiwgIndoZW4iLCAiam9pbiIsICJQUXVldWUiLCAicmVsYXRpb24iLCAicnVuSW5BY3Rpb24iLCAicmVzb2x2ZSIsICJydW5JbkFjdGlvbiIsICJhcmdzIiwgIndoZW4iLCAicnVuSW5BY3Rpb24iLCAiZGF0YWJhc2VJbnRyb3NwZWN0aW9uU2NoZW1hIiwgImV4aXN0c1N5bmMiLCAiaG9zdG5hbWUiLCAicnVuSW5BY3Rpb24iLCAicnVuSW5BY3Rpb24iLCAid2hlbiIsICJydW5JbkFjdGlvbiIsICJ3aGVuIiwgInVzZVN0YXRlIiwgInVzZUVmZmVjdCIsICJCb3giLCAiVGV4dCIsICJ1c2VJbnB1dCIsICJ1c2VTdGF0ZSIsICJ1c2VFZmZlY3QiLCAiRnJhZ21lbnQiLCAianN4IiwgImpzeHMiLCAiY2FuT3BlbiIsICJ1c2VTdGF0ZSIsICJ1c2VFZmZlY3QiLCAidXNlSW5wdXQiLCAiQm94IiwgIlRleHQiLCAid2FpdEZvclRva2VuIiwgInJlc29sdmUiLCAidXNlU3RhdGUiLCAidXNlRWZmZWN0IiwgInNjb3BlIiwgInJlbmRlciIsICJjcmVhdGVFbGVtZW50IiwgInNjb3BlIiwgInBhdGgiLCAiRXJyb3IiLCAicnVuSW5BY3Rpb24iLCAic3ViY29tbWFuZCIsICJlbnYiXQp9Cg==
|