@local-labs-jpollock/local-cli 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +5 -2
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -199,7 +199,8 @@ async function runSiteCommand(siteName, config, execute) {
|
|
|
199
199
|
program
|
|
200
200
|
.name('lwp')
|
|
201
201
|
.description('Command-line interface for Local WordPress development')
|
|
202
|
-
.version(CURRENT_VERSION)
|
|
202
|
+
.version(CURRENT_VERSION)
|
|
203
|
+
.enablePositionalOptions();
|
|
203
204
|
// Global options
|
|
204
205
|
program
|
|
205
206
|
.option('--json', 'Output results as JSON')
|
|
@@ -613,6 +614,8 @@ sites
|
|
|
613
614
|
program
|
|
614
615
|
.command('wp <site> [args...]')
|
|
615
616
|
.description('Run WP-CLI commands against a site')
|
|
617
|
+
.allowUnknownOption()
|
|
618
|
+
.passThroughOptions()
|
|
616
619
|
.action(async (site, args) => {
|
|
617
620
|
const globalOpts = program.opts();
|
|
618
621
|
try {
|
|
@@ -1417,4 +1420,4 @@ if (!isUpdateCommand && !isQuiet) {
|
|
|
1417
1420
|
}
|
|
1418
1421
|
// Parse and execute
|
|
1419
1422
|
program.parse();
|
|
1420
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQTs7Ozs7R0FLRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCx5Q0FBb0M7QUFDcEMsOENBQXNCO0FBQ3RCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBQ3pCLGlEQUF5QztBQUN6QywyQ0FBd0Q7QUFDeEQscUNBQXlDO0FBQ3pDLDZDQVFzQjtBQUV0QixlQUFlO0FBQ2YsTUFBTSxZQUFZLEdBQUcsZ0NBQWdDLENBQUM7QUFDdEQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDO0FBQzNELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUN2RSxNQUFNLHFCQUFxQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFdBQVc7QUFFOUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7QUFFOUIsd0NBQXdDO0FBQ3hDLElBQUksTUFBTSxHQUF5QixJQUFJLENBQUM7QUFXeEM7O0dBRUc7QUFDSCxTQUFTLGVBQWU7SUFDdEIsSUFBSSxDQUFDO1FBQ0gsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsMkJBQTJCO0lBQzdCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7R0FFRztBQUNILFNB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LENBQUMsQ0FBQyxDQUFDO1lBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMzQixNQUFNO1FBQ1IsQ0FBQztRQUVEO1lBQ0UsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLHdCQUFXLEVBQUMsbUJBQW1CLE1BQU0sb0NBQW9DLENBQUMsQ0FBQyxDQUFDO1lBQzFGLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUwsb0VBQW9FO0FBQ3BFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUM7QUFDN0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRXBFLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQyx3Q0FBd0M7SUFDeEMsZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxvQkFBb0I7QUFDcEIsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG4vKipcbiAqIExvY2FsIENMSSAobHdwKVxuICpcbiAqIENvbW1hbmQtbGluZSBpbnRlcmZhY2UgZm9yIG1hbmFnaW5nIExvY2FsIFdvcmRQcmVzcyBzaXRlcy5cbiAqIENvbm5lY3RzIGRpcmVjdGx5IHRvIExvY2FsJ3MgR3JhcGhRTCBzZXJ2ZXIuXG4gKi9cblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGJvb3RzdHJhcCwgQ29ubmVjdGlvbkluZm8gfSBmcm9tICcuL2Jvb3RzdHJhcCc7XG5pbXBvcnQgeyBHcmFwaFFMQ2xpZW50IH0gZnJvbSAnLi9jbGllbnQnO1xuaW1wb3J0IHtcbiAgZm9ybWF0U2l0ZUxpc3QsXG4gIGZvcm1hdFNpdGVEZXRhaWwsXG4gIGZvcm1hdFN1Y2Nlc3MsXG4gIGZvcm1hdEVycm9yLFxuICBnZXRPdXRwdXRGb3JtYXQsXG4gIEZvcm1hdHRlck9wdGlvbnMsXG4gIFNpdGVJbmZvLFxufSBmcm9tICcuL2Zvcm1hdHRlcnMnO1xuXG4vLyBQYWNrYWdlIGluZm9cbmNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAbG9jYWwtbGFicy1qcG9sbG9jay9sb2NhbC1jbGknO1xuY29uc3QgQ1VSUkVOVF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbmNvbnN0IFVQREFURV9DSEVDS19GSUxFID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5sd3AtdXBkYXRlLWNoZWNrJyk7XG5jb25zdCBVUERBVEVfQ0hFQ0tfSU5URVJWQUwgPSAyNCAqIDYwICogNjAgKiAxMDAwOyAvLyAyNCBob3Vyc1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxuLy8gU3RvcmUgY2xpZW50IGdsb2JhbGx5IGFmdGVyIGJvb3RzdHJhcFxubGV0IGNsaWVudDogR3JhcGhRTENsaWVudCB8IG51bGwgPSBudWxsO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVcGRhdGUgQ2hlY2sgRnVuY3Rpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmludGVyZmFjZSBVcGRhdGVDaGVja0NhY2hlIHtcbiAgbGFzdENoZWNrOiBudW1iZXI7XG4gIGxhdGVzdFZlcnNpb246IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKlxuICogUmVhZCB1cGRhdGUgY2hlY2sgY2FjaGVcbiAqL1xuZnVuY3Rpb24gcmVhZFVwZGF0ZUNhY2hlKCk6IFVwZGF0ZUNoZWNrQ2FjaGUgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhVUERBVEVfQ0hFQ0tfRklMRSkpIHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhVUERBVEVfQ0hFQ0tfRklMRSwgJ3V0Zi04JykpO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIGNhY2hlIHJlYWQgZXJyb3JzXG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogV3JpdGUgdXBkYXRlIGNoZWNrIGNhY2hlXG4gKi9cbmZ1bmN0aW9uIHdyaXRlVXBkYXRlQ2FjaGUoY2FjaGU6IFVwZGF0ZUNoZWNrQ2FjaGUpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFVQREFURV9DSEVDS19GSUxFLCBKU09OLnN0cmluZ2lmeShjYWNoZSkpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgY2FjaGUgd3JpdGUgZXJyb3JzXG4gIH1cbn1cblxuLyoqXG4gKiBGZXRjaCBsYXRlc3QgdmVyc2lvbiBmcm9tIG5wbSByZWdpc3RyeVxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaExhdGVzdFZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJHtQQUNLQUdFX05BTUV9L2xhdGVzdGAsIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIH0pO1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyB7IHZlcnNpb246IHN0cmluZyB9O1xuICAgICAgcmV0dXJuIGRhdGEudmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5ldHdvcmsgZXJyb3IsIHNpbGVudGx5IGlnbm9yZVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIENvbXBhcmUgc2VtdmVyIHZlcnNpb25zIChzaW1wbGUgY29tcGFyaXNvbilcbiAqL1xuZnVuY3Rpb24gaXNOZXdlclZlcnNpb24obGF0ZXN0OiBzdHJpbmcsIGN1cnJlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBsYXRlc3RQYXJ0cyA9IGxhdGVzdC5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICBjb25zdCBjdXJyZW50UGFydHMgPSBjdXJyZW50LnNwbGl0KCcuJykubWFwKE51bWJlcik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICBpZiAoKGxhdGVzdFBhcnRzW2ldIHx8IDApID4gKGN1cnJlbnRQYXJ0c1tpXSB8fCAwKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKChsYXRlc3RQYXJ0c1tpXSB8fCAwKSA8IChjdXJyZW50UGFydHNbaV0gfHwgMCkpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2sgZm9yIHVwZGF0ZXMgKHVzZXMgY2FjaGUgdG8gYXZvaWQgZnJlcXVlbnQgY2hlY2tzKVxuICovXG5hc3luYyBmdW5jdGlvbiBjaGVja0ZvclVwZGF0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNhY2hlID0gcmVhZFVwZGF0ZUNhY2hlKCk7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgLy8gU2tpcCBpZiBjaGVja2VkIHJlY2VudGx5XG4gIGlmIChjYWNoZSAmJiAobm93IC0gY2FjaGUubGFzdENoZWNrKSA8IFVQREFURV9DSEVDS19JTlRFUlZBTCkge1xuICAgIGlmIChjYWNoZS5sYXRlc3RWZXJzaW9uICYmIGlzTmV3ZXJWZXJzaW9uKGNhY2hlLmxhdGVzdFZlcnNpb24sIENVUlJFTlRfVkVSU0lPTikpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBcXG5cXHgxYlszM21VcGRhdGUgYXZhaWxhYmxlOiAke0NVUlJFTlRfVkVSU0lPTn0g4oaSICR7Y2FjaGUubGF0ZXN0VmVyc2lvbn1cXHgxYlswbWApO1xuICAgICAgY29uc29sZS5sb2coYFJ1bjogXFx4MWJbMzZtbHdwIHVwZGF0ZVxceDFiWzBtXFxuYCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZldGNoIGxhdGVzdCB2ZXJzaW9uIChub24tYmxvY2tpbmcsIGZpcmUgYW5kIGZvcmdldCBmb3IgY2FjaGUpXG4gIGZldGNoTGF0ZXN0VmVyc2lvbigpLnRoZW4oKGxhdGVzdFZlcnNpb24pID0+IHtcbiAgICB3cml0ZVVwZGF0ZUNhY2hlKHsgbGFzdENoZWNrOiBub3csIGxhdGVzdFZlcnNpb24gfSk7XG5cbiAgICBpZiAobGF0ZXN0VmVyc2lvbiAmJiBpc05ld2VyVmVyc2lvbihsYXRlc3RWZXJzaW9uLCBDVVJSRU5UX1ZFUlNJT04pKSB7XG4gICAgICBjb25zb2xlLmxvZyhgXFxuXFx4MWJbMzNtVXBkYXRlIGF2YWlsYWJsZTogJHtDVVJSRU5UX1ZFUlNJT059IOKGkiAke2xhdGVzdFZlcnNpb259XFx4MWJbMG1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBSdW46IFxceDFiWzM2bWx3cCB1cGRhdGVcXHgxYlswbVxcbmApO1xuICAgIH1cbiAgfSkuY2F0Y2goKCkgPT4ge1xuICAgIC8vIFNpbGVudGx5IGlnbm9yZSB1cGRhdGUgY2hlY2sgZmFpbHVyZXNcbiAgfSk7XG59XG5cbi8qKlxuICogRW5zdXJlIHdlJ3JlIGNvbm5lY3RlZCB0byBMb2NhbCdzIEdyYXBoUUwgc2VydmVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZUNvbm5lY3RlZChvcHRpb25zOiBGb3JtYXR0ZXJPcHRpb25zKTogUHJvbWlzZTxHcmFwaFFMQ2xpZW50PiB7XG4gIGlmIChjbGllbnQpIHtcbiAgICByZXR1cm4gY2xpZW50O1xuICB9XG5cbiAgY29uc3Qgc3Bpbm5lciA9IG9wdGlvbnMucXVpZXQgPyBudWxsIDogb3JhKCdDb25uZWN0aW5nIHRvIExvY2FsLi4uJykuc3RhcnQoKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJvb3RzdHJhcCh7XG4gICAgICB2ZXJib3NlOiBmYWxzZSxcbiAgICAgIG9uU3RhdHVzOiAoc3RhdHVzKSA9PiB7XG4gICAgICAgIGlmIChzcGlubmVyKSBzcGlubmVyLnRleHQgPSBzdGF0dXM7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgaWYgKCFyZXN1bHQuc3VjY2VzcyB8fCAhcmVzdWx0LmNvbm5lY3Rpb25JbmZvKSB7XG4gICAgICBzcGlubmVyPy5mYWlsKCdGYWlsZWQgdG8gY29ubmVjdCcpO1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihyZXN1bHQuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgc3Bpbm5lcj8uc3VjY2VlZCgnQ29ubmVjdGVkIHRvIExvY2FsJyk7XG4gICAgY2xpZW50ID0gbmV3IEdyYXBoUUxDbGllbnQocmVzdWx0LmNvbm5lY3Rpb25JbmZvKTtcbiAgICByZXR1cm4gY2xpZW50O1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgc3Bpbm5lcj8uZmFpbCgnRmFpbGVkIHRvIGNvbm5lY3QnKTtcbiAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gcnVuIHNpdGUtc3BlY2lmaWMgY29tbWFuZHMgd2l0aCBjb21tb24gYm9pbGVycGxhdGVcbiAqXG4gKiBIYW5kbGVzOiBjb25uZWN0aW9uLCBzcGlubmVyLCBzaXRlIGxvb2t1cCwgZXJyb3IgZm9ybWF0dGluZ1xuICovXG5hc3luYyBmdW5jdGlvbiBydW5TaXRlQ29tbWFuZDxUPihcbiAgc2l0ZU5hbWU6IHN0cmluZyxcbiAgY29uZmlnOiB7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgc3VjY2Vzc01lc3NhZ2U/OiAocmVzdWx0OiBUKSA9PiBzdHJpbmc7XG4gIH0sXG4gIGV4ZWN1dGU6IChncWw6IEdyYXBoUUxDbGllbnQsIHNpdGVJZDogc3RyaW5nKSA9PiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgJHtjb25maWcuYWN0aW9ufSBcIiR7c2l0ZU5hbWV9XCIuLi5gKS5zdGFydCgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlTmFtZSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY3V0ZShncWwsIHNpdGVJZCk7XG5cbiAgICBjb25zdCBtZXNzYWdlID0gY29uZmlnLnN1Y2Nlc3NNZXNzYWdlXG4gICAgICA/IGNvbmZpZy5zdWNjZXNzTWVzc2FnZShyZXN1bHQpXG4gICAgICA6IGAke2NvbmZpZy5hY3Rpb259IFwiJHtzaXRlTmFtZX1cIiBjb21wbGV0ZWRgO1xuICAgIHNwaW5uZXI/LnN1Y2NlZWQobWVzc2FnZSk7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBzcGlubmVyPy5mYWlsKGBGYWlsZWQgdG8gJHtjb25maWcuYWN0aW9uLnRvTG93ZXJDYXNlKCl9IFwiJHtzaXRlTmFtZX1cImApO1xuICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG5wcm9ncmFtXG4gIC5uYW1lKCdsd3AnKVxuICAuZGVzY3JpcHRpb24oJ0NvbW1hbmQtbGluZSBpbnRlcmZhY2UgZm9yIExvY2FsIFdvcmRQcmVzcyBkZXZlbG9wbWVudCcpXG4gIC52ZXJzaW9uKENVUlJFTlRfVkVSU0lPTik7XG5cbi8vIEdsb2JhbCBvcHRpb25zXG5wcm9ncmFtXG4gIC5vcHRpb24oJy0tanNvbicsICdPdXRwdXQgcmVzdWx0cyBhcyBKU09OJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdNaW5pbWFsIG91dHB1dCAoSURzL25hbWVzIG9ubHkpJylcbiAgLm9wdGlvbignLS1uby1jb2xvcicsICdEaXNhYmxlIGNvbG9yZWQgb3V0cHV0Jyk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFVwZGF0ZSBDb21tYW5kXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwZGF0ZScpXG4gIC5kZXNjcmlwdGlvbignVXBkYXRlIHRoZSBDTEkgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uJylcbiAgLm9wdGlvbignLS1jaGVjaycsICdPbmx5IGNoZWNrIGZvciB1cGRhdGVzLCBkbyBub3QgaW5zdGFsbCcpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICBpZiAob3B0aW9ucy5jaGVjaykge1xuICAgICAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnQ2hlY2tpbmcgZm9yIHVwZGF0ZXMuLi4nKS5zdGFydCgpO1xuICAgICAgY29uc3QgbGF0ZXN0VmVyc2lvbiA9IGF3YWl0IGZldGNoTGF0ZXN0VmVyc2lvbigpO1xuXG4gICAgICBpZiAoIWxhdGVzdFZlcnNpb24pIHtcbiAgICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgY2hlY2sgZm9yIHVwZGF0ZXMnKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNOZXdlclZlcnNpb24obGF0ZXN0VmVyc2lvbiwgQ1VSUkVOVF9WRVJTSU9OKSkge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoYFVwZGF0ZSBhdmFpbGFibGU6ICR7Q1VSUkVOVF9WRVJTSU9OfSDihpIgJHtsYXRlc3RWZXJzaW9ufWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxuUnVuIFxceDFiWzM2bWx3cCB1cGRhdGVcXHgxYlswbSB0byBpbnN0YWxsYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoYFlvdSdyZSBvbiB0aGUgbGF0ZXN0IHZlcnNpb24gKCR7Q1VSUkVOVF9WRVJTSU9OfSlgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzcGlubmVyID0gb3JhKCdVcGRhdGluZyBDTEkuLi4nKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFJ1biBucG0gdXBkYXRlXG4gICAgICBleGVjU3luYyhgbnBtIHVwZGF0ZSAtZyAke1BBQ0tBR0VfTkFNRX1gLCB7IHN0ZGlvOiAncGlwZScgfSk7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ0NMSSB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpO1xuXG4gICAgICAvLyBDaGVjayBuZXcgdmVyc2lvblxuICAgICAgY29uc3QgbmV3VmVyc2lvbiA9IGF3YWl0IGZldGNoTGF0ZXN0VmVyc2lvbigpO1xuICAgICAgaWYgKG5ld1ZlcnNpb24pIHtcbiAgICAgICAgY29uc29sZS5sb2coYFxcblVwZGF0ZWQgdG8gdmVyc2lvbiAke25ld1ZlcnNpb259YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgc3Bpbm5lci5mYWlsKCdVcGRhdGUgZmFpbGVkJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKCdUcnkgcnVubmluZzogbnBtIHVwZGF0ZSAtZyAnICsgUEFDS0FHRV9OQU1FKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2l0ZXMgQ29tbWFuZHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3Qgc2l0ZXMgPSBwcm9ncmFtLmNvbW1hbmQoJ3NpdGVzJykuZGVzY3JpcHRpb24oJ01hbmFnZSBXb3JkUHJlc3Mgc2l0ZXMnKTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgYWxsIFdvcmRQcmVzcyBzaXRlcycpXG4gIC5vcHRpb24oJy0tc3RhdHVzIDxzdGF0dXM+JywgJ0ZpbHRlciBieSBzdGF0dXMgKHJ1bm5pbmd8c3RvcHBlZHxhbGwpJywgJ2FsbCcpXG4gIC5hY3Rpb24oYXN5bmMgKGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IHNpdGVzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZG9tYWluOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nOyBwYXRoOiBzdHJpbmcgfT4gfT4oYFxuICAgICAgICBxdWVyeSB7XG4gICAgICAgICAgc2l0ZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgIGRvbWFpblxuICAgICAgICAgICAgc3RhdHVzXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgbGV0IHNpdGVzVG9TaG93ID0gZGF0YS5zaXRlcy5tYXAoKHMpID0+ICh7XG4gICAgICAgIGlkOiBzLmlkLFxuICAgICAgICBuYW1lOiBzLm5hbWUsXG4gICAgICAgIGRvbWFpbjogcy5kb21haW4sXG4gICAgICAgIHN0YXR1czogcy5zdGF0dXMudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgcGF0aDogcy5wYXRoLFxuICAgICAgfSkpO1xuXG4gICAgICAvLyBGaWx0ZXIgYnkgc3RhdHVzIGlmIHNwZWNpZmllZFxuICAgICAgaWYgKGNtZE9wdGlvbnMuc3RhdHVzICE9PSAnYWxsJykge1xuICAgICAgICBzaXRlc1RvU2hvdyA9IHNpdGVzVG9TaG93LmZpbHRlcigocykgPT4gcy5zdGF0dXMgPT09IGNtZE9wdGlvbnMuc3RhdHVzKTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coZm9ybWF0U2l0ZUxpc3Qoc2l0ZXNUb1Nob3csIGZvcm1hdCwgeyBub0NvbG9yOiBnbG9iYWxPcHRzLm5vQ29sb3IgfSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdnZXQgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdHZXQgZGV0YWlsZWQgaW5mbyBhYm91dCBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgLy8gRmlyc3QgZmluZCB0aGUgc2l0ZSBieSBuYW1lIG9yIElEXG4gICAgICBjb25zdCBzaXRlc0RhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBzaXRlczogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4gfT4oYFxuICAgICAgICBxdWVyeSB7IHNpdGVzIHsgaWQgbmFtZSB9IH1cbiAgICAgIGApO1xuXG4gICAgICBjb25zdCBmb3VuZFNpdGUgPSBzaXRlc0RhdGEuc2l0ZXMuZmluZChcbiAgICAgICAgKHMpID0+IHMuaWQgPT09IHNpdGUgfHwgcy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2l0ZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcblxuICAgICAgaWYgKCFmb3VuZFNpdGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihgU2l0ZSBub3QgZm91bmQ6IFwiJHtzaXRlfVwiYCkpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBzaXRlOiBhbnkgfT4oYFxuICAgICAgICBxdWVyeSgkaWQ6IElEISkge1xuICAgICAgICAgIHNpdGUoaWQ6ICRpZCkge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgIGRvbWFpblxuICAgICAgICAgICAgc3RhdHVzXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGhvc3RcbiAgICAgICAgICAgIGh0dHBQb3J0XG4gICAgICAgICAgICB4ZGVidWdFbmFibGVkXG4gICAgICAgICAgICBzZXJ2aWNlcyB7XG4gICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgdmVyc2lvblxuICAgICAgICAgICAgICByb2xlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBob3N0Q29ubmVjdGlvbnMge1xuICAgICAgICAgICAgICBob3N0SWRcbiAgICAgICAgICAgICAgcmVtb3RlU2l0ZUlkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlkOiBmb3VuZFNpdGUuaWQgfSk7XG5cbiAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFNpdGVEZXRhaWwoZGF0YS5zaXRlLCBmb3JtYXQsIHsgbm9Db2xvcjogZ2xvYmFsT3B0cy5ub0NvbG9yIH0pKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnc3RhcnQgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdTdGFydCBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdTdGFydGluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgU3RhcnRlZCBcIiR7c2l0ZX1cImAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICByZXR1cm4gZ3FsLm11dGF0ZShgbXV0YXRpb24oJGlkOiBJRCEpIHsgc3RhcnRTaXRlKGlkOiAkaWQpIHsgaWQgc3RhdHVzIH0gfWAsIHsgaWQ6IHNpdGVJZCB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdzdG9wIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignU3RvcCBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdTdG9wcGluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgU3RvcHBlZCBcIiR7c2l0ZX1cImAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICByZXR1cm4gZ3FsLm11dGF0ZShgbXV0YXRpb24oJGlkOiBJRCEpIHsgc3RvcFNpdGUoaWQ6ICRpZCkgeyBpZCBzdGF0dXMgfSB9YCwgeyBpZDogc2l0ZUlkIH0pO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3Jlc3RhcnQgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdSZXN0YXJ0IGEgc2l0ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogJ1Jlc3RhcnRpbmcnLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gYFJlc3RhcnRlZCBcIiR7c2l0ZX1cImAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICByZXR1cm4gZ3FsLm11dGF0ZShgbXV0YXRpb24oJGlkOiBJRCEpIHsgcmVzdGFydFNpdGUoaWQ6ICRpZCkgeyBpZCBzdGF0dXMgfSB9YCwgeyBpZDogc2l0ZUlkIH0pO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ29wZW4gPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdPcGVuIHNpdGUgaW4gYnJvd3NlcicpXG4gIC5vcHRpb24oJy0tYWRtaW4nLCAnT3BlbiBXUCBBZG1pbiBpbnN0ZWFkIG9mIGZyb250ZW5kJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnT3BlbmluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgT3BlbmVkIFwiJHtzaXRlfVwiYCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIHJldHVybiBncWwubXV0YXRlKGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBPcGVuU2l0ZUlucHV0ISkge1xuICAgICAgICAgIG9wZW5TaXRlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgc2l0ZUlkLCBvcGVuQWRtaW46IGNtZE9wdGlvbnMuYWRtaW4gfHwgZmFsc2UgfSB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdjcmVhdGUgPG5hbWU+JylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBuZXcgV29yZFByZXNzIHNpdGUnKVxuICAub3B0aW9uKCctLXBocCA8dmVyc2lvbj4nLCAnUEhQIHZlcnNpb24gKGUuZy4sIDguMi4xMCknKVxuICAub3B0aW9uKCctLXdlYiA8c2VydmVyPicsICdXZWIgc2VydmVyIChuZ2lueHxhcGFjaGUpJylcbiAgLm9wdGlvbignLS1kYiA8ZGF0YWJhc2U+JywgJ0RhdGFiYXNlIChteXNxbHxtYXJpYWRiKScpXG4gIC5vcHRpb24oJy0tYmx1ZXByaW50IDxuYW1lPicsICdVc2UgYSBibHVlcHJpbnQnKVxuICAub3B0aW9uKCctLXdwLXVzZXIgPHVzZXJuYW1lPicsICdXb3JkUHJlc3MgYWRtaW4gdXNlcm5hbWUnLCAnYWRtaW4nKVxuICAub3B0aW9uKCctLXdwLWVtYWlsIDxlbWFpbD4nLCAnV29yZFByZXNzIGFkbWluIGVtYWlsJylcbiAgLmFjdGlvbihhc3luYyAobmFtZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgQ3JlYXRpbmcgXCIke25hbWV9XCIuLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBuYW1lIH07XG4gICAgICBpZiAoY21kT3B0aW9ucy5waHApIGlucHV0LnBocFZlcnNpb24gPSBjbWRPcHRpb25zLnBocDtcbiAgICAgIGlmIChjbWRPcHRpb25zLndlYikgaW5wdXQud2ViU2VydmVyID0gY21kT3B0aW9ucy53ZWI7XG4gICAgICBpZiAoY21kT3B0aW9ucy5kYikgaW5wdXQuZGF0YWJhc2UgPSBjbWRPcHRpb25zLmRiO1xuICAgICAgaWYgKGNtZE9wdGlvbnMuYmx1ZXByaW50KSBpbnB1dC5ibHVlcHJpbnQgPSBjbWRPcHRpb25zLmJsdWVwcmludDtcbiAgICAgIGlmIChjbWRPcHRpb25zLndwVXNlcikgaW5wdXQud3BBZG1pblVzZXJuYW1lID0gY21kT3B0aW9ucy53cFVzZXI7XG4gICAgICBpZiAoY21kT3B0aW9ucy53cEVtYWlsKSBpbnB1dC53cEFkbWluRW1haWwgPSBjbWRPcHRpb25zLndwRW1haWw7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgY3JlYXRlU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBzaXRlSWQ6IHN0cmluZzsgc2l0ZU5hbWU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogQ3JlYXRlU2l0ZUlucHV0ISkge1xuICAgICAgICAgIGNyZWF0ZVNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIHNpdGVJZCBzaXRlTmFtZSBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQgfSk7XG5cbiAgICAgIGlmICghZGF0YS5jcmVhdGVTaXRlLnN1Y2Nlc3MpIHtcbiAgICAgICAgc3Bpbm5lcj8uZmFpbCgnQ3JlYXRlIGZhaWxlZCcpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEuY3JlYXRlU2l0ZS5lcnJvciB8fCAnRmFpbGVkIHRvIGNyZWF0ZSBzaXRlJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIHNwaW5uZXI/LnN1Y2NlZWQoYENyZWF0ZWQgXCIke2RhdGEuY3JlYXRlU2l0ZS5zaXRlTmFtZX1cIiAoJHtkYXRhLmNyZWF0ZVNpdGUuc2l0ZUlkfSlgKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBzcGlubmVyPy5mYWlsKCdDcmVhdGUgZmFpbGVkJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnZGVsZXRlIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignRGVsZXRlIGEgc2l0ZScpXG4gIC5vcHRpb24oJy15LCAtLXllcycsICdTa2lwIGNvbmZpcm1hdGlvbicpXG4gIC5vcHRpb24oJy0ta2VlcC1maWxlcycsICdLZWVwIHNpdGUgZmlsZXMgKG9ubHkgcmVtb3ZlIGZyb20gTG9jYWwpJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnRGVsZXRpbmcnLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gYERlbGV0ZWQgXCIke3NpdGV9XCJgIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBkZWxldGVTaXRlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IERlbGV0ZVNpdGVJbnB1dCEpIHtcbiAgICAgICAgICBkZWxldGVTaXRlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgaWQ6IHNpdGVJZCwgdHJhc2hGaWxlczogIWNtZE9wdGlvbnMua2VlcEZpbGVzIH0gfSk7XG4gICAgICBpZiAoIWRhdGEuZGVsZXRlU2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmRlbGV0ZVNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBkZWxldGUgc2l0ZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnY2xvbmUgPHNpdGU+IDxuZXdOYW1lPicpXG4gIC5kZXNjcmlwdGlvbignQ2xvbmUgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgbmV3TmFtZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiBgQ2xvbmluZ2AsIHN1Y2Nlc3NNZXNzYWdlOiAoZGF0YTogeyBjbG9uZVNpdGU6IHsgbmV3U2l0ZU5hbWU6IHN0cmluZzsgbmV3U2l0ZUlkOiBzdHJpbmcgfSB9KSA9PiBgQ2xvbmVkIHRvIFwiJHtkYXRhLmNsb25lU2l0ZS5uZXdTaXRlTmFtZX1cIiAoJHtkYXRhLmNsb25lU2l0ZS5uZXdTaXRlSWR9KWAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IGNsb25lU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBuZXdTaXRlSWQ6IHN0cmluZzsgbmV3U2l0ZU5hbWU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogQ2xvbmVTaXRlSW5wdXQhKSB7XG4gICAgICAgICAgY2xvbmVTaXRlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBuZXdTaXRlSWQgbmV3U2l0ZU5hbWUgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgbmV3TmFtZSB9IH0pO1xuICAgICAgaWYgKCFkYXRhLmNsb25lU2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmNsb25lU2l0ZS5lcnJvciB8fCAnRmFpbGVkIHRvIGNsb25lIHNpdGUnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ2V4cG9ydCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ0V4cG9ydCBzaXRlIHRvIHppcCBmaWxlJylcbiAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxwYXRoPicsICdPdXRwdXQgZmlsZSBwYXRoJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnRXhwb3J0aW5nJywgc3VjY2Vzc01lc3NhZ2U6IChkYXRhOiB7IGV4cG9ydFNpdGU6IHsgb3V0cHV0UGF0aDogc3RyaW5nIH0gfSkgPT4gYEV4cG9ydGVkIHRvICR7ZGF0YS5leHBvcnRTaXRlLm91dHB1dFBhdGh9YCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgZXhwb3J0U2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBvdXRwdXRQYXRoOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IEV4cG9ydFNpdGVJbnB1dCEpIHtcbiAgICAgICAgICBleHBvcnRTaXRlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBvdXRwdXRQYXRoIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBpbnB1dDogeyBzaXRlSWQsIG91dHB1dFBhdGg6IGNtZE9wdGlvbnMub3V0cHV0IH0gfSk7XG4gICAgICBpZiAoIWRhdGEuZXhwb3J0U2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmV4cG9ydFNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBleHBvcnQgc2l0ZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnaW1wb3J0IDx6aXBGaWxlPicpXG4gIC5kZXNjcmlwdGlvbignSW1wb3J0IHNpdGUgZnJvbSB6aXAgZmlsZScpXG4gIC5vcHRpb24oJy1uLCAtLW5hbWUgPG5hbWU+JywgJ1NpdGUgbmFtZSAoZGVmYXVsdHMgdG8gemlwIGZpbGVuYW1lKScpXG4gIC5hY3Rpb24oYXN5bmMgKHppcEZpbGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBzcGlubmVyID0gZ2xvYmFsT3B0cy5xdWlldCA/IG51bGwgOiBvcmEoYEltcG9ydGluZyBzaXRlLi4uYCkuc3RhcnQoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgaW1wb3J0U2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBzaXRlSWQ6IHN0cmluZzsgc2l0ZU5hbWU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogSW1wb3J0U2l0ZUlucHV0ISkge1xuICAgICAgICAgIGltcG9ydFNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIHNpdGVJZCBzaXRlTmFtZSBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgemlwUGF0aDogemlwRmlsZSwgc2l0ZU5hbWU6IGNtZE9wdGlvbnMubmFtZSB9IH0pO1xuXG4gICAgICBpZiAoIWRhdGEuaW1wb3J0U2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHNwaW5uZXI/LmZhaWwoJ0ltcG9ydCBmYWlsZWQnKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmltcG9ydFNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBpbXBvcnQgc2l0ZScpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBzcGlubmVyPy5zdWNjZWVkKGBJbXBvcnRlZCBcIiR7ZGF0YS5pbXBvcnRTaXRlLnNpdGVOYW1lfVwiICgke2RhdGEuaW1wb3J0U2l0ZS5zaXRlSWR9KWApO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHNwaW5uZXI/LmZhaWwoJ0ltcG9ydCBmYWlsZWQnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdyZW5hbWUgPHNpdGU+IDxuZXdOYW1lPicpXG4gIC5kZXNjcmlwdGlvbignUmVuYW1lIGEgc2l0ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIG5ld05hbWUpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogJ1JlbmFtaW5nJywgc3VjY2Vzc01lc3NhZ2U6ICgpID0+IGBSZW5hbWVkIHRvIFwiJHtuZXdOYW1lfVwiYCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgbWNwUmVuYW1lU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBNY3BSZW5hbWVTaXRlSW5wdXQhKSB7XG4gICAgICAgICAgbWNwUmVuYW1lU2l0ZShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgbmV3TmFtZSB9IH0pO1xuICAgICAgaWYgKCFkYXRhLm1jcFJlbmFtZVNpdGUuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5tY3BSZW5hbWVTaXRlLmVycm9yIHx8ICdGYWlsZWQgdG8gcmVuYW1lIHNpdGUnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3NzbCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1RydXN0IFNTTCBjZXJ0aWZpY2F0ZSBmb3IgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnVHJ1c3RpbmcgU1NMIGZvcicsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgU1NMIGNlcnRpZmljYXRlIHRydXN0ZWQgZm9yIFwiJHtzaXRlfVwiYCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgdHJ1c3RTc2w6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogVHJ1c3RTc2xJbnB1dCEpIHtcbiAgICAgICAgICB0cnVzdFNzbChpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCB9IH0pO1xuICAgICAgaWYgKCFkYXRhLnRydXN0U3NsLnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEudHJ1c3RTc2wuZXJyb3IgfHwgJ0ZhaWxlZCB0byB0cnVzdCBTU0wnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3BocCA8c2l0ZT4gPHZlcnNpb24+JylcbiAgLmRlc2NyaXB0aW9uKCdDaGFuZ2UgUEhQIHZlcnNpb24gZm9yIGEgc2l0ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIHZlcnNpb24pID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogYENoYW5naW5nIFBIUCB0byAke3ZlcnNpb259IGZvcmAsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgUEhQIHZlcnNpb24gY2hhbmdlZCB0byAke3ZlcnNpb259YCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgY2hhbmdlUGhwVmVyc2lvbjogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBDaGFuZ2VQaHBWZXJzaW9uSW5wdXQhKSB7XG4gICAgICAgICAgY2hhbmdlUGhwVmVyc2lvbihpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgcGhwVmVyc2lvbjogdmVyc2lvbiB9IH0pO1xuICAgICAgaWYgKCFkYXRhLmNoYW5nZVBocFZlcnNpb24uc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5jaGFuZ2VQaHBWZXJzaW9uLmVycm9yIHx8ICdGYWlsZWQgdG8gY2hhbmdlIFBIUCB2ZXJzaW9uJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCd4ZGVidWcgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdUb2dnbGUgWGRlYnVnIGZvciBhIHNpdGUnKVxuICAub3B0aW9uKCctLW9uJywgJ0VuYWJsZSBYZGVidWcnKVxuICAub3B0aW9uKCctLW9mZicsICdEaXNhYmxlIFhkZWJ1ZycpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBlbmFibGVkID0gY21kT3B0aW9ucy5vbiA/IHRydWUgOiBjbWRPcHRpb25zLm9mZiA/IGZhbHNlIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFjdGlvbiA9IGVuYWJsZWQgPT09IHVuZGVmaW5lZCA/ICdUb2dnbGluZycgOiBlbmFibGVkID8gJ0VuYWJsaW5nJyA6ICdEaXNhYmxpbmcnO1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiBgJHthY3Rpb259IFhkZWJ1ZyBmb3JgLCBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgdG9nZ2xlWGRlYnVnOiB7IGVuYWJsZWQ6IGJvb2xlYW4gfSB9KSA9PiBgWGRlYnVnICR7ZGF0YS50b2dnbGVYZGVidWcuZW5hYmxlZCA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCd9YCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIC8vIElmIG5vIGZsYWcgc3BlY2lmaWVkLCBnZXQgY3VycmVudCBzdGF0ZSBhbmQgdG9nZ2xlXG4gICAgICBsZXQgdGFyZ2V0RW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgICBpZiAodGFyZ2V0RW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHNpdGVEYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgc2l0ZTogeyB4ZGVidWdFbmFibGVkOiBib29sZWFuIH0gfT4oYFxuICAgICAgICAgIHF1ZXJ5KCRpZDogSUQhKSB7IHNpdGUoaWQ6ICRpZCkgeyB4ZGVidWdFbmFibGVkIH0gfVxuICAgICAgICBgLCB7IGlkOiBzaXRlSWQgfSk7XG4gICAgICAgIHRhcmdldEVuYWJsZWQgPSAhc2l0ZURhdGEuc2l0ZS54ZGVidWdFbmFibGVkO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyB0b2dnbGVYZGVidWc6IHsgc3VjY2VzczogYm9vbGVhbjsgZW5hYmxlZDogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogVG9nZ2xlWGRlYnVnSW5wdXQhKSB7XG4gICAgICAgICAgdG9nZ2xlWGRlYnVnKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlbmFibGVkIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBpbnB1dDogeyBzaXRlSWQsIGVuYWJsZWQ6IHRhcmdldEVuYWJsZWQgfSB9KTtcbiAgICAgIGlmICghZGF0YS50b2dnbGVYZGVidWcuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS50b2dnbGVYZGVidWcuZXJyb3IgfHwgJ0ZhaWxlZCB0byB0b2dnbGUgWGRlYnVnJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdsb2dzIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignR2V0IHNpdGUgbG9ncycpXG4gIC5vcHRpb24oJy10LCAtLXR5cGUgPHR5cGU+JywgJ0xvZyB0eXBlIChwaHB8bmdpbnh8bXlzcWwpJywgJ3BocCcpXG4gIC5vcHRpb24oJy1uLCAtLWxpbmVzIDxuPicsICdOdW1iZXIgb2YgbGluZXMnLCAnNTAnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcbiAgICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBnZXRTaXRlTG9nczogeyBzdWNjZXNzOiBib29sZWFuOyBsb2dzOiBzdHJpbmdbXTsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogR2V0U2l0ZUxvZ3NJbnB1dCEpIHtcbiAgICAgICAgICBnZXRTaXRlTG9ncyhpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgbG9ncyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgc2l0ZUlkLCBsb2dUeXBlOiBjbWRPcHRpb25zLnR5cGUsIGxpbmVzOiBwYXJzZUludChjbWRPcHRpb25zLmxpbmVzLCAxMCkgfSB9KTtcblxuICAgICAgaWYgKCFkYXRhLmdldFNpdGVMb2dzLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmdldFNpdGVMb2dzLmVycm9yIHx8ICdGYWlsZWQgdG8gZ2V0IGxvZ3MnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEuZ2V0U2l0ZUxvZ3MubG9ncywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmdldFNpdGVMb2dzLmxvZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyBsb2dzIGZvdW5kLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5nZXRTaXRlTG9ncy5sb2dzLmZvckVhY2goKGxpbmUpID0+IGNvbnNvbGUubG9nKGxpbmUpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBXUC1DTEkgQ29tbWFuZFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCd3cCA8c2l0ZT4gW2FyZ3MuLi5dJylcbiAgLmRlc2NyaXB0aW9uKCdSdW4gV1AtQ0xJIGNvbW1hbmRzIGFnYWluc3QgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgYXJncykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcbiAgICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyB3cENsaTogeyBzdWNjZXNzOiBib29sZWFuOyBvdXRwdXQ6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogV3BDbGlJbnB1dCEpIHtcbiAgICAgICAgICB3cENsaShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3Mgb3V0cHV0IGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBpbnB1dDogeyBzaXRlSWQsIGFyZ3MgfSB9KTtcblxuICAgICAgaWYgKCFkYXRhLndwQ2xpLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLndwQ2xpLmVycm9yIHx8ICdXUC1DTEkgY29tbWFuZCBmYWlsZWQnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coZGF0YS53cENsaS5vdXRwdXQpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEluZm8gQ29tbWFuZFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdpbmZvJylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IExvY2FsIGFwcGxpY2F0aW9uIGluZm8nKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICAvLyBHZXQgc2l0ZXMgY291bnQgYW5kIGJhc2ljIGluZm9cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBzaXRlczogQXJyYXk8eyBpZDogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9PiB9PihgXG4gICAgICAgIHF1ZXJ5IHsgc2l0ZXMgeyBpZCBzdGF0dXMgfSB9XG4gICAgICBgKTtcblxuICAgICAgY29uc3QgcnVubmluZyA9IGRhdGEuc2l0ZXMuZmlsdGVyKChzKSA9PiBzLnN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAncnVubmluZycpLmxlbmd0aDtcbiAgICAgIGNvbnN0IHN0b3BwZWQgPSBkYXRhLnNpdGVzLmZpbHRlcigocykgPT4gcy5zdGF0dXMudG9Mb3dlckNhc2UoKSAhPT0gJ3J1bm5pbmcnKS5sZW5ndGg7XG5cbiAgICAgIGNvbnN0IGluZm8gPSB7XG4gICAgICAgIHRvdGFsU2l0ZXM6IGRhdGEuc2l0ZXMubGVuZ3RoLFxuICAgICAgICBydW5uaW5nU2l0ZXM6IHJ1bm5pbmcsXG4gICAgICAgIHN0b3BwZWRTaXRlczogc3RvcHBlZCxcbiAgICAgICAgZ3JhcGhxbEVuZHBvaW50OiBjbGllbnQ/LlsndXJsJ10gfHwgJ2Nvbm5lY3RlZCcsXG4gICAgICB9O1xuXG4gICAgICBjb25zb2xlLmxvZyhmb3JtYXRTaXRlRGV0YWlsKGluZm8sIGZvcm1hdCwgeyBub0NvbG9yOiBnbG9iYWxPcHRzLm5vQ29sb3IgfSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNlcnZpY2VzIENvbW1hbmRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxucHJvZ3JhbVxuICAuY29tbWFuZCgnc2VydmljZXMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgYXZhaWxhYmxlIHNlcnZpY2UgdmVyc2lvbnMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgbGlzdFNlcnZpY2VzOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IHNlcnZpY2VzOiBBcnJheTx7IHJvbGU6IHN0cmluZzsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfT47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBxdWVyeSB7XG4gICAgICAgICAgbGlzdFNlcnZpY2VzIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NcbiAgICAgICAgICAgIHNlcnZpY2VzIHsgcm9sZSBuYW1lIHZlcnNpb24gfVxuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBpZiAoIWRhdGEubGlzdFNlcnZpY2VzLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmxpc3RTZXJ2aWNlcy5lcnJvciB8fCAnRmFpbGVkIHRvIGxpc3Qgc2VydmljZXMnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEubGlzdFNlcnZpY2VzLnNlcnZpY2VzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBncm91cGVkOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBzdmMgb2YgZGF0YS5saXN0U2VydmljZXMuc2VydmljZXMpIHtcbiAgICAgICAgICBpZiAoIWdyb3VwZWRbc3ZjLnJvbGVdKSBncm91cGVkW3N2Yy5yb2xlXSA9IFtdO1xuICAgICAgICAgIGdyb3VwZWRbc3ZjLnJvbGVdLnB1c2goYCR7c3ZjLnZlcnNpb259ICgke3N2Yy5uYW1lfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgW3JvbGUsIHZlcnNpb25zXSBvZiBPYmplY3QuZW50cmllcyhncm91cGVkKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG4ke3JvbGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByb2xlLnNsaWNlKDEpfSBWZXJzaW9uczpgKTtcbiAgICAgICAgICB2ZXJzaW9ucy5mb3JFYWNoKCh2KSA9PiBjb25zb2xlLmxvZyhgICAtICR7dn1gKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBCbHVlcHJpbnRzIENvbW1hbmRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgYmx1ZXByaW50cyA9IHByb2dyYW0uY29tbWFuZCgnYmx1ZXByaW50cycpLmRlc2NyaXB0aW9uKCdNYW5hZ2UgYmx1ZXByaW50cycpO1xuXG5ibHVlcHJpbnRzXG4gIC5jb21tYW5kKCdsaXN0JylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IGF2YWlsYWJsZSBibHVlcHJpbnRzJylcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IGJsdWVwcmludHM6IHsgc3VjY2VzczogYm9vbGVhbjsgYmx1ZXByaW50czogQXJyYXk8eyBuYW1lOiBzdHJpbmcgfT47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBxdWVyeSB7XG4gICAgICAgICAgYmx1ZXByaW50cyB7XG4gICAgICAgICAgICBzdWNjZXNzXG4gICAgICAgICAgICBibHVlcHJpbnRzIHsgbmFtZSB9XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmICghZGF0YS5ibHVlcHJpbnRzLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmJsdWVwcmludHMuZXJyb3IgfHwgJ0ZhaWxlZCB0byBsaXN0IGJsdWVwcmludHMnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEuYmx1ZXByaW50cy5ibHVlcHJpbnRzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEuYmx1ZXByaW50cy5ibHVlcHJpbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnTm8gYmx1ZXByaW50cyBmb3VuZC4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdCbHVlcHJpbnRzOicpO1xuICAgICAgICBkYXRhLmJsdWVwcmludHMuYmx1ZXByaW50cy5mb3JFYWNoKChiKSA9PiBjb25zb2xlLmxvZyhgICAtICR7Yi5uYW1lfWApKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5ibHVlcHJpbnRzXG4gIC5jb21tYW5kKCdzYXZlIDxzaXRlPiA8bmFtZT4nKVxuICAuZGVzY3JpcHRpb24oJ1NhdmUgYSBzaXRlIGFzIGEgYmx1ZXByaW50JylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgbmFtZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnU2F2aW5nIGJsdWVwcmludCBmcm9tJywgc3VjY2Vzc01lc3NhZ2U6ICgpID0+IGBTYXZlZCBibHVlcHJpbnQgXCIke25hbWV9XCJgIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBzYXZlQmx1ZXByaW50OiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IFNhdmVCbHVlcHJpbnRJbnB1dCEpIHtcbiAgICAgICAgICBzYXZlQmx1ZXByaW50KGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgc2l0ZUlkLCBuYW1lIH0gfSk7XG4gICAgICBpZiAoIWRhdGEuc2F2ZUJsdWVwcmludC5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLnNhdmVCbHVlcHJpbnQuZXJyb3IgfHwgJ0ZhaWxlZCB0byBzYXZlIGJsdWVwcmludCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBEYXRhYmFzZSBDb21tYW5kc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBkYiA9IHByb2dyYW0uY29tbWFuZCgnZGInKS5kZXNjcmlwdGlvbignRGF0YWJhc2Ugb3BlcmF0aW9ucycpO1xuXG5kYlxuICAuY29tbWFuZCgnZXhwb3J0IDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignRXhwb3J0IGRhdGFiYXNlIHRvIFNRTCBmaWxlJylcbiAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxwYXRoPicsICdPdXRwdXQgZmlsZSBwYXRoJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnRXhwb3J0aW5nIGRhdGFiYXNlIGZvcicsIHN1Y2Nlc3NNZXNzYWdlOiAoZGF0YTogeyBleHBvcnREYXRhYmFzZTogeyBvdXRwdXRQYXRoOiBzdHJpbmcgfSB9KSA9PiBgRXhwb3J0ZWQgdG8gJHtkYXRhLmV4cG9ydERhdGFiYXNlLm91dHB1dFBhdGh9YCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgZXhwb3J0RGF0YWJhc2U6IHsgc3VjY2VzczogYm9vbGVhbjsgb3V0cHV0UGF0aDogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBFeHBvcnREYXRhYmFzZUlucHV0ISkge1xuICAgICAgICAgIGV4cG9ydERhdGFiYXNlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBvdXRwdXRQYXRoIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBpbnB1dDogeyBzaXRlSWQsIG91dHB1dFBhdGg6IGNtZE9wdGlvbnMub3V0cHV0IH0gfSk7XG4gICAgICBpZiAoIWRhdGEuZXhwb3J0RGF0YWJhc2Uuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5leHBvcnREYXRhYmFzZS5lcnJvciB8fCAnRmFpbGVkIHRvIGV4cG9ydCBkYXRhYmFzZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG5kYlxuICAuY29tbWFuZCgnaW1wb3J0IDxzaXRlPiA8c3FsRmlsZT4nKVxuICAuZGVzY3JpcHRpb24oJ0ltcG9ydCBTUUwgZmlsZSBpbnRvIGRhdGFiYXNlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgc3FsRmlsZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnSW1wb3J0aW5nIGRhdGFiYXNlIGZvcicsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiAnRGF0YWJhc2UgaW1wb3J0ZWQgc3VjY2Vzc2Z1bGx5JyB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgaW1wb3J0RGF0YWJhc2U6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogSW1wb3J0RGF0YWJhc2VJbnB1dCEpIHtcbiAgICAgICAgICBpbXBvcnREYXRhYmFzZShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgc3FsUGF0aDogc3FsRmlsZSB9IH0pO1xuICAgICAgaWYgKCFkYXRhLmltcG9ydERhdGFiYXNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEuaW1wb3J0RGF0YWJhc2UuZXJyb3IgfHwgJ0ZhaWxlZCB0byBpbXBvcnQgZGF0YWJhc2UnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuZGJcbiAgLmNvbW1hbmQoJ2FkbWluZXIgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdPcGVuIEFkbWluZXIgZGF0YWJhc2UgVUknKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdPcGVuaW5nIEFkbWluZXIgZm9yJywgc3VjY2Vzc01lc3NhZ2U6ICgpID0+ICdPcGVuZWQgQWRtaW5lcicgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICByZXR1cm4gZ3FsLm11dGF0ZShgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogT3BlbkFkbWluZXJJbnB1dCEpIHtcbiAgICAgICAgICBvcGVuQWRtaW5lcihpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCB9IH0pO1xuICAgIH0pO1xuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQmFja3VwcyBDb21tYW5kc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBiYWNrdXBzID0gcHJvZ3JhbS5jb21tYW5kKCdiYWNrdXBzJykuZGVzY3JpcHRpb24oJ0Nsb3VkIGJhY2t1cCBvcGVyYXRpb25zJyk7XG5cbmJhY2t1cHNcbiAgLmNvbW1hbmQoJ3N0YXR1cycpXG4gIC5kZXNjcmlwdGlvbignQ2hlY2sgYmFja3VwIHNlcnZpY2UgYXZhaWxhYmlsaXR5JylcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IGJhY2t1cFN0YXR1czogeyBhdmFpbGFibGU6IGJvb2xlYW47IGZlYXR1cmVFbmFibGVkOiBib29sZWFuOyBkcm9wYm94OiBhbnk7IGdvb2dsZURyaXZlOiBhbnkgfSB9PihgXG4gICAgICAgIHF1ZXJ5IHtcbiAgICAgICAgICBiYWNrdXBTdGF0dXMge1xuICAgICAgICAgICAgYXZhaWxhYmxlXG4gICAgICAgICAgICBmZWF0dXJlRW5hYmxlZFxuICAgICAgICAgICAgZHJvcGJveCB7IGF1dGhlbnRpY2F0ZWQgYWNjb3VudElkIGVtYWlsIH1cbiAgICAgICAgICAgIGdvb2dsZURyaXZlIHsgYXV0aGVudGljYXRlZCBhY2NvdW50SWQgZW1haWwgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmJhY2t1cFN0YXR1cywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gZGF0YS5iYWNrdXBTdGF0dXM7XG4gICAgICAgIGNvbnNvbGUubG9nKGBcXG5CYWNrdXAgU3RhdHVzOmApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICBBdmFpbGFibGU6ICR7c3RhdHVzLmF2YWlsYWJsZSA/ICdZZXMnIDogJ05vJ31gKTtcbiAgICAgICAgY29uc29sZS5sb2coYCAgRmVhdHVyZSBFbmFibGVkOiAke3N0YXR1cy5mZWF0dXJlRW5hYmxlZCA/ICdZZXMnIDogJ05vJ31gKTtcbiAgICAgICAgaWYgKHN0YXR1cy5kcm9wYm94KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFxcbiAgRHJvcGJveDogJHtzdGF0dXMuZHJvcGJveC5hdXRoZW50aWNhdGVkID8gYENvbm5lY3RlZCAoJHtzdGF0dXMuZHJvcGJveC5lbWFpbH0pYCA6ICdOb3QgY29ubmVjdGVkJ31gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzLmdvb2dsZURyaXZlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgR29vZ2xlIERyaXZlOiAke3N0YXR1cy5nb29nbGVEcml2ZS5hdXRoZW50aWNhdGVkID8gYENvbm5lY3RlZCAoJHtzdGF0dXMuZ29vZ2xlRHJpdmUuZW1haWx9KWAgOiAnTm90IGNvbm5lY3RlZCd9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5iYWNrdXBzXG4gIC5jb21tYW5kKCdsaXN0IDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignTGlzdCBiYWNrdXBzIGZvciBhIHNpdGUnKVxuICAub3B0aW9uKCctcCwgLS1wcm92aWRlciA8cHJvdmlkZXI+JywgJ0JhY2t1cCBwcm92aWRlciAoZHJvcGJveHxnb29nbGVEcml2ZSknLCAnZHJvcGJveCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGUpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgbGlzdEJhY2t1cHM6IHsgc3VjY2VzczogYm9vbGVhbjsgYmFja3VwczogQXJyYXk8eyBzbmFwc2hvdElkOiBzdHJpbmc7IHRpbWVzdGFtcDogc3RyaW5nOyBub3RlOiBzdHJpbmcgfT47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEsICRwcm92aWRlcjogU3RyaW5nISkge1xuICAgICAgICAgIGxpc3RCYWNrdXBzKHNpdGVJZDogJHNpdGVJZCwgcHJvdmlkZXI6ICRwcm92aWRlcikge1xuICAgICAgICAgICAgc3VjY2Vzc1xuICAgICAgICAgICAgYmFja3VwcyB7IHNuYXBzaG90SWQgdGltZXN0YW1wIG5vdGUgfVxuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgc2l0ZUlkLCBwcm92aWRlcjogY21kT3B0aW9ucy5wcm92aWRlciB9KTtcblxuICAgICAgaWYgKCFkYXRhLmxpc3RCYWNrdXBzLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmxpc3RCYWNrdXBzLmVycm9yIHx8ICdGYWlsZWQgdG8gbGlzdCBiYWNrdXBzJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmxpc3RCYWNrdXBzLmJhY2t1cHMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5saXN0QmFja3Vwcy5iYWNrdXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnTm8gYmFja3VwcyBmb3VuZC4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBcXG5CYWNrdXBzICgke2NtZE9wdGlvbnMucHJvdmlkZXJ9KTpgKTtcbiAgICAgICAgZm9yIChjb25zdCBiYWNrdXAgb2YgZGF0YS5saXN0QmFja3Vwcy5iYWNrdXBzKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGJhY2t1cC50aW1lc3RhbXApLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgJHtiYWNrdXAuc25hcHNob3RJZH0gLSAke2RhdGV9JHtiYWNrdXAubm90ZSA/IGAgLSAke2JhY2t1cC5ub3RlfWAgOiAnJ31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbmJhY2t1cHNcbiAgLmNvbW1hbmQoJ2NyZWF0ZSA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIGJhY2t1cCcpXG4gIC5vcHRpb24oJy1wLCAtLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQmFja3VwIHByb3ZpZGVyIChkcm9wYm94fGdvb2dsZURyaXZlKScsICdkcm9wYm94JylcbiAgLm9wdGlvbignLW4sIC0tbm90ZSA8bm90ZT4nLCAnQmFja3VwIG5vdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdDcmVhdGluZyBiYWNrdXAgZm9yJywgc3VjY2Vzc01lc3NhZ2U6IChkYXRhOiB7IGNyZWF0ZUJhY2t1cDogeyBzbmFwc2hvdElkOiBzdHJpbmcgfSB9KSA9PiBgQmFja3VwIGNyZWF0ZWQ6ICR7ZGF0YS5jcmVhdGVCYWNrdXAuc25hcHNob3RJZH1gIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBjcmVhdGVCYWNrdXA6IHsgc3VjY2VzczogYm9vbGVhbjsgc25hcHNob3RJZDogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJHNpdGVJZDogSUQhLCAkcHJvdmlkZXI6IFN0cmluZyEsICRub3RlOiBTdHJpbmcpIHtcbiAgICAgICAgICBjcmVhdGVCYWNrdXAoc2l0ZUlkOiAkc2l0ZUlkLCBwcm92aWRlcjogJHByb3ZpZGVyLCBub3RlOiAkbm90ZSkge1xuICAgICAgICAgICAgc3VjY2VzcyBzbmFwc2hvdElkIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IHNpdGVJZCwgcHJvdmlkZXI6IGNtZE9wdGlvbnMucHJvdmlkZXIsIG5vdGU6IGNtZE9wdGlvbnMubm90ZSB9KTtcbiAgICAgIGlmICghZGF0YS5jcmVhdGVCYWNrdXAuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5jcmVhdGVCYWNrdXAuZXJyb3IgfHwgJ0ZhaWxlZCB0byBjcmVhdGUgYmFja3VwJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbmJhY2t1cHNcbiAgLmNvbW1hbmQoJ3Jlc3RvcmUgPHNpdGU+IDxzbmFwc2hvdElkPicpXG4gIC5kZXNjcmlwdGlvbignUmVzdG9yZSBmcm9tIGJhY2t1cCcpXG4gIC5vcHRpb24oJy1wLCAtLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQmFja3VwIHByb3ZpZGVyIChkcm9wYm94fGdvb2dsZURyaXZlKScsICdkcm9wYm94JylcbiAgLm9wdGlvbignLXksIC0teWVzJywgJ1NraXAgY29uZmlybWF0aW9uJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgc25hcHNob3RJZCwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnUmVzdG9yaW5nIGJhY2t1cCBmb3InLCBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgcmVzdG9yZUJhY2t1cDogeyBtZXNzYWdlOiBzdHJpbmcgfSB9KSA9PiBkYXRhLnJlc3RvcmVCYWNrdXAubWVzc2FnZSB8fCAnQmFja3VwIHJlc3RvcmVkIHN1Y2Nlc3NmdWxseScgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IHJlc3RvcmVCYWNrdXA6IHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJHNpdGVJZDogSUQhLCAkcHJvdmlkZXI6IFN0cmluZyEsICRzbmFwc2hvdElkOiBTdHJpbmchLCAkY29uZmlybTogQm9vbGVhbikge1xuICAgICAgICAgIHJlc3RvcmVCYWNrdXAoc2l0ZUlkOiAkc2l0ZUlkLCBwcm92aWRlcjogJHByb3ZpZGVyLCBzbmFwc2hvdElkOiAkc25hcHNob3RJZCwgY29uZmlybTogJGNvbmZpcm0pIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgbWVzc2FnZSBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBzaXRlSWQsIHByb3ZpZGVyOiBjbWRPcHRpb25zLnByb3ZpZGVyLCBzbmFwc2hvdElkLCBjb25maXJtOiBjbWRPcHRpb25zLnllcyB8fCBmYWxzZSB9KTtcbiAgICAgIGlmICghZGF0YS5yZXN0b3JlQmFja3VwLnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEucmVzdG9yZUJhY2t1cC5lcnJvciB8fCAnRmFpbGVkIHRvIHJlc3RvcmUgYmFja3VwJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbmJhY2t1cHNcbiAgLmNvbW1hbmQoJ2RlbGV0ZSA8c2l0ZT4gPHNuYXBzaG90SWQ+JylcbiAgLmRlc2NyaXB0aW9uKCdEZWxldGUgYSBiYWNrdXAnKVxuICAub3B0aW9uKCctcCwgLS1wcm92aWRlciA8cHJvdmlkZXI+JywgJ0JhY2t1cCBwcm92aWRlciAoZHJvcGJveHxnb29nbGVEcml2ZSknLCAnZHJvcGJveCcpXG4gIC5vcHRpb24oJy15LCAtLXllcycsICdTa2lwIGNvbmZpcm1hdGlvbicpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIHNuYXBzaG90SWQsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogJ0RlbGV0aW5nIGJhY2t1cCBmb3InLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gJ0JhY2t1cCBkZWxldGVkJyB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgZGVsZXRlQmFja3VwOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkc2l0ZUlkOiBJRCEsICRwcm92aWRlcjogU3RyaW5nISwgJHNuYXBzaG90SWQ6IFN0cmluZyEsICRjb25maXJtOiBCb29sZWFuKSB7XG4gICAgICAgICAgZGVsZXRlQmFja3VwKHNpdGVJZDogJHNpdGVJZCwgcHJvdmlkZXI6ICRwcm92aWRlciwgc25hcHNob3RJZDogJHNuYXBzaG90SWQsIGNvbmZpcm06ICRjb25maXJtKSB7XG4gICAgICAgICAgICBzdWNjZXNzIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IHNpdGVJZCwgcHJvdmlkZXI6IGNtZE9wdGlvbnMucHJvdmlkZXIsIHNuYXBzaG90SWQsIGNvbmZpcm06IGNtZE9wdGlvbnMueWVzIHx8IGZhbHNlIH0pO1xuICAgICAgaWYgKCFkYXRhLmRlbGV0ZUJhY2t1cC5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmRlbGV0ZUJhY2t1cC5lcnJvciB8fCAnRmFpbGVkIHRvIGRlbGV0ZSBiYWNrdXAnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gV1AgRW5naW5lIENvbW1hbmRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IHdwZSA9IHByb2dyYW0uY29tbWFuZCgnd3BlJykuZGVzY3JpcHRpb24oJ1dQIEVuZ2luZSBzeW5jIG9wZXJhdGlvbnMnKTtcblxud3BlXG4gIC5jb21tYW5kKCdzdGF0dXMnKVxuICAuZGVzY3JpcHRpb24oJ0NoZWNrIFdQIEVuZ2luZSBhdXRoZW50aWNhdGlvbiBzdGF0dXMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgd3BlU3RhdHVzOiB7IGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47IGVtYWlsOiBzdHJpbmc7IGFjY291bnRJZDogc3RyaW5nOyBhY2NvdW50TmFtZTogc3RyaW5nIH0gfT4oYFxuICAgICAgICBxdWVyeSB7XG4gICAgICAgICAgd3BlU3RhdHVzIHtcbiAgICAgICAgICAgIGF1dGhlbnRpY2F0ZWRcbiAgICAgICAgICAgIGVtYWlsXG4gICAgICAgICAgICBhY2NvdW50SWRcbiAgICAgICAgICAgIGFjY291bnROYW1lXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEud3BlU3RhdHVzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBkYXRhLndwZVN0YXR1cztcbiAgICAgICAgaWYgKHN0YXR1cy5hdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFxcbldQIEVuZ2luZTogQ29ubmVjdGVkYCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgRW1haWw6ICR7c3RhdHVzLmVtYWlsfWApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIEFjY291bnQ6ICR7c3RhdHVzLmFjY291bnROYW1lfSAoJHtzdGF0dXMuYWNjb3VudElkfSlgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuV1AgRW5naW5lOiBOb3QgY29ubmVjdGVkYCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgUnVuICdsd3Agd3BlIGxvZ2luJyB0byBhdXRoZW50aWNhdGVgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgnbG9naW4nKVxuICAuZGVzY3JpcHRpb24oJ0F1dGhlbnRpY2F0ZSB3aXRoIFdQIEVuZ2luZScpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgT3BlbmluZyBXUCBFbmdpbmUgbG9naW4uLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyB3cGVBdXRoZW50aWNhdGU6IHsgc3VjY2VzczogYm9vbGVhbjsgZW1haWw6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24ge1xuICAgICAgICAgIHdwZUF1dGhlbnRpY2F0ZSB7IHN1Y2Nlc3MgZW1haWwgbWVzc2FnZSBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBpZiAoIWRhdGEud3BlQXV0aGVudGljYXRlLnN1Y2Nlc3MpIHtcbiAgICAgICAgc3Bpbm5lcj8uZmFpbCgnQXV0aGVudGljYXRpb24gZmFpbGVkJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS53cGVBdXRoZW50aWNhdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBhdXRoZW50aWNhdGUnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgc3Bpbm5lcj8uc3VjY2VlZChgQXV0aGVudGljYXRlZCBhcyAke2RhdGEud3BlQXV0aGVudGljYXRlLmVtYWlsfWApO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHNwaW5uZXI/LmZhaWwoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCcpO1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxud3BlXG4gIC5jb21tYW5kKCdsb2dvdXQnKVxuICAuZGVzY3JpcHRpb24oJ0xvZ291dCBmcm9tIFdQIEVuZ2luZScpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgTG9nZ2luZyBvdXQuLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyB3cGVMb2dvdXQ6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uIHtcbiAgICAgICAgICB3cGVMb2dvdXQgeyBzdWNjZXNzIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmICghZGF0YS53cGVMb2dvdXQuc3VjY2Vzcykge1xuICAgICAgICBzcGlubmVyPy5mYWlsKCdMb2dvdXQgZmFpbGVkJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS53cGVMb2dvdXQuZXJyb3IgfHwgJ0ZhaWxlZCB0byBsb2dvdXQnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgc3Bpbm5lcj8uc3VjY2VlZCgnTG9nZ2VkIG91dCBmcm9tIFdQIEVuZ2luZScpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHNwaW5uZXI/LmZhaWwoJ0xvZ291dCBmYWlsZWQnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgnc2l0ZXMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgV1AgRW5naW5lIHNpdGVzJylcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IGxpc3RXcGVTaXRlczogeyBzdWNjZXNzOiBib29sZWFuOyBzaXRlczogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGVudmlyb25tZW50OiBzdHJpbmc7IHByaW1hcnlEb21haW46IHN0cmluZyB9PjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIHF1ZXJ5IHtcbiAgICAgICAgICBsaXN0V3BlU2l0ZXMge1xuICAgICAgICAgICAgc3VjY2Vzc1xuICAgICAgICAgICAgc2l0ZXMgeyBpZCBuYW1lIGVudmlyb25tZW50IHByaW1hcnlEb21haW4gfVxuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBpZiAoIWRhdGEubGlzdFdwZVNpdGVzLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmxpc3RXcGVTaXRlcy5lcnJvciB8fCAnRmFpbGVkIHRvIGxpc3Qgc2l0ZXMnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEubGlzdFdwZVNpdGVzLnNpdGVzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEubGlzdFdwZVNpdGVzLnNpdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnTm8gV1AgRW5naW5lIHNpdGVzIGZvdW5kLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1xcbldQIEVuZ2luZSBTaXRlczonKTtcbiAgICAgICAgZm9yIChjb25zdCBzaXRlIG9mIGRhdGEubGlzdFdwZVNpdGVzLnNpdGVzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgJHtzaXRlLm5hbWV9ICgke3NpdGUuZW52aXJvbm1lbnR9KSAtICR7c2l0ZS5wcmltYXJ5RG9tYWlufWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxud3BlXG4gIC5jb21tYW5kKCdsaW5rIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignU2hvdyBXUCBFbmdpbmUgY29ubmVjdGlvbiBmb3IgYSBsb2NhbCBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG4gICAgICBjb25zdCBzaXRlSWQgPSBhd2FpdCBmaW5kU2l0ZUlkKGdxbCwgc2l0ZSk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBnZXRXcGVMaW5rOiB7IGxpbmtlZDogYm9vbGVhbjsgc2l0ZU5hbWU6IHN0cmluZzsgY29ubmVjdGlvbnM6IEFycmF5PHsgcmVtb3RlSW5zdGFsbElkOiBzdHJpbmc7IGluc3RhbGxOYW1lOiBzdHJpbmc7IGVudmlyb25tZW50OiBzdHJpbmc7IHByaW1hcnlEb21haW46IHN0cmluZyB9PiB9IH0+KGBcbiAgICAgICAgcXVlcnkoJHNpdGVJZDogSUQhKSB7XG4gICAgICAgICAgZ2V0V3BlTGluayhzaXRlSWQ6ICRzaXRlSWQpIHtcbiAgICAgICAgICAgIGxpbmtlZFxuICAgICAgICAgICAgc2l0ZU5hbWVcbiAgICAgICAgICAgIGNvbm5lY3Rpb25zIHsgcmVtb3RlSW5zdGFsbElkIGluc3RhbGxOYW1lIGVudmlyb25tZW50IHByaW1hcnlEb21haW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBzaXRlSWQgfSk7XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhLmdldFdwZUxpbmssIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkYXRhLmdldFdwZUxpbms7XG4gICAgICAgIGlmICghbGluay5saW5rZWQgfHwgbGluay5jb25uZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuXCIke2xpbmsuc2l0ZU5hbWV9XCIgaXMgbm90IGxpbmtlZCB0byBXUCBFbmdpbmVgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuXCIke2xpbmsuc2l0ZU5hbWV9XCIgV1AgRW5naW5lIENvbm5lY3Rpb25zOmApO1xuICAgICAgICAgIGZvciAoY29uc3QgY29ubiBvZiBsaW5rLmNvbm5lY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAke2Nvbm4uaW5zdGFsbE5hbWV9ICgke2Nvbm4uZW52aXJvbm1lbnR9KSAtICR7Y29ubi5wcmltYXJ5RG9tYWlufWApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICBJRDogJHtjb25uLnJlbW90ZUluc3RhbGxJZH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ3B1c2ggPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdQdXNoIGxvY2FsIHNpdGUgdG8gV1AgRW5naW5lJylcbiAgLm9wdGlvbignLXIsIC0tcmVtb3RlIDxpbnN0YWxsSWQ+JywgJ1JlbW90ZSBpbnN0YWxsIElEJylcbiAgLm9wdGlvbignLS1zcWwnLCAnSW5jbHVkZSBkYXRhYmFzZScpXG4gIC5vcHRpb24oJy15LCAtLXllcycsICdTa2lwIGNvbmZpcm1hdGlvbicpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogJ1B1c2hpbmcgdG8gV1AgRW5naW5lJywgc3VjY2Vzc01lc3NhZ2U6IChkYXRhOiB7IHB1c2hUb1dwZTogeyBtZXNzYWdlOiBzdHJpbmcgfSB9KSA9PiBkYXRhLnB1c2hUb1dwZS5tZXNzYWdlIHx8ICdQdXNoZWQgdG8gV1AgRW5naW5lJyB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIC8vIEdldCByZW1vdGUgaW5zdGFsbCBJRCBpZiBub3QgcHJvdmlkZWRcbiAgICAgIGxldCByZW1vdGVJbnN0YWxsSWQgPSBjbWRPcHRpb25zLnJlbW90ZTtcbiAgICAgIGlmICghcmVtb3RlSW5zdGFsbElkKSB7XG4gICAgICAgIGNvbnN0IGxpbmtEYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgZ2V0V3BlTGluazogeyBjb25uZWN0aW9uczogQXJyYXk8eyByZW1vdGVJbnN0YWxsSWQ6IHN0cmluZyB9PiB9IH0+KGBcbiAgICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEpIHtcbiAgICAgICAgICAgIGdldFdwZUxpbmsoc2l0ZUlkOiAkc2l0ZUlkKSB7XG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25zIHsgcmVtb3RlSW5zdGFsbElkIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGAsIHsgc2l0ZUlkIH0pO1xuICAgICAgICBpZiAobGlua0RhdGEuZ2V0V3BlTGluay5jb25uZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpdGUgaXMgbm90IGxpbmtlZCB0byBXUCBFbmdpbmUuIFVzZSAtLXJlbW90ZSB0byBzcGVjaWZ5IGluc3RhbGwgSUQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3RlSW5zdGFsbElkID0gbGlua0RhdGEuZ2V0V3BlTGluay5jb25uZWN0aW9uc1swXS5yZW1vdGVJbnN0YWxsSWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IHB1c2hUb1dwZTogeyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkbG9jYWxTaXRlSWQ6IElEISwgJHJlbW90ZUluc3RhbGxJZDogSUQhLCAkaW5jbHVkZVNxbDogQm9vbGVhbiwgJGNvbmZpcm06IEJvb2xlYW4pIHtcbiAgICAgICAgICBwdXNoVG9XcGUobG9jYWxTaXRlSWQ6ICRsb2NhbFNpdGVJZCwgcmVtb3RlSW5zdGFsbElkOiAkcmVtb3RlSW5zdGFsbElkLCBpbmNsdWRlU3FsOiAkaW5jbHVkZVNxbCwgY29uZmlybTogJGNvbmZpcm0pIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgbWVzc2FnZSBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBsb2NhbFNpdGVJZDogc2l0ZUlkLCByZW1vdGVJbnN0YWxsSWQsIGluY2x1ZGVTcWw6IGNtZE9wdGlvbnMuc3FsIHx8IGZhbHNlLCBjb25maXJtOiBjbWRPcHRpb25zLnllcyB8fCBmYWxzZSB9KTtcbiAgICAgIGlmICghZGF0YS5wdXNoVG9XcGUuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5wdXNoVG9XcGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBwdXNoIHRvIFdQIEVuZ2luZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ3B1bGwgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdQdWxsIGZyb20gV1AgRW5naW5lIHRvIGxvY2FsIHNpdGUnKVxuICAub3B0aW9uKCctciwgLS1yZW1vdGUgPGluc3RhbGxJZD4nLCAnUmVtb3RlIGluc3RhbGwgSUQnKVxuICAub3B0aW9uKCctLXNxbCcsICdJbmNsdWRlIGRhdGFiYXNlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnUHVsbGluZyBmcm9tIFdQIEVuZ2luZSBmb3InLCBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgcHVsbEZyb21XcGU6IHsgbWVzc2FnZTogc3RyaW5nIH0gfSkgPT4gZGF0YS5wdWxsRnJvbVdwZS5tZXNzYWdlIHx8ICdQdWxsZWQgZnJvbSBXUCBFbmdpbmUnIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgLy8gR2V0IHJlbW90ZSBpbnN0YWxsIElEIGlmIG5vdCBwcm92aWRlZFxuICAgICAgbGV0IHJlbW90ZUluc3RhbGxJZCA9IGNtZE9wdGlvbnMucmVtb3RlO1xuICAgICAgaWYgKCFyZW1vdGVJbnN0YWxsSWQpIHtcbiAgICAgICAgY29uc3QgbGlua0RhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBnZXRXcGVMaW5rOiB7IGNvbm5lY3Rpb25zOiBBcnJheTx7IHJlbW90ZUluc3RhbGxJZDogc3RyaW5nIH0+IH0gfT4oYFxuICAgICAgICAgIHF1ZXJ5KCRzaXRlSWQ6IElEISkge1xuICAgICAgICAgICAgZ2V0V3BlTGluayhzaXRlSWQ6ICRzaXRlSWQpIHtcbiAgICAgICAgICAgICAgY29ubmVjdGlvbnMgeyByZW1vdGVJbnN0YWxsSWQgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgYCwgeyBzaXRlSWQgfSk7XG4gICAgICAgIGlmIChsaW5rRGF0YS5nZXRXcGVMaW5rLmNvbm5lY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2l0ZSBpcyBub3QgbGlua2VkIHRvIFdQIEVuZ2luZS4gVXNlIC0tcmVtb3RlIHRvIHNwZWNpZnkgaW5zdGFsbCBJRC4nKTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdGVJbnN0YWxsSWQgPSBsaW5rRGF0YS5nZXRXcGVMaW5rLmNvbm5lY3Rpb25zWzBdLnJlbW90ZUluc3RhbGxJZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgcHVsbEZyb21XcGU6IHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJGxvY2FsU2l0ZUlkOiBJRCEsICRyZW1vdGVJbnN0YWxsSWQ6IElEISwgJGluY2x1ZGVTcWw6IEJvb2xlYW4pIHtcbiAgICAgICAgICBwdWxsRnJvbVdwZShsb2NhbFNpdGVJZDogJGxvY2FsU2l0ZUlkLCByZW1vdGVJbnN0YWxsSWQ6ICRyZW1vdGVJbnN0YWxsSWQsIGluY2x1ZGVTcWw6ICRpbmNsdWRlU3FsKSB7XG4gICAgICAgICAgICBzdWNjZXNzIG1lc3NhZ2UgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgbG9jYWxTaXRlSWQ6IHNpdGVJZCwgcmVtb3RlSW5zdGFsbElkLCBpbmNsdWRlU3FsOiBjbWRPcHRpb25zLnNxbCB8fCBmYWxzZSB9KTtcbiAgICAgIGlmICghZGF0YS5wdWxsRnJvbVdwZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLnB1bGxGcm9tV3BlLmVycm9yIHx8ICdGYWlsZWQgdG8gcHVsbCBmcm9tIFdQIEVuZ2luZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ2hpc3RvcnkgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IHN5bmMgaGlzdG9yeSBmb3IgYSBzaXRlJylcbiAgLm9wdGlvbignLWwsIC0tbGltaXQgPG4+JywgJ051bWJlciBvZiBldmVudHMgdG8gc2hvdycsICcxMCcpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGUpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgZ2V0U3luY0hpc3Rvcnk6IHsgc3VjY2VzczogYm9vbGVhbjsgZXZlbnRzOiBBcnJheTx7IHJlbW90ZUluc3RhbGxOYW1lOiBzdHJpbmc7IHRpbWVzdGFtcDogc3RyaW5nOyBkaXJlY3Rpb246IHN0cmluZzsgc3RhdHVzOiBzdHJpbmcgfT47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEsICRsaW1pdDogSW50KSB7XG4gICAgICAgICAgZ2V0U3luY0hpc3Rvcnkoc2l0ZUlkOiAkc2l0ZUlkLCBsaW1pdDogJGxpbWl0KSB7XG4gICAgICAgICAgICBzdWNjZXNzXG4gICAgICAgICAgICBldmVudHMgeyByZW1vdGVJbnN0YWxsTmFtZSB0aW1lc3RhbXAgZGlyZWN0aW9uIHN0YXR1cyB9XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBzaXRlSWQsIGxpbWl0OiBwYXJzZUludChjbWRPcHRpb25zLmxpbWl0LCAxMCkgfSk7XG5cbiAgICAgIGlmICghZGF0YS5nZXRTeW5jSGlzdG9yeS5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZGF0YS5nZXRTeW5jSGlzdG9yeS5lcnJvciB8fCAnRmFpbGVkIHRvIGdldCBzeW5jIGhpc3RvcnknKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEuZ2V0U3luY0hpc3RvcnkuZXZlbnRzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEuZ2V0U3luY0hpc3RvcnkuZXZlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnTm8gc3luYyBoaXN0b3J5IGZvdW5kLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1xcblN5bmMgSGlzdG9yeTonKTtcbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBkYXRhLmdldFN5bmNIaXN0b3J5LmV2ZW50cykge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShldmVudC50aW1lc3RhbXApLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgICAgY29uc3QgYXJyb3cgPSBldmVudC5kaXJlY3Rpb24gPT09ICdwdXNoJyA/ICfihpInIDogJ+KGkCc7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgJHtkYXRlfSAke2Fycm93fSAke2V2ZW50LnJlbW90ZUluc3RhbGxOYW1lfSAoJHtldmVudC5zdGF0dXN9KWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxud3BlXG4gIC5jb21tYW5kKCdkaWZmIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignU2hvdyBmaWxlIGNoYW5nZXMgYmV0d2VlbiBsb2NhbCBhbmQgV1AgRW5naW5lJylcbiAgLm9wdGlvbignLWQsIC0tZGlyZWN0aW9uIDxkaXI+JywgJ0RpcmVjdGlvbiAocHVzaHxwdWxsKScsICdwdXNoJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG4gICAgICBjb25zdCBzaXRlSWQgPSBhd2FpdCBmaW5kU2l0ZUlkKGdxbCwgc2l0ZSk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBnZXRTaXRlQ2hhbmdlczogeyBzdWNjZXNzOiBib29sZWFuOyBhZGRlZDogQXJyYXk8eyBwYXRoOiBzdHJpbmcgfT47IG1vZGlmaWVkOiBBcnJheTx7IHBhdGg6IHN0cmluZyB9PjsgZGVsZXRlZDogQXJyYXk8eyBwYXRoOiBzdHJpbmcgfT47IHRvdGFsQ2hhbmdlczogbnVtYmVyOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgcXVlcnkoJHNpdGVJZDogSUQhLCAkZGlyZWN0aW9uOiBTdHJpbmcpIHtcbiAgICAgICAgICBnZXRTaXRlQ2hhbmdlcyhzaXRlSWQ6ICRzaXRlSWQsIGRpcmVjdGlvbjogJGRpcmVjdGlvbikge1xuICAgICAgICAgICAgc3VjY2Vzc1xuICAgICAgICAgICAgYWRkZWQgeyBwYXRoIH1cbiAgICAgICAgICAgIG1vZGlmaWVkIHsgcGF0aCB9XG4gICAgICAgICAgICBkZWxldGVkIHsgcGF0aCB9XG4gICAgICAgICAgICB0b3RhbENoYW5nZXNcbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IHNpdGVJZCwgZGlyZWN0aW9uOiBjbWRPcHRpb25zLmRpcmVjdGlvbiB9KTtcblxuICAgICAgaWYgKCFkYXRhLmdldFNpdGVDaGFuZ2VzLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmdldFNpdGVDaGFuZ2VzLmVycm9yIHx8ICdGYWlsZWQgdG8gZ2V0IGNoYW5nZXMnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEuZ2V0U2l0ZUNoYW5nZXMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSBkYXRhLmdldFNpdGVDaGFuZ2VzO1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxuQ2hhbmdlcyB0byAke2NtZE9wdGlvbnMuZGlyZWN0aW9ufSAoJHtjaGFuZ2VzLnRvdGFsQ2hhbmdlc30gdG90YWwpOmApO1xuXG4gICAgICAgIGlmIChjaGFuZ2VzLmFkZGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnXFxuICBBZGRlZDonKTtcbiAgICAgICAgICBjaGFuZ2VzLmFkZGVkLmZvckVhY2goKGYpID0+IGNvbnNvbGUubG9nKGAgICAgKyAke2YucGF0aH1gKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMubW9kaWZpZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdcXG4gIE1vZGlmaWVkOicpO1xuICAgICAgICAgIGNoYW5nZXMubW9kaWZpZWQuZm9yRWFjaCgoZikgPT4gY29uc29sZS5sb2coYCAgICB+ICR7Zi5wYXRofWApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5kZWxldGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnXFxuICBEZWxldGVkOicpO1xuICAgICAgICAgIGNoYW5nZXMuZGVsZXRlZC5mb3JFYWNoKChmKSA9PiBjb25zb2xlLmxvZyhgICAgIC0gJHtmLnBhdGh9YCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLnRvdGFsQ2hhbmdlcyA9PT0gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcgIE5vIGNoYW5nZXMgZGV0ZWN0ZWQuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIZWxwZXIgRnVuY3Rpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRmluZCBzaXRlIElEIGJ5IG5hbWUgb3IgSURcbiAqXG4gKiBPcHRpbWl6YXRpb246IEZpcnN0IHRyaWVzIGRpcmVjdCBJRCBsb29rdXAgKE8oMSkpIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG9cbiAqIGZldGNoaW5nIGFsbCBzaXRlcyBmb3IgbmFtZSBtYXRjaGluZyAoTyhuKSkuIFRoaXMgc2lnbmlmaWNhbnRseSBpbXByb3Zlc1xuICogcGVyZm9ybWFuY2Ugd2hlbiB1c2VycyBzcGVjaWZ5IHNpdGUgSURzIGRpcmVjdGx5LlxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kU2l0ZUlkKGdxbDogR3JhcGhRTENsaWVudCwgc2l0ZVF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAvLyBUcnkgZGlyZWN0IElEIGxvb2t1cCBmaXJzdCAtIG11Y2ggZmFzdGVyIGZvciBleGFjdCBJRCBtYXRjaGVzXG4gIHRyeSB7XG4gICAgY29uc3QgZGlyZWN0TG9va3VwID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgc2l0ZTogeyBpZDogc3RyaW5nIH0gfCBudWxsIH0+KFxuICAgICAgYHF1ZXJ5IEdldFNpdGVCeUlkKCRpZDogSUQhKSB7IHNpdGUoaWQ6ICRpZCkgeyBpZCB9IH1gLFxuICAgICAgeyBpZDogc2l0ZVF1ZXJ5IH1cbiAgICApO1xuXG4gICAgaWYgKGRpcmVjdExvb2t1cC5zaXRlKSB7XG4gICAgICByZXR1cm4gZGlyZWN0TG9va3VwLnNpdGUuaWQ7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBJRCBsb29rdXAgZmFpbGVkLCBmYWxsIHRocm91Z2ggdG8gbmFtZSBzZWFyY2hcbiAgfVxuXG4gIC8vIEZhbGwgYmFjayB0byBmZXRjaGluZyBhbGwgc2l0ZXMgZm9yIG5hbWUgbWF0Y2hpbmdcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IHNpdGVzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9PiB9PihgXG4gICAgcXVlcnkgeyBzaXRlcyB7IGlkIG5hbWUgfSB9XG4gIGApO1xuXG4gIGNvbnN0IHNpdGUgPSBkYXRhLnNpdGVzLmZpbmQoXG4gICAgKHMpID0+IHMubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNpdGVRdWVyeS50b0xvd2VyQ2FzZSgpKVxuICApO1xuXG4gIGlmICghc2l0ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2l0ZSBub3QgZm91bmQ6IFwiJHtzaXRlUXVlcnl9XCJgKTtcbiAgfVxuXG4gIHJldHVybiBzaXRlLmlkO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTa2lsbCBDb21tYW5kIChmb3IgQUkgYXNzaXN0YW50cylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxucHJvZ3JhbVxuICAuY29tbWFuZCgnc2tpbGwnKVxuICAuZGVzY3JpcHRpb24oJ0luc3RhbGwgQ2xhdWRlIENvZGUgc2tpbGwgZm9yIEFJIGFzc2lzdGFudCBpbnRlZ3JhdGlvbicpXG4gIC5hcmd1bWVudCgnW2FjdGlvbl0nLCAnQWN0aW9uOiBpbnN0YWxsLCB1bmluc3RhbGwsIG9yIHBhdGgnLCAnaW5zdGFsbCcpXG4gIC5hY3Rpb24oYXN5bmMgKGFjdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgc2tpbGxOYW1lID0gJ2x3cCc7XG4gICAgY29uc3QgdXNlclNraWxsc0RpciA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuY2xhdWRlJywgJ3NraWxscycsIHNraWxsTmFtZSk7XG4gICAgY29uc3QgYnVuZGxlZFNraWxsRGlyID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJ3NraWxsJyk7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSAnaW5zdGFsbCc6IHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgc2tpbGwgaXMgYnVuZGxlZFxuICAgICAgICBjb25zdCBidW5kbGVkU2tpbGxGaWxlID0gcGF0aC5qb2luKGJ1bmRsZWRTa2lsbERpciwgJ1NLSUxMLm1kJyk7XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhidW5kbGVkU2tpbGxGaWxlKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoJ1NraWxsIG5vdCBmb3VuZCBpbiBwYWNrYWdlLiBQbGVhc2UgcmVpbnN0YWxsIHRoZSBDTEkuJykpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSB1c2VyIHNraWxscyBkaXJlY3RvcnlcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhdGguZGlybmFtZSh1c2VyU2tpbGxzRGlyKSkpIHtcbiAgICAgICAgICBmcy5ta2RpclN5bmMocGF0aC5kaXJuYW1lKHVzZXJTa2lsbHNEaXIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGFscmVhZHkgaW5zdGFsbGVkXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHVzZXJTa2lsbHNEaXIpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coZm9ybWF0U3VjY2VzcyhgU2tpbGwgYWxyZWFkeSBpbnN0YWxsZWQgYXQgJHt1c2VyU2tpbGxzRGlyfWApKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgc3ltbGluayB0byBidW5kbGVkIHNraWxsXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZnMuc3ltbGlua1N5bmMoYnVuZGxlZFNraWxsRGlyLCB1c2VyU2tpbGxzRGlyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhmb3JtYXRTdWNjZXNzKGBJbnN0YWxsZWQgQ2xhdWRlIENvZGUgc2tpbGwgdG8gJHt1c2VyU2tpbGxzRGlyfWApKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnXFxuQ2xhdWRlIENvZGUgd2lsbCBub3cgcmVjb2duaXplIGx3cCBjb21tYW5kcy4nKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnVHJ5IGFza2luZzogXCJMaXN0IG15IExvY2FsIHNpdGVzXCIgb3IgXCJTdGFydCB0aGUgYmxvZyBzaXRlXCInKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIC8vIElmIHN5bWxpbmsgZmFpbHMsIGNvcHkgdGhlIGZpbGVzXG4gICAgICAgICAgZnMubWtkaXJTeW5jKHVzZXJTa2lsbHNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIGZzLmNvcHlGaWxlU3luYyhidW5kbGVkU2tpbGxGaWxlLCBwYXRoLmpvaW4odXNlclNraWxsc0RpciwgJ1NLSUxMLm1kJykpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFN1Y2Nlc3MoYEluc3RhbGxlZCBDbGF1ZGUgQ29kZSBza2lsbCB0byAke3VzZXJTa2lsbHNEaXJ9YCkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdcXG5DbGF1ZGUgQ29kZSB3aWxsIG5vdyByZWNvZ25pemUgbHdwIGNvbW1hbmRzLicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICd1bmluc3RhbGwnOiB7XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh1c2VyU2tpbGxzRGlyKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdTa2lsbCBub3QgaW5zdGFsbGVkLicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3RhdCA9IGZzLmxzdGF0U3luYyh1c2VyU2tpbGxzRGlyKTtcbiAgICAgICAgICBpZiAoc3RhdC5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICBmcy51bmxpbmtTeW5jKHVzZXJTa2lsbHNEaXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcy5ybVN5bmModXNlclNraWxsc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFN1Y2Nlc3MoJ1VuaW5zdGFsbGVkIENsYXVkZSBDb2RlIHNraWxsLicpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoYEZhaWxlZCB0byB1bmluc3RhbGw6ICR7ZXJyb3IubWVzc2FnZX1gKSk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdwYXRoJzoge1xuICAgICAgICBjb25zb2xlLmxvZyh1c2VyU2tpbGxzRGlyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoYFVua25vd24gYWN0aW9uOiAke2FjdGlvbn0uIFVzZSBpbnN0YWxsLCB1bmluc3RhbGwsIG9yIHBhdGguYCkpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gQ2hlY2sgZm9yIHVwZGF0ZXMgKHNraXAgZm9yIHVwZGF0ZSBjb21tYW5kIGl0c2VsZiBhbmQgcXVpZXQgbW9kZSlcbmNvbnN0IGFyZ3MgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG5jb25zdCBpc1VwZGF0ZUNvbW1hbmQgPSBhcmdzWzBdID09PSAndXBkYXRlJztcbmNvbnN0IGlzUXVpZXQgPSBhcmdzLmluY2x1ZGVzKCctLXF1aWV0JykgfHwgYXJncy5pbmNsdWRlcygnLS1qc29uJyk7XG5cbmlmICghaXNVcGRhdGVDb21tYW5kICYmICFpc1F1aWV0KSB7XG4gIC8vIEZpcmUgYW5kIGZvcmdldCAtIGRvbid0IGJsb2NrIHN0YXJ0dXBcbiAgY2hlY2tGb3JVcGRhdGVzKCkuY2F0Y2goKCkgPT4ge30pO1xufVxuXG4vLyBQYXJzZSBhbmQgZXhlY3V0ZVxucHJvZ3JhbS5wYXJzZSgpO1xuIl19
|
|
1423
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQTs7Ozs7R0FLRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCx5Q0FBb0M7QUFDcEMsOENBQXNCO0FBQ3RCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBQ3pCLGlEQUF5QztBQUN6QywyQ0FBd0Q7QUFDeEQscUNBQXlDO0FBQ3pDLDZDQVFzQjtBQUV0QixlQUFlO0FBQ2YsTUFBTSxZQUFZLEdBQUcsZ0NBQWdDLENBQUM7QUFDdEQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDO0FBQzNELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUN2RSxNQUFNLHFCQUFxQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFdBQVc7QUFFOUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7QUFFOUIsd0NBQXdDO0FBQ3hDLElBQUksTUFBTSxHQUF5QixJQUFJLENBQUM7QUFXeEM7O0dBRUc7QUFDSCxTQUFTLGVBQWU7SUFDdEIsSUFBSSxDQUFDO1FBQ0gsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsMkJBQTJCO0lBQzdCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsS0FBdUI7SUFDL0MsSUFBSSxDQUFDO1FBQ0gsRUFBRSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLDRCQUE0QjtJQUM5QixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLGtCQUFrQjtJQUMvQixJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyw4QkFBOEIsWUFBWSxTQUFTLEVBQUU7WUFDaEYsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFO1NBQzFDLENBQUMsQ0FBQztRQUNILElBQUksUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBeUIsQ0FBQztZQUMxRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxpQ0FBaUM7SUFDbkMsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxjQUFjLENBQUMsTUFBYyxFQUFFLE9BQWU7SUFDckQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFcEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDaEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztJQUNuRSxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUsZUFBZTtJQUM1QixNQUFNLEtBQUssR0FBRyxlQUFlLEVBQUUsQ0FBQztJQUNoQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFdkIsMkJBQTJCO0lBQzNCLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdELElBQUksS0FBSyxDQUFDLGFBQWEsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ2hGLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLGVBQWUsTUFBTSxLQUFLLENBQUMsYUFBYSxTQUFTLENBQUMsQ0FBQztZQUM5RixPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELE9BQU87SUFDVCxDQUFDO0lBRUQsaUVBQWlFO0lBQ2pFLGtCQUFrQixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7UUFDMUMsZ0JBQWdCLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFcEQsSUFBSSxhQUFhLElBQUksY0FBYyxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ3BFLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLGVBQWUsTUFBTSxhQUFhLFNBQVMsQ0FBQyxDQUFDO1lBQ3hGLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUNaLHdDQUF3QztJQUMxQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7R0FFRztBQUNILEtBQUssVUFBVSxlQUFlLENBQUMsT0FBeUI7SUFDdEQsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUEsYUFBRyxFQUFDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFN0UsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLHFCQUFTLEVBQUM7WUFDN0IsT0FBTyxFQUFFLEtBQUs7WUFDZCxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDbkIsSUFBSSxPQUFPO29CQUFFLE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1lBQ3JDLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM5QyxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLHdCQUFXLEVBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQzVELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUVELE9BQU8sRUFBRSxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN2QyxNQUFNLEdBQUcsSUFBSSxzQkFBYSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLHdCQUFXLEVBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsY0FBYyxDQUMzQixRQUFnQixFQUNoQixNQUdDLEVBQ0QsT0FBMkQ7SUFFM0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBc0IsQ0FBQztJQUN0RCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUEsYUFBRyxFQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRTNGLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQyxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFMUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGNBQWM7WUFDbkMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQy9CLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxhQUFhLENBQUM7UUFDL0MsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBQSx3QkFBVyxFQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUM7QUFFRCxPQUFPO0tBQ0osSUFBSSxDQUFDLEtBQUssQ0FBQztLQUNYLFdBQVcsQ0FBQyx3REFBd0QsQ0FBQztLQUNyRSxPQUFPLENBQUMsZUFBZSxDQUFDO0tBQ3hCLHVCQUF1QixFQUFFLENBQUM7QUFFN0IsaUJBQWlCO0FBQ2pCLE9BQU87S0FDSixNQUFNLENBQUMsUUFBUSxFQUFFLHdCQUF3QixDQUFDO0tBQzFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsaUNBQWlDLENBQUM7S0FDcEQsTUFBTSxDQUFDLFlBQVksRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0FBRWxELDhDQUE4QztBQUM5QyxpQkFBaUI7QUFDakIsOENBQThDO0FBRTlDLE9BQU87S0FDSixPQUFPLENBQUMsUUFBUSxDQUFDO0tBQ2pCLFdBQVcsQ0FBQyxzQ0FBc0MsQ0FBQztLQUNuRCxNQUFNLENBQUMsU0FBUyxFQUFFLHdDQUF3QyxDQUFDO0tBQzNELE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDeEIsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEIsTUFBTSxPQUFPLEdBQUcsSUFBQSxhQUFHLEVBQUMseUJBQXlCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2RCxNQUFNLGFBQWEsR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7UUFFakQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUM1QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFFRCxJQUFJLGNBQWMsQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUNuRCxPQUFPLENBQUMsT0FBTyxDQUFDLHFCQUFxQixlQUFlLE1BQU0sYUFBYSxFQUFFLENBQUMsQ0FBQztZQUMzRSxPQUFPLENBQUMsR0FBRyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDNUQsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsT0FBTyxDQUFDLGlDQUFpQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLElBQUEsYUFBRyxFQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFL0MsSUFBSSxDQUFDO1FBQ0gsaUJBQWlCO1FBQ2pCLElBQUEsd0JBQVEsRUFBQyxpQkFBaUIsWUFBWSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM3RCxPQUFPLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFNUMsb0JBQW9CO1FBQ3BCLE1BQU0sVUFBVSxHQUFHLE1BQU0sa0JBQWtCLEVBQUUsQ0FBQztRQUM5QyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNwRCxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5QixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUEsd0JBQVcsRUFBQyw2QkFBNkIsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUwsOENBQThDO0FBQzlDLGlCQUFpQjtBQUNqQiw4Q0FBOEM7QUFFOUMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUU3RSxLQUFLO0tBQ0YsT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUNmLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQztLQUN2QyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsd0NBQXdDLEVBQUUsS0FBSyxDQUFDO0tBQzVFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUU7SUFDM0IsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBc0IsQ0FBQztJQUN0RCxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFlLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFFM0MsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUErRjs7Ozs7Ozs7OztPQVUxSCxDQUFDLENBQUM7UUFFSCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDUixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7WUFDWixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU07WUFDaEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQzlCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtTQUNiLENBQUMsQ0FBQyxDQUFDO1FBRUosZ0NBQWdDO1FBQ2hDLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNoQyxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBQSwyQkFBYyxFQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUEsd0JBQVcsRUFBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVMLEtBQUs7S0FDRixPQUFPLENBQUMsWUFBWSxDQUFDO0tBQ3JCLFdBQVcsQ0FBQyxnQ0FBZ0MsQ0FBQztLQUM3QyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO0lBQ3JCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQXNCLENBQUM7SUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBQSw0QkFBZSxFQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTNDLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTlDLG9DQUFvQztRQUNwQyxNQUFNLFNBQVMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQWlEOztPQUVqRixDQUFDLENBQUM7UUFFSCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDcEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUMxRSxDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLHdCQUFXLEVBQUMsb0JBQW9CLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQWdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXVCM0MsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUV6QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUEsNkJBQWdCLEVBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUEsd0JBQVcsRUFBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVMLEtBQUs7S0FDRixPQUFPLENBQUMsY0FBYyxDQUFDO0tBQ3ZCLFdBQVcsQ0FBQyxjQUFjLENBQUM7S0FDM0IsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUNyQixNQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxZQUFZLElBQUksR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNsSCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMseURBQXlELEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMvRixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUwsS0FBSztLQUNGLE9BQU8sQ0FBQyxhQUFhLENBQUM7S0FDdEIsV0FBVyxDQUFDLGFBQWEsQ0FBQztLQUMxQixNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO0lBQ3JCLE1BQU0sY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksSUFBSSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ2xILE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyx3REFBd0QsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzlGLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFTCxLQUFLO0tBQ0YsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0tBQ3pCLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztLQUM3QixNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO0lBQ3JCLE1BQU0sY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLGNBQWMsSUFBSSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3RILE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQywyREFBMkQsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2pHLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFTCxLQUFLO0tBQ0YsT0FBTyxDQUFDLGFBQWEsQ0FBQztLQUN0QixXQUFXLENBQUMsc0JBQXNCLENBQUM7S0FDbkMsTUFBTSxDQUFDLFNBQVMsRUFBRSxtQ0FBbUMsQ0FBQztLQUN0RCxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRTtJQUNqQyxNQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLElBQUksR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNoSCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUM7Ozs7T0FJakIsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLEtBQUssSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVMLEtBQUs7S0FDRixPQUFPLENBQUMsZUFBZSxDQUFDO0tBQ3hCLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQztLQUMxQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsNEJBQTRCLENBQUM7S0FDdkQsTUFBTSxDQUFDLGdCQUFnQixFQUFFLDJCQUEyQixDQUFDO0tBQ3JELE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSwwQkFBMEIsQ0FBQztLQUNyRCxNQUFNLENBQUMsb0JBQW9CLEVBQUUsaUJBQWlCLENBQUM7S0FDL0MsTUFBTSxDQUFDLHNCQUFzQixFQUFFLDBCQUEwQixFQUFFLE9BQU8sQ0FBQztLQUNuRSxNQUFNLENBQUMsb0JBQW9CLEVBQUUsdUJBQXVCLENBQUM7S0FDckQsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUU7SUFDakMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBc0IsQ0FBQztJQUN0RCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUEsYUFBRyxFQUFDLGFBQWEsSUFBSSxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUUvRSxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUU5QyxNQUFNLEtBQUssR0FBNEIsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNoRCxJQUFJLFVBQVUsQ0FBQyxHQUFHO1lBQUUsS0FBSyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQ3RELElBQUksVUFBVSxDQUFDLEdBQUc7WUFBRSxLQUFLLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFDckQsSUFBSSxVQUFVLENBQUMsRUFBRTtZQUFFLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNsRCxJQUFJLFVBQVUsQ0FBQyxTQUFTO1lBQUUsS0FBSyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO1FBQ2pFLElBQUksVUFBVSxDQUFDLE1BQU07WUFBRSxLQUFLLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDakUsSUFBSSxVQUFVLENBQUMsT0FBTztZQUFFLEtBQUssQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUVoRSxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQStGOzs7O09BSTNILEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRWQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUEsd0JBQVcsRUFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7WUFDN0UsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBRUQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxZQUFZLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBQSx3QkFBVyxFQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUwsS0FBSztLQUNGLE9BQU8sQ0FBQyxlQUFlLENBQUM7S0FDeEIsV0FBVyxDQUFDLGVBQWUsQ0FBQztLQUM1QixNQUFNLENBQUMsV0FBVyxFQUFFLG1CQUFtQixDQUFDO0tBQ3hDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsMENBQTBDLENBQUM7S0FDbEUsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUU7SUFDakMsTUFBTSxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDbEgsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUE2RDs7OztPQUl6RixFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksdUJBQXVCLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUwsS0FBSztLQUNGLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztLQUNqQyxXQUFXLENBQUMsY0FBYyxDQUFDO0tBQzNCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQzlCLE1BQU0sY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLENBQUMsSUFBK0QsRUFBRSxFQUFFLENBQUMsY0FBYyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUN0TyxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQW9HOzs7O09BSWhJLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksc0JBQXNCLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUwsS0FBSztLQUNGLE9BQU8sQ0FBQyxlQUFlLENBQUM7S0FDeEIsV0FBVyxDQUFDLHlCQUF5QixDQUFDO0tBQ3RDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxrQkFBa0IsQ0FBQztLQUNqRCxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRTtJQUNqQyxNQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxDQUFDLElBQTRDLEVBQUUsRUFBRSxDQUFDLGVBQWUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDdkwsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFpRjs7OztPQUk3RyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksdUJBQXVCLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUwsS0FBSztLQUNGLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztLQUMzQixXQUFXLENBQUMsMkJBQTJCLENBQUM7S0FDeEMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLHNDQUFzQyxDQUFDO0tBQ25FLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFO0lBQ3BDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQXNCLENBQUM7SUFDdEQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFBLGFBQUcsRUFBQyxtQkFBbUIsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRTNFLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBK0Y7Ozs7T0FJM0gsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUEsd0JBQVcsRUFBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7WUFDN0UsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBRUQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxhQUFhLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBQSx3QkFBVyxFQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUwsS0FBSztLQUNGLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQztLQUNsQyxXQUFXLENBQUMsZUFBZSxDQUFDO0tBQzVCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQzlCLE1BQU0sY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLGVBQWUsT0FBTyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3hILE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBZ0U7Ozs7T0FJNUYsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFTCxLQUFLO0tBQ0YsT0FBTyxDQUFDLFlBQVksQ0FBQztLQUNyQixXQUFXLENBQUMsa0NBQWtDLENBQUM7S0FDL0MsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUNyQixNQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdDQUFnQyxJQUFJLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDOUksTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUEyRDs7OztPQUl2RixFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUkscUJBQXFCLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUwsS0FBSztLQUNGLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztLQUMvQixXQUFXLENBQUMsK0JBQStCLENBQUM7S0FDNUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDOUIsTUFBTSxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixPQUFPLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsMEJBQTBCLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUN4SixNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQW1FOzs7O09BSS9GLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSSw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFTCxLQUFLO0tBQ0YsT0FBTyxDQUFDLGVBQWUsQ0FBQztLQUN4QixXQUFXLENBQUMsMEJBQTBCLENBQUM7S0FDdkMsTUFBTSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUM7S0FDL0IsTUFBTSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQztLQUNqQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRTtJQUNqQyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzFFLE1BQU0sTUFBTSxHQUFHLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUN2RixNQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLGFBQWEsRUFBRSxjQUFjLEVBQUUsQ0FBQyxJQUE0QyxFQUFFLEVBQUUsQ0FBQyxVQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyTixxREFBcUQ7UUFDckQsSUFBSSxhQUFhLEdBQUcsT0FBTyxDQUFDO1FBQzVCLElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBdUM7O1NBRXRFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNuQixhQUFhLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUMvQyxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFpRjs7OztPQUk3RyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFTCxLQUFLO0tBQ0YsT0FBTyxDQUFDLGFBQWEsQ0FBQztLQUN0QixXQUFXLENBQUMsZUFBZSxDQUFDO0tBQzVCLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSw0QkFBNEIsRUFBRSxLQUFLLENBQUM7S0FDaEUsTUFBTSxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQztLQUNsRCxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRTtJQUNqQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFzQixDQUFDO0lBQ3RELE1BQU0sTUFBTSxHQUFHLElBQUEsNEJBQWUsRUFBQyxVQUFVLENBQUMsQ0FBQztJQUUzQyxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFM0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUE4RTs7OztPQUkxRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUzRixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM5QixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUEsd0JBQVcsRUFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7WUFDM0UsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBRUQsSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDaEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLHdCQUFXLEVBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFTCw4Q0FBOEM7QUFDOUMsaUJBQWlCO0FBQ2pCLDhDQUE4QztBQUU5QyxPQUFPO0tBQ0osT0FBTyxDQUFDLHFCQUFxQixDQUFDO0tBQzlCLFdBQVcsQ0FBQyxvQ0FBb0MsQ0FBQztLQUNqRCxrQkFBa0IsRUFBRTtLQUNwQixrQkFBa0IsRUFBRTtLQUNwQixNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUMzQixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFzQixDQUFDO0lBRXRELElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUzQyxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQXdFOzs7O09BSXBHLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWhDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBQSx3QkFBVyxFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLHVCQUF1QixDQUFDLENBQUMsQ0FBQztZQUN4RSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLHdCQUFXLEVBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFTCw4Q0FBOEM7QUFDOUMsZUFBZTtBQUNmLDhDQUE4QztBQUU5QyxPQUFPO0tBQ0osT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUNmLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQztLQUMxQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7SUFDakIsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBc0IsQ0FBQztJQUN0RCxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFlLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFFM0MsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFOUMsaUNBQWlDO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBbUQ7O09BRTlFLENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUN0RixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFdEYsTUFBTSxJQUFJLEdBQUc7WUFDWCxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQzdCLFlBQVksRUFBRSxPQUFPO1lBQ3JCLFlBQVksRUFBRSxPQUFPO1lBQ3JCLGVBQWUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXO1NBQ2hELENBQUM7UUFFRixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUEsNkJBQWdCLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBQSx3QkFBVyxFQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUwsOENBQThDO0FBQzlDLG1CQUFtQjtBQUNuQiw4Q0FBOEM7QUFFOUMsT0FBTztLQUNKLE9BQU8sQ0FBQyxVQUFVLENBQUM7S0FDbkIsV0FBVyxDQUFDLGlDQUFpQyxDQUFDO0tBQzlDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtJQUNqQixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFzQixDQUFDO0lBQ3RELE1BQU0sTUFBTSxHQUFHLElBQUEsNEJBQWUsRUFBQyxVQUFVLENBQUMsQ0FBQztJQUUzQyxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUU5QyxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQWlJOzs7Ozs7OztPQVE1SixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUEsd0JBQVcsRUFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7WUFDakYsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBRUQsSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25FLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxPQUFPLEdBQTZCLEVBQUUsQ0FBQztZQUM3QyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztvQkFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDL0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3pELENBQUM7WUFFRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDM0UsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBQSx3QkFBVyxFQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUwsOENBQThDO0FBQzlDLHFCQUFxQjtBQUNyQiw4Q0FBOEM7QUFFOUMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUVsRixVQUFVO0tBQ1AsT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUNmLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQztLQUN4QyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7SUFDakIsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBc0IsQ0FBQztJQUN0RCxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFlLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFFM0MsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFOUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFrRzs7Ozs7Ozs7T0FRN0gsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLHdCQUFXLEVBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksMkJBQTJCLENBQUMsQ0FBQyxDQUFDO1lBQ2pGLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUVELElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRSxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFFLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUEsd0JBQVcsRUFBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVMLFVBQVU7S0FDUCxPQUFPLENBQUMsb0JBQW9CLENBQUM7S0FDN0IsV0FBVyxDQUFDLDRCQUE0QixDQUFDO0tBQ3pDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO0lBQzNCLE1BQU0sY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsb0JBQW9CLElBQUksR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUN2SSxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQWdFOzs7O09BSTVGLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksMEJBQTBCLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUwsOENBQThDO0FBQzlDLG9CQUFvQjtBQUNwQiw4Q0FBOEM7QUFFOUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUVwRSxFQUFFO0tBQ0MsT0FBTyxDQUFDLGVBQWUsQ0FBQztLQUN4QixXQUFXLENBQUMsNkJBQTZCLENBQUM7S0FDMUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLGtCQUFrQixDQUFDO0tBQ2pELE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFO0lBQ2pDLE1BQU0sY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxjQUFjLEVBQUUsQ0FBQyxJQUFnRCxFQUFFLEVBQUUsQ0FBQyxlQUFlLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQzVNLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBcUY7Ozs7T0FJakgsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxJQUFJLDJCQUEyQixDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVMLEVBQUU7S0FDQyxPQUFPLENBQUMseUJBQXlCLENBQUM7S0FDbEMsV0FBVyxDQUFDLCtCQUErQixDQUFDO0tBQzVDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQzlCLE1BQU0sY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0NBQWdDLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQzdJLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBaUU7Ozs7T0FJN0YsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLElBQUksMkJBQTJCLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUwsRUFBRTtLQUNDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztLQUN6QixXQUFXLENBQUMsMEJBQTBCLENBQUM7S0FDdkMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUNyQixNQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUMxSCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUM7Ozs7T0FJakIsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUwsOENBQThDO0FBQzlDLG1CQUFtQjtBQUNuQiw4Q0FBOEM7QUFFOUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUVsRixPQUFPO0tBQ0osT0FBTyxDQUFDLFFBQVEsQ0FBQztLQUNqQixXQUFXLENBQUMsbUNBQW1DLENBQUM7S0FDaEQsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO0lBQ2pCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQXNCLENBQUM7SUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBQSw0QkFBZSxFQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTNDLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBb0c7Ozs7Ozs7OztPQVMvSCxDQUFDLENBQUM7UUFFSCxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDMUUsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxjQUFjLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7WUFDeEgsQ0FBQztZQUNELElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixNQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsY0FBYyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1lBQ25JLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLHdCQUFXLEVBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFTCxPQUFPO0tBQ0osT0FBTyxDQUFDLGFBQWEsQ0FBQztLQUN0QixXQUFXLENBQUMseUJBQXlCLENBQUM7S0FDdEMsTUFBTSxDQUFDLDJCQUEyQixFQUFFLHVDQUF1QyxFQUFFLFNBQVMsQ0FBQztLQUN2RixNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRTtJQUNqQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFzQixDQUFDO0lBQ3RELE1BQU0sTUFBTSxHQUFHLElBQUEsNEJBQWUsRUFBQyxVQUFVLENBQUMsQ0FBQztJQUUzQyxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFM0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUF1STs7Ozs7Ozs7T0FRbEssRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDOUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLHdCQUFXLEVBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1lBQy9FLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUVELElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRSxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ25DLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLFVBQVUsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO1lBQ25ELEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6RCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDLFVBQVUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0YsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUEsd0JBQVcsRUFBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVMLE9BQU87S0FDSixPQUFPLENBQUMsZUFBZSxDQUFDO0tBQ3hCLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztLQUM5QixNQUFNLENBQUMsMkJBQTJCLEVBQUUsdUNBQXVDLEVBQUUsU0FBUyxDQUFDO0tBQ3ZGLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxhQUFhLENBQUM7S0FDMUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUU7SUFDakMsTUFBTSxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxDQUFDLElBQThDLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUN6TSxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQW1GOzs7Ozs7T0FNL0csRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFTCxPQUFPO0tBQ0osT0FBTyxDQUFDLDZCQUE2QixDQUFDO0tBQ3RDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQztLQUNsQyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsdUNBQXVDLEVBQUUsU0FBUyxDQUFDO0tBQ3ZGLE1BQU0sQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLENBQUM7S0FDeEMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxFQUFFO0lBQzdDLE1BQU0sY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsQ0FBQyxJQUE0QyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sSUFBSSw4QkFBOEIsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDbk4sTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFpRjs7Ozs7O09BTTdHLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSwwQkFBMEIsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFTCxPQUFPO0tBQ0osT0FBTyxDQUFDLDRCQUE0QixDQUFDO0tBQ3JDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztLQUM5QixNQUFNLENBQUMsMkJBQTJCLEVBQUUsdUNBQXVDLEVBQUUsU0FBUyxDQUFDO0tBQ3ZGLE1BQU0sQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLENBQUM7S0FDeEMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxFQUFFO0lBQzdDLE1BQU0sY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQzFILE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBK0Q7Ozs7OztPQU0zRixFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUkseUJBQXlCLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUwsOENBQThDO0FBQzlDLHFCQUFxQjtBQUNyQiw4Q0FBOEM7QUFFOUMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUU1RSxHQUFHO0tBQ0EsT0FBTyxDQUFDLFFBQVEsQ0FBQztLQUNqQixXQUFXLENBQUMsdUNBQXVDLENBQUM7S0FDcEQsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO0lBQ2pCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQXNCLENBQUM7SUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBQSw0QkFBZSxFQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTNDLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBbUc7Ozs7Ozs7OztPQVM5SCxDQUFDLENBQUM7UUFFSCxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDOUIsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztnQkFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsTUFBTSxDQUFDLFdBQVcsS0FBSyxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUN4RSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2dCQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUEsd0JBQVcsRUFBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVMLEdBQUc7S0FDQSxPQUFPLENBQUMsT0FBTyxDQUFDO0tBQ2hCLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQztLQUMxQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7SUFDakIsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBc0IsQ0FBQztJQUN0RCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUEsYUFBRyxFQUFDLDRCQUE0QixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFcEYsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFOUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFrRzs7OztPQUk5SCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxPQUFPLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDdkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLHdCQUFXLEVBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLElBQUksd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1lBQ25GLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztRQUVELE9BQU8sRUFBRSxPQUFPLENBQUMsb0JBQW9CLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDdkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLHdCQUFXLEVBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFTCxHQUFHO0tBQ0EsT0FBTyxDQUFDLFFBQVEsQ0FBQztLQUNqQixXQUFXLENBQUMsdUJBQXVCLENBQUM7S0FDcEMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO0lBQ2pCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQXNCLENBQUM7SUFDdEQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFBLGFBQUcsRUFBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRXhFLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBNEQ7Ozs7T0FJeEYsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUIsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUEsd0JBQVcsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7WUFDdkUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBRUQsT0FBTyxFQUFFLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDL0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLHdCQUFXLEVBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFTCxHQUFHO0tBQ0EsT0FBTyxDQUFDLE9BQU8sQ0FBQztLQUNoQixXQUFXLENBQUMsc0JBQXNCLENBQUM7S0FDbkMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO0lBQ2pCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQXNCLENBQUM7SUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBQSw0QkFBZSxFQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTNDLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBdUo7Ozs7Ozs7O09BUWxMLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBQSx3QkFBVyxFQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLHNCQUFzQixDQUFDLENBQUMsQ0FBQztZQUM5RSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFFRCxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUMzQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNsQyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxXQUFXLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDOUUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUEsd0JBQVcsRUFBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVMLEdBQUc7S0FDQSxPQUFPLENBQUMsYUFBYSxDQUFDO0tBQ3RCLFdBQVcsQ0FBQyw0Q0FBNEMsQ0FBQztLQUN6RCxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO0lBQ3JCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQXNCLENBQUM7SUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBQSw0QkFBZSxFQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTNDLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUzQyxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQTBLOzs7Ozs7OztPQVFyTSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUVmLElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxRQUFRLDhCQUE4QixDQUFDLENBQUM7WUFDakUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsUUFBUSwwQkFBMEIsQ0FBQyxDQUFDO2dCQUMzRCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFdBQVcsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztvQkFDbkYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUEsd0JBQVcsRUFBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVMLEdBQUc7S0FDQSxPQUFPLENBQUMsYUFBYSxDQUFDO0tBQ3RCLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQztLQUMzQyxNQUFNLENBQUMsMEJBQTBCLEVBQUUsbUJBQW1CLENBQUM7S0FDdkQsTUFBTSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQztLQUNuQyxNQUFNLENBQUMsV0FBVyxFQUFFLG1CQUFtQixDQUFDO0tBQ3hDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFO0lBQ2pDLE1BQU0sY0FBYyxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsQ0FBQyxJQUF3QyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxxQkFBcUIsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDbE0sd0NBQXdDO1FBQ3hDLElBQUksZUFBZSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDeEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBc0U7Ozs7OztTQU1yRyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNmLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLHNFQUFzRSxDQUFDLENBQUM7WUFDMUYsQ0FBQztZQUNELGVBQWUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7UUFDdkUsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBNkU7Ozs7OztPQU16RyxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEgsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFTCxHQUFHO0tBQ0EsT0FBTyxDQUFDLGFBQWEsQ0FBQztLQUN0QixXQUFXLENBQUMsbUNBQW1DLENBQUM7S0FDaEQsTUFBTSxDQUFDLDBCQUEwQixFQUFFLG1CQUFtQixDQUFDO0tBQ3ZELE1BQU0sQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUM7S0FDbkMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUU7SUFDakMsTUFBTSxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLDRCQUE0QixFQUFFLGNBQWMsRUFBRSxDQUFDLElBQTBDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxJQUFJLHVCQUF1QixFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUM5TSx3Q0FBd0M7UUFDeEMsSUFBSSxlQUFlLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUN4QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFzRTs7Ozs7O1NBTXJHLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2pELE1BQU0sSUFBSSxLQUFLLENBQUMsc0VBQXNFLENBQUMsQ0FBQztZQUMxRixDQUFDO1lBQ0QsZUFBZSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUErRTs7Ozs7O09BTTNHLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksK0JBQStCLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUwsR0FBRztLQUNBLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztLQUN6QixXQUFXLENBQUMsOEJBQThCLENBQUM7S0FDM0MsTUFBTSxDQUFDLGlCQUFpQixFQUFFLDBCQUEwQixFQUFFLElBQUksQ0FBQztLQUMzRCxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRTtJQUNqQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFzQixDQUFDO0lBQ3RELE1BQU0sTUFBTSxHQUFHLElBQUEsNEJBQWUsRUFBQyxVQUFVLENBQUMsQ0FBQztJQUUzQyxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFM0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFxSzs7Ozs7Ozs7T0FRaE0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXRELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBQSx3QkFBVyxFQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxJQUFJLDRCQUE0QixDQUFDLENBQUMsQ0FBQztZQUN0RixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFFRCxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN4QyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUMvQixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQy9DLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDeEQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUNyRCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDakYsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUEsd0JBQVcsRUFBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVMLEdBQUc7S0FDQSxPQUFPLENBQUMsYUFBYSxDQUFDO0tBQ3RCLFdBQVcsQ0FBQywrQ0FBK0MsQ0FBQztLQUM1RCxNQUFNLENBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxDQUFDO0tBQ2hFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFO0lBQ2pDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQXNCLENBQUM7SUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBQSw0QkFBZSxFQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTNDLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUzQyxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQTRMOzs7Ozs7Ozs7OztPQVd2TixFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUVoRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUEsd0JBQVcsRUFBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssSUFBSSx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7WUFDakYsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBRUQsSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLFVBQVUsQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLFlBQVksVUFBVSxDQUFDLENBQUM7WUFFckYsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDMUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQy9ELENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM3QixPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEUsQ0FBQztZQUNELElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzVCLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqRSxDQUFDO1lBQ0QsSUFBSSxPQUFPLENBQUMsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDeEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUEsd0JBQVcsRUFBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVMLDhDQUE4QztBQUM5QyxtQkFBbUI7QUFDbkIsOENBQThDO0FBRTlDOzs7Ozs7R0FNRztBQUNILEtBQUssVUFBVSxVQUFVLENBQUMsR0FBa0IsRUFBRSxTQUFpQjtJQUM3RCxnRUFBZ0U7SUFDaEUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxZQUFZLEdBQUcsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUNsQyxzREFBc0QsRUFDdEQsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQ2xCLENBQUM7UUFFRixJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsZ0RBQWdEO0lBQ2xELENBQUM7SUFFRCxvREFBb0Q7SUFDcEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFpRDs7R0FFNUUsQ0FBQyxDQUFDO0lBRUgsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQzFCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FDOUQsQ0FBQztJQUVGLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNqQixDQUFDO0FBRUQsOENBQThDO0FBQzlDLG9DQUFvQztBQUNwQyw4Q0FBOEM7QUFFOUMsT0FBTztLQUNKLE9BQU8sQ0FBQyxPQUFPLENBQUM7S0FDaEIsV0FBVyxDQUFDLHdEQUF3RCxDQUFDO0tBQ3JFLFFBQVEsQ0FBQyxVQUFVLEVBQUUscUNBQXFDLEVBQUUsU0FBUyxDQUFDO0tBQ3RFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBYyxFQUFFLEVBQUU7SUFDL0IsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDOUUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRS9ELFFBQVEsTUFBTSxFQUFFLENBQUM7UUFDZixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDZiw0QkFBNEI7WUFDNUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBQSx3QkFBVyxFQUFDLHVEQUF1RCxDQUFDLENBQUMsQ0FBQztnQkFDcEYsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQixDQUFDO1lBRUQsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNqRSxDQUFDO1lBRUQsNkJBQTZCO1lBQzdCLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO2dCQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUEsMEJBQWEsRUFBQyw4QkFBOEIsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMxRSxPQUFPO1lBQ1QsQ0FBQztZQUVELGtDQUFrQztZQUNsQyxJQUFJLENBQUM7Z0JBQ0gsRUFBRSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQy9DLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBQSwwQkFBYSxFQUFDLGtDQUFrQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzlFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0RBQWdELENBQUMsQ0FBQztnQkFDOUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1lBQzVFLENBQUM7WUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO2dCQUNwQixtQ0FBbUM7Z0JBQ25DLEVBQUUsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ2pELEVBQUUsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDeEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFBLDBCQUFhLEVBQUMsa0NBQWtDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDOUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7WUFDRCxNQUFNO1FBQ1IsQ0FBQztRQUVELEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7Z0JBQ3BDLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxDQUFDO2dCQUNILE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3pDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7b0JBQzFCLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7cUJBQU0sQ0FBQztvQkFDTixFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRCxDQUFDO2dCQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBQSwwQkFBYSxFQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLHdCQUFXLEVBQUMsd0JBQXdCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEIsQ0FBQztZQUNELE1BQU07UUFDUixDQUFDO1FBRUQsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMzQixNQUFNO1FBQ1IsQ0FBQztRQUVEO1lBQ0UsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLHdCQUFXLEVBQUMsbUJBQW1CLE1BQU0sb0NBQW9DLENBQUMsQ0FBQyxDQUFDO1lBQzFGLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUwsb0VBQW9FO0FBQ3BFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUM7QUFDN0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRXBFLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQyx3Q0FBd0M7SUFDeEMsZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxvQkFBb0I7QUFDcEIsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG4vKipcbiAqIExvY2FsIENMSSAobHdwKVxuICpcbiAqIENvbW1hbmQtbGluZSBpbnRlcmZhY2UgZm9yIG1hbmFnaW5nIExvY2FsIFdvcmRQcmVzcyBzaXRlcy5cbiAqIENvbm5lY3RzIGRpcmVjdGx5IHRvIExvY2FsJ3MgR3JhcGhRTCBzZXJ2ZXIuXG4gKi9cblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGJvb3RzdHJhcCwgQ29ubmVjdGlvbkluZm8gfSBmcm9tICcuL2Jvb3RzdHJhcCc7XG5pbXBvcnQgeyBHcmFwaFFMQ2xpZW50IH0gZnJvbSAnLi9jbGllbnQnO1xuaW1wb3J0IHtcbiAgZm9ybWF0U2l0ZUxpc3QsXG4gIGZvcm1hdFNpdGVEZXRhaWwsXG4gIGZvcm1hdFN1Y2Nlc3MsXG4gIGZvcm1hdEVycm9yLFxuICBnZXRPdXRwdXRGb3JtYXQsXG4gIEZvcm1hdHRlck9wdGlvbnMsXG4gIFNpdGVJbmZvLFxufSBmcm9tICcuL2Zvcm1hdHRlcnMnO1xuXG4vLyBQYWNrYWdlIGluZm9cbmNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAbG9jYWwtbGFicy1qcG9sbG9jay9sb2NhbC1jbGknO1xuY29uc3QgQ1VSUkVOVF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbmNvbnN0IFVQREFURV9DSEVDS19GSUxFID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5sd3AtdXBkYXRlLWNoZWNrJyk7XG5jb25zdCBVUERBVEVfQ0hFQ0tfSU5URVJWQUwgPSAyNCAqIDYwICogNjAgKiAxMDAwOyAvLyAyNCBob3Vyc1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxuLy8gU3RvcmUgY2xpZW50IGdsb2JhbGx5IGFmdGVyIGJvb3RzdHJhcFxubGV0IGNsaWVudDogR3JhcGhRTENsaWVudCB8IG51bGwgPSBudWxsO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVcGRhdGUgQ2hlY2sgRnVuY3Rpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmludGVyZmFjZSBVcGRhdGVDaGVja0NhY2hlIHtcbiAgbGFzdENoZWNrOiBudW1iZXI7XG4gIGxhdGVzdFZlcnNpb246IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKlxuICogUmVhZCB1cGRhdGUgY2hlY2sgY2FjaGVcbiAqL1xuZnVuY3Rpb24gcmVhZFVwZGF0ZUNhY2hlKCk6IFVwZGF0ZUNoZWNrQ2FjaGUgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhVUERBVEVfQ0hFQ0tfRklMRSkpIHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhVUERBVEVfQ0hFQ0tfRklMRSwgJ3V0Zi04JykpO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIGNhY2hlIHJlYWQgZXJyb3JzXG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogV3JpdGUgdXBkYXRlIGNoZWNrIGNhY2hlXG4gKi9cbmZ1bmN0aW9uIHdyaXRlVXBkYXRlQ2FjaGUoY2FjaGU6IFVwZGF0ZUNoZWNrQ2FjaGUpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKFVQREFURV9DSEVDS19GSUxFLCBKU09OLnN0cmluZ2lmeShjYWNoZSkpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgY2FjaGUgd3JpdGUgZXJyb3JzXG4gIH1cbn1cblxuLyoqXG4gKiBGZXRjaCBsYXRlc3QgdmVyc2lvbiBmcm9tIG5wbSByZWdpc3RyeVxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaExhdGVzdFZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJHtQQUNLQUdFX05BTUV9L2xhdGVzdGAsIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIH0pO1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyB7IHZlcnNpb246IHN0cmluZyB9O1xuICAgICAgcmV0dXJuIGRhdGEudmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5ldHdvcmsgZXJyb3IsIHNpbGVudGx5IGlnbm9yZVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIENvbXBhcmUgc2VtdmVyIHZlcnNpb25zIChzaW1wbGUgY29tcGFyaXNvbilcbiAqL1xuZnVuY3Rpb24gaXNOZXdlclZlcnNpb24obGF0ZXN0OiBzdHJpbmcsIGN1cnJlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBsYXRlc3RQYXJ0cyA9IGxhdGVzdC5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICBjb25zdCBjdXJyZW50UGFydHMgPSBjdXJyZW50LnNwbGl0KCcuJykubWFwKE51bWJlcik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICBpZiAoKGxhdGVzdFBhcnRzW2ldIHx8IDApID4gKGN1cnJlbnRQYXJ0c1tpXSB8fCAwKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKChsYXRlc3RQYXJ0c1tpXSB8fCAwKSA8IChjdXJyZW50UGFydHNbaV0gfHwgMCkpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2sgZm9yIHVwZGF0ZXMgKHVzZXMgY2FjaGUgdG8gYXZvaWQgZnJlcXVlbnQgY2hlY2tzKVxuICovXG5hc3luYyBmdW5jdGlvbiBjaGVja0ZvclVwZGF0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNhY2hlID0gcmVhZFVwZGF0ZUNhY2hlKCk7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgLy8gU2tpcCBpZiBjaGVja2VkIHJlY2VudGx5XG4gIGlmIChjYWNoZSAmJiAobm93IC0gY2FjaGUubGFzdENoZWNrKSA8IFVQREFURV9DSEVDS19JTlRFUlZBTCkge1xuICAgIGlmIChjYWNoZS5sYXRlc3RWZXJzaW9uICYmIGlzTmV3ZXJWZXJzaW9uKGNhY2hlLmxhdGVzdFZlcnNpb24sIENVUlJFTlRfVkVSU0lPTikpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBcXG5cXHgxYlszM21VcGRhdGUgYXZhaWxhYmxlOiAke0NVUlJFTlRfVkVSU0lPTn0g4oaSICR7Y2FjaGUubGF0ZXN0VmVyc2lvbn1cXHgxYlswbWApO1xuICAgICAgY29uc29sZS5sb2coYFJ1bjogXFx4MWJbMzZtbHdwIHVwZGF0ZVxceDFiWzBtXFxuYCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZldGNoIGxhdGVzdCB2ZXJzaW9uIChub24tYmxvY2tpbmcsIGZpcmUgYW5kIGZvcmdldCBmb3IgY2FjaGUpXG4gIGZldGNoTGF0ZXN0VmVyc2lvbigpLnRoZW4oKGxhdGVzdFZlcnNpb24pID0+IHtcbiAgICB3cml0ZVVwZGF0ZUNhY2hlKHsgbGFzdENoZWNrOiBub3csIGxhdGVzdFZlcnNpb24gfSk7XG5cbiAgICBpZiAobGF0ZXN0VmVyc2lvbiAmJiBpc05ld2VyVmVyc2lvbihsYXRlc3RWZXJzaW9uLCBDVVJSRU5UX1ZFUlNJT04pKSB7XG4gICAgICBjb25zb2xlLmxvZyhgXFxuXFx4MWJbMzNtVXBkYXRlIGF2YWlsYWJsZTogJHtDVVJSRU5UX1ZFUlNJT059IOKGkiAke2xhdGVzdFZlcnNpb259XFx4MWJbMG1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBSdW46IFxceDFiWzM2bWx3cCB1cGRhdGVcXHgxYlswbVxcbmApO1xuICAgIH1cbiAgfSkuY2F0Y2goKCkgPT4ge1xuICAgIC8vIFNpbGVudGx5IGlnbm9yZSB1cGRhdGUgY2hlY2sgZmFpbHVyZXNcbiAgfSk7XG59XG5cbi8qKlxuICogRW5zdXJlIHdlJ3JlIGNvbm5lY3RlZCB0byBMb2NhbCdzIEdyYXBoUUwgc2VydmVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZUNvbm5lY3RlZChvcHRpb25zOiBGb3JtYXR0ZXJPcHRpb25zKTogUHJvbWlzZTxHcmFwaFFMQ2xpZW50PiB7XG4gIGlmIChjbGllbnQpIHtcbiAgICByZXR1cm4gY2xpZW50O1xuICB9XG5cbiAgY29uc3Qgc3Bpbm5lciA9IG9wdGlvbnMucXVpZXQgPyBudWxsIDogb3JhKCdDb25uZWN0aW5nIHRvIExvY2FsLi4uJykuc3RhcnQoKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJvb3RzdHJhcCh7XG4gICAgICB2ZXJib3NlOiBmYWxzZSxcbiAgICAgIG9uU3RhdHVzOiAoc3RhdHVzKSA9PiB7XG4gICAgICAgIGlmIChzcGlubmVyKSBzcGlubmVyLnRleHQgPSBzdGF0dXM7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgaWYgKCFyZXN1bHQuc3VjY2VzcyB8fCAhcmVzdWx0LmNvbm5lY3Rpb25JbmZvKSB7XG4gICAgICBzcGlubmVyPy5mYWlsKCdGYWlsZWQgdG8gY29ubmVjdCcpO1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihyZXN1bHQuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgc3Bpbm5lcj8uc3VjY2VlZCgnQ29ubmVjdGVkIHRvIExvY2FsJyk7XG4gICAgY2xpZW50ID0gbmV3IEdyYXBoUUxDbGllbnQocmVzdWx0LmNvbm5lY3Rpb25JbmZvKTtcbiAgICByZXR1cm4gY2xpZW50O1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgc3Bpbm5lcj8uZmFpbCgnRmFpbGVkIHRvIGNvbm5lY3QnKTtcbiAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gcnVuIHNpdGUtc3BlY2lmaWMgY29tbWFuZHMgd2l0aCBjb21tb24gYm9pbGVycGxhdGVcbiAqXG4gKiBIYW5kbGVzOiBjb25uZWN0aW9uLCBzcGlubmVyLCBzaXRlIGxvb2t1cCwgZXJyb3IgZm9ybWF0dGluZ1xuICovXG5hc3luYyBmdW5jdGlvbiBydW5TaXRlQ29tbWFuZDxUPihcbiAgc2l0ZU5hbWU6IHN0cmluZyxcbiAgY29uZmlnOiB7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgc3VjY2Vzc01lc3NhZ2U/OiAocmVzdWx0OiBUKSA9PiBzdHJpbmc7XG4gIH0sXG4gIGV4ZWN1dGU6IChncWw6IEdyYXBoUUxDbGllbnQsIHNpdGVJZDogc3RyaW5nKSA9PiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgJHtjb25maWcuYWN0aW9ufSBcIiR7c2l0ZU5hbWV9XCIuLi5gKS5zdGFydCgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlTmFtZSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY3V0ZShncWwsIHNpdGVJZCk7XG5cbiAgICBjb25zdCBtZXNzYWdlID0gY29uZmlnLnN1Y2Nlc3NNZXNzYWdlXG4gICAgICA/IGNvbmZpZy5zdWNjZXNzTWVzc2FnZShyZXN1bHQpXG4gICAgICA6IGAke2NvbmZpZy5hY3Rpb259IFwiJHtzaXRlTmFtZX1cIiBjb21wbGV0ZWRgO1xuICAgIHNwaW5uZXI/LnN1Y2NlZWQobWVzc2FnZSk7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBzcGlubmVyPy5mYWlsKGBGYWlsZWQgdG8gJHtjb25maWcuYWN0aW9uLnRvTG93ZXJDYXNlKCl9IFwiJHtzaXRlTmFtZX1cImApO1xuICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG5wcm9ncmFtXG4gIC5uYW1lKCdsd3AnKVxuICAuZGVzY3JpcHRpb24oJ0NvbW1hbmQtbGluZSBpbnRlcmZhY2UgZm9yIExvY2FsIFdvcmRQcmVzcyBkZXZlbG9wbWVudCcpXG4gIC52ZXJzaW9uKENVUlJFTlRfVkVSU0lPTilcbiAgLmVuYWJsZVBvc2l0aW9uYWxPcHRpb25zKCk7XG5cbi8vIEdsb2JhbCBvcHRpb25zXG5wcm9ncmFtXG4gIC5vcHRpb24oJy0tanNvbicsICdPdXRwdXQgcmVzdWx0cyBhcyBKU09OJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdNaW5pbWFsIG91dHB1dCAoSURzL25hbWVzIG9ubHkpJylcbiAgLm9wdGlvbignLS1uby1jb2xvcicsICdEaXNhYmxlIGNvbG9yZWQgb3V0cHV0Jyk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFVwZGF0ZSBDb21tYW5kXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwZGF0ZScpXG4gIC5kZXNjcmlwdGlvbignVXBkYXRlIHRoZSBDTEkgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uJylcbiAgLm9wdGlvbignLS1jaGVjaycsICdPbmx5IGNoZWNrIGZvciB1cGRhdGVzLCBkbyBub3QgaW5zdGFsbCcpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICBpZiAob3B0aW9ucy5jaGVjaykge1xuICAgICAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnQ2hlY2tpbmcgZm9yIHVwZGF0ZXMuLi4nKS5zdGFydCgpO1xuICAgICAgY29uc3QgbGF0ZXN0VmVyc2lvbiA9IGF3YWl0IGZldGNoTGF0ZXN0VmVyc2lvbigpO1xuXG4gICAgICBpZiAoIWxhdGVzdFZlcnNpb24pIHtcbiAgICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgY2hlY2sgZm9yIHVwZGF0ZXMnKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNOZXdlclZlcnNpb24obGF0ZXN0VmVyc2lvbiwgQ1VSUkVOVF9WRVJTSU9OKSkge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoYFVwZGF0ZSBhdmFpbGFibGU6ICR7Q1VSUkVOVF9WRVJTSU9OfSDihpIgJHtsYXRlc3RWZXJzaW9ufWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgXFxuUnVuIFxceDFiWzM2bWx3cCB1cGRhdGVcXHgxYlswbSB0byBpbnN0YWxsYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoYFlvdSdyZSBvbiB0aGUgbGF0ZXN0IHZlcnNpb24gKCR7Q1VSUkVOVF9WRVJTSU9OfSlgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzcGlubmVyID0gb3JhKCdVcGRhdGluZyBDTEkuLi4nKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFJ1biBucG0gdXBkYXRlXG4gICAgICBleGVjU3luYyhgbnBtIHVwZGF0ZSAtZyAke1BBQ0tBR0VfTkFNRX1gLCB7IHN0ZGlvOiAncGlwZScgfSk7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ0NMSSB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpO1xuXG4gICAgICAvLyBDaGVjayBuZXcgdmVyc2lvblxuICAgICAgY29uc3QgbmV3VmVyc2lvbiA9IGF3YWl0IGZldGNoTGF0ZXN0VmVyc2lvbigpO1xuICAgICAgaWYgKG5ld1ZlcnNpb24pIHtcbiAgICAgICAgY29uc29sZS5sb2coYFxcblVwZGF0ZWQgdG8gdmVyc2lvbiAke25ld1ZlcnNpb259YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgc3Bpbm5lci5mYWlsKCdVcGRhdGUgZmFpbGVkJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKCdUcnkgcnVubmluZzogbnBtIHVwZGF0ZSAtZyAnICsgUEFDS0FHRV9OQU1FKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2l0ZXMgQ29tbWFuZHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3Qgc2l0ZXMgPSBwcm9ncmFtLmNvbW1hbmQoJ3NpdGVzJykuZGVzY3JpcHRpb24oJ01hbmFnZSBXb3JkUHJlc3Mgc2l0ZXMnKTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgYWxsIFdvcmRQcmVzcyBzaXRlcycpXG4gIC5vcHRpb24oJy0tc3RhdHVzIDxzdGF0dXM+JywgJ0ZpbHRlciBieSBzdGF0dXMgKHJ1bm5pbmd8c3RvcHBlZHxhbGwpJywgJ2FsbCcpXG4gIC5hY3Rpb24oYXN5bmMgKGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IHNpdGVzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZG9tYWluOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nOyBwYXRoOiBzdHJpbmcgfT4gfT4oYFxuICAgICAgICBxdWVyeSB7XG4gICAgICAgICAgc2l0ZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgIGRvbWFpblxuICAgICAgICAgICAgc3RhdHVzXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgbGV0IHNpdGVzVG9TaG93ID0gZGF0YS5zaXRlcy5tYXAoKHMpID0+ICh7XG4gICAgICAgIGlkOiBzLmlkLFxuICAgICAgICBuYW1lOiBzLm5hbWUsXG4gICAgICAgIGRvbWFpbjogcy5kb21haW4sXG4gICAgICAgIHN0YXR1czogcy5zdGF0dXMudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgcGF0aDogcy5wYXRoLFxuICAgICAgfSkpO1xuXG4gICAgICAvLyBGaWx0ZXIgYnkgc3RhdHVzIGlmIHNwZWNpZmllZFxuICAgICAgaWYgKGNtZE9wdGlvbnMuc3RhdHVzICE9PSAnYWxsJykge1xuICAgICAgICBzaXRlc1RvU2hvdyA9IHNpdGVzVG9TaG93LmZpbHRlcigocykgPT4gcy5zdGF0dXMgPT09IGNtZE9wdGlvbnMuc3RhdHVzKTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coZm9ybWF0U2l0ZUxpc3Qoc2l0ZXNUb1Nob3csIGZvcm1hdCwgeyBub0NvbG9yOiBnbG9iYWxPcHRzLm5vQ29sb3IgfSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdnZXQgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdHZXQgZGV0YWlsZWQgaW5mbyBhYm91dCBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgLy8gRmlyc3QgZmluZCB0aGUgc2l0ZSBieSBuYW1lIG9yIElEXG4gICAgICBjb25zdCBzaXRlc0RhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBzaXRlczogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfT4gfT4oYFxuICAgICAgICBxdWVyeSB7IHNpdGVzIHsgaWQgbmFtZSB9IH1cbiAgICAgIGApO1xuXG4gICAgICBjb25zdCBmb3VuZFNpdGUgPSBzaXRlc0RhdGEuc2l0ZXMuZmluZChcbiAgICAgICAgKHMpID0+IHMuaWQgPT09IHNpdGUgfHwgcy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2l0ZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcblxuICAgICAgaWYgKCFmb3VuZFNpdGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihgU2l0ZSBub3QgZm91bmQ6IFwiJHtzaXRlfVwiYCkpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBzaXRlOiBhbnkgfT4oYFxuICAgICAgICBxdWVyeSgkaWQ6IElEISkge1xuICAgICAgICAgIHNpdGUoaWQ6ICRpZCkge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgIGRvbWFpblxuICAgICAgICAgICAgc3RhdHVzXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGhvc3RcbiAgICAgICAgICAgIGh0dHBQb3J0XG4gICAgICAgICAgICB4ZGVidWdFbmFibGVkXG4gICAgICAgICAgICBzZXJ2aWNlcyB7XG4gICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgdmVyc2lvblxuICAgICAgICAgICAgICByb2xlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBob3N0Q29ubmVjdGlvbnMge1xuICAgICAgICAgICAgICBob3N0SWRcbiAgICAgICAgICAgICAgcmVtb3RlU2l0ZUlkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlkOiBmb3VuZFNpdGUuaWQgfSk7XG5cbiAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFNpdGVEZXRhaWwoZGF0YS5zaXRlLCBmb3JtYXQsIHsgbm9Db2xvcjogZ2xvYmFsT3B0cy5ub0NvbG9yIH0pKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnc3RhcnQgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdTdGFydCBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdTdGFydGluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgU3RhcnRlZCBcIiR7c2l0ZX1cImAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICByZXR1cm4gZ3FsLm11dGF0ZShgbXV0YXRpb24oJGlkOiBJRCEpIHsgc3RhcnRTaXRlKGlkOiAkaWQpIHsgaWQgc3RhdHVzIH0gfWAsIHsgaWQ6IHNpdGVJZCB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdzdG9wIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignU3RvcCBhIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdTdG9wcGluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgU3RvcHBlZCBcIiR7c2l0ZX1cImAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICByZXR1cm4gZ3FsLm11dGF0ZShgbXV0YXRpb24oJGlkOiBJRCEpIHsgc3RvcFNpdGUoaWQ6ICRpZCkgeyBpZCBzdGF0dXMgfSB9YCwgeyBpZDogc2l0ZUlkIH0pO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3Jlc3RhcnQgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdSZXN0YXJ0IGEgc2l0ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogJ1Jlc3RhcnRpbmcnLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gYFJlc3RhcnRlZCBcIiR7c2l0ZX1cImAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICByZXR1cm4gZ3FsLm11dGF0ZShgbXV0YXRpb24oJGlkOiBJRCEpIHsgcmVzdGFydFNpdGUoaWQ6ICRpZCkgeyBpZCBzdGF0dXMgfSB9YCwgeyBpZDogc2l0ZUlkIH0pO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ29wZW4gPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdPcGVuIHNpdGUgaW4gYnJvd3NlcicpXG4gIC5vcHRpb24oJy0tYWRtaW4nLCAnT3BlbiBXUCBBZG1pbiBpbnN0ZWFkIG9mIGZyb250ZW5kJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnT3BlbmluZycsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgT3BlbmVkIFwiJHtzaXRlfVwiYCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIHJldHVybiBncWwubXV0YXRlKGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBPcGVuU2l0ZUlucHV0ISkge1xuICAgICAgICAgIG9wZW5TaXRlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgc2l0ZUlkLCBvcGVuQWRtaW46IGNtZE9wdGlvbnMuYWRtaW4gfHwgZmFsc2UgfSB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdjcmVhdGUgPG5hbWU+JylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBuZXcgV29yZFByZXNzIHNpdGUnKVxuICAub3B0aW9uKCctLXBocCA8dmVyc2lvbj4nLCAnUEhQIHZlcnNpb24gKGUuZy4sIDguMi4xMCknKVxuICAub3B0aW9uKCctLXdlYiA8c2VydmVyPicsICdXZWIgc2VydmVyIChuZ2lueHxhcGFjaGUpJylcbiAgLm9wdGlvbignLS1kYiA8ZGF0YWJhc2U+JywgJ0RhdGFiYXNlIChteXNxbHxtYXJpYWRiKScpXG4gIC5vcHRpb24oJy0tYmx1ZXByaW50IDxuYW1lPicsICdVc2UgYSBibHVlcHJpbnQnKVxuICAub3B0aW9uKCctLXdwLXVzZXIgPHVzZXJuYW1lPicsICdXb3JkUHJlc3MgYWRtaW4gdXNlcm5hbWUnLCAnYWRtaW4nKVxuICAub3B0aW9uKCctLXdwLWVtYWlsIDxlbWFpbD4nLCAnV29yZFByZXNzIGFkbWluIGVtYWlsJylcbiAgLmFjdGlvbihhc3luYyAobmFtZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwaW5uZXIgPSBnbG9iYWxPcHRzLnF1aWV0ID8gbnVsbCA6IG9yYShgQ3JlYXRpbmcgXCIke25hbWV9XCIuLi5gKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcblxuICAgICAgY29uc3QgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBuYW1lIH07XG4gICAgICBpZiAoY21kT3B0aW9ucy5waHApIGlucHV0LnBocFZlcnNpb24gPSBjbWRPcHRpb25zLnBocDtcbiAgICAgIGlmIChjbWRPcHRpb25zLndlYikgaW5wdXQud2ViU2VydmVyID0gY21kT3B0aW9ucy53ZWI7XG4gICAgICBpZiAoY21kT3B0aW9ucy5kYikgaW5wdXQuZGF0YWJhc2UgPSBjbWRPcHRpb25zLmRiO1xuICAgICAgaWYgKGNtZE9wdGlvbnMuYmx1ZXByaW50KSBpbnB1dC5ibHVlcHJpbnQgPSBjbWRPcHRpb25zLmJsdWVwcmludDtcbiAgICAgIGlmIChjbWRPcHRpb25zLndwVXNlcikgaW5wdXQud3BBZG1pblVzZXJuYW1lID0gY21kT3B0aW9ucy53cFVzZXI7XG4gICAgICBpZiAoY21kT3B0aW9ucy53cEVtYWlsKSBpbnB1dC53cEFkbWluRW1haWwgPSBjbWRPcHRpb25zLndwRW1haWw7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgY3JlYXRlU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBzaXRlSWQ6IHN0cmluZzsgc2l0ZU5hbWU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogQ3JlYXRlU2l0ZUlucHV0ISkge1xuICAgICAgICAgIGNyZWF0ZVNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIHNpdGVJZCBzaXRlTmFtZSBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQgfSk7XG5cbiAgICAgIGlmICghZGF0YS5jcmVhdGVTaXRlLnN1Y2Nlc3MpIHtcbiAgICAgICAgc3Bpbm5lcj8uZmFpbCgnQ3JlYXRlIGZhaWxlZCcpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEuY3JlYXRlU2l0ZS5lcnJvciB8fCAnRmFpbGVkIHRvIGNyZWF0ZSBzaXRlJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgICAgIHNwaW5uZXI/LnN1Y2NlZWQoYENyZWF0ZWQgXCIke2RhdGEuY3JlYXRlU2l0ZS5zaXRlTmFtZX1cIiAoJHtkYXRhLmNyZWF0ZVNpdGUuc2l0ZUlkfSlgKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBzcGlubmVyPy5mYWlsKCdDcmVhdGUgZmFpbGVkJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnZGVsZXRlIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignRGVsZXRlIGEgc2l0ZScpXG4gIC5vcHRpb24oJy15LCAtLXllcycsICdTa2lwIGNvbmZpcm1hdGlvbicpXG4gIC5vcHRpb24oJy0ta2VlcC1maWxlcycsICdLZWVwIHNpdGUgZmlsZXMgKG9ubHkgcmVtb3ZlIGZyb20gTG9jYWwpJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnRGVsZXRpbmcnLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gYERlbGV0ZWQgXCIke3NpdGV9XCJgIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBkZWxldGVTaXRlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IERlbGV0ZVNpdGVJbnB1dCEpIHtcbiAgICAgICAgICBkZWxldGVTaXRlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgaWQ6IHNpdGVJZCwgdHJhc2hGaWxlczogIWNtZE9wdGlvbnMua2VlcEZpbGVzIH0gfSk7XG4gICAgICBpZiAoIWRhdGEuZGVsZXRlU2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmRlbGV0ZVNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBkZWxldGUgc2l0ZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnY2xvbmUgPHNpdGU+IDxuZXdOYW1lPicpXG4gIC5kZXNjcmlwdGlvbignQ2xvbmUgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgbmV3TmFtZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiBgQ2xvbmluZ2AsIHN1Y2Nlc3NNZXNzYWdlOiAoZGF0YTogeyBjbG9uZVNpdGU6IHsgbmV3U2l0ZU5hbWU6IHN0cmluZzsgbmV3U2l0ZUlkOiBzdHJpbmcgfSB9KSA9PiBgQ2xvbmVkIHRvIFwiJHtkYXRhLmNsb25lU2l0ZS5uZXdTaXRlTmFtZX1cIiAoJHtkYXRhLmNsb25lU2l0ZS5uZXdTaXRlSWR9KWAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IGNsb25lU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBuZXdTaXRlSWQ6IHN0cmluZzsgbmV3U2l0ZU5hbWU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogQ2xvbmVTaXRlSW5wdXQhKSB7XG4gICAgICAgICAgY2xvbmVTaXRlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBuZXdTaXRlSWQgbmV3U2l0ZU5hbWUgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgbmV3TmFtZSB9IH0pO1xuICAgICAgaWYgKCFkYXRhLmNsb25lU2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmNsb25lU2l0ZS5lcnJvciB8fCAnRmFpbGVkIHRvIGNsb25lIHNpdGUnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ2V4cG9ydCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ0V4cG9ydCBzaXRlIHRvIHppcCBmaWxlJylcbiAgLm9wdGlvbignLW8sIC0tb3V0cHV0IDxwYXRoPicsICdPdXRwdXQgZmlsZSBwYXRoJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnRXhwb3J0aW5nJywgc3VjY2Vzc01lc3NhZ2U6IChkYXRhOiB7IGV4cG9ydFNpdGU6IHsgb3V0cHV0UGF0aDogc3RyaW5nIH0gfSkgPT4gYEV4cG9ydGVkIHRvICR7ZGF0YS5leHBvcnRTaXRlLm91dHB1dFBhdGh9YCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgZXhwb3J0U2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBvdXRwdXRQYXRoOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IEV4cG9ydFNpdGVJbnB1dCEpIHtcbiAgICAgICAgICBleHBvcnRTaXRlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBvdXRwdXRQYXRoIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBpbnB1dDogeyBzaXRlSWQsIG91dHB1dFBhdGg6IGNtZE9wdGlvbnMub3V0cHV0IH0gfSk7XG4gICAgICBpZiAoIWRhdGEuZXhwb3J0U2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmV4cG9ydFNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBleHBvcnQgc2l0ZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG5zaXRlc1xuICAuY29tbWFuZCgnaW1wb3J0IDx6aXBGaWxlPicpXG4gIC5kZXNjcmlwdGlvbignSW1wb3J0IHNpdGUgZnJvbSB6aXAgZmlsZScpXG4gIC5vcHRpb24oJy1uLCAtLW5hbWUgPG5hbWU+JywgJ1NpdGUgbmFtZSAoZGVmYXVsdHMgdG8gemlwIGZpbGVuYW1lKScpXG4gIC5hY3Rpb24oYXN5bmMgKHppcEZpbGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBzcGlubmVyID0gZ2xvYmFsT3B0cy5xdWlldCA/IG51bGwgOiBvcmEoYEltcG9ydGluZyBzaXRlLi4uYCkuc3RhcnQoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgaW1wb3J0U2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBzaXRlSWQ6IHN0cmluZzsgc2l0ZU5hbWU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogSW1wb3J0U2l0ZUlucHV0ISkge1xuICAgICAgICAgIGltcG9ydFNpdGUoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIHNpdGVJZCBzaXRlTmFtZSBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgemlwUGF0aDogemlwRmlsZSwgc2l0ZU5hbWU6IGNtZE9wdGlvbnMubmFtZSB9IH0pO1xuXG4gICAgICBpZiAoIWRhdGEuaW1wb3J0U2l0ZS5zdWNjZXNzKSB7XG4gICAgICAgIHNwaW5uZXI/LmZhaWwoJ0ltcG9ydCBmYWlsZWQnKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmltcG9ydFNpdGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBpbXBvcnQgc2l0ZScpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBzcGlubmVyPy5zdWNjZWVkKGBJbXBvcnRlZCBcIiR7ZGF0YS5pbXBvcnRTaXRlLnNpdGVOYW1lfVwiICgke2RhdGEuaW1wb3J0U2l0ZS5zaXRlSWR9KWApO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHNwaW5uZXI/LmZhaWwoJ0ltcG9ydCBmYWlsZWQnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdyZW5hbWUgPHNpdGU+IDxuZXdOYW1lPicpXG4gIC5kZXNjcmlwdGlvbignUmVuYW1lIGEgc2l0ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIG5ld05hbWUpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogJ1JlbmFtaW5nJywgc3VjY2Vzc01lc3NhZ2U6ICgpID0+IGBSZW5hbWVkIHRvIFwiJHtuZXdOYW1lfVwiYCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgbWNwUmVuYW1lU2l0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBNY3BSZW5hbWVTaXRlSW5wdXQhKSB7XG4gICAgICAgICAgbWNwUmVuYW1lU2l0ZShpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgbmV3TmFtZSB9IH0pO1xuICAgICAgaWYgKCFkYXRhLm1jcFJlbmFtZVNpdGUuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5tY3BSZW5hbWVTaXRlLmVycm9yIHx8ICdGYWlsZWQgdG8gcmVuYW1lIHNpdGUnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3NzbCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1RydXN0IFNTTCBjZXJ0aWZpY2F0ZSBmb3IgYSBzaXRlJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSkgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnVHJ1c3RpbmcgU1NMIGZvcicsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgU1NMIGNlcnRpZmljYXRlIHRydXN0ZWQgZm9yIFwiJHtzaXRlfVwiYCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgdHJ1c3RTc2w6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogVHJ1c3RTc2xJbnB1dCEpIHtcbiAgICAgICAgICB0cnVzdFNzbChpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCB9IH0pO1xuICAgICAgaWYgKCFkYXRhLnRydXN0U3NsLnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEudHJ1c3RTc2wuZXJyb3IgfHwgJ0ZhaWxlZCB0byB0cnVzdCBTU0wnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuc2l0ZXNcbiAgLmNvbW1hbmQoJ3BocCA8c2l0ZT4gPHZlcnNpb24+JylcbiAgLmRlc2NyaXB0aW9uKCdDaGFuZ2UgUEhQIHZlcnNpb24gZm9yIGEgc2l0ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIHZlcnNpb24pID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogYENoYW5naW5nIFBIUCB0byAke3ZlcnNpb259IGZvcmAsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiBgUEhQIHZlcnNpb24gY2hhbmdlZCB0byAke3ZlcnNpb259YCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgY2hhbmdlUGhwVmVyc2lvbjogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBDaGFuZ2VQaHBWZXJzaW9uSW5wdXQhKSB7XG4gICAgICAgICAgY2hhbmdlUGhwVmVyc2lvbihpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgcGhwVmVyc2lvbjogdmVyc2lvbiB9IH0pO1xuICAgICAgaWYgKCFkYXRhLmNoYW5nZVBocFZlcnNpb24uc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5jaGFuZ2VQaHBWZXJzaW9uLmVycm9yIHx8ICdGYWlsZWQgdG8gY2hhbmdlIFBIUCB2ZXJzaW9uJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCd4ZGVidWcgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdUb2dnbGUgWGRlYnVnIGZvciBhIHNpdGUnKVxuICAub3B0aW9uKCctLW9uJywgJ0VuYWJsZSBYZGVidWcnKVxuICAub3B0aW9uKCctLW9mZicsICdEaXNhYmxlIFhkZWJ1ZycpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBlbmFibGVkID0gY21kT3B0aW9ucy5vbiA/IHRydWUgOiBjbWRPcHRpb25zLm9mZiA/IGZhbHNlIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFjdGlvbiA9IGVuYWJsZWQgPT09IHVuZGVmaW5lZCA/ICdUb2dnbGluZycgOiBlbmFibGVkID8gJ0VuYWJsaW5nJyA6ICdEaXNhYmxpbmcnO1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiBgJHthY3Rpb259IFhkZWJ1ZyBmb3JgLCBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgdG9nZ2xlWGRlYnVnOiB7IGVuYWJsZWQ6IGJvb2xlYW4gfSB9KSA9PiBgWGRlYnVnICR7ZGF0YS50b2dnbGVYZGVidWcuZW5hYmxlZCA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCd9YCB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIC8vIElmIG5vIGZsYWcgc3BlY2lmaWVkLCBnZXQgY3VycmVudCBzdGF0ZSBhbmQgdG9nZ2xlXG4gICAgICBsZXQgdGFyZ2V0RW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgICBpZiAodGFyZ2V0RW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHNpdGVEYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgc2l0ZTogeyB4ZGVidWdFbmFibGVkOiBib29sZWFuIH0gfT4oYFxuICAgICAgICAgIHF1ZXJ5KCRpZDogSUQhKSB7IHNpdGUoaWQ6ICRpZCkgeyB4ZGVidWdFbmFibGVkIH0gfVxuICAgICAgICBgLCB7IGlkOiBzaXRlSWQgfSk7XG4gICAgICAgIHRhcmdldEVuYWJsZWQgPSAhc2l0ZURhdGEuc2l0ZS54ZGVidWdFbmFibGVkO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyB0b2dnbGVYZGVidWc6IHsgc3VjY2VzczogYm9vbGVhbjsgZW5hYmxlZDogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogVG9nZ2xlWGRlYnVnSW5wdXQhKSB7XG4gICAgICAgICAgdG9nZ2xlWGRlYnVnKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlbmFibGVkIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBpbnB1dDogeyBzaXRlSWQsIGVuYWJsZWQ6IHRhcmdldEVuYWJsZWQgfSB9KTtcbiAgICAgIGlmICghZGF0YS50b2dnbGVYZGVidWcuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS50b2dnbGVYZGVidWcuZXJyb3IgfHwgJ0ZhaWxlZCB0byB0b2dnbGUgWGRlYnVnJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbnNpdGVzXG4gIC5jb21tYW5kKCdsb2dzIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignR2V0IHNpdGUgbG9ncycpXG4gIC5vcHRpb24oJy10LCAtLXR5cGUgPHR5cGU+JywgJ0xvZyB0eXBlIChwaHB8bmdpbnh8bXlzcWwpJywgJ3BocCcpXG4gIC5vcHRpb24oJy1uLCAtLWxpbmVzIDxuPicsICdOdW1iZXIgb2YgbGluZXMnLCAnNTAnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcbiAgICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBnZXRTaXRlTG9nczogeyBzdWNjZXNzOiBib29sZWFuOyBsb2dzOiBzdHJpbmdbXTsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogR2V0U2l0ZUxvZ3NJbnB1dCEpIHtcbiAgICAgICAgICBnZXRTaXRlTG9ncyhpbnB1dDogJGlucHV0KSB7IHN1Y2Nlc3MgbG9ncyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgc2l0ZUlkLCBsb2dUeXBlOiBjbWRPcHRpb25zLnR5cGUsIGxpbmVzOiBwYXJzZUludChjbWRPcHRpb25zLmxpbmVzLCAxMCkgfSB9KTtcblxuICAgICAgaWYgKCFkYXRhLmdldFNpdGVMb2dzLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmdldFNpdGVMb2dzLmVycm9yIHx8ICdGYWlsZWQgdG8gZ2V0IGxvZ3MnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEuZ2V0U2l0ZUxvZ3MubG9ncywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmdldFNpdGVMb2dzLmxvZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyBsb2dzIGZvdW5kLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5nZXRTaXRlTG9ncy5sb2dzLmZvckVhY2goKGxpbmUpID0+IGNvbnNvbGUubG9nKGxpbmUpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBXUC1DTEkgQ29tbWFuZFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCd3cCA8c2l0ZT4gW2FyZ3MuLi5dJylcbiAgLmRlc2NyaXB0aW9uKCdSdW4gV1AtQ0xJIGNvbW1hbmRzIGFnYWluc3QgYSBzaXRlJylcbiAgLmFsbG93VW5rbm93bk9wdGlvbigpXG4gIC5wYXNzVGhyb3VnaE9wdGlvbnMoKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBhcmdzKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuICAgICAgY29uc3Qgc2l0ZUlkID0gYXdhaXQgZmluZFNpdGVJZChncWwsIHNpdGUpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IHdwQ2xpOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IG91dHB1dDogc3RyaW5nOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBXcENsaUlucHV0ISkge1xuICAgICAgICAgIHdwQ2xpKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBvdXRwdXQgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgYXJncyB9IH0pO1xuXG4gICAgICBpZiAoIWRhdGEud3BDbGkuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEud3BDbGkuZXJyb3IgfHwgJ1dQLUNMSSBjb21tYW5kIGZhaWxlZCcpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhkYXRhLndwQ2xpLm91dHB1dCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSW5mbyBDb21tYW5kXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2luZm8nKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgTG9jYWwgYXBwbGljYXRpb24gaW5mbycpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIC8vIEdldCBzaXRlcyBjb3VudCBhbmQgYmFzaWMgaW5mb1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IHNpdGVzOiBBcnJheTx7IGlkOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nIH0+IH0+KGBcbiAgICAgICAgcXVlcnkgeyBzaXRlcyB7IGlkIHN0YXR1cyB9IH1cbiAgICAgIGApO1xuXG4gICAgICBjb25zdCBydW5uaW5nID0gZGF0YS5zaXRlcy5maWx0ZXIoKHMpID0+IHMuc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdydW5uaW5nJykubGVuZ3RoO1xuICAgICAgY29uc3Qgc3RvcHBlZCA9IGRhdGEuc2l0ZXMuZmlsdGVyKChzKSA9PiBzLnN0YXR1cy50b0xvd2VyQ2FzZSgpICE9PSAncnVubmluZycpLmxlbmd0aDtcblxuICAgICAgY29uc3QgaW5mbyA9IHtcbiAgICAgICAgdG90YWxTaXRlczogZGF0YS5zaXRlcy5sZW5ndGgsXG4gICAgICAgIHJ1bm5pbmdTaXRlczogcnVubmluZyxcbiAgICAgICAgc3RvcHBlZFNpdGVzOiBzdG9wcGVkLFxuICAgICAgICBncmFwaHFsRW5kcG9pbnQ6IGNsaWVudD8uWyd1cmwnXSB8fCAnY29ubmVjdGVkJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFNpdGVEZXRhaWwoaW5mbywgZm9ybWF0LCB7IG5vQ29sb3I6IGdsb2JhbE9wdHMubm9Db2xvciB9KSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2VydmljZXMgQ29tbWFuZFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdzZXJ2aWNlcycpXG4gIC5kZXNjcmlwdGlvbignTGlzdCBhdmFpbGFibGUgc2VydmljZSB2ZXJzaW9ucycpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBsaXN0U2VydmljZXM6IHsgc3VjY2VzczogYm9vbGVhbjsgc2VydmljZXM6IEFycmF5PHsgcm9sZTogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9PjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIHF1ZXJ5IHtcbiAgICAgICAgICBsaXN0U2VydmljZXMge1xuICAgICAgICAgICAgc3VjY2Vzc1xuICAgICAgICAgICAgc2VydmljZXMgeyByb2xlIG5hbWUgdmVyc2lvbiB9XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmICghZGF0YS5saXN0U2VydmljZXMuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEubGlzdFNlcnZpY2VzLmVycm9yIHx8ICdGYWlsZWQgdG8gbGlzdCBzZXJ2aWNlcycpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5saXN0U2VydmljZXMuc2VydmljZXMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGdyb3VwZWQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHN2YyBvZiBkYXRhLmxpc3RTZXJ2aWNlcy5zZXJ2aWNlcykge1xuICAgICAgICAgIGlmICghZ3JvdXBlZFtzdmMucm9sZV0pIGdyb3VwZWRbc3ZjLnJvbGVdID0gW107XG4gICAgICAgICAgZ3JvdXBlZFtzdmMucm9sZV0ucHVzaChgJHtzdmMudmVyc2lvbn0gKCR7c3ZjLm5hbWV9KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBbcm9sZSwgdmVyc2lvbnNdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwZWQpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFxcbiR7cm9sZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHJvbGUuc2xpY2UoMSl9IFZlcnNpb25zOmApO1xuICAgICAgICAgIHZlcnNpb25zLmZvckVhY2goKHYpID0+IGNvbnNvbGUubG9nKGAgIC0gJHt2fWApKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEJsdWVwcmludHMgQ29tbWFuZFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBibHVlcHJpbnRzID0gcHJvZ3JhbS5jb21tYW5kKCdibHVlcHJpbnRzJykuZGVzY3JpcHRpb24oJ01hbmFnZSBibHVlcHJpbnRzJyk7XG5cbmJsdWVwcmludHNcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgYXZhaWxhYmxlIGJsdWVwcmludHMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgYmx1ZXByaW50czogeyBzdWNjZXNzOiBib29sZWFuOyBibHVlcHJpbnRzOiBBcnJheTx7IG5hbWU6IHN0cmluZyB9PjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIHF1ZXJ5IHtcbiAgICAgICAgICBibHVlcHJpbnRzIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NcbiAgICAgICAgICAgIGJsdWVwcmludHMgeyBuYW1lIH1cbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgaWYgKCFkYXRhLmJsdWVwcmludHMuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEuYmx1ZXByaW50cy5lcnJvciB8fCAnRmFpbGVkIHRvIGxpc3QgYmx1ZXByaW50cycpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5ibHVlcHJpbnRzLmJsdWVwcmludHMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5ibHVlcHJpbnRzLmJsdWVwcmludHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyBibHVlcHJpbnRzIGZvdW5kLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0JsdWVwcmludHM6Jyk7XG4gICAgICAgIGRhdGEuYmx1ZXByaW50cy5ibHVlcHJpbnRzLmZvckVhY2goKGIpID0+IGNvbnNvbGUubG9nKGAgIC0gJHtiLm5hbWV9YCkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbmJsdWVwcmludHNcbiAgLmNvbW1hbmQoJ3NhdmUgPHNpdGU+IDxuYW1lPicpXG4gIC5kZXNjcmlwdGlvbignU2F2ZSBhIHNpdGUgYXMgYSBibHVlcHJpbnQnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBuYW1lKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdTYXZpbmcgYmx1ZXByaW50IGZyb20nLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gYFNhdmVkIGJsdWVwcmludCBcIiR7bmFtZX1cImAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IHNhdmVCbHVlcHJpbnQ6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRpbnB1dDogU2F2ZUJsdWVwcmludElucHV0ISkge1xuICAgICAgICAgIHNhdmVCbHVlcHJpbnQoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBpbnB1dDogeyBzaXRlSWQsIG5hbWUgfSB9KTtcbiAgICAgIGlmICghZGF0YS5zYXZlQmx1ZXByaW50LnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEuc2F2ZUJsdWVwcmludC5lcnJvciB8fCAnRmFpbGVkIHRvIHNhdmUgYmx1ZXByaW50Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERhdGFiYXNlIENvbW1hbmRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IGRiID0gcHJvZ3JhbS5jb21tYW5kKCdkYicpLmRlc2NyaXB0aW9uKCdEYXRhYmFzZSBvcGVyYXRpb25zJyk7XG5cbmRiXG4gIC5jb21tYW5kKCdleHBvcnQgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdFeHBvcnQgZGF0YWJhc2UgdG8gU1FMIGZpbGUnKVxuICAub3B0aW9uKCctbywgLS1vdXRwdXQgPHBhdGg+JywgJ091dHB1dCBmaWxlIHBhdGgnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdFeHBvcnRpbmcgZGF0YWJhc2UgZm9yJywgc3VjY2Vzc01lc3NhZ2U6IChkYXRhOiB7IGV4cG9ydERhdGFiYXNlOiB7IG91dHB1dFBhdGg6IHN0cmluZyB9IH0pID0+IGBFeHBvcnRlZCB0byAke2RhdGEuZXhwb3J0RGF0YWJhc2Uub3V0cHV0UGF0aH1gIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBleHBvcnREYXRhYmFzZTogeyBzdWNjZXNzOiBib29sZWFuOyBvdXRwdXRQYXRoOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkaW5wdXQ6IEV4cG9ydERhdGFiYXNlSW5wdXQhKSB7XG4gICAgICAgICAgZXhwb3J0RGF0YWJhc2UoaW5wdXQ6ICRpbnB1dCkgeyBzdWNjZXNzIG91dHB1dFBhdGggZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGlucHV0OiB7IHNpdGVJZCwgb3V0cHV0UGF0aDogY21kT3B0aW9ucy5vdXRwdXQgfSB9KTtcbiAgICAgIGlmICghZGF0YS5leHBvcnREYXRhYmFzZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmV4cG9ydERhdGFiYXNlLmVycm9yIHx8ICdGYWlsZWQgdG8gZXhwb3J0IGRhdGFiYXNlJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbmRiXG4gIC5jb21tYW5kKCdpbXBvcnQgPHNpdGU+IDxzcWxGaWxlPicpXG4gIC5kZXNjcmlwdGlvbignSW1wb3J0IFNRTCBmaWxlIGludG8gZGF0YWJhc2UnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBzcWxGaWxlKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdJbXBvcnRpbmcgZGF0YWJhc2UgZm9yJywgc3VjY2Vzc01lc3NhZ2U6ICgpID0+ICdEYXRhYmFzZSBpbXBvcnRlZCBzdWNjZXNzZnVsbHknIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBpbXBvcnREYXRhYmFzZTogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBJbXBvcnREYXRhYmFzZUlucHV0ISkge1xuICAgICAgICAgIGltcG9ydERhdGFiYXNlKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgc2l0ZUlkLCBzcWxQYXRoOiBzcWxGaWxlIH0gfSk7XG4gICAgICBpZiAoIWRhdGEuaW1wb3J0RGF0YWJhc2Uuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5pbXBvcnREYXRhYmFzZS5lcnJvciB8fCAnRmFpbGVkIHRvIGltcG9ydCBkYXRhYmFzZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG5kYlxuICAuY29tbWFuZCgnYWRtaW5lciA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ09wZW4gQWRtaW5lciBkYXRhYmFzZSBVSScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogJ09wZW5pbmcgQWRtaW5lciBmb3InLCBzdWNjZXNzTWVzc2FnZTogKCkgPT4gJ09wZW5lZCBBZG1pbmVyJyB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIHJldHVybiBncWwubXV0YXRlKGBcbiAgICAgICAgbXV0YXRpb24oJGlucHV0OiBPcGVuQWRtaW5lcklucHV0ISkge1xuICAgICAgICAgIG9wZW5BZG1pbmVyKGlucHV0OiAkaW5wdXQpIHsgc3VjY2VzcyBlcnJvciB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgaW5wdXQ6IHsgc2l0ZUlkIH0gfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBCYWNrdXBzIENvbW1hbmRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IGJhY2t1cHMgPSBwcm9ncmFtLmNvbW1hbmQoJ2JhY2t1cHMnKS5kZXNjcmlwdGlvbignQ2xvdWQgYmFja3VwIG9wZXJhdGlvbnMnKTtcblxuYmFja3Vwc1xuICAuY29tbWFuZCgnc3RhdHVzJylcbiAgLmRlc2NyaXB0aW9uKCdDaGVjayBiYWNrdXAgc2VydmljZSBhdmFpbGFiaWxpdHknKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgYmFja3VwU3RhdHVzOiB7IGF2YWlsYWJsZTogYm9vbGVhbjsgZmVhdHVyZUVuYWJsZWQ6IGJvb2xlYW47IGRyb3Bib3g6IGFueTsgZ29vZ2xlRHJpdmU6IGFueSB9IH0+KGBcbiAgICAgICAgcXVlcnkge1xuICAgICAgICAgIGJhY2t1cFN0YXR1cyB7XG4gICAgICAgICAgICBhdmFpbGFibGVcbiAgICAgICAgICAgIGZlYXR1cmVFbmFibGVkXG4gICAgICAgICAgICBkcm9wYm94IHsgYXV0aGVudGljYXRlZCBhY2NvdW50SWQgZW1haWwgfVxuICAgICAgICAgICAgZ29vZ2xlRHJpdmUgeyBhdXRoZW50aWNhdGVkIGFjY291bnRJZCBlbWFpbCB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEuYmFja3VwU3RhdHVzLCBudWxsLCAyKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBkYXRhLmJhY2t1cFN0YXR1cztcbiAgICAgICAgY29uc29sZS5sb2coYFxcbkJhY2t1cCBTdGF0dXM6YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIEF2YWlsYWJsZTogJHtzdGF0dXMuYXZhaWxhYmxlID8gJ1llcycgOiAnTm8nfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICBGZWF0dXJlIEVuYWJsZWQ6ICR7c3RhdHVzLmZlYXR1cmVFbmFibGVkID8gJ1llcycgOiAnTm8nfWApO1xuICAgICAgICBpZiAoc3RhdHVzLmRyb3Bib3gpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuICBEcm9wYm94OiAke3N0YXR1cy5kcm9wYm94LmF1dGhlbnRpY2F0ZWQgPyBgQ29ubmVjdGVkICgke3N0YXR1cy5kcm9wYm94LmVtYWlsfSlgIDogJ05vdCBjb25uZWN0ZWQnfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMuZ29vZ2xlRHJpdmUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBHb29nbGUgRHJpdmU6ICR7c3RhdHVzLmdvb2dsZURyaXZlLmF1dGhlbnRpY2F0ZWQgPyBgQ29ubmVjdGVkICgke3N0YXR1cy5nb29nbGVEcml2ZS5lbWFpbH0pYCA6ICdOb3QgY29ubmVjdGVkJ31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbmJhY2t1cHNcbiAgLmNvbW1hbmQoJ2xpc3QgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IGJhY2t1cHMgZm9yIGEgc2l0ZScpXG4gIC5vcHRpb24oJy1wLCAtLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQmFja3VwIHByb3ZpZGVyIChkcm9wYm94fGdvb2dsZURyaXZlKScsICdkcm9wYm94JylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG4gICAgICBjb25zdCBzaXRlSWQgPSBhd2FpdCBmaW5kU2l0ZUlkKGdxbCwgc2l0ZSk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBsaXN0QmFja3VwczogeyBzdWNjZXNzOiBib29sZWFuOyBiYWNrdXBzOiBBcnJheTx7IHNuYXBzaG90SWQ6IHN0cmluZzsgdGltZXN0YW1wOiBzdHJpbmc7IG5vdGU6IHN0cmluZyB9PjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIHF1ZXJ5KCRzaXRlSWQ6IElEISwgJHByb3ZpZGVyOiBTdHJpbmchKSB7XG4gICAgICAgICAgbGlzdEJhY2t1cHMoc2l0ZUlkOiAkc2l0ZUlkLCBwcm92aWRlcjogJHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBzdWNjZXNzXG4gICAgICAgICAgICBiYWNrdXBzIHsgc25hcHNob3RJZCB0aW1lc3RhbXAgbm90ZSB9XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBzaXRlSWQsIHByb3ZpZGVyOiBjbWRPcHRpb25zLnByb3ZpZGVyIH0pO1xuXG4gICAgICBpZiAoIWRhdGEubGlzdEJhY2t1cHMuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEubGlzdEJhY2t1cHMuZXJyb3IgfHwgJ0ZhaWxlZCB0byBsaXN0IGJhY2t1cHMnKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEubGlzdEJhY2t1cHMuYmFja3VwcywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmxpc3RCYWNrdXBzLmJhY2t1cHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyBiYWNrdXBzIGZvdW5kLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYFxcbkJhY2t1cHMgKCR7Y21kT3B0aW9ucy5wcm92aWRlcn0pOmApO1xuICAgICAgICBmb3IgKGNvbnN0IGJhY2t1cCBvZiBkYXRhLmxpc3RCYWNrdXBzLmJhY2t1cHMpIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoYmFja3VwLnRpbWVzdGFtcCkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAke2JhY2t1cC5zbmFwc2hvdElkfSAtICR7ZGF0ZX0ke2JhY2t1cC5ub3RlID8gYCAtICR7YmFja3VwLm5vdGV9YCA6ICcnfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuYmFja3Vwc1xuICAuY29tbWFuZCgnY3JlYXRlIDxzaXRlPicpXG4gIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgYmFja3VwJylcbiAgLm9wdGlvbignLXAsIC0tcHJvdmlkZXIgPHByb3ZpZGVyPicsICdCYWNrdXAgcHJvdmlkZXIgKGRyb3Bib3h8Z29vZ2xlRHJpdmUpJywgJ2Ryb3Bib3gnKVxuICAub3B0aW9uKCctbiwgLS1ub3RlIDxub3RlPicsICdCYWNrdXAgbm90ZScpXG4gIC5hY3Rpb24oYXN5bmMgKHNpdGUsIGNtZE9wdGlvbnMpID0+IHtcbiAgICBhd2FpdCBydW5TaXRlQ29tbWFuZChzaXRlLCB7IGFjdGlvbjogJ0NyZWF0aW5nIGJhY2t1cCBmb3InLCBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgY3JlYXRlQmFja3VwOiB7IHNuYXBzaG90SWQ6IHN0cmluZyB9IH0pID0+IGBCYWNrdXAgY3JlYXRlZDogJHtkYXRhLmNyZWF0ZUJhY2t1cC5zbmFwc2hvdElkfWAgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IGNyZWF0ZUJhY2t1cDogeyBzdWNjZXNzOiBib29sZWFuOyBzbmFwc2hvdElkOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkc2l0ZUlkOiBJRCEsICRwcm92aWRlcjogU3RyaW5nISwgJG5vdGU6IFN0cmluZykge1xuICAgICAgICAgIGNyZWF0ZUJhY2t1cChzaXRlSWQ6ICRzaXRlSWQsIHByb3ZpZGVyOiAkcHJvdmlkZXIsIG5vdGU6ICRub3RlKSB7XG4gICAgICAgICAgICBzdWNjZXNzIHNuYXBzaG90SWQgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgc2l0ZUlkLCBwcm92aWRlcjogY21kT3B0aW9ucy5wcm92aWRlciwgbm90ZTogY21kT3B0aW9ucy5ub3RlIH0pO1xuICAgICAgaWYgKCFkYXRhLmNyZWF0ZUJhY2t1cC5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmNyZWF0ZUJhY2t1cC5lcnJvciB8fCAnRmFpbGVkIHRvIGNyZWF0ZSBiYWNrdXAnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuYmFja3Vwc1xuICAuY29tbWFuZCgncmVzdG9yZSA8c2l0ZT4gPHNuYXBzaG90SWQ+JylcbiAgLmRlc2NyaXB0aW9uKCdSZXN0b3JlIGZyb20gYmFja3VwJylcbiAgLm9wdGlvbignLXAsIC0tcHJvdmlkZXIgPHByb3ZpZGVyPicsICdCYWNrdXAgcHJvdmlkZXIgKGRyb3Bib3h8Z29vZ2xlRHJpdmUpJywgJ2Ryb3Bib3gnKVxuICAub3B0aW9uKCcteSwgLS15ZXMnLCAnU2tpcCBjb25maXJtYXRpb24nKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBzbmFwc2hvdElkLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdSZXN0b3JpbmcgYmFja3VwIGZvcicsIHN1Y2Nlc3NNZXNzYWdlOiAoZGF0YTogeyByZXN0b3JlQmFja3VwOiB7IG1lc3NhZ2U6IHN0cmluZyB9IH0pID0+IGRhdGEucmVzdG9yZUJhY2t1cC5tZXNzYWdlIHx8ICdCYWNrdXAgcmVzdG9yZWQgc3VjY2Vzc2Z1bGx5JyB9LCBhc3luYyAoZ3FsLCBzaXRlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgcmVzdG9yZUJhY2t1cDogeyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkc2l0ZUlkOiBJRCEsICRwcm92aWRlcjogU3RyaW5nISwgJHNuYXBzaG90SWQ6IFN0cmluZyEsICRjb25maXJtOiBCb29sZWFuKSB7XG4gICAgICAgICAgcmVzdG9yZUJhY2t1cChzaXRlSWQ6ICRzaXRlSWQsIHByb3ZpZGVyOiAkcHJvdmlkZXIsIHNuYXBzaG90SWQ6ICRzbmFwc2hvdElkLCBjb25maXJtOiAkY29uZmlybSkge1xuICAgICAgICAgICAgc3VjY2VzcyBtZXNzYWdlIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IHNpdGVJZCwgcHJvdmlkZXI6IGNtZE9wdGlvbnMucHJvdmlkZXIsIHNuYXBzaG90SWQsIGNvbmZpcm06IGNtZE9wdGlvbnMueWVzIHx8IGZhbHNlIH0pO1xuICAgICAgaWYgKCFkYXRhLnJlc3RvcmVCYWNrdXAuc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5yZXN0b3JlQmFja3VwLmVycm9yIHx8ICdGYWlsZWQgdG8gcmVzdG9yZSBiYWNrdXAnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9KTtcblxuYmFja3Vwc1xuICAuY29tbWFuZCgnZGVsZXRlIDxzaXRlPiA8c25hcHNob3RJZD4nKVxuICAuZGVzY3JpcHRpb24oJ0RlbGV0ZSBhIGJhY2t1cCcpXG4gIC5vcHRpb24oJy1wLCAtLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQmFja3VwIHByb3ZpZGVyIChkcm9wYm94fGdvb2dsZURyaXZlKScsICdkcm9wYm94JylcbiAgLm9wdGlvbignLXksIC0teWVzJywgJ1NraXAgY29uZmlybWF0aW9uJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgc25hcHNob3RJZCwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnRGVsZXRpbmcgYmFja3VwIGZvcicsIHN1Y2Nlc3NNZXNzYWdlOiAoKSA9PiAnQmFja3VwIGRlbGV0ZWQnIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBkZWxldGVCYWNrdXA6IHsgc3VjY2VzczogYm9vbGVhbjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRzaXRlSWQ6IElEISwgJHByb3ZpZGVyOiBTdHJpbmchLCAkc25hcHNob3RJZDogU3RyaW5nISwgJGNvbmZpcm06IEJvb2xlYW4pIHtcbiAgICAgICAgICBkZWxldGVCYWNrdXAoc2l0ZUlkOiAkc2l0ZUlkLCBwcm92aWRlcjogJHByb3ZpZGVyLCBzbmFwc2hvdElkOiAkc25hcHNob3RJZCwgY29uZmlybTogJGNvbmZpcm0pIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgc2l0ZUlkLCBwcm92aWRlcjogY21kT3B0aW9ucy5wcm92aWRlciwgc25hcHNob3RJZCwgY29uZmlybTogY21kT3B0aW9ucy55ZXMgfHwgZmFsc2UgfSk7XG4gICAgICBpZiAoIWRhdGEuZGVsZXRlQmFja3VwLnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEuZGVsZXRlQmFja3VwLmVycm9yIHx8ICdGYWlsZWQgdG8gZGVsZXRlIGJhY2t1cCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG4gIH0pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBXUCBFbmdpbmUgQ29tbWFuZHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3Qgd3BlID0gcHJvZ3JhbS5jb21tYW5kKCd3cGUnKS5kZXNjcmlwdGlvbignV1AgRW5naW5lIHN5bmMgb3BlcmF0aW9ucycpO1xuXG53cGVcbiAgLmNvbW1hbmQoJ3N0YXR1cycpXG4gIC5kZXNjcmlwdGlvbignQ2hlY2sgV1AgRW5naW5lIGF1dGhlbnRpY2F0aW9uIHN0YXR1cycpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyB3cGVTdGF0dXM6IHsgYXV0aGVudGljYXRlZDogYm9vbGVhbjsgZW1haWw6IHN0cmluZzsgYWNjb3VudElkOiBzdHJpbmc7IGFjY291bnROYW1lOiBzdHJpbmcgfSB9PihgXG4gICAgICAgIHF1ZXJ5IHtcbiAgICAgICAgICB3cGVTdGF0dXMge1xuICAgICAgICAgICAgYXV0aGVudGljYXRlZFxuICAgICAgICAgICAgZW1haWxcbiAgICAgICAgICAgIGFjY291bnRJZFxuICAgICAgICAgICAgYWNjb3VudE5hbWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS53cGVTdGF0dXMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGRhdGEud3BlU3RhdHVzO1xuICAgICAgICBpZiAoc3RhdHVzLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgXFxuV1AgRW5naW5lOiBDb25uZWN0ZWRgKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBFbWFpbDogJHtzdGF0dXMuZW1haWx9YCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQWNjb3VudDogJHtzdGF0dXMuYWNjb3VudE5hbWV9ICgke3N0YXR1cy5hY2NvdW50SWR9KWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG5XUCBFbmdpbmU6IE5vdCBjb25uZWN0ZWRgKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBSdW4gJ2x3cCB3cGUgbG9naW4nIHRvIGF1dGhlbnRpY2F0ZWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxud3BlXG4gIC5jb21tYW5kKCdsb2dpbicpXG4gIC5kZXNjcmlwdGlvbignQXV0aGVudGljYXRlIHdpdGggV1AgRW5naW5lJylcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3Qgc3Bpbm5lciA9IGdsb2JhbE9wdHMucXVpZXQgPyBudWxsIDogb3JhKGBPcGVuaW5nIFdQIEVuZ2luZSBsb2dpbi4uLmApLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IHdwZUF1dGhlbnRpY2F0ZTogeyBzdWNjZXNzOiBib29sZWFuOyBlbWFpbDogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbiB7XG4gICAgICAgICAgd3BlQXV0aGVudGljYXRlIHsgc3VjY2VzcyBlbWFpbCBtZXNzYWdlIGVycm9yIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmICghZGF0YS53cGVBdXRoZW50aWNhdGUuc3VjY2Vzcykge1xuICAgICAgICBzcGlubmVyPy5mYWlsKCdBdXRoZW50aWNhdGlvbiBmYWlsZWQnKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLndwZUF1dGhlbnRpY2F0ZS5lcnJvciB8fCAnRmFpbGVkIHRvIGF1dGhlbnRpY2F0ZScpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBzcGlubmVyPy5zdWNjZWVkKGBBdXRoZW50aWNhdGVkIGFzICR7ZGF0YS53cGVBdXRoZW50aWNhdGUuZW1haWx9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgc3Bpbm5lcj8uZmFpbCgnQXV0aGVudGljYXRpb24gZmFpbGVkJyk7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ2xvZ291dCcpXG4gIC5kZXNjcmlwdGlvbignTG9nb3V0IGZyb20gV1AgRW5naW5lJylcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3Qgc3Bpbm5lciA9IGdsb2JhbE9wdHMucXVpZXQgPyBudWxsIDogb3JhKGBMb2dnaW5nIG91dC4uLmApLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLm11dGF0ZTx7IHdwZUxvZ291dDogeyBzdWNjZXNzOiBib29sZWFuOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgbXV0YXRpb24ge1xuICAgICAgICAgIHdwZUxvZ291dCB7IHN1Y2Nlc3MgZXJyb3IgfVxuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgaWYgKCFkYXRhLndwZUxvZ291dC5zdWNjZXNzKSB7XG4gICAgICAgIHNwaW5uZXI/LmZhaWwoJ0xvZ291dCBmYWlsZWQnKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLndwZUxvZ291dC5lcnJvciB8fCAnRmFpbGVkIHRvIGxvZ291dCcpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBzcGlubmVyPy5zdWNjZWVkKCdMb2dnZWQgb3V0IGZyb20gV1AgRW5naW5lJyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgc3Bpbm5lcj8uZmFpbCgnTG9nb3V0IGZhaWxlZCcpO1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihlcnJvci5tZXNzYWdlKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxud3BlXG4gIC5jb21tYW5kKCdzaXRlcycpXG4gIC5kZXNjcmlwdGlvbignTGlzdCBXUCBFbmdpbmUgc2l0ZXMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWxPcHRzID0gcHJvZ3JhbS5vcHRzKCkgYXMgRm9ybWF0dGVyT3B0aW9ucztcbiAgICBjb25zdCBmb3JtYXQgPSBnZXRPdXRwdXRGb3JtYXQoZ2xvYmFsT3B0cyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZ3FsID0gYXdhaXQgZW5zdXJlQ29ubmVjdGVkKGdsb2JhbE9wdHMpO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgbGlzdFdwZVNpdGVzOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IHNpdGVzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZW52aXJvbm1lbnQ6IHN0cmluZzsgcHJpbWFyeURvbWFpbjogc3RyaW5nIH0+OyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IH0+KGBcbiAgICAgICAgcXVlcnkge1xuICAgICAgICAgIGxpc3RXcGVTaXRlcyB7XG4gICAgICAgICAgICBzdWNjZXNzXG4gICAgICAgICAgICBzaXRlcyB7IGlkIG5hbWUgZW52aXJvbm1lbnQgcHJpbWFyeURvbWFpbiB9XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGlmICghZGF0YS5saXN0V3BlU2l0ZXMuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEubGlzdFdwZVNpdGVzLmVycm9yIHx8ICdGYWlsZWQgdG8gbGlzdCBzaXRlcycpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5saXN0V3BlU2l0ZXMuc2l0ZXMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5saXN0V3BlU2l0ZXMuc2l0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyBXUCBFbmdpbmUgc2l0ZXMgZm91bmQuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnXFxuV1AgRW5naW5lIFNpdGVzOicpO1xuICAgICAgICBmb3IgKGNvbnN0IHNpdGUgb2YgZGF0YS5saXN0V3BlU2l0ZXMuc2l0ZXMpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAke3NpdGUubmFtZX0gKCR7c2l0ZS5lbnZpcm9ubWVudH0pIC0gJHtzaXRlLnByaW1hcnlEb21haW59YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ2xpbmsgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IFdQIEVuZ2luZSBjb25uZWN0aW9uIGZvciBhIGxvY2FsIHNpdGUnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcbiAgICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IGdldFdwZUxpbms6IHsgbGlua2VkOiBib29sZWFuOyBzaXRlTmFtZTogc3RyaW5nOyBjb25uZWN0aW9uczogQXJyYXk8eyByZW1vdGVJbnN0YWxsSWQ6IHN0cmluZzsgaW5zdGFsbE5hbWU6IHN0cmluZzsgZW52aXJvbm1lbnQ6IHN0cmluZzsgcHJpbWFyeURvbWFpbjogc3RyaW5nIH0+IH0gfT4oYFxuICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEpIHtcbiAgICAgICAgICBnZXRXcGVMaW5rKHNpdGVJZDogJHNpdGVJZCkge1xuICAgICAgICAgICAgbGlua2VkXG4gICAgICAgICAgICBzaXRlTmFtZVxuICAgICAgICAgICAgY29ubmVjdGlvbnMgeyByZW1vdGVJbnN0YWxsSWQgaW5zdGFsbE5hbWUgZW52aXJvbm1lbnQgcHJpbWFyeURvbWFpbiB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IHNpdGVJZCB9KTtcblxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEuZ2V0V3BlTGluaywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGluayA9IGRhdGEuZ2V0V3BlTGluaztcbiAgICAgICAgaWYgKCFsaW5rLmxpbmtlZCB8fCBsaW5rLmNvbm5lY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG5cIiR7bGluay5zaXRlTmFtZX1cIiBpcyBub3QgbGlua2VkIHRvIFdQIEVuZ2luZWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG5cIiR7bGluay5zaXRlTmFtZX1cIiBXUCBFbmdpbmUgQ29ubmVjdGlvbnM6YCk7XG4gICAgICAgICAgZm9yIChjb25zdCBjb25uIG9mIGxpbmsuY29ubmVjdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgICR7Y29ubi5pbnN0YWxsTmFtZX0gKCR7Y29ubi5lbnZpcm9ubWVudH0pIC0gJHtjb25uLnByaW1hcnlEb21haW59YCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgIElEOiAke2Nvbm4ucmVtb3RlSW5zdGFsbElkfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgncHVzaCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1B1c2ggbG9jYWwgc2l0ZSB0byBXUCBFbmdpbmUnKVxuICAub3B0aW9uKCctciwgLS1yZW1vdGUgPGluc3RhbGxJZD4nLCAnUmVtb3RlIGluc3RhbGwgSUQnKVxuICAub3B0aW9uKCctLXNxbCcsICdJbmNsdWRlIGRhdGFiYXNlJylcbiAgLm9wdGlvbignLXksIC0teWVzJywgJ1NraXAgY29uZmlybWF0aW9uJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGF3YWl0IHJ1blNpdGVDb21tYW5kKHNpdGUsIHsgYWN0aW9uOiAnUHVzaGluZyB0byBXUCBFbmdpbmUnLCBzdWNjZXNzTWVzc2FnZTogKGRhdGE6IHsgcHVzaFRvV3BlOiB7IG1lc3NhZ2U6IHN0cmluZyB9IH0pID0+IGRhdGEucHVzaFRvV3BlLm1lc3NhZ2UgfHwgJ1B1c2hlZCB0byBXUCBFbmdpbmUnIH0sIGFzeW5jIChncWwsIHNpdGVJZCkgPT4ge1xuICAgICAgLy8gR2V0IHJlbW90ZSBpbnN0YWxsIElEIGlmIG5vdCBwcm92aWRlZFxuICAgICAgbGV0IHJlbW90ZUluc3RhbGxJZCA9IGNtZE9wdGlvbnMucmVtb3RlO1xuICAgICAgaWYgKCFyZW1vdGVJbnN0YWxsSWQpIHtcbiAgICAgICAgY29uc3QgbGlua0RhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBnZXRXcGVMaW5rOiB7IGNvbm5lY3Rpb25zOiBBcnJheTx7IHJlbW90ZUluc3RhbGxJZDogc3RyaW5nIH0+IH0gfT4oYFxuICAgICAgICAgIHF1ZXJ5KCRzaXRlSWQ6IElEISkge1xuICAgICAgICAgICAgZ2V0V3BlTGluayhzaXRlSWQ6ICRzaXRlSWQpIHtcbiAgICAgICAgICAgICAgY29ubmVjdGlvbnMgeyByZW1vdGVJbnN0YWxsSWQgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgYCwgeyBzaXRlSWQgfSk7XG4gICAgICAgIGlmIChsaW5rRGF0YS5nZXRXcGVMaW5rLmNvbm5lY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2l0ZSBpcyBub3QgbGlua2VkIHRvIFdQIEVuZ2luZS4gVXNlIC0tcmVtb3RlIHRvIHNwZWNpZnkgaW5zdGFsbCBJRC4nKTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdGVJbnN0YWxsSWQgPSBsaW5rRGF0YS5nZXRXcGVMaW5rLmNvbm5lY3Rpb25zWzBdLnJlbW90ZUluc3RhbGxJZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwubXV0YXRlPHsgcHVzaFRvV3BlOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIG11dGF0aW9uKCRsb2NhbFNpdGVJZDogSUQhLCAkcmVtb3RlSW5zdGFsbElkOiBJRCEsICRpbmNsdWRlU3FsOiBCb29sZWFuLCAkY29uZmlybTogQm9vbGVhbikge1xuICAgICAgICAgIHB1c2hUb1dwZShsb2NhbFNpdGVJZDogJGxvY2FsU2l0ZUlkLCByZW1vdGVJbnN0YWxsSWQ6ICRyZW1vdGVJbnN0YWxsSWQsIGluY2x1ZGVTcWw6ICRpbmNsdWRlU3FsLCBjb25maXJtOiAkY29uZmlybSkge1xuICAgICAgICAgICAgc3VjY2VzcyBtZXNzYWdlIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IGxvY2FsU2l0ZUlkOiBzaXRlSWQsIHJlbW90ZUluc3RhbGxJZCwgaW5jbHVkZVNxbDogY21kT3B0aW9ucy5zcWwgfHwgZmFsc2UsIGNvbmZpcm06IGNtZE9wdGlvbnMueWVzIHx8IGZhbHNlIH0pO1xuICAgICAgaWYgKCFkYXRhLnB1c2hUb1dwZS5zdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLnB1c2hUb1dwZS5lcnJvciB8fCAnRmFpbGVkIHRvIHB1c2ggdG8gV1AgRW5naW5lJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgncHVsbCA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1B1bGwgZnJvbSBXUCBFbmdpbmUgdG8gbG9jYWwgc2l0ZScpXG4gIC5vcHRpb24oJy1yLCAtLXJlbW90ZSA8aW5zdGFsbElkPicsICdSZW1vdGUgaW5zdGFsbCBJRCcpXG4gIC5vcHRpb24oJy0tc3FsJywgJ0luY2x1ZGUgZGF0YWJhc2UnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgYXdhaXQgcnVuU2l0ZUNvbW1hbmQoc2l0ZSwgeyBhY3Rpb246ICdQdWxsaW5nIGZyb20gV1AgRW5naW5lIGZvcicsIHN1Y2Nlc3NNZXNzYWdlOiAoZGF0YTogeyBwdWxsRnJvbVdwZTogeyBtZXNzYWdlOiBzdHJpbmcgfSB9KSA9PiBkYXRhLnB1bGxGcm9tV3BlLm1lc3NhZ2UgfHwgJ1B1bGxlZCBmcm9tIFdQIEVuZ2luZScgfSwgYXN5bmMgKGdxbCwgc2l0ZUlkKSA9PiB7XG4gICAgICAvLyBHZXQgcmVtb3RlIGluc3RhbGwgSUQgaWYgbm90IHByb3ZpZGVkXG4gICAgICBsZXQgcmVtb3RlSW5zdGFsbElkID0gY21kT3B0aW9ucy5yZW1vdGU7XG4gICAgICBpZiAoIXJlbW90ZUluc3RhbGxJZCkge1xuICAgICAgICBjb25zdCBsaW5rRGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IGdldFdwZUxpbms6IHsgY29ubmVjdGlvbnM6IEFycmF5PHsgcmVtb3RlSW5zdGFsbElkOiBzdHJpbmcgfT4gfSB9PihgXG4gICAgICAgICAgcXVlcnkoJHNpdGVJZDogSUQhKSB7XG4gICAgICAgICAgICBnZXRXcGVMaW5rKHNpdGVJZDogJHNpdGVJZCkge1xuICAgICAgICAgICAgICBjb25uZWN0aW9ucyB7IHJlbW90ZUluc3RhbGxJZCB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBgLCB7IHNpdGVJZCB9KTtcbiAgICAgICAgaWYgKGxpbmtEYXRhLmdldFdwZUxpbmsuY29ubmVjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaXRlIGlzIG5vdCBsaW5rZWQgdG8gV1AgRW5naW5lLiBVc2UgLS1yZW1vdGUgdG8gc3BlY2lmeSBpbnN0YWxsIElELicpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW90ZUluc3RhbGxJZCA9IGxpbmtEYXRhLmdldFdwZUxpbmsuY29ubmVjdGlvbnNbMF0ucmVtb3RlSW5zdGFsbElkO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5tdXRhdGU8eyBwdWxsRnJvbVdwZTogeyBzdWNjZXNzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBtdXRhdGlvbigkbG9jYWxTaXRlSWQ6IElEISwgJHJlbW90ZUluc3RhbGxJZDogSUQhLCAkaW5jbHVkZVNxbDogQm9vbGVhbikge1xuICAgICAgICAgIHB1bGxGcm9tV3BlKGxvY2FsU2l0ZUlkOiAkbG9jYWxTaXRlSWQsIHJlbW90ZUluc3RhbGxJZDogJHJlbW90ZUluc3RhbGxJZCwgaW5jbHVkZVNxbDogJGluY2x1ZGVTcWwpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgbWVzc2FnZSBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCwgeyBsb2NhbFNpdGVJZDogc2l0ZUlkLCByZW1vdGVJbnN0YWxsSWQsIGluY2x1ZGVTcWw6IGNtZE9wdGlvbnMuc3FsIHx8IGZhbHNlIH0pO1xuICAgICAgaWYgKCFkYXRhLnB1bGxGcm9tV3BlLnN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGRhdGEucHVsbEZyb21XcGUuZXJyb3IgfHwgJ0ZhaWxlZCB0byBwdWxsIGZyb20gV1AgRW5naW5lJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfSk7XG5cbndwZVxuICAuY29tbWFuZCgnaGlzdG9yeSA8c2l0ZT4nKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgc3luYyBoaXN0b3J5IGZvciBhIHNpdGUnKVxuICAub3B0aW9uKCctbCwgLS1saW1pdCA8bj4nLCAnTnVtYmVyIG9mIGV2ZW50cyB0byBzaG93JywgJzEwJylcbiAgLmFjdGlvbihhc3luYyAoc2l0ZSwgY21kT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9wdHMgPSBwcm9ncmFtLm9wdHMoKSBhcyBGb3JtYXR0ZXJPcHRpb25zO1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldE91dHB1dEZvcm1hdChnbG9iYWxPcHRzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBncWwgPSBhd2FpdCBlbnN1cmVDb25uZWN0ZWQoZ2xvYmFsT3B0cyk7XG4gICAgICBjb25zdCBzaXRlSWQgPSBhd2FpdCBmaW5kU2l0ZUlkKGdxbCwgc2l0ZSk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBncWwucXVlcnk8eyBnZXRTeW5jSGlzdG9yeTogeyBzdWNjZXNzOiBib29sZWFuOyBldmVudHM6IEFycmF5PHsgcmVtb3RlSW5zdGFsbE5hbWU6IHN0cmluZzsgdGltZXN0YW1wOiBzdHJpbmc7IGRpcmVjdGlvbjogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9PjsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB9PihgXG4gICAgICAgIHF1ZXJ5KCRzaXRlSWQ6IElEISwgJGxpbWl0OiBJbnQpIHtcbiAgICAgICAgICBnZXRTeW5jSGlzdG9yeShzaXRlSWQ6ICRzaXRlSWQsIGxpbWl0OiAkbGltaXQpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NcbiAgICAgICAgICAgIGV2ZW50cyB7IHJlbW90ZUluc3RhbGxOYW1lIHRpbWVzdGFtcCBkaXJlY3Rpb24gc3RhdHVzIH1cbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLCB7IHNpdGVJZCwgbGltaXQ6IHBhcnNlSW50KGNtZE9wdGlvbnMubGltaXQsIDEwKSB9KTtcblxuICAgICAgaWYgKCFkYXRhLmdldFN5bmNIaXN0b3J5LnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihkYXRhLmdldFN5bmNIaXN0b3J5LmVycm9yIHx8ICdGYWlsZWQgdG8gZ2V0IHN5bmMgaGlzdG9yeScpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5nZXRTeW5jSGlzdG9yeS5ldmVudHMsIG51bGwsIDIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5nZXRTeW5jSGlzdG9yeS5ldmVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyBzeW5jIGhpc3RvcnkgZm91bmQuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnXFxuU3luYyBIaXN0b3J5OicpO1xuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGRhdGEuZ2V0U3luY0hpc3RvcnkuZXZlbnRzKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGV2ZW50LnRpbWVzdGFtcCkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgICBjb25zdCBhcnJvdyA9IGV2ZW50LmRpcmVjdGlvbiA9PT0gJ3B1c2gnID8gJ+KGkicgOiAn4oaQJztcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAke2RhdGV9ICR7YXJyb3d9ICR7ZXZlbnQucmVtb3RlSW5zdGFsbE5hbWV9ICgke2V2ZW50LnN0YXR1c30pYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG53cGVcbiAgLmNvbW1hbmQoJ2RpZmYgPHNpdGU+JylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IGZpbGUgY2hhbmdlcyBiZXR3ZWVuIGxvY2FsIGFuZCBXUCBFbmdpbmUnKVxuICAub3B0aW9uKCctZCwgLS1kaXJlY3Rpb24gPGRpcj4nLCAnRGlyZWN0aW9uIChwdXNofHB1bGwpJywgJ3B1c2gnKVxuICAuYWN0aW9uKGFzeW5jIChzaXRlLCBjbWRPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZ2xvYmFsT3B0cyA9IHByb2dyYW0ub3B0cygpIGFzIEZvcm1hdHRlck9wdGlvbnM7XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0T3V0cHV0Rm9ybWF0KGdsb2JhbE9wdHMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdxbCA9IGF3YWl0IGVuc3VyZUNvbm5lY3RlZChnbG9iYWxPcHRzKTtcbiAgICAgIGNvbnN0IHNpdGVJZCA9IGF3YWl0IGZpbmRTaXRlSWQoZ3FsLCBzaXRlKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdxbC5xdWVyeTx7IGdldFNpdGVDaGFuZ2VzOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGFkZGVkOiBBcnJheTx7IHBhdGg6IHN0cmluZyB9PjsgbW9kaWZpZWQ6IEFycmF5PHsgcGF0aDogc3RyaW5nIH0+OyBkZWxldGVkOiBBcnJheTx7IHBhdGg6IHN0cmluZyB9PjsgdG90YWxDaGFuZ2VzOiBudW1iZXI7IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfT4oYFxuICAgICAgICBxdWVyeSgkc2l0ZUlkOiBJRCEsICRkaXJlY3Rpb246IFN0cmluZykge1xuICAgICAgICAgIGdldFNpdGVDaGFuZ2VzKHNpdGVJZDogJHNpdGVJZCwgZGlyZWN0aW9uOiAkZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBzdWNjZXNzXG4gICAgICAgICAgICBhZGRlZCB7IHBhdGggfVxuICAgICAgICAgICAgbW9kaWZpZWQgeyBwYXRoIH1cbiAgICAgICAgICAgIGRlbGV0ZWQgeyBwYXRoIH1cbiAgICAgICAgICAgIHRvdGFsQ2hhbmdlc1xuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsIHsgc2l0ZUlkLCBkaXJlY3Rpb246IGNtZE9wdGlvbnMuZGlyZWN0aW9uIH0pO1xuXG4gICAgICBpZiAoIWRhdGEuZ2V0U2l0ZUNoYW5nZXMuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdEVycm9yKGRhdGEuZ2V0U2l0ZUNoYW5nZXMuZXJyb3IgfHwgJ0ZhaWxlZCB0byBnZXQgY2hhbmdlcycpKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YS5nZXRTaXRlQ2hhbmdlcywgbnVsbCwgMikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IGRhdGEuZ2V0U2l0ZUNoYW5nZXM7XG4gICAgICAgIGNvbnNvbGUubG9nKGBcXG5DaGFuZ2VzIHRvICR7Y21kT3B0aW9ucy5kaXJlY3Rpb259ICgke2NoYW5nZXMudG90YWxDaGFuZ2VzfSB0b3RhbCk6YCk7XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuYWRkZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdcXG4gIEFkZGVkOicpO1xuICAgICAgICAgIGNoYW5nZXMuYWRkZWQuZm9yRWFjaCgoZikgPT4gY29uc29sZS5sb2coYCAgICArICR7Zi5wYXRofWApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5tb2RpZmllZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1xcbiAgTW9kaWZpZWQ6Jyk7XG4gICAgICAgICAgY2hhbmdlcy5tb2RpZmllZC5mb3JFYWNoKChmKSA9PiBjb25zb2xlLmxvZyhgICAgIH4gJHtmLnBhdGh9YCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmRlbGV0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdcXG4gIERlbGV0ZWQ6Jyk7XG4gICAgICAgICAgY2hhbmdlcy5kZWxldGVkLmZvckVhY2goKGYpID0+IGNvbnNvbGUubG9nKGAgICAgLSAke2YucGF0aH1gKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMudG90YWxDaGFuZ2VzID09PSAwKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJyAgTm8gY2hhbmdlcyBkZXRlY3RlZC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0RXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhlbHBlciBGdW5jdGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBGaW5kIHNpdGUgSUQgYnkgbmFtZSBvciBJRFxuICpcbiAqIE9wdGltaXphdGlvbjogRmlyc3QgdHJpZXMgZGlyZWN0IElEIGxvb2t1cCAoTygxKSkgYmVmb3JlIGZhbGxpbmcgYmFjayB0b1xuICogZmV0Y2hpbmcgYWxsIHNpdGVzIGZvciBuYW1lIG1hdGNoaW5nIChPKG4pKS4gVGhpcyBzaWduaWZpY2FudGx5IGltcHJvdmVzXG4gKiBwZXJmb3JtYW5jZSB3aGVuIHVzZXJzIHNwZWNpZnkgc2l0ZSBJRHMgZGlyZWN0bHkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpbmRTaXRlSWQoZ3FsOiBHcmFwaFFMQ2xpZW50LCBzaXRlUXVlcnk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIC8vIFRyeSBkaXJlY3QgSUQgbG9va3VwIGZpcnN0IC0gbXVjaCBmYXN0ZXIgZm9yIGV4YWN0IElEIG1hdGNoZXNcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXJlY3RMb29rdXAgPSBhd2FpdCBncWwucXVlcnk8eyBzaXRlOiB7IGlkOiBzdHJpbmcgfSB8IG51bGwgfT4oXG4gICAgICBgcXVlcnkgR2V0U2l0ZUJ5SWQoJGlkOiBJRCEpIHsgc2l0ZShpZDogJGlkKSB7IGlkIH0gfWAsXG4gICAgICB7IGlkOiBzaXRlUXVlcnkgfVxuICAgICk7XG5cbiAgICBpZiAoZGlyZWN0TG9va3VwLnNpdGUpIHtcbiAgICAgIHJldHVybiBkaXJlY3RMb29rdXAuc2l0ZS5pZDtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIElEIGxvb2t1cCBmYWlsZWQsIGZhbGwgdGhyb3VnaCB0byBuYW1lIHNlYXJjaFxuICB9XG5cbiAgLy8gRmFsbCBiYWNrIHRvIGZldGNoaW5nIGFsbCBzaXRlcyBmb3IgbmFtZSBtYXRjaGluZ1xuICBjb25zdCBkYXRhID0gYXdhaXQgZ3FsLnF1ZXJ5PHsgc2l0ZXM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0+IH0+KGBcbiAgICBxdWVyeSB7IHNpdGVzIHsgaWQgbmFtZSB9IH1cbiAgYCk7XG5cbiAgY29uc3Qgc2l0ZSA9IGRhdGEuc2l0ZXMuZmluZChcbiAgICAocykgPT4gcy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2l0ZVF1ZXJ5LnRvTG93ZXJDYXNlKCkpXG4gICk7XG5cbiAgaWYgKCFzaXRlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTaXRlIG5vdCBmb3VuZDogXCIke3NpdGVRdWVyeX1cImApO1xuICB9XG5cbiAgcmV0dXJuIHNpdGUuaWQ7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNraWxsIENvbW1hbmQgKGZvciBBSSBhc3Npc3RhbnRzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdza2lsbCcpXG4gIC5kZXNjcmlwdGlvbignSW5zdGFsbCBDbGF1ZGUgQ29kZSBza2lsbCBmb3IgQUkgYXNzaXN0YW50IGludGVncmF0aW9uJylcbiAgLmFyZ3VtZW50KCdbYWN0aW9uXScsICdBY3Rpb246IGluc3RhbGwsIHVuaW5zdGFsbCwgb3IgcGF0aCcsICdpbnN0YWxsJylcbiAgLmFjdGlvbihhc3luYyAoYWN0aW9uOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBza2lsbE5hbWUgPSAnbHdwJztcbiAgICBjb25zdCB1c2VyU2tpbGxzRGlyID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5jbGF1ZGUnLCAnc2tpbGxzJywgc2tpbGxOYW1lKTtcbiAgICBjb25zdCBidW5kbGVkU2tpbGxEaXIgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnc2tpbGwnKTtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlICdpbnN0YWxsJzoge1xuICAgICAgICAvLyBDaGVjayBpZiBza2lsbCBpcyBidW5kbGVkXG4gICAgICAgIGNvbnN0IGJ1bmRsZWRTa2lsbEZpbGUgPSBwYXRoLmpvaW4oYnVuZGxlZFNraWxsRGlyLCAnU0tJTEwubWQnKTtcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGJ1bmRsZWRTa2lsbEZpbGUpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcignU2tpbGwgbm90IGZvdW5kIGluIHBhY2thZ2UuIFBsZWFzZSByZWluc3RhbGwgdGhlIENMSS4nKSk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIHVzZXIgc2tpbGxzIGRpcmVjdG9yeVxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0aC5kaXJuYW1lKHVzZXJTa2lsbHNEaXIpKSkge1xuICAgICAgICAgIGZzLm1rZGlyU3luYyhwYXRoLmRpcm5hbWUodXNlclNraWxsc0RpciksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBpbnN0YWxsZWRcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmModXNlclNraWxsc0RpcikpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhmb3JtYXRTdWNjZXNzKGBTa2lsbCBhbHJlYWR5IGluc3RhbGxlZCBhdCAke3VzZXJTa2lsbHNEaXJ9YCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBzeW1saW5rIHRvIGJ1bmRsZWQgc2tpbGxcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmcy5zeW1saW5rU3luYyhidW5kbGVkU2tpbGxEaXIsIHVzZXJTa2lsbHNEaXIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFN1Y2Nlc3MoYEluc3RhbGxlZCBDbGF1ZGUgQ29kZSBza2lsbCB0byAke3VzZXJTa2lsbHNEaXJ9YCkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdcXG5DbGF1ZGUgQ29kZSB3aWxsIG5vdyByZWNvZ25pemUgbHdwIGNvbW1hbmRzLicpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdUcnkgYXNraW5nOiBcIkxpc3QgbXkgTG9jYWwgc2l0ZXNcIiBvciBcIlN0YXJ0IHRoZSBibG9nIHNpdGVcIicpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgLy8gSWYgc3ltbGluayBmYWlscywgY29weSB0aGUgZmlsZXNcbiAgICAgICAgICBmcy5ta2RpclN5bmModXNlclNraWxsc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgZnMuY29weUZpbGVTeW5jKGJ1bmRsZWRTa2lsbEZpbGUsIHBhdGguam9pbih1c2VyU2tpbGxzRGlyLCAnU0tJTEwubWQnKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coZm9ybWF0U3VjY2VzcyhgSW5zdGFsbGVkIENsYXVkZSBDb2RlIHNraWxsIHRvICR7dXNlclNraWxsc0Rpcn1gKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1xcbkNsYXVkZSBDb2RlIHdpbGwgbm93IHJlY29nbml6ZSBsd3AgY29tbWFuZHMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3VuaW5zdGFsbCc6IHtcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHVzZXJTa2lsbHNEaXIpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1NraWxsIG5vdCBpbnN0YWxsZWQuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzdGF0ID0gZnMubHN0YXRTeW5jKHVzZXJTa2lsbHNEaXIpO1xuICAgICAgICAgIGlmIChzdGF0LmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgIGZzLnVubGlua1N5bmModXNlclNraWxsc0Rpcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZzLnJtU3luYyh1c2VyU2tpbGxzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coZm9ybWF0U3VjY2VzcygnVW5pbnN0YWxsZWQgQ2xhdWRlIENvZGUgc2tpbGwuJykpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihgRmFpbGVkIHRvIHVuaW5zdGFsbDogJHtlcnJvci5tZXNzYWdlfWApKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3BhdGgnOiB7XG4gICAgICAgIGNvbnNvbGUubG9nKHVzZXJTa2lsbHNEaXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRFcnJvcihgVW5rbm93biBhY3Rpb246ICR7YWN0aW9ufS4gVXNlIGluc3RhbGwsIHVuaW5zdGFsbCwgb3IgcGF0aC5gKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH0pO1xuXG4vLyBDaGVjayBmb3IgdXBkYXRlcyAoc2tpcCBmb3IgdXBkYXRlIGNvbW1hbmQgaXRzZWxmIGFuZCBxdWlldCBtb2RlKVxuY29uc3QgYXJncyA9IHByb2Nlc3MuYXJndi5zbGljZSgyKTtcbmNvbnN0IGlzVXBkYXRlQ29tbWFuZCA9IGFyZ3NbMF0gPT09ICd1cGRhdGUnO1xuY29uc3QgaXNRdWlldCA9IGFyZ3MuaW5jbHVkZXMoJy0tcXVpZXQnKSB8fCBhcmdzLmluY2x1ZGVzKCctLWpzb24nKTtcblxuaWYgKCFpc1VwZGF0ZUNvbW1hbmQgJiYgIWlzUXVpZXQpIHtcbiAgLy8gRmlyZSBhbmQgZm9yZ2V0IC0gZG9uJ3QgYmxvY2sgc3RhcnR1cFxuICBjaGVja0ZvclVwZGF0ZXMoKS5jYXRjaCgoKSA9PiB7fSk7XG59XG5cbi8vIFBhcnNlIGFuZCBleGVjdXRlXG5wcm9ncmFtLnBhcnNlKCk7XG4iXX0=
|