@pipeline-builder/pipeline-manager 3.4.95 → 3.4.97
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/agent/health.js
CHANGED
|
@@ -65,10 +65,10 @@ export async function waitHealthy(url, opts = {}) {
|
|
|
65
65
|
detail: `health OK, but /ready didn't pass within ${Math.round(readyGraceMs / 1000)}s — a backend service is likely down (check \`docker compose ps\` / its logs). Continuing; routes for that service may 502 until it's healthy.`,
|
|
66
66
|
};
|
|
67
67
|
}
|
|
68
|
-
opts.onTick?.(`
|
|
68
|
+
opts.onTick?.(`Health OK — waiting up to ${Math.ceil(leftMs / 1000)}s for ${url}/ready (dependencies warming up) …`);
|
|
69
69
|
}
|
|
70
70
|
else {
|
|
71
|
-
opts.onTick?.(`
|
|
71
|
+
opts.onTick?.(`Waiting for ${url}/health …`);
|
|
72
72
|
}
|
|
73
73
|
await delay(intervalMs);
|
|
74
74
|
}
|
|
@@ -104,4 +104,4 @@ export async function ensureMinikubeGateway(url, opts = {}) {
|
|
|
104
104
|
}
|
|
105
105
|
await delay(2000); // let it bind before the caller polls
|
|
106
106
|
}
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FnZW50L2hlYWx0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBZTFCOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQWdCLEVBQUUsTUFBK0I7SUFDL0UsSUFBSSxNQUFNLEtBQUssT0FBTyxJQUFJLE1BQU0sS0FBSyxVQUFVO1FBQUUsT0FBTyx3QkFBd0IsQ0FBQztJQUNqRixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzdCLE9BQU8sT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0NBQWdDO0FBRTlGLEtBQUssVUFBVSxLQUFLLENBQUMsR0FBVztJQUM5QixJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ25HLE9BQU8sR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDL0MsQ0FBQztJQUFDLE1B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Q1gsT0FBdUUsRUFBRTtJQUV6RSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLGtCQUFrQixDQUFDO0lBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0lBQy9CLElBQUksTUFBTSxLQUFLLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztRQUFFLE9BQU8sQ0FBQyxxQ0FBcUM7SUFDL0UsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLHdFQUF3RSxJQUFJLElBQUksSUFBSSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkgsSUFBSSxDQUFDO1FBQ0gsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFO1lBQzNFLFFBQVEsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLFFBQVE7U0FDaEIsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMscUVBQXFFO0lBQ25GLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsdUZBQXVGLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNySSxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsc0NBQXNDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBQb3N0LWRlcGxveSBoZWFsdGggdmVyaWZpY2F0aW9uLiBBIENsb3VkRm9ybWF0aW9uIENSRUFURV9DT01QTEVURSAob3IgYVxuICogZmluaXNoZWQgc2V0dXAuc2gpIGRvZXMgTk9UIG1lYW4gdGhlIGFwcCBpcyBzZXJ2aW5nIOKAlCB0aGUgQUxCIHRhcmdldHMgc3RheVxuICogdW5oZWFsdGh5IHVudGlsIHRhc2tzL3BvZHMgY29tZSB1cC4gVGhlIHJlYWwgZG9uZS1zaWduYWwgaXMgdGhlIHBsYXRmb3JtJ3NcbiAqIGAvaGVhbHRoYCArIGAvcmVhZHlgIGVuZHBvaW50cywgc28gdGhlIGV4ZWN1dG9yIHBvbGxzIHRoZW0gd2l0aCBiYWNrb2ZmLlxuICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB0eXBlIHsgVGFyZ2V0SWQgfSBmcm9tICcuL3RhcmdldHMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhlYWx0aFJlc3VsdCB7XG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICByZWFkb25seSBoZWFsdGh5OiBib29sZWFuO1xuICAvKipcbiAgICogVHJ1ZSBvbmx5IHdoZW4gQk9USCAvaGVhbHRoIGFuZCAvcmVhZHkgcGFzc2VkLiBEaXN0aW5ndWlzaGVzIGEgZnVsbHktcmVhZHlcbiAgICogcGxhdGZvcm0gZnJvbSB0aGUgZGVncmFkZWQgXCJoZWFsdGggT0sgYnV0IC9yZWFkeSBuZXZlciBjYW1lLCBwcm9jZWVkaW5nIGFueXdheVwiXG4gICAqIHN0YXRlIOKAlCBib3RoIGhhdmUgaGVhbHRoeTp0cnVlLCBzbyBjYWxsZXJzIHNob3VsZCBzdHlsZSBzdWNjZXNzIG9uIGByZWFkeWAuXG4gICAqL1xuICByZWFkb25seSByZWFkeTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGV0YWlsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVyaXZlIHRoZSBVUkwgdGhlIHBsYXRmb3JtIHNob3VsZCBiZSByZWFjaGFibGUgYXQuIExvY2FsL21pbmlrdWJlIGZyb250IHRoZVxuICogc3RhY2sgb24gbG9jYWxob3N0Ojg0NDM7IEVDMi9GYXJnYXRlIHVzZSB0aGUgZGVwbG95IGRvbWFpbi4gUmV0dXJucyBudWxsIHdoZW5cbiAqIGl0IGNhbid0IGJlIGRldGVybWluZWQgKGNhbGxlciBzdXJmYWNlcyBhIFwidmVyaWZ5IG1hbnVhbGx5XCIgbm90ZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVIZWFsdGhVcmwodGFyZ2V0OiBUYXJnZXRJZCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB8IG51bGwge1xuICBpZiAodGFyZ2V0ID09PSAnbG9jYWwnIHx8IHRhcmdldCA9PT0gJ21pbmlrdWJlJykgcmV0dXJuICdodHRwczovL2xvY2FsaG9zdDo4NDQzJztcbiAgY29uc3QgZG9tYWluID0gcGFyYW1zLmRvbWFpbjtcbiAgcmV0dXJuIHR5cGVvZiBkb21haW4gPT09ICdzdHJpbmcnICYmIGRvbWFpbiA/IGBodHRwczovLyR7ZG9tYWlufWAgOiBudWxsO1xufVxuXG5jb25zdCBhZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7IHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UgfSk7IC8vIGxvY2FsIHVzZXMgYSBzZWxmLXNpZ25lZCBjZXJ0XG5cbmFzeW5jIGZ1bmN0aW9uIHByb2JlKHVybDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MuZ2V0KHVybCwgeyB0aW1lb3V0OiA1MDAwLCBodHRwc0FnZW50OiBhZ2VudCwgdmFsaWRhdGVTdGF0dXM6ICgpID0+IHRydWUgfSk7XG4gICAgcmV0dXJuIHJlcy5zdGF0dXMgPj0gMjAwICYmIHJlcy5zdGF0dXMgPCAzMDA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5jb25zdCBkZWxheSA9IChtczogbnVtYmVyKSA9PiBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xuXG4vKipcbiAqIFBvbGwgYDx1cmw+L2hlYWx0aGAgdGhlbiBgPHVybD4vcmVhZHlgIHVudGlsIGJvdGggcGFzcyBvciB0aGUgdGltZW91dCBlbGFwc2VzLlxuICogTm9uLWZhdGFsIGJ5IGRlc2lnbjogYSB0aW1lb3V0IHJldHVybnMgYGhlYWx0aHk6IGZhbHNlYCB3aXRoIGd1aWRhbmNlLCBuZXZlciB0aHJvd3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0SGVhbHRoeShcbiAgdXJsOiBzdHJpbmcsXG4gIG9wdHM6IHsgdGltZW91dE1zPzogbnVtYmVyOyBpbnRlcnZhbE1zPzogbnVtYmVyOyByZWFkeUdyYWNlTXM/OiBudW1iZXI7IG9uVGljaz86IChtc2c6IHN0cmluZykgPT4gdm9pZCB9ID0ge30sXG4pOiBQcm9taXNlPEhlYWx0aFJlc3VsdD4ge1xuICBjb25zdCB0aW1lb3V0TXMgPSBvcHRzLnRpbWVvdXRNcyA/PyAzMDBfMDAwOyAvLyA1IG1pbiDigJQgc2VydmljZXMgY29tZSB1cCBhc3luY1xuICBjb25zdCBpbnRlcnZhbE1zID0gb3B0cy5pbnRlcnZhbE1zID8/IDEwXzAwMDtcbiAgLy8gT25jZSAvaGVhbHRoIGlzIHVwLCBvbmx5IHdhaXQgdGhpcyBtdWNoIGxvbmdlciBmb3IgL3JlYWR5IGJlZm9yZSBwcm9jZWVkaW5nLlxuICBjb25zdCByZWFkeUdyYWNlTXMgPSBvcHRzLnJlYWR5R3JhY2VNcyA/PyA5MF8wMDA7IC8vIDkwcyBjb3ZlcnMgbm9ybWFsIHdhcm11cFxuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyB0aW1lb3V0TXM7XG5cbiAgLy8gV2FpdCBmb3IgL2hlYWx0aCwgdGhlbiBnaXZlIC9yZWFkeSBhIEJPVU5ERUQgZ3JhY2Ugd2luZG93LiAvaGVhbHRoIGZsaXBzIGZpcnN0XG4gIC8vICh0aGUgcHJvY2VzcyBpcyB1cCk7IC9yZWFkeSBhbHNvIHJlcXVpcmVzIGV2ZXJ5IGJhY2tlbmQgZGVwZW5kZW5jeSB0byBiZSB1cC5cbiAgLy8gV2UgcHJlZmVyIC9yZWFkeSAocG9zdC1pbnN0YWxsIHJlZ2lzdGVyIGhpdHMgYSBub3QteWV0LXJlYWR5IHBsYXRmb3JtIOKGkiA1MDIpLFxuICAvLyBidXQgaWYgYSBkZXBlbmRlbmN5IGlzIERPV04gKGUuZy4gYSBjcmFzaC1sb29waW5nIHNlcnZpY2UpIC9yZWFkeSBuZXZlciBmbGlwcyDigJRcbiAgLy8gc28gd2UgbXVzdCBub3QgYmxvY2sgdGhlIGZ1bGwgdGltZW91dCBvbiBpdC4gT25jZSAvaGVhbHRoIGlzIHVwIHdlIHdhaXQgYXQgbW9zdFxuICAvLyBgcmVhZHlHcmFjZU1zYCBtb3JlLCB0aGVuIHByb2NlZWQgd2l0aCBhIHdhcm5pbmcgKHJlZ2lzdGVyIG9ubHkgbmVlZHMgdGhlXG4gIC8vIHBsYXRmb3JtIHNlcnZpY2UsIHdoaWNoIC9oZWFsdGggYWxyZWFkeSBjb25maXJtcyBpcyB1cCkuXG4gIGxldCBoZWFsdGhTZWVuQXQgPSAwO1xuICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgaWYgKGF3YWl0IHByb2JlKGAke3VybH0vaGVhbHRoYCkpIHtcbiAgICAgIGlmIChoZWFsdGhTZWVuQXQgPT09IDApIGhlYWx0aFNlZW5BdCA9IERhdGUubm93KCk7XG4gICAgICBpZiAoYXdhaXQgcHJvYmUoYCR7dXJsfS9yZWFkeWApKSB7XG4gICAgICAgIHJldHVybiB7IHVybCwgaGVhbHRoeTogdHJ1ZSwgcmVhZHk6IHRydWUsIGRldGFpbDogJ2hlYWx0aCArIHJlYWR5IE9LJyB9O1xuICAgICAgfVxuICAgICAgY29uc3QgbGVmdE1zID0gcmVhZHlHcmFjZU1zIC0gKERhdGUubm93KCkgLSBoZWFsdGhTZWVuQXQpO1xuICAgICAgaWYgKGxlZnRNcyA8PSAwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGhlYWx0aHk6IHRydWUsXG4gICAgICAgICAgcmVhZHk6IGZhbHNlLFxuICAgICAgICAgIGRldGFpbDogYGhlYWx0aCBPSywgYnV0IC9yZWFkeSBkaWRuJ3QgcGFzcyB3aXRoaW4gJHtNYXRoLnJvdW5kKHJlYWR5R3JhY2VNcyAvIDEwMDApfXMg4oCUIGEgYmFja2VuZCBzZXJ2aWNlIGlzIGxpa2VseSBkb3duIChjaGVjayBcXGBkb2NrZXIgY29tcG9zZSBwc1xcYCAvIGl0cyBsb2dzKS4gQ29udGludWluZzsgcm91dGVzIGZvciB0aGF0IHNlcnZpY2UgbWF5IDUwMiB1bnRpbCBpdCdzIGhlYWx0aHkuYCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIG9wdHMub25UaWNrPy4oYGhlYWx0aCBPSyDigJQgd2FpdGluZyB1cCB0byAke01hdGguY2VpbChsZWZ0TXMgLyAxMDAwKX1zIGZvciAke3VybH0vcmVhZHkgKGRlcGVuZGVuY2llcyB3YXJtaW5nIHVwKSDigKZgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0cy5vblRpY2s/Lihgd2FpdGluZyBmb3IgJHt1cmx9L2hlYWx0aCDigKZgKTtcbiAgICB9XG4gICAgYXdhaXQgZGVsYXkoaW50ZXJ2YWxNcyk7XG4gIH1cbiAgLy8gT3ZlcmFsbCB0aW1lb3V0LiBJZiAvaGVhbHRoIGNhbWUgdXAgYnV0IC9yZWFkeSBuZXZlciBkaWQsIHByb2NlZWQgKG5vbi1mYXRhbCkuXG4gIHJldHVybiBoZWFsdGhTZWVuQXQgPiAwXG4gICAgPyB7IHVybCwgaGVhbHRoeTogdHJ1ZSwgcmVhZHk6IGZhbHNlLCBkZXRhaWw6ICdoZWFsdGggT0sgYnV0IC9yZWFkeSBub3QgcmVhY2hlZCDigJQgdGhlIHBsYXRmb3JtIGlzIHN0aWxsIHdhcm1pbmcgdXA7IHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIpIG1heSBuZWVkIGEgcmUtcnVuJyB9XG4gICAgOiB7IHVybCwgaGVhbHRoeTogZmFsc2UsIHJlYWR5OiBmYWxzZSwgZGV0YWlsOiBgbm90IHJlYWNoYWJsZSB3aXRoaW4gJHtNYXRoLnJvdW5kKHRpbWVvdXRNcyAvIDEwMDApfXMg4oCUIGNoZWNrIHRoZSBzdGFjayAvIEROUyAvIGhlYWx0aCBsb2dzYCB9O1xufVxuXG4vKipcbiAqIE1pbmlrdWJlIG9ubHk6IHRoZSBnYXRld2F5IChodHRwczovL2xvY2FsaG9zdDo4NDQzKSBpcyByZWFjaGVkIHRocm91Z2ggYVxuICogYGt1YmVjdGwgcG9ydC1mb3J3YXJkIHN2Yy9uZ2lueGAgdGhhdCBzZXR1cC5zaCBiYWNrZ3JvdW5kcyDigJQgd2hpY2ggY2FuIGRpZSBvclxuICogZmFpbCB0byBiaW5kIChlLmcuIGEgYnVzeSBwb3J0KSB3aGlsZSB0aGUgcG9kcyBzdGF5IGhlYWx0aHksIGxlYXZpbmcgdGhlIGdhdGV3YXlcbiAqIHVucmVhY2hhYmxlIHNvIHRoZSBoZWFsdGggcG9sbCBqdXN0IHRpbWVzIG91dC4gQmVmb3JlIHBvbGxpbmcsIHByb2JlIHRoZSBnYXRld2F5O1xuICogaWYgaXQncyBkb3duLCAocmUpc3RhcnQgdGhlIGZvcndhcmQgREVUQUNIRUQgc28gaXQgb3V0bGl2ZXMgdGhpcyBDTEksIHRoZW4gZ2l2ZVxuICogaXQgYSBtb21lbnQgdG8gYmluZC4gQmVzdC1lZmZvcnQ6IG5ldmVyIHRocm93czsgb24gbm8ta3ViZWN0bCBpdCBsb2dzIHRoZSBtYW51YWxcbiAqIGNvbW1hbmQuIChzZXR1cC5zaCBub3cgZm9yd2FyZHMgODQ0MyBvbmx5LCBzbyBhIGJ1c3kgODA4MCBjYW4ndCB0YWtlIGl0IGRvd24uKVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTWluaWt1YmVHYXRld2F5KFxuICB1cmw6IHN0cmluZyxcbiAgb3B0czogeyBucz86IHN0cmluZzsgcG9ydD86IG51bWJlcjsgb25JbmZvPzogKG1zZzogc3RyaW5nKSA9PiB2b2lkIH0gPSB7fSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBucyA9IG9wdHMubnMgPz8gJ3BpcGVsaW5lLWJ1aWxkZXInO1xuICBjb25zdCBwb3J0ID0gb3B0cy5wb3J0ID8/IDg0NDM7XG4gIGlmIChhd2FpdCBwcm9iZShgJHt1cmx9L2hlYWx0aGApKSByZXR1cm47IC8vIGZvcndhcmQgYWxyZWFkeSB1cCDigJQgbm90aGluZyB0byBkb1xuICBvcHRzLm9uSW5mbz8uKGBHYXRld2F5IHVucmVhY2hhYmxlIOKAlCAocmUpc3RhcnRpbmcgdGhlIG5naW54IHBvcnQtZm9yd2FyZCAoc3ZjL25naW54ICR7cG9ydH06JHtwb3J0fSwgbnMgJHtuc30pIOKApmApO1xuICB0cnkge1xuICAgIHNwYXduKCdrdWJlY3RsJywgWydwb3J0LWZvcndhcmQnLCAnLW4nLCBucywgJ3N2Yy9uZ2lueCcsIGAke3BvcnR9OiR7cG9ydH1gXSwge1xuICAgICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgICBzdGRpbzogJ2lnbm9yZScsXG4gICAgfSkudW5yZWYoKTsgLy8gZGV0YWNoZWQgKyB1bnJlZiDihpIgc3Vydml2ZXMgdGhpcyBDTEkgc28gdGhlIHVzZXIga2VlcHMgdGhlIGdhdGV3YXlcbiAgfSBjYXRjaCB7XG4gICAgb3B0cy5vbkluZm8/LihgQ291bGRuJ3Qgc3RhcnQgaXQgKGlzIGt1YmVjdGwgb24gUEFUSD8pLiBTdGFydCBpdCBtYW51YWxseToga3ViZWN0bCBwb3J0LWZvcndhcmQgLW4gJHtuc30gc3ZjL25naW54ICR7cG9ydH06JHtwb3J0fWApO1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBkZWxheSgyMDAwKTsgLy8gbGV0IGl0IGJpbmQgYmVmb3JlIHRoZSBjYWxsZXIgcG9sbHNcbn1cbiJdfQ==
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FnZW50L2hlYWx0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBZTFCOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQWdCLEVBQUUsTUFBK0I7SUFDL0UsSUFBSSxNQUFNLEtBQUssT0FBTyxJQUFJLE1BQU0sS0FBSyxVQUFVO1FBQUUsT0FBTyx3QkFBd0IsQ0FBQztJQUNqRixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzdCLE9BQU8sT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0NBQWdDO0FBRTlGLEtBQUssVUFBVSxLQUFLLENBQUMsR0FBVztJQUM5QixJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ25HLE9BQU8sR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDL0MsQ0FBQztJQUFDLE1B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Q1gsT0FBdUUsRUFBRTtJQUV6RSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLGtCQUFrQixDQUFDO0lBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0lBQy9CLElBQUksTUFBTSxLQUFLLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztRQUFFLE9BQU8sQ0FBQyxxQ0FBcUM7SUFDL0UsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLHdFQUF3RSxJQUFJLElBQUksSUFBSSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkgsSUFBSSxDQUFDO1FBQ0gsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFO1lBQzNFLFFBQVEsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLFFBQVE7U0FDaEIsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMscUVBQXFFO0lBQ25GLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsdUZBQXVGLEVBQUUsY0FBYyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNySSxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsc0NBQXNDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBQb3N0LWRlcGxveSBoZWFsdGggdmVyaWZpY2F0aW9uLiBBIENsb3VkRm9ybWF0aW9uIENSRUFURV9DT01QTEVURSAob3IgYVxuICogZmluaXNoZWQgc2V0dXAuc2gpIGRvZXMgTk9UIG1lYW4gdGhlIGFwcCBpcyBzZXJ2aW5nIOKAlCB0aGUgQUxCIHRhcmdldHMgc3RheVxuICogdW5oZWFsdGh5IHVudGlsIHRhc2tzL3BvZHMgY29tZSB1cC4gVGhlIHJlYWwgZG9uZS1zaWduYWwgaXMgdGhlIHBsYXRmb3JtJ3NcbiAqIGAvaGVhbHRoYCArIGAvcmVhZHlgIGVuZHBvaW50cywgc28gdGhlIGV4ZWN1dG9yIHBvbGxzIHRoZW0gd2l0aCBiYWNrb2ZmLlxuICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB0eXBlIHsgVGFyZ2V0SWQgfSBmcm9tICcuL3RhcmdldHMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhlYWx0aFJlc3VsdCB7XG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICByZWFkb25seSBoZWFsdGh5OiBib29sZWFuO1xuICAvKipcbiAgICogVHJ1ZSBvbmx5IHdoZW4gQk9USCAvaGVhbHRoIGFuZCAvcmVhZHkgcGFzc2VkLiBEaXN0aW5ndWlzaGVzIGEgZnVsbHktcmVhZHlcbiAgICogcGxhdGZvcm0gZnJvbSB0aGUgZGVncmFkZWQgXCJoZWFsdGggT0sgYnV0IC9yZWFkeSBuZXZlciBjYW1lLCBwcm9jZWVkaW5nIGFueXdheVwiXG4gICAqIHN0YXRlIOKAlCBib3RoIGhhdmUgaGVhbHRoeTp0cnVlLCBzbyBjYWxsZXJzIHNob3VsZCBzdHlsZSBzdWNjZXNzIG9uIGByZWFkeWAuXG4gICAqL1xuICByZWFkb25seSByZWFkeTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGV0YWlsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVyaXZlIHRoZSBVUkwgdGhlIHBsYXRmb3JtIHNob3VsZCBiZSByZWFjaGFibGUgYXQuIExvY2FsL21pbmlrdWJlIGZyb250IHRoZVxuICogc3RhY2sgb24gbG9jYWxob3N0Ojg0NDM7IEVDMi9GYXJnYXRlIHVzZSB0aGUgZGVwbG95IGRvbWFpbi4gUmV0dXJucyBudWxsIHdoZW5cbiAqIGl0IGNhbid0IGJlIGRldGVybWluZWQgKGNhbGxlciBzdXJmYWNlcyBhIFwidmVyaWZ5IG1hbnVhbGx5XCIgbm90ZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVIZWFsdGhVcmwodGFyZ2V0OiBUYXJnZXRJZCwgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB8IG51bGwge1xuICBpZiAodGFyZ2V0ID09PSAnbG9jYWwnIHx8IHRhcmdldCA9PT0gJ21pbmlrdWJlJykgcmV0dXJuICdodHRwczovL2xvY2FsaG9zdDo4NDQzJztcbiAgY29uc3QgZG9tYWluID0gcGFyYW1zLmRvbWFpbjtcbiAgcmV0dXJuIHR5cGVvZiBkb21haW4gPT09ICdzdHJpbmcnICYmIGRvbWFpbiA/IGBodHRwczovLyR7ZG9tYWlufWAgOiBudWxsO1xufVxuXG5jb25zdCBhZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7IHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UgfSk7IC8vIGxvY2FsIHVzZXMgYSBzZWxmLXNpZ25lZCBjZXJ0XG5cbmFzeW5jIGZ1bmN0aW9uIHByb2JlKHVybDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MuZ2V0KHVybCwgeyB0aW1lb3V0OiA1MDAwLCBodHRwc0FnZW50OiBhZ2VudCwgdmFsaWRhdGVTdGF0dXM6ICgpID0+IHRydWUgfSk7XG4gICAgcmV0dXJuIHJlcy5zdGF0dXMgPj0gMjAwICYmIHJlcy5zdGF0dXMgPCAzMDA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5jb25zdCBkZWxheSA9IChtczogbnVtYmVyKSA9PiBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xuXG4vKipcbiAqIFBvbGwgYDx1cmw+L2hlYWx0aGAgdGhlbiBgPHVybD4vcmVhZHlgIHVudGlsIGJvdGggcGFzcyBvciB0aGUgdGltZW91dCBlbGFwc2VzLlxuICogTm9uLWZhdGFsIGJ5IGRlc2lnbjogYSB0aW1lb3V0IHJldHVybnMgYGhlYWx0aHk6IGZhbHNlYCB3aXRoIGd1aWRhbmNlLCBuZXZlciB0aHJvd3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0SGVhbHRoeShcbiAgdXJsOiBzdHJpbmcsXG4gIG9wdHM6IHsgdGltZW91dE1zPzogbnVtYmVyOyBpbnRlcnZhbE1zPzogbnVtYmVyOyByZWFkeUdyYWNlTXM/OiBudW1iZXI7IG9uVGljaz86IChtc2c6IHN0cmluZykgPT4gdm9pZCB9ID0ge30sXG4pOiBQcm9taXNlPEhlYWx0aFJlc3VsdD4ge1xuICBjb25zdCB0aW1lb3V0TXMgPSBvcHRzLnRpbWVvdXRNcyA/PyAzMDBfMDAwOyAvLyA1IG1pbiDigJQgc2VydmljZXMgY29tZSB1cCBhc3luY1xuICBjb25zdCBpbnRlcnZhbE1zID0gb3B0cy5pbnRlcnZhbE1zID8/IDEwXzAwMDtcbiAgLy8gT25jZSAvaGVhbHRoIGlzIHVwLCBvbmx5IHdhaXQgdGhpcyBtdWNoIGxvbmdlciBmb3IgL3JlYWR5IGJlZm9yZSBwcm9jZWVkaW5nLlxuICBjb25zdCByZWFkeUdyYWNlTXMgPSBvcHRzLnJlYWR5R3JhY2VNcyA/PyA5MF8wMDA7IC8vIDkwcyBjb3ZlcnMgbm9ybWFsIHdhcm11cFxuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyB0aW1lb3V0TXM7XG5cbiAgLy8gV2FpdCBmb3IgL2hlYWx0aCwgdGhlbiBnaXZlIC9yZWFkeSBhIEJPVU5ERUQgZ3JhY2Ugd2luZG93LiAvaGVhbHRoIGZsaXBzIGZpcnN0XG4gIC8vICh0aGUgcHJvY2VzcyBpcyB1cCk7IC9yZWFkeSBhbHNvIHJlcXVpcmVzIGV2ZXJ5IGJhY2tlbmQgZGVwZW5kZW5jeSB0byBiZSB1cC5cbiAgLy8gV2UgcHJlZmVyIC9yZWFkeSAocG9zdC1pbnN0YWxsIHJlZ2lzdGVyIGhpdHMgYSBub3QteWV0LXJlYWR5IHBsYXRmb3JtIOKGkiA1MDIpLFxuICAvLyBidXQgaWYgYSBkZXBlbmRlbmN5IGlzIERPV04gKGUuZy4gYSBjcmFzaC1sb29waW5nIHNlcnZpY2UpIC9yZWFkeSBuZXZlciBmbGlwcyDigJRcbiAgLy8gc28gd2UgbXVzdCBub3QgYmxvY2sgdGhlIGZ1bGwgdGltZW91dCBvbiBpdC4gT25jZSAvaGVhbHRoIGlzIHVwIHdlIHdhaXQgYXQgbW9zdFxuICAvLyBgcmVhZHlHcmFjZU1zYCBtb3JlLCB0aGVuIHByb2NlZWQgd2l0aCBhIHdhcm5pbmcgKHJlZ2lzdGVyIG9ubHkgbmVlZHMgdGhlXG4gIC8vIHBsYXRmb3JtIHNlcnZpY2UsIHdoaWNoIC9oZWFsdGggYWxyZWFkeSBjb25maXJtcyBpcyB1cCkuXG4gIGxldCBoZWFsdGhTZWVuQXQgPSAwO1xuICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgaWYgKGF3YWl0IHByb2JlKGAke3VybH0vaGVhbHRoYCkpIHtcbiAgICAgIGlmIChoZWFsdGhTZWVuQXQgPT09IDApIGhlYWx0aFNlZW5BdCA9IERhdGUubm93KCk7XG4gICAgICBpZiAoYXdhaXQgcHJvYmUoYCR7dXJsfS9yZWFkeWApKSB7XG4gICAgICAgIHJldHVybiB7IHVybCwgaGVhbHRoeTogdHJ1ZSwgcmVhZHk6IHRydWUsIGRldGFpbDogJ2hlYWx0aCArIHJlYWR5IE9LJyB9O1xuICAgICAgfVxuICAgICAgY29uc3QgbGVmdE1zID0gcmVhZHlHcmFjZU1zIC0gKERhdGUubm93KCkgLSBoZWFsdGhTZWVuQXQpO1xuICAgICAgaWYgKGxlZnRNcyA8PSAwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGhlYWx0aHk6IHRydWUsXG4gICAgICAgICAgcmVhZHk6IGZhbHNlLFxuICAgICAgICAgIGRldGFpbDogYGhlYWx0aCBPSywgYnV0IC9yZWFkeSBkaWRuJ3QgcGFzcyB3aXRoaW4gJHtNYXRoLnJvdW5kKHJlYWR5R3JhY2VNcyAvIDEwMDApfXMg4oCUIGEgYmFja2VuZCBzZXJ2aWNlIGlzIGxpa2VseSBkb3duIChjaGVjayBcXGBkb2NrZXIgY29tcG9zZSBwc1xcYCAvIGl0cyBsb2dzKS4gQ29udGludWluZzsgcm91dGVzIGZvciB0aGF0IHNlcnZpY2UgbWF5IDUwMiB1bnRpbCBpdCdzIGhlYWx0aHkuYCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIG9wdHMub25UaWNrPy4oYEhlYWx0aCBPSyDigJQgd2FpdGluZyB1cCB0byAke01hdGguY2VpbChsZWZ0TXMgLyAxMDAwKX1zIGZvciAke3VybH0vcmVhZHkgKGRlcGVuZGVuY2llcyB3YXJtaW5nIHVwKSDigKZgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0cy5vblRpY2s/LihgV2FpdGluZyBmb3IgJHt1cmx9L2hlYWx0aCDigKZgKTtcbiAgICB9XG4gICAgYXdhaXQgZGVsYXkoaW50ZXJ2YWxNcyk7XG4gIH1cbiAgLy8gT3ZlcmFsbCB0aW1lb3V0LiBJZiAvaGVhbHRoIGNhbWUgdXAgYnV0IC9yZWFkeSBuZXZlciBkaWQsIHByb2NlZWQgKG5vbi1mYXRhbCkuXG4gIHJldHVybiBoZWFsdGhTZWVuQXQgPiAwXG4gICAgPyB7IHVybCwgaGVhbHRoeTogdHJ1ZSwgcmVhZHk6IGZhbHNlLCBkZXRhaWw6ICdoZWFsdGggT0sgYnV0IC9yZWFkeSBub3QgcmVhY2hlZCDigJQgdGhlIHBsYXRmb3JtIGlzIHN0aWxsIHdhcm1pbmcgdXA7IHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIpIG1heSBuZWVkIGEgcmUtcnVuJyB9XG4gICAgOiB7IHVybCwgaGVhbHRoeTogZmFsc2UsIHJlYWR5OiBmYWxzZSwgZGV0YWlsOiBgbm90IHJlYWNoYWJsZSB3aXRoaW4gJHtNYXRoLnJvdW5kKHRpbWVvdXRNcyAvIDEwMDApfXMg4oCUIGNoZWNrIHRoZSBzdGFjayAvIEROUyAvIGhlYWx0aCBsb2dzYCB9O1xufVxuXG4vKipcbiAqIE1pbmlrdWJlIG9ubHk6IHRoZSBnYXRld2F5IChodHRwczovL2xvY2FsaG9zdDo4NDQzKSBpcyByZWFjaGVkIHRocm91Z2ggYVxuICogYGt1YmVjdGwgcG9ydC1mb3J3YXJkIHN2Yy9uZ2lueGAgdGhhdCBzZXR1cC5zaCBiYWNrZ3JvdW5kcyDigJQgd2hpY2ggY2FuIGRpZSBvclxuICogZmFpbCB0byBiaW5kIChlLmcuIGEgYnVzeSBwb3J0KSB3aGlsZSB0aGUgcG9kcyBzdGF5IGhlYWx0aHksIGxlYXZpbmcgdGhlIGdhdGV3YXlcbiAqIHVucmVhY2hhYmxlIHNvIHRoZSBoZWFsdGggcG9sbCBqdXN0IHRpbWVzIG91dC4gQmVmb3JlIHBvbGxpbmcsIHByb2JlIHRoZSBnYXRld2F5O1xuICogaWYgaXQncyBkb3duLCAocmUpc3RhcnQgdGhlIGZvcndhcmQgREVUQUNIRUQgc28gaXQgb3V0bGl2ZXMgdGhpcyBDTEksIHRoZW4gZ2l2ZVxuICogaXQgYSBtb21lbnQgdG8gYmluZC4gQmVzdC1lZmZvcnQ6IG5ldmVyIHRocm93czsgb24gbm8ta3ViZWN0bCBpdCBsb2dzIHRoZSBtYW51YWxcbiAqIGNvbW1hbmQuIChzZXR1cC5zaCBub3cgZm9yd2FyZHMgODQ0MyBvbmx5LCBzbyBhIGJ1c3kgODA4MCBjYW4ndCB0YWtlIGl0IGRvd24uKVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTWluaWt1YmVHYXRld2F5KFxuICB1cmw6IHN0cmluZyxcbiAgb3B0czogeyBucz86IHN0cmluZzsgcG9ydD86IG51bWJlcjsgb25JbmZvPzogKG1zZzogc3RyaW5nKSA9PiB2b2lkIH0gPSB7fSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBucyA9IG9wdHMubnMgPz8gJ3BpcGVsaW5lLWJ1aWxkZXInO1xuICBjb25zdCBwb3J0ID0gb3B0cy5wb3J0ID8/IDg0NDM7XG4gIGlmIChhd2FpdCBwcm9iZShgJHt1cmx9L2hlYWx0aGApKSByZXR1cm47IC8vIGZvcndhcmQgYWxyZWFkeSB1cCDigJQgbm90aGluZyB0byBkb1xuICBvcHRzLm9uSW5mbz8uKGBHYXRld2F5IHVucmVhY2hhYmxlIOKAlCAocmUpc3RhcnRpbmcgdGhlIG5naW54IHBvcnQtZm9yd2FyZCAoc3ZjL25naW54ICR7cG9ydH06JHtwb3J0fSwgbnMgJHtuc30pIOKApmApO1xuICB0cnkge1xuICAgIHNwYXduKCdrdWJlY3RsJywgWydwb3J0LWZvcndhcmQnLCAnLW4nLCBucywgJ3N2Yy9uZ2lueCcsIGAke3BvcnR9OiR7cG9ydH1gXSwge1xuICAgICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgICBzdGRpbzogJ2lnbm9yZScsXG4gICAgfSkudW5yZWYoKTsgLy8gZGV0YWNoZWQgKyB1bnJlZiDihpIgc3Vydml2ZXMgdGhpcyBDTEkgc28gdGhlIHVzZXIga2VlcHMgdGhlIGdhdGV3YXlcbiAgfSBjYXRjaCB7XG4gICAgb3B0cy5vbkluZm8/LihgQ291bGRuJ3Qgc3RhcnQgaXQgKGlzIGt1YmVjdGwgb24gUEFUSD8pLiBTdGFydCBpdCBtYW51YWxseToga3ViZWN0bCBwb3J0LWZvcndhcmQgLW4gJHtuc30gc3ZjL25naW54ICR7cG9ydH06JHtwb3J0fWApO1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBkZWxheSgyMDAwKTsgLy8gbGV0IGl0IGJpbmQgYmVmb3JlIHRoZSBjYWxsZXIgcG9sbHNcbn1cbiJdfQ==
|
|
@@ -592,7 +592,7 @@ export function provision(program) {
|
|
|
592
592
|
for (const s of postSteps)
|
|
593
593
|
printInfo(`• ${s.label}\n ${s.command}`);
|
|
594
594
|
for (const s of skippedSteps)
|
|
595
|
-
printWarning(`
|
|
595
|
+
printWarning(`Skipped ${s.id}: ${s.reason}`);
|
|
596
596
|
}
|
|
597
597
|
// 6. Any missing required prereq that's a single static binary (e.g. yq)
|
|
598
598
|
// can be fetched into the tools cache instead of a system install — no
|
|
@@ -706,4 +706,4 @@ export function provision(program) {
|
|
|
706
706
|
}
|
|
707
707
|
});
|
|
708
708
|
}
|
|
709
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxRQUFRLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQXNCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlHLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixjQUFjLEVBQ2QsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEdBR2hCLE1BQU0scUJB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QyxDQUFDO1lBQ3RGLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLFdBQVc7WUFBRSxNQUFNO1FBRWxDLHVFQUF1RTtRQUN2RSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RyxJQUFJLEdBQUcsRUFBRSxRQUFRLElBQUksTUFBTSxPQUFPLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkcsU0FBUyxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckUsU0FBUztRQUNYLENBQUM7UUFDRCxtRkFBbUY7UUFDbkYsSUFBSSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxPQUFPLENBQUMscUVBQXFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZKLFNBQVM7UUFDWCxDQUFDO1FBQ0QsTUFBTTtJQUNSLENBQUM7SUFDRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FB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TSxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNyRyxDQUFDO1lBRUQsZ0ZBQWdGO1lBQ2hGLCtFQUErRTtZQUMvRSxnRkFBZ0Y7WUFDaEYsTUFBTSxZQUFZLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQ3JILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFO2dCQUN0QyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUs7Z0JBQzNCLElBQUksRUFBRSxJQUFJO2dCQUNWLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFO2FBQy9DLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCBleGlzdHNTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0ICogYXMgcmVhZGxpbmUgZnJvbSAnbm9kZTpyZWFkbGluZS9wcm9taXNlcyc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGRpYWdub3NlRmFpbHVyZSwgaXNBaUNvbmZpZ3VyZWQsIHBhcnNlR29hbCB9IGZyb20gJy4uL2FnZW50L2FpLmpzJztcbmltcG9ydCB7IGJvb3RzdHJhcENvbW1hbmQsIHJlc29sdmVCb290c3RyYXAsIHR5cGUgQm9vdHN0cmFwU3BlYyB9IGZyb20gJy4uL2FnZW50L2Jvb3RzdHJhcC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVFbnZGaWxlLCBlbnZGaWxlTWlzc2luZyB9IGZyb20gJy4uL2FnZW50L2Vudi1maWxlLmpzJztcbmltcG9ydCB7IGVudHJ5cG9pbnRFeGlzdHMsIGV4ZWN1dGlvbkJsb2NrZWQsIHJ1blNjcmlwdCB9IGZyb20gJy4uL2FnZW50L2V4ZWN1dG9yLmpzJztcbmltcG9ydCB7IGRlcml2ZUhlYWx0aFVybCwgd2FpdEhlYWx0aHksIGVuc3VyZU1pbmlrdWJlR2F0ZXdheSB9IGZyb20gJy4uL2FnZW50L2hlYWx0aC5qcyc7XG5pbXBvcnQgeyBjaGVja0hvc3RQb3J0cywgZGlzY292ZXJIb3N0UG9ydHMsIHN0YWNrUnVubmluZyB9IGZyb20gJy4uL2FnZW50L3BvcnRzLmpzJztcbmltcG9ydCB7IHJlc29sdmVQb3N0U3RlcHMsIHR5cGUgUG9zdFN0ZXAsIHR5cGUgU2tpcHBlZFN0ZXAgfSBmcm9tICcuLi9hZ2VudC9wb3N0LXN0ZXBzLmpzJztcbmltcG9ydCB7IGNoZWNrUHJlcmVxcywgZ2l0QXZhaWxhYmxlLCBnaXRTdXBwb3J0c1NwYXJzZUNoZWNrb3V0LCBwcmVyZXFzU2F0aXNmaWVkIH0gZnJvbSAnLi4vYWdlbnQvcHJlcmVxcy5qcyc7XG5pbXBvcnQge1xuICBhc3NlbWJsZUNvbW1hbmQsXG4gIGlzVGFyZ2V0SWQsXG4gIExPQURfU1RFUFMsXG4gIHNwYXJzZVBhdGhzRm9yLFxuICBUQVJHRVRTLFxuICBUQVJHRVRfSURTLFxuICB0ZWFyZG93bkNvbW1hbmQsXG4gIHR5cGUgVGFyZ2V0SWQsXG4gIHR5cGUgVGFyZ2V0U3BlYyxcbn0gZnJvbSAnLi4vYWdlbnQvdGFyZ2V0cy5qcyc7XG5pbXBvcnQgeyBUT09MU19ESVIsIGZldGNoVG9vbCwgaXNGZXRjaGFibGUsIHdpdGhUb29sc09uUGF0aCB9IGZyb20gJy4uL2FnZW50L3Rvb2xzLmpzJztcbmltcG9ydCB7IG1hdGNoSXNzdWVzLCBzZXNQb3N0RGVwbG95R3VpZGFuY2UgfSBmcm9tICcuLi9hZ2VudC90cm91Ymxlc2hvb3QuanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50U2VjdGlvbiwgcHJpbnRLZXlWYWx1ZSwgcHJpbnRJbmZvLCBwcmludFdhcm5pbmcsIHByaW50RXJyb3IsIHByaW50U3VjY2VzcyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5cbi8qKlxuICogUmVhZCBvbmUgbGluZSBvZiB0cmltbWVkIGlucHV0IGZyb20gdGhlIHRlcm1pbmFsLCBvd25pbmcgdGhlIHJlYWRsaW5lXG4gKiBsaWZlY3ljbGUuIFVzZWQgZGlyZWN0bHkgZm9yIHRoZSBkZXN0cnVjdGl2ZSB0ZWFyZG93biBnYXRlIChhIHkvTiBpcyB0b28gZWFzeVxuICogdG8gZmF0LWZpbmdlciwgc28gd2UgcmVxdWlyZSB0aGUgb3BlcmF0b3IgdG8gVFlQRSB0aGUgdGFyZ2V0IGlkIGJhY2spLCBhbmQgYXNcbiAqIHRoZSBiYXNpcyBmb3IgYGNvbmZpcm1gLiBEZWxpYmVyYXRlbHkgaGFzIG5vIGF1dG8tYWNjZXB0LlxuICovXG5hc3luYyBmdW5jdGlvbiBhc2socXVlc3Rpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHsgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQgfSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBybC5xdWVzdGlvbihxdWVzdGlvbikpLnRyaW0oKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBybC5jbG9zZSgpO1xuICB9XG59XG5cbi8qKiBJbnRlcmFjdGl2ZSB5L04gY29uZmlybWF0aW9uOyBhdXRvLXRydWUgd2hlbiBgYXV0b1llc2AgKHRoZSBgLS15ZXNgIGZsYWcpLiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uZmlybShxdWVzdGlvbjogc3RyaW5nLCBhdXRvWWVzOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhdXRvWWVzKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgYW5zd2VyID0gKGF3YWl0IGFzayhgJHtxdWVzdGlvbn0gW3kvTl0gYCkpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBhbnN3ZXIgPT09ICd5JyB8fCBhbnN3ZXIgPT09ICd5ZXMnO1xufVxuXG4vKiogQ29tbWFuZGVyIGNvbGxlY3RvcjogYWNjdW11bGF0ZSByZXBlYXRlZCBgLS1wb3N0LXN0ZXBgIHZhbHVlcyBpbiBvcmRlci4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RTdGVwKHZhbHVlOiBzdHJpbmcsIGFjYzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uYWNjLCB2YWx1ZV07XG59XG5cbi8qKlxuICogSG9zdC1wb3J0IHByZS1mbGlnaHQgKGxvY2FsL21pbmlrdWJlKS4gUG9ydHMgYXJlIERFUklWRUQgZnJvbSB0aGUgdGFyZ2V0J3MgY2xvbmVkXG4gKiBkZXBsb3kgc291cmNlIChjb21wb3NlIC8gc2V0dXAuc2gpIHNvIHRoZSBsaXN0IGNhbid0IGRyaWZ0IOKAlCBoZW5jZSB0aGlzIHJ1bnMgQUZURVJcbiAqIHRoZSBjbG9uZS4gQSB0YWtlbiBwb3J0IG1ha2VzIGEgY29udGFpbmVyL2ZvcndhcmQgZmFpbCB0byBiaW5kIG1pZC1kZXBsb3kgKGZvciB0aGVcbiAqIGdhdGV3YXksIGEgc2lsZW50IHVucmVhY2hhYmxlIGhhbmcpLiBQcmludHMgYSDinJMv4pyXIHN1bW1hcnkgYW5kIHJldHVybnMgZmFsc2UgT05MWVxuICogd2hlbiB0aGUgY2FsbGVyIG11c3QgQUJPUlQgKGEgZmF0YWwgbG9jYWwgY29uZmxpY3QpLiBtaW5pa3ViZSBwb3J0cyBhcmUgbWFuYWdlZFxuICogZm9yd2FyZHMgKHNldHVwLnNoIHBraWxscy9yZXN0YXJ0cyB0aGVtKSwgc28gYSBjb25mbGljdCB0aGVyZSB3YXJucyBidXQgcHJvY2VlZHMuXG4gKiBSZW1vdGUgdGFyZ2V0cyAoZWMyL2ZhcmdhdGUpIGJpbmQgbm90aGluZyBsb2NhbGx5IOKGkiByZXR1cm5zIHRydWUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVmbGlnaHRQb3J0cyhzcGVjOiBUYXJnZXRTcGVjLCB0YXJnZXQ6IFRhcmdldElkLCBjd2Q6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBwb3J0cyA9IGRpc2NvdmVySG9zdFBvcnRzKHRhcmdldCwgY3dkLCBzcGVjKTtcbiAgaWYgKHBvcnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IHBvcnRDaGVja3MgPSBhd2FpdCBjaGVja0hvc3RQb3J0cyhwb3J0cyk7XG4gIGNvbnN0IHRha2VuID0gcG9ydENoZWNrcy5maWx0ZXIoKGMpID0+ICFjLmF2YWlsYWJsZSk7XG4gIHByaW50U2VjdGlvbignUG9ydCBhdmFpbGFiaWxpdHknKTtcbiAgZm9yIChjb25zdCBjIG9mIHBvcnRDaGVja3MpIHByaW50SW5mbyhgJHtjLmF2YWlsYWJsZSA/ICfinJMnIDogJ+Kclyd9ICR7U3RyaW5nKGMucG9ydCkucGFkRW5kKDUpfSDigJQgJHtjLnNlcnZpY2V9YCk7XG4gIGlmICh0YWtlbi5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICAvLyBsb2NhbCBQVUJMSVNIRVMgdGhlc2UgcG9ydHMgYXQgYGRvY2tlciBjb21wb3NlIHVwYCB0aW1lLCBzbyBhIGNvbmZsaWN0IGlzIGZhdGFsLlxuICAvLyBtaW5pa3ViZSdzIGFyZSBrdWJlY3RsIHBvcnQtZm9yd2FyZHMgc2V0dXAuc2ggcGtpbGxzICsgcmVzdGFydHMgKGFuZFxuICAvLyBlbnN1cmVNaW5pa3ViZUdhdGV3YXkgcmVjb3ZlcnMpLCBzbyBhIHN0YWxlIGZvcndhcmQgbXVzdCBOT1QgYmxvY2sgYSByZS1ydW4uXG4gIGNvbnN0IGZhdGFsID0gdGFyZ2V0ID09PSAnbG9jYWwnO1xuICAvLyDigKZVTkxFU1MgdGhlIGxvY2FsIHN0YWNrIGlzIGFscmVhZHkgcnVubmluZzogdGhvc2UgcG9ydHMgYXJlIGhlbGQgYnkgWU9VUiBPV05cbiAgLy8gc3RhY2ssIGFuZCBgZG9ja2VyIGNvbXBvc2UgdXBgIG5vLW9wcyB0aGVtIOKAlCB0aGlzIGlzIGV4YWN0bHkgaG93IHlvdSByZS1ydW4gdG9cbiAgLy8gYWRkIGxvYWRzL29wdGlvbnMuIERvbid0IGJsb2NrICh0aGUgd291bGQtYmUgY29uZmxpY3QgaXMgYSBzZWxmLWNvbmZsaWN0KS5cbiAgaWYgKGZhdGFsICYmIHN0YWNrUnVubmluZyh0YXJnZXQsIGN3ZCwgc3BlYykpIHtcbiAgICBwcmludFdhcm5pbmcoYFxcbiR7dGFrZW4ubGVuZ3RofSBwb3J0KHMpIGFyZSBoZWxkIGJ5IHlvdXIgYWxyZWFkeS1ydW5uaW5nICR7c3BlYy5sYWJlbH0gc3RhY2sg4oCUIHJlLXJ1bm5pbmcganVzdCByZXN1bWVzIGl0IChubyByZWFsIGNvbmZsaWN0KSwgc28gY29udGludWluZy5gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBsZWFkID0gYCR7dGFrZW4ubGVuZ3RofSByZXF1aXJlZCBwb3J0KHMpIGFscmVhZHkgaW4gdXNlOiAke3Rha2VuLm1hcCgoYykgPT4gYy5wb3J0KS5qb2luKCcsICcpfWA7XG4gIChmYXRhbCA/IHByaW50RXJyb3IgOiBwcmludFdhcm5pbmcpKGZhdGFsXG4gICAgPyBgXFxuJHtsZWFkfSDigJQgdGhlIGRlcGxveSBjYW4ndCBiaW5kIHRoZW0gYW5kIHdvdWxkIGZhaWwgbWlkLXdheS4gRnJlZSB0aGVtIGFuZCByZS1ydW46YFxuICAgIDogYFxcbiR7bGVhZH0g4oCUIG9uIG1pbmlrdWJlIHRoZXNlIGFyZSB1c3VhbGx5IGEgcHJldmlvdXMgcnVuJ3MgcG9ydC1mb3J3YXJkcyAoc2V0dXAuc2ggcmVzdGFydHMgdGhlbSkuIEZyZWUgYW55IE5PTi1taW5pa3ViZSBob2xkZXIgaWYgdGhlIGdhdGV3YXkgc3RheXMgdW5yZWFjaGFibGU6YCk7XG4gIGZvciAoY29uc3QgYyBvZiB0YWtlbikgcHJpbnRJbmZvKGAgIOKAoiBwb3J0ICR7Yy5wb3J0fSAoJHtjLnNlcnZpY2V9KSDigJQgZmluZCB0aGUgaG9sZGVyOiAgbHNvZiAtaSA6JHtjLnBvcnR9YCk7XG4gIGlmICh0YWtlbi5zb21lKChjKSA9PiBjLnBvcnQgPT09IDUwMDApKSB7XG4gICAgcHJpbnRJbmZvKCcgIE5vdGU6IG9uIG1hY09TLCBwb3J0IDUwMDAgaXMgdXN1YWxseSBBaXJQbGF5IFJlY2VpdmVyIOKAlCBTeXN0ZW0gU2V0dGluZ3Mg4oaSIEdlbmVyYWwg4oaSIEFpckRyb3AgJiBIYW5kb2ZmIOKGkiBBaXJQbGF5IFJlY2VpdmVyIChvZmYpLicpO1xuICB9XG4gIHJldHVybiAhZmF0YWw7XG59XG5cbi8qKlxuICogVGVhcmRvd24gbW9kZSDigJQgdGhlIGRlc3Ryb3kgY291bnRlcnBhcnQgb2YgcHJvdmlzaW9uaW5nLCBnYXRlZCBIQVJERVIgdGhhbiBkZXBsb3k6XG4gKiBBV1MgdGFyZ2V0cyBhcmUgaXJyZXZlcnNpYmxlLCBzbyB0aGUgb3BlcmF0b3IgbXVzdCBUWVBFIHRoZSB0YXJnZXQgaWQgKC0tZm9yY2VcbiAqIGJ5cGFzc2VzIGZvciBDSTsgLS15ZXMgYWxvbmUgZG9lcyBOT1QpLiBUZXJtaW5hbDogb3ducyBpdHMgb3V0cHV0ICsgZXhpdENvZGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5UZWFyZG93bihcbiAgc3BlYzogVGFyZ2V0U3BlYyxcbiAgdGFyZ2V0OiBUYXJnZXRJZCxcbiAgY3dkOiBzdHJpbmcsXG4gIGV4ZWN1dGlvbklkOiBzdHJpbmcsXG4gIG9wdHM6IHsgc3RhY2tOYW1lPzogc3RyaW5nOyByZWdpb24/OiBzdHJpbmc7IGZvcmNlPzogYm9vbGVhbjsgeWVzPzogYm9vbGVhbjsganNvbj86IGJvb2xlYW4gfSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGNvbW1hbmQ6IGRvd25Db21tYW5kLCBkZXN0cnVjdGl2ZSB9ID0gdGVhcmRvd25Db21tYW5kKHRhcmdldCwge1xuICAgIHN0YWNrTmFtZTogb3B0cy5zdGFja05hbWUsXG4gICAgcmVnaW9uOiBvcHRzLnJlZ2lvbixcbiAgICAvLyBPdXIgdHlwZWQgZ2F0ZSBJUyB0aGUgY29uZmlybWF0aW9uIOKAlCBmb3J3YXJkIC0teWVzIHNvIHRoZSBuYXRpdmUgc2NyaXB0XG4gICAgLy8gKEZhcmdhdGUpIGRvZXNuJ3QgYWxzbyBibG9jayBvbiBzdGRpbiB3ZSdyZSBpbmhlcml0aW5nLlxuICAgIGFzc3VtZVllczogdHJ1ZSxcbiAgfSk7XG4gIGlmIChvcHRzLmpzb24pIHtcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCB0YXJnZXQsIHRlYXJkb3duOiB0cnVlLCBkZXN0cnVjdGl2ZSwgZGVzdHJveXM6IHNwZWMuZGVzdHJveXMsIGNvbW1hbmQ6IGRvd25Db21tYW5kIH0sIG51bGwsIDIpKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJpbnRTZWN0aW9uKGBUZWFyZG93biBwbGFuIOKAlCAke3NwZWMubGFiZWx9YCk7XG4gIHByaW50S2V5VmFsdWUoeyAnVGFyZ2V0JzogdGFyZ2V0LCAnRGVzdHJveXMnOiBzcGVjLmRlc3Ryb3lzLCAnU3RvcHMgY29zdCc6IHNwZWMuY29zdCB9KTtcbiAgcHJpbnRTZWN0aW9uKCdDb21tYW5kIHRvIHJ1bicpO1xuICBwcmludEluZm8oZG93bkNvbW1hbmQpO1xuICBpZiAoZGVzdHJ1Y3RpdmUgJiYgIW9wdHMuZm9yY2UpIHtcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGFzayhgXFxuVGhpcyBpcyBJUlJFVkVSU0lCTEUuIFR5cGUgXCIke3RhcmdldH1cIiB0byBjb25maXJtIHRlYXJkb3duOiBgKTtcbiAgICBpZiAodG9rZW4gIT09IHRhcmdldCkge1xuICAgICAgcHJpbnRXYXJuaW5nKCdUaGF0IGRpZG5cXCd0IG1hdGNoLCBzbyBub3RoaW5nIHdhcyBkZXN0cm95ZWQg4oCUIHlvdSBoYXZlIHRvIHR5cGUgdGhlIGV4YWN0IHRhcmdldCBpZCB0byBjb25maXJtLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBlbHNlIGlmICghZGVzdHJ1Y3RpdmUgJiYgIW9wdHMuZm9yY2UgJiYgIShhd2FpdCBjb25maXJtKCdcXG5Qcm9jZWVkIHdpdGggdGVhcmRvd24gKHN0b3BzIHRoZSBzdGFjazsgb24tZGlzayBkYXRhIHBlcnNpc3RzKT8nLCBvcHRzLnllcyA/PyBmYWxzZSkpKSB7XG4gICAgcHJpbnRXYXJuaW5nKCdObyBwcm9ibGVtIOKAlCBub3RoaW5nIHdhcyBjaGFuZ2VkLicpO1xuICAgIHJldHVybjtcbiAgfVxuICBwcmludFNlY3Rpb24oJ1RlYXJpbmcgZG93bicpO1xuICBjb25zdCB7IGNvZGU6IGRvd25Db2RlIH0gPSBhd2FpdCBydW5TY3JpcHQoZG93bkNvbW1hbmQsIGN3ZCwgeyBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgaWYgKGRvd25Db2RlICE9PSAwKSB7XG4gICAgcHJpbnRFcnJvcihgXFxuVGVhcmRvd24gZmFpbGVkIChleGl0ICR7ZG93bkNvZGV9KS4gSW5zcGVjdCB0aGUgc3RhY2svY29udGFpbmVycyBhbmQgcmV0cnkuYCk7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByaW50U3VjY2VzcygnVGVhcmRvd24gY29tcGxldGUuJyk7XG59XG5cbi8qKlxuICogUnVuIHRoZSBkZXBsb3kgY29tbWFuZCAocmVhbCwgc2VjcmV0cyB1bm1hc2tlZCwgc3RyZWFtZWQgKyBjYXB0dXJlZCkgd2l0aCBhXG4gKiBib3VuZGVkIGF1dG8tZml4ICsgcmV0cnkgbG9vcCDigJQgdGhlIGRlcGxveSBzY3JpcHRzIGFyZSBpZGVtcG90ZW50LCBzbyBhIGZpeGVkXG4gKiByZS1ydW4gcmVzdW1lcyByYXRoZXIgdGhhbiBzdGFydGluZyBvdmVyLiBSZXR1cm5zIHdoZXRoZXIgaXQgc3VjY2VlZGVkIHBsdXMgdGhlXG4gKiAocG9zc2libHkgZml4LWFkanVzdGVkKSBwYXJhbXMsIHdoaWNoIHRoZSBjYWxsZXIgbmVlZHMgZm9yIFNFUyBndWlkYW5jZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkRlcGxveVdpdGhSZXRyeShcbiAgc3BlYzogVGFyZ2V0U3BlYyxcbiAgdXJsOiBzdHJpbmcgfCBudWxsLFxuICBjd2Q6IHN0cmluZyxcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgYWlPcHRzOiB7IHByb3ZpZGVyPzogc3RyaW5nOyBtb2RlbD86IHN0cmluZyB9LFxuICBvcHRzOiB7IHJldHJpZXM/OiBzdHJpbmc7IHllcz86IGJvb2xlYW4gfSxcbik6IFByb21pc2U8eyBzdWNjZWVkZWQ6IGJvb2xlYW47IHJ1blBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4ge1xuICBjb25zdCBtYXhBdHRlbXB0cyA9IDEgKyBNYXRoLm1heCgwLCBwYXJzZUludChvcHRzLnJldHJpZXMgPz8gJycsIDEwKSB8fCAwKTtcbiAgbGV0IHJ1blBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBwYXJhbXM7XG4gIGxldCBzdWNjZWVkZWQgPSBmYWxzZTtcbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gbWF4QXR0ZW1wdHM7IGF0dGVtcHQrKykge1xuICAgIGNvbnN0IHJlYWxDb21tYW5kID0gYXNzZW1ibGVDb21tYW5kKHNwZWMsIHJ1blBhcmFtcywgeyBtYXNrOiBmYWxzZSB9KS5jb21tYW5kO1xuICAgIHByaW50U2VjdGlvbihhdHRlbXB0ID09PSAxID8gJ0RlcGxveWluZycgOiBgRGVwbG95aW5nIOKAlCByZXRyeSAke2F0dGVtcHQgLSAxfWApO1xuICAgIGlmIChhdHRlbXB0ID09PSAxKSB7XG4gICAgICBwcmludEluZm8oYERlcGxveWluZyAke3NwZWMubGFiZWx9IOKGkiAke3VybH1gKTtcbiAgICAgIHByaW50SW5mbyhzcGVjLmRlcGxveXMpO1xuICAgICAgcHJpbnRJbmZvKCdTdHJlYW1pbmcgdGhlIGRlcGxveSBiZWxvdyDigJQgZmlyc3QgcnVuIGlzIHRoZSBzbG93IG9uZSAoaW1hZ2UgcHVsbHMgKyBjZXJ0IGdlbmVyYXRpb24pLicpO1xuICAgIH1cbiAgICBjb25zdCB7IGNvZGUsIHRhaWwgfSA9IGF3YWl0IHJ1blNjcmlwdChyZWFsQ29tbWFuZCwgY3dkLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgaWYgKGNvZGUgPT09IDApIHsgc3VjY2VlZGVkID0gdHJ1ZTsgYnJlYWs7IH1cblxuICAgIHByaW50RXJyb3IoYFxcbkRlcGxveSBmYWlsZWQgKGV4aXQgJHtjb2RlfSkuYCk7XG4gICAgY29uc3QgaXNzdWVzID0gbWF0Y2hJc3N1ZXModGFpbCk7XG4gICAgaWYgKGlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICBwcmludFNlY3Rpb24oJ0xpa2VseSBjYXVzZScpO1xuICAgICAgZm9yIChjb25zdCBpIG9mIGlzc3VlcykgcHJpbnRJbmZvKGDigKIgJHtpLmNhdXNlfVxcbiAg4oaSICR7aS5zdWdnZXN0aW9ufWApO1xuICAgIH1cbiAgICBpZiAoaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSkge1xuICAgICAgY29uc3QgZGlhZ25vc2lzID0gYXdhaXQgZGlhZ25vc2VGYWlsdXJlKHJlZGFjdFNlY3JldHModGFpbCwgc3BlYywgcnVuUGFyYW1zKSwgYWlPcHRzKTtcbiAgICAgIGlmIChkaWFnbm9zaXMpIHsgcHJpbnRTZWN0aW9uKCdEaWFnbm9zaXMnKTsgcHJpbnRJbmZvKGRpYWdub3Npcyk7IH1cbiAgICB9XG4gICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIGJyZWFrO1xuXG4gICAgLy8gQXV0by1maXg6IGEgcmV0cnlhYmxlIGlzc3VlIHdpdGggYSBwYXJhbSB3ZSBoYXZlbid0IGFscmVhZHkgYXBwbGllZC5cbiAgICBjb25zdCBmaXggPSBpc3N1ZXMuZmluZCgoaSkgPT4gaS5yZXRyeWFibGUgJiYgaS5wYXJhbUZpeCAmJiBydW5QYXJhbXNbaS5wYXJhbUZpeC5rZXldICE9PSBpLnBhcmFtRml4LnZhbHVlKTtcbiAgICBpZiAoZml4Py5wYXJhbUZpeCAmJiBhd2FpdCBjb25maXJtKGBcXG5BcHBseSBmaXggYW5kIHJldHJ5IOKAlCAke2ZpeC5zdWdnZXN0aW9ufWAsIG9wdHMueWVzID8/IGZhbHNlKSkge1xuICAgICAgcnVuUGFyYW1zID0geyAuLi5ydW5QYXJhbXMsIFtmaXgucGFyYW1GaXgua2V5XTogZml4LnBhcmFtRml4LnZhbHVlIH07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy8gUmV0cnlhYmxlIGJ1dCBubyBwYXJhbSBjaGFuZ2UgKGUuZy4gQUNNIEROUyBwcm9wYWdhdGlvbikg4oCUIG9mZmVyIGEgcGxhaW4gcmUtcnVuLlxuICAgIGlmICghZml4ICYmIGlzc3Vlcy5zb21lKChpKSA9PiBpLnJldHJ5YWJsZSkgJiYgYXdhaXQgY29uZmlybSgnXFxuUmV0cnkgdGhlIGRlcGxveSAoc2FmZSB0byByZS1ydW4g4oCUIGl0IHJlc3VtZXMgd2hlcmUgaXQgbGVmdCBvZmYpPycsIG9wdHMueWVzID8/IGZhbHNlKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiB7IHN1Y2NlZWRlZCwgcnVuUGFyYW1zIH07XG59XG5cbi8qKlxuICogRXhlY3V0ZSB0aGUgcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciDihpIgbG9hZHMg4oaSIHNtb2tlIOKGkiBldmVudHMg4oaSIGN1c3RvbSkuIE9uXG4gKiBFQzIvRmFyZ2F0ZSwgcmVnaXN0ZXIgKyB0aGUgZXZlbnRzIGJ1bmRsZSAoc3RvcmUtdG9rZW4g4oaSIHNldHVwLWV2ZW50cykgbmVlZCBhXG4gKiByZWFjaGFibGUsIFJFR0lTVEVSRUQgcGxhdGZvcm0gdGhhdCdzIG9ubHkgdHJ1ZSBpbnNpZGUgdGhlIFZQQywgc28gdGhvc2UgYXJlXG4gKiBTVVJGQUNFRCBhcyBvcmRlcmVkIG1hbnVhbCBuZXh0LXN0ZXBzIGluc3RlYWQgb2YgYXV0by1ydW4gKHRoZXknZCBmYWlsIGxvY2FsbHkpLlxuICogU2V0cyBleGl0Q29kZSBvbiBhIHN0ZXAgZmFpbHVyZTsgdGhlIHBsYXRmb3JtIGlzIGFscmVhZHkgZGVwbG95ZWQgYnkgdGhpcyBwb2ludC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blBvc3RTdGVwcyhcbiAgcG9zdFN0ZXBzOiBQb3N0U3RlcFtdLFxuICBza2lwcGVkU3RlcHM6IFNraXBwZWRTdGVwW10sXG4gIHRhcmdldDogVGFyZ2V0SWQsXG4gIGN3ZDogc3RyaW5nLFxuICBhZG1pbkVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgb3B0czogeyB5ZXM/OiBib29sZWFuOyBhdXRvUnVuPzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwb3N0U3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIGZvciAoY29uc3QgcyBvZiBza2lwcGVkU3RlcHMpIHByaW50V2FybmluZyhgU2tpcHBlZCBwb3N0LXN0ZXAgJHtzLmlkfTogJHtzLnJlYXNvbn1gKTtcbiAgY29uc3QgaXNSZW1vdGUgPSAoaWQ6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICAodGFyZ2V0ID09PSAnZWMyJyB8fCB0YXJnZXQgPT09ICdmYXJnYXRlJykgJiYgKGlkID09PSAncmVnaXN0ZXInIHx8IGlkID09PSAnc3RvcmUtdG9rZW4nIHx8IGlkID09PSAnZXZlbnRzJyk7XG4gIGNvbnN0IHJ1bm5hYmxlID0gcG9zdFN0ZXBzLmZpbHRlcigocykgPT4gIWlzUmVtb3RlKHMuaWQpKTtcbiAgY29uc3QgcmVtb3RlID0gcG9zdFN0ZXBzLmZpbHRlcigocykgPT4gaXNSZW1vdGUocy5pZCkpO1xuICBpZiAocmVtb3RlLmxlbmd0aCA+IDApIHtcbiAgICBwcmludEluZm8oJ1xcbk5leHQgKHJ1biBmcm9tIGluc2lkZSB0aGUgVlBDLCBpbiB0aGlzIG9yZGVyKTonKTtcbiAgICBmb3IgKGNvbnN0IHMgb2YgcmVtb3RlKSBwcmludEluZm8oYCAg4oCiICR7cy5sYWJlbH0g4oCUICR7cy5jb21tYW5kfWApO1xuICB9XG4gIGlmIChydW5uYWJsZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgLy8gV2hlbiB0aGUgbG9hZHMgd2VyZSBwaWNrZWQgaW50ZXJhY3RpdmVseSAoYXV0b1J1biksIHRoZSB1c2VyIGFscmVhZHkgb3B0ZWQgaW4g4oCUIHNraXBcbiAgLy8gdGhlIHJlZHVuZGFudCBzZWNvbmQgY29uZmlybS4gRmxhZy1kcml2ZW4gLyBub24taW50ZXJhY3RpdmUgcnVucyBzdGlsbCBnYXRlIGhlcmUuXG4gIGlmIChvcHRzLmF1dG9SdW4gfHwgYXdhaXQgY29uZmlybShgXFxuUnVuICR7cnVubmFibGUubGVuZ3RofSBwb3N0LWluc3RhbGwgc3RlcChzKSBub3c/YCwgb3B0cy55ZXMgPz8gZmFsc2UpKSB7XG4gICAgaWYgKG9wdHMuYXV0b1J1bikgcHJpbnRJbmZvKGBcXG5SdW5uaW5nIHRoZSAke3J1bm5hYmxlLmxlbmd0aH0gcG9zdC1pbnN0YWxsIHN0ZXAocykgeW91IHNlbGVjdGVk4oCmYCk7XG4gICAgZm9yIChjb25zdCBzIG9mIHJ1bm5hYmxlKSB7XG4gICAgICBwcmludFNlY3Rpb24oYFBvc3Qtc3RlcDogJHtzLmxhYmVsfWApO1xuICAgICAgLy8gcmVnaXN0ZXIgKGxvY2FsL21pbmlrdWJlKSBsb2dzIGludG8gdGhlIHBsYXRmb3JtLCBzbyBpdCBuZWVkcyB0aGUgYWRtaW4gY3JlZHNcbiAgICAgIC8vIChQTEFURk9STV9JREVOVElGSUVSIC8gUExBVEZPUk1fUEFTU1dPUkQpIG9uIHRvcCBvZiBpdHMgc3RlcCBlbnYuXG4gICAgICBjb25zdCBuZWVkc0NyZWRzID0gcy5pZCA9PT0gJ3JlZ2lzdGVyJyB8fCBzLmlkID09PSAnc3RvcmUtdG9rZW4nO1xuICAgICAgY29uc3QgZW52ID0gbmVlZHNDcmVkcyA/IHsgLi4ucy5lbnYsIC4uLmFkbWluRW52IH0gOiBzLmVudjtcbiAgICAgIC8vIExvYWRzL3Ntb2tlIGFyZSBub2lzeSArIG5vbi1pbnRlcmFjdGl2ZSDihpIgcnVuIFFVSUVUIChjYXB0dXJlLCBzaG93IG9ubHkgb25cbiAgICAgIC8vIGZhaWx1cmUpLiBFeGNlcHRpb246IGEgcmVnaXN0ZXIgd2l0aCBubyBhZG1pbiBjcmVkcyBwcm9tcHRzLCBzbyBpdCBtdXN0IHN0cmVhbS5cbiAgICAgIGNvbnN0IGludGVyYWN0aXZlUmVnaXN0ZXIgPSBzLmlkID09PSAncmVnaXN0ZXInICYmICFhZG1pbkVudi5QTEFURk9STV9JREVOVElGSUVSO1xuICAgICAgY29uc3QgcXVpZXQgPSAhaW50ZXJhY3RpdmVSZWdpc3RlcjtcbiAgICAgIGlmIChxdWlldCkgcHJpbnRJbmZvKGAke3MuY29tbWFuZH1cXG4gIOKApnJ1bm5pbmcgKG91dHB1dCBzaG93biBvbmx5IGlmIGl0IGZhaWxzKWApO1xuICAgICAgZWxzZSBwcmludEluZm8ocy5jb21tYW5kKTtcbiAgICAgIGNvbnN0IHsgY29kZSwgdGFpbCB9ID0gYXdhaXQgcnVuU2NyaXB0KHMuY29tbWFuZCwgY3dkLCB7IHF1aWV0LCBjYXB0dXJlOiBmYWxzZSwgZW52IH0pO1xuICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgaWYgKHF1aWV0ICYmIHRhaWwpIHsgcHJpbnRFcnJvcignXFxuLS0tIGxhc3Qgb3V0cHV0IC0tLScpOyBwcmludEluZm8odGFpbCk7IH1cbiAgICAgICAgcHJpbnRFcnJvcihgXFxuUG9zdC1zdGVwICcke3MuaWR9JyBmYWlsZWQgKGV4aXQgJHtjb2RlfSkuIFRoZSBwbGF0Zm9ybSBpcyBkZXBsb3llZDsgZml4IGFuZCByZS1ydW4gdGhlIHN0ZXAgbWFudWFsbHkuYCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHByaW50U3VjY2VzcyhgJHtzLmlkfSDinJNgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcHJpbnRJbmZvKCdcXG5Ta2lwcGVkIHBvc3QtaW5zdGFsbCBzdGVwcy4gUnVuIHRoZSBjb21tYW5kcyBhYm92ZSBtYW51YWxseSB3aGVuIHJlYWR5LicpO1xuICB9XG59XG5cbi8qKlxuICogU3BhcnNlLWNsb25lIHRoZSBwbGF0Zm9ybSByZXBvICh3aGVuIC0tcmVwbywgb3IgYWNjZXB0ZWQgdmlhIHRoZSBpbnRlcmFjdGl2ZVxuICogb2ZmZXIpLCByZXBvaW50IGN3ZCBpbnRvIGl0LCBhbmQgdmVyaWZ5IHRoZSBkZXBsb3kgZW50cnlwb2ludCBleGlzdHMuIE93bnMgdGhlXG4gKiBjd2QvYm9vdHN0cmFwcGVkIHN0YXRlLiBTZXRzIGV4aXRDb2RlIG9uIGEgaGFyZCBmYWlsdXJlIChjbG9uZSBlcnJvciAvIG1pc3NpbmdcbiAqIGVudHJ5cG9pbnQpLCBtYXRjaGluZyB0aGUgb2xkIGlubGluZSBiZWhhdmlvcjsgYSBwbGFpbiBkZWNsaW5lIGxlYXZlcyBleGl0Q29kZVxuICogdW50b3VjaGVkLiBSZXR1cm5zIG9rOmZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGFib3J0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYm9vdHN0cmFwQW5kTG9jYXRlKFxuICBzcGVjOiBUYXJnZXRTcGVjLFxuICBib290c3RyYXA6IEJvb3RzdHJhcFNwZWMsXG4gIGJvb3RzdHJhcENtZDogc3RyaW5nIHwgbnVsbCxcbiAgc3BhcnNlUGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBzdGFydEN3ZDogc3RyaW5nLFxuICBvcHRzOiB7IHllcz86IGJvb2xlYW4gfSxcbik6IFByb21pc2U8eyBjd2Q6IHN0cmluZzsgYm9vdHN0cmFwcGVkOiBib29sZWFuOyBvazogYm9vbGVhbiB9PiB7XG4gIGxldCBjd2QgPSBzdGFydEN3ZDtcbiAgbGV0IGJvb3RzdHJhcHBlZCA9IGZhbHNlO1xuICAvLyBTaGFyZWQgYnkgYC0tcmVwb2AgYW5kIHRoZSBpbnRlcmFjdGl2ZSBvZmZlci4gUmVwb2ludHMgY3dkICsgc2V0cyBib290c3RyYXBwZWQ7XG4gIC8vIGBib290c3RyYXBwZWRgIHJlY29yZHMgd2hldGhlciB3ZSBjcmVhdGVkIHRoZSBjbG9uZSAodnMuIGFuIGV4aXN0aW5nIGNoZWNrb3V0KSDigJRcbiAgLy8gb25seSB0aGVuIGNhbiB0aGUgY2FsbGVyIGFkZGl0aXZlbHkgc3BhcnNlLWZldGNoIGxvYWQgZm9sZGVycy5cbiAgY29uc3QgYm9vdHN0cmFwQ2xvbmUgPSBhc3luYyAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgY29uc3QgY21kID0gYm9vdHN0cmFwQ29tbWFuZChib290c3RyYXApO1xuICAgIHByaW50U2VjdGlvbignQm9vdHN0cmFwJyk7XG4gICAgcHJpbnRJbmZvKGNtZCk7XG4gICAgY29uc3QgeyBjb2RlIH0gPSBhd2FpdCBydW5TY3JpcHQoY21kLCBjd2QsIHsgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgIHByaW50RXJyb3IoYFxcblRoZSBjbG9uZSBkaWRuJ3QgZmluaXNoIChleGl0ICR7Y29kZX0pLiBEb3VibGUtY2hlY2sgdGhlIHJlcG8gVVJMIC8gcmVmIChvciB5b3VyIG5ldHdvcmspIGFuZCBnaXZlIGl0IGFub3RoZXIgZ28uYCk7XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY3dkID0gcGF0aC5yZXNvbHZlKGN3ZCwgYm9vdHN0cmFwLndvcmtkaXIpO1xuICAgIGJvb3RzdHJhcHBlZCA9IHRydWU7XG4gICAgcHJpbnRTdWNjZXNzKGBSZXBvIGlzIHJlYWR5IOKAlCBjb250aW51aW5nIGZyb20gJHtjd2R9YCk7XG4gICAgY29uc3QgYWJzZW50ID0gc3BhcnNlUGF0aHMuZmlsdGVyKChwKSA9PiAhZXhpc3RzU3luYyhwYXRoLmpvaW4oY3dkLCBwKSkpO1xuICAgIGlmIChhYnNlbnQubGVuZ3RoID4gMCkge1xuICAgICAgcHJpbnRFcnJvcihgXFxuVGhlIHNwYXJzZSBjbG9uZSBpcyBtaXNzaW5nICR7YWJzZW50LmpvaW4oJywgJyl9IOKAlCB0aGF0IHJlZiBtYXkgbm90IGhhdmUgdGhvc2UgZm9sZGVycy4gVHJ5IGEgZGlmZmVyZW50IC0tcmVmLmApO1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIGAtLXJlcG9gOiBjbG9uZSB1cCBmcm9udCAobXVzdCBwcmVjZWRlIHRoZSBlbnRyeXBvaW50IGNoZWNrKS5cbiAgaWYgKGJvb3RzdHJhcENtZCkge1xuICAgIHByaW50SW5mbyhgXFxuQm9vdHN0cmFwIOKGkiBjbG9uZSAke2Jvb3RzdHJhcC5yZXBvfSBAICR7Ym9vdHN0cmFwLnJlZn0gaW50byAke2Jvb3RzdHJhcC53b3JrZGlyfSAoc3BhcnNlKS5gKTtcbiAgICBpZiAoIShhd2FpdCBjb25maXJtKCdHbyBhaGVhZCB3aXRoIHRoZSBjbG9uZT8nLCBvcHRzLnllcyA/PyBmYWxzZSkpKSB7XG4gICAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuIFJlLXJ1biB3aGVuZXZlciB5b3VcXCdyZSByZWFkeS4nKTtcbiAgICAgIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogZmFsc2UgfTtcbiAgICB9XG4gICAgaWYgKCEoYXdhaXQgYm9vdHN0cmFwQ2xvbmUoKSkpIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogZmFsc2UgfTtcbiAgfVxuXG4gIC8vIFRoZSBkZXBsb3kgZW50cnlwb2ludCBtdXN0IGV4aXN0IHJlbGF0aXZlIHRvIGN3ZC4gSWYgaXQgZG9lc24ndCBhbmQgd2UgaGF2ZW4ndFxuICAvLyBib290c3RyYXBwZWQsIGdyYWNlZnVsbHkgT0ZGRVIgdG8gY2xvbmUgKGludGVyYWN0aXZlIG9ubHkpIHNvIGEgZnJlc2ggbWFjaGluZSBjYW5cbiAgLy8gcHJvY2VlZCB3aXRob3V0IHJlLXJ1bm5pbmcgd2l0aCAtLXJlcG8uXG4gIGlmICghZW50cnlwb2ludEV4aXN0cyhzcGVjLCBjd2QpKSB7XG4gICAgY29uc3QgaW50ZXJhY3RpdmUgPSBCb29sZWFuKHByb2Nlc3Muc3RkaW4uaXNUVFkpICYmICFvcHRzLnllcztcbiAgICBpZiAoIWJvb3RzdHJhcENtZCAmJiBpbnRlcmFjdGl2ZSAmJiBnaXRBdmFpbGFibGUoKSkge1xuICAgICAgcHJpbnRJbmZvKGBcXG5Mb29rcyBsaWtlIHlvdSdyZSBub3QgaW5zaWRlIGEgcGlwZWxpbmUtYnVpbGRlciBjaGVja291dCwgc28gdGhlICR7c3BlYy5sYWJlbH0gZGVwbG95IHNjcmlwdHMgYXJlbid0IGhlcmUgeWV0LmApO1xuICAgICAgaWYgKGF3YWl0IGNvbmZpcm0oYFdhbnQgbWUgdG8gc3BhcnNlLWNsb25lIHRoZW0gaW50byAke2Jvb3RzdHJhcC53b3JrZGlyfSBhbmQga2VlcCBnb2luZz9gLCBmYWxzZSkpIHtcbiAgICAgICAgaWYgKCEoYXdhaXQgYm9vdHN0cmFwQ2xvbmUoKSkpIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogZmFsc2UgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFlbnRyeXBvaW50RXhpc3RzKHNwZWMsIGN3ZCkpIHtcbiAgICAgIHByaW50V2FybmluZyhgXFxuSSBjb3VsZG4ndCBmaW5kICR7c3BlYy5kaXJ9LyR7c3BlYy5lbnRyeXBvaW50fSBmcm9tICR7Y3dkfS5gKTtcbiAgICAgIHByaW50SW5mbygnVHdvIGVhc3kgd2F5cyBmb3J3YXJkOicpO1xuICAgICAgcHJpbnRJbmZvKCcgIOKAoiBjZCBpbnRvIHlvdXIgcGlwZWxpbmUtYnVpbGRlciBjaGVja291dCBhbmQgcmUtcnVuLCBvcicpO1xuICAgICAgcHJpbnRJbmZvKGAgIOKAoiBhZGQgLS1yZXBvIGFuZCBJJ2xsIGJvb3RzdHJhcCBhIGZyZXNoIHNwYXJzZSBjbG9uZSBmb3IgeW91JHtnaXRBdmFpbGFibGUoKSA/ICcuJyA6ICcgKG9uY2UgZ2l0IGlzIGluc3RhbGxlZCkuJ31gKTtcbiAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IHRydWUgfTtcbn1cblxuLyoqXG4gKiBJbnRlcmFjdGl2ZSBvcHQtaW4gbG9hZHMsIG9mZmVyZWQgQUZURVIgdGhlIGNsb25lIChzbyB3ZSBvbmx5IGFzayBvbmNlIHRoZSBvcGVyYXRvclxuICogaGFzIGFncmVlZCB0byBwcm9jZWVkKS4gUHJvbXB0cyBwZXIgbG9hZCwgYWRkaXRpdmVseSBzcGFyc2UtZmV0Y2hlcyB0aGUgcGlja2VkXG4gKiBmb2xkZXJzIGludG8gYSBib290c3RyYXBwZWQgc3BhcnNlIGNsb25lLCB0aGVuIHJlLXJlc29sdmVzIHRoZSBwb3N0LWluc3RhbGwgc3RlcHNcbiAqIHdpdGggdGhlIHNlbGVjdGlvbnMuIFJldHVybnMgdGhlIGNob3NlbiBpZHMgKyB0aGUgcmVjb21wdXRlZCBzdGVwcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkoXG4gIHRhcmdldDogVGFyZ2V0SWQsXG4gIHVybDogc3RyaW5nIHwgbnVsbCxcbiAgcmVnaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGN3ZDogc3RyaW5nLFxuICBib290c3RyYXBwZWQ6IGJvb2xlYW4sXG4gIGJvb3RzdHJhcDogQm9vdHN0cmFwU3BlYyxcbiAgcG9zdFN0ZXBGbGFnczogeyBpbml0OiBib29sZWFuOyBidWlsZEJvb3RzdHJhcDogYm9vbGVhbjsgc21va2VUZXN0OiBib29sZWFuOyBldmVudHM6IGJvb2xlYW47IHN0ZXBzOiBzdHJpbmdbXSB9LFxuKTogUHJvbWlzZTx7IGVuYWJsZWRMb2FkSWRzOiBzdHJpbmdbXTsgc3RlcHM6IFBvc3RTdGVwW107IHNraXBwZWQ6IFNraXBwZWRTdGVwW10gfT4ge1xuICBjb25zdCBwcm9tcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIHBsdWdpbnM6ICdMb2FkIHBsdWdpbnM/JyxcbiAgICBzYW1wbGVzOiAnTG9hZCBzYW1wbGUgcGlwZWxpbmVzPycsXG4gICAgY29tcGxpYW5jZTogJ0xvYWQgY29tcGxpYW5jZSBydWxlcz8nLFxuICB9O1xuICBwcmludFNlY3Rpb24oJ09wdGlvbmFsIHBvc3QtaW5zdGFsbCBsb2FkcycpO1xuICBjb25zdCBjaG9zZW46IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgcyBvZiBMT0FEX1NURVBTKSB7XG4gICAgaWYgKGF3YWl0IGNvbmZpcm0ocHJvbXB0c1tzLmlkXSA/PyBgTG9hZCAke3MuaWR9P2AsIGZhbHNlKSkgY2hvc2VuLnB1c2gocy5pZCk7XG4gIH1cbiAgLy8gQWRkaXRpdmUgc3BhcnNlIHJlLXN5bmM6IG1hdGVyaWFsaXplIE9OTFkgdGhlIHBpY2tlZCBsb2FkcycgZm9sZGVycyAodGhlIHBhcnRpYWxcbiAgLy8gY2xvbmUgZmV0Y2hlcyB0aGVpciBibG9icyBvbiBkZW1hbmQpLiBPbmx5IHdoZW4gd2UgY3JlYXRlZCBhIFNQQVJTRSBjbG9uZSDigJQgYVxuICAvLyBub3JtYWwgY2hlY2tvdXQgYWxyZWFkeSBoYXMgZXZlcnkgZm9sZGVyLCBhbmQgdGhlIGdpdDwyLjI3IGZ1bGwtY2xvbmUgZmFsbGJhY2tcbiAgLy8gKGJvb3RzdHJhcC5mdWxsKSBpcyBub24tc3BhcnNlLCB3aGVyZSBgc3BhcnNlLWNoZWNrb3V0IGFkZGAgd291bGQgc3dpdGNoIGl0IHRvXG4gIC8vIGNvbmUgbW9kZSBhbmQgUFJVTkUgdGhlIGFscmVhZHktbWF0ZXJpYWxpemVkIGRlcGxveSBmb2xkZXJzLlxuICBpZiAoYm9vdHN0cmFwcGVkICYmICFib290c3RyYXAuZnVsbCkge1xuICAgIGNvbnN0IGFic2VudCA9IHNwYXJzZVBhdGhzRm9yKHRhcmdldCwgY2hvc2VuKS5maWx0ZXIoKHApID0+ICFleGlzdHNTeW5jKHBhdGguam9pbihjd2QsIHApKSk7XG4gICAgaWYgKGFic2VudC5sZW5ndGggPiAwKSB7XG4gICAgICBwcmludFNlY3Rpb24oJ0ZldGNoaW5nIHNlbGVjdGVkIGxvYWQgZm9sZGVycycpO1xuICAgICAgY29uc3QgYWRkQ21kID0gYGdpdCBzcGFyc2UtY2hlY2tvdXQgYWRkICR7YWJzZW50Lm1hcCgocCkgPT4gYCcke3B9J2ApLmpvaW4oJyAnKX0gJiYgZ2l0IGNoZWNrb3V0ICcke2Jvb3RzdHJhcC5yZWZ9J2A7XG4gICAgICBwcmludEluZm8oYWRkQ21kKTtcbiAgICAgIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgcnVuU2NyaXB0KGFkZENtZCwgY3dkLCB7IGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKGBDb3VsZG4ndCBmZXRjaCAke2Fic2VudC5qb2luKCcsICcpfSDigJQgdGhlIG1hdGNoaW5nIGxvYWQgc3RlcChzKSBtYXkgZmFpbC4gUmUtcnVuIHdpdGggLS1yZXBvIHRvIHJlZnJlc2ggdGhlIGNsb25lLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVQb3N0U3RlcHMoe1xuICAgIHRhcmdldCxcbiAgICB1cmwsXG4gICAgcmVnaW9uLFxuICAgIGVuYWJsZWRMb2FkSWRzOiBjaG9zZW4sXG4gICAgLi4ucG9zdFN0ZXBGbGFncyxcbiAgICBidWlsZEJvb3RzdHJhcDogcG9zdFN0ZXBGbGFncy5idWlsZEJvb3RzdHJhcCB8fCBjaG9zZW4uaW5jbHVkZXMoJ3BsdWdpbnMnKSxcbiAgfSk7XG4gIHJldHVybiB7IGVuYWJsZWRMb2FkSWRzOiBjaG9zZW4sIHN0ZXBzOiByZXNvbHZlZC5zdGVwcywgc2tpcHBlZDogcmVzb2x2ZWQuc2tpcHBlZCB9O1xufVxuXG4vKipcbiAqIFJlZGFjdCBzZWNyZXQgcGFyYW0gdmFsdWVzIChlLmcuIHRoZSBnaGNyIHRva2VuKSBmcm9tIGNhcHR1cmVkIGRlcGxveSBvdXRwdXRcbiAqIGJlZm9yZSBpdCBpcyBzZW50IHRvIHRoZSBMTE0gZm9yIGRpYWdub3Npcy4gVGhlIGRlcGxveSBydW5zIHdpdGggc2VjcmV0c1xuICogdW5tYXNrZWQsIHNvIGFsdGhvdWdoIHRoZSBjdXJyZW50IHNjcmlwdHMgZG9uJ3QgZWNobyB0aGVtLCB0aGlzIGtlZXBzIGEgZnV0dXJlXG4gKiBzY3JpcHQncyBzdHJheSBlY2hvIChvciBhIHZlcmJvc2Ugc3ViLXRvb2wpIGZyb20gY3Jvc3NpbmcgdGhlIHRoaXJkLXBhcnR5LUxMTVxuICogYm91bmRhcnkuXG4gKi9cbmZ1bmN0aW9uIHJlZGFjdFNlY3JldHModGV4dDogc3RyaW5nLCBzcGVjOiBUYXJnZXRTcGVjLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHtcbiAgbGV0IG91dCA9IHRleHQ7XG4gIGZvciAoY29uc3QgaW5wdXQgb2YgWy4uLnNwZWMucmVxdWlyZWQsIC4uLnNwZWMub3B0aW9uYWxdKSB7XG4gICAgaWYgKCFpbnB1dC5zZWNyZXQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zW2lucHV0LmtleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID49IDQpIG91dCA9IG91dC5zcGxpdCh2YWx1ZSkuam9pbignKioqJyk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBwcm92aXNpb25gIGNvbW1hbmQg4oCUIGFuIEFJLWFzc2lzdGVkIGluc3RhbGxlciBmb3IgdGhlIFBpcGVsaW5lXG4gKiBCdWlsZGVyIFBMQVRGT1JNIChsb2NhbC9taW5pa3ViZS9FQzIvRmFyZ2F0ZSkuIEl0IHByaW50cyB0aGUgYXNzZW1ibGVkIHBsYW5cbiAqIChwcmVyZXEgY2hlY2tzLCBOTC1nb2FsIHBhcnNpbmcsIGNvbW1hbmQgYXNzZW1ibHkpIGFuZCB0aGVuIERFUExPWVMsIGdhdGVkIGJ5XG4gKiBjb25maXJtYXRpb24gcHJvbXB0cyAoYC0teWVzYCB0byBhdXRvLWFjY2VwdDsgYC0tanNvbmAgaXMgdGhlIG9ubHkgbm9uLWV4ZWN1dGluZ1xuICogbW9kZSwgcHJpbnRpbmcgdGhlIHBsYW4gZm9yIHRvb2xpbmcpLiBXaXRoIGAtLXJlcG9gIGl0IGNhbiBib290c3RyYXAgYSBmcmVzaFxuICogbWFjaGluZSBieSBzcGFyc2VseSBjbG9uaW5nIG9ubHkgdGhlIGRlcGxveSBmb2xkZXJzIHRoZSBzZWxlY3RlZCB0YXJnZXQgK1xuICogb3B0aW9ucyBuZWVkLCB0aGVuIHJ1bnMgcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciBhZG1pbiwgb3B0LWluIGxvYWRzLFxuICogc21va2UgdGVzdCwgY3VzdG9tIGNvbW1hbmRzKS4gYC0tdGVhcmRvd25gIHJlbW92ZXMgYSBkZXBsb3ltZW50IGluc3RlYWQuXG4gKlxuICogQHBhcmFtIHByb2dyYW0gLSBUaGUgcm9vdCBDb21tYW5kZXIgcHJvZ3JhbSBpbnN0YW5jZSB0byBhdHRhY2ggdGhlIGNvbW1hbmQgdG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb24ocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3Byb3Zpc2lvbicpXG4gICAgLmRlc2NyaXB0aW9uKCdBSS1hc3Npc3RlZCBpbnN0YWxsZXIgZm9yIHRoZSBwbGF0Zm9ybSAobG9jYWwvbWluaWt1YmUvRUMyL0ZhcmdhdGUpOiBkZXBsb3lzIGl0IChnYXRlZCBieSBjb25maXJtYXRpb24gcHJvbXB0cyksIG9yIC0tdGVhcmRvd24gdG8gcmVtb3ZlJylcbiAgICAub3B0aW9uKCctdCwgLS10YXJnZXQgPHRhcmdldD4nLCBgRGVwbG95IHRhcmdldDogJHtUQVJHRVRfSURTLmpvaW4oJyB8ICcpfWApXG4gICAgLm9wdGlvbignLXAsIC0tcHJvbXB0IDx0ZXh0PicsICdOYXR1cmFsLWxhbmd1YWdlIGdvYWwgKHBhcnNlZCBpbnRvIHBhcmFtcyB3aGVuIGFuIEFJIGtleSBpcyBzZXQpJylcbiAgICAub3B0aW9uKCctLXJlZ2lvbiA8cmVnaW9uPicsICdBV1MgcmVnaW9uIChFQzIvRmFyZ2F0ZSknKVxuICAgIC5vcHRpb24oJy0tZG9tYWluIDxkb21haW4+JywgJ0Z1bGx5LXF1YWxpZmllZCBkb21haW4gbmFtZSAoRUMyL0ZhcmdhdGUpJylcbiAgICAub3B0aW9uKCctLWhvc3RlZC16b25lLWlkIDxpZD4nLCAnUHVibGljIFJvdXRlIDUzIGhvc3RlZCB6b25lIElEIChFQzIvRmFyZ2F0ZSknKVxuICAgIC5vcHRpb24oJy0tZGVwbG95LW1vZGUgPG1vZGU+JywgJ3B1YmxpYyB8IHByaXZhdGUgKEVDMi9GYXJnYXRlKScpXG4gICAgLm9wdGlvbignLS1rZXktcGFpciA8bmFtZT4nLCAnRUMyIGtleSBwYWlyIChFQzIpJylcbiAgICAub3B0aW9uKCctLWluc3RhbmNlLXR5cGUgPHR5cGU+JywgJ0VDMiBpbnN0YW5jZSB0eXBlIChFQzIpJylcbiAgICAub3B0aW9uKCctLWdoY3ItdG9rZW4gPHRva2VuPicsICdHaXRIdWIgUEFUIChyZWFkOnBhY2thZ2VzKSDigJQgbWFza2VkIGluIG91dHB1dCcpXG4gICAgLm9wdGlvbignLS1lbWFpbCcsICdFbmFibGUgU0VTIHRyYW5zYWN0aW9uYWwgZW1haWwgKG9uIGJ5IGRlZmF1bHQgZm9yIEFXUyknKVxuICAgIC5vcHRpb24oJy0tbm8tZW1haWwnLCAnU2tpcCBTRVMgKHRyYW5zYWN0aW9uYWwgZW1haWwgaXMgcHJvdmlzaW9uZWQgYnkgZGVmYXVsdCBvbiBBV1MpJylcbiAgICAub3B0aW9uKCctLWVtYWlsLWZyb20gPGFkZHI+JywgJ1NFUyBGcm9tIGFkZHJlc3MnKVxuICAgIC5vcHRpb24oJy0tZW1haWwtZnJvbS1uYW1lIDxuYW1lPicsICdTRVMgRnJvbSBkaXNwbGF5IG5hbWUnKVxuICAgIC5vcHRpb24oJy0tYWxlcnQtZW1haWwgPGFkZHI+JywgJ1N1YnNjcmliZSBhbiBhZGRyZXNzIHRvIHRoZSBib3VuY2UvY29tcGxhaW50IFNOUyB0b3BpYycpXG4gICAgLm9wdGlvbignLS1za2lwLXNlcy1pZGVudGl0eScsICdTa2lwIFNFUyBpZGVudGl0eSBjcmVhdGlvbiAoZG9tYWluIGFscmVhZHkgdmVyaWZpZWQpJylcbiAgICAub3B0aW9uKCctLWFpLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQUkgcHJvdmlkZXIgKGFudGhyb3BpY3xvcGVuYWl8Z29vZ2xlfHhhaXxiZWRyb2NrKScpXG4gICAgLm9wdGlvbignLS1tb2RlbCA8bW9kZWw+JywgJ0FJIG1vZGVsIGlkJylcbiAgICAub3B0aW9uKCctLWRpYWdub3NlIDxmaWxlPicsICdEaWFnbm9zZSBhIENsb3VkRm9ybWF0aW9uL2RlcGxveSBmYWlsdXJlIGZyb20gYSBmaWxlIChuZWVkcyBhbiBBSSBrZXkpJylcbiAgICAub3B0aW9uKCcteSwgLS15ZXMnLCAnQXV0by1hY2NlcHQgYWxsIGNvbmZpcm1hdGlvbiBwcm9tcHRzIChmb3IgQ0kgLyBub24taW50ZXJhY3RpdmUpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1yZXRyaWVzIDxuPicsICdBdXRvLWZpeCArIHJldHJ5IGF0dGVtcHRzIGFmdGVyIGEgZmFpbHVyZSAoZGVwbG95IHNjcmlwdHMgYXJlIGlkZW1wb3RlbnQpJywgJzEnKVxuICAgIC5vcHRpb24oJy0tdGVhcmRvd24nLCAnVGVhciBkb3duIGFuIGV4aXN0aW5nIGRlcGxveW1lbnQgaW5zdGVhZCBvZiBjcmVhdGluZyBvbmUgKGdhdGVkOyBBV1MgdGFyZ2V0cyByZXF1aXJlIGEgdHlwZWQgY29uZmlybWF0aW9uKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tc3RhY2stbmFtZSA8bmFtZT4nLCAnU3RhY2sgbmFtZSAoRUMyKSAvIHN0YWNrIHByZWZpeCAoRmFyZ2F0ZSkgdG8gdGVhciBkb3duIOKAlCBkZWZhdWx0cyB0byB0aGUgZGVwbG95IGRlZmF1bHQnKVxuICAgIC5vcHRpb24oJy0tZm9yY2UnLCAnU2tpcCB0aGUgdGVhcmRvd24gdHlwZWQtY29uZmlybWF0aW9uIChEQU5HRVJPVVMg4oCUIGZvciBDSS9hdXRvbWF0aW9uIG9ubHkpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1uby1pbml0JywgJ1NraXAgdGhlIHBvc3QtZGVwbG95IHJlZ2lzdGVyL2luaXQtcGxhdGZvcm0gc3RlcCcpXG4gICAgLy8gQm9vdHN0cmFwIChzcGFyc2UgY2xvbmUpIOKAlCBwcm92aXNpb24gYSBmcmVzaCBtYWNoaW5lIGluIG9uZSBjb21tYW5kLlxuICAgIC5vcHRpb24oJy0tcmVwbyBbdXJsXScsICdCb290c3RyYXA6IGdpdC1jbG9uZSB0aGUgcGxhdGZvcm0gcmVwbyBmaXJzdCAoc3BhcnNlIOKAlCBvbmx5IHRoZSBuZWVkZWQgZGVwbG95IGZvbGRlcnMpLCB0aGVuIHJ1biBmcm9tIGl0IChubyB2YWx1ZSA9IHRoZSB1cHN0cmVhbSBkZWZhdWx0KScpXG4gICAgLm9wdGlvbignLS1yZWYgPHJlZj4nLCAnR2l0IGJyYW5jaC90YWcgdG8gY2hlY2sgb3V0IHdoZW4gYm9vdHN0cmFwcGluZyAoZGVmYXVsdDogbWFpbiknKVxuICAgIC5vcHRpb24oJy0td29ya2RpciA8ZGlyPicsICdEaXJlY3RvcnkgdG8gY2xvbmUgaW50byAvIHJ1biBmcm9tIHdoZW4gYm9vdHN0cmFwcGluZyAoZGVmYXVsdDogcGlwZWxpbmUtYnVpbGRlciknKVxuICAgIC8vIFBvc3QtaW5zdGFsbCBsb2FkcyDigJQgZWFjaCBvcHQtaW4gc3RlcCBhbHNvIGFkZHMgaXRzIGRlcGxveSBmb2xkZXIgdG8gdGhlIHNwYXJzZSBjbG9uZS5cbiAgICAub3B0aW9uKCctLXdpdGgtcGx1Z2lucycsICdQb3N0LWluc3RhbGw6IGJ1aWxkICsgbG9hZCBwbHVnaW5zIChhZGRzIGRlcGxveS9wbHVnaW5zLCBkZXBsb3kvY29kZWJ1aWxkKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1jb21wbGlhbmNlJywgJ1Bvc3QtaW5zdGFsbDogbG9hZCBzYW1wbGUgY29tcGxpYW5jZSBydWxlcy9wb2xpY2llcyAoYWRkcyBkZXBsb3kvY29tcGxpYW5jZSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtc2FtcGxlcycsICdQb3N0LWluc3RhbGw6IGxvYWQgc2FtcGxlIHBpcGVsaW5lcyAoYWRkcyBkZXBsb3kvc2FtcGxlcyknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtYWxsJywgJ1Bvc3QtaW5zdGFsbDogcGx1Z2lucyArIGNvbXBsaWFuY2UgKyBzYW1wbGVzJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1idWlsZC1ib290c3RyYXAnLCAnQnVpbGQgKyBwdWJsaXNoIHRoZSBDb2RlQnVpbGQgYm9vdHN0cmFwIGltYWdlIGR1cmluZyByZWdpc3RlciAoYWRkcyBkZXBsb3kvY29kZWJ1aWxkKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1zbW9rZS10ZXN0JywgJ1Bvc3QtaW5zdGFsbDogcmVhZC1vbmx5IEFQSSByZWFjaGFiaWxpdHkgY2hlY2snLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtZXZlbnRzJywgJ1Bvc3QtaW5zdGFsbCAoQVdTKTogZXZlbnQgaW5nZXN0aW9uIGJ1bmRsZSDigJQgc3RvcmUtdG9rZW4gKEpXVCDihpIgU2VjcmV0cyBNYW5hZ2VyKSB0aGVuIHNldHVwLWV2ZW50cyAoRXZlbnRCcmlkZ2UvTGFtYmRhKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tcG9zdC1zdGVwIDxjbWQ+JywgJ1J1biBhbiBleHRyYSBjb21tYW5kIGFmdGVyIHRoZSBsb2FkcyAocmVwZWF0YWJsZSwgaW4gb3JkZXIpJywgY29sbGVjdFN0ZXAsIFtdKVxuICAgIC5vcHRpb24oJy0tYWRtaW4tZW1haWwgPGFkZHI+JywgJ0FkbWluIGVtYWlsIGZvciBub24taW50ZXJhY3RpdmUgcmVnaXN0ZXIgKHNldHMgUExBVEZPUk1fSURFTlRJRklFUiknKVxuICAgIC5vcHRpb24oJy0tYWRtaW4tcGFzc3dvcmQgPHB3PicsICdBZG1pbiBwYXNzd29yZCBmb3Igbm9uLWludGVyYWN0aXZlIHJlZ2lzdGVyIChzZXRzIFBMQVRGT1JNX1BBU1NXT1JEKScpXG4gICAgLm9wdGlvbignLS1qc29uJywgJ1ByaW50IHRoZSBwbGFuIGFzIEpTT04gYW5kIGV4aXQgV0lUSE9VVCBydW5uaW5nICh0aGUgb25seSBub24tZXhlY3V0aW5nIG1vZGUg4oCUIGZvciB0b29saW5nL0NJIGluc3BlY3Rpb24pJywgZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ1Byb3Zpc2lvbicpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyAxLiBBc3NlbWJsZSBwYXJhbXMgZnJvbSBleHBsaWNpdCBmbGFncyAoZmxhZ3MgYWx3YXlzIHdpbiBvdmVyIE5MIHBhcnNlKS5cbiAgICAgICAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgIGRvbWFpbjogb3B0aW9ucy5kb21haW4sXG4gICAgICAgICAgaG9zdGVkWm9uZUlkOiBvcHRpb25zLmhvc3RlZFpvbmVJZCxcbiAgICAgICAgICBkZXBsb3lNb2RlOiBvcHRpb25zLmRlcGxveU1vZGUsXG4gICAgICAgICAga2V5UGFpcjogb3B0aW9ucy5rZXlQYWlyLFxuICAgICAgICAgIGluc3RhbmNlVHlwZTogb3B0aW9ucy5pbnN0YW5jZVR5cGUsXG4gICAgICAgICAgZ2hjclRva2VuOiBvcHRpb25zLmdoY3JUb2tlbixcbiAgICAgICAgICAvLyBDb21tYW5kZXIgdHJpLXN0YXRlcyBgZW1haWxgOiB1bmRlZmluZWQgKG5laXRoZXIpLCB0cnVlICgtLWVtYWlsKSxcbiAgICAgICAgICAvLyBmYWxzZSAoLS1uby1lbWFpbCkuIFNFUyBpcyBvbiBieSBkZWZhdWx0LCBzbyBvbmx5IC0tbm8tZW1haWwgaXNcbiAgICAgICAgICAvLyBsb2FkLWJlYXJpbmcgKGl0IGVtaXRzIGAtLW5vLWVtYWlsYCBpbnRvIHRoZSBkZXBsb3kgY29tbWFuZCkuXG4gICAgICAgICAgZW1haWw6IG9wdGlvbnMuZW1haWwgPT09IHRydWUsXG4gICAgICAgICAgbm9FbWFpbDogb3B0aW9ucy5lbWFpbCA9PT0gZmFsc2UsXG4gICAgICAgICAgZW1haWxGcm9tOiBvcHRpb25zLmVtYWlsRnJvbSxcbiAgICAgICAgICBlbWFpbEZyb21OYW1lOiBvcHRpb25zLmVtYWlsRnJvbU5hbWUsXG4gICAgICAgICAgYWxlcnRFbWFpbDogb3B0aW9ucy5hbGVydEVtYWlsLFxuICAgICAgICAgIG5vQ3JlYXRlU2VzSWRlbnRpdHk6IG9wdGlvbnMuc2tpcFNlc0lkZW50aXR5LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhaU9wdHMgPSB7IHByb3ZpZGVyOiBvcHRpb25zLmFpUHJvdmlkZXIsIG1vZGVsOiBvcHRpb25zLm1vZGVsIH07XG5cbiAgICAgICAgLy8gQm9vdHN0cmFwIChzcGFyc2UgY2xvbmUpICsgcG9zdC1pbnN0YWxsIHNlbGVjdGlvbnMuXG4gICAgICAgIGNvbnN0IHdhbnRCb290c3RyYXAgPSBvcHRpb25zLnJlcG8gIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnJlcG8gIT09IGZhbHNlO1xuICAgICAgICBjb25zdCB3aXRoQWxsID0gb3B0aW9ucy53aXRoQWxsID09PSB0cnVlO1xuICAgICAgICBjb25zdCBhbnlMb2FkRmxhZyA9IHdpdGhBbGwgfHwgTE9BRF9TVEVQUy5zb21lKChzKSA9PiBvcHRpb25zW3MuZmxhZ10gPT09IHRydWUpO1xuICAgICAgICBsZXQgZW5hYmxlZExvYWRJZHM6IHN0cmluZ1tdID0gTE9BRF9TVEVQUy5maWx0ZXIoKHMpID0+IHdpdGhBbGwgfHwgb3B0aW9uc1tzLmZsYWddID09PSB0cnVlKS5tYXAoKHMpID0+IHMuaWQpO1xuICAgICAgICAvLyBXaXRoIG5vIC0td2l0aC0qIGZsYWdzLCBhbiBpbnRlcmFjdGl2ZSBydW4gb2ZmZXJzIGVhY2ggbG9hZCDigJQgYnV0IEFGVEVSIHRoZVxuICAgICAgICAvLyBjbG9uZSwgc28gdGhlIHF1ZXN0aW9ucyBjb21lIG9uY2UgeW91J3ZlIGFncmVlZCB0byBwcm9jZWVkIChub3QgdXAgZnJvbnQpLlxuICAgICAgICAvLyBFYWNoIHBpY2tlZCBsb2FkJ3MgZm9sZGVyIGlzIHRoZW4gZmV0Y2hlZCB2aWEgYW4gYWRkaXRpdmUgc3BhcnNlIHJlLXN5bmMuXG4gICAgICAgIC8vIEZsYWdzIC8gLS15ZXMgLyAtLWpzb24gLyBub24taW50ZXJhY3RpdmUgc2hlbGxzIHNraXAgdGhlIHByb21wdHMuXG4gICAgICAgIGNvbnN0IHdpbGxQcm9tcHRMb2FkcyA9ICFvcHRpb25zLnllcyAmJiAhb3B0aW9ucy5qc29uICYmIEJvb2xlYW4ocHJvY2Vzcy5zdGRpbi5pc1RUWSkgJiYgIWFueUxvYWRGbGFnO1xuICAgICAgICBjb25zdCBwb3N0U3RlcEZsYWdzID0ge1xuICAgICAgICAgIGluaXQ6IG9wdGlvbnMuaW5pdCAhPT0gZmFsc2UsXG4gICAgICAgICAgYnVpbGRCb290c3RyYXA6IG9wdGlvbnMuYnVpbGRCb290c3RyYXAgPT09IHRydWUgfHwgZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSxcbiAgICAgICAgICBzbW9rZVRlc3Q6IG9wdGlvbnMud2l0aFNtb2tlVGVzdCA9PT0gdHJ1ZSxcbiAgICAgICAgICBldmVudHM6IG9wdGlvbnMud2l0aEV2ZW50cyA9PT0gdHJ1ZSxcbiAgICAgICAgICBzdGVwczogKG9wdGlvbnMucG9zdFN0ZXAgPz8gW10pIGFzIHN0cmluZ1tdLFxuICAgICAgICB9O1xuICAgICAgICAvLyBBZG1pbiBjcmVkZW50aWFscyBmb3J3YXJkZWQgYXMgZW52IHNvIHJlZ2lzdGVyIHJ1bnMgbm9uLWludGVyYWN0aXZlbHkuXG4gICAgICAgIGNvbnN0IGFkbWluRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hZG1pbkVtYWlsID09PSAnc3RyaW5nJykgYWRtaW5FbnYuUExBVEZPUk1fSURFTlRJRklFUiA9IG9wdGlvbnMuYWRtaW5FbWFpbDtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmFkbWluUGFzc3dvcmQgPT09ICdzdHJpbmcnKSBhZG1pbkVudi5QTEFURk9STV9QQVNTV09SRCA9IG9wdGlvbnMuYWRtaW5QYXNzd29yZDtcblxuICAgICAgICAvLyAyLiBPcHRpb25hbGx5IHBhcnNlIGEgbmF0dXJhbC1sYW5ndWFnZSBnb2FsIHRvIGZpbGwgYW55IEdBUFMgKGJlc3QtZWZmb3J0KS5cbiAgICAgICAgbGV0IHRhcmdldDogVGFyZ2V0SWQgfCB1bmRlZmluZWQgPSBpc1RhcmdldElkKG9wdGlvbnMudGFyZ2V0KSA/IG9wdGlvbnMudGFyZ2V0IDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9tcHQpIHtcbiAgICAgICAgICBpZiAoaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gYXdhaXQgcGFyc2VHb2FsKG9wdGlvbnMucHJvbXB0LCBhaU9wdHMpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICBpZiAoIXRhcmdldCAmJiBpc1RhcmdldElkKHBhcnNlZC50YXJnZXQpKSB0YXJnZXQgPSBwYXJzZWQudGFyZ2V0O1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGsgIT09ICd0YXJnZXQnICYmIHBhcmFtc1trXSA9PT0gdW5kZWZpbmVkICYmIHYgIT09IHVuZGVmaW5lZCkgcGFyYW1zW2tdID0gdjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ0EgLS1wcm9tcHQgd2FzIGdpdmVuIGJ1dCBubyBBSSBrZXkgaXMgc2V0IOKAlCBpZ25vcmluZyBpdCBhbmQgdXNpbmcgZmxhZ3Mgb25seS4gU2V0IEFOVEhST1BJQ19BUElfS0VZIChvciAtLWFpLXByb3ZpZGVyICsgaXRzIGtleSkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gT3B0aW9uYWwgZmFpbHVyZSBkaWFnbm9zaXMgKGluZGVwZW5kZW50IG9mIGEgZGVwbG95IHBsYW4pLlxuICAgICAgICBpZiAob3B0aW9ucy5kaWFnbm9zZSkge1xuICAgICAgICAgIGxldCBmYWlsdXJlVGV4dDogc3RyaW5nO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmYWlsdXJlVGV4dCA9IHJlYWRGaWxlU3luYyhvcHRpb25zLmRpYWdub3NlLCAndXRmLTgnKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoYENhbm5vdCByZWFkIC0tZGlhZ25vc2UgZmlsZTogJHtvcHRpb25zLmRpYWdub3NlfWApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGlzQWlDb25maWd1cmVkKGFpT3B0cykgPyBhd2FpdCBkaWFnbm9zZUZhaWx1cmUoZmFpbHVyZVRleHQsIGFpT3B0cykgOiBudWxsO1xuICAgICAgICAgIC8vIFdpdGggLS1qc29uLCB0aGUgZGlhZ25vc2lzIElTIHRoZSBtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCDigJQgZW1pdCBpdFxuICAgICAgICAgIC8vIGFsb25lIChkb24ndCBhbHNvIHByaW50IHRleHQsIHdoaWNoIHdvdWxkIGNvcnJ1cHQgdGhlIEpTT04gc3RyZWFtKS5cbiAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCBkaWFnbm9zaXMgfSwgbnVsbCwgMikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGlhZ25vc2lzKSB7XG4gICAgICAgICAgICBwcmludFNlY3Rpb24oJ0ZhaWx1cmUgZGlhZ25vc2lzJyk7XG4gICAgICAgICAgICBwcmludEluZm8oZGlhZ25vc2lzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdEaWFnbm9zaXMgdW5hdmFpbGFibGUgKG5vIEFJIGtleSBjb25maWd1cmVkIG9yIHRoZSBtb2RlbCBjb3VsZCBub3QgYmUgcmVhY2hlZCkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGFyZ2V0KSByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LiBOZWVkIGEgdGFyZ2V0IHRvIGFzc2VtYmxlIGEgcGxhbi5cbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICBwcmludEVycm9yKGBObyB0YXJnZXQgc3BlY2lmaWVkLiBQYXNzIC0tdGFyZ2V0IDwke1RBUkdFVF9JRFMuam9pbignfCcpfT4gb3IgZGVzY3JpYmUgdGhlIGdvYWwgd2l0aCAtLXByb21wdC5gKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcGVjID0gVEFSR0VUU1t0YXJnZXRdO1xuICAgICAgICBsZXQgY3dkID0gcHJvY2Vzcy5jd2QoKTtcblxuICAgICAgICAvLyA0Yi4gVGVhcmRvd24gbW9kZSDigJQgdGhlIGRlc3Ryb3kgY291bnRlcnBhcnQgb2YgcHJvdmlzaW9uaW5nIChzZWUgcnVuVGVhcmRvd24pLlxuICAgICAgICBpZiAob3B0aW9ucy50ZWFyZG93bikge1xuICAgICAgICAgIGF3YWl0IHJ1blRlYXJkb3duKHNwZWMsIHRhcmdldCwgY3dkLCBleGVjdXRpb25JZCwgb3B0aW9ucyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFrZSBwcmV2aW91c2x5LWZldGNoZWQgc2luZ2xlLWJpbmFyeSB0b29scyAoZS5nLiB5cSkgdmlzaWJsZSB0byB0aGVcbiAgICAgICAgLy8gcHJlcmVxIGNoZWNrcyArIHRoZSBkZXBsb3kg4oCUIHRoZXkgbGl2ZSBpbiB0aGUgdG9vbHMgY2FjaGUsIG5vdCBvbiB0aGVcbiAgICAgICAgLy8gc3lzdGVtIFBBVEguIChCb3RoIGBoYXMoKWAgYW5kIHRoZSBkZXBsb3kncyBgYmFzaCAtbGNgIGluaGVyaXQgdGhpcy4pXG4gICAgICAgIHdpdGhUb29sc09uUGF0aCgpO1xuICAgICAgICBsZXQgcHJlcmVxcyA9IGNoZWNrUHJlcmVxcyh0YXJnZXQsIHsgYm9vdHN0cmFwOiB3YW50Qm9vdHN0cmFwLCB3aXRoUGx1Z2luczogd2lsbFByb21wdExvYWRzIHx8IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykgfSk7XG4gICAgICAgIGNvbnN0IHsgY29tbWFuZCwgbWlzc2luZyB9ID0gYXNzZW1ibGVDb21tYW5kKHNwZWMsIHBhcmFtcyk7XG4gICAgICAgIGNvbnN0IHVybCA9IGRlcml2ZUhlYWx0aFVybCh0YXJnZXQsIHBhcmFtcyk7XG5cbiAgICAgICAgLy8gU3BhcnNlIGJvb3RzdHJhcCBjbG9uZSBjb21tYW5kIChjb21tb24gYmFzZSArIHRhcmdldCArIHNlbGVjdGVkIGxvYWRzKS5cbiAgICAgICAgLy8gSW50ZXJhY3RpdmUgbG9hZHMgYXJlIGNob3NlbiBBRlRFUiB0aGUgY2xvbmUsIHNvIHRoZSBjbG9uZSBzdGF5cyBtaW5pbWFsIOKAlFxuICAgICAgICAvLyBlYWNoIHBpY2tlZCBsb2FkJ3MgZm9sZGVyIGlzIGZldGNoZWQgdGhlbiB2aWEgYW4gYWRkaXRpdmUgc3BhcnNlIHJlLXN5bmMuXG4gICAgICAgIGNvbnN0IHNwYXJzZVBhdGhzID0gc3BhcnNlUGF0aHNGb3IodGFyZ2V0LCBlbmFibGVkTG9hZElkcyk7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcCA9IHJlc29sdmVCb290c3RyYXAoXG4gICAgICAgICAgeyByZXBvOiB0eXBlb2Ygb3B0aW9ucy5yZXBvID09PSAnc3RyaW5nJyA/IG9wdGlvbnMucmVwbyA6IHVuZGVmaW5lZCwgcmVmOiBvcHRpb25zLnJlZiwgd29ya2Rpcjogb3B0aW9ucy53b3JrZGlyLCBmdWxsOiAhZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCgpIH0sXG4gICAgICAgICAgc3BhcnNlUGF0aHMsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcENtZCA9IHdhbnRCb290c3RyYXAgPyBib290c3RyYXBDb21tYW5kKGJvb3RzdHJhcCkgOiBudWxsO1xuXG4gICAgICAgIC8vIFJlc29sdmUgcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciDihpIgc21va2Ug4oaSIGV2ZW50cyDihpIgY3VzdG9tKS4gUmUtcmVzb2x2ZWRcbiAgICAgICAgLy8gYWZ0ZXIgdGhlIHBvc3QtY2xvbmUgbG9hZCBwcm9tcHRzIChzZWUgYmVsb3cpIHdoZW4gdGhvc2UgcnVuIGludGVyYWN0aXZlbHkuXG4gICAgICAgIGxldCB7IHN0ZXBzOiBwb3N0U3RlcHMsIHNraXBwZWQ6IHNraXBwZWRTdGVwcyB9ID0gcmVzb2x2ZVBvc3RTdGVwcyh7XG4gICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZWdpb246IHR5cGVvZiBwYXJhbXMucmVnaW9uID09PSAnc3RyaW5nJyA/IHBhcmFtcy5yZWdpb24gOiB1bmRlZmluZWQsXG4gICAgICAgICAgZW5hYmxlZExvYWRJZHMsXG4gICAgICAgICAgLi4ucG9zdFN0ZXBGbGFncyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHByZXJlcXMsXG4gICAgICAgICAgICBwcmVyZXFzU2F0aXNmaWVkOiBwcmVyZXFzU2F0aXNmaWVkKHByZXJlcXMpLFxuICAgICAgICAgICAgbWlzc2luZ0lucHV0czogbWlzc2luZy5tYXAoKG0pID0+ICh7IGZsYWc6IG0uZmxhZywgZGVzY3JpcHRpb246IG0uZGVzY3JpcHRpb24gfSkpLFxuICAgICAgICAgICAgYm9vdHN0cmFwOiBib290c3RyYXBDbWQsXG4gICAgICAgICAgICBzcGFyc2VQYXRoczogd2FudEJvb3RzdHJhcCA/IHNwYXJzZVBhdGhzIDogbnVsbCxcbiAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICBwb3N0U3RlcHM6IHBvc3RTdGVwcy5tYXAoKHMpID0+ICh7IGlkOiBzLmlkLCBsYWJlbDogcy5sYWJlbCwgY29tbWFuZDogcy5jb21tYW5kIH0pKSxcbiAgICAgICAgICAgIHNraXBwZWRQb3N0U3RlcHM6IHNraXBwZWRTdGVwcyxcbiAgICAgICAgICB9LCBudWxsLCAyKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNS4gUHJpbnQgdGhlIHBsYW4gKHNob3duIGJlZm9yZSB0aGUgZ2F0ZWQgZXhlY3V0aW9uIGJlbG93KS5cbiAgICAgICAgcHJpbnRTZWN0aW9uKGBQcm92aXNpb24gcGxhbiDigJQgJHtzcGVjLmxhYmVsfWApO1xuICAgICAgICBwcmludEtleVZhbHVlKHsgJ1RhcmdldCc6IHRhcmdldCwgJ0Jlc3QgZm9yJzogc3BlYy5iZXN0Rm9yLCAnQ29zdCc6IHNwZWMuY29zdCB9KTtcblxuICAgICAgICBwcmludFNlY3Rpb24oJ1ByZXJlcXVpc2l0ZXMnKTtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHByZXJlcXMpIHByaW50SW5mbyhgJHtjLm9rID8gJ+KckycgOiAn4pyXJ30gJHtjLm5hbWV9IOKAlCAke2MuZGV0YWlsfWApO1xuICAgICAgICBpZiAoIXByZXJlcXNTYXRpc2ZpZWQocHJlcmVxcykpIHByaW50V2FybmluZygnUmVzb2x2ZSB0aGUgZmFpbGluZyBwcmVyZXF1aXNpdGVzIGFib3ZlIGJlZm9yZSBkZXBsb3lpbmcuJyk7XG5cbiAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignTWlzc2luZyByZXF1aXJlZCBpbnB1dHMnKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgbWlzc2luZykgcHJpbnRJbmZvKGAgIC0tJHttLmZsYWd9ICAoJHttLmRlc2NyaXB0aW9ufSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib290c3RyYXBDbWQpIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ0Jvb3RzdHJhcCAoc3BhcnNlIGdpdCBjbG9uZSwgcnVucyBmaXJzdCknKTtcbiAgICAgICAgICBwcmludEluZm8oYENsb25lICR7Ym9vdHN0cmFwLnJlcG99IEAgJHtib290c3RyYXAucmVmfSDihpIgJHtib290c3RyYXAud29ya2Rpcn07IGZvbGRlcnM6ICR7c3BhcnNlUGF0aHMuam9pbignLCAnKX1gKTtcbiAgICAgICAgICBwcmludEluZm8oYm9vdHN0cmFwQ21kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaW50U2VjdGlvbignQ29tbWFuZCB0byBydW4nKTtcbiAgICAgICAgcHJpbnRJbmZvKGNvbW1hbmQpO1xuXG4gICAgICAgIGlmIChwb3N0U3RlcHMubGVuZ3RoID4gMCB8fCBza2lwcGVkU3RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignUG9zdC1pbnN0YWxsIHN0ZXBzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBzIG9mIHBvc3RTdGVwcykgcHJpbnRJbmZvKGDigKIgJHtzLmxhYmVsfVxcbiAgICAke3MuY29tbWFuZH1gKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHMgb2Ygc2tpcHBlZFN0ZXBzKSBwcmludFdhcm5pbmcoYHNraXBwZWQgJHtzLmlkfTogJHtzLnJlYXNvbn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDYuIEFueSBtaXNzaW5nIHJlcXVpcmVkIHByZXJlcSB0aGF0J3MgYSBzaW5nbGUgc3RhdGljIGJpbmFyeSAoZS5nLiB5cSlcbiAgICAgICAgLy8gY2FuIGJlIGZldGNoZWQgaW50byB0aGUgdG9vbHMgY2FjaGUgaW5zdGVhZCBvZiBhIHN5c3RlbSBpbnN0YWxsIOKAlCBub1xuICAgICAgICAvLyBicmV3L2FwdC4gT2ZmZXIgaXQsIHRoZW4gcmUtY2hlY2sgKHRoZSBjYWNoZSBkaXIgaXMgYWxyZWFkeSBvbiBQQVRIKS5cbiAgICAgICAgY29uc3QgZmV0Y2hhYmxlID0gcHJlcmVxcy5maWx0ZXIoKGMpID0+ICFjLm9rICYmIGMucmVxdWlyZWQgJiYgaXNGZXRjaGFibGUoYy5uYW1lKSk7XG4gICAgICAgIGlmIChmZXRjaGFibGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IG5hbWVzID0gZmV0Y2hhYmxlLm1hcCgoYykgPT4gYy5uYW1lKS5qb2luKCcsICcpO1xuICAgICAgICAgIGlmIChhd2FpdCBjb25maXJtKGBcXG4ke25hbWVzfSBub3QgaW5zdGFsbGVkIOKAlCBmZXRjaCB0aGUgb2ZmaWNpYWwgc3RhdGljIGJpbmFyeSBpbnRvICR7VE9PTFNfRElSfSAobm8gc3lzdGVtIGluc3RhbGwpP2AsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjIG9mIGZldGNoYWJsZSkge1xuICAgICAgICAgICAgICBwcmludEluZm8oYEZldGNoaW5nICR7Yy5uYW1lfeKApmApO1xuICAgICAgICAgICAgICBpZiAoIWZldGNoVG9vbChjLm5hbWUpKSBwcmludFdhcm5pbmcoYENvdWxkbid0IGZldGNoICR7Yy5uYW1lfSDigJQgaW5zdGFsbCBpdCBtYW51YWxseSBhbmQgcmUtcnVuLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJlcmVxcyA9IGNoZWNrUHJlcmVxcyh0YXJnZXQsIHsgYm9vdHN0cmFwOiB3YW50Qm9vdHN0cmFwLCB3aXRoUGx1Z2luczogd2lsbFByb21wdExvYWRzIHx8IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2IuIEdhdGVkIGV4ZWN1dGlvbi4gQ2hlY2sgcHJlcmVxcyAvIHJlcXVpcmVkIGlucHV0cyBmaXJzdCDigJQgdGhpcyBhbHNvXG4gICAgICAgIC8vIGNhdGNoZXMgYSBtaXNzaW5nIGBnaXRgIHdoZW4gYm9vdHN0cmFwcGluZy5cbiAgICAgICAgY29uc3QgYmxvY2tlZCA9IGV4ZWN1dGlvbkJsb2NrZWQocHJlcmVxcywgbWlzc2luZyk7XG4gICAgICAgIGlmIChibG9ja2VkKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcihgQ2FuJ3Qgc3RhcnQganVzdCB5ZXQg4oCUICR7YmxvY2tlZH0uIFJlc29sdmUgdGhhdCBhbmQgcmUtcnVuLmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbW1pdCBnYXRlIOKAlCBjb25maXJtIEJFRk9SRSBhbnkgc2lkZSBlZmZlY3QgKGNsb25lLCAuZW52LCBkZXBsb3kpIHNvIGEgXCJOb1wiXG4gICAgICAgIC8vIGxlYXZlcyBub3RoaW5nIGJlaGluZC4gVGhlIHBvcnQgY2hlY2sgKyBvcHRpb25hbCBsb2FkcyArIC5lbnYgYmVsb3cgYXJlIHBhcnQgb2ZcbiAgICAgICAgLy8gZXhlY3V0aW5nIHRoZSBhZ3JlZWQtdG8gcGxhbi5cbiAgICAgICAgaWYgKCEoYXdhaXQgY29uZmlybShgXFxuUHJvY2VlZCB3aXRoIHByb3Zpc2lvbmluZyAke3NwZWMubGFiZWx9P2AsIG9wdGlvbnMueWVzKSkpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2EvN2IuIFNwYXJzZS1jbG9uZSAoaWYgLS1yZXBvIG9yIGFjY2VwdGVkIGludGVyYWN0aXZlbHkpICsgbG9jYXRlIHRoZSBkZXBsb3lcbiAgICAgICAgLy8gZW50cnlwb2ludCwgcmVwb2ludGluZyBjd2QgaW50byB0aGUgY2xvbmUuIFNlZSBib290c3RyYXBBbmRMb2NhdGUuXG4gICAgICAgIGNvbnN0IGxvY2F0ZWQgPSBhd2FpdCBib290c3RyYXBBbmRMb2NhdGUoc3BlYywgYm9vdHN0cmFwLCBib290c3RyYXBDbWQsIHNwYXJzZVBhdGhzLCBjd2QsIG9wdGlvbnMpO1xuICAgICAgICBjd2QgPSBsb2NhdGVkLmN3ZDtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwcGVkID0gbG9jYXRlZC5ib290c3RyYXBwZWQ7XG4gICAgICAgIGlmICghbG9jYXRlZC5vaykgcmV0dXJuO1xuXG4gICAgICAgIC8vIEhvc3QtcG9ydCBwcmUtZmxpZ2h0IOKAlCBub3cgdGhhdCB0aGUgZGVwbG95IHNvdXJjZSBpcyBvbiBkaXNrIChwb3N0LWNsb25lKSxcbiAgICAgICAgLy8gZGVyaXZlIHRoZSBwb3J0cyBmcm9tIGl0IChjb21wb3NlIC8gc2V0dXAuc2gpIGFuZCBzdG9wIG9uIGEgZmF0YWwgY29uZmxpY3RcbiAgICAgICAgLy8gYmVmb3JlIGRlcGxveWluZy4gU2VlIHByZWZsaWdodFBvcnRzLlxuICAgICAgICBpZiAoIShhd2FpdCBwcmVmbGlnaHRQb3J0cyhzcGVjLCB0YXJnZXQsIGN3ZCkpKSB7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3B0LWluIGxvYWRzIOKAlCBvZmZlcmVkIEFGVEVSIHRoZSBjbG9uZSAoc2VlIHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkpOyBpdFxuICAgICAgICAvLyBwcm9tcHRzLCBhZGRpdGl2ZWx5IHNwYXJzZS1mZXRjaGVzIHRoZSBwaWNrZWQgZm9sZGVycywgYW5kIHJlLXJlc29sdmVzIHRoZVxuICAgICAgICAvLyBwb3N0LWluc3RhbGwgc3RlcHMgd2l0aCB0aGUgc2VsZWN0aW9ucy5cbiAgICAgICAgaWYgKHdpbGxQcm9tcHRMb2Fkcykge1xuICAgICAgICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkoXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICB0eXBlb2YgcGFyYW1zLnJlZ2lvbiA9PT0gJ3N0cmluZycgPyBwYXJhbXMucmVnaW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgYm9vdHN0cmFwcGVkLFxuICAgICAgICAgICAgYm9vdHN0cmFwLFxuICAgICAgICAgICAgcG9zdFN0ZXBGbGFncyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gbG9hZGVkLmVuYWJsZWRMb2FkSWRzO1xuICAgICAgICAgIHBvc3RTdGVwcyA9IGxvYWRlZC5zdGVwcztcbiAgICAgICAgICBza2lwcGVkU3RlcHMgPSBsb2FkZWQuc2tpcHBlZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBsb2NhbC9taW5pa3ViZSdzIHNldHVwLnNoIFJFUVVJUkVTIGEgYC5lbnZgIGFuZCBhYm9ydHMgd2l0aG91dCBpdCDigJQgY3JlYXRlXG4gICAgICAgIC8vIGl0IGZyb20gLmVudi5leGFtcGxlIHdpdGggZ2VuZXJhdGVkIHNlY3JldHMgc28gdGhlIGRlcGxveSBpcyBub24taW50ZXJhY3RpdmUuXG4gICAgICAgIC8vIGVjMi9mYXJnYXRlIGFsc28gc2hpcCBhIGAuZW52LmV4YW1wbGVgLCBidXQgdGhlaXIgc2V0dXAuc2ggbmV2ZXIgcmVhZHMgYVxuICAgICAgICAvLyBsb2NhbCBgLmVudmAgKHRoZSBpbnN0YW5jZSBoYW5kbGVzIGl0cyBvd247IEZhcmdhdGUgdXNlcyBTZWNyZXRzIE1hbmFnZXIgdmlhXG4gICAgICAgIC8vIGluaXQtc2VjcmV0cy5zaCksIHNvIHdlIG11c3QgTk9UIGdlbmVyYXRlIG9uZSBmb3IgdGhlbS5cbiAgICAgICAgaWYgKCh0YXJnZXQgPT09ICdsb2NhbCcgfHwgdGFyZ2V0ID09PSAnbWluaWt1YmUnKSAmJiBlbnZGaWxlTWlzc2luZyhjd2QsIHNwZWMuZGlyKSkge1xuICAgICAgICAgIGlmIChhd2FpdCBjb25maXJtKGBcXG4ke3NwZWMuZGlyfS8uZW52IG5vdCBmb3VuZCDigJQgY3JlYXRlIGl0IGZyb20gLmVudi5leGFtcGxlIChnZW5lcmF0ZXMgc2VjcmV0czsgZWRpdCBsYXRlciBmb3Igb3B0aW9uYWwgaW50ZWdyYXRpb25zIGxpa2UgT0F1dGgpP2AsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgY29uc3QgbiA9IGNyZWF0ZUVudkZpbGUoY3dkLCBzcGVjLmRpcik7XG4gICAgICAgICAgICBwcmludFN1Y2Nlc3MoYENyZWF0ZWQgJHtzcGVjLmRpcn0vLmVudiDigJQgJHtufSBzZWNyZXQocykgZ2VuZXJhdGVkLmApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ0NvbnRpbnVpbmcgd2l0aG91dCAuZW52IOKAlCBzZXR1cC5zaCB3aWxsIGFib3J0IGlmIGl0IHN0YXlzIG1pc3NpbmcuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIDdjLiBSdW4gdGhlIGRlcGxveSB3aXRoIGEgYm91bmRlZCBhdXRvLWZpeCArIHJldHJ5IGxvb3AgKHNlZSBydW5EZXBsb3lXaXRoUmV0cnkpLlxuICAgICAgICBjb25zdCB7IHN1Y2NlZWRlZCwgcnVuUGFyYW1zIH0gPSBhd2FpdCBydW5EZXBsb3lXaXRoUmV0cnkoc3BlYywgdXJsLCBjd2QsIHBhcmFtcywgYWlPcHRzLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFzdWNjZWVkZWQpIHsgcHJvY2Vzcy5leGl0Q29kZSA9IDE7IHJldHVybjsgfVxuICAgICAgICBwcmludFN1Y2Nlc3MoJ0RlcGxveSBjb21tYW5kIGNvbXBsZXRlZC4nKTtcblxuICAgICAgICAvLyA3ZC4gU0VTIHBvc3QtZGVwbG95IGd1aWRhbmNlIChhc3luYyBES0lNICsgc2FuZGJveCArIGJvdW5jZSB0b3BpYykuXG4gICAgICAgIC8vIFNFUyBpcyBwcm92aXNpb25lZCBCWSBERUZBVUxUIG9uIEFXUyBkZXBsb3lzLCBzbyBzdXJmYWNlIHRoZSBndWlkYW5jZVxuICAgICAgICAvLyBmb3IgZWMyL2ZhcmdhdGUgdW5sZXNzIHRoZSBvcGVyYXRvciBvcHRlZCBvdXQgd2l0aCAtLW5vLWVtYWlsLlxuICAgICAgICBjb25zdCBzZXNQcm92aXNpb25lZCA9ICh0YXJnZXQgPT09ICdlYzInIHx8IHRhcmdldCA9PT0gJ2ZhcmdhdGUnKSAmJiBydW5QYXJhbXMubm9FbWFpbCAhPT0gdHJ1ZTtcbiAgICAgICAgaWYgKHNlc1Byb3Zpc2lvbmVkKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdTRVMg4oCUIG5leHQgc3RlcHMnKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygc2VzUG9zdERlcGxveUd1aWRhbmNlKCkpIHByaW50SW5mbyhg4oCiICR7bGluZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDdlLiBWZXJpZnkgaGVhbHRoIChDUkVBVEVfQ09NUExFVEUgIT0gc2VydmluZykuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1ZlcmlmeWluZyBoZWFsdGgnKTtcbiAgICAgICAgICAvLyBNaW5pa3ViZSByZWFjaGVzIHRoZSBnYXRld2F5IHZpYSBhIGt1YmVjdGwgcG9ydC1mb3J3YXJkIHRoYXQgc2V0dXAuc2hcbiAgICAgICAgICAvLyBiYWNrZ3JvdW5kcyBhbmQgdGhhdCBjYW4gZGllL2ZhaWwgdG8gYmluZCDigJQgKHJlKXN0YXJ0IGl0IGJlZm9yZSBwb2xsaW5nXG4gICAgICAgICAgLy8gc28gd2UgZG9uJ3Qgc2l0IGF0IHRoZSBnYXRlIG9uIGEgZGVhZCBmb3J3YXJkIHdoaWxlIHRoZSBwb2RzIGFyZSBmaW5lLlxuICAgICAgICAgIGlmICh0YXJnZXQgPT09ICdtaW5pa3ViZScpIHtcbiAgICAgICAgICAgIGF3YWl0IGVuc3VyZU1pbmlrdWJlR2F0ZXdheSh1cmwsIHsgb25JbmZvOiAobSkgPT4gcHJpbnRJbmZvKG0pIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmludEluZm8oYFBvbGxpbmcgJHt1cmx9L2hlYWx0aCDigKZgKTtcbiAgICAgICAgICBjb25zdCBoZWFsdGggPSBhd2FpdCB3YWl0SGVhbHRoeSh1cmwsIHsgb25UaWNrOiAobSkgPT4gcHJpbnRJbmZvKG0pIH0pO1xuICAgICAgICAgIC8vIEdyZWVuIG9ubHkgd2hlbiBmdWxseSByZWFkeTsgYSBcImhlYWx0aCBPSyBidXQgL3JlYWR5IG5ldmVyIGNhbWVcIiBwcm9jZWVkLVxuICAgICAgICAgIC8vIGFueXdheSBzdGF0ZSBpcyBoZWFsdGh5OnRydWUgYnV0IGRlZ3JhZGVkIOKGkiB3YXJuIHNvIGl0IGRvZXNuJ3QgcmVhZCBhcyBkb25lLlxuICAgICAgICAgIChoZWFsdGguaGVhbHRoeSAmJiBoZWFsdGgucmVhZHkgPyBwcmludFN1Y2Nlc3MgOiBwcmludFdhcm5pbmcpKGAke2hlYWx0aC51cmx9IOKAlCAke2hlYWx0aC5kZXRhaWx9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3Zi4gUG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciArIG9wdC1pbiBsb2Fkcywgc21va2UgdGVzdCwgZXZlbnRzLCBjdXN0b20pLlxuICAgICAgICAvLyBTZWUgcnVuUG9zdFN0ZXBzIOKAlCBpdCBzdXJmYWNlcyByZWdpc3RlciArIHRoZSBldmVudHMgYnVuZGxlIGFzIG1hbnVhbCBpbi1WUENcbiAgICAgICAgLy8gbmV4dC1zdGVwcyBvbiBFQzIvRmFyZ2F0ZSBpbnN0ZWFkIG9mIGF1dG8tcnVubmluZyAoYW5kIGZhaWxpbmcpIHRoZW0gbG9jYWxseS5cbiAgICAgICAgYXdhaXQgcnVuUG9zdFN0ZXBzKHBvc3RTdGVwcywgc2tpcHBlZFN0ZXBzLCB0YXJnZXQsIGN3ZCwgYWRtaW5FbnYsIHsgeWVzOiBvcHRpb25zLnllcywgYXV0b1J1bjogd2lsbFByb21wdExvYWRzIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkdFTkVSQUwsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdwcm92aXNpb24nLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|
|
709
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxRQUFRLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQXNCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlHLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixjQUFjLEVBQ2QsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEdBR2hCLE1BQU0scUJB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QyxDQUFDO1lBQ3RGLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLFdBQVc7WUFBRSxNQUFNO1FBRWxDLHVFQUF1RTtRQUN2RSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RyxJQUFJLEdBQUcsRUFBRSxRQUFRLElBQUksTUFBTSxPQUFPLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkcsU0FBUyxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckUsU0FBUztRQUNYLENBQUM7UUFDRCxtRkFBbUY7UUFDbkYsSUFBSSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxPQUFPLENBQUMscUVBQXFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZKLFNBQVM7UUFDWCxDQUFDO1FBQ0QsTUFBTTtJQUNSLENBQUM7SUFDRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FB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TSxDQUFDLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNyRyxDQUFDO1lBRUQsZ0ZBQWdGO1lBQ2hGLCtFQUErRTtZQUMvRSxnRkFBZ0Y7WUFDaEYsTUFBTSxZQUFZLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQ3JILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFO2dCQUN0QyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUs7Z0JBQzNCLElBQUksRUFBRSxJQUFJO2dCQUNWLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFO2FBQy9DLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCBleGlzdHNTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0ICogYXMgcmVhZGxpbmUgZnJvbSAnbm9kZTpyZWFkbGluZS9wcm9taXNlcyc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGRpYWdub3NlRmFpbHVyZSwgaXNBaUNvbmZpZ3VyZWQsIHBhcnNlR29hbCB9IGZyb20gJy4uL2FnZW50L2FpLmpzJztcbmltcG9ydCB7IGJvb3RzdHJhcENvbW1hbmQsIHJlc29sdmVCb290c3RyYXAsIHR5cGUgQm9vdHN0cmFwU3BlYyB9IGZyb20gJy4uL2FnZW50L2Jvb3RzdHJhcC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVFbnZGaWxlLCBlbnZGaWxlTWlzc2luZyB9IGZyb20gJy4uL2FnZW50L2Vudi1maWxlLmpzJztcbmltcG9ydCB7IGVudHJ5cG9pbnRFeGlzdHMsIGV4ZWN1dGlvbkJsb2NrZWQsIHJ1blNjcmlwdCB9IGZyb20gJy4uL2FnZW50L2V4ZWN1dG9yLmpzJztcbmltcG9ydCB7IGRlcml2ZUhlYWx0aFVybCwgd2FpdEhlYWx0aHksIGVuc3VyZU1pbmlrdWJlR2F0ZXdheSB9IGZyb20gJy4uL2FnZW50L2hlYWx0aC5qcyc7XG5pbXBvcnQgeyBjaGVja0hvc3RQb3J0cywgZGlzY292ZXJIb3N0UG9ydHMsIHN0YWNrUnVubmluZyB9IGZyb20gJy4uL2FnZW50L3BvcnRzLmpzJztcbmltcG9ydCB7IHJlc29sdmVQb3N0U3RlcHMsIHR5cGUgUG9zdFN0ZXAsIHR5cGUgU2tpcHBlZFN0ZXAgfSBmcm9tICcuLi9hZ2VudC9wb3N0LXN0ZXBzLmpzJztcbmltcG9ydCB7IGNoZWNrUHJlcmVxcywgZ2l0QXZhaWxhYmxlLCBnaXRTdXBwb3J0c1NwYXJzZUNoZWNrb3V0LCBwcmVyZXFzU2F0aXNmaWVkIH0gZnJvbSAnLi4vYWdlbnQvcHJlcmVxcy5qcyc7XG5pbXBvcnQge1xuICBhc3NlbWJsZUNvbW1hbmQsXG4gIGlzVGFyZ2V0SWQsXG4gIExPQURfU1RFUFMsXG4gIHNwYXJzZVBhdGhzRm9yLFxuICBUQVJHRVRTLFxuICBUQVJHRVRfSURTLFxuICB0ZWFyZG93bkNvbW1hbmQsXG4gIHR5cGUgVGFyZ2V0SWQsXG4gIHR5cGUgVGFyZ2V0U3BlYyxcbn0gZnJvbSAnLi4vYWdlbnQvdGFyZ2V0cy5qcyc7XG5pbXBvcnQgeyBUT09MU19ESVIsIGZldGNoVG9vbCwgaXNGZXRjaGFibGUsIHdpdGhUb29sc09uUGF0aCB9IGZyb20gJy4uL2FnZW50L3Rvb2xzLmpzJztcbmltcG9ydCB7IG1hdGNoSXNzdWVzLCBzZXNQb3N0RGVwbG95R3VpZGFuY2UgfSBmcm9tICcuLi9hZ2VudC90cm91Ymxlc2hvb3QuanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50U2VjdGlvbiwgcHJpbnRLZXlWYWx1ZSwgcHJpbnRJbmZvLCBwcmludFdhcm5pbmcsIHByaW50RXJyb3IsIHByaW50U3VjY2VzcyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5cbi8qKlxuICogUmVhZCBvbmUgbGluZSBvZiB0cmltbWVkIGlucHV0IGZyb20gdGhlIHRlcm1pbmFsLCBvd25pbmcgdGhlIHJlYWRsaW5lXG4gKiBsaWZlY3ljbGUuIFVzZWQgZGlyZWN0bHkgZm9yIHRoZSBkZXN0cnVjdGl2ZSB0ZWFyZG93biBnYXRlIChhIHkvTiBpcyB0b28gZWFzeVxuICogdG8gZmF0LWZpbmdlciwgc28gd2UgcmVxdWlyZSB0aGUgb3BlcmF0b3IgdG8gVFlQRSB0aGUgdGFyZ2V0IGlkIGJhY2spLCBhbmQgYXNcbiAqIHRoZSBiYXNpcyBmb3IgYGNvbmZpcm1gLiBEZWxpYmVyYXRlbHkgaGFzIG5vIGF1dG8tYWNjZXB0LlxuICovXG5hc3luYyBmdW5jdGlvbiBhc2socXVlc3Rpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHsgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQgfSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBybC5xdWVzdGlvbihxdWVzdGlvbikpLnRyaW0oKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBybC5jbG9zZSgpO1xuICB9XG59XG5cbi8qKiBJbnRlcmFjdGl2ZSB5L04gY29uZmlybWF0aW9uOyBhdXRvLXRydWUgd2hlbiBgYXV0b1llc2AgKHRoZSBgLS15ZXNgIGZsYWcpLiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uZmlybShxdWVzdGlvbjogc3RyaW5nLCBhdXRvWWVzOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhdXRvWWVzKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgYW5zd2VyID0gKGF3YWl0IGFzayhgJHtxdWVzdGlvbn0gW3kvTl0gYCkpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBhbnN3ZXIgPT09ICd5JyB8fCBhbnN3ZXIgPT09ICd5ZXMnO1xufVxuXG4vKiogQ29tbWFuZGVyIGNvbGxlY3RvcjogYWNjdW11bGF0ZSByZXBlYXRlZCBgLS1wb3N0LXN0ZXBgIHZhbHVlcyBpbiBvcmRlci4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RTdGVwKHZhbHVlOiBzdHJpbmcsIGFjYzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uYWNjLCB2YWx1ZV07XG59XG5cbi8qKlxuICogSG9zdC1wb3J0IHByZS1mbGlnaHQgKGxvY2FsL21pbmlrdWJlKS4gUG9ydHMgYXJlIERFUklWRUQgZnJvbSB0aGUgdGFyZ2V0J3MgY2xvbmVkXG4gKiBkZXBsb3kgc291cmNlIChjb21wb3NlIC8gc2V0dXAuc2gpIHNvIHRoZSBsaXN0IGNhbid0IGRyaWZ0IOKAlCBoZW5jZSB0aGlzIHJ1bnMgQUZURVJcbiAqIHRoZSBjbG9uZS4gQSB0YWtlbiBwb3J0IG1ha2VzIGEgY29udGFpbmVyL2ZvcndhcmQgZmFpbCB0byBiaW5kIG1pZC1kZXBsb3kgKGZvciB0aGVcbiAqIGdhdGV3YXksIGEgc2lsZW50IHVucmVhY2hhYmxlIGhhbmcpLiBQcmludHMgYSDinJMv4pyXIHN1bW1hcnkgYW5kIHJldHVybnMgZmFsc2UgT05MWVxuICogd2hlbiB0aGUgY2FsbGVyIG11c3QgQUJPUlQgKGEgZmF0YWwgbG9jYWwgY29uZmxpY3QpLiBtaW5pa3ViZSBwb3J0cyBhcmUgbWFuYWdlZFxuICogZm9yd2FyZHMgKHNldHVwLnNoIHBraWxscy9yZXN0YXJ0cyB0aGVtKSwgc28gYSBjb25mbGljdCB0aGVyZSB3YXJucyBidXQgcHJvY2VlZHMuXG4gKiBSZW1vdGUgdGFyZ2V0cyAoZWMyL2ZhcmdhdGUpIGJpbmQgbm90aGluZyBsb2NhbGx5IOKGkiByZXR1cm5zIHRydWUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVmbGlnaHRQb3J0cyhzcGVjOiBUYXJnZXRTcGVjLCB0YXJnZXQ6IFRhcmdldElkLCBjd2Q6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBwb3J0cyA9IGRpc2NvdmVySG9zdFBvcnRzKHRhcmdldCwgY3dkLCBzcGVjKTtcbiAgaWYgKHBvcnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IHBvcnRDaGVja3MgPSBhd2FpdCBjaGVja0hvc3RQb3J0cyhwb3J0cyk7XG4gIGNvbnN0IHRha2VuID0gcG9ydENoZWNrcy5maWx0ZXIoKGMpID0+ICFjLmF2YWlsYWJsZSk7XG4gIHByaW50U2VjdGlvbignUG9ydCBhdmFpbGFiaWxpdHknKTtcbiAgZm9yIChjb25zdCBjIG9mIHBvcnRDaGVja3MpIHByaW50SW5mbyhgJHtjLmF2YWlsYWJsZSA/ICfinJMnIDogJ+Kclyd9ICR7U3RyaW5nKGMucG9ydCkucGFkRW5kKDUpfSDigJQgJHtjLnNlcnZpY2V9YCk7XG4gIGlmICh0YWtlbi5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICAvLyBsb2NhbCBQVUJMSVNIRVMgdGhlc2UgcG9ydHMgYXQgYGRvY2tlciBjb21wb3NlIHVwYCB0aW1lLCBzbyBhIGNvbmZsaWN0IGlzIGZhdGFsLlxuICAvLyBtaW5pa3ViZSdzIGFyZSBrdWJlY3RsIHBvcnQtZm9yd2FyZHMgc2V0dXAuc2ggcGtpbGxzICsgcmVzdGFydHMgKGFuZFxuICAvLyBlbnN1cmVNaW5pa3ViZUdhdGV3YXkgcmVjb3ZlcnMpLCBzbyBhIHN0YWxlIGZvcndhcmQgbXVzdCBOT1QgYmxvY2sgYSByZS1ydW4uXG4gIGNvbnN0IGZhdGFsID0gdGFyZ2V0ID09PSAnbG9jYWwnO1xuICAvLyDigKZVTkxFU1MgdGhlIGxvY2FsIHN0YWNrIGlzIGFscmVhZHkgcnVubmluZzogdGhvc2UgcG9ydHMgYXJlIGhlbGQgYnkgWU9VUiBPV05cbiAgLy8gc3RhY2ssIGFuZCBgZG9ja2VyIGNvbXBvc2UgdXBgIG5vLW9wcyB0aGVtIOKAlCB0aGlzIGlzIGV4YWN0bHkgaG93IHlvdSByZS1ydW4gdG9cbiAgLy8gYWRkIGxvYWRzL29wdGlvbnMuIERvbid0IGJsb2NrICh0aGUgd291bGQtYmUgY29uZmxpY3QgaXMgYSBzZWxmLWNvbmZsaWN0KS5cbiAgaWYgKGZhdGFsICYmIHN0YWNrUnVubmluZyh0YXJnZXQsIGN3ZCwgc3BlYykpIHtcbiAgICBwcmludFdhcm5pbmcoYFxcbiR7dGFrZW4ubGVuZ3RofSBwb3J0KHMpIGFyZSBoZWxkIGJ5IHlvdXIgYWxyZWFkeS1ydW5uaW5nICR7c3BlYy5sYWJlbH0gc3RhY2sg4oCUIHJlLXJ1bm5pbmcganVzdCByZXN1bWVzIGl0IChubyByZWFsIGNvbmZsaWN0KSwgc28gY29udGludWluZy5gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBsZWFkID0gYCR7dGFrZW4ubGVuZ3RofSByZXF1aXJlZCBwb3J0KHMpIGFscmVhZHkgaW4gdXNlOiAke3Rha2VuLm1hcCgoYykgPT4gYy5wb3J0KS5qb2luKCcsICcpfWA7XG4gIChmYXRhbCA/IHByaW50RXJyb3IgOiBwcmludFdhcm5pbmcpKGZhdGFsXG4gICAgPyBgXFxuJHtsZWFkfSDigJQgdGhlIGRlcGxveSBjYW4ndCBiaW5kIHRoZW0gYW5kIHdvdWxkIGZhaWwgbWlkLXdheS4gRnJlZSB0aGVtIGFuZCByZS1ydW46YFxuICAgIDogYFxcbiR7bGVhZH0g4oCUIG9uIG1pbmlrdWJlIHRoZXNlIGFyZSB1c3VhbGx5IGEgcHJldmlvdXMgcnVuJ3MgcG9ydC1mb3J3YXJkcyAoc2V0dXAuc2ggcmVzdGFydHMgdGhlbSkuIEZyZWUgYW55IE5PTi1taW5pa3ViZSBob2xkZXIgaWYgdGhlIGdhdGV3YXkgc3RheXMgdW5yZWFjaGFibGU6YCk7XG4gIGZvciAoY29uc3QgYyBvZiB0YWtlbikgcHJpbnRJbmZvKGAgIOKAoiBwb3J0ICR7Yy5wb3J0fSAoJHtjLnNlcnZpY2V9KSDigJQgZmluZCB0aGUgaG9sZGVyOiAgbHNvZiAtaSA6JHtjLnBvcnR9YCk7XG4gIGlmICh0YWtlbi5zb21lKChjKSA9PiBjLnBvcnQgPT09IDUwMDApKSB7XG4gICAgcHJpbnRJbmZvKCcgIE5vdGU6IG9uIG1hY09TLCBwb3J0IDUwMDAgaXMgdXN1YWxseSBBaXJQbGF5IFJlY2VpdmVyIOKAlCBTeXN0ZW0gU2V0dGluZ3Mg4oaSIEdlbmVyYWwg4oaSIEFpckRyb3AgJiBIYW5kb2ZmIOKGkiBBaXJQbGF5IFJlY2VpdmVyIChvZmYpLicpO1xuICB9XG4gIHJldHVybiAhZmF0YWw7XG59XG5cbi8qKlxuICogVGVhcmRvd24gbW9kZSDigJQgdGhlIGRlc3Ryb3kgY291bnRlcnBhcnQgb2YgcHJvdmlzaW9uaW5nLCBnYXRlZCBIQVJERVIgdGhhbiBkZXBsb3k6XG4gKiBBV1MgdGFyZ2V0cyBhcmUgaXJyZXZlcnNpYmxlLCBzbyB0aGUgb3BlcmF0b3IgbXVzdCBUWVBFIHRoZSB0YXJnZXQgaWQgKC0tZm9yY2VcbiAqIGJ5cGFzc2VzIGZvciBDSTsgLS15ZXMgYWxvbmUgZG9lcyBOT1QpLiBUZXJtaW5hbDogb3ducyBpdHMgb3V0cHV0ICsgZXhpdENvZGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5UZWFyZG93bihcbiAgc3BlYzogVGFyZ2V0U3BlYyxcbiAgdGFyZ2V0OiBUYXJnZXRJZCxcbiAgY3dkOiBzdHJpbmcsXG4gIGV4ZWN1dGlvbklkOiBzdHJpbmcsXG4gIG9wdHM6IHsgc3RhY2tOYW1lPzogc3RyaW5nOyByZWdpb24/OiBzdHJpbmc7IGZvcmNlPzogYm9vbGVhbjsgeWVzPzogYm9vbGVhbjsganNvbj86IGJvb2xlYW4gfSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGNvbW1hbmQ6IGRvd25Db21tYW5kLCBkZXN0cnVjdGl2ZSB9ID0gdGVhcmRvd25Db21tYW5kKHRhcmdldCwge1xuICAgIHN0YWNrTmFtZTogb3B0cy5zdGFja05hbWUsXG4gICAgcmVnaW9uOiBvcHRzLnJlZ2lvbixcbiAgICAvLyBPdXIgdHlwZWQgZ2F0ZSBJUyB0aGUgY29uZmlybWF0aW9uIOKAlCBmb3J3YXJkIC0teWVzIHNvIHRoZSBuYXRpdmUgc2NyaXB0XG4gICAgLy8gKEZhcmdhdGUpIGRvZXNuJ3QgYWxzbyBibG9jayBvbiBzdGRpbiB3ZSdyZSBpbmhlcml0aW5nLlxuICAgIGFzc3VtZVllczogdHJ1ZSxcbiAgfSk7XG4gIGlmIChvcHRzLmpzb24pIHtcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCB0YXJnZXQsIHRlYXJkb3duOiB0cnVlLCBkZXN0cnVjdGl2ZSwgZGVzdHJveXM6IHNwZWMuZGVzdHJveXMsIGNvbW1hbmQ6IGRvd25Db21tYW5kIH0sIG51bGwsIDIpKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJpbnRTZWN0aW9uKGBUZWFyZG93biBwbGFuIOKAlCAke3NwZWMubGFiZWx9YCk7XG4gIHByaW50S2V5VmFsdWUoeyAnVGFyZ2V0JzogdGFyZ2V0LCAnRGVzdHJveXMnOiBzcGVjLmRlc3Ryb3lzLCAnU3RvcHMgY29zdCc6IHNwZWMuY29zdCB9KTtcbiAgcHJpbnRTZWN0aW9uKCdDb21tYW5kIHRvIHJ1bicpO1xuICBwcmludEluZm8oZG93bkNvbW1hbmQpO1xuICBpZiAoZGVzdHJ1Y3RpdmUgJiYgIW9wdHMuZm9yY2UpIHtcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGFzayhgXFxuVGhpcyBpcyBJUlJFVkVSU0lCTEUuIFR5cGUgXCIke3RhcmdldH1cIiB0byBjb25maXJtIHRlYXJkb3duOiBgKTtcbiAgICBpZiAodG9rZW4gIT09IHRhcmdldCkge1xuICAgICAgcHJpbnRXYXJuaW5nKCdUaGF0IGRpZG5cXCd0IG1hdGNoLCBzbyBub3RoaW5nIHdhcyBkZXN0cm95ZWQg4oCUIHlvdSBoYXZlIHRvIHR5cGUgdGhlIGV4YWN0IHRhcmdldCBpZCB0byBjb25maXJtLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBlbHNlIGlmICghZGVzdHJ1Y3RpdmUgJiYgIW9wdHMuZm9yY2UgJiYgIShhd2FpdCBjb25maXJtKCdcXG5Qcm9jZWVkIHdpdGggdGVhcmRvd24gKHN0b3BzIHRoZSBzdGFjazsgb24tZGlzayBkYXRhIHBlcnNpc3RzKT8nLCBvcHRzLnllcyA/PyBmYWxzZSkpKSB7XG4gICAgcHJpbnRXYXJuaW5nKCdObyBwcm9ibGVtIOKAlCBub3RoaW5nIHdhcyBjaGFuZ2VkLicpO1xuICAgIHJldHVybjtcbiAgfVxuICBwcmludFNlY3Rpb24oJ1RlYXJpbmcgZG93bicpO1xuICBjb25zdCB7IGNvZGU6IGRvd25Db2RlIH0gPSBhd2FpdCBydW5TY3JpcHQoZG93bkNvbW1hbmQsIGN3ZCwgeyBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgaWYgKGRvd25Db2RlICE9PSAwKSB7XG4gICAgcHJpbnRFcnJvcihgXFxuVGVhcmRvd24gZmFpbGVkIChleGl0ICR7ZG93bkNvZGV9KS4gSW5zcGVjdCB0aGUgc3RhY2svY29udGFpbmVycyBhbmQgcmV0cnkuYCk7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByaW50U3VjY2VzcygnVGVhcmRvd24gY29tcGxldGUuJyk7XG59XG5cbi8qKlxuICogUnVuIHRoZSBkZXBsb3kgY29tbWFuZCAocmVhbCwgc2VjcmV0cyB1bm1hc2tlZCwgc3RyZWFtZWQgKyBjYXB0dXJlZCkgd2l0aCBhXG4gKiBib3VuZGVkIGF1dG8tZml4ICsgcmV0cnkgbG9vcCDigJQgdGhlIGRlcGxveSBzY3JpcHRzIGFyZSBpZGVtcG90ZW50LCBzbyBhIGZpeGVkXG4gKiByZS1ydW4gcmVzdW1lcyByYXRoZXIgdGhhbiBzdGFydGluZyBvdmVyLiBSZXR1cm5zIHdoZXRoZXIgaXQgc3VjY2VlZGVkIHBsdXMgdGhlXG4gKiAocG9zc2libHkgZml4LWFkanVzdGVkKSBwYXJhbXMsIHdoaWNoIHRoZSBjYWxsZXIgbmVlZHMgZm9yIFNFUyBndWlkYW5jZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkRlcGxveVdpdGhSZXRyeShcbiAgc3BlYzogVGFyZ2V0U3BlYyxcbiAgdXJsOiBzdHJpbmcgfCBudWxsLFxuICBjd2Q6IHN0cmluZyxcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgYWlPcHRzOiB7IHByb3ZpZGVyPzogc3RyaW5nOyBtb2RlbD86IHN0cmluZyB9LFxuICBvcHRzOiB7IHJldHJpZXM/OiBzdHJpbmc7IHllcz86IGJvb2xlYW4gfSxcbik6IFByb21pc2U8eyBzdWNjZWVkZWQ6IGJvb2xlYW47IHJ1blBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4ge1xuICBjb25zdCBtYXhBdHRlbXB0cyA9IDEgKyBNYXRoLm1heCgwLCBwYXJzZUludChvcHRzLnJldHJpZXMgPz8gJycsIDEwKSB8fCAwKTtcbiAgbGV0IHJ1blBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBwYXJhbXM7XG4gIGxldCBzdWNjZWVkZWQgPSBmYWxzZTtcbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gbWF4QXR0ZW1wdHM7IGF0dGVtcHQrKykge1xuICAgIGNvbnN0IHJlYWxDb21tYW5kID0gYXNzZW1ibGVDb21tYW5kKHNwZWMsIHJ1blBhcmFtcywgeyBtYXNrOiBmYWxzZSB9KS5jb21tYW5kO1xuICAgIHByaW50U2VjdGlvbihhdHRlbXB0ID09PSAxID8gJ0RlcGxveWluZycgOiBgRGVwbG95aW5nIOKAlCByZXRyeSAke2F0dGVtcHQgLSAxfWApO1xuICAgIGlmIChhdHRlbXB0ID09PSAxKSB7XG4gICAgICBwcmludEluZm8oYERlcGxveWluZyAke3NwZWMubGFiZWx9IOKGkiAke3VybH1gKTtcbiAgICAgIHByaW50SW5mbyhzcGVjLmRlcGxveXMpO1xuICAgICAgcHJpbnRJbmZvKCdTdHJlYW1pbmcgdGhlIGRlcGxveSBiZWxvdyDigJQgZmlyc3QgcnVuIGlzIHRoZSBzbG93IG9uZSAoaW1hZ2UgcHVsbHMgKyBjZXJ0IGdlbmVyYXRpb24pLicpO1xuICAgIH1cbiAgICBjb25zdCB7IGNvZGUsIHRhaWwgfSA9IGF3YWl0IHJ1blNjcmlwdChyZWFsQ29tbWFuZCwgY3dkLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgaWYgKGNvZGUgPT09IDApIHsgc3VjY2VlZGVkID0gdHJ1ZTsgYnJlYWs7IH1cblxuICAgIHByaW50RXJyb3IoYFxcbkRlcGxveSBmYWlsZWQgKGV4aXQgJHtjb2RlfSkuYCk7XG4gICAgY29uc3QgaXNzdWVzID0gbWF0Y2hJc3N1ZXModGFpbCk7XG4gICAgaWYgKGlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICBwcmludFNlY3Rpb24oJ0xpa2VseSBjYXVzZScpO1xuICAgICAgZm9yIChjb25zdCBpIG9mIGlzc3VlcykgcHJpbnRJbmZvKGDigKIgJHtpLmNhdXNlfVxcbiAg4oaSICR7aS5zdWdnZXN0aW9ufWApO1xuICAgIH1cbiAgICBpZiAoaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSkge1xuICAgICAgY29uc3QgZGlhZ25vc2lzID0gYXdhaXQgZGlhZ25vc2VGYWlsdXJlKHJlZGFjdFNlY3JldHModGFpbCwgc3BlYywgcnVuUGFyYW1zKSwgYWlPcHRzKTtcbiAgICAgIGlmIChkaWFnbm9zaXMpIHsgcHJpbnRTZWN0aW9uKCdEaWFnbm9zaXMnKTsgcHJpbnRJbmZvKGRpYWdub3Npcyk7IH1cbiAgICB9XG4gICAgaWYgKGF0dGVtcHQgPj0gbWF4QXR0ZW1wdHMpIGJyZWFrO1xuXG4gICAgLy8gQXV0by1maXg6IGEgcmV0cnlhYmxlIGlzc3VlIHdpdGggYSBwYXJhbSB3ZSBoYXZlbid0IGFscmVhZHkgYXBwbGllZC5cbiAgICBjb25zdCBmaXggPSBpc3N1ZXMuZmluZCgoaSkgPT4gaS5yZXRyeWFibGUgJiYgaS5wYXJhbUZpeCAmJiBydW5QYXJhbXNbaS5wYXJhbUZpeC5rZXldICE9PSBpLnBhcmFtRml4LnZhbHVlKTtcbiAgICBpZiAoZml4Py5wYXJhbUZpeCAmJiBhd2FpdCBjb25maXJtKGBcXG5BcHBseSBmaXggYW5kIHJldHJ5IOKAlCAke2ZpeC5zdWdnZXN0aW9ufWAsIG9wdHMueWVzID8/IGZhbHNlKSkge1xuICAgICAgcnVuUGFyYW1zID0geyAuLi5ydW5QYXJhbXMsIFtmaXgucGFyYW1GaXgua2V5XTogZml4LnBhcmFtRml4LnZhbHVlIH07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy8gUmV0cnlhYmxlIGJ1dCBubyBwYXJhbSBjaGFuZ2UgKGUuZy4gQUNNIEROUyBwcm9wYWdhdGlvbikg4oCUIG9mZmVyIGEgcGxhaW4gcmUtcnVuLlxuICAgIGlmICghZml4ICYmIGlzc3Vlcy5zb21lKChpKSA9PiBpLnJldHJ5YWJsZSkgJiYgYXdhaXQgY29uZmlybSgnXFxuUmV0cnkgdGhlIGRlcGxveSAoc2FmZSB0byByZS1ydW4g4oCUIGl0IHJlc3VtZXMgd2hlcmUgaXQgbGVmdCBvZmYpPycsIG9wdHMueWVzID8/IGZhbHNlKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiB7IHN1Y2NlZWRlZCwgcnVuUGFyYW1zIH07XG59XG5cbi8qKlxuICogRXhlY3V0ZSB0aGUgcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciDihpIgbG9hZHMg4oaSIHNtb2tlIOKGkiBldmVudHMg4oaSIGN1c3RvbSkuIE9uXG4gKiBFQzIvRmFyZ2F0ZSwgcmVnaXN0ZXIgKyB0aGUgZXZlbnRzIGJ1bmRsZSAoc3RvcmUtdG9rZW4g4oaSIHNldHVwLWV2ZW50cykgbmVlZCBhXG4gKiByZWFjaGFibGUsIFJFR0lTVEVSRUQgcGxhdGZvcm0gdGhhdCdzIG9ubHkgdHJ1ZSBpbnNpZGUgdGhlIFZQQywgc28gdGhvc2UgYXJlXG4gKiBTVVJGQUNFRCBhcyBvcmRlcmVkIG1hbnVhbCBuZXh0LXN0ZXBzIGluc3RlYWQgb2YgYXV0by1ydW4gKHRoZXknZCBmYWlsIGxvY2FsbHkpLlxuICogU2V0cyBleGl0Q29kZSBvbiBhIHN0ZXAgZmFpbHVyZTsgdGhlIHBsYXRmb3JtIGlzIGFscmVhZHkgZGVwbG95ZWQgYnkgdGhpcyBwb2ludC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blBvc3RTdGVwcyhcbiAgcG9zdFN0ZXBzOiBQb3N0U3RlcFtdLFxuICBza2lwcGVkU3RlcHM6IFNraXBwZWRTdGVwW10sXG4gIHRhcmdldDogVGFyZ2V0SWQsXG4gIGN3ZDogc3RyaW5nLFxuICBhZG1pbkVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgb3B0czogeyB5ZXM/OiBib29sZWFuOyBhdXRvUnVuPzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwb3N0U3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIGZvciAoY29uc3QgcyBvZiBza2lwcGVkU3RlcHMpIHByaW50V2FybmluZyhgU2tpcHBlZCBwb3N0LXN0ZXAgJHtzLmlkfTogJHtzLnJlYXNvbn1gKTtcbiAgY29uc3QgaXNSZW1vdGUgPSAoaWQ6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICAodGFyZ2V0ID09PSAnZWMyJyB8fCB0YXJnZXQgPT09ICdmYXJnYXRlJykgJiYgKGlkID09PSAncmVnaXN0ZXInIHx8IGlkID09PSAnc3RvcmUtdG9rZW4nIHx8IGlkID09PSAnZXZlbnRzJyk7XG4gIGNvbnN0IHJ1bm5hYmxlID0gcG9zdFN0ZXBzLmZpbHRlcigocykgPT4gIWlzUmVtb3RlKHMuaWQpKTtcbiAgY29uc3QgcmVtb3RlID0gcG9zdFN0ZXBzLmZpbHRlcigocykgPT4gaXNSZW1vdGUocy5pZCkpO1xuICBpZiAocmVtb3RlLmxlbmd0aCA+IDApIHtcbiAgICBwcmludEluZm8oJ1xcbk5leHQgKHJ1biBmcm9tIGluc2lkZSB0aGUgVlBDLCBpbiB0aGlzIG9yZGVyKTonKTtcbiAgICBmb3IgKGNvbnN0IHMgb2YgcmVtb3RlKSBwcmludEluZm8oYCAg4oCiICR7cy5sYWJlbH0g4oCUICR7cy5jb21tYW5kfWApO1xuICB9XG4gIGlmIChydW5uYWJsZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgLy8gV2hlbiB0aGUgbG9hZHMgd2VyZSBwaWNrZWQgaW50ZXJhY3RpdmVseSAoYXV0b1J1biksIHRoZSB1c2VyIGFscmVhZHkgb3B0ZWQgaW4g4oCUIHNraXBcbiAgLy8gdGhlIHJlZHVuZGFudCBzZWNvbmQgY29uZmlybS4gRmxhZy1kcml2ZW4gLyBub24taW50ZXJhY3RpdmUgcnVucyBzdGlsbCBnYXRlIGhlcmUuXG4gIGlmIChvcHRzLmF1dG9SdW4gfHwgYXdhaXQgY29uZmlybShgXFxuUnVuICR7cnVubmFibGUubGVuZ3RofSBwb3N0LWluc3RhbGwgc3RlcChzKSBub3c/YCwgb3B0cy55ZXMgPz8gZmFsc2UpKSB7XG4gICAgaWYgKG9wdHMuYXV0b1J1bikgcHJpbnRJbmZvKGBcXG5SdW5uaW5nIHRoZSAke3J1bm5hYmxlLmxlbmd0aH0gcG9zdC1pbnN0YWxsIHN0ZXAocykgeW91IHNlbGVjdGVk4oCmYCk7XG4gICAgZm9yIChjb25zdCBzIG9mIHJ1bm5hYmxlKSB7XG4gICAgICBwcmludFNlY3Rpb24oYFBvc3Qtc3RlcDogJHtzLmxhYmVsfWApO1xuICAgICAgLy8gcmVnaXN0ZXIgKGxvY2FsL21pbmlrdWJlKSBsb2dzIGludG8gdGhlIHBsYXRmb3JtLCBzbyBpdCBuZWVkcyB0aGUgYWRtaW4gY3JlZHNcbiAgICAgIC8vIChQTEFURk9STV9JREVOVElGSUVSIC8gUExBVEZPUk1fUEFTU1dPUkQpIG9uIHRvcCBvZiBpdHMgc3RlcCBlbnYuXG4gICAgICBjb25zdCBuZWVkc0NyZWRzID0gcy5pZCA9PT0gJ3JlZ2lzdGVyJyB8fCBzLmlkID09PSAnc3RvcmUtdG9rZW4nO1xuICAgICAgY29uc3QgZW52ID0gbmVlZHNDcmVkcyA/IHsgLi4ucy5lbnYsIC4uLmFkbWluRW52IH0gOiBzLmVudjtcbiAgICAgIC8vIExvYWRzL3Ntb2tlIGFyZSBub2lzeSArIG5vbi1pbnRlcmFjdGl2ZSDihpIgcnVuIFFVSUVUIChjYXB0dXJlLCBzaG93IG9ubHkgb25cbiAgICAgIC8vIGZhaWx1cmUpLiBFeGNlcHRpb246IGEgcmVnaXN0ZXIgd2l0aCBubyBhZG1pbiBjcmVkcyBwcm9tcHRzLCBzbyBpdCBtdXN0IHN0cmVhbS5cbiAgICAgIGNvbnN0IGludGVyYWN0aXZlUmVnaXN0ZXIgPSBzLmlkID09PSAncmVnaXN0ZXInICYmICFhZG1pbkVudi5QTEFURk9STV9JREVOVElGSUVSO1xuICAgICAgY29uc3QgcXVpZXQgPSAhaW50ZXJhY3RpdmVSZWdpc3RlcjtcbiAgICAgIGlmIChxdWlldCkgcHJpbnRJbmZvKGAke3MuY29tbWFuZH1cXG4gIOKApnJ1bm5pbmcgKG91dHB1dCBzaG93biBvbmx5IGlmIGl0IGZhaWxzKWApO1xuICAgICAgZWxzZSBwcmludEluZm8ocy5jb21tYW5kKTtcbiAgICAgIGNvbnN0IHsgY29kZSwgdGFpbCB9ID0gYXdhaXQgcnVuU2NyaXB0KHMuY29tbWFuZCwgY3dkLCB7IHF1aWV0LCBjYXB0dXJlOiBmYWxzZSwgZW52IH0pO1xuICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgaWYgKHF1aWV0ICYmIHRhaWwpIHsgcHJpbnRFcnJvcignXFxuLS0tIGxhc3Qgb3V0cHV0IC0tLScpOyBwcmludEluZm8odGFpbCk7IH1cbiAgICAgICAgcHJpbnRFcnJvcihgXFxuUG9zdC1zdGVwICcke3MuaWR9JyBmYWlsZWQgKGV4aXQgJHtjb2RlfSkuIFRoZSBwbGF0Zm9ybSBpcyBkZXBsb3llZDsgZml4IGFuZCByZS1ydW4gdGhlIHN0ZXAgbWFudWFsbHkuYCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHByaW50U3VjY2VzcyhgJHtzLmlkfSDinJNgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcHJpbnRJbmZvKCdcXG5Ta2lwcGVkIHBvc3QtaW5zdGFsbCBzdGVwcy4gUnVuIHRoZSBjb21tYW5kcyBhYm92ZSBtYW51YWxseSB3aGVuIHJlYWR5LicpO1xuICB9XG59XG5cbi8qKlxuICogU3BhcnNlLWNsb25lIHRoZSBwbGF0Zm9ybSByZXBvICh3aGVuIC0tcmVwbywgb3IgYWNjZXB0ZWQgdmlhIHRoZSBpbnRlcmFjdGl2ZVxuICogb2ZmZXIpLCByZXBvaW50IGN3ZCBpbnRvIGl0LCBhbmQgdmVyaWZ5IHRoZSBkZXBsb3kgZW50cnlwb2ludCBleGlzdHMuIE93bnMgdGhlXG4gKiBjd2QvYm9vdHN0cmFwcGVkIHN0YXRlLiBTZXRzIGV4aXRDb2RlIG9uIGEgaGFyZCBmYWlsdXJlIChjbG9uZSBlcnJvciAvIG1pc3NpbmdcbiAqIGVudHJ5cG9pbnQpLCBtYXRjaGluZyB0aGUgb2xkIGlubGluZSBiZWhhdmlvcjsgYSBwbGFpbiBkZWNsaW5lIGxlYXZlcyBleGl0Q29kZVxuICogdW50b3VjaGVkLiBSZXR1cm5zIG9rOmZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGFib3J0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYm9vdHN0cmFwQW5kTG9jYXRlKFxuICBzcGVjOiBUYXJnZXRTcGVjLFxuICBib290c3RyYXA6IEJvb3RzdHJhcFNwZWMsXG4gIGJvb3RzdHJhcENtZDogc3RyaW5nIHwgbnVsbCxcbiAgc3BhcnNlUGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBzdGFydEN3ZDogc3RyaW5nLFxuICBvcHRzOiB7IHllcz86IGJvb2xlYW4gfSxcbik6IFByb21pc2U8eyBjd2Q6IHN0cmluZzsgYm9vdHN0cmFwcGVkOiBib29sZWFuOyBvazogYm9vbGVhbiB9PiB7XG4gIGxldCBjd2QgPSBzdGFydEN3ZDtcbiAgbGV0IGJvb3RzdHJhcHBlZCA9IGZhbHNlO1xuICAvLyBTaGFyZWQgYnkgYC0tcmVwb2AgYW5kIHRoZSBpbnRlcmFjdGl2ZSBvZmZlci4gUmVwb2ludHMgY3dkICsgc2V0cyBib290c3RyYXBwZWQ7XG4gIC8vIGBib290c3RyYXBwZWRgIHJlY29yZHMgd2hldGhlciB3ZSBjcmVhdGVkIHRoZSBjbG9uZSAodnMuIGFuIGV4aXN0aW5nIGNoZWNrb3V0KSDigJRcbiAgLy8gb25seSB0aGVuIGNhbiB0aGUgY2FsbGVyIGFkZGl0aXZlbHkgc3BhcnNlLWZldGNoIGxvYWQgZm9sZGVycy5cbiAgY29uc3QgYm9vdHN0cmFwQ2xvbmUgPSBhc3luYyAoKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgY29uc3QgY21kID0gYm9vdHN0cmFwQ29tbWFuZChib290c3RyYXApO1xuICAgIHByaW50U2VjdGlvbignQm9vdHN0cmFwJyk7XG4gICAgcHJpbnRJbmZvKGNtZCk7XG4gICAgY29uc3QgeyBjb2RlIH0gPSBhd2FpdCBydW5TY3JpcHQoY21kLCBjd2QsIHsgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgIHByaW50RXJyb3IoYFxcblRoZSBjbG9uZSBkaWRuJ3QgZmluaXNoIChleGl0ICR7Y29kZX0pLiBEb3VibGUtY2hlY2sgdGhlIHJlcG8gVVJMIC8gcmVmIChvciB5b3VyIG5ldHdvcmspIGFuZCBnaXZlIGl0IGFub3RoZXIgZ28uYCk7XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY3dkID0gcGF0aC5yZXNvbHZlKGN3ZCwgYm9vdHN0cmFwLndvcmtkaXIpO1xuICAgIGJvb3RzdHJhcHBlZCA9IHRydWU7XG4gICAgcHJpbnRTdWNjZXNzKGBSZXBvIGlzIHJlYWR5IOKAlCBjb250aW51aW5nIGZyb20gJHtjd2R9YCk7XG4gICAgY29uc3QgYWJzZW50ID0gc3BhcnNlUGF0aHMuZmlsdGVyKChwKSA9PiAhZXhpc3RzU3luYyhwYXRoLmpvaW4oY3dkLCBwKSkpO1xuICAgIGlmIChhYnNlbnQubGVuZ3RoID4gMCkge1xuICAgICAgcHJpbnRFcnJvcihgXFxuVGhlIHNwYXJzZSBjbG9uZSBpcyBtaXNzaW5nICR7YWJzZW50LmpvaW4oJywgJyl9IOKAlCB0aGF0IHJlZiBtYXkgbm90IGhhdmUgdGhvc2UgZm9sZGVycy4gVHJ5IGEgZGlmZmVyZW50IC0tcmVmLmApO1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIGAtLXJlcG9gOiBjbG9uZSB1cCBmcm9udCAobXVzdCBwcmVjZWRlIHRoZSBlbnRyeXBvaW50IGNoZWNrKS5cbiAgaWYgKGJvb3RzdHJhcENtZCkge1xuICAgIHByaW50SW5mbyhgXFxuQm9vdHN0cmFwIOKGkiBjbG9uZSAke2Jvb3RzdHJhcC5yZXBvfSBAICR7Ym9vdHN0cmFwLnJlZn0gaW50byAke2Jvb3RzdHJhcC53b3JrZGlyfSAoc3BhcnNlKS5gKTtcbiAgICBpZiAoIShhd2FpdCBjb25maXJtKCdHbyBhaGVhZCB3aXRoIHRoZSBjbG9uZT8nLCBvcHRzLnllcyA/PyBmYWxzZSkpKSB7XG4gICAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuIFJlLXJ1biB3aGVuZXZlciB5b3VcXCdyZSByZWFkeS4nKTtcbiAgICAgIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogZmFsc2UgfTtcbiAgICB9XG4gICAgaWYgKCEoYXdhaXQgYm9vdHN0cmFwQ2xvbmUoKSkpIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogZmFsc2UgfTtcbiAgfVxuXG4gIC8vIFRoZSBkZXBsb3kgZW50cnlwb2ludCBtdXN0IGV4aXN0IHJlbGF0aXZlIHRvIGN3ZC4gSWYgaXQgZG9lc24ndCBhbmQgd2UgaGF2ZW4ndFxuICAvLyBib290c3RyYXBwZWQsIGdyYWNlZnVsbHkgT0ZGRVIgdG8gY2xvbmUgKGludGVyYWN0aXZlIG9ubHkpIHNvIGEgZnJlc2ggbWFjaGluZSBjYW5cbiAgLy8gcHJvY2VlZCB3aXRob3V0IHJlLXJ1bm5pbmcgd2l0aCAtLXJlcG8uXG4gIGlmICghZW50cnlwb2ludEV4aXN0cyhzcGVjLCBjd2QpKSB7XG4gICAgY29uc3QgaW50ZXJhY3RpdmUgPSBCb29sZWFuKHByb2Nlc3Muc3RkaW4uaXNUVFkpICYmICFvcHRzLnllcztcbiAgICBpZiAoIWJvb3RzdHJhcENtZCAmJiBpbnRlcmFjdGl2ZSAmJiBnaXRBdmFpbGFibGUoKSkge1xuICAgICAgcHJpbnRJbmZvKGBcXG5Mb29rcyBsaWtlIHlvdSdyZSBub3QgaW5zaWRlIGEgcGlwZWxpbmUtYnVpbGRlciBjaGVja291dCwgc28gdGhlICR7c3BlYy5sYWJlbH0gZGVwbG95IHNjcmlwdHMgYXJlbid0IGhlcmUgeWV0LmApO1xuICAgICAgaWYgKGF3YWl0IGNvbmZpcm0oYFdhbnQgbWUgdG8gc3BhcnNlLWNsb25lIHRoZW0gaW50byAke2Jvb3RzdHJhcC53b3JrZGlyfSBhbmQga2VlcCBnb2luZz9gLCBmYWxzZSkpIHtcbiAgICAgICAgaWYgKCEoYXdhaXQgYm9vdHN0cmFwQ2xvbmUoKSkpIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogZmFsc2UgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFlbnRyeXBvaW50RXhpc3RzKHNwZWMsIGN3ZCkpIHtcbiAgICAgIHByaW50V2FybmluZyhgXFxuSSBjb3VsZG4ndCBmaW5kICR7c3BlYy5kaXJ9LyR7c3BlYy5lbnRyeXBvaW50fSBmcm9tICR7Y3dkfS5gKTtcbiAgICAgIHByaW50SW5mbygnVHdvIGVhc3kgd2F5cyBmb3J3YXJkOicpO1xuICAgICAgcHJpbnRJbmZvKCcgIOKAoiBjZCBpbnRvIHlvdXIgcGlwZWxpbmUtYnVpbGRlciBjaGVja291dCBhbmQgcmUtcnVuLCBvcicpO1xuICAgICAgcHJpbnRJbmZvKGAgIOKAoiBhZGQgLS1yZXBvIGFuZCBJJ2xsIGJvb3RzdHJhcCBhIGZyZXNoIHNwYXJzZSBjbG9uZSBmb3IgeW91JHtnaXRBdmFpbGFibGUoKSA/ICcuJyA6ICcgKG9uY2UgZ2l0IGlzIGluc3RhbGxlZCkuJ31gKTtcbiAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IHRydWUgfTtcbn1cblxuLyoqXG4gKiBJbnRlcmFjdGl2ZSBvcHQtaW4gbG9hZHMsIG9mZmVyZWQgQUZURVIgdGhlIGNsb25lIChzbyB3ZSBvbmx5IGFzayBvbmNlIHRoZSBvcGVyYXRvclxuICogaGFzIGFncmVlZCB0byBwcm9jZWVkKS4gUHJvbXB0cyBwZXIgbG9hZCwgYWRkaXRpdmVseSBzcGFyc2UtZmV0Y2hlcyB0aGUgcGlja2VkXG4gKiBmb2xkZXJzIGludG8gYSBib290c3RyYXBwZWQgc3BhcnNlIGNsb25lLCB0aGVuIHJlLXJlc29sdmVzIHRoZSBwb3N0LWluc3RhbGwgc3RlcHNcbiAqIHdpdGggdGhlIHNlbGVjdGlvbnMuIFJldHVybnMgdGhlIGNob3NlbiBpZHMgKyB0aGUgcmVjb21wdXRlZCBzdGVwcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkoXG4gIHRhcmdldDogVGFyZ2V0SWQsXG4gIHVybDogc3RyaW5nIHwgbnVsbCxcbiAgcmVnaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGN3ZDogc3RyaW5nLFxuICBib290c3RyYXBwZWQ6IGJvb2xlYW4sXG4gIGJvb3RzdHJhcDogQm9vdHN0cmFwU3BlYyxcbiAgcG9zdFN0ZXBGbGFnczogeyBpbml0OiBib29sZWFuOyBidWlsZEJvb3RzdHJhcDogYm9vbGVhbjsgc21va2VUZXN0OiBib29sZWFuOyBldmVudHM6IGJvb2xlYW47IHN0ZXBzOiBzdHJpbmdbXSB9LFxuKTogUHJvbWlzZTx7IGVuYWJsZWRMb2FkSWRzOiBzdHJpbmdbXTsgc3RlcHM6IFBvc3RTdGVwW107IHNraXBwZWQ6IFNraXBwZWRTdGVwW10gfT4ge1xuICBjb25zdCBwcm9tcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIHBsdWdpbnM6ICdMb2FkIHBsdWdpbnM/JyxcbiAgICBzYW1wbGVzOiAnTG9hZCBzYW1wbGUgcGlwZWxpbmVzPycsXG4gICAgY29tcGxpYW5jZTogJ0xvYWQgY29tcGxpYW5jZSBydWxlcz8nLFxuICB9O1xuICBwcmludFNlY3Rpb24oJ09wdGlvbmFsIHBvc3QtaW5zdGFsbCBsb2FkcycpO1xuICBjb25zdCBjaG9zZW46IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgcyBvZiBMT0FEX1NURVBTKSB7XG4gICAgaWYgKGF3YWl0IGNvbmZpcm0ocHJvbXB0c1tzLmlkXSA/PyBgTG9hZCAke3MuaWR9P2AsIGZhbHNlKSkgY2hvc2VuLnB1c2gocy5pZCk7XG4gIH1cbiAgLy8gQWRkaXRpdmUgc3BhcnNlIHJlLXN5bmM6IG1hdGVyaWFsaXplIE9OTFkgdGhlIHBpY2tlZCBsb2FkcycgZm9sZGVycyAodGhlIHBhcnRpYWxcbiAgLy8gY2xvbmUgZmV0Y2hlcyB0aGVpciBibG9icyBvbiBkZW1hbmQpLiBPbmx5IHdoZW4gd2UgY3JlYXRlZCBhIFNQQVJTRSBjbG9uZSDigJQgYVxuICAvLyBub3JtYWwgY2hlY2tvdXQgYWxyZWFkeSBoYXMgZXZlcnkgZm9sZGVyLCBhbmQgdGhlIGdpdDwyLjI3IGZ1bGwtY2xvbmUgZmFsbGJhY2tcbiAgLy8gKGJvb3RzdHJhcC5mdWxsKSBpcyBub24tc3BhcnNlLCB3aGVyZSBgc3BhcnNlLWNoZWNrb3V0IGFkZGAgd291bGQgc3dpdGNoIGl0IHRvXG4gIC8vIGNvbmUgbW9kZSBhbmQgUFJVTkUgdGhlIGFscmVhZHktbWF0ZXJpYWxpemVkIGRlcGxveSBmb2xkZXJzLlxuICBpZiAoYm9vdHN0cmFwcGVkICYmICFib290c3RyYXAuZnVsbCkge1xuICAgIGNvbnN0IGFic2VudCA9IHNwYXJzZVBhdGhzRm9yKHRhcmdldCwgY2hvc2VuKS5maWx0ZXIoKHApID0+ICFleGlzdHNTeW5jKHBhdGguam9pbihjd2QsIHApKSk7XG4gICAgaWYgKGFic2VudC5sZW5ndGggPiAwKSB7XG4gICAgICBwcmludFNlY3Rpb24oJ0ZldGNoaW5nIHNlbGVjdGVkIGxvYWQgZm9sZGVycycpO1xuICAgICAgY29uc3QgYWRkQ21kID0gYGdpdCBzcGFyc2UtY2hlY2tvdXQgYWRkICR7YWJzZW50Lm1hcCgocCkgPT4gYCcke3B9J2ApLmpvaW4oJyAnKX0gJiYgZ2l0IGNoZWNrb3V0ICcke2Jvb3RzdHJhcC5yZWZ9J2A7XG4gICAgICBwcmludEluZm8oYWRkQ21kKTtcbiAgICAgIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgcnVuU2NyaXB0KGFkZENtZCwgY3dkLCB7IGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKGBDb3VsZG4ndCBmZXRjaCAke2Fic2VudC5qb2luKCcsICcpfSDigJQgdGhlIG1hdGNoaW5nIGxvYWQgc3RlcChzKSBtYXkgZmFpbC4gUmUtcnVuIHdpdGggLS1yZXBvIHRvIHJlZnJlc2ggdGhlIGNsb25lLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVQb3N0U3RlcHMoe1xuICAgIHRhcmdldCxcbiAgICB1cmwsXG4gICAgcmVnaW9uLFxuICAgIGVuYWJsZWRMb2FkSWRzOiBjaG9zZW4sXG4gICAgLi4ucG9zdFN0ZXBGbGFncyxcbiAgICBidWlsZEJvb3RzdHJhcDogcG9zdFN0ZXBGbGFncy5idWlsZEJvb3RzdHJhcCB8fCBjaG9zZW4uaW5jbHVkZXMoJ3BsdWdpbnMnKSxcbiAgfSk7XG4gIHJldHVybiB7IGVuYWJsZWRMb2FkSWRzOiBjaG9zZW4sIHN0ZXBzOiByZXNvbHZlZC5zdGVwcywgc2tpcHBlZDogcmVzb2x2ZWQuc2tpcHBlZCB9O1xufVxuXG4vKipcbiAqIFJlZGFjdCBzZWNyZXQgcGFyYW0gdmFsdWVzIChlLmcuIHRoZSBnaGNyIHRva2VuKSBmcm9tIGNhcHR1cmVkIGRlcGxveSBvdXRwdXRcbiAqIGJlZm9yZSBpdCBpcyBzZW50IHRvIHRoZSBMTE0gZm9yIGRpYWdub3Npcy4gVGhlIGRlcGxveSBydW5zIHdpdGggc2VjcmV0c1xuICogdW5tYXNrZWQsIHNvIGFsdGhvdWdoIHRoZSBjdXJyZW50IHNjcmlwdHMgZG9uJ3QgZWNobyB0aGVtLCB0aGlzIGtlZXBzIGEgZnV0dXJlXG4gKiBzY3JpcHQncyBzdHJheSBlY2hvIChvciBhIHZlcmJvc2Ugc3ViLXRvb2wpIGZyb20gY3Jvc3NpbmcgdGhlIHRoaXJkLXBhcnR5LUxMTVxuICogYm91bmRhcnkuXG4gKi9cbmZ1bmN0aW9uIHJlZGFjdFNlY3JldHModGV4dDogc3RyaW5nLCBzcGVjOiBUYXJnZXRTcGVjLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHtcbiAgbGV0IG91dCA9IHRleHQ7XG4gIGZvciAoY29uc3QgaW5wdXQgb2YgWy4uLnNwZWMucmVxdWlyZWQsIC4uLnNwZWMub3B0aW9uYWxdKSB7XG4gICAgaWYgKCFpbnB1dC5zZWNyZXQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zW2lucHV0LmtleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID49IDQpIG91dCA9IG91dC5zcGxpdCh2YWx1ZSkuam9pbignKioqJyk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBwcm92aXNpb25gIGNvbW1hbmQg4oCUIGFuIEFJLWFzc2lzdGVkIGluc3RhbGxlciBmb3IgdGhlIFBpcGVsaW5lXG4gKiBCdWlsZGVyIFBMQVRGT1JNIChsb2NhbC9taW5pa3ViZS9FQzIvRmFyZ2F0ZSkuIEl0IHByaW50cyB0aGUgYXNzZW1ibGVkIHBsYW5cbiAqIChwcmVyZXEgY2hlY2tzLCBOTC1nb2FsIHBhcnNpbmcsIGNvbW1hbmQgYXNzZW1ibHkpIGFuZCB0aGVuIERFUExPWVMsIGdhdGVkIGJ5XG4gKiBjb25maXJtYXRpb24gcHJvbXB0cyAoYC0teWVzYCB0byBhdXRvLWFjY2VwdDsgYC0tanNvbmAgaXMgdGhlIG9ubHkgbm9uLWV4ZWN1dGluZ1xuICogbW9kZSwgcHJpbnRpbmcgdGhlIHBsYW4gZm9yIHRvb2xpbmcpLiBXaXRoIGAtLXJlcG9gIGl0IGNhbiBib290c3RyYXAgYSBmcmVzaFxuICogbWFjaGluZSBieSBzcGFyc2VseSBjbG9uaW5nIG9ubHkgdGhlIGRlcGxveSBmb2xkZXJzIHRoZSBzZWxlY3RlZCB0YXJnZXQgK1xuICogb3B0aW9ucyBuZWVkLCB0aGVuIHJ1bnMgcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciBhZG1pbiwgb3B0LWluIGxvYWRzLFxuICogc21va2UgdGVzdCwgY3VzdG9tIGNvbW1hbmRzKS4gYC0tdGVhcmRvd25gIHJlbW92ZXMgYSBkZXBsb3ltZW50IGluc3RlYWQuXG4gKlxuICogQHBhcmFtIHByb2dyYW0gLSBUaGUgcm9vdCBDb21tYW5kZXIgcHJvZ3JhbSBpbnN0YW5jZSB0byBhdHRhY2ggdGhlIGNvbW1hbmQgdG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aXNpb24ocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3Byb3Zpc2lvbicpXG4gICAgLmRlc2NyaXB0aW9uKCdBSS1hc3Npc3RlZCBpbnN0YWxsZXIgZm9yIHRoZSBwbGF0Zm9ybSAobG9jYWwvbWluaWt1YmUvRUMyL0ZhcmdhdGUpOiBkZXBsb3lzIGl0IChnYXRlZCBieSBjb25maXJtYXRpb24gcHJvbXB0cyksIG9yIC0tdGVhcmRvd24gdG8gcmVtb3ZlJylcbiAgICAub3B0aW9uKCctdCwgLS10YXJnZXQgPHRhcmdldD4nLCBgRGVwbG95IHRhcmdldDogJHtUQVJHRVRfSURTLmpvaW4oJyB8ICcpfWApXG4gICAgLm9wdGlvbignLXAsIC0tcHJvbXB0IDx0ZXh0PicsICdOYXR1cmFsLWxhbmd1YWdlIGdvYWwgKHBhcnNlZCBpbnRvIHBhcmFtcyB3aGVuIGFuIEFJIGtleSBpcyBzZXQpJylcbiAgICAub3B0aW9uKCctLXJlZ2lvbiA8cmVnaW9uPicsICdBV1MgcmVnaW9uIChFQzIvRmFyZ2F0ZSknKVxuICAgIC5vcHRpb24oJy0tZG9tYWluIDxkb21haW4+JywgJ0Z1bGx5LXF1YWxpZmllZCBkb21haW4gbmFtZSAoRUMyL0ZhcmdhdGUpJylcbiAgICAub3B0aW9uKCctLWhvc3RlZC16b25lLWlkIDxpZD4nLCAnUHVibGljIFJvdXRlIDUzIGhvc3RlZCB6b25lIElEIChFQzIvRmFyZ2F0ZSknKVxuICAgIC5vcHRpb24oJy0tZGVwbG95LW1vZGUgPG1vZGU+JywgJ3B1YmxpYyB8IHByaXZhdGUgKEVDMi9GYXJnYXRlKScpXG4gICAgLm9wdGlvbignLS1rZXktcGFpciA8bmFtZT4nLCAnRUMyIGtleSBwYWlyIChFQzIpJylcbiAgICAub3B0aW9uKCctLWluc3RhbmNlLXR5cGUgPHR5cGU+JywgJ0VDMiBpbnN0YW5jZSB0eXBlIChFQzIpJylcbiAgICAub3B0aW9uKCctLWdoY3ItdG9rZW4gPHRva2VuPicsICdHaXRIdWIgUEFUIChyZWFkOnBhY2thZ2VzKSDigJQgbWFza2VkIGluIG91dHB1dCcpXG4gICAgLm9wdGlvbignLS1lbWFpbCcsICdFbmFibGUgU0VTIHRyYW5zYWN0aW9uYWwgZW1haWwgKG9uIGJ5IGRlZmF1bHQgZm9yIEFXUyknKVxuICAgIC5vcHRpb24oJy0tbm8tZW1haWwnLCAnU2tpcCBTRVMgKHRyYW5zYWN0aW9uYWwgZW1haWwgaXMgcHJvdmlzaW9uZWQgYnkgZGVmYXVsdCBvbiBBV1MpJylcbiAgICAub3B0aW9uKCctLWVtYWlsLWZyb20gPGFkZHI+JywgJ1NFUyBGcm9tIGFkZHJlc3MnKVxuICAgIC5vcHRpb24oJy0tZW1haWwtZnJvbS1uYW1lIDxuYW1lPicsICdTRVMgRnJvbSBkaXNwbGF5IG5hbWUnKVxuICAgIC5vcHRpb24oJy0tYWxlcnQtZW1haWwgPGFkZHI+JywgJ1N1YnNjcmliZSBhbiBhZGRyZXNzIHRvIHRoZSBib3VuY2UvY29tcGxhaW50IFNOUyB0b3BpYycpXG4gICAgLm9wdGlvbignLS1za2lwLXNlcy1pZGVudGl0eScsICdTa2lwIFNFUyBpZGVudGl0eSBjcmVhdGlvbiAoZG9tYWluIGFscmVhZHkgdmVyaWZpZWQpJylcbiAgICAub3B0aW9uKCctLWFpLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQUkgcHJvdmlkZXIgKGFudGhyb3BpY3xvcGVuYWl8Z29vZ2xlfHhhaXxiZWRyb2NrKScpXG4gICAgLm9wdGlvbignLS1tb2RlbCA8bW9kZWw+JywgJ0FJIG1vZGVsIGlkJylcbiAgICAub3B0aW9uKCctLWRpYWdub3NlIDxmaWxlPicsICdEaWFnbm9zZSBhIENsb3VkRm9ybWF0aW9uL2RlcGxveSBmYWlsdXJlIGZyb20gYSBmaWxlIChuZWVkcyBhbiBBSSBrZXkpJylcbiAgICAub3B0aW9uKCcteSwgLS15ZXMnLCAnQXV0by1hY2NlcHQgYWxsIGNvbmZpcm1hdGlvbiBwcm9tcHRzIChmb3IgQ0kgLyBub24taW50ZXJhY3RpdmUpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1yZXRyaWVzIDxuPicsICdBdXRvLWZpeCArIHJldHJ5IGF0dGVtcHRzIGFmdGVyIGEgZmFpbHVyZSAoZGVwbG95IHNjcmlwdHMgYXJlIGlkZW1wb3RlbnQpJywgJzEnKVxuICAgIC5vcHRpb24oJy0tdGVhcmRvd24nLCAnVGVhciBkb3duIGFuIGV4aXN0aW5nIGRlcGxveW1lbnQgaW5zdGVhZCBvZiBjcmVhdGluZyBvbmUgKGdhdGVkOyBBV1MgdGFyZ2V0cyByZXF1aXJlIGEgdHlwZWQgY29uZmlybWF0aW9uKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tc3RhY2stbmFtZSA8bmFtZT4nLCAnU3RhY2sgbmFtZSAoRUMyKSAvIHN0YWNrIHByZWZpeCAoRmFyZ2F0ZSkgdG8gdGVhciBkb3duIOKAlCBkZWZhdWx0cyB0byB0aGUgZGVwbG95IGRlZmF1bHQnKVxuICAgIC5vcHRpb24oJy0tZm9yY2UnLCAnU2tpcCB0aGUgdGVhcmRvd24gdHlwZWQtY29uZmlybWF0aW9uIChEQU5HRVJPVVMg4oCUIGZvciBDSS9hdXRvbWF0aW9uIG9ubHkpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1uby1pbml0JywgJ1NraXAgdGhlIHBvc3QtZGVwbG95IHJlZ2lzdGVyL2luaXQtcGxhdGZvcm0gc3RlcCcpXG4gICAgLy8gQm9vdHN0cmFwIChzcGFyc2UgY2xvbmUpIOKAlCBwcm92aXNpb24gYSBmcmVzaCBtYWNoaW5lIGluIG9uZSBjb21tYW5kLlxuICAgIC5vcHRpb24oJy0tcmVwbyBbdXJsXScsICdCb290c3RyYXA6IGdpdC1jbG9uZSB0aGUgcGxhdGZvcm0gcmVwbyBmaXJzdCAoc3BhcnNlIOKAlCBvbmx5IHRoZSBuZWVkZWQgZGVwbG95IGZvbGRlcnMpLCB0aGVuIHJ1biBmcm9tIGl0IChubyB2YWx1ZSA9IHRoZSB1cHN0cmVhbSBkZWZhdWx0KScpXG4gICAgLm9wdGlvbignLS1yZWYgPHJlZj4nLCAnR2l0IGJyYW5jaC90YWcgdG8gY2hlY2sgb3V0IHdoZW4gYm9vdHN0cmFwcGluZyAoZGVmYXVsdDogbWFpbiknKVxuICAgIC5vcHRpb24oJy0td29ya2RpciA8ZGlyPicsICdEaXJlY3RvcnkgdG8gY2xvbmUgaW50byAvIHJ1biBmcm9tIHdoZW4gYm9vdHN0cmFwcGluZyAoZGVmYXVsdDogcGlwZWxpbmUtYnVpbGRlciknKVxuICAgIC8vIFBvc3QtaW5zdGFsbCBsb2FkcyDigJQgZWFjaCBvcHQtaW4gc3RlcCBhbHNvIGFkZHMgaXRzIGRlcGxveSBmb2xkZXIgdG8gdGhlIHNwYXJzZSBjbG9uZS5cbiAgICAub3B0aW9uKCctLXdpdGgtcGx1Z2lucycsICdQb3N0LWluc3RhbGw6IGJ1aWxkICsgbG9hZCBwbHVnaW5zIChhZGRzIGRlcGxveS9wbHVnaW5zLCBkZXBsb3kvY29kZWJ1aWxkKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1jb21wbGlhbmNlJywgJ1Bvc3QtaW5zdGFsbDogbG9hZCBzYW1wbGUgY29tcGxpYW5jZSBydWxlcy9wb2xpY2llcyAoYWRkcyBkZXBsb3kvY29tcGxpYW5jZSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtc2FtcGxlcycsICdQb3N0LWluc3RhbGw6IGxvYWQgc2FtcGxlIHBpcGVsaW5lcyAoYWRkcyBkZXBsb3kvc2FtcGxlcyknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtYWxsJywgJ1Bvc3QtaW5zdGFsbDogcGx1Z2lucyArIGNvbXBsaWFuY2UgKyBzYW1wbGVzJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1idWlsZC1ib290c3RyYXAnLCAnQnVpbGQgKyBwdWJsaXNoIHRoZSBDb2RlQnVpbGQgYm9vdHN0cmFwIGltYWdlIGR1cmluZyByZWdpc3RlciAoYWRkcyBkZXBsb3kvY29kZWJ1aWxkKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1zbW9rZS10ZXN0JywgJ1Bvc3QtaW5zdGFsbDogcmVhZC1vbmx5IEFQSSByZWFjaGFiaWxpdHkgY2hlY2snLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtZXZlbnRzJywgJ1Bvc3QtaW5zdGFsbCAoQVdTKTogZXZlbnQgaW5nZXN0aW9uIGJ1bmRsZSDigJQgc3RvcmUtdG9rZW4gKEpXVCDihpIgU2VjcmV0cyBNYW5hZ2VyKSB0aGVuIHNldHVwLWV2ZW50cyAoRXZlbnRCcmlkZ2UvTGFtYmRhKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tcG9zdC1zdGVwIDxjbWQ+JywgJ1J1biBhbiBleHRyYSBjb21tYW5kIGFmdGVyIHRoZSBsb2FkcyAocmVwZWF0YWJsZSwgaW4gb3JkZXIpJywgY29sbGVjdFN0ZXAsIFtdKVxuICAgIC5vcHRpb24oJy0tYWRtaW4tZW1haWwgPGFkZHI+JywgJ0FkbWluIGVtYWlsIGZvciBub24taW50ZXJhY3RpdmUgcmVnaXN0ZXIgKHNldHMgUExBVEZPUk1fSURFTlRJRklFUiknKVxuICAgIC5vcHRpb24oJy0tYWRtaW4tcGFzc3dvcmQgPHB3PicsICdBZG1pbiBwYXNzd29yZCBmb3Igbm9uLWludGVyYWN0aXZlIHJlZ2lzdGVyIChzZXRzIFBMQVRGT1JNX1BBU1NXT1JEKScpXG4gICAgLm9wdGlvbignLS1qc29uJywgJ1ByaW50IHRoZSBwbGFuIGFzIEpTT04gYW5kIGV4aXQgV0lUSE9VVCBydW5uaW5nICh0aGUgb25seSBub24tZXhlY3V0aW5nIG1vZGUg4oCUIGZvciB0b29saW5nL0NJIGluc3BlY3Rpb24pJywgZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ1Byb3Zpc2lvbicpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyAxLiBBc3NlbWJsZSBwYXJhbXMgZnJvbSBleHBsaWNpdCBmbGFncyAoZmxhZ3MgYWx3YXlzIHdpbiBvdmVyIE5MIHBhcnNlKS5cbiAgICAgICAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgIGRvbWFpbjogb3B0aW9ucy5kb21haW4sXG4gICAgICAgICAgaG9zdGVkWm9uZUlkOiBvcHRpb25zLmhvc3RlZFpvbmVJZCxcbiAgICAgICAgICBkZXBsb3lNb2RlOiBvcHRpb25zLmRlcGxveU1vZGUsXG4gICAgICAgICAga2V5UGFpcjogb3B0aW9ucy5rZXlQYWlyLFxuICAgICAgICAgIGluc3RhbmNlVHlwZTogb3B0aW9ucy5pbnN0YW5jZVR5cGUsXG4gICAgICAgICAgZ2hjclRva2VuOiBvcHRpb25zLmdoY3JUb2tlbixcbiAgICAgICAgICAvLyBDb21tYW5kZXIgdHJpLXN0YXRlcyBgZW1haWxgOiB1bmRlZmluZWQgKG5laXRoZXIpLCB0cnVlICgtLWVtYWlsKSxcbiAgICAgICAgICAvLyBmYWxzZSAoLS1uby1lbWFpbCkuIFNFUyBpcyBvbiBieSBkZWZhdWx0LCBzbyBvbmx5IC0tbm8tZW1haWwgaXNcbiAgICAgICAgICAvLyBsb2FkLWJlYXJpbmcgKGl0IGVtaXRzIGAtLW5vLWVtYWlsYCBpbnRvIHRoZSBkZXBsb3kgY29tbWFuZCkuXG4gICAgICAgICAgZW1haWw6IG9wdGlvbnMuZW1haWwgPT09IHRydWUsXG4gICAgICAgICAgbm9FbWFpbDogb3B0aW9ucy5lbWFpbCA9PT0gZmFsc2UsXG4gICAgICAgICAgZW1haWxGcm9tOiBvcHRpb25zLmVtYWlsRnJvbSxcbiAgICAgICAgICBlbWFpbEZyb21OYW1lOiBvcHRpb25zLmVtYWlsRnJvbU5hbWUsXG4gICAgICAgICAgYWxlcnRFbWFpbDogb3B0aW9ucy5hbGVydEVtYWlsLFxuICAgICAgICAgIG5vQ3JlYXRlU2VzSWRlbnRpdHk6IG9wdGlvbnMuc2tpcFNlc0lkZW50aXR5LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhaU9wdHMgPSB7IHByb3ZpZGVyOiBvcHRpb25zLmFpUHJvdmlkZXIsIG1vZGVsOiBvcHRpb25zLm1vZGVsIH07XG5cbiAgICAgICAgLy8gQm9vdHN0cmFwIChzcGFyc2UgY2xvbmUpICsgcG9zdC1pbnN0YWxsIHNlbGVjdGlvbnMuXG4gICAgICAgIGNvbnN0IHdhbnRCb290c3RyYXAgPSBvcHRpb25zLnJlcG8gIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnJlcG8gIT09IGZhbHNlO1xuICAgICAgICBjb25zdCB3aXRoQWxsID0gb3B0aW9ucy53aXRoQWxsID09PSB0cnVlO1xuICAgICAgICBjb25zdCBhbnlMb2FkRmxhZyA9IHdpdGhBbGwgfHwgTE9BRF9TVEVQUy5zb21lKChzKSA9PiBvcHRpb25zW3MuZmxhZ10gPT09IHRydWUpO1xuICAgICAgICBsZXQgZW5hYmxlZExvYWRJZHM6IHN0cmluZ1tdID0gTE9BRF9TVEVQUy5maWx0ZXIoKHMpID0+IHdpdGhBbGwgfHwgb3B0aW9uc1tzLmZsYWddID09PSB0cnVlKS5tYXAoKHMpID0+IHMuaWQpO1xuICAgICAgICAvLyBXaXRoIG5vIC0td2l0aC0qIGZsYWdzLCBhbiBpbnRlcmFjdGl2ZSBydW4gb2ZmZXJzIGVhY2ggbG9hZCDigJQgYnV0IEFGVEVSIHRoZVxuICAgICAgICAvLyBjbG9uZSwgc28gdGhlIHF1ZXN0aW9ucyBjb21lIG9uY2UgeW91J3ZlIGFncmVlZCB0byBwcm9jZWVkIChub3QgdXAgZnJvbnQpLlxuICAgICAgICAvLyBFYWNoIHBpY2tlZCBsb2FkJ3MgZm9sZGVyIGlzIHRoZW4gZmV0Y2hlZCB2aWEgYW4gYWRkaXRpdmUgc3BhcnNlIHJlLXN5bmMuXG4gICAgICAgIC8vIEZsYWdzIC8gLS15ZXMgLyAtLWpzb24gLyBub24taW50ZXJhY3RpdmUgc2hlbGxzIHNraXAgdGhlIHByb21wdHMuXG4gICAgICAgIGNvbnN0IHdpbGxQcm9tcHRMb2FkcyA9ICFvcHRpb25zLnllcyAmJiAhb3B0aW9ucy5qc29uICYmIEJvb2xlYW4ocHJvY2Vzcy5zdGRpbi5pc1RUWSkgJiYgIWFueUxvYWRGbGFnO1xuICAgICAgICBjb25zdCBwb3N0U3RlcEZsYWdzID0ge1xuICAgICAgICAgIGluaXQ6IG9wdGlvbnMuaW5pdCAhPT0gZmFsc2UsXG4gICAgICAgICAgYnVpbGRCb290c3RyYXA6IG9wdGlvbnMuYnVpbGRCb290c3RyYXAgPT09IHRydWUgfHwgZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSxcbiAgICAgICAgICBzbW9rZVRlc3Q6IG9wdGlvbnMud2l0aFNtb2tlVGVzdCA9PT0gdHJ1ZSxcbiAgICAgICAgICBldmVudHM6IG9wdGlvbnMud2l0aEV2ZW50cyA9PT0gdHJ1ZSxcbiAgICAgICAgICBzdGVwczogKG9wdGlvbnMucG9zdFN0ZXAgPz8gW10pIGFzIHN0cmluZ1tdLFxuICAgICAgICB9O1xuICAgICAgICAvLyBBZG1pbiBjcmVkZW50aWFscyBmb3J3YXJkZWQgYXMgZW52IHNvIHJlZ2lzdGVyIHJ1bnMgbm9uLWludGVyYWN0aXZlbHkuXG4gICAgICAgIGNvbnN0IGFkbWluRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hZG1pbkVtYWlsID09PSAnc3RyaW5nJykgYWRtaW5FbnYuUExBVEZPUk1fSURFTlRJRklFUiA9IG9wdGlvbnMuYWRtaW5FbWFpbDtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmFkbWluUGFzc3dvcmQgPT09ICdzdHJpbmcnKSBhZG1pbkVudi5QTEFURk9STV9QQVNTV09SRCA9IG9wdGlvbnMuYWRtaW5QYXNzd29yZDtcblxuICAgICAgICAvLyAyLiBPcHRpb25hbGx5IHBhcnNlIGEgbmF0dXJhbC1sYW5ndWFnZSBnb2FsIHRvIGZpbGwgYW55IEdBUFMgKGJlc3QtZWZmb3J0KS5cbiAgICAgICAgbGV0IHRhcmdldDogVGFyZ2V0SWQgfCB1bmRlZmluZWQgPSBpc1RhcmdldElkKG9wdGlvbnMudGFyZ2V0KSA/IG9wdGlvbnMudGFyZ2V0IDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9tcHQpIHtcbiAgICAgICAgICBpZiAoaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gYXdhaXQgcGFyc2VHb2FsKG9wdGlvbnMucHJvbXB0LCBhaU9wdHMpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICBpZiAoIXRhcmdldCAmJiBpc1RhcmdldElkKHBhcnNlZC50YXJnZXQpKSB0YXJnZXQgPSBwYXJzZWQudGFyZ2V0O1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGsgIT09ICd0YXJnZXQnICYmIHBhcmFtc1trXSA9PT0gdW5kZWZpbmVkICYmIHYgIT09IHVuZGVmaW5lZCkgcGFyYW1zW2tdID0gdjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ0EgLS1wcm9tcHQgd2FzIGdpdmVuIGJ1dCBubyBBSSBrZXkgaXMgc2V0IOKAlCBpZ25vcmluZyBpdCBhbmQgdXNpbmcgZmxhZ3Mgb25seS4gU2V0IEFOVEhST1BJQ19BUElfS0VZIChvciAtLWFpLXByb3ZpZGVyICsgaXRzIGtleSkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gT3B0aW9uYWwgZmFpbHVyZSBkaWFnbm9zaXMgKGluZGVwZW5kZW50IG9mIGEgZGVwbG95IHBsYW4pLlxuICAgICAgICBpZiAob3B0aW9ucy5kaWFnbm9zZSkge1xuICAgICAgICAgIGxldCBmYWlsdXJlVGV4dDogc3RyaW5nO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmYWlsdXJlVGV4dCA9IHJlYWRGaWxlU3luYyhvcHRpb25zLmRpYWdub3NlLCAndXRmLTgnKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoYENhbm5vdCByZWFkIC0tZGlhZ25vc2UgZmlsZTogJHtvcHRpb25zLmRpYWdub3NlfWApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGlzQWlDb25maWd1cmVkKGFpT3B0cykgPyBhd2FpdCBkaWFnbm9zZUZhaWx1cmUoZmFpbHVyZVRleHQsIGFpT3B0cykgOiBudWxsO1xuICAgICAgICAgIC8vIFdpdGggLS1qc29uLCB0aGUgZGlhZ25vc2lzIElTIHRoZSBtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCDigJQgZW1pdCBpdFxuICAgICAgICAgIC8vIGFsb25lIChkb24ndCBhbHNvIHByaW50IHRleHQsIHdoaWNoIHdvdWxkIGNvcnJ1cHQgdGhlIEpTT04gc3RyZWFtKS5cbiAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCBkaWFnbm9zaXMgfSwgbnVsbCwgMikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGlhZ25vc2lzKSB7XG4gICAgICAgICAgICBwcmludFNlY3Rpb24oJ0ZhaWx1cmUgZGlhZ25vc2lzJyk7XG4gICAgICAgICAgICBwcmludEluZm8oZGlhZ25vc2lzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdEaWFnbm9zaXMgdW5hdmFpbGFibGUgKG5vIEFJIGtleSBjb25maWd1cmVkIG9yIHRoZSBtb2RlbCBjb3VsZCBub3QgYmUgcmVhY2hlZCkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGFyZ2V0KSByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LiBOZWVkIGEgdGFyZ2V0IHRvIGFzc2VtYmxlIGEgcGxhbi5cbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICBwcmludEVycm9yKGBObyB0YXJnZXQgc3BlY2lmaWVkLiBQYXNzIC0tdGFyZ2V0IDwke1RBUkdFVF9JRFMuam9pbignfCcpfT4gb3IgZGVzY3JpYmUgdGhlIGdvYWwgd2l0aCAtLXByb21wdC5gKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcGVjID0gVEFSR0VUU1t0YXJnZXRdO1xuICAgICAgICBsZXQgY3dkID0gcHJvY2Vzcy5jd2QoKTtcblxuICAgICAgICAvLyA0Yi4gVGVhcmRvd24gbW9kZSDigJQgdGhlIGRlc3Ryb3kgY291bnRlcnBhcnQgb2YgcHJvdmlzaW9uaW5nIChzZWUgcnVuVGVhcmRvd24pLlxuICAgICAgICBpZiAob3B0aW9ucy50ZWFyZG93bikge1xuICAgICAgICAgIGF3YWl0IHJ1blRlYXJkb3duKHNwZWMsIHRhcmdldCwgY3dkLCBleGVjdXRpb25JZCwgb3B0aW9ucyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFrZSBwcmV2aW91c2x5LWZldGNoZWQgc2luZ2xlLWJpbmFyeSB0b29scyAoZS5nLiB5cSkgdmlzaWJsZSB0byB0aGVcbiAgICAgICAgLy8gcHJlcmVxIGNoZWNrcyArIHRoZSBkZXBsb3kg4oCUIHRoZXkgbGl2ZSBpbiB0aGUgdG9vbHMgY2FjaGUsIG5vdCBvbiB0aGVcbiAgICAgICAgLy8gc3lzdGVtIFBBVEguIChCb3RoIGBoYXMoKWAgYW5kIHRoZSBkZXBsb3kncyBgYmFzaCAtbGNgIGluaGVyaXQgdGhpcy4pXG4gICAgICAgIHdpdGhUb29sc09uUGF0aCgpO1xuICAgICAgICBsZXQgcHJlcmVxcyA9IGNoZWNrUHJlcmVxcyh0YXJnZXQsIHsgYm9vdHN0cmFwOiB3YW50Qm9vdHN0cmFwLCB3aXRoUGx1Z2luczogd2lsbFByb21wdExvYWRzIHx8IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykgfSk7XG4gICAgICAgIGNvbnN0IHsgY29tbWFuZCwgbWlzc2luZyB9ID0gYXNzZW1ibGVDb21tYW5kKHNwZWMsIHBhcmFtcyk7XG4gICAgICAgIGNvbnN0IHVybCA9IGRlcml2ZUhlYWx0aFVybCh0YXJnZXQsIHBhcmFtcyk7XG5cbiAgICAgICAgLy8gU3BhcnNlIGJvb3RzdHJhcCBjbG9uZSBjb21tYW5kIChjb21tb24gYmFzZSArIHRhcmdldCArIHNlbGVjdGVkIGxvYWRzKS5cbiAgICAgICAgLy8gSW50ZXJhY3RpdmUgbG9hZHMgYXJlIGNob3NlbiBBRlRFUiB0aGUgY2xvbmUsIHNvIHRoZSBjbG9uZSBzdGF5cyBtaW5pbWFsIOKAlFxuICAgICAgICAvLyBlYWNoIHBpY2tlZCBsb2FkJ3MgZm9sZGVyIGlzIGZldGNoZWQgdGhlbiB2aWEgYW4gYWRkaXRpdmUgc3BhcnNlIHJlLXN5bmMuXG4gICAgICAgIGNvbnN0IHNwYXJzZVBhdGhzID0gc3BhcnNlUGF0aHNGb3IodGFyZ2V0LCBlbmFibGVkTG9hZElkcyk7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcCA9IHJlc29sdmVCb290c3RyYXAoXG4gICAgICAgICAgeyByZXBvOiB0eXBlb2Ygb3B0aW9ucy5yZXBvID09PSAnc3RyaW5nJyA/IG9wdGlvbnMucmVwbyA6IHVuZGVmaW5lZCwgcmVmOiBvcHRpb25zLnJlZiwgd29ya2Rpcjogb3B0aW9ucy53b3JrZGlyLCBmdWxsOiAhZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCgpIH0sXG4gICAgICAgICAgc3BhcnNlUGF0aHMsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcENtZCA9IHdhbnRCb290c3RyYXAgPyBib290c3RyYXBDb21tYW5kKGJvb3RzdHJhcCkgOiBudWxsO1xuXG4gICAgICAgIC8vIFJlc29sdmUgcG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciDihpIgc21va2Ug4oaSIGV2ZW50cyDihpIgY3VzdG9tKS4gUmUtcmVzb2x2ZWRcbiAgICAgICAgLy8gYWZ0ZXIgdGhlIHBvc3QtY2xvbmUgbG9hZCBwcm9tcHRzIChzZWUgYmVsb3cpIHdoZW4gdGhvc2UgcnVuIGludGVyYWN0aXZlbHkuXG4gICAgICAgIGxldCB7IHN0ZXBzOiBwb3N0U3RlcHMsIHNraXBwZWQ6IHNraXBwZWRTdGVwcyB9ID0gcmVzb2x2ZVBvc3RTdGVwcyh7XG4gICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZWdpb246IHR5cGVvZiBwYXJhbXMucmVnaW9uID09PSAnc3RyaW5nJyA/IHBhcmFtcy5yZWdpb24gOiB1bmRlZmluZWQsXG4gICAgICAgICAgZW5hYmxlZExvYWRJZHMsXG4gICAgICAgICAgLi4ucG9zdFN0ZXBGbGFncyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHByZXJlcXMsXG4gICAgICAgICAgICBwcmVyZXFzU2F0aXNmaWVkOiBwcmVyZXFzU2F0aXNmaWVkKHByZXJlcXMpLFxuICAgICAgICAgICAgbWlzc2luZ0lucHV0czogbWlzc2luZy5tYXAoKG0pID0+ICh7IGZsYWc6IG0uZmxhZywgZGVzY3JpcHRpb246IG0uZGVzY3JpcHRpb24gfSkpLFxuICAgICAgICAgICAgYm9vdHN0cmFwOiBib290c3RyYXBDbWQsXG4gICAgICAgICAgICBzcGFyc2VQYXRoczogd2FudEJvb3RzdHJhcCA/IHNwYXJzZVBhdGhzIDogbnVsbCxcbiAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICBwb3N0U3RlcHM6IHBvc3RTdGVwcy5tYXAoKHMpID0+ICh7IGlkOiBzLmlkLCBsYWJlbDogcy5sYWJlbCwgY29tbWFuZDogcy5jb21tYW5kIH0pKSxcbiAgICAgICAgICAgIHNraXBwZWRQb3N0U3RlcHM6IHNraXBwZWRTdGVwcyxcbiAgICAgICAgICB9LCBudWxsLCAyKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNS4gUHJpbnQgdGhlIHBsYW4gKHNob3duIGJlZm9yZSB0aGUgZ2F0ZWQgZXhlY3V0aW9uIGJlbG93KS5cbiAgICAgICAgcHJpbnRTZWN0aW9uKGBQcm92aXNpb24gcGxhbiDigJQgJHtzcGVjLmxhYmVsfWApO1xuICAgICAgICBwcmludEtleVZhbHVlKHsgJ1RhcmdldCc6IHRhcmdldCwgJ0Jlc3QgZm9yJzogc3BlYy5iZXN0Rm9yLCAnQ29zdCc6IHNwZWMuY29zdCB9KTtcblxuICAgICAgICBwcmludFNlY3Rpb24oJ1ByZXJlcXVpc2l0ZXMnKTtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHByZXJlcXMpIHByaW50SW5mbyhgJHtjLm9rID8gJ+KckycgOiAn4pyXJ30gJHtjLm5hbWV9IOKAlCAke2MuZGV0YWlsfWApO1xuICAgICAgICBpZiAoIXByZXJlcXNTYXRpc2ZpZWQocHJlcmVxcykpIHByaW50V2FybmluZygnUmVzb2x2ZSB0aGUgZmFpbGluZyBwcmVyZXF1aXNpdGVzIGFib3ZlIGJlZm9yZSBkZXBsb3lpbmcuJyk7XG5cbiAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignTWlzc2luZyByZXF1aXJlZCBpbnB1dHMnKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgbWlzc2luZykgcHJpbnRJbmZvKGAgIC0tJHttLmZsYWd9ICAoJHttLmRlc2NyaXB0aW9ufSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib290c3RyYXBDbWQpIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ0Jvb3RzdHJhcCAoc3BhcnNlIGdpdCBjbG9uZSwgcnVucyBmaXJzdCknKTtcbiAgICAgICAgICBwcmludEluZm8oYENsb25lICR7Ym9vdHN0cmFwLnJlcG99IEAgJHtib290c3RyYXAucmVmfSDihpIgJHtib290c3RyYXAud29ya2Rpcn07IGZvbGRlcnM6ICR7c3BhcnNlUGF0aHMuam9pbignLCAnKX1gKTtcbiAgICAgICAgICBwcmludEluZm8oYm9vdHN0cmFwQ21kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaW50U2VjdGlvbignQ29tbWFuZCB0byBydW4nKTtcbiAgICAgICAgcHJpbnRJbmZvKGNvbW1hbmQpO1xuXG4gICAgICAgIGlmIChwb3N0U3RlcHMubGVuZ3RoID4gMCB8fCBza2lwcGVkU3RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignUG9zdC1pbnN0YWxsIHN0ZXBzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBzIG9mIHBvc3RTdGVwcykgcHJpbnRJbmZvKGDigKIgJHtzLmxhYmVsfVxcbiAgICAke3MuY29tbWFuZH1gKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHMgb2Ygc2tpcHBlZFN0ZXBzKSBwcmludFdhcm5pbmcoYFNraXBwZWQgJHtzLmlkfTogJHtzLnJlYXNvbn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDYuIEFueSBtaXNzaW5nIHJlcXVpcmVkIHByZXJlcSB0aGF0J3MgYSBzaW5nbGUgc3RhdGljIGJpbmFyeSAoZS5nLiB5cSlcbiAgICAgICAgLy8gY2FuIGJlIGZldGNoZWQgaW50byB0aGUgdG9vbHMgY2FjaGUgaW5zdGVhZCBvZiBhIHN5c3RlbSBpbnN0YWxsIOKAlCBub1xuICAgICAgICAvLyBicmV3L2FwdC4gT2ZmZXIgaXQsIHRoZW4gcmUtY2hlY2sgKHRoZSBjYWNoZSBkaXIgaXMgYWxyZWFkeSBvbiBQQVRIKS5cbiAgICAgICAgY29uc3QgZmV0Y2hhYmxlID0gcHJlcmVxcy5maWx0ZXIoKGMpID0+ICFjLm9rICYmIGMucmVxdWlyZWQgJiYgaXNGZXRjaGFibGUoYy5uYW1lKSk7XG4gICAgICAgIGlmIChmZXRjaGFibGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IG5hbWVzID0gZmV0Y2hhYmxlLm1hcCgoYykgPT4gYy5uYW1lKS5qb2luKCcsICcpO1xuICAgICAgICAgIGlmIChhd2FpdCBjb25maXJtKGBcXG4ke25hbWVzfSBub3QgaW5zdGFsbGVkIOKAlCBmZXRjaCB0aGUgb2ZmaWNpYWwgc3RhdGljIGJpbmFyeSBpbnRvICR7VE9PTFNfRElSfSAobm8gc3lzdGVtIGluc3RhbGwpP2AsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjIG9mIGZldGNoYWJsZSkge1xuICAgICAgICAgICAgICBwcmludEluZm8oYEZldGNoaW5nICR7Yy5uYW1lfeKApmApO1xuICAgICAgICAgICAgICBpZiAoIWZldGNoVG9vbChjLm5hbWUpKSBwcmludFdhcm5pbmcoYENvdWxkbid0IGZldGNoICR7Yy5uYW1lfSDigJQgaW5zdGFsbCBpdCBtYW51YWxseSBhbmQgcmUtcnVuLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJlcmVxcyA9IGNoZWNrUHJlcmVxcyh0YXJnZXQsIHsgYm9vdHN0cmFwOiB3YW50Qm9vdHN0cmFwLCB3aXRoUGx1Z2luczogd2lsbFByb21wdExvYWRzIHx8IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2IuIEdhdGVkIGV4ZWN1dGlvbi4gQ2hlY2sgcHJlcmVxcyAvIHJlcXVpcmVkIGlucHV0cyBmaXJzdCDigJQgdGhpcyBhbHNvXG4gICAgICAgIC8vIGNhdGNoZXMgYSBtaXNzaW5nIGBnaXRgIHdoZW4gYm9vdHN0cmFwcGluZy5cbiAgICAgICAgY29uc3QgYmxvY2tlZCA9IGV4ZWN1dGlvbkJsb2NrZWQocHJlcmVxcywgbWlzc2luZyk7XG4gICAgICAgIGlmIChibG9ja2VkKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcihgQ2FuJ3Qgc3RhcnQganVzdCB5ZXQg4oCUICR7YmxvY2tlZH0uIFJlc29sdmUgdGhhdCBhbmQgcmUtcnVuLmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbW1pdCBnYXRlIOKAlCBjb25maXJtIEJFRk9SRSBhbnkgc2lkZSBlZmZlY3QgKGNsb25lLCAuZW52LCBkZXBsb3kpIHNvIGEgXCJOb1wiXG4gICAgICAgIC8vIGxlYXZlcyBub3RoaW5nIGJlaGluZC4gVGhlIHBvcnQgY2hlY2sgKyBvcHRpb25hbCBsb2FkcyArIC5lbnYgYmVsb3cgYXJlIHBhcnQgb2ZcbiAgICAgICAgLy8gZXhlY3V0aW5nIHRoZSBhZ3JlZWQtdG8gcGxhbi5cbiAgICAgICAgaWYgKCEoYXdhaXQgY29uZmlybShgXFxuUHJvY2VlZCB3aXRoIHByb3Zpc2lvbmluZyAke3NwZWMubGFiZWx9P2AsIG9wdGlvbnMueWVzKSkpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2EvN2IuIFNwYXJzZS1jbG9uZSAoaWYgLS1yZXBvIG9yIGFjY2VwdGVkIGludGVyYWN0aXZlbHkpICsgbG9jYXRlIHRoZSBkZXBsb3lcbiAgICAgICAgLy8gZW50cnlwb2ludCwgcmVwb2ludGluZyBjd2QgaW50byB0aGUgY2xvbmUuIFNlZSBib290c3RyYXBBbmRMb2NhdGUuXG4gICAgICAgIGNvbnN0IGxvY2F0ZWQgPSBhd2FpdCBib290c3RyYXBBbmRMb2NhdGUoc3BlYywgYm9vdHN0cmFwLCBib290c3RyYXBDbWQsIHNwYXJzZVBhdGhzLCBjd2QsIG9wdGlvbnMpO1xuICAgICAgICBjd2QgPSBsb2NhdGVkLmN3ZDtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwcGVkID0gbG9jYXRlZC5ib290c3RyYXBwZWQ7XG4gICAgICAgIGlmICghbG9jYXRlZC5vaykgcmV0dXJuO1xuXG4gICAgICAgIC8vIEhvc3QtcG9ydCBwcmUtZmxpZ2h0IOKAlCBub3cgdGhhdCB0aGUgZGVwbG95IHNvdXJjZSBpcyBvbiBkaXNrIChwb3N0LWNsb25lKSxcbiAgICAgICAgLy8gZGVyaXZlIHRoZSBwb3J0cyBmcm9tIGl0IChjb21wb3NlIC8gc2V0dXAuc2gpIGFuZCBzdG9wIG9uIGEgZmF0YWwgY29uZmxpY3RcbiAgICAgICAgLy8gYmVmb3JlIGRlcGxveWluZy4gU2VlIHByZWZsaWdodFBvcnRzLlxuICAgICAgICBpZiAoIShhd2FpdCBwcmVmbGlnaHRQb3J0cyhzcGVjLCB0YXJnZXQsIGN3ZCkpKSB7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3B0LWluIGxvYWRzIOKAlCBvZmZlcmVkIEFGVEVSIHRoZSBjbG9uZSAoc2VlIHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkpOyBpdFxuICAgICAgICAvLyBwcm9tcHRzLCBhZGRpdGl2ZWx5IHNwYXJzZS1mZXRjaGVzIHRoZSBwaWNrZWQgZm9sZGVycywgYW5kIHJlLXJlc29sdmVzIHRoZVxuICAgICAgICAvLyBwb3N0LWluc3RhbGwgc3RlcHMgd2l0aCB0aGUgc2VsZWN0aW9ucy5cbiAgICAgICAgaWYgKHdpbGxQcm9tcHRMb2Fkcykge1xuICAgICAgICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkoXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICB0eXBlb2YgcGFyYW1zLnJlZ2lvbiA9PT0gJ3N0cmluZycgPyBwYXJhbXMucmVnaW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgYm9vdHN0cmFwcGVkLFxuICAgICAgICAgICAgYm9vdHN0cmFwLFxuICAgICAgICAgICAgcG9zdFN0ZXBGbGFncyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gbG9hZGVkLmVuYWJsZWRMb2FkSWRzO1xuICAgICAgICAgIHBvc3RTdGVwcyA9IGxvYWRlZC5zdGVwcztcbiAgICAgICAgICBza2lwcGVkU3RlcHMgPSBsb2FkZWQuc2tpcHBlZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBsb2NhbC9taW5pa3ViZSdzIHNldHVwLnNoIFJFUVVJUkVTIGEgYC5lbnZgIGFuZCBhYm9ydHMgd2l0aG91dCBpdCDigJQgY3JlYXRlXG4gICAgICAgIC8vIGl0IGZyb20gLmVudi5leGFtcGxlIHdpdGggZ2VuZXJhdGVkIHNlY3JldHMgc28gdGhlIGRlcGxveSBpcyBub24taW50ZXJhY3RpdmUuXG4gICAgICAgIC8vIGVjMi9mYXJnYXRlIGFsc28gc2hpcCBhIGAuZW52LmV4YW1wbGVgLCBidXQgdGhlaXIgc2V0dXAuc2ggbmV2ZXIgcmVhZHMgYVxuICAgICAgICAvLyBsb2NhbCBgLmVudmAgKHRoZSBpbnN0YW5jZSBoYW5kbGVzIGl0cyBvd247IEZhcmdhdGUgdXNlcyBTZWNyZXRzIE1hbmFnZXIgdmlhXG4gICAgICAgIC8vIGluaXQtc2VjcmV0cy5zaCksIHNvIHdlIG11c3QgTk9UIGdlbmVyYXRlIG9uZSBmb3IgdGhlbS5cbiAgICAgICAgaWYgKCh0YXJnZXQgPT09ICdsb2NhbCcgfHwgdGFyZ2V0ID09PSAnbWluaWt1YmUnKSAmJiBlbnZGaWxlTWlzc2luZyhjd2QsIHNwZWMuZGlyKSkge1xuICAgICAgICAgIGlmIChhd2FpdCBjb25maXJtKGBcXG4ke3NwZWMuZGlyfS8uZW52IG5vdCBmb3VuZCDigJQgY3JlYXRlIGl0IGZyb20gLmVudi5leGFtcGxlIChnZW5lcmF0ZXMgc2VjcmV0czsgZWRpdCBsYXRlciBmb3Igb3B0aW9uYWwgaW50ZWdyYXRpb25zIGxpa2UgT0F1dGgpP2AsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgY29uc3QgbiA9IGNyZWF0ZUVudkZpbGUoY3dkLCBzcGVjLmRpcik7XG4gICAgICAgICAgICBwcmludFN1Y2Nlc3MoYENyZWF0ZWQgJHtzcGVjLmRpcn0vLmVudiDigJQgJHtufSBzZWNyZXQocykgZ2VuZXJhdGVkLmApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ0NvbnRpbnVpbmcgd2l0aG91dCAuZW52IOKAlCBzZXR1cC5zaCB3aWxsIGFib3J0IGlmIGl0IHN0YXlzIG1pc3NpbmcuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIDdjLiBSdW4gdGhlIGRlcGxveSB3aXRoIGEgYm91bmRlZCBhdXRvLWZpeCArIHJldHJ5IGxvb3AgKHNlZSBydW5EZXBsb3lXaXRoUmV0cnkpLlxuICAgICAgICBjb25zdCB7IHN1Y2NlZWRlZCwgcnVuUGFyYW1zIH0gPSBhd2FpdCBydW5EZXBsb3lXaXRoUmV0cnkoc3BlYywgdXJsLCBjd2QsIHBhcmFtcywgYWlPcHRzLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFzdWNjZWVkZWQpIHsgcHJvY2Vzcy5leGl0Q29kZSA9IDE7IHJldHVybjsgfVxuICAgICAgICBwcmludFN1Y2Nlc3MoJ0RlcGxveSBjb21tYW5kIGNvbXBsZXRlZC4nKTtcblxuICAgICAgICAvLyA3ZC4gU0VTIHBvc3QtZGVwbG95IGd1aWRhbmNlIChhc3luYyBES0lNICsgc2FuZGJveCArIGJvdW5jZSB0b3BpYykuXG4gICAgICAgIC8vIFNFUyBpcyBwcm92aXNpb25lZCBCWSBERUZBVUxUIG9uIEFXUyBkZXBsb3lzLCBzbyBzdXJmYWNlIHRoZSBndWlkYW5jZVxuICAgICAgICAvLyBmb3IgZWMyL2ZhcmdhdGUgdW5sZXNzIHRoZSBvcGVyYXRvciBvcHRlZCBvdXQgd2l0aCAtLW5vLWVtYWlsLlxuICAgICAgICBjb25zdCBzZXNQcm92aXNpb25lZCA9ICh0YXJnZXQgPT09ICdlYzInIHx8IHRhcmdldCA9PT0gJ2ZhcmdhdGUnKSAmJiBydW5QYXJhbXMubm9FbWFpbCAhPT0gdHJ1ZTtcbiAgICAgICAgaWYgKHNlc1Byb3Zpc2lvbmVkKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdTRVMg4oCUIG5leHQgc3RlcHMnKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygc2VzUG9zdERlcGxveUd1aWRhbmNlKCkpIHByaW50SW5mbyhg4oCiICR7bGluZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDdlLiBWZXJpZnkgaGVhbHRoIChDUkVBVEVfQ09NUExFVEUgIT0gc2VydmluZykuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1ZlcmlmeWluZyBoZWFsdGgnKTtcbiAgICAgICAgICAvLyBNaW5pa3ViZSByZWFjaGVzIHRoZSBnYXRld2F5IHZpYSBhIGt1YmVjdGwgcG9ydC1mb3J3YXJkIHRoYXQgc2V0dXAuc2hcbiAgICAgICAgICAvLyBiYWNrZ3JvdW5kcyBhbmQgdGhhdCBjYW4gZGllL2ZhaWwgdG8gYmluZCDigJQgKHJlKXN0YXJ0IGl0IGJlZm9yZSBwb2xsaW5nXG4gICAgICAgICAgLy8gc28gd2UgZG9uJ3Qgc2l0IGF0IHRoZSBnYXRlIG9uIGEgZGVhZCBmb3J3YXJkIHdoaWxlIHRoZSBwb2RzIGFyZSBmaW5lLlxuICAgICAgICAgIGlmICh0YXJnZXQgPT09ICdtaW5pa3ViZScpIHtcbiAgICAgICAgICAgIGF3YWl0IGVuc3VyZU1pbmlrdWJlR2F0ZXdheSh1cmwsIHsgb25JbmZvOiAobSkgPT4gcHJpbnRJbmZvKG0pIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmludEluZm8oYFBvbGxpbmcgJHt1cmx9L2hlYWx0aCDigKZgKTtcbiAgICAgICAgICBjb25zdCBoZWFsdGggPSBhd2FpdCB3YWl0SGVhbHRoeSh1cmwsIHsgb25UaWNrOiAobSkgPT4gcHJpbnRJbmZvKG0pIH0pO1xuICAgICAgICAgIC8vIEdyZWVuIG9ubHkgd2hlbiBmdWxseSByZWFkeTsgYSBcImhlYWx0aCBPSyBidXQgL3JlYWR5IG5ldmVyIGNhbWVcIiBwcm9jZWVkLVxuICAgICAgICAgIC8vIGFueXdheSBzdGF0ZSBpcyBoZWFsdGh5OnRydWUgYnV0IGRlZ3JhZGVkIOKGkiB3YXJuIHNvIGl0IGRvZXNuJ3QgcmVhZCBhcyBkb25lLlxuICAgICAgICAgIChoZWFsdGguaGVhbHRoeSAmJiBoZWFsdGgucmVhZHkgPyBwcmludFN1Y2Nlc3MgOiBwcmludFdhcm5pbmcpKGAke2hlYWx0aC51cmx9IOKAlCAke2hlYWx0aC5kZXRhaWx9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3Zi4gUG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciArIG9wdC1pbiBsb2Fkcywgc21va2UgdGVzdCwgZXZlbnRzLCBjdXN0b20pLlxuICAgICAgICAvLyBTZWUgcnVuUG9zdFN0ZXBzIOKAlCBpdCBzdXJmYWNlcyByZWdpc3RlciArIHRoZSBldmVudHMgYnVuZGxlIGFzIG1hbnVhbCBpbi1WUENcbiAgICAgICAgLy8gbmV4dC1zdGVwcyBvbiBFQzIvRmFyZ2F0ZSBpbnN0ZWFkIG9mIGF1dG8tcnVubmluZyAoYW5kIGZhaWxpbmcpIHRoZW0gbG9jYWxseS5cbiAgICAgICAgYXdhaXQgcnVuUG9zdFN0ZXBzKHBvc3RTdGVwcywgc2tpcHBlZFN0ZXBzLCB0YXJnZXQsIGN3ZCwgYWRtaW5FbnYsIHsgeWVzOiBvcHRpb25zLnllcywgYXV0b1J1bjogd2lsbFByb21wdExvYWRzIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkdFTkVSQUwsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdwcm92aXNpb24nLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"typescript": "6.0.3",
|
|
42
42
|
"yaml": "2.9.0",
|
|
43
43
|
"zod": "4.4.3",
|
|
44
|
-
"@pipeline-builder/
|
|
45
|
-
"@pipeline-builder/
|
|
44
|
+
"@pipeline-builder/ai-core": "3.4.75",
|
|
45
|
+
"@pipeline-builder/pipeline-core": "3.4.83"
|
|
46
46
|
},
|
|
47
47
|
"keywords": [
|
|
48
48
|
"aws",
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
"access": "public",
|
|
86
86
|
"registry": "https://registry.npmjs.org/"
|
|
87
87
|
},
|
|
88
|
-
"version": "3.4.
|
|
88
|
+
"version": "3.4.97",
|
|
89
89
|
"bugs": {
|
|
90
90
|
"url": "https://github.com/mwashburn160/pipeline-builder/issues"
|
|
91
91
|
},
|